.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-html / lib / server.js
1 (function(e, a) { for(var i in a) e[i] = a[i]; if(a.__esModule) Object.defineProperty(e, "__esModule", { value: true }); }(exports,
2 /******/ (() => { // webpackBootstrap
3 /******/        "use strict";
4 /******/        var __webpack_modules__ = ([
5 /* 0 */,
6 /* 1 */,
7 /* 2 */,
8 /* 3 */
9 /***/ ((module) => {
10
11 module.exports = require("path");;
12
13 /***/ }),
14 /* 4 */
15 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
16
17
18 /* --------------------------------------------------------------------------------------------
19  * Copyright (c) Microsoft Corporation. All rights reserved.
20  * Licensed under the MIT License. See License.txt in the project root for license information.
21  * ------------------------------------------------------------------------------------------ */
22 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23     if (k2 === undefined) k2 = k;
24     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
25 }) : (function(o, m, k, k2) {
26     if (k2 === undefined) k2 = k;
27     o[k2] = m[k];
28 }));
29 var __exportStar = (this && this.__exportStar) || function(m, exports) {
30     for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
31 };
32 Object.defineProperty(exports, "__esModule", ({ value: true }));
33 exports.createProtocolConnection = void 0;
34 const node_1 = __webpack_require__(5);
35 __exportStar(__webpack_require__(5), exports);
36 __exportStar(__webpack_require__(25), exports);
37 function createProtocolConnection(input, output, logger, options) {
38     return node_1.createMessageConnection(input, output, logger, options);
39 }
40 exports.createProtocolConnection = createProtocolConnection;
41 //# sourceMappingURL=main.js.map
42
43 /***/ }),
44 /* 5 */
45 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
46
47 /* --------------------------------------------------------------------------------------------
48  * Copyright (c) Microsoft Corporation. All rights reserved.
49  * Licensed under the MIT License. See License.txt in the project root for license information.
50  * ----------------------------------------------------------------------------------------- */
51
52
53 module.exports = __webpack_require__(6);
54
55 /***/ }),
56 /* 6 */
57 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
58
59
60 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
61     if (k2 === undefined) k2 = k;
62     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
63 }) : (function(o, m, k, k2) {
64     if (k2 === undefined) k2 = k;
65     o[k2] = m[k];
66 }));
67 var __exportStar = (this && this.__exportStar) || function(m, exports) {
68     for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
69 };
70 Object.defineProperty(exports, "__esModule", ({ value: true }));
71 exports.createMessageConnection = exports.createServerSocketTransport = exports.createClientSocketTransport = exports.createServerPipeTransport = exports.createClientPipeTransport = exports.generateRandomPipeName = exports.StreamMessageWriter = exports.StreamMessageReader = exports.SocketMessageWriter = exports.SocketMessageReader = exports.IPCMessageWriter = exports.IPCMessageReader = void 0;
72 /* --------------------------------------------------------------------------------------------
73  * Copyright (c) Microsoft Corporation. All rights reserved.
74  * Licensed under the MIT License. See License.txt in the project root for license information.
75  * ----------------------------------------------------------------------------------------- */
76 const ril_1 = __webpack_require__(7);
77 // Install the node runtime abstract.
78 ril_1.default.install();
79 const api_1 = __webpack_require__(12);
80 const path = __webpack_require__(3);
81 const os = __webpack_require__(22);
82 const crypto_1 = __webpack_require__(23);
83 const net_1 = __webpack_require__(24);
84 __exportStar(__webpack_require__(12), exports);
85 class IPCMessageReader extends api_1.AbstractMessageReader {
86     constructor(process) {
87         super();
88         this.process = process;
89         let eventEmitter = this.process;
90         eventEmitter.on('error', (error) => this.fireError(error));
91         eventEmitter.on('close', () => this.fireClose());
92     }
93     listen(callback) {
94         this.process.on('message', callback);
95         return api_1.Disposable.create(() => this.process.off('message', callback));
96     }
97 }
98 exports.IPCMessageReader = IPCMessageReader;
99 class IPCMessageWriter extends api_1.AbstractMessageWriter {
100     constructor(process) {
101         super();
102         this.process = process;
103         this.errorCount = 0;
104         let eventEmitter = this.process;
105         eventEmitter.on('error', (error) => this.fireError(error));
106         eventEmitter.on('close', () => this.fireClose);
107     }
108     write(msg) {
109         try {
110             if (typeof this.process.send === 'function') {
111                 this.process.send(msg, undefined, undefined, (error) => {
112                     if (error) {
113                         this.errorCount++;
114                         this.handleError(error, msg);
115                     }
116                     else {
117                         this.errorCount = 0;
118                     }
119                 });
120             }
121             return Promise.resolve();
122         }
123         catch (error) {
124             this.handleError(error, msg);
125             return Promise.reject(error);
126         }
127     }
128     handleError(error, msg) {
129         this.errorCount++;
130         this.fireError(error, msg, this.errorCount);
131     }
132     end() {
133     }
134 }
135 exports.IPCMessageWriter = IPCMessageWriter;
136 class SocketMessageReader extends api_1.ReadableStreamMessageReader {
137     constructor(socket, encoding = 'utf-8') {
138         super(ril_1.default().stream.asReadableStream(socket), encoding);
139     }
140 }
141 exports.SocketMessageReader = SocketMessageReader;
142 class SocketMessageWriter extends api_1.WriteableStreamMessageWriter {
143     constructor(socket, options) {
144         super(ril_1.default().stream.asWritableStream(socket), options);
145         this.socket = socket;
146     }
147     dispose() {
148         super.dispose();
149         this.socket.destroy();
150     }
151 }
152 exports.SocketMessageWriter = SocketMessageWriter;
153 class StreamMessageReader extends api_1.ReadableStreamMessageReader {
154     constructor(readble, encoding) {
155         super(ril_1.default().stream.asReadableStream(readble), encoding);
156     }
157 }
158 exports.StreamMessageReader = StreamMessageReader;
159 class StreamMessageWriter extends api_1.WriteableStreamMessageWriter {
160     constructor(writable, options) {
161         super(ril_1.default().stream.asWritableStream(writable), options);
162     }
163 }
164 exports.StreamMessageWriter = StreamMessageWriter;
165 const XDG_RUNTIME_DIR = process.env['XDG_RUNTIME_DIR'];
166 const safeIpcPathLengths = new Map([
167     ['linux', 107],
168     ['darwin', 103]
169 ]);
170 function generateRandomPipeName() {
171     const randomSuffix = crypto_1.randomBytes(21).toString('hex');
172     if (process.platform === 'win32') {
173         return `\\\\.\\pipe\\vscode-jsonrpc-${randomSuffix}-sock`;
174     }
175     let result;
176     if (XDG_RUNTIME_DIR) {
177         result = path.join(XDG_RUNTIME_DIR, `vscode-ipc-${randomSuffix}.sock`);
178     }
179     else {
180         result = path.join(os.tmpdir(), `vscode-${randomSuffix}.sock`);
181     }
182     const limit = safeIpcPathLengths.get(process.platform);
183     if (limit !== undefined && result.length >= limit) {
184         ril_1.default().console.warn(`WARNING: IPC handle "${result}" is longer than ${limit} characters.`);
185     }
186     return result;
187 }
188 exports.generateRandomPipeName = generateRandomPipeName;
189 function createClientPipeTransport(pipeName, encoding = 'utf-8') {
190     let connectResolve;
191     const connected = new Promise((resolve, _reject) => {
192         connectResolve = resolve;
193     });
194     return new Promise((resolve, reject) => {
195         let server = net_1.createServer((socket) => {
196             server.close();
197             connectResolve([
198                 new SocketMessageReader(socket, encoding),
199                 new SocketMessageWriter(socket, encoding)
200             ]);
201         });
202         server.on('error', reject);
203         server.listen(pipeName, () => {
204             server.removeListener('error', reject);
205             resolve({
206                 onConnected: () => { return connected; }
207             });
208         });
209     });
210 }
211 exports.createClientPipeTransport = createClientPipeTransport;
212 function createServerPipeTransport(pipeName, encoding = 'utf-8') {
213     const socket = net_1.createConnection(pipeName);
214     return [
215         new SocketMessageReader(socket, encoding),
216         new SocketMessageWriter(socket, encoding)
217     ];
218 }
219 exports.createServerPipeTransport = createServerPipeTransport;
220 function createClientSocketTransport(port, encoding = 'utf-8') {
221     let connectResolve;
222     const connected = new Promise((resolve, _reject) => {
223         connectResolve = resolve;
224     });
225     return new Promise((resolve, reject) => {
226         const server = net_1.createServer((socket) => {
227             server.close();
228             connectResolve([
229                 new SocketMessageReader(socket, encoding),
230                 new SocketMessageWriter(socket, encoding)
231             ]);
232         });
233         server.on('error', reject);
234         server.listen(port, '127.0.0.1', () => {
235             server.removeListener('error', reject);
236             resolve({
237                 onConnected: () => { return connected; }
238             });
239         });
240     });
241 }
242 exports.createClientSocketTransport = createClientSocketTransport;
243 function createServerSocketTransport(port, encoding = 'utf-8') {
244     const socket = net_1.createConnection(port, '127.0.0.1');
245     return [
246         new SocketMessageReader(socket, encoding),
247         new SocketMessageWriter(socket, encoding)
248     ];
249 }
250 exports.createServerSocketTransport = createServerSocketTransport;
251 function isReadableStream(value) {
252     const candidate = value;
253     return candidate.read !== undefined && candidate.addListener !== undefined;
254 }
255 function isWritableStream(value) {
256     const candidate = value;
257     return candidate.write !== undefined && candidate.addListener !== undefined;
258 }
259 function createMessageConnection(input, output, logger, options) {
260     if (!logger) {
261         logger = api_1.NullLogger;
262     }
263     const reader = isReadableStream(input) ? new StreamMessageReader(input) : input;
264     const writer = isWritableStream(output) ? new StreamMessageWriter(output) : output;
265     if (api_1.ConnectionStrategy.is(options)) {
266         options = { connectionStrategy: options };
267     }
268     return api_1.createMessageConnection(reader, writer, logger, options);
269 }
270 exports.createMessageConnection = createMessageConnection;
271 //# sourceMappingURL=main.js.map
272
273 /***/ }),
274 /* 7 */
275 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
276
277
278 /* --------------------------------------------------------------------------------------------
279  * Copyright (c) Microsoft Corporation. All rights reserved.
280  * Licensed under the MIT License. See License.txt in the project root for license information.
281  * ------------------------------------------------------------------------------------------ */
282 Object.defineProperty(exports, "__esModule", ({ value: true }));
283 const ral_1 = __webpack_require__(8);
284 const util_1 = __webpack_require__(9);
285 const disposable_1 = __webpack_require__(10);
286 const messageBuffer_1 = __webpack_require__(11);
287 class MessageBuffer extends messageBuffer_1.AbstractMessageBuffer {
288     constructor(encoding = 'utf-8') {
289         super(encoding);
290     }
291     emptyBuffer() {
292         return MessageBuffer.emptyBuffer;
293     }
294     fromString(value, encoding) {
295         return Buffer.from(value, encoding);
296     }
297     toString(value, encoding) {
298         if (value instanceof Buffer) {
299             return value.toString(encoding);
300         }
301         else {
302             return new util_1.TextDecoder(encoding).decode(value);
303         }
304     }
305     asNative(buffer, length) {
306         if (length === undefined) {
307             return buffer instanceof Buffer ? buffer : Buffer.from(buffer);
308         }
309         else {
310             return buffer instanceof Buffer ? buffer.slice(0, length) : Buffer.from(buffer, 0, length);
311         }
312     }
313     allocNative(length) {
314         return Buffer.allocUnsafe(length);
315     }
316 }
317 MessageBuffer.emptyBuffer = Buffer.allocUnsafe(0);
318 class ReadableStreamWrapper {
319     constructor(stream) {
320         this.stream = stream;
321     }
322     onClose(listener) {
323         this.stream.on('close', listener);
324         return disposable_1.Disposable.create(() => this.stream.off('close', listener));
325     }
326     onError(listener) {
327         this.stream.on('error', listener);
328         return disposable_1.Disposable.create(() => this.stream.off('error', listener));
329     }
330     onEnd(listener) {
331         this.stream.on('end', listener);
332         return disposable_1.Disposable.create(() => this.stream.off('end', listener));
333     }
334     onData(listener) {
335         this.stream.on('data', listener);
336         return disposable_1.Disposable.create(() => this.stream.off('data', listener));
337     }
338 }
339 class WritableStreamWrapper {
340     constructor(stream) {
341         this.stream = stream;
342     }
343     onClose(listener) {
344         this.stream.on('close', listener);
345         return disposable_1.Disposable.create(() => this.stream.off('close', listener));
346     }
347     onError(listener) {
348         this.stream.on('error', listener);
349         return disposable_1.Disposable.create(() => this.stream.off('error', listener));
350     }
351     onEnd(listener) {
352         this.stream.on('end', listener);
353         return disposable_1.Disposable.create(() => this.stream.off('end', listener));
354     }
355     write(data, encoding) {
356         return new Promise((resolve, reject) => {
357             const callback = (error) => {
358                 if (error === undefined || error === null) {
359                     resolve();
360                 }
361                 else {
362                     reject(error);
363                 }
364             };
365             if (typeof data === 'string') {
366                 this.stream.write(data, encoding, callback);
367             }
368             else {
369                 this.stream.write(data, callback);
370             }
371         });
372     }
373     end() {
374         this.stream.end();
375     }
376 }
377 const _ril = Object.freeze({
378     messageBuffer: Object.freeze({
379         create: (encoding) => new MessageBuffer(encoding)
380     }),
381     applicationJson: Object.freeze({
382         encoder: Object.freeze({
383             name: 'application/json',
384             encode: (msg, options) => {
385                 try {
386                     return Promise.resolve(Buffer.from(JSON.stringify(msg, undefined, 0), options.charset));
387                 }
388                 catch (err) {
389                     return Promise.reject(err);
390                 }
391             }
392         }),
393         decoder: Object.freeze({
394             name: 'application/json',
395             decode: (buffer, options) => {
396                 try {
397                     if (buffer instanceof Buffer) {
398                         return Promise.resolve(JSON.parse(buffer.toString(options.charset)));
399                     }
400                     else {
401                         return Promise.resolve(JSON.parse(new util_1.TextDecoder(options.charset).decode(buffer)));
402                     }
403                 }
404                 catch (err) {
405                     return Promise.reject(err);
406                 }
407             }
408         })
409     }),
410     stream: Object.freeze({
411         asReadableStream: (stream) => new ReadableStreamWrapper(stream),
412         asWritableStream: (stream) => new WritableStreamWrapper(stream)
413     }),
414     console: console,
415     timer: Object.freeze({
416         setTimeout(callback, ms, ...args) {
417             return setTimeout(callback, ms, ...args);
418         },
419         clearTimeout(handle) {
420             clearTimeout(handle);
421         },
422         setImmediate(callback, ...args) {
423             return setImmediate(callback, ...args);
424         },
425         clearImmediate(handle) {
426             clearImmediate(handle);
427         }
428     })
429 });
430 function RIL() {
431     return _ril;
432 }
433 (function (RIL) {
434     function install() {
435         ral_1.default.install(_ril);
436     }
437     RIL.install = install;
438 })(RIL || (RIL = {}));
439 exports.default = RIL;
440 //# sourceMappingURL=ril.js.map
441
442 /***/ }),
443 /* 8 */
444 /***/ ((__unused_webpack_module, exports) => {
445
446
447 /* --------------------------------------------------------------------------------------------
448  * Copyright (c) Microsoft Corporation. All rights reserved.
449  * Licensed under the MIT License. See License.txt in the project root for license information.
450  * ------------------------------------------------------------------------------------------ */
451 Object.defineProperty(exports, "__esModule", ({ value: true }));
452 let _ral;
453 function RAL() {
454     if (_ral === undefined) {
455         throw new Error(`No runtime abstraction layer installed`);
456     }
457     return _ral;
458 }
459 (function (RAL) {
460     function install(ral) {
461         if (ral === undefined) {
462             throw new Error(`No runtime abstraction layer provided`);
463         }
464         _ral = ral;
465     }
466     RAL.install = install;
467 })(RAL || (RAL = {}));
468 exports.default = RAL;
469 //# sourceMappingURL=ral.js.map
470
471 /***/ }),
472 /* 9 */
473 /***/ ((module) => {
474
475 module.exports = require("util");;
476
477 /***/ }),
478 /* 10 */
479 /***/ ((__unused_webpack_module, exports) => {
480
481
482 /*---------------------------------------------------------------------------------------------
483  *  Copyright (c) Microsoft Corporation. All rights reserved.
484  *  Licensed under the MIT License. See License.txt in the project root for license information.
485  *--------------------------------------------------------------------------------------------*/
486 Object.defineProperty(exports, "__esModule", ({ value: true }));
487 exports.Disposable = void 0;
488 var Disposable;
489 (function (Disposable) {
490     function create(func) {
491         return {
492             dispose: func
493         };
494     }
495     Disposable.create = create;
496 })(Disposable = exports.Disposable || (exports.Disposable = {}));
497 //# sourceMappingURL=disposable.js.map
498
499 /***/ }),
500 /* 11 */
501 /***/ ((__unused_webpack_module, exports) => {
502
503
504 /*---------------------------------------------------------------------------------------------
505  *  Copyright (c) Microsoft Corporation. All rights reserved.
506  *  Licensed under the MIT License. See License.txt in the project root for license information.
507  *--------------------------------------------------------------------------------------------*/
508 Object.defineProperty(exports, "__esModule", ({ value: true }));
509 exports.AbstractMessageBuffer = void 0;
510 const CR = 13;
511 const LF = 10;
512 const CRLF = '\r\n';
513 class AbstractMessageBuffer {
514     constructor(encoding = 'utf-8') {
515         this._encoding = encoding;
516         this._chunks = [];
517         this._totalLength = 0;
518     }
519     get encoding() {
520         return this._encoding;
521     }
522     append(chunk) {
523         const toAppend = typeof chunk === 'string' ? this.fromString(chunk, this._encoding) : chunk;
524         this._chunks.push(toAppend);
525         this._totalLength += toAppend.byteLength;
526     }
527     tryReadHeaders() {
528         if (this._chunks.length === 0) {
529             return undefined;
530         }
531         let state = 0;
532         let chunkIndex = 0;
533         let offset = 0;
534         let chunkBytesRead = 0;
535         row: while (chunkIndex < this._chunks.length) {
536             const chunk = this._chunks[chunkIndex];
537             offset = 0;
538             column: while (offset < chunk.length) {
539                 const value = chunk[offset];
540                 switch (value) {
541                     case CR:
542                         switch (state) {
543                             case 0:
544                                 state = 1;
545                                 break;
546                             case 2:
547                                 state = 3;
548                                 break;
549                             default:
550                                 state = 0;
551                         }
552                         break;
553                     case LF:
554                         switch (state) {
555                             case 1:
556                                 state = 2;
557                                 break;
558                             case 3:
559                                 state = 4;
560                                 offset++;
561                                 break row;
562                             default:
563                                 state = 0;
564                         }
565                         break;
566                     default:
567                         state = 0;
568                 }
569                 offset++;
570             }
571             chunkBytesRead += chunk.byteLength;
572             chunkIndex++;
573         }
574         if (state !== 4) {
575             return undefined;
576         }
577         // The buffer contains the two CRLF at the end. So we will
578         // have two empty lines after the split at the end as well.
579         const buffer = this._read(chunkBytesRead + offset);
580         const result = new Map();
581         const headers = this.toString(buffer, 'ascii').split(CRLF);
582         if (headers.length < 2) {
583             return result;
584         }
585         for (let i = 0; i < headers.length - 2; i++) {
586             const header = headers[i];
587             const index = header.indexOf(':');
588             if (index === -1) {
589                 throw new Error('Message header must separate key and value using :');
590             }
591             const key = header.substr(0, index);
592             const value = header.substr(index + 1).trim();
593             result.set(key, value);
594         }
595         return result;
596     }
597     tryReadBody(length) {
598         if (this._totalLength < length) {
599             return undefined;
600         }
601         return this._read(length);
602     }
603     get numberOfBytes() {
604         return this._totalLength;
605     }
606     _read(byteCount) {
607         if (byteCount === 0) {
608             return this.emptyBuffer();
609         }
610         if (byteCount > this._totalLength) {
611             throw new Error(`Cannot read so many bytes!`);
612         }
613         if (this._chunks[0].byteLength === byteCount) {
614             // super fast path, precisely first chunk must be returned
615             const chunk = this._chunks[0];
616             this._chunks.shift();
617             this._totalLength -= byteCount;
618             return this.asNative(chunk);
619         }
620         if (this._chunks[0].byteLength > byteCount) {
621             // fast path, the reading is entirely within the first chunk
622             const chunk = this._chunks[0];
623             const result = this.asNative(chunk, byteCount);
624             this._chunks[0] = chunk.slice(byteCount);
625             this._totalLength -= byteCount;
626             return result;
627         }
628         const result = this.allocNative(byteCount);
629         let resultOffset = 0;
630         let chunkIndex = 0;
631         while (byteCount > 0) {
632             const chunk = this._chunks[chunkIndex];
633             if (chunk.byteLength > byteCount) {
634                 // this chunk will survive
635                 const chunkPart = chunk.slice(0, byteCount);
636                 result.set(chunkPart, resultOffset);
637                 resultOffset += byteCount;
638                 this._chunks[chunkIndex] = chunk.slice(byteCount);
639                 this._totalLength -= byteCount;
640                 byteCount -= byteCount;
641             }
642             else {
643                 // this chunk will be entirely read
644                 result.set(chunk, resultOffset);
645                 resultOffset += chunk.byteLength;
646                 this._chunks.shift();
647                 this._totalLength -= chunk.byteLength;
648                 byteCount -= chunk.byteLength;
649             }
650         }
651         return result;
652     }
653 }
654 exports.AbstractMessageBuffer = AbstractMessageBuffer;
655 //# sourceMappingURL=messageBuffer.js.map
656
657 /***/ }),
658 /* 12 */
659 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
660
661
662 /* --------------------------------------------------------------------------------------------
663  * Copyright (c) Microsoft Corporation. All rights reserved.
664  * Licensed under the MIT License. See License.txt in the project root for license information.
665  * ------------------------------------------------------------------------------------------ */
666 /// <reference path="../../typings/thenable.d.ts" />
667 Object.defineProperty(exports, "__esModule", ({ value: true }));
668 exports.CancellationSenderStrategy = exports.CancellationReceiverStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = exports.SetTraceNotification = exports.TraceFormat = exports.Trace = exports.ProgressType = exports.createMessageConnection = exports.NullLogger = exports.ConnectionOptions = exports.ConnectionStrategy = exports.WriteableStreamMessageWriter = exports.AbstractMessageWriter = exports.MessageWriter = exports.ReadableStreamMessageReader = exports.AbstractMessageReader = exports.MessageReader = exports.CancellationToken = exports.CancellationTokenSource = exports.Emitter = exports.Event = exports.Disposable = exports.ParameterStructures = exports.NotificationType9 = exports.NotificationType8 = exports.NotificationType7 = exports.NotificationType6 = exports.NotificationType5 = exports.NotificationType4 = exports.NotificationType3 = exports.NotificationType2 = exports.NotificationType1 = exports.NotificationType0 = exports.NotificationType = exports.ErrorCodes = exports.ResponseError = exports.RequestType9 = exports.RequestType8 = exports.RequestType7 = exports.RequestType6 = exports.RequestType5 = exports.RequestType4 = exports.RequestType3 = exports.RequestType2 = exports.RequestType1 = exports.RequestType0 = exports.RequestType = exports.RAL = void 0;
669 exports.CancellationStrategy = void 0;
670 const messages_1 = __webpack_require__(13);
671 Object.defineProperty(exports, "RequestType", ({ enumerable: true, get: function () { return messages_1.RequestType; } }));
672 Object.defineProperty(exports, "RequestType0", ({ enumerable: true, get: function () { return messages_1.RequestType0; } }));
673 Object.defineProperty(exports, "RequestType1", ({ enumerable: true, get: function () { return messages_1.RequestType1; } }));
674 Object.defineProperty(exports, "RequestType2", ({ enumerable: true, get: function () { return messages_1.RequestType2; } }));
675 Object.defineProperty(exports, "RequestType3", ({ enumerable: true, get: function () { return messages_1.RequestType3; } }));
676 Object.defineProperty(exports, "RequestType4", ({ enumerable: true, get: function () { return messages_1.RequestType4; } }));
677 Object.defineProperty(exports, "RequestType5", ({ enumerable: true, get: function () { return messages_1.RequestType5; } }));
678 Object.defineProperty(exports, "RequestType6", ({ enumerable: true, get: function () { return messages_1.RequestType6; } }));
679 Object.defineProperty(exports, "RequestType7", ({ enumerable: true, get: function () { return messages_1.RequestType7; } }));
680 Object.defineProperty(exports, "RequestType8", ({ enumerable: true, get: function () { return messages_1.RequestType8; } }));
681 Object.defineProperty(exports, "RequestType9", ({ enumerable: true, get: function () { return messages_1.RequestType9; } }));
682 Object.defineProperty(exports, "ResponseError", ({ enumerable: true, get: function () { return messages_1.ResponseError; } }));
683 Object.defineProperty(exports, "ErrorCodes", ({ enumerable: true, get: function () { return messages_1.ErrorCodes; } }));
684 Object.defineProperty(exports, "NotificationType", ({ enumerable: true, get: function () { return messages_1.NotificationType; } }));
685 Object.defineProperty(exports, "NotificationType0", ({ enumerable: true, get: function () { return messages_1.NotificationType0; } }));
686 Object.defineProperty(exports, "NotificationType1", ({ enumerable: true, get: function () { return messages_1.NotificationType1; } }));
687 Object.defineProperty(exports, "NotificationType2", ({ enumerable: true, get: function () { return messages_1.NotificationType2; } }));
688 Object.defineProperty(exports, "NotificationType3", ({ enumerable: true, get: function () { return messages_1.NotificationType3; } }));
689 Object.defineProperty(exports, "NotificationType4", ({ enumerable: true, get: function () { return messages_1.NotificationType4; } }));
690 Object.defineProperty(exports, "NotificationType5", ({ enumerable: true, get: function () { return messages_1.NotificationType5; } }));
691 Object.defineProperty(exports, "NotificationType6", ({ enumerable: true, get: function () { return messages_1.NotificationType6; } }));
692 Object.defineProperty(exports, "NotificationType7", ({ enumerable: true, get: function () { return messages_1.NotificationType7; } }));
693 Object.defineProperty(exports, "NotificationType8", ({ enumerable: true, get: function () { return messages_1.NotificationType8; } }));
694 Object.defineProperty(exports, "NotificationType9", ({ enumerable: true, get: function () { return messages_1.NotificationType9; } }));
695 Object.defineProperty(exports, "ParameterStructures", ({ enumerable: true, get: function () { return messages_1.ParameterStructures; } }));
696 const disposable_1 = __webpack_require__(10);
697 Object.defineProperty(exports, "Disposable", ({ enumerable: true, get: function () { return disposable_1.Disposable; } }));
698 const events_1 = __webpack_require__(15);
699 Object.defineProperty(exports, "Event", ({ enumerable: true, get: function () { return events_1.Event; } }));
700 Object.defineProperty(exports, "Emitter", ({ enumerable: true, get: function () { return events_1.Emitter; } }));
701 const cancellation_1 = __webpack_require__(16);
702 Object.defineProperty(exports, "CancellationTokenSource", ({ enumerable: true, get: function () { return cancellation_1.CancellationTokenSource; } }));
703 Object.defineProperty(exports, "CancellationToken", ({ enumerable: true, get: function () { return cancellation_1.CancellationToken; } }));
704 const messageReader_1 = __webpack_require__(17);
705 Object.defineProperty(exports, "MessageReader", ({ enumerable: true, get: function () { return messageReader_1.MessageReader; } }));
706 Object.defineProperty(exports, "AbstractMessageReader", ({ enumerable: true, get: function () { return messageReader_1.AbstractMessageReader; } }));
707 Object.defineProperty(exports, "ReadableStreamMessageReader", ({ enumerable: true, get: function () { return messageReader_1.ReadableStreamMessageReader; } }));
708 const messageWriter_1 = __webpack_require__(18);
709 Object.defineProperty(exports, "MessageWriter", ({ enumerable: true, get: function () { return messageWriter_1.MessageWriter; } }));
710 Object.defineProperty(exports, "AbstractMessageWriter", ({ enumerable: true, get: function () { return messageWriter_1.AbstractMessageWriter; } }));
711 Object.defineProperty(exports, "WriteableStreamMessageWriter", ({ enumerable: true, get: function () { return messageWriter_1.WriteableStreamMessageWriter; } }));
712 const connection_1 = __webpack_require__(20);
713 Object.defineProperty(exports, "ConnectionStrategy", ({ enumerable: true, get: function () { return connection_1.ConnectionStrategy; } }));
714 Object.defineProperty(exports, "ConnectionOptions", ({ enumerable: true, get: function () { return connection_1.ConnectionOptions; } }));
715 Object.defineProperty(exports, "NullLogger", ({ enumerable: true, get: function () { return connection_1.NullLogger; } }));
716 Object.defineProperty(exports, "createMessageConnection", ({ enumerable: true, get: function () { return connection_1.createMessageConnection; } }));
717 Object.defineProperty(exports, "ProgressType", ({ enumerable: true, get: function () { return connection_1.ProgressType; } }));
718 Object.defineProperty(exports, "Trace", ({ enumerable: true, get: function () { return connection_1.Trace; } }));
719 Object.defineProperty(exports, "TraceFormat", ({ enumerable: true, get: function () { return connection_1.TraceFormat; } }));
720 Object.defineProperty(exports, "SetTraceNotification", ({ enumerable: true, get: function () { return connection_1.SetTraceNotification; } }));
721 Object.defineProperty(exports, "LogTraceNotification", ({ enumerable: true, get: function () { return connection_1.LogTraceNotification; } }));
722 Object.defineProperty(exports, "ConnectionErrors", ({ enumerable: true, get: function () { return connection_1.ConnectionErrors; } }));
723 Object.defineProperty(exports, "ConnectionError", ({ enumerable: true, get: function () { return connection_1.ConnectionError; } }));
724 Object.defineProperty(exports, "CancellationReceiverStrategy", ({ enumerable: true, get: function () { return connection_1.CancellationReceiverStrategy; } }));
725 Object.defineProperty(exports, "CancellationSenderStrategy", ({ enumerable: true, get: function () { return connection_1.CancellationSenderStrategy; } }));
726 Object.defineProperty(exports, "CancellationStrategy", ({ enumerable: true, get: function () { return connection_1.CancellationStrategy; } }));
727 const ral_1 = __webpack_require__(8);
728 exports.RAL = ral_1.default;
729 //# sourceMappingURL=api.js.map
730
731 /***/ }),
732 /* 13 */
733 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
734
735
736 /* --------------------------------------------------------------------------------------------
737  * Copyright (c) Microsoft Corporation. All rights reserved.
738  * Licensed under the MIT License. See License.txt in the project root for license information.
739  * ------------------------------------------------------------------------------------------ */
740 Object.defineProperty(exports, "__esModule", ({ value: true }));
741 exports.isResponseMessage = exports.isNotificationMessage = exports.isRequestMessage = exports.NotificationType9 = exports.NotificationType8 = exports.NotificationType7 = exports.NotificationType6 = exports.NotificationType5 = exports.NotificationType4 = exports.NotificationType3 = exports.NotificationType2 = exports.NotificationType1 = exports.NotificationType0 = exports.NotificationType = exports.RequestType9 = exports.RequestType8 = exports.RequestType7 = exports.RequestType6 = exports.RequestType5 = exports.RequestType4 = exports.RequestType3 = exports.RequestType2 = exports.RequestType1 = exports.RequestType = exports.RequestType0 = exports.AbstractMessageSignature = exports.ParameterStructures = exports.ResponseError = exports.ErrorCodes = void 0;
742 const is = __webpack_require__(14);
743 /**
744  * Predefined error codes.
745  */
746 var ErrorCodes;
747 (function (ErrorCodes) {
748     // Defined by JSON RPC
749     ErrorCodes.ParseError = -32700;
750     ErrorCodes.InvalidRequest = -32600;
751     ErrorCodes.MethodNotFound = -32601;
752     ErrorCodes.InvalidParams = -32602;
753     ErrorCodes.InternalError = -32603;
754     /**
755      * This is the start range of JSON RPC reserved error codes.
756      * It doesn't denote a real error code. No application error codes should
757      * be defined between the start and end range. For backwards
758      * compatibility the `ServerNotInitialized` and the `UnknownErrorCode`
759      * are left in the range.
760      *
761      * @since 3.16.0
762     */
763     ErrorCodes.jsonrpcReservedErrorRangeStart = -32099;
764     /** @deprecated use  jsonrpcReservedErrorRangeStart */
765     ErrorCodes.serverErrorStart = ErrorCodes.jsonrpcReservedErrorRangeStart;
766     ErrorCodes.MessageWriteError = -32099;
767     ErrorCodes.MessageReadError = -32098;
768     ErrorCodes.ServerNotInitialized = -32002;
769     ErrorCodes.UnknownErrorCode = -32001;
770     /**
771      * This is the end range of JSON RPC reserved error codes.
772      * It doesn't denote a real error code.
773      *
774      * @since 3.16.0
775     */
776     ErrorCodes.jsonrpcReservedErrorRangeEnd = -32000;
777     /** @deprecated use  jsonrpcReservedErrorRangeEnd */
778     ErrorCodes.serverErrorEnd = ErrorCodes.jsonrpcReservedErrorRangeEnd;
779 })(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}));
780 /**
781  * An error object return in a response in case a request
782  * has failed.
783  */
784 class ResponseError extends Error {
785     constructor(code, message, data) {
786         super(message);
787         this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;
788         this.data = data;
789         Object.setPrototypeOf(this, ResponseError.prototype);
790     }
791     toJson() {
792         return {
793             code: this.code,
794             message: this.message,
795             data: this.data,
796         };
797     }
798 }
799 exports.ResponseError = ResponseError;
800 class ParameterStructures {
801     constructor(kind) {
802         this.kind = kind;
803     }
804     static is(value) {
805         return value === ParameterStructures.auto || value === ParameterStructures.byName || value === ParameterStructures.byPosition;
806     }
807     toString() {
808         return this.kind;
809     }
810 }
811 exports.ParameterStructures = ParameterStructures;
812 /**
813  * The parameter structure is automatically inferred on the number of parameters
814  * and the parameter type in case of a single param.
815  */
816 ParameterStructures.auto = new ParameterStructures('auto');
817 /**
818  * Forces `byPosition` parameter structure. This is useful if you have a single
819  * parameter which has a literal type.
820  */
821 ParameterStructures.byPosition = new ParameterStructures('byPosition');
822 /**
823  * Forces `byName` parameter structure. This is only useful when having a single
824  * parameter. The library will report errors if used with a different number of
825  * parameters.
826  */
827 ParameterStructures.byName = new ParameterStructures('byName');
828 /**
829  * An abstract implementation of a MessageType.
830  */
831 class AbstractMessageSignature {
832     constructor(method, numberOfParams) {
833         this.method = method;
834         this.numberOfParams = numberOfParams;
835     }
836     get parameterStructures() {
837         return ParameterStructures.auto;
838     }
839 }
840 exports.AbstractMessageSignature = AbstractMessageSignature;
841 /**
842  * Classes to type request response pairs
843  */
844 class RequestType0 extends AbstractMessageSignature {
845     constructor(method) {
846         super(method, 0);
847     }
848 }
849 exports.RequestType0 = RequestType0;
850 class RequestType extends AbstractMessageSignature {
851     constructor(method, _parameterStructures = ParameterStructures.auto) {
852         super(method, 1);
853         this._parameterStructures = _parameterStructures;
854     }
855     get parameterStructures() {
856         return this._parameterStructures;
857     }
858 }
859 exports.RequestType = RequestType;
860 class RequestType1 extends AbstractMessageSignature {
861     constructor(method, _parameterStructures = ParameterStructures.auto) {
862         super(method, 1);
863         this._parameterStructures = _parameterStructures;
864     }
865     get parameterStructures() {
866         return this._parameterStructures;
867     }
868 }
869 exports.RequestType1 = RequestType1;
870 class RequestType2 extends AbstractMessageSignature {
871     constructor(method) {
872         super(method, 2);
873     }
874 }
875 exports.RequestType2 = RequestType2;
876 class RequestType3 extends AbstractMessageSignature {
877     constructor(method) {
878         super(method, 3);
879     }
880 }
881 exports.RequestType3 = RequestType3;
882 class RequestType4 extends AbstractMessageSignature {
883     constructor(method) {
884         super(method, 4);
885     }
886 }
887 exports.RequestType4 = RequestType4;
888 class RequestType5 extends AbstractMessageSignature {
889     constructor(method) {
890         super(method, 5);
891     }
892 }
893 exports.RequestType5 = RequestType5;
894 class RequestType6 extends AbstractMessageSignature {
895     constructor(method) {
896         super(method, 6);
897     }
898 }
899 exports.RequestType6 = RequestType6;
900 class RequestType7 extends AbstractMessageSignature {
901     constructor(method) {
902         super(method, 7);
903     }
904 }
905 exports.RequestType7 = RequestType7;
906 class RequestType8 extends AbstractMessageSignature {
907     constructor(method) {
908         super(method, 8);
909     }
910 }
911 exports.RequestType8 = RequestType8;
912 class RequestType9 extends AbstractMessageSignature {
913     constructor(method) {
914         super(method, 9);
915     }
916 }
917 exports.RequestType9 = RequestType9;
918 class NotificationType extends AbstractMessageSignature {
919     constructor(method, _parameterStructures = ParameterStructures.auto) {
920         super(method, 1);
921         this._parameterStructures = _parameterStructures;
922     }
923     get parameterStructures() {
924         return this._parameterStructures;
925     }
926 }
927 exports.NotificationType = NotificationType;
928 class NotificationType0 extends AbstractMessageSignature {
929     constructor(method) {
930         super(method, 0);
931     }
932 }
933 exports.NotificationType0 = NotificationType0;
934 class NotificationType1 extends AbstractMessageSignature {
935     constructor(method, _parameterStructures = ParameterStructures.auto) {
936         super(method, 1);
937         this._parameterStructures = _parameterStructures;
938     }
939     get parameterStructures() {
940         return this._parameterStructures;
941     }
942 }
943 exports.NotificationType1 = NotificationType1;
944 class NotificationType2 extends AbstractMessageSignature {
945     constructor(method) {
946         super(method, 2);
947     }
948 }
949 exports.NotificationType2 = NotificationType2;
950 class NotificationType3 extends AbstractMessageSignature {
951     constructor(method) {
952         super(method, 3);
953     }
954 }
955 exports.NotificationType3 = NotificationType3;
956 class NotificationType4 extends AbstractMessageSignature {
957     constructor(method) {
958         super(method, 4);
959     }
960 }
961 exports.NotificationType4 = NotificationType4;
962 class NotificationType5 extends AbstractMessageSignature {
963     constructor(method) {
964         super(method, 5);
965     }
966 }
967 exports.NotificationType5 = NotificationType5;
968 class NotificationType6 extends AbstractMessageSignature {
969     constructor(method) {
970         super(method, 6);
971     }
972 }
973 exports.NotificationType6 = NotificationType6;
974 class NotificationType7 extends AbstractMessageSignature {
975     constructor(method) {
976         super(method, 7);
977     }
978 }
979 exports.NotificationType7 = NotificationType7;
980 class NotificationType8 extends AbstractMessageSignature {
981     constructor(method) {
982         super(method, 8);
983     }
984 }
985 exports.NotificationType8 = NotificationType8;
986 class NotificationType9 extends AbstractMessageSignature {
987     constructor(method) {
988         super(method, 9);
989     }
990 }
991 exports.NotificationType9 = NotificationType9;
992 /**
993  * Tests if the given message is a request message
994  */
995 function isRequestMessage(message) {
996     const candidate = message;
997     return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));
998 }
999 exports.isRequestMessage = isRequestMessage;
1000 /**
1001  * Tests if the given message is a notification message
1002  */
1003 function isNotificationMessage(message) {
1004     const candidate = message;
1005     return candidate && is.string(candidate.method) && message.id === void 0;
1006 }
1007 exports.isNotificationMessage = isNotificationMessage;
1008 /**
1009  * Tests if the given message is a response message
1010  */
1011 function isResponseMessage(message) {
1012     const candidate = message;
1013     return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);
1014 }
1015 exports.isResponseMessage = isResponseMessage;
1016 //# sourceMappingURL=messages.js.map
1017
1018 /***/ }),
1019 /* 14 */
1020 /***/ ((__unused_webpack_module, exports) => {
1021
1022
1023 /* --------------------------------------------------------------------------------------------
1024  * Copyright (c) Microsoft Corporation. All rights reserved.
1025  * Licensed under the MIT License. See License.txt in the project root for license information.
1026  * ------------------------------------------------------------------------------------------ */
1027 Object.defineProperty(exports, "__esModule", ({ value: true }));
1028 exports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0;
1029 function boolean(value) {
1030     return value === true || value === false;
1031 }
1032 exports.boolean = boolean;
1033 function string(value) {
1034     return typeof value === 'string' || value instanceof String;
1035 }
1036 exports.string = string;
1037 function number(value) {
1038     return typeof value === 'number' || value instanceof Number;
1039 }
1040 exports.number = number;
1041 function error(value) {
1042     return value instanceof Error;
1043 }
1044 exports.error = error;
1045 function func(value) {
1046     return typeof value === 'function';
1047 }
1048 exports.func = func;
1049 function array(value) {
1050     return Array.isArray(value);
1051 }
1052 exports.array = array;
1053 function stringArray(value) {
1054     return array(value) && value.every(elem => string(elem));
1055 }
1056 exports.stringArray = stringArray;
1057 //# sourceMappingURL=is.js.map
1058
1059 /***/ }),
1060 /* 15 */
1061 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1062
1063
1064 /* --------------------------------------------------------------------------------------------
1065  * Copyright (c) Microsoft Corporation. All rights reserved.
1066  * Licensed under the MIT License. See License.txt in the project root for license information.
1067  * ------------------------------------------------------------------------------------------ */
1068 Object.defineProperty(exports, "__esModule", ({ value: true }));
1069 exports.Emitter = exports.Event = void 0;
1070 const ral_1 = __webpack_require__(8);
1071 var Event;
1072 (function (Event) {
1073     const _disposable = { dispose() { } };
1074     Event.None = function () { return _disposable; };
1075 })(Event = exports.Event || (exports.Event = {}));
1076 class CallbackList {
1077     add(callback, context = null, bucket) {
1078         if (!this._callbacks) {
1079             this._callbacks = [];
1080             this._contexts = [];
1081         }
1082         this._callbacks.push(callback);
1083         this._contexts.push(context);
1084         if (Array.isArray(bucket)) {
1085             bucket.push({ dispose: () => this.remove(callback, context) });
1086         }
1087     }
1088     remove(callback, context = null) {
1089         if (!this._callbacks) {
1090             return;
1091         }
1092         let foundCallbackWithDifferentContext = false;
1093         for (let i = 0, len = this._callbacks.length; i < len; i++) {
1094             if (this._callbacks[i] === callback) {
1095                 if (this._contexts[i] === context) {
1096                     // callback & context match => remove it
1097                     this._callbacks.splice(i, 1);
1098                     this._contexts.splice(i, 1);
1099                     return;
1100                 }
1101                 else {
1102                     foundCallbackWithDifferentContext = true;
1103                 }
1104             }
1105         }
1106         if (foundCallbackWithDifferentContext) {
1107             throw new Error('When adding a listener with a context, you should remove it with the same context');
1108         }
1109     }
1110     invoke(...args) {
1111         if (!this._callbacks) {
1112             return [];
1113         }
1114         const ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
1115         for (let i = 0, len = callbacks.length; i < len; i++) {
1116             try {
1117                 ret.push(callbacks[i].apply(contexts[i], args));
1118             }
1119             catch (e) {
1120                 // eslint-disable-next-line no-console
1121                 ral_1.default().console.error(e);
1122             }
1123         }
1124         return ret;
1125     }
1126     isEmpty() {
1127         return !this._callbacks || this._callbacks.length === 0;
1128     }
1129     dispose() {
1130         this._callbacks = undefined;
1131         this._contexts = undefined;
1132     }
1133 }
1134 class Emitter {
1135     constructor(_options) {
1136         this._options = _options;
1137     }
1138     /**
1139      * For the public to allow to subscribe
1140      * to events from this Emitter
1141      */
1142     get event() {
1143         if (!this._event) {
1144             this._event = (listener, thisArgs, disposables) => {
1145                 if (!this._callbacks) {
1146                     this._callbacks = new CallbackList();
1147                 }
1148                 if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {
1149                     this._options.onFirstListenerAdd(this);
1150                 }
1151                 this._callbacks.add(listener, thisArgs);
1152                 const result = {
1153                     dispose: () => {
1154                         if (!this._callbacks) {
1155                             // disposable is disposed after emitter is disposed.
1156                             return;
1157                         }
1158                         this._callbacks.remove(listener, thisArgs);
1159                         result.dispose = Emitter._noop;
1160                         if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {
1161                             this._options.onLastListenerRemove(this);
1162                         }
1163                     }
1164                 };
1165                 if (Array.isArray(disposables)) {
1166                     disposables.push(result);
1167                 }
1168                 return result;
1169             };
1170         }
1171         return this._event;
1172     }
1173     /**
1174      * To be kept private to fire an event to
1175      * subscribers
1176      */
1177     fire(event) {
1178         if (this._callbacks) {
1179             this._callbacks.invoke.call(this._callbacks, event);
1180         }
1181     }
1182     dispose() {
1183         if (this._callbacks) {
1184             this._callbacks.dispose();
1185             this._callbacks = undefined;
1186         }
1187     }
1188 }
1189 exports.Emitter = Emitter;
1190 Emitter._noop = function () { };
1191 //# sourceMappingURL=events.js.map
1192
1193 /***/ }),
1194 /* 16 */
1195 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1196
1197
1198 /*---------------------------------------------------------------------------------------------
1199  *  Copyright (c) Microsoft Corporation. All rights reserved.
1200  *  Licensed under the MIT License. See License.txt in the project root for license information.
1201  *--------------------------------------------------------------------------------------------*/
1202 Object.defineProperty(exports, "__esModule", ({ value: true }));
1203 exports.CancellationTokenSource = exports.CancellationToken = void 0;
1204 const ral_1 = __webpack_require__(8);
1205 const Is = __webpack_require__(14);
1206 const events_1 = __webpack_require__(15);
1207 var CancellationToken;
1208 (function (CancellationToken) {
1209     CancellationToken.None = Object.freeze({
1210         isCancellationRequested: false,
1211         onCancellationRequested: events_1.Event.None
1212     });
1213     CancellationToken.Cancelled = Object.freeze({
1214         isCancellationRequested: true,
1215         onCancellationRequested: events_1.Event.None
1216     });
1217     function is(value) {
1218         const candidate = value;
1219         return candidate && (candidate === CancellationToken.None
1220             || candidate === CancellationToken.Cancelled
1221             || (Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested));
1222     }
1223     CancellationToken.is = is;
1224 })(CancellationToken = exports.CancellationToken || (exports.CancellationToken = {}));
1225 const shortcutEvent = Object.freeze(function (callback, context) {
1226     const handle = ral_1.default().timer.setTimeout(callback.bind(context), 0);
1227     return { dispose() { ral_1.default().timer.clearTimeout(handle); } };
1228 });
1229 class MutableToken {
1230     constructor() {
1231         this._isCancelled = false;
1232     }
1233     cancel() {
1234         if (!this._isCancelled) {
1235             this._isCancelled = true;
1236             if (this._emitter) {
1237                 this._emitter.fire(undefined);
1238                 this.dispose();
1239             }
1240         }
1241     }
1242     get isCancellationRequested() {
1243         return this._isCancelled;
1244     }
1245     get onCancellationRequested() {
1246         if (this._isCancelled) {
1247             return shortcutEvent;
1248         }
1249         if (!this._emitter) {
1250             this._emitter = new events_1.Emitter();
1251         }
1252         return this._emitter.event;
1253     }
1254     dispose() {
1255         if (this._emitter) {
1256             this._emitter.dispose();
1257             this._emitter = undefined;
1258         }
1259     }
1260 }
1261 class CancellationTokenSource {
1262     get token() {
1263         if (!this._token) {
1264             // be lazy and create the token only when
1265             // actually needed
1266             this._token = new MutableToken();
1267         }
1268         return this._token;
1269     }
1270     cancel() {
1271         if (!this._token) {
1272             // save an object by returning the default
1273             // cancelled token when cancellation happens
1274             // before someone asks for the token
1275             this._token = CancellationToken.Cancelled;
1276         }
1277         else {
1278             this._token.cancel();
1279         }
1280     }
1281     dispose() {
1282         if (!this._token) {
1283             // ensure to initialize with an empty token if we had none
1284             this._token = CancellationToken.None;
1285         }
1286         else if (this._token instanceof MutableToken) {
1287             // actually dispose
1288             this._token.dispose();
1289         }
1290     }
1291 }
1292 exports.CancellationTokenSource = CancellationTokenSource;
1293 //# sourceMappingURL=cancellation.js.map
1294
1295 /***/ }),
1296 /* 17 */
1297 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1298
1299
1300 /* --------------------------------------------------------------------------------------------
1301  * Copyright (c) Microsoft Corporation. All rights reserved.
1302  * Licensed under the MIT License. See License.txt in the project root for license information.
1303  * ------------------------------------------------------------------------------------------ */
1304 Object.defineProperty(exports, "__esModule", ({ value: true }));
1305 exports.ReadableStreamMessageReader = exports.AbstractMessageReader = exports.MessageReader = void 0;
1306 const ral_1 = __webpack_require__(8);
1307 const Is = __webpack_require__(14);
1308 const events_1 = __webpack_require__(15);
1309 var MessageReader;
1310 (function (MessageReader) {
1311     function is(value) {
1312         let candidate = value;
1313         return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) &&
1314             Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);
1315     }
1316     MessageReader.is = is;
1317 })(MessageReader = exports.MessageReader || (exports.MessageReader = {}));
1318 class AbstractMessageReader {
1319     constructor() {
1320         this.errorEmitter = new events_1.Emitter();
1321         this.closeEmitter = new events_1.Emitter();
1322         this.partialMessageEmitter = new events_1.Emitter();
1323     }
1324     dispose() {
1325         this.errorEmitter.dispose();
1326         this.closeEmitter.dispose();
1327     }
1328     get onError() {
1329         return this.errorEmitter.event;
1330     }
1331     fireError(error) {
1332         this.errorEmitter.fire(this.asError(error));
1333     }
1334     get onClose() {
1335         return this.closeEmitter.event;
1336     }
1337     fireClose() {
1338         this.closeEmitter.fire(undefined);
1339     }
1340     get onPartialMessage() {
1341         return this.partialMessageEmitter.event;
1342     }
1343     firePartialMessage(info) {
1344         this.partialMessageEmitter.fire(info);
1345     }
1346     asError(error) {
1347         if (error instanceof Error) {
1348             return error;
1349         }
1350         else {
1351             return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);
1352         }
1353     }
1354 }
1355 exports.AbstractMessageReader = AbstractMessageReader;
1356 var ResolvedMessageReaderOptions;
1357 (function (ResolvedMessageReaderOptions) {
1358     function fromOptions(options) {
1359         var _a;
1360         let charset;
1361         let result;
1362         let contentDecoder;
1363         const contentDecoders = new Map();
1364         let contentTypeDecoder;
1365         const contentTypeDecoders = new Map();
1366         if (options === undefined || typeof options === 'string') {
1367             charset = options !== null && options !== void 0 ? options : 'utf-8';
1368         }
1369         else {
1370             charset = (_a = options.charset) !== null && _a !== void 0 ? _a : 'utf-8';
1371             if (options.contentDecoder !== undefined) {
1372                 contentDecoder = options.contentDecoder;
1373                 contentDecoders.set(contentDecoder.name, contentDecoder);
1374             }
1375             if (options.contentDecoders !== undefined) {
1376                 for (const decoder of options.contentDecoders) {
1377                     contentDecoders.set(decoder.name, decoder);
1378                 }
1379             }
1380             if (options.contentTypeDecoder !== undefined) {
1381                 contentTypeDecoder = options.contentTypeDecoder;
1382                 contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);
1383             }
1384             if (options.contentTypeDecoders !== undefined) {
1385                 for (const decoder of options.contentTypeDecoders) {
1386                     contentTypeDecoders.set(decoder.name, decoder);
1387                 }
1388             }
1389         }
1390         if (contentTypeDecoder === undefined) {
1391             contentTypeDecoder = ral_1.default().applicationJson.decoder;
1392             contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);
1393         }
1394         return { charset, contentDecoder, contentDecoders, contentTypeDecoder, contentTypeDecoders };
1395     }
1396     ResolvedMessageReaderOptions.fromOptions = fromOptions;
1397 })(ResolvedMessageReaderOptions || (ResolvedMessageReaderOptions = {}));
1398 class ReadableStreamMessageReader extends AbstractMessageReader {
1399     constructor(readable, options) {
1400         super();
1401         this.readable = readable;
1402         this.options = ResolvedMessageReaderOptions.fromOptions(options);
1403         this.buffer = ral_1.default().messageBuffer.create(this.options.charset);
1404         this._partialMessageTimeout = 10000;
1405         this.nextMessageLength = -1;
1406         this.messageToken = 0;
1407     }
1408     set partialMessageTimeout(timeout) {
1409         this._partialMessageTimeout = timeout;
1410     }
1411     get partialMessageTimeout() {
1412         return this._partialMessageTimeout;
1413     }
1414     listen(callback) {
1415         this.nextMessageLength = -1;
1416         this.messageToken = 0;
1417         this.partialMessageTimer = undefined;
1418         this.callback = callback;
1419         const result = this.readable.onData((data) => {
1420             this.onData(data);
1421         });
1422         this.readable.onError((error) => this.fireError(error));
1423         this.readable.onClose(() => this.fireClose());
1424         return result;
1425     }
1426     onData(data) {
1427         this.buffer.append(data);
1428         while (true) {
1429             if (this.nextMessageLength === -1) {
1430                 const headers = this.buffer.tryReadHeaders();
1431                 if (!headers) {
1432                     return;
1433                 }
1434                 const contentLength = headers.get('Content-Length');
1435                 if (!contentLength) {
1436                     throw new Error('Header must provide a Content-Length property.');
1437                 }
1438                 const length = parseInt(contentLength);
1439                 if (isNaN(length)) {
1440                     throw new Error('Content-Length value must be a number.');
1441                 }
1442                 this.nextMessageLength = length;
1443             }
1444             const body = this.buffer.tryReadBody(this.nextMessageLength);
1445             if (body === undefined) {
1446                 /** We haven't received the full message yet. */
1447                 this.setPartialMessageTimer();
1448                 return;
1449             }
1450             this.clearPartialMessageTimer();
1451             this.nextMessageLength = -1;
1452             let p;
1453             if (this.options.contentDecoder !== undefined) {
1454                 p = this.options.contentDecoder.decode(body);
1455             }
1456             else {
1457                 p = Promise.resolve(body);
1458             }
1459             p.then((value) => {
1460                 this.options.contentTypeDecoder.decode(value, this.options).then((msg) => {
1461                     this.callback(msg);
1462                 }, (error) => {
1463                     this.fireError(error);
1464                 });
1465             }, (error) => {
1466                 this.fireError(error);
1467             });
1468         }
1469     }
1470     clearPartialMessageTimer() {
1471         if (this.partialMessageTimer) {
1472             ral_1.default().timer.clearTimeout(this.partialMessageTimer);
1473             this.partialMessageTimer = undefined;
1474         }
1475     }
1476     setPartialMessageTimer() {
1477         this.clearPartialMessageTimer();
1478         if (this._partialMessageTimeout <= 0) {
1479             return;
1480         }
1481         this.partialMessageTimer = ral_1.default().timer.setTimeout((token, timeout) => {
1482             this.partialMessageTimer = undefined;
1483             if (token === this.messageToken) {
1484                 this.firePartialMessage({ messageToken: token, waitingTime: timeout });
1485                 this.setPartialMessageTimer();
1486             }
1487         }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
1488     }
1489 }
1490 exports.ReadableStreamMessageReader = ReadableStreamMessageReader;
1491 //# sourceMappingURL=messageReader.js.map
1492
1493 /***/ }),
1494 /* 18 */
1495 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1496
1497
1498 /* --------------------------------------------------------------------------------------------
1499  * Copyright (c) Microsoft Corporation. All rights reserved.
1500  * Licensed under the MIT License. See License.txt in the project root for license information.
1501  * ------------------------------------------------------------------------------------------ */
1502 Object.defineProperty(exports, "__esModule", ({ value: true }));
1503 exports.WriteableStreamMessageWriter = exports.AbstractMessageWriter = exports.MessageWriter = void 0;
1504 const ral_1 = __webpack_require__(8);
1505 const Is = __webpack_require__(14);
1506 const semaphore_1 = __webpack_require__(19);
1507 const events_1 = __webpack_require__(15);
1508 const ContentLength = 'Content-Length: ';
1509 const CRLF = '\r\n';
1510 var MessageWriter;
1511 (function (MessageWriter) {
1512     function is(value) {
1513         let candidate = value;
1514         return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) &&
1515             Is.func(candidate.onError) && Is.func(candidate.write);
1516     }
1517     MessageWriter.is = is;
1518 })(MessageWriter = exports.MessageWriter || (exports.MessageWriter = {}));
1519 class AbstractMessageWriter {
1520     constructor() {
1521         this.errorEmitter = new events_1.Emitter();
1522         this.closeEmitter = new events_1.Emitter();
1523     }
1524     dispose() {
1525         this.errorEmitter.dispose();
1526         this.closeEmitter.dispose();
1527     }
1528     get onError() {
1529         return this.errorEmitter.event;
1530     }
1531     fireError(error, message, count) {
1532         this.errorEmitter.fire([this.asError(error), message, count]);
1533     }
1534     get onClose() {
1535         return this.closeEmitter.event;
1536     }
1537     fireClose() {
1538         this.closeEmitter.fire(undefined);
1539     }
1540     asError(error) {
1541         if (error instanceof Error) {
1542             return error;
1543         }
1544         else {
1545             return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);
1546         }
1547     }
1548 }
1549 exports.AbstractMessageWriter = AbstractMessageWriter;
1550 var ResolvedMessageWriterOptions;
1551 (function (ResolvedMessageWriterOptions) {
1552     function fromOptions(options) {
1553         var _a, _b;
1554         if (options === undefined || typeof options === 'string') {
1555             return { charset: options !== null && options !== void 0 ? options : 'utf-8', contentTypeEncoder: ral_1.default().applicationJson.encoder };
1556         }
1557         else {
1558             return { charset: (_a = options.charset) !== null && _a !== void 0 ? _a : 'utf-8', contentEncoder: options.contentEncoder, contentTypeEncoder: (_b = options.contentTypeEncoder) !== null && _b !== void 0 ? _b : ral_1.default().applicationJson.encoder };
1559         }
1560     }
1561     ResolvedMessageWriterOptions.fromOptions = fromOptions;
1562 })(ResolvedMessageWriterOptions || (ResolvedMessageWriterOptions = {}));
1563 class WriteableStreamMessageWriter extends AbstractMessageWriter {
1564     constructor(writable, options) {
1565         super();
1566         this.writable = writable;
1567         this.options = ResolvedMessageWriterOptions.fromOptions(options);
1568         this.errorCount = 0;
1569         this.writeSemaphore = new semaphore_1.Semaphore(1);
1570         this.writable.onError((error) => this.fireError(error));
1571         this.writable.onClose(() => this.fireClose());
1572     }
1573     async write(msg) {
1574         return this.writeSemaphore.lock(async () => {
1575             const payload = this.options.contentTypeEncoder.encode(msg, this.options).then((buffer) => {
1576                 if (this.options.contentEncoder !== undefined) {
1577                     return this.options.contentEncoder.encode(buffer);
1578                 }
1579                 else {
1580                     return buffer;
1581                 }
1582             });
1583             return payload.then((buffer) => {
1584                 const headers = [];
1585                 headers.push(ContentLength, buffer.byteLength.toString(), CRLF);
1586                 headers.push(CRLF);
1587                 return this.doWrite(msg, headers, buffer);
1588             }, (error) => {
1589                 this.fireError(error);
1590                 throw error;
1591             });
1592         });
1593     }
1594     async doWrite(msg, headers, data) {
1595         try {
1596             await this.writable.write(headers.join(''), 'ascii');
1597             return this.writable.write(data);
1598         }
1599         catch (error) {
1600             this.handleError(error, msg);
1601             return Promise.reject(error);
1602         }
1603     }
1604     handleError(error, msg) {
1605         this.errorCount++;
1606         this.fireError(error, msg, this.errorCount);
1607     }
1608     end() {
1609         this.writable.end();
1610     }
1611 }
1612 exports.WriteableStreamMessageWriter = WriteableStreamMessageWriter;
1613 //# sourceMappingURL=messageWriter.js.map
1614
1615 /***/ }),
1616 /* 19 */
1617 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1618
1619
1620 /* --------------------------------------------------------------------------------------------
1621  * Copyright (c) Microsoft Corporation. All rights reserved.
1622  * Licensed under the MIT License. See License.txt in the project root for license information.
1623  * ------------------------------------------------------------------------------------------ */
1624 Object.defineProperty(exports, "__esModule", ({ value: true }));
1625 exports.Semaphore = void 0;
1626 const ral_1 = __webpack_require__(8);
1627 class Semaphore {
1628     constructor(capacity = 1) {
1629         if (capacity <= 0) {
1630             throw new Error('Capacity must be greater than 0');
1631         }
1632         this._capacity = capacity;
1633         this._active = 0;
1634         this._waiting = [];
1635     }
1636     lock(thunk) {
1637         return new Promise((resolve, reject) => {
1638             this._waiting.push({ thunk, resolve, reject });
1639             this.runNext();
1640         });
1641     }
1642     get active() {
1643         return this._active;
1644     }
1645     runNext() {
1646         if (this._waiting.length === 0 || this._active === this._capacity) {
1647             return;
1648         }
1649         ral_1.default().timer.setImmediate(() => this.doRunNext());
1650     }
1651     doRunNext() {
1652         if (this._waiting.length === 0 || this._active === this._capacity) {
1653             return;
1654         }
1655         const next = this._waiting.shift();
1656         this._active++;
1657         if (this._active > this._capacity) {
1658             throw new Error(`To many thunks active`);
1659         }
1660         try {
1661             const result = next.thunk();
1662             if (result instanceof Promise) {
1663                 result.then((value) => {
1664                     this._active--;
1665                     next.resolve(value);
1666                     this.runNext();
1667                 }, (err) => {
1668                     this._active--;
1669                     next.reject(err);
1670                     this.runNext();
1671                 });
1672             }
1673             else {
1674                 this._active--;
1675                 next.resolve(result);
1676                 this.runNext();
1677             }
1678         }
1679         catch (err) {
1680             this._active--;
1681             next.reject(err);
1682             this.runNext();
1683         }
1684     }
1685 }
1686 exports.Semaphore = Semaphore;
1687 //# sourceMappingURL=semaphore.js.map
1688
1689 /***/ }),
1690 /* 20 */
1691 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1692
1693
1694 /* --------------------------------------------------------------------------------------------
1695  * Copyright (c) Microsoft Corporation. All rights reserved.
1696  * Licensed under the MIT License. See License.txt in the project root for license information.
1697  * ------------------------------------------------------------------------------------------ */
1698 Object.defineProperty(exports, "__esModule", ({ value: true }));
1699 exports.createMessageConnection = exports.ConnectionOptions = exports.CancellationStrategy = exports.CancellationSenderStrategy = exports.CancellationReceiverStrategy = exports.ConnectionStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = exports.SetTraceNotification = exports.TraceFormat = exports.Trace = exports.NullLogger = exports.ProgressType = void 0;
1700 const ral_1 = __webpack_require__(8);
1701 const Is = __webpack_require__(14);
1702 const messages_1 = __webpack_require__(13);
1703 const linkedMap_1 = __webpack_require__(21);
1704 const events_1 = __webpack_require__(15);
1705 const cancellation_1 = __webpack_require__(16);
1706 var CancelNotification;
1707 (function (CancelNotification) {
1708     CancelNotification.type = new messages_1.NotificationType('$/cancelRequest');
1709 })(CancelNotification || (CancelNotification = {}));
1710 var ProgressNotification;
1711 (function (ProgressNotification) {
1712     ProgressNotification.type = new messages_1.NotificationType('$/progress');
1713 })(ProgressNotification || (ProgressNotification = {}));
1714 class ProgressType {
1715     constructor() {
1716     }
1717 }
1718 exports.ProgressType = ProgressType;
1719 var StarRequestHandler;
1720 (function (StarRequestHandler) {
1721     function is(value) {
1722         return Is.func(value);
1723     }
1724     StarRequestHandler.is = is;
1725 })(StarRequestHandler || (StarRequestHandler = {}));
1726 exports.NullLogger = Object.freeze({
1727     error: () => { },
1728     warn: () => { },
1729     info: () => { },
1730     log: () => { }
1731 });
1732 var Trace;
1733 (function (Trace) {
1734     Trace[Trace["Off"] = 0] = "Off";
1735     Trace[Trace["Messages"] = 1] = "Messages";
1736     Trace[Trace["Verbose"] = 2] = "Verbose";
1737 })(Trace = exports.Trace || (exports.Trace = {}));
1738 (function (Trace) {
1739     function fromString(value) {
1740         if (!Is.string(value)) {
1741             return Trace.Off;
1742         }
1743         value = value.toLowerCase();
1744         switch (value) {
1745             case 'off':
1746                 return Trace.Off;
1747             case 'messages':
1748                 return Trace.Messages;
1749             case 'verbose':
1750                 return Trace.Verbose;
1751             default:
1752                 return Trace.Off;
1753         }
1754     }
1755     Trace.fromString = fromString;
1756     function toString(value) {
1757         switch (value) {
1758             case Trace.Off:
1759                 return 'off';
1760             case Trace.Messages:
1761                 return 'messages';
1762             case Trace.Verbose:
1763                 return 'verbose';
1764             default:
1765                 return 'off';
1766         }
1767     }
1768     Trace.toString = toString;
1769 })(Trace = exports.Trace || (exports.Trace = {}));
1770 var TraceFormat;
1771 (function (TraceFormat) {
1772     TraceFormat["Text"] = "text";
1773     TraceFormat["JSON"] = "json";
1774 })(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));
1775 (function (TraceFormat) {
1776     function fromString(value) {
1777         value = value.toLowerCase();
1778         if (value === 'json') {
1779             return TraceFormat.JSON;
1780         }
1781         else {
1782             return TraceFormat.Text;
1783         }
1784     }
1785     TraceFormat.fromString = fromString;
1786 })(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));
1787 var SetTraceNotification;
1788 (function (SetTraceNotification) {
1789     SetTraceNotification.type = new messages_1.NotificationType('$/setTrace');
1790 })(SetTraceNotification = exports.SetTraceNotification || (exports.SetTraceNotification = {}));
1791 var LogTraceNotification;
1792 (function (LogTraceNotification) {
1793     LogTraceNotification.type = new messages_1.NotificationType('$/logTrace');
1794 })(LogTraceNotification = exports.LogTraceNotification || (exports.LogTraceNotification = {}));
1795 var ConnectionErrors;
1796 (function (ConnectionErrors) {
1797     /**
1798      * The connection is closed.
1799      */
1800     ConnectionErrors[ConnectionErrors["Closed"] = 1] = "Closed";
1801     /**
1802      * The connection got disposed.
1803      */
1804     ConnectionErrors[ConnectionErrors["Disposed"] = 2] = "Disposed";
1805     /**
1806      * The connection is already in listening mode.
1807      */
1808     ConnectionErrors[ConnectionErrors["AlreadyListening"] = 3] = "AlreadyListening";
1809 })(ConnectionErrors = exports.ConnectionErrors || (exports.ConnectionErrors = {}));
1810 class ConnectionError extends Error {
1811     constructor(code, message) {
1812         super(message);
1813         this.code = code;
1814         Object.setPrototypeOf(this, ConnectionError.prototype);
1815     }
1816 }
1817 exports.ConnectionError = ConnectionError;
1818 var ConnectionStrategy;
1819 (function (ConnectionStrategy) {
1820     function is(value) {
1821         const candidate = value;
1822         return candidate && Is.func(candidate.cancelUndispatched);
1823     }
1824     ConnectionStrategy.is = is;
1825 })(ConnectionStrategy = exports.ConnectionStrategy || (exports.ConnectionStrategy = {}));
1826 var CancellationReceiverStrategy;
1827 (function (CancellationReceiverStrategy) {
1828     CancellationReceiverStrategy.Message = Object.freeze({
1829         createCancellationTokenSource(_) {
1830             return new cancellation_1.CancellationTokenSource();
1831         }
1832     });
1833     function is(value) {
1834         const candidate = value;
1835         return candidate && Is.func(candidate.createCancellationTokenSource);
1836     }
1837     CancellationReceiverStrategy.is = is;
1838 })(CancellationReceiverStrategy = exports.CancellationReceiverStrategy || (exports.CancellationReceiverStrategy = {}));
1839 var CancellationSenderStrategy;
1840 (function (CancellationSenderStrategy) {
1841     CancellationSenderStrategy.Message = Object.freeze({
1842         sendCancellation(conn, id) {
1843             conn.sendNotification(CancelNotification.type, { id });
1844         },
1845         cleanup(_) { }
1846     });
1847     function is(value) {
1848         const candidate = value;
1849         return candidate && Is.func(candidate.sendCancellation) && Is.func(candidate.cleanup);
1850     }
1851     CancellationSenderStrategy.is = is;
1852 })(CancellationSenderStrategy = exports.CancellationSenderStrategy || (exports.CancellationSenderStrategy = {}));
1853 var CancellationStrategy;
1854 (function (CancellationStrategy) {
1855     CancellationStrategy.Message = Object.freeze({
1856         receiver: CancellationReceiverStrategy.Message,
1857         sender: CancellationSenderStrategy.Message
1858     });
1859     function is(value) {
1860         const candidate = value;
1861         return candidate && CancellationReceiverStrategy.is(candidate.receiver) && CancellationSenderStrategy.is(candidate.sender);
1862     }
1863     CancellationStrategy.is = is;
1864 })(CancellationStrategy = exports.CancellationStrategy || (exports.CancellationStrategy = {}));
1865 var ConnectionOptions;
1866 (function (ConnectionOptions) {
1867     function is(value) {
1868         const candidate = value;
1869         return candidate && (CancellationStrategy.is(candidate.cancellationStrategy) || ConnectionStrategy.is(candidate.connectionStrategy));
1870     }
1871     ConnectionOptions.is = is;
1872 })(ConnectionOptions = exports.ConnectionOptions || (exports.ConnectionOptions = {}));
1873 var ConnectionState;
1874 (function (ConnectionState) {
1875     ConnectionState[ConnectionState["New"] = 1] = "New";
1876     ConnectionState[ConnectionState["Listening"] = 2] = "Listening";
1877     ConnectionState[ConnectionState["Closed"] = 3] = "Closed";
1878     ConnectionState[ConnectionState["Disposed"] = 4] = "Disposed";
1879 })(ConnectionState || (ConnectionState = {}));
1880 function createMessageConnection(messageReader, messageWriter, _logger, options) {
1881     const logger = _logger !== undefined ? _logger : exports.NullLogger;
1882     let sequenceNumber = 0;
1883     let notificationSquenceNumber = 0;
1884     let unknownResponseSquenceNumber = 0;
1885     const version = '2.0';
1886     let starRequestHandler = undefined;
1887     const requestHandlers = Object.create(null);
1888     let starNotificationHandler = undefined;
1889     const notificationHandlers = Object.create(null);
1890     const progressHandlers = new Map();
1891     let timer;
1892     let messageQueue = new linkedMap_1.LinkedMap();
1893     let responsePromises = Object.create(null);
1894     let requestTokens = Object.create(null);
1895     let trace = Trace.Off;
1896     let traceFormat = TraceFormat.Text;
1897     let tracer;
1898     let state = ConnectionState.New;
1899     const errorEmitter = new events_1.Emitter();
1900     const closeEmitter = new events_1.Emitter();
1901     const unhandledNotificationEmitter = new events_1.Emitter();
1902     const unhandledProgressEmitter = new events_1.Emitter();
1903     const disposeEmitter = new events_1.Emitter();
1904     const cancellationStrategy = (options && options.cancellationStrategy) ? options.cancellationStrategy : CancellationStrategy.Message;
1905     function createRequestQueueKey(id) {
1906         if (id === null) {
1907             throw new Error(`Can't send requests with id null since the response can't be correlated.`);
1908         }
1909         return 'req-' + id.toString();
1910     }
1911     function createResponseQueueKey(id) {
1912         if (id === null) {
1913             return 'res-unknown-' + (++unknownResponseSquenceNumber).toString();
1914         }
1915         else {
1916             return 'res-' + id.toString();
1917         }
1918     }
1919     function createNotificationQueueKey() {
1920         return 'not-' + (++notificationSquenceNumber).toString();
1921     }
1922     function addMessageToQueue(queue, message) {
1923         if (messages_1.isRequestMessage(message)) {
1924             queue.set(createRequestQueueKey(message.id), message);
1925         }
1926         else if (messages_1.isResponseMessage(message)) {
1927             queue.set(createResponseQueueKey(message.id), message);
1928         }
1929         else {
1930             queue.set(createNotificationQueueKey(), message);
1931         }
1932     }
1933     function cancelUndispatched(_message) {
1934         return undefined;
1935     }
1936     function isListening() {
1937         return state === ConnectionState.Listening;
1938     }
1939     function isClosed() {
1940         return state === ConnectionState.Closed;
1941     }
1942     function isDisposed() {
1943         return state === ConnectionState.Disposed;
1944     }
1945     function closeHandler() {
1946         if (state === ConnectionState.New || state === ConnectionState.Listening) {
1947             state = ConnectionState.Closed;
1948             closeEmitter.fire(undefined);
1949         }
1950         // If the connection is disposed don't sent close events.
1951     }
1952     function readErrorHandler(error) {
1953         errorEmitter.fire([error, undefined, undefined]);
1954     }
1955     function writeErrorHandler(data) {
1956         errorEmitter.fire(data);
1957     }
1958     messageReader.onClose(closeHandler);
1959     messageReader.onError(readErrorHandler);
1960     messageWriter.onClose(closeHandler);
1961     messageWriter.onError(writeErrorHandler);
1962     function triggerMessageQueue() {
1963         if (timer || messageQueue.size === 0) {
1964             return;
1965         }
1966         timer = ral_1.default().timer.setImmediate(() => {
1967             timer = undefined;
1968             processMessageQueue();
1969         });
1970     }
1971     function processMessageQueue() {
1972         if (messageQueue.size === 0) {
1973             return;
1974         }
1975         const message = messageQueue.shift();
1976         try {
1977             if (messages_1.isRequestMessage(message)) {
1978                 handleRequest(message);
1979             }
1980             else if (messages_1.isNotificationMessage(message)) {
1981                 handleNotification(message);
1982             }
1983             else if (messages_1.isResponseMessage(message)) {
1984                 handleResponse(message);
1985             }
1986             else {
1987                 handleInvalidMessage(message);
1988             }
1989         }
1990         finally {
1991             triggerMessageQueue();
1992         }
1993     }
1994     const callback = (message) => {
1995         try {
1996             // We have received a cancellation message. Check if the message is still in the queue
1997             // and cancel it if allowed to do so.
1998             if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {
1999                 const key = createRequestQueueKey(message.params.id);
2000                 const toCancel = messageQueue.get(key);
2001                 if (messages_1.isRequestMessage(toCancel)) {
2002                     const strategy = options === null || options === void 0 ? void 0 : options.connectionStrategy;
2003                     const response = (strategy && strategy.cancelUndispatched) ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
2004                     if (response && (response.error !== undefined || response.result !== undefined)) {
2005                         messageQueue.delete(key);
2006                         response.id = toCancel.id;
2007                         traceSendingResponse(response, message.method, Date.now());
2008                         messageWriter.write(response);
2009                         return;
2010                     }
2011                 }
2012             }
2013             addMessageToQueue(messageQueue, message);
2014         }
2015         finally {
2016             triggerMessageQueue();
2017         }
2018     };
2019     function handleRequest(requestMessage) {
2020         if (isDisposed()) {
2021             // we return here silently since we fired an event when the
2022             // connection got disposed.
2023             return;
2024         }
2025         function reply(resultOrError, method, startTime) {
2026             const message = {
2027                 jsonrpc: version,
2028                 id: requestMessage.id
2029             };
2030             if (resultOrError instanceof messages_1.ResponseError) {
2031                 message.error = resultOrError.toJson();
2032             }
2033             else {
2034                 message.result = resultOrError === undefined ? null : resultOrError;
2035             }
2036             traceSendingResponse(message, method, startTime);
2037             messageWriter.write(message);
2038         }
2039         function replyError(error, method, startTime) {
2040             const message = {
2041                 jsonrpc: version,
2042                 id: requestMessage.id,
2043                 error: error.toJson()
2044             };
2045             traceSendingResponse(message, method, startTime);
2046             messageWriter.write(message);
2047         }
2048         function replySuccess(result, method, startTime) {
2049             // The JSON RPC defines that a response must either have a result or an error
2050             // So we can't treat undefined as a valid response result.
2051             if (result === undefined) {
2052                 result = null;
2053             }
2054             const message = {
2055                 jsonrpc: version,
2056                 id: requestMessage.id,
2057                 result: result
2058             };
2059             traceSendingResponse(message, method, startTime);
2060             messageWriter.write(message);
2061         }
2062         traceReceivedRequest(requestMessage);
2063         const element = requestHandlers[requestMessage.method];
2064         let type;
2065         let requestHandler;
2066         if (element) {
2067             type = element.type;
2068             requestHandler = element.handler;
2069         }
2070         const startTime = Date.now();
2071         if (requestHandler || starRequestHandler) {
2072             const tokenKey = String(requestMessage.id);
2073             const cancellationSource = cancellationStrategy.receiver.createCancellationTokenSource(tokenKey);
2074             requestTokens[tokenKey] = cancellationSource;
2075             try {
2076                 let handlerResult;
2077                 if (requestHandler) {
2078                     if (requestMessage.params === undefined) {
2079                         if (type !== undefined && type.numberOfParams !== 0) {
2080                             replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines ${type.numberOfParams} params but recevied none.`), requestMessage.method, startTime);
2081                             return;
2082                         }
2083                         handlerResult = requestHandler(cancellationSource.token);
2084                     }
2085                     else if (Array.isArray(requestMessage.params)) {
2086                         if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byName) {
2087                             replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by name but received parameters by position`), requestMessage.method, startTime);
2088                             return;
2089                         }
2090                         handlerResult = requestHandler(...requestMessage.params, cancellationSource.token);
2091                     }
2092                     else {
2093                         if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byPosition) {
2094                             replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by position but received parameters by name`), requestMessage.method, startTime);
2095                             return;
2096                         }
2097                         handlerResult = requestHandler(requestMessage.params, cancellationSource.token);
2098                     }
2099                 }
2100                 else if (starRequestHandler) {
2101                     handlerResult = starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
2102                 }
2103                 const promise = handlerResult;
2104                 if (!handlerResult) {
2105                     delete requestTokens[tokenKey];
2106                     replySuccess(handlerResult, requestMessage.method, startTime);
2107                 }
2108                 else if (promise.then) {
2109                     promise.then((resultOrError) => {
2110                         delete requestTokens[tokenKey];
2111                         reply(resultOrError, requestMessage.method, startTime);
2112                     }, error => {
2113                         delete requestTokens[tokenKey];
2114                         if (error instanceof messages_1.ResponseError) {
2115                             replyError(error, requestMessage.method, startTime);
2116                         }
2117                         else if (error && Is.string(error.message)) {
2118                             replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
2119                         }
2120                         else {
2121                             replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
2122                         }
2123                     });
2124                 }
2125                 else {
2126                     delete requestTokens[tokenKey];
2127                     reply(handlerResult, requestMessage.method, startTime);
2128                 }
2129             }
2130             catch (error) {
2131                 delete requestTokens[tokenKey];
2132                 if (error instanceof messages_1.ResponseError) {
2133                     reply(error, requestMessage.method, startTime);
2134                 }
2135                 else if (error && Is.string(error.message)) {
2136                     replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
2137                 }
2138                 else {
2139                     replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
2140                 }
2141             }
2142         }
2143         else {
2144             replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
2145         }
2146     }
2147     function handleResponse(responseMessage) {
2148         if (isDisposed()) {
2149             // See handle request.
2150             return;
2151         }
2152         if (responseMessage.id === null) {
2153             if (responseMessage.error) {
2154                 logger.error(`Received response message without id: Error is: \n${JSON.stringify(responseMessage.error, undefined, 4)}`);
2155             }
2156             else {
2157                 logger.error(`Received response message without id. No further error information provided.`);
2158             }
2159         }
2160         else {
2161             const key = String(responseMessage.id);
2162             const responsePromise = responsePromises[key];
2163             traceReceivedResponse(responseMessage, responsePromise);
2164             if (responsePromise) {
2165                 delete responsePromises[key];
2166                 try {
2167                     if (responseMessage.error) {
2168                         const error = responseMessage.error;
2169                         responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
2170                     }
2171                     else if (responseMessage.result !== undefined) {
2172                         responsePromise.resolve(responseMessage.result);
2173                     }
2174                     else {
2175                         throw new Error('Should never happen.');
2176                     }
2177                 }
2178                 catch (error) {
2179                     if (error.message) {
2180                         logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
2181                     }
2182                     else {
2183                         logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
2184                     }
2185                 }
2186             }
2187         }
2188     }
2189     function handleNotification(message) {
2190         if (isDisposed()) {
2191             // See handle request.
2192             return;
2193         }
2194         let type = undefined;
2195         let notificationHandler;
2196         if (message.method === CancelNotification.type.method) {
2197             notificationHandler = (params) => {
2198                 const id = params.id;
2199                 const source = requestTokens[String(id)];
2200                 if (source) {
2201                     source.cancel();
2202                 }
2203             };
2204         }
2205         else {
2206             const element = notificationHandlers[message.method];
2207             if (element) {
2208                 notificationHandler = element.handler;
2209                 type = element.type;
2210             }
2211         }
2212         if (notificationHandler || starNotificationHandler) {
2213             try {
2214                 traceReceivedNotification(message);
2215                 if (notificationHandler) {
2216                     if (message.params === undefined) {
2217                         if (type !== undefined) {
2218                             if (type.numberOfParams !== 0 && type.parameterStructures !== messages_1.ParameterStructures.byName) {
2219                                 logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but recevied none.`);
2220                             }
2221                         }
2222                         notificationHandler();
2223                     }
2224                     else if (Array.isArray(message.params)) {
2225                         if (type !== undefined) {
2226                             if (type.parameterStructures === messages_1.ParameterStructures.byName) {
2227                                 logger.error(`Notification ${message.method} defines parameters by name but received parameters by position`);
2228                             }
2229                             if (type.numberOfParams !== message.params.length) {
2230                                 logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received ${message.params.length} argumennts`);
2231                             }
2232                         }
2233                         notificationHandler(...message.params);
2234                     }
2235                     else {
2236                         if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byPosition) {
2237                             logger.error(`Notification ${message.method} defines parameters by position but received parameters by name`);
2238                         }
2239                         notificationHandler(message.params);
2240                     }
2241                 }
2242                 else if (starNotificationHandler) {
2243                     starNotificationHandler(message.method, message.params);
2244                 }
2245             }
2246             catch (error) {
2247                 if (error.message) {
2248                     logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
2249                 }
2250                 else {
2251                     logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
2252                 }
2253             }
2254         }
2255         else {
2256             unhandledNotificationEmitter.fire(message);
2257         }
2258     }
2259     function handleInvalidMessage(message) {
2260         if (!message) {
2261             logger.error('Received empty message.');
2262             return;
2263         }
2264         logger.error(`Received message which is neither a response nor a notification message:\n${JSON.stringify(message, null, 4)}`);
2265         // Test whether we find an id to reject the promise
2266         const responseMessage = message;
2267         if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {
2268             const key = String(responseMessage.id);
2269             const responseHandler = responsePromises[key];
2270             if (responseHandler) {
2271                 responseHandler.reject(new Error('The received response has neither a result nor an error property.'));
2272             }
2273         }
2274     }
2275     function traceSendingRequest(message) {
2276         if (trace === Trace.Off || !tracer) {
2277             return;
2278         }
2279         if (traceFormat === TraceFormat.Text) {
2280             let data = undefined;
2281             if (trace === Trace.Verbose && message.params) {
2282                 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
2283             }
2284             tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
2285         }
2286         else {
2287             logLSPMessage('send-request', message);
2288         }
2289     }
2290     function traceSendingNotification(message) {
2291         if (trace === Trace.Off || !tracer) {
2292             return;
2293         }
2294         if (traceFormat === TraceFormat.Text) {
2295             let data = undefined;
2296             if (trace === Trace.Verbose) {
2297                 if (message.params) {
2298                     data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
2299                 }
2300                 else {
2301                     data = 'No parameters provided.\n\n';
2302                 }
2303             }
2304             tracer.log(`Sending notification '${message.method}'.`, data);
2305         }
2306         else {
2307             logLSPMessage('send-notification', message);
2308         }
2309     }
2310     function traceSendingResponse(message, method, startTime) {
2311         if (trace === Trace.Off || !tracer) {
2312             return;
2313         }
2314         if (traceFormat === TraceFormat.Text) {
2315             let data = undefined;
2316             if (trace === Trace.Verbose) {
2317                 if (message.error && message.error.data) {
2318                     data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;
2319                 }
2320                 else {
2321                     if (message.result) {
2322                         data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;
2323                     }
2324                     else if (message.error === undefined) {
2325                         data = 'No result returned.\n\n';
2326                     }
2327                 }
2328             }
2329             tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
2330         }
2331         else {
2332             logLSPMessage('send-response', message);
2333         }
2334     }
2335     function traceReceivedRequest(message) {
2336         if (trace === Trace.Off || !tracer) {
2337             return;
2338         }
2339         if (traceFormat === TraceFormat.Text) {
2340             let data = undefined;
2341             if (trace === Trace.Verbose && message.params) {
2342                 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
2343             }
2344             tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
2345         }
2346         else {
2347             logLSPMessage('receive-request', message);
2348         }
2349     }
2350     function traceReceivedNotification(message) {
2351         if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {
2352             return;
2353         }
2354         if (traceFormat === TraceFormat.Text) {
2355             let data = undefined;
2356             if (trace === Trace.Verbose) {
2357                 if (message.params) {
2358                     data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
2359                 }
2360                 else {
2361                     data = 'No parameters provided.\n\n';
2362                 }
2363             }
2364             tracer.log(`Received notification '${message.method}'.`, data);
2365         }
2366         else {
2367             logLSPMessage('receive-notification', message);
2368         }
2369     }
2370     function traceReceivedResponse(message, responsePromise) {
2371         if (trace === Trace.Off || !tracer) {
2372             return;
2373         }
2374         if (traceFormat === TraceFormat.Text) {
2375             let data = undefined;
2376             if (trace === Trace.Verbose) {
2377                 if (message.error && message.error.data) {
2378                     data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;
2379                 }
2380                 else {
2381                     if (message.result) {
2382                         data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;
2383                     }
2384                     else if (message.error === undefined) {
2385                         data = 'No result returned.\n\n';
2386                     }
2387                 }
2388             }
2389             if (responsePromise) {
2390                 const error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : '';
2391                 tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
2392             }
2393             else {
2394                 tracer.log(`Received response ${message.id} without active response promise.`, data);
2395             }
2396         }
2397         else {
2398             logLSPMessage('receive-response', message);
2399         }
2400     }
2401     function logLSPMessage(type, message) {
2402         if (!tracer || trace === Trace.Off) {
2403             return;
2404         }
2405         const lspMessage = {
2406             isLSPMessage: true,
2407             type,
2408             message,
2409             timestamp: Date.now()
2410         };
2411         tracer.log(lspMessage);
2412     }
2413     function throwIfClosedOrDisposed() {
2414         if (isClosed()) {
2415             throw new ConnectionError(ConnectionErrors.Closed, 'Connection is closed.');
2416         }
2417         if (isDisposed()) {
2418             throw new ConnectionError(ConnectionErrors.Disposed, 'Connection is disposed.');
2419         }
2420     }
2421     function throwIfListening() {
2422         if (isListening()) {
2423             throw new ConnectionError(ConnectionErrors.AlreadyListening, 'Connection is already listening');
2424         }
2425     }
2426     function throwIfNotListening() {
2427         if (!isListening()) {
2428             throw new Error('Call listen() first.');
2429         }
2430     }
2431     function undefinedToNull(param) {
2432         if (param === undefined) {
2433             return null;
2434         }
2435         else {
2436             return param;
2437         }
2438     }
2439     function nullToUndefined(param) {
2440         if (param === null) {
2441             return undefined;
2442         }
2443         else {
2444             return param;
2445         }
2446     }
2447     function isNamedParam(param) {
2448         return param !== undefined && param !== null && !Array.isArray(param) && typeof param === 'object';
2449     }
2450     function computeSingleParam(parameterStructures, param) {
2451         switch (parameterStructures) {
2452             case messages_1.ParameterStructures.auto:
2453                 if (isNamedParam(param)) {
2454                     return nullToUndefined(param);
2455                 }
2456                 else {
2457                     return [undefinedToNull(param)];
2458                 }
2459                 break;
2460             case messages_1.ParameterStructures.byName:
2461                 if (!isNamedParam(param)) {
2462                     throw new Error(`Recevied parameters by name but param is not an object literal.`);
2463                 }
2464                 return nullToUndefined(param);
2465             case messages_1.ParameterStructures.byPosition:
2466                 return [undefinedToNull(param)];
2467             default:
2468                 throw new Error(`Unknown parameter structure ${parameterStructures.toString()}`);
2469         }
2470     }
2471     function computeMessageParams(type, params) {
2472         let result;
2473         const numberOfParams = type.numberOfParams;
2474         switch (numberOfParams) {
2475             case 0:
2476                 result = undefined;
2477                 break;
2478             case 1:
2479                 result = computeSingleParam(type.parameterStructures, params[0]);
2480                 break;
2481             default:
2482                 result = [];
2483                 for (let i = 0; i < params.length && i < numberOfParams; i++) {
2484                     result.push(undefinedToNull(params[i]));
2485                 }
2486                 if (params.length < numberOfParams) {
2487                     for (let i = params.length; i < numberOfParams; i++) {
2488                         result.push(null);
2489                     }
2490                 }
2491                 break;
2492         }
2493         return result;
2494     }
2495     const connection = {
2496         sendNotification: (type, ...args) => {
2497             throwIfClosedOrDisposed();
2498             let method;
2499             let messageParams;
2500             if (Is.string(type)) {
2501                 method = type;
2502                 const first = args[0];
2503                 let paramStart = 0;
2504                 let parameterStructures = messages_1.ParameterStructures.auto;
2505                 if (messages_1.ParameterStructures.is(first)) {
2506                     paramStart = 1;
2507                     parameterStructures = first;
2508                 }
2509                 let paramEnd = args.length;
2510                 const numberOfParams = paramEnd - paramStart;
2511                 switch (numberOfParams) {
2512                     case 0:
2513                         messageParams = undefined;
2514                         break;
2515                     case 1:
2516                         messageParams = computeSingleParam(parameterStructures, args[paramStart]);
2517                         break;
2518                     default:
2519                         if (parameterStructures === messages_1.ParameterStructures.byName) {
2520                             throw new Error(`Recevied ${numberOfParams} parameters for 'by Name' notification parameter structure.`);
2521                         }
2522                         messageParams = args.slice(paramStart, paramEnd).map(value => undefinedToNull(value));
2523                         break;
2524                 }
2525             }
2526             else {
2527                 const params = args;
2528                 method = type.method;
2529                 messageParams = computeMessageParams(type, params);
2530             }
2531             const notificationMessage = {
2532                 jsonrpc: version,
2533                 method: method,
2534                 params: messageParams
2535             };
2536             traceSendingNotification(notificationMessage);
2537             messageWriter.write(notificationMessage);
2538         },
2539         onNotification: (type, handler) => {
2540             throwIfClosedOrDisposed();
2541             let method;
2542             if (Is.func(type)) {
2543                 starNotificationHandler = type;
2544             }
2545             else if (handler) {
2546                 if (Is.string(type)) {
2547                     method = type;
2548                     notificationHandlers[type] = { type: undefined, handler };
2549                 }
2550                 else {
2551                     method = type.method;
2552                     notificationHandlers[type.method] = { type, handler };
2553                 }
2554             }
2555             return {
2556                 dispose: () => {
2557                     if (method !== undefined) {
2558                         delete notificationHandlers[method];
2559                     }
2560                     else {
2561                         starNotificationHandler = undefined;
2562                     }
2563                 }
2564             };
2565         },
2566         onProgress: (_type, token, handler) => {
2567             if (progressHandlers.has(token)) {
2568                 throw new Error(`Progress handler for token ${token} already registered`);
2569             }
2570             progressHandlers.set(token, handler);
2571             return {
2572                 dispose: () => {
2573                     progressHandlers.delete(token);
2574                 }
2575             };
2576         },
2577         sendProgress: (_type, token, value) => {
2578             connection.sendNotification(ProgressNotification.type, { token, value });
2579         },
2580         onUnhandledProgress: unhandledProgressEmitter.event,
2581         sendRequest: (type, ...args) => {
2582             throwIfClosedOrDisposed();
2583             throwIfNotListening();
2584             let method;
2585             let messageParams;
2586             let token = undefined;
2587             if (Is.string(type)) {
2588                 method = type;
2589                 const first = args[0];
2590                 const last = args[args.length - 1];
2591                 let paramStart = 0;
2592                 let parameterStructures = messages_1.ParameterStructures.auto;
2593                 if (messages_1.ParameterStructures.is(first)) {
2594                     paramStart = 1;
2595                     parameterStructures = first;
2596                 }
2597                 let paramEnd = args.length;
2598                 if (cancellation_1.CancellationToken.is(last)) {
2599                     paramEnd = paramEnd - 1;
2600                     token = last;
2601                 }
2602                 const numberOfParams = paramEnd - paramStart;
2603                 switch (numberOfParams) {
2604                     case 0:
2605                         messageParams = undefined;
2606                         break;
2607                     case 1:
2608                         messageParams = computeSingleParam(parameterStructures, args[paramStart]);
2609                         break;
2610                     default:
2611                         if (parameterStructures === messages_1.ParameterStructures.byName) {
2612                             throw new Error(`Recevied ${numberOfParams} parameters for 'by Name' request parameter structure.`);
2613                         }
2614                         messageParams = args.slice(paramStart, paramEnd).map(value => undefinedToNull(value));
2615                         break;
2616                 }
2617             }
2618             else {
2619                 const params = args;
2620                 method = type.method;
2621                 messageParams = computeMessageParams(type, params);
2622                 const numberOfParams = type.numberOfParams;
2623                 token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : undefined;
2624             }
2625             const id = sequenceNumber++;
2626             let disposable;
2627             if (token) {
2628                 disposable = token.onCancellationRequested(() => {
2629                     cancellationStrategy.sender.sendCancellation(connection, id);
2630                 });
2631             }
2632             const result = new Promise((resolve, reject) => {
2633                 const requestMessage = {
2634                     jsonrpc: version,
2635                     id: id,
2636                     method: method,
2637                     params: messageParams
2638                 };
2639                 const resolveWithCleanup = (r) => {
2640                     resolve(r);
2641                     cancellationStrategy.sender.cleanup(id);
2642                     disposable === null || disposable === void 0 ? void 0 : disposable.dispose();
2643                 };
2644                 const rejectWithCleanup = (r) => {
2645                     reject(r);
2646                     cancellationStrategy.sender.cleanup(id);
2647                     disposable === null || disposable === void 0 ? void 0 : disposable.dispose();
2648                 };
2649                 let responsePromise = { method: method, timerStart: Date.now(), resolve: resolveWithCleanup, reject: rejectWithCleanup };
2650                 traceSendingRequest(requestMessage);
2651                 try {
2652                     messageWriter.write(requestMessage);
2653                 }
2654                 catch (e) {
2655                     // Writing the message failed. So we need to reject the promise.
2656                     responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : 'Unknown reason'));
2657                     responsePromise = null;
2658                 }
2659                 if (responsePromise) {
2660                     responsePromises[String(id)] = responsePromise;
2661                 }
2662             });
2663             return result;
2664         },
2665         onRequest: (type, handler) => {
2666             throwIfClosedOrDisposed();
2667             let method = null;
2668             if (StarRequestHandler.is(type)) {
2669                 method = undefined;
2670                 starRequestHandler = type;
2671             }
2672             else if (Is.string(type)) {
2673                 method = null;
2674                 if (handler !== undefined) {
2675                     method = type;
2676                     requestHandlers[type] = { handler: handler, type: undefined };
2677                 }
2678             }
2679             else {
2680                 if (handler !== undefined) {
2681                     method = type.method;
2682                     requestHandlers[type.method] = { type, handler };
2683                 }
2684             }
2685             return {
2686                 dispose: () => {
2687                     if (method === null) {
2688                         return;
2689                     }
2690                     if (method !== undefined) {
2691                         delete requestHandlers[method];
2692                     }
2693                     else {
2694                         starRequestHandler = undefined;
2695                     }
2696                 }
2697             };
2698         },
2699         trace: (_value, _tracer, sendNotificationOrTraceOptions) => {
2700             let _sendNotification = false;
2701             let _traceFormat = TraceFormat.Text;
2702             if (sendNotificationOrTraceOptions !== undefined) {
2703                 if (Is.boolean(sendNotificationOrTraceOptions)) {
2704                     _sendNotification = sendNotificationOrTraceOptions;
2705                 }
2706                 else {
2707                     _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
2708                     _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
2709                 }
2710             }
2711             trace = _value;
2712             traceFormat = _traceFormat;
2713             if (trace === Trace.Off) {
2714                 tracer = undefined;
2715             }
2716             else {
2717                 tracer = _tracer;
2718             }
2719             if (_sendNotification && !isClosed() && !isDisposed()) {
2720                 connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });
2721             }
2722         },
2723         onError: errorEmitter.event,
2724         onClose: closeEmitter.event,
2725         onUnhandledNotification: unhandledNotificationEmitter.event,
2726         onDispose: disposeEmitter.event,
2727         end: () => {
2728             messageWriter.end();
2729         },
2730         dispose: () => {
2731             if (isDisposed()) {
2732                 return;
2733             }
2734             state = ConnectionState.Disposed;
2735             disposeEmitter.fire(undefined);
2736             const error = new Error('Connection got disposed.');
2737             Object.keys(responsePromises).forEach((key) => {
2738                 responsePromises[key].reject(error);
2739             });
2740             responsePromises = Object.create(null);
2741             requestTokens = Object.create(null);
2742             messageQueue = new linkedMap_1.LinkedMap();
2743             // Test for backwards compatibility
2744             if (Is.func(messageWriter.dispose)) {
2745                 messageWriter.dispose();
2746             }
2747             if (Is.func(messageReader.dispose)) {
2748                 messageReader.dispose();
2749             }
2750         },
2751         listen: () => {
2752             throwIfClosedOrDisposed();
2753             throwIfListening();
2754             state = ConnectionState.Listening;
2755             messageReader.listen(callback);
2756         },
2757         inspect: () => {
2758             // eslint-disable-next-line no-console
2759             ral_1.default().console.log('inspect');
2760         }
2761     };
2762     connection.onNotification(LogTraceNotification.type, (params) => {
2763         if (trace === Trace.Off || !tracer) {
2764             return;
2765         }
2766         tracer.log(params.message, trace === Trace.Verbose ? params.verbose : undefined);
2767     });
2768     connection.onNotification(ProgressNotification.type, (params) => {
2769         const handler = progressHandlers.get(params.token);
2770         if (handler) {
2771             handler(params.value);
2772         }
2773         else {
2774             unhandledProgressEmitter.fire(params);
2775         }
2776     });
2777     return connection;
2778 }
2779 exports.createMessageConnection = createMessageConnection;
2780 //# sourceMappingURL=connection.js.map
2781
2782 /***/ }),
2783 /* 21 */
2784 /***/ ((__unused_webpack_module, exports) => {
2785
2786
2787 /*---------------------------------------------------------------------------------------------
2788  *  Copyright (c) Microsoft Corporation. All rights reserved.
2789  *  Licensed under the MIT License. See License.txt in the project root for license information.
2790  *--------------------------------------------------------------------------------------------*/
2791 Object.defineProperty(exports, "__esModule", ({ value: true }));
2792 exports.LRUCache = exports.LinkedMap = exports.Touch = void 0;
2793 var Touch;
2794 (function (Touch) {
2795     Touch.None = 0;
2796     Touch.First = 1;
2797     Touch.AsOld = Touch.First;
2798     Touch.Last = 2;
2799     Touch.AsNew = Touch.Last;
2800 })(Touch = exports.Touch || (exports.Touch = {}));
2801 class LinkedMap {
2802     constructor() {
2803         this[Symbol.toStringTag] = 'LinkedMap';
2804         this._map = new Map();
2805         this._head = undefined;
2806         this._tail = undefined;
2807         this._size = 0;
2808         this._state = 0;
2809     }
2810     clear() {
2811         this._map.clear();
2812         this._head = undefined;
2813         this._tail = undefined;
2814         this._size = 0;
2815         this._state++;
2816     }
2817     isEmpty() {
2818         return !this._head && !this._tail;
2819     }
2820     get size() {
2821         return this._size;
2822     }
2823     get first() {
2824         var _a;
2825         return (_a = this._head) === null || _a === void 0 ? void 0 : _a.value;
2826     }
2827     get last() {
2828         var _a;
2829         return (_a = this._tail) === null || _a === void 0 ? void 0 : _a.value;
2830     }
2831     has(key) {
2832         return this._map.has(key);
2833     }
2834     get(key, touch = Touch.None) {
2835         const item = this._map.get(key);
2836         if (!item) {
2837             return undefined;
2838         }
2839         if (touch !== Touch.None) {
2840             this.touch(item, touch);
2841         }
2842         return item.value;
2843     }
2844     set(key, value, touch = Touch.None) {
2845         let item = this._map.get(key);
2846         if (item) {
2847             item.value = value;
2848             if (touch !== Touch.None) {
2849                 this.touch(item, touch);
2850             }
2851         }
2852         else {
2853             item = { key, value, next: undefined, previous: undefined };
2854             switch (touch) {
2855                 case Touch.None:
2856                     this.addItemLast(item);
2857                     break;
2858                 case Touch.First:
2859                     this.addItemFirst(item);
2860                     break;
2861                 case Touch.Last:
2862                     this.addItemLast(item);
2863                     break;
2864                 default:
2865                     this.addItemLast(item);
2866                     break;
2867             }
2868             this._map.set(key, item);
2869             this._size++;
2870         }
2871         return this;
2872     }
2873     delete(key) {
2874         return !!this.remove(key);
2875     }
2876     remove(key) {
2877         const item = this._map.get(key);
2878         if (!item) {
2879             return undefined;
2880         }
2881         this._map.delete(key);
2882         this.removeItem(item);
2883         this._size--;
2884         return item.value;
2885     }
2886     shift() {
2887         if (!this._head && !this._tail) {
2888             return undefined;
2889         }
2890         if (!this._head || !this._tail) {
2891             throw new Error('Invalid list');
2892         }
2893         const item = this._head;
2894         this._map.delete(item.key);
2895         this.removeItem(item);
2896         this._size--;
2897         return item.value;
2898     }
2899     forEach(callbackfn, thisArg) {
2900         const state = this._state;
2901         let current = this._head;
2902         while (current) {
2903             if (thisArg) {
2904                 callbackfn.bind(thisArg)(current.value, current.key, this);
2905             }
2906             else {
2907                 callbackfn(current.value, current.key, this);
2908             }
2909             if (this._state !== state) {
2910                 throw new Error(`LinkedMap got modified during iteration.`);
2911             }
2912             current = current.next;
2913         }
2914     }
2915     keys() {
2916         const map = this;
2917         const state = this._state;
2918         let current = this._head;
2919         const iterator = {
2920             [Symbol.iterator]() {
2921                 return iterator;
2922             },
2923             next() {
2924                 if (map._state !== state) {
2925                     throw new Error(`LinkedMap got modified during iteration.`);
2926                 }
2927                 if (current) {
2928                     const result = { value: current.key, done: false };
2929                     current = current.next;
2930                     return result;
2931                 }
2932                 else {
2933                     return { value: undefined, done: true };
2934                 }
2935             }
2936         };
2937         return iterator;
2938     }
2939     values() {
2940         const map = this;
2941         const state = this._state;
2942         let current = this._head;
2943         const iterator = {
2944             [Symbol.iterator]() {
2945                 return iterator;
2946             },
2947             next() {
2948                 if (map._state !== state) {
2949                     throw new Error(`LinkedMap got modified during iteration.`);
2950                 }
2951                 if (current) {
2952                     const result = { value: current.value, done: false };
2953                     current = current.next;
2954                     return result;
2955                 }
2956                 else {
2957                     return { value: undefined, done: true };
2958                 }
2959             }
2960         };
2961         return iterator;
2962     }
2963     entries() {
2964         const map = this;
2965         const state = this._state;
2966         let current = this._head;
2967         const iterator = {
2968             [Symbol.iterator]() {
2969                 return iterator;
2970             },
2971             next() {
2972                 if (map._state !== state) {
2973                     throw new Error(`LinkedMap got modified during iteration.`);
2974                 }
2975                 if (current) {
2976                     const result = { value: [current.key, current.value], done: false };
2977                     current = current.next;
2978                     return result;
2979                 }
2980                 else {
2981                     return { value: undefined, done: true };
2982                 }
2983             }
2984         };
2985         return iterator;
2986     }
2987     [Symbol.iterator]() {
2988         return this.entries();
2989     }
2990     trimOld(newSize) {
2991         if (newSize >= this.size) {
2992             return;
2993         }
2994         if (newSize === 0) {
2995             this.clear();
2996             return;
2997         }
2998         let current = this._head;
2999         let currentSize = this.size;
3000         while (current && currentSize > newSize) {
3001             this._map.delete(current.key);
3002             current = current.next;
3003             currentSize--;
3004         }
3005         this._head = current;
3006         this._size = currentSize;
3007         if (current) {
3008             current.previous = undefined;
3009         }
3010         this._state++;
3011     }
3012     addItemFirst(item) {
3013         // First time Insert
3014         if (!this._head && !this._tail) {
3015             this._tail = item;
3016         }
3017         else if (!this._head) {
3018             throw new Error('Invalid list');
3019         }
3020         else {
3021             item.next = this._head;
3022             this._head.previous = item;
3023         }
3024         this._head = item;
3025         this._state++;
3026     }
3027     addItemLast(item) {
3028         // First time Insert
3029         if (!this._head && !this._tail) {
3030             this._head = item;
3031         }
3032         else if (!this._tail) {
3033             throw new Error('Invalid list');
3034         }
3035         else {
3036             item.previous = this._tail;
3037             this._tail.next = item;
3038         }
3039         this._tail = item;
3040         this._state++;
3041     }
3042     removeItem(item) {
3043         if (item === this._head && item === this._tail) {
3044             this._head = undefined;
3045             this._tail = undefined;
3046         }
3047         else if (item === this._head) {
3048             // This can only happend if size === 1 which is handle
3049             // by the case above.
3050             if (!item.next) {
3051                 throw new Error('Invalid list');
3052             }
3053             item.next.previous = undefined;
3054             this._head = item.next;
3055         }
3056         else if (item === this._tail) {
3057             // This can only happend if size === 1 which is handle
3058             // by the case above.
3059             if (!item.previous) {
3060                 throw new Error('Invalid list');
3061             }
3062             item.previous.next = undefined;
3063             this._tail = item.previous;
3064         }
3065         else {
3066             const next = item.next;
3067             const previous = item.previous;
3068             if (!next || !previous) {
3069                 throw new Error('Invalid list');
3070             }
3071             next.previous = previous;
3072             previous.next = next;
3073         }
3074         item.next = undefined;
3075         item.previous = undefined;
3076         this._state++;
3077     }
3078     touch(item, touch) {
3079         if (!this._head || !this._tail) {
3080             throw new Error('Invalid list');
3081         }
3082         if ((touch !== Touch.First && touch !== Touch.Last)) {
3083             return;
3084         }
3085         if (touch === Touch.First) {
3086             if (item === this._head) {
3087                 return;
3088             }
3089             const next = item.next;
3090             const previous = item.previous;
3091             // Unlink the item
3092             if (item === this._tail) {
3093                 // previous must be defined since item was not head but is tail
3094                 // So there are more than on item in the map
3095                 previous.next = undefined;
3096                 this._tail = previous;
3097             }
3098             else {
3099                 // Both next and previous are not undefined since item was neither head nor tail.
3100                 next.previous = previous;
3101                 previous.next = next;
3102             }
3103             // Insert the node at head
3104             item.previous = undefined;
3105             item.next = this._head;
3106             this._head.previous = item;
3107             this._head = item;
3108             this._state++;
3109         }
3110         else if (touch === Touch.Last) {
3111             if (item === this._tail) {
3112                 return;
3113             }
3114             const next = item.next;
3115             const previous = item.previous;
3116             // Unlink the item.
3117             if (item === this._head) {
3118                 // next must be defined since item was not tail but is head
3119                 // So there are more than on item in the map
3120                 next.previous = undefined;
3121                 this._head = next;
3122             }
3123             else {
3124                 // Both next and previous are not undefined since item was neither head nor tail.
3125                 next.previous = previous;
3126                 previous.next = next;
3127             }
3128             item.next = undefined;
3129             item.previous = this._tail;
3130             this._tail.next = item;
3131             this._tail = item;
3132             this._state++;
3133         }
3134     }
3135     toJSON() {
3136         const data = [];
3137         this.forEach((value, key) => {
3138             data.push([key, value]);
3139         });
3140         return data;
3141     }
3142     fromJSON(data) {
3143         this.clear();
3144         for (const [key, value] of data) {
3145             this.set(key, value);
3146         }
3147     }
3148 }
3149 exports.LinkedMap = LinkedMap;
3150 class LRUCache extends LinkedMap {
3151     constructor(limit, ratio = 1) {
3152         super();
3153         this._limit = limit;
3154         this._ratio = Math.min(Math.max(0, ratio), 1);
3155     }
3156     get limit() {
3157         return this._limit;
3158     }
3159     set limit(limit) {
3160         this._limit = limit;
3161         this.checkTrim();
3162     }
3163     get ratio() {
3164         return this._ratio;
3165     }
3166     set ratio(ratio) {
3167         this._ratio = Math.min(Math.max(0, ratio), 1);
3168         this.checkTrim();
3169     }
3170     get(key, touch = Touch.AsNew) {
3171         return super.get(key, touch);
3172     }
3173     peek(key) {
3174         return super.get(key, Touch.None);
3175     }
3176     set(key, value) {
3177         super.set(key, value, Touch.Last);
3178         this.checkTrim();
3179         return this;
3180     }
3181     checkTrim() {
3182         if (this.size > this._limit) {
3183             this.trimOld(Math.round(this._limit * this._ratio));
3184         }
3185     }
3186 }
3187 exports.LRUCache = LRUCache;
3188 //# sourceMappingURL=linkedMap.js.map
3189
3190 /***/ }),
3191 /* 22 */
3192 /***/ ((module) => {
3193
3194 module.exports = require("os");;
3195
3196 /***/ }),
3197 /* 23 */
3198 /***/ ((module) => {
3199
3200 module.exports = require("crypto");;
3201
3202 /***/ }),
3203 /* 24 */
3204 /***/ ((module) => {
3205
3206 module.exports = require("net");;
3207
3208 /***/ }),
3209 /* 25 */
3210 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
3211
3212
3213 /* --------------------------------------------------------------------------------------------
3214  * Copyright (c) Microsoft Corporation. All rights reserved.
3215  * Licensed under the MIT License. See License.txt in the project root for license information.
3216  * ------------------------------------------------------------------------------------------ */
3217 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3218     if (k2 === undefined) k2 = k;
3219     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
3220 }) : (function(o, m, k, k2) {
3221     if (k2 === undefined) k2 = k;
3222     o[k2] = m[k];
3223 }));
3224 var __exportStar = (this && this.__exportStar) || function(m, exports) {
3225     for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
3226 };
3227 Object.defineProperty(exports, "__esModule", ({ value: true }));
3228 exports.LSPErrorCodes = exports.createProtocolConnection = void 0;
3229 __exportStar(__webpack_require__(6), exports);
3230 __exportStar(__webpack_require__(26), exports);
3231 __exportStar(__webpack_require__(27), exports);
3232 __exportStar(__webpack_require__(28), exports);
3233 var connection_1 = __webpack_require__(45);
3234 Object.defineProperty(exports, "createProtocolConnection", ({ enumerable: true, get: function () { return connection_1.createProtocolConnection; } }));
3235 var LSPErrorCodes;
3236 (function (LSPErrorCodes) {
3237     /**
3238     * This is the start range of LSP reserved error codes.
3239     * It doesn't denote a real error code.
3240     *
3241     * @since 3.16.0
3242     */
3243     LSPErrorCodes.lspReservedErrorRangeStart = -32899;
3244     LSPErrorCodes.ContentModified = -32801;
3245     LSPErrorCodes.RequestCancelled = -32800;
3246     /**
3247     * This is the end range of LSP reserved error codes.
3248     * It doesn't denote a real error code.
3249     *
3250     * @since 3.16.0
3251     */
3252     LSPErrorCodes.lspReservedErrorRangeEnd = -32800;
3253 })(LSPErrorCodes = exports.LSPErrorCodes || (exports.LSPErrorCodes = {}));
3254 //# sourceMappingURL=api.js.map
3255
3256 /***/ }),
3257 /* 26 */
3258 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3259
3260 __webpack_require__.r(__webpack_exports__);
3261 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3262 /* harmony export */   "integer": () => /* binding */ integer,
3263 /* harmony export */   "uinteger": () => /* binding */ uinteger,
3264 /* harmony export */   "Position": () => /* binding */ Position,
3265 /* harmony export */   "Range": () => /* binding */ Range,
3266 /* harmony export */   "Location": () => /* binding */ Location,
3267 /* harmony export */   "LocationLink": () => /* binding */ LocationLink,
3268 /* harmony export */   "Color": () => /* binding */ Color,
3269 /* harmony export */   "ColorInformation": () => /* binding */ ColorInformation,
3270 /* harmony export */   "ColorPresentation": () => /* binding */ ColorPresentation,
3271 /* harmony export */   "FoldingRangeKind": () => /* binding */ FoldingRangeKind,
3272 /* harmony export */   "FoldingRange": () => /* binding */ FoldingRange,
3273 /* harmony export */   "DiagnosticRelatedInformation": () => /* binding */ DiagnosticRelatedInformation,
3274 /* harmony export */   "DiagnosticSeverity": () => /* binding */ DiagnosticSeverity,
3275 /* harmony export */   "DiagnosticTag": () => /* binding */ DiagnosticTag,
3276 /* harmony export */   "CodeDescription": () => /* binding */ CodeDescription,
3277 /* harmony export */   "Diagnostic": () => /* binding */ Diagnostic,
3278 /* harmony export */   "Command": () => /* binding */ Command,
3279 /* harmony export */   "TextEdit": () => /* binding */ TextEdit,
3280 /* harmony export */   "ChangeAnnotation": () => /* binding */ ChangeAnnotation,
3281 /* harmony export */   "ChangeAnnotationIdentifier": () => /* binding */ ChangeAnnotationIdentifier,
3282 /* harmony export */   "AnnotatedTextEdit": () => /* binding */ AnnotatedTextEdit,
3283 /* harmony export */   "TextDocumentEdit": () => /* binding */ TextDocumentEdit,
3284 /* harmony export */   "CreateFile": () => /* binding */ CreateFile,
3285 /* harmony export */   "RenameFile": () => /* binding */ RenameFile,
3286 /* harmony export */   "DeleteFile": () => /* binding */ DeleteFile,
3287 /* harmony export */   "WorkspaceEdit": () => /* binding */ WorkspaceEdit,
3288 /* harmony export */   "WorkspaceChange": () => /* binding */ WorkspaceChange,
3289 /* harmony export */   "TextDocumentIdentifier": () => /* binding */ TextDocumentIdentifier,
3290 /* harmony export */   "VersionedTextDocumentIdentifier": () => /* binding */ VersionedTextDocumentIdentifier,
3291 /* harmony export */   "OptionalVersionedTextDocumentIdentifier": () => /* binding */ OptionalVersionedTextDocumentIdentifier,
3292 /* harmony export */   "TextDocumentItem": () => /* binding */ TextDocumentItem,
3293 /* harmony export */   "MarkupKind": () => /* binding */ MarkupKind,
3294 /* harmony export */   "MarkupContent": () => /* binding */ MarkupContent,
3295 /* harmony export */   "CompletionItemKind": () => /* binding */ CompletionItemKind,
3296 /* harmony export */   "InsertTextFormat": () => /* binding */ InsertTextFormat,
3297 /* harmony export */   "CompletionItemTag": () => /* binding */ CompletionItemTag,
3298 /* harmony export */   "InsertReplaceEdit": () => /* binding */ InsertReplaceEdit,
3299 /* harmony export */   "InsertTextMode": () => /* binding */ InsertTextMode,
3300 /* harmony export */   "CompletionItem": () => /* binding */ CompletionItem,
3301 /* harmony export */   "CompletionList": () => /* binding */ CompletionList,
3302 /* harmony export */   "MarkedString": () => /* binding */ MarkedString,
3303 /* harmony export */   "Hover": () => /* binding */ Hover,
3304 /* harmony export */   "ParameterInformation": () => /* binding */ ParameterInformation,
3305 /* harmony export */   "SignatureInformation": () => /* binding */ SignatureInformation,
3306 /* harmony export */   "DocumentHighlightKind": () => /* binding */ DocumentHighlightKind,
3307 /* harmony export */   "DocumentHighlight": () => /* binding */ DocumentHighlight,
3308 /* harmony export */   "SymbolKind": () => /* binding */ SymbolKind,
3309 /* harmony export */   "SymbolTag": () => /* binding */ SymbolTag,
3310 /* harmony export */   "SymbolInformation": () => /* binding */ SymbolInformation,
3311 /* harmony export */   "DocumentSymbol": () => /* binding */ DocumentSymbol,
3312 /* harmony export */   "CodeActionKind": () => /* binding */ CodeActionKind,
3313 /* harmony export */   "CodeActionContext": () => /* binding */ CodeActionContext,
3314 /* harmony export */   "CodeAction": () => /* binding */ CodeAction,
3315 /* harmony export */   "CodeLens": () => /* binding */ CodeLens,
3316 /* harmony export */   "FormattingOptions": () => /* binding */ FormattingOptions,
3317 /* harmony export */   "DocumentLink": () => /* binding */ DocumentLink,
3318 /* harmony export */   "SelectionRange": () => /* binding */ SelectionRange,
3319 /* harmony export */   "EOL": () => /* binding */ EOL,
3320 /* harmony export */   "TextDocument": () => /* binding */ TextDocument
3321 /* harmony export */ });
3322 /* --------------------------------------------------------------------------------------------
3323  * Copyright (c) Microsoft Corporation. All rights reserved.
3324  * Licensed under the MIT License. See License.txt in the project root for license information.
3325  * ------------------------------------------------------------------------------------------ */
3326
3327 var integer;
3328 (function (integer) {
3329     integer.MIN_VALUE = -2147483648;
3330     integer.MAX_VALUE = 2147483647;
3331 })(integer || (integer = {}));
3332 var uinteger;
3333 (function (uinteger) {
3334     uinteger.MIN_VALUE = 0;
3335     uinteger.MAX_VALUE = 2147483647;
3336 })(uinteger || (uinteger = {}));
3337 /**
3338  * The Position namespace provides helper functions to work with
3339  * [Position](#Position) literals.
3340  */
3341 var Position;
3342 (function (Position) {
3343     /**
3344      * Creates a new Position literal from the given line and character.
3345      * @param line The position's line.
3346      * @param character The position's character.
3347      */
3348     function create(line, character) {
3349         if (line === Number.MAX_VALUE) {
3350             line = uinteger.MAX_VALUE;
3351         }
3352         if (character === Number.MAX_VALUE) {
3353             character = uinteger.MAX_VALUE;
3354         }
3355         return { line: line, character: character };
3356     }
3357     Position.create = create;
3358     /**
3359      * Checks whether the given literal conforms to the [Position](#Position) interface.
3360      */
3361     function is(value) {
3362         var candidate = value;
3363         return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);
3364     }
3365     Position.is = is;
3366 })(Position || (Position = {}));
3367 /**
3368  * The Range namespace provides helper functions to work with
3369  * [Range](#Range) literals.
3370  */
3371 var Range;
3372 (function (Range) {
3373     function create(one, two, three, four) {
3374         if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {
3375             return { start: Position.create(one, two), end: Position.create(three, four) };
3376         }
3377         else if (Position.is(one) && Position.is(two)) {
3378             return { start: one, end: two };
3379         }
3380         else {
3381             throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");
3382         }
3383     }
3384     Range.create = create;
3385     /**
3386      * Checks whether the given literal conforms to the [Range](#Range) interface.
3387      */
3388     function is(value) {
3389         var candidate = value;
3390         return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
3391     }
3392     Range.is = is;
3393 })(Range || (Range = {}));
3394 /**
3395  * The Location namespace provides helper functions to work with
3396  * [Location](#Location) literals.
3397  */
3398 var Location;
3399 (function (Location) {
3400     /**
3401      * Creates a Location literal.
3402      * @param uri The location's uri.
3403      * @param range The location's range.
3404      */
3405     function create(uri, range) {
3406         return { uri: uri, range: range };
3407     }
3408     Location.create = create;
3409     /**
3410      * Checks whether the given literal conforms to the [Location](#Location) interface.
3411      */
3412     function is(value) {
3413         var candidate = value;
3414         return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
3415     }
3416     Location.is = is;
3417 })(Location || (Location = {}));
3418 /**
3419  * The LocationLink namespace provides helper functions to work with
3420  * [LocationLink](#LocationLink) literals.
3421  */
3422 var LocationLink;
3423 (function (LocationLink) {
3424     /**
3425      * Creates a LocationLink literal.
3426      * @param targetUri The definition's uri.
3427      * @param targetRange The full range of the definition.
3428      * @param targetSelectionRange The span of the symbol definition at the target.
3429      * @param originSelectionRange The span of the symbol being defined in the originating source file.
3430      */
3431     function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
3432         return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };
3433     }
3434     LocationLink.create = create;
3435     /**
3436      * Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.
3437      */
3438     function is(value) {
3439         var candidate = value;
3440         return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)
3441             && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange))
3442             && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
3443     }
3444     LocationLink.is = is;
3445 })(LocationLink || (LocationLink = {}));
3446 /**
3447  * The Color namespace provides helper functions to work with
3448  * [Color](#Color) literals.
3449  */
3450 var Color;
3451 (function (Color) {
3452     /**
3453      * Creates a new Color literal.
3454      */
3455     function create(red, green, blue, alpha) {
3456         return {
3457             red: red,
3458             green: green,
3459             blue: blue,
3460             alpha: alpha,
3461         };
3462     }
3463     Color.create = create;
3464     /**
3465      * Checks whether the given literal conforms to the [Color](#Color) interface.
3466      */
3467     function is(value) {
3468         var candidate = value;
3469         return Is.numberRange(candidate.red, 0, 1)
3470             && Is.numberRange(candidate.green, 0, 1)
3471             && Is.numberRange(candidate.blue, 0, 1)
3472             && Is.numberRange(candidate.alpha, 0, 1);
3473     }
3474     Color.is = is;
3475 })(Color || (Color = {}));
3476 /**
3477  * The ColorInformation namespace provides helper functions to work with
3478  * [ColorInformation](#ColorInformation) literals.
3479  */
3480 var ColorInformation;
3481 (function (ColorInformation) {
3482     /**
3483      * Creates a new ColorInformation literal.
3484      */
3485     function create(range, color) {
3486         return {
3487             range: range,
3488             color: color,
3489         };
3490     }
3491     ColorInformation.create = create;
3492     /**
3493      * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
3494      */
3495     function is(value) {
3496         var candidate = value;
3497         return Range.is(candidate.range) && Color.is(candidate.color);
3498     }
3499     ColorInformation.is = is;
3500 })(ColorInformation || (ColorInformation = {}));
3501 /**
3502  * The Color namespace provides helper functions to work with
3503  * [ColorPresentation](#ColorPresentation) literals.
3504  */
3505 var ColorPresentation;
3506 (function (ColorPresentation) {
3507     /**
3508      * Creates a new ColorInformation literal.
3509      */
3510     function create(label, textEdit, additionalTextEdits) {
3511         return {
3512             label: label,
3513             textEdit: textEdit,
3514             additionalTextEdits: additionalTextEdits,
3515         };
3516     }
3517     ColorPresentation.create = create;
3518     /**
3519      * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
3520      */
3521     function is(value) {
3522         var candidate = value;
3523         return Is.string(candidate.label)
3524             && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))
3525             && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
3526     }
3527     ColorPresentation.is = is;
3528 })(ColorPresentation || (ColorPresentation = {}));
3529 /**
3530  * Enum of known range kinds
3531  */
3532 var FoldingRangeKind;
3533 (function (FoldingRangeKind) {
3534     /**
3535      * Folding range for a comment
3536      */
3537     FoldingRangeKind["Comment"] = "comment";
3538     /**
3539      * Folding range for a imports or includes
3540      */
3541     FoldingRangeKind["Imports"] = "imports";
3542     /**
3543      * Folding range for a region (e.g. `#region`)
3544      */
3545     FoldingRangeKind["Region"] = "region";
3546 })(FoldingRangeKind || (FoldingRangeKind = {}));
3547 /**
3548  * The folding range namespace provides helper functions to work with
3549  * [FoldingRange](#FoldingRange) literals.
3550  */
3551 var FoldingRange;
3552 (function (FoldingRange) {
3553     /**
3554      * Creates a new FoldingRange literal.
3555      */
3556     function create(startLine, endLine, startCharacter, endCharacter, kind) {
3557         var result = {
3558             startLine: startLine,
3559             endLine: endLine
3560         };
3561         if (Is.defined(startCharacter)) {
3562             result.startCharacter = startCharacter;
3563         }
3564         if (Is.defined(endCharacter)) {
3565             result.endCharacter = endCharacter;
3566         }
3567         if (Is.defined(kind)) {
3568             result.kind = kind;
3569         }
3570         return result;
3571     }
3572     FoldingRange.create = create;
3573     /**
3574      * Checks whether the given literal conforms to the [FoldingRange](#FoldingRange) interface.
3575      */
3576     function is(value) {
3577         var candidate = value;
3578         return Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine)
3579             && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter))
3580             && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter))
3581             && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
3582     }
3583     FoldingRange.is = is;
3584 })(FoldingRange || (FoldingRange = {}));
3585 /**
3586  * The DiagnosticRelatedInformation namespace provides helper functions to work with
3587  * [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) literals.
3588  */
3589 var DiagnosticRelatedInformation;
3590 (function (DiagnosticRelatedInformation) {
3591     /**
3592      * Creates a new DiagnosticRelatedInformation literal.
3593      */
3594     function create(location, message) {
3595         return {
3596             location: location,
3597             message: message
3598         };
3599     }
3600     DiagnosticRelatedInformation.create = create;
3601     /**
3602      * Checks whether the given literal conforms to the [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) interface.
3603      */
3604     function is(value) {
3605         var candidate = value;
3606         return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
3607     }
3608     DiagnosticRelatedInformation.is = is;
3609 })(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));
3610 /**
3611  * The diagnostic's severity.
3612  */
3613 var DiagnosticSeverity;
3614 (function (DiagnosticSeverity) {
3615     /**
3616      * Reports an error.
3617      */
3618     DiagnosticSeverity.Error = 1;
3619     /**
3620      * Reports a warning.
3621      */
3622     DiagnosticSeverity.Warning = 2;
3623     /**
3624      * Reports an information.
3625      */
3626     DiagnosticSeverity.Information = 3;
3627     /**
3628      * Reports a hint.
3629      */
3630     DiagnosticSeverity.Hint = 4;
3631 })(DiagnosticSeverity || (DiagnosticSeverity = {}));
3632 /**
3633  * The diagnostic tags.
3634  *
3635  * @since 3.15.0
3636  */
3637 var DiagnosticTag;
3638 (function (DiagnosticTag) {
3639     /**
3640      * Unused or unnecessary code.
3641      *
3642      * Clients are allowed to render diagnostics with this tag faded out instead of having
3643      * an error squiggle.
3644      */
3645     DiagnosticTag.Unnecessary = 1;
3646     /**
3647      * Deprecated or obsolete code.
3648      *
3649      * Clients are allowed to rendered diagnostics with this tag strike through.
3650      */
3651     DiagnosticTag.Deprecated = 2;
3652 })(DiagnosticTag || (DiagnosticTag = {}));
3653 /**
3654  * The CodeDescription namespace provides functions to deal with descriptions for diagnostic codes.
3655  *
3656  * @since 3.16.0
3657  */
3658 var CodeDescription;
3659 (function (CodeDescription) {
3660     function is(value) {
3661         var candidate = value;
3662         return candidate !== undefined && candidate !== null && Is.string(candidate.href);
3663     }
3664     CodeDescription.is = is;
3665 })(CodeDescription || (CodeDescription = {}));
3666 /**
3667  * The Diagnostic namespace provides helper functions to work with
3668  * [Diagnostic](#Diagnostic) literals.
3669  */
3670 var Diagnostic;
3671 (function (Diagnostic) {
3672     /**
3673      * Creates a new Diagnostic literal.
3674      */
3675     function create(range, message, severity, code, source, relatedInformation) {
3676         var result = { range: range, message: message };
3677         if (Is.defined(severity)) {
3678             result.severity = severity;
3679         }
3680         if (Is.defined(code)) {
3681             result.code = code;
3682         }
3683         if (Is.defined(source)) {
3684             result.source = source;
3685         }
3686         if (Is.defined(relatedInformation)) {
3687             result.relatedInformation = relatedInformation;
3688         }
3689         return result;
3690     }
3691     Diagnostic.create = create;
3692     /**
3693      * Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.
3694      */
3695     function is(value) {
3696         var _a;
3697         var candidate = value;
3698         return Is.defined(candidate)
3699             && Range.is(candidate.range)
3700             && Is.string(candidate.message)
3701             && (Is.number(candidate.severity) || Is.undefined(candidate.severity))
3702             && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))
3703             && (Is.undefined(candidate.codeDescription) || (Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)))
3704             && (Is.string(candidate.source) || Is.undefined(candidate.source))
3705             && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
3706     }
3707     Diagnostic.is = is;
3708 })(Diagnostic || (Diagnostic = {}));
3709 /**
3710  * The Command namespace provides helper functions to work with
3711  * [Command](#Command) literals.
3712  */
3713 var Command;
3714 (function (Command) {
3715     /**
3716      * Creates a new Command literal.
3717      */
3718     function create(title, command) {
3719         var args = [];
3720         for (var _i = 2; _i < arguments.length; _i++) {
3721             args[_i - 2] = arguments[_i];
3722         }
3723         var result = { title: title, command: command };
3724         if (Is.defined(args) && args.length > 0) {
3725             result.arguments = args;
3726         }
3727         return result;
3728     }
3729     Command.create = create;
3730     /**
3731      * Checks whether the given literal conforms to the [Command](#Command) interface.
3732      */
3733     function is(value) {
3734         var candidate = value;
3735         return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);
3736     }
3737     Command.is = is;
3738 })(Command || (Command = {}));
3739 /**
3740  * The TextEdit namespace provides helper function to create replace,
3741  * insert and delete edits more easily.
3742  */
3743 var TextEdit;
3744 (function (TextEdit) {
3745     /**
3746      * Creates a replace text edit.
3747      * @param range The range of text to be replaced.
3748      * @param newText The new text.
3749      */
3750     function replace(range, newText) {
3751         return { range: range, newText: newText };
3752     }
3753     TextEdit.replace = replace;
3754     /**
3755      * Creates a insert text edit.
3756      * @param position The position to insert the text at.
3757      * @param newText The text to be inserted.
3758      */
3759     function insert(position, newText) {
3760         return { range: { start: position, end: position }, newText: newText };
3761     }
3762     TextEdit.insert = insert;
3763     /**
3764      * Creates a delete text edit.
3765      * @param range The range of text to be deleted.
3766      */
3767     function del(range) {
3768         return { range: range, newText: '' };
3769     }
3770     TextEdit.del = del;
3771     function is(value) {
3772         var candidate = value;
3773         return Is.objectLiteral(candidate)
3774             && Is.string(candidate.newText)
3775             && Range.is(candidate.range);
3776     }
3777     TextEdit.is = is;
3778 })(TextEdit || (TextEdit = {}));
3779 var ChangeAnnotation;
3780 (function (ChangeAnnotation) {
3781     function create(label, needsConfirmation, description) {
3782         var result = { label: label };
3783         if (needsConfirmation !== undefined) {
3784             result.needsConfirmation = needsConfirmation;
3785         }
3786         if (description !== undefined) {
3787             result.description = description;
3788         }
3789         return result;
3790     }
3791     ChangeAnnotation.create = create;
3792     function is(value) {
3793         var candidate = value;
3794         return candidate !== undefined && Is.objectLiteral(candidate) && Is.string(candidate.label) &&
3795             (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === undefined) &&
3796             (Is.string(candidate.description) || candidate.description === undefined);
3797     }
3798     ChangeAnnotation.is = is;
3799 })(ChangeAnnotation || (ChangeAnnotation = {}));
3800 var ChangeAnnotationIdentifier;
3801 (function (ChangeAnnotationIdentifier) {
3802     function is(value) {
3803         var candidate = value;
3804         return typeof candidate === 'string';
3805     }
3806     ChangeAnnotationIdentifier.is = is;
3807 })(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));
3808 var AnnotatedTextEdit;
3809 (function (AnnotatedTextEdit) {
3810     /**
3811      * Creates an annotated replace text edit.
3812      *
3813      * @param range The range of text to be replaced.
3814      * @param newText The new text.
3815      * @param annotation The annotation.
3816      */
3817     function replace(range, newText, annotation) {
3818         return { range: range, newText: newText, annotationId: annotation };
3819     }
3820     AnnotatedTextEdit.replace = replace;
3821     /**
3822      * Creates an annotated insert text edit.
3823      *
3824      * @param position The position to insert the text at.
3825      * @param newText The text to be inserted.
3826      * @param annotation The annotation.
3827      */
3828     function insert(position, newText, annotation) {
3829         return { range: { start: position, end: position }, newText: newText, annotationId: annotation };
3830     }
3831     AnnotatedTextEdit.insert = insert;
3832     /**
3833      * Creates an annotated delete text edit.
3834      *
3835      * @param range The range of text to be deleted.
3836      * @param annotation The annotation.
3837      */
3838     function del(range, annotation) {
3839         return { range: range, newText: '', annotationId: annotation };
3840     }
3841     AnnotatedTextEdit.del = del;
3842     function is(value) {
3843         var candidate = value;
3844         return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));
3845     }
3846     AnnotatedTextEdit.is = is;
3847 })(AnnotatedTextEdit || (AnnotatedTextEdit = {}));
3848 /**
3849  * The TextDocumentEdit namespace provides helper function to create
3850  * an edit that manipulates a text document.
3851  */
3852 var TextDocumentEdit;
3853 (function (TextDocumentEdit) {
3854     /**
3855      * Creates a new `TextDocumentEdit`
3856      */
3857     function create(textDocument, edits) {
3858         return { textDocument: textDocument, edits: edits };
3859     }
3860     TextDocumentEdit.create = create;
3861     function is(value) {
3862         var candidate = value;
3863         return Is.defined(candidate)
3864             && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument)
3865             && Array.isArray(candidate.edits);
3866     }
3867     TextDocumentEdit.is = is;
3868 })(TextDocumentEdit || (TextDocumentEdit = {}));
3869 var CreateFile;
3870 (function (CreateFile) {
3871     function create(uri, options, annotation) {
3872         var result = {
3873             kind: 'create',
3874             uri: uri
3875         };
3876         if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {
3877             result.options = options;
3878         }
3879         if (annotation !== undefined) {
3880             result.annotationId = annotation;
3881         }
3882         return result;
3883     }
3884     CreateFile.create = create;
3885     function is(value) {
3886         var candidate = value;
3887         return candidate && candidate.kind === 'create' && Is.string(candidate.uri) && (candidate.options === undefined ||
3888             ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
3889     }
3890     CreateFile.is = is;
3891 })(CreateFile || (CreateFile = {}));
3892 var RenameFile;
3893 (function (RenameFile) {
3894     function create(oldUri, newUri, options, annotation) {
3895         var result = {
3896             kind: 'rename',
3897             oldUri: oldUri,
3898             newUri: newUri
3899         };
3900         if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {
3901             result.options = options;
3902         }
3903         if (annotation !== undefined) {
3904             result.annotationId = annotation;
3905         }
3906         return result;
3907     }
3908     RenameFile.create = create;
3909     function is(value) {
3910         var candidate = value;
3911         return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === undefined ||
3912             ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
3913     }
3914     RenameFile.is = is;
3915 })(RenameFile || (RenameFile = {}));
3916 var DeleteFile;
3917 (function (DeleteFile) {
3918     function create(uri, options, annotation) {
3919         var result = {
3920             kind: 'delete',
3921             uri: uri
3922         };
3923         if (options !== undefined && (options.recursive !== undefined || options.ignoreIfNotExists !== undefined)) {
3924             result.options = options;
3925         }
3926         if (annotation !== undefined) {
3927             result.annotationId = annotation;
3928         }
3929         return result;
3930     }
3931     DeleteFile.create = create;
3932     function is(value) {
3933         var candidate = value;
3934         return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) && (candidate.options === undefined ||
3935             ((candidate.options.recursive === undefined || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === undefined || Is.boolean(candidate.options.ignoreIfNotExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
3936     }
3937     DeleteFile.is = is;
3938 })(DeleteFile || (DeleteFile = {}));
3939 var WorkspaceEdit;
3940 (function (WorkspaceEdit) {
3941     function is(value) {
3942         var candidate = value;
3943         return candidate &&
3944             (candidate.changes !== undefined || candidate.documentChanges !== undefined) &&
3945             (candidate.documentChanges === undefined || candidate.documentChanges.every(function (change) {
3946                 if (Is.string(change.kind)) {
3947                     return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
3948                 }
3949                 else {
3950                     return TextDocumentEdit.is(change);
3951                 }
3952             }));
3953     }
3954     WorkspaceEdit.is = is;
3955 })(WorkspaceEdit || (WorkspaceEdit = {}));
3956 var TextEditChangeImpl = /** @class */ (function () {
3957     function TextEditChangeImpl(edits, changeAnnotations) {
3958         this.edits = edits;
3959         this.changeAnnotations = changeAnnotations;
3960     }
3961     TextEditChangeImpl.prototype.insert = function (position, newText, annotation) {
3962         var edit;
3963         var id;
3964         if (annotation === undefined) {
3965             edit = TextEdit.insert(position, newText);
3966         }
3967         else if (ChangeAnnotationIdentifier.is(annotation)) {
3968             id = annotation;
3969             edit = AnnotatedTextEdit.insert(position, newText, annotation);
3970         }
3971         else {
3972             this.assertChangeAnnotations(this.changeAnnotations);
3973             id = this.changeAnnotations.manage(annotation);
3974             edit = AnnotatedTextEdit.insert(position, newText, id);
3975         }
3976         this.edits.push(edit);
3977         if (id !== undefined) {
3978             return id;
3979         }
3980     };
3981     TextEditChangeImpl.prototype.replace = function (range, newText, annotation) {
3982         var edit;
3983         var id;
3984         if (annotation === undefined) {
3985             edit = TextEdit.replace(range, newText);
3986         }
3987         else if (ChangeAnnotationIdentifier.is(annotation)) {
3988             id = annotation;
3989             edit = AnnotatedTextEdit.replace(range, newText, annotation);
3990         }
3991         else {
3992             this.assertChangeAnnotations(this.changeAnnotations);
3993             id = this.changeAnnotations.manage(annotation);
3994             edit = AnnotatedTextEdit.replace(range, newText, id);
3995         }
3996         this.edits.push(edit);
3997         if (id !== undefined) {
3998             return id;
3999         }
4000     };
4001     TextEditChangeImpl.prototype.delete = function (range, annotation) {
4002         var edit;
4003         var id;
4004         if (annotation === undefined) {
4005             edit = TextEdit.del(range);
4006         }
4007         else if (ChangeAnnotationIdentifier.is(annotation)) {
4008             id = annotation;
4009             edit = AnnotatedTextEdit.del(range, annotation);
4010         }
4011         else {
4012             this.assertChangeAnnotations(this.changeAnnotations);
4013             id = this.changeAnnotations.manage(annotation);
4014             edit = AnnotatedTextEdit.del(range, id);
4015         }
4016         this.edits.push(edit);
4017         if (id !== undefined) {
4018             return id;
4019         }
4020     };
4021     TextEditChangeImpl.prototype.add = function (edit) {
4022         this.edits.push(edit);
4023     };
4024     TextEditChangeImpl.prototype.all = function () {
4025         return this.edits;
4026     };
4027     TextEditChangeImpl.prototype.clear = function () {
4028         this.edits.splice(0, this.edits.length);
4029     };
4030     TextEditChangeImpl.prototype.assertChangeAnnotations = function (value) {
4031         if (value === undefined) {
4032             throw new Error("Text edit change is not configured to manage change annotations.");
4033         }
4034     };
4035     return TextEditChangeImpl;
4036 }());
4037 /**
4038  * A helper class
4039  */
4040 var ChangeAnnotations = /** @class */ (function () {
4041     function ChangeAnnotations(annotations) {
4042         this._annotations = annotations === undefined ? Object.create(null) : annotations;
4043         this._counter = 0;
4044         this._size = 0;
4045     }
4046     ChangeAnnotations.prototype.all = function () {
4047         return this._annotations;
4048     };
4049     Object.defineProperty(ChangeAnnotations.prototype, "size", {
4050         get: function () {
4051             return this._size;
4052         },
4053         enumerable: false,
4054         configurable: true
4055     });
4056     ChangeAnnotations.prototype.manage = function (idOrAnnotation, annotation) {
4057         var id;
4058         if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {
4059             id = idOrAnnotation;
4060         }
4061         else {
4062             id = this.nextId();
4063             annotation = idOrAnnotation;
4064         }
4065         if (this._annotations[id] !== undefined) {
4066             throw new Error("Id " + id + " is already in use.");
4067         }
4068         if (annotation === undefined) {
4069             throw new Error("No annotation provided for id " + id);
4070         }
4071         this._annotations[id] = annotation;
4072         this._size++;
4073         return id;
4074     };
4075     ChangeAnnotations.prototype.nextId = function () {
4076         this._counter++;
4077         return this._counter.toString();
4078     };
4079     return ChangeAnnotations;
4080 }());
4081 /**
4082  * A workspace change helps constructing changes to a workspace.
4083  */
4084 var WorkspaceChange = /** @class */ (function () {
4085     function WorkspaceChange(workspaceEdit) {
4086         var _this = this;
4087         this._textEditChanges = Object.create(null);
4088         if (workspaceEdit !== undefined) {
4089             this._workspaceEdit = workspaceEdit;
4090             if (workspaceEdit.documentChanges) {
4091                 this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);
4092                 workspaceEdit.changeAnnotations = this._changeAnnotations.all();
4093                 workspaceEdit.documentChanges.forEach(function (change) {
4094                     if (TextDocumentEdit.is(change)) {
4095                         var textEditChange = new TextEditChangeImpl(change.edits, _this._changeAnnotations);
4096                         _this._textEditChanges[change.textDocument.uri] = textEditChange;
4097                     }
4098                 });
4099             }
4100             else if (workspaceEdit.changes) {
4101                 Object.keys(workspaceEdit.changes).forEach(function (key) {
4102                     var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
4103                     _this._textEditChanges[key] = textEditChange;
4104                 });
4105             }
4106         }
4107         else {
4108             this._workspaceEdit = {};
4109         }
4110     }
4111     Object.defineProperty(WorkspaceChange.prototype, "edit", {
4112         /**
4113          * Returns the underlying [WorkspaceEdit](#WorkspaceEdit) literal
4114          * use to be returned from a workspace edit operation like rename.
4115          */
4116         get: function () {
4117             this.initDocumentChanges();
4118             if (this._changeAnnotations !== undefined) {
4119                 if (this._changeAnnotations.size === 0) {
4120                     this._workspaceEdit.changeAnnotations = undefined;
4121                 }
4122                 else {
4123                     this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
4124                 }
4125             }
4126             return this._workspaceEdit;
4127         },
4128         enumerable: false,
4129         configurable: true
4130     });
4131     WorkspaceChange.prototype.getTextEditChange = function (key) {
4132         if (OptionalVersionedTextDocumentIdentifier.is(key)) {
4133             this.initDocumentChanges();
4134             if (this._workspaceEdit.documentChanges === undefined) {
4135                 throw new Error('Workspace edit is not configured for document changes.');
4136             }
4137             var textDocument = { uri: key.uri, version: key.version };
4138             var result = this._textEditChanges[textDocument.uri];
4139             if (!result) {
4140                 var edits = [];
4141                 var textDocumentEdit = {
4142                     textDocument: textDocument,
4143                     edits: edits
4144                 };
4145                 this._workspaceEdit.documentChanges.push(textDocumentEdit);
4146                 result = new TextEditChangeImpl(edits, this._changeAnnotations);
4147                 this._textEditChanges[textDocument.uri] = result;
4148             }
4149             return result;
4150         }
4151         else {
4152             this.initChanges();
4153             if (this._workspaceEdit.changes === undefined) {
4154                 throw new Error('Workspace edit is not configured for normal text edit changes.');
4155             }
4156             var result = this._textEditChanges[key];
4157             if (!result) {
4158                 var edits = [];
4159                 this._workspaceEdit.changes[key] = edits;
4160                 result = new TextEditChangeImpl(edits);
4161                 this._textEditChanges[key] = result;
4162             }
4163             return result;
4164         }
4165     };
4166     WorkspaceChange.prototype.initDocumentChanges = function () {
4167         if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {
4168             this._changeAnnotations = new ChangeAnnotations();
4169             this._workspaceEdit.documentChanges = [];
4170             this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
4171         }
4172     };
4173     WorkspaceChange.prototype.initChanges = function () {
4174         if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {
4175             this._workspaceEdit.changes = Object.create(null);
4176         }
4177     };
4178     WorkspaceChange.prototype.createFile = function (uri, optionsOrAnnotation, options) {
4179         this.initDocumentChanges();
4180         if (this._workspaceEdit.documentChanges === undefined) {
4181             throw new Error('Workspace edit is not configured for document changes.');
4182         }
4183         var annotation;
4184         if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
4185             annotation = optionsOrAnnotation;
4186         }
4187         else {
4188             options = optionsOrAnnotation;
4189         }
4190         var operation;
4191         var id;
4192         if (annotation === undefined) {
4193             operation = CreateFile.create(uri, options);
4194         }
4195         else {
4196             id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
4197             operation = CreateFile.create(uri, options, id);
4198         }
4199         this._workspaceEdit.documentChanges.push(operation);
4200         if (id !== undefined) {
4201             return id;
4202         }
4203     };
4204     WorkspaceChange.prototype.renameFile = function (oldUri, newUri, optionsOrAnnotation, options) {
4205         this.initDocumentChanges();
4206         if (this._workspaceEdit.documentChanges === undefined) {
4207             throw new Error('Workspace edit is not configured for document changes.');
4208         }
4209         var annotation;
4210         if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
4211             annotation = optionsOrAnnotation;
4212         }
4213         else {
4214             options = optionsOrAnnotation;
4215         }
4216         var operation;
4217         var id;
4218         if (annotation === undefined) {
4219             operation = RenameFile.create(oldUri, newUri, options);
4220         }
4221         else {
4222             id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
4223             operation = RenameFile.create(oldUri, newUri, options, id);
4224         }
4225         this._workspaceEdit.documentChanges.push(operation);
4226         if (id !== undefined) {
4227             return id;
4228         }
4229     };
4230     WorkspaceChange.prototype.deleteFile = function (uri, optionsOrAnnotation, options) {
4231         this.initDocumentChanges();
4232         if (this._workspaceEdit.documentChanges === undefined) {
4233             throw new Error('Workspace edit is not configured for document changes.');
4234         }
4235         var annotation;
4236         if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
4237             annotation = optionsOrAnnotation;
4238         }
4239         else {
4240             options = optionsOrAnnotation;
4241         }
4242         var operation;
4243         var id;
4244         if (annotation === undefined) {
4245             operation = DeleteFile.create(uri, options);
4246         }
4247         else {
4248             id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
4249             operation = DeleteFile.create(uri, options, id);
4250         }
4251         this._workspaceEdit.documentChanges.push(operation);
4252         if (id !== undefined) {
4253             return id;
4254         }
4255     };
4256     return WorkspaceChange;
4257 }());
4258
4259 /**
4260  * The TextDocumentIdentifier namespace provides helper functions to work with
4261  * [TextDocumentIdentifier](#TextDocumentIdentifier) literals.
4262  */
4263 var TextDocumentIdentifier;
4264 (function (TextDocumentIdentifier) {
4265     /**
4266      * Creates a new TextDocumentIdentifier literal.
4267      * @param uri The document's uri.
4268      */
4269     function create(uri) {
4270         return { uri: uri };
4271     }
4272     TextDocumentIdentifier.create = create;
4273     /**
4274      * Checks whether the given literal conforms to the [TextDocumentIdentifier](#TextDocumentIdentifier) interface.
4275      */
4276     function is(value) {
4277         var candidate = value;
4278         return Is.defined(candidate) && Is.string(candidate.uri);
4279     }
4280     TextDocumentIdentifier.is = is;
4281 })(TextDocumentIdentifier || (TextDocumentIdentifier = {}));
4282 /**
4283  * The VersionedTextDocumentIdentifier namespace provides helper functions to work with
4284  * [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) literals.
4285  */
4286 var VersionedTextDocumentIdentifier;
4287 (function (VersionedTextDocumentIdentifier) {
4288     /**
4289      * Creates a new VersionedTextDocumentIdentifier literal.
4290      * @param uri The document's uri.
4291      * @param uri The document's text.
4292      */
4293     function create(uri, version) {
4294         return { uri: uri, version: version };
4295     }
4296     VersionedTextDocumentIdentifier.create = create;
4297     /**
4298      * Checks whether the given literal conforms to the [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) interface.
4299      */
4300     function is(value) {
4301         var candidate = value;
4302         return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);
4303     }
4304     VersionedTextDocumentIdentifier.is = is;
4305 })(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));
4306 /**
4307  * The OptionalVersionedTextDocumentIdentifier namespace provides helper functions to work with
4308  * [OptionalVersionedTextDocumentIdentifier](#OptionalVersionedTextDocumentIdentifier) literals.
4309  */
4310 var OptionalVersionedTextDocumentIdentifier;
4311 (function (OptionalVersionedTextDocumentIdentifier) {
4312     /**
4313      * Creates a new OptionalVersionedTextDocumentIdentifier literal.
4314      * @param uri The document's uri.
4315      * @param uri The document's text.
4316      */
4317     function create(uri, version) {
4318         return { uri: uri, version: version };
4319     }
4320     OptionalVersionedTextDocumentIdentifier.create = create;
4321     /**
4322      * Checks whether the given literal conforms to the [OptionalVersionedTextDocumentIdentifier](#OptionalVersionedTextDocumentIdentifier) interface.
4323      */
4324     function is(value) {
4325         var candidate = value;
4326         return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));
4327     }
4328     OptionalVersionedTextDocumentIdentifier.is = is;
4329 })(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));
4330 /**
4331  * The TextDocumentItem namespace provides helper functions to work with
4332  * [TextDocumentItem](#TextDocumentItem) literals.
4333  */
4334 var TextDocumentItem;
4335 (function (TextDocumentItem) {
4336     /**
4337      * Creates a new TextDocumentItem literal.
4338      * @param uri The document's uri.
4339      * @param languageId The document's language identifier.
4340      * @param version The document's version number.
4341      * @param text The document's text.
4342      */
4343     function create(uri, languageId, version, text) {
4344         return { uri: uri, languageId: languageId, version: version, text: text };
4345     }
4346     TextDocumentItem.create = create;
4347     /**
4348      * Checks whether the given literal conforms to the [TextDocumentItem](#TextDocumentItem) interface.
4349      */
4350     function is(value) {
4351         var candidate = value;
4352         return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);
4353     }
4354     TextDocumentItem.is = is;
4355 })(TextDocumentItem || (TextDocumentItem = {}));
4356 /**
4357  * Describes the content type that a client supports in various
4358  * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.
4359  *
4360  * Please note that `MarkupKinds` must not start with a `$`. This kinds
4361  * are reserved for internal usage.
4362  */
4363 var MarkupKind;
4364 (function (MarkupKind) {
4365     /**
4366      * Plain text is supported as a content format
4367      */
4368     MarkupKind.PlainText = 'plaintext';
4369     /**
4370      * Markdown is supported as a content format
4371      */
4372     MarkupKind.Markdown = 'markdown';
4373 })(MarkupKind || (MarkupKind = {}));
4374 (function (MarkupKind) {
4375     /**
4376      * Checks whether the given value is a value of the [MarkupKind](#MarkupKind) type.
4377      */
4378     function is(value) {
4379         var candidate = value;
4380         return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;
4381     }
4382     MarkupKind.is = is;
4383 })(MarkupKind || (MarkupKind = {}));
4384 var MarkupContent;
4385 (function (MarkupContent) {
4386     /**
4387      * Checks whether the given value conforms to the [MarkupContent](#MarkupContent) interface.
4388      */
4389     function is(value) {
4390         var candidate = value;
4391         return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
4392     }
4393     MarkupContent.is = is;
4394 })(MarkupContent || (MarkupContent = {}));
4395 /**
4396  * The kind of a completion entry.
4397  */
4398 var CompletionItemKind;
4399 (function (CompletionItemKind) {
4400     CompletionItemKind.Text = 1;
4401     CompletionItemKind.Method = 2;
4402     CompletionItemKind.Function = 3;
4403     CompletionItemKind.Constructor = 4;
4404     CompletionItemKind.Field = 5;
4405     CompletionItemKind.Variable = 6;
4406     CompletionItemKind.Class = 7;
4407     CompletionItemKind.Interface = 8;
4408     CompletionItemKind.Module = 9;
4409     CompletionItemKind.Property = 10;
4410     CompletionItemKind.Unit = 11;
4411     CompletionItemKind.Value = 12;
4412     CompletionItemKind.Enum = 13;
4413     CompletionItemKind.Keyword = 14;
4414     CompletionItemKind.Snippet = 15;
4415     CompletionItemKind.Color = 16;
4416     CompletionItemKind.File = 17;
4417     CompletionItemKind.Reference = 18;
4418     CompletionItemKind.Folder = 19;
4419     CompletionItemKind.EnumMember = 20;
4420     CompletionItemKind.Constant = 21;
4421     CompletionItemKind.Struct = 22;
4422     CompletionItemKind.Event = 23;
4423     CompletionItemKind.Operator = 24;
4424     CompletionItemKind.TypeParameter = 25;
4425 })(CompletionItemKind || (CompletionItemKind = {}));
4426 /**
4427  * Defines whether the insert text in a completion item should be interpreted as
4428  * plain text or a snippet.
4429  */
4430 var InsertTextFormat;
4431 (function (InsertTextFormat) {
4432     /**
4433      * The primary text to be inserted is treated as a plain string.
4434      */
4435     InsertTextFormat.PlainText = 1;
4436     /**
4437      * The primary text to be inserted is treated as a snippet.
4438      *
4439      * A snippet can define tab stops and placeholders with `$1`, `$2`
4440      * and `${3:foo}`. `$0` defines the final tab stop, it defaults to
4441      * the end of the snippet. Placeholders with equal identifiers are linked,
4442      * that is typing in one will update others too.
4443      *
4444      * See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax
4445      */
4446     InsertTextFormat.Snippet = 2;
4447 })(InsertTextFormat || (InsertTextFormat = {}));
4448 /**
4449  * Completion item tags are extra annotations that tweak the rendering of a completion
4450  * item.
4451  *
4452  * @since 3.15.0
4453  */
4454 var CompletionItemTag;
4455 (function (CompletionItemTag) {
4456     /**
4457      * Render a completion as obsolete, usually using a strike-out.
4458      */
4459     CompletionItemTag.Deprecated = 1;
4460 })(CompletionItemTag || (CompletionItemTag = {}));
4461 /**
4462  * The InsertReplaceEdit namespace provides functions to deal with insert / replace edits.
4463  *
4464  * @since 3.16.0
4465  */
4466 var InsertReplaceEdit;
4467 (function (InsertReplaceEdit) {
4468     /**
4469      * Creates a new insert / replace edit
4470      */
4471     function create(newText, insert, replace) {
4472         return { newText: newText, insert: insert, replace: replace };
4473     }
4474     InsertReplaceEdit.create = create;
4475     /**
4476      * Checks whether the given literal conforms to the [InsertReplaceEdit](#InsertReplaceEdit) interface.
4477      */
4478     function is(value) {
4479         var candidate = value;
4480         return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);
4481     }
4482     InsertReplaceEdit.is = is;
4483 })(InsertReplaceEdit || (InsertReplaceEdit = {}));
4484 /**
4485  * How whitespace and indentation is handled during completion
4486  * item insertion.
4487  *
4488  * @since 3.16.0
4489  */
4490 var InsertTextMode;
4491 (function (InsertTextMode) {
4492     /**
4493      * The insertion or replace strings is taken as it is. If the
4494      * value is multi line the lines below the cursor will be
4495      * inserted using the indentation defined in the string value.
4496      * The client will not apply any kind of adjustments to the
4497      * string.
4498      */
4499     InsertTextMode.asIs = 1;
4500     /**
4501      * The editor adjusts leading whitespace of new lines so that
4502      * they match the indentation up to the cursor of the line for
4503      * which the item is accepted.
4504      *
4505      * Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a
4506      * multi line completion item is indented using 2 tabs and all
4507      * following lines inserted will be indented using 2 tabs as well.
4508      */
4509     InsertTextMode.adjustIndentation = 2;
4510 })(InsertTextMode || (InsertTextMode = {}));
4511 /**
4512  * The CompletionItem namespace provides functions to deal with
4513  * completion items.
4514  */
4515 var CompletionItem;
4516 (function (CompletionItem) {
4517     /**
4518      * Create a completion item and seed it with a label.
4519      * @param label The completion item's label
4520      */
4521     function create(label) {
4522         return { label: label };
4523     }
4524     CompletionItem.create = create;
4525 })(CompletionItem || (CompletionItem = {}));
4526 /**
4527  * The CompletionList namespace provides functions to deal with
4528  * completion lists.
4529  */
4530 var CompletionList;
4531 (function (CompletionList) {
4532     /**
4533      * Creates a new completion list.
4534      *
4535      * @param items The completion items.
4536      * @param isIncomplete The list is not complete.
4537      */
4538     function create(items, isIncomplete) {
4539         return { items: items ? items : [], isIncomplete: !!isIncomplete };
4540     }
4541     CompletionList.create = create;
4542 })(CompletionList || (CompletionList = {}));
4543 var MarkedString;
4544 (function (MarkedString) {
4545     /**
4546      * Creates a marked string from plain text.
4547      *
4548      * @param plainText The plain text.
4549      */
4550     function fromPlainText(plainText) {
4551         return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
4552     }
4553     MarkedString.fromPlainText = fromPlainText;
4554     /**
4555      * Checks whether the given value conforms to the [MarkedString](#MarkedString) type.
4556      */
4557     function is(value) {
4558         var candidate = value;
4559         return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));
4560     }
4561     MarkedString.is = is;
4562 })(MarkedString || (MarkedString = {}));
4563 var Hover;
4564 (function (Hover) {
4565     /**
4566      * Checks whether the given value conforms to the [Hover](#Hover) interface.
4567      */
4568     function is(value) {
4569         var candidate = value;
4570         return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||
4571             MarkedString.is(candidate.contents) ||
4572             Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === undefined || Range.is(value.range));
4573     }
4574     Hover.is = is;
4575 })(Hover || (Hover = {}));
4576 /**
4577  * The ParameterInformation namespace provides helper functions to work with
4578  * [ParameterInformation](#ParameterInformation) literals.
4579  */
4580 var ParameterInformation;
4581 (function (ParameterInformation) {
4582     /**
4583      * Creates a new parameter information literal.
4584      *
4585      * @param label A label string.
4586      * @param documentation A doc string.
4587      */
4588     function create(label, documentation) {
4589         return documentation ? { label: label, documentation: documentation } : { label: label };
4590     }
4591     ParameterInformation.create = create;
4592 })(ParameterInformation || (ParameterInformation = {}));
4593 /**
4594  * The SignatureInformation namespace provides helper functions to work with
4595  * [SignatureInformation](#SignatureInformation) literals.
4596  */
4597 var SignatureInformation;
4598 (function (SignatureInformation) {
4599     function create(label, documentation) {
4600         var parameters = [];
4601         for (var _i = 2; _i < arguments.length; _i++) {
4602             parameters[_i - 2] = arguments[_i];
4603         }
4604         var result = { label: label };
4605         if (Is.defined(documentation)) {
4606             result.documentation = documentation;
4607         }
4608         if (Is.defined(parameters)) {
4609             result.parameters = parameters;
4610         }
4611         else {
4612             result.parameters = [];
4613         }
4614         return result;
4615     }
4616     SignatureInformation.create = create;
4617 })(SignatureInformation || (SignatureInformation = {}));
4618 /**
4619  * A document highlight kind.
4620  */
4621 var DocumentHighlightKind;
4622 (function (DocumentHighlightKind) {
4623     /**
4624      * A textual occurrence.
4625      */
4626     DocumentHighlightKind.Text = 1;
4627     /**
4628      * Read-access of a symbol, like reading a variable.
4629      */
4630     DocumentHighlightKind.Read = 2;
4631     /**
4632      * Write-access of a symbol, like writing to a variable.
4633      */
4634     DocumentHighlightKind.Write = 3;
4635 })(DocumentHighlightKind || (DocumentHighlightKind = {}));
4636 /**
4637  * DocumentHighlight namespace to provide helper functions to work with
4638  * [DocumentHighlight](#DocumentHighlight) literals.
4639  */
4640 var DocumentHighlight;
4641 (function (DocumentHighlight) {
4642     /**
4643      * Create a DocumentHighlight object.
4644      * @param range The range the highlight applies to.
4645      */
4646     function create(range, kind) {
4647         var result = { range: range };
4648         if (Is.number(kind)) {
4649             result.kind = kind;
4650         }
4651         return result;
4652     }
4653     DocumentHighlight.create = create;
4654 })(DocumentHighlight || (DocumentHighlight = {}));
4655 /**
4656  * A symbol kind.
4657  */
4658 var SymbolKind;
4659 (function (SymbolKind) {
4660     SymbolKind.File = 1;
4661     SymbolKind.Module = 2;
4662     SymbolKind.Namespace = 3;
4663     SymbolKind.Package = 4;
4664     SymbolKind.Class = 5;
4665     SymbolKind.Method = 6;
4666     SymbolKind.Property = 7;
4667     SymbolKind.Field = 8;
4668     SymbolKind.Constructor = 9;
4669     SymbolKind.Enum = 10;
4670     SymbolKind.Interface = 11;
4671     SymbolKind.Function = 12;
4672     SymbolKind.Variable = 13;
4673     SymbolKind.Constant = 14;
4674     SymbolKind.String = 15;
4675     SymbolKind.Number = 16;
4676     SymbolKind.Boolean = 17;
4677     SymbolKind.Array = 18;
4678     SymbolKind.Object = 19;
4679     SymbolKind.Key = 20;
4680     SymbolKind.Null = 21;
4681     SymbolKind.EnumMember = 22;
4682     SymbolKind.Struct = 23;
4683     SymbolKind.Event = 24;
4684     SymbolKind.Operator = 25;
4685     SymbolKind.TypeParameter = 26;
4686 })(SymbolKind || (SymbolKind = {}));
4687 /**
4688  * Symbol tags are extra annotations that tweak the rendering of a symbol.
4689  * @since 3.16
4690  */
4691 var SymbolTag;
4692 (function (SymbolTag) {
4693     /**
4694      * Render a symbol as obsolete, usually using a strike-out.
4695      */
4696     SymbolTag.Deprecated = 1;
4697 })(SymbolTag || (SymbolTag = {}));
4698 var SymbolInformation;
4699 (function (SymbolInformation) {
4700     /**
4701      * Creates a new symbol information literal.
4702      *
4703      * @param name The name of the symbol.
4704      * @param kind The kind of the symbol.
4705      * @param range The range of the location of the symbol.
4706      * @param uri The resource of the location of symbol, defaults to the current document.
4707      * @param containerName The name of the symbol containing the symbol.
4708      */
4709     function create(name, kind, range, uri, containerName) {
4710         var result = {
4711             name: name,
4712             kind: kind,
4713             location: { uri: uri, range: range }
4714         };
4715         if (containerName) {
4716             result.containerName = containerName;
4717         }
4718         return result;
4719     }
4720     SymbolInformation.create = create;
4721 })(SymbolInformation || (SymbolInformation = {}));
4722 var DocumentSymbol;
4723 (function (DocumentSymbol) {
4724     /**
4725      * Creates a new symbol information literal.
4726      *
4727      * @param name The name of the symbol.
4728      * @param detail The detail of the symbol.
4729      * @param kind The kind of the symbol.
4730      * @param range The range of the symbol.
4731      * @param selectionRange The selectionRange of the symbol.
4732      * @param children Children of the symbol.
4733      */
4734     function create(name, detail, kind, range, selectionRange, children) {
4735         var result = {
4736             name: name,
4737             detail: detail,
4738             kind: kind,
4739             range: range,
4740             selectionRange: selectionRange
4741         };
4742         if (children !== undefined) {
4743             result.children = children;
4744         }
4745         return result;
4746     }
4747     DocumentSymbol.create = create;
4748     /**
4749      * Checks whether the given literal conforms to the [DocumentSymbol](#DocumentSymbol) interface.
4750      */
4751     function is(value) {
4752         var candidate = value;
4753         return candidate &&
4754             Is.string(candidate.name) && Is.number(candidate.kind) &&
4755             Range.is(candidate.range) && Range.is(candidate.selectionRange) &&
4756             (candidate.detail === undefined || Is.string(candidate.detail)) &&
4757             (candidate.deprecated === undefined || Is.boolean(candidate.deprecated)) &&
4758             (candidate.children === undefined || Array.isArray(candidate.children)) &&
4759             (candidate.tags === undefined || Array.isArray(candidate.tags));
4760     }
4761     DocumentSymbol.is = is;
4762 })(DocumentSymbol || (DocumentSymbol = {}));
4763 /**
4764  * A set of predefined code action kinds
4765  */
4766 var CodeActionKind;
4767 (function (CodeActionKind) {
4768     /**
4769      * Empty kind.
4770      */
4771     CodeActionKind.Empty = '';
4772     /**
4773      * Base kind for quickfix actions: 'quickfix'
4774      */
4775     CodeActionKind.QuickFix = 'quickfix';
4776     /**
4777      * Base kind for refactoring actions: 'refactor'
4778      */
4779     CodeActionKind.Refactor = 'refactor';
4780     /**
4781      * Base kind for refactoring extraction actions: 'refactor.extract'
4782      *
4783      * Example extract actions:
4784      *
4785      * - Extract method
4786      * - Extract function
4787      * - Extract variable
4788      * - Extract interface from class
4789      * - ...
4790      */
4791     CodeActionKind.RefactorExtract = 'refactor.extract';
4792     /**
4793      * Base kind for refactoring inline actions: 'refactor.inline'
4794      *
4795      * Example inline actions:
4796      *
4797      * - Inline function
4798      * - Inline variable
4799      * - Inline constant
4800      * - ...
4801      */
4802     CodeActionKind.RefactorInline = 'refactor.inline';
4803     /**
4804      * Base kind for refactoring rewrite actions: 'refactor.rewrite'
4805      *
4806      * Example rewrite actions:
4807      *
4808      * - Convert JavaScript function to class
4809      * - Add or remove parameter
4810      * - Encapsulate field
4811      * - Make method static
4812      * - Move method to base class
4813      * - ...
4814      */
4815     CodeActionKind.RefactorRewrite = 'refactor.rewrite';
4816     /**
4817      * Base kind for source actions: `source`
4818      *
4819      * Source code actions apply to the entire file.
4820      */
4821     CodeActionKind.Source = 'source';
4822     /**
4823      * Base kind for an organize imports source action: `source.organizeImports`
4824      */
4825     CodeActionKind.SourceOrganizeImports = 'source.organizeImports';
4826     /**
4827      * Base kind for auto-fix source actions: `source.fixAll`.
4828      *
4829      * Fix all actions automatically fix errors that have a clear fix that do not require user input.
4830      * They should not suppress errors or perform unsafe fixes such as generating new types or classes.
4831      *
4832      * @since 3.15.0
4833      */
4834     CodeActionKind.SourceFixAll = 'source.fixAll';
4835 })(CodeActionKind || (CodeActionKind = {}));
4836 /**
4837  * The CodeActionContext namespace provides helper functions to work with
4838  * [CodeActionContext](#CodeActionContext) literals.
4839  */
4840 var CodeActionContext;
4841 (function (CodeActionContext) {
4842     /**
4843      * Creates a new CodeActionContext literal.
4844      */
4845     function create(diagnostics, only) {
4846         var result = { diagnostics: diagnostics };
4847         if (only !== undefined && only !== null) {
4848             result.only = only;
4849         }
4850         return result;
4851     }
4852     CodeActionContext.create = create;
4853     /**
4854      * Checks whether the given literal conforms to the [CodeActionContext](#CodeActionContext) interface.
4855      */
4856     function is(value) {
4857         var candidate = value;
4858         return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === undefined || Is.typedArray(candidate.only, Is.string));
4859     }
4860     CodeActionContext.is = is;
4861 })(CodeActionContext || (CodeActionContext = {}));
4862 var CodeAction;
4863 (function (CodeAction) {
4864     function create(title, kindOrCommandOrEdit, kind) {
4865         var result = { title: title };
4866         var checkKind = true;
4867         if (typeof kindOrCommandOrEdit === 'string') {
4868             checkKind = false;
4869             result.kind = kindOrCommandOrEdit;
4870         }
4871         else if (Command.is(kindOrCommandOrEdit)) {
4872             result.command = kindOrCommandOrEdit;
4873         }
4874         else {
4875             result.edit = kindOrCommandOrEdit;
4876         }
4877         if (checkKind && kind !== undefined) {
4878             result.kind = kind;
4879         }
4880         return result;
4881     }
4882     CodeAction.create = create;
4883     function is(value) {
4884         var candidate = value;
4885         return candidate && Is.string(candidate.title) &&
4886             (candidate.diagnostics === undefined || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&
4887             (candidate.kind === undefined || Is.string(candidate.kind)) &&
4888             (candidate.edit !== undefined || candidate.command !== undefined) &&
4889             (candidate.command === undefined || Command.is(candidate.command)) &&
4890             (candidate.isPreferred === undefined || Is.boolean(candidate.isPreferred)) &&
4891             (candidate.edit === undefined || WorkspaceEdit.is(candidate.edit));
4892     }
4893     CodeAction.is = is;
4894 })(CodeAction || (CodeAction = {}));
4895 /**
4896  * The CodeLens namespace provides helper functions to work with
4897  * [CodeLens](#CodeLens) literals.
4898  */
4899 var CodeLens;
4900 (function (CodeLens) {
4901     /**
4902      * Creates a new CodeLens literal.
4903      */
4904     function create(range, data) {
4905         var result = { range: range };
4906         if (Is.defined(data)) {
4907             result.data = data;
4908         }
4909         return result;
4910     }
4911     CodeLens.create = create;
4912     /**
4913      * Checks whether the given literal conforms to the [CodeLens](#CodeLens) interface.
4914      */
4915     function is(value) {
4916         var candidate = value;
4917         return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
4918     }
4919     CodeLens.is = is;
4920 })(CodeLens || (CodeLens = {}));
4921 /**
4922  * The FormattingOptions namespace provides helper functions to work with
4923  * [FormattingOptions](#FormattingOptions) literals.
4924  */
4925 var FormattingOptions;
4926 (function (FormattingOptions) {
4927     /**
4928      * Creates a new FormattingOptions literal.
4929      */
4930     function create(tabSize, insertSpaces) {
4931         return { tabSize: tabSize, insertSpaces: insertSpaces };
4932     }
4933     FormattingOptions.create = create;
4934     /**
4935      * Checks whether the given literal conforms to the [FormattingOptions](#FormattingOptions) interface.
4936      */
4937     function is(value) {
4938         var candidate = value;
4939         return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
4940     }
4941     FormattingOptions.is = is;
4942 })(FormattingOptions || (FormattingOptions = {}));
4943 /**
4944  * The DocumentLink namespace provides helper functions to work with
4945  * [DocumentLink](#DocumentLink) literals.
4946  */
4947 var DocumentLink;
4948 (function (DocumentLink) {
4949     /**
4950      * Creates a new DocumentLink literal.
4951      */
4952     function create(range, target, data) {
4953         return { range: range, target: target, data: data };
4954     }
4955     DocumentLink.create = create;
4956     /**
4957      * Checks whether the given literal conforms to the [DocumentLink](#DocumentLink) interface.
4958      */
4959     function is(value) {
4960         var candidate = value;
4961         return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
4962     }
4963     DocumentLink.is = is;
4964 })(DocumentLink || (DocumentLink = {}));
4965 /**
4966  * The SelectionRange namespace provides helper function to work with
4967  * SelectionRange literals.
4968  */
4969 var SelectionRange;
4970 (function (SelectionRange) {
4971     /**
4972      * Creates a new SelectionRange
4973      * @param range the range.
4974      * @param parent an optional parent.
4975      */
4976     function create(range, parent) {
4977         return { range: range, parent: parent };
4978     }
4979     SelectionRange.create = create;
4980     function is(value) {
4981         var candidate = value;
4982         return candidate !== undefined && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));
4983     }
4984     SelectionRange.is = is;
4985 })(SelectionRange || (SelectionRange = {}));
4986 var EOL = ['\n', '\r\n', '\r'];
4987 /**
4988  * @deprecated Use the text document from the new vscode-languageserver-textdocument package.
4989  */
4990 var TextDocument;
4991 (function (TextDocument) {
4992     /**
4993      * Creates a new ITextDocument literal from the given uri and content.
4994      * @param uri The document's uri.
4995      * @param languageId  The document's language Id.
4996      * @param content The document's content.
4997      */
4998     function create(uri, languageId, version, content) {
4999         return new FullTextDocument(uri, languageId, version, content);
5000     }
5001     TextDocument.create = create;
5002     /**
5003      * Checks whether the given literal conforms to the [ITextDocument](#ITextDocument) interface.
5004      */
5005     function is(value) {
5006         var candidate = value;
5007         return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount)
5008             && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
5009     }
5010     TextDocument.is = is;
5011     function applyEdits(document, edits) {
5012         var text = document.getText();
5013         var sortedEdits = mergeSort(edits, function (a, b) {
5014             var diff = a.range.start.line - b.range.start.line;
5015             if (diff === 0) {
5016                 return a.range.start.character - b.range.start.character;
5017             }
5018             return diff;
5019         });
5020         var lastModifiedOffset = text.length;
5021         for (var i = sortedEdits.length - 1; i >= 0; i--) {
5022             var e = sortedEdits[i];
5023             var startOffset = document.offsetAt(e.range.start);
5024             var endOffset = document.offsetAt(e.range.end);
5025             if (endOffset <= lastModifiedOffset) {
5026                 text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
5027             }
5028             else {
5029                 throw new Error('Overlapping edit');
5030             }
5031             lastModifiedOffset = startOffset;
5032         }
5033         return text;
5034     }
5035     TextDocument.applyEdits = applyEdits;
5036     function mergeSort(data, compare) {
5037         if (data.length <= 1) {
5038             // sorted
5039             return data;
5040         }
5041         var p = (data.length / 2) | 0;
5042         var left = data.slice(0, p);
5043         var right = data.slice(p);
5044         mergeSort(left, compare);
5045         mergeSort(right, compare);
5046         var leftIdx = 0;
5047         var rightIdx = 0;
5048         var i = 0;
5049         while (leftIdx < left.length && rightIdx < right.length) {
5050             var ret = compare(left[leftIdx], right[rightIdx]);
5051             if (ret <= 0) {
5052                 // smaller_equal -> take left to preserve order
5053                 data[i++] = left[leftIdx++];
5054             }
5055             else {
5056                 // greater -> take right
5057                 data[i++] = right[rightIdx++];
5058             }
5059         }
5060         while (leftIdx < left.length) {
5061             data[i++] = left[leftIdx++];
5062         }
5063         while (rightIdx < right.length) {
5064             data[i++] = right[rightIdx++];
5065         }
5066         return data;
5067     }
5068 })(TextDocument || (TextDocument = {}));
5069 /**
5070  * @deprecated Use the text document from the new vscode-languageserver-textdocument package.
5071  */
5072 var FullTextDocument = /** @class */ (function () {
5073     function FullTextDocument(uri, languageId, version, content) {
5074         this._uri = uri;
5075         this._languageId = languageId;
5076         this._version = version;
5077         this._content = content;
5078         this._lineOffsets = undefined;
5079     }
5080     Object.defineProperty(FullTextDocument.prototype, "uri", {
5081         get: function () {
5082             return this._uri;
5083         },
5084         enumerable: false,
5085         configurable: true
5086     });
5087     Object.defineProperty(FullTextDocument.prototype, "languageId", {
5088         get: function () {
5089             return this._languageId;
5090         },
5091         enumerable: false,
5092         configurable: true
5093     });
5094     Object.defineProperty(FullTextDocument.prototype, "version", {
5095         get: function () {
5096             return this._version;
5097         },
5098         enumerable: false,
5099         configurable: true
5100     });
5101     FullTextDocument.prototype.getText = function (range) {
5102         if (range) {
5103             var start = this.offsetAt(range.start);
5104             var end = this.offsetAt(range.end);
5105             return this._content.substring(start, end);
5106         }
5107         return this._content;
5108     };
5109     FullTextDocument.prototype.update = function (event, version) {
5110         this._content = event.text;
5111         this._version = version;
5112         this._lineOffsets = undefined;
5113     };
5114     FullTextDocument.prototype.getLineOffsets = function () {
5115         if (this._lineOffsets === undefined) {
5116             var lineOffsets = [];
5117             var text = this._content;
5118             var isLineStart = true;
5119             for (var i = 0; i < text.length; i++) {
5120                 if (isLineStart) {
5121                     lineOffsets.push(i);
5122                     isLineStart = false;
5123                 }
5124                 var ch = text.charAt(i);
5125                 isLineStart = (ch === '\r' || ch === '\n');
5126                 if (ch === '\r' && i + 1 < text.length && text.charAt(i + 1) === '\n') {
5127                     i++;
5128                 }
5129             }
5130             if (isLineStart && text.length > 0) {
5131                 lineOffsets.push(text.length);
5132             }
5133             this._lineOffsets = lineOffsets;
5134         }
5135         return this._lineOffsets;
5136     };
5137     FullTextDocument.prototype.positionAt = function (offset) {
5138         offset = Math.max(Math.min(offset, this._content.length), 0);
5139         var lineOffsets = this.getLineOffsets();
5140         var low = 0, high = lineOffsets.length;
5141         if (high === 0) {
5142             return Position.create(0, offset);
5143         }
5144         while (low < high) {
5145             var mid = Math.floor((low + high) / 2);
5146             if (lineOffsets[mid] > offset) {
5147                 high = mid;
5148             }
5149             else {
5150                 low = mid + 1;
5151             }
5152         }
5153         // low is the least x for which the line offset is larger than the current offset
5154         // or array.length if no line offset is larger than the current offset
5155         var line = low - 1;
5156         return Position.create(line, offset - lineOffsets[line]);
5157     };
5158     FullTextDocument.prototype.offsetAt = function (position) {
5159         var lineOffsets = this.getLineOffsets();
5160         if (position.line >= lineOffsets.length) {
5161             return this._content.length;
5162         }
5163         else if (position.line < 0) {
5164             return 0;
5165         }
5166         var lineOffset = lineOffsets[position.line];
5167         var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
5168         return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
5169     };
5170     Object.defineProperty(FullTextDocument.prototype, "lineCount", {
5171         get: function () {
5172             return this.getLineOffsets().length;
5173         },
5174         enumerable: false,
5175         configurable: true
5176     });
5177     return FullTextDocument;
5178 }());
5179 var Is;
5180 (function (Is) {
5181     var toString = Object.prototype.toString;
5182     function defined(value) {
5183         return typeof value !== 'undefined';
5184     }
5185     Is.defined = defined;
5186     function undefined(value) {
5187         return typeof value === 'undefined';
5188     }
5189     Is.undefined = undefined;
5190     function boolean(value) {
5191         return value === true || value === false;
5192     }
5193     Is.boolean = boolean;
5194     function string(value) {
5195         return toString.call(value) === '[object String]';
5196     }
5197     Is.string = string;
5198     function number(value) {
5199         return toString.call(value) === '[object Number]';
5200     }
5201     Is.number = number;
5202     function numberRange(value, min, max) {
5203         return toString.call(value) === '[object Number]' && min <= value && value <= max;
5204     }
5205     Is.numberRange = numberRange;
5206     function integer(value) {
5207         return toString.call(value) === '[object Number]' && -2147483648 <= value && value <= 2147483647;
5208     }
5209     Is.integer = integer;
5210     function uinteger(value) {
5211         return toString.call(value) === '[object Number]' && 0 <= value && value <= 2147483647;
5212     }
5213     Is.uinteger = uinteger;
5214     function func(value) {
5215         return toString.call(value) === '[object Function]';
5216     }
5217     Is.func = func;
5218     function objectLiteral(value) {
5219         // Strictly speaking class instances pass this check as well. Since the LSP
5220         // doesn't use classes we ignore this for now. If we do we need to add something
5221         // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
5222         return value !== null && typeof value === 'object';
5223     }
5224     Is.objectLiteral = objectLiteral;
5225     function typedArray(value, check) {
5226         return Array.isArray(value) && value.every(check);
5227     }
5228     Is.typedArray = typedArray;
5229 })(Is || (Is = {}));
5230
5231
5232 /***/ }),
5233 /* 27 */
5234 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
5235
5236
5237 /* --------------------------------------------------------------------------------------------
5238  * Copyright (c) Microsoft Corporation. All rights reserved.
5239  * Licensed under the MIT License. See License.txt in the project root for license information.
5240  * ------------------------------------------------------------------------------------------ */
5241 Object.defineProperty(exports, "__esModule", ({ value: true }));
5242 exports.ProtocolNotificationType = exports.ProtocolNotificationType0 = exports.ProtocolRequestType = exports.ProtocolRequestType0 = exports.RegistrationType = void 0;
5243 const vscode_jsonrpc_1 = __webpack_require__(6);
5244 class RegistrationType {
5245     constructor(method) {
5246         this.method = method;
5247     }
5248 }
5249 exports.RegistrationType = RegistrationType;
5250 class ProtocolRequestType0 extends vscode_jsonrpc_1.RequestType0 {
5251     constructor(method) {
5252         super(method);
5253     }
5254 }
5255 exports.ProtocolRequestType0 = ProtocolRequestType0;
5256 class ProtocolRequestType extends vscode_jsonrpc_1.RequestType {
5257     constructor(method) {
5258         super(method, vscode_jsonrpc_1.ParameterStructures.byName);
5259     }
5260 }
5261 exports.ProtocolRequestType = ProtocolRequestType;
5262 class ProtocolNotificationType0 extends vscode_jsonrpc_1.NotificationType0 {
5263     constructor(method) {
5264         super(method);
5265     }
5266 }
5267 exports.ProtocolNotificationType0 = ProtocolNotificationType0;
5268 class ProtocolNotificationType extends vscode_jsonrpc_1.NotificationType {
5269     constructor(method) {
5270         super(method, vscode_jsonrpc_1.ParameterStructures.byName);
5271     }
5272 }
5273 exports.ProtocolNotificationType = ProtocolNotificationType;
5274 // let x: ProtocolNotificationType<number, { value: number}>;
5275 // let y: ProtocolNotificationType<string, { value: number}>;
5276 // x = y;
5277 //# sourceMappingURL=messages.js.map
5278
5279 /***/ }),
5280 /* 28 */
5281 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
5282
5283
5284 /* --------------------------------------------------------------------------------------------
5285  * Copyright (c) Microsoft Corporation. All rights reserved.
5286  * Licensed under the MIT License. See License.txt in the project root for license information.
5287  * ------------------------------------------------------------------------------------------ */
5288 Object.defineProperty(exports, "__esModule", ({ value: true }));
5289 exports.DocumentLinkRequest = exports.CodeLensRefreshRequest = exports.CodeLensResolveRequest = exports.CodeLensRequest = exports.WorkspaceSymbolRequest = exports.CodeActionResolveRequest = exports.CodeActionRequest = exports.DocumentSymbolRequest = exports.DocumentHighlightRequest = exports.ReferencesRequest = exports.DefinitionRequest = exports.SignatureHelpRequest = exports.SignatureHelpTriggerKind = exports.HoverRequest = exports.CompletionResolveRequest = exports.CompletionRequest = exports.CompletionTriggerKind = exports.PublishDiagnosticsNotification = exports.WatchKind = exports.FileChangeType = exports.DidChangeWatchedFilesNotification = exports.WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentNotification = exports.TextDocumentSaveReason = exports.DidSaveTextDocumentNotification = exports.DidCloseTextDocumentNotification = exports.DidChangeTextDocumentNotification = exports.TextDocumentContentChangeEvent = exports.DidOpenTextDocumentNotification = exports.TextDocumentSyncKind = exports.TelemetryEventNotification = exports.LogMessageNotification = exports.ShowMessageRequest = exports.ShowMessageNotification = exports.MessageType = exports.DidChangeConfigurationNotification = exports.ExitNotification = exports.ShutdownRequest = exports.InitializedNotification = exports.InitializeError = exports.InitializeRequest = exports.WorkDoneProgressOptions = exports.TextDocumentRegistrationOptions = exports.StaticRegistrationOptions = exports.FailureHandlingKind = exports.ResourceOperationKind = exports.UnregistrationRequest = exports.RegistrationRequest = exports.DocumentSelector = exports.DocumentFilter = void 0;
5290 exports.MonikerRequest = exports.MonikerKind = exports.UniquenessLevel = exports.WillDeleteFilesRequest = exports.DidDeleteFilesNotification = exports.WillRenameFilesRequest = exports.DidRenameFilesNotification = exports.WillCreateFilesRequest = exports.DidCreateFilesNotification = exports.FileOperationPatternKind = exports.LinkedEditingRangeRequest = exports.ShowDocumentRequest = exports.SemanticTokensRegistrationType = exports.SemanticTokensRefreshRequest = exports.SemanticTokensRangeRequest = exports.SemanticTokensDeltaRequest = exports.SemanticTokensRequest = exports.TokenFormat = exports.SemanticTokens = exports.SemanticTokenModifiers = exports.SemanticTokenTypes = exports.CallHierarchyPrepareRequest = exports.CallHierarchyOutgoingCallsRequest = exports.CallHierarchyIncomingCallsRequest = exports.WorkDoneProgressCancelNotification = exports.WorkDoneProgressCreateRequest = exports.WorkDoneProgress = exports.SelectionRangeRequest = exports.DeclarationRequest = exports.FoldingRangeRequest = exports.ColorPresentationRequest = exports.DocumentColorRequest = exports.ConfigurationRequest = exports.DidChangeWorkspaceFoldersNotification = exports.WorkspaceFoldersRequest = exports.TypeDefinitionRequest = exports.ImplementationRequest = exports.ApplyWorkspaceEditRequest = exports.ExecuteCommandRequest = exports.PrepareRenameRequest = exports.RenameRequest = exports.PrepareSupportDefaultBehavior = exports.DocumentOnTypeFormattingRequest = exports.DocumentRangeFormattingRequest = exports.DocumentFormattingRequest = exports.DocumentLinkResolveRequest = void 0;
5291 const Is = __webpack_require__(29);
5292 const messages_1 = __webpack_require__(27);
5293 const protocol_implementation_1 = __webpack_require__(30);
5294 Object.defineProperty(exports, "ImplementationRequest", ({ enumerable: true, get: function () { return protocol_implementation_1.ImplementationRequest; } }));
5295 const protocol_typeDefinition_1 = __webpack_require__(31);
5296 Object.defineProperty(exports, "TypeDefinitionRequest", ({ enumerable: true, get: function () { return protocol_typeDefinition_1.TypeDefinitionRequest; } }));
5297 const protocol_workspaceFolders_1 = __webpack_require__(32);
5298 Object.defineProperty(exports, "WorkspaceFoldersRequest", ({ enumerable: true, get: function () { return protocol_workspaceFolders_1.WorkspaceFoldersRequest; } }));
5299 Object.defineProperty(exports, "DidChangeWorkspaceFoldersNotification", ({ enumerable: true, get: function () { return protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification; } }));
5300 const protocol_configuration_1 = __webpack_require__(33);
5301 Object.defineProperty(exports, "ConfigurationRequest", ({ enumerable: true, get: function () { return protocol_configuration_1.ConfigurationRequest; } }));
5302 const protocol_colorProvider_1 = __webpack_require__(34);
5303 Object.defineProperty(exports, "DocumentColorRequest", ({ enumerable: true, get: function () { return protocol_colorProvider_1.DocumentColorRequest; } }));
5304 Object.defineProperty(exports, "ColorPresentationRequest", ({ enumerable: true, get: function () { return protocol_colorProvider_1.ColorPresentationRequest; } }));
5305 const protocol_foldingRange_1 = __webpack_require__(35);
5306 Object.defineProperty(exports, "FoldingRangeRequest", ({ enumerable: true, get: function () { return protocol_foldingRange_1.FoldingRangeRequest; } }));
5307 const protocol_declaration_1 = __webpack_require__(36);
5308 Object.defineProperty(exports, "DeclarationRequest", ({ enumerable: true, get: function () { return protocol_declaration_1.DeclarationRequest; } }));
5309 const protocol_selectionRange_1 = __webpack_require__(37);
5310 Object.defineProperty(exports, "SelectionRangeRequest", ({ enumerable: true, get: function () { return protocol_selectionRange_1.SelectionRangeRequest; } }));
5311 const protocol_progress_1 = __webpack_require__(38);
5312 Object.defineProperty(exports, "WorkDoneProgress", ({ enumerable: true, get: function () { return protocol_progress_1.WorkDoneProgress; } }));
5313 Object.defineProperty(exports, "WorkDoneProgressCreateRequest", ({ enumerable: true, get: function () { return protocol_progress_1.WorkDoneProgressCreateRequest; } }));
5314 Object.defineProperty(exports, "WorkDoneProgressCancelNotification", ({ enumerable: true, get: function () { return protocol_progress_1.WorkDoneProgressCancelNotification; } }));
5315 const protocol_callHierarchy_1 = __webpack_require__(39);
5316 Object.defineProperty(exports, "CallHierarchyIncomingCallsRequest", ({ enumerable: true, get: function () { return protocol_callHierarchy_1.CallHierarchyIncomingCallsRequest; } }));
5317 Object.defineProperty(exports, "CallHierarchyOutgoingCallsRequest", ({ enumerable: true, get: function () { return protocol_callHierarchy_1.CallHierarchyOutgoingCallsRequest; } }));
5318 Object.defineProperty(exports, "CallHierarchyPrepareRequest", ({ enumerable: true, get: function () { return protocol_callHierarchy_1.CallHierarchyPrepareRequest; } }));
5319 const protocol_semanticTokens_1 = __webpack_require__(40);
5320 Object.defineProperty(exports, "SemanticTokenTypes", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokenTypes; } }));
5321 Object.defineProperty(exports, "SemanticTokenModifiers", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokenModifiers; } }));
5322 Object.defineProperty(exports, "SemanticTokens", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokens; } }));
5323 Object.defineProperty(exports, "TokenFormat", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.TokenFormat; } }));
5324 Object.defineProperty(exports, "SemanticTokensRequest", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensRequest; } }));
5325 Object.defineProperty(exports, "SemanticTokensDeltaRequest", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensDeltaRequest; } }));
5326 Object.defineProperty(exports, "SemanticTokensRangeRequest", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensRangeRequest; } }));
5327 Object.defineProperty(exports, "SemanticTokensRefreshRequest", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensRefreshRequest; } }));
5328 Object.defineProperty(exports, "SemanticTokensRegistrationType", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensRegistrationType; } }));
5329 const protocol_showDocument_1 = __webpack_require__(41);
5330 Object.defineProperty(exports, "ShowDocumentRequest", ({ enumerable: true, get: function () { return protocol_showDocument_1.ShowDocumentRequest; } }));
5331 const protocol_linkedEditingRange_1 = __webpack_require__(42);
5332 Object.defineProperty(exports, "LinkedEditingRangeRequest", ({ enumerable: true, get: function () { return protocol_linkedEditingRange_1.LinkedEditingRangeRequest; } }));
5333 const protocol_fileOperations_1 = __webpack_require__(43);
5334 Object.defineProperty(exports, "FileOperationPatternKind", ({ enumerable: true, get: function () { return protocol_fileOperations_1.FileOperationPatternKind; } }));
5335 Object.defineProperty(exports, "DidCreateFilesNotification", ({ enumerable: true, get: function () { return protocol_fileOperations_1.DidCreateFilesNotification; } }));
5336 Object.defineProperty(exports, "WillCreateFilesRequest", ({ enumerable: true, get: function () { return protocol_fileOperations_1.WillCreateFilesRequest; } }));
5337 Object.defineProperty(exports, "DidRenameFilesNotification", ({ enumerable: true, get: function () { return protocol_fileOperations_1.DidRenameFilesNotification; } }));
5338 Object.defineProperty(exports, "WillRenameFilesRequest", ({ enumerable: true, get: function () { return protocol_fileOperations_1.WillRenameFilesRequest; } }));
5339 Object.defineProperty(exports, "DidDeleteFilesNotification", ({ enumerable: true, get: function () { return protocol_fileOperations_1.DidDeleteFilesNotification; } }));
5340 Object.defineProperty(exports, "WillDeleteFilesRequest", ({ enumerable: true, get: function () { return protocol_fileOperations_1.WillDeleteFilesRequest; } }));
5341 const protocol_moniker_1 = __webpack_require__(44);
5342 Object.defineProperty(exports, "UniquenessLevel", ({ enumerable: true, get: function () { return protocol_moniker_1.UniquenessLevel; } }));
5343 Object.defineProperty(exports, "MonikerKind", ({ enumerable: true, get: function () { return protocol_moniker_1.MonikerKind; } }));
5344 Object.defineProperty(exports, "MonikerRequest", ({ enumerable: true, get: function () { return protocol_moniker_1.MonikerRequest; } }));
5345 // @ts-ignore: to avoid inlining LocationLink as dynamic import
5346 let __noDynamicImport;
5347 /**
5348  * The DocumentFilter namespace provides helper functions to work with
5349  * [DocumentFilter](#DocumentFilter) literals.
5350  */
5351 var DocumentFilter;
5352 (function (DocumentFilter) {
5353     function is(value) {
5354         const candidate = value;
5355         return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);
5356     }
5357     DocumentFilter.is = is;
5358 })(DocumentFilter = exports.DocumentFilter || (exports.DocumentFilter = {}));
5359 /**
5360  * The DocumentSelector namespace provides helper functions to work with
5361  * [DocumentSelector](#DocumentSelector)s.
5362  */
5363 var DocumentSelector;
5364 (function (DocumentSelector) {
5365     function is(value) {
5366         if (!Array.isArray(value)) {
5367             return false;
5368         }
5369         for (let elem of value) {
5370             if (!Is.string(elem) && !DocumentFilter.is(elem)) {
5371                 return false;
5372             }
5373         }
5374         return true;
5375     }
5376     DocumentSelector.is = is;
5377 })(DocumentSelector = exports.DocumentSelector || (exports.DocumentSelector = {}));
5378 /**
5379  * The `client/registerCapability` request is sent from the server to the client to register a new capability
5380  * handler on the client side.
5381  */
5382 var RegistrationRequest;
5383 (function (RegistrationRequest) {
5384     RegistrationRequest.type = new messages_1.ProtocolRequestType('client/registerCapability');
5385 })(RegistrationRequest = exports.RegistrationRequest || (exports.RegistrationRequest = {}));
5386 /**
5387  * The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability
5388  * handler on the client side.
5389  */
5390 var UnregistrationRequest;
5391 (function (UnregistrationRequest) {
5392     UnregistrationRequest.type = new messages_1.ProtocolRequestType('client/unregisterCapability');
5393 })(UnregistrationRequest = exports.UnregistrationRequest || (exports.UnregistrationRequest = {}));
5394 var ResourceOperationKind;
5395 (function (ResourceOperationKind) {
5396     /**
5397      * Supports creating new files and folders.
5398      */
5399     ResourceOperationKind.Create = 'create';
5400     /**
5401      * Supports renaming existing files and folders.
5402      */
5403     ResourceOperationKind.Rename = 'rename';
5404     /**
5405      * Supports deleting existing files and folders.
5406      */
5407     ResourceOperationKind.Delete = 'delete';
5408 })(ResourceOperationKind = exports.ResourceOperationKind || (exports.ResourceOperationKind = {}));
5409 var FailureHandlingKind;
5410 (function (FailureHandlingKind) {
5411     /**
5412      * Applying the workspace change is simply aborted if one of the changes provided
5413      * fails. All operations executed before the failing operation stay executed.
5414      */
5415     FailureHandlingKind.Abort = 'abort';
5416     /**
5417      * All operations are executed transactional. That means they either all
5418      * succeed or no changes at all are applied to the workspace.
5419      */
5420     FailureHandlingKind.Transactional = 'transactional';
5421     /**
5422      * If the workspace edit contains only textual file changes they are executed transactional.
5423      * If resource changes (create, rename or delete file) are part of the change the failure
5424      * handling strategy is abort.
5425      */
5426     FailureHandlingKind.TextOnlyTransactional = 'textOnlyTransactional';
5427     /**
5428      * The client tries to undo the operations already executed. But there is no
5429      * guarantee that this is succeeding.
5430      */
5431     FailureHandlingKind.Undo = 'undo';
5432 })(FailureHandlingKind = exports.FailureHandlingKind || (exports.FailureHandlingKind = {}));
5433 /**
5434  * The StaticRegistrationOptions namespace provides helper functions to work with
5435  * [StaticRegistrationOptions](#StaticRegistrationOptions) literals.
5436  */
5437 var StaticRegistrationOptions;
5438 (function (StaticRegistrationOptions) {
5439     function hasId(value) {
5440         const candidate = value;
5441         return candidate && Is.string(candidate.id) && candidate.id.length > 0;
5442     }
5443     StaticRegistrationOptions.hasId = hasId;
5444 })(StaticRegistrationOptions = exports.StaticRegistrationOptions || (exports.StaticRegistrationOptions = {}));
5445 /**
5446  * The TextDocumentRegistrationOptions namespace provides helper functions to work with
5447  * [TextDocumentRegistrationOptions](#TextDocumentRegistrationOptions) literals.
5448  */
5449 var TextDocumentRegistrationOptions;
5450 (function (TextDocumentRegistrationOptions) {
5451     function is(value) {
5452         const candidate = value;
5453         return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));
5454     }
5455     TextDocumentRegistrationOptions.is = is;
5456 })(TextDocumentRegistrationOptions = exports.TextDocumentRegistrationOptions || (exports.TextDocumentRegistrationOptions = {}));
5457 /**
5458  * The WorkDoneProgressOptions namespace provides helper functions to work with
5459  * [WorkDoneProgressOptions](#WorkDoneProgressOptions) literals.
5460  */
5461 var WorkDoneProgressOptions;
5462 (function (WorkDoneProgressOptions) {
5463     function is(value) {
5464         const candidate = value;
5465         return Is.objectLiteral(candidate) && (candidate.workDoneProgress === undefined || Is.boolean(candidate.workDoneProgress));
5466     }
5467     WorkDoneProgressOptions.is = is;
5468     function hasWorkDoneProgress(value) {
5469         const candidate = value;
5470         return candidate && Is.boolean(candidate.workDoneProgress);
5471     }
5472     WorkDoneProgressOptions.hasWorkDoneProgress = hasWorkDoneProgress;
5473 })(WorkDoneProgressOptions = exports.WorkDoneProgressOptions || (exports.WorkDoneProgressOptions = {}));
5474 /**
5475  * The initialize request is sent from the client to the server.
5476  * It is sent once as the request after starting up the server.
5477  * The requests parameter is of type [InitializeParams](#InitializeParams)
5478  * the response if of type [InitializeResult](#InitializeResult) of a Thenable that
5479  * resolves to such.
5480  */
5481 var InitializeRequest;
5482 (function (InitializeRequest) {
5483     InitializeRequest.type = new messages_1.ProtocolRequestType('initialize');
5484 })(InitializeRequest = exports.InitializeRequest || (exports.InitializeRequest = {}));
5485 /**
5486  * Known error codes for an `InitializeError`;
5487  */
5488 var InitializeError;
5489 (function (InitializeError) {
5490     /**
5491      * If the protocol version provided by the client can't be handled by the server.
5492      * @deprecated This initialize error got replaced by client capabilities. There is
5493      * no version handshake in version 3.0x
5494      */
5495     InitializeError.unknownProtocolVersion = 1;
5496 })(InitializeError = exports.InitializeError || (exports.InitializeError = {}));
5497 /**
5498  * The initialized notification is sent from the client to the
5499  * server after the client is fully initialized and the server
5500  * is allowed to send requests from the server to the client.
5501  */
5502 var InitializedNotification;
5503 (function (InitializedNotification) {
5504     InitializedNotification.type = new messages_1.ProtocolNotificationType('initialized');
5505 })(InitializedNotification = exports.InitializedNotification || (exports.InitializedNotification = {}));
5506 //---- Shutdown Method ----
5507 /**
5508  * A shutdown request is sent from the client to the server.
5509  * It is sent once when the client decides to shutdown the
5510  * server. The only notification that is sent after a shutdown request
5511  * is the exit event.
5512  */
5513 var ShutdownRequest;
5514 (function (ShutdownRequest) {
5515     ShutdownRequest.type = new messages_1.ProtocolRequestType0('shutdown');
5516 })(ShutdownRequest = exports.ShutdownRequest || (exports.ShutdownRequest = {}));
5517 //---- Exit Notification ----
5518 /**
5519  * The exit event is sent from the client to the server to
5520  * ask the server to exit its process.
5521  */
5522 var ExitNotification;
5523 (function (ExitNotification) {
5524     ExitNotification.type = new messages_1.ProtocolNotificationType0('exit');
5525 })(ExitNotification = exports.ExitNotification || (exports.ExitNotification = {}));
5526 /**
5527  * The configuration change notification is sent from the client to the server
5528  * when the client's configuration has changed. The notification contains
5529  * the changed configuration as defined by the language client.
5530  */
5531 var DidChangeConfigurationNotification;
5532 (function (DidChangeConfigurationNotification) {
5533     DidChangeConfigurationNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeConfiguration');
5534 })(DidChangeConfigurationNotification = exports.DidChangeConfigurationNotification || (exports.DidChangeConfigurationNotification = {}));
5535 //---- Message show and log notifications ----
5536 /**
5537  * The message type
5538  */
5539 var MessageType;
5540 (function (MessageType) {
5541     /**
5542      * An error message.
5543      */
5544     MessageType.Error = 1;
5545     /**
5546      * A warning message.
5547      */
5548     MessageType.Warning = 2;
5549     /**
5550      * An information message.
5551      */
5552     MessageType.Info = 3;
5553     /**
5554      * A log message.
5555      */
5556     MessageType.Log = 4;
5557 })(MessageType = exports.MessageType || (exports.MessageType = {}));
5558 /**
5559  * The show message notification is sent from a server to a client to ask
5560  * the client to display a particular message in the user interface.
5561  */
5562 var ShowMessageNotification;
5563 (function (ShowMessageNotification) {
5564     ShowMessageNotification.type = new messages_1.ProtocolNotificationType('window/showMessage');
5565 })(ShowMessageNotification = exports.ShowMessageNotification || (exports.ShowMessageNotification = {}));
5566 /**
5567  * The show message request is sent from the server to the client to show a message
5568  * and a set of options actions to the user.
5569  */
5570 var ShowMessageRequest;
5571 (function (ShowMessageRequest) {
5572     ShowMessageRequest.type = new messages_1.ProtocolRequestType('window/showMessageRequest');
5573 })(ShowMessageRequest = exports.ShowMessageRequest || (exports.ShowMessageRequest = {}));
5574 /**
5575  * The log message notification is sent from the server to the client to ask
5576  * the client to log a particular message.
5577  */
5578 var LogMessageNotification;
5579 (function (LogMessageNotification) {
5580     LogMessageNotification.type = new messages_1.ProtocolNotificationType('window/logMessage');
5581 })(LogMessageNotification = exports.LogMessageNotification || (exports.LogMessageNotification = {}));
5582 //---- Telemetry notification
5583 /**
5584  * The telemetry event notification is sent from the server to the client to ask
5585  * the client to log telemetry data.
5586  */
5587 var TelemetryEventNotification;
5588 (function (TelemetryEventNotification) {
5589     TelemetryEventNotification.type = new messages_1.ProtocolNotificationType('telemetry/event');
5590 })(TelemetryEventNotification = exports.TelemetryEventNotification || (exports.TelemetryEventNotification = {}));
5591 /**
5592  * Defines how the host (editor) should sync
5593  * document changes to the language server.
5594  */
5595 var TextDocumentSyncKind;
5596 (function (TextDocumentSyncKind) {
5597     /**
5598      * Documents should not be synced at all.
5599      */
5600     TextDocumentSyncKind.None = 0;
5601     /**
5602      * Documents are synced by always sending the full content
5603      * of the document.
5604      */
5605     TextDocumentSyncKind.Full = 1;
5606     /**
5607      * Documents are synced by sending the full content on open.
5608      * After that only incremental updates to the document are
5609      * send.
5610      */
5611     TextDocumentSyncKind.Incremental = 2;
5612 })(TextDocumentSyncKind = exports.TextDocumentSyncKind || (exports.TextDocumentSyncKind = {}));
5613 /**
5614  * The document open notification is sent from the client to the server to signal
5615  * newly opened text documents. The document's truth is now managed by the client
5616  * and the server must not try to read the document's truth using the document's
5617  * uri. Open in this sense means it is managed by the client. It doesn't necessarily
5618  * mean that its content is presented in an editor. An open notification must not
5619  * be sent more than once without a corresponding close notification send before.
5620  * This means open and close notification must be balanced and the max open count
5621  * is one.
5622  */
5623 var DidOpenTextDocumentNotification;
5624 (function (DidOpenTextDocumentNotification) {
5625     DidOpenTextDocumentNotification.method = 'textDocument/didOpen';
5626     DidOpenTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification.method);
5627 })(DidOpenTextDocumentNotification = exports.DidOpenTextDocumentNotification || (exports.DidOpenTextDocumentNotification = {}));
5628 var TextDocumentContentChangeEvent;
5629 (function (TextDocumentContentChangeEvent) {
5630     /**
5631      * Checks whether the information describes a delta event.
5632      */
5633     function isIncremental(event) {
5634         let candidate = event;
5635         return candidate !== undefined && candidate !== null &&
5636             typeof candidate.text === 'string' && candidate.range !== undefined &&
5637             (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');
5638     }
5639     TextDocumentContentChangeEvent.isIncremental = isIncremental;
5640     /**
5641      * Checks whether the information describes a full replacement event.
5642      */
5643     function isFull(event) {
5644         let candidate = event;
5645         return candidate !== undefined && candidate !== null &&
5646             typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;
5647     }
5648     TextDocumentContentChangeEvent.isFull = isFull;
5649 })(TextDocumentContentChangeEvent = exports.TextDocumentContentChangeEvent || (exports.TextDocumentContentChangeEvent = {}));
5650 /**
5651  * The document change notification is sent from the client to the server to signal
5652  * changes to a text document.
5653  */
5654 var DidChangeTextDocumentNotification;
5655 (function (DidChangeTextDocumentNotification) {
5656     DidChangeTextDocumentNotification.method = 'textDocument/didChange';
5657     DidChangeTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification.method);
5658 })(DidChangeTextDocumentNotification = exports.DidChangeTextDocumentNotification || (exports.DidChangeTextDocumentNotification = {}));
5659 /**
5660  * The document close notification is sent from the client to the server when
5661  * the document got closed in the client. The document's truth now exists where
5662  * the document's uri points to (e.g. if the document's uri is a file uri the
5663  * truth now exists on disk). As with the open notification the close notification
5664  * is about managing the document's content. Receiving a close notification
5665  * doesn't mean that the document was open in an editor before. A close
5666  * notification requires a previous open notification to be sent.
5667  */
5668 var DidCloseTextDocumentNotification;
5669 (function (DidCloseTextDocumentNotification) {
5670     DidCloseTextDocumentNotification.method = 'textDocument/didClose';
5671     DidCloseTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification.method);
5672 })(DidCloseTextDocumentNotification = exports.DidCloseTextDocumentNotification || (exports.DidCloseTextDocumentNotification = {}));
5673 /**
5674  * The document save notification is sent from the client to the server when
5675  * the document got saved in the client.
5676  */
5677 var DidSaveTextDocumentNotification;
5678 (function (DidSaveTextDocumentNotification) {
5679     DidSaveTextDocumentNotification.method = 'textDocument/didSave';
5680     DidSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification.method);
5681 })(DidSaveTextDocumentNotification = exports.DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = {}));
5682 /**
5683  * Represents reasons why a text document is saved.
5684  */
5685 var TextDocumentSaveReason;
5686 (function (TextDocumentSaveReason) {
5687     /**
5688      * Manually triggered, e.g. by the user pressing save, by starting debugging,
5689      * or by an API call.
5690      */
5691     TextDocumentSaveReason.Manual = 1;
5692     /**
5693      * Automatic after a delay.
5694      */
5695     TextDocumentSaveReason.AfterDelay = 2;
5696     /**
5697      * When the editor lost focus.
5698      */
5699     TextDocumentSaveReason.FocusOut = 3;
5700 })(TextDocumentSaveReason = exports.TextDocumentSaveReason || (exports.TextDocumentSaveReason = {}));
5701 /**
5702  * A document will save notification is sent from the client to the server before
5703  * the document is actually saved.
5704  */
5705 var WillSaveTextDocumentNotification;
5706 (function (WillSaveTextDocumentNotification) {
5707     WillSaveTextDocumentNotification.method = 'textDocument/willSave';
5708     WillSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification.method);
5709 })(WillSaveTextDocumentNotification = exports.WillSaveTextDocumentNotification || (exports.WillSaveTextDocumentNotification = {}));
5710 /**
5711  * A document will save request is sent from the client to the server before
5712  * the document is actually saved. The request can return an array of TextEdits
5713  * which will be applied to the text document before it is saved. Please note that
5714  * clients might drop results if computing the text edits took too long or if a
5715  * server constantly fails on this request. This is done to keep the save fast and
5716  * reliable.
5717  */
5718 var WillSaveTextDocumentWaitUntilRequest;
5719 (function (WillSaveTextDocumentWaitUntilRequest) {
5720     WillSaveTextDocumentWaitUntilRequest.method = 'textDocument/willSaveWaitUntil';
5721     WillSaveTextDocumentWaitUntilRequest.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest.method);
5722 })(WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = {}));
5723 /**
5724  * The watched files notification is sent from the client to the server when
5725  * the client detects changes to file watched by the language client.
5726  */
5727 var DidChangeWatchedFilesNotification;
5728 (function (DidChangeWatchedFilesNotification) {
5729     DidChangeWatchedFilesNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWatchedFiles');
5730 })(DidChangeWatchedFilesNotification = exports.DidChangeWatchedFilesNotification || (exports.DidChangeWatchedFilesNotification = {}));
5731 /**
5732  * The file event type
5733  */
5734 var FileChangeType;
5735 (function (FileChangeType) {
5736     /**
5737      * The file got created.
5738      */
5739     FileChangeType.Created = 1;
5740     /**
5741      * The file got changed.
5742      */
5743     FileChangeType.Changed = 2;
5744     /**
5745      * The file got deleted.
5746      */
5747     FileChangeType.Deleted = 3;
5748 })(FileChangeType = exports.FileChangeType || (exports.FileChangeType = {}));
5749 var WatchKind;
5750 (function (WatchKind) {
5751     /**
5752      * Interested in create events.
5753      */
5754     WatchKind.Create = 1;
5755     /**
5756      * Interested in change events
5757      */
5758     WatchKind.Change = 2;
5759     /**
5760      * Interested in delete events
5761      */
5762     WatchKind.Delete = 4;
5763 })(WatchKind = exports.WatchKind || (exports.WatchKind = {}));
5764 /**
5765  * Diagnostics notification are sent from the server to the client to signal
5766  * results of validation runs.
5767  */
5768 var PublishDiagnosticsNotification;
5769 (function (PublishDiagnosticsNotification) {
5770     PublishDiagnosticsNotification.type = new messages_1.ProtocolNotificationType('textDocument/publishDiagnostics');
5771 })(PublishDiagnosticsNotification = exports.PublishDiagnosticsNotification || (exports.PublishDiagnosticsNotification = {}));
5772 /**
5773  * How a completion was triggered
5774  */
5775 var CompletionTriggerKind;
5776 (function (CompletionTriggerKind) {
5777     /**
5778      * Completion was triggered by typing an identifier (24x7 code
5779      * complete), manual invocation (e.g Ctrl+Space) or via API.
5780      */
5781     CompletionTriggerKind.Invoked = 1;
5782     /**
5783      * Completion was triggered by a trigger character specified by
5784      * the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
5785      */
5786     CompletionTriggerKind.TriggerCharacter = 2;
5787     /**
5788      * Completion was re-triggered as current completion list is incomplete
5789      */
5790     CompletionTriggerKind.TriggerForIncompleteCompletions = 3;
5791 })(CompletionTriggerKind = exports.CompletionTriggerKind || (exports.CompletionTriggerKind = {}));
5792 /**
5793  * Request to request completion at a given text document position. The request's
5794  * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response
5795  * is of type [CompletionItem[]](#CompletionItem) or [CompletionList](#CompletionList)
5796  * or a Thenable that resolves to such.
5797  *
5798  * The request can delay the computation of the [`detail`](#CompletionItem.detail)
5799  * and [`documentation`](#CompletionItem.documentation) properties to the `completionItem/resolve`
5800  * request. However, properties that are needed for the initial sorting and filtering, like `sortText`,
5801  * `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.
5802  */
5803 var CompletionRequest;
5804 (function (CompletionRequest) {
5805     CompletionRequest.method = 'textDocument/completion';
5806     CompletionRequest.type = new messages_1.ProtocolRequestType(CompletionRequest.method);
5807 })(CompletionRequest = exports.CompletionRequest || (exports.CompletionRequest = {}));
5808 /**
5809  * Request to resolve additional information for a given completion item.The request's
5810  * parameter is of type [CompletionItem](#CompletionItem) the response
5811  * is of type [CompletionItem](#CompletionItem) or a Thenable that resolves to such.
5812  */
5813 var CompletionResolveRequest;
5814 (function (CompletionResolveRequest) {
5815     CompletionResolveRequest.method = 'completionItem/resolve';
5816     CompletionResolveRequest.type = new messages_1.ProtocolRequestType(CompletionResolveRequest.method);
5817 })(CompletionResolveRequest = exports.CompletionResolveRequest || (exports.CompletionResolveRequest = {}));
5818 /**
5819  * Request to request hover information at a given text document position. The request's
5820  * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response is of
5821  * type [Hover](#Hover) or a Thenable that resolves to such.
5822  */
5823 var HoverRequest;
5824 (function (HoverRequest) {
5825     HoverRequest.method = 'textDocument/hover';
5826     HoverRequest.type = new messages_1.ProtocolRequestType(HoverRequest.method);
5827 })(HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}));
5828 /**
5829  * How a signature help was triggered.
5830  *
5831  * @since 3.15.0
5832  */
5833 var SignatureHelpTriggerKind;
5834 (function (SignatureHelpTriggerKind) {
5835     /**
5836      * Signature help was invoked manually by the user or by a command.
5837      */
5838     SignatureHelpTriggerKind.Invoked = 1;
5839     /**
5840      * Signature help was triggered by a trigger character.
5841      */
5842     SignatureHelpTriggerKind.TriggerCharacter = 2;
5843     /**
5844      * Signature help was triggered by the cursor moving or by the document content changing.
5845      */
5846     SignatureHelpTriggerKind.ContentChange = 3;
5847 })(SignatureHelpTriggerKind = exports.SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = {}));
5848 var SignatureHelpRequest;
5849 (function (SignatureHelpRequest) {
5850     SignatureHelpRequest.method = 'textDocument/signatureHelp';
5851     SignatureHelpRequest.type = new messages_1.ProtocolRequestType(SignatureHelpRequest.method);
5852 })(SignatureHelpRequest = exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {}));
5853 /**
5854  * A request to resolve the definition location of a symbol at a given text
5855  * document position. The request's parameter is of type [TextDocumentPosition]
5856  * (#TextDocumentPosition) the response is of either type [Definition](#Definition)
5857  * or a typed array of [DefinitionLink](#DefinitionLink) or a Thenable that resolves
5858  * to such.
5859  */
5860 var DefinitionRequest;
5861 (function (DefinitionRequest) {
5862     DefinitionRequest.method = 'textDocument/definition';
5863     DefinitionRequest.type = new messages_1.ProtocolRequestType(DefinitionRequest.method);
5864 })(DefinitionRequest = exports.DefinitionRequest || (exports.DefinitionRequest = {}));
5865 /**
5866  * A request to resolve project-wide references for the symbol denoted
5867  * by the given text document position. The request's parameter is of
5868  * type [ReferenceParams](#ReferenceParams) the response is of type
5869  * [Location[]](#Location) or a Thenable that resolves to such.
5870  */
5871 var ReferencesRequest;
5872 (function (ReferencesRequest) {
5873     ReferencesRequest.method = 'textDocument/references';
5874     ReferencesRequest.type = new messages_1.ProtocolRequestType(ReferencesRequest.method);
5875 })(ReferencesRequest = exports.ReferencesRequest || (exports.ReferencesRequest = {}));
5876 /**
5877  * Request to resolve a [DocumentHighlight](#DocumentHighlight) for a given
5878  * text document position. The request's parameter is of type [TextDocumentPosition]
5879  * (#TextDocumentPosition) the request response is of type [DocumentHighlight[]]
5880  * (#DocumentHighlight) or a Thenable that resolves to such.
5881  */
5882 var DocumentHighlightRequest;
5883 (function (DocumentHighlightRequest) {
5884     DocumentHighlightRequest.method = 'textDocument/documentHighlight';
5885     DocumentHighlightRequest.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest.method);
5886 })(DocumentHighlightRequest = exports.DocumentHighlightRequest || (exports.DocumentHighlightRequest = {}));
5887 /**
5888  * A request to list all symbols found in a given text document. The request's
5889  * parameter is of type [TextDocumentIdentifier](#TextDocumentIdentifier) the
5890  * response is of type [SymbolInformation[]](#SymbolInformation) or a Thenable
5891  * that resolves to such.
5892  */
5893 var DocumentSymbolRequest;
5894 (function (DocumentSymbolRequest) {
5895     DocumentSymbolRequest.method = 'textDocument/documentSymbol';
5896     DocumentSymbolRequest.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest.method);
5897 })(DocumentSymbolRequest = exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {}));
5898 /**
5899  * A request to provide commands for the given text document and range.
5900  */
5901 var CodeActionRequest;
5902 (function (CodeActionRequest) {
5903     CodeActionRequest.method = 'textDocument/codeAction';
5904     CodeActionRequest.type = new messages_1.ProtocolRequestType(CodeActionRequest.method);
5905 })(CodeActionRequest = exports.CodeActionRequest || (exports.CodeActionRequest = {}));
5906 /**
5907  * Request to resolve additional information for a given code action.The request's
5908  * parameter is of type [CodeAction](#CodeAction) the response
5909  * is of type [CodeAction](#CodeAction) or a Thenable that resolves to such.
5910  */
5911 var CodeActionResolveRequest;
5912 (function (CodeActionResolveRequest) {
5913     CodeActionResolveRequest.method = 'codeAction/resolve';
5914     CodeActionResolveRequest.type = new messages_1.ProtocolRequestType(CodeActionResolveRequest.method);
5915 })(CodeActionResolveRequest = exports.CodeActionResolveRequest || (exports.CodeActionResolveRequest = {}));
5916 /**
5917  * A request to list project-wide symbols matching the query string given
5918  * by the [WorkspaceSymbolParams](#WorkspaceSymbolParams). The response is
5919  * of type [SymbolInformation[]](#SymbolInformation) or a Thenable that
5920  * resolves to such.
5921  */
5922 var WorkspaceSymbolRequest;
5923 (function (WorkspaceSymbolRequest) {
5924     WorkspaceSymbolRequest.method = 'workspace/symbol';
5925     WorkspaceSymbolRequest.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest.method);
5926 })(WorkspaceSymbolRequest = exports.WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = {}));
5927 /**
5928  * A request to provide code lens for the given text document.
5929  */
5930 var CodeLensRequest;
5931 (function (CodeLensRequest) {
5932     CodeLensRequest.method = 'textDocument/codeLens';
5933     CodeLensRequest.type = new messages_1.ProtocolRequestType(CodeLensRequest.method);
5934 })(CodeLensRequest = exports.CodeLensRequest || (exports.CodeLensRequest = {}));
5935 /**
5936  * A request to resolve a command for a given code lens.
5937  */
5938 var CodeLensResolveRequest;
5939 (function (CodeLensResolveRequest) {
5940     CodeLensResolveRequest.method = 'codeLens/resolve';
5941     CodeLensResolveRequest.type = new messages_1.ProtocolRequestType(CodeLensResolveRequest.method);
5942 })(CodeLensResolveRequest = exports.CodeLensResolveRequest || (exports.CodeLensResolveRequest = {}));
5943 /**
5944  * A request to refresh all code actions
5945  *
5946  * @since 3.16.0
5947  */
5948 var CodeLensRefreshRequest;
5949 (function (CodeLensRefreshRequest) {
5950     CodeLensRefreshRequest.method = `workspace/codeLens/refresh`;
5951     CodeLensRefreshRequest.type = new messages_1.ProtocolRequestType0(CodeLensRefreshRequest.method);
5952 })(CodeLensRefreshRequest = exports.CodeLensRefreshRequest || (exports.CodeLensRefreshRequest = {}));
5953 /**
5954  * A request to provide document links
5955  */
5956 var DocumentLinkRequest;
5957 (function (DocumentLinkRequest) {
5958     DocumentLinkRequest.method = 'textDocument/documentLink';
5959     DocumentLinkRequest.type = new messages_1.ProtocolRequestType(DocumentLinkRequest.method);
5960 })(DocumentLinkRequest = exports.DocumentLinkRequest || (exports.DocumentLinkRequest = {}));
5961 /**
5962  * Request to resolve additional information for a given document link. The request's
5963  * parameter is of type [DocumentLink](#DocumentLink) the response
5964  * is of type [DocumentLink](#DocumentLink) or a Thenable that resolves to such.
5965  */
5966 var DocumentLinkResolveRequest;
5967 (function (DocumentLinkResolveRequest) {
5968     DocumentLinkResolveRequest.method = 'documentLink/resolve';
5969     DocumentLinkResolveRequest.type = new messages_1.ProtocolRequestType(DocumentLinkResolveRequest.method);
5970 })(DocumentLinkResolveRequest = exports.DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = {}));
5971 /**
5972  * A request to to format a whole document.
5973  */
5974 var DocumentFormattingRequest;
5975 (function (DocumentFormattingRequest) {
5976     DocumentFormattingRequest.method = 'textDocument/formatting';
5977     DocumentFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest.method);
5978 })(DocumentFormattingRequest = exports.DocumentFormattingRequest || (exports.DocumentFormattingRequest = {}));
5979 /**
5980  * A request to to format a range in a document.
5981  */
5982 var DocumentRangeFormattingRequest;
5983 (function (DocumentRangeFormattingRequest) {
5984     DocumentRangeFormattingRequest.method = 'textDocument/rangeFormatting';
5985     DocumentRangeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest.method);
5986 })(DocumentRangeFormattingRequest = exports.DocumentRangeFormattingRequest || (exports.DocumentRangeFormattingRequest = {}));
5987 /**
5988  * A request to format a document on type.
5989  */
5990 var DocumentOnTypeFormattingRequest;
5991 (function (DocumentOnTypeFormattingRequest) {
5992     DocumentOnTypeFormattingRequest.method = 'textDocument/onTypeFormatting';
5993     DocumentOnTypeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest.method);
5994 })(DocumentOnTypeFormattingRequest = exports.DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = {}));
5995 //---- Rename ----------------------------------------------
5996 var PrepareSupportDefaultBehavior;
5997 (function (PrepareSupportDefaultBehavior) {
5998     /**
5999      * The client's default behavior is to select the identifier
6000      * according the to language's syntax rule.
6001      */
6002     PrepareSupportDefaultBehavior.Identifier = 1;
6003 })(PrepareSupportDefaultBehavior = exports.PrepareSupportDefaultBehavior || (exports.PrepareSupportDefaultBehavior = {}));
6004 /**
6005  * A request to rename a symbol.
6006  */
6007 var RenameRequest;
6008 (function (RenameRequest) {
6009     RenameRequest.method = 'textDocument/rename';
6010     RenameRequest.type = new messages_1.ProtocolRequestType(RenameRequest.method);
6011 })(RenameRequest = exports.RenameRequest || (exports.RenameRequest = {}));
6012 /**
6013  * A request to test and perform the setup necessary for a rename.
6014  *
6015  * @since 3.16 - support for default behavior
6016  */
6017 var PrepareRenameRequest;
6018 (function (PrepareRenameRequest) {
6019     PrepareRenameRequest.method = 'textDocument/prepareRename';
6020     PrepareRenameRequest.type = new messages_1.ProtocolRequestType(PrepareRenameRequest.method);
6021 })(PrepareRenameRequest = exports.PrepareRenameRequest || (exports.PrepareRenameRequest = {}));
6022 /**
6023  * A request send from the client to the server to execute a command. The request might return
6024  * a workspace edit which the client will apply to the workspace.
6025  */
6026 var ExecuteCommandRequest;
6027 (function (ExecuteCommandRequest) {
6028     ExecuteCommandRequest.type = new messages_1.ProtocolRequestType('workspace/executeCommand');
6029 })(ExecuteCommandRequest = exports.ExecuteCommandRequest || (exports.ExecuteCommandRequest = {}));
6030 /**
6031  * A request sent from the server to the client to modified certain resources.
6032  */
6033 var ApplyWorkspaceEditRequest;
6034 (function (ApplyWorkspaceEditRequest) {
6035     ApplyWorkspaceEditRequest.type = new messages_1.ProtocolRequestType('workspace/applyEdit');
6036 })(ApplyWorkspaceEditRequest = exports.ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = {}));
6037 //# sourceMappingURL=protocol.js.map
6038
6039 /***/ }),
6040 /* 29 */
6041 /***/ ((__unused_webpack_module, exports) => {
6042
6043 /* --------------------------------------------------------------------------------------------
6044  * Copyright (c) Microsoft Corporation. All rights reserved.
6045  * Licensed under the MIT License. See License.txt in the project root for license information.
6046  * ------------------------------------------------------------------------------------------ */
6047
6048 Object.defineProperty(exports, "__esModule", ({ value: true }));
6049 exports.objectLiteral = exports.typedArray = exports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0;
6050 function boolean(value) {
6051     return value === true || value === false;
6052 }
6053 exports.boolean = boolean;
6054 function string(value) {
6055     return typeof value === 'string' || value instanceof String;
6056 }
6057 exports.string = string;
6058 function number(value) {
6059     return typeof value === 'number' || value instanceof Number;
6060 }
6061 exports.number = number;
6062 function error(value) {
6063     return value instanceof Error;
6064 }
6065 exports.error = error;
6066 function func(value) {
6067     return typeof value === 'function';
6068 }
6069 exports.func = func;
6070 function array(value) {
6071     return Array.isArray(value);
6072 }
6073 exports.array = array;
6074 function stringArray(value) {
6075     return array(value) && value.every(elem => string(elem));
6076 }
6077 exports.stringArray = stringArray;
6078 function typedArray(value, check) {
6079     return Array.isArray(value) && value.every(check);
6080 }
6081 exports.typedArray = typedArray;
6082 function objectLiteral(value) {
6083     // Strictly speaking class instances pass this check as well. Since the LSP
6084     // doesn't use classes we ignore this for now. If we do we need to add something
6085     // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
6086     return value !== null && typeof value === 'object';
6087 }
6088 exports.objectLiteral = objectLiteral;
6089 //# sourceMappingURL=is.js.map
6090
6091 /***/ }),
6092 /* 30 */
6093 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6094
6095
6096 /* --------------------------------------------------------------------------------------------
6097  * Copyright (c) Microsoft Corporation. All rights reserved.
6098  * Licensed under the MIT License. See License.txt in the project root for license information.
6099  * ------------------------------------------------------------------------------------------ */
6100 Object.defineProperty(exports, "__esModule", ({ value: true }));
6101 exports.ImplementationRequest = void 0;
6102 const messages_1 = __webpack_require__(27);
6103 // @ts-ignore: to avoid inlining LocatioLink as dynamic import
6104 let __noDynamicImport;
6105 /**
6106  * A request to resolve the implementation locations of a symbol at a given text
6107  * document position. The request's parameter is of type [TextDocumentPositioParams]
6108  * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a
6109  * Thenable that resolves to such.
6110  */
6111 var ImplementationRequest;
6112 (function (ImplementationRequest) {
6113     ImplementationRequest.method = 'textDocument/implementation';
6114     ImplementationRequest.type = new messages_1.ProtocolRequestType(ImplementationRequest.method);
6115 })(ImplementationRequest = exports.ImplementationRequest || (exports.ImplementationRequest = {}));
6116 //# sourceMappingURL=protocol.implementation.js.map
6117
6118 /***/ }),
6119 /* 31 */
6120 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6121
6122
6123 /* --------------------------------------------------------------------------------------------
6124  * Copyright (c) Microsoft Corporation. All rights reserved.
6125  * Licensed under the MIT License. See License.txt in the project root for license information.
6126  * ------------------------------------------------------------------------------------------ */
6127 Object.defineProperty(exports, "__esModule", ({ value: true }));
6128 exports.TypeDefinitionRequest = void 0;
6129 const messages_1 = __webpack_require__(27);
6130 // @ts-ignore: to avoid inlining LocatioLink as dynamic import
6131 let __noDynamicImport;
6132 /**
6133  * A request to resolve the type definition locations of a symbol at a given text
6134  * document position. The request's parameter is of type [TextDocumentPositioParams]
6135  * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a
6136  * Thenable that resolves to such.
6137  */
6138 var TypeDefinitionRequest;
6139 (function (TypeDefinitionRequest) {
6140     TypeDefinitionRequest.method = 'textDocument/typeDefinition';
6141     TypeDefinitionRequest.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest.method);
6142 })(TypeDefinitionRequest = exports.TypeDefinitionRequest || (exports.TypeDefinitionRequest = {}));
6143 //# sourceMappingURL=protocol.typeDefinition.js.map
6144
6145 /***/ }),
6146 /* 32 */
6147 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6148
6149
6150 /* --------------------------------------------------------------------------------------------
6151  * Copyright (c) Microsoft Corporation. All rights reserved.
6152  * Licensed under the MIT License. See License.txt in the project root for license information.
6153  * ------------------------------------------------------------------------------------------ */
6154 Object.defineProperty(exports, "__esModule", ({ value: true }));
6155 exports.DidChangeWorkspaceFoldersNotification = exports.WorkspaceFoldersRequest = void 0;
6156 const messages_1 = __webpack_require__(27);
6157 /**
6158  * The `workspace/workspaceFolders` is sent from the server to the client to fetch the open workspace folders.
6159  */
6160 var WorkspaceFoldersRequest;
6161 (function (WorkspaceFoldersRequest) {
6162     WorkspaceFoldersRequest.type = new messages_1.ProtocolRequestType0('workspace/workspaceFolders');
6163 })(WorkspaceFoldersRequest = exports.WorkspaceFoldersRequest || (exports.WorkspaceFoldersRequest = {}));
6164 /**
6165  * The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace
6166  * folder configuration changes.
6167  */
6168 var DidChangeWorkspaceFoldersNotification;
6169 (function (DidChangeWorkspaceFoldersNotification) {
6170     DidChangeWorkspaceFoldersNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWorkspaceFolders');
6171 })(DidChangeWorkspaceFoldersNotification = exports.DidChangeWorkspaceFoldersNotification || (exports.DidChangeWorkspaceFoldersNotification = {}));
6172 //# sourceMappingURL=protocol.workspaceFolders.js.map
6173
6174 /***/ }),
6175 /* 33 */
6176 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6177
6178
6179 /* --------------------------------------------------------------------------------------------
6180  * Copyright (c) Microsoft Corporation. All rights reserved.
6181  * Licensed under the MIT License. See License.txt in the project root for license information.
6182  * ------------------------------------------------------------------------------------------ */
6183 Object.defineProperty(exports, "__esModule", ({ value: true }));
6184 exports.ConfigurationRequest = void 0;
6185 const messages_1 = __webpack_require__(27);
6186 /**
6187  * The 'workspace/configuration' request is sent from the server to the client to fetch a certain
6188  * configuration setting.
6189  *
6190  * This pull model replaces the old push model were the client signaled configuration change via an
6191  * event. If the server still needs to react to configuration changes (since the server caches the
6192  * result of `workspace/configuration` requests) the server should register for an empty configuration
6193  * change event and empty the cache if such an event is received.
6194  */
6195 var ConfigurationRequest;
6196 (function (ConfigurationRequest) {
6197     ConfigurationRequest.type = new messages_1.ProtocolRequestType('workspace/configuration');
6198 })(ConfigurationRequest = exports.ConfigurationRequest || (exports.ConfigurationRequest = {}));
6199 //# sourceMappingURL=protocol.configuration.js.map
6200
6201 /***/ }),
6202 /* 34 */
6203 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6204
6205
6206 /* --------------------------------------------------------------------------------------------
6207  * Copyright (c) Microsoft Corporation. All rights reserved.
6208  * Licensed under the MIT License. See License.txt in the project root for license information.
6209  * ------------------------------------------------------------------------------------------ */
6210 Object.defineProperty(exports, "__esModule", ({ value: true }));
6211 exports.ColorPresentationRequest = exports.DocumentColorRequest = void 0;
6212 const messages_1 = __webpack_require__(27);
6213 /**
6214  * A request to list all color symbols found in a given text document. The request's
6215  * parameter is of type [DocumentColorParams](#DocumentColorParams) the
6216  * response is of type [ColorInformation[]](#ColorInformation) or a Thenable
6217  * that resolves to such.
6218  */
6219 var DocumentColorRequest;
6220 (function (DocumentColorRequest) {
6221     DocumentColorRequest.method = 'textDocument/documentColor';
6222     DocumentColorRequest.type = new messages_1.ProtocolRequestType(DocumentColorRequest.method);
6223 })(DocumentColorRequest = exports.DocumentColorRequest || (exports.DocumentColorRequest = {}));
6224 /**
6225  * A request to list all presentation for a color. The request's
6226  * parameter is of type [ColorPresentationParams](#ColorPresentationParams) the
6227  * response is of type [ColorInformation[]](#ColorInformation) or a Thenable
6228  * that resolves to such.
6229  */
6230 var ColorPresentationRequest;
6231 (function (ColorPresentationRequest) {
6232     ColorPresentationRequest.type = new messages_1.ProtocolRequestType('textDocument/colorPresentation');
6233 })(ColorPresentationRequest = exports.ColorPresentationRequest || (exports.ColorPresentationRequest = {}));
6234 //# sourceMappingURL=protocol.colorProvider.js.map
6235
6236 /***/ }),
6237 /* 35 */
6238 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6239
6240
6241 /*---------------------------------------------------------------------------------------------
6242  *  Copyright (c) Microsoft Corporation. All rights reserved.
6243  *  Licensed under the MIT License. See License.txt in the project root for license information.
6244  *--------------------------------------------------------------------------------------------*/
6245 Object.defineProperty(exports, "__esModule", ({ value: true }));
6246 exports.FoldingRangeRequest = exports.FoldingRangeKind = void 0;
6247 const messages_1 = __webpack_require__(27);
6248 /**
6249  * Enum of known range kinds
6250  */
6251 var FoldingRangeKind;
6252 (function (FoldingRangeKind) {
6253     /**
6254      * Folding range for a comment
6255      */
6256     FoldingRangeKind["Comment"] = "comment";
6257     /**
6258      * Folding range for a imports or includes
6259      */
6260     FoldingRangeKind["Imports"] = "imports";
6261     /**
6262      * Folding range for a region (e.g. `#region`)
6263      */
6264     FoldingRangeKind["Region"] = "region";
6265 })(FoldingRangeKind = exports.FoldingRangeKind || (exports.FoldingRangeKind = {}));
6266 /**
6267  * A request to provide folding ranges in a document. The request's
6268  * parameter is of type [FoldingRangeParams](#FoldingRangeParams), the
6269  * response is of type [FoldingRangeList](#FoldingRangeList) or a Thenable
6270  * that resolves to such.
6271  */
6272 var FoldingRangeRequest;
6273 (function (FoldingRangeRequest) {
6274     FoldingRangeRequest.method = 'textDocument/foldingRange';
6275     FoldingRangeRequest.type = new messages_1.ProtocolRequestType(FoldingRangeRequest.method);
6276 })(FoldingRangeRequest = exports.FoldingRangeRequest || (exports.FoldingRangeRequest = {}));
6277 //# sourceMappingURL=protocol.foldingRange.js.map
6278
6279 /***/ }),
6280 /* 36 */
6281 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6282
6283
6284 /* --------------------------------------------------------------------------------------------
6285  * Copyright (c) Microsoft Corporation. All rights reserved.
6286  * Licensed under the MIT License. See License.txt in the project root for license information.
6287  * ------------------------------------------------------------------------------------------ */
6288 Object.defineProperty(exports, "__esModule", ({ value: true }));
6289 exports.DeclarationRequest = void 0;
6290 const messages_1 = __webpack_require__(27);
6291 // @ts-ignore: to avoid inlining LocatioLink as dynamic import
6292 let __noDynamicImport;
6293 /**
6294  * A request to resolve the type definition locations of a symbol at a given text
6295  * document position. The request's parameter is of type [TextDocumentPositioParams]
6296  * (#TextDocumentPositionParams) the response is of type [Declaration](#Declaration)
6297  * or a typed array of [DeclarationLink](#DeclarationLink) or a Thenable that resolves
6298  * to such.
6299  */
6300 var DeclarationRequest;
6301 (function (DeclarationRequest) {
6302     DeclarationRequest.method = 'textDocument/declaration';
6303     DeclarationRequest.type = new messages_1.ProtocolRequestType(DeclarationRequest.method);
6304 })(DeclarationRequest = exports.DeclarationRequest || (exports.DeclarationRequest = {}));
6305 //# sourceMappingURL=protocol.declaration.js.map
6306
6307 /***/ }),
6308 /* 37 */
6309 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6310
6311
6312 /*---------------------------------------------------------------------------------------------
6313  *  Copyright (c) Microsoft Corporation. All rights reserved.
6314  *  Licensed under the MIT License. See License.txt in the project root for license information.
6315  *--------------------------------------------------------------------------------------------*/
6316 Object.defineProperty(exports, "__esModule", ({ value: true }));
6317 exports.SelectionRangeRequest = void 0;
6318 const messages_1 = __webpack_require__(27);
6319 /**
6320  * A request to provide selection ranges in a document. The request's
6321  * parameter is of type [SelectionRangeParams](#SelectionRangeParams), the
6322  * response is of type [SelectionRange[]](#SelectionRange[]) or a Thenable
6323  * that resolves to such.
6324  */
6325 var SelectionRangeRequest;
6326 (function (SelectionRangeRequest) {
6327     SelectionRangeRequest.method = 'textDocument/selectionRange';
6328     SelectionRangeRequest.type = new messages_1.ProtocolRequestType(SelectionRangeRequest.method);
6329 })(SelectionRangeRequest = exports.SelectionRangeRequest || (exports.SelectionRangeRequest = {}));
6330 //# sourceMappingURL=protocol.selectionRange.js.map
6331
6332 /***/ }),
6333 /* 38 */
6334 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6335
6336
6337 /* --------------------------------------------------------------------------------------------
6338  * Copyright (c) Microsoft Corporation. All rights reserved.
6339  * Licensed under the MIT License. See License.txt in the project root for license information.
6340  * ------------------------------------------------------------------------------------------ */
6341 Object.defineProperty(exports, "__esModule", ({ value: true }));
6342 exports.WorkDoneProgressCancelNotification = exports.WorkDoneProgressCreateRequest = exports.WorkDoneProgress = void 0;
6343 const vscode_jsonrpc_1 = __webpack_require__(6);
6344 const messages_1 = __webpack_require__(27);
6345 var WorkDoneProgress;
6346 (function (WorkDoneProgress) {
6347     WorkDoneProgress.type = new vscode_jsonrpc_1.ProgressType();
6348     function is(value) {
6349         return value === WorkDoneProgress.type;
6350     }
6351     WorkDoneProgress.is = is;
6352 })(WorkDoneProgress = exports.WorkDoneProgress || (exports.WorkDoneProgress = {}));
6353 /**
6354  * The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress
6355  * reporting from the server.
6356  */
6357 var WorkDoneProgressCreateRequest;
6358 (function (WorkDoneProgressCreateRequest) {
6359     WorkDoneProgressCreateRequest.type = new messages_1.ProtocolRequestType('window/workDoneProgress/create');
6360 })(WorkDoneProgressCreateRequest = exports.WorkDoneProgressCreateRequest || (exports.WorkDoneProgressCreateRequest = {}));
6361 /**
6362  * The `window/workDoneProgress/cancel` notification is sent from  the client to the server to cancel a progress
6363  * initiated on the server side.
6364  */
6365 var WorkDoneProgressCancelNotification;
6366 (function (WorkDoneProgressCancelNotification) {
6367     WorkDoneProgressCancelNotification.type = new messages_1.ProtocolNotificationType('window/workDoneProgress/cancel');
6368 })(WorkDoneProgressCancelNotification = exports.WorkDoneProgressCancelNotification || (exports.WorkDoneProgressCancelNotification = {}));
6369 //# sourceMappingURL=protocol.progress.js.map
6370
6371 /***/ }),
6372 /* 39 */
6373 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6374
6375
6376 /* --------------------------------------------------------------------------------------------
6377  * Copyright (c) TypeFox and others. All rights reserved.
6378  * Licensed under the MIT License. See License.txt in the project root for license information.
6379  * ------------------------------------------------------------------------------------------ */
6380 Object.defineProperty(exports, "__esModule", ({ value: true }));
6381 exports.CallHierarchyOutgoingCallsRequest = exports.CallHierarchyIncomingCallsRequest = exports.CallHierarchyPrepareRequest = void 0;
6382 const messages_1 = __webpack_require__(27);
6383 /**
6384  * A request to result a `CallHierarchyItem` in a document at a given position.
6385  * Can be used as an input to a incoming or outgoing call hierarchy.
6386  *
6387  * @since 3.16.0
6388  */
6389 var CallHierarchyPrepareRequest;
6390 (function (CallHierarchyPrepareRequest) {
6391     CallHierarchyPrepareRequest.method = 'textDocument/prepareCallHierarchy';
6392     CallHierarchyPrepareRequest.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest.method);
6393 })(CallHierarchyPrepareRequest = exports.CallHierarchyPrepareRequest || (exports.CallHierarchyPrepareRequest = {}));
6394 /**
6395  * A request to resolve the incoming calls for a given `CallHierarchyItem`.
6396  *
6397  * @since 3.16.0
6398  */
6399 var CallHierarchyIncomingCallsRequest;
6400 (function (CallHierarchyIncomingCallsRequest) {
6401     CallHierarchyIncomingCallsRequest.method = 'callHierarchy/incomingCalls';
6402     CallHierarchyIncomingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest.method);
6403 })(CallHierarchyIncomingCallsRequest = exports.CallHierarchyIncomingCallsRequest || (exports.CallHierarchyIncomingCallsRequest = {}));
6404 /**
6405  * A request to resolve the outgoing calls for a given `CallHierarchyItem`.
6406  *
6407  * @since 3.16.0
6408  */
6409 var CallHierarchyOutgoingCallsRequest;
6410 (function (CallHierarchyOutgoingCallsRequest) {
6411     CallHierarchyOutgoingCallsRequest.method = 'callHierarchy/outgoingCalls';
6412     CallHierarchyOutgoingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest.method);
6413 })(CallHierarchyOutgoingCallsRequest = exports.CallHierarchyOutgoingCallsRequest || (exports.CallHierarchyOutgoingCallsRequest = {}));
6414 //# sourceMappingURL=protocol.callHierarchy.js.map
6415
6416 /***/ }),
6417 /* 40 */
6418 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6419
6420
6421 /* --------------------------------------------------------------------------------------------
6422  * Copyright (c) Microsoft Corporation. All rights reserved.
6423  * Licensed under the MIT License. See License.txt in the project root for license information.
6424  * ------------------------------------------------------------------------------------------ */
6425 Object.defineProperty(exports, "__esModule", ({ value: true }));
6426 exports.SemanticTokensRefreshRequest = exports.SemanticTokensRangeRequest = exports.SemanticTokensDeltaRequest = exports.SemanticTokensRequest = exports.SemanticTokensRegistrationType = exports.TokenFormat = exports.SemanticTokens = exports.SemanticTokenModifiers = exports.SemanticTokenTypes = void 0;
6427 const messages_1 = __webpack_require__(27);
6428 /**
6429  * A set of predefined token types. This set is not fixed
6430  * an clients can specify additional token types via the
6431  * corresponding client capabilities.
6432  *
6433  * @since 3.16.0
6434  */
6435 var SemanticTokenTypes;
6436 (function (SemanticTokenTypes) {
6437     SemanticTokenTypes["namespace"] = "namespace";
6438     /**
6439      * Represents a generic type. Acts as a fallback for types which can't be mapped to
6440      * a specific type like class or enum.
6441      */
6442     SemanticTokenTypes["type"] = "type";
6443     SemanticTokenTypes["class"] = "class";
6444     SemanticTokenTypes["enum"] = "enum";
6445     SemanticTokenTypes["interface"] = "interface";
6446     SemanticTokenTypes["struct"] = "struct";
6447     SemanticTokenTypes["typeParameter"] = "typeParameter";
6448     SemanticTokenTypes["parameter"] = "parameter";
6449     SemanticTokenTypes["variable"] = "variable";
6450     SemanticTokenTypes["property"] = "property";
6451     SemanticTokenTypes["enumMember"] = "enumMember";
6452     SemanticTokenTypes["event"] = "event";
6453     SemanticTokenTypes["function"] = "function";
6454     SemanticTokenTypes["method"] = "method";
6455     SemanticTokenTypes["macro"] = "macro";
6456     SemanticTokenTypes["keyword"] = "keyword";
6457     SemanticTokenTypes["modifier"] = "modifier";
6458     SemanticTokenTypes["comment"] = "comment";
6459     SemanticTokenTypes["string"] = "string";
6460     SemanticTokenTypes["number"] = "number";
6461     SemanticTokenTypes["regexp"] = "regexp";
6462     SemanticTokenTypes["operator"] = "operator";
6463 })(SemanticTokenTypes = exports.SemanticTokenTypes || (exports.SemanticTokenTypes = {}));
6464 /**
6465  * A set of predefined token modifiers. This set is not fixed
6466  * an clients can specify additional token types via the
6467  * corresponding client capabilities.
6468  *
6469  * @since 3.16.0
6470  */
6471 var SemanticTokenModifiers;
6472 (function (SemanticTokenModifiers) {
6473     SemanticTokenModifiers["declaration"] = "declaration";
6474     SemanticTokenModifiers["definition"] = "definition";
6475     SemanticTokenModifiers["readonly"] = "readonly";
6476     SemanticTokenModifiers["static"] = "static";
6477     SemanticTokenModifiers["deprecated"] = "deprecated";
6478     SemanticTokenModifiers["abstract"] = "abstract";
6479     SemanticTokenModifiers["async"] = "async";
6480     SemanticTokenModifiers["modification"] = "modification";
6481     SemanticTokenModifiers["documentation"] = "documentation";
6482     SemanticTokenModifiers["defaultLibrary"] = "defaultLibrary";
6483 })(SemanticTokenModifiers = exports.SemanticTokenModifiers || (exports.SemanticTokenModifiers = {}));
6484 /**
6485  * @since 3.16.0
6486  */
6487 var SemanticTokens;
6488 (function (SemanticTokens) {
6489     function is(value) {
6490         const candidate = value;
6491         return candidate !== undefined && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&
6492             Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');
6493     }
6494     SemanticTokens.is = is;
6495 })(SemanticTokens = exports.SemanticTokens || (exports.SemanticTokens = {}));
6496 //------- 'textDocument/semanticTokens' -----
6497 var TokenFormat;
6498 (function (TokenFormat) {
6499     TokenFormat.Relative = 'relative';
6500 })(TokenFormat = exports.TokenFormat || (exports.TokenFormat = {}));
6501 var SemanticTokensRegistrationType;
6502 (function (SemanticTokensRegistrationType) {
6503     SemanticTokensRegistrationType.method = 'textDocument/semanticTokens';
6504     SemanticTokensRegistrationType.type = new messages_1.RegistrationType(SemanticTokensRegistrationType.method);
6505 })(SemanticTokensRegistrationType = exports.SemanticTokensRegistrationType || (exports.SemanticTokensRegistrationType = {}));
6506 /**
6507  * @since 3.16.0
6508  */
6509 var SemanticTokensRequest;
6510 (function (SemanticTokensRequest) {
6511     SemanticTokensRequest.method = 'textDocument/semanticTokens/full';
6512     SemanticTokensRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRequest.method);
6513 })(SemanticTokensRequest = exports.SemanticTokensRequest || (exports.SemanticTokensRequest = {}));
6514 /**
6515  * @since 3.16.0
6516  */
6517 var SemanticTokensDeltaRequest;
6518 (function (SemanticTokensDeltaRequest) {
6519     SemanticTokensDeltaRequest.method = 'textDocument/semanticTokens/full/delta';
6520     SemanticTokensDeltaRequest.type = new messages_1.ProtocolRequestType(SemanticTokensDeltaRequest.method);
6521 })(SemanticTokensDeltaRequest = exports.SemanticTokensDeltaRequest || (exports.SemanticTokensDeltaRequest = {}));
6522 /**
6523  * @since 3.16.0
6524  */
6525 var SemanticTokensRangeRequest;
6526 (function (SemanticTokensRangeRequest) {
6527     SemanticTokensRangeRequest.method = 'textDocument/semanticTokens/range';
6528     SemanticTokensRangeRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest.method);
6529 })(SemanticTokensRangeRequest = exports.SemanticTokensRangeRequest || (exports.SemanticTokensRangeRequest = {}));
6530 /**
6531  * @since 3.16.0
6532  */
6533 var SemanticTokensRefreshRequest;
6534 (function (SemanticTokensRefreshRequest) {
6535     SemanticTokensRefreshRequest.method = `workspace/semanticTokens/refresh`;
6536     SemanticTokensRefreshRequest.type = new messages_1.ProtocolRequestType0(SemanticTokensRefreshRequest.method);
6537 })(SemanticTokensRefreshRequest = exports.SemanticTokensRefreshRequest || (exports.SemanticTokensRefreshRequest = {}));
6538 //# sourceMappingURL=protocol.semanticTokens.js.map
6539
6540 /***/ }),
6541 /* 41 */
6542 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6543
6544
6545 /* --------------------------------------------------------------------------------------------
6546  * Copyright (c) Microsoft Corporation. All rights reserved.
6547  * Licensed under the MIT License. See License.txt in the project root for license information.
6548  * ------------------------------------------------------------------------------------------ */
6549 Object.defineProperty(exports, "__esModule", ({ value: true }));
6550 exports.ShowDocumentRequest = void 0;
6551 const messages_1 = __webpack_require__(27);
6552 /**
6553  * A request to show a document. This request might open an
6554  * external program depending on the value of the URI to open.
6555  * For example a request to open `https://code.visualstudio.com/`
6556  * will very likely open the URI in a WEB browser.
6557  *
6558  * @since 3.16.0
6559 */
6560 var ShowDocumentRequest;
6561 (function (ShowDocumentRequest) {
6562     ShowDocumentRequest.method = 'window/showDocument';
6563     ShowDocumentRequest.type = new messages_1.ProtocolRequestType(ShowDocumentRequest.method);
6564 })(ShowDocumentRequest = exports.ShowDocumentRequest || (exports.ShowDocumentRequest = {}));
6565 //# sourceMappingURL=protocol.showDocument.js.map
6566
6567 /***/ }),
6568 /* 42 */
6569 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6570
6571
6572 /*---------------------------------------------------------------------------------------------
6573  *  Copyright (c) Microsoft Corporation. All rights reserved.
6574  *  Licensed under the MIT License. See License.txt in the project root for license information.
6575  *--------------------------------------------------------------------------------------------*/
6576 Object.defineProperty(exports, "__esModule", ({ value: true }));
6577 exports.LinkedEditingRangeRequest = void 0;
6578 const messages_1 = __webpack_require__(27);
6579 /**
6580  * A request to provide ranges that can be edited together.
6581  *
6582  * @since 3.16.0
6583  */
6584 var LinkedEditingRangeRequest;
6585 (function (LinkedEditingRangeRequest) {
6586     LinkedEditingRangeRequest.method = 'textDocument/linkedEditingRange';
6587     LinkedEditingRangeRequest.type = new messages_1.ProtocolRequestType(LinkedEditingRangeRequest.method);
6588 })(LinkedEditingRangeRequest = exports.LinkedEditingRangeRequest || (exports.LinkedEditingRangeRequest = {}));
6589 //# sourceMappingURL=protocol.linkedEditingRange.js.map
6590
6591 /***/ }),
6592 /* 43 */
6593 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6594
6595
6596 /* --------------------------------------------------------------------------------------------
6597  * Copyright (c) Microsoft Corporation. All rights reserved.
6598  * Licensed under the MIT License. See License.txt in the project root for license information.
6599  * ------------------------------------------------------------------------------------------ */
6600 Object.defineProperty(exports, "__esModule", ({ value: true }));
6601 exports.WillDeleteFilesRequest = exports.DidDeleteFilesNotification = exports.DidRenameFilesNotification = exports.WillRenameFilesRequest = exports.DidCreateFilesNotification = exports.WillCreateFilesRequest = exports.FileOperationPatternKind = void 0;
6602 const messages_1 = __webpack_require__(27);
6603 /**
6604  * A pattern kind describing if a glob pattern matches a file a folder or
6605  * both.
6606  *
6607  * @since 3.16.0
6608  */
6609 var FileOperationPatternKind;
6610 (function (FileOperationPatternKind) {
6611     /**
6612      * The pattern matches a file only.
6613      */
6614     FileOperationPatternKind.file = 'file';
6615     /**
6616      * The pattern matches a folder only.
6617      */
6618     FileOperationPatternKind.folder = 'folder';
6619 })(FileOperationPatternKind = exports.FileOperationPatternKind || (exports.FileOperationPatternKind = {}));
6620 /**
6621  * The will create files request is sent from the client to the server before files are actually
6622  * created as long as the creation is triggered from within the client.
6623  *
6624  * @since 3.16.0
6625  */
6626 var WillCreateFilesRequest;
6627 (function (WillCreateFilesRequest) {
6628     WillCreateFilesRequest.method = 'workspace/willCreateFiles';
6629     WillCreateFilesRequest.type = new messages_1.ProtocolRequestType(WillCreateFilesRequest.method);
6630 })(WillCreateFilesRequest = exports.WillCreateFilesRequest || (exports.WillCreateFilesRequest = {}));
6631 /**
6632  * The did create files notification is sent from the client to the server when
6633  * files were created from within the client.
6634  *
6635  * @since 3.16.0
6636  */
6637 var DidCreateFilesNotification;
6638 (function (DidCreateFilesNotification) {
6639     DidCreateFilesNotification.method = 'workspace/didCreateFiles';
6640     DidCreateFilesNotification.type = new messages_1.ProtocolNotificationType(DidCreateFilesNotification.method);
6641 })(DidCreateFilesNotification = exports.DidCreateFilesNotification || (exports.DidCreateFilesNotification = {}));
6642 /**
6643  * The will rename files request is sent from the client to the server before files are actually
6644  * renamed as long as the rename is triggered from within the client.
6645  *
6646  * @since 3.16.0
6647  */
6648 var WillRenameFilesRequest;
6649 (function (WillRenameFilesRequest) {
6650     WillRenameFilesRequest.method = 'workspace/willRenameFiles';
6651     WillRenameFilesRequest.type = new messages_1.ProtocolRequestType(WillRenameFilesRequest.method);
6652 })(WillRenameFilesRequest = exports.WillRenameFilesRequest || (exports.WillRenameFilesRequest = {}));
6653 /**
6654  * The did rename files notification is sent from the client to the server when
6655  * files were renamed from within the client.
6656  *
6657  * @since 3.16.0
6658  */
6659 var DidRenameFilesNotification;
6660 (function (DidRenameFilesNotification) {
6661     DidRenameFilesNotification.method = 'workspace/didRenameFiles';
6662     DidRenameFilesNotification.type = new messages_1.ProtocolNotificationType(DidRenameFilesNotification.method);
6663 })(DidRenameFilesNotification = exports.DidRenameFilesNotification || (exports.DidRenameFilesNotification = {}));
6664 /**
6665  * The will delete files request is sent from the client to the server before files are actually
6666  * deleted as long as the deletion is triggered from within the client.
6667  *
6668  * @since 3.16.0
6669  */
6670 var DidDeleteFilesNotification;
6671 (function (DidDeleteFilesNotification) {
6672     DidDeleteFilesNotification.method = 'workspace/didDeleteFiles';
6673     DidDeleteFilesNotification.type = new messages_1.ProtocolNotificationType(DidDeleteFilesNotification.method);
6674 })(DidDeleteFilesNotification = exports.DidDeleteFilesNotification || (exports.DidDeleteFilesNotification = {}));
6675 /**
6676  * The did delete files notification is sent from the client to the server when
6677  * files were deleted from within the client.
6678  *
6679  * @since 3.16.0
6680  */
6681 var WillDeleteFilesRequest;
6682 (function (WillDeleteFilesRequest) {
6683     WillDeleteFilesRequest.method = 'workspace/willDeleteFiles';
6684     WillDeleteFilesRequest.type = new messages_1.ProtocolRequestType(WillDeleteFilesRequest.method);
6685 })(WillDeleteFilesRequest = exports.WillDeleteFilesRequest || (exports.WillDeleteFilesRequest = {}));
6686 //# sourceMappingURL=protocol.fileOperations.js.map
6687
6688 /***/ }),
6689 /* 44 */
6690 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6691
6692
6693 /* --------------------------------------------------------------------------------------------
6694  * Copyright (c) Microsoft Corporation. All rights reserved.
6695  * Licensed under the MIT License. See License.txt in the project root for license information.
6696  * ------------------------------------------------------------------------------------------ */
6697 Object.defineProperty(exports, "__esModule", ({ value: true }));
6698 exports.MonikerRequest = exports.MonikerKind = exports.UniquenessLevel = void 0;
6699 const messages_1 = __webpack_require__(27);
6700 /**
6701  * Moniker uniqueness level to define scope of the moniker.
6702  *
6703  * @since 3.16.0
6704  */
6705 var UniquenessLevel;
6706 (function (UniquenessLevel) {
6707     /**
6708      * The moniker is only unique inside a document
6709      */
6710     UniquenessLevel["document"] = "document";
6711     /**
6712      * The moniker is unique inside a project for which a dump got created
6713      */
6714     UniquenessLevel["project"] = "project";
6715     /**
6716      * The moniker is unique inside the group to which a project belongs
6717      */
6718     UniquenessLevel["group"] = "group";
6719     /**
6720      * The moniker is unique inside the moniker scheme.
6721      */
6722     UniquenessLevel["scheme"] = "scheme";
6723     /**
6724      * The moniker is globally unique
6725      */
6726     UniquenessLevel["global"] = "global";
6727 })(UniquenessLevel = exports.UniquenessLevel || (exports.UniquenessLevel = {}));
6728 /**
6729  * The moniker kind.
6730  *
6731  * @since 3.16.0
6732  */
6733 var MonikerKind;
6734 (function (MonikerKind) {
6735     /**
6736      * The moniker represent a symbol that is imported into a project
6737      */
6738     MonikerKind["import"] = "import";
6739     /**
6740      * The moniker represents a symbol that is exported from a project
6741      */
6742     MonikerKind["export"] = "export";
6743     /**
6744      * The moniker represents a symbol that is local to a project (e.g. a local
6745      * variable of a function, a class not visible outside the project, ...)
6746      */
6747     MonikerKind["local"] = "local";
6748 })(MonikerKind = exports.MonikerKind || (exports.MonikerKind = {}));
6749 /**
6750  * A request to get the moniker of a symbol at a given text document position.
6751  * The request parameter is of type [TextDocumentPositionParams](#TextDocumentPositionParams).
6752  * The response is of type [Moniker[]](#Moniker[]) or `null`.
6753  */
6754 var MonikerRequest;
6755 (function (MonikerRequest) {
6756     MonikerRequest.method = 'textDocument/moniker';
6757     MonikerRequest.type = new messages_1.ProtocolRequestType(MonikerRequest.method);
6758 })(MonikerRequest = exports.MonikerRequest || (exports.MonikerRequest = {}));
6759 //# sourceMappingURL=protocol.moniker.js.map
6760
6761 /***/ }),
6762 /* 45 */
6763 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6764
6765
6766 /* --------------------------------------------------------------------------------------------
6767  * Copyright (c) Microsoft Corporation. All rights reserved.
6768  * Licensed under the MIT License. See License.txt in the project root for license information.
6769  * ------------------------------------------------------------------------------------------ */
6770 Object.defineProperty(exports, "__esModule", ({ value: true }));
6771 exports.createProtocolConnection = void 0;
6772 const vscode_jsonrpc_1 = __webpack_require__(6);
6773 function createProtocolConnection(input, output, logger, options) {
6774     if (vscode_jsonrpc_1.ConnectionStrategy.is(options)) {
6775         options = { connectionStrategy: options };
6776     }
6777     return vscode_jsonrpc_1.createMessageConnection(input, output, logger, options);
6778 }
6779 exports.createProtocolConnection = createProtocolConnection;
6780 //# sourceMappingURL=connection.js.map
6781
6782 /***/ }),
6783 /* 46 */,
6784 /* 47 */
6785 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6786
6787
6788 /*---------------------------------------------------------------------------------------------
6789  *  Copyright (c) Microsoft Corporation. All rights reserved.
6790  *  Licensed under the MIT License. See License.txt in the project root for license information.
6791  *--------------------------------------------------------------------------------------------*/
6792 Object.defineProperty(exports, "__esModule", ({ value: true }));
6793 const node_1 = __webpack_require__(48);
6794 const runner_1 = __webpack_require__(68);
6795 const htmlServer_1 = __webpack_require__(69);
6796 const nodeFs_1 = __webpack_require__(163);
6797 // Create a connection for the server.
6798 const connection = node_1.createConnection();
6799 console.log = connection.console.log.bind(connection.console);
6800 console.error = connection.console.error.bind(connection.console);
6801 process.on('unhandledRejection', (e) => {
6802     connection.console.error(runner_1.formatError(`Unhandled exception`, e));
6803 });
6804 htmlServer_1.startServer(connection, { file: nodeFs_1.getNodeFSRequestService() });
6805
6806
6807 /***/ }),
6808 /* 48 */
6809 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6810
6811 /* --------------------------------------------------------------------------------------------
6812  * Copyright (c) Microsoft Corporation. All rights reserved.
6813  * Licensed under the MIT License. See License.txt in the project root for license information.
6814  * ----------------------------------------------------------------------------------------- */
6815
6816
6817 module.exports = __webpack_require__(49);
6818
6819 /***/ }),
6820 /* 49 */
6821 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
6822
6823
6824 /* --------------------------------------------------------------------------------------------
6825  * Copyright (c) Microsoft Corporation. All rights reserved.
6826  * Licensed under the MIT License. See License.txt in the project root for license information.
6827  * ------------------------------------------------------------------------------------------ */
6828 /// <reference path="../../typings/thenable.d.ts" />
6829 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6830     if (k2 === undefined) k2 = k;
6831     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
6832 }) : (function(o, m, k, k2) {
6833     if (k2 === undefined) k2 = k;
6834     o[k2] = m[k];
6835 }));
6836 var __exportStar = (this && this.__exportStar) || function(m, exports) {
6837     for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
6838 };
6839 Object.defineProperty(exports, "__esModule", ({ value: true }));
6840 exports.createConnection = exports.Files = void 0;
6841 const Is = __webpack_require__(50);
6842 const server_1 = __webpack_require__(51);
6843 const fm = __webpack_require__(62);
6844 const node_1 = __webpack_require__(66);
6845 __exportStar(__webpack_require__(66), exports);
6846 __exportStar(__webpack_require__(67), exports);
6847 var Files;
6848 (function (Files) {
6849     Files.uriToFilePath = fm.uriToFilePath;
6850     Files.resolveGlobalNodePath = fm.resolveGlobalNodePath;
6851     Files.resolveGlobalYarnPath = fm.resolveGlobalYarnPath;
6852     Files.resolve = fm.resolve;
6853     Files.resolveModulePath = fm.resolveModulePath;
6854 })(Files = exports.Files || (exports.Files = {}));
6855 let _protocolConnection;
6856 function endProtocolConnection() {
6857     if (_protocolConnection === undefined) {
6858         return;
6859     }
6860     try {
6861         _protocolConnection.end();
6862     }
6863     catch (_err) {
6864         // Ignore. The client process could have already
6865         // did and we can't send an end into the connection.
6866     }
6867 }
6868 let _shutdownReceived = false;
6869 let exitTimer = undefined;
6870 function setupExitTimer() {
6871     const argName = '--clientProcessId';
6872     function runTimer(value) {
6873         try {
6874             let processId = parseInt(value);
6875             if (!isNaN(processId)) {
6876                 exitTimer = setInterval(() => {
6877                     try {
6878                         process.kill(processId, 0);
6879                     }
6880                     catch (ex) {
6881                         // Parent process doesn't exist anymore. Exit the server.
6882                         endProtocolConnection();
6883                         process.exit(_shutdownReceived ? 0 : 1);
6884                     }
6885                 }, 3000);
6886             }
6887         }
6888         catch (e) {
6889             // Ignore errors;
6890         }
6891     }
6892     for (let i = 2; i < process.argv.length; i++) {
6893         let arg = process.argv[i];
6894         if (arg === argName && i + 1 < process.argv.length) {
6895             runTimer(process.argv[i + 1]);
6896             return;
6897         }
6898         else {
6899             let args = arg.split('=');
6900             if (args[0] === argName) {
6901                 runTimer(args[1]);
6902             }
6903         }
6904     }
6905 }
6906 setupExitTimer();
6907 const watchDog = {
6908     initialize: (params) => {
6909         const processId = params.processId;
6910         if (Is.number(processId) && exitTimer === undefined) {
6911             // We received a parent process id. Set up a timer to periodically check
6912             // if the parent is still alive.
6913             setInterval(() => {
6914                 try {
6915                     process.kill(processId, 0);
6916                 }
6917                 catch (ex) {
6918                     // Parent process doesn't exist anymore. Exit the server.
6919                     process.exit(_shutdownReceived ? 0 : 1);
6920                 }
6921             }, 3000);
6922         }
6923     },
6924     get shutdownReceived() {
6925         return _shutdownReceived;
6926     },
6927     set shutdownReceived(value) {
6928         _shutdownReceived = value;
6929     },
6930     exit: (code) => {
6931         endProtocolConnection();
6932         process.exit(code);
6933     }
6934 };
6935 function createConnection(arg1, arg2, arg3, arg4) {
6936     let factories;
6937     let input;
6938     let output;
6939     let options;
6940     if (arg1 !== void 0 && arg1.__brand === 'features') {
6941         factories = arg1;
6942         arg1 = arg2;
6943         arg2 = arg3;
6944         arg3 = arg4;
6945     }
6946     if (node_1.ConnectionStrategy.is(arg1) || node_1.ConnectionOptions.is(arg1)) {
6947         options = arg1;
6948     }
6949     else {
6950         input = arg1;
6951         output = arg2;
6952         options = arg3;
6953     }
6954     return _createConnection(input, output, options, factories);
6955 }
6956 exports.createConnection = createConnection;
6957 function _createConnection(input, output, options, factories) {
6958     if (!input && !output && process.argv.length > 2) {
6959         let port = void 0;
6960         let pipeName = void 0;
6961         let argv = process.argv.slice(2);
6962         for (let i = 0; i < argv.length; i++) {
6963             let arg = argv[i];
6964             if (arg === '--node-ipc') {
6965                 input = new node_1.IPCMessageReader(process);
6966                 output = new node_1.IPCMessageWriter(process);
6967                 break;
6968             }
6969             else if (arg === '--stdio') {
6970                 input = process.stdin;
6971                 output = process.stdout;
6972                 break;
6973             }
6974             else if (arg === '--socket') {
6975                 port = parseInt(argv[i + 1]);
6976                 break;
6977             }
6978             else if (arg === '--pipe') {
6979                 pipeName = argv[i + 1];
6980                 break;
6981             }
6982             else {
6983                 var args = arg.split('=');
6984                 if (args[0] === '--socket') {
6985                     port = parseInt(args[1]);
6986                     break;
6987                 }
6988                 else if (args[0] === '--pipe') {
6989                     pipeName = args[1];
6990                     break;
6991                 }
6992             }
6993         }
6994         if (port) {
6995             let transport = node_1.createServerSocketTransport(port);
6996             input = transport[0];
6997             output = transport[1];
6998         }
6999         else if (pipeName) {
7000             let transport = node_1.createServerPipeTransport(pipeName);
7001             input = transport[0];
7002             output = transport[1];
7003         }
7004     }
7005     var commandLineMessage = 'Use arguments of createConnection or set command line parameters: \'--node-ipc\', \'--stdio\' or \'--socket={number}\'';
7006     if (!input) {
7007         throw new Error('Connection input stream is not set. ' + commandLineMessage);
7008     }
7009     if (!output) {
7010         throw new Error('Connection output stream is not set. ' + commandLineMessage);
7011     }
7012     // Backwards compatibility
7013     if (Is.func(input.read) && Is.func(input.on)) {
7014         let inputStream = input;
7015         inputStream.on('end', () => {
7016             endProtocolConnection();
7017             process.exit(_shutdownReceived ? 0 : 1);
7018         });
7019         inputStream.on('close', () => {
7020             endProtocolConnection();
7021             process.exit(_shutdownReceived ? 0 : 1);
7022         });
7023     }
7024     const connectionFactory = (logger) => {
7025         const result = node_1.createProtocolConnection(input, output, logger, options);
7026         return result;
7027     };
7028     return server_1.createConnection(connectionFactory, watchDog, factories);
7029 }
7030 //# sourceMappingURL=main.js.map
7031
7032 /***/ }),
7033 /* 50 */
7034 /***/ ((__unused_webpack_module, exports) => {
7035
7036
7037 /* --------------------------------------------------------------------------------------------
7038  * Copyright (c) Microsoft Corporation. All rights reserved.
7039  * Licensed under the MIT License. See License.txt in the project root for license information.
7040  * ------------------------------------------------------------------------------------------ */
7041 Object.defineProperty(exports, "__esModule", ({ value: true }));
7042 exports.thenable = exports.typedArray = exports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0;
7043 function boolean(value) {
7044     return value === true || value === false;
7045 }
7046 exports.boolean = boolean;
7047 function string(value) {
7048     return typeof value === 'string' || value instanceof String;
7049 }
7050 exports.string = string;
7051 function number(value) {
7052     return typeof value === 'number' || value instanceof Number;
7053 }
7054 exports.number = number;
7055 function error(value) {
7056     return value instanceof Error;
7057 }
7058 exports.error = error;
7059 function func(value) {
7060     return typeof value === 'function';
7061 }
7062 exports.func = func;
7063 function array(value) {
7064     return Array.isArray(value);
7065 }
7066 exports.array = array;
7067 function stringArray(value) {
7068     return array(value) && value.every(elem => string(elem));
7069 }
7070 exports.stringArray = stringArray;
7071 function typedArray(value, check) {
7072     return Array.isArray(value) && value.every(check);
7073 }
7074 exports.typedArray = typedArray;
7075 function thenable(value) {
7076     return value && func(value.then);
7077 }
7078 exports.thenable = thenable;
7079 //# sourceMappingURL=is.js.map
7080
7081 /***/ }),
7082 /* 51 */
7083 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7084
7085
7086 /* --------------------------------------------------------------------------------------------
7087  * Copyright (c) Microsoft Corporation. All rights reserved.
7088  * Licensed under the MIT License. See License.txt in the project root for license information.
7089  * ------------------------------------------------------------------------------------------ */
7090 Object.defineProperty(exports, "__esModule", ({ value: true }));
7091 exports.createConnection = exports.combineFeatures = exports.combineLanguagesFeatures = exports.combineWorkspaceFeatures = exports.combineWindowFeatures = exports.combineClientFeatures = exports.combineTracerFeatures = exports.combineTelemetryFeatures = exports.combineConsoleFeatures = exports._LanguagesImpl = exports.BulkUnregistration = exports.BulkRegistration = exports.ErrorMessageTracker = exports.TextDocuments = void 0;
7092 const vscode_languageserver_protocol_1 = __webpack_require__(4);
7093 const Is = __webpack_require__(50);
7094 const UUID = __webpack_require__(52);
7095 const progress_1 = __webpack_require__(53);
7096 const configuration_1 = __webpack_require__(54);
7097 const workspaceFolders_1 = __webpack_require__(55);
7098 const callHierarchy_1 = __webpack_require__(56);
7099 const semanticTokens_1 = __webpack_require__(57);
7100 const showDocument_1 = __webpack_require__(58);
7101 const fileOperations_1 = __webpack_require__(59);
7102 const linkedEditingRange_1 = __webpack_require__(60);
7103 const moniker_1 = __webpack_require__(61);
7104 function null2Undefined(value) {
7105     if (value === null) {
7106         return undefined;
7107     }
7108     return value;
7109 }
7110 /**
7111  * A manager for simple text documents
7112  */
7113 class TextDocuments {
7114     /**
7115      * Create a new text document manager.
7116      */
7117     constructor(configuration) {
7118         this._documents = Object.create(null);
7119         this._configuration = configuration;
7120         this._onDidChangeContent = new vscode_languageserver_protocol_1.Emitter();
7121         this._onDidOpen = new vscode_languageserver_protocol_1.Emitter();
7122         this._onDidClose = new vscode_languageserver_protocol_1.Emitter();
7123         this._onDidSave = new vscode_languageserver_protocol_1.Emitter();
7124         this._onWillSave = new vscode_languageserver_protocol_1.Emitter();
7125     }
7126     /**
7127      * An event that fires when a text document managed by this manager
7128      * has been opened or the content changes.
7129      */
7130     get onDidChangeContent() {
7131         return this._onDidChangeContent.event;
7132     }
7133     /**
7134      * An event that fires when a text document managed by this manager
7135      * has been opened.
7136      */
7137     get onDidOpen() {
7138         return this._onDidOpen.event;
7139     }
7140     /**
7141      * An event that fires when a text document managed by this manager
7142      * will be saved.
7143      */
7144     get onWillSave() {
7145         return this._onWillSave.event;
7146     }
7147     /**
7148      * Sets a handler that will be called if a participant wants to provide
7149      * edits during a text document save.
7150      */
7151     onWillSaveWaitUntil(handler) {
7152         this._willSaveWaitUntil = handler;
7153     }
7154     /**
7155      * An event that fires when a text document managed by this manager
7156      * has been saved.
7157      */
7158     get onDidSave() {
7159         return this._onDidSave.event;
7160     }
7161     /**
7162      * An event that fires when a text document managed by this manager
7163      * has been closed.
7164      */
7165     get onDidClose() {
7166         return this._onDidClose.event;
7167     }
7168     /**
7169      * Returns the document for the given URI. Returns undefined if
7170      * the document is not managed by this instance.
7171      *
7172      * @param uri The text document's URI to retrieve.
7173      * @return the text document or `undefined`.
7174      */
7175     get(uri) {
7176         return this._documents[uri];
7177     }
7178     /**
7179      * Returns all text documents managed by this instance.
7180      *
7181      * @return all text documents.
7182      */
7183     all() {
7184         return Object.keys(this._documents).map(key => this._documents[key]);
7185     }
7186     /**
7187      * Returns the URIs of all text documents managed by this instance.
7188      *
7189      * @return the URI's of all text documents.
7190      */
7191     keys() {
7192         return Object.keys(this._documents);
7193     }
7194     /**
7195      * Listens for `low level` notification on the given connection to
7196      * update the text documents managed by this instance.
7197      *
7198      * Please note that the connection only provides handlers not an event model. Therefore
7199      * listening on a connection will overwrite the following handlers on a connection:
7200      * `onDidOpenTextDocument`, `onDidChangeTextDocument`, `onDidCloseTextDocument`,
7201      * `onWillSaveTextDocument`, `onWillSaveTextDocumentWaitUntil` and `onDidSaveTextDocument`.
7202      *
7203      * Use the corresponding events on the TextDocuments instance instead.
7204      *
7205      * @param connection The connection to listen on.
7206      */
7207     listen(connection) {
7208         connection.__textDocumentSync = vscode_languageserver_protocol_1.TextDocumentSyncKind.Full;
7209         connection.onDidOpenTextDocument((event) => {
7210             let td = event.textDocument;
7211             let document = this._configuration.create(td.uri, td.languageId, td.version, td.text);
7212             this._documents[td.uri] = document;
7213             let toFire = Object.freeze({ document });
7214             this._onDidOpen.fire(toFire);
7215             this._onDidChangeContent.fire(toFire);
7216         });
7217         connection.onDidChangeTextDocument((event) => {
7218             let td = event.textDocument;
7219             let changes = event.contentChanges;
7220             if (changes.length === 0) {
7221                 return;
7222             }
7223             let document = this._documents[td.uri];
7224             const { version } = td;
7225             if (version === null || version === undefined) {
7226                 throw new Error(`Received document change event for ${td.uri} without valid version identifier`);
7227             }
7228             document = this._configuration.update(document, changes, version);
7229             this._documents[td.uri] = document;
7230             this._onDidChangeContent.fire(Object.freeze({ document }));
7231         });
7232         connection.onDidCloseTextDocument((event) => {
7233             let document = this._documents[event.textDocument.uri];
7234             if (document) {
7235                 delete this._documents[event.textDocument.uri];
7236                 this._onDidClose.fire(Object.freeze({ document }));
7237             }
7238         });
7239         connection.onWillSaveTextDocument((event) => {
7240             let document = this._documents[event.textDocument.uri];
7241             if (document) {
7242                 this._onWillSave.fire(Object.freeze({ document, reason: event.reason }));
7243             }
7244         });
7245         connection.onWillSaveTextDocumentWaitUntil((event, token) => {
7246             let document = this._documents[event.textDocument.uri];
7247             if (document && this._willSaveWaitUntil) {
7248                 return this._willSaveWaitUntil(Object.freeze({ document, reason: event.reason }), token);
7249             }
7250             else {
7251                 return [];
7252             }
7253         });
7254         connection.onDidSaveTextDocument((event) => {
7255             let document = this._documents[event.textDocument.uri];
7256             if (document) {
7257                 this._onDidSave.fire(Object.freeze({ document }));
7258             }
7259         });
7260     }
7261 }
7262 exports.TextDocuments = TextDocuments;
7263 /**
7264  * Helps tracking error message. Equal occurrences of the same
7265  * message are only stored once. This class is for example
7266  * useful if text documents are validated in a loop and equal
7267  * error message should be folded into one.
7268  */
7269 class ErrorMessageTracker {
7270     constructor() {
7271         this._messages = Object.create(null);
7272     }
7273     /**
7274      * Add a message to the tracker.
7275      *
7276      * @param message The message to add.
7277      */
7278     add(message) {
7279         let count = this._messages[message];
7280         if (!count) {
7281             count = 0;
7282         }
7283         count++;
7284         this._messages[message] = count;
7285     }
7286     /**
7287      * Send all tracked messages to the connection's window.
7288      *
7289      * @param connection The connection established between client and server.
7290      */
7291     sendErrors(connection) {
7292         Object.keys(this._messages).forEach(message => {
7293             connection.window.showErrorMessage(message);
7294         });
7295     }
7296 }
7297 exports.ErrorMessageTracker = ErrorMessageTracker;
7298 class RemoteConsoleImpl {
7299     constructor() {
7300     }
7301     rawAttach(connection) {
7302         this._rawConnection = connection;
7303     }
7304     attach(connection) {
7305         this._connection = connection;
7306     }
7307     get connection() {
7308         if (!this._connection) {
7309             throw new Error('Remote is not attached to a connection yet.');
7310         }
7311         return this._connection;
7312     }
7313     fillServerCapabilities(_capabilities) {
7314     }
7315     initialize(_capabilities) {
7316     }
7317     error(message) {
7318         this.send(vscode_languageserver_protocol_1.MessageType.Error, message);
7319     }
7320     warn(message) {
7321         this.send(vscode_languageserver_protocol_1.MessageType.Warning, message);
7322     }
7323     info(message) {
7324         this.send(vscode_languageserver_protocol_1.MessageType.Info, message);
7325     }
7326     log(message) {
7327         this.send(vscode_languageserver_protocol_1.MessageType.Log, message);
7328     }
7329     send(type, message) {
7330         if (this._rawConnection) {
7331             this._rawConnection.sendNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, { type, message });
7332         }
7333     }
7334 }
7335 class _RemoteWindowImpl {
7336     constructor() {
7337     }
7338     attach(connection) {
7339         this._connection = connection;
7340     }
7341     get connection() {
7342         if (!this._connection) {
7343             throw new Error('Remote is not attached to a connection yet.');
7344         }
7345         return this._connection;
7346     }
7347     initialize(_capabilities) {
7348     }
7349     fillServerCapabilities(_capabilities) {
7350     }
7351     showErrorMessage(message, ...actions) {
7352         let params = { type: vscode_languageserver_protocol_1.MessageType.Error, message, actions };
7353         return this.connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
7354     }
7355     showWarningMessage(message, ...actions) {
7356         let params = { type: vscode_languageserver_protocol_1.MessageType.Warning, message, actions };
7357         return this.connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
7358     }
7359     showInformationMessage(message, ...actions) {
7360         let params = { type: vscode_languageserver_protocol_1.MessageType.Info, message, actions };
7361         return this.connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
7362     }
7363 }
7364 const RemoteWindowImpl = showDocument_1.ShowDocumentFeature(progress_1.ProgressFeature(_RemoteWindowImpl));
7365 var BulkRegistration;
7366 (function (BulkRegistration) {
7367     /**
7368      * Creates a new bulk registration.
7369      * @return an empty bulk registration.
7370      */
7371     function create() {
7372         return new BulkRegistrationImpl();
7373     }
7374     BulkRegistration.create = create;
7375 })(BulkRegistration = exports.BulkRegistration || (exports.BulkRegistration = {}));
7376 class BulkRegistrationImpl {
7377     constructor() {
7378         this._registrations = [];
7379         this._registered = new Set();
7380     }
7381     add(type, registerOptions) {
7382         const method = Is.string(type) ? type : type.method;
7383         if (this._registered.has(method)) {
7384             throw new Error(`${method} is already added to this registration`);
7385         }
7386         const id = UUID.generateUuid();
7387         this._registrations.push({
7388             id: id,
7389             method: method,
7390             registerOptions: registerOptions || {}
7391         });
7392         this._registered.add(method);
7393     }
7394     asRegistrationParams() {
7395         return {
7396             registrations: this._registrations
7397         };
7398     }
7399 }
7400 var BulkUnregistration;
7401 (function (BulkUnregistration) {
7402     function create() {
7403         return new BulkUnregistrationImpl(undefined, []);
7404     }
7405     BulkUnregistration.create = create;
7406 })(BulkUnregistration = exports.BulkUnregistration || (exports.BulkUnregistration = {}));
7407 class BulkUnregistrationImpl {
7408     constructor(_connection, unregistrations) {
7409         this._connection = _connection;
7410         this._unregistrations = new Map();
7411         unregistrations.forEach(unregistration => {
7412             this._unregistrations.set(unregistration.method, unregistration);
7413         });
7414     }
7415     get isAttached() {
7416         return !!this._connection;
7417     }
7418     attach(connection) {
7419         this._connection = connection;
7420     }
7421     add(unregistration) {
7422         this._unregistrations.set(unregistration.method, unregistration);
7423     }
7424     dispose() {
7425         let unregistrations = [];
7426         for (let unregistration of this._unregistrations.values()) {
7427             unregistrations.push(unregistration);
7428         }
7429         let params = {
7430             unregisterations: unregistrations
7431         };
7432         this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(undefined, (_error) => {
7433             this._connection.console.info(`Bulk unregistration failed.`);
7434         });
7435     }
7436     disposeSingle(arg) {
7437         const method = Is.string(arg) ? arg : arg.method;
7438         const unregistration = this._unregistrations.get(method);
7439         if (!unregistration) {
7440             return false;
7441         }
7442         let params = {
7443             unregisterations: [unregistration]
7444         };
7445         this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(() => {
7446             this._unregistrations.delete(method);
7447         }, (_error) => {
7448             this._connection.console.info(`Un-registering request handler for ${unregistration.id} failed.`);
7449         });
7450         return true;
7451     }
7452 }
7453 class RemoteClientImpl {
7454     attach(connection) {
7455         this._connection = connection;
7456     }
7457     get connection() {
7458         if (!this._connection) {
7459             throw new Error('Remote is not attached to a connection yet.');
7460         }
7461         return this._connection;
7462     }
7463     initialize(_capabilities) {
7464     }
7465     fillServerCapabilities(_capabilities) {
7466     }
7467     register(typeOrRegistrations, registerOptionsOrType, registerOptions) {
7468         if (typeOrRegistrations instanceof BulkRegistrationImpl) {
7469             return this.registerMany(typeOrRegistrations);
7470         }
7471         else if (typeOrRegistrations instanceof BulkUnregistrationImpl) {
7472             return this.registerSingle1(typeOrRegistrations, registerOptionsOrType, registerOptions);
7473         }
7474         else {
7475             return this.registerSingle2(typeOrRegistrations, registerOptionsOrType);
7476         }
7477     }
7478     registerSingle1(unregistration, type, registerOptions) {
7479         const method = Is.string(type) ? type : type.method;
7480         const id = UUID.generateUuid();
7481         let params = {
7482             registrations: [{ id, method, registerOptions: registerOptions || {} }]
7483         };
7484         if (!unregistration.isAttached) {
7485             unregistration.attach(this.connection);
7486         }
7487         return this.connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then((_result) => {
7488             unregistration.add({ id: id, method: method });
7489             return unregistration;
7490         }, (_error) => {
7491             this.connection.console.info(`Registering request handler for ${method} failed.`);
7492             return Promise.reject(_error);
7493         });
7494     }
7495     registerSingle2(type, registerOptions) {
7496         const method = Is.string(type) ? type : type.method;
7497         const id = UUID.generateUuid();
7498         let params = {
7499             registrations: [{ id, method, registerOptions: registerOptions || {} }]
7500         };
7501         return this.connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then((_result) => {
7502             return vscode_languageserver_protocol_1.Disposable.create(() => {
7503                 this.unregisterSingle(id, method);
7504             });
7505         }, (_error) => {
7506             this.connection.console.info(`Registering request handler for ${method} failed.`);
7507             return Promise.reject(_error);
7508         });
7509     }
7510     unregisterSingle(id, method) {
7511         let params = {
7512             unregisterations: [{ id, method }]
7513         };
7514         return this.connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(undefined, (_error) => {
7515             this.connection.console.info(`Un-registering request handler for ${id} failed.`);
7516         });
7517     }
7518     registerMany(registrations) {
7519         let params = registrations.asRegistrationParams();
7520         return this.connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then(() => {
7521             return new BulkUnregistrationImpl(this._connection, params.registrations.map(registration => { return { id: registration.id, method: registration.method }; }));
7522         }, (_error) => {
7523             this.connection.console.info(`Bulk registration failed.`);
7524             return Promise.reject(_error);
7525         });
7526     }
7527 }
7528 class _RemoteWorkspaceImpl {
7529     constructor() {
7530     }
7531     attach(connection) {
7532         this._connection = connection;
7533     }
7534     get connection() {
7535         if (!this._connection) {
7536             throw new Error('Remote is not attached to a connection yet.');
7537         }
7538         return this._connection;
7539     }
7540     initialize(_capabilities) {
7541     }
7542     fillServerCapabilities(_capabilities) {
7543     }
7544     applyEdit(paramOrEdit) {
7545         function isApplyWorkspaceEditParams(value) {
7546             return value && !!value.edit;
7547         }
7548         let params = isApplyWorkspaceEditParams(paramOrEdit) ? paramOrEdit : { edit: paramOrEdit };
7549         return this.connection.sendRequest(vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, params);
7550     }
7551 }
7552 const RemoteWorkspaceImpl = fileOperations_1.FileOperationsFeature(workspaceFolders_1.WorkspaceFoldersFeature(configuration_1.ConfigurationFeature(_RemoteWorkspaceImpl)));
7553 class TracerImpl {
7554     constructor() {
7555         this._trace = vscode_languageserver_protocol_1.Trace.Off;
7556     }
7557     attach(connection) {
7558         this._connection = connection;
7559     }
7560     get connection() {
7561         if (!this._connection) {
7562             throw new Error('Remote is not attached to a connection yet.');
7563         }
7564         return this._connection;
7565     }
7566     initialize(_capabilities) {
7567     }
7568     fillServerCapabilities(_capabilities) {
7569     }
7570     set trace(value) {
7571         this._trace = value;
7572     }
7573     log(message, verbose) {
7574         if (this._trace === vscode_languageserver_protocol_1.Trace.Off) {
7575             return;
7576         }
7577         this.connection.sendNotification(vscode_languageserver_protocol_1.LogTraceNotification.type, {
7578             message: message,
7579             verbose: this._trace === vscode_languageserver_protocol_1.Trace.Verbose ? verbose : undefined
7580         });
7581     }
7582 }
7583 class TelemetryImpl {
7584     constructor() {
7585     }
7586     attach(connection) {
7587         this._connection = connection;
7588     }
7589     get connection() {
7590         if (!this._connection) {
7591             throw new Error('Remote is not attached to a connection yet.');
7592         }
7593         return this._connection;
7594     }
7595     initialize(_capabilities) {
7596     }
7597     fillServerCapabilities(_capabilities) {
7598     }
7599     logEvent(data) {
7600         this.connection.sendNotification(vscode_languageserver_protocol_1.TelemetryEventNotification.type, data);
7601     }
7602 }
7603 class _LanguagesImpl {
7604     constructor() {
7605     }
7606     attach(connection) {
7607         this._connection = connection;
7608     }
7609     get connection() {
7610         if (!this._connection) {
7611             throw new Error('Remote is not attached to a connection yet.');
7612         }
7613         return this._connection;
7614     }
7615     initialize(_capabilities) {
7616     }
7617     fillServerCapabilities(_capabilities) {
7618     }
7619     attachWorkDoneProgress(params) {
7620         return progress_1.attachWorkDone(this.connection, params);
7621     }
7622     attachPartialResultProgress(_type, params) {
7623         return progress_1.attachPartialResult(this.connection, params);
7624     }
7625 }
7626 exports._LanguagesImpl = _LanguagesImpl;
7627 const LanguagesImpl = moniker_1.MonikerFeature(linkedEditingRange_1.LinkedEditingRangeFeature(semanticTokens_1.SemanticTokensFeature(callHierarchy_1.CallHierarchyFeature(_LanguagesImpl))));
7628 function combineConsoleFeatures(one, two) {
7629     return function (Base) {
7630         return two(one(Base));
7631     };
7632 }
7633 exports.combineConsoleFeatures = combineConsoleFeatures;
7634 function combineTelemetryFeatures(one, two) {
7635     return function (Base) {
7636         return two(one(Base));
7637     };
7638 }
7639 exports.combineTelemetryFeatures = combineTelemetryFeatures;
7640 function combineTracerFeatures(one, two) {
7641     return function (Base) {
7642         return two(one(Base));
7643     };
7644 }
7645 exports.combineTracerFeatures = combineTracerFeatures;
7646 function combineClientFeatures(one, two) {
7647     return function (Base) {
7648         return two(one(Base));
7649     };
7650 }
7651 exports.combineClientFeatures = combineClientFeatures;
7652 function combineWindowFeatures(one, two) {
7653     return function (Base) {
7654         return two(one(Base));
7655     };
7656 }
7657 exports.combineWindowFeatures = combineWindowFeatures;
7658 function combineWorkspaceFeatures(one, two) {
7659     return function (Base) {
7660         return two(one(Base));
7661     };
7662 }
7663 exports.combineWorkspaceFeatures = combineWorkspaceFeatures;
7664 function combineLanguagesFeatures(one, two) {
7665     return function (Base) {
7666         return two(one(Base));
7667     };
7668 }
7669 exports.combineLanguagesFeatures = combineLanguagesFeatures;
7670 function combineFeatures(one, two) {
7671     function combine(one, two, func) {
7672         if (one && two) {
7673             return func(one, two);
7674         }
7675         else if (one) {
7676             return one;
7677         }
7678         else {
7679             return two;
7680         }
7681     }
7682     let result = {
7683         __brand: 'features',
7684         console: combine(one.console, two.console, combineConsoleFeatures),
7685         tracer: combine(one.tracer, two.tracer, combineTracerFeatures),
7686         telemetry: combine(one.telemetry, two.telemetry, combineTelemetryFeatures),
7687         client: combine(one.client, two.client, combineClientFeatures),
7688         window: combine(one.window, two.window, combineWindowFeatures),
7689         workspace: combine(one.workspace, two.workspace, combineWorkspaceFeatures)
7690     };
7691     return result;
7692 }
7693 exports.combineFeatures = combineFeatures;
7694 function createConnection(connectionFactory, watchDog, factories) {
7695     const logger = (factories && factories.console ? new (factories.console(RemoteConsoleImpl))() : new RemoteConsoleImpl());
7696     const connection = connectionFactory(logger);
7697     logger.rawAttach(connection);
7698     const tracer = (factories && factories.tracer ? new (factories.tracer(TracerImpl))() : new TracerImpl());
7699     const telemetry = (factories && factories.telemetry ? new (factories.telemetry(TelemetryImpl))() : new TelemetryImpl());
7700     const client = (factories && factories.client ? new (factories.client(RemoteClientImpl))() : new RemoteClientImpl());
7701     const remoteWindow = (factories && factories.window ? new (factories.window(RemoteWindowImpl))() : new RemoteWindowImpl());
7702     const workspace = (factories && factories.workspace ? new (factories.workspace(RemoteWorkspaceImpl))() : new RemoteWorkspaceImpl());
7703     const languages = (factories && factories.languages ? new (factories.languages(LanguagesImpl))() : new LanguagesImpl());
7704     const allRemotes = [logger, tracer, telemetry, client, remoteWindow, workspace, languages];
7705     function asPromise(value) {
7706         if (value instanceof Promise) {
7707             return value;
7708         }
7709         else if (Is.thenable(value)) {
7710             return new Promise((resolve, reject) => {
7711                 value.then((resolved) => resolve(resolved), (error) => reject(error));
7712             });
7713         }
7714         else {
7715             return Promise.resolve(value);
7716         }
7717     }
7718     let shutdownHandler = undefined;
7719     let initializeHandler = undefined;
7720     let exitHandler = undefined;
7721     let protocolConnection = {
7722         listen: () => connection.listen(),
7723         sendRequest: (type, ...params) => connection.sendRequest(Is.string(type) ? type : type.method, ...params),
7724         onRequest: (type, handler) => connection.onRequest(type, handler),
7725         sendNotification: (type, param) => {
7726             const method = Is.string(type) ? type : type.method;
7727             if (arguments.length === 1) {
7728                 connection.sendNotification(method);
7729             }
7730             else {
7731                 connection.sendNotification(method, param);
7732             }
7733         },
7734         onNotification: (type, handler) => connection.onNotification(type, handler),
7735         onProgress: connection.onProgress,
7736         sendProgress: connection.sendProgress,
7737         onInitialize: (handler) => initializeHandler = handler,
7738         onInitialized: (handler) => connection.onNotification(vscode_languageserver_protocol_1.InitializedNotification.type, handler),
7739         onShutdown: (handler) => shutdownHandler = handler,
7740         onExit: (handler) => exitHandler = handler,
7741         get console() { return logger; },
7742         get telemetry() { return telemetry; },
7743         get tracer() { return tracer; },
7744         get client() { return client; },
7745         get window() { return remoteWindow; },
7746         get workspace() { return workspace; },
7747         get languages() { return languages; },
7748         onDidChangeConfiguration: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, handler),
7749         onDidChangeWatchedFiles: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type, handler),
7750         __textDocumentSync: undefined,
7751         onDidOpenTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, handler),
7752         onDidChangeTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, handler),
7753         onDidCloseTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, handler),
7754         onWillSaveTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type, handler),
7755         onWillSaveTextDocumentWaitUntil: (handler) => connection.onRequest(vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type, handler),
7756         onDidSaveTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, handler),
7757         sendDiagnostics: (params) => connection.sendNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, params),
7758         onHover: (handler) => connection.onRequest(vscode_languageserver_protocol_1.HoverRequest.type, (params, cancel) => {
7759             return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
7760         }),
7761         onCompletion: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CompletionRequest.type, (params, cancel) => {
7762             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7763         }),
7764         onCompletionResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, handler),
7765         onSignatureHelp: (handler) => connection.onRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, (params, cancel) => {
7766             return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
7767         }),
7768         onDeclaration: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, (params, cancel) => {
7769             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7770         }),
7771         onDefinition: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, (params, cancel) => {
7772             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7773         }),
7774         onTypeDefinition: (handler) => connection.onRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, (params, cancel) => {
7775             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7776         }),
7777         onImplementation: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, (params, cancel) => {
7778             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7779         }),
7780         onReferences: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, (params, cancel) => {
7781             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7782         }),
7783         onDocumentHighlight: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, (params, cancel) => {
7784             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7785         }),
7786         onDocumentSymbol: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, (params, cancel) => {
7787             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7788         }),
7789         onWorkspaceSymbol: (handler) => connection.onRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, (params, cancel) => {
7790             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7791         }),
7792         onCodeAction: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, (params, cancel) => {
7793             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7794         }),
7795         onCodeActionResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeActionResolveRequest.type, (params, cancel) => {
7796             return handler(params, cancel);
7797         }),
7798         onCodeLens: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, (params, cancel) => {
7799             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7800         }),
7801         onCodeLensResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, (params, cancel) => {
7802             return handler(params, cancel);
7803         }),
7804         onDocumentFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, (params, cancel) => {
7805             return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
7806         }),
7807         onDocumentRangeFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, (params, cancel) => {
7808             return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
7809         }),
7810         onDocumentOnTypeFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, (params, cancel) => {
7811             return handler(params, cancel);
7812         }),
7813         onRenameRequest: (handler) => connection.onRequest(vscode_languageserver_protocol_1.RenameRequest.type, (params, cancel) => {
7814             return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
7815         }),
7816         onPrepareRename: (handler) => connection.onRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, (params, cancel) => {
7817             return handler(params, cancel);
7818         }),
7819         onDocumentLinks: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, (params, cancel) => {
7820             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7821         }),
7822         onDocumentLinkResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, (params, cancel) => {
7823             return handler(params, cancel);
7824         }),
7825         onDocumentColor: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, (params, cancel) => {
7826             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7827         }),
7828         onColorPresentation: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, (params, cancel) => {
7829             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7830         }),
7831         onFoldingRanges: (handler) => connection.onRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, (params, cancel) => {
7832             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7833         }),
7834         onSelectionRanges: (handler) => connection.onRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, (params, cancel) => {
7835             return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
7836         }),
7837         onExecuteCommand: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, (params, cancel) => {
7838             return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
7839         }),
7840         dispose: () => connection.dispose()
7841     };
7842     for (let remote of allRemotes) {
7843         remote.attach(protocolConnection);
7844     }
7845     connection.onRequest(vscode_languageserver_protocol_1.InitializeRequest.type, (params) => {
7846         watchDog.initialize(params);
7847         if (Is.string(params.trace)) {
7848             tracer.trace = vscode_languageserver_protocol_1.Trace.fromString(params.trace);
7849         }
7850         for (let remote of allRemotes) {
7851             remote.initialize(params.capabilities);
7852         }
7853         if (initializeHandler) {
7854             let result = initializeHandler(params, new vscode_languageserver_protocol_1.CancellationTokenSource().token, progress_1.attachWorkDone(connection, params), undefined);
7855             return asPromise(result).then((value) => {
7856                 if (value instanceof vscode_languageserver_protocol_1.ResponseError) {
7857                     return value;
7858                 }
7859                 let result = value;
7860                 if (!result) {
7861                     result = { capabilities: {} };
7862                 }
7863                 let capabilities = result.capabilities;
7864                 if (!capabilities) {
7865                     capabilities = {};
7866                     result.capabilities = capabilities;
7867                 }
7868                 if (capabilities.textDocumentSync === undefined || capabilities.textDocumentSync === null) {
7869                     capabilities.textDocumentSync = Is.number(protocolConnection.__textDocumentSync) ? protocolConnection.__textDocumentSync : vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
7870                 }
7871                 else if (!Is.number(capabilities.textDocumentSync) && !Is.number(capabilities.textDocumentSync.change)) {
7872                     capabilities.textDocumentSync.change = Is.number(protocolConnection.__textDocumentSync) ? protocolConnection.__textDocumentSync : vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
7873                 }
7874                 for (let remote of allRemotes) {
7875                     remote.fillServerCapabilities(capabilities);
7876                 }
7877                 return result;
7878             });
7879         }
7880         else {
7881             let result = { capabilities: { textDocumentSync: vscode_languageserver_protocol_1.TextDocumentSyncKind.None } };
7882             for (let remote of allRemotes) {
7883                 remote.fillServerCapabilities(result.capabilities);
7884             }
7885             return result;
7886         }
7887     });
7888     connection.onRequest(vscode_languageserver_protocol_1.ShutdownRequest.type, () => {
7889         watchDog.shutdownReceived = true;
7890         if (shutdownHandler) {
7891             return shutdownHandler(new vscode_languageserver_protocol_1.CancellationTokenSource().token);
7892         }
7893         else {
7894             return undefined;
7895         }
7896     });
7897     connection.onNotification(vscode_languageserver_protocol_1.ExitNotification.type, () => {
7898         try {
7899             if (exitHandler) {
7900                 exitHandler();
7901             }
7902         }
7903         finally {
7904             if (watchDog.shutdownReceived) {
7905                 watchDog.exit(0);
7906             }
7907             else {
7908                 watchDog.exit(1);
7909             }
7910         }
7911     });
7912     connection.onNotification(vscode_languageserver_protocol_1.SetTraceNotification.type, (params) => {
7913         tracer.trace = vscode_languageserver_protocol_1.Trace.fromString(params.value);
7914     });
7915     return protocolConnection;
7916 }
7917 exports.createConnection = createConnection;
7918 //# sourceMappingURL=server.js.map
7919
7920 /***/ }),
7921 /* 52 */
7922 /***/ ((__unused_webpack_module, exports) => {
7923
7924
7925 /*---------------------------------------------------------------------------------------------
7926  *  Copyright (c) Microsoft Corporation. All rights reserved.
7927  *  Licensed under the MIT License. See License.txt in the project root for license information.
7928  *--------------------------------------------------------------------------------------------*/
7929 Object.defineProperty(exports, "__esModule", ({ value: true }));
7930 exports.generateUuid = exports.parse = exports.isUUID = exports.v4 = exports.empty = void 0;
7931 class ValueUUID {
7932     constructor(_value) {
7933         this._value = _value;
7934         // empty
7935     }
7936     asHex() {
7937         return this._value;
7938     }
7939     equals(other) {
7940         return this.asHex() === other.asHex();
7941     }
7942 }
7943 class V4UUID extends ValueUUID {
7944     constructor() {
7945         super([
7946             V4UUID._randomHex(),
7947             V4UUID._randomHex(),
7948             V4UUID._randomHex(),
7949             V4UUID._randomHex(),
7950             V4UUID._randomHex(),
7951             V4UUID._randomHex(),
7952             V4UUID._randomHex(),
7953             V4UUID._randomHex(),
7954             '-',
7955             V4UUID._randomHex(),
7956             V4UUID._randomHex(),
7957             V4UUID._randomHex(),
7958             V4UUID._randomHex(),
7959             '-',
7960             '4',
7961             V4UUID._randomHex(),
7962             V4UUID._randomHex(),
7963             V4UUID._randomHex(),
7964             '-',
7965             V4UUID._oneOf(V4UUID._timeHighBits),
7966             V4UUID._randomHex(),
7967             V4UUID._randomHex(),
7968             V4UUID._randomHex(),
7969             '-',
7970             V4UUID._randomHex(),
7971             V4UUID._randomHex(),
7972             V4UUID._randomHex(),
7973             V4UUID._randomHex(),
7974             V4UUID._randomHex(),
7975             V4UUID._randomHex(),
7976             V4UUID._randomHex(),
7977             V4UUID._randomHex(),
7978             V4UUID._randomHex(),
7979             V4UUID._randomHex(),
7980             V4UUID._randomHex(),
7981             V4UUID._randomHex(),
7982         ].join(''));
7983     }
7984     static _oneOf(array) {
7985         return array[Math.floor(array.length * Math.random())];
7986     }
7987     static _randomHex() {
7988         return V4UUID._oneOf(V4UUID._chars);
7989     }
7990 }
7991 V4UUID._chars = ['0', '1', '2', '3', '4', '5', '6', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
7992 V4UUID._timeHighBits = ['8', '9', 'a', 'b'];
7993 /**
7994  * An empty UUID that contains only zeros.
7995  */
7996 exports.empty = new ValueUUID('00000000-0000-0000-0000-000000000000');
7997 function v4() {
7998     return new V4UUID();
7999 }
8000 exports.v4 = v4;
8001 const _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
8002 function isUUID(value) {
8003     return _UUIDPattern.test(value);
8004 }
8005 exports.isUUID = isUUID;
8006 /**
8007  * Parses a UUID that is of the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
8008  * @param value A uuid string.
8009  */
8010 function parse(value) {
8011     if (!isUUID(value)) {
8012         throw new Error('invalid uuid');
8013     }
8014     return new ValueUUID(value);
8015 }
8016 exports.parse = parse;
8017 function generateUuid() {
8018     return v4().asHex();
8019 }
8020 exports.generateUuid = generateUuid;
8021 //# sourceMappingURL=uuid.js.map
8022
8023 /***/ }),
8024 /* 53 */
8025 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8026
8027
8028 /* --------------------------------------------------------------------------------------------
8029  * Copyright (c) Microsoft Corporation. All rights reserved.
8030  * Licensed under the MIT License. See License.txt in the project root for license information.
8031  * ------------------------------------------------------------------------------------------ */
8032 Object.defineProperty(exports, "__esModule", ({ value: true }));
8033 exports.attachPartialResult = exports.ProgressFeature = exports.attachWorkDone = void 0;
8034 const vscode_languageserver_protocol_1 = __webpack_require__(4);
8035 const uuid_1 = __webpack_require__(52);
8036 class WorkDoneProgressReporterImpl {
8037     constructor(_connection, _token) {
8038         this._connection = _connection;
8039         this._token = _token;
8040         WorkDoneProgressReporterImpl.Instances.set(this._token, this);
8041     }
8042     begin(title, percentage, message, cancellable) {
8043         let param = {
8044             kind: 'begin',
8045             title,
8046             percentage,
8047             message,
8048             cancellable
8049         };
8050         this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
8051     }
8052     report(arg0, arg1) {
8053         let param = {
8054             kind: 'report'
8055         };
8056         if (typeof arg0 === 'number') {
8057             param.percentage = arg0;
8058             if (arg1 !== undefined) {
8059                 param.message = arg1;
8060             }
8061         }
8062         else {
8063             param.message = arg0;
8064         }
8065         this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
8066     }
8067     done() {
8068         WorkDoneProgressReporterImpl.Instances.delete(this._token);
8069         this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, { kind: 'end' });
8070     }
8071 }
8072 WorkDoneProgressReporterImpl.Instances = new Map();
8073 class WorkDoneProgressServerReporterImpl extends WorkDoneProgressReporterImpl {
8074     constructor(connection, token) {
8075         super(connection, token);
8076         this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
8077     }
8078     get token() {
8079         return this._source.token;
8080     }
8081     done() {
8082         this._source.dispose();
8083         super.done();
8084     }
8085     cancel() {
8086         this._source.cancel();
8087     }
8088 }
8089 class NullProgressReporter {
8090     constructor() {
8091     }
8092     begin() {
8093     }
8094     report() {
8095     }
8096     done() {
8097     }
8098 }
8099 class NullProgressServerReporter extends NullProgressReporter {
8100     constructor() {
8101         super();
8102         this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
8103     }
8104     get token() {
8105         return this._source.token;
8106     }
8107     done() {
8108         this._source.dispose();
8109     }
8110     cancel() {
8111         this._source.cancel();
8112     }
8113 }
8114 function attachWorkDone(connection, params) {
8115     if (params === undefined || params.workDoneToken === undefined) {
8116         return new NullProgressReporter();
8117     }
8118     const token = params.workDoneToken;
8119     delete params.workDoneToken;
8120     return new WorkDoneProgressReporterImpl(connection, token);
8121 }
8122 exports.attachWorkDone = attachWorkDone;
8123 const ProgressFeature = (Base) => {
8124     return class extends Base {
8125         constructor() {
8126             super();
8127             this._progressSupported = false;
8128         }
8129         initialize(capabilities) {
8130             var _a;
8131             if (((_a = capabilities === null || capabilities === void 0 ? void 0 : capabilities.window) === null || _a === void 0 ? void 0 : _a.workDoneProgress) === true) {
8132                 this._progressSupported = true;
8133                 this.connection.onNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, (params) => {
8134                     let progress = WorkDoneProgressReporterImpl.Instances.get(params.token);
8135                     if (progress instanceof WorkDoneProgressServerReporterImpl || progress instanceof NullProgressServerReporter) {
8136                         progress.cancel();
8137                     }
8138                 });
8139             }
8140         }
8141         attachWorkDoneProgress(token) {
8142             if (token === undefined) {
8143                 return new NullProgressReporter();
8144             }
8145             else {
8146                 return new WorkDoneProgressReporterImpl(this.connection, token);
8147             }
8148         }
8149         createWorkDoneProgress() {
8150             if (this._progressSupported) {
8151                 const token = uuid_1.generateUuid();
8152                 return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, { token }).then(() => {
8153                     const result = new WorkDoneProgressServerReporterImpl(this.connection, token);
8154                     return result;
8155                 });
8156             }
8157             else {
8158                 return Promise.resolve(new NullProgressServerReporter());
8159             }
8160         }
8161     };
8162 };
8163 exports.ProgressFeature = ProgressFeature;
8164 var ResultProgress;
8165 (function (ResultProgress) {
8166     ResultProgress.type = new vscode_languageserver_protocol_1.ProgressType();
8167 })(ResultProgress || (ResultProgress = {}));
8168 class ResultProgressReporterImpl {
8169     constructor(_connection, _token) {
8170         this._connection = _connection;
8171         this._token = _token;
8172     }
8173     report(data) {
8174         this._connection.sendProgress(ResultProgress.type, this._token, data);
8175     }
8176 }
8177 function attachPartialResult(connection, params) {
8178     if (params === undefined || params.partialResultToken === undefined) {
8179         return undefined;
8180     }
8181     const token = params.partialResultToken;
8182     delete params.partialResultToken;
8183     return new ResultProgressReporterImpl(connection, token);
8184 }
8185 exports.attachPartialResult = attachPartialResult;
8186 //# sourceMappingURL=progress.js.map
8187
8188 /***/ }),
8189 /* 54 */
8190 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8191
8192
8193 /* --------------------------------------------------------------------------------------------
8194  * Copyright (c) Microsoft Corporation. All rights reserved.
8195  * Licensed under the MIT License. See License.txt in the project root for license information.
8196  * ------------------------------------------------------------------------------------------ */
8197 Object.defineProperty(exports, "__esModule", ({ value: true }));
8198 exports.ConfigurationFeature = void 0;
8199 const vscode_languageserver_protocol_1 = __webpack_require__(4);
8200 const Is = __webpack_require__(50);
8201 const ConfigurationFeature = (Base) => {
8202     return class extends Base {
8203         getConfiguration(arg) {
8204             if (!arg) {
8205                 return this._getConfiguration({});
8206             }
8207             else if (Is.string(arg)) {
8208                 return this._getConfiguration({ section: arg });
8209             }
8210             else {
8211                 return this._getConfiguration(arg);
8212             }
8213         }
8214         _getConfiguration(arg) {
8215             let params = {
8216                 items: Array.isArray(arg) ? arg : [arg]
8217             };
8218             return this.connection.sendRequest(vscode_languageserver_protocol_1.ConfigurationRequest.type, params).then((result) => {
8219                 return Array.isArray(arg) ? result : result[0];
8220             });
8221         }
8222     };
8223 };
8224 exports.ConfigurationFeature = ConfigurationFeature;
8225 //# sourceMappingURL=configuration.js.map
8226
8227 /***/ }),
8228 /* 55 */
8229 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8230
8231 /* --------------------------------------------------------------------------------------------
8232  * Copyright (c) Microsoft Corporation. All rights reserved.
8233  * Licensed under the MIT License. See License.txt in the project root for license information.
8234  * ------------------------------------------------------------------------------------------ */
8235
8236 Object.defineProperty(exports, "__esModule", ({ value: true }));
8237 exports.WorkspaceFoldersFeature = void 0;
8238 const vscode_languageserver_protocol_1 = __webpack_require__(4);
8239 const WorkspaceFoldersFeature = (Base) => {
8240     return class extends Base {
8241         initialize(capabilities) {
8242             let workspaceCapabilities = capabilities.workspace;
8243             if (workspaceCapabilities && workspaceCapabilities.workspaceFolders) {
8244                 this._onDidChangeWorkspaceFolders = new vscode_languageserver_protocol_1.Emitter();
8245                 this.connection.onNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, (params) => {
8246                     this._onDidChangeWorkspaceFolders.fire(params.event);
8247                 });
8248             }
8249         }
8250         getWorkspaceFolders() {
8251             return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type);
8252         }
8253         get onDidChangeWorkspaceFolders() {
8254             if (!this._onDidChangeWorkspaceFolders) {
8255                 throw new Error('Client doesn\'t support sending workspace folder change events.');
8256             }
8257             if (!this._unregistration) {
8258                 this._unregistration = this.connection.client.register(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type);
8259             }
8260             return this._onDidChangeWorkspaceFolders.event;
8261         }
8262     };
8263 };
8264 exports.WorkspaceFoldersFeature = WorkspaceFoldersFeature;
8265 //# sourceMappingURL=workspaceFolders.js.map
8266
8267 /***/ }),
8268 /* 56 */
8269 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8270
8271 /* --------------------------------------------------------------------------------------------
8272  * Copyright (c) Microsoft Corporation. All rights reserved.
8273  * Licensed under the MIT License. See License.txt in the project root for license information.
8274  * ------------------------------------------------------------------------------------------ */
8275
8276 Object.defineProperty(exports, "__esModule", ({ value: true }));
8277 exports.CallHierarchyFeature = void 0;
8278 const vscode_languageserver_protocol_1 = __webpack_require__(4);
8279 const CallHierarchyFeature = (Base) => {
8280     return class extends Base {
8281         get callHierarchy() {
8282             return {
8283                 onPrepare: (handler) => {
8284                     this.connection.onRequest(vscode_languageserver_protocol_1.CallHierarchyPrepareRequest.type, (params, cancel) => {
8285                         return handler(params, cancel, this.attachWorkDoneProgress(params), undefined);
8286                     });
8287                 },
8288                 onIncomingCalls: (handler) => {
8289                     const type = vscode_languageserver_protocol_1.CallHierarchyIncomingCallsRequest.type;
8290                     this.connection.onRequest(type, (params, cancel) => {
8291                         return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
8292                     });
8293                 },
8294                 onOutgoingCalls: (handler) => {
8295                     const type = vscode_languageserver_protocol_1.CallHierarchyOutgoingCallsRequest.type;
8296                     this.connection.onRequest(type, (params, cancel) => {
8297                         return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
8298                     });
8299                 }
8300             };
8301         }
8302     };
8303 };
8304 exports.CallHierarchyFeature = CallHierarchyFeature;
8305 //# sourceMappingURL=callHierarchy.js.map
8306
8307 /***/ }),
8308 /* 57 */
8309 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8310
8311
8312 /* --------------------------------------------------------------------------------------------
8313  * Copyright (c) Microsoft Corporation. All rights reserved.
8314  * Licensed under the MIT License. See License.txt in the project root for license information.
8315  * ------------------------------------------------------------------------------------------ */
8316 Object.defineProperty(exports, "__esModule", ({ value: true }));
8317 exports.SemanticTokensBuilder = exports.SemanticTokensFeature = void 0;
8318 const vscode_languageserver_protocol_1 = __webpack_require__(4);
8319 const SemanticTokensFeature = (Base) => {
8320     return class extends Base {
8321         get semanticTokens() {
8322             return {
8323                 on: (handler) => {
8324                     const type = vscode_languageserver_protocol_1.SemanticTokensRequest.type;
8325                     this.connection.onRequest(type, (params, cancel) => {
8326                         return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
8327                     });
8328                 },
8329                 onDelta: (handler) => {
8330                     const type = vscode_languageserver_protocol_1.SemanticTokensDeltaRequest.type;
8331                     this.connection.onRequest(type, (params, cancel) => {
8332                         return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
8333                     });
8334                 },
8335                 onRange: (handler) => {
8336                     const type = vscode_languageserver_protocol_1.SemanticTokensRangeRequest.type;
8337                     this.connection.onRequest(type, (params, cancel) => {
8338                         return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
8339                     });
8340                 }
8341             };
8342         }
8343     };
8344 };
8345 exports.SemanticTokensFeature = SemanticTokensFeature;
8346 class SemanticTokensBuilder {
8347     constructor() {
8348         this._prevData = undefined;
8349         this.initialize();
8350     }
8351     initialize() {
8352         this._id = Date.now();
8353         this._prevLine = 0;
8354         this._prevChar = 0;
8355         this._data = [];
8356         this._dataLen = 0;
8357     }
8358     push(line, char, length, tokenType, tokenModifiers) {
8359         let pushLine = line;
8360         let pushChar = char;
8361         if (this._dataLen > 0) {
8362             pushLine -= this._prevLine;
8363             if (pushLine === 0) {
8364                 pushChar -= this._prevChar;
8365             }
8366         }
8367         this._data[this._dataLen++] = pushLine;
8368         this._data[this._dataLen++] = pushChar;
8369         this._data[this._dataLen++] = length;
8370         this._data[this._dataLen++] = tokenType;
8371         this._data[this._dataLen++] = tokenModifiers;
8372         this._prevLine = line;
8373         this._prevChar = char;
8374     }
8375     get id() {
8376         return this._id.toString();
8377     }
8378     previousResult(id) {
8379         if (this.id === id) {
8380             this._prevData = this._data;
8381         }
8382         this.initialize();
8383     }
8384     build() {
8385         this._prevData = undefined;
8386         return {
8387             resultId: this.id,
8388             data: this._data
8389         };
8390     }
8391     canBuildEdits() {
8392         return this._prevData !== undefined;
8393     }
8394     buildEdits() {
8395         if (this._prevData !== undefined) {
8396             const prevDataLength = this._prevData.length;
8397             const dataLength = this._data.length;
8398             let startIndex = 0;
8399             while (startIndex < dataLength && startIndex < prevDataLength && this._prevData[startIndex] === this._data[startIndex]) {
8400                 startIndex++;
8401             }
8402             if (startIndex < dataLength && startIndex < prevDataLength) {
8403                 // Find end index
8404                 let endIndex = 0;
8405                 while (endIndex < dataLength && endIndex < prevDataLength && this._prevData[prevDataLength - 1 - endIndex] === this._data[dataLength - 1 - endIndex]) {
8406                     endIndex++;
8407                 }
8408                 const newData = this._data.slice(startIndex, dataLength - endIndex);
8409                 const result = {
8410                     resultId: this.id,
8411                     edits: [
8412                         { start: startIndex, deleteCount: prevDataLength - endIndex - startIndex, data: newData }
8413                     ]
8414                 };
8415                 return result;
8416             }
8417             else if (startIndex < dataLength) {
8418                 return { resultId: this.id, edits: [
8419                         { start: startIndex, deleteCount: 0, data: this._data.slice(startIndex) }
8420                     ] };
8421             }
8422             else if (startIndex < prevDataLength) {
8423                 return { resultId: this.id, edits: [
8424                         { start: startIndex, deleteCount: prevDataLength - startIndex }
8425                     ] };
8426             }
8427             else {
8428                 return { resultId: this.id, edits: [] };
8429             }
8430         }
8431         else {
8432             return this.build();
8433         }
8434     }
8435 }
8436 exports.SemanticTokensBuilder = SemanticTokensBuilder;
8437 //# sourceMappingURL=semanticTokens.js.map
8438
8439 /***/ }),
8440 /* 58 */
8441 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8442
8443
8444 /* --------------------------------------------------------------------------------------------
8445  * Copyright (c) Microsoft Corporation. All rights reserved.
8446  * Licensed under the MIT License. See License.txt in the project root for license information.
8447  * ------------------------------------------------------------------------------------------ */
8448 Object.defineProperty(exports, "__esModule", ({ value: true }));
8449 exports.ShowDocumentFeature = void 0;
8450 const vscode_languageserver_protocol_1 = __webpack_require__(4);
8451 const ShowDocumentFeature = (Base) => {
8452     return class extends Base {
8453         showDocument(params) {
8454             return this.connection.sendRequest(vscode_languageserver_protocol_1.ShowDocumentRequest.type, params);
8455         }
8456     };
8457 };
8458 exports.ShowDocumentFeature = ShowDocumentFeature;
8459 //# sourceMappingURL=showDocument.js.map
8460
8461 /***/ }),
8462 /* 59 */
8463 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8464
8465
8466 /* --------------------------------------------------------------------------------------------
8467  * Copyright (c) Microsoft Corporation. All rights reserved.
8468  * Licensed under the MIT License. See License.txt in the project root for license information.
8469  * ------------------------------------------------------------------------------------------ */
8470 Object.defineProperty(exports, "__esModule", ({ value: true }));
8471 exports.FileOperationsFeature = void 0;
8472 const vscode_languageserver_protocol_1 = __webpack_require__(4);
8473 const FileOperationsFeature = (Base) => {
8474     return class extends Base {
8475         onDidCreateFiles(handler) {
8476             this.connection.onNotification(vscode_languageserver_protocol_1.DidCreateFilesNotification.type, (params) => {
8477                 handler(params);
8478             });
8479         }
8480         onDidRenameFiles(handler) {
8481             this.connection.onNotification(vscode_languageserver_protocol_1.DidRenameFilesNotification.type, (params) => {
8482                 handler(params);
8483             });
8484         }
8485         onDidDeleteFiles(handler) {
8486             this.connection.onNotification(vscode_languageserver_protocol_1.DidDeleteFilesNotification.type, (params) => {
8487                 handler(params);
8488             });
8489         }
8490         onWillCreateFiles(handler) {
8491             return this.connection.onRequest(vscode_languageserver_protocol_1.WillCreateFilesRequest.type, (params, cancel) => {
8492                 return handler(params, cancel);
8493             });
8494         }
8495         onWillRenameFiles(handler) {
8496             return this.connection.onRequest(vscode_languageserver_protocol_1.WillRenameFilesRequest.type, (params, cancel) => {
8497                 return handler(params, cancel);
8498             });
8499         }
8500         onWillDeleteFiles(handler) {
8501             return this.connection.onRequest(vscode_languageserver_protocol_1.WillDeleteFilesRequest.type, (params, cancel) => {
8502                 return handler(params, cancel);
8503             });
8504         }
8505     };
8506 };
8507 exports.FileOperationsFeature = FileOperationsFeature;
8508 //# sourceMappingURL=fileOperations.js.map
8509
8510 /***/ }),
8511 /* 60 */
8512 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8513
8514
8515 /* --------------------------------------------------------------------------------------------
8516  * Copyright (c) Microsoft Corporation. All rights reserved.
8517  * Licensed under the MIT License. See License.txt in the project root for license information.
8518  * ------------------------------------------------------------------------------------------ */
8519 Object.defineProperty(exports, "__esModule", ({ value: true }));
8520 exports.LinkedEditingRangeFeature = void 0;
8521 const vscode_languageserver_protocol_1 = __webpack_require__(4);
8522 const LinkedEditingRangeFeature = (Base) => {
8523     return class extends Base {
8524         onLinkedEditingRange(handler) {
8525             this.connection.onRequest(vscode_languageserver_protocol_1.LinkedEditingRangeRequest.type, (params, cancel) => {
8526                 return handler(params, cancel, this.attachWorkDoneProgress(params), undefined);
8527             });
8528         }
8529     };
8530 };
8531 exports.LinkedEditingRangeFeature = LinkedEditingRangeFeature;
8532 //# sourceMappingURL=linkedEditingRange.js.map
8533
8534 /***/ }),
8535 /* 61 */
8536 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8537
8538 /* --------------------------------------------------------------------------------------------
8539  * Copyright (c) Microsoft Corporation. All rights reserved.
8540  * Licensed under the MIT License. See License.txt in the project root for license information.
8541  * ------------------------------------------------------------------------------------------ */
8542
8543 Object.defineProperty(exports, "__esModule", ({ value: true }));
8544 exports.MonikerFeature = void 0;
8545 const vscode_languageserver_protocol_1 = __webpack_require__(4);
8546 const MonikerFeature = (Base) => {
8547     return class extends Base {
8548         get moniker() {
8549             return {
8550                 on: (handler) => {
8551                     const type = vscode_languageserver_protocol_1.MonikerRequest.type;
8552                     this.connection.onRequest(type, (params, cancel) => {
8553                         return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
8554                     });
8555                 },
8556             };
8557         }
8558     };
8559 };
8560 exports.MonikerFeature = MonikerFeature;
8561 //# sourceMappingURL=moniker.js.map
8562
8563 /***/ }),
8564 /* 62 */
8565 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8566
8567
8568 /* --------------------------------------------------------------------------------------------
8569  * Copyright (c) Microsoft Corporation. All rights reserved.
8570  * Licensed under the MIT License. See License.txt in the project root for license information.
8571  * ------------------------------------------------------------------------------------------ */
8572 Object.defineProperty(exports, "__esModule", ({ value: true }));
8573 exports.resolveModulePath = exports.FileSystem = exports.resolveGlobalYarnPath = exports.resolveGlobalNodePath = exports.resolve = exports.uriToFilePath = void 0;
8574 const url = __webpack_require__(63);
8575 const path = __webpack_require__(3);
8576 const fs = __webpack_require__(64);
8577 const child_process_1 = __webpack_require__(65);
8578 /**
8579  * @deprecated Use the `vscode-uri` npm module which provides a more
8580  * complete implementation of handling VS Code URIs.
8581  */
8582 function uriToFilePath(uri) {
8583     let parsed = url.parse(uri);
8584     if (parsed.protocol !== 'file:' || !parsed.path) {
8585         return undefined;
8586     }
8587     let segments = parsed.path.split('/');
8588     for (var i = 0, len = segments.length; i < len; i++) {
8589         segments[i] = decodeURIComponent(segments[i]);
8590     }
8591     if (process.platform === 'win32' && segments.length > 1) {
8592         let first = segments[0];
8593         let second = segments[1];
8594         // Do we have a drive letter and we started with a / which is the
8595         // case if the first segement is empty (see split above)
8596         if (first.length === 0 && second.length > 1 && second[1] === ':') {
8597             // Remove first slash
8598             segments.shift();
8599         }
8600     }
8601     return path.normalize(segments.join('/'));
8602 }
8603 exports.uriToFilePath = uriToFilePath;
8604 function isWindows() {
8605     return process.platform === 'win32';
8606 }
8607 function resolve(moduleName, nodePath, cwd, tracer) {
8608     const nodePathKey = 'NODE_PATH';
8609     const app = [
8610         'var p = process;',
8611         'p.on(\'message\',function(m){',
8612         'if(m.c===\'e\'){',
8613         'p.exit(0);',
8614         '}',
8615         'else if(m.c===\'rs\'){',
8616         'try{',
8617         'var r=require.resolve(m.a);',
8618         'p.send({c:\'r\',s:true,r:r});',
8619         '}',
8620         'catch(err){',
8621         'p.send({c:\'r\',s:false});',
8622         '}',
8623         '}',
8624         '});'
8625     ].join('');
8626     return new Promise((resolve, reject) => {
8627         let env = process.env;
8628         let newEnv = Object.create(null);
8629         Object.keys(env).forEach(key => newEnv[key] = env[key]);
8630         if (nodePath && fs.existsSync(nodePath) /* see issue 545 */) {
8631             if (newEnv[nodePathKey]) {
8632                 newEnv[nodePathKey] = nodePath + path.delimiter + newEnv[nodePathKey];
8633             }
8634             else {
8635                 newEnv[nodePathKey] = nodePath;
8636             }
8637             if (tracer) {
8638                 tracer(`NODE_PATH value is: ${newEnv[nodePathKey]}`);
8639             }
8640         }
8641         newEnv['ELECTRON_RUN_AS_NODE'] = '1';
8642         try {
8643             let cp = child_process_1.fork('', [], {
8644                 cwd: cwd,
8645                 env: newEnv,
8646                 execArgv: ['-e', app]
8647             });
8648             if (cp.pid === void 0) {
8649                 reject(new Error(`Starting process to resolve node module  ${moduleName} failed`));
8650                 return;
8651             }
8652             cp.on('error', (error) => {
8653                 reject(error);
8654             });
8655             cp.on('message', (message) => {
8656                 if (message.c === 'r') {
8657                     cp.send({ c: 'e' });
8658                     if (message.s) {
8659                         resolve(message.r);
8660                     }
8661                     else {
8662                         reject(new Error(`Failed to resolve module: ${moduleName}`));
8663                     }
8664                 }
8665             });
8666             let message = {
8667                 c: 'rs',
8668                 a: moduleName
8669             };
8670             cp.send(message);
8671         }
8672         catch (error) {
8673             reject(error);
8674         }
8675     });
8676 }
8677 exports.resolve = resolve;
8678 /**
8679  * Resolve the global npm package path.
8680  * @deprecated Since this depends on the used package manager and their version the best is that servers
8681  * implement this themselves since they know best what kind of package managers to support.
8682  * @param tracer the tracer to use
8683  */
8684 function resolveGlobalNodePath(tracer) {
8685     let npmCommand = 'npm';
8686     const env = Object.create(null);
8687     Object.keys(process.env).forEach(key => env[key] = process.env[key]);
8688     env['NO_UPDATE_NOTIFIER'] = 'true';
8689     const options = {
8690         encoding: 'utf8',
8691         env
8692     };
8693     if (isWindows()) {
8694         npmCommand = 'npm.cmd';
8695         options.shell = true;
8696     }
8697     let handler = () => { };
8698     try {
8699         process.on('SIGPIPE', handler);
8700         let stdout = child_process_1.spawnSync(npmCommand, ['config', 'get', 'prefix'], options).stdout;
8701         if (!stdout) {
8702             if (tracer) {
8703                 tracer(`'npm config get prefix' didn't return a value.`);
8704             }
8705             return undefined;
8706         }
8707         let prefix = stdout.trim();
8708         if (tracer) {
8709             tracer(`'npm config get prefix' value is: ${prefix}`);
8710         }
8711         if (prefix.length > 0) {
8712             if (isWindows()) {
8713                 return path.join(prefix, 'node_modules');
8714             }
8715             else {
8716                 return path.join(prefix, 'lib', 'node_modules');
8717             }
8718         }
8719         return undefined;
8720     }
8721     catch (err) {
8722         return undefined;
8723     }
8724     finally {
8725         process.removeListener('SIGPIPE', handler);
8726     }
8727 }
8728 exports.resolveGlobalNodePath = resolveGlobalNodePath;
8729 /*
8730  * Resolve the global yarn pakage path.
8731  * @deprecated Since this depends on the used package manager and their version the best is that servers
8732  * implement this themselves since they know best what kind of package managers to support.
8733  * @param tracer the tracer to use
8734  */
8735 function resolveGlobalYarnPath(tracer) {
8736     let yarnCommand = 'yarn';
8737     let options = {
8738         encoding: 'utf8'
8739     };
8740     if (isWindows()) {
8741         yarnCommand = 'yarn.cmd';
8742         options.shell = true;
8743     }
8744     let handler = () => { };
8745     try {
8746         process.on('SIGPIPE', handler);
8747         let results = child_process_1.spawnSync(yarnCommand, ['global', 'dir', '--json'], options);
8748         let stdout = results.stdout;
8749         if (!stdout) {
8750             if (tracer) {
8751                 tracer(`'yarn global dir' didn't return a value.`);
8752                 if (results.stderr) {
8753                     tracer(results.stderr);
8754                 }
8755             }
8756             return undefined;
8757         }
8758         let lines = stdout.trim().split(/\r?\n/);
8759         for (let line of lines) {
8760             try {
8761                 let yarn = JSON.parse(line);
8762                 if (yarn.type === 'log') {
8763                     return path.join(yarn.data, 'node_modules');
8764                 }
8765             }
8766             catch (e) {
8767                 // Do nothing. Ignore the line
8768             }
8769         }
8770         return undefined;
8771     }
8772     catch (err) {
8773         return undefined;
8774     }
8775     finally {
8776         process.removeListener('SIGPIPE', handler);
8777     }
8778 }
8779 exports.resolveGlobalYarnPath = resolveGlobalYarnPath;
8780 var FileSystem;
8781 (function (FileSystem) {
8782     let _isCaseSensitive = undefined;
8783     function isCaseSensitive() {
8784         if (_isCaseSensitive !== void 0) {
8785             return _isCaseSensitive;
8786         }
8787         if (process.platform === 'win32') {
8788             _isCaseSensitive = false;
8789         }
8790         else {
8791             // convert current file name to upper case / lower case and check if file exists
8792             // (guards against cases when name is already all uppercase or lowercase)
8793             _isCaseSensitive = !fs.existsSync(__filename.toUpperCase()) || !fs.existsSync(__filename.toLowerCase());
8794         }
8795         return _isCaseSensitive;
8796     }
8797     FileSystem.isCaseSensitive = isCaseSensitive;
8798     function isParent(parent, child) {
8799         if (isCaseSensitive()) {
8800             return path.normalize(child).indexOf(path.normalize(parent)) === 0;
8801         }
8802         else {
8803             return path.normalize(child).toLowerCase().indexOf(path.normalize(parent).toLowerCase()) === 0;
8804         }
8805     }
8806     FileSystem.isParent = isParent;
8807 })(FileSystem = exports.FileSystem || (exports.FileSystem = {}));
8808 function resolveModulePath(workspaceRoot, moduleName, nodePath, tracer) {
8809     if (nodePath) {
8810         if (!path.isAbsolute(nodePath)) {
8811             nodePath = path.join(workspaceRoot, nodePath);
8812         }
8813         return resolve(moduleName, nodePath, nodePath, tracer).then((value) => {
8814             if (FileSystem.isParent(nodePath, value)) {
8815                 return value;
8816             }
8817             else {
8818                 return Promise.reject(new Error(`Failed to load ${moduleName} from node path location.`));
8819             }
8820         }).then(undefined, (_error) => {
8821             return resolve(moduleName, resolveGlobalNodePath(tracer), workspaceRoot, tracer);
8822         });
8823     }
8824     else {
8825         return resolve(moduleName, resolveGlobalNodePath(tracer), workspaceRoot, tracer);
8826     }
8827 }
8828 exports.resolveModulePath = resolveModulePath;
8829 //# sourceMappingURL=files.js.map
8830
8831 /***/ }),
8832 /* 63 */
8833 /***/ ((module) => {
8834
8835 module.exports = require("url");;
8836
8837 /***/ }),
8838 /* 64 */
8839 /***/ ((module) => {
8840
8841 module.exports = require("fs");;
8842
8843 /***/ }),
8844 /* 65 */
8845 /***/ ((module) => {
8846
8847 module.exports = require("child_process");;
8848
8849 /***/ }),
8850 /* 66 */
8851 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8852
8853 /* --------------------------------------------------------------------------------------------
8854  * Copyright (c) Microsoft Corporation. All rights reserved.
8855  * Licensed under the MIT License. See License.txt in the project root for license information.
8856  * ----------------------------------------------------------------------------------------- */
8857
8858
8859 module.exports = __webpack_require__(4);
8860
8861 /***/ }),
8862 /* 67 */
8863 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
8864
8865
8866 /* --------------------------------------------------------------------------------------------
8867  * Copyright (c) Microsoft Corporation. All rights reserved.
8868  * Licensed under the MIT License. See License.txt in the project root for license information.
8869  * ------------------------------------------------------------------------------------------ */
8870 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8871     if (k2 === undefined) k2 = k;
8872     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
8873 }) : (function(o, m, k, k2) {
8874     if (k2 === undefined) k2 = k;
8875     o[k2] = m[k];
8876 }));
8877 var __exportStar = (this && this.__exportStar) || function(m, exports) {
8878     for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
8879 };
8880 Object.defineProperty(exports, "__esModule", ({ value: true }));
8881 exports.ProposedFeatures = exports.SemanticTokensBuilder = void 0;
8882 const semanticTokens_1 = __webpack_require__(57);
8883 Object.defineProperty(exports, "SemanticTokensBuilder", ({ enumerable: true, get: function () { return semanticTokens_1.SemanticTokensBuilder; } }));
8884 __exportStar(__webpack_require__(4), exports);
8885 __exportStar(__webpack_require__(51), exports);
8886 var ProposedFeatures;
8887 (function (ProposedFeatures) {
8888     ProposedFeatures.all = {
8889         __brand: 'features'
8890     };
8891 })(ProposedFeatures = exports.ProposedFeatures || (exports.ProposedFeatures = {}));
8892 //# sourceMappingURL=api.js.map
8893
8894 /***/ }),
8895 /* 68 */
8896 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8897
8898
8899 /*---------------------------------------------------------------------------------------------
8900  *  Copyright (c) Microsoft Corporation. All rights reserved.
8901  *  Licensed under the MIT License. See License.txt in the project root for license information.
8902  *--------------------------------------------------------------------------------------------*/
8903 Object.defineProperty(exports, "__esModule", ({ value: true }));
8904 exports.runSafe = exports.formatError = void 0;
8905 const vscode_languageserver_1 = __webpack_require__(49);
8906 function formatError(message, err) {
8907     if (err instanceof Error) {
8908         let error = err;
8909         return `${message}: ${error.message}\n${error.stack}`;
8910     }
8911     else if (typeof err === 'string') {
8912         return `${message}: ${err}`;
8913     }
8914     else if (err) {
8915         return `${message}: ${err.toString()}`;
8916     }
8917     return message;
8918 }
8919 exports.formatError = formatError;
8920 function runSafe(func, errorVal, errorMessage, token) {
8921     return new Promise((resolve) => {
8922         setImmediate(() => {
8923             if (token.isCancellationRequested) {
8924                 resolve(cancelValue());
8925             }
8926             return func().then(result => {
8927                 if (token.isCancellationRequested) {
8928                     resolve(cancelValue());
8929                     return;
8930                 }
8931                 else {
8932                     resolve(result);
8933                 }
8934             }, e => {
8935                 console.error(formatError(errorMessage, e));
8936                 resolve(errorVal);
8937             });
8938         });
8939     });
8940 }
8941 exports.runSafe = runSafe;
8942 function cancelValue() {
8943     return new vscode_languageserver_1.ResponseError(vscode_languageserver_1.LSPErrorCodes.RequestCancelled, 'Request cancelled');
8944 }
8945
8946
8947 /***/ }),
8948 /* 69 */
8949 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
8950
8951
8952 /*---------------------------------------------------------------------------------------------
8953  *  Copyright (c) Microsoft Corporation. All rights reserved.
8954  *  Licensed under the MIT License. See License.txt in the project root for license information.
8955  *--------------------------------------------------------------------------------------------*/
8956 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8957     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8958     return new (P || (P = Promise))(function (resolve, reject) {
8959         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8960         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8961         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8962         step((generator = generator.apply(thisArg, _arguments || [])).next());
8963     });
8964 };
8965 Object.defineProperty(exports, "__esModule", ({ value: true }));
8966 exports.startServer = void 0;
8967 const vscode_languageserver_1 = __webpack_require__(49);
8968 const languageModes_1 = __webpack_require__(70);
8969 const formatting_1 = __webpack_require__(154);
8970 const arrays_1 = __webpack_require__(155);
8971 const documentContext_1 = __webpack_require__(156);
8972 const vscode_uri_1 = __webpack_require__(135);
8973 const runner_1 = __webpack_require__(68);
8974 const htmlFolding_1 = __webpack_require__(158);
8975 const customData_1 = __webpack_require__(159);
8976 const selectionRanges_1 = __webpack_require__(160);
8977 const semanticTokens_1 = __webpack_require__(162);
8978 const requests_1 = __webpack_require__(157);
8979 var CustomDataChangedNotification;
8980 (function (CustomDataChangedNotification) {
8981     CustomDataChangedNotification.type = new vscode_languageserver_1.NotificationType('html/customDataChanged');
8982 })(CustomDataChangedNotification || (CustomDataChangedNotification = {}));
8983 var TagCloseRequest;
8984 (function (TagCloseRequest) {
8985     TagCloseRequest.type = new vscode_languageserver_1.RequestType('html/tag');
8986 })(TagCloseRequest || (TagCloseRequest = {}));
8987 var SemanticTokenRequest;
8988 (function (SemanticTokenRequest) {
8989     SemanticTokenRequest.type = new vscode_languageserver_1.RequestType('html/semanticTokens');
8990 })(SemanticTokenRequest || (SemanticTokenRequest = {}));
8991 var SemanticTokenLegendRequest;
8992 (function (SemanticTokenLegendRequest) {
8993     SemanticTokenLegendRequest.type = new vscode_languageserver_1.RequestType0('html/semanticTokenLegend');
8994 })(SemanticTokenLegendRequest || (SemanticTokenLegendRequest = {}));
8995 function startServer(connection, runtime) {
8996     // Create a text document manager.
8997     const documents = new vscode_languageserver_1.TextDocuments(languageModes_1.TextDocument);
8998     // Make the text document manager listen on the connection
8999     // for open, change and close text document events
9000     documents.listen(connection);
9001     let workspaceFolders = [];
9002     let languageModes;
9003     let clientSnippetSupport = false;
9004     let dynamicFormatterRegistration = false;
9005     let scopedSettingsSupport = false;
9006     let workspaceFoldersSupport = false;
9007     let foldingRangeLimit = Number.MAX_VALUE;
9008     const notReady = () => Promise.reject('Not Ready');
9009     let requestService = { getContent: notReady, stat: notReady, readDirectory: notReady };
9010     let globalSettings = {};
9011     let documentSettings = {};
9012     // remove document settings on close
9013     documents.onDidClose(e => {
9014         delete documentSettings[e.document.uri];
9015     });
9016     function getDocumentSettings(textDocument, needsDocumentSettings) {
9017         if (scopedSettingsSupport && needsDocumentSettings()) {
9018             let promise = documentSettings[textDocument.uri];
9019             if (!promise) {
9020                 const scopeUri = textDocument.uri;
9021                 const configRequestParam = { items: [{ scopeUri, section: 'css' }, { scopeUri, section: 'html' }, { scopeUri, section: 'javascript' }] };
9022                 promise = connection.sendRequest(vscode_languageserver_1.ConfigurationRequest.type, configRequestParam).then(s => ({ css: s[0], html: s[1], javascript: s[2] }));
9023                 documentSettings[textDocument.uri] = promise;
9024             }
9025             return promise;
9026         }
9027         return Promise.resolve(undefined);
9028     }
9029     // After the server has started the client sends an initialize request. The server receives
9030     // in the passed params the rootPath of the workspace plus the client capabilities
9031     connection.onInitialize((params) => {
9032         const initializationOptions = params.initializationOptions;
9033         workspaceFolders = params.workspaceFolders;
9034         if (!Array.isArray(workspaceFolders)) {
9035             workspaceFolders = [];
9036             if (params.rootPath) {
9037                 workspaceFolders.push({ name: '', uri: vscode_uri_1.URI.file(params.rootPath).toString() });
9038             }
9039         }
9040         requestService = requests_1.getRequestService((initializationOptions === null || initializationOptions === void 0 ? void 0 : initializationOptions.handledSchemas) || ['file'], connection, runtime);
9041         const workspace = {
9042             get settings() { return globalSettings; },
9043             get folders() { return workspaceFolders; }
9044         };
9045         languageModes = languageModes_1.getLanguageModes((initializationOptions === null || initializationOptions === void 0 ? void 0 : initializationOptions.embeddedLanguages) || { css: true, javascript: true }, workspace, params.capabilities, requestService);
9046         const dataPaths = (initializationOptions === null || initializationOptions === void 0 ? void 0 : initializationOptions.dataPaths) || [];
9047         customData_1.fetchHTMLDataProviders(dataPaths, requestService).then(dataProviders => {
9048             languageModes.updateDataProviders(dataProviders);
9049         });
9050         documents.onDidClose(e => {
9051             languageModes.onDocumentRemoved(e.document);
9052         });
9053         connection.onShutdown(() => {
9054             languageModes.dispose();
9055         });
9056         function getClientCapability(name, def) {
9057             const keys = name.split('.');
9058             let c = params.capabilities;
9059             for (let i = 0; c && i < keys.length; i++) {
9060                 if (!c.hasOwnProperty(keys[i])) {
9061                     return def;
9062                 }
9063                 c = c[keys[i]];
9064             }
9065             return c;
9066         }
9067         clientSnippetSupport = getClientCapability('textDocument.completion.completionItem.snippetSupport', false);
9068         dynamicFormatterRegistration = getClientCapability('textDocument.rangeFormatting.dynamicRegistration', false) && (typeof (initializationOptions === null || initializationOptions === void 0 ? void 0 : initializationOptions.provideFormatter) !== 'boolean');
9069         scopedSettingsSupport = getClientCapability('workspace.configuration', false);
9070         workspaceFoldersSupport = getClientCapability('workspace.workspaceFolders', false);
9071         foldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE);
9072         const capabilities = {
9073             textDocumentSync: vscode_languageserver_1.TextDocumentSyncKind.Incremental,
9074             completionProvider: clientSnippetSupport ? { resolveProvider: true, triggerCharacters: ['.', ':', '<', '"', '=', '/'] } : undefined,
9075             hoverProvider: true,
9076             documentHighlightProvider: true,
9077             documentRangeFormattingProvider: (initializationOptions === null || initializationOptions === void 0 ? void 0 : initializationOptions.provideFormatter) === true,
9078             documentLinkProvider: { resolveProvider: false },
9079             documentSymbolProvider: true,
9080             definitionProvider: true,
9081             signatureHelpProvider: { triggerCharacters: ['('] },
9082             referencesProvider: true,
9083             colorProvider: {},
9084             foldingRangeProvider: true,
9085             selectionRangeProvider: true,
9086             renameProvider: true,
9087             linkedEditingRangeProvider: true
9088         };
9089         return { capabilities };
9090     });
9091     connection.onInitialized(() => {
9092         if (workspaceFoldersSupport) {
9093             connection.client.register(vscode_languageserver_1.DidChangeWorkspaceFoldersNotification.type);
9094             connection.onNotification(vscode_languageserver_1.DidChangeWorkspaceFoldersNotification.type, e => {
9095                 const toAdd = e.event.added;
9096                 const toRemove = e.event.removed;
9097                 const updatedFolders = [];
9098                 if (workspaceFolders) {
9099                     for (const folder of workspaceFolders) {
9100                         if (!toRemove.some(r => r.uri === folder.uri) && !toAdd.some(r => r.uri === folder.uri)) {
9101                             updatedFolders.push(folder);
9102                         }
9103                     }
9104                 }
9105                 workspaceFolders = updatedFolders.concat(toAdd);
9106                 documents.all().forEach(triggerValidation);
9107             });
9108         }
9109     });
9110     let formatterRegistration = null;
9111     // The settings have changed. Is send on server activation as well.
9112     connection.onDidChangeConfiguration((change) => {
9113         globalSettings = change.settings;
9114         documentSettings = {}; // reset all document settings
9115         documents.all().forEach(triggerValidation);
9116         // dynamically enable & disable the formatter
9117         if (dynamicFormatterRegistration) {
9118             const enableFormatter = globalSettings && globalSettings.html && globalSettings.html.format && globalSettings.html.format.enable;
9119             if (enableFormatter) {
9120                 if (!formatterRegistration) {
9121                     const documentSelector = [{ language: 'html' }, { language: 'handlebars' }];
9122                     formatterRegistration = connection.client.register(vscode_languageserver_1.DocumentRangeFormattingRequest.type, { documentSelector });
9123                 }
9124             }
9125             else if (formatterRegistration) {
9126                 formatterRegistration.then(r => r.dispose());
9127                 formatterRegistration = null;
9128             }
9129         }
9130     });
9131     const pendingValidationRequests = {};
9132     const validationDelayMs = 500;
9133     // The content of a text document has changed. This event is emitted
9134     // when the text document first opened or when its content has changed.
9135     documents.onDidChangeContent(change => {
9136         triggerValidation(change.document);
9137     });
9138     // a document has closed: clear all diagnostics
9139     documents.onDidClose(event => {
9140         cleanPendingValidation(event.document);
9141         connection.sendDiagnostics({ uri: event.document.uri, diagnostics: [] });
9142     });
9143     function cleanPendingValidation(textDocument) {
9144         const request = pendingValidationRequests[textDocument.uri];
9145         if (request) {
9146             clearTimeout(request);
9147             delete pendingValidationRequests[textDocument.uri];
9148         }
9149     }
9150     function triggerValidation(textDocument) {
9151         cleanPendingValidation(textDocument);
9152         pendingValidationRequests[textDocument.uri] = setTimeout(() => {
9153             delete pendingValidationRequests[textDocument.uri];
9154             validateTextDocument(textDocument);
9155         }, validationDelayMs);
9156     }
9157     function isValidationEnabled(languageId, settings = globalSettings) {
9158         const validationSettings = settings && settings.html && settings.html.validate;
9159         if (validationSettings) {
9160             return languageId === 'css' && validationSettings.styles !== false || languageId === 'javascript' && validationSettings.scripts !== false;
9161         }
9162         return true;
9163     }
9164     function validateTextDocument(textDocument) {
9165         return __awaiter(this, void 0, void 0, function* () {
9166             try {
9167                 const version = textDocument.version;
9168                 const diagnostics = [];
9169                 if (textDocument.languageId === 'html') {
9170                     const modes = languageModes.getAllModesInDocument(textDocument);
9171                     const settings = yield getDocumentSettings(textDocument, () => modes.some(m => !!m.doValidation));
9172                     const latestTextDocument = documents.get(textDocument.uri);
9173                     if (latestTextDocument && latestTextDocument.version === version) { // check no new version has come in after in after the async op
9174                         for (const mode of modes) {
9175                             if (mode.doValidation && isValidationEnabled(mode.getId(), settings)) {
9176                                 arrays_1.pushAll(diagnostics, yield mode.doValidation(latestTextDocument, settings));
9177                             }
9178                         }
9179                         connection.sendDiagnostics({ uri: latestTextDocument.uri, diagnostics });
9180                     }
9181                 }
9182             }
9183             catch (e) {
9184                 connection.console.error(runner_1.formatError(`Error while validating ${textDocument.uri}`, e));
9185             }
9186         });
9187     }
9188     connection.onCompletion((textDocumentPosition, token) => __awaiter(this, void 0, void 0, function* () {
9189         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9190             const document = documents.get(textDocumentPosition.textDocument.uri);
9191             if (!document) {
9192                 return null;
9193             }
9194             const mode = languageModes.getModeAtPosition(document, textDocumentPosition.position);
9195             if (!mode || !mode.doComplete) {
9196                 return { isIncomplete: true, items: [] };
9197             }
9198             const doComplete = mode.doComplete;
9199             if (mode.getId() !== 'html') {
9200                 /* __GDPR__
9201                     "html.embbedded.complete" : {
9202                         "languageId" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
9203                     }
9204                  */
9205                 connection.telemetry.logEvent({ key: 'html.embbedded.complete', value: { languageId: mode.getId() } });
9206             }
9207             const settings = yield getDocumentSettings(document, () => doComplete.length > 2);
9208             const documentContext = documentContext_1.getDocumentContext(document.uri, workspaceFolders);
9209             return doComplete(document, textDocumentPosition.position, documentContext, settings);
9210         }), null, `Error while computing completions for ${textDocumentPosition.textDocument.uri}`, token);
9211     }));
9212     connection.onCompletionResolve((item, token) => {
9213         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9214             const data = item.data;
9215             if (data && data.languageId && data.uri) {
9216                 const mode = languageModes.getMode(data.languageId);
9217                 const document = documents.get(data.uri);
9218                 if (mode && mode.doResolve && document) {
9219                     return mode.doResolve(document, item);
9220                 }
9221             }
9222             return item;
9223         }), item, `Error while resolving completion proposal`, token);
9224     });
9225     connection.onHover((textDocumentPosition, token) => {
9226         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9227             const document = documents.get(textDocumentPosition.textDocument.uri);
9228             if (document) {
9229                 const mode = languageModes.getModeAtPosition(document, textDocumentPosition.position);
9230                 const doHover = mode === null || mode === void 0 ? void 0 : mode.doHover;
9231                 if (doHover) {
9232                     const settings = yield getDocumentSettings(document, () => doHover.length > 2);
9233                     return doHover(document, textDocumentPosition.position, settings);
9234                 }
9235             }
9236             return null;
9237         }), null, `Error while computing hover for ${textDocumentPosition.textDocument.uri}`, token);
9238     });
9239     connection.onDocumentHighlight((documentHighlightParams, token) => {
9240         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9241             const document = documents.get(documentHighlightParams.textDocument.uri);
9242             if (document) {
9243                 const mode = languageModes.getModeAtPosition(document, documentHighlightParams.position);
9244                 if (mode && mode.findDocumentHighlight) {
9245                     return mode.findDocumentHighlight(document, documentHighlightParams.position);
9246                 }
9247             }
9248             return [];
9249         }), [], `Error while computing document highlights for ${documentHighlightParams.textDocument.uri}`, token);
9250     });
9251     connection.onDefinition((definitionParams, token) => {
9252         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9253             const document = documents.get(definitionParams.textDocument.uri);
9254             if (document) {
9255                 const mode = languageModes.getModeAtPosition(document, definitionParams.position);
9256                 if (mode && mode.findDefinition) {
9257                     return mode.findDefinition(document, definitionParams.position);
9258                 }
9259             }
9260             return [];
9261         }), null, `Error while computing definitions for ${definitionParams.textDocument.uri}`, token);
9262     });
9263     connection.onReferences((referenceParams, token) => {
9264         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9265             const document = documents.get(referenceParams.textDocument.uri);
9266             if (document) {
9267                 const mode = languageModes.getModeAtPosition(document, referenceParams.position);
9268                 if (mode && mode.findReferences) {
9269                     return mode.findReferences(document, referenceParams.position);
9270                 }
9271             }
9272             return [];
9273         }), [], `Error while computing references for ${referenceParams.textDocument.uri}`, token);
9274     });
9275     connection.onSignatureHelp((signatureHelpParms, token) => {
9276         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9277             const document = documents.get(signatureHelpParms.textDocument.uri);
9278             if (document) {
9279                 const mode = languageModes.getModeAtPosition(document, signatureHelpParms.position);
9280                 if (mode && mode.doSignatureHelp) {
9281                     return mode.doSignatureHelp(document, signatureHelpParms.position);
9282                 }
9283             }
9284             return null;
9285         }), null, `Error while computing signature help for ${signatureHelpParms.textDocument.uri}`, token);
9286     });
9287     connection.onDocumentRangeFormatting((formatParams, token) => __awaiter(this, void 0, void 0, function* () {
9288         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9289             const document = documents.get(formatParams.textDocument.uri);
9290             if (document) {
9291                 let settings = yield getDocumentSettings(document, () => true);
9292                 if (!settings) {
9293                     settings = globalSettings;
9294                 }
9295                 const unformattedTags = settings && settings.html && settings.html.format && settings.html.format.unformatted || '';
9296                 const enabledModes = { css: !unformattedTags.match(/\bstyle\b/), javascript: !unformattedTags.match(/\bscript\b/) };
9297                 return formatting_1.format(languageModes, document, formatParams.range, formatParams.options, settings, enabledModes);
9298             }
9299             return [];
9300         }), [], `Error while formatting range for ${formatParams.textDocument.uri}`, token);
9301     }));
9302     connection.onDocumentLinks((documentLinkParam, token) => {
9303         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9304             const document = documents.get(documentLinkParam.textDocument.uri);
9305             const links = [];
9306             if (document) {
9307                 const documentContext = documentContext_1.getDocumentContext(document.uri, workspaceFolders);
9308                 for (const m of languageModes.getAllModesInDocument(document)) {
9309                     if (m.findDocumentLinks) {
9310                         arrays_1.pushAll(links, yield m.findDocumentLinks(document, documentContext));
9311                     }
9312                 }
9313             }
9314             return links;
9315         }), [], `Error while document links for ${documentLinkParam.textDocument.uri}`, token);
9316     });
9317     connection.onDocumentSymbol((documentSymbolParms, token) => {
9318         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9319             const document = documents.get(documentSymbolParms.textDocument.uri);
9320             const symbols = [];
9321             if (document) {
9322                 for (const m of languageModes.getAllModesInDocument(document)) {
9323                     if (m.findDocumentSymbols) {
9324                         arrays_1.pushAll(symbols, yield m.findDocumentSymbols(document));
9325                     }
9326                 }
9327             }
9328             return symbols;
9329         }), [], `Error while computing document symbols for ${documentSymbolParms.textDocument.uri}`, token);
9330     });
9331     connection.onRequest(vscode_languageserver_1.DocumentColorRequest.type, (params, token) => {
9332         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9333             const infos = [];
9334             const document = documents.get(params.textDocument.uri);
9335             if (document) {
9336                 for (const m of languageModes.getAllModesInDocument(document)) {
9337                     if (m.findDocumentColors) {
9338                         arrays_1.pushAll(infos, yield m.findDocumentColors(document));
9339                     }
9340                 }
9341             }
9342             return infos;
9343         }), [], `Error while computing document colors for ${params.textDocument.uri}`, token);
9344     });
9345     connection.onRequest(vscode_languageserver_1.ColorPresentationRequest.type, (params, token) => {
9346         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9347             const document = documents.get(params.textDocument.uri);
9348             if (document) {
9349                 const mode = languageModes.getModeAtPosition(document, params.range.start);
9350                 if (mode && mode.getColorPresentations) {
9351                     return mode.getColorPresentations(document, params.color, params.range);
9352                 }
9353             }
9354             return [];
9355         }), [], `Error while computing color presentations for ${params.textDocument.uri}`, token);
9356     });
9357     connection.onRequest(TagCloseRequest.type, (params, token) => {
9358         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9359             const document = documents.get(params.textDocument.uri);
9360             if (document) {
9361                 const pos = params.position;
9362                 if (pos.character > 0) {
9363                     const mode = languageModes.getModeAtPosition(document, languageModes_1.Position.create(pos.line, pos.character - 1));
9364                     if (mode && mode.doAutoClose) {
9365                         return mode.doAutoClose(document, pos);
9366                     }
9367                 }
9368             }
9369             return null;
9370         }), null, `Error while computing tag close actions for ${params.textDocument.uri}`, token);
9371     });
9372     connection.onFoldingRanges((params, token) => {
9373         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9374             const document = documents.get(params.textDocument.uri);
9375             if (document) {
9376                 return htmlFolding_1.getFoldingRanges(languageModes, document, foldingRangeLimit, token);
9377             }
9378             return null;
9379         }), null, `Error while computing folding regions for ${params.textDocument.uri}`, token);
9380     });
9381     connection.onSelectionRanges((params, token) => {
9382         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9383             const document = documents.get(params.textDocument.uri);
9384             if (document) {
9385                 return selectionRanges_1.getSelectionRanges(languageModes, document, params.positions);
9386             }
9387             return [];
9388         }), [], `Error while computing selection ranges for ${params.textDocument.uri}`, token);
9389     });
9390     connection.onRenameRequest((params, token) => {
9391         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9392             const document = documents.get(params.textDocument.uri);
9393             const position = params.position;
9394             if (document) {
9395                 const mode = languageModes.getModeAtPosition(document, params.position);
9396                 if (mode && mode.doRename) {
9397                     return mode.doRename(document, position, params.newName);
9398                 }
9399             }
9400             return null;
9401         }), null, `Error while computing rename for ${params.textDocument.uri}`, token);
9402     });
9403     connection.languages.onLinkedEditingRange((params, token) => {
9404         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9405             const document = documents.get(params.textDocument.uri);
9406             if (document) {
9407                 const pos = params.position;
9408                 if (pos.character > 0) {
9409                     const mode = languageModes.getModeAtPosition(document, languageModes_1.Position.create(pos.line, pos.character - 1));
9410                     if (mode && mode.doLinkedEditing) {
9411                         const ranges = yield mode.doLinkedEditing(document, pos);
9412                         if (ranges) {
9413                             return { ranges };
9414                         }
9415                     }
9416                 }
9417             }
9418             return null;
9419         }), null, `Error while computing synced regions for ${params.textDocument.uri}`, token);
9420     });
9421     let semanticTokensProvider;
9422     function getSemanticTokenProvider() {
9423         if (!semanticTokensProvider) {
9424             semanticTokensProvider = semanticTokens_1.newSemanticTokenProvider(languageModes);
9425         }
9426         return semanticTokensProvider;
9427     }
9428     connection.onRequest(SemanticTokenRequest.type, (params, token) => {
9429         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9430             const document = documents.get(params.textDocument.uri);
9431             if (document) {
9432                 return getSemanticTokenProvider().getSemanticTokens(document, params.ranges);
9433             }
9434             return null;
9435         }), null, `Error while computing semantic tokens for ${params.textDocument.uri}`, token);
9436     });
9437     connection.onRequest(SemanticTokenLegendRequest.type, token => {
9438         return runner_1.runSafe(() => __awaiter(this, void 0, void 0, function* () {
9439             return getSemanticTokenProvider().legend;
9440         }), null, `Error while computing semantic tokens legend`, token);
9441     });
9442     connection.onNotification(CustomDataChangedNotification.type, dataPaths => {
9443         customData_1.fetchHTMLDataProviders(dataPaths, requestService).then(dataProviders => {
9444             languageModes.updateDataProviders(dataProviders);
9445         });
9446     });
9447     // Listen on the connection
9448     connection.listen();
9449 }
9450 exports.startServer = startServer;
9451
9452
9453 /***/ }),
9454 /* 70 */
9455 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
9456
9457
9458 /*---------------------------------------------------------------------------------------------
9459  *  Copyright (c) Microsoft Corporation. All rights reserved.
9460  *  Licensed under the MIT License. See License.txt in the project root for license information.
9461  *--------------------------------------------------------------------------------------------*/
9462 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9463     if (k2 === undefined) k2 = k;
9464     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
9465 }) : (function(o, m, k, k2) {
9466     if (k2 === undefined) k2 = k;
9467     o[k2] = m[k];
9468 }));
9469 var __exportStar = (this && this.__exportStar) || function(m, exports) {
9470     for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
9471 };
9472 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9473     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9474     return new (P || (P = Promise))(function (resolve, reject) {
9475         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9476         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9477         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9478         step((generator = generator.apply(thisArg, _arguments || [])).next());
9479     });
9480 };
9481 Object.defineProperty(exports, "__esModule", ({ value: true }));
9482 exports.getLanguageModes = void 0;
9483 const vscode_css_languageservice_1 = __webpack_require__(71);
9484 const vscode_html_languageservice_1 = __webpack_require__(115);
9485 const languageModelCache_1 = __webpack_require__(145);
9486 const cssMode_1 = __webpack_require__(146);
9487 const embeddedSupport_1 = __webpack_require__(147);
9488 const htmlMode_1 = __webpack_require__(148);
9489 const javascriptMode_1 = __webpack_require__(149);
9490 __exportStar(__webpack_require__(115), exports);
9491 function getLanguageModes(supportedLanguages, workspace, clientCapabilities, requestService) {
9492     const htmlLanguageService = vscode_html_languageservice_1.getLanguageService({ clientCapabilities, fileSystemProvider: requestService });
9493     const cssLanguageService = vscode_css_languageservice_1.getCSSLanguageService({ clientCapabilities, fileSystemProvider: requestService });
9494     let documentRegions = languageModelCache_1.getLanguageModelCache(10, 60, document => embeddedSupport_1.getDocumentRegions(htmlLanguageService, document));
9495     let modelCaches = [];
9496     modelCaches.push(documentRegions);
9497     let modes = Object.create(null);
9498     modes['html'] = htmlMode_1.getHTMLMode(htmlLanguageService, workspace);
9499     if (supportedLanguages['css']) {
9500         modes['css'] = cssMode_1.getCSSMode(cssLanguageService, documentRegions, workspace);
9501     }
9502     if (supportedLanguages['javascript']) {
9503         modes['javascript'] = javascriptMode_1.getJavaScriptMode(documentRegions, 'javascript', workspace);
9504         modes['typescript'] = javascriptMode_1.getJavaScriptMode(documentRegions, 'typescript', workspace);
9505     }
9506     return {
9507         updateDataProviders(dataProviders) {
9508             return __awaiter(this, void 0, void 0, function* () {
9509                 htmlLanguageService.setDataProviders(true, dataProviders);
9510             });
9511         },
9512         getModeAtPosition(document, position) {
9513             let languageId = documentRegions.get(document).getLanguageAtPosition(position);
9514             if (languageId) {
9515                 return modes[languageId];
9516             }
9517             return undefined;
9518         },
9519         getModesInRange(document, range) {
9520             return documentRegions.get(document).getLanguageRanges(range).map(r => {
9521                 return {
9522                     start: r.start,
9523                     end: r.end,
9524                     mode: r.languageId && modes[r.languageId],
9525                     attributeValue: r.attributeValue
9526                 };
9527             });
9528         },
9529         getAllModesInDocument(document) {
9530             let result = [];
9531             for (let languageId of documentRegions.get(document).getLanguagesInDocument()) {
9532                 let mode = modes[languageId];
9533                 if (mode) {
9534                     result.push(mode);
9535                 }
9536             }
9537             return result;
9538         },
9539         getAllModes() {
9540             let result = [];
9541             for (let languageId in modes) {
9542                 let mode = modes[languageId];
9543                 if (mode) {
9544                     result.push(mode);
9545                 }
9546             }
9547             return result;
9548         },
9549         getMode(languageId) {
9550             return modes[languageId];
9551         },
9552         onDocumentRemoved(document) {
9553             modelCaches.forEach(mc => mc.onDocumentRemoved(document));
9554             for (let mode in modes) {
9555                 modes[mode].onDocumentRemoved(document);
9556             }
9557         },
9558         dispose() {
9559             modelCaches.forEach(mc => mc.dispose());
9560             modelCaches = [];
9561             for (let mode in modes) {
9562                 modes[mode].dispose();
9563             }
9564             modes = {};
9565         }
9566     };
9567 }
9568 exports.getLanguageModes = getLanguageModes;
9569
9570
9571 /***/ }),
9572 /* 71 */
9573 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9574
9575 __webpack_require__.r(__webpack_exports__);
9576 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9577 /* harmony export */   "AnnotatedTextEdit": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.AnnotatedTextEdit,
9578 /* harmony export */   "ChangeAnnotation": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ChangeAnnotation,
9579 /* harmony export */   "ChangeAnnotationIdentifier": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ChangeAnnotationIdentifier,
9580 /* harmony export */   "ClientCapabilities": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ClientCapabilities,
9581 /* harmony export */   "CodeAction": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CodeAction,
9582 /* harmony export */   "CodeActionContext": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CodeActionContext,
9583 /* harmony export */   "CodeActionKind": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CodeActionKind,
9584 /* harmony export */   "CodeDescription": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CodeDescription,
9585 /* harmony export */   "CodeLens": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CodeLens,
9586 /* harmony export */   "Color": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Color,
9587 /* harmony export */   "ColorInformation": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ColorInformation,
9588 /* harmony export */   "ColorPresentation": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ColorPresentation,
9589 /* harmony export */   "Command": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Command,
9590 /* harmony export */   "CompletionItem": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CompletionItem,
9591 /* harmony export */   "CompletionItemKind": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CompletionItemKind,
9592 /* harmony export */   "CompletionItemTag": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CompletionItemTag,
9593 /* harmony export */   "CompletionList": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CompletionList,
9594 /* harmony export */   "CreateFile": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CreateFile,
9595 /* harmony export */   "DeleteFile": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DeleteFile,
9596 /* harmony export */   "Diagnostic": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Diagnostic,
9597 /* harmony export */   "DiagnosticRelatedInformation": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DiagnosticRelatedInformation,
9598 /* harmony export */   "DiagnosticSeverity": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DiagnosticSeverity,
9599 /* harmony export */   "DiagnosticTag": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DiagnosticTag,
9600 /* harmony export */   "DocumentHighlight": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DocumentHighlight,
9601 /* harmony export */   "DocumentHighlightKind": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DocumentHighlightKind,
9602 /* harmony export */   "DocumentLink": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DocumentLink,
9603 /* harmony export */   "DocumentSymbol": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DocumentSymbol,
9604 /* harmony export */   "EOL": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.EOL,
9605 /* harmony export */   "FileType": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.FileType,
9606 /* harmony export */   "FoldingRange": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.FoldingRange,
9607 /* harmony export */   "FoldingRangeKind": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.FoldingRangeKind,
9608 /* harmony export */   "FormattingOptions": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.FormattingOptions,
9609 /* harmony export */   "Hover": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Hover,
9610 /* harmony export */   "InsertReplaceEdit": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.InsertReplaceEdit,
9611 /* harmony export */   "InsertTextFormat": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.InsertTextFormat,
9612 /* harmony export */   "InsertTextMode": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.InsertTextMode,
9613 /* harmony export */   "Location": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Location,
9614 /* harmony export */   "LocationLink": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.LocationLink,
9615 /* harmony export */   "MarkedString": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.MarkedString,
9616 /* harmony export */   "MarkupContent": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.MarkupContent,
9617 /* harmony export */   "MarkupKind": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.MarkupKind,
9618 /* harmony export */   "OptionalVersionedTextDocumentIdentifier": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.OptionalVersionedTextDocumentIdentifier,
9619 /* harmony export */   "ParameterInformation": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ParameterInformation,
9620 /* harmony export */   "Position": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Position,
9621 /* harmony export */   "Range": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Range,
9622 /* harmony export */   "RenameFile": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.RenameFile,
9623 /* harmony export */   "SelectionRange": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.SelectionRange,
9624 /* harmony export */   "SignatureInformation": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.SignatureInformation,
9625 /* harmony export */   "SymbolInformation": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.SymbolInformation,
9626 /* harmony export */   "SymbolKind": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.SymbolKind,
9627 /* harmony export */   "SymbolTag": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.SymbolTag,
9628 /* harmony export */   "TextDocument": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.TextDocument,
9629 /* harmony export */   "TextDocumentEdit": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.TextDocumentEdit,
9630 /* harmony export */   "TextDocumentIdentifier": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.TextDocumentIdentifier,
9631 /* harmony export */   "TextDocumentItem": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.TextDocumentItem,
9632 /* harmony export */   "TextEdit": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.TextEdit,
9633 /* harmony export */   "VersionedTextDocumentIdentifier": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.VersionedTextDocumentIdentifier,
9634 /* harmony export */   "WorkspaceChange": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.WorkspaceChange,
9635 /* harmony export */   "WorkspaceEdit": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.WorkspaceEdit,
9636 /* harmony export */   "integer": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.integer,
9637 /* harmony export */   "uinteger": () => /* reexport safe */ _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.uinteger,
9638 /* harmony export */   "getDefaultCSSDataProvider": () => /* binding */ getDefaultCSSDataProvider,
9639 /* harmony export */   "newCSSDataProvider": () => /* binding */ newCSSDataProvider,
9640 /* harmony export */   "getCSSLanguageService": () => /* binding */ getCSSLanguageService,
9641 /* harmony export */   "getSCSSLanguageService": () => /* binding */ getSCSSLanguageService,
9642 /* harmony export */   "getLESSLanguageService": () => /* binding */ getLESSLanguageService
9643 /* harmony export */ });
9644 /* harmony import */ var _parser_cssParser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72);
9645 /* harmony import */ var _services_cssCompletion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(85);
9646 /* harmony import */ var _services_cssHover__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(94);
9647 /* harmony import */ var _services_cssNavigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(96);
9648 /* harmony import */ var _services_cssCodeActions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(97);
9649 /* harmony import */ var _services_cssValidation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(99);
9650 /* harmony import */ var _parser_scssParser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(102);
9651 /* harmony import */ var _services_scssCompletion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(105);
9652 /* harmony import */ var _parser_lessParser__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(106);
9653 /* harmony import */ var _services_lessCompletion__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(108);
9654 /* harmony import */ var _services_cssFolding__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(109);
9655 /* harmony import */ var _languageFacts_dataManager__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(110);
9656 /* harmony import */ var _languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(112);
9657 /* harmony import */ var _services_cssSelectionRange__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(113);
9658 /* harmony import */ var _services_scssNavigation__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(114);
9659 /* harmony import */ var _data_webCustomData__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(111);
9660 /* harmony import */ var _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(88);
9661 /*---------------------------------------------------------------------------------------------
9662  *  Copyright (c) Microsoft Corporation. All rights reserved.
9663  *  Licensed under the MIT License. See License.txt in the project root for license information.
9664  *--------------------------------------------------------------------------------------------*/
9665
9666
9667
9668
9669
9670
9671
9672
9673
9674
9675
9676
9677
9678
9679
9680
9681
9682
9683 function getDefaultCSSDataProvider() {
9684     return newCSSDataProvider(_data_webCustomData__WEBPACK_IMPORTED_MODULE_15__.cssData);
9685 }
9686 function newCSSDataProvider(data) {
9687     return new _languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_12__.CSSDataProvider(data);
9688 }
9689 function createFacade(parser, completion, hover, navigation, codeActions, validation, cssDataManager) {
9690     return {
9691         configure: function (settings) {
9692             validation.configure(settings);
9693             completion.configure(settings);
9694         },
9695         setDataProviders: cssDataManager.setDataProviders.bind(cssDataManager),
9696         doValidation: validation.doValidation.bind(validation),
9697         parseStylesheet: parser.parseStylesheet.bind(parser),
9698         doComplete: completion.doComplete.bind(completion),
9699         doComplete2: completion.doComplete2.bind(completion),
9700         setCompletionParticipants: completion.setCompletionParticipants.bind(completion),
9701         doHover: hover.doHover.bind(hover),
9702         findDefinition: navigation.findDefinition.bind(navigation),
9703         findReferences: navigation.findReferences.bind(navigation),
9704         findDocumentHighlights: navigation.findDocumentHighlights.bind(navigation),
9705         findDocumentLinks: navigation.findDocumentLinks.bind(navigation),
9706         findDocumentLinks2: navigation.findDocumentLinks2.bind(navigation),
9707         findDocumentSymbols: navigation.findDocumentSymbols.bind(navigation),
9708         doCodeActions: codeActions.doCodeActions.bind(codeActions),
9709         doCodeActions2: codeActions.doCodeActions2.bind(codeActions),
9710         findDocumentColors: navigation.findDocumentColors.bind(navigation),
9711         getColorPresentations: navigation.getColorPresentations.bind(navigation),
9712         doRename: navigation.doRename.bind(navigation),
9713         getFoldingRanges: _services_cssFolding__WEBPACK_IMPORTED_MODULE_10__.getFoldingRanges,
9714         getSelectionRanges: _services_cssSelectionRange__WEBPACK_IMPORTED_MODULE_13__.getSelectionRanges
9715     };
9716 }
9717 var defaultLanguageServiceOptions = {};
9718 function getCSSLanguageService(options) {
9719     if (options === void 0) { options = defaultLanguageServiceOptions; }
9720     var cssDataManager = new _languageFacts_dataManager__WEBPACK_IMPORTED_MODULE_11__.CSSDataManager(options);
9721     return createFacade(new _parser_cssParser__WEBPACK_IMPORTED_MODULE_0__.Parser(), new _services_cssCompletion__WEBPACK_IMPORTED_MODULE_1__.CSSCompletion(null, options, cssDataManager), new _services_cssHover__WEBPACK_IMPORTED_MODULE_2__.CSSHover(options && options.clientCapabilities, cssDataManager), new _services_cssNavigation__WEBPACK_IMPORTED_MODULE_3__.CSSNavigation(options && options.fileSystemProvider), new _services_cssCodeActions__WEBPACK_IMPORTED_MODULE_4__.CSSCodeActions(cssDataManager), new _services_cssValidation__WEBPACK_IMPORTED_MODULE_5__.CSSValidation(cssDataManager), cssDataManager);
9722 }
9723 function getSCSSLanguageService(options) {
9724     if (options === void 0) { options = defaultLanguageServiceOptions; }
9725     var cssDataManager = new _languageFacts_dataManager__WEBPACK_IMPORTED_MODULE_11__.CSSDataManager(options);
9726     return createFacade(new _parser_scssParser__WEBPACK_IMPORTED_MODULE_6__.SCSSParser(), new _services_scssCompletion__WEBPACK_IMPORTED_MODULE_7__.SCSSCompletion(options, cssDataManager), new _services_cssHover__WEBPACK_IMPORTED_MODULE_2__.CSSHover(options && options.clientCapabilities, cssDataManager), new _services_scssNavigation__WEBPACK_IMPORTED_MODULE_14__.SCSSNavigation(options && options.fileSystemProvider), new _services_cssCodeActions__WEBPACK_IMPORTED_MODULE_4__.CSSCodeActions(cssDataManager), new _services_cssValidation__WEBPACK_IMPORTED_MODULE_5__.CSSValidation(cssDataManager), cssDataManager);
9727 }
9728 function getLESSLanguageService(options) {
9729     if (options === void 0) { options = defaultLanguageServiceOptions; }
9730     var cssDataManager = new _languageFacts_dataManager__WEBPACK_IMPORTED_MODULE_11__.CSSDataManager(options);
9731     return createFacade(new _parser_lessParser__WEBPACK_IMPORTED_MODULE_8__.LESSParser(), new _services_lessCompletion__WEBPACK_IMPORTED_MODULE_9__.LESSCompletion(options, cssDataManager), new _services_cssHover__WEBPACK_IMPORTED_MODULE_2__.CSSHover(options && options.clientCapabilities, cssDataManager), new _services_cssNavigation__WEBPACK_IMPORTED_MODULE_3__.CSSNavigation(options && options.fileSystemProvider), new _services_cssCodeActions__WEBPACK_IMPORTED_MODULE_4__.CSSCodeActions(cssDataManager), new _services_cssValidation__WEBPACK_IMPORTED_MODULE_5__.CSSValidation(cssDataManager), cssDataManager);
9732 }
9733
9734
9735 /***/ }),
9736 /* 72 */
9737 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9738
9739 __webpack_require__.r(__webpack_exports__);
9740 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9741 /* harmony export */   "Parser": () => /* binding */ Parser
9742 /* harmony export */ });
9743 /* harmony import */ var _cssScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73);
9744 /* harmony import */ var _cssNodes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74);
9745 /* harmony import */ var _cssErrors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(76);
9746 /* harmony import */ var _languageFacts_facts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(80);
9747 /* harmony import */ var _utils_objects__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(84);
9748 /*---------------------------------------------------------------------------------------------
9749  *  Copyright (c) Microsoft Corporation. All rights reserved.
9750  *  Licensed under the MIT License. See License.txt in the project root for license information.
9751  *--------------------------------------------------------------------------------------------*/
9752
9753
9754
9755
9756
9757
9758 /// <summary>
9759 /// A parser for the css core specification. See for reference:
9760 /// https://www.w3.org/TR/CSS21/grammar.html
9761 /// http://www.w3.org/TR/CSS21/syndata.html#tokenization
9762 /// </summary>
9763 var Parser = /** @class */ (function () {
9764     function Parser(scnr) {
9765         if (scnr === void 0) { scnr = new _cssScanner__WEBPACK_IMPORTED_MODULE_0__.Scanner(); }
9766         this.keyframeRegex = /^@(\-(webkit|ms|moz|o)\-)?keyframes$/i;
9767         this.scanner = scnr;
9768         this.token = { type: _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EOF, offset: -1, len: 0, text: '' };
9769         this.prevToken = undefined;
9770     }
9771     Parser.prototype.peekIdent = function (text) {
9772         return _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Ident === this.token.type && text.length === this.token.text.length && text === this.token.text.toLowerCase();
9773     };
9774     Parser.prototype.peekKeyword = function (text) {
9775         return _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.AtKeyword === this.token.type && text.length === this.token.text.length && text === this.token.text.toLowerCase();
9776     };
9777     Parser.prototype.peekDelim = function (text) {
9778         return _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Delim === this.token.type && text === this.token.text;
9779     };
9780     Parser.prototype.peek = function (type) {
9781         return type === this.token.type;
9782     };
9783     Parser.prototype.peekOne = function (types) {
9784         return types.indexOf(this.token.type) !== -1;
9785     };
9786     Parser.prototype.peekRegExp = function (type, regEx) {
9787         if (type !== this.token.type) {
9788             return false;
9789         }
9790         return regEx.test(this.token.text);
9791     };
9792     Parser.prototype.hasWhitespace = function () {
9793         return !!this.prevToken && (this.prevToken.offset + this.prevToken.len !== this.token.offset);
9794     };
9795     Parser.prototype.consumeToken = function () {
9796         this.prevToken = this.token;
9797         this.token = this.scanner.scan();
9798     };
9799     Parser.prototype.mark = function () {
9800         return {
9801             prev: this.prevToken,
9802             curr: this.token,
9803             pos: this.scanner.pos()
9804         };
9805     };
9806     Parser.prototype.restoreAtMark = function (mark) {
9807         this.prevToken = mark.prev;
9808         this.token = mark.curr;
9809         this.scanner.goBackTo(mark.pos);
9810     };
9811     Parser.prototype.try = function (func) {
9812         var pos = this.mark();
9813         var node = func();
9814         if (!node) {
9815             this.restoreAtMark(pos);
9816             return null;
9817         }
9818         return node;
9819     };
9820     Parser.prototype.acceptOneKeyword = function (keywords) {
9821         if (_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.AtKeyword === this.token.type) {
9822             for (var _i = 0, keywords_1 = keywords; _i < keywords_1.length; _i++) {
9823                 var keyword = keywords_1[_i];
9824                 if (keyword.length === this.token.text.length && keyword === this.token.text.toLowerCase()) {
9825                     this.consumeToken();
9826                     return true;
9827                 }
9828             }
9829         }
9830         return false;
9831     };
9832     Parser.prototype.accept = function (type) {
9833         if (type === this.token.type) {
9834             this.consumeToken();
9835             return true;
9836         }
9837         return false;
9838     };
9839     Parser.prototype.acceptIdent = function (text) {
9840         if (this.peekIdent(text)) {
9841             this.consumeToken();
9842             return true;
9843         }
9844         return false;
9845     };
9846     Parser.prototype.acceptKeyword = function (text) {
9847         if (this.peekKeyword(text)) {
9848             this.consumeToken();
9849             return true;
9850         }
9851         return false;
9852     };
9853     Parser.prototype.acceptDelim = function (text) {
9854         if (this.peekDelim(text)) {
9855             this.consumeToken();
9856             return true;
9857         }
9858         return false;
9859     };
9860     Parser.prototype.acceptRegexp = function (regEx) {
9861         if (regEx.test(this.token.text)) {
9862             this.consumeToken();
9863             return true;
9864         }
9865         return false;
9866     };
9867     Parser.prototype._parseRegexp = function (regEx) {
9868         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Identifier);
9869         do { } while (this.acceptRegexp(regEx));
9870         return this.finish(node);
9871     };
9872     Parser.prototype.acceptUnquotedString = function () {
9873         var pos = this.scanner.pos();
9874         this.scanner.goBackTo(this.token.offset);
9875         var unquoted = this.scanner.scanUnquotedString();
9876         if (unquoted) {
9877             this.token = unquoted;
9878             this.consumeToken();
9879             return true;
9880         }
9881         this.scanner.goBackTo(pos);
9882         return false;
9883     };
9884     Parser.prototype.resync = function (resyncTokens, resyncStopTokens) {
9885         while (true) {
9886             if (resyncTokens && resyncTokens.indexOf(this.token.type) !== -1) {
9887                 this.consumeToken();
9888                 return true;
9889             }
9890             else if (resyncStopTokens && resyncStopTokens.indexOf(this.token.type) !== -1) {
9891                 return true;
9892             }
9893             else {
9894                 if (this.token.type === _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EOF) {
9895                     return false;
9896                 }
9897                 this.token = this.scanner.scan();
9898             }
9899         }
9900     };
9901     Parser.prototype.createNode = function (nodeType) {
9902         return new _cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node(this.token.offset, this.token.len, nodeType);
9903     };
9904     Parser.prototype.create = function (ctor) {
9905         return new ctor(this.token.offset, this.token.len);
9906     };
9907     Parser.prototype.finish = function (node, error, resyncTokens, resyncStopTokens) {
9908         // parseNumeric misuses error for boolean flagging (however the real error mustn't be a false)
9909         // + nodelist offsets mustn't be modified, because there is a offset hack in rulesets for smartselection
9910         if (!(node instanceof _cssNodes__WEBPACK_IMPORTED_MODULE_1__.Nodelist)) {
9911             if (error) {
9912                 this.markError(node, error, resyncTokens, resyncStopTokens);
9913             }
9914             // set the node end position
9915             if (this.prevToken) {
9916                 // length with more elements belonging together
9917                 var prevEnd = this.prevToken.offset + this.prevToken.len;
9918                 node.length = prevEnd > node.offset ? prevEnd - node.offset : 0; // offset is taken from current token, end from previous: Use 0 for empty nodes
9919             }
9920         }
9921         return node;
9922     };
9923     Parser.prototype.markError = function (node, error, resyncTokens, resyncStopTokens) {
9924         if (this.token !== this.lastErrorToken) { // do not report twice on the same token
9925             node.addIssue(new _cssNodes__WEBPACK_IMPORTED_MODULE_1__.Marker(node, error, _cssNodes__WEBPACK_IMPORTED_MODULE_1__.Level.Error, undefined, this.token.offset, this.token.len));
9926             this.lastErrorToken = this.token;
9927         }
9928         if (resyncTokens || resyncStopTokens) {
9929             this.resync(resyncTokens, resyncStopTokens);
9930         }
9931     };
9932     Parser.prototype.parseStylesheet = function (textDocument) {
9933         var versionId = textDocument.version;
9934         var text = textDocument.getText();
9935         var textProvider = function (offset, length) {
9936             if (textDocument.version !== versionId) {
9937                 throw new Error('Underlying model has changed, AST is no longer valid');
9938             }
9939             return text.substr(offset, length);
9940         };
9941         return this.internalParse(text, this._parseStylesheet, textProvider);
9942     };
9943     Parser.prototype.internalParse = function (input, parseFunc, textProvider) {
9944         this.scanner.setSource(input);
9945         this.token = this.scanner.scan();
9946         var node = parseFunc.bind(this)();
9947         if (node) {
9948             if (textProvider) {
9949                 node.textProvider = textProvider;
9950             }
9951             else {
9952                 node.textProvider = function (offset, length) { return input.substr(offset, length); };
9953             }
9954         }
9955         return node;
9956     };
9957     Parser.prototype._parseStylesheet = function () {
9958         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Stylesheet);
9959         while (node.addChild(this._parseStylesheetStart())) {
9960             // Parse statements only valid at the beginning of stylesheets.
9961         }
9962         var inRecovery = false;
9963         do {
9964             var hasMatch = false;
9965             do {
9966                 hasMatch = false;
9967                 var statement = this._parseStylesheetStatement();
9968                 if (statement) {
9969                     node.addChild(statement);
9970                     hasMatch = true;
9971                     inRecovery = false;
9972                     if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EOF) && this._needsSemicolonAfter(statement) && !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon)) {
9973                         this.markError(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.SemiColonExpected);
9974                     }
9975                 }
9976                 while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon) || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CDO) || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CDC)) {
9977                     // accept empty statements
9978                     hasMatch = true;
9979                     inRecovery = false;
9980                 }
9981             } while (hasMatch);
9982             if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EOF)) {
9983                 break;
9984             }
9985             if (!inRecovery) {
9986                 if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.AtKeyword)) {
9987                     this.markError(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.UnknownAtRule);
9988                 }
9989                 else {
9990                     this.markError(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RuleOrSelectorExpected);
9991                 }
9992                 inRecovery = true;
9993             }
9994             this.consumeToken();
9995         } while (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EOF));
9996         return this.finish(node);
9997     };
9998     Parser.prototype._parseStylesheetStart = function () {
9999         return this._parseCharset();
10000     };
10001     Parser.prototype._parseStylesheetStatement = function (isNested) {
10002         if (isNested === void 0) { isNested = false; }
10003         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.AtKeyword)) {
10004             return this._parseStylesheetAtStatement(isNested);
10005         }
10006         return this._parseRuleset(isNested);
10007     };
10008     Parser.prototype._parseStylesheetAtStatement = function (isNested) {
10009         if (isNested === void 0) { isNested = false; }
10010         return this._parseImport()
10011             || this._parseMedia(isNested)
10012             || this._parsePage()
10013             || this._parseFontFace()
10014             || this._parseKeyframe()
10015             || this._parseSupports(isNested)
10016             || this._parseViewPort()
10017             || this._parseNamespace()
10018             || this._parseDocument()
10019             || this._parseUnknownAtRule();
10020     };
10021     Parser.prototype._tryParseRuleset = function (isNested) {
10022         var mark = this.mark();
10023         if (this._parseSelector(isNested)) {
10024             while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Comma) && this._parseSelector(isNested)) {
10025                 // loop
10026             }
10027             if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyL)) {
10028                 this.restoreAtMark(mark);
10029                 return this._parseRuleset(isNested);
10030             }
10031         }
10032         this.restoreAtMark(mark);
10033         return null;
10034     };
10035     Parser.prototype._parseRuleset = function (isNested) {
10036         if (isNested === void 0) { isNested = false; }
10037         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.RuleSet);
10038         var selectors = node.getSelectors();
10039         if (!selectors.addChild(this._parseSelector(isNested))) {
10040             return null;
10041         }
10042         while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Comma)) {
10043             if (!selectors.addChild(this._parseSelector(isNested))) {
10044                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.SelectorExpected);
10045             }
10046         }
10047         return this._parseBody(node, this._parseRuleSetDeclaration.bind(this));
10048     };
10049     Parser.prototype._parseRuleSetDeclarationAtStatement = function () {
10050         return this._parseAtApply()
10051             || this._parseUnknownAtRule();
10052     };
10053     Parser.prototype._parseRuleSetDeclaration = function () {
10054         // https://www.w3.org/TR/css-syntax-3/#consume-a-list-of-declarations0
10055         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.AtKeyword)) {
10056             return this._parseRuleSetDeclarationAtStatement();
10057         }
10058         return this._parseDeclaration();
10059     };
10060     /**
10061      * Parses declarations like:
10062      *   @apply --my-theme;
10063      *
10064      * Follows https://tabatkins.github.io/specs/css-apply-rule/#using
10065      */
10066     Parser.prototype._parseAtApply = function () {
10067         if (!this.peekKeyword('@apply')) {
10068             return null;
10069         }
10070         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.AtApplyRule);
10071         this.consumeToken();
10072         if (!node.setIdentifier(this._parseIdent([_cssNodes__WEBPACK_IMPORTED_MODULE_1__.ReferenceType.Variable]))) {
10073             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.IdentifierExpected);
10074         }
10075         return this.finish(node);
10076     };
10077     Parser.prototype._needsSemicolonAfter = function (node) {
10078         switch (node.type) {
10079             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Keyframe:
10080             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.ViewPort:
10081             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Media:
10082             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Ruleset:
10083             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Namespace:
10084             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.If:
10085             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.For:
10086             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Each:
10087             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.While:
10088             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.MixinDeclaration:
10089             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.FunctionDeclaration:
10090             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.MixinContentDeclaration:
10091                 return false;
10092             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.ExtendsReference:
10093             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.MixinContentReference:
10094             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.ReturnStatement:
10095             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.MediaQuery:
10096             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Debug:
10097             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Import:
10098             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.AtApplyRule:
10099             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.CustomPropertyDeclaration:
10100                 return true;
10101             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.VariableDeclaration:
10102                 return node.needsSemicolon;
10103             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.MixinReference:
10104                 return !node.getContent();
10105             case _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Declaration:
10106                 return !node.getNestedProperties();
10107         }
10108         return false;
10109     };
10110     Parser.prototype._parseDeclarations = function (parseDeclaration) {
10111         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Declarations);
10112         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyL)) {
10113             return null;
10114         }
10115         var decl = parseDeclaration();
10116         while (node.addChild(decl)) {
10117             if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyR)) {
10118                 break;
10119             }
10120             if (this._needsSemicolonAfter(decl) && !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon)) {
10121                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.SemiColonExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon, _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyR]);
10122             }
10123             // We accepted semicolon token. Link it to declaration.
10124             if (decl && this.prevToken && this.prevToken.type === _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon) {
10125                 decl.semicolonPosition = this.prevToken.offset;
10126             }
10127             while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon)) {
10128                 // accept empty statements
10129             }
10130             decl = parseDeclaration();
10131         }
10132         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyR)) {
10133             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightCurlyExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyR, _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon]);
10134         }
10135         return this.finish(node);
10136     };
10137     Parser.prototype._parseBody = function (node, parseDeclaration) {
10138         if (!node.setDeclarations(this._parseDeclarations(parseDeclaration))) {
10139             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.LeftCurlyExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyR, _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon]);
10140         }
10141         return this.finish(node);
10142     };
10143     Parser.prototype._parseSelector = function (isNested) {
10144         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Selector);
10145         var hasContent = false;
10146         if (isNested) {
10147             // nested selectors can start with a combinator
10148             hasContent = node.addChild(this._parseCombinator());
10149         }
10150         while (node.addChild(this._parseSimpleSelector())) {
10151             hasContent = true;
10152             node.addChild(this._parseCombinator()); // optional
10153         }
10154         return hasContent ? this.finish(node) : null;
10155     };
10156     Parser.prototype._parseDeclaration = function (stopTokens) {
10157         var custonProperty = this._tryParseCustomPropertyDeclaration(stopTokens);
10158         if (custonProperty) {
10159             return custonProperty;
10160         }
10161         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Declaration);
10162         if (!node.setProperty(this._parseProperty())) {
10163             return null;
10164         }
10165         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Colon)) {
10166             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.ColonExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Colon], stopTokens || [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon]);
10167         }
10168         if (this.prevToken) {
10169             node.colonPosition = this.prevToken.offset;
10170         }
10171         if (!node.setValue(this._parseExpr())) {
10172             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.PropertyValueExpected);
10173         }
10174         node.addChild(this._parsePrio());
10175         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon)) {
10176             node.semicolonPosition = this.token.offset; // not part of the declaration, but useful information for code assist
10177         }
10178         return this.finish(node);
10179     };
10180     Parser.prototype._tryParseCustomPropertyDeclaration = function (stopTokens) {
10181         if (!this.peekRegExp(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Ident, /^--/)) {
10182             return null;
10183         }
10184         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.CustomPropertyDeclaration);
10185         if (!node.setProperty(this._parseProperty())) {
10186             return null;
10187         }
10188         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Colon)) {
10189             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.ColonExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Colon]);
10190         }
10191         if (this.prevToken) {
10192             node.colonPosition = this.prevToken.offset;
10193         }
10194         var mark = this.mark();
10195         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyL)) {
10196             // try to parse it as nested declaration
10197             var propertySet = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.CustomPropertySet);
10198             var declarations = this._parseDeclarations(this._parseRuleSetDeclaration.bind(this));
10199             if (propertySet.setDeclarations(declarations) && !declarations.isErroneous(true)) {
10200                 propertySet.addChild(this._parsePrio());
10201                 if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon)) {
10202                     this.finish(propertySet);
10203                     node.setPropertySet(propertySet);
10204                     node.semicolonPosition = this.token.offset; // not part of the declaration, but useful information for code assist
10205                     return this.finish(node);
10206                 }
10207             }
10208             this.restoreAtMark(mark);
10209         }
10210         // try tp parse as expression
10211         var expression = this._parseExpr();
10212         if (expression && !expression.isErroneous(true)) {
10213             this._parsePrio();
10214             if (this.peekOne(stopTokens || [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon])) {
10215                 node.setValue(expression);
10216                 node.semicolonPosition = this.token.offset; // not part of the declaration, but useful information for code assist
10217                 return this.finish(node);
10218             }
10219         }
10220         this.restoreAtMark(mark);
10221         node.addChild(this._parseCustomPropertyValue(stopTokens));
10222         node.addChild(this._parsePrio());
10223         if ((0,_utils_objects__WEBPACK_IMPORTED_MODULE_4__.isDefined)(node.colonPosition) && this.token.offset === node.colonPosition + 1) {
10224             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.PropertyValueExpected);
10225         }
10226         return this.finish(node);
10227     };
10228     /**
10229      * Parse custom property values.
10230      *
10231      * Based on https://www.w3.org/TR/css-variables/#syntax
10232      *
10233      * This code is somewhat unusual, as the allowed syntax is incredibly broad,
10234      * parsing almost any sequence of tokens, save for a small set of exceptions.
10235      * Unbalanced delimitors, invalid tokens, and declaration
10236      * terminators like semicolons and !important directives (when not inside
10237      * of delimitors).
10238      */
10239     Parser.prototype._parseCustomPropertyValue = function (stopTokens) {
10240         var _this = this;
10241         if (stopTokens === void 0) { stopTokens = [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyR]; }
10242         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
10243         var isTopLevel = function () { return curlyDepth === 0 && parensDepth === 0 && bracketsDepth === 0; };
10244         var onStopToken = function () { return stopTokens.indexOf(_this.token.type) !== -1; };
10245         var curlyDepth = 0;
10246         var parensDepth = 0;
10247         var bracketsDepth = 0;
10248         done: while (true) {
10249             switch (this.token.type) {
10250                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon:
10251                     // A semicolon only ends things if we're not inside a delimitor.
10252                     if (isTopLevel()) {
10253                         break done;
10254                     }
10255                     break;
10256                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Exclamation:
10257                     // An exclamation ends the value if we're not inside delims.
10258                     if (isTopLevel()) {
10259                         break done;
10260                     }
10261                     break;
10262                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyL:
10263                     curlyDepth++;
10264                     break;
10265                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyR:
10266                     curlyDepth--;
10267                     if (curlyDepth < 0) {
10268                         // The property value has been terminated without a semicolon, and
10269                         // this is the last declaration in the ruleset.
10270                         if (onStopToken() && parensDepth === 0 && bracketsDepth === 0) {
10271                             break done;
10272                         }
10273                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.LeftCurlyExpected);
10274                     }
10275                     break;
10276                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisL:
10277                     parensDepth++;
10278                     break;
10279                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR:
10280                     parensDepth--;
10281                     if (parensDepth < 0) {
10282                         if (onStopToken() && bracketsDepth === 0 && curlyDepth === 0) {
10283                             break done;
10284                         }
10285                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.LeftParenthesisExpected);
10286                     }
10287                     break;
10288                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.BracketL:
10289                     bracketsDepth++;
10290                     break;
10291                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.BracketR:
10292                     bracketsDepth--;
10293                     if (bracketsDepth < 0) {
10294                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.LeftSquareBracketExpected);
10295                     }
10296                     break;
10297                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.BadString: // fall through
10298                     break done;
10299                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EOF:
10300                     // We shouldn't have reached the end of input, something is
10301                     // unterminated.
10302                     var error = _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightCurlyExpected;
10303                     if (bracketsDepth > 0) {
10304                         error = _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightSquareBracketExpected;
10305                     }
10306                     else if (parensDepth > 0) {
10307                         error = _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightParenthesisExpected;
10308                     }
10309                     return this.finish(node, error);
10310             }
10311             this.consumeToken();
10312         }
10313         return this.finish(node);
10314     };
10315     Parser.prototype._tryToParseDeclaration = function (stopTokens) {
10316         var mark = this.mark();
10317         if (this._parseProperty() && this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Colon)) {
10318             // looks like a declaration, go ahead
10319             this.restoreAtMark(mark);
10320             return this._parseDeclaration(stopTokens);
10321         }
10322         this.restoreAtMark(mark);
10323         return null;
10324     };
10325     Parser.prototype._parseProperty = function () {
10326         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Property);
10327         var mark = this.mark();
10328         if (this.acceptDelim('*') || this.acceptDelim('_')) {
10329             // support for  IE 5.x, 6 and 7 star hack: see http://en.wikipedia.org/wiki/CSS_filter#Star_hack
10330             if (this.hasWhitespace()) {
10331                 this.restoreAtMark(mark);
10332                 return null;
10333             }
10334         }
10335         if (node.setIdentifier(this._parsePropertyIdentifier())) {
10336             return this.finish(node);
10337         }
10338         return null;
10339     };
10340     Parser.prototype._parsePropertyIdentifier = function () {
10341         return this._parseIdent();
10342     };
10343     Parser.prototype._parseCharset = function () {
10344         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Charset)) {
10345             return null;
10346         }
10347         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
10348         this.consumeToken(); // charset
10349         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.String)) {
10350             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.IdentifierExpected);
10351         }
10352         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon)) {
10353             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.SemiColonExpected);
10354         }
10355         return this.finish(node);
10356     };
10357     Parser.prototype._parseImport = function () {
10358         if (!this.peekKeyword('@import')) {
10359             return null;
10360         }
10361         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Import);
10362         this.consumeToken(); // @import
10363         if (!node.addChild(this._parseURILiteral()) && !node.addChild(this._parseStringLiteral())) {
10364             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.URIOrStringExpected);
10365         }
10366         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon) && !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EOF)) {
10367             node.setMedialist(this._parseMediaQueryList());
10368         }
10369         return this.finish(node);
10370     };
10371     Parser.prototype._parseNamespace = function () {
10372         // http://www.w3.org/TR/css3-namespace/
10373         // namespace  : NAMESPACE_SYM S* [IDENT S*]? [STRING|URI] S* ';' S*
10374         if (!this.peekKeyword('@namespace')) {
10375             return null;
10376         }
10377         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Namespace);
10378         this.consumeToken(); // @namespace
10379         if (!node.addChild(this._parseURILiteral())) { // url literal also starts with ident
10380             node.addChild(this._parseIdent()); // optional prefix
10381             if (!node.addChild(this._parseURILiteral()) && !node.addChild(this._parseStringLiteral())) {
10382                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.URIExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon]);
10383             }
10384         }
10385         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon)) {
10386             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.SemiColonExpected);
10387         }
10388         return this.finish(node);
10389     };
10390     Parser.prototype._parseFontFace = function () {
10391         if (!this.peekKeyword('@font-face')) {
10392             return null;
10393         }
10394         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.FontFace);
10395         this.consumeToken(); // @font-face
10396         return this._parseBody(node, this._parseRuleSetDeclaration.bind(this));
10397     };
10398     Parser.prototype._parseViewPort = function () {
10399         if (!this.peekKeyword('@-ms-viewport') &&
10400             !this.peekKeyword('@-o-viewport') &&
10401             !this.peekKeyword('@viewport')) {
10402             return null;
10403         }
10404         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.ViewPort);
10405         this.consumeToken(); // @-ms-viewport
10406         return this._parseBody(node, this._parseRuleSetDeclaration.bind(this));
10407     };
10408     Parser.prototype._parseKeyframe = function () {
10409         if (!this.peekRegExp(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.AtKeyword, this.keyframeRegex)) {
10410             return null;
10411         }
10412         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Keyframe);
10413         var atNode = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
10414         this.consumeToken(); // atkeyword
10415         node.setKeyword(this.finish(atNode));
10416         if (atNode.matches('@-ms-keyframes')) { // -ms-keyframes never existed
10417             this.markError(atNode, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.UnknownKeyword);
10418         }
10419         if (!node.setIdentifier(this._parseKeyframeIdent())) {
10420             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.IdentifierExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyR]);
10421         }
10422         return this._parseBody(node, this._parseKeyframeSelector.bind(this));
10423     };
10424     Parser.prototype._parseKeyframeIdent = function () {
10425         return this._parseIdent([_cssNodes__WEBPACK_IMPORTED_MODULE_1__.ReferenceType.Keyframe]);
10426     };
10427     Parser.prototype._parseKeyframeSelector = function () {
10428         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.KeyframeSelector);
10429         if (!node.addChild(this._parseIdent()) && !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Percentage)) {
10430             return null;
10431         }
10432         while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Comma)) {
10433             if (!node.addChild(this._parseIdent()) && !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Percentage)) {
10434                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.PercentageExpected);
10435             }
10436         }
10437         return this._parseBody(node, this._parseRuleSetDeclaration.bind(this));
10438     };
10439     Parser.prototype._tryParseKeyframeSelector = function () {
10440         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.KeyframeSelector);
10441         var pos = this.mark();
10442         if (!node.addChild(this._parseIdent()) && !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Percentage)) {
10443             return null;
10444         }
10445         while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Comma)) {
10446             if (!node.addChild(this._parseIdent()) && !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Percentage)) {
10447                 this.restoreAtMark(pos);
10448                 return null;
10449             }
10450         }
10451         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyL)) {
10452             this.restoreAtMark(pos);
10453             return null;
10454         }
10455         return this._parseBody(node, this._parseRuleSetDeclaration.bind(this));
10456     };
10457     Parser.prototype._parseSupports = function (isNested) {
10458         if (isNested === void 0) { isNested = false; }
10459         // SUPPORTS_SYM S* supports_condition '{' S* ruleset* '}' S*
10460         if (!this.peekKeyword('@supports')) {
10461             return null;
10462         }
10463         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Supports);
10464         this.consumeToken(); // @supports
10465         node.addChild(this._parseSupportsCondition());
10466         return this._parseBody(node, this._parseSupportsDeclaration.bind(this, isNested));
10467     };
10468     Parser.prototype._parseSupportsDeclaration = function (isNested) {
10469         if (isNested === void 0) { isNested = false; }
10470         if (isNested) {
10471             // if nested, the body can contain rulesets, but also declarations
10472             return this._tryParseRuleset(true)
10473                 || this._tryToParseDeclaration()
10474                 || this._parseStylesheetStatement(true);
10475         }
10476         return this._parseStylesheetStatement(false);
10477     };
10478     Parser.prototype._parseSupportsCondition = function () {
10479         // supports_condition : supports_negation | supports_conjunction | supports_disjunction | supports_condition_in_parens ;
10480         // supports_condition_in_parens: ( '(' S* supports_condition S* ')' ) | supports_declaration_condition | general_enclosed ;
10481         // supports_negation: NOT S+ supports_condition_in_parens ;
10482         // supports_conjunction: supports_condition_in_parens ( S+ AND S+ supports_condition_in_parens )+;
10483         // supports_disjunction: supports_condition_in_parens ( S+ OR S+ supports_condition_in_parens )+;
10484         // supports_declaration_condition: '(' S* declaration ')';
10485         // general_enclosed: ( FUNCTION | '(' ) ( any | unused )* ')' ;
10486         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.SupportsCondition);
10487         if (this.acceptIdent('not')) {
10488             node.addChild(this._parseSupportsConditionInParens());
10489         }
10490         else {
10491             node.addChild(this._parseSupportsConditionInParens());
10492             if (this.peekRegExp(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Ident, /^(and|or)$/i)) {
10493                 var text = this.token.text.toLowerCase();
10494                 while (this.acceptIdent(text)) {
10495                     node.addChild(this._parseSupportsConditionInParens());
10496                 }
10497             }
10498         }
10499         return this.finish(node);
10500     };
10501     Parser.prototype._parseSupportsConditionInParens = function () {
10502         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.SupportsCondition);
10503         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisL)) {
10504             if (this.prevToken) {
10505                 node.lParent = this.prevToken.offset;
10506             }
10507             if (!node.addChild(this._tryToParseDeclaration([_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR]))) {
10508                 if (!this._parseSupportsCondition()) {
10509                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.ConditionExpected);
10510                 }
10511             }
10512             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR)) {
10513                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightParenthesisExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR], []);
10514             }
10515             if (this.prevToken) {
10516                 node.rParent = this.prevToken.offset;
10517             }
10518             return this.finish(node);
10519         }
10520         else if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Ident)) {
10521             var pos = this.mark();
10522             this.consumeToken();
10523             if (!this.hasWhitespace() && this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisL)) {
10524                 var openParentCount = 1;
10525                 while (this.token.type !== _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EOF && openParentCount !== 0) {
10526                     if (this.token.type === _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisL) {
10527                         openParentCount++;
10528                     }
10529                     else if (this.token.type === _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR) {
10530                         openParentCount--;
10531                     }
10532                     this.consumeToken();
10533                 }
10534                 return this.finish(node);
10535             }
10536             else {
10537                 this.restoreAtMark(pos);
10538             }
10539         }
10540         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.LeftParenthesisExpected, [], [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisL]);
10541     };
10542     Parser.prototype._parseMediaDeclaration = function (isNested) {
10543         if (isNested === void 0) { isNested = false; }
10544         if (isNested) {
10545             // if nested, the body can contain rulesets, but also declarations
10546             return this._tryParseRuleset(true)
10547                 || this._tryToParseDeclaration()
10548                 || this._parseStylesheetStatement(true);
10549         }
10550         return this._parseStylesheetStatement(false);
10551     };
10552     Parser.prototype._parseMedia = function (isNested) {
10553         if (isNested === void 0) { isNested = false; }
10554         // MEDIA_SYM S* media_query_list '{' S* ruleset* '}' S*
10555         // media_query_list : S* [media_query [ ',' S* media_query ]* ]?
10556         if (!this.peekKeyword('@media')) {
10557             return null;
10558         }
10559         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Media);
10560         this.consumeToken(); // @media
10561         if (!node.addChild(this._parseMediaQueryList())) {
10562             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.MediaQueryExpected);
10563         }
10564         return this._parseBody(node, this._parseMediaDeclaration.bind(this, isNested));
10565     };
10566     Parser.prototype._parseMediaQueryList = function () {
10567         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Medialist);
10568         if (!node.addChild(this._parseMediaQuery([_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyL]))) {
10569             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.MediaQueryExpected);
10570         }
10571         while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Comma)) {
10572             if (!node.addChild(this._parseMediaQuery([_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyL]))) {
10573                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.MediaQueryExpected);
10574             }
10575         }
10576         return this.finish(node);
10577     };
10578     Parser.prototype._parseMediaQuery = function (resyncStopToken) {
10579         // http://www.w3.org/TR/css3-mediaqueries/
10580         // media_query : [ONLY | NOT]? S* IDENT S* [ AND S* expression ]* | expression [ AND S* expression ]*
10581         // expression : '(' S* IDENT S* [ ':' S* expr ]? ')' S*
10582         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.MediaQuery);
10583         var parseExpression = true;
10584         var hasContent = false;
10585         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisL)) {
10586             if (this.acceptIdent('only') || this.acceptIdent('not')) {
10587                 // optional
10588             }
10589             if (!node.addChild(this._parseIdent())) {
10590                 return null;
10591             }
10592             hasContent = true;
10593             parseExpression = this.acceptIdent('and');
10594         }
10595         while (parseExpression) {
10596             // Allow short-circuting for other language constructs.
10597             if (node.addChild(this._parseMediaContentStart())) {
10598                 parseExpression = this.acceptIdent('and');
10599                 continue;
10600             }
10601             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisL)) {
10602                 if (hasContent) {
10603                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.LeftParenthesisExpected, [], resyncStopToken);
10604                 }
10605                 return null;
10606             }
10607             if (!node.addChild(this._parseMediaFeatureName())) {
10608                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.IdentifierExpected, [], resyncStopToken);
10609             }
10610             if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Colon)) {
10611                 if (!node.addChild(this._parseExpr())) {
10612                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.TermExpected, [], resyncStopToken);
10613                 }
10614             }
10615             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR)) {
10616                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightParenthesisExpected, [], resyncStopToken);
10617             }
10618             parseExpression = this.acceptIdent('and');
10619         }
10620         return this.finish(node);
10621     };
10622     Parser.prototype._parseMediaContentStart = function () {
10623         return null;
10624     };
10625     Parser.prototype._parseMediaFeatureName = function () {
10626         return this._parseIdent();
10627     };
10628     Parser.prototype._parseMedium = function () {
10629         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
10630         if (node.addChild(this._parseIdent())) {
10631             return this.finish(node);
10632         }
10633         else {
10634             return null;
10635         }
10636     };
10637     Parser.prototype._parsePageDeclaration = function () {
10638         return this._parsePageMarginBox() || this._parseRuleSetDeclaration();
10639     };
10640     Parser.prototype._parsePage = function () {
10641         // http://www.w3.org/TR/css3-page/
10642         // page_rule : PAGE_SYM S* page_selector_list '{' S* page_body '}' S*
10643         // page_body :  /* Can be empty */ declaration? [ ';' S* page_body ]? | page_margin_box page_body
10644         if (!this.peekKeyword('@page')) {
10645             return null;
10646         }
10647         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Page);
10648         this.consumeToken();
10649         if (node.addChild(this._parsePageSelector())) {
10650             while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Comma)) {
10651                 if (!node.addChild(this._parsePageSelector())) {
10652                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.IdentifierExpected);
10653                 }
10654             }
10655         }
10656         return this._parseBody(node, this._parsePageDeclaration.bind(this));
10657     };
10658     Parser.prototype._parsePageMarginBox = function () {
10659         // page_margin_box :  margin_sym S* '{' S* declaration? [ ';' S* declaration? ]* '}' S*
10660         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.AtKeyword)) {
10661             return null;
10662         }
10663         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.PageBoxMarginBox);
10664         if (!this.acceptOneKeyword(_languageFacts_facts__WEBPACK_IMPORTED_MODULE_3__.pageBoxDirectives)) {
10665             this.markError(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.UnknownAtRule, [], [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyL]);
10666         }
10667         return this._parseBody(node, this._parseRuleSetDeclaration.bind(this));
10668     };
10669     Parser.prototype._parsePageSelector = function () {
10670         // page_selector : pseudo_page+ | IDENT pseudo_page*
10671         // pseudo_page :  ':' [ "left" | "right" | "first" | "blank" ];
10672         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Ident) && !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Colon)) {
10673             return null;
10674         }
10675         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
10676         node.addChild(this._parseIdent()); // optional ident
10677         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Colon)) {
10678             if (!node.addChild(this._parseIdent())) { // optional ident
10679                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.IdentifierExpected);
10680             }
10681         }
10682         return this.finish(node);
10683     };
10684     Parser.prototype._parseDocument = function () {
10685         // -moz-document is experimental but has been pushed to css4
10686         if (!this.peekKeyword('@-moz-document')) {
10687             return null;
10688         }
10689         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Document);
10690         this.consumeToken(); // @-moz-document
10691         this.resync([], [_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyL]); // ignore all the rules
10692         return this._parseBody(node, this._parseStylesheetStatement.bind(this));
10693     };
10694     // https://www.w3.org/TR/css-syntax-3/#consume-an-at-rule
10695     Parser.prototype._parseUnknownAtRule = function () {
10696         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.AtKeyword)) {
10697             return null;
10698         }
10699         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.UnknownAtRule);
10700         node.addChild(this._parseUnknownAtRuleName());
10701         var isTopLevel = function () { return curlyDepth === 0 && parensDepth === 0 && bracketsDepth === 0; };
10702         var curlyLCount = 0;
10703         var curlyDepth = 0;
10704         var parensDepth = 0;
10705         var bracketsDepth = 0;
10706         done: while (true) {
10707             switch (this.token.type) {
10708                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SemiColon:
10709                     if (isTopLevel()) {
10710                         break done;
10711                     }
10712                     break;
10713                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EOF:
10714                     if (curlyDepth > 0) {
10715                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightCurlyExpected);
10716                     }
10717                     else if (bracketsDepth > 0) {
10718                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightSquareBracketExpected);
10719                     }
10720                     else if (parensDepth > 0) {
10721                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightParenthesisExpected);
10722                     }
10723                     else {
10724                         return this.finish(node);
10725                     }
10726                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyL:
10727                     curlyLCount++;
10728                     curlyDepth++;
10729                     break;
10730                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyR:
10731                     curlyDepth--;
10732                     // End of at-rule, consume CurlyR and return node
10733                     if (curlyLCount > 0 && curlyDepth === 0) {
10734                         this.consumeToken();
10735                         if (bracketsDepth > 0) {
10736                             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightSquareBracketExpected);
10737                         }
10738                         else if (parensDepth > 0) {
10739                             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightParenthesisExpected);
10740                         }
10741                         break done;
10742                     }
10743                     if (curlyDepth < 0) {
10744                         // The property value has been terminated without a semicolon, and
10745                         // this is the last declaration in the ruleset.
10746                         if (parensDepth === 0 && bracketsDepth === 0) {
10747                             break done;
10748                         }
10749                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.LeftCurlyExpected);
10750                     }
10751                     break;
10752                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisL:
10753                     parensDepth++;
10754                     break;
10755                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR:
10756                     parensDepth--;
10757                     if (parensDepth < 0) {
10758                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.LeftParenthesisExpected);
10759                     }
10760                     break;
10761                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.BracketL:
10762                     bracketsDepth++;
10763                     break;
10764                 case _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.BracketR:
10765                     bracketsDepth--;
10766                     if (bracketsDepth < 0) {
10767                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.LeftSquareBracketExpected);
10768                     }
10769                     break;
10770             }
10771             this.consumeToken();
10772         }
10773         return node;
10774     };
10775     Parser.prototype._parseUnknownAtRuleName = function () {
10776         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
10777         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.AtKeyword)) {
10778             return this.finish(node);
10779         }
10780         return node;
10781     };
10782     Parser.prototype._parseOperator = function () {
10783         // these are operators for binary expressions
10784         if (this.peekDelim('/') ||
10785             this.peekDelim('*') ||
10786             this.peekDelim('+') ||
10787             this.peekDelim('-') ||
10788             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Dashmatch) ||
10789             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Includes) ||
10790             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SubstringOperator) ||
10791             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.PrefixOperator) ||
10792             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.SuffixOperator) ||
10793             this.peekDelim('=')) { // doesn't stick to the standard here
10794             var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Operator);
10795             this.consumeToken();
10796             return this.finish(node);
10797         }
10798         else {
10799             return null;
10800         }
10801     };
10802     Parser.prototype._parseUnaryOperator = function () {
10803         if (!this.peekDelim('+') && !this.peekDelim('-')) {
10804             return null;
10805         }
10806         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
10807         this.consumeToken();
10808         return this.finish(node);
10809     };
10810     Parser.prototype._parseCombinator = function () {
10811         if (this.peekDelim('>')) {
10812             var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
10813             this.consumeToken();
10814             var mark = this.mark();
10815             if (!this.hasWhitespace() && this.acceptDelim('>')) {
10816                 if (!this.hasWhitespace() && this.acceptDelim('>')) {
10817                     node.type = _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.SelectorCombinatorShadowPiercingDescendant;
10818                     return this.finish(node);
10819                 }
10820                 this.restoreAtMark(mark);
10821             }
10822             node.type = _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.SelectorCombinatorParent;
10823             return this.finish(node);
10824         }
10825         else if (this.peekDelim('+')) {
10826             var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
10827             this.consumeToken();
10828             node.type = _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.SelectorCombinatorSibling;
10829             return this.finish(node);
10830         }
10831         else if (this.peekDelim('~')) {
10832             var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
10833             this.consumeToken();
10834             node.type = _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.SelectorCombinatorAllSiblings;
10835             return this.finish(node);
10836         }
10837         else if (this.peekDelim('/')) {
10838             var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
10839             this.consumeToken();
10840             var mark = this.mark();
10841             if (!this.hasWhitespace() && this.acceptIdent('deep') && !this.hasWhitespace() && this.acceptDelim('/')) {
10842                 node.type = _cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.SelectorCombinatorShadowPiercingDescendant;
10843                 return this.finish(node);
10844             }
10845             this.restoreAtMark(mark);
10846         }
10847         return null;
10848     };
10849     Parser.prototype._parseSimpleSelector = function () {
10850         // simple_selector
10851         //  : element_name [ HASH | class | attrib | pseudo ]* | [ HASH | class | attrib | pseudo ]+ ;
10852         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.SimpleSelector);
10853         var c = 0;
10854         if (node.addChild(this._parseElementName())) {
10855             c++;
10856         }
10857         while ((c === 0 || !this.hasWhitespace()) && node.addChild(this._parseSimpleSelectorBody())) {
10858             c++;
10859         }
10860         return c > 0 ? this.finish(node) : null;
10861     };
10862     Parser.prototype._parseSimpleSelectorBody = function () {
10863         return this._parsePseudo() || this._parseHash() || this._parseClass() || this._parseAttrib();
10864     };
10865     Parser.prototype._parseSelectorIdent = function () {
10866         return this._parseIdent();
10867     };
10868     Parser.prototype._parseHash = function () {
10869         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Hash) && !this.peekDelim('#')) {
10870             return null;
10871         }
10872         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.IdentifierSelector);
10873         if (this.acceptDelim('#')) {
10874             if (this.hasWhitespace() || !node.addChild(this._parseSelectorIdent())) {
10875                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.IdentifierExpected);
10876             }
10877         }
10878         else {
10879             this.consumeToken(); // TokenType.Hash
10880         }
10881         return this.finish(node);
10882     };
10883     Parser.prototype._parseClass = function () {
10884         // class: '.' IDENT ;
10885         if (!this.peekDelim('.')) {
10886             return null;
10887         }
10888         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.ClassSelector);
10889         this.consumeToken(); // '.'
10890         if (this.hasWhitespace() || !node.addChild(this._parseSelectorIdent())) {
10891             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.IdentifierExpected);
10892         }
10893         return this.finish(node);
10894     };
10895     Parser.prototype._parseElementName = function () {
10896         // element_name: (ns? '|')? IDENT | '*';
10897         var pos = this.mark();
10898         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.ElementNameSelector);
10899         node.addChild(this._parseNamespacePrefix());
10900         if (!node.addChild(this._parseSelectorIdent()) && !this.acceptDelim('*')) {
10901             this.restoreAtMark(pos);
10902             return null;
10903         }
10904         return this.finish(node);
10905     };
10906     Parser.prototype._parseNamespacePrefix = function () {
10907         var pos = this.mark();
10908         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.NamespacePrefix);
10909         if (!node.addChild(this._parseIdent()) && !this.acceptDelim('*')) {
10910             // ns is optional
10911         }
10912         if (!this.acceptDelim('|')) {
10913             this.restoreAtMark(pos);
10914             return null;
10915         }
10916         return this.finish(node);
10917     };
10918     Parser.prototype._parseAttrib = function () {
10919         // attrib : '[' S* IDENT S* [ [ '=' | INCLUDES | DASHMATCH ] S*   [ IDENT | STRING ] S* ]? ']'
10920         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.BracketL)) {
10921             return null;
10922         }
10923         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.AttributeSelector);
10924         this.consumeToken(); // BracketL
10925         // Optional attrib namespace
10926         node.setNamespacePrefix(this._parseNamespacePrefix());
10927         if (!node.setIdentifier(this._parseIdent())) {
10928             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.IdentifierExpected);
10929         }
10930         if (node.setOperator(this._parseOperator())) {
10931             node.setValue(this._parseBinaryExpr());
10932             this.acceptIdent('i'); // case insensitive matching
10933         }
10934         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.BracketR)) {
10935             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightSquareBracketExpected);
10936         }
10937         return this.finish(node);
10938     };
10939     Parser.prototype._parsePseudo = function () {
10940         var _this = this;
10941         // pseudo: ':' [ IDENT | FUNCTION S* [IDENT S*]? ')' ]
10942         var node = this._tryParsePseudoIdentifier();
10943         if (node) {
10944             if (!this.hasWhitespace() && this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisL)) {
10945                 var tryAsSelector = function () {
10946                     var selectors = _this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
10947                     if (!selectors.addChild(_this._parseSelector(false))) {
10948                         return null;
10949                     }
10950                     while (_this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Comma) && selectors.addChild(_this._parseSelector(false))) {
10951                         // loop
10952                     }
10953                     if (_this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR)) {
10954                         return _this.finish(selectors);
10955                     }
10956                     return null;
10957                 };
10958                 node.addChild(this.try(tryAsSelector) || this._parseBinaryExpr());
10959                 if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR)) {
10960                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightParenthesisExpected);
10961                 }
10962             }
10963             return this.finish(node);
10964         }
10965         return null;
10966     };
10967     Parser.prototype._tryParsePseudoIdentifier = function () {
10968         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Colon)) {
10969             return null;
10970         }
10971         var pos = this.mark();
10972         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.PseudoSelector);
10973         this.consumeToken(); // Colon
10974         if (this.hasWhitespace()) {
10975             this.restoreAtMark(pos);
10976             return null;
10977         }
10978         // optional, support ::
10979         this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Colon);
10980         if (this.hasWhitespace() || !node.addChild(this._parseIdent())) {
10981             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.IdentifierExpected);
10982         }
10983         return this.finish(node);
10984     };
10985     Parser.prototype._tryParsePrio = function () {
10986         var mark = this.mark();
10987         var prio = this._parsePrio();
10988         if (prio) {
10989             return prio;
10990         }
10991         this.restoreAtMark(mark);
10992         return null;
10993     };
10994     Parser.prototype._parsePrio = function () {
10995         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Exclamation)) {
10996             return null;
10997         }
10998         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Prio);
10999         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Exclamation) && this.acceptIdent('important')) {
11000             return this.finish(node);
11001         }
11002         return null;
11003     };
11004     Parser.prototype._parseExpr = function (stopOnComma) {
11005         if (stopOnComma === void 0) { stopOnComma = false; }
11006         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Expression);
11007         if (!node.addChild(this._parseBinaryExpr())) {
11008             return null;
11009         }
11010         while (true) {
11011             if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Comma)) { // optional
11012                 if (stopOnComma) {
11013                     return this.finish(node);
11014                 }
11015                 this.consumeToken();
11016             }
11017             if (!node.addChild(this._parseBinaryExpr())) {
11018                 break;
11019             }
11020         }
11021         return this.finish(node);
11022     };
11023     Parser.prototype._parseNamedLine = function () {
11024         // https://www.w3.org/TR/css-grid-1/#named-lines
11025         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.BracketL)) {
11026             return null;
11027         }
11028         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.GridLine);
11029         this.consumeToken();
11030         while (node.addChild(this._parseIdent())) {
11031             // repeat
11032         }
11033         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.BracketR)) {
11034             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightSquareBracketExpected);
11035         }
11036         return this.finish(node);
11037     };
11038     Parser.prototype._parseBinaryExpr = function (preparsedLeft, preparsedOper) {
11039         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.BinaryExpression);
11040         if (!node.setLeft((preparsedLeft || this._parseTerm()))) {
11041             return null;
11042         }
11043         if (!node.setOperator(preparsedOper || this._parseOperator())) {
11044             return this.finish(node);
11045         }
11046         if (!node.setRight(this._parseTerm())) {
11047             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.TermExpected);
11048         }
11049         // things needed for multiple binary expressions
11050         node = this.finish(node);
11051         var operator = this._parseOperator();
11052         if (operator) {
11053             node = this._parseBinaryExpr(node, operator);
11054         }
11055         return this.finish(node);
11056     };
11057     Parser.prototype._parseTerm = function () {
11058         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Term);
11059         node.setOperator(this._parseUnaryOperator()); // optional
11060         if (node.setExpression(this._parseTermExpression())) {
11061             return this.finish(node);
11062         }
11063         return null;
11064     };
11065     Parser.prototype._parseTermExpression = function () {
11066         return this._parseURILiteral() || // url before function
11067             this._parseFunction() || // function before ident
11068             this._parseIdent() ||
11069             this._parseStringLiteral() ||
11070             this._parseNumeric() ||
11071             this._parseHexColor() ||
11072             this._parseOperation() ||
11073             this._parseNamedLine();
11074     };
11075     Parser.prototype._parseOperation = function () {
11076         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisL)) {
11077             return null;
11078         }
11079         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
11080         this.consumeToken(); // ParenthesisL
11081         node.addChild(this._parseExpr());
11082         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR)) {
11083             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightParenthesisExpected);
11084         }
11085         return this.finish(node);
11086     };
11087     Parser.prototype._parseNumeric = function () {
11088         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Num) ||
11089             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Percentage) ||
11090             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Resolution) ||
11091             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Length) ||
11092             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EMS) ||
11093             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EXS) ||
11094             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Angle) ||
11095             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Time) ||
11096             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Dimension) ||
11097             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Freq)) {
11098             var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NumericValue);
11099             this.consumeToken();
11100             return this.finish(node);
11101         }
11102         return null;
11103     };
11104     Parser.prototype._parseStringLiteral = function () {
11105         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.String) && !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.BadString)) {
11106             return null;
11107         }
11108         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.StringLiteral);
11109         this.consumeToken();
11110         return this.finish(node);
11111     };
11112     Parser.prototype._parseURILiteral = function () {
11113         if (!this.peekRegExp(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Ident, /^url(-prefix)?$/i)) {
11114             return null;
11115         }
11116         var pos = this.mark();
11117         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.URILiteral);
11118         this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Ident);
11119         if (this.hasWhitespace() || !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisL)) {
11120             this.restoreAtMark(pos);
11121             return null;
11122         }
11123         this.scanner.inURL = true;
11124         this.consumeToken(); // consume ()
11125         node.addChild(this._parseURLArgument()); // argument is optional
11126         this.scanner.inURL = false;
11127         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR)) {
11128             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightParenthesisExpected);
11129         }
11130         return this.finish(node);
11131     };
11132     Parser.prototype._parseURLArgument = function () {
11133         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Node);
11134         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.String) && !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.BadString) && !this.acceptUnquotedString()) {
11135             return null;
11136         }
11137         return this.finish(node);
11138     };
11139     Parser.prototype._parseIdent = function (referenceTypes) {
11140         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Ident)) {
11141             return null;
11142         }
11143         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Identifier);
11144         if (referenceTypes) {
11145             node.referenceTypes = referenceTypes;
11146         }
11147         node.isCustomProperty = this.peekRegExp(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Ident, /^--/);
11148         this.consumeToken();
11149         return this.finish(node);
11150     };
11151     Parser.prototype._parseFunction = function () {
11152         var pos = this.mark();
11153         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Function);
11154         if (!node.setIdentifier(this._parseFunctionIdentifier())) {
11155             return null;
11156         }
11157         if (this.hasWhitespace() || !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisL)) {
11158             this.restoreAtMark(pos);
11159             return null;
11160         }
11161         if (node.getArguments().addChild(this._parseFunctionArgument())) {
11162             while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Comma)) {
11163                 if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR)) {
11164                     break;
11165                 }
11166                 if (!node.getArguments().addChild(this._parseFunctionArgument())) {
11167                     this.markError(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.ExpressionExpected);
11168                 }
11169             }
11170         }
11171         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.ParenthesisR)) {
11172             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_2__.ParseError.RightParenthesisExpected);
11173         }
11174         return this.finish(node);
11175     };
11176     Parser.prototype._parseFunctionIdentifier = function () {
11177         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Ident)) {
11178             return null;
11179         }
11180         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.Identifier);
11181         node.referenceTypes = [_cssNodes__WEBPACK_IMPORTED_MODULE_1__.ReferenceType.Function];
11182         if (this.acceptIdent('progid')) {
11183             // support for IE7 specific filters: 'progid:DXImageTransform.Microsoft.MotionBlur(strength=13, direction=310)'
11184             if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Colon)) {
11185                 while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Ident) && this.acceptDelim('.')) {
11186                     // loop
11187                 }
11188             }
11189             return this.finish(node);
11190         }
11191         this.consumeToken();
11192         return this.finish(node);
11193     };
11194     Parser.prototype._parseFunctionArgument = function () {
11195         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.FunctionArgument);
11196         if (node.setValue(this._parseExpr(true))) {
11197             return this.finish(node);
11198         }
11199         return null;
11200     };
11201     Parser.prototype._parseHexColor = function () {
11202         if (this.peekRegExp(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Hash, /^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/g)) {
11203             var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_1__.HexColorValue);
11204             this.consumeToken();
11205             return this.finish(node);
11206         }
11207         else {
11208             return null;
11209         }
11210     };
11211     return Parser;
11212 }());
11213
11214
11215
11216 /***/ }),
11217 /* 73 */
11218 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
11219
11220 __webpack_require__.r(__webpack_exports__);
11221 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
11222 /* harmony export */   "TokenType": () => /* binding */ TokenType,
11223 /* harmony export */   "MultiLineStream": () => /* binding */ MultiLineStream,
11224 /* harmony export */   "Scanner": () => /* binding */ Scanner
11225 /* harmony export */ });
11226 /*---------------------------------------------------------------------------------------------
11227  *  Copyright (c) Microsoft Corporation. All rights reserved.
11228  *  Licensed under the MIT License. See License.txt in the project root for license information.
11229  *--------------------------------------------------------------------------------------------*/
11230
11231 var TokenType;
11232 (function (TokenType) {
11233     TokenType[TokenType["Ident"] = 0] = "Ident";
11234     TokenType[TokenType["AtKeyword"] = 1] = "AtKeyword";
11235     TokenType[TokenType["String"] = 2] = "String";
11236     TokenType[TokenType["BadString"] = 3] = "BadString";
11237     TokenType[TokenType["UnquotedString"] = 4] = "UnquotedString";
11238     TokenType[TokenType["Hash"] = 5] = "Hash";
11239     TokenType[TokenType["Num"] = 6] = "Num";
11240     TokenType[TokenType["Percentage"] = 7] = "Percentage";
11241     TokenType[TokenType["Dimension"] = 8] = "Dimension";
11242     TokenType[TokenType["UnicodeRange"] = 9] = "UnicodeRange";
11243     TokenType[TokenType["CDO"] = 10] = "CDO";
11244     TokenType[TokenType["CDC"] = 11] = "CDC";
11245     TokenType[TokenType["Colon"] = 12] = "Colon";
11246     TokenType[TokenType["SemiColon"] = 13] = "SemiColon";
11247     TokenType[TokenType["CurlyL"] = 14] = "CurlyL";
11248     TokenType[TokenType["CurlyR"] = 15] = "CurlyR";
11249     TokenType[TokenType["ParenthesisL"] = 16] = "ParenthesisL";
11250     TokenType[TokenType["ParenthesisR"] = 17] = "ParenthesisR";
11251     TokenType[TokenType["BracketL"] = 18] = "BracketL";
11252     TokenType[TokenType["BracketR"] = 19] = "BracketR";
11253     TokenType[TokenType["Whitespace"] = 20] = "Whitespace";
11254     TokenType[TokenType["Includes"] = 21] = "Includes";
11255     TokenType[TokenType["Dashmatch"] = 22] = "Dashmatch";
11256     TokenType[TokenType["SubstringOperator"] = 23] = "SubstringOperator";
11257     TokenType[TokenType["PrefixOperator"] = 24] = "PrefixOperator";
11258     TokenType[TokenType["SuffixOperator"] = 25] = "SuffixOperator";
11259     TokenType[TokenType["Delim"] = 26] = "Delim";
11260     TokenType[TokenType["EMS"] = 27] = "EMS";
11261     TokenType[TokenType["EXS"] = 28] = "EXS";
11262     TokenType[TokenType["Length"] = 29] = "Length";
11263     TokenType[TokenType["Angle"] = 30] = "Angle";
11264     TokenType[TokenType["Time"] = 31] = "Time";
11265     TokenType[TokenType["Freq"] = 32] = "Freq";
11266     TokenType[TokenType["Exclamation"] = 33] = "Exclamation";
11267     TokenType[TokenType["Resolution"] = 34] = "Resolution";
11268     TokenType[TokenType["Comma"] = 35] = "Comma";
11269     TokenType[TokenType["Charset"] = 36] = "Charset";
11270     TokenType[TokenType["EscapedJavaScript"] = 37] = "EscapedJavaScript";
11271     TokenType[TokenType["BadEscapedJavaScript"] = 38] = "BadEscapedJavaScript";
11272     TokenType[TokenType["Comment"] = 39] = "Comment";
11273     TokenType[TokenType["SingleLineComment"] = 40] = "SingleLineComment";
11274     TokenType[TokenType["EOF"] = 41] = "EOF";
11275     TokenType[TokenType["CustomToken"] = 42] = "CustomToken";
11276 })(TokenType || (TokenType = {}));
11277 var MultiLineStream = /** @class */ (function () {
11278     function MultiLineStream(source) {
11279         this.source = source;
11280         this.len = source.length;
11281         this.position = 0;
11282     }
11283     MultiLineStream.prototype.substring = function (from, to) {
11284         if (to === void 0) { to = this.position; }
11285         return this.source.substring(from, to);
11286     };
11287     MultiLineStream.prototype.eos = function () {
11288         return this.len <= this.position;
11289     };
11290     MultiLineStream.prototype.pos = function () {
11291         return this.position;
11292     };
11293     MultiLineStream.prototype.goBackTo = function (pos) {
11294         this.position = pos;
11295     };
11296     MultiLineStream.prototype.goBack = function (n) {
11297         this.position -= n;
11298     };
11299     MultiLineStream.prototype.advance = function (n) {
11300         this.position += n;
11301     };
11302     MultiLineStream.prototype.nextChar = function () {
11303         return this.source.charCodeAt(this.position++) || 0;
11304     };
11305     MultiLineStream.prototype.peekChar = function (n) {
11306         if (n === void 0) { n = 0; }
11307         return this.source.charCodeAt(this.position + n) || 0;
11308     };
11309     MultiLineStream.prototype.lookbackChar = function (n) {
11310         if (n === void 0) { n = 0; }
11311         return this.source.charCodeAt(this.position - n) || 0;
11312     };
11313     MultiLineStream.prototype.advanceIfChar = function (ch) {
11314         if (ch === this.source.charCodeAt(this.position)) {
11315             this.position++;
11316             return true;
11317         }
11318         return false;
11319     };
11320     MultiLineStream.prototype.advanceIfChars = function (ch) {
11321         if (this.position + ch.length > this.source.length) {
11322             return false;
11323         }
11324         var i = 0;
11325         for (; i < ch.length; i++) {
11326             if (this.source.charCodeAt(this.position + i) !== ch[i]) {
11327                 return false;
11328             }
11329         }
11330         this.advance(i);
11331         return true;
11332     };
11333     MultiLineStream.prototype.advanceWhileChar = function (condition) {
11334         var posNow = this.position;
11335         while (this.position < this.len && condition(this.source.charCodeAt(this.position))) {
11336             this.position++;
11337         }
11338         return this.position - posNow;
11339     };
11340     return MultiLineStream;
11341 }());
11342
11343 var _a = 'a'.charCodeAt(0);
11344 var _f = 'f'.charCodeAt(0);
11345 var _z = 'z'.charCodeAt(0);
11346 var _A = 'A'.charCodeAt(0);
11347 var _F = 'F'.charCodeAt(0);
11348 var _Z = 'Z'.charCodeAt(0);
11349 var _0 = '0'.charCodeAt(0);
11350 var _9 = '9'.charCodeAt(0);
11351 var _TLD = '~'.charCodeAt(0);
11352 var _HAT = '^'.charCodeAt(0);
11353 var _EQS = '='.charCodeAt(0);
11354 var _PIP = '|'.charCodeAt(0);
11355 var _MIN = '-'.charCodeAt(0);
11356 var _USC = '_'.charCodeAt(0);
11357 var _PRC = '%'.charCodeAt(0);
11358 var _MUL = '*'.charCodeAt(0);
11359 var _LPA = '('.charCodeAt(0);
11360 var _RPA = ')'.charCodeAt(0);
11361 var _LAN = '<'.charCodeAt(0);
11362 var _RAN = '>'.charCodeAt(0);
11363 var _ATS = '@'.charCodeAt(0);
11364 var _HSH = '#'.charCodeAt(0);
11365 var _DLR = '$'.charCodeAt(0);
11366 var _BSL = '\\'.charCodeAt(0);
11367 var _FSL = '/'.charCodeAt(0);
11368 var _NWL = '\n'.charCodeAt(0);
11369 var _CAR = '\r'.charCodeAt(0);
11370 var _LFD = '\f'.charCodeAt(0);
11371 var _DQO = '"'.charCodeAt(0);
11372 var _SQO = '\''.charCodeAt(0);
11373 var _WSP = ' '.charCodeAt(0);
11374 var _TAB = '\t'.charCodeAt(0);
11375 var _SEM = ';'.charCodeAt(0);
11376 var _COL = ':'.charCodeAt(0);
11377 var _CUL = '{'.charCodeAt(0);
11378 var _CUR = '}'.charCodeAt(0);
11379 var _BRL = '['.charCodeAt(0);
11380 var _BRR = ']'.charCodeAt(0);
11381 var _CMA = ','.charCodeAt(0);
11382 var _DOT = '.'.charCodeAt(0);
11383 var _BNG = '!'.charCodeAt(0);
11384 var staticTokenTable = {};
11385 staticTokenTable[_SEM] = TokenType.SemiColon;
11386 staticTokenTable[_COL] = TokenType.Colon;
11387 staticTokenTable[_CUL] = TokenType.CurlyL;
11388 staticTokenTable[_CUR] = TokenType.CurlyR;
11389 staticTokenTable[_BRR] = TokenType.BracketR;
11390 staticTokenTable[_BRL] = TokenType.BracketL;
11391 staticTokenTable[_LPA] = TokenType.ParenthesisL;
11392 staticTokenTable[_RPA] = TokenType.ParenthesisR;
11393 staticTokenTable[_CMA] = TokenType.Comma;
11394 var staticUnitTable = {};
11395 staticUnitTable['em'] = TokenType.EMS;
11396 staticUnitTable['ex'] = TokenType.EXS;
11397 staticUnitTable['px'] = TokenType.Length;
11398 staticUnitTable['cm'] = TokenType.Length;
11399 staticUnitTable['mm'] = TokenType.Length;
11400 staticUnitTable['in'] = TokenType.Length;
11401 staticUnitTable['pt'] = TokenType.Length;
11402 staticUnitTable['pc'] = TokenType.Length;
11403 staticUnitTable['deg'] = TokenType.Angle;
11404 staticUnitTable['rad'] = TokenType.Angle;
11405 staticUnitTable['grad'] = TokenType.Angle;
11406 staticUnitTable['ms'] = TokenType.Time;
11407 staticUnitTable['s'] = TokenType.Time;
11408 staticUnitTable['hz'] = TokenType.Freq;
11409 staticUnitTable['khz'] = TokenType.Freq;
11410 staticUnitTable['%'] = TokenType.Percentage;
11411 staticUnitTable['fr'] = TokenType.Percentage;
11412 staticUnitTable['dpi'] = TokenType.Resolution;
11413 staticUnitTable['dpcm'] = TokenType.Resolution;
11414 var Scanner = /** @class */ (function () {
11415     function Scanner() {
11416         this.stream = new MultiLineStream('');
11417         this.ignoreComment = true;
11418         this.ignoreWhitespace = true;
11419         this.inURL = false;
11420     }
11421     Scanner.prototype.setSource = function (input) {
11422         this.stream = new MultiLineStream(input);
11423     };
11424     Scanner.prototype.finishToken = function (offset, type, text) {
11425         return {
11426             offset: offset,
11427             len: this.stream.pos() - offset,
11428             type: type,
11429             text: text || this.stream.substring(offset)
11430         };
11431     };
11432     Scanner.prototype.substring = function (offset, len) {
11433         return this.stream.substring(offset, offset + len);
11434     };
11435     Scanner.prototype.pos = function () {
11436         return this.stream.pos();
11437     };
11438     Scanner.prototype.goBackTo = function (pos) {
11439         this.stream.goBackTo(pos);
11440     };
11441     Scanner.prototype.scanUnquotedString = function () {
11442         var offset = this.stream.pos();
11443         var content = [];
11444         if (this._unquotedString(content)) {
11445             return this.finishToken(offset, TokenType.UnquotedString, content.join(''));
11446         }
11447         return null;
11448     };
11449     Scanner.prototype.scan = function () {
11450         // processes all whitespaces and comments
11451         var triviaToken = this.trivia();
11452         if (triviaToken !== null) {
11453             return triviaToken;
11454         }
11455         var offset = this.stream.pos();
11456         // End of file/input
11457         if (this.stream.eos()) {
11458             return this.finishToken(offset, TokenType.EOF);
11459         }
11460         return this.scanNext(offset);
11461     };
11462     Scanner.prototype.scanNext = function (offset) {
11463         // CDO <!--
11464         if (this.stream.advanceIfChars([_LAN, _BNG, _MIN, _MIN])) {
11465             return this.finishToken(offset, TokenType.CDO);
11466         }
11467         // CDC -->
11468         if (this.stream.advanceIfChars([_MIN, _MIN, _RAN])) {
11469             return this.finishToken(offset, TokenType.CDC);
11470         }
11471         var content = [];
11472         if (this.ident(content)) {
11473             return this.finishToken(offset, TokenType.Ident, content.join(''));
11474         }
11475         // at-keyword
11476         if (this.stream.advanceIfChar(_ATS)) {
11477             content = ['@'];
11478             if (this._name(content)) {
11479                 var keywordText = content.join('');
11480                 if (keywordText === '@charset') {
11481                     return this.finishToken(offset, TokenType.Charset, keywordText);
11482                 }
11483                 return this.finishToken(offset, TokenType.AtKeyword, keywordText);
11484             }
11485             else {
11486                 return this.finishToken(offset, TokenType.Delim);
11487             }
11488         }
11489         // hash
11490         if (this.stream.advanceIfChar(_HSH)) {
11491             content = ['#'];
11492             if (this._name(content)) {
11493                 return this.finishToken(offset, TokenType.Hash, content.join(''));
11494             }
11495             else {
11496                 return this.finishToken(offset, TokenType.Delim);
11497             }
11498         }
11499         // Important
11500         if (this.stream.advanceIfChar(_BNG)) {
11501             return this.finishToken(offset, TokenType.Exclamation);
11502         }
11503         // Numbers
11504         if (this._number()) {
11505             var pos = this.stream.pos();
11506             content = [this.stream.substring(offset, pos)];
11507             if (this.stream.advanceIfChar(_PRC)) {
11508                 // Percentage 43%
11509                 return this.finishToken(offset, TokenType.Percentage);
11510             }
11511             else if (this.ident(content)) {
11512                 var dim = this.stream.substring(pos).toLowerCase();
11513                 var tokenType_1 = staticUnitTable[dim];
11514                 if (typeof tokenType_1 !== 'undefined') {
11515                     // Known dimension 43px
11516                     return this.finishToken(offset, tokenType_1, content.join(''));
11517                 }
11518                 else {
11519                     // Unknown dimension 43ft
11520                     return this.finishToken(offset, TokenType.Dimension, content.join(''));
11521                 }
11522             }
11523             return this.finishToken(offset, TokenType.Num);
11524         }
11525         // String, BadString
11526         content = [];
11527         var tokenType = this._string(content);
11528         if (tokenType !== null) {
11529             return this.finishToken(offset, tokenType, content.join(''));
11530         }
11531         // single character tokens
11532         tokenType = staticTokenTable[this.stream.peekChar()];
11533         if (typeof tokenType !== 'undefined') {
11534             this.stream.advance(1);
11535             return this.finishToken(offset, tokenType);
11536         }
11537         // includes ~=
11538         if (this.stream.peekChar(0) === _TLD && this.stream.peekChar(1) === _EQS) {
11539             this.stream.advance(2);
11540             return this.finishToken(offset, TokenType.Includes);
11541         }
11542         // DashMatch |=
11543         if (this.stream.peekChar(0) === _PIP && this.stream.peekChar(1) === _EQS) {
11544             this.stream.advance(2);
11545             return this.finishToken(offset, TokenType.Dashmatch);
11546         }
11547         // Substring operator *=
11548         if (this.stream.peekChar(0) === _MUL && this.stream.peekChar(1) === _EQS) {
11549             this.stream.advance(2);
11550             return this.finishToken(offset, TokenType.SubstringOperator);
11551         }
11552         // Substring operator ^=
11553         if (this.stream.peekChar(0) === _HAT && this.stream.peekChar(1) === _EQS) {
11554             this.stream.advance(2);
11555             return this.finishToken(offset, TokenType.PrefixOperator);
11556         }
11557         // Substring operator $=
11558         if (this.stream.peekChar(0) === _DLR && this.stream.peekChar(1) === _EQS) {
11559             this.stream.advance(2);
11560             return this.finishToken(offset, TokenType.SuffixOperator);
11561         }
11562         // Delim
11563         this.stream.nextChar();
11564         return this.finishToken(offset, TokenType.Delim);
11565     };
11566     Scanner.prototype.trivia = function () {
11567         while (true) {
11568             var offset = this.stream.pos();
11569             if (this._whitespace()) {
11570                 if (!this.ignoreWhitespace) {
11571                     return this.finishToken(offset, TokenType.Whitespace);
11572                 }
11573             }
11574             else if (this.comment()) {
11575                 if (!this.ignoreComment) {
11576                     return this.finishToken(offset, TokenType.Comment);
11577                 }
11578             }
11579             else {
11580                 return null;
11581             }
11582         }
11583     };
11584     Scanner.prototype.comment = function () {
11585         if (this.stream.advanceIfChars([_FSL, _MUL])) {
11586             var success_1 = false, hot_1 = false;
11587             this.stream.advanceWhileChar(function (ch) {
11588                 if (hot_1 && ch === _FSL) {
11589                     success_1 = true;
11590                     return false;
11591                 }
11592                 hot_1 = ch === _MUL;
11593                 return true;
11594             });
11595             if (success_1) {
11596                 this.stream.advance(1);
11597             }
11598             return true;
11599         }
11600         return false;
11601     };
11602     Scanner.prototype._number = function () {
11603         var npeek = 0, ch;
11604         if (this.stream.peekChar() === _DOT) {
11605             npeek = 1;
11606         }
11607         ch = this.stream.peekChar(npeek);
11608         if (ch >= _0 && ch <= _9) {
11609             this.stream.advance(npeek + 1);
11610             this.stream.advanceWhileChar(function (ch) {
11611                 return ch >= _0 && ch <= _9 || npeek === 0 && ch === _DOT;
11612             });
11613             return true;
11614         }
11615         return false;
11616     };
11617     Scanner.prototype._newline = function (result) {
11618         var ch = this.stream.peekChar();
11619         switch (ch) {
11620             case _CAR:
11621             case _LFD:
11622             case _NWL:
11623                 this.stream.advance(1);
11624                 result.push(String.fromCharCode(ch));
11625                 if (ch === _CAR && this.stream.advanceIfChar(_NWL)) {
11626                     result.push('\n');
11627                 }
11628                 return true;
11629         }
11630         return false;
11631     };
11632     Scanner.prototype._escape = function (result, includeNewLines) {
11633         var ch = this.stream.peekChar();
11634         if (ch === _BSL) {
11635             this.stream.advance(1);
11636             ch = this.stream.peekChar();
11637             var hexNumCount = 0;
11638             while (hexNumCount < 6 && (ch >= _0 && ch <= _9 || ch >= _a && ch <= _f || ch >= _A && ch <= _F)) {
11639                 this.stream.advance(1);
11640                 ch = this.stream.peekChar();
11641                 hexNumCount++;
11642             }
11643             if (hexNumCount > 0) {
11644                 try {
11645                     var hexVal = parseInt(this.stream.substring(this.stream.pos() - hexNumCount), 16);
11646                     if (hexVal) {
11647                         result.push(String.fromCharCode(hexVal));
11648                     }
11649                 }
11650                 catch (e) {
11651                     // ignore
11652                 }
11653                 // optional whitespace or new line, not part of result text
11654                 if (ch === _WSP || ch === _TAB) {
11655                     this.stream.advance(1);
11656                 }
11657                 else {
11658                     this._newline([]);
11659                 }
11660                 return true;
11661             }
11662             if (ch !== _CAR && ch !== _LFD && ch !== _NWL) {
11663                 this.stream.advance(1);
11664                 result.push(String.fromCharCode(ch));
11665                 return true;
11666             }
11667             else if (includeNewLines) {
11668                 return this._newline(result);
11669             }
11670         }
11671         return false;
11672     };
11673     Scanner.prototype._stringChar = function (closeQuote, result) {
11674         // not closeQuote, not backslash, not newline
11675         var ch = this.stream.peekChar();
11676         if (ch !== 0 && ch !== closeQuote && ch !== _BSL && ch !== _CAR && ch !== _LFD && ch !== _NWL) {
11677             this.stream.advance(1);
11678             result.push(String.fromCharCode(ch));
11679             return true;
11680         }
11681         return false;
11682     };
11683     Scanner.prototype._string = function (result) {
11684         if (this.stream.peekChar() === _SQO || this.stream.peekChar() === _DQO) {
11685             var closeQuote = this.stream.nextChar();
11686             result.push(String.fromCharCode(closeQuote));
11687             while (this._stringChar(closeQuote, result) || this._escape(result, true)) {
11688                 // loop
11689             }
11690             if (this.stream.peekChar() === closeQuote) {
11691                 this.stream.nextChar();
11692                 result.push(String.fromCharCode(closeQuote));
11693                 return TokenType.String;
11694             }
11695             else {
11696                 return TokenType.BadString;
11697             }
11698         }
11699         return null;
11700     };
11701     Scanner.prototype._unquotedChar = function (result) {
11702         // not closeQuote, not backslash, not newline
11703         var ch = this.stream.peekChar();
11704         if (ch !== 0 && ch !== _BSL && ch !== _SQO && ch !== _DQO && ch !== _LPA && ch !== _RPA && ch !== _WSP && ch !== _TAB && ch !== _NWL && ch !== _LFD && ch !== _CAR) {
11705             this.stream.advance(1);
11706             result.push(String.fromCharCode(ch));
11707             return true;
11708         }
11709         return false;
11710     };
11711     Scanner.prototype._unquotedString = function (result) {
11712         var hasContent = false;
11713         while (this._unquotedChar(result) || this._escape(result)) {
11714             hasContent = true;
11715         }
11716         return hasContent;
11717     };
11718     Scanner.prototype._whitespace = function () {
11719         var n = this.stream.advanceWhileChar(function (ch) {
11720             return ch === _WSP || ch === _TAB || ch === _NWL || ch === _LFD || ch === _CAR;
11721         });
11722         return n > 0;
11723     };
11724     Scanner.prototype._name = function (result) {
11725         var matched = false;
11726         while (this._identChar(result) || this._escape(result)) {
11727             matched = true;
11728         }
11729         return matched;
11730     };
11731     Scanner.prototype.ident = function (result) {
11732         var pos = this.stream.pos();
11733         var hasMinus = this._minus(result);
11734         if (hasMinus && this._minus(result) /* -- */) {
11735             if (this._identFirstChar(result) || this._escape(result)) {
11736                 while (this._identChar(result) || this._escape(result)) {
11737                     // loop
11738                 }
11739                 return true;
11740             }
11741         }
11742         else if (this._identFirstChar(result) || this._escape(result)) {
11743             while (this._identChar(result) || this._escape(result)) {
11744                 // loop
11745             }
11746             return true;
11747         }
11748         this.stream.goBackTo(pos);
11749         return false;
11750     };
11751     Scanner.prototype._identFirstChar = function (result) {
11752         var ch = this.stream.peekChar();
11753         if (ch === _USC || // _
11754             ch >= _a && ch <= _z || // a-z
11755             ch >= _A && ch <= _Z || // A-Z
11756             ch >= 0x80 && ch <= 0xFFFF) { // nonascii
11757             this.stream.advance(1);
11758             result.push(String.fromCharCode(ch));
11759             return true;
11760         }
11761         return false;
11762     };
11763     Scanner.prototype._minus = function (result) {
11764         var ch = this.stream.peekChar();
11765         if (ch === _MIN) {
11766             this.stream.advance(1);
11767             result.push(String.fromCharCode(ch));
11768             return true;
11769         }
11770         return false;
11771     };
11772     Scanner.prototype._identChar = function (result) {
11773         var ch = this.stream.peekChar();
11774         if (ch === _USC || // _
11775             ch === _MIN || // -
11776             ch >= _a && ch <= _z || // a-z
11777             ch >= _A && ch <= _Z || // A-Z
11778             ch >= _0 && ch <= _9 || // 0/9
11779             ch >= 0x80 && ch <= 0xFFFF) { // nonascii
11780             this.stream.advance(1);
11781             result.push(String.fromCharCode(ch));
11782             return true;
11783         }
11784         return false;
11785     };
11786     return Scanner;
11787 }());
11788
11789
11790
11791 /***/ }),
11792 /* 74 */
11793 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
11794
11795 __webpack_require__.r(__webpack_exports__);
11796 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
11797 /* harmony export */   "NodeType": () => /* binding */ NodeType,
11798 /* harmony export */   "ReferenceType": () => /* binding */ ReferenceType,
11799 /* harmony export */   "getNodeAtOffset": () => /* binding */ getNodeAtOffset,
11800 /* harmony export */   "getNodePath": () => /* binding */ getNodePath,
11801 /* harmony export */   "getParentDeclaration": () => /* binding */ getParentDeclaration,
11802 /* harmony export */   "Node": () => /* binding */ Node,
11803 /* harmony export */   "Nodelist": () => /* binding */ Nodelist,
11804 /* harmony export */   "Identifier": () => /* binding */ Identifier,
11805 /* harmony export */   "Stylesheet": () => /* binding */ Stylesheet,
11806 /* harmony export */   "Declarations": () => /* binding */ Declarations,
11807 /* harmony export */   "BodyDeclaration": () => /* binding */ BodyDeclaration,
11808 /* harmony export */   "RuleSet": () => /* binding */ RuleSet,
11809 /* harmony export */   "Selector": () => /* binding */ Selector,
11810 /* harmony export */   "SimpleSelector": () => /* binding */ SimpleSelector,
11811 /* harmony export */   "AtApplyRule": () => /* binding */ AtApplyRule,
11812 /* harmony export */   "AbstractDeclaration": () => /* binding */ AbstractDeclaration,
11813 /* harmony export */   "CustomPropertySet": () => /* binding */ CustomPropertySet,
11814 /* harmony export */   "Declaration": () => /* binding */ Declaration,
11815 /* harmony export */   "CustomPropertyDeclaration": () => /* binding */ CustomPropertyDeclaration,
11816 /* harmony export */   "Property": () => /* binding */ Property,
11817 /* harmony export */   "Invocation": () => /* binding */ Invocation,
11818 /* harmony export */   "Function": () => /* binding */ Function,
11819 /* harmony export */   "FunctionParameter": () => /* binding */ FunctionParameter,
11820 /* harmony export */   "FunctionArgument": () => /* binding */ FunctionArgument,
11821 /* harmony export */   "IfStatement": () => /* binding */ IfStatement,
11822 /* harmony export */   "ForStatement": () => /* binding */ ForStatement,
11823 /* harmony export */   "EachStatement": () => /* binding */ EachStatement,
11824 /* harmony export */   "WhileStatement": () => /* binding */ WhileStatement,
11825 /* harmony export */   "ElseStatement": () => /* binding */ ElseStatement,
11826 /* harmony export */   "FunctionDeclaration": () => /* binding */ FunctionDeclaration,
11827 /* harmony export */   "ViewPort": () => /* binding */ ViewPort,
11828 /* harmony export */   "FontFace": () => /* binding */ FontFace,
11829 /* harmony export */   "NestedProperties": () => /* binding */ NestedProperties,
11830 /* harmony export */   "Keyframe": () => /* binding */ Keyframe,
11831 /* harmony export */   "KeyframeSelector": () => /* binding */ KeyframeSelector,
11832 /* harmony export */   "Import": () => /* binding */ Import,
11833 /* harmony export */   "Use": () => /* binding */ Use,
11834 /* harmony export */   "ModuleConfiguration": () => /* binding */ ModuleConfiguration,
11835 /* harmony export */   "Forward": () => /* binding */ Forward,
11836 /* harmony export */   "ForwardVisibility": () => /* binding */ ForwardVisibility,
11837 /* harmony export */   "Namespace": () => /* binding */ Namespace,
11838 /* harmony export */   "Media": () => /* binding */ Media,
11839 /* harmony export */   "Supports": () => /* binding */ Supports,
11840 /* harmony export */   "Document": () => /* binding */ Document,
11841 /* harmony export */   "Medialist": () => /* binding */ Medialist,
11842 /* harmony export */   "MediaQuery": () => /* binding */ MediaQuery,
11843 /* harmony export */   "SupportsCondition": () => /* binding */ SupportsCondition,
11844 /* harmony export */   "Page": () => /* binding */ Page,
11845 /* harmony export */   "PageBoxMarginBox": () => /* binding */ PageBoxMarginBox,
11846 /* harmony export */   "Expression": () => /* binding */ Expression,
11847 /* harmony export */   "BinaryExpression": () => /* binding */ BinaryExpression,
11848 /* harmony export */   "Term": () => /* binding */ Term,
11849 /* harmony export */   "AttributeSelector": () => /* binding */ AttributeSelector,
11850 /* harmony export */   "Operator": () => /* binding */ Operator,
11851 /* harmony export */   "HexColorValue": () => /* binding */ HexColorValue,
11852 /* harmony export */   "NumericValue": () => /* binding */ NumericValue,
11853 /* harmony export */   "VariableDeclaration": () => /* binding */ VariableDeclaration,
11854 /* harmony export */   "Interpolation": () => /* binding */ Interpolation,
11855 /* harmony export */   "Variable": () => /* binding */ Variable,
11856 /* harmony export */   "ExtendsReference": () => /* binding */ ExtendsReference,
11857 /* harmony export */   "MixinContentReference": () => /* binding */ MixinContentReference,
11858 /* harmony export */   "MixinContentDeclaration": () => /* binding */ MixinContentDeclaration,
11859 /* harmony export */   "MixinReference": () => /* binding */ MixinReference,
11860 /* harmony export */   "MixinDeclaration": () => /* binding */ MixinDeclaration,
11861 /* harmony export */   "UnknownAtRule": () => /* binding */ UnknownAtRule,
11862 /* harmony export */   "ListEntry": () => /* binding */ ListEntry,
11863 /* harmony export */   "LessGuard": () => /* binding */ LessGuard,
11864 /* harmony export */   "GuardCondition": () => /* binding */ GuardCondition,
11865 /* harmony export */   "Module": () => /* binding */ Module,
11866 /* harmony export */   "Level": () => /* binding */ Level,
11867 /* harmony export */   "Marker": () => /* binding */ Marker,
11868 /* harmony export */   "ParseErrorCollector": () => /* binding */ ParseErrorCollector
11869 /* harmony export */ });
11870 /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(75);
11871 /*---------------------------------------------------------------------------------------------
11872  *  Copyright (c) Microsoft Corporation. All rights reserved.
11873  *  Licensed under the MIT License. See License.txt in the project root for license information.
11874  *--------------------------------------------------------------------------------------------*/
11875
11876 var __extends = (undefined && undefined.__extends) || (function () {
11877     var extendStatics = function (d, b) {
11878         extendStatics = Object.setPrototypeOf ||
11879             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
11880             function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
11881         return extendStatics(d, b);
11882     };
11883     return function (d, b) {
11884         extendStatics(d, b);
11885         function __() { this.constructor = d; }
11886         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
11887     };
11888 })();
11889
11890 /// <summary>
11891 /// Nodes for the css 2.1 specification. See for reference:
11892 /// http://www.w3.org/TR/CSS21/grammar.html#grammar
11893 /// </summary>
11894 var NodeType;
11895 (function (NodeType) {
11896     NodeType[NodeType["Undefined"] = 0] = "Undefined";
11897     NodeType[NodeType["Identifier"] = 1] = "Identifier";
11898     NodeType[NodeType["Stylesheet"] = 2] = "Stylesheet";
11899     NodeType[NodeType["Ruleset"] = 3] = "Ruleset";
11900     NodeType[NodeType["Selector"] = 4] = "Selector";
11901     NodeType[NodeType["SimpleSelector"] = 5] = "SimpleSelector";
11902     NodeType[NodeType["SelectorInterpolation"] = 6] = "SelectorInterpolation";
11903     NodeType[NodeType["SelectorCombinator"] = 7] = "SelectorCombinator";
11904     NodeType[NodeType["SelectorCombinatorParent"] = 8] = "SelectorCombinatorParent";
11905     NodeType[NodeType["SelectorCombinatorSibling"] = 9] = "SelectorCombinatorSibling";
11906     NodeType[NodeType["SelectorCombinatorAllSiblings"] = 10] = "SelectorCombinatorAllSiblings";
11907     NodeType[NodeType["SelectorCombinatorShadowPiercingDescendant"] = 11] = "SelectorCombinatorShadowPiercingDescendant";
11908     NodeType[NodeType["Page"] = 12] = "Page";
11909     NodeType[NodeType["PageBoxMarginBox"] = 13] = "PageBoxMarginBox";
11910     NodeType[NodeType["ClassSelector"] = 14] = "ClassSelector";
11911     NodeType[NodeType["IdentifierSelector"] = 15] = "IdentifierSelector";
11912     NodeType[NodeType["ElementNameSelector"] = 16] = "ElementNameSelector";
11913     NodeType[NodeType["PseudoSelector"] = 17] = "PseudoSelector";
11914     NodeType[NodeType["AttributeSelector"] = 18] = "AttributeSelector";
11915     NodeType[NodeType["Declaration"] = 19] = "Declaration";
11916     NodeType[NodeType["Declarations"] = 20] = "Declarations";
11917     NodeType[NodeType["Property"] = 21] = "Property";
11918     NodeType[NodeType["Expression"] = 22] = "Expression";
11919     NodeType[NodeType["BinaryExpression"] = 23] = "BinaryExpression";
11920     NodeType[NodeType["Term"] = 24] = "Term";
11921     NodeType[NodeType["Operator"] = 25] = "Operator";
11922     NodeType[NodeType["Value"] = 26] = "Value";
11923     NodeType[NodeType["StringLiteral"] = 27] = "StringLiteral";
11924     NodeType[NodeType["URILiteral"] = 28] = "URILiteral";
11925     NodeType[NodeType["EscapedValue"] = 29] = "EscapedValue";
11926     NodeType[NodeType["Function"] = 30] = "Function";
11927     NodeType[NodeType["NumericValue"] = 31] = "NumericValue";
11928     NodeType[NodeType["HexColorValue"] = 32] = "HexColorValue";
11929     NodeType[NodeType["MixinDeclaration"] = 33] = "MixinDeclaration";
11930     NodeType[NodeType["MixinReference"] = 34] = "MixinReference";
11931     NodeType[NodeType["VariableName"] = 35] = "VariableName";
11932     NodeType[NodeType["VariableDeclaration"] = 36] = "VariableDeclaration";
11933     NodeType[NodeType["Prio"] = 37] = "Prio";
11934     NodeType[NodeType["Interpolation"] = 38] = "Interpolation";
11935     NodeType[NodeType["NestedProperties"] = 39] = "NestedProperties";
11936     NodeType[NodeType["ExtendsReference"] = 40] = "ExtendsReference";
11937     NodeType[NodeType["SelectorPlaceholder"] = 41] = "SelectorPlaceholder";
11938     NodeType[NodeType["Debug"] = 42] = "Debug";
11939     NodeType[NodeType["If"] = 43] = "If";
11940     NodeType[NodeType["Else"] = 44] = "Else";
11941     NodeType[NodeType["For"] = 45] = "For";
11942     NodeType[NodeType["Each"] = 46] = "Each";
11943     NodeType[NodeType["While"] = 47] = "While";
11944     NodeType[NodeType["MixinContentReference"] = 48] = "MixinContentReference";
11945     NodeType[NodeType["MixinContentDeclaration"] = 49] = "MixinContentDeclaration";
11946     NodeType[NodeType["Media"] = 50] = "Media";
11947     NodeType[NodeType["Keyframe"] = 51] = "Keyframe";
11948     NodeType[NodeType["FontFace"] = 52] = "FontFace";
11949     NodeType[NodeType["Import"] = 53] = "Import";
11950     NodeType[NodeType["Namespace"] = 54] = "Namespace";
11951     NodeType[NodeType["Invocation"] = 55] = "Invocation";
11952     NodeType[NodeType["FunctionDeclaration"] = 56] = "FunctionDeclaration";
11953     NodeType[NodeType["ReturnStatement"] = 57] = "ReturnStatement";
11954     NodeType[NodeType["MediaQuery"] = 58] = "MediaQuery";
11955     NodeType[NodeType["FunctionParameter"] = 59] = "FunctionParameter";
11956     NodeType[NodeType["FunctionArgument"] = 60] = "FunctionArgument";
11957     NodeType[NodeType["KeyframeSelector"] = 61] = "KeyframeSelector";
11958     NodeType[NodeType["ViewPort"] = 62] = "ViewPort";
11959     NodeType[NodeType["Document"] = 63] = "Document";
11960     NodeType[NodeType["AtApplyRule"] = 64] = "AtApplyRule";
11961     NodeType[NodeType["CustomPropertyDeclaration"] = 65] = "CustomPropertyDeclaration";
11962     NodeType[NodeType["CustomPropertySet"] = 66] = "CustomPropertySet";
11963     NodeType[NodeType["ListEntry"] = 67] = "ListEntry";
11964     NodeType[NodeType["Supports"] = 68] = "Supports";
11965     NodeType[NodeType["SupportsCondition"] = 69] = "SupportsCondition";
11966     NodeType[NodeType["NamespacePrefix"] = 70] = "NamespacePrefix";
11967     NodeType[NodeType["GridLine"] = 71] = "GridLine";
11968     NodeType[NodeType["Plugin"] = 72] = "Plugin";
11969     NodeType[NodeType["UnknownAtRule"] = 73] = "UnknownAtRule";
11970     NodeType[NodeType["Use"] = 74] = "Use";
11971     NodeType[NodeType["ModuleConfiguration"] = 75] = "ModuleConfiguration";
11972     NodeType[NodeType["Forward"] = 76] = "Forward";
11973     NodeType[NodeType["ForwardVisibility"] = 77] = "ForwardVisibility";
11974     NodeType[NodeType["Module"] = 78] = "Module";
11975 })(NodeType || (NodeType = {}));
11976 var ReferenceType;
11977 (function (ReferenceType) {
11978     ReferenceType[ReferenceType["Mixin"] = 0] = "Mixin";
11979     ReferenceType[ReferenceType["Rule"] = 1] = "Rule";
11980     ReferenceType[ReferenceType["Variable"] = 2] = "Variable";
11981     ReferenceType[ReferenceType["Function"] = 3] = "Function";
11982     ReferenceType[ReferenceType["Keyframe"] = 4] = "Keyframe";
11983     ReferenceType[ReferenceType["Unknown"] = 5] = "Unknown";
11984     ReferenceType[ReferenceType["Module"] = 6] = "Module";
11985     ReferenceType[ReferenceType["Forward"] = 7] = "Forward";
11986     ReferenceType[ReferenceType["ForwardVisibility"] = 8] = "ForwardVisibility";
11987 })(ReferenceType || (ReferenceType = {}));
11988 function getNodeAtOffset(node, offset) {
11989     var candidate = null;
11990     if (!node || offset < node.offset || offset > node.end) {
11991         return null;
11992     }
11993     // Find the shortest node at the position
11994     node.accept(function (node) {
11995         if (node.offset === -1 && node.length === -1) {
11996             return true;
11997         }
11998         if (node.offset <= offset && node.end >= offset) {
11999             if (!candidate) {
12000                 candidate = node;
12001             }
12002             else if (node.length <= candidate.length) {
12003                 candidate = node;
12004             }
12005             return true;
12006         }
12007         return false;
12008     });
12009     return candidate;
12010 }
12011 function getNodePath(node, offset) {
12012     var candidate = getNodeAtOffset(node, offset);
12013     var path = [];
12014     while (candidate) {
12015         path.unshift(candidate);
12016         candidate = candidate.parent;
12017     }
12018     return path;
12019 }
12020 function getParentDeclaration(node) {
12021     var decl = node.findParent(NodeType.Declaration);
12022     var value = decl && decl.getValue();
12023     if (value && value.encloses(node)) {
12024         return decl;
12025     }
12026     return null;
12027 }
12028 var Node = /** @class */ (function () {
12029     function Node(offset, len, nodeType) {
12030         if (offset === void 0) { offset = -1; }
12031         if (len === void 0) { len = -1; }
12032         this.parent = null;
12033         this.offset = offset;
12034         this.length = len;
12035         if (nodeType) {
12036             this.nodeType = nodeType;
12037         }
12038     }
12039     Object.defineProperty(Node.prototype, "end", {
12040         get: function () { return this.offset + this.length; },
12041         enumerable: false,
12042         configurable: true
12043     });
12044     Object.defineProperty(Node.prototype, "type", {
12045         get: function () {
12046             return this.nodeType || NodeType.Undefined;
12047         },
12048         set: function (type) {
12049             this.nodeType = type;
12050         },
12051         enumerable: false,
12052         configurable: true
12053     });
12054     Node.prototype.getTextProvider = function () {
12055         var node = this;
12056         while (node && !node.textProvider) {
12057             node = node.parent;
12058         }
12059         if (node) {
12060             return node.textProvider;
12061         }
12062         return function () { return 'unknown'; };
12063     };
12064     Node.prototype.getText = function () {
12065         return this.getTextProvider()(this.offset, this.length);
12066     };
12067     Node.prototype.matches = function (str) {
12068         return this.length === str.length && this.getTextProvider()(this.offset, this.length) === str;
12069     };
12070     Node.prototype.startsWith = function (str) {
12071         return this.length >= str.length && this.getTextProvider()(this.offset, str.length) === str;
12072     };
12073     Node.prototype.endsWith = function (str) {
12074         return this.length >= str.length && this.getTextProvider()(this.end - str.length, str.length) === str;
12075     };
12076     Node.prototype.accept = function (visitor) {
12077         if (visitor(this) && this.children) {
12078             for (var _i = 0, _a = this.children; _i < _a.length; _i++) {
12079                 var child = _a[_i];
12080                 child.accept(visitor);
12081             }
12082         }
12083     };
12084     Node.prototype.acceptVisitor = function (visitor) {
12085         this.accept(visitor.visitNode.bind(visitor));
12086     };
12087     Node.prototype.adoptChild = function (node, index) {
12088         if (index === void 0) { index = -1; }
12089         if (node.parent && node.parent.children) {
12090             var idx = node.parent.children.indexOf(node);
12091             if (idx >= 0) {
12092                 node.parent.children.splice(idx, 1);
12093             }
12094         }
12095         node.parent = this;
12096         var children = this.children;
12097         if (!children) {
12098             children = this.children = [];
12099         }
12100         if (index !== -1) {
12101             children.splice(index, 0, node);
12102         }
12103         else {
12104             children.push(node);
12105         }
12106         return node;
12107     };
12108     Node.prototype.attachTo = function (parent, index) {
12109         if (index === void 0) { index = -1; }
12110         if (parent) {
12111             parent.adoptChild(this, index);
12112         }
12113         return this;
12114     };
12115     Node.prototype.collectIssues = function (results) {
12116         if (this.issues) {
12117             results.push.apply(results, this.issues);
12118         }
12119     };
12120     Node.prototype.addIssue = function (issue) {
12121         if (!this.issues) {
12122             this.issues = [];
12123         }
12124         this.issues.push(issue);
12125     };
12126     Node.prototype.hasIssue = function (rule) {
12127         return Array.isArray(this.issues) && this.issues.some(function (i) { return i.getRule() === rule; });
12128     };
12129     Node.prototype.isErroneous = function (recursive) {
12130         if (recursive === void 0) { recursive = false; }
12131         if (this.issues && this.issues.length > 0) {
12132             return true;
12133         }
12134         return recursive && Array.isArray(this.children) && this.children.some(function (c) { return c.isErroneous(true); });
12135     };
12136     Node.prototype.setNode = function (field, node, index) {
12137         if (index === void 0) { index = -1; }
12138         if (node) {
12139             node.attachTo(this, index);
12140             this[field] = node;
12141             return true;
12142         }
12143         return false;
12144     };
12145     Node.prototype.addChild = function (node) {
12146         if (node) {
12147             if (!this.children) {
12148                 this.children = [];
12149             }
12150             node.attachTo(this);
12151             this.updateOffsetAndLength(node);
12152             return true;
12153         }
12154         return false;
12155     };
12156     Node.prototype.updateOffsetAndLength = function (node) {
12157         if (node.offset < this.offset || this.offset === -1) {
12158             this.offset = node.offset;
12159         }
12160         var nodeEnd = node.end;
12161         if ((nodeEnd > this.end) || this.length === -1) {
12162             this.length = nodeEnd - this.offset;
12163         }
12164     };
12165     Node.prototype.hasChildren = function () {
12166         return !!this.children && this.children.length > 0;
12167     };
12168     Node.prototype.getChildren = function () {
12169         return this.children ? this.children.slice(0) : [];
12170     };
12171     Node.prototype.getChild = function (index) {
12172         if (this.children && index < this.children.length) {
12173             return this.children[index];
12174         }
12175         return null;
12176     };
12177     Node.prototype.addChildren = function (nodes) {
12178         for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
12179             var node = nodes_1[_i];
12180             this.addChild(node);
12181         }
12182     };
12183     Node.prototype.findFirstChildBeforeOffset = function (offset) {
12184         if (this.children) {
12185             var current = null;
12186             for (var i = this.children.length - 1; i >= 0; i--) {
12187                 // iterate until we find a child that has a start offset smaller than the input offset
12188                 current = this.children[i];
12189                 if (current.offset <= offset) {
12190                     return current;
12191                 }
12192             }
12193         }
12194         return null;
12195     };
12196     Node.prototype.findChildAtOffset = function (offset, goDeep) {
12197         var current = this.findFirstChildBeforeOffset(offset);
12198         if (current && current.end >= offset) {
12199             if (goDeep) {
12200                 return current.findChildAtOffset(offset, true) || current;
12201             }
12202             return current;
12203         }
12204         return null;
12205     };
12206     Node.prototype.encloses = function (candidate) {
12207         return this.offset <= candidate.offset && this.offset + this.length >= candidate.offset + candidate.length;
12208     };
12209     Node.prototype.getParent = function () {
12210         var result = this.parent;
12211         while (result instanceof Nodelist) {
12212             result = result.parent;
12213         }
12214         return result;
12215     };
12216     Node.prototype.findParent = function (type) {
12217         var result = this;
12218         while (result && result.type !== type) {
12219             result = result.parent;
12220         }
12221         return result;
12222     };
12223     Node.prototype.findAParent = function () {
12224         var types = [];
12225         for (var _i = 0; _i < arguments.length; _i++) {
12226             types[_i] = arguments[_i];
12227         }
12228         var result = this;
12229         while (result && !types.some(function (t) { return result.type === t; })) {
12230             result = result.parent;
12231         }
12232         return result;
12233     };
12234     Node.prototype.setData = function (key, value) {
12235         if (!this.options) {
12236             this.options = {};
12237         }
12238         this.options[key] = value;
12239     };
12240     Node.prototype.getData = function (key) {
12241         if (!this.options || !this.options.hasOwnProperty(key)) {
12242             return null;
12243         }
12244         return this.options[key];
12245     };
12246     return Node;
12247 }());
12248
12249 var Nodelist = /** @class */ (function (_super) {
12250     __extends(Nodelist, _super);
12251     function Nodelist(parent, index) {
12252         if (index === void 0) { index = -1; }
12253         var _this = _super.call(this, -1, -1) || this;
12254         _this.attachTo(parent, index);
12255         _this.offset = -1;
12256         _this.length = -1;
12257         return _this;
12258     }
12259     return Nodelist;
12260 }(Node));
12261
12262 var Identifier = /** @class */ (function (_super) {
12263     __extends(Identifier, _super);
12264     function Identifier(offset, length) {
12265         var _this = _super.call(this, offset, length) || this;
12266         _this.isCustomProperty = false;
12267         return _this;
12268     }
12269     Object.defineProperty(Identifier.prototype, "type", {
12270         get: function () {
12271             return NodeType.Identifier;
12272         },
12273         enumerable: false,
12274         configurable: true
12275     });
12276     Identifier.prototype.containsInterpolation = function () {
12277         return this.hasChildren();
12278     };
12279     return Identifier;
12280 }(Node));
12281
12282 var Stylesheet = /** @class */ (function (_super) {
12283     __extends(Stylesheet, _super);
12284     function Stylesheet(offset, length) {
12285         return _super.call(this, offset, length) || this;
12286     }
12287     Object.defineProperty(Stylesheet.prototype, "type", {
12288         get: function () {
12289             return NodeType.Stylesheet;
12290         },
12291         enumerable: false,
12292         configurable: true
12293     });
12294     return Stylesheet;
12295 }(Node));
12296
12297 var Declarations = /** @class */ (function (_super) {
12298     __extends(Declarations, _super);
12299     function Declarations(offset, length) {
12300         return _super.call(this, offset, length) || this;
12301     }
12302     Object.defineProperty(Declarations.prototype, "type", {
12303         get: function () {
12304             return NodeType.Declarations;
12305         },
12306         enumerable: false,
12307         configurable: true
12308     });
12309     return Declarations;
12310 }(Node));
12311
12312 var BodyDeclaration = /** @class */ (function (_super) {
12313     __extends(BodyDeclaration, _super);
12314     function BodyDeclaration(offset, length) {
12315         return _super.call(this, offset, length) || this;
12316     }
12317     BodyDeclaration.prototype.getDeclarations = function () {
12318         return this.declarations;
12319     };
12320     BodyDeclaration.prototype.setDeclarations = function (decls) {
12321         return this.setNode('declarations', decls);
12322     };
12323     return BodyDeclaration;
12324 }(Node));
12325
12326 var RuleSet = /** @class */ (function (_super) {
12327     __extends(RuleSet, _super);
12328     function RuleSet(offset, length) {
12329         return _super.call(this, offset, length) || this;
12330     }
12331     Object.defineProperty(RuleSet.prototype, "type", {
12332         get: function () {
12333             return NodeType.Ruleset;
12334         },
12335         enumerable: false,
12336         configurable: true
12337     });
12338     RuleSet.prototype.getSelectors = function () {
12339         if (!this.selectors) {
12340             this.selectors = new Nodelist(this);
12341         }
12342         return this.selectors;
12343     };
12344     RuleSet.prototype.isNested = function () {
12345         return !!this.parent && this.parent.findParent(NodeType.Declarations) !== null;
12346     };
12347     return RuleSet;
12348 }(BodyDeclaration));
12349
12350 var Selector = /** @class */ (function (_super) {
12351     __extends(Selector, _super);
12352     function Selector(offset, length) {
12353         return _super.call(this, offset, length) || this;
12354     }
12355     Object.defineProperty(Selector.prototype, "type", {
12356         get: function () {
12357             return NodeType.Selector;
12358         },
12359         enumerable: false,
12360         configurable: true
12361     });
12362     return Selector;
12363 }(Node));
12364
12365 var SimpleSelector = /** @class */ (function (_super) {
12366     __extends(SimpleSelector, _super);
12367     function SimpleSelector(offset, length) {
12368         return _super.call(this, offset, length) || this;
12369     }
12370     Object.defineProperty(SimpleSelector.prototype, "type", {
12371         get: function () {
12372             return NodeType.SimpleSelector;
12373         },
12374         enumerable: false,
12375         configurable: true
12376     });
12377     return SimpleSelector;
12378 }(Node));
12379
12380 var AtApplyRule = /** @class */ (function (_super) {
12381     __extends(AtApplyRule, _super);
12382     function AtApplyRule(offset, length) {
12383         return _super.call(this, offset, length) || this;
12384     }
12385     Object.defineProperty(AtApplyRule.prototype, "type", {
12386         get: function () {
12387             return NodeType.AtApplyRule;
12388         },
12389         enumerable: false,
12390         configurable: true
12391     });
12392     AtApplyRule.prototype.setIdentifier = function (node) {
12393         return this.setNode('identifier', node, 0);
12394     };
12395     AtApplyRule.prototype.getIdentifier = function () {
12396         return this.identifier;
12397     };
12398     AtApplyRule.prototype.getName = function () {
12399         return this.identifier ? this.identifier.getText() : '';
12400     };
12401     return AtApplyRule;
12402 }(Node));
12403
12404 var AbstractDeclaration = /** @class */ (function (_super) {
12405     __extends(AbstractDeclaration, _super);
12406     function AbstractDeclaration(offset, length) {
12407         return _super.call(this, offset, length) || this;
12408     }
12409     return AbstractDeclaration;
12410 }(Node));
12411
12412 var CustomPropertySet = /** @class */ (function (_super) {
12413     __extends(CustomPropertySet, _super);
12414     function CustomPropertySet(offset, length) {
12415         return _super.call(this, offset, length) || this;
12416     }
12417     Object.defineProperty(CustomPropertySet.prototype, "type", {
12418         get: function () {
12419             return NodeType.CustomPropertySet;
12420         },
12421         enumerable: false,
12422         configurable: true
12423     });
12424     return CustomPropertySet;
12425 }(BodyDeclaration));
12426
12427 var Declaration = /** @class */ (function (_super) {
12428     __extends(Declaration, _super);
12429     function Declaration(offset, length) {
12430         var _this = _super.call(this, offset, length) || this;
12431         _this.property = null;
12432         return _this;
12433     }
12434     Object.defineProperty(Declaration.prototype, "type", {
12435         get: function () {
12436             return NodeType.Declaration;
12437         },
12438         enumerable: false,
12439         configurable: true
12440     });
12441     Declaration.prototype.setProperty = function (node) {
12442         return this.setNode('property', node);
12443     };
12444     Declaration.prototype.getProperty = function () {
12445         return this.property;
12446     };
12447     Declaration.prototype.getFullPropertyName = function () {
12448         var propertyName = this.property ? this.property.getName() : 'unknown';
12449         if (this.parent instanceof Declarations && this.parent.getParent() instanceof NestedProperties) {
12450             var parentDecl = this.parent.getParent().getParent();
12451             if (parentDecl instanceof Declaration) {
12452                 return parentDecl.getFullPropertyName() + propertyName;
12453             }
12454         }
12455         return propertyName;
12456     };
12457     Declaration.prototype.getNonPrefixedPropertyName = function () {
12458         var propertyName = this.getFullPropertyName();
12459         if (propertyName && propertyName.charAt(0) === '-') {
12460             var vendorPrefixEnd = propertyName.indexOf('-', 1);
12461             if (vendorPrefixEnd !== -1) {
12462                 return propertyName.substring(vendorPrefixEnd + 1);
12463             }
12464         }
12465         return propertyName;
12466     };
12467     Declaration.prototype.setValue = function (value) {
12468         return this.setNode('value', value);
12469     };
12470     Declaration.prototype.getValue = function () {
12471         return this.value;
12472     };
12473     Declaration.prototype.setNestedProperties = function (value) {
12474         return this.setNode('nestedProperties', value);
12475     };
12476     Declaration.prototype.getNestedProperties = function () {
12477         return this.nestedProperties;
12478     };
12479     return Declaration;
12480 }(AbstractDeclaration));
12481
12482 var CustomPropertyDeclaration = /** @class */ (function (_super) {
12483     __extends(CustomPropertyDeclaration, _super);
12484     function CustomPropertyDeclaration(offset, length) {
12485         return _super.call(this, offset, length) || this;
12486     }
12487     Object.defineProperty(CustomPropertyDeclaration.prototype, "type", {
12488         get: function () {
12489             return NodeType.CustomPropertyDeclaration;
12490         },
12491         enumerable: false,
12492         configurable: true
12493     });
12494     CustomPropertyDeclaration.prototype.setPropertySet = function (value) {
12495         return this.setNode('propertySet', value);
12496     };
12497     CustomPropertyDeclaration.prototype.getPropertySet = function () {
12498         return this.propertySet;
12499     };
12500     return CustomPropertyDeclaration;
12501 }(Declaration));
12502
12503 var Property = /** @class */ (function (_super) {
12504     __extends(Property, _super);
12505     function Property(offset, length) {
12506         return _super.call(this, offset, length) || this;
12507     }
12508     Object.defineProperty(Property.prototype, "type", {
12509         get: function () {
12510             return NodeType.Property;
12511         },
12512         enumerable: false,
12513         configurable: true
12514     });
12515     Property.prototype.setIdentifier = function (value) {
12516         return this.setNode('identifier', value);
12517     };
12518     Property.prototype.getIdentifier = function () {
12519         return this.identifier;
12520     };
12521     Property.prototype.getName = function () {
12522         return (0,_utils_strings__WEBPACK_IMPORTED_MODULE_0__.trim)(this.getText(), /[_\+]+$/); /* +_: less merge */
12523     };
12524     Property.prototype.isCustomProperty = function () {
12525         return !!this.identifier && this.identifier.isCustomProperty;
12526     };
12527     return Property;
12528 }(Node));
12529
12530 var Invocation = /** @class */ (function (_super) {
12531     __extends(Invocation, _super);
12532     function Invocation(offset, length) {
12533         return _super.call(this, offset, length) || this;
12534     }
12535     Object.defineProperty(Invocation.prototype, "type", {
12536         get: function () {
12537             return NodeType.Invocation;
12538         },
12539         enumerable: false,
12540         configurable: true
12541     });
12542     Invocation.prototype.getArguments = function () {
12543         if (!this.arguments) {
12544             this.arguments = new Nodelist(this);
12545         }
12546         return this.arguments;
12547     };
12548     return Invocation;
12549 }(Node));
12550
12551 var Function = /** @class */ (function (_super) {
12552     __extends(Function, _super);
12553     function Function(offset, length) {
12554         return _super.call(this, offset, length) || this;
12555     }
12556     Object.defineProperty(Function.prototype, "type", {
12557         get: function () {
12558             return NodeType.Function;
12559         },
12560         enumerable: false,
12561         configurable: true
12562     });
12563     Function.prototype.setIdentifier = function (node) {
12564         return this.setNode('identifier', node, 0);
12565     };
12566     Function.prototype.getIdentifier = function () {
12567         return this.identifier;
12568     };
12569     Function.prototype.getName = function () {
12570         return this.identifier ? this.identifier.getText() : '';
12571     };
12572     return Function;
12573 }(Invocation));
12574
12575 var FunctionParameter = /** @class */ (function (_super) {
12576     __extends(FunctionParameter, _super);
12577     function FunctionParameter(offset, length) {
12578         return _super.call(this, offset, length) || this;
12579     }
12580     Object.defineProperty(FunctionParameter.prototype, "type", {
12581         get: function () {
12582             return NodeType.FunctionParameter;
12583         },
12584         enumerable: false,
12585         configurable: true
12586     });
12587     FunctionParameter.prototype.setIdentifier = function (node) {
12588         return this.setNode('identifier', node, 0);
12589     };
12590     FunctionParameter.prototype.getIdentifier = function () {
12591         return this.identifier;
12592     };
12593     FunctionParameter.prototype.getName = function () {
12594         return this.identifier ? this.identifier.getText() : '';
12595     };
12596     FunctionParameter.prototype.setDefaultValue = function (node) {
12597         return this.setNode('defaultValue', node, 0);
12598     };
12599     FunctionParameter.prototype.getDefaultValue = function () {
12600         return this.defaultValue;
12601     };
12602     return FunctionParameter;
12603 }(Node));
12604
12605 var FunctionArgument = /** @class */ (function (_super) {
12606     __extends(FunctionArgument, _super);
12607     function FunctionArgument(offset, length) {
12608         return _super.call(this, offset, length) || this;
12609     }
12610     Object.defineProperty(FunctionArgument.prototype, "type", {
12611         get: function () {
12612             return NodeType.FunctionArgument;
12613         },
12614         enumerable: false,
12615         configurable: true
12616     });
12617     FunctionArgument.prototype.setIdentifier = function (node) {
12618         return this.setNode('identifier', node, 0);
12619     };
12620     FunctionArgument.prototype.getIdentifier = function () {
12621         return this.identifier;
12622     };
12623     FunctionArgument.prototype.getName = function () {
12624         return this.identifier ? this.identifier.getText() : '';
12625     };
12626     FunctionArgument.prototype.setValue = function (node) {
12627         return this.setNode('value', node, 0);
12628     };
12629     FunctionArgument.prototype.getValue = function () {
12630         return this.value;
12631     };
12632     return FunctionArgument;
12633 }(Node));
12634
12635 var IfStatement = /** @class */ (function (_super) {
12636     __extends(IfStatement, _super);
12637     function IfStatement(offset, length) {
12638         return _super.call(this, offset, length) || this;
12639     }
12640     Object.defineProperty(IfStatement.prototype, "type", {
12641         get: function () {
12642             return NodeType.If;
12643         },
12644         enumerable: false,
12645         configurable: true
12646     });
12647     IfStatement.prototype.setExpression = function (node) {
12648         return this.setNode('expression', node, 0);
12649     };
12650     IfStatement.prototype.setElseClause = function (elseClause) {
12651         return this.setNode('elseClause', elseClause);
12652     };
12653     return IfStatement;
12654 }(BodyDeclaration));
12655
12656 var ForStatement = /** @class */ (function (_super) {
12657     __extends(ForStatement, _super);
12658     function ForStatement(offset, length) {
12659         return _super.call(this, offset, length) || this;
12660     }
12661     Object.defineProperty(ForStatement.prototype, "type", {
12662         get: function () {
12663             return NodeType.For;
12664         },
12665         enumerable: false,
12666         configurable: true
12667     });
12668     ForStatement.prototype.setVariable = function (node) {
12669         return this.setNode('variable', node, 0);
12670     };
12671     return ForStatement;
12672 }(BodyDeclaration));
12673
12674 var EachStatement = /** @class */ (function (_super) {
12675     __extends(EachStatement, _super);
12676     function EachStatement(offset, length) {
12677         return _super.call(this, offset, length) || this;
12678     }
12679     Object.defineProperty(EachStatement.prototype, "type", {
12680         get: function () {
12681             return NodeType.Each;
12682         },
12683         enumerable: false,
12684         configurable: true
12685     });
12686     EachStatement.prototype.getVariables = function () {
12687         if (!this.variables) {
12688             this.variables = new Nodelist(this);
12689         }
12690         return this.variables;
12691     };
12692     return EachStatement;
12693 }(BodyDeclaration));
12694
12695 var WhileStatement = /** @class */ (function (_super) {
12696     __extends(WhileStatement, _super);
12697     function WhileStatement(offset, length) {
12698         return _super.call(this, offset, length) || this;
12699     }
12700     Object.defineProperty(WhileStatement.prototype, "type", {
12701         get: function () {
12702             return NodeType.While;
12703         },
12704         enumerable: false,
12705         configurable: true
12706     });
12707     return WhileStatement;
12708 }(BodyDeclaration));
12709
12710 var ElseStatement = /** @class */ (function (_super) {
12711     __extends(ElseStatement, _super);
12712     function ElseStatement(offset, length) {
12713         return _super.call(this, offset, length) || this;
12714     }
12715     Object.defineProperty(ElseStatement.prototype, "type", {
12716         get: function () {
12717             return NodeType.Else;
12718         },
12719         enumerable: false,
12720         configurable: true
12721     });
12722     return ElseStatement;
12723 }(BodyDeclaration));
12724
12725 var FunctionDeclaration = /** @class */ (function (_super) {
12726     __extends(FunctionDeclaration, _super);
12727     function FunctionDeclaration(offset, length) {
12728         return _super.call(this, offset, length) || this;
12729     }
12730     Object.defineProperty(FunctionDeclaration.prototype, "type", {
12731         get: function () {
12732             return NodeType.FunctionDeclaration;
12733         },
12734         enumerable: false,
12735         configurable: true
12736     });
12737     FunctionDeclaration.prototype.setIdentifier = function (node) {
12738         return this.setNode('identifier', node, 0);
12739     };
12740     FunctionDeclaration.prototype.getIdentifier = function () {
12741         return this.identifier;
12742     };
12743     FunctionDeclaration.prototype.getName = function () {
12744         return this.identifier ? this.identifier.getText() : '';
12745     };
12746     FunctionDeclaration.prototype.getParameters = function () {
12747         if (!this.parameters) {
12748             this.parameters = new Nodelist(this);
12749         }
12750         return this.parameters;
12751     };
12752     return FunctionDeclaration;
12753 }(BodyDeclaration));
12754
12755 var ViewPort = /** @class */ (function (_super) {
12756     __extends(ViewPort, _super);
12757     function ViewPort(offset, length) {
12758         return _super.call(this, offset, length) || this;
12759     }
12760     Object.defineProperty(ViewPort.prototype, "type", {
12761         get: function () {
12762             return NodeType.ViewPort;
12763         },
12764         enumerable: false,
12765         configurable: true
12766     });
12767     return ViewPort;
12768 }(BodyDeclaration));
12769
12770 var FontFace = /** @class */ (function (_super) {
12771     __extends(FontFace, _super);
12772     function FontFace(offset, length) {
12773         return _super.call(this, offset, length) || this;
12774     }
12775     Object.defineProperty(FontFace.prototype, "type", {
12776         get: function () {
12777             return NodeType.FontFace;
12778         },
12779         enumerable: false,
12780         configurable: true
12781     });
12782     return FontFace;
12783 }(BodyDeclaration));
12784
12785 var NestedProperties = /** @class */ (function (_super) {
12786     __extends(NestedProperties, _super);
12787     function NestedProperties(offset, length) {
12788         return _super.call(this, offset, length) || this;
12789     }
12790     Object.defineProperty(NestedProperties.prototype, "type", {
12791         get: function () {
12792             return NodeType.NestedProperties;
12793         },
12794         enumerable: false,
12795         configurable: true
12796     });
12797     return NestedProperties;
12798 }(BodyDeclaration));
12799
12800 var Keyframe = /** @class */ (function (_super) {
12801     __extends(Keyframe, _super);
12802     function Keyframe(offset, length) {
12803         return _super.call(this, offset, length) || this;
12804     }
12805     Object.defineProperty(Keyframe.prototype, "type", {
12806         get: function () {
12807             return NodeType.Keyframe;
12808         },
12809         enumerable: false,
12810         configurable: true
12811     });
12812     Keyframe.prototype.setKeyword = function (keyword) {
12813         return this.setNode('keyword', keyword, 0);
12814     };
12815     Keyframe.prototype.getKeyword = function () {
12816         return this.keyword;
12817     };
12818     Keyframe.prototype.setIdentifier = function (node) {
12819         return this.setNode('identifier', node, 0);
12820     };
12821     Keyframe.prototype.getIdentifier = function () {
12822         return this.identifier;
12823     };
12824     Keyframe.prototype.getName = function () {
12825         return this.identifier ? this.identifier.getText() : '';
12826     };
12827     return Keyframe;
12828 }(BodyDeclaration));
12829
12830 var KeyframeSelector = /** @class */ (function (_super) {
12831     __extends(KeyframeSelector, _super);
12832     function KeyframeSelector(offset, length) {
12833         return _super.call(this, offset, length) || this;
12834     }
12835     Object.defineProperty(KeyframeSelector.prototype, "type", {
12836         get: function () {
12837             return NodeType.KeyframeSelector;
12838         },
12839         enumerable: false,
12840         configurable: true
12841     });
12842     return KeyframeSelector;
12843 }(BodyDeclaration));
12844
12845 var Import = /** @class */ (function (_super) {
12846     __extends(Import, _super);
12847     function Import(offset, length) {
12848         return _super.call(this, offset, length) || this;
12849     }
12850     Object.defineProperty(Import.prototype, "type", {
12851         get: function () {
12852             return NodeType.Import;
12853         },
12854         enumerable: false,
12855         configurable: true
12856     });
12857     Import.prototype.setMedialist = function (node) {
12858         if (node) {
12859             node.attachTo(this);
12860             return true;
12861         }
12862         return false;
12863     };
12864     return Import;
12865 }(Node));
12866
12867 var Use = /** @class */ (function (_super) {
12868     __extends(Use, _super);
12869     function Use() {
12870         return _super !== null && _super.apply(this, arguments) || this;
12871     }
12872     Object.defineProperty(Use.prototype, "type", {
12873         get: function () {
12874             return NodeType.Use;
12875         },
12876         enumerable: false,
12877         configurable: true
12878     });
12879     Use.prototype.getParameters = function () {
12880         if (!this.parameters) {
12881             this.parameters = new Nodelist(this);
12882         }
12883         return this.parameters;
12884     };
12885     Use.prototype.setIdentifier = function (node) {
12886         return this.setNode('identifier', node, 0);
12887     };
12888     Use.prototype.getIdentifier = function () {
12889         return this.identifier;
12890     };
12891     return Use;
12892 }(Node));
12893
12894 var ModuleConfiguration = /** @class */ (function (_super) {
12895     __extends(ModuleConfiguration, _super);
12896     function ModuleConfiguration() {
12897         return _super !== null && _super.apply(this, arguments) || this;
12898     }
12899     Object.defineProperty(ModuleConfiguration.prototype, "type", {
12900         get: function () {
12901             return NodeType.ModuleConfiguration;
12902         },
12903         enumerable: false,
12904         configurable: true
12905     });
12906     ModuleConfiguration.prototype.setIdentifier = function (node) {
12907         return this.setNode('identifier', node, 0);
12908     };
12909     ModuleConfiguration.prototype.getIdentifier = function () {
12910         return this.identifier;
12911     };
12912     ModuleConfiguration.prototype.getName = function () {
12913         return this.identifier ? this.identifier.getText() : '';
12914     };
12915     ModuleConfiguration.prototype.setValue = function (node) {
12916         return this.setNode('value', node, 0);
12917     };
12918     ModuleConfiguration.prototype.getValue = function () {
12919         return this.value;
12920     };
12921     return ModuleConfiguration;
12922 }(Node));
12923
12924 var Forward = /** @class */ (function (_super) {
12925     __extends(Forward, _super);
12926     function Forward() {
12927         return _super !== null && _super.apply(this, arguments) || this;
12928     }
12929     Object.defineProperty(Forward.prototype, "type", {
12930         get: function () {
12931             return NodeType.Forward;
12932         },
12933         enumerable: false,
12934         configurable: true
12935     });
12936     Forward.prototype.setIdentifier = function (node) {
12937         return this.setNode('identifier', node, 0);
12938     };
12939     Forward.prototype.getIdentifier = function () {
12940         return this.identifier;
12941     };
12942     Forward.prototype.getMembers = function () {
12943         if (!this.members) {
12944             this.members = new Nodelist(this);
12945         }
12946         return this.members;
12947     };
12948     Forward.prototype.getParameters = function () {
12949         if (!this.parameters) {
12950             this.parameters = new Nodelist(this);
12951         }
12952         return this.parameters;
12953     };
12954     return Forward;
12955 }(Node));
12956
12957 var ForwardVisibility = /** @class */ (function (_super) {
12958     __extends(ForwardVisibility, _super);
12959     function ForwardVisibility() {
12960         return _super !== null && _super.apply(this, arguments) || this;
12961     }
12962     Object.defineProperty(ForwardVisibility.prototype, "type", {
12963         get: function () {
12964             return NodeType.ForwardVisibility;
12965         },
12966         enumerable: false,
12967         configurable: true
12968     });
12969     ForwardVisibility.prototype.setIdentifier = function (node) {
12970         return this.setNode('identifier', node, 0);
12971     };
12972     ForwardVisibility.prototype.getIdentifier = function () {
12973         return this.identifier;
12974     };
12975     return ForwardVisibility;
12976 }(Node));
12977
12978 var Namespace = /** @class */ (function (_super) {
12979     __extends(Namespace, _super);
12980     function Namespace(offset, length) {
12981         return _super.call(this, offset, length) || this;
12982     }
12983     Object.defineProperty(Namespace.prototype, "type", {
12984         get: function () {
12985             return NodeType.Namespace;
12986         },
12987         enumerable: false,
12988         configurable: true
12989     });
12990     return Namespace;
12991 }(Node));
12992
12993 var Media = /** @class */ (function (_super) {
12994     __extends(Media, _super);
12995     function Media(offset, length) {
12996         return _super.call(this, offset, length) || this;
12997     }
12998     Object.defineProperty(Media.prototype, "type", {
12999         get: function () {
13000             return NodeType.Media;
13001         },
13002         enumerable: false,
13003         configurable: true
13004     });
13005     return Media;
13006 }(BodyDeclaration));
13007
13008 var Supports = /** @class */ (function (_super) {
13009     __extends(Supports, _super);
13010     function Supports(offset, length) {
13011         return _super.call(this, offset, length) || this;
13012     }
13013     Object.defineProperty(Supports.prototype, "type", {
13014         get: function () {
13015             return NodeType.Supports;
13016         },
13017         enumerable: false,
13018         configurable: true
13019     });
13020     return Supports;
13021 }(BodyDeclaration));
13022
13023 var Document = /** @class */ (function (_super) {
13024     __extends(Document, _super);
13025     function Document(offset, length) {
13026         return _super.call(this, offset, length) || this;
13027     }
13028     Object.defineProperty(Document.prototype, "type", {
13029         get: function () {
13030             return NodeType.Document;
13031         },
13032         enumerable: false,
13033         configurable: true
13034     });
13035     return Document;
13036 }(BodyDeclaration));
13037
13038 var Medialist = /** @class */ (function (_super) {
13039     __extends(Medialist, _super);
13040     function Medialist(offset, length) {
13041         return _super.call(this, offset, length) || this;
13042     }
13043     Medialist.prototype.getMediums = function () {
13044         if (!this.mediums) {
13045             this.mediums = new Nodelist(this);
13046         }
13047         return this.mediums;
13048     };
13049     return Medialist;
13050 }(Node));
13051
13052 var MediaQuery = /** @class */ (function (_super) {
13053     __extends(MediaQuery, _super);
13054     function MediaQuery(offset, length) {
13055         return _super.call(this, offset, length) || this;
13056     }
13057     Object.defineProperty(MediaQuery.prototype, "type", {
13058         get: function () {
13059             return NodeType.MediaQuery;
13060         },
13061         enumerable: false,
13062         configurable: true
13063     });
13064     return MediaQuery;
13065 }(Node));
13066
13067 var SupportsCondition = /** @class */ (function (_super) {
13068     __extends(SupportsCondition, _super);
13069     function SupportsCondition(offset, length) {
13070         return _super.call(this, offset, length) || this;
13071     }
13072     Object.defineProperty(SupportsCondition.prototype, "type", {
13073         get: function () {
13074             return NodeType.SupportsCondition;
13075         },
13076         enumerable: false,
13077         configurable: true
13078     });
13079     return SupportsCondition;
13080 }(Node));
13081
13082 var Page = /** @class */ (function (_super) {
13083     __extends(Page, _super);
13084     function Page(offset, length) {
13085         return _super.call(this, offset, length) || this;
13086     }
13087     Object.defineProperty(Page.prototype, "type", {
13088         get: function () {
13089             return NodeType.Page;
13090         },
13091         enumerable: false,
13092         configurable: true
13093     });
13094     return Page;
13095 }(BodyDeclaration));
13096
13097 var PageBoxMarginBox = /** @class */ (function (_super) {
13098     __extends(PageBoxMarginBox, _super);
13099     function PageBoxMarginBox(offset, length) {
13100         return _super.call(this, offset, length) || this;
13101     }
13102     Object.defineProperty(PageBoxMarginBox.prototype, "type", {
13103         get: function () {
13104             return NodeType.PageBoxMarginBox;
13105         },
13106         enumerable: false,
13107         configurable: true
13108     });
13109     return PageBoxMarginBox;
13110 }(BodyDeclaration));
13111
13112 var Expression = /** @class */ (function (_super) {
13113     __extends(Expression, _super);
13114     function Expression(offset, length) {
13115         return _super.call(this, offset, length) || this;
13116     }
13117     Object.defineProperty(Expression.prototype, "type", {
13118         get: function () {
13119             return NodeType.Expression;
13120         },
13121         enumerable: false,
13122         configurable: true
13123     });
13124     return Expression;
13125 }(Node));
13126
13127 var BinaryExpression = /** @class */ (function (_super) {
13128     __extends(BinaryExpression, _super);
13129     function BinaryExpression(offset, length) {
13130         return _super.call(this, offset, length) || this;
13131     }
13132     Object.defineProperty(BinaryExpression.prototype, "type", {
13133         get: function () {
13134             return NodeType.BinaryExpression;
13135         },
13136         enumerable: false,
13137         configurable: true
13138     });
13139     BinaryExpression.prototype.setLeft = function (left) {
13140         return this.setNode('left', left);
13141     };
13142     BinaryExpression.prototype.getLeft = function () {
13143         return this.left;
13144     };
13145     BinaryExpression.prototype.setRight = function (right) {
13146         return this.setNode('right', right);
13147     };
13148     BinaryExpression.prototype.getRight = function () {
13149         return this.right;
13150     };
13151     BinaryExpression.prototype.setOperator = function (value) {
13152         return this.setNode('operator', value);
13153     };
13154     BinaryExpression.prototype.getOperator = function () {
13155         return this.operator;
13156     };
13157     return BinaryExpression;
13158 }(Node));
13159
13160 var Term = /** @class */ (function (_super) {
13161     __extends(Term, _super);
13162     function Term(offset, length) {
13163         return _super.call(this, offset, length) || this;
13164     }
13165     Object.defineProperty(Term.prototype, "type", {
13166         get: function () {
13167             return NodeType.Term;
13168         },
13169         enumerable: false,
13170         configurable: true
13171     });
13172     Term.prototype.setOperator = function (value) {
13173         return this.setNode('operator', value);
13174     };
13175     Term.prototype.getOperator = function () {
13176         return this.operator;
13177     };
13178     Term.prototype.setExpression = function (value) {
13179         return this.setNode('expression', value);
13180     };
13181     Term.prototype.getExpression = function () {
13182         return this.expression;
13183     };
13184     return Term;
13185 }(Node));
13186
13187 var AttributeSelector = /** @class */ (function (_super) {
13188     __extends(AttributeSelector, _super);
13189     function AttributeSelector(offset, length) {
13190         return _super.call(this, offset, length) || this;
13191     }
13192     Object.defineProperty(AttributeSelector.prototype, "type", {
13193         get: function () {
13194             return NodeType.AttributeSelector;
13195         },
13196         enumerable: false,
13197         configurable: true
13198     });
13199     AttributeSelector.prototype.setNamespacePrefix = function (value) {
13200         return this.setNode('namespacePrefix', value);
13201     };
13202     AttributeSelector.prototype.getNamespacePrefix = function () {
13203         return this.namespacePrefix;
13204     };
13205     AttributeSelector.prototype.setIdentifier = function (value) {
13206         return this.setNode('identifier', value);
13207     };
13208     AttributeSelector.prototype.getIdentifier = function () {
13209         return this.identifier;
13210     };
13211     AttributeSelector.prototype.setOperator = function (operator) {
13212         return this.setNode('operator', operator);
13213     };
13214     AttributeSelector.prototype.getOperator = function () {
13215         return this.operator;
13216     };
13217     AttributeSelector.prototype.setValue = function (value) {
13218         return this.setNode('value', value);
13219     };
13220     AttributeSelector.prototype.getValue = function () {
13221         return this.value;
13222     };
13223     return AttributeSelector;
13224 }(Node));
13225
13226 var Operator = /** @class */ (function (_super) {
13227     __extends(Operator, _super);
13228     function Operator(offset, length) {
13229         return _super.call(this, offset, length) || this;
13230     }
13231     Object.defineProperty(Operator.prototype, "type", {
13232         get: function () {
13233             return NodeType.Operator;
13234         },
13235         enumerable: false,
13236         configurable: true
13237     });
13238     return Operator;
13239 }(Node));
13240
13241 var HexColorValue = /** @class */ (function (_super) {
13242     __extends(HexColorValue, _super);
13243     function HexColorValue(offset, length) {
13244         return _super.call(this, offset, length) || this;
13245     }
13246     Object.defineProperty(HexColorValue.prototype, "type", {
13247         get: function () {
13248             return NodeType.HexColorValue;
13249         },
13250         enumerable: false,
13251         configurable: true
13252     });
13253     return HexColorValue;
13254 }(Node));
13255
13256 var _dot = '.'.charCodeAt(0), _0 = '0'.charCodeAt(0), _9 = '9'.charCodeAt(0);
13257 var NumericValue = /** @class */ (function (_super) {
13258     __extends(NumericValue, _super);
13259     function NumericValue(offset, length) {
13260         return _super.call(this, offset, length) || this;
13261     }
13262     Object.defineProperty(NumericValue.prototype, "type", {
13263         get: function () {
13264             return NodeType.NumericValue;
13265         },
13266         enumerable: false,
13267         configurable: true
13268     });
13269     NumericValue.prototype.getValue = function () {
13270         var raw = this.getText();
13271         var unitIdx = 0;
13272         var code;
13273         for (var i = 0, len = raw.length; i < len; i++) {
13274             code = raw.charCodeAt(i);
13275             if (!(_0 <= code && code <= _9 || code === _dot)) {
13276                 break;
13277             }
13278             unitIdx += 1;
13279         }
13280         return {
13281             value: raw.substring(0, unitIdx),
13282             unit: unitIdx < raw.length ? raw.substring(unitIdx) : undefined
13283         };
13284     };
13285     return NumericValue;
13286 }(Node));
13287
13288 var VariableDeclaration = /** @class */ (function (_super) {
13289     __extends(VariableDeclaration, _super);
13290     function VariableDeclaration(offset, length) {
13291         var _this = _super.call(this, offset, length) || this;
13292         _this.variable = null;
13293         _this.value = null;
13294         _this.needsSemicolon = true;
13295         return _this;
13296     }
13297     Object.defineProperty(VariableDeclaration.prototype, "type", {
13298         get: function () {
13299             return NodeType.VariableDeclaration;
13300         },
13301         enumerable: false,
13302         configurable: true
13303     });
13304     VariableDeclaration.prototype.setVariable = function (node) {
13305         if (node) {
13306             node.attachTo(this);
13307             this.variable = node;
13308             return true;
13309         }
13310         return false;
13311     };
13312     VariableDeclaration.prototype.getVariable = function () {
13313         return this.variable;
13314     };
13315     VariableDeclaration.prototype.getName = function () {
13316         return this.variable ? this.variable.getName() : '';
13317     };
13318     VariableDeclaration.prototype.setValue = function (node) {
13319         if (node) {
13320             node.attachTo(this);
13321             this.value = node;
13322             return true;
13323         }
13324         return false;
13325     };
13326     VariableDeclaration.prototype.getValue = function () {
13327         return this.value;
13328     };
13329     return VariableDeclaration;
13330 }(AbstractDeclaration));
13331
13332 var Interpolation = /** @class */ (function (_super) {
13333     __extends(Interpolation, _super);
13334     // private _interpolations: void; // workaround for https://github.com/Microsoft/TypeScript/issues/18276
13335     function Interpolation(offset, length) {
13336         return _super.call(this, offset, length) || this;
13337     }
13338     Object.defineProperty(Interpolation.prototype, "type", {
13339         get: function () {
13340             return NodeType.Interpolation;
13341         },
13342         enumerable: false,
13343         configurable: true
13344     });
13345     return Interpolation;
13346 }(Node));
13347
13348 var Variable = /** @class */ (function (_super) {
13349     __extends(Variable, _super);
13350     function Variable(offset, length) {
13351         return _super.call(this, offset, length) || this;
13352     }
13353     Object.defineProperty(Variable.prototype, "type", {
13354         get: function () {
13355             return NodeType.VariableName;
13356         },
13357         enumerable: false,
13358         configurable: true
13359     });
13360     Variable.prototype.getName = function () {
13361         return this.getText();
13362     };
13363     return Variable;
13364 }(Node));
13365
13366 var ExtendsReference = /** @class */ (function (_super) {
13367     __extends(ExtendsReference, _super);
13368     function ExtendsReference(offset, length) {
13369         return _super.call(this, offset, length) || this;
13370     }
13371     Object.defineProperty(ExtendsReference.prototype, "type", {
13372         get: function () {
13373             return NodeType.ExtendsReference;
13374         },
13375         enumerable: false,
13376         configurable: true
13377     });
13378     ExtendsReference.prototype.getSelectors = function () {
13379         if (!this.selectors) {
13380             this.selectors = new Nodelist(this);
13381         }
13382         return this.selectors;
13383     };
13384     return ExtendsReference;
13385 }(Node));
13386
13387 var MixinContentReference = /** @class */ (function (_super) {
13388     __extends(MixinContentReference, _super);
13389     function MixinContentReference(offset, length) {
13390         return _super.call(this, offset, length) || this;
13391     }
13392     Object.defineProperty(MixinContentReference.prototype, "type", {
13393         get: function () {
13394             return NodeType.MixinContentReference;
13395         },
13396         enumerable: false,
13397         configurable: true
13398     });
13399     MixinContentReference.prototype.getArguments = function () {
13400         if (!this.arguments) {
13401             this.arguments = new Nodelist(this);
13402         }
13403         return this.arguments;
13404     };
13405     return MixinContentReference;
13406 }(Node));
13407
13408 var MixinContentDeclaration = /** @class */ (function (_super) {
13409     __extends(MixinContentDeclaration, _super);
13410     function MixinContentDeclaration(offset, length) {
13411         return _super.call(this, offset, length) || this;
13412     }
13413     Object.defineProperty(MixinContentDeclaration.prototype, "type", {
13414         get: function () {
13415             return NodeType.MixinContentReference;
13416         },
13417         enumerable: false,
13418         configurable: true
13419     });
13420     MixinContentDeclaration.prototype.getParameters = function () {
13421         if (!this.parameters) {
13422             this.parameters = new Nodelist(this);
13423         }
13424         return this.parameters;
13425     };
13426     return MixinContentDeclaration;
13427 }(BodyDeclaration));
13428
13429 var MixinReference = /** @class */ (function (_super) {
13430     __extends(MixinReference, _super);
13431     function MixinReference(offset, length) {
13432         return _super.call(this, offset, length) || this;
13433     }
13434     Object.defineProperty(MixinReference.prototype, "type", {
13435         get: function () {
13436             return NodeType.MixinReference;
13437         },
13438         enumerable: false,
13439         configurable: true
13440     });
13441     MixinReference.prototype.getNamespaces = function () {
13442         if (!this.namespaces) {
13443             this.namespaces = new Nodelist(this);
13444         }
13445         return this.namespaces;
13446     };
13447     MixinReference.prototype.setIdentifier = function (node) {
13448         return this.setNode('identifier', node, 0);
13449     };
13450     MixinReference.prototype.getIdentifier = function () {
13451         return this.identifier;
13452     };
13453     MixinReference.prototype.getName = function () {
13454         return this.identifier ? this.identifier.getText() : '';
13455     };
13456     MixinReference.prototype.getArguments = function () {
13457         if (!this.arguments) {
13458             this.arguments = new Nodelist(this);
13459         }
13460         return this.arguments;
13461     };
13462     MixinReference.prototype.setContent = function (node) {
13463         return this.setNode('content', node);
13464     };
13465     MixinReference.prototype.getContent = function () {
13466         return this.content;
13467     };
13468     return MixinReference;
13469 }(Node));
13470
13471 var MixinDeclaration = /** @class */ (function (_super) {
13472     __extends(MixinDeclaration, _super);
13473     function MixinDeclaration(offset, length) {
13474         return _super.call(this, offset, length) || this;
13475     }
13476     Object.defineProperty(MixinDeclaration.prototype, "type", {
13477         get: function () {
13478             return NodeType.MixinDeclaration;
13479         },
13480         enumerable: false,
13481         configurable: true
13482     });
13483     MixinDeclaration.prototype.setIdentifier = function (node) {
13484         return this.setNode('identifier', node, 0);
13485     };
13486     MixinDeclaration.prototype.getIdentifier = function () {
13487         return this.identifier;
13488     };
13489     MixinDeclaration.prototype.getName = function () {
13490         return this.identifier ? this.identifier.getText() : '';
13491     };
13492     MixinDeclaration.prototype.getParameters = function () {
13493         if (!this.parameters) {
13494             this.parameters = new Nodelist(this);
13495         }
13496         return this.parameters;
13497     };
13498     MixinDeclaration.prototype.setGuard = function (node) {
13499         if (node) {
13500             node.attachTo(this);
13501             this.guard = node;
13502         }
13503         return false;
13504     };
13505     return MixinDeclaration;
13506 }(BodyDeclaration));
13507
13508 var UnknownAtRule = /** @class */ (function (_super) {
13509     __extends(UnknownAtRule, _super);
13510     function UnknownAtRule(offset, length) {
13511         return _super.call(this, offset, length) || this;
13512     }
13513     Object.defineProperty(UnknownAtRule.prototype, "type", {
13514         get: function () {
13515             return NodeType.UnknownAtRule;
13516         },
13517         enumerable: false,
13518         configurable: true
13519     });
13520     UnknownAtRule.prototype.setAtRuleName = function (atRuleName) {
13521         this.atRuleName = atRuleName;
13522     };
13523     UnknownAtRule.prototype.getAtRuleName = function () {
13524         return this.atRuleName;
13525     };
13526     return UnknownAtRule;
13527 }(BodyDeclaration));
13528
13529 var ListEntry = /** @class */ (function (_super) {
13530     __extends(ListEntry, _super);
13531     function ListEntry() {
13532         return _super !== null && _super.apply(this, arguments) || this;
13533     }
13534     Object.defineProperty(ListEntry.prototype, "type", {
13535         get: function () {
13536             return NodeType.ListEntry;
13537         },
13538         enumerable: false,
13539         configurable: true
13540     });
13541     ListEntry.prototype.setKey = function (node) {
13542         return this.setNode('key', node, 0);
13543     };
13544     ListEntry.prototype.setValue = function (node) {
13545         return this.setNode('value', node, 1);
13546     };
13547     return ListEntry;
13548 }(Node));
13549
13550 var LessGuard = /** @class */ (function (_super) {
13551     __extends(LessGuard, _super);
13552     function LessGuard() {
13553         return _super !== null && _super.apply(this, arguments) || this;
13554     }
13555     LessGuard.prototype.getConditions = function () {
13556         if (!this.conditions) {
13557             this.conditions = new Nodelist(this);
13558         }
13559         return this.conditions;
13560     };
13561     return LessGuard;
13562 }(Node));
13563
13564 var GuardCondition = /** @class */ (function (_super) {
13565     __extends(GuardCondition, _super);
13566     function GuardCondition() {
13567         return _super !== null && _super.apply(this, arguments) || this;
13568     }
13569     GuardCondition.prototype.setVariable = function (node) {
13570         return this.setNode('variable', node);
13571     };
13572     return GuardCondition;
13573 }(Node));
13574
13575 var Module = /** @class */ (function (_super) {
13576     __extends(Module, _super);
13577     function Module() {
13578         return _super !== null && _super.apply(this, arguments) || this;
13579     }
13580     Object.defineProperty(Module.prototype, "type", {
13581         get: function () {
13582             return NodeType.Module;
13583         },
13584         enumerable: false,
13585         configurable: true
13586     });
13587     Module.prototype.setIdentifier = function (node) {
13588         return this.setNode('identifier', node, 0);
13589     };
13590     Module.prototype.getIdentifier = function () {
13591         return this.identifier;
13592     };
13593     return Module;
13594 }(Node));
13595
13596 var Level;
13597 (function (Level) {
13598     Level[Level["Ignore"] = 1] = "Ignore";
13599     Level[Level["Warning"] = 2] = "Warning";
13600     Level[Level["Error"] = 4] = "Error";
13601 })(Level || (Level = {}));
13602 var Marker = /** @class */ (function () {
13603     function Marker(node, rule, level, message, offset, length) {
13604         if (offset === void 0) { offset = node.offset; }
13605         if (length === void 0) { length = node.length; }
13606         this.node = node;
13607         this.rule = rule;
13608         this.level = level;
13609         this.message = message || rule.message;
13610         this.offset = offset;
13611         this.length = length;
13612     }
13613     Marker.prototype.getRule = function () {
13614         return this.rule;
13615     };
13616     Marker.prototype.getLevel = function () {
13617         return this.level;
13618     };
13619     Marker.prototype.getOffset = function () {
13620         return this.offset;
13621     };
13622     Marker.prototype.getLength = function () {
13623         return this.length;
13624     };
13625     Marker.prototype.getNode = function () {
13626         return this.node;
13627     };
13628     Marker.prototype.getMessage = function () {
13629         return this.message;
13630     };
13631     return Marker;
13632 }());
13633
13634 /*
13635 export class DefaultVisitor implements IVisitor {
13636
13637     public visitNode(node:Node):boolean {
13638         switch (node.type) {
13639             case NodeType.Stylesheet:
13640                 return this.visitStylesheet(<Stylesheet> node);
13641             case NodeType.FontFace:
13642                 return this.visitFontFace(<FontFace> node);
13643             case NodeType.Ruleset:
13644                 return this.visitRuleSet(<RuleSet> node);
13645             case NodeType.Selector:
13646                 return this.visitSelector(<Selector> node);
13647             case NodeType.SimpleSelector:
13648                 return this.visitSimpleSelector(<SimpleSelector> node);
13649             case NodeType.Declaration:
13650                 return this.visitDeclaration(<Declaration> node);
13651             case NodeType.Function:
13652                 return this.visitFunction(<Function> node);
13653             case NodeType.FunctionDeclaration:
13654                 return this.visitFunctionDeclaration(<FunctionDeclaration> node);
13655             case NodeType.FunctionParameter:
13656                 return this.visitFunctionParameter(<FunctionParameter> node);
13657             case NodeType.FunctionArgument:
13658                 return this.visitFunctionArgument(<FunctionArgument> node);
13659             case NodeType.Term:
13660                 return this.visitTerm(<Term> node);
13661             case NodeType.Declaration:
13662                 return this.visitExpression(<Expression> node);
13663             case NodeType.NumericValue:
13664                 return this.visitNumericValue(<NumericValue> node);
13665             case NodeType.Page:
13666                 return this.visitPage(<Page> node);
13667             case NodeType.PageBoxMarginBox:
13668                 return this.visitPageBoxMarginBox(<PageBoxMarginBox> node);
13669             case NodeType.Property:
13670                 return this.visitProperty(<Property> node);
13671             case NodeType.NumericValue:
13672                 return this.visitNodelist(<Nodelist> node);
13673             case NodeType.Import:
13674                 return this.visitImport(<Import> node);
13675             case NodeType.Namespace:
13676                 return this.visitNamespace(<Namespace> node);
13677             case NodeType.Keyframe:
13678                 return this.visitKeyframe(<Keyframe> node);
13679             case NodeType.KeyframeSelector:
13680                 return this.visitKeyframeSelector(<KeyframeSelector> node);
13681             case NodeType.MixinDeclaration:
13682                 return this.visitMixinDeclaration(<MixinDeclaration> node);
13683             case NodeType.MixinReference:
13684                 return this.visitMixinReference(<MixinReference> node);
13685             case NodeType.Variable:
13686                 return this.visitVariable(<Variable> node);
13687             case NodeType.VariableDeclaration:
13688                 return this.visitVariableDeclaration(<VariableDeclaration> node);
13689         }
13690         return this.visitUnknownNode(node);
13691     }
13692
13693     public visitFontFace(node:FontFace):boolean {
13694         return true;
13695     }
13696
13697     public visitKeyframe(node:Keyframe):boolean {
13698         return true;
13699     }
13700
13701     public visitKeyframeSelector(node:KeyframeSelector):boolean {
13702         return true;
13703     }
13704
13705     public visitStylesheet(node:Stylesheet):boolean {
13706         return true;
13707     }
13708
13709     public visitProperty(Node:Property):boolean {
13710         return true;
13711     }
13712
13713     public visitRuleSet(node:RuleSet):boolean {
13714         return true;
13715     }
13716
13717     public visitSelector(node:Selector):boolean {
13718         return true;
13719     }
13720
13721     public visitSimpleSelector(node:SimpleSelector):boolean {
13722         return true;
13723     }
13724
13725     public visitDeclaration(node:Declaration):boolean {
13726         return true;
13727     }
13728
13729     public visitFunction(node:Function):boolean {
13730         return true;
13731     }
13732
13733     public visitFunctionDeclaration(node:FunctionDeclaration):boolean {
13734         return true;
13735     }
13736
13737     public visitInvocation(node:Invocation):boolean {
13738         return true;
13739     }
13740
13741     public visitTerm(node:Term):boolean {
13742         return true;
13743     }
13744
13745     public visitImport(node:Import):boolean {
13746         return true;
13747     }
13748
13749     public visitNamespace(node:Namespace):boolean {
13750         return true;
13751     }
13752
13753     public visitExpression(node:Expression):boolean {
13754         return true;
13755     }
13756
13757     public visitNumericValue(node:NumericValue):boolean {
13758         return true;
13759     }
13760
13761     public visitPage(node:Page):boolean {
13762         return true;
13763     }
13764
13765     public visitPageBoxMarginBox(node:PageBoxMarginBox):boolean {
13766         return true;
13767     }
13768
13769     public visitNodelist(node:Nodelist):boolean {
13770         return true;
13771     }
13772
13773     public visitVariableDeclaration(node:VariableDeclaration):boolean {
13774         return true;
13775     }
13776
13777     public visitVariable(node:Variable):boolean {
13778         return true;
13779     }
13780
13781     public visitMixinDeclaration(node:MixinDeclaration):boolean {
13782         return true;
13783     }
13784
13785     public visitMixinReference(node:MixinReference):boolean {
13786         return true;
13787     }
13788
13789     public visitUnknownNode(node:Node):boolean {
13790         return true;
13791     }
13792 }
13793 */
13794 var ParseErrorCollector = /** @class */ (function () {
13795     function ParseErrorCollector() {
13796         this.entries = [];
13797     }
13798     ParseErrorCollector.entries = function (node) {
13799         var visitor = new ParseErrorCollector();
13800         node.acceptVisitor(visitor);
13801         return visitor.entries;
13802     };
13803     ParseErrorCollector.prototype.visitNode = function (node) {
13804         if (node.isErroneous()) {
13805             node.collectIssues(this.entries);
13806         }
13807         return true;
13808     };
13809     return ParseErrorCollector;
13810 }());
13811
13812
13813
13814 /***/ }),
13815 /* 75 */
13816 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13817
13818 __webpack_require__.r(__webpack_exports__);
13819 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
13820 /* harmony export */   "startsWith": () => /* binding */ startsWith,
13821 /* harmony export */   "endsWith": () => /* binding */ endsWith,
13822 /* harmony export */   "difference": () => /* binding */ difference,
13823 /* harmony export */   "getLimitedString": () => /* binding */ getLimitedString,
13824 /* harmony export */   "trim": () => /* binding */ trim
13825 /* harmony export */ });
13826 /*---------------------------------------------------------------------------------------------
13827  *  Copyright (c) Microsoft Corporation. All rights reserved.
13828  *  Licensed under the MIT License. See License.txt in the project root for license information.
13829  *--------------------------------------------------------------------------------------------*/
13830
13831 function startsWith(haystack, needle) {
13832     if (haystack.length < needle.length) {
13833         return false;
13834     }
13835     for (var i = 0; i < needle.length; i++) {
13836         if (haystack[i] !== needle[i]) {
13837             return false;
13838         }
13839     }
13840     return true;
13841 }
13842 /**
13843  * Determines if haystack ends with needle.
13844  */
13845 function endsWith(haystack, needle) {
13846     var diff = haystack.length - needle.length;
13847     if (diff > 0) {
13848         return haystack.lastIndexOf(needle) === diff;
13849     }
13850     else if (diff === 0) {
13851         return haystack === needle;
13852     }
13853     else {
13854         return false;
13855     }
13856 }
13857 /**
13858  * Computes the difference score for two strings. More similar strings have a higher score.
13859  * We use largest common subsequence dynamic programming approach but penalize in the end for length differences.
13860  * Strings that have a large length difference will get a bad default score 0.
13861  * Complexity - both time and space O(first.length * second.length)
13862  * Dynamic programming LCS computation http://en.wikipedia.org/wiki/Longest_common_subsequence_problem
13863  *
13864  * @param first a string
13865  * @param second a string
13866  */
13867 function difference(first, second, maxLenDelta) {
13868     if (maxLenDelta === void 0) { maxLenDelta = 4; }
13869     var lengthDifference = Math.abs(first.length - second.length);
13870     // We only compute score if length of the currentWord and length of entry.name are similar.
13871     if (lengthDifference > maxLenDelta) {
13872         return 0;
13873     }
13874     // Initialize LCS (largest common subsequence) matrix.
13875     var LCS = [];
13876     var zeroArray = [];
13877     var i, j;
13878     for (i = 0; i < second.length + 1; ++i) {
13879         zeroArray.push(0);
13880     }
13881     for (i = 0; i < first.length + 1; ++i) {
13882         LCS.push(zeroArray);
13883     }
13884     for (i = 1; i < first.length + 1; ++i) {
13885         for (j = 1; j < second.length + 1; ++j) {
13886             if (first[i - 1] === second[j - 1]) {
13887                 LCS[i][j] = LCS[i - 1][j - 1] + 1;
13888             }
13889             else {
13890                 LCS[i][j] = Math.max(LCS[i - 1][j], LCS[i][j - 1]);
13891             }
13892         }
13893     }
13894     return LCS[first.length][second.length] - Math.sqrt(lengthDifference);
13895 }
13896 /**
13897  * Limit of string length.
13898  */
13899 function getLimitedString(str, ellipsis) {
13900     if (ellipsis === void 0) { ellipsis = true; }
13901     if (!str) {
13902         return '';
13903     }
13904     if (str.length < 140) {
13905         return str;
13906     }
13907     return str.slice(0, 140) + (ellipsis ? '\u2026' : '');
13908 }
13909 /**
13910  * Limit of string length.
13911  */
13912 function trim(str, regexp) {
13913     var m = regexp.exec(str);
13914     if (m && m[0].length) {
13915         return str.substr(0, str.length - m[0].length);
13916     }
13917     return str;
13918 }
13919
13920
13921 /***/ }),
13922 /* 76 */
13923 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13924
13925 __webpack_require__.r(__webpack_exports__);
13926 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
13927 /* harmony export */   "CSSIssueType": () => /* binding */ CSSIssueType,
13928 /* harmony export */   "ParseError": () => /* binding */ ParseError
13929 /* harmony export */ });
13930 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77);
13931 /*---------------------------------------------------------------------------------------------
13932  *  Copyright (c) Microsoft Corporation. All rights reserved.
13933  *  Licensed under the MIT License. See License.txt in the project root for license information.
13934  *--------------------------------------------------------------------------------------------*/
13935
13936
13937 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_0__.loadMessageBundle();
13938 var CSSIssueType = /** @class */ (function () {
13939     function CSSIssueType(id, message) {
13940         this.id = id;
13941         this.message = message;
13942     }
13943     return CSSIssueType;
13944 }());
13945
13946 var ParseError = {
13947     NumberExpected: new CSSIssueType('css-numberexpected', localize('expected.number', "number expected")),
13948     ConditionExpected: new CSSIssueType('css-conditionexpected', localize('expected.condt', "condition expected")),
13949     RuleOrSelectorExpected: new CSSIssueType('css-ruleorselectorexpected', localize('expected.ruleorselector', "at-rule or selector expected")),
13950     DotExpected: new CSSIssueType('css-dotexpected', localize('expected.dot', "dot expected")),
13951     ColonExpected: new CSSIssueType('css-colonexpected', localize('expected.colon', "colon expected")),
13952     SemiColonExpected: new CSSIssueType('css-semicolonexpected', localize('expected.semicolon', "semi-colon expected")),
13953     TermExpected: new CSSIssueType('css-termexpected', localize('expected.term', "term expected")),
13954     ExpressionExpected: new CSSIssueType('css-expressionexpected', localize('expected.expression', "expression expected")),
13955     OperatorExpected: new CSSIssueType('css-operatorexpected', localize('expected.operator', "operator expected")),
13956     IdentifierExpected: new CSSIssueType('css-identifierexpected', localize('expected.ident', "identifier expected")),
13957     PercentageExpected: new CSSIssueType('css-percentageexpected', localize('expected.percentage', "percentage expected")),
13958     URIOrStringExpected: new CSSIssueType('css-uriorstringexpected', localize('expected.uriorstring', "uri or string expected")),
13959     URIExpected: new CSSIssueType('css-uriexpected', localize('expected.uri', "URI expected")),
13960     VariableNameExpected: new CSSIssueType('css-varnameexpected', localize('expected.varname', "variable name expected")),
13961     VariableValueExpected: new CSSIssueType('css-varvalueexpected', localize('expected.varvalue', "variable value expected")),
13962     PropertyValueExpected: new CSSIssueType('css-propertyvalueexpected', localize('expected.propvalue', "property value expected")),
13963     LeftCurlyExpected: new CSSIssueType('css-lcurlyexpected', localize('expected.lcurly', "{ expected")),
13964     RightCurlyExpected: new CSSIssueType('css-rcurlyexpected', localize('expected.rcurly', "} expected")),
13965     LeftSquareBracketExpected: new CSSIssueType('css-rbracketexpected', localize('expected.lsquare', "[ expected")),
13966     RightSquareBracketExpected: new CSSIssueType('css-lbracketexpected', localize('expected.rsquare', "] expected")),
13967     LeftParenthesisExpected: new CSSIssueType('css-lparentexpected', localize('expected.lparen', "( expected")),
13968     RightParenthesisExpected: new CSSIssueType('css-rparentexpected', localize('expected.rparent', ") expected")),
13969     CommaExpected: new CSSIssueType('css-commaexpected', localize('expected.comma', "comma expected")),
13970     PageDirectiveOrDeclarationExpected: new CSSIssueType('css-pagedirordeclexpected', localize('expected.pagedirordecl', "page directive or declaraton expected")),
13971     UnknownAtRule: new CSSIssueType('css-unknownatrule', localize('unknown.atrule', "at-rule unknown")),
13972     UnknownKeyword: new CSSIssueType('css-unknownkeyword', localize('unknown.keyword', "unknown keyword")),
13973     SelectorExpected: new CSSIssueType('css-selectorexpected', localize('expected.selector', "selector expected")),
13974     StringLiteralExpected: new CSSIssueType('css-stringliteralexpected', localize('expected.stringliteral', "string literal expected")),
13975     WhitespaceExpected: new CSSIssueType('css-whitespaceexpected', localize('expected.whitespace', "whitespace expected")),
13976     MediaQueryExpected: new CSSIssueType('css-mediaqueryexpected', localize('expected.mediaquery', "media query expected")),
13977     IdentifierOrWildcardExpected: new CSSIssueType('css-idorwildcardexpected', localize('expected.idorwildcard', "identifier or wildcard expected")),
13978     WildcardExpected: new CSSIssueType('css-wildcardexpected', localize('expected.wildcard', "wildcard expected")),
13979     IdentifierOrVariableExpected: new CSSIssueType('css-idorvarexpected', localize('expected.idorvar', "identifier or variable expected")),
13980 };
13981
13982
13983 /***/ }),
13984 /* 77 */
13985 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
13986
13987
13988 /* --------------------------------------------------------------------------------------------
13989  * Copyright (c) Microsoft Corporation. All rights reserved.
13990  * Licensed under the MIT License. See License.txt in the project root for license information.
13991  * ------------------------------------------------------------------------------------------ */
13992 Object.defineProperty(exports, "__esModule", ({ value: true }));
13993 exports.config = exports.loadMessageBundle = void 0;
13994 var path = __webpack_require__(3);
13995 var fs = __webpack_require__(64);
13996 var ral_1 = __webpack_require__(78);
13997 var common_1 = __webpack_require__(79);
13998 var common_2 = __webpack_require__(79);
13999 Object.defineProperty(exports, "MessageFormat", ({ enumerable: true, get: function () { return common_2.MessageFormat; } }));
14000 Object.defineProperty(exports, "BundleFormat", ({ enumerable: true, get: function () { return common_2.BundleFormat; } }));
14001 var toString = Object.prototype.toString;
14002 function isNumber(value) {
14003     return toString.call(value) === '[object Number]';
14004 }
14005 function isString(value) {
14006     return toString.call(value) === '[object String]';
14007 }
14008 function isBoolean(value) {
14009     return value === true || value === false;
14010 }
14011 function readJsonFileSync(filename) {
14012     return JSON.parse(fs.readFileSync(filename, 'utf8'));
14013 }
14014 var resolvedBundles;
14015 var options;
14016 function initializeSettings() {
14017     options = { locale: undefined, language: undefined, languagePackSupport: false, cacheLanguageResolution: true, messageFormat: common_1.MessageFormat.bundle };
14018     if (isString(process.env.VSCODE_NLS_CONFIG)) {
14019         try {
14020             var vscodeOptions_1 = JSON.parse(process.env.VSCODE_NLS_CONFIG);
14021             var language = void 0;
14022             if (vscodeOptions_1.availableLanguages) {
14023                 var value = vscodeOptions_1.availableLanguages['*'];
14024                 if (isString(value)) {
14025                     language = value;
14026                 }
14027             }
14028             if (isString(vscodeOptions_1.locale)) {
14029                 options.locale = vscodeOptions_1.locale.toLowerCase();
14030             }
14031             if (language === undefined) {
14032                 options.language = options.locale;
14033             }
14034             else if (language !== 'en') {
14035                 options.language = language;
14036             }
14037             if (isBoolean(vscodeOptions_1._languagePackSupport)) {
14038                 options.languagePackSupport = vscodeOptions_1._languagePackSupport;
14039             }
14040             if (isString(vscodeOptions_1._cacheRoot)) {
14041                 options.cacheRoot = vscodeOptions_1._cacheRoot;
14042             }
14043             if (isString(vscodeOptions_1._languagePackId)) {
14044                 options.languagePackId = vscodeOptions_1._languagePackId;
14045             }
14046             if (isString(vscodeOptions_1._translationsConfigFile)) {
14047                 options.translationsConfigFile = vscodeOptions_1._translationsConfigFile;
14048                 try {
14049                     options.translationsConfig = readJsonFileSync(options.translationsConfigFile);
14050                 }
14051                 catch (error) {
14052                     // We can't read the translation config file. Mark the cache as corrupted.
14053                     if (vscodeOptions_1._corruptedFile) {
14054                         var dirname = path.dirname(vscodeOptions_1._corruptedFile);
14055                         fs.exists(dirname, function (exists) {
14056                             if (exists) {
14057                                 fs.writeFile(vscodeOptions_1._corruptedFile, 'corrupted', 'utf8', function (err) {
14058                                     console.error(err);
14059                                 });
14060                             }
14061                         });
14062                     }
14063                 }
14064             }
14065         }
14066         catch (_a) {
14067             // Do nothing.
14068         }
14069     }
14070     common_1.setPseudo(options.locale === 'pseudo');
14071     resolvedBundles = Object.create(null);
14072 }
14073 initializeSettings();
14074 function supportsLanguagePack() {
14075     return options.languagePackSupport === true && options.cacheRoot !== undefined && options.languagePackId !== undefined && options.translationsConfigFile !== undefined
14076         && options.translationsConfig !== undefined;
14077 }
14078 function createScopedLocalizeFunction(messages) {
14079     return function (key, message) {
14080         var args = [];
14081         for (var _i = 2; _i < arguments.length; _i++) {
14082             args[_i - 2] = arguments[_i];
14083         }
14084         if (isNumber(key)) {
14085             if (key >= messages.length) {
14086                 console.error("Broken localize call found. Index out of bounds. Stacktrace is\n: " + new Error('').stack);
14087                 return;
14088             }
14089             return common_1.format(messages[key], args);
14090         }
14091         else {
14092             if (isString(message)) {
14093                 console.warn("Message " + message + " didn't get externalized correctly.");
14094                 return common_1.format(message, args);
14095             }
14096             else {
14097                 console.error("Broken localize call found. Stacktrace is\n: " + new Error('').stack);
14098             }
14099         }
14100     };
14101 }
14102 function resolveLanguage(file) {
14103     var resolvedLanguage;
14104     if (options.cacheLanguageResolution && resolvedLanguage) {
14105         resolvedLanguage = resolvedLanguage;
14106     }
14107     else {
14108         if (common_1.isPseudo || !options.language) {
14109             resolvedLanguage = '.nls.json';
14110         }
14111         else {
14112             var locale = options.language;
14113             while (locale) {
14114                 var candidate = '.nls.' + locale + '.json';
14115                 if (fs.existsSync(file + candidate)) {
14116                     resolvedLanguage = candidate;
14117                     break;
14118                 }
14119                 else {
14120                     var index = locale.lastIndexOf('-');
14121                     if (index > 0) {
14122                         locale = locale.substring(0, index);
14123                     }
14124                     else {
14125                         resolvedLanguage = '.nls.json';
14126                         locale = null;
14127                     }
14128                 }
14129             }
14130         }
14131         if (options.cacheLanguageResolution) {
14132             resolvedLanguage = resolvedLanguage;
14133         }
14134     }
14135     return file + resolvedLanguage;
14136 }
14137 function findInTheBoxBundle(root) {
14138     var language = options.language;
14139     while (language) {
14140         var candidate = path.join(root, "nls.bundle." + language + ".json");
14141         if (fs.existsSync(candidate)) {
14142             return candidate;
14143         }
14144         else {
14145             var index = language.lastIndexOf('-');
14146             if (index > 0) {
14147                 language = language.substring(0, index);
14148             }
14149             else {
14150                 language = undefined;
14151             }
14152         }
14153     }
14154     // Test if we can reslove the default bundle.
14155     if (language === undefined) {
14156         var candidate = path.join(root, 'nls.bundle.json');
14157         if (fs.existsSync(candidate)) {
14158             return candidate;
14159         }
14160     }
14161     return undefined;
14162 }
14163 function mkdir(directory) {
14164     try {
14165         fs.mkdirSync(directory);
14166     }
14167     catch (err) {
14168         if (err.code === 'EEXIST') {
14169             return;
14170         }
14171         else if (err.code === 'ENOENT') {
14172             var parent = path.dirname(directory);
14173             if (parent !== directory) {
14174                 mkdir(parent);
14175                 fs.mkdirSync(directory);
14176             }
14177         }
14178         else {
14179             throw err;
14180         }
14181     }
14182 }
14183 function createDefaultNlsBundle(folder) {
14184     var metaData = readJsonFileSync(path.join(folder, 'nls.metadata.json'));
14185     var result = Object.create(null);
14186     for (var module_1 in metaData) {
14187         var entry = metaData[module_1];
14188         result[module_1] = entry.messages;
14189     }
14190     return result;
14191 }
14192 function createNLSBundle(header, metaDataPath) {
14193     var languagePackLocation = options.translationsConfig[header.id];
14194     if (!languagePackLocation) {
14195         return undefined;
14196     }
14197     var languagePack = readJsonFileSync(languagePackLocation).contents;
14198     var metaData = readJsonFileSync(path.join(metaDataPath, 'nls.metadata.json'));
14199     var result = Object.create(null);
14200     for (var module_2 in metaData) {
14201         var entry = metaData[module_2];
14202         var translations = languagePack[header.outDir + "/" + module_2];
14203         if (translations) {
14204             var resultMessages = [];
14205             for (var i = 0; i < entry.keys.length; i++) {
14206                 var messageKey = entry.keys[i];
14207                 var key = isString(messageKey) ? messageKey : messageKey.key;
14208                 var translatedMessage = translations[key];
14209                 if (translatedMessage === undefined) {
14210                     translatedMessage = entry.messages[i];
14211                 }
14212                 resultMessages.push(translatedMessage);
14213             }
14214             result[module_2] = resultMessages;
14215         }
14216         else {
14217             result[module_2] = entry.messages;
14218         }
14219     }
14220     return result;
14221 }
14222 function touch(file) {
14223     var d = new Date();
14224     fs.utimes(file, d, d, function () {
14225         // Do nothing. Ignore
14226     });
14227 }
14228 function cacheBundle(key, bundle) {
14229     resolvedBundles[key] = bundle;
14230     return bundle;
14231 }
14232 function loadNlsBundleOrCreateFromI18n(header, bundlePath) {
14233     var result;
14234     var bundle = path.join(options.cacheRoot, header.id + "-" + header.hash + ".json");
14235     var useMemoryOnly = false;
14236     var writeBundle = false;
14237     try {
14238         result = JSON.parse(fs.readFileSync(bundle, { encoding: 'utf8', flag: 'r' }));
14239         touch(bundle);
14240         return result;
14241     }
14242     catch (err) {
14243         if (err.code === 'ENOENT') {
14244             writeBundle = true;
14245         }
14246         else if (err instanceof SyntaxError) {
14247             // We have a syntax error. So no valid JSON. Use
14248             console.log("Syntax error parsing message bundle: " + err.message + ".");
14249             fs.unlink(bundle, function (err) {
14250                 if (err) {
14251                     console.error("Deleting corrupted bundle " + bundle + " failed.");
14252                 }
14253             });
14254             useMemoryOnly = true;
14255         }
14256         else {
14257             throw err;
14258         }
14259     }
14260     result = createNLSBundle(header, bundlePath);
14261     if (!result || useMemoryOnly) {
14262         return result;
14263     }
14264     if (writeBundle) {
14265         try {
14266             fs.writeFileSync(bundle, JSON.stringify(result), { encoding: 'utf8', flag: 'wx' });
14267         }
14268         catch (err) {
14269             if (err.code === 'EEXIST') {
14270                 return result;
14271             }
14272             throw err;
14273         }
14274     }
14275     return result;
14276 }
14277 function loadDefaultNlsBundle(bundlePath) {
14278     try {
14279         return createDefaultNlsBundle(bundlePath);
14280     }
14281     catch (err) {
14282         console.log("Generating default bundle from meta data failed.", err);
14283         return undefined;
14284     }
14285 }
14286 function loadNlsBundle(header, bundlePath) {
14287     var result;
14288     // Core decided to use a language pack. Do the same in the extension
14289     if (supportsLanguagePack()) {
14290         try {
14291             result = loadNlsBundleOrCreateFromI18n(header, bundlePath);
14292         }
14293         catch (err) {
14294             console.log("Load or create bundle failed ", err);
14295         }
14296     }
14297     if (!result) {
14298         // No language pack found, but core is running in language pack mode
14299         // Don't try to use old in the box bundles since the might be stale
14300         // Fall right back to the default bundle.
14301         if (options.languagePackSupport) {
14302             return loadDefaultNlsBundle(bundlePath);
14303         }
14304         var candidate = findInTheBoxBundle(bundlePath);
14305         if (candidate) {
14306             try {
14307                 return readJsonFileSync(candidate);
14308             }
14309             catch (err) {
14310                 console.log("Loading in the box message bundle failed.", err);
14311             }
14312         }
14313         result = loadDefaultNlsBundle(bundlePath);
14314     }
14315     return result;
14316 }
14317 function tryFindMetaDataHeaderFile(file) {
14318     var result;
14319     var dirname = path.dirname(file);
14320     while (true) {
14321         result = path.join(dirname, 'nls.metadata.header.json');
14322         if (fs.existsSync(result)) {
14323             break;
14324         }
14325         var parent = path.dirname(dirname);
14326         if (parent === dirname) {
14327             result = undefined;
14328             break;
14329         }
14330         else {
14331             dirname = parent;
14332         }
14333     }
14334     return result;
14335 }
14336 function loadMessageBundle(file) {
14337     if (!file) {
14338         // No file. We are in dev mode. Return the default
14339         // localize function.
14340         return common_1.localize;
14341     }
14342     // Remove extension since we load json files.
14343     var ext = path.extname(file);
14344     if (ext) {
14345         file = file.substr(0, file.length - ext.length);
14346     }
14347     if (options.messageFormat === common_1.MessageFormat.both || options.messageFormat === common_1.MessageFormat.bundle) {
14348         var headerFile = tryFindMetaDataHeaderFile(file);
14349         if (headerFile) {
14350             var bundlePath = path.dirname(headerFile);
14351             var bundle = resolvedBundles[bundlePath];
14352             if (bundle === undefined) {
14353                 try {
14354                     var header = JSON.parse(fs.readFileSync(headerFile, 'utf8'));
14355                     try {
14356                         var nlsBundle = loadNlsBundle(header, bundlePath);
14357                         bundle = cacheBundle(bundlePath, nlsBundle ? { header: header, nlsBundle: nlsBundle } : null);
14358                     }
14359                     catch (err) {
14360                         console.error('Failed to load nls bundle', err);
14361                         bundle = cacheBundle(bundlePath, null);
14362                     }
14363                 }
14364                 catch (err) {
14365                     console.error('Failed to read header file', err);
14366                     bundle = cacheBundle(bundlePath, null);
14367                 }
14368             }
14369             if (bundle) {
14370                 var module_3 = file.substr(bundlePath.length + 1).replace(/\\/g, '/');
14371                 var messages = bundle.nlsBundle[module_3];
14372                 if (messages === undefined) {
14373                     console.error("Messages for file " + file + " not found. See console for details.");
14374                     return function () {
14375                         return 'Messages not found.';
14376                     };
14377                 }
14378                 return createScopedLocalizeFunction(messages);
14379             }
14380         }
14381     }
14382     if (options.messageFormat === common_1.MessageFormat.both || options.messageFormat === common_1.MessageFormat.file) {
14383         // Try to load a single file bundle
14384         try {
14385             var json = readJsonFileSync(resolveLanguage(file));
14386             if (Array.isArray(json)) {
14387                 return createScopedLocalizeFunction(json);
14388             }
14389             else {
14390                 if (common_1.isDefined(json.messages) && common_1.isDefined(json.keys)) {
14391                     return createScopedLocalizeFunction(json.messages);
14392                 }
14393                 else {
14394                     console.error("String bundle '" + file + "' uses an unsupported format.");
14395                     return function () {
14396                         return 'File bundle has unsupported format. See console for details';
14397                     };
14398                 }
14399             }
14400         }
14401         catch (err) {
14402             if (err.code !== 'ENOENT') {
14403                 console.error('Failed to load single file bundle', err);
14404             }
14405         }
14406     }
14407     console.error("Failed to load message bundle for file " + file);
14408     return function () {
14409         return 'Failed to load message bundle. See console for details.';
14410     };
14411 }
14412 exports.loadMessageBundle = loadMessageBundle;
14413 function config(opts) {
14414     if (opts) {
14415         if (isString(opts.locale)) {
14416             options.locale = opts.locale.toLowerCase();
14417             options.language = options.locale;
14418             resolvedBundles = Object.create(null);
14419         }
14420         if (opts.messageFormat !== undefined) {
14421             options.messageFormat = opts.messageFormat;
14422         }
14423         if (opts.bundleFormat === common_1.BundleFormat.standalone && options.languagePackSupport === true) {
14424             options.languagePackSupport = false;
14425         }
14426     }
14427     common_1.setPseudo(options.locale === 'pseudo');
14428     return loadMessageBundle;
14429 }
14430 exports.config = config;
14431 ral_1.default.install(Object.freeze({
14432     loadMessageBundle: loadMessageBundle,
14433     config: config
14434 }));
14435 //# sourceMappingURL=main.js.map
14436
14437 /***/ }),
14438 /* 78 */
14439 /***/ ((__unused_webpack_module, exports) => {
14440
14441
14442 Object.defineProperty(exports, "__esModule", ({ value: true }));
14443 var _ral;
14444 function RAL() {
14445     if (_ral === undefined) {
14446         throw new Error("No runtime abstraction layer installed");
14447     }
14448     return _ral;
14449 }
14450 (function (RAL) {
14451     function install(ral) {
14452         if (ral === undefined) {
14453             throw new Error("No runtime abstraction layer provided");
14454         }
14455         _ral = ral;
14456     }
14457     RAL.install = install;
14458 })(RAL || (RAL = {}));
14459 exports.default = RAL;
14460 //# sourceMappingURL=ral.js.map
14461
14462 /***/ }),
14463 /* 79 */
14464 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
14465
14466
14467 /* --------------------------------------------------------------------------------------------
14468  * Copyright (c) Microsoft Corporation. All rights reserved.
14469  * Licensed under the MIT License. See License.txt in the project root for license information.
14470  * ------------------------------------------------------------------------------------------ */
14471 Object.defineProperty(exports, "__esModule", ({ value: true }));
14472 exports.config = exports.loadMessageBundle = exports.localize = exports.format = exports.setPseudo = exports.isPseudo = exports.isDefined = exports.BundleFormat = exports.MessageFormat = void 0;
14473 var ral_1 = __webpack_require__(78);
14474 var MessageFormat;
14475 (function (MessageFormat) {
14476     MessageFormat["file"] = "file";
14477     MessageFormat["bundle"] = "bundle";
14478     MessageFormat["both"] = "both";
14479 })(MessageFormat = exports.MessageFormat || (exports.MessageFormat = {}));
14480 var BundleFormat;
14481 (function (BundleFormat) {
14482     // the nls.bundle format
14483     BundleFormat["standalone"] = "standalone";
14484     BundleFormat["languagePack"] = "languagePack";
14485 })(BundleFormat = exports.BundleFormat || (exports.BundleFormat = {}));
14486 var LocalizeInfo;
14487 (function (LocalizeInfo) {
14488     function is(value) {
14489         var candidate = value;
14490         return candidate && isDefined(candidate.key) && isDefined(candidate.comment);
14491     }
14492     LocalizeInfo.is = is;
14493 })(LocalizeInfo || (LocalizeInfo = {}));
14494 function isDefined(value) {
14495     return typeof value !== 'undefined';
14496 }
14497 exports.isDefined = isDefined;
14498 exports.isPseudo = false;
14499 function setPseudo(pseudo) {
14500     exports.isPseudo = pseudo;
14501 }
14502 exports.setPseudo = setPseudo;
14503 function format(message, args) {
14504     var result;
14505     if (exports.isPseudo) {
14506         // FF3B and FF3D is the Unicode zenkaku representation for [ and ]
14507         message = '\uFF3B' + message.replace(/[aouei]/g, '$&$&') + '\uFF3D';
14508     }
14509     if (args.length === 0) {
14510         result = message;
14511     }
14512     else {
14513         result = message.replace(/\{(\d+)\}/g, function (match, rest) {
14514             var index = rest[0];
14515             var arg = args[index];
14516             var replacement = match;
14517             if (typeof arg === 'string') {
14518                 replacement = arg;
14519             }
14520             else if (typeof arg === 'number' || typeof arg === 'boolean' || arg === void 0 || arg === null) {
14521                 replacement = String(arg);
14522             }
14523             return replacement;
14524         });
14525     }
14526     return result;
14527 }
14528 exports.format = format;
14529 function localize(_key, message) {
14530     var args = [];
14531     for (var _i = 2; _i < arguments.length; _i++) {
14532         args[_i - 2] = arguments[_i];
14533     }
14534     return format(message, args);
14535 }
14536 exports.localize = localize;
14537 function loadMessageBundle(file) {
14538     return ral_1.default().loadMessageBundle(file);
14539 }
14540 exports.loadMessageBundle = loadMessageBundle;
14541 function config(opts) {
14542     return ral_1.default().config(opts);
14543 }
14544 exports.config = config;
14545 //# sourceMappingURL=common.js.map
14546
14547 /***/ }),
14548 /* 80 */
14549 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
14550
14551 __webpack_require__.r(__webpack_exports__);
14552 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
14553 /* harmony export */   "browserNames": () => /* reexport safe */ _entry__WEBPACK_IMPORTED_MODULE_0__.browserNames,
14554 /* harmony export */   "getBrowserLabel": () => /* reexport safe */ _entry__WEBPACK_IMPORTED_MODULE_0__.getBrowserLabel,
14555 /* harmony export */   "getEntryDescription": () => /* reexport safe */ _entry__WEBPACK_IMPORTED_MODULE_0__.getEntryDescription,
14556 /* harmony export */   "textToMarkedString": () => /* reexport safe */ _entry__WEBPACK_IMPORTED_MODULE_0__.textToMarkedString,
14557 /* harmony export */   "colorFrom256RGB": () => /* reexport safe */ _colors__WEBPACK_IMPORTED_MODULE_1__.colorFrom256RGB,
14558 /* harmony export */   "colorFromHSL": () => /* reexport safe */ _colors__WEBPACK_IMPORTED_MODULE_1__.colorFromHSL,
14559 /* harmony export */   "colorFromHex": () => /* reexport safe */ _colors__WEBPACK_IMPORTED_MODULE_1__.colorFromHex,
14560 /* harmony export */   "colorFunctions": () => /* reexport safe */ _colors__WEBPACK_IMPORTED_MODULE_1__.colorFunctions,
14561 /* harmony export */   "colorKeywords": () => /* reexport safe */ _colors__WEBPACK_IMPORTED_MODULE_1__.colorKeywords,
14562 /* harmony export */   "colors": () => /* reexport safe */ _colors__WEBPACK_IMPORTED_MODULE_1__.colors,
14563 /* harmony export */   "getColorValue": () => /* reexport safe */ _colors__WEBPACK_IMPORTED_MODULE_1__.getColorValue,
14564 /* harmony export */   "hexDigit": () => /* reexport safe */ _colors__WEBPACK_IMPORTED_MODULE_1__.hexDigit,
14565 /* harmony export */   "hslFromColor": () => /* reexport safe */ _colors__WEBPACK_IMPORTED_MODULE_1__.hslFromColor,
14566 /* harmony export */   "isColorConstructor": () => /* reexport safe */ _colors__WEBPACK_IMPORTED_MODULE_1__.isColorConstructor,
14567 /* harmony export */   "isColorValue": () => /* reexport safe */ _colors__WEBPACK_IMPORTED_MODULE_1__.isColorValue,
14568 /* harmony export */   "basicShapeFunctions": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.basicShapeFunctions,
14569 /* harmony export */   "boxKeywords": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.boxKeywords,
14570 /* harmony export */   "cssWideKeywords": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.cssWideKeywords,
14571 /* harmony export */   "geometryBoxKeywords": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.geometryBoxKeywords,
14572 /* harmony export */   "html5Tags": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.html5Tags,
14573 /* harmony export */   "imageFunctions": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.imageFunctions,
14574 /* harmony export */   "lineStyleKeywords": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.lineStyleKeywords,
14575 /* harmony export */   "lineWidthKeywords": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.lineWidthKeywords,
14576 /* harmony export */   "pageBoxDirectives": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.pageBoxDirectives,
14577 /* harmony export */   "positionKeywords": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.positionKeywords,
14578 /* harmony export */   "repeatStyleKeywords": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.repeatStyleKeywords,
14579 /* harmony export */   "svgElements": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.svgElements,
14580 /* harmony export */   "transitionTimingFunctions": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.transitionTimingFunctions,
14581 /* harmony export */   "units": () => /* reexport safe */ _builtinData__WEBPACK_IMPORTED_MODULE_2__.units
14582 /* harmony export */ });
14583 /* harmony import */ var _entry__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81);
14584 /* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82);
14585 /* harmony import */ var _builtinData__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(83);
14586 /*---------------------------------------------------------------------------------------------
14587  *  Copyright (c) Microsoft Corporation. All rights reserved.
14588  *  Licensed under the MIT License. See License.txt in the project root for license information.
14589  *--------------------------------------------------------------------------------------------*/
14590
14591
14592
14593
14594
14595
14596 /***/ }),
14597 /* 81 */
14598 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
14599
14600 __webpack_require__.r(__webpack_exports__);
14601 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
14602 /* harmony export */   "browserNames": () => /* binding */ browserNames,
14603 /* harmony export */   "getEntryDescription": () => /* binding */ getEntryDescription,
14604 /* harmony export */   "textToMarkedString": () => /* binding */ textToMarkedString,
14605 /* harmony export */   "getBrowserLabel": () => /* binding */ getBrowserLabel
14606 /* harmony export */ });
14607 /*---------------------------------------------------------------------------------------------
14608  *  Copyright (c) Microsoft Corporation. All rights reserved.
14609  *  Licensed under the MIT License. See License.txt in the project root for license information.
14610  *--------------------------------------------------------------------------------------------*/
14611
14612 var browserNames = {
14613     E: 'Edge',
14614     FF: 'Firefox',
14615     S: 'Safari',
14616     C: 'Chrome',
14617     IE: 'IE',
14618     O: 'Opera'
14619 };
14620 function getEntryStatus(status) {
14621     switch (status) {
14622         case 'experimental':
14623             return '⚠️ Property is experimental. Be cautious when using it.️\n\n';
14624         case 'nonstandard':
14625             return '🚨️ Property is nonstandard. Avoid using it.\n\n';
14626         case 'obsolete':
14627             return '🚨️️️ Property is obsolete. Avoid using it.\n\n';
14628         default:
14629             return '';
14630     }
14631 }
14632 function getEntryDescription(entry, doesSupportMarkdown, settings) {
14633     var result;
14634     if (doesSupportMarkdown) {
14635         result = {
14636             kind: 'markdown',
14637             value: getEntryMarkdownDescription(entry, settings)
14638         };
14639     }
14640     else {
14641         result = {
14642             kind: 'plaintext',
14643             value: getEntryStringDescription(entry, settings)
14644         };
14645     }
14646     if (result.value === '') {
14647         return undefined;
14648     }
14649     return result;
14650 }
14651 function textToMarkedString(text) {
14652     text = text.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
14653     return text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
14654 }
14655 function getEntryStringDescription(entry, settings) {
14656     if (!entry.description || entry.description === '') {
14657         return '';
14658     }
14659     if (typeof entry.description !== 'string') {
14660         return entry.description.value;
14661     }
14662     var result = '';
14663     if ((settings === null || settings === void 0 ? void 0 : settings.documentation) !== false) {
14664         if (entry.status) {
14665             result += getEntryStatus(entry.status);
14666         }
14667         result += entry.description;
14668         var browserLabel = getBrowserLabel(entry.browsers);
14669         if (browserLabel) {
14670             result += '\n(' + browserLabel + ')';
14671         }
14672         if ('syntax' in entry) {
14673             result += "\n\nSyntax: " + entry.syntax;
14674         }
14675     }
14676     if (entry.references && entry.references.length > 0 && (settings === null || settings === void 0 ? void 0 : settings.references) !== false) {
14677         if (result.length > 0) {
14678             result += '\n\n';
14679         }
14680         result += entry.references.map(function (r) {
14681             return r.name + ": " + r.url;
14682         }).join(' | ');
14683     }
14684     return result;
14685 }
14686 function getEntryMarkdownDescription(entry, settings) {
14687     if (!entry.description || entry.description === '') {
14688         return '';
14689     }
14690     var result = '';
14691     if ((settings === null || settings === void 0 ? void 0 : settings.documentation) !== false) {
14692         if (entry.status) {
14693             result += getEntryStatus(entry.status);
14694         }
14695         var description = typeof entry.description === 'string' ? entry.description : entry.description.value;
14696         result += textToMarkedString(description);
14697         var browserLabel = getBrowserLabel(entry.browsers);
14698         if (browserLabel) {
14699             result += '\n\n(' + textToMarkedString(browserLabel) + ')';
14700         }
14701         if ('syntax' in entry && entry.syntax) {
14702             result += "\n\nSyntax: " + textToMarkedString(entry.syntax);
14703         }
14704     }
14705     if (entry.references && entry.references.length > 0 && (settings === null || settings === void 0 ? void 0 : settings.references) !== false) {
14706         if (result.length > 0) {
14707             result += '\n\n';
14708         }
14709         result += entry.references.map(function (r) {
14710             return "[" + r.name + "](" + r.url + ")";
14711         }).join(' | ');
14712     }
14713     return result;
14714 }
14715 /**
14716  * Input is like `["E12","FF49","C47","IE","O"]`
14717  * Output is like `Edge 12, Firefox 49, Chrome 47, IE, Opera`
14718  */
14719 function getBrowserLabel(browsers) {
14720     if (browsers === void 0) { browsers = []; }
14721     if (browsers.length === 0) {
14722         return null;
14723     }
14724     return browsers
14725         .map(function (b) {
14726         var result = '';
14727         var matches = b.match(/([A-Z]+)(\d+)?/);
14728         var name = matches[1];
14729         var version = matches[2];
14730         if (name in browserNames) {
14731             result += browserNames[name];
14732         }
14733         if (version) {
14734             result += ' ' + version;
14735         }
14736         return result;
14737     })
14738         .join(', ');
14739 }
14740
14741
14742 /***/ }),
14743 /* 82 */
14744 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
14745
14746 __webpack_require__.r(__webpack_exports__);
14747 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
14748 /* harmony export */   "colorFunctions": () => /* binding */ colorFunctions,
14749 /* harmony export */   "colors": () => /* binding */ colors,
14750 /* harmony export */   "colorKeywords": () => /* binding */ colorKeywords,
14751 /* harmony export */   "isColorConstructor": () => /* binding */ isColorConstructor,
14752 /* harmony export */   "isColorValue": () => /* binding */ isColorValue,
14753 /* harmony export */   "hexDigit": () => /* binding */ hexDigit,
14754 /* harmony export */   "colorFromHex": () => /* binding */ colorFromHex,
14755 /* harmony export */   "colorFrom256RGB": () => /* binding */ colorFrom256RGB,
14756 /* harmony export */   "colorFromHSL": () => /* binding */ colorFromHSL,
14757 /* harmony export */   "hslFromColor": () => /* binding */ hslFromColor,
14758 /* harmony export */   "getColorValue": () => /* binding */ getColorValue
14759 /* harmony export */ });
14760 /* harmony import */ var _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74);
14761 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(77);
14762 /*---------------------------------------------------------------------------------------------
14763  *  Copyright (c) Microsoft Corporation. All rights reserved.
14764  *  Licensed under the MIT License. See License.txt in the project root for license information.
14765  *--------------------------------------------------------------------------------------------*/
14766
14767
14768 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_1__.loadMessageBundle();
14769 var colorFunctions = [
14770     { func: 'rgb($red, $green, $blue)', desc: localize('css.builtin.rgb', 'Creates a Color from red, green, and blue values.') },
14771     { func: 'rgba($red, $green, $blue, $alpha)', desc: localize('css.builtin.rgba', 'Creates a Color from red, green, blue, and alpha values.') },
14772     { func: 'hsl($hue, $saturation, $lightness)', desc: localize('css.builtin.hsl', 'Creates a Color from hue, saturation, and lightness values.') },
14773     { func: 'hsla($hue, $saturation, $lightness, $alpha)', desc: localize('css.builtin.hsla', 'Creates a Color from hue, saturation, lightness, and alpha values.') }
14774 ];
14775 var colors = {
14776     aliceblue: '#f0f8ff',
14777     antiquewhite: '#faebd7',
14778     aqua: '#00ffff',
14779     aquamarine: '#7fffd4',
14780     azure: '#f0ffff',
14781     beige: '#f5f5dc',
14782     bisque: '#ffe4c4',
14783     black: '#000000',
14784     blanchedalmond: '#ffebcd',
14785     blue: '#0000ff',
14786     blueviolet: '#8a2be2',
14787     brown: '#a52a2a',
14788     burlywood: '#deb887',
14789     cadetblue: '#5f9ea0',
14790     chartreuse: '#7fff00',
14791     chocolate: '#d2691e',
14792     coral: '#ff7f50',
14793     cornflowerblue: '#6495ed',
14794     cornsilk: '#fff8dc',
14795     crimson: '#dc143c',
14796     cyan: '#00ffff',
14797     darkblue: '#00008b',
14798     darkcyan: '#008b8b',
14799     darkgoldenrod: '#b8860b',
14800     darkgray: '#a9a9a9',
14801     darkgrey: '#a9a9a9',
14802     darkgreen: '#006400',
14803     darkkhaki: '#bdb76b',
14804     darkmagenta: '#8b008b',
14805     darkolivegreen: '#556b2f',
14806     darkorange: '#ff8c00',
14807     darkorchid: '#9932cc',
14808     darkred: '#8b0000',
14809     darksalmon: '#e9967a',
14810     darkseagreen: '#8fbc8f',
14811     darkslateblue: '#483d8b',
14812     darkslategray: '#2f4f4f',
14813     darkslategrey: '#2f4f4f',
14814     darkturquoise: '#00ced1',
14815     darkviolet: '#9400d3',
14816     deeppink: '#ff1493',
14817     deepskyblue: '#00bfff',
14818     dimgray: '#696969',
14819     dimgrey: '#696969',
14820     dodgerblue: '#1e90ff',
14821     firebrick: '#b22222',
14822     floralwhite: '#fffaf0',
14823     forestgreen: '#228b22',
14824     fuchsia: '#ff00ff',
14825     gainsboro: '#dcdcdc',
14826     ghostwhite: '#f8f8ff',
14827     gold: '#ffd700',
14828     goldenrod: '#daa520',
14829     gray: '#808080',
14830     grey: '#808080',
14831     green: '#008000',
14832     greenyellow: '#adff2f',
14833     honeydew: '#f0fff0',
14834     hotpink: '#ff69b4',
14835     indianred: '#cd5c5c',
14836     indigo: '#4b0082',
14837     ivory: '#fffff0',
14838     khaki: '#f0e68c',
14839     lavender: '#e6e6fa',
14840     lavenderblush: '#fff0f5',
14841     lawngreen: '#7cfc00',
14842     lemonchiffon: '#fffacd',
14843     lightblue: '#add8e6',
14844     lightcoral: '#f08080',
14845     lightcyan: '#e0ffff',
14846     lightgoldenrodyellow: '#fafad2',
14847     lightgray: '#d3d3d3',
14848     lightgrey: '#d3d3d3',
14849     lightgreen: '#90ee90',
14850     lightpink: '#ffb6c1',
14851     lightsalmon: '#ffa07a',
14852     lightseagreen: '#20b2aa',
14853     lightskyblue: '#87cefa',
14854     lightslategray: '#778899',
14855     lightslategrey: '#778899',
14856     lightsteelblue: '#b0c4de',
14857     lightyellow: '#ffffe0',
14858     lime: '#00ff00',
14859     limegreen: '#32cd32',
14860     linen: '#faf0e6',
14861     magenta: '#ff00ff',
14862     maroon: '#800000',
14863     mediumaquamarine: '#66cdaa',
14864     mediumblue: '#0000cd',
14865     mediumorchid: '#ba55d3',
14866     mediumpurple: '#9370d8',
14867     mediumseagreen: '#3cb371',
14868     mediumslateblue: '#7b68ee',
14869     mediumspringgreen: '#00fa9a',
14870     mediumturquoise: '#48d1cc',
14871     mediumvioletred: '#c71585',
14872     midnightblue: '#191970',
14873     mintcream: '#f5fffa',
14874     mistyrose: '#ffe4e1',
14875     moccasin: '#ffe4b5',
14876     navajowhite: '#ffdead',
14877     navy: '#000080',
14878     oldlace: '#fdf5e6',
14879     olive: '#808000',
14880     olivedrab: '#6b8e23',
14881     orange: '#ffa500',
14882     orangered: '#ff4500',
14883     orchid: '#da70d6',
14884     palegoldenrod: '#eee8aa',
14885     palegreen: '#98fb98',
14886     paleturquoise: '#afeeee',
14887     palevioletred: '#d87093',
14888     papayawhip: '#ffefd5',
14889     peachpuff: '#ffdab9',
14890     peru: '#cd853f',
14891     pink: '#ffc0cb',
14892     plum: '#dda0dd',
14893     powderblue: '#b0e0e6',
14894     purple: '#800080',
14895     red: '#ff0000',
14896     rebeccapurple: '#663399',
14897     rosybrown: '#bc8f8f',
14898     royalblue: '#4169e1',
14899     saddlebrown: '#8b4513',
14900     salmon: '#fa8072',
14901     sandybrown: '#f4a460',
14902     seagreen: '#2e8b57',
14903     seashell: '#fff5ee',
14904     sienna: '#a0522d',
14905     silver: '#c0c0c0',
14906     skyblue: '#87ceeb',
14907     slateblue: '#6a5acd',
14908     slategray: '#708090',
14909     slategrey: '#708090',
14910     snow: '#fffafa',
14911     springgreen: '#00ff7f',
14912     steelblue: '#4682b4',
14913     tan: '#d2b48c',
14914     teal: '#008080',
14915     thistle: '#d8bfd8',
14916     tomato: '#ff6347',
14917     turquoise: '#40e0d0',
14918     violet: '#ee82ee',
14919     wheat: '#f5deb3',
14920     white: '#ffffff',
14921     whitesmoke: '#f5f5f5',
14922     yellow: '#ffff00',
14923     yellowgreen: '#9acd32'
14924 };
14925 var colorKeywords = {
14926     'currentColor': 'The value of the \'color\' property. The computed value of the \'currentColor\' keyword is the computed value of the \'color\' property. If the \'currentColor\' keyword is set on the \'color\' property itself, it is treated as \'color:inherit\' at parse time.',
14927     'transparent': 'Fully transparent. This keyword can be considered a shorthand for rgba(0,0,0,0) which is its computed value.',
14928 };
14929 function getNumericValue(node, factor) {
14930     var val = node.getText();
14931     var m = val.match(/^([-+]?[0-9]*\.?[0-9]+)(%?)$/);
14932     if (m) {
14933         if (m[2]) {
14934             factor = 100.0;
14935         }
14936         var result = parseFloat(m[1]) / factor;
14937         if (result >= 0 && result <= 1) {
14938             return result;
14939         }
14940     }
14941     throw new Error();
14942 }
14943 function getAngle(node) {
14944     var val = node.getText();
14945     var m = val.match(/^([-+]?[0-9]*\.?[0-9]+)(deg)?$/);
14946     if (m) {
14947         return parseFloat(val) % 360;
14948     }
14949     throw new Error();
14950 }
14951 function isColorConstructor(node) {
14952     var name = node.getName();
14953     if (!name) {
14954         return false;
14955     }
14956     return /^(rgb|rgba|hsl|hsla)$/gi.test(name);
14957 }
14958 /**
14959  * Returns true if the node is a color value - either
14960  * defined a hex number, as rgb or rgba function, or
14961  * as color name.
14962  */
14963 function isColorValue(node) {
14964     if (node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.HexColorValue) {
14965         return true;
14966     }
14967     else if (node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Function) {
14968         return isColorConstructor(node);
14969     }
14970     else if (node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Identifier) {
14971         if (node.parent && node.parent.type !== _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Term) {
14972             return false;
14973         }
14974         var candidateColor = node.getText().toLowerCase();
14975         if (candidateColor === 'none') {
14976             return false;
14977         }
14978         if (colors[candidateColor]) {
14979             return true;
14980         }
14981     }
14982     return false;
14983 }
14984 var Digit0 = 48;
14985 var Digit9 = 57;
14986 var A = 65;
14987 var F = 70;
14988 var a = 97;
14989 var f = 102;
14990 function hexDigit(charCode) {
14991     if (charCode < Digit0) {
14992         return 0;
14993     }
14994     if (charCode <= Digit9) {
14995         return charCode - Digit0;
14996     }
14997     if (charCode < a) {
14998         charCode += (a - A);
14999     }
15000     if (charCode >= a && charCode <= f) {
15001         return charCode - a + 10;
15002     }
15003     return 0;
15004 }
15005 function colorFromHex(text) {
15006     if (text[0] !== '#') {
15007         return null;
15008     }
15009     switch (text.length) {
15010         case 4:
15011             return {
15012                 red: (hexDigit(text.charCodeAt(1)) * 0x11) / 255.0,
15013                 green: (hexDigit(text.charCodeAt(2)) * 0x11) / 255.0,
15014                 blue: (hexDigit(text.charCodeAt(3)) * 0x11) / 255.0,
15015                 alpha: 1
15016             };
15017         case 5:
15018             return {
15019                 red: (hexDigit(text.charCodeAt(1)) * 0x11) / 255.0,
15020                 green: (hexDigit(text.charCodeAt(2)) * 0x11) / 255.0,
15021                 blue: (hexDigit(text.charCodeAt(3)) * 0x11) / 255.0,
15022                 alpha: (hexDigit(text.charCodeAt(4)) * 0x11) / 255.0,
15023             };
15024         case 7:
15025             return {
15026                 red: (hexDigit(text.charCodeAt(1)) * 0x10 + hexDigit(text.charCodeAt(2))) / 255.0,
15027                 green: (hexDigit(text.charCodeAt(3)) * 0x10 + hexDigit(text.charCodeAt(4))) / 255.0,
15028                 blue: (hexDigit(text.charCodeAt(5)) * 0x10 + hexDigit(text.charCodeAt(6))) / 255.0,
15029                 alpha: 1
15030             };
15031         case 9:
15032             return {
15033                 red: (hexDigit(text.charCodeAt(1)) * 0x10 + hexDigit(text.charCodeAt(2))) / 255.0,
15034                 green: (hexDigit(text.charCodeAt(3)) * 0x10 + hexDigit(text.charCodeAt(4))) / 255.0,
15035                 blue: (hexDigit(text.charCodeAt(5)) * 0x10 + hexDigit(text.charCodeAt(6))) / 255.0,
15036                 alpha: (hexDigit(text.charCodeAt(7)) * 0x10 + hexDigit(text.charCodeAt(8))) / 255.0
15037             };
15038     }
15039     return null;
15040 }
15041 function colorFrom256RGB(red, green, blue, alpha) {
15042     if (alpha === void 0) { alpha = 1.0; }
15043     return {
15044         red: red / 255.0,
15045         green: green / 255.0,
15046         blue: blue / 255.0,
15047         alpha: alpha
15048     };
15049 }
15050 function colorFromHSL(hue, sat, light, alpha) {
15051     if (alpha === void 0) { alpha = 1.0; }
15052     hue = hue / 60.0;
15053     if (sat === 0) {
15054         return { red: light, green: light, blue: light, alpha: alpha };
15055     }
15056     else {
15057         var hueToRgb = function (t1, t2, hue) {
15058             while (hue < 0) {
15059                 hue += 6;
15060             }
15061             while (hue >= 6) {
15062                 hue -= 6;
15063             }
15064             if (hue < 1) {
15065                 return (t2 - t1) * hue + t1;
15066             }
15067             if (hue < 3) {
15068                 return t2;
15069             }
15070             if (hue < 4) {
15071                 return (t2 - t1) * (4 - hue) + t1;
15072             }
15073             return t1;
15074         };
15075         var t2 = light <= 0.5 ? (light * (sat + 1)) : (light + sat - (light * sat));
15076         var t1 = light * 2 - t2;
15077         return { red: hueToRgb(t1, t2, hue + 2), green: hueToRgb(t1, t2, hue), blue: hueToRgb(t1, t2, hue - 2), alpha: alpha };
15078     }
15079 }
15080 function hslFromColor(rgba) {
15081     var r = rgba.red;
15082     var g = rgba.green;
15083     var b = rgba.blue;
15084     var a = rgba.alpha;
15085     var max = Math.max(r, g, b);
15086     var min = Math.min(r, g, b);
15087     var h = 0;
15088     var s = 0;
15089     var l = (min + max) / 2;
15090     var chroma = max - min;
15091     if (chroma > 0) {
15092         s = Math.min((l <= 0.5 ? chroma / (2 * l) : chroma / (2 - (2 * l))), 1);
15093         switch (max) {
15094             case r:
15095                 h = (g - b) / chroma + (g < b ? 6 : 0);
15096                 break;
15097             case g:
15098                 h = (b - r) / chroma + 2;
15099                 break;
15100             case b:
15101                 h = (r - g) / chroma + 4;
15102                 break;
15103         }
15104         h *= 60;
15105         h = Math.round(h);
15106     }
15107     return { h: h, s: s, l: l, a: a };
15108 }
15109 function getColorValue(node) {
15110     if (node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.HexColorValue) {
15111         var text = node.getText();
15112         return colorFromHex(text);
15113     }
15114     else if (node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Function) {
15115         var functionNode = node;
15116         var name = functionNode.getName();
15117         var colorValues = functionNode.getArguments().getChildren();
15118         if (!name || colorValues.length < 3 || colorValues.length > 4) {
15119             return null;
15120         }
15121         try {
15122             var alpha = colorValues.length === 4 ? getNumericValue(colorValues[3], 1) : 1;
15123             if (name === 'rgb' || name === 'rgba') {
15124                 return {
15125                     red: getNumericValue(colorValues[0], 255.0),
15126                     green: getNumericValue(colorValues[1], 255.0),
15127                     blue: getNumericValue(colorValues[2], 255.0),
15128                     alpha: alpha
15129                 };
15130             }
15131             else if (name === 'hsl' || name === 'hsla') {
15132                 var h = getAngle(colorValues[0]);
15133                 var s = getNumericValue(colorValues[1], 100.0);
15134                 var l = getNumericValue(colorValues[2], 100.0);
15135                 return colorFromHSL(h, s, l, alpha);
15136             }
15137         }
15138         catch (e) {
15139             // parse error on numeric value
15140             return null;
15141         }
15142     }
15143     else if (node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Identifier) {
15144         if (node.parent && node.parent.type !== _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Term) {
15145             return null;
15146         }
15147         var term = node.parent;
15148         if (term && term.parent && term.parent.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.BinaryExpression) {
15149             var expression = term.parent;
15150             if (expression.parent && expression.parent.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.ListEntry && expression.parent.key === expression) {
15151                 return null;
15152             }
15153         }
15154         var candidateColor = node.getText().toLowerCase();
15155         if (candidateColor === 'none') {
15156             return null;
15157         }
15158         var colorHex = colors[candidateColor];
15159         if (colorHex) {
15160             return colorFromHex(colorHex);
15161         }
15162     }
15163     return null;
15164 }
15165
15166
15167 /***/ }),
15168 /* 83 */
15169 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
15170
15171 __webpack_require__.r(__webpack_exports__);
15172 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
15173 /* harmony export */   "positionKeywords": () => /* binding */ positionKeywords,
15174 /* harmony export */   "repeatStyleKeywords": () => /* binding */ repeatStyleKeywords,
15175 /* harmony export */   "lineStyleKeywords": () => /* binding */ lineStyleKeywords,
15176 /* harmony export */   "lineWidthKeywords": () => /* binding */ lineWidthKeywords,
15177 /* harmony export */   "boxKeywords": () => /* binding */ boxKeywords,
15178 /* harmony export */   "geometryBoxKeywords": () => /* binding */ geometryBoxKeywords,
15179 /* harmony export */   "cssWideKeywords": () => /* binding */ cssWideKeywords,
15180 /* harmony export */   "imageFunctions": () => /* binding */ imageFunctions,
15181 /* harmony export */   "transitionTimingFunctions": () => /* binding */ transitionTimingFunctions,
15182 /* harmony export */   "basicShapeFunctions": () => /* binding */ basicShapeFunctions,
15183 /* harmony export */   "units": () => /* binding */ units,
15184 /* harmony export */   "html5Tags": () => /* binding */ html5Tags,
15185 /* harmony export */   "svgElements": () => /* binding */ svgElements,
15186 /* harmony export */   "pageBoxDirectives": () => /* binding */ pageBoxDirectives
15187 /* harmony export */ });
15188 /*---------------------------------------------------------------------------------------------
15189  *  Copyright (c) Microsoft Corporation. All rights reserved.
15190  *  Licensed under the MIT License. See License.txt in the project root for license information.
15191  *--------------------------------------------------------------------------------------------*/
15192
15193 var positionKeywords = {
15194     'bottom': 'Computes to ‘100%’ for the vertical position if one or two values are given, otherwise specifies the bottom edge as the origin for the next offset.',
15195     'center': 'Computes to ‘50%’ (‘left 50%’) for the horizontal position if the horizontal position is not otherwise specified, or ‘50%’ (‘top 50%’) for the vertical position if it is.',
15196     'left': 'Computes to ‘0%’ for the horizontal position if one or two values are given, otherwise specifies the left edge as the origin for the next offset.',
15197     'right': 'Computes to ‘100%’ for the horizontal position if one or two values are given, otherwise specifies the right edge as the origin for the next offset.',
15198     'top': 'Computes to ‘0%’ for the vertical position if one or two values are given, otherwise specifies the top edge as the origin for the next offset.'
15199 };
15200 var repeatStyleKeywords = {
15201     'no-repeat': 'Placed once and not repeated in this direction.',
15202     'repeat': 'Repeated in this direction as often as needed to cover the background painting area.',
15203     'repeat-x': 'Computes to ‘repeat no-repeat’.',
15204     'repeat-y': 'Computes to ‘no-repeat repeat’.',
15205     'round': 'Repeated as often as will fit within the background positioning area. If it doesn’t fit a whole number of times, it is rescaled so that it does.',
15206     'space': 'Repeated as often as will fit within the background positioning area without being clipped and then the images are spaced out to fill the area.'
15207 };
15208 var lineStyleKeywords = {
15209     'dashed': 'A series of square-ended dashes.',
15210     'dotted': 'A series of round dots.',
15211     'double': 'Two parallel solid lines with some space between them.',
15212     'groove': 'Looks as if it were carved in the canvas.',
15213     'hidden': 'Same as ‘none’, but has different behavior in the border conflict resolution rules for border-collapsed tables.',
15214     'inset': 'Looks as if the content on the inside of the border is sunken into the canvas.',
15215     'none': 'No border. Color and width are ignored.',
15216     'outset': 'Looks as if the content on the inside of the border is coming out of the canvas.',
15217     'ridge': 'Looks as if it were coming out of the canvas.',
15218     'solid': 'A single line segment.'
15219 };
15220 var lineWidthKeywords = ['medium', 'thick', 'thin'];
15221 var boxKeywords = {
15222     'border-box': 'The background is painted within (clipped to) the border box.',
15223     'content-box': 'The background is painted within (clipped to) the content box.',
15224     'padding-box': 'The background is painted within (clipped to) the padding box.'
15225 };
15226 var geometryBoxKeywords = {
15227     'margin-box': 'Uses the margin box as reference box.',
15228     'fill-box': 'Uses the object bounding box as reference box.',
15229     'stroke-box': 'Uses the stroke bounding box as reference box.',
15230     'view-box': 'Uses the nearest SVG viewport as reference box.'
15231 };
15232 var cssWideKeywords = {
15233     'initial': 'Represents the value specified as the property’s initial value.',
15234     'inherit': 'Represents the computed value of the property on the element’s parent.',
15235     'unset': 'Acts as either `inherit` or `initial`, depending on whether the property is inherited or not.'
15236 };
15237 var imageFunctions = {
15238     'url()': 'Reference an image file by URL',
15239     'image()': 'Provide image fallbacks and annotations.',
15240     '-webkit-image-set()': 'Provide multiple resolutions. Remember to use unprefixed image-set() in addition.',
15241     'image-set()': 'Provide multiple resolutions of an image and const the UA decide which is most appropriate in a given situation.',
15242     '-moz-element()': 'Use an element in the document as an image. Remember to use unprefixed element() in addition.',
15243     'element()': 'Use an element in the document as an image.',
15244     'cross-fade()': 'Indicates the two images to be combined and how far along in the transition the combination is.',
15245     '-webkit-gradient()': 'Deprecated. Use modern linear-gradient() or radial-gradient() instead.',
15246     '-webkit-linear-gradient()': 'Linear gradient. Remember to use unprefixed version in addition.',
15247     '-moz-linear-gradient()': 'Linear gradient. Remember to use unprefixed version in addition.',
15248     '-o-linear-gradient()': 'Linear gradient. Remember to use unprefixed version in addition.',
15249     'linear-gradient()': 'A linear gradient is created by specifying a straight gradient line, and then several colors placed along that line.',
15250     '-webkit-repeating-linear-gradient()': 'Repeating Linear gradient. Remember to use unprefixed version in addition.',
15251     '-moz-repeating-linear-gradient()': 'Repeating Linear gradient. Remember to use unprefixed version in addition.',
15252     '-o-repeating-linear-gradient()': 'Repeating Linear gradient. Remember to use unprefixed version in addition.',
15253     'repeating-linear-gradient()': 'Same as linear-gradient, except the color-stops are repeated infinitely in both directions, with their positions shifted by multiples of the difference between the last specified color-stop’s position and the first specified color-stop’s position.',
15254     '-webkit-radial-gradient()': 'Radial gradient. Remember to use unprefixed version in addition.',
15255     '-moz-radial-gradient()': 'Radial gradient. Remember to use unprefixed version in addition.',
15256     'radial-gradient()': 'Colors emerge from a single point and smoothly spread outward in a circular or elliptical shape.',
15257     '-webkit-repeating-radial-gradient()': 'Repeating radial gradient. Remember to use unprefixed version in addition.',
15258     '-moz-repeating-radial-gradient()': 'Repeating radial gradient. Remember to use unprefixed version in addition.',
15259     'repeating-radial-gradient()': 'Same as radial-gradient, except the color-stops are repeated infinitely in both directions, with their positions shifted by multiples of the difference between the last specified color-stop’s position and the first specified color-stop’s position.'
15260 };
15261 var transitionTimingFunctions = {
15262     'ease': 'Equivalent to cubic-bezier(0.25, 0.1, 0.25, 1.0).',
15263     'ease-in': 'Equivalent to cubic-bezier(0.42, 0, 1.0, 1.0).',
15264     'ease-in-out': 'Equivalent to cubic-bezier(0.42, 0, 0.58, 1.0).',
15265     'ease-out': 'Equivalent to cubic-bezier(0, 0, 0.58, 1.0).',
15266     'linear': 'Equivalent to cubic-bezier(0.0, 0.0, 1.0, 1.0).',
15267     'step-end': 'Equivalent to steps(1, end).',
15268     'step-start': 'Equivalent to steps(1, start).',
15269     'steps()': 'The first parameter specifies the number of intervals in the function. The second parameter, which is optional, is either the value “start” or “end”.',
15270     'cubic-bezier()': 'Specifies a cubic-bezier curve. The four values specify points P1 and P2  of the curve as (x1, y1, x2, y2).',
15271     'cubic-bezier(0.6, -0.28, 0.735, 0.045)': 'Ease-in Back. Overshoots.',
15272     'cubic-bezier(0.68, -0.55, 0.265, 1.55)': 'Ease-in-out Back. Overshoots.',
15273     'cubic-bezier(0.175, 0.885, 0.32, 1.275)': 'Ease-out Back. Overshoots.',
15274     'cubic-bezier(0.6, 0.04, 0.98, 0.335)': 'Ease-in Circular. Based on half circle.',
15275     'cubic-bezier(0.785, 0.135, 0.15, 0.86)': 'Ease-in-out Circular. Based on half circle.',
15276     'cubic-bezier(0.075, 0.82, 0.165, 1)': 'Ease-out Circular. Based on half circle.',
15277     'cubic-bezier(0.55, 0.055, 0.675, 0.19)': 'Ease-in Cubic. Based on power of three.',
15278     'cubic-bezier(0.645, 0.045, 0.355, 1)': 'Ease-in-out Cubic. Based on power of three.',
15279     'cubic-bezier(0.215, 0.610, 0.355, 1)': 'Ease-out Cubic. Based on power of three.',
15280     'cubic-bezier(0.95, 0.05, 0.795, 0.035)': 'Ease-in Exponential. Based on two to the power ten.',
15281     'cubic-bezier(1, 0, 0, 1)': 'Ease-in-out Exponential. Based on two to the power ten.',
15282     'cubic-bezier(0.19, 1, 0.22, 1)': 'Ease-out Exponential. Based on two to the power ten.',
15283     'cubic-bezier(0.47, 0, 0.745, 0.715)': 'Ease-in Sine.',
15284     'cubic-bezier(0.445, 0.05, 0.55, 0.95)': 'Ease-in-out Sine.',
15285     'cubic-bezier(0.39, 0.575, 0.565, 1)': 'Ease-out Sine.',
15286     'cubic-bezier(0.55, 0.085, 0.68, 0.53)': 'Ease-in Quadratic. Based on power of two.',
15287     'cubic-bezier(0.455, 0.03, 0.515, 0.955)': 'Ease-in-out Quadratic. Based on power of two.',
15288     'cubic-bezier(0.25, 0.46, 0.45, 0.94)': 'Ease-out Quadratic. Based on power of two.',
15289     'cubic-bezier(0.895, 0.03, 0.685, 0.22)': 'Ease-in Quartic. Based on power of four.',
15290     'cubic-bezier(0.77, 0, 0.175, 1)': 'Ease-in-out Quartic. Based on power of four.',
15291     'cubic-bezier(0.165, 0.84, 0.44, 1)': 'Ease-out Quartic. Based on power of four.',
15292     'cubic-bezier(0.755, 0.05, 0.855, 0.06)': 'Ease-in Quintic. Based on power of five.',
15293     'cubic-bezier(0.86, 0, 0.07, 1)': 'Ease-in-out Quintic. Based on power of five.',
15294     'cubic-bezier(0.23, 1, 0.320, 1)': 'Ease-out Quintic. Based on power of five.'
15295 };
15296 var basicShapeFunctions = {
15297     'circle()': 'Defines a circle.',
15298     'ellipse()': 'Defines an ellipse.',
15299     'inset()': 'Defines an inset rectangle.',
15300     'polygon()': 'Defines a polygon.'
15301 };
15302 var units = {
15303     'length': ['em', 'rem', 'ex', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'vw', 'vh', 'vmin', 'vmax'],
15304     'angle': ['deg', 'rad', 'grad', 'turn'],
15305     'time': ['ms', 's'],
15306     'frequency': ['Hz', 'kHz'],
15307     'resolution': ['dpi', 'dpcm', 'dppx'],
15308     'percentage': ['%', 'fr']
15309 };
15310 var html5Tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption',
15311     'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer',
15312     'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link',
15313     'main', 'map', 'mark', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q',
15314     'rb', 'rp', 'rt', 'rtc', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td',
15315     'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'const', 'video', 'wbr'];
15316 var svgElements = ['circle', 'clipPath', 'cursor', 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting',
15317     'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology',
15318     'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence', 'filter', 'foreignObject', 'g', 'hatch', 'hatchpath', 'image', 'line', 'linearGradient',
15319     'marker', 'mask', 'mesh', 'meshpatch', 'meshrow', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'set', 'solidcolor', 'stop', 'svg', 'switch',
15320     'symbol', 'text', 'textPath', 'tspan', 'use', 'view'];
15321 var pageBoxDirectives = [
15322     '@bottom-center', '@bottom-left', '@bottom-left-corner', '@bottom-right', '@bottom-right-corner',
15323     '@left-bottom', '@left-middle', '@left-top', '@right-bottom', '@right-middle', '@right-top',
15324     '@top-center', '@top-left', '@top-left-corner', '@top-right', '@top-right-corner'
15325 ];
15326
15327
15328 /***/ }),
15329 /* 84 */
15330 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
15331
15332 __webpack_require__.r(__webpack_exports__);
15333 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
15334 /* harmony export */   "values": () => /* binding */ values,
15335 /* harmony export */   "isDefined": () => /* binding */ isDefined
15336 /* harmony export */ });
15337 /*---------------------------------------------------------------------------------------------
15338  *  Copyright (c) Microsoft Corporation. All rights reserved.
15339  *  Licensed under the MIT License. See License.txt in the project root for license information.
15340  *--------------------------------------------------------------------------------------------*/
15341
15342 function values(obj) {
15343     return Object.keys(obj).map(function (key) { return obj[key]; });
15344 }
15345 function isDefined(obj) {
15346     return typeof obj !== 'undefined';
15347 }
15348
15349
15350 /***/ }),
15351 /* 85 */
15352 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
15353
15354 __webpack_require__.r(__webpack_exports__);
15355 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
15356 /* harmony export */   "CSSCompletion": () => /* binding */ CSSCompletion
15357 /* harmony export */ });
15358 /* harmony import */ var _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74);
15359 /* harmony import */ var _parser_cssSymbolScope__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(86);
15360 /* harmony import */ var _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(80);
15361 /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(75);
15362 /* harmony import */ var _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(88);
15363 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(77);
15364 /* harmony import */ var _utils_objects__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(84);
15365 /* harmony import */ var _pathCompletion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(91);
15366 /*---------------------------------------------------------------------------------------------
15367  *  Copyright (c) Microsoft Corporation. All rights reserved.
15368  *  Licensed under the MIT License. See License.txt in the project root for license information.
15369  *--------------------------------------------------------------------------------------------*/
15370
15371 var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
15372     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15373     return new (P || (P = Promise))(function (resolve, reject) {
15374         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15375         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15376         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
15377         step((generator = generator.apply(thisArg, _arguments || [])).next());
15378     });
15379 };
15380 var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
15381     var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
15382     return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
15383     function verb(n) { return function (v) { return step([n, v]); }; }
15384     function step(op) {
15385         if (f) throw new TypeError("Generator is already executing.");
15386         while (_) try {
15387             if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
15388             if (y = 0, t) op = [op[0] & 2, t.value];
15389             switch (op[0]) {
15390                 case 0: case 1: t = op; break;
15391                 case 4: _.label++; return { value: op[1], done: false };
15392                 case 5: _.label++; y = op[1]; op = [0]; continue;
15393                 case 7: op = _.ops.pop(); _.trys.pop(); continue;
15394                 default:
15395                     if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
15396                     if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
15397                     if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
15398                     if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
15399                     if (t[2]) _.ops.pop();
15400                     _.trys.pop(); continue;
15401             }
15402             op = body.call(thisArg, _);
15403         } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
15404         if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
15405     }
15406 };
15407
15408
15409
15410
15411
15412
15413
15414
15415 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_5__.loadMessageBundle();
15416 var SnippetFormat = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.InsertTextFormat.Snippet;
15417 var SortTexts;
15418 (function (SortTexts) {
15419     // char code 32, comes before everything
15420     SortTexts["Enums"] = " ";
15421     SortTexts["Normal"] = "d";
15422     SortTexts["VendorPrefixed"] = "x";
15423     SortTexts["Term"] = "y";
15424     SortTexts["Variable"] = "z";
15425 })(SortTexts || (SortTexts = {}));
15426 var CSSCompletion = /** @class */ (function () {
15427     function CSSCompletion(variablePrefix, lsOptions, cssDataManager) {
15428         if (variablePrefix === void 0) { variablePrefix = null; }
15429         this.variablePrefix = variablePrefix;
15430         this.lsOptions = lsOptions;
15431         this.cssDataManager = cssDataManager;
15432         this.completionParticipants = [];
15433     }
15434     CSSCompletion.prototype.configure = function (settings) {
15435         this.settings = settings;
15436     };
15437     CSSCompletion.prototype.getSymbolContext = function () {
15438         if (!this.symbolContext) {
15439             this.symbolContext = new _parser_cssSymbolScope__WEBPACK_IMPORTED_MODULE_1__.Symbols(this.styleSheet);
15440         }
15441         return this.symbolContext;
15442     };
15443     CSSCompletion.prototype.setCompletionParticipants = function (registeredCompletionParticipants) {
15444         this.completionParticipants = registeredCompletionParticipants || [];
15445     };
15446     CSSCompletion.prototype.doComplete2 = function (document, position, styleSheet, documentContext) {
15447         return __awaiter(this, void 0, void 0, function () {
15448             var participant, contributedParticipants, result, pathCompletionResult;
15449             return __generator(this, function (_a) {
15450                 switch (_a.label) {
15451                     case 0:
15452                         if (!this.lsOptions.fileSystemProvider || !this.lsOptions.fileSystemProvider.readDirectory) {
15453                             return [2 /*return*/, this.doComplete(document, position, styleSheet)];
15454                         }
15455                         participant = new _pathCompletion__WEBPACK_IMPORTED_MODULE_7__.PathCompletionParticipant(this.lsOptions.fileSystemProvider.readDirectory);
15456                         contributedParticipants = this.completionParticipants;
15457                         this.completionParticipants = [participant].concat(contributedParticipants);
15458                         result = this.doComplete(document, position, styleSheet);
15459                         _a.label = 1;
15460                     case 1:
15461                         _a.trys.push([1, , 3, 4]);
15462                         return [4 /*yield*/, participant.computeCompletions(document, documentContext)];
15463                     case 2:
15464                         pathCompletionResult = _a.sent();
15465                         return [2 /*return*/, {
15466                                 isIncomplete: result.isIncomplete || pathCompletionResult.isIncomplete,
15467                                 items: pathCompletionResult.items.concat(result.items)
15468                             }];
15469                     case 3:
15470                         this.completionParticipants = contributedParticipants;
15471                         return [7 /*endfinally*/];
15472                     case 4: return [2 /*return*/];
15473                 }
15474             });
15475         });
15476     };
15477     CSSCompletion.prototype.doComplete = function (document, position, styleSheet) {
15478         this.offset = document.offsetAt(position);
15479         this.position = position;
15480         this.currentWord = getCurrentWord(document, this.offset);
15481         this.defaultReplaceRange = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.Range.create(_cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.Position.create(this.position.line, this.position.character - this.currentWord.length), this.position);
15482         this.textDocument = document;
15483         this.styleSheet = styleSheet;
15484         try {
15485             var result = { isIncomplete: false, items: [] };
15486             this.nodePath = _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.getNodePath(this.styleSheet, this.offset);
15487             for (var i = this.nodePath.length - 1; i >= 0; i--) {
15488                 var node = this.nodePath[i];
15489                 if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Property) {
15490                     this.getCompletionsForDeclarationProperty(node.getParent(), result);
15491                 }
15492                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Expression) {
15493                     if (node.parent instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Interpolation) {
15494                         this.getVariableProposals(null, result);
15495                     }
15496                     else {
15497                         this.getCompletionsForExpression(node, result);
15498                     }
15499                 }
15500                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.SimpleSelector) {
15501                     var parentRef = node.findAParent(_parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.ExtendsReference, _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Ruleset);
15502                     if (parentRef) {
15503                         if (parentRef.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.ExtendsReference) {
15504                             this.getCompletionsForExtendsReference(parentRef, node, result);
15505                         }
15506                         else {
15507                             var parentRuleSet = parentRef;
15508                             this.getCompletionsForSelector(parentRuleSet, parentRuleSet && parentRuleSet.isNested(), result);
15509                         }
15510                     }
15511                 }
15512                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.FunctionArgument) {
15513                     this.getCompletionsForFunctionArgument(node, node.getParent(), result);
15514                 }
15515                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Declarations) {
15516                     this.getCompletionsForDeclarations(node, result);
15517                 }
15518                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.VariableDeclaration) {
15519                     this.getCompletionsForVariableDeclaration(node, result);
15520                 }
15521                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.RuleSet) {
15522                     this.getCompletionsForRuleSet(node, result);
15523                 }
15524                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Interpolation) {
15525                     this.getCompletionsForInterpolation(node, result);
15526                 }
15527                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.FunctionDeclaration) {
15528                     this.getCompletionsForFunctionDeclaration(node, result);
15529                 }
15530                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.MixinReference) {
15531                     this.getCompletionsForMixinReference(node, result);
15532                 }
15533                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Function) {
15534                     this.getCompletionsForFunctionArgument(null, node, result);
15535                 }
15536                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Supports) {
15537                     this.getCompletionsForSupports(node, result);
15538                 }
15539                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.SupportsCondition) {
15540                     this.getCompletionsForSupportsCondition(node, result);
15541                 }
15542                 else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.ExtendsReference) {
15543                     this.getCompletionsForExtendsReference(node, null, result);
15544                 }
15545                 else if (node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.URILiteral) {
15546                     this.getCompletionForUriLiteralValue(node, result);
15547                 }
15548                 else if (node.parent === null) {
15549                     this.getCompletionForTopLevel(result);
15550                 }
15551                 else if (node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.StringLiteral && this.isImportPathParent(node.parent.type)) {
15552                     this.getCompletionForImportPath(node, result);
15553                     // } else if (node instanceof nodes.Variable) {
15554                     // this.getCompletionsForVariableDeclaration()
15555                 }
15556                 else {
15557                     continue;
15558                 }
15559                 if (result.items.length > 0 || this.offset > node.offset) {
15560                     return this.finalize(result);
15561                 }
15562             }
15563             this.getCompletionsForStylesheet(result);
15564             if (result.items.length === 0) {
15565                 if (this.variablePrefix && this.currentWord.indexOf(this.variablePrefix) === 0) {
15566                     this.getVariableProposals(null, result);
15567                 }
15568             }
15569             return this.finalize(result);
15570         }
15571         finally {
15572             // don't hold on any state, clear symbolContext
15573             this.position = null;
15574             this.currentWord = null;
15575             this.textDocument = null;
15576             this.styleSheet = null;
15577             this.symbolContext = null;
15578             this.defaultReplaceRange = null;
15579             this.nodePath = null;
15580         }
15581     };
15582     CSSCompletion.prototype.isImportPathParent = function (type) {
15583         return type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Import;
15584     };
15585     CSSCompletion.prototype.finalize = function (result) {
15586         return result;
15587     };
15588     CSSCompletion.prototype.findInNodePath = function () {
15589         var types = [];
15590         for (var _i = 0; _i < arguments.length; _i++) {
15591             types[_i] = arguments[_i];
15592         }
15593         for (var i = this.nodePath.length - 1; i >= 0; i--) {
15594             var node = this.nodePath[i];
15595             if (types.indexOf(node.type) !== -1) {
15596                 return node;
15597             }
15598         }
15599         return null;
15600     };
15601     CSSCompletion.prototype.getCompletionsForDeclarationProperty = function (declaration, result) {
15602         return this.getPropertyProposals(declaration, result);
15603     };
15604     CSSCompletion.prototype.getPropertyProposals = function (declaration, result) {
15605         var _this = this;
15606         var triggerPropertyValueCompletion = this.isTriggerPropertyValueCompletionEnabled;
15607         var completePropertyWithSemicolon = this.isCompletePropertyWithSemicolonEnabled;
15608         var properties = this.cssDataManager.getProperties();
15609         properties.forEach(function (entry) {
15610             var range;
15611             var insertText;
15612             var retrigger = false;
15613             if (declaration) {
15614                 range = _this.getCompletionRange(declaration.getProperty());
15615                 insertText = entry.name;
15616                 if (!(0,_utils_objects__WEBPACK_IMPORTED_MODULE_6__.isDefined)(declaration.colonPosition)) {
15617                     insertText += ': ';
15618                     retrigger = true;
15619                 }
15620             }
15621             else {
15622                 range = _this.getCompletionRange(null);
15623                 insertText = entry.name + ': ';
15624                 retrigger = true;
15625             }
15626             // Empty .selector { | } case
15627             if (!declaration && completePropertyWithSemicolon) {
15628                 insertText += '$0;';
15629             }
15630             // Cases such as .selector { p; } or .selector { p:; }
15631             if (declaration && !declaration.semicolonPosition) {
15632                 if (completePropertyWithSemicolon && _this.offset >= _this.textDocument.offsetAt(range.end)) {
15633                     insertText += '$0;';
15634                 }
15635             }
15636             var item = {
15637                 label: entry.name,
15638                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.getEntryDescription(entry, _this.doesSupportMarkdown()),
15639                 tags: isDeprecated(entry) ? [_cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemTag.Deprecated] : [],
15640                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(range, insertText),
15641                 insertTextFormat: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.InsertTextFormat.Snippet,
15642                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Property
15643             };
15644             if (!entry.restrictions) {
15645                 retrigger = false;
15646             }
15647             if (triggerPropertyValueCompletion && retrigger) {
15648                 item.command = {
15649                     title: 'Suggest',
15650                     command: 'editor.action.triggerSuggest'
15651                 };
15652             }
15653             var relevance = typeof entry.relevance === 'number' ? Math.min(Math.max(entry.relevance, 0), 99) : 50;
15654             var sortTextSuffix = (255 - relevance).toString(16);
15655             var sortTextPrefix = _utils_strings__WEBPACK_IMPORTED_MODULE_3__.startsWith(entry.name, '-') ? SortTexts.VendorPrefixed : SortTexts.Normal;
15656             item.sortText = sortTextPrefix + '_' + sortTextSuffix;
15657             result.items.push(item);
15658         });
15659         this.completionParticipants.forEach(function (participant) {
15660             if (participant.onCssProperty) {
15661                 participant.onCssProperty({
15662                     propertyName: _this.currentWord,
15663                     range: _this.defaultReplaceRange
15664                 });
15665             }
15666         });
15667         return result;
15668     };
15669     Object.defineProperty(CSSCompletion.prototype, "isTriggerPropertyValueCompletionEnabled", {
15670         get: function () {
15671             if (!this.settings ||
15672                 !this.settings.completion ||
15673                 this.settings.completion.triggerPropertyValueCompletion === undefined) {
15674                 return true;
15675             }
15676             return this.settings.completion.triggerPropertyValueCompletion;
15677         },
15678         enumerable: false,
15679         configurable: true
15680     });
15681     Object.defineProperty(CSSCompletion.prototype, "isCompletePropertyWithSemicolonEnabled", {
15682         get: function () {
15683             if (!this.settings ||
15684                 !this.settings.completion ||
15685                 this.settings.completion.completePropertyWithSemicolon === undefined) {
15686                 return true;
15687             }
15688             return this.settings.completion.completePropertyWithSemicolon;
15689         },
15690         enumerable: false,
15691         configurable: true
15692     });
15693     CSSCompletion.prototype.getCompletionsForDeclarationValue = function (node, result) {
15694         var _this = this;
15695         var propertyName = node.getFullPropertyName();
15696         var entry = this.cssDataManager.getProperty(propertyName);
15697         var existingNode = node.getValue() || null;
15698         while (existingNode && existingNode.hasChildren()) {
15699             existingNode = existingNode.findChildAtOffset(this.offset, false);
15700         }
15701         this.completionParticipants.forEach(function (participant) {
15702             if (participant.onCssPropertyValue) {
15703                 participant.onCssPropertyValue({
15704                     propertyName: propertyName,
15705                     propertyValue: _this.currentWord,
15706                     range: _this.getCompletionRange(existingNode)
15707                 });
15708             }
15709         });
15710         if (entry) {
15711             if (entry.restrictions) {
15712                 for (var _i = 0, _a = entry.restrictions; _i < _a.length; _i++) {
15713                     var restriction = _a[_i];
15714                     switch (restriction) {
15715                         case 'color':
15716                             this.getColorProposals(entry, existingNode, result);
15717                             break;
15718                         case 'position':
15719                             this.getPositionProposals(entry, existingNode, result);
15720                             break;
15721                         case 'repeat':
15722                             this.getRepeatStyleProposals(entry, existingNode, result);
15723                             break;
15724                         case 'line-style':
15725                             this.getLineStyleProposals(entry, existingNode, result);
15726                             break;
15727                         case 'line-width':
15728                             this.getLineWidthProposals(entry, existingNode, result);
15729                             break;
15730                         case 'geometry-box':
15731                             this.getGeometryBoxProposals(entry, existingNode, result);
15732                             break;
15733                         case 'box':
15734                             this.getBoxProposals(entry, existingNode, result);
15735                             break;
15736                         case 'image':
15737                             this.getImageProposals(entry, existingNode, result);
15738                             break;
15739                         case 'timing-function':
15740                             this.getTimingFunctionProposals(entry, existingNode, result);
15741                             break;
15742                         case 'shape':
15743                             this.getBasicShapeProposals(entry, existingNode, result);
15744                             break;
15745                     }
15746                 }
15747             }
15748             this.getValueEnumProposals(entry, existingNode, result);
15749             this.getCSSWideKeywordProposals(entry, existingNode, result);
15750             this.getUnitProposals(entry, existingNode, result);
15751         }
15752         else {
15753             var existingValues = collectValues(this.styleSheet, node);
15754             for (var _b = 0, _c = existingValues.getEntries(); _b < _c.length; _b++) {
15755                 var existingValue = _c[_b];
15756                 result.items.push({
15757                     label: existingValue,
15758                     textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), existingValue),
15759                     kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Value
15760                 });
15761             }
15762         }
15763         this.getVariableProposals(existingNode, result);
15764         this.getTermProposals(entry, existingNode, result);
15765         return result;
15766     };
15767     CSSCompletion.prototype.getValueEnumProposals = function (entry, existingNode, result) {
15768         if (entry.values) {
15769             for (var _i = 0, _a = entry.values; _i < _a.length; _i++) {
15770                 var value = _a[_i];
15771                 var insertString = value.name;
15772                 var insertTextFormat = void 0;
15773                 if (_utils_strings__WEBPACK_IMPORTED_MODULE_3__.endsWith(insertString, ')')) {
15774                     var from = insertString.lastIndexOf('(');
15775                     if (from !== -1) {
15776                         insertString = insertString.substr(0, from) + '($1)';
15777                         insertTextFormat = SnippetFormat;
15778                     }
15779                 }
15780                 var sortText = SortTexts.Enums;
15781                 if (_utils_strings__WEBPACK_IMPORTED_MODULE_3__.startsWith(value.name, '-')) {
15782                     sortText += SortTexts.VendorPrefixed;
15783                 }
15784                 var item = {
15785                     label: value.name,
15786                     documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.getEntryDescription(value, this.doesSupportMarkdown()),
15787                     tags: isDeprecated(entry) ? [_cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemTag.Deprecated] : [],
15788                     textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), insertString),
15789                     sortText: sortText,
15790                     kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Value,
15791                     insertTextFormat: insertTextFormat
15792                 };
15793                 result.items.push(item);
15794             }
15795         }
15796         return result;
15797     };
15798     CSSCompletion.prototype.getCSSWideKeywordProposals = function (entry, existingNode, result) {
15799         for (var keywords in _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.cssWideKeywords) {
15800             result.items.push({
15801                 label: keywords,
15802                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.cssWideKeywords[keywords],
15803                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), keywords),
15804                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Value
15805             });
15806         }
15807         return result;
15808     };
15809     CSSCompletion.prototype.getCompletionsForInterpolation = function (node, result) {
15810         if (this.offset >= node.offset + 2) {
15811             this.getVariableProposals(null, result);
15812         }
15813         return result;
15814     };
15815     CSSCompletion.prototype.getVariableProposals = function (existingNode, result) {
15816         var symbols = this.getSymbolContext().findSymbolsAtOffset(this.offset, _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Variable);
15817         for (var _i = 0, symbols_1 = symbols; _i < symbols_1.length; _i++) {
15818             var symbol = symbols_1[_i];
15819             var insertText = _utils_strings__WEBPACK_IMPORTED_MODULE_3__.startsWith(symbol.name, '--') ? "var(" + symbol.name + ")" : symbol.name;
15820             var completionItem = {
15821                 label: symbol.name,
15822                 documentation: symbol.value ? _utils_strings__WEBPACK_IMPORTED_MODULE_3__.getLimitedString(symbol.value) : symbol.value,
15823                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), insertText),
15824                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Variable,
15825                 sortText: SortTexts.Variable
15826             };
15827             if (typeof completionItem.documentation === 'string' && isColorString(completionItem.documentation)) {
15828                 completionItem.kind = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Color;
15829             }
15830             if (symbol.node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.FunctionParameter) {
15831                 var mixinNode = (symbol.node.getParent());
15832                 if (mixinNode.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.MixinDeclaration) {
15833                     completionItem.detail = localize('completion.argument', 'argument from \'{0}\'', mixinNode.getName());
15834                 }
15835             }
15836             result.items.push(completionItem);
15837         }
15838         return result;
15839     };
15840     CSSCompletion.prototype.getVariableProposalsForCSSVarFunction = function (result) {
15841         var symbols = this.getSymbolContext().findSymbolsAtOffset(this.offset, _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Variable);
15842         symbols = symbols.filter(function (symbol) {
15843             return _utils_strings__WEBPACK_IMPORTED_MODULE_3__.startsWith(symbol.name, '--');
15844         });
15845         for (var _i = 0, symbols_2 = symbols; _i < symbols_2.length; _i++) {
15846             var symbol = symbols_2[_i];
15847             var completionItem = {
15848                 label: symbol.name,
15849                 documentation: symbol.value ? _utils_strings__WEBPACK_IMPORTED_MODULE_3__.getLimitedString(symbol.value) : symbol.value,
15850                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(null), symbol.name),
15851                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Variable
15852             };
15853             if (typeof completionItem.documentation === 'string' && isColorString(completionItem.documentation)) {
15854                 completionItem.kind = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Color;
15855             }
15856             result.items.push(completionItem);
15857         }
15858         return result;
15859     };
15860     CSSCompletion.prototype.getUnitProposals = function (entry, existingNode, result) {
15861         var currentWord = '0';
15862         if (this.currentWord.length > 0) {
15863             var numMatch = this.currentWord.match(/^-?\d[\.\d+]*/);
15864             if (numMatch) {
15865                 currentWord = numMatch[0];
15866                 result.isIncomplete = currentWord.length === this.currentWord.length;
15867             }
15868         }
15869         else if (this.currentWord.length === 0) {
15870             result.isIncomplete = true;
15871         }
15872         if (existingNode && existingNode.parent && existingNode.parent.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Term) {
15873             existingNode = existingNode.getParent(); // include the unary operator
15874         }
15875         if (entry.restrictions) {
15876             for (var _i = 0, _a = entry.restrictions; _i < _a.length; _i++) {
15877                 var restriction = _a[_i];
15878                 var units = _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.units[restriction];
15879                 if (units) {
15880                     for (var _b = 0, units_1 = units; _b < units_1.length; _b++) {
15881                         var unit = units_1[_b];
15882                         var insertText = currentWord + unit;
15883                         result.items.push({
15884                             label: insertText,
15885                             textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), insertText),
15886                             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Unit
15887                         });
15888                     }
15889                 }
15890             }
15891         }
15892         return result;
15893     };
15894     CSSCompletion.prototype.getCompletionRange = function (existingNode) {
15895         if (existingNode && existingNode.offset <= this.offset && this.offset <= existingNode.end) {
15896             var end = existingNode.end !== -1 ? this.textDocument.positionAt(existingNode.end) : this.position;
15897             var start = this.textDocument.positionAt(existingNode.offset);
15898             if (start.line === end.line) {
15899                 return _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.Range.create(start, end); // multi line edits are not allowed
15900             }
15901         }
15902         return this.defaultReplaceRange;
15903     };
15904     CSSCompletion.prototype.getColorProposals = function (entry, existingNode, result) {
15905         for (var color in _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.colors) {
15906             result.items.push({
15907                 label: color,
15908                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.colors[color],
15909                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), color),
15910                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Color
15911             });
15912         }
15913         for (var color in _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.colorKeywords) {
15914             result.items.push({
15915                 label: color,
15916                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.colorKeywords[color],
15917                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), color),
15918                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Value
15919             });
15920         }
15921         var colorValues = new Set();
15922         this.styleSheet.acceptVisitor(new ColorValueCollector(colorValues, this.offset));
15923         for (var _i = 0, _a = colorValues.getEntries(); _i < _a.length; _i++) {
15924             var color = _a[_i];
15925             result.items.push({
15926                 label: color,
15927                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), color),
15928                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Color
15929             });
15930         }
15931         var _loop_1 = function (p) {
15932             var tabStop = 1;
15933             var replaceFunction = function (_match, p1) { return '${' + tabStop++ + ':' + p1 + '}'; };
15934             var insertText = p.func.replace(/\[?\$(\w+)\]?/g, replaceFunction);
15935             result.items.push({
15936                 label: p.func.substr(0, p.func.indexOf('(')),
15937                 detail: p.func,
15938                 documentation: p.desc,
15939                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this_1.getCompletionRange(existingNode), insertText),
15940                 insertTextFormat: SnippetFormat,
15941                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Function
15942             });
15943         };
15944         var this_1 = this;
15945         for (var _b = 0, _c = _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.colorFunctions; _b < _c.length; _b++) {
15946             var p = _c[_b];
15947             _loop_1(p);
15948         }
15949         return result;
15950     };
15951     CSSCompletion.prototype.getPositionProposals = function (entry, existingNode, result) {
15952         for (var position in _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.positionKeywords) {
15953             result.items.push({
15954                 label: position,
15955                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.positionKeywords[position],
15956                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), position),
15957                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Value
15958             });
15959         }
15960         return result;
15961     };
15962     CSSCompletion.prototype.getRepeatStyleProposals = function (entry, existingNode, result) {
15963         for (var repeat in _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.repeatStyleKeywords) {
15964             result.items.push({
15965                 label: repeat,
15966                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.repeatStyleKeywords[repeat],
15967                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), repeat),
15968                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Value
15969             });
15970         }
15971         return result;
15972     };
15973     CSSCompletion.prototype.getLineStyleProposals = function (entry, existingNode, result) {
15974         for (var lineStyle in _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.lineStyleKeywords) {
15975             result.items.push({
15976                 label: lineStyle,
15977                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.lineStyleKeywords[lineStyle],
15978                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), lineStyle),
15979                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Value
15980             });
15981         }
15982         return result;
15983     };
15984     CSSCompletion.prototype.getLineWidthProposals = function (entry, existingNode, result) {
15985         for (var _i = 0, _a = _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.lineWidthKeywords; _i < _a.length; _i++) {
15986             var lineWidth = _a[_i];
15987             result.items.push({
15988                 label: lineWidth,
15989                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), lineWidth),
15990                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Value
15991             });
15992         }
15993         return result;
15994     };
15995     CSSCompletion.prototype.getGeometryBoxProposals = function (entry, existingNode, result) {
15996         for (var box in _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.geometryBoxKeywords) {
15997             result.items.push({
15998                 label: box,
15999                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.geometryBoxKeywords[box],
16000                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), box),
16001                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Value
16002             });
16003         }
16004         return result;
16005     };
16006     CSSCompletion.prototype.getBoxProposals = function (entry, existingNode, result) {
16007         for (var box in _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.boxKeywords) {
16008             result.items.push({
16009                 label: box,
16010                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.boxKeywords[box],
16011                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), box),
16012                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Value
16013             });
16014         }
16015         return result;
16016     };
16017     CSSCompletion.prototype.getImageProposals = function (entry, existingNode, result) {
16018         for (var image in _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.imageFunctions) {
16019             var insertText = moveCursorInsideParenthesis(image);
16020             result.items.push({
16021                 label: image,
16022                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.imageFunctions[image],
16023                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), insertText),
16024                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Function,
16025                 insertTextFormat: image !== insertText ? SnippetFormat : void 0
16026             });
16027         }
16028         return result;
16029     };
16030     CSSCompletion.prototype.getTimingFunctionProposals = function (entry, existingNode, result) {
16031         for (var timing in _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.transitionTimingFunctions) {
16032             var insertText = moveCursorInsideParenthesis(timing);
16033             result.items.push({
16034                 label: timing,
16035                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.transitionTimingFunctions[timing],
16036                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), insertText),
16037                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Function,
16038                 insertTextFormat: timing !== insertText ? SnippetFormat : void 0
16039             });
16040         }
16041         return result;
16042     };
16043     CSSCompletion.prototype.getBasicShapeProposals = function (entry, existingNode, result) {
16044         for (var shape in _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.basicShapeFunctions) {
16045             var insertText = moveCursorInsideParenthesis(shape);
16046             result.items.push({
16047                 label: shape,
16048                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.basicShapeFunctions[shape],
16049                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), insertText),
16050                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Function,
16051                 insertTextFormat: shape !== insertText ? SnippetFormat : void 0
16052             });
16053         }
16054         return result;
16055     };
16056     CSSCompletion.prototype.getCompletionsForStylesheet = function (result) {
16057         var node = this.styleSheet.findFirstChildBeforeOffset(this.offset);
16058         if (!node) {
16059             return this.getCompletionForTopLevel(result);
16060         }
16061         if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.RuleSet) {
16062             return this.getCompletionsForRuleSet(node, result);
16063         }
16064         if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Supports) {
16065             return this.getCompletionsForSupports(node, result);
16066         }
16067         return result;
16068     };
16069     CSSCompletion.prototype.getCompletionForTopLevel = function (result) {
16070         var _this = this;
16071         this.cssDataManager.getAtDirectives().forEach(function (entry) {
16072             result.items.push({
16073                 label: entry.name,
16074                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(_this.getCompletionRange(null), entry.name),
16075                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.getEntryDescription(entry, _this.doesSupportMarkdown()),
16076                 tags: isDeprecated(entry) ? [_cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemTag.Deprecated] : [],
16077                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Keyword
16078             });
16079         });
16080         this.getCompletionsForSelector(null, false, result);
16081         return result;
16082     };
16083     CSSCompletion.prototype.getCompletionsForRuleSet = function (ruleSet, result) {
16084         var declarations = ruleSet.getDeclarations();
16085         var isAfter = declarations && declarations.endsWith('}') && this.offset >= declarations.end;
16086         if (isAfter) {
16087             return this.getCompletionForTopLevel(result);
16088         }
16089         var isInSelectors = !declarations || this.offset <= declarations.offset;
16090         if (isInSelectors) {
16091             return this.getCompletionsForSelector(ruleSet, ruleSet.isNested(), result);
16092         }
16093         return this.getCompletionsForDeclarations(ruleSet.getDeclarations(), result);
16094     };
16095     CSSCompletion.prototype.getCompletionsForSelector = function (ruleSet, isNested, result) {
16096         var _this = this;
16097         var existingNode = this.findInNodePath(_parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.PseudoSelector, _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.IdentifierSelector, _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.ClassSelector, _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.ElementNameSelector);
16098         if (!existingNode && this.hasCharacterAtPosition(this.offset - this.currentWord.length - 1, ':')) {
16099             // after the ':' of a pseudo selector, no node generated for just ':'
16100             this.currentWord = ':' + this.currentWord;
16101             if (this.hasCharacterAtPosition(this.offset - this.currentWord.length - 1, ':')) {
16102                 this.currentWord = ':' + this.currentWord; // for '::'
16103             }
16104             this.defaultReplaceRange = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.Range.create(_cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.Position.create(this.position.line, this.position.character - this.currentWord.length), this.position);
16105         }
16106         var pseudoClasses = this.cssDataManager.getPseudoClasses();
16107         pseudoClasses.forEach(function (entry) {
16108             var insertText = moveCursorInsideParenthesis(entry.name);
16109             var item = {
16110                 label: entry.name,
16111                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(_this.getCompletionRange(existingNode), insertText),
16112                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.getEntryDescription(entry, _this.doesSupportMarkdown()),
16113                 tags: isDeprecated(entry) ? [_cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemTag.Deprecated] : [],
16114                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Function,
16115                 insertTextFormat: entry.name !== insertText ? SnippetFormat : void 0
16116             };
16117             if (_utils_strings__WEBPACK_IMPORTED_MODULE_3__.startsWith(entry.name, ':-')) {
16118                 item.sortText = SortTexts.VendorPrefixed;
16119             }
16120             result.items.push(item);
16121         });
16122         var pseudoElements = this.cssDataManager.getPseudoElements();
16123         pseudoElements.forEach(function (entry) {
16124             var insertText = moveCursorInsideParenthesis(entry.name);
16125             var item = {
16126                 label: entry.name,
16127                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(_this.getCompletionRange(existingNode), insertText),
16128                 documentation: _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.getEntryDescription(entry, _this.doesSupportMarkdown()),
16129                 tags: isDeprecated(entry) ? [_cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemTag.Deprecated] : [],
16130                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Function,
16131                 insertTextFormat: entry.name !== insertText ? SnippetFormat : void 0
16132             };
16133             if (_utils_strings__WEBPACK_IMPORTED_MODULE_3__.startsWith(entry.name, '::-')) {
16134                 item.sortText = SortTexts.VendorPrefixed;
16135             }
16136             result.items.push(item);
16137         });
16138         if (!isNested) { // show html tags only for top level
16139             for (var _i = 0, _a = _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.html5Tags; _i < _a.length; _i++) {
16140                 var entry = _a[_i];
16141                 result.items.push({
16142                     label: entry,
16143                     textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), entry),
16144                     kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Keyword
16145                 });
16146             }
16147             for (var _b = 0, _c = _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.svgElements; _b < _c.length; _b++) {
16148                 var entry = _c[_b];
16149                 result.items.push({
16150                     label: entry,
16151                     textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), entry),
16152                     kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Keyword
16153                 });
16154             }
16155         }
16156         var visited = {};
16157         visited[this.currentWord] = true;
16158         var docText = this.textDocument.getText();
16159         this.styleSheet.accept(function (n) {
16160             if (n.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.SimpleSelector && n.length > 0) {
16161                 var selector = docText.substr(n.offset, n.length);
16162                 if (selector.charAt(0) === '.' && !visited[selector]) {
16163                     visited[selector] = true;
16164                     result.items.push({
16165                         label: selector,
16166                         textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(_this.getCompletionRange(existingNode), selector),
16167                         kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Keyword
16168                     });
16169                 }
16170                 return false;
16171             }
16172             return true;
16173         });
16174         if (ruleSet && ruleSet.isNested()) {
16175             var selector = ruleSet.getSelectors().findFirstChildBeforeOffset(this.offset);
16176             if (selector && ruleSet.getSelectors().getChildren().indexOf(selector) === 0) {
16177                 this.getPropertyProposals(null, result);
16178             }
16179         }
16180         return result;
16181     };
16182     CSSCompletion.prototype.getCompletionsForDeclarations = function (declarations, result) {
16183         if (!declarations || this.offset === declarations.offset) { // incomplete nodes
16184             return result;
16185         }
16186         var node = declarations.findFirstChildBeforeOffset(this.offset);
16187         if (!node) {
16188             return this.getCompletionsForDeclarationProperty(null, result);
16189         }
16190         if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.AbstractDeclaration) {
16191             var declaration = node;
16192             if (!(0,_utils_objects__WEBPACK_IMPORTED_MODULE_6__.isDefined)(declaration.colonPosition) || this.offset <= declaration.colonPosition) {
16193                 // complete property
16194                 return this.getCompletionsForDeclarationProperty(declaration, result);
16195             }
16196             else if (((0,_utils_objects__WEBPACK_IMPORTED_MODULE_6__.isDefined)(declaration.semicolonPosition) && declaration.semicolonPosition < this.offset)) {
16197                 if (this.offset === declaration.semicolonPosition + 1) {
16198                     return result; // don't show new properties right after semicolon (see Bug 15421:[intellisense] [css] Be less aggressive when manually typing CSS)
16199                 }
16200                 // complete next property
16201                 return this.getCompletionsForDeclarationProperty(null, result);
16202             }
16203             if (declaration instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Declaration) {
16204                 // complete value
16205                 return this.getCompletionsForDeclarationValue(declaration, result);
16206             }
16207         }
16208         else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.ExtendsReference) {
16209             this.getCompletionsForExtendsReference(node, null, result);
16210         }
16211         else if (this.currentWord && this.currentWord[0] === '@') {
16212             this.getCompletionsForDeclarationProperty(null, result);
16213         }
16214         else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.RuleSet) {
16215             this.getCompletionsForDeclarationProperty(null, result);
16216         }
16217         return result;
16218     };
16219     CSSCompletion.prototype.getCompletionsForVariableDeclaration = function (declaration, result) {
16220         if (this.offset && (0,_utils_objects__WEBPACK_IMPORTED_MODULE_6__.isDefined)(declaration.colonPosition) && this.offset > declaration.colonPosition) {
16221             this.getVariableProposals(declaration.getValue(), result);
16222         }
16223         return result;
16224     };
16225     CSSCompletion.prototype.getCompletionsForExpression = function (expression, result) {
16226         var parent = expression.getParent();
16227         if (parent instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.FunctionArgument) {
16228             this.getCompletionsForFunctionArgument(parent, parent.getParent(), result);
16229             return result;
16230         }
16231         var declaration = expression.findParent(_parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Declaration);
16232         if (!declaration) {
16233             this.getTermProposals(undefined, null, result);
16234             return result;
16235         }
16236         var node = expression.findChildAtOffset(this.offset, true);
16237         if (!node) {
16238             return this.getCompletionsForDeclarationValue(declaration, result);
16239         }
16240         if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NumericValue || node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Identifier) {
16241             return this.getCompletionsForDeclarationValue(declaration, result);
16242         }
16243         return result;
16244     };
16245     CSSCompletion.prototype.getCompletionsForFunctionArgument = function (arg, func, result) {
16246         var identifier = func.getIdentifier();
16247         if (identifier && identifier.matches('var')) {
16248             if (!func.getArguments().hasChildren() || func.getArguments().getChild(0) === arg) {
16249                 this.getVariableProposalsForCSSVarFunction(result);
16250             }
16251         }
16252         return result;
16253     };
16254     CSSCompletion.prototype.getCompletionsForFunctionDeclaration = function (decl, result) {
16255         var declarations = decl.getDeclarations();
16256         if (declarations && this.offset > declarations.offset && this.offset < declarations.end) {
16257             this.getTermProposals(undefined, null, result);
16258         }
16259         return result;
16260     };
16261     CSSCompletion.prototype.getCompletionsForMixinReference = function (ref, result) {
16262         var _this = this;
16263         var allMixins = this.getSymbolContext().findSymbolsAtOffset(this.offset, _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Mixin);
16264         for (var _i = 0, allMixins_1 = allMixins; _i < allMixins_1.length; _i++) {
16265             var mixinSymbol = allMixins_1[_i];
16266             if (mixinSymbol.node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.MixinDeclaration) {
16267                 result.items.push(this.makeTermProposal(mixinSymbol, mixinSymbol.node.getParameters(), null));
16268             }
16269         }
16270         var identifierNode = ref.getIdentifier() || null;
16271         this.completionParticipants.forEach(function (participant) {
16272             if (participant.onCssMixinReference) {
16273                 participant.onCssMixinReference({
16274                     mixinName: _this.currentWord,
16275                     range: _this.getCompletionRange(identifierNode)
16276                 });
16277             }
16278         });
16279         return result;
16280     };
16281     CSSCompletion.prototype.getTermProposals = function (entry, existingNode, result) {
16282         var allFunctions = this.getSymbolContext().findSymbolsAtOffset(this.offset, _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Function);
16283         for (var _i = 0, allFunctions_1 = allFunctions; _i < allFunctions_1.length; _i++) {
16284             var functionSymbol = allFunctions_1[_i];
16285             if (functionSymbol.node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.FunctionDeclaration) {
16286                 result.items.push(this.makeTermProposal(functionSymbol, functionSymbol.node.getParameters(), existingNode));
16287             }
16288         }
16289         return result;
16290     };
16291     CSSCompletion.prototype.makeTermProposal = function (symbol, parameters, existingNode) {
16292         var decl = symbol.node;
16293         var params = parameters.getChildren().map(function (c) {
16294             return (c instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.FunctionParameter) ? c.getName() : c.getText();
16295         });
16296         var insertText = symbol.name + '(' + params.map(function (p, index) { return '${' + (index + 1) + ':' + p + '}'; }).join(', ') + ')';
16297         return {
16298             label: symbol.name,
16299             detail: symbol.name + '(' + params.join(', ') + ')',
16300             textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.TextEdit.replace(this.getCompletionRange(existingNode), insertText),
16301             insertTextFormat: SnippetFormat,
16302             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.CompletionItemKind.Function,
16303             sortText: SortTexts.Term
16304         };
16305     };
16306     CSSCompletion.prototype.getCompletionsForSupportsCondition = function (supportsCondition, result) {
16307         var child = supportsCondition.findFirstChildBeforeOffset(this.offset);
16308         if (child) {
16309             if (child instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Declaration) {
16310                 if (!(0,_utils_objects__WEBPACK_IMPORTED_MODULE_6__.isDefined)(child.colonPosition) || this.offset <= child.colonPosition) {
16311                     return this.getCompletionsForDeclarationProperty(child, result);
16312                 }
16313                 else {
16314                     return this.getCompletionsForDeclarationValue(child, result);
16315                 }
16316             }
16317             else if (child instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.SupportsCondition) {
16318                 return this.getCompletionsForSupportsCondition(child, result);
16319             }
16320         }
16321         if ((0,_utils_objects__WEBPACK_IMPORTED_MODULE_6__.isDefined)(supportsCondition.lParent) && this.offset > supportsCondition.lParent && (!(0,_utils_objects__WEBPACK_IMPORTED_MODULE_6__.isDefined)(supportsCondition.rParent) || this.offset <= supportsCondition.rParent)) {
16322             return this.getCompletionsForDeclarationProperty(null, result);
16323         }
16324         return result;
16325     };
16326     CSSCompletion.prototype.getCompletionsForSupports = function (supports, result) {
16327         var declarations = supports.getDeclarations();
16328         var inInCondition = !declarations || this.offset <= declarations.offset;
16329         if (inInCondition) {
16330             var child = supports.findFirstChildBeforeOffset(this.offset);
16331             if (child instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.SupportsCondition) {
16332                 return this.getCompletionsForSupportsCondition(child, result);
16333             }
16334             return result;
16335         }
16336         return this.getCompletionForTopLevel(result);
16337     };
16338     CSSCompletion.prototype.getCompletionsForExtendsReference = function (extendsRef, existingNode, result) {
16339         return result;
16340     };
16341     CSSCompletion.prototype.getCompletionForUriLiteralValue = function (uriLiteralNode, result) {
16342         var uriValue;
16343         var position;
16344         var range;
16345         // No children, empty value
16346         if (!uriLiteralNode.hasChildren()) {
16347             uriValue = '';
16348             position = this.position;
16349             var emptyURIValuePosition = this.textDocument.positionAt(uriLiteralNode.offset + 'url('.length);
16350             range = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.Range.create(emptyURIValuePosition, emptyURIValuePosition);
16351         }
16352         else {
16353             var uriValueNode = uriLiteralNode.getChild(0);
16354             uriValue = uriValueNode.getText();
16355             position = this.position;
16356             range = this.getCompletionRange(uriValueNode);
16357         }
16358         this.completionParticipants.forEach(function (participant) {
16359             if (participant.onCssURILiteralValue) {
16360                 participant.onCssURILiteralValue({
16361                     uriValue: uriValue,
16362                     position: position,
16363                     range: range
16364                 });
16365             }
16366         });
16367         return result;
16368     };
16369     CSSCompletion.prototype.getCompletionForImportPath = function (importPathNode, result) {
16370         var _this = this;
16371         this.completionParticipants.forEach(function (participant) {
16372             if (participant.onCssImportPath) {
16373                 participant.onCssImportPath({
16374                     pathValue: importPathNode.getText(),
16375                     position: _this.position,
16376                     range: _this.getCompletionRange(importPathNode)
16377                 });
16378             }
16379         });
16380         return result;
16381     };
16382     CSSCompletion.prototype.hasCharacterAtPosition = function (offset, char) {
16383         var text = this.textDocument.getText();
16384         return (offset >= 0 && offset < text.length) && text.charAt(offset) === char;
16385     };
16386     CSSCompletion.prototype.doesSupportMarkdown = function () {
16387         var _a, _b, _c;
16388         if (!(0,_utils_objects__WEBPACK_IMPORTED_MODULE_6__.isDefined)(this.supportsMarkdown)) {
16389             if (!(0,_utils_objects__WEBPACK_IMPORTED_MODULE_6__.isDefined)(this.lsOptions.clientCapabilities)) {
16390                 this.supportsMarkdown = true;
16391                 return this.supportsMarkdown;
16392             }
16393             var documentationFormat = (_c = (_b = (_a = this.lsOptions.clientCapabilities.textDocument) === null || _a === void 0 ? void 0 : _a.completion) === null || _b === void 0 ? void 0 : _b.completionItem) === null || _c === void 0 ? void 0 : _c.documentationFormat;
16394             this.supportsMarkdown = Array.isArray(documentationFormat) && documentationFormat.indexOf(_cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.MarkupKind.Markdown) !== -1;
16395         }
16396         return this.supportsMarkdown;
16397     };
16398     return CSSCompletion;
16399 }());
16400
16401 function isDeprecated(entry) {
16402     if (entry.status && (entry.status === 'nonstandard' || entry.status === 'obsolete')) {
16403         return true;
16404     }
16405     return false;
16406 }
16407 /**
16408  * Rank number should all be same length strings
16409  */
16410 function computeRankNumber(n) {
16411     var nstr = n.toString();
16412     switch (nstr.length) {
16413         case 4:
16414             return nstr;
16415         case 3:
16416             return '0' + nstr;
16417         case 2:
16418             return '00' + nstr;
16419         case 1:
16420             return '000' + nstr;
16421         default:
16422             return '0000';
16423     }
16424 }
16425 var Set = /** @class */ (function () {
16426     function Set() {
16427         this.entries = {};
16428     }
16429     Set.prototype.add = function (entry) {
16430         this.entries[entry] = true;
16431     };
16432     Set.prototype.getEntries = function () {
16433         return Object.keys(this.entries);
16434     };
16435     return Set;
16436 }());
16437 function moveCursorInsideParenthesis(text) {
16438     return text.replace(/\(\)$/, "($1)");
16439 }
16440 function collectValues(styleSheet, declaration) {
16441     var fullPropertyName = declaration.getFullPropertyName();
16442     var entries = new Set();
16443     function visitValue(node) {
16444         if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Identifier || node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NumericValue || node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.HexColorValue) {
16445             entries.add(node.getText());
16446         }
16447         return true;
16448     }
16449     function matchesProperty(decl) {
16450         var propertyName = decl.getFullPropertyName();
16451         return fullPropertyName === propertyName;
16452     }
16453     function vistNode(node) {
16454         if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Declaration && node !== declaration) {
16455             if (matchesProperty(node)) {
16456                 var value = node.getValue();
16457                 if (value) {
16458                     value.accept(visitValue);
16459                 }
16460             }
16461         }
16462         return true;
16463     }
16464     styleSheet.accept(vistNode);
16465     return entries;
16466 }
16467 var ColorValueCollector = /** @class */ (function () {
16468     function ColorValueCollector(entries, currentOffset) {
16469         this.entries = entries;
16470         this.currentOffset = currentOffset;
16471         // nothing to do
16472     }
16473     ColorValueCollector.prototype.visitNode = function (node) {
16474         if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.HexColorValue || (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Function && _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.isColorConstructor(node))) {
16475             if (this.currentOffset < node.offset || node.end < this.currentOffset) {
16476                 this.entries.add(node.getText());
16477             }
16478         }
16479         return true;
16480     };
16481     return ColorValueCollector;
16482 }());
16483 function getCurrentWord(document, offset) {
16484     var i = offset - 1;
16485     var text = document.getText();
16486     while (i >= 0 && ' \t\n\r":{[()]},*>+'.indexOf(text.charAt(i)) === -1) {
16487         i--;
16488     }
16489     return text.substring(i + 1, offset);
16490 }
16491 function isColorString(s) {
16492     // From https://stackoverflow.com/questions/8027423/how-to-check-if-a-string-is-a-valid-hex-color-representation/8027444
16493     return (s.toLowerCase() in _languageFacts_facts__WEBPACK_IMPORTED_MODULE_2__.colors) || /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(s);
16494 }
16495
16496
16497 /***/ }),
16498 /* 86 */
16499 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
16500
16501 __webpack_require__.r(__webpack_exports__);
16502 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
16503 /* harmony export */   "Scope": () => /* binding */ Scope,
16504 /* harmony export */   "GlobalScope": () => /* binding */ GlobalScope,
16505 /* harmony export */   "Symbol": () => /* binding */ Symbol,
16506 /* harmony export */   "ScopeBuilder": () => /* binding */ ScopeBuilder,
16507 /* harmony export */   "Symbols": () => /* binding */ Symbols
16508 /* harmony export */ });
16509 /* harmony import */ var _cssNodes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74);
16510 /* harmony import */ var _utils_arrays__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87);
16511 /*---------------------------------------------------------------------------------------------
16512  *  Copyright (c) Microsoft Corporation. All rights reserved.
16513  *  Licensed under the MIT License. See License.txt in the project root for license information.
16514  *--------------------------------------------------------------------------------------------*/
16515
16516 var __extends = (undefined && undefined.__extends) || (function () {
16517     var extendStatics = function (d, b) {
16518         extendStatics = Object.setPrototypeOf ||
16519             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
16520             function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
16521         return extendStatics(d, b);
16522     };
16523     return function (d, b) {
16524         extendStatics(d, b);
16525         function __() { this.constructor = d; }
16526         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
16527     };
16528 })();
16529
16530
16531 var Scope = /** @class */ (function () {
16532     function Scope(offset, length) {
16533         this.offset = offset;
16534         this.length = length;
16535         this.symbols = [];
16536         this.parent = null;
16537         this.children = [];
16538     }
16539     Scope.prototype.addChild = function (scope) {
16540         this.children.push(scope);
16541         scope.setParent(this);
16542     };
16543     Scope.prototype.setParent = function (scope) {
16544         this.parent = scope;
16545     };
16546     Scope.prototype.findScope = function (offset, length) {
16547         if (length === void 0) { length = 0; }
16548         if (this.offset <= offset && this.offset + this.length > offset + length || this.offset === offset && this.length === length) {
16549             return this.findInScope(offset, length);
16550         }
16551         return null;
16552     };
16553     Scope.prototype.findInScope = function (offset, length) {
16554         if (length === void 0) { length = 0; }
16555         // find the first scope child that has an offset larger than offset + length
16556         var end = offset + length;
16557         var idx = (0,_utils_arrays__WEBPACK_IMPORTED_MODULE_1__.findFirst)(this.children, function (s) { return s.offset > end; });
16558         if (idx === 0) {
16559             // all scopes have offsets larger than our end
16560             return this;
16561         }
16562         var res = this.children[idx - 1];
16563         if (res.offset <= offset && res.offset + res.length >= offset + length) {
16564             return res.findInScope(offset, length);
16565         }
16566         return this;
16567     };
16568     Scope.prototype.addSymbol = function (symbol) {
16569         this.symbols.push(symbol);
16570     };
16571     Scope.prototype.getSymbol = function (name, type) {
16572         for (var index = 0; index < this.symbols.length; index++) {
16573             var symbol = this.symbols[index];
16574             if (symbol.name === name && symbol.type === type) {
16575                 return symbol;
16576             }
16577         }
16578         return null;
16579     };
16580     Scope.prototype.getSymbols = function () {
16581         return this.symbols;
16582     };
16583     return Scope;
16584 }());
16585
16586 var GlobalScope = /** @class */ (function (_super) {
16587     __extends(GlobalScope, _super);
16588     function GlobalScope() {
16589         return _super.call(this, 0, Number.MAX_VALUE) || this;
16590     }
16591     return GlobalScope;
16592 }(Scope));
16593
16594 var Symbol = /** @class */ (function () {
16595     function Symbol(name, value, node, type) {
16596         this.name = name;
16597         this.value = value;
16598         this.node = node;
16599         this.type = type;
16600     }
16601     return Symbol;
16602 }());
16603
16604 var ScopeBuilder = /** @class */ (function () {
16605     function ScopeBuilder(scope) {
16606         this.scope = scope;
16607     }
16608     ScopeBuilder.prototype.addSymbol = function (node, name, value, type) {
16609         if (node.offset !== -1) {
16610             var current = this.scope.findScope(node.offset, node.length);
16611             if (current) {
16612                 current.addSymbol(new Symbol(name, value, node, type));
16613             }
16614         }
16615     };
16616     ScopeBuilder.prototype.addScope = function (node) {
16617         if (node.offset !== -1) {
16618             var current = this.scope.findScope(node.offset, node.length);
16619             if (current && (current.offset !== node.offset || current.length !== node.length)) { // scope already known?
16620                 var newScope = new Scope(node.offset, node.length);
16621                 current.addChild(newScope);
16622                 return newScope;
16623             }
16624             return current;
16625         }
16626         return null;
16627     };
16628     ScopeBuilder.prototype.addSymbolToChildScope = function (scopeNode, node, name, value, type) {
16629         if (scopeNode && scopeNode.offset !== -1) {
16630             var current = this.addScope(scopeNode); // create the scope or gets the existing one
16631             if (current) {
16632                 current.addSymbol(new Symbol(name, value, node, type));
16633             }
16634         }
16635     };
16636     ScopeBuilder.prototype.visitNode = function (node) {
16637         switch (node.type) {
16638             case _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Keyframe:
16639                 this.addSymbol(node, node.getName(), void 0, _cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Keyframe);
16640                 return true;
16641             case _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.CustomPropertyDeclaration:
16642                 return this.visitCustomPropertyDeclarationNode(node);
16643             case _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.VariableDeclaration:
16644                 return this.visitVariableDeclarationNode(node);
16645             case _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Ruleset:
16646                 return this.visitRuleSet(node);
16647             case _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.MixinDeclaration:
16648                 this.addSymbol(node, node.getName(), void 0, _cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Mixin);
16649                 return true;
16650             case _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.FunctionDeclaration:
16651                 this.addSymbol(node, node.getName(), void 0, _cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Function);
16652                 return true;
16653             case _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.FunctionParameter: {
16654                 return this.visitFunctionParameterNode(node);
16655             }
16656             case _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Declarations:
16657                 this.addScope(node);
16658                 return true;
16659             case _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.For:
16660                 var forNode = node;
16661                 var scopeNode = forNode.getDeclarations();
16662                 if (scopeNode && forNode.variable) {
16663                     this.addSymbolToChildScope(scopeNode, forNode.variable, forNode.variable.getName(), void 0, _cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Variable);
16664                 }
16665                 return true;
16666             case _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Each: {
16667                 var eachNode = node;
16668                 var scopeNode_1 = eachNode.getDeclarations();
16669                 if (scopeNode_1) {
16670                     var variables = eachNode.getVariables().getChildren();
16671                     for (var _i = 0, variables_1 = variables; _i < variables_1.length; _i++) {
16672                         var variable = variables_1[_i];
16673                         this.addSymbolToChildScope(scopeNode_1, variable, variable.getName(), void 0, _cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Variable);
16674                     }
16675                 }
16676                 return true;
16677             }
16678         }
16679         return true;
16680     };
16681     ScopeBuilder.prototype.visitRuleSet = function (node) {
16682         var current = this.scope.findScope(node.offset, node.length);
16683         if (current) {
16684             for (var _i = 0, _a = node.getSelectors().getChildren(); _i < _a.length; _i++) {
16685                 var child = _a[_i];
16686                 if (child instanceof _cssNodes__WEBPACK_IMPORTED_MODULE_0__.Selector) {
16687                     if (child.getChildren().length === 1) { // only selectors with a single element can be extended
16688                         current.addSymbol(new Symbol(child.getChild(0).getText(), void 0, child, _cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Rule));
16689                     }
16690                 }
16691             }
16692         }
16693         return true;
16694     };
16695     ScopeBuilder.prototype.visitVariableDeclarationNode = function (node) {
16696         var value = node.getValue() ? node.getValue().getText() : void 0;
16697         this.addSymbol(node, node.getName(), value, _cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Variable);
16698         return true;
16699     };
16700     ScopeBuilder.prototype.visitFunctionParameterNode = function (node) {
16701         // parameters are part of the body scope
16702         var scopeNode = node.getParent().getDeclarations();
16703         if (scopeNode) {
16704             var valueNode = node.getDefaultValue();
16705             var value = valueNode ? valueNode.getText() : void 0;
16706             this.addSymbolToChildScope(scopeNode, node, node.getName(), value, _cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Variable);
16707         }
16708         return true;
16709     };
16710     ScopeBuilder.prototype.visitCustomPropertyDeclarationNode = function (node) {
16711         var value = node.getValue() ? node.getValue().getText() : '';
16712         this.addCSSVariable(node.getProperty(), node.getProperty().getName(), value, _cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Variable);
16713         return true;
16714     };
16715     ScopeBuilder.prototype.addCSSVariable = function (node, name, value, type) {
16716         if (node.offset !== -1) {
16717             this.scope.addSymbol(new Symbol(name, value, node, type));
16718         }
16719     };
16720     return ScopeBuilder;
16721 }());
16722
16723 var Symbols = /** @class */ (function () {
16724     function Symbols(node) {
16725         this.global = new GlobalScope();
16726         node.acceptVisitor(new ScopeBuilder(this.global));
16727     }
16728     Symbols.prototype.findSymbolsAtOffset = function (offset, referenceType) {
16729         var scope = this.global.findScope(offset, 0);
16730         var result = [];
16731         var names = {};
16732         while (scope) {
16733             var symbols = scope.getSymbols();
16734             for (var i = 0; i < symbols.length; i++) {
16735                 var symbol = symbols[i];
16736                 if (symbol.type === referenceType && !names[symbol.name]) {
16737                     result.push(symbol);
16738                     names[symbol.name] = true;
16739                 }
16740             }
16741             scope = scope.parent;
16742         }
16743         return result;
16744     };
16745     Symbols.prototype.internalFindSymbol = function (node, referenceTypes) {
16746         var scopeNode = node;
16747         if (node.parent instanceof _cssNodes__WEBPACK_IMPORTED_MODULE_0__.FunctionParameter && node.parent.getParent() instanceof _cssNodes__WEBPACK_IMPORTED_MODULE_0__.BodyDeclaration) {
16748             scopeNode = node.parent.getParent().getDeclarations();
16749         }
16750         if (node.parent instanceof _cssNodes__WEBPACK_IMPORTED_MODULE_0__.FunctionArgument && node.parent.getParent() instanceof _cssNodes__WEBPACK_IMPORTED_MODULE_0__.Function) {
16751             var funcId = node.parent.getParent().getIdentifier();
16752             if (funcId) {
16753                 var functionSymbol = this.internalFindSymbol(funcId, [_cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Function]);
16754                 if (functionSymbol) {
16755                     scopeNode = functionSymbol.node.getDeclarations();
16756                 }
16757             }
16758         }
16759         if (!scopeNode) {
16760             return null;
16761         }
16762         var name = node.getText();
16763         var scope = this.global.findScope(scopeNode.offset, scopeNode.length);
16764         while (scope) {
16765             for (var index = 0; index < referenceTypes.length; index++) {
16766                 var type = referenceTypes[index];
16767                 var symbol = scope.getSymbol(name, type);
16768                 if (symbol) {
16769                     return symbol;
16770                 }
16771             }
16772             scope = scope.parent;
16773         }
16774         return null;
16775     };
16776     Symbols.prototype.evaluateReferenceTypes = function (node) {
16777         if (node instanceof _cssNodes__WEBPACK_IMPORTED_MODULE_0__.Identifier) {
16778             var referenceTypes = node.referenceTypes;
16779             if (referenceTypes) {
16780                 return referenceTypes;
16781             }
16782             else {
16783                 if (node.isCustomProperty) {
16784                     return [_cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Variable];
16785                 }
16786                 // are a reference to a keyframe?
16787                 var decl = _cssNodes__WEBPACK_IMPORTED_MODULE_0__.getParentDeclaration(node);
16788                 if (decl) {
16789                     var propertyName = decl.getNonPrefixedPropertyName();
16790                     if ((propertyName === 'animation' || propertyName === 'animation-name')
16791                         && decl.getValue() && decl.getValue().offset === node.offset) {
16792                         return [_cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Keyframe];
16793                     }
16794                 }
16795             }
16796         }
16797         else if (node instanceof _cssNodes__WEBPACK_IMPORTED_MODULE_0__.Variable) {
16798             return [_cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Variable];
16799         }
16800         var selector = node.findAParent(_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Selector, _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.ExtendsReference);
16801         if (selector) {
16802             return [_cssNodes__WEBPACK_IMPORTED_MODULE_0__.ReferenceType.Rule];
16803         }
16804         return null;
16805     };
16806     Symbols.prototype.findSymbolFromNode = function (node) {
16807         if (!node) {
16808             return null;
16809         }
16810         while (node.type === _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Interpolation) {
16811             node = node.getParent();
16812         }
16813         var referenceTypes = this.evaluateReferenceTypes(node);
16814         if (referenceTypes) {
16815             return this.internalFindSymbol(node, referenceTypes);
16816         }
16817         return null;
16818     };
16819     Symbols.prototype.matchesSymbol = function (node, symbol) {
16820         if (!node) {
16821             return false;
16822         }
16823         while (node.type === _cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Interpolation) {
16824             node = node.getParent();
16825         }
16826         if (!node.matches(symbol.name)) {
16827             return false;
16828         }
16829         var referenceTypes = this.evaluateReferenceTypes(node);
16830         if (!referenceTypes || referenceTypes.indexOf(symbol.type) === -1) {
16831             return false;
16832         }
16833         var nodeSymbol = this.internalFindSymbol(node, referenceTypes);
16834         return nodeSymbol === symbol;
16835     };
16836     Symbols.prototype.findSymbol = function (name, type, offset) {
16837         var scope = this.global.findScope(offset);
16838         while (scope) {
16839             var symbol = scope.getSymbol(name, type);
16840             if (symbol) {
16841                 return symbol;
16842             }
16843             scope = scope.parent;
16844         }
16845         return null;
16846     };
16847     return Symbols;
16848 }());
16849
16850
16851
16852 /***/ }),
16853 /* 87 */
16854 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
16855
16856 __webpack_require__.r(__webpack_exports__);
16857 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
16858 /* harmony export */   "findFirst": () => /* binding */ findFirst,
16859 /* harmony export */   "includes": () => /* binding */ includes,
16860 /* harmony export */   "union": () => /* binding */ union
16861 /* harmony export */ });
16862 /*---------------------------------------------------------------------------------------------
16863  *  Copyright (c) Microsoft Corporation. All rights reserved.
16864  *  Licensed under the MIT License. See License.txt in the project root for license information.
16865  *--------------------------------------------------------------------------------------------*/
16866
16867 /**
16868  * Takes a sorted array and a function p. The array is sorted in such a way that all elements where p(x) is false
16869  * are located before all elements where p(x) is true.
16870  * @returns the least x for which p(x) is true or array.length if no element fullfills the given function.
16871  */
16872 function findFirst(array, p) {
16873     var low = 0, high = array.length;
16874     if (high === 0) {
16875         return 0; // no children
16876     }
16877     while (low < high) {
16878         var mid = Math.floor((low + high) / 2);
16879         if (p(array[mid])) {
16880             high = mid;
16881         }
16882         else {
16883             low = mid + 1;
16884         }
16885     }
16886     return low;
16887 }
16888 function includes(array, item) {
16889     return array.indexOf(item) !== -1;
16890 }
16891 function union() {
16892     var arrays = [];
16893     for (var _i = 0; _i < arguments.length; _i++) {
16894         arrays[_i] = arguments[_i];
16895     }
16896     var result = [];
16897     for (var _a = 0, arrays_1 = arrays; _a < arrays_1.length; _a++) {
16898         var array = arrays_1[_a];
16899         for (var _b = 0, array_1 = array; _b < array_1.length; _b++) {
16900             var item = array_1[_b];
16901             if (!includes(result, item)) {
16902                 result.push(item);
16903             }
16904         }
16905     }
16906     return result;
16907 }
16908
16909
16910 /***/ }),
16911 /* 88 */
16912 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
16913
16914 __webpack_require__.r(__webpack_exports__);
16915 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
16916 /* harmony export */   "TextDocument": () => /* reexport safe */ vscode_languageserver_textdocument__WEBPACK_IMPORTED_MODULE_1__.TextDocument,
16917 /* harmony export */   "AnnotatedTextEdit": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.AnnotatedTextEdit,
16918 /* harmony export */   "ChangeAnnotation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.ChangeAnnotation,
16919 /* harmony export */   "ChangeAnnotationIdentifier": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.ChangeAnnotationIdentifier,
16920 /* harmony export */   "CodeAction": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CodeAction,
16921 /* harmony export */   "CodeActionContext": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CodeActionContext,
16922 /* harmony export */   "CodeActionKind": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CodeActionKind,
16923 /* harmony export */   "CodeDescription": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CodeDescription,
16924 /* harmony export */   "CodeLens": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CodeLens,
16925 /* harmony export */   "Color": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Color,
16926 /* harmony export */   "ColorInformation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.ColorInformation,
16927 /* harmony export */   "ColorPresentation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.ColorPresentation,
16928 /* harmony export */   "Command": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Command,
16929 /* harmony export */   "CompletionItem": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CompletionItem,
16930 /* harmony export */   "CompletionItemKind": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CompletionItemKind,
16931 /* harmony export */   "CompletionItemTag": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CompletionItemTag,
16932 /* harmony export */   "CompletionList": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CompletionList,
16933 /* harmony export */   "CreateFile": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CreateFile,
16934 /* harmony export */   "DeleteFile": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DeleteFile,
16935 /* harmony export */   "Diagnostic": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Diagnostic,
16936 /* harmony export */   "DiagnosticRelatedInformation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DiagnosticRelatedInformation,
16937 /* harmony export */   "DiagnosticSeverity": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DiagnosticSeverity,
16938 /* harmony export */   "DiagnosticTag": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DiagnosticTag,
16939 /* harmony export */   "DocumentHighlight": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DocumentHighlight,
16940 /* harmony export */   "DocumentHighlightKind": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DocumentHighlightKind,
16941 /* harmony export */   "DocumentLink": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DocumentLink,
16942 /* harmony export */   "DocumentSymbol": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DocumentSymbol,
16943 /* harmony export */   "EOL": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.EOL,
16944 /* harmony export */   "FoldingRange": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.FoldingRange,
16945 /* harmony export */   "FoldingRangeKind": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.FoldingRangeKind,
16946 /* harmony export */   "FormattingOptions": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.FormattingOptions,
16947 /* harmony export */   "Hover": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Hover,
16948 /* harmony export */   "InsertReplaceEdit": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.InsertReplaceEdit,
16949 /* harmony export */   "InsertTextFormat": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.InsertTextFormat,
16950 /* harmony export */   "InsertTextMode": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.InsertTextMode,
16951 /* harmony export */   "Location": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Location,
16952 /* harmony export */   "LocationLink": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.LocationLink,
16953 /* harmony export */   "MarkedString": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkedString,
16954 /* harmony export */   "MarkupContent": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkupContent,
16955 /* harmony export */   "MarkupKind": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkupKind,
16956 /* harmony export */   "OptionalVersionedTextDocumentIdentifier": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.OptionalVersionedTextDocumentIdentifier,
16957 /* harmony export */   "ParameterInformation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.ParameterInformation,
16958 /* harmony export */   "Position": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Position,
16959 /* harmony export */   "Range": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Range,
16960 /* harmony export */   "RenameFile": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.RenameFile,
16961 /* harmony export */   "SelectionRange": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.SelectionRange,
16962 /* harmony export */   "SignatureInformation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.SignatureInformation,
16963 /* harmony export */   "SymbolInformation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.SymbolInformation,
16964 /* harmony export */   "SymbolKind": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.SymbolKind,
16965 /* harmony export */   "SymbolTag": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.SymbolTag,
16966 /* harmony export */   "TextDocumentEdit": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.TextDocumentEdit,
16967 /* harmony export */   "TextDocumentIdentifier": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.TextDocumentIdentifier,
16968 /* harmony export */   "TextDocumentItem": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.TextDocumentItem,
16969 /* harmony export */   "TextEdit": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.TextEdit,
16970 /* harmony export */   "VersionedTextDocumentIdentifier": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.VersionedTextDocumentIdentifier,
16971 /* harmony export */   "WorkspaceChange": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.WorkspaceChange,
16972 /* harmony export */   "WorkspaceEdit": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.WorkspaceEdit,
16973 /* harmony export */   "integer": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.integer,
16974 /* harmony export */   "uinteger": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.uinteger,
16975 /* harmony export */   "ClientCapabilities": () => /* binding */ ClientCapabilities,
16976 /* harmony export */   "FileType": () => /* binding */ FileType
16977 /* harmony export */ });
16978 /* harmony import */ var vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(89);
16979 /* harmony import */ var vscode_languageserver_textdocument__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(90);
16980 /*---------------------------------------------------------------------------------------------
16981  *  Copyright (c) Microsoft Corporation. All rights reserved.
16982  *  Licensed under the MIT License. See License.txt in the project root for license information.
16983  *--------------------------------------------------------------------------------------------*/
16984
16985
16986
16987
16988 var ClientCapabilities;
16989 (function (ClientCapabilities) {
16990     ClientCapabilities.LATEST = {
16991         textDocument: {
16992             completion: {
16993                 completionItem: {
16994                     documentationFormat: [vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkupKind.Markdown, vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkupKind.PlainText]
16995                 }
16996             },
16997             hover: {
16998                 contentFormat: [vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkupKind.Markdown, vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkupKind.PlainText]
16999             }
17000         }
17001     };
17002 })(ClientCapabilities || (ClientCapabilities = {}));
17003 var FileType;
17004 (function (FileType) {
17005     /**
17006      * The file type is unknown.
17007      */
17008     FileType[FileType["Unknown"] = 0] = "Unknown";
17009     /**
17010      * A regular file.
17011      */
17012     FileType[FileType["File"] = 1] = "File";
17013     /**
17014      * A directory.
17015      */
17016     FileType[FileType["Directory"] = 2] = "Directory";
17017     /**
17018      * A symbolic link to a file.
17019      */
17020     FileType[FileType["SymbolicLink"] = 64] = "SymbolicLink";
17021 })(FileType || (FileType = {}));
17022
17023
17024 /***/ }),
17025 /* 89 */
17026 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
17027
17028 __webpack_require__.r(__webpack_exports__);
17029 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
17030 /* harmony export */   "integer": () => /* binding */ integer,
17031 /* harmony export */   "uinteger": () => /* binding */ uinteger,
17032 /* harmony export */   "Position": () => /* binding */ Position,
17033 /* harmony export */   "Range": () => /* binding */ Range,
17034 /* harmony export */   "Location": () => /* binding */ Location,
17035 /* harmony export */   "LocationLink": () => /* binding */ LocationLink,
17036 /* harmony export */   "Color": () => /* binding */ Color,
17037 /* harmony export */   "ColorInformation": () => /* binding */ ColorInformation,
17038 /* harmony export */   "ColorPresentation": () => /* binding */ ColorPresentation,
17039 /* harmony export */   "FoldingRangeKind": () => /* binding */ FoldingRangeKind,
17040 /* harmony export */   "FoldingRange": () => /* binding */ FoldingRange,
17041 /* harmony export */   "DiagnosticRelatedInformation": () => /* binding */ DiagnosticRelatedInformation,
17042 /* harmony export */   "DiagnosticSeverity": () => /* binding */ DiagnosticSeverity,
17043 /* harmony export */   "DiagnosticTag": () => /* binding */ DiagnosticTag,
17044 /* harmony export */   "CodeDescription": () => /* binding */ CodeDescription,
17045 /* harmony export */   "Diagnostic": () => /* binding */ Diagnostic,
17046 /* harmony export */   "Command": () => /* binding */ Command,
17047 /* harmony export */   "TextEdit": () => /* binding */ TextEdit,
17048 /* harmony export */   "ChangeAnnotation": () => /* binding */ ChangeAnnotation,
17049 /* harmony export */   "ChangeAnnotationIdentifier": () => /* binding */ ChangeAnnotationIdentifier,
17050 /* harmony export */   "AnnotatedTextEdit": () => /* binding */ AnnotatedTextEdit,
17051 /* harmony export */   "TextDocumentEdit": () => /* binding */ TextDocumentEdit,
17052 /* harmony export */   "CreateFile": () => /* binding */ CreateFile,
17053 /* harmony export */   "RenameFile": () => /* binding */ RenameFile,
17054 /* harmony export */   "DeleteFile": () => /* binding */ DeleteFile,
17055 /* harmony export */   "WorkspaceEdit": () => /* binding */ WorkspaceEdit,
17056 /* harmony export */   "WorkspaceChange": () => /* binding */ WorkspaceChange,
17057 /* harmony export */   "TextDocumentIdentifier": () => /* binding */ TextDocumentIdentifier,
17058 /* harmony export */   "VersionedTextDocumentIdentifier": () => /* binding */ VersionedTextDocumentIdentifier,
17059 /* harmony export */   "OptionalVersionedTextDocumentIdentifier": () => /* binding */ OptionalVersionedTextDocumentIdentifier,
17060 /* harmony export */   "TextDocumentItem": () => /* binding */ TextDocumentItem,
17061 /* harmony export */   "MarkupKind": () => /* binding */ MarkupKind,
17062 /* harmony export */   "MarkupContent": () => /* binding */ MarkupContent,
17063 /* harmony export */   "CompletionItemKind": () => /* binding */ CompletionItemKind,
17064 /* harmony export */   "InsertTextFormat": () => /* binding */ InsertTextFormat,
17065 /* harmony export */   "CompletionItemTag": () => /* binding */ CompletionItemTag,
17066 /* harmony export */   "InsertReplaceEdit": () => /* binding */ InsertReplaceEdit,
17067 /* harmony export */   "InsertTextMode": () => /* binding */ InsertTextMode,
17068 /* harmony export */   "CompletionItem": () => /* binding */ CompletionItem,
17069 /* harmony export */   "CompletionList": () => /* binding */ CompletionList,
17070 /* harmony export */   "MarkedString": () => /* binding */ MarkedString,
17071 /* harmony export */   "Hover": () => /* binding */ Hover,
17072 /* harmony export */   "ParameterInformation": () => /* binding */ ParameterInformation,
17073 /* harmony export */   "SignatureInformation": () => /* binding */ SignatureInformation,
17074 /* harmony export */   "DocumentHighlightKind": () => /* binding */ DocumentHighlightKind,
17075 /* harmony export */   "DocumentHighlight": () => /* binding */ DocumentHighlight,
17076 /* harmony export */   "SymbolKind": () => /* binding */ SymbolKind,
17077 /* harmony export */   "SymbolTag": () => /* binding */ SymbolTag,
17078 /* harmony export */   "SymbolInformation": () => /* binding */ SymbolInformation,
17079 /* harmony export */   "DocumentSymbol": () => /* binding */ DocumentSymbol,
17080 /* harmony export */   "CodeActionKind": () => /* binding */ CodeActionKind,
17081 /* harmony export */   "CodeActionContext": () => /* binding */ CodeActionContext,
17082 /* harmony export */   "CodeAction": () => /* binding */ CodeAction,
17083 /* harmony export */   "CodeLens": () => /* binding */ CodeLens,
17084 /* harmony export */   "FormattingOptions": () => /* binding */ FormattingOptions,
17085 /* harmony export */   "DocumentLink": () => /* binding */ DocumentLink,
17086 /* harmony export */   "SelectionRange": () => /* binding */ SelectionRange,
17087 /* harmony export */   "EOL": () => /* binding */ EOL,
17088 /* harmony export */   "TextDocument": () => /* binding */ TextDocument
17089 /* harmony export */ });
17090 /* --------------------------------------------------------------------------------------------
17091  * Copyright (c) Microsoft Corporation. All rights reserved.
17092  * Licensed under the MIT License. See License.txt in the project root for license information.
17093  * ------------------------------------------------------------------------------------------ */
17094
17095 var integer;
17096 (function (integer) {
17097     integer.MIN_VALUE = -2147483648;
17098     integer.MAX_VALUE = 2147483647;
17099 })(integer || (integer = {}));
17100 var uinteger;
17101 (function (uinteger) {
17102     uinteger.MIN_VALUE = 0;
17103     uinteger.MAX_VALUE = 2147483647;
17104 })(uinteger || (uinteger = {}));
17105 /**
17106  * The Position namespace provides helper functions to work with
17107  * [Position](#Position) literals.
17108  */
17109 var Position;
17110 (function (Position) {
17111     /**
17112      * Creates a new Position literal from the given line and character.
17113      * @param line The position's line.
17114      * @param character The position's character.
17115      */
17116     function create(line, character) {
17117         if (line === Number.MAX_VALUE) {
17118             line = uinteger.MAX_VALUE;
17119         }
17120         if (character === Number.MAX_VALUE) {
17121             character = uinteger.MAX_VALUE;
17122         }
17123         return { line: line, character: character };
17124     }
17125     Position.create = create;
17126     /**
17127      * Checks whether the given literal conforms to the [Position](#Position) interface.
17128      */
17129     function is(value) {
17130         var candidate = value;
17131         return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);
17132     }
17133     Position.is = is;
17134 })(Position || (Position = {}));
17135 /**
17136  * The Range namespace provides helper functions to work with
17137  * [Range](#Range) literals.
17138  */
17139 var Range;
17140 (function (Range) {
17141     function create(one, two, three, four) {
17142         if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {
17143             return { start: Position.create(one, two), end: Position.create(three, four) };
17144         }
17145         else if (Position.is(one) && Position.is(two)) {
17146             return { start: one, end: two };
17147         }
17148         else {
17149             throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");
17150         }
17151     }
17152     Range.create = create;
17153     /**
17154      * Checks whether the given literal conforms to the [Range](#Range) interface.
17155      */
17156     function is(value) {
17157         var candidate = value;
17158         return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
17159     }
17160     Range.is = is;
17161 })(Range || (Range = {}));
17162 /**
17163  * The Location namespace provides helper functions to work with
17164  * [Location](#Location) literals.
17165  */
17166 var Location;
17167 (function (Location) {
17168     /**
17169      * Creates a Location literal.
17170      * @param uri The location's uri.
17171      * @param range The location's range.
17172      */
17173     function create(uri, range) {
17174         return { uri: uri, range: range };
17175     }
17176     Location.create = create;
17177     /**
17178      * Checks whether the given literal conforms to the [Location](#Location) interface.
17179      */
17180     function is(value) {
17181         var candidate = value;
17182         return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
17183     }
17184     Location.is = is;
17185 })(Location || (Location = {}));
17186 /**
17187  * The LocationLink namespace provides helper functions to work with
17188  * [LocationLink](#LocationLink) literals.
17189  */
17190 var LocationLink;
17191 (function (LocationLink) {
17192     /**
17193      * Creates a LocationLink literal.
17194      * @param targetUri The definition's uri.
17195      * @param targetRange The full range of the definition.
17196      * @param targetSelectionRange The span of the symbol definition at the target.
17197      * @param originSelectionRange The span of the symbol being defined in the originating source file.
17198      */
17199     function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
17200         return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };
17201     }
17202     LocationLink.create = create;
17203     /**
17204      * Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.
17205      */
17206     function is(value) {
17207         var candidate = value;
17208         return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)
17209             && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange))
17210             && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
17211     }
17212     LocationLink.is = is;
17213 })(LocationLink || (LocationLink = {}));
17214 /**
17215  * The Color namespace provides helper functions to work with
17216  * [Color](#Color) literals.
17217  */
17218 var Color;
17219 (function (Color) {
17220     /**
17221      * Creates a new Color literal.
17222      */
17223     function create(red, green, blue, alpha) {
17224         return {
17225             red: red,
17226             green: green,
17227             blue: blue,
17228             alpha: alpha,
17229         };
17230     }
17231     Color.create = create;
17232     /**
17233      * Checks whether the given literal conforms to the [Color](#Color) interface.
17234      */
17235     function is(value) {
17236         var candidate = value;
17237         return Is.numberRange(candidate.red, 0, 1)
17238             && Is.numberRange(candidate.green, 0, 1)
17239             && Is.numberRange(candidate.blue, 0, 1)
17240             && Is.numberRange(candidate.alpha, 0, 1);
17241     }
17242     Color.is = is;
17243 })(Color || (Color = {}));
17244 /**
17245  * The ColorInformation namespace provides helper functions to work with
17246  * [ColorInformation](#ColorInformation) literals.
17247  */
17248 var ColorInformation;
17249 (function (ColorInformation) {
17250     /**
17251      * Creates a new ColorInformation literal.
17252      */
17253     function create(range, color) {
17254         return {
17255             range: range,
17256             color: color,
17257         };
17258     }
17259     ColorInformation.create = create;
17260     /**
17261      * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
17262      */
17263     function is(value) {
17264         var candidate = value;
17265         return Range.is(candidate.range) && Color.is(candidate.color);
17266     }
17267     ColorInformation.is = is;
17268 })(ColorInformation || (ColorInformation = {}));
17269 /**
17270  * The Color namespace provides helper functions to work with
17271  * [ColorPresentation](#ColorPresentation) literals.
17272  */
17273 var ColorPresentation;
17274 (function (ColorPresentation) {
17275     /**
17276      * Creates a new ColorInformation literal.
17277      */
17278     function create(label, textEdit, additionalTextEdits) {
17279         return {
17280             label: label,
17281             textEdit: textEdit,
17282             additionalTextEdits: additionalTextEdits,
17283         };
17284     }
17285     ColorPresentation.create = create;
17286     /**
17287      * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
17288      */
17289     function is(value) {
17290         var candidate = value;
17291         return Is.string(candidate.label)
17292             && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))
17293             && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
17294     }
17295     ColorPresentation.is = is;
17296 })(ColorPresentation || (ColorPresentation = {}));
17297 /**
17298  * Enum of known range kinds
17299  */
17300 var FoldingRangeKind;
17301 (function (FoldingRangeKind) {
17302     /**
17303      * Folding range for a comment
17304      */
17305     FoldingRangeKind["Comment"] = "comment";
17306     /**
17307      * Folding range for a imports or includes
17308      */
17309     FoldingRangeKind["Imports"] = "imports";
17310     /**
17311      * Folding range for a region (e.g. `#region`)
17312      */
17313     FoldingRangeKind["Region"] = "region";
17314 })(FoldingRangeKind || (FoldingRangeKind = {}));
17315 /**
17316  * The folding range namespace provides helper functions to work with
17317  * [FoldingRange](#FoldingRange) literals.
17318  */
17319 var FoldingRange;
17320 (function (FoldingRange) {
17321     /**
17322      * Creates a new FoldingRange literal.
17323      */
17324     function create(startLine, endLine, startCharacter, endCharacter, kind) {
17325         var result = {
17326             startLine: startLine,
17327             endLine: endLine
17328         };
17329         if (Is.defined(startCharacter)) {
17330             result.startCharacter = startCharacter;
17331         }
17332         if (Is.defined(endCharacter)) {
17333             result.endCharacter = endCharacter;
17334         }
17335         if (Is.defined(kind)) {
17336             result.kind = kind;
17337         }
17338         return result;
17339     }
17340     FoldingRange.create = create;
17341     /**
17342      * Checks whether the given literal conforms to the [FoldingRange](#FoldingRange) interface.
17343      */
17344     function is(value) {
17345         var candidate = value;
17346         return Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine)
17347             && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter))
17348             && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter))
17349             && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
17350     }
17351     FoldingRange.is = is;
17352 })(FoldingRange || (FoldingRange = {}));
17353 /**
17354  * The DiagnosticRelatedInformation namespace provides helper functions to work with
17355  * [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) literals.
17356  */
17357 var DiagnosticRelatedInformation;
17358 (function (DiagnosticRelatedInformation) {
17359     /**
17360      * Creates a new DiagnosticRelatedInformation literal.
17361      */
17362     function create(location, message) {
17363         return {
17364             location: location,
17365             message: message
17366         };
17367     }
17368     DiagnosticRelatedInformation.create = create;
17369     /**
17370      * Checks whether the given literal conforms to the [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) interface.
17371      */
17372     function is(value) {
17373         var candidate = value;
17374         return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
17375     }
17376     DiagnosticRelatedInformation.is = is;
17377 })(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));
17378 /**
17379  * The diagnostic's severity.
17380  */
17381 var DiagnosticSeverity;
17382 (function (DiagnosticSeverity) {
17383     /**
17384      * Reports an error.
17385      */
17386     DiagnosticSeverity.Error = 1;
17387     /**
17388      * Reports a warning.
17389      */
17390     DiagnosticSeverity.Warning = 2;
17391     /**
17392      * Reports an information.
17393      */
17394     DiagnosticSeverity.Information = 3;
17395     /**
17396      * Reports a hint.
17397      */
17398     DiagnosticSeverity.Hint = 4;
17399 })(DiagnosticSeverity || (DiagnosticSeverity = {}));
17400 /**
17401  * The diagnostic tags.
17402  *
17403  * @since 3.15.0
17404  */
17405 var DiagnosticTag;
17406 (function (DiagnosticTag) {
17407     /**
17408      * Unused or unnecessary code.
17409      *
17410      * Clients are allowed to render diagnostics with this tag faded out instead of having
17411      * an error squiggle.
17412      */
17413     DiagnosticTag.Unnecessary = 1;
17414     /**
17415      * Deprecated or obsolete code.
17416      *
17417      * Clients are allowed to rendered diagnostics with this tag strike through.
17418      */
17419     DiagnosticTag.Deprecated = 2;
17420 })(DiagnosticTag || (DiagnosticTag = {}));
17421 /**
17422  * The CodeDescription namespace provides functions to deal with descriptions for diagnostic codes.
17423  *
17424  * @since 3.16.0
17425  */
17426 var CodeDescription;
17427 (function (CodeDescription) {
17428     function is(value) {
17429         var candidate = value;
17430         return candidate !== undefined && candidate !== null && Is.string(candidate.href);
17431     }
17432     CodeDescription.is = is;
17433 })(CodeDescription || (CodeDescription = {}));
17434 /**
17435  * The Diagnostic namespace provides helper functions to work with
17436  * [Diagnostic](#Diagnostic) literals.
17437  */
17438 var Diagnostic;
17439 (function (Diagnostic) {
17440     /**
17441      * Creates a new Diagnostic literal.
17442      */
17443     function create(range, message, severity, code, source, relatedInformation) {
17444         var result = { range: range, message: message };
17445         if (Is.defined(severity)) {
17446             result.severity = severity;
17447         }
17448         if (Is.defined(code)) {
17449             result.code = code;
17450         }
17451         if (Is.defined(source)) {
17452             result.source = source;
17453         }
17454         if (Is.defined(relatedInformation)) {
17455             result.relatedInformation = relatedInformation;
17456         }
17457         return result;
17458     }
17459     Diagnostic.create = create;
17460     /**
17461      * Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.
17462      */
17463     function is(value) {
17464         var _a;
17465         var candidate = value;
17466         return Is.defined(candidate)
17467             && Range.is(candidate.range)
17468             && Is.string(candidate.message)
17469             && (Is.number(candidate.severity) || Is.undefined(candidate.severity))
17470             && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))
17471             && (Is.undefined(candidate.codeDescription) || (Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)))
17472             && (Is.string(candidate.source) || Is.undefined(candidate.source))
17473             && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
17474     }
17475     Diagnostic.is = is;
17476 })(Diagnostic || (Diagnostic = {}));
17477 /**
17478  * The Command namespace provides helper functions to work with
17479  * [Command](#Command) literals.
17480  */
17481 var Command;
17482 (function (Command) {
17483     /**
17484      * Creates a new Command literal.
17485      */
17486     function create(title, command) {
17487         var args = [];
17488         for (var _i = 2; _i < arguments.length; _i++) {
17489             args[_i - 2] = arguments[_i];
17490         }
17491         var result = { title: title, command: command };
17492         if (Is.defined(args) && args.length > 0) {
17493             result.arguments = args;
17494         }
17495         return result;
17496     }
17497     Command.create = create;
17498     /**
17499      * Checks whether the given literal conforms to the [Command](#Command) interface.
17500      */
17501     function is(value) {
17502         var candidate = value;
17503         return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);
17504     }
17505     Command.is = is;
17506 })(Command || (Command = {}));
17507 /**
17508  * The TextEdit namespace provides helper function to create replace,
17509  * insert and delete edits more easily.
17510  */
17511 var TextEdit;
17512 (function (TextEdit) {
17513     /**
17514      * Creates a replace text edit.
17515      * @param range The range of text to be replaced.
17516      * @param newText The new text.
17517      */
17518     function replace(range, newText) {
17519         return { range: range, newText: newText };
17520     }
17521     TextEdit.replace = replace;
17522     /**
17523      * Creates a insert text edit.
17524      * @param position The position to insert the text at.
17525      * @param newText The text to be inserted.
17526      */
17527     function insert(position, newText) {
17528         return { range: { start: position, end: position }, newText: newText };
17529     }
17530     TextEdit.insert = insert;
17531     /**
17532      * Creates a delete text edit.
17533      * @param range The range of text to be deleted.
17534      */
17535     function del(range) {
17536         return { range: range, newText: '' };
17537     }
17538     TextEdit.del = del;
17539     function is(value) {
17540         var candidate = value;
17541         return Is.objectLiteral(candidate)
17542             && Is.string(candidate.newText)
17543             && Range.is(candidate.range);
17544     }
17545     TextEdit.is = is;
17546 })(TextEdit || (TextEdit = {}));
17547 var ChangeAnnotation;
17548 (function (ChangeAnnotation) {
17549     function create(label, needsConfirmation, description) {
17550         var result = { label: label };
17551         if (needsConfirmation !== undefined) {
17552             result.needsConfirmation = needsConfirmation;
17553         }
17554         if (description !== undefined) {
17555             result.description = description;
17556         }
17557         return result;
17558     }
17559     ChangeAnnotation.create = create;
17560     function is(value) {
17561         var candidate = value;
17562         return candidate !== undefined && Is.objectLiteral(candidate) && Is.string(candidate.label) &&
17563             (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === undefined) &&
17564             (Is.string(candidate.description) || candidate.description === undefined);
17565     }
17566     ChangeAnnotation.is = is;
17567 })(ChangeAnnotation || (ChangeAnnotation = {}));
17568 var ChangeAnnotationIdentifier;
17569 (function (ChangeAnnotationIdentifier) {
17570     function is(value) {
17571         var candidate = value;
17572         return typeof candidate === 'string';
17573     }
17574     ChangeAnnotationIdentifier.is = is;
17575 })(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));
17576 var AnnotatedTextEdit;
17577 (function (AnnotatedTextEdit) {
17578     /**
17579      * Creates an annotated replace text edit.
17580      *
17581      * @param range The range of text to be replaced.
17582      * @param newText The new text.
17583      * @param annotation The annotation.
17584      */
17585     function replace(range, newText, annotation) {
17586         return { range: range, newText: newText, annotationId: annotation };
17587     }
17588     AnnotatedTextEdit.replace = replace;
17589     /**
17590      * Creates an annotated insert text edit.
17591      *
17592      * @param position The position to insert the text at.
17593      * @param newText The text to be inserted.
17594      * @param annotation The annotation.
17595      */
17596     function insert(position, newText, annotation) {
17597         return { range: { start: position, end: position }, newText: newText, annotationId: annotation };
17598     }
17599     AnnotatedTextEdit.insert = insert;
17600     /**
17601      * Creates an annotated delete text edit.
17602      *
17603      * @param range The range of text to be deleted.
17604      * @param annotation The annotation.
17605      */
17606     function del(range, annotation) {
17607         return { range: range, newText: '', annotationId: annotation };
17608     }
17609     AnnotatedTextEdit.del = del;
17610     function is(value) {
17611         var candidate = value;
17612         return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));
17613     }
17614     AnnotatedTextEdit.is = is;
17615 })(AnnotatedTextEdit || (AnnotatedTextEdit = {}));
17616 /**
17617  * The TextDocumentEdit namespace provides helper function to create
17618  * an edit that manipulates a text document.
17619  */
17620 var TextDocumentEdit;
17621 (function (TextDocumentEdit) {
17622     /**
17623      * Creates a new `TextDocumentEdit`
17624      */
17625     function create(textDocument, edits) {
17626         return { textDocument: textDocument, edits: edits };
17627     }
17628     TextDocumentEdit.create = create;
17629     function is(value) {
17630         var candidate = value;
17631         return Is.defined(candidate)
17632             && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument)
17633             && Array.isArray(candidate.edits);
17634     }
17635     TextDocumentEdit.is = is;
17636 })(TextDocumentEdit || (TextDocumentEdit = {}));
17637 var CreateFile;
17638 (function (CreateFile) {
17639     function create(uri, options, annotation) {
17640         var result = {
17641             kind: 'create',
17642             uri: uri
17643         };
17644         if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {
17645             result.options = options;
17646         }
17647         if (annotation !== undefined) {
17648             result.annotationId = annotation;
17649         }
17650         return result;
17651     }
17652     CreateFile.create = create;
17653     function is(value) {
17654         var candidate = value;
17655         return candidate && candidate.kind === 'create' && Is.string(candidate.uri) && (candidate.options === undefined ||
17656             ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
17657     }
17658     CreateFile.is = is;
17659 })(CreateFile || (CreateFile = {}));
17660 var RenameFile;
17661 (function (RenameFile) {
17662     function create(oldUri, newUri, options, annotation) {
17663         var result = {
17664             kind: 'rename',
17665             oldUri: oldUri,
17666             newUri: newUri
17667         };
17668         if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {
17669             result.options = options;
17670         }
17671         if (annotation !== undefined) {
17672             result.annotationId = annotation;
17673         }
17674         return result;
17675     }
17676     RenameFile.create = create;
17677     function is(value) {
17678         var candidate = value;
17679         return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === undefined ||
17680             ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
17681     }
17682     RenameFile.is = is;
17683 })(RenameFile || (RenameFile = {}));
17684 var DeleteFile;
17685 (function (DeleteFile) {
17686     function create(uri, options, annotation) {
17687         var result = {
17688             kind: 'delete',
17689             uri: uri
17690         };
17691         if (options !== undefined && (options.recursive !== undefined || options.ignoreIfNotExists !== undefined)) {
17692             result.options = options;
17693         }
17694         if (annotation !== undefined) {
17695             result.annotationId = annotation;
17696         }
17697         return result;
17698     }
17699     DeleteFile.create = create;
17700     function is(value) {
17701         var candidate = value;
17702         return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) && (candidate.options === undefined ||
17703             ((candidate.options.recursive === undefined || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === undefined || Is.boolean(candidate.options.ignoreIfNotExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
17704     }
17705     DeleteFile.is = is;
17706 })(DeleteFile || (DeleteFile = {}));
17707 var WorkspaceEdit;
17708 (function (WorkspaceEdit) {
17709     function is(value) {
17710         var candidate = value;
17711         return candidate &&
17712             (candidate.changes !== undefined || candidate.documentChanges !== undefined) &&
17713             (candidate.documentChanges === undefined || candidate.documentChanges.every(function (change) {
17714                 if (Is.string(change.kind)) {
17715                     return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
17716                 }
17717                 else {
17718                     return TextDocumentEdit.is(change);
17719                 }
17720             }));
17721     }
17722     WorkspaceEdit.is = is;
17723 })(WorkspaceEdit || (WorkspaceEdit = {}));
17724 var TextEditChangeImpl = /** @class */ (function () {
17725     function TextEditChangeImpl(edits, changeAnnotations) {
17726         this.edits = edits;
17727         this.changeAnnotations = changeAnnotations;
17728     }
17729     TextEditChangeImpl.prototype.insert = function (position, newText, annotation) {
17730         var edit;
17731         var id;
17732         if (annotation === undefined) {
17733             edit = TextEdit.insert(position, newText);
17734         }
17735         else if (ChangeAnnotationIdentifier.is(annotation)) {
17736             id = annotation;
17737             edit = AnnotatedTextEdit.insert(position, newText, annotation);
17738         }
17739         else {
17740             this.assertChangeAnnotations(this.changeAnnotations);
17741             id = this.changeAnnotations.manage(annotation);
17742             edit = AnnotatedTextEdit.insert(position, newText, id);
17743         }
17744         this.edits.push(edit);
17745         if (id !== undefined) {
17746             return id;
17747         }
17748     };
17749     TextEditChangeImpl.prototype.replace = function (range, newText, annotation) {
17750         var edit;
17751         var id;
17752         if (annotation === undefined) {
17753             edit = TextEdit.replace(range, newText);
17754         }
17755         else if (ChangeAnnotationIdentifier.is(annotation)) {
17756             id = annotation;
17757             edit = AnnotatedTextEdit.replace(range, newText, annotation);
17758         }
17759         else {
17760             this.assertChangeAnnotations(this.changeAnnotations);
17761             id = this.changeAnnotations.manage(annotation);
17762             edit = AnnotatedTextEdit.replace(range, newText, id);
17763         }
17764         this.edits.push(edit);
17765         if (id !== undefined) {
17766             return id;
17767         }
17768     };
17769     TextEditChangeImpl.prototype.delete = function (range, annotation) {
17770         var edit;
17771         var id;
17772         if (annotation === undefined) {
17773             edit = TextEdit.del(range);
17774         }
17775         else if (ChangeAnnotationIdentifier.is(annotation)) {
17776             id = annotation;
17777             edit = AnnotatedTextEdit.del(range, annotation);
17778         }
17779         else {
17780             this.assertChangeAnnotations(this.changeAnnotations);
17781             id = this.changeAnnotations.manage(annotation);
17782             edit = AnnotatedTextEdit.del(range, id);
17783         }
17784         this.edits.push(edit);
17785         if (id !== undefined) {
17786             return id;
17787         }
17788     };
17789     TextEditChangeImpl.prototype.add = function (edit) {
17790         this.edits.push(edit);
17791     };
17792     TextEditChangeImpl.prototype.all = function () {
17793         return this.edits;
17794     };
17795     TextEditChangeImpl.prototype.clear = function () {
17796         this.edits.splice(0, this.edits.length);
17797     };
17798     TextEditChangeImpl.prototype.assertChangeAnnotations = function (value) {
17799         if (value === undefined) {
17800             throw new Error("Text edit change is not configured to manage change annotations.");
17801         }
17802     };
17803     return TextEditChangeImpl;
17804 }());
17805 /**
17806  * A helper class
17807  */
17808 var ChangeAnnotations = /** @class */ (function () {
17809     function ChangeAnnotations(annotations) {
17810         this._annotations = annotations === undefined ? Object.create(null) : annotations;
17811         this._counter = 0;
17812         this._size = 0;
17813     }
17814     ChangeAnnotations.prototype.all = function () {
17815         return this._annotations;
17816     };
17817     Object.defineProperty(ChangeAnnotations.prototype, "size", {
17818         get: function () {
17819             return this._size;
17820         },
17821         enumerable: false,
17822         configurable: true
17823     });
17824     ChangeAnnotations.prototype.manage = function (idOrAnnotation, annotation) {
17825         var id;
17826         if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {
17827             id = idOrAnnotation;
17828         }
17829         else {
17830             id = this.nextId();
17831             annotation = idOrAnnotation;
17832         }
17833         if (this._annotations[id] !== undefined) {
17834             throw new Error("Id " + id + " is already in use.");
17835         }
17836         if (annotation === undefined) {
17837             throw new Error("No annotation provided for id " + id);
17838         }
17839         this._annotations[id] = annotation;
17840         this._size++;
17841         return id;
17842     };
17843     ChangeAnnotations.prototype.nextId = function () {
17844         this._counter++;
17845         return this._counter.toString();
17846     };
17847     return ChangeAnnotations;
17848 }());
17849 /**
17850  * A workspace change helps constructing changes to a workspace.
17851  */
17852 var WorkspaceChange = /** @class */ (function () {
17853     function WorkspaceChange(workspaceEdit) {
17854         var _this = this;
17855         this._textEditChanges = Object.create(null);
17856         if (workspaceEdit !== undefined) {
17857             this._workspaceEdit = workspaceEdit;
17858             if (workspaceEdit.documentChanges) {
17859                 this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);
17860                 workspaceEdit.changeAnnotations = this._changeAnnotations.all();
17861                 workspaceEdit.documentChanges.forEach(function (change) {
17862                     if (TextDocumentEdit.is(change)) {
17863                         var textEditChange = new TextEditChangeImpl(change.edits, _this._changeAnnotations);
17864                         _this._textEditChanges[change.textDocument.uri] = textEditChange;
17865                     }
17866                 });
17867             }
17868             else if (workspaceEdit.changes) {
17869                 Object.keys(workspaceEdit.changes).forEach(function (key) {
17870                     var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
17871                     _this._textEditChanges[key] = textEditChange;
17872                 });
17873             }
17874         }
17875         else {
17876             this._workspaceEdit = {};
17877         }
17878     }
17879     Object.defineProperty(WorkspaceChange.prototype, "edit", {
17880         /**
17881          * Returns the underlying [WorkspaceEdit](#WorkspaceEdit) literal
17882          * use to be returned from a workspace edit operation like rename.
17883          */
17884         get: function () {
17885             this.initDocumentChanges();
17886             if (this._changeAnnotations !== undefined) {
17887                 if (this._changeAnnotations.size === 0) {
17888                     this._workspaceEdit.changeAnnotations = undefined;
17889                 }
17890                 else {
17891                     this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
17892                 }
17893             }
17894             return this._workspaceEdit;
17895         },
17896         enumerable: false,
17897         configurable: true
17898     });
17899     WorkspaceChange.prototype.getTextEditChange = function (key) {
17900         if (OptionalVersionedTextDocumentIdentifier.is(key)) {
17901             this.initDocumentChanges();
17902             if (this._workspaceEdit.documentChanges === undefined) {
17903                 throw new Error('Workspace edit is not configured for document changes.');
17904             }
17905             var textDocument = { uri: key.uri, version: key.version };
17906             var result = this._textEditChanges[textDocument.uri];
17907             if (!result) {
17908                 var edits = [];
17909                 var textDocumentEdit = {
17910                     textDocument: textDocument,
17911                     edits: edits
17912                 };
17913                 this._workspaceEdit.documentChanges.push(textDocumentEdit);
17914                 result = new TextEditChangeImpl(edits, this._changeAnnotations);
17915                 this._textEditChanges[textDocument.uri] = result;
17916             }
17917             return result;
17918         }
17919         else {
17920             this.initChanges();
17921             if (this._workspaceEdit.changes === undefined) {
17922                 throw new Error('Workspace edit is not configured for normal text edit changes.');
17923             }
17924             var result = this._textEditChanges[key];
17925             if (!result) {
17926                 var edits = [];
17927                 this._workspaceEdit.changes[key] = edits;
17928                 result = new TextEditChangeImpl(edits);
17929                 this._textEditChanges[key] = result;
17930             }
17931             return result;
17932         }
17933     };
17934     WorkspaceChange.prototype.initDocumentChanges = function () {
17935         if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {
17936             this._changeAnnotations = new ChangeAnnotations();
17937             this._workspaceEdit.documentChanges = [];
17938             this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
17939         }
17940     };
17941     WorkspaceChange.prototype.initChanges = function () {
17942         if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {
17943             this._workspaceEdit.changes = Object.create(null);
17944         }
17945     };
17946     WorkspaceChange.prototype.createFile = function (uri, optionsOrAnnotation, options) {
17947         this.initDocumentChanges();
17948         if (this._workspaceEdit.documentChanges === undefined) {
17949             throw new Error('Workspace edit is not configured for document changes.');
17950         }
17951         var annotation;
17952         if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
17953             annotation = optionsOrAnnotation;
17954         }
17955         else {
17956             options = optionsOrAnnotation;
17957         }
17958         var operation;
17959         var id;
17960         if (annotation === undefined) {
17961             operation = CreateFile.create(uri, options);
17962         }
17963         else {
17964             id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
17965             operation = CreateFile.create(uri, options, id);
17966         }
17967         this._workspaceEdit.documentChanges.push(operation);
17968         if (id !== undefined) {
17969             return id;
17970         }
17971     };
17972     WorkspaceChange.prototype.renameFile = function (oldUri, newUri, optionsOrAnnotation, options) {
17973         this.initDocumentChanges();
17974         if (this._workspaceEdit.documentChanges === undefined) {
17975             throw new Error('Workspace edit is not configured for document changes.');
17976         }
17977         var annotation;
17978         if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
17979             annotation = optionsOrAnnotation;
17980         }
17981         else {
17982             options = optionsOrAnnotation;
17983         }
17984         var operation;
17985         var id;
17986         if (annotation === undefined) {
17987             operation = RenameFile.create(oldUri, newUri, options);
17988         }
17989         else {
17990             id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
17991             operation = RenameFile.create(oldUri, newUri, options, id);
17992         }
17993         this._workspaceEdit.documentChanges.push(operation);
17994         if (id !== undefined) {
17995             return id;
17996         }
17997     };
17998     WorkspaceChange.prototype.deleteFile = function (uri, optionsOrAnnotation, options) {
17999         this.initDocumentChanges();
18000         if (this._workspaceEdit.documentChanges === undefined) {
18001             throw new Error('Workspace edit is not configured for document changes.');
18002         }
18003         var annotation;
18004         if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
18005             annotation = optionsOrAnnotation;
18006         }
18007         else {
18008             options = optionsOrAnnotation;
18009         }
18010         var operation;
18011         var id;
18012         if (annotation === undefined) {
18013             operation = DeleteFile.create(uri, options);
18014         }
18015         else {
18016             id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
18017             operation = DeleteFile.create(uri, options, id);
18018         }
18019         this._workspaceEdit.documentChanges.push(operation);
18020         if (id !== undefined) {
18021             return id;
18022         }
18023     };
18024     return WorkspaceChange;
18025 }());
18026
18027 /**
18028  * The TextDocumentIdentifier namespace provides helper functions to work with
18029  * [TextDocumentIdentifier](#TextDocumentIdentifier) literals.
18030  */
18031 var TextDocumentIdentifier;
18032 (function (TextDocumentIdentifier) {
18033     /**
18034      * Creates a new TextDocumentIdentifier literal.
18035      * @param uri The document's uri.
18036      */
18037     function create(uri) {
18038         return { uri: uri };
18039     }
18040     TextDocumentIdentifier.create = create;
18041     /**
18042      * Checks whether the given literal conforms to the [TextDocumentIdentifier](#TextDocumentIdentifier) interface.
18043      */
18044     function is(value) {
18045         var candidate = value;
18046         return Is.defined(candidate) && Is.string(candidate.uri);
18047     }
18048     TextDocumentIdentifier.is = is;
18049 })(TextDocumentIdentifier || (TextDocumentIdentifier = {}));
18050 /**
18051  * The VersionedTextDocumentIdentifier namespace provides helper functions to work with
18052  * [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) literals.
18053  */
18054 var VersionedTextDocumentIdentifier;
18055 (function (VersionedTextDocumentIdentifier) {
18056     /**
18057      * Creates a new VersionedTextDocumentIdentifier literal.
18058      * @param uri The document's uri.
18059      * @param uri The document's text.
18060      */
18061     function create(uri, version) {
18062         return { uri: uri, version: version };
18063     }
18064     VersionedTextDocumentIdentifier.create = create;
18065     /**
18066      * Checks whether the given literal conforms to the [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) interface.
18067      */
18068     function is(value) {
18069         var candidate = value;
18070         return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);
18071     }
18072     VersionedTextDocumentIdentifier.is = is;
18073 })(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));
18074 /**
18075  * The OptionalVersionedTextDocumentIdentifier namespace provides helper functions to work with
18076  * [OptionalVersionedTextDocumentIdentifier](#OptionalVersionedTextDocumentIdentifier) literals.
18077  */
18078 var OptionalVersionedTextDocumentIdentifier;
18079 (function (OptionalVersionedTextDocumentIdentifier) {
18080     /**
18081      * Creates a new OptionalVersionedTextDocumentIdentifier literal.
18082      * @param uri The document's uri.
18083      * @param uri The document's text.
18084      */
18085     function create(uri, version) {
18086         return { uri: uri, version: version };
18087     }
18088     OptionalVersionedTextDocumentIdentifier.create = create;
18089     /**
18090      * Checks whether the given literal conforms to the [OptionalVersionedTextDocumentIdentifier](#OptionalVersionedTextDocumentIdentifier) interface.
18091      */
18092     function is(value) {
18093         var candidate = value;
18094         return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));
18095     }
18096     OptionalVersionedTextDocumentIdentifier.is = is;
18097 })(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));
18098 /**
18099  * The TextDocumentItem namespace provides helper functions to work with
18100  * [TextDocumentItem](#TextDocumentItem) literals.
18101  */
18102 var TextDocumentItem;
18103 (function (TextDocumentItem) {
18104     /**
18105      * Creates a new TextDocumentItem literal.
18106      * @param uri The document's uri.
18107      * @param languageId The document's language identifier.
18108      * @param version The document's version number.
18109      * @param text The document's text.
18110      */
18111     function create(uri, languageId, version, text) {
18112         return { uri: uri, languageId: languageId, version: version, text: text };
18113     }
18114     TextDocumentItem.create = create;
18115     /**
18116      * Checks whether the given literal conforms to the [TextDocumentItem](#TextDocumentItem) interface.
18117      */
18118     function is(value) {
18119         var candidate = value;
18120         return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);
18121     }
18122     TextDocumentItem.is = is;
18123 })(TextDocumentItem || (TextDocumentItem = {}));
18124 /**
18125  * Describes the content type that a client supports in various
18126  * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.
18127  *
18128  * Please note that `MarkupKinds` must not start with a `$`. This kinds
18129  * are reserved for internal usage.
18130  */
18131 var MarkupKind;
18132 (function (MarkupKind) {
18133     /**
18134      * Plain text is supported as a content format
18135      */
18136     MarkupKind.PlainText = 'plaintext';
18137     /**
18138      * Markdown is supported as a content format
18139      */
18140     MarkupKind.Markdown = 'markdown';
18141 })(MarkupKind || (MarkupKind = {}));
18142 (function (MarkupKind) {
18143     /**
18144      * Checks whether the given value is a value of the [MarkupKind](#MarkupKind) type.
18145      */
18146     function is(value) {
18147         var candidate = value;
18148         return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;
18149     }
18150     MarkupKind.is = is;
18151 })(MarkupKind || (MarkupKind = {}));
18152 var MarkupContent;
18153 (function (MarkupContent) {
18154     /**
18155      * Checks whether the given value conforms to the [MarkupContent](#MarkupContent) interface.
18156      */
18157     function is(value) {
18158         var candidate = value;
18159         return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
18160     }
18161     MarkupContent.is = is;
18162 })(MarkupContent || (MarkupContent = {}));
18163 /**
18164  * The kind of a completion entry.
18165  */
18166 var CompletionItemKind;
18167 (function (CompletionItemKind) {
18168     CompletionItemKind.Text = 1;
18169     CompletionItemKind.Method = 2;
18170     CompletionItemKind.Function = 3;
18171     CompletionItemKind.Constructor = 4;
18172     CompletionItemKind.Field = 5;
18173     CompletionItemKind.Variable = 6;
18174     CompletionItemKind.Class = 7;
18175     CompletionItemKind.Interface = 8;
18176     CompletionItemKind.Module = 9;
18177     CompletionItemKind.Property = 10;
18178     CompletionItemKind.Unit = 11;
18179     CompletionItemKind.Value = 12;
18180     CompletionItemKind.Enum = 13;
18181     CompletionItemKind.Keyword = 14;
18182     CompletionItemKind.Snippet = 15;
18183     CompletionItemKind.Color = 16;
18184     CompletionItemKind.File = 17;
18185     CompletionItemKind.Reference = 18;
18186     CompletionItemKind.Folder = 19;
18187     CompletionItemKind.EnumMember = 20;
18188     CompletionItemKind.Constant = 21;
18189     CompletionItemKind.Struct = 22;
18190     CompletionItemKind.Event = 23;
18191     CompletionItemKind.Operator = 24;
18192     CompletionItemKind.TypeParameter = 25;
18193 })(CompletionItemKind || (CompletionItemKind = {}));
18194 /**
18195  * Defines whether the insert text in a completion item should be interpreted as
18196  * plain text or a snippet.
18197  */
18198 var InsertTextFormat;
18199 (function (InsertTextFormat) {
18200     /**
18201      * The primary text to be inserted is treated as a plain string.
18202      */
18203     InsertTextFormat.PlainText = 1;
18204     /**
18205      * The primary text to be inserted is treated as a snippet.
18206      *
18207      * A snippet can define tab stops and placeholders with `$1`, `$2`
18208      * and `${3:foo}`. `$0` defines the final tab stop, it defaults to
18209      * the end of the snippet. Placeholders with equal identifiers are linked,
18210      * that is typing in one will update others too.
18211      *
18212      * See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax
18213      */
18214     InsertTextFormat.Snippet = 2;
18215 })(InsertTextFormat || (InsertTextFormat = {}));
18216 /**
18217  * Completion item tags are extra annotations that tweak the rendering of a completion
18218  * item.
18219  *
18220  * @since 3.15.0
18221  */
18222 var CompletionItemTag;
18223 (function (CompletionItemTag) {
18224     /**
18225      * Render a completion as obsolete, usually using a strike-out.
18226      */
18227     CompletionItemTag.Deprecated = 1;
18228 })(CompletionItemTag || (CompletionItemTag = {}));
18229 /**
18230  * The InsertReplaceEdit namespace provides functions to deal with insert / replace edits.
18231  *
18232  * @since 3.16.0
18233  */
18234 var InsertReplaceEdit;
18235 (function (InsertReplaceEdit) {
18236     /**
18237      * Creates a new insert / replace edit
18238      */
18239     function create(newText, insert, replace) {
18240         return { newText: newText, insert: insert, replace: replace };
18241     }
18242     InsertReplaceEdit.create = create;
18243     /**
18244      * Checks whether the given literal conforms to the [InsertReplaceEdit](#InsertReplaceEdit) interface.
18245      */
18246     function is(value) {
18247         var candidate = value;
18248         return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);
18249     }
18250     InsertReplaceEdit.is = is;
18251 })(InsertReplaceEdit || (InsertReplaceEdit = {}));
18252 /**
18253  * How whitespace and indentation is handled during completion
18254  * item insertion.
18255  *
18256  * @since 3.16.0
18257  */
18258 var InsertTextMode;
18259 (function (InsertTextMode) {
18260     /**
18261      * The insertion or replace strings is taken as it is. If the
18262      * value is multi line the lines below the cursor will be
18263      * inserted using the indentation defined in the string value.
18264      * The client will not apply any kind of adjustments to the
18265      * string.
18266      */
18267     InsertTextMode.asIs = 1;
18268     /**
18269      * The editor adjusts leading whitespace of new lines so that
18270      * they match the indentation up to the cursor of the line for
18271      * which the item is accepted.
18272      *
18273      * Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a
18274      * multi line completion item is indented using 2 tabs and all
18275      * following lines inserted will be indented using 2 tabs as well.
18276      */
18277     InsertTextMode.adjustIndentation = 2;
18278 })(InsertTextMode || (InsertTextMode = {}));
18279 /**
18280  * The CompletionItem namespace provides functions to deal with
18281  * completion items.
18282  */
18283 var CompletionItem;
18284 (function (CompletionItem) {
18285     /**
18286      * Create a completion item and seed it with a label.
18287      * @param label The completion item's label
18288      */
18289     function create(label) {
18290         return { label: label };
18291     }
18292     CompletionItem.create = create;
18293 })(CompletionItem || (CompletionItem = {}));
18294 /**
18295  * The CompletionList namespace provides functions to deal with
18296  * completion lists.
18297  */
18298 var CompletionList;
18299 (function (CompletionList) {
18300     /**
18301      * Creates a new completion list.
18302      *
18303      * @param items The completion items.
18304      * @param isIncomplete The list is not complete.
18305      */
18306     function create(items, isIncomplete) {
18307         return { items: items ? items : [], isIncomplete: !!isIncomplete };
18308     }
18309     CompletionList.create = create;
18310 })(CompletionList || (CompletionList = {}));
18311 var MarkedString;
18312 (function (MarkedString) {
18313     /**
18314      * Creates a marked string from plain text.
18315      *
18316      * @param plainText The plain text.
18317      */
18318     function fromPlainText(plainText) {
18319         return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
18320     }
18321     MarkedString.fromPlainText = fromPlainText;
18322     /**
18323      * Checks whether the given value conforms to the [MarkedString](#MarkedString) type.
18324      */
18325     function is(value) {
18326         var candidate = value;
18327         return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));
18328     }
18329     MarkedString.is = is;
18330 })(MarkedString || (MarkedString = {}));
18331 var Hover;
18332 (function (Hover) {
18333     /**
18334      * Checks whether the given value conforms to the [Hover](#Hover) interface.
18335      */
18336     function is(value) {
18337         var candidate = value;
18338         return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||
18339             MarkedString.is(candidate.contents) ||
18340             Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === undefined || Range.is(value.range));
18341     }
18342     Hover.is = is;
18343 })(Hover || (Hover = {}));
18344 /**
18345  * The ParameterInformation namespace provides helper functions to work with
18346  * [ParameterInformation](#ParameterInformation) literals.
18347  */
18348 var ParameterInformation;
18349 (function (ParameterInformation) {
18350     /**
18351      * Creates a new parameter information literal.
18352      *
18353      * @param label A label string.
18354      * @param documentation A doc string.
18355      */
18356     function create(label, documentation) {
18357         return documentation ? { label: label, documentation: documentation } : { label: label };
18358     }
18359     ParameterInformation.create = create;
18360 })(ParameterInformation || (ParameterInformation = {}));
18361 /**
18362  * The SignatureInformation namespace provides helper functions to work with
18363  * [SignatureInformation](#SignatureInformation) literals.
18364  */
18365 var SignatureInformation;
18366 (function (SignatureInformation) {
18367     function create(label, documentation) {
18368         var parameters = [];
18369         for (var _i = 2; _i < arguments.length; _i++) {
18370             parameters[_i - 2] = arguments[_i];
18371         }
18372         var result = { label: label };
18373         if (Is.defined(documentation)) {
18374             result.documentation = documentation;
18375         }
18376         if (Is.defined(parameters)) {
18377             result.parameters = parameters;
18378         }
18379         else {
18380             result.parameters = [];
18381         }
18382         return result;
18383     }
18384     SignatureInformation.create = create;
18385 })(SignatureInformation || (SignatureInformation = {}));
18386 /**
18387  * A document highlight kind.
18388  */
18389 var DocumentHighlightKind;
18390 (function (DocumentHighlightKind) {
18391     /**
18392      * A textual occurrence.
18393      */
18394     DocumentHighlightKind.Text = 1;
18395     /**
18396      * Read-access of a symbol, like reading a variable.
18397      */
18398     DocumentHighlightKind.Read = 2;
18399     /**
18400      * Write-access of a symbol, like writing to a variable.
18401      */
18402     DocumentHighlightKind.Write = 3;
18403 })(DocumentHighlightKind || (DocumentHighlightKind = {}));
18404 /**
18405  * DocumentHighlight namespace to provide helper functions to work with
18406  * [DocumentHighlight](#DocumentHighlight) literals.
18407  */
18408 var DocumentHighlight;
18409 (function (DocumentHighlight) {
18410     /**
18411      * Create a DocumentHighlight object.
18412      * @param range The range the highlight applies to.
18413      */
18414     function create(range, kind) {
18415         var result = { range: range };
18416         if (Is.number(kind)) {
18417             result.kind = kind;
18418         }
18419         return result;
18420     }
18421     DocumentHighlight.create = create;
18422 })(DocumentHighlight || (DocumentHighlight = {}));
18423 /**
18424  * A symbol kind.
18425  */
18426 var SymbolKind;
18427 (function (SymbolKind) {
18428     SymbolKind.File = 1;
18429     SymbolKind.Module = 2;
18430     SymbolKind.Namespace = 3;
18431     SymbolKind.Package = 4;
18432     SymbolKind.Class = 5;
18433     SymbolKind.Method = 6;
18434     SymbolKind.Property = 7;
18435     SymbolKind.Field = 8;
18436     SymbolKind.Constructor = 9;
18437     SymbolKind.Enum = 10;
18438     SymbolKind.Interface = 11;
18439     SymbolKind.Function = 12;
18440     SymbolKind.Variable = 13;
18441     SymbolKind.Constant = 14;
18442     SymbolKind.String = 15;
18443     SymbolKind.Number = 16;
18444     SymbolKind.Boolean = 17;
18445     SymbolKind.Array = 18;
18446     SymbolKind.Object = 19;
18447     SymbolKind.Key = 20;
18448     SymbolKind.Null = 21;
18449     SymbolKind.EnumMember = 22;
18450     SymbolKind.Struct = 23;
18451     SymbolKind.Event = 24;
18452     SymbolKind.Operator = 25;
18453     SymbolKind.TypeParameter = 26;
18454 })(SymbolKind || (SymbolKind = {}));
18455 /**
18456  * Symbol tags are extra annotations that tweak the rendering of a symbol.
18457  * @since 3.16
18458  */
18459 var SymbolTag;
18460 (function (SymbolTag) {
18461     /**
18462      * Render a symbol as obsolete, usually using a strike-out.
18463      */
18464     SymbolTag.Deprecated = 1;
18465 })(SymbolTag || (SymbolTag = {}));
18466 var SymbolInformation;
18467 (function (SymbolInformation) {
18468     /**
18469      * Creates a new symbol information literal.
18470      *
18471      * @param name The name of the symbol.
18472      * @param kind The kind of the symbol.
18473      * @param range The range of the location of the symbol.
18474      * @param uri The resource of the location of symbol, defaults to the current document.
18475      * @param containerName The name of the symbol containing the symbol.
18476      */
18477     function create(name, kind, range, uri, containerName) {
18478         var result = {
18479             name: name,
18480             kind: kind,
18481             location: { uri: uri, range: range }
18482         };
18483         if (containerName) {
18484             result.containerName = containerName;
18485         }
18486         return result;
18487     }
18488     SymbolInformation.create = create;
18489 })(SymbolInformation || (SymbolInformation = {}));
18490 var DocumentSymbol;
18491 (function (DocumentSymbol) {
18492     /**
18493      * Creates a new symbol information literal.
18494      *
18495      * @param name The name of the symbol.
18496      * @param detail The detail of the symbol.
18497      * @param kind The kind of the symbol.
18498      * @param range The range of the symbol.
18499      * @param selectionRange The selectionRange of the symbol.
18500      * @param children Children of the symbol.
18501      */
18502     function create(name, detail, kind, range, selectionRange, children) {
18503         var result = {
18504             name: name,
18505             detail: detail,
18506             kind: kind,
18507             range: range,
18508             selectionRange: selectionRange
18509         };
18510         if (children !== undefined) {
18511             result.children = children;
18512         }
18513         return result;
18514     }
18515     DocumentSymbol.create = create;
18516     /**
18517      * Checks whether the given literal conforms to the [DocumentSymbol](#DocumentSymbol) interface.
18518      */
18519     function is(value) {
18520         var candidate = value;
18521         return candidate &&
18522             Is.string(candidate.name) && Is.number(candidate.kind) &&
18523             Range.is(candidate.range) && Range.is(candidate.selectionRange) &&
18524             (candidate.detail === undefined || Is.string(candidate.detail)) &&
18525             (candidate.deprecated === undefined || Is.boolean(candidate.deprecated)) &&
18526             (candidate.children === undefined || Array.isArray(candidate.children)) &&
18527             (candidate.tags === undefined || Array.isArray(candidate.tags));
18528     }
18529     DocumentSymbol.is = is;
18530 })(DocumentSymbol || (DocumentSymbol = {}));
18531 /**
18532  * A set of predefined code action kinds
18533  */
18534 var CodeActionKind;
18535 (function (CodeActionKind) {
18536     /**
18537      * Empty kind.
18538      */
18539     CodeActionKind.Empty = '';
18540     /**
18541      * Base kind for quickfix actions: 'quickfix'
18542      */
18543     CodeActionKind.QuickFix = 'quickfix';
18544     /**
18545      * Base kind for refactoring actions: 'refactor'
18546      */
18547     CodeActionKind.Refactor = 'refactor';
18548     /**
18549      * Base kind for refactoring extraction actions: 'refactor.extract'
18550      *
18551      * Example extract actions:
18552      *
18553      * - Extract method
18554      * - Extract function
18555      * - Extract variable
18556      * - Extract interface from class
18557      * - ...
18558      */
18559     CodeActionKind.RefactorExtract = 'refactor.extract';
18560     /**
18561      * Base kind for refactoring inline actions: 'refactor.inline'
18562      *
18563      * Example inline actions:
18564      *
18565      * - Inline function
18566      * - Inline variable
18567      * - Inline constant
18568      * - ...
18569      */
18570     CodeActionKind.RefactorInline = 'refactor.inline';
18571     /**
18572      * Base kind for refactoring rewrite actions: 'refactor.rewrite'
18573      *
18574      * Example rewrite actions:
18575      *
18576      * - Convert JavaScript function to class
18577      * - Add or remove parameter
18578      * - Encapsulate field
18579      * - Make method static
18580      * - Move method to base class
18581      * - ...
18582      */
18583     CodeActionKind.RefactorRewrite = 'refactor.rewrite';
18584     /**
18585      * Base kind for source actions: `source`
18586      *
18587      * Source code actions apply to the entire file.
18588      */
18589     CodeActionKind.Source = 'source';
18590     /**
18591      * Base kind for an organize imports source action: `source.organizeImports`
18592      */
18593     CodeActionKind.SourceOrganizeImports = 'source.organizeImports';
18594     /**
18595      * Base kind for auto-fix source actions: `source.fixAll`.
18596      *
18597      * Fix all actions automatically fix errors that have a clear fix that do not require user input.
18598      * They should not suppress errors or perform unsafe fixes such as generating new types or classes.
18599      *
18600      * @since 3.15.0
18601      */
18602     CodeActionKind.SourceFixAll = 'source.fixAll';
18603 })(CodeActionKind || (CodeActionKind = {}));
18604 /**
18605  * The CodeActionContext namespace provides helper functions to work with
18606  * [CodeActionContext](#CodeActionContext) literals.
18607  */
18608 var CodeActionContext;
18609 (function (CodeActionContext) {
18610     /**
18611      * Creates a new CodeActionContext literal.
18612      */
18613     function create(diagnostics, only) {
18614         var result = { diagnostics: diagnostics };
18615         if (only !== undefined && only !== null) {
18616             result.only = only;
18617         }
18618         return result;
18619     }
18620     CodeActionContext.create = create;
18621     /**
18622      * Checks whether the given literal conforms to the [CodeActionContext](#CodeActionContext) interface.
18623      */
18624     function is(value) {
18625         var candidate = value;
18626         return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === undefined || Is.typedArray(candidate.only, Is.string));
18627     }
18628     CodeActionContext.is = is;
18629 })(CodeActionContext || (CodeActionContext = {}));
18630 var CodeAction;
18631 (function (CodeAction) {
18632     function create(title, kindOrCommandOrEdit, kind) {
18633         var result = { title: title };
18634         var checkKind = true;
18635         if (typeof kindOrCommandOrEdit === 'string') {
18636             checkKind = false;
18637             result.kind = kindOrCommandOrEdit;
18638         }
18639         else if (Command.is(kindOrCommandOrEdit)) {
18640             result.command = kindOrCommandOrEdit;
18641         }
18642         else {
18643             result.edit = kindOrCommandOrEdit;
18644         }
18645         if (checkKind && kind !== undefined) {
18646             result.kind = kind;
18647         }
18648         return result;
18649     }
18650     CodeAction.create = create;
18651     function is(value) {
18652         var candidate = value;
18653         return candidate && Is.string(candidate.title) &&
18654             (candidate.diagnostics === undefined || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&
18655             (candidate.kind === undefined || Is.string(candidate.kind)) &&
18656             (candidate.edit !== undefined || candidate.command !== undefined) &&
18657             (candidate.command === undefined || Command.is(candidate.command)) &&
18658             (candidate.isPreferred === undefined || Is.boolean(candidate.isPreferred)) &&
18659             (candidate.edit === undefined || WorkspaceEdit.is(candidate.edit));
18660     }
18661     CodeAction.is = is;
18662 })(CodeAction || (CodeAction = {}));
18663 /**
18664  * The CodeLens namespace provides helper functions to work with
18665  * [CodeLens](#CodeLens) literals.
18666  */
18667 var CodeLens;
18668 (function (CodeLens) {
18669     /**
18670      * Creates a new CodeLens literal.
18671      */
18672     function create(range, data) {
18673         var result = { range: range };
18674         if (Is.defined(data)) {
18675             result.data = data;
18676         }
18677         return result;
18678     }
18679     CodeLens.create = create;
18680     /**
18681      * Checks whether the given literal conforms to the [CodeLens](#CodeLens) interface.
18682      */
18683     function is(value) {
18684         var candidate = value;
18685         return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
18686     }
18687     CodeLens.is = is;
18688 })(CodeLens || (CodeLens = {}));
18689 /**
18690  * The FormattingOptions namespace provides helper functions to work with
18691  * [FormattingOptions](#FormattingOptions) literals.
18692  */
18693 var FormattingOptions;
18694 (function (FormattingOptions) {
18695     /**
18696      * Creates a new FormattingOptions literal.
18697      */
18698     function create(tabSize, insertSpaces) {
18699         return { tabSize: tabSize, insertSpaces: insertSpaces };
18700     }
18701     FormattingOptions.create = create;
18702     /**
18703      * Checks whether the given literal conforms to the [FormattingOptions](#FormattingOptions) interface.
18704      */
18705     function is(value) {
18706         var candidate = value;
18707         return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
18708     }
18709     FormattingOptions.is = is;
18710 })(FormattingOptions || (FormattingOptions = {}));
18711 /**
18712  * The DocumentLink namespace provides helper functions to work with
18713  * [DocumentLink](#DocumentLink) literals.
18714  */
18715 var DocumentLink;
18716 (function (DocumentLink) {
18717     /**
18718      * Creates a new DocumentLink literal.
18719      */
18720     function create(range, target, data) {
18721         return { range: range, target: target, data: data };
18722     }
18723     DocumentLink.create = create;
18724     /**
18725      * Checks whether the given literal conforms to the [DocumentLink](#DocumentLink) interface.
18726      */
18727     function is(value) {
18728         var candidate = value;
18729         return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
18730     }
18731     DocumentLink.is = is;
18732 })(DocumentLink || (DocumentLink = {}));
18733 /**
18734  * The SelectionRange namespace provides helper function to work with
18735  * SelectionRange literals.
18736  */
18737 var SelectionRange;
18738 (function (SelectionRange) {
18739     /**
18740      * Creates a new SelectionRange
18741      * @param range the range.
18742      * @param parent an optional parent.
18743      */
18744     function create(range, parent) {
18745         return { range: range, parent: parent };
18746     }
18747     SelectionRange.create = create;
18748     function is(value) {
18749         var candidate = value;
18750         return candidate !== undefined && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));
18751     }
18752     SelectionRange.is = is;
18753 })(SelectionRange || (SelectionRange = {}));
18754 var EOL = ['\n', '\r\n', '\r'];
18755 /**
18756  * @deprecated Use the text document from the new vscode-languageserver-textdocument package.
18757  */
18758 var TextDocument;
18759 (function (TextDocument) {
18760     /**
18761      * Creates a new ITextDocument literal from the given uri and content.
18762      * @param uri The document's uri.
18763      * @param languageId  The document's language Id.
18764      * @param content The document's content.
18765      */
18766     function create(uri, languageId, version, content) {
18767         return new FullTextDocument(uri, languageId, version, content);
18768     }
18769     TextDocument.create = create;
18770     /**
18771      * Checks whether the given literal conforms to the [ITextDocument](#ITextDocument) interface.
18772      */
18773     function is(value) {
18774         var candidate = value;
18775         return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount)
18776             && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
18777     }
18778     TextDocument.is = is;
18779     function applyEdits(document, edits) {
18780         var text = document.getText();
18781         var sortedEdits = mergeSort(edits, function (a, b) {
18782             var diff = a.range.start.line - b.range.start.line;
18783             if (diff === 0) {
18784                 return a.range.start.character - b.range.start.character;
18785             }
18786             return diff;
18787         });
18788         var lastModifiedOffset = text.length;
18789         for (var i = sortedEdits.length - 1; i >= 0; i--) {
18790             var e = sortedEdits[i];
18791             var startOffset = document.offsetAt(e.range.start);
18792             var endOffset = document.offsetAt(e.range.end);
18793             if (endOffset <= lastModifiedOffset) {
18794                 text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
18795             }
18796             else {
18797                 throw new Error('Overlapping edit');
18798             }
18799             lastModifiedOffset = startOffset;
18800         }
18801         return text;
18802     }
18803     TextDocument.applyEdits = applyEdits;
18804     function mergeSort(data, compare) {
18805         if (data.length <= 1) {
18806             // sorted
18807             return data;
18808         }
18809         var p = (data.length / 2) | 0;
18810         var left = data.slice(0, p);
18811         var right = data.slice(p);
18812         mergeSort(left, compare);
18813         mergeSort(right, compare);
18814         var leftIdx = 0;
18815         var rightIdx = 0;
18816         var i = 0;
18817         while (leftIdx < left.length && rightIdx < right.length) {
18818             var ret = compare(left[leftIdx], right[rightIdx]);
18819             if (ret <= 0) {
18820                 // smaller_equal -> take left to preserve order
18821                 data[i++] = left[leftIdx++];
18822             }
18823             else {
18824                 // greater -> take right
18825                 data[i++] = right[rightIdx++];
18826             }
18827         }
18828         while (leftIdx < left.length) {
18829             data[i++] = left[leftIdx++];
18830         }
18831         while (rightIdx < right.length) {
18832             data[i++] = right[rightIdx++];
18833         }
18834         return data;
18835     }
18836 })(TextDocument || (TextDocument = {}));
18837 /**
18838  * @deprecated Use the text document from the new vscode-languageserver-textdocument package.
18839  */
18840 var FullTextDocument = /** @class */ (function () {
18841     function FullTextDocument(uri, languageId, version, content) {
18842         this._uri = uri;
18843         this._languageId = languageId;
18844         this._version = version;
18845         this._content = content;
18846         this._lineOffsets = undefined;
18847     }
18848     Object.defineProperty(FullTextDocument.prototype, "uri", {
18849         get: function () {
18850             return this._uri;
18851         },
18852         enumerable: false,
18853         configurable: true
18854     });
18855     Object.defineProperty(FullTextDocument.prototype, "languageId", {
18856         get: function () {
18857             return this._languageId;
18858         },
18859         enumerable: false,
18860         configurable: true
18861     });
18862     Object.defineProperty(FullTextDocument.prototype, "version", {
18863         get: function () {
18864             return this._version;
18865         },
18866         enumerable: false,
18867         configurable: true
18868     });
18869     FullTextDocument.prototype.getText = function (range) {
18870         if (range) {
18871             var start = this.offsetAt(range.start);
18872             var end = this.offsetAt(range.end);
18873             return this._content.substring(start, end);
18874         }
18875         return this._content;
18876     };
18877     FullTextDocument.prototype.update = function (event, version) {
18878         this._content = event.text;
18879         this._version = version;
18880         this._lineOffsets = undefined;
18881     };
18882     FullTextDocument.prototype.getLineOffsets = function () {
18883         if (this._lineOffsets === undefined) {
18884             var lineOffsets = [];
18885             var text = this._content;
18886             var isLineStart = true;
18887             for (var i = 0; i < text.length; i++) {
18888                 if (isLineStart) {
18889                     lineOffsets.push(i);
18890                     isLineStart = false;
18891                 }
18892                 var ch = text.charAt(i);
18893                 isLineStart = (ch === '\r' || ch === '\n');
18894                 if (ch === '\r' && i + 1 < text.length && text.charAt(i + 1) === '\n') {
18895                     i++;
18896                 }
18897             }
18898             if (isLineStart && text.length > 0) {
18899                 lineOffsets.push(text.length);
18900             }
18901             this._lineOffsets = lineOffsets;
18902         }
18903         return this._lineOffsets;
18904     };
18905     FullTextDocument.prototype.positionAt = function (offset) {
18906         offset = Math.max(Math.min(offset, this._content.length), 0);
18907         var lineOffsets = this.getLineOffsets();
18908         var low = 0, high = lineOffsets.length;
18909         if (high === 0) {
18910             return Position.create(0, offset);
18911         }
18912         while (low < high) {
18913             var mid = Math.floor((low + high) / 2);
18914             if (lineOffsets[mid] > offset) {
18915                 high = mid;
18916             }
18917             else {
18918                 low = mid + 1;
18919             }
18920         }
18921         // low is the least x for which the line offset is larger than the current offset
18922         // or array.length if no line offset is larger than the current offset
18923         var line = low - 1;
18924         return Position.create(line, offset - lineOffsets[line]);
18925     };
18926     FullTextDocument.prototype.offsetAt = function (position) {
18927         var lineOffsets = this.getLineOffsets();
18928         if (position.line >= lineOffsets.length) {
18929             return this._content.length;
18930         }
18931         else if (position.line < 0) {
18932             return 0;
18933         }
18934         var lineOffset = lineOffsets[position.line];
18935         var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
18936         return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
18937     };
18938     Object.defineProperty(FullTextDocument.prototype, "lineCount", {
18939         get: function () {
18940             return this.getLineOffsets().length;
18941         },
18942         enumerable: false,
18943         configurable: true
18944     });
18945     return FullTextDocument;
18946 }());
18947 var Is;
18948 (function (Is) {
18949     var toString = Object.prototype.toString;
18950     function defined(value) {
18951         return typeof value !== 'undefined';
18952     }
18953     Is.defined = defined;
18954     function undefined(value) {
18955         return typeof value === 'undefined';
18956     }
18957     Is.undefined = undefined;
18958     function boolean(value) {
18959         return value === true || value === false;
18960     }
18961     Is.boolean = boolean;
18962     function string(value) {
18963         return toString.call(value) === '[object String]';
18964     }
18965     Is.string = string;
18966     function number(value) {
18967         return toString.call(value) === '[object Number]';
18968     }
18969     Is.number = number;
18970     function numberRange(value, min, max) {
18971         return toString.call(value) === '[object Number]' && min <= value && value <= max;
18972     }
18973     Is.numberRange = numberRange;
18974     function integer(value) {
18975         return toString.call(value) === '[object Number]' && -2147483648 <= value && value <= 2147483647;
18976     }
18977     Is.integer = integer;
18978     function uinteger(value) {
18979         return toString.call(value) === '[object Number]' && 0 <= value && value <= 2147483647;
18980     }
18981     Is.uinteger = uinteger;
18982     function func(value) {
18983         return toString.call(value) === '[object Function]';
18984     }
18985     Is.func = func;
18986     function objectLiteral(value) {
18987         // Strictly speaking class instances pass this check as well. Since the LSP
18988         // doesn't use classes we ignore this for now. If we do we need to add something
18989         // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
18990         return value !== null && typeof value === 'object';
18991     }
18992     Is.objectLiteral = objectLiteral;
18993     function typedArray(value, check) {
18994         return Array.isArray(value) && value.every(check);
18995     }
18996     Is.typedArray = typedArray;
18997 })(Is || (Is = {}));
18998
18999
19000 /***/ }),
19001 /* 90 */
19002 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
19003
19004 __webpack_require__.r(__webpack_exports__);
19005 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
19006 /* harmony export */   "TextDocument": () => /* binding */ TextDocument
19007 /* harmony export */ });
19008 /* --------------------------------------------------------------------------------------------
19009  * Copyright (c) Microsoft Corporation. All rights reserved.
19010  * Licensed under the MIT License. See License.txt in the project root for license information.
19011  * ------------------------------------------------------------------------------------------ */
19012
19013 var FullTextDocument = /** @class */ (function () {
19014     function FullTextDocument(uri, languageId, version, content) {
19015         this._uri = uri;
19016         this._languageId = languageId;
19017         this._version = version;
19018         this._content = content;
19019         this._lineOffsets = undefined;
19020     }
19021     Object.defineProperty(FullTextDocument.prototype, "uri", {
19022         get: function () {
19023             return this._uri;
19024         },
19025         enumerable: true,
19026         configurable: true
19027     });
19028     Object.defineProperty(FullTextDocument.prototype, "languageId", {
19029         get: function () {
19030             return this._languageId;
19031         },
19032         enumerable: true,
19033         configurable: true
19034     });
19035     Object.defineProperty(FullTextDocument.prototype, "version", {
19036         get: function () {
19037             return this._version;
19038         },
19039         enumerable: true,
19040         configurable: true
19041     });
19042     FullTextDocument.prototype.getText = function (range) {
19043         if (range) {
19044             var start = this.offsetAt(range.start);
19045             var end = this.offsetAt(range.end);
19046             return this._content.substring(start, end);
19047         }
19048         return this._content;
19049     };
19050     FullTextDocument.prototype.update = function (changes, version) {
19051         for (var _i = 0, changes_1 = changes; _i < changes_1.length; _i++) {
19052             var change = changes_1[_i];
19053             if (FullTextDocument.isIncremental(change)) {
19054                 // makes sure start is before end
19055                 var range = getWellformedRange(change.range);
19056                 // update content
19057                 var startOffset = this.offsetAt(range.start);
19058                 var endOffset = this.offsetAt(range.end);
19059                 this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);
19060                 // update the offsets
19061                 var startLine = Math.max(range.start.line, 0);
19062                 var endLine = Math.max(range.end.line, 0);
19063                 var lineOffsets = this._lineOffsets;
19064                 var addedLineOffsets = computeLineOffsets(change.text, false, startOffset);
19065                 if (endLine - startLine === addedLineOffsets.length) {
19066                     for (var i = 0, len = addedLineOffsets.length; i < len; i++) {
19067                         lineOffsets[i + startLine + 1] = addedLineOffsets[i];
19068                     }
19069                 }
19070                 else {
19071                     if (addedLineOffsets.length < 10000) {
19072                         lineOffsets.splice.apply(lineOffsets, [startLine + 1, endLine - startLine].concat(addedLineOffsets));
19073                     }
19074                     else { // avoid too many arguments for splice
19075                         this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));
19076                     }
19077                 }
19078                 var diff = change.text.length - (endOffset - startOffset);
19079                 if (diff !== 0) {
19080                     for (var i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {
19081                         lineOffsets[i] = lineOffsets[i] + diff;
19082                     }
19083                 }
19084             }
19085             else if (FullTextDocument.isFull(change)) {
19086                 this._content = change.text;
19087                 this._lineOffsets = undefined;
19088             }
19089             else {
19090                 throw new Error('Unknown change event received');
19091             }
19092         }
19093         this._version = version;
19094     };
19095     FullTextDocument.prototype.getLineOffsets = function () {
19096         if (this._lineOffsets === undefined) {
19097             this._lineOffsets = computeLineOffsets(this._content, true);
19098         }
19099         return this._lineOffsets;
19100     };
19101     FullTextDocument.prototype.positionAt = function (offset) {
19102         offset = Math.max(Math.min(offset, this._content.length), 0);
19103         var lineOffsets = this.getLineOffsets();
19104         var low = 0, high = lineOffsets.length;
19105         if (high === 0) {
19106             return { line: 0, character: offset };
19107         }
19108         while (low < high) {
19109             var mid = Math.floor((low + high) / 2);
19110             if (lineOffsets[mid] > offset) {
19111                 high = mid;
19112             }
19113             else {
19114                 low = mid + 1;
19115             }
19116         }
19117         // low is the least x for which the line offset is larger than the current offset
19118         // or array.length if no line offset is larger than the current offset
19119         var line = low - 1;
19120         return { line: line, character: offset - lineOffsets[line] };
19121     };
19122     FullTextDocument.prototype.offsetAt = function (position) {
19123         var lineOffsets = this.getLineOffsets();
19124         if (position.line >= lineOffsets.length) {
19125             return this._content.length;
19126         }
19127         else if (position.line < 0) {
19128             return 0;
19129         }
19130         var lineOffset = lineOffsets[position.line];
19131         var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
19132         return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
19133     };
19134     Object.defineProperty(FullTextDocument.prototype, "lineCount", {
19135         get: function () {
19136             return this.getLineOffsets().length;
19137         },
19138         enumerable: true,
19139         configurable: true
19140     });
19141     FullTextDocument.isIncremental = function (event) {
19142         var candidate = event;
19143         return candidate !== undefined && candidate !== null &&
19144             typeof candidate.text === 'string' && candidate.range !== undefined &&
19145             (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');
19146     };
19147     FullTextDocument.isFull = function (event) {
19148         var candidate = event;
19149         return candidate !== undefined && candidate !== null &&
19150             typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;
19151     };
19152     return FullTextDocument;
19153 }());
19154 var TextDocument;
19155 (function (TextDocument) {
19156     /**
19157      * Creates a new text document.
19158      *
19159      * @param uri The document's uri.
19160      * @param languageId  The document's language Id.
19161      * @param version The document's initial version number.
19162      * @param content The document's content.
19163      */
19164     function create(uri, languageId, version, content) {
19165         return new FullTextDocument(uri, languageId, version, content);
19166     }
19167     TextDocument.create = create;
19168     /**
19169      * Updates a TextDocument by modifing its content.
19170      *
19171      * @param document the document to update. Only documents created by TextDocument.create are valid inputs.
19172      * @param changes the changes to apply to the document.
19173      * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.
19174      *
19175      */
19176     function update(document, changes, version) {
19177         if (document instanceof FullTextDocument) {
19178             document.update(changes, version);
19179             return document;
19180         }
19181         else {
19182             throw new Error('TextDocument.update: document must be created by TextDocument.create');
19183         }
19184     }
19185     TextDocument.update = update;
19186     function applyEdits(document, edits) {
19187         var text = document.getText();
19188         var sortedEdits = mergeSort(edits.map(getWellformedEdit), function (a, b) {
19189             var diff = a.range.start.line - b.range.start.line;
19190             if (diff === 0) {
19191                 return a.range.start.character - b.range.start.character;
19192             }
19193             return diff;
19194         });
19195         var lastModifiedOffset = 0;
19196         var spans = [];
19197         for (var _i = 0, sortedEdits_1 = sortedEdits; _i < sortedEdits_1.length; _i++) {
19198             var e = sortedEdits_1[_i];
19199             var startOffset = document.offsetAt(e.range.start);
19200             if (startOffset < lastModifiedOffset) {
19201                 throw new Error('Overlapping edit');
19202             }
19203             else if (startOffset > lastModifiedOffset) {
19204                 spans.push(text.substring(lastModifiedOffset, startOffset));
19205             }
19206             if (e.newText.length) {
19207                 spans.push(e.newText);
19208             }
19209             lastModifiedOffset = document.offsetAt(e.range.end);
19210         }
19211         spans.push(text.substr(lastModifiedOffset));
19212         return spans.join('');
19213     }
19214     TextDocument.applyEdits = applyEdits;
19215 })(TextDocument || (TextDocument = {}));
19216 function mergeSort(data, compare) {
19217     if (data.length <= 1) {
19218         // sorted
19219         return data;
19220     }
19221     var p = (data.length / 2) | 0;
19222     var left = data.slice(0, p);
19223     var right = data.slice(p);
19224     mergeSort(left, compare);
19225     mergeSort(right, compare);
19226     var leftIdx = 0;
19227     var rightIdx = 0;
19228     var i = 0;
19229     while (leftIdx < left.length && rightIdx < right.length) {
19230         var ret = compare(left[leftIdx], right[rightIdx]);
19231         if (ret <= 0) {
19232             // smaller_equal -> take left to preserve order
19233             data[i++] = left[leftIdx++];
19234         }
19235         else {
19236             // greater -> take right
19237             data[i++] = right[rightIdx++];
19238         }
19239     }
19240     while (leftIdx < left.length) {
19241         data[i++] = left[leftIdx++];
19242     }
19243     while (rightIdx < right.length) {
19244         data[i++] = right[rightIdx++];
19245     }
19246     return data;
19247 }
19248 function computeLineOffsets(text, isAtLineStart, textOffset) {
19249     if (textOffset === void 0) { textOffset = 0; }
19250     var result = isAtLineStart ? [textOffset] : [];
19251     for (var i = 0; i < text.length; i++) {
19252         var ch = text.charCodeAt(i);
19253         if (ch === 13 /* CarriageReturn */ || ch === 10 /* LineFeed */) {
19254             if (ch === 13 /* CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* LineFeed */) {
19255                 i++;
19256             }
19257             result.push(textOffset + i + 1);
19258         }
19259     }
19260     return result;
19261 }
19262 function getWellformedRange(range) {
19263     var start = range.start;
19264     var end = range.end;
19265     if (start.line > end.line || (start.line === end.line && start.character > end.character)) {
19266         return { start: end, end: start };
19267     }
19268     return range;
19269 }
19270 function getWellformedEdit(textEdit) {
19271     var range = getWellformedRange(textEdit.range);
19272     if (range !== textEdit.range) {
19273         return { newText: textEdit.newText, range: range };
19274     }
19275     return textEdit;
19276 }
19277
19278
19279 /***/ }),
19280 /* 91 */
19281 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
19282
19283 __webpack_require__.r(__webpack_exports__);
19284 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
19285 /* harmony export */   "PathCompletionParticipant": () => /* binding */ PathCompletionParticipant
19286 /* harmony export */ });
19287 /* harmony import */ var _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(88);
19288 /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(75);
19289 /* harmony import */ var _utils_resources__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(92);
19290 /*---------------------------------------------------------------------------------------------
19291  *  Copyright (c) Microsoft Corporation. All rights reserved.
19292  *  Licensed under the MIT License. See License.txt in the project root for license information.
19293  *--------------------------------------------------------------------------------------------*/
19294 var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
19295     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19296     return new (P || (P = Promise))(function (resolve, reject) {
19297         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
19298         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19299         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19300         step((generator = generator.apply(thisArg, _arguments || [])).next());
19301     });
19302 };
19303 var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
19304     var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
19305     return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
19306     function verb(n) { return function (v) { return step([n, v]); }; }
19307     function step(op) {
19308         if (f) throw new TypeError("Generator is already executing.");
19309         while (_) try {
19310             if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19311             if (y = 0, t) op = [op[0] & 2, t.value];
19312             switch (op[0]) {
19313                 case 0: case 1: t = op; break;
19314                 case 4: _.label++; return { value: op[1], done: false };
19315                 case 5: _.label++; y = op[1]; op = [0]; continue;
19316                 case 7: op = _.ops.pop(); _.trys.pop(); continue;
19317                 default:
19318                     if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
19319                     if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
19320                     if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
19321                     if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
19322                     if (t[2]) _.ops.pop();
19323                     _.trys.pop(); continue;
19324             }
19325             op = body.call(thisArg, _);
19326         } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
19327         if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
19328     }
19329 };
19330
19331
19332
19333 var PathCompletionParticipant = /** @class */ (function () {
19334     function PathCompletionParticipant(readDirectory) {
19335         this.readDirectory = readDirectory;
19336         this.literalCompletions = [];
19337         this.importCompletions = [];
19338     }
19339     PathCompletionParticipant.prototype.onCssURILiteralValue = function (context) {
19340         this.literalCompletions.push(context);
19341     };
19342     PathCompletionParticipant.prototype.onCssImportPath = function (context) {
19343         this.importCompletions.push(context);
19344     };
19345     PathCompletionParticipant.prototype.computeCompletions = function (document, documentContext) {
19346         return __awaiter(this, void 0, void 0, function () {
19347             var result, _i, _a, literalCompletion, uriValue, fullValue, items, _b, items_1, item, _c, _d, importCompletion, pathValue, fullValue, suggestions, _e, suggestions_1, item;
19348             return __generator(this, function (_f) {
19349                 switch (_f.label) {
19350                     case 0:
19351                         result = { items: [], isIncomplete: false };
19352                         _i = 0, _a = this.literalCompletions;
19353                         _f.label = 1;
19354                     case 1:
19355                         if (!(_i < _a.length)) return [3 /*break*/, 5];
19356                         literalCompletion = _a[_i];
19357                         uriValue = literalCompletion.uriValue;
19358                         fullValue = stripQuotes(uriValue);
19359                         if (!(fullValue === '.' || fullValue === '..')) return [3 /*break*/, 2];
19360                         result.isIncomplete = true;
19361                         return [3 /*break*/, 4];
19362                     case 2: return [4 /*yield*/, this.providePathSuggestions(uriValue, literalCompletion.position, literalCompletion.range, document, documentContext)];
19363                     case 3:
19364                         items = _f.sent();
19365                         for (_b = 0, items_1 = items; _b < items_1.length; _b++) {
19366                             item = items_1[_b];
19367                             result.items.push(item);
19368                         }
19369                         _f.label = 4;
19370                     case 4:
19371                         _i++;
19372                         return [3 /*break*/, 1];
19373                     case 5:
19374                         _c = 0, _d = this.importCompletions;
19375                         _f.label = 6;
19376                     case 6:
19377                         if (!(_c < _d.length)) return [3 /*break*/, 10];
19378                         importCompletion = _d[_c];
19379                         pathValue = importCompletion.pathValue;
19380                         fullValue = stripQuotes(pathValue);
19381                         if (!(fullValue === '.' || fullValue === '..')) return [3 /*break*/, 7];
19382                         result.isIncomplete = true;
19383                         return [3 /*break*/, 9];
19384                     case 7: return [4 /*yield*/, this.providePathSuggestions(pathValue, importCompletion.position, importCompletion.range, document, documentContext)];
19385                     case 8:
19386                         suggestions = _f.sent();
19387                         if (document.languageId === 'scss') {
19388                             suggestions.forEach(function (s) {
19389                                 if ((0,_utils_strings__WEBPACK_IMPORTED_MODULE_1__.startsWith)(s.label, '_') && (0,_utils_strings__WEBPACK_IMPORTED_MODULE_1__.endsWith)(s.label, '.scss')) {
19390                                     if (s.textEdit) {
19391                                         s.textEdit.newText = s.label.slice(1, -5);
19392                                     }
19393                                     else {
19394                                         s.label = s.label.slice(1, -5);
19395                                     }
19396                                 }
19397                             });
19398                         }
19399                         for (_e = 0, suggestions_1 = suggestions; _e < suggestions_1.length; _e++) {
19400                             item = suggestions_1[_e];
19401                             result.items.push(item);
19402                         }
19403                         _f.label = 9;
19404                     case 9:
19405                         _c++;
19406                         return [3 /*break*/, 6];
19407                     case 10: return [2 /*return*/, result];
19408                 }
19409             });
19410         });
19411     };
19412     PathCompletionParticipant.prototype.providePathSuggestions = function (pathValue, position, range, document, documentContext) {
19413         return __awaiter(this, void 0, void 0, function () {
19414             var fullValue, isValueQuoted, valueBeforeCursor, currentDocUri, fullValueRange, replaceRange, valueBeforeLastSlash, parentDir, result, infos, _i, infos_1, _a, name, type, e_1;
19415             return __generator(this, function (_b) {
19416                 switch (_b.label) {
19417                     case 0:
19418                         fullValue = stripQuotes(pathValue);
19419                         isValueQuoted = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_1__.startsWith)(pathValue, "'") || (0,_utils_strings__WEBPACK_IMPORTED_MODULE_1__.startsWith)(pathValue, "\"");
19420                         valueBeforeCursor = isValueQuoted
19421                             ? fullValue.slice(0, position.character - (range.start.character + 1))
19422                             : fullValue.slice(0, position.character - range.start.character);
19423                         currentDocUri = document.uri;
19424                         fullValueRange = isValueQuoted ? shiftRange(range, 1, -1) : range;
19425                         replaceRange = pathToReplaceRange(valueBeforeCursor, fullValue, fullValueRange);
19426                         valueBeforeLastSlash = valueBeforeCursor.substring(0, valueBeforeCursor.lastIndexOf('/') + 1);
19427                         parentDir = documentContext.resolveReference(valueBeforeLastSlash || '.', currentDocUri);
19428                         if (!parentDir) return [3 /*break*/, 4];
19429                         _b.label = 1;
19430                     case 1:
19431                         _b.trys.push([1, 3, , 4]);
19432                         result = [];
19433                         return [4 /*yield*/, this.readDirectory(parentDir)];
19434                     case 2:
19435                         infos = _b.sent();
19436                         for (_i = 0, infos_1 = infos; _i < infos_1.length; _i++) {
19437                             _a = infos_1[_i], name = _a[0], type = _a[1];
19438                             // Exclude paths that start with `.`
19439                             if (name.charCodeAt(0) !== CharCode_dot && (type === _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.FileType.Directory || (0,_utils_resources__WEBPACK_IMPORTED_MODULE_2__.joinPath)(parentDir, name) !== currentDocUri)) {
19440                                 result.push(createCompletionItem(name, type === _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.FileType.Directory, replaceRange));
19441                             }
19442                         }
19443                         return [2 /*return*/, result];
19444                     case 3:
19445                         e_1 = _b.sent();
19446                         return [3 /*break*/, 4];
19447                     case 4: return [2 /*return*/, []];
19448                 }
19449             });
19450         });
19451     };
19452     return PathCompletionParticipant;
19453 }());
19454
19455 var CharCode_dot = '.'.charCodeAt(0);
19456 function stripQuotes(fullValue) {
19457     if ((0,_utils_strings__WEBPACK_IMPORTED_MODULE_1__.startsWith)(fullValue, "'") || (0,_utils_strings__WEBPACK_IMPORTED_MODULE_1__.startsWith)(fullValue, "\"")) {
19458         return fullValue.slice(1, -1);
19459     }
19460     else {
19461         return fullValue;
19462     }
19463 }
19464 function pathToReplaceRange(valueBeforeCursor, fullValue, fullValueRange) {
19465     var replaceRange;
19466     var lastIndexOfSlash = valueBeforeCursor.lastIndexOf('/');
19467     if (lastIndexOfSlash === -1) {
19468         replaceRange = fullValueRange;
19469     }
19470     else {
19471         // For cases where cursor is in the middle of attribute value, like <script src="./s|rc/test.js">
19472         // Find the last slash before cursor, and calculate the start of replace range from there
19473         var valueAfterLastSlash = fullValue.slice(lastIndexOfSlash + 1);
19474         var startPos = shiftPosition(fullValueRange.end, -valueAfterLastSlash.length);
19475         // If whitespace exists, replace until it
19476         var whitespaceIndex = valueAfterLastSlash.indexOf(' ');
19477         var endPos = void 0;
19478         if (whitespaceIndex !== -1) {
19479             endPos = shiftPosition(startPos, whitespaceIndex);
19480         }
19481         else {
19482             endPos = fullValueRange.end;
19483         }
19484         replaceRange = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Range.create(startPos, endPos);
19485     }
19486     return replaceRange;
19487 }
19488 function createCompletionItem(name, isDir, replaceRange) {
19489     if (isDir) {
19490         name = name + '/';
19491         return {
19492             label: escapePath(name),
19493             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.CompletionItemKind.Folder,
19494             textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TextEdit.replace(replaceRange, escapePath(name)),
19495             command: {
19496                 title: 'Suggest',
19497                 command: 'editor.action.triggerSuggest'
19498             }
19499         };
19500     }
19501     else {
19502         return {
19503             label: escapePath(name),
19504             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.CompletionItemKind.File,
19505             textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TextEdit.replace(replaceRange, escapePath(name))
19506         };
19507     }
19508 }
19509 // Escape https://www.w3.org/TR/CSS1/#url
19510 function escapePath(p) {
19511     return p.replace(/(\s|\(|\)|,|"|')/g, '\\$1');
19512 }
19513 function shiftPosition(pos, offset) {
19514     return _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Position.create(pos.line, pos.character + offset);
19515 }
19516 function shiftRange(range, startOffset, endOffset) {
19517     var start = shiftPosition(range.start, startOffset);
19518     var end = shiftPosition(range.end, endOffset);
19519     return _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Range.create(start, end);
19520 }
19521
19522
19523 /***/ }),
19524 /* 92 */
19525 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
19526
19527 __webpack_require__.r(__webpack_exports__);
19528 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
19529 /* harmony export */   "dirname": () => /* binding */ dirname,
19530 /* harmony export */   "joinPath": () => /* binding */ joinPath
19531 /* harmony export */ });
19532 /* harmony import */ var vscode_uri__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(93);
19533 /*---------------------------------------------------------------------------------------------
19534  *  Copyright (c) Microsoft Corporation. All rights reserved.
19535  *  Licensed under the MIT License. See License.txt in the project root for license information.
19536  *--------------------------------------------------------------------------------------------*/
19537 var __spreadArrays = (undefined && undefined.__spreadArrays) || function () {
19538     for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
19539     for (var r = Array(s), k = 0, i = 0; i < il; i++)
19540         for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
19541             r[k] = a[j];
19542     return r;
19543 };
19544
19545 function dirname(uriString) {
19546     return vscode_uri__WEBPACK_IMPORTED_MODULE_0__.Utils.dirname(vscode_uri__WEBPACK_IMPORTED_MODULE_0__.URI.parse(uriString)).toString();
19547 }
19548 function joinPath(uriString) {
19549     var paths = [];
19550     for (var _i = 1; _i < arguments.length; _i++) {
19551         paths[_i - 1] = arguments[_i];
19552     }
19553     return vscode_uri__WEBPACK_IMPORTED_MODULE_0__.Utils.joinPath.apply(vscode_uri__WEBPACK_IMPORTED_MODULE_0__.Utils, __spreadArrays([vscode_uri__WEBPACK_IMPORTED_MODULE_0__.URI.parse(uriString)], paths)).toString();
19554 }
19555
19556
19557 /***/ }),
19558 /* 93 */
19559 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
19560
19561 __webpack_require__.r(__webpack_exports__);
19562 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
19563 /* harmony export */   "URI": () => /* binding */ URI,
19564 /* harmony export */   "Utils": () => /* binding */ Utils
19565 /* harmony export */ });
19566 var LIB;LIB=(()=>{"use strict";var t={470:t=>{function e(t){if("string"!=typeof t)throw new TypeError("Path must be a string. Received "+JSON.stringify(t))}function r(t,e){for(var r,n="",o=0,i=-1,a=0,h=0;h<=t.length;++h){if(h<t.length)r=t.charCodeAt(h);else{if(47===r)break;r=47}if(47===r){if(i===h-1||1===a);else if(i!==h-1&&2===a){if(n.length<2||2!==o||46!==n.charCodeAt(n.length-1)||46!==n.charCodeAt(n.length-2))if(n.length>2){var s=n.lastIndexOf("/");if(s!==n.length-1){-1===s?(n="",o=0):o=(n=n.slice(0,s)).length-1-n.lastIndexOf("/"),i=h,a=0;continue}}else if(2===n.length||1===n.length){n="",o=0,i=h,a=0;continue}e&&(n.length>0?n+="/..":n="..",o=2)}else n.length>0?n+="/"+t.slice(i+1,h):n=t.slice(i+1,h),o=h-i-1;i=h,a=0}else 46===r&&-1!==a?++a:a=-1}return n}var n={resolve:function(){for(var t,n="",o=!1,i=arguments.length-1;i>=-1&&!o;i--){var a;i>=0?a=arguments[i]:(void 0===t&&(t=process.cwd()),a=t),e(a),0!==a.length&&(n=a+"/"+n,o=47===a.charCodeAt(0))}return n=r(n,!o),o?n.length>0?"/"+n:"/":n.length>0?n:"."},normalize:function(t){if(e(t),0===t.length)return".";var n=47===t.charCodeAt(0),o=47===t.charCodeAt(t.length-1);return 0!==(t=r(t,!n)).length||n||(t="."),t.length>0&&o&&(t+="/"),n?"/"+t:t},isAbsolute:function(t){return e(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var t,r=0;r<arguments.length;++r){var o=arguments[r];e(o),o.length>0&&(void 0===t?t=o:t+="/"+o)}return void 0===t?".":n.normalize(t)},relative:function(t,r){if(e(t),e(r),t===r)return"";if((t=n.resolve(t))===(r=n.resolve(r)))return"";for(var o=1;o<t.length&&47===t.charCodeAt(o);++o);for(var i=t.length,a=i-o,h=1;h<r.length&&47===r.charCodeAt(h);++h);for(var s=r.length-h,f=a<s?a:s,u=-1,c=0;c<=f;++c){if(c===f){if(s>f){if(47===r.charCodeAt(h+c))return r.slice(h+c+1);if(0===c)return r.slice(h+c)}else a>f&&(47===t.charCodeAt(o+c)?u=c:0===c&&(u=0));break}var l=t.charCodeAt(o+c);if(l!==r.charCodeAt(h+c))break;47===l&&(u=c)}var p="";for(c=o+u+1;c<=i;++c)c!==i&&47!==t.charCodeAt(c)||(0===p.length?p+="..":p+="/..");return p.length>0?p+r.slice(h+u):(h+=u,47===r.charCodeAt(h)&&++h,r.slice(h))},_makeLong:function(t){return t},dirname:function(t){if(e(t),0===t.length)return".";for(var r=t.charCodeAt(0),n=47===r,o=-1,i=!0,a=t.length-1;a>=1;--a)if(47===(r=t.charCodeAt(a))){if(!i){o=a;break}}else i=!1;return-1===o?n?"/":".":n&&1===o?"//":t.slice(0,o)},basename:function(t,r){if(void 0!==r&&"string"!=typeof r)throw new TypeError('"ext" argument must be a string');e(t);var n,o=0,i=-1,a=!0;if(void 0!==r&&r.length>0&&r.length<=t.length){if(r.length===t.length&&r===t)return"";var h=r.length-1,s=-1;for(n=t.length-1;n>=0;--n){var f=t.charCodeAt(n);if(47===f){if(!a){o=n+1;break}}else-1===s&&(a=!1,s=n+1),h>=0&&(f===r.charCodeAt(h)?-1==--h&&(i=n):(h=-1,i=s))}return o===i?i=s:-1===i&&(i=t.length),t.slice(o,i)}for(n=t.length-1;n>=0;--n)if(47===t.charCodeAt(n)){if(!a){o=n+1;break}}else-1===i&&(a=!1,i=n+1);return-1===i?"":t.slice(o,i)},extname:function(t){e(t);for(var r=-1,n=0,o=-1,i=!0,a=0,h=t.length-1;h>=0;--h){var s=t.charCodeAt(h);if(47!==s)-1===o&&(i=!1,o=h+1),46===s?-1===r?r=h:1!==a&&(a=1):-1!==r&&(a=-1);else if(!i){n=h+1;break}}return-1===r||-1===o||0===a||1===a&&r===o-1&&r===n+1?"":t.slice(r,o)},format:function(t){if(null===t||"object"!=typeof t)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof t);return function(t,e){var r=e.dir||e.root,n=e.base||(e.name||"")+(e.ext||"");return r?r===e.root?r+n:r+"/"+n:n}(0,t)},parse:function(t){e(t);var r={root:"",dir:"",base:"",ext:"",name:""};if(0===t.length)return r;var n,o=t.charCodeAt(0),i=47===o;i?(r.root="/",n=1):n=0;for(var a=-1,h=0,s=-1,f=!0,u=t.length-1,c=0;u>=n;--u)if(47!==(o=t.charCodeAt(u)))-1===s&&(f=!1,s=u+1),46===o?-1===a?a=u:1!==c&&(c=1):-1!==a&&(c=-1);else if(!f){h=u+1;break}return-1===a||-1===s||0===c||1===c&&a===s-1&&a===h+1?-1!==s&&(r.base=r.name=0===h&&i?t.slice(1,s):t.slice(h,s)):(0===h&&i?(r.name=t.slice(1,a),r.base=t.slice(1,s)):(r.name=t.slice(h,a),r.base=t.slice(h,s)),r.ext=t.slice(a,s)),h>0?r.dir=t.slice(0,h-1):i&&(r.dir="/"),r},sep:"/",delimiter:":",win32:null,posix:null};n.posix=n,t.exports=n},447:(t,e,r)=>{var n;if(r.r(e),r.d(e,{URI:()=>g,Utils:()=>O}),"object"==typeof process)n="win32"===process.platform;else if("object"==typeof navigator){var o=navigator.userAgent;n=o.indexOf("Windows")>=0}var i,a,h=(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),s=/^\w[\w\d+.-]*$/,f=/^\//,u=/^\/\//,c="",l="/",p=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/,g=function(){function t(t,e,r,n,o,i){void 0===i&&(i=!1),"object"==typeof t?(this.scheme=t.scheme||c,this.authority=t.authority||c,this.path=t.path||c,this.query=t.query||c,this.fragment=t.fragment||c):(this.scheme=function(t,e){return t||e?t:"file"}(t,i),this.authority=e||c,this.path=function(t,e){switch(t){case"https":case"http":case"file":e?e[0]!==l&&(e=l+e):e=l}return e}(this.scheme,r||c),this.query=n||c,this.fragment=o||c,function(t,e){if(!t.scheme&&e)throw new Error('[UriError]: Scheme is missing: {scheme: "", authority: "'+t.authority+'", path: "'+t.path+'", query: "'+t.query+'", fragment: "'+t.fragment+'"}');if(t.scheme&&!s.test(t.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(t.path)if(t.authority){if(!f.test(t.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(u.test(t.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}(this,i))}return t.isUri=function(e){return e instanceof t||!!e&&"string"==typeof e.authority&&"string"==typeof e.fragment&&"string"==typeof e.path&&"string"==typeof e.query&&"string"==typeof e.scheme&&"function"==typeof e.fsPath&&"function"==typeof e.with&&"function"==typeof e.toString},Object.defineProperty(t.prototype,"fsPath",{get:function(){return C(this,!1)},enumerable:!1,configurable:!0}),t.prototype.with=function(t){if(!t)return this;var e=t.scheme,r=t.authority,n=t.path,o=t.query,i=t.fragment;return void 0===e?e=this.scheme:null===e&&(e=c),void 0===r?r=this.authority:null===r&&(r=c),void 0===n?n=this.path:null===n&&(n=c),void 0===o?o=this.query:null===o&&(o=c),void 0===i?i=this.fragment:null===i&&(i=c),e===this.scheme&&r===this.authority&&n===this.path&&o===this.query&&i===this.fragment?this:new v(e,r,n,o,i)},t.parse=function(t,e){void 0===e&&(e=!1);var r=p.exec(t);return r?new v(r[2]||c,x(r[4]||c),x(r[5]||c),x(r[7]||c),x(r[9]||c),e):new v(c,c,c,c,c)},t.file=function(t){var e=c;if(n&&(t=t.replace(/\\/g,l)),t[0]===l&&t[1]===l){var r=t.indexOf(l,2);-1===r?(e=t.substring(2),t=l):(e=t.substring(2,r),t=t.substring(r)||l)}return new v("file",e,t,c,c)},t.from=function(t){return new v(t.scheme,t.authority,t.path,t.query,t.fragment)},t.prototype.toString=function(t){return void 0===t&&(t=!1),A(this,t)},t.prototype.toJSON=function(){return this},t.revive=function(e){if(e){if(e instanceof t)return e;var r=new v(e);return r._formatted=e.external,r._fsPath=e._sep===d?e.fsPath:null,r}return e},t}(),d=n?1:void 0,v=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._formatted=null,e._fsPath=null,e}return h(e,t),Object.defineProperty(e.prototype,"fsPath",{get:function(){return this._fsPath||(this._fsPath=C(this,!1)),this._fsPath},enumerable:!1,configurable:!0}),e.prototype.toString=function(t){return void 0===t&&(t=!1),t?A(this,!0):(this._formatted||(this._formatted=A(this,!1)),this._formatted)},e.prototype.toJSON=function(){var t={$mid:1};return this._fsPath&&(t.fsPath=this._fsPath,t._sep=d),this._formatted&&(t.external=this._formatted),this.path&&(t.path=this.path),this.scheme&&(t.scheme=this.scheme),this.authority&&(t.authority=this.authority),this.query&&(t.query=this.query),this.fragment&&(t.fragment=this.fragment),t},e}(g),m=((a={})[58]="%3A",a[47]="%2F",a[63]="%3F",a[35]="%23",a[91]="%5B",a[93]="%5D",a[64]="%40",a[33]="%21",a[36]="%24",a[38]="%26",a[39]="%27",a[40]="%28",a[41]="%29",a[42]="%2A",a[43]="%2B",a[44]="%2C",a[59]="%3B",a[61]="%3D",a[32]="%20",a);function y(t,e){for(var r=void 0,n=-1,o=0;o<t.length;o++){var i=t.charCodeAt(o);if(i>=97&&i<=122||i>=65&&i<=90||i>=48&&i<=57||45===i||46===i||95===i||126===i||e&&47===i)-1!==n&&(r+=encodeURIComponent(t.substring(n,o)),n=-1),void 0!==r&&(r+=t.charAt(o));else{void 0===r&&(r=t.substr(0,o));var a=m[i];void 0!==a?(-1!==n&&(r+=encodeURIComponent(t.substring(n,o)),n=-1),r+=a):-1===n&&(n=o)}}return-1!==n&&(r+=encodeURIComponent(t.substring(n))),void 0!==r?r:t}function b(t){for(var e=void 0,r=0;r<t.length;r++){var n=t.charCodeAt(r);35===n||63===n?(void 0===e&&(e=t.substr(0,r)),e+=m[n]):void 0!==e&&(e+=t[r])}return void 0!==e?e:t}function C(t,e){var r;return r=t.authority&&t.path.length>1&&"file"===t.scheme?"//"+t.authority+t.path:47===t.path.charCodeAt(0)&&(t.path.charCodeAt(1)>=65&&t.path.charCodeAt(1)<=90||t.path.charCodeAt(1)>=97&&t.path.charCodeAt(1)<=122)&&58===t.path.charCodeAt(2)?e?t.path.substr(1):t.path[1].toLowerCase()+t.path.substr(2):t.path,n&&(r=r.replace(/\//g,"\\")),r}function A(t,e){var r=e?b:y,n="",o=t.scheme,i=t.authority,a=t.path,h=t.query,s=t.fragment;if(o&&(n+=o,n+=":"),(i||"file"===o)&&(n+=l,n+=l),i){var f=i.indexOf("@");if(-1!==f){var u=i.substr(0,f);i=i.substr(f+1),-1===(f=u.indexOf(":"))?n+=r(u,!1):(n+=r(u.substr(0,f),!1),n+=":",n+=r(u.substr(f+1),!1)),n+="@"}-1===(f=(i=i.toLowerCase()).indexOf(":"))?n+=r(i,!1):(n+=r(i.substr(0,f),!1),n+=i.substr(f))}if(a){if(a.length>=3&&47===a.charCodeAt(0)&&58===a.charCodeAt(2))(c=a.charCodeAt(1))>=65&&c<=90&&(a="/"+String.fromCharCode(c+32)+":"+a.substr(3));else if(a.length>=2&&58===a.charCodeAt(1)){var c;(c=a.charCodeAt(0))>=65&&c<=90&&(a=String.fromCharCode(c+32)+":"+a.substr(2))}n+=r(a,!0)}return h&&(n+="?",n+=r(h,!1)),s&&(n+="#",n+=e?s:y(s,!1)),n}function w(t){try{return decodeURIComponent(t)}catch(e){return t.length>3?t.substr(0,3)+w(t.substr(3)):t}}var _=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function x(t){return t.match(_)?t.replace(_,(function(t){return w(t)})):t}var O,P=r(470),j=function(){for(var t=0,e=0,r=arguments.length;e<r;e++)t+=arguments[e].length;var n=Array(t),o=0;for(e=0;e<r;e++)for(var i=arguments[e],a=0,h=i.length;a<h;a++,o++)n[o]=i[a];return n},U=P.posix||P;!function(t){t.joinPath=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];return t.with({path:U.join.apply(U,j([t.path],e))})},t.resolvePath=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=t.path||"/";return t.with({path:U.resolve.apply(U,j([n],e))})},t.dirname=function(t){var e=U.dirname(t.path);return 1===e.length&&46===e.charCodeAt(0)?t:t.with({path:e})},t.basename=function(t){return U.basename(t.path)},t.extname=function(t){return U.extname(t.path)}}(O||(O={}))}},e={};function r(n){if(e[n])return e[n].exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}return r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r(447)})();const{URI,Utils}=LIB;
19567 //# sourceMappingURL=index.js.map
19568
19569 /***/ }),
19570 /* 94 */
19571 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
19572
19573 __webpack_require__.r(__webpack_exports__);
19574 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
19575 /* harmony export */   "CSSHover": () => /* binding */ CSSHover
19576 /* harmony export */ });
19577 /* harmony import */ var _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74);
19578 /* harmony import */ var _languageFacts_facts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(80);
19579 /* harmony import */ var _selectorPrinting__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95);
19580 /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(75);
19581 /* harmony import */ var _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(88);
19582 /* harmony import */ var _utils_objects__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(84);
19583 /*---------------------------------------------------------------------------------------------
19584  *  Copyright (c) Microsoft Corporation. All rights reserved.
19585  *  Licensed under the MIT License. See License.txt in the project root for license information.
19586  *--------------------------------------------------------------------------------------------*/
19587
19588
19589
19590
19591
19592
19593
19594 var CSSHover = /** @class */ (function () {
19595     function CSSHover(clientCapabilities, cssDataManager) {
19596         this.clientCapabilities = clientCapabilities;
19597         this.cssDataManager = cssDataManager;
19598         this.selectorPrinting = new _selectorPrinting__WEBPACK_IMPORTED_MODULE_2__.SelectorPrinting(cssDataManager);
19599     }
19600     CSSHover.prototype.doHover = function (document, position, stylesheet, settings) {
19601         function getRange(node) {
19602             return _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.Range.create(document.positionAt(node.offset), document.positionAt(node.end));
19603         }
19604         var offset = document.offsetAt(position);
19605         var nodepath = _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.getNodePath(stylesheet, offset);
19606         /**
19607          * nodepath is top-down
19608          * Build up the hover by appending inner node's information
19609          */
19610         var hover = null;
19611         for (var i = 0; i < nodepath.length; i++) {
19612             var node = nodepath[i];
19613             if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Selector) {
19614                 hover = {
19615                     contents: this.selectorPrinting.selectorToMarkedString(node),
19616                     range: getRange(node)
19617                 };
19618                 break;
19619             }
19620             if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.SimpleSelector) {
19621                 /**
19622                  * Some sass specific at rules such as `@at-root` are parsed as `SimpleSelector`
19623                  */
19624                 if (!(0,_utils_strings__WEBPACK_IMPORTED_MODULE_3__.startsWith)(node.getText(), '@')) {
19625                     hover = {
19626                         contents: this.selectorPrinting.simpleSelectorToMarkedString(node),
19627                         range: getRange(node)
19628                     };
19629                 }
19630                 break;
19631             }
19632             if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Declaration) {
19633                 var propertyName = node.getFullPropertyName();
19634                 var entry = this.cssDataManager.getProperty(propertyName);
19635                 if (entry) {
19636                     var contents = _languageFacts_facts__WEBPACK_IMPORTED_MODULE_1__.getEntryDescription(entry, this.doesSupportMarkdown(), settings);
19637                     if (contents) {
19638                         hover = {
19639                             contents: contents,
19640                             range: getRange(node)
19641                         };
19642                     }
19643                     else {
19644                         hover = null;
19645                     }
19646                 }
19647                 continue;
19648             }
19649             if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.UnknownAtRule) {
19650                 var atRuleName = node.getText();
19651                 var entry = this.cssDataManager.getAtDirective(atRuleName);
19652                 if (entry) {
19653                     var contents = _languageFacts_facts__WEBPACK_IMPORTED_MODULE_1__.getEntryDescription(entry, this.doesSupportMarkdown(), settings);
19654                     if (contents) {
19655                         hover = {
19656                             contents: contents,
19657                             range: getRange(node)
19658                         };
19659                     }
19660                     else {
19661                         hover = null;
19662                     }
19663                 }
19664                 continue;
19665             }
19666             if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Node && node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.PseudoSelector) {
19667                 var selectorName = node.getText();
19668                 var entry = selectorName.slice(0, 2) === '::'
19669                     ? this.cssDataManager.getPseudoElement(selectorName)
19670                     : this.cssDataManager.getPseudoClass(selectorName);
19671                 if (entry) {
19672                     var contents = _languageFacts_facts__WEBPACK_IMPORTED_MODULE_1__.getEntryDescription(entry, this.doesSupportMarkdown(), settings);
19673                     if (contents) {
19674                         hover = {
19675                             contents: contents,
19676                             range: getRange(node)
19677                         };
19678                     }
19679                     else {
19680                         hover = null;
19681                     }
19682                 }
19683                 continue;
19684             }
19685         }
19686         if (hover) {
19687             hover.contents = this.convertContents(hover.contents);
19688         }
19689         return hover;
19690     };
19691     CSSHover.prototype.convertContents = function (contents) {
19692         if (!this.doesSupportMarkdown()) {
19693             if (typeof contents === 'string') {
19694                 return contents;
19695             }
19696             // MarkupContent
19697             else if ('kind' in contents) {
19698                 return {
19699                     kind: 'plaintext',
19700                     value: contents.value
19701                 };
19702             }
19703             // MarkedString[]
19704             else if (Array.isArray(contents)) {
19705                 return contents.map(function (c) {
19706                     return typeof c === 'string' ? c : c.value;
19707                 });
19708             }
19709             // MarkedString
19710             else {
19711                 return contents.value;
19712             }
19713         }
19714         return contents;
19715     };
19716     CSSHover.prototype.doesSupportMarkdown = function () {
19717         if (!(0,_utils_objects__WEBPACK_IMPORTED_MODULE_5__.isDefined)(this.supportsMarkdown)) {
19718             if (!(0,_utils_objects__WEBPACK_IMPORTED_MODULE_5__.isDefined)(this.clientCapabilities)) {
19719                 this.supportsMarkdown = true;
19720                 return this.supportsMarkdown;
19721             }
19722             var hover = this.clientCapabilities.textDocument && this.clientCapabilities.textDocument.hover;
19723             this.supportsMarkdown = hover && hover.contentFormat && Array.isArray(hover.contentFormat) && hover.contentFormat.indexOf(_cssLanguageTypes__WEBPACK_IMPORTED_MODULE_4__.MarkupKind.Markdown) !== -1;
19724         }
19725         return this.supportsMarkdown;
19726     };
19727     return CSSHover;
19728 }());
19729
19730
19731
19732 /***/ }),
19733 /* 95 */
19734 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
19735
19736 __webpack_require__.r(__webpack_exports__);
19737 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
19738 /* harmony export */   "Element": () => /* binding */ Element,
19739 /* harmony export */   "RootElement": () => /* binding */ RootElement,
19740 /* harmony export */   "LabelElement": () => /* binding */ LabelElement,
19741 /* harmony export */   "toElement": () => /* binding */ toElement,
19742 /* harmony export */   "SelectorPrinting": () => /* binding */ SelectorPrinting,
19743 /* harmony export */   "selectorToElement": () => /* binding */ selectorToElement
19744 /* harmony export */ });
19745 /* harmony import */ var _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74);
19746 /* harmony import */ var _parser_cssScanner__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73);
19747 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(77);
19748 /*---------------------------------------------------------------------------------------------
19749  *  Copyright (c) Microsoft Corporation. All rights reserved.
19750  *  Licensed under the MIT License. See License.txt in the project root for license information.
19751  *--------------------------------------------------------------------------------------------*/
19752
19753 var __extends = (undefined && undefined.__extends) || (function () {
19754     var extendStatics = function (d, b) {
19755         extendStatics = Object.setPrototypeOf ||
19756             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
19757             function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
19758         return extendStatics(d, b);
19759     };
19760     return function (d, b) {
19761         extendStatics(d, b);
19762         function __() { this.constructor = d; }
19763         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
19764     };
19765 })();
19766
19767
19768
19769 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_2__.loadMessageBundle();
19770 var Element = /** @class */ (function () {
19771     function Element() {
19772         this.parent = null;
19773         this.children = null;
19774         this.attributes = null;
19775     }
19776     Element.prototype.findAttribute = function (name) {
19777         if (this.attributes) {
19778             for (var _i = 0, _a = this.attributes; _i < _a.length; _i++) {
19779                 var attribute = _a[_i];
19780                 if (attribute.name === name) {
19781                     return attribute.value;
19782                 }
19783             }
19784         }
19785         return null;
19786     };
19787     Element.prototype.addChild = function (child) {
19788         if (child instanceof Element) {
19789             child.parent = this;
19790         }
19791         if (!this.children) {
19792             this.children = [];
19793         }
19794         this.children.push(child);
19795     };
19796     Element.prototype.append = function (text) {
19797         if (this.attributes) {
19798             var last = this.attributes[this.attributes.length - 1];
19799             last.value = last.value + text;
19800         }
19801     };
19802     Element.prototype.prepend = function (text) {
19803         if (this.attributes) {
19804             var first = this.attributes[0];
19805             first.value = text + first.value;
19806         }
19807     };
19808     Element.prototype.findRoot = function () {
19809         var curr = this;
19810         while (curr.parent && !(curr.parent instanceof RootElement)) {
19811             curr = curr.parent;
19812         }
19813         return curr;
19814     };
19815     Element.prototype.removeChild = function (child) {
19816         if (this.children) {
19817             var index = this.children.indexOf(child);
19818             if (index !== -1) {
19819                 this.children.splice(index, 1);
19820                 return true;
19821             }
19822         }
19823         return false;
19824     };
19825     Element.prototype.addAttr = function (name, value) {
19826         if (!this.attributes) {
19827             this.attributes = [];
19828         }
19829         for (var _i = 0, _a = this.attributes; _i < _a.length; _i++) {
19830             var attribute = _a[_i];
19831             if (attribute.name === name) {
19832                 attribute.value += ' ' + value;
19833                 return;
19834             }
19835         }
19836         this.attributes.push({ name: name, value: value });
19837     };
19838     Element.prototype.clone = function (cloneChildren) {
19839         if (cloneChildren === void 0) { cloneChildren = true; }
19840         var elem = new Element();
19841         if (this.attributes) {
19842             elem.attributes = [];
19843             for (var _i = 0, _a = this.attributes; _i < _a.length; _i++) {
19844                 var attribute = _a[_i];
19845                 elem.addAttr(attribute.name, attribute.value);
19846             }
19847         }
19848         if (cloneChildren && this.children) {
19849             elem.children = [];
19850             for (var index = 0; index < this.children.length; index++) {
19851                 elem.addChild(this.children[index].clone());
19852             }
19853         }
19854         return elem;
19855     };
19856     Element.prototype.cloneWithParent = function () {
19857         var clone = this.clone(false);
19858         if (this.parent && !(this.parent instanceof RootElement)) {
19859             var parentClone = this.parent.cloneWithParent();
19860             parentClone.addChild(clone);
19861         }
19862         return clone;
19863     };
19864     return Element;
19865 }());
19866
19867 var RootElement = /** @class */ (function (_super) {
19868     __extends(RootElement, _super);
19869     function RootElement() {
19870         return _super !== null && _super.apply(this, arguments) || this;
19871     }
19872     return RootElement;
19873 }(Element));
19874
19875 var LabelElement = /** @class */ (function (_super) {
19876     __extends(LabelElement, _super);
19877     function LabelElement(label) {
19878         var _this = _super.call(this) || this;
19879         _this.addAttr('name', label);
19880         return _this;
19881     }
19882     return LabelElement;
19883 }(Element));
19884
19885 var MarkedStringPrinter = /** @class */ (function () {
19886     function MarkedStringPrinter(quote) {
19887         this.quote = quote;
19888         this.result = [];
19889         // empty
19890     }
19891     MarkedStringPrinter.prototype.print = function (element) {
19892         this.result = [];
19893         if (element instanceof RootElement) {
19894             if (element.children) {
19895                 this.doPrint(element.children, 0);
19896             }
19897         }
19898         else {
19899             this.doPrint([element], 0);
19900         }
19901         var value = this.result.join('\n');
19902         return [{ language: 'html', value: value }];
19903     };
19904     MarkedStringPrinter.prototype.doPrint = function (elements, indent) {
19905         for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
19906             var element = elements_1[_i];
19907             this.doPrintElement(element, indent);
19908             if (element.children) {
19909                 this.doPrint(element.children, indent + 1);
19910             }
19911         }
19912     };
19913     MarkedStringPrinter.prototype.writeLine = function (level, content) {
19914         var indent = new Array(level + 1).join('  ');
19915         this.result.push(indent + content);
19916     };
19917     MarkedStringPrinter.prototype.doPrintElement = function (element, indent) {
19918         var name = element.findAttribute('name');
19919         // special case: a simple label
19920         if (element instanceof LabelElement || name === '\u2026') {
19921             this.writeLine(indent, name);
19922             return;
19923         }
19924         // the real deal
19925         var content = ['<'];
19926         // element name
19927         if (name) {
19928             content.push(name);
19929         }
19930         else {
19931             content.push('element');
19932         }
19933         // attributes
19934         if (element.attributes) {
19935             for (var _i = 0, _a = element.attributes; _i < _a.length; _i++) {
19936                 var attr = _a[_i];
19937                 if (attr.name !== 'name') {
19938                     content.push(' ');
19939                     content.push(attr.name);
19940                     var value = attr.value;
19941                     if (value) {
19942                         content.push('=');
19943                         content.push(quotes.ensure(value, this.quote));
19944                     }
19945                 }
19946             }
19947         }
19948         content.push('>');
19949         this.writeLine(indent, content.join(''));
19950     };
19951     return MarkedStringPrinter;
19952 }());
19953 var quotes;
19954 (function (quotes) {
19955     function ensure(value, which) {
19956         return which + remove(value) + which;
19957     }
19958     quotes.ensure = ensure;
19959     function remove(value) {
19960         var match = value.match(/^['"](.*)["']$/);
19961         if (match) {
19962             return match[1];
19963         }
19964         return value;
19965     }
19966     quotes.remove = remove;
19967 })(quotes || (quotes = {}));
19968 var Specificity = /** @class */ (function () {
19969     function Specificity() {
19970         /** Count of identifiers (e.g., `#app`) */
19971         this.id = 0;
19972         /** Count of attributes (`[type="number"]`), classes (`.container-fluid`), and pseudo-classes (`:hover`) */
19973         this.attr = 0;
19974         /** Count of tag names (`div`), and pseudo-elements (`::before`) */
19975         this.tag = 0;
19976     }
19977     return Specificity;
19978 }());
19979 function toElement(node, parentElement) {
19980     var result = new Element();
19981     for (var _i = 0, _a = node.getChildren(); _i < _a.length; _i++) {
19982         var child = _a[_i];
19983         switch (child.type) {
19984             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.SelectorCombinator:
19985                 if (parentElement) {
19986                     var segments = child.getText().split('&');
19987                     if (segments.length === 1) {
19988                         // should not happen
19989                         result.addAttr('name', segments[0]);
19990                         break;
19991                     }
19992                     result = parentElement.cloneWithParent();
19993                     if (segments[0]) {
19994                         var root = result.findRoot();
19995                         root.prepend(segments[0]);
19996                     }
19997                     for (var i = 1; i < segments.length; i++) {
19998                         if (i > 1) {
19999                             var clone = parentElement.cloneWithParent();
20000                             result.addChild(clone.findRoot());
20001                             result = clone;
20002                         }
20003                         result.append(segments[i]);
20004                     }
20005                 }
20006                 break;
20007             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.SelectorPlaceholder:
20008                 if (child.matches('@at-root')) {
20009                     return result;
20010                 }
20011             // fall through
20012             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.ElementNameSelector:
20013                 var text = child.getText();
20014                 result.addAttr('name', text === '*' ? 'element' : unescape(text));
20015                 break;
20016             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.ClassSelector:
20017                 result.addAttr('class', unescape(child.getText().substring(1)));
20018                 break;
20019             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.IdentifierSelector:
20020                 result.addAttr('id', unescape(child.getText().substring(1)));
20021                 break;
20022             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.MixinDeclaration:
20023                 result.addAttr('class', child.getName());
20024                 break;
20025             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.PseudoSelector:
20026                 result.addAttr(unescape(child.getText()), '');
20027                 break;
20028             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.AttributeSelector:
20029                 var selector = child;
20030                 var identifier = selector.getIdentifier();
20031                 if (identifier) {
20032                     var expression = selector.getValue();
20033                     var operator = selector.getOperator();
20034                     var value = void 0;
20035                     if (expression && operator) {
20036                         switch (unescape(operator.getText())) {
20037                             case '|=':
20038                                 // excatly or followed by -words
20039                                 value = quotes.remove(unescape(expression.getText())) + "-\u2026";
20040                                 break;
20041                             case '^=':
20042                                 // prefix
20043                                 value = quotes.remove(unescape(expression.getText())) + "\u2026";
20044                                 break;
20045                             case '$=':
20046                                 // suffix
20047                                 value = "\u2026" + quotes.remove(unescape(expression.getText()));
20048                                 break;
20049                             case '~=':
20050                                 // one of a list of words
20051                                 value = " \u2026 " + quotes.remove(unescape(expression.getText())) + " \u2026 ";
20052                                 break;
20053                             case '*=':
20054                                 // substring
20055                                 value = "\u2026" + quotes.remove(unescape(expression.getText())) + "\u2026";
20056                                 break;
20057                             default:
20058                                 value = quotes.remove(unescape(expression.getText()));
20059                                 break;
20060                         }
20061                     }
20062                     result.addAttr(unescape(identifier.getText()), value);
20063                 }
20064                 break;
20065         }
20066     }
20067     return result;
20068 }
20069 function unescape(content) {
20070     var scanner = new _parser_cssScanner__WEBPACK_IMPORTED_MODULE_1__.Scanner();
20071     scanner.setSource(content);
20072     var token = scanner.scanUnquotedString();
20073     if (token) {
20074         return token.text;
20075     }
20076     return content;
20077 }
20078 var SelectorPrinting = /** @class */ (function () {
20079     function SelectorPrinting(cssDataManager) {
20080         this.cssDataManager = cssDataManager;
20081     }
20082     SelectorPrinting.prototype.selectorToMarkedString = function (node) {
20083         var root = selectorToElement(node);
20084         if (root) {
20085             var markedStrings = new MarkedStringPrinter('"').print(root);
20086             markedStrings.push(this.selectorToSpecificityMarkedString(node));
20087             return markedStrings;
20088         }
20089         else {
20090             return [];
20091         }
20092     };
20093     SelectorPrinting.prototype.simpleSelectorToMarkedString = function (node) {
20094         var element = toElement(node);
20095         var markedStrings = new MarkedStringPrinter('"').print(element);
20096         markedStrings.push(this.selectorToSpecificityMarkedString(node));
20097         return markedStrings;
20098     };
20099     SelectorPrinting.prototype.isPseudoElementIdentifier = function (text) {
20100         var match = text.match(/^::?([\w-]+)/);
20101         if (!match) {
20102             return false;
20103         }
20104         return !!this.cssDataManager.getPseudoElement("::" + match[1]);
20105     };
20106     SelectorPrinting.prototype.selectorToSpecificityMarkedString = function (node) {
20107         var _this = this;
20108         //https://www.w3.org/TR/selectors-3/#specificity
20109         var calculateScore = function (node) {
20110             for (var _i = 0, _a = node.getChildren(); _i < _a.length; _i++) {
20111                 var element = _a[_i];
20112                 switch (element.type) {
20113                     case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.IdentifierSelector:
20114                         specificity.id++;
20115                         break;
20116                     case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.ClassSelector:
20117                     case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.AttributeSelector:
20118                         specificity.attr++;
20119                         break;
20120                     case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.ElementNameSelector:
20121                         //ignore universal selector
20122                         if (element.matches("*")) {
20123                             break;
20124                         }
20125                         specificity.tag++;
20126                         break;
20127                     case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.PseudoSelector:
20128                         var text = element.getText();
20129                         if (_this.isPseudoElementIdentifier(text)) {
20130                             specificity.tag++; // pseudo element
20131                         }
20132                         else {
20133                             //ignore psuedo class NOT
20134                             if (text.match(/^:not/i)) {
20135                                 break;
20136                             }
20137                             specificity.attr++; //pseudo class
20138                         }
20139                         break;
20140                 }
20141                 if (element.getChildren().length > 0) {
20142                     calculateScore(element);
20143                 }
20144             }
20145         };
20146         var specificity = new Specificity();
20147         calculateScore(node);
20148         return localize('specificity', "[Selector Specificity](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity): ({0}, {1}, {2})", specificity.id, specificity.attr, specificity.tag);
20149     };
20150     return SelectorPrinting;
20151 }());
20152
20153 var SelectorElementBuilder = /** @class */ (function () {
20154     function SelectorElementBuilder(element) {
20155         this.prev = null;
20156         this.element = element;
20157     }
20158     SelectorElementBuilder.prototype.processSelector = function (selector) {
20159         var parentElement = null;
20160         if (!(this.element instanceof RootElement)) {
20161             if (selector.getChildren().some(function (c) { return c.hasChildren() && c.getChild(0).type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.SelectorCombinator; })) {
20162                 var curr = this.element.findRoot();
20163                 if (curr.parent instanceof RootElement) {
20164                     parentElement = this.element;
20165                     this.element = curr.parent;
20166                     this.element.removeChild(curr);
20167                     this.prev = null;
20168                 }
20169             }
20170         }
20171         for (var _i = 0, _a = selector.getChildren(); _i < _a.length; _i++) {
20172             var selectorChild = _a[_i];
20173             if (selectorChild instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.SimpleSelector) {
20174                 if (this.prev instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.SimpleSelector) {
20175                     var labelElement = new LabelElement('\u2026');
20176                     this.element.addChild(labelElement);
20177                     this.element = labelElement;
20178                 }
20179                 else if (this.prev && (this.prev.matches('+') || this.prev.matches('~')) && this.element.parent) {
20180                     this.element = this.element.parent;
20181                 }
20182                 if (this.prev && this.prev.matches('~')) {
20183                     this.element.addChild(new LabelElement('\u22EE'));
20184                 }
20185                 var thisElement = toElement(selectorChild, parentElement);
20186                 var root = thisElement.findRoot();
20187                 this.element.addChild(root);
20188                 this.element = thisElement;
20189             }
20190             if (selectorChild instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.SimpleSelector ||
20191                 selectorChild.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.SelectorCombinatorParent ||
20192                 selectorChild.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.SelectorCombinatorShadowPiercingDescendant ||
20193                 selectorChild.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.SelectorCombinatorSibling ||
20194                 selectorChild.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.SelectorCombinatorAllSiblings) {
20195                 this.prev = selectorChild;
20196             }
20197         }
20198     };
20199     return SelectorElementBuilder;
20200 }());
20201 function isNewSelectorContext(node) {
20202     switch (node.type) {
20203         case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.MixinDeclaration:
20204         case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.NodeType.Stylesheet:
20205             return true;
20206     }
20207     return false;
20208 }
20209 function selectorToElement(node) {
20210     if (node.matches('@at-root')) {
20211         return null;
20212     }
20213     var root = new RootElement();
20214     var parentRuleSets = [];
20215     var ruleSet = node.getParent();
20216     if (ruleSet instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.RuleSet) {
20217         var parent = ruleSet.getParent(); // parent of the selector's ruleset
20218         while (parent && !isNewSelectorContext(parent)) {
20219             if (parent instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.RuleSet) {
20220                 if (parent.getSelectors().matches('@at-root')) {
20221                     break;
20222                 }
20223                 parentRuleSets.push(parent);
20224             }
20225             parent = parent.getParent();
20226         }
20227     }
20228     var builder = new SelectorElementBuilder(root);
20229     for (var i = parentRuleSets.length - 1; i >= 0; i--) {
20230         var selector = parentRuleSets[i].getSelectors().getChild(0);
20231         if (selector) {
20232             builder.processSelector(selector);
20233         }
20234     }
20235     builder.processSelector(node);
20236     return root;
20237 }
20238
20239
20240 /***/ }),
20241 /* 96 */
20242 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
20243
20244 __webpack_require__.r(__webpack_exports__);
20245 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
20246 /* harmony export */   "CSSNavigation": () => /* binding */ CSSNavigation
20247 /* harmony export */ });
20248 /* harmony import */ var _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(88);
20249 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(77);
20250 /* harmony import */ var _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74);
20251 /* harmony import */ var _parser_cssSymbolScope__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(86);
20252 /* harmony import */ var _languageFacts_facts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(80);
20253 /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(75);
20254 /* harmony import */ var _utils_resources__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(92);
20255 /*---------------------------------------------------------------------------------------------
20256  *  Copyright (c) Microsoft Corporation. All rights reserved.
20257  *  Licensed under the MIT License. See License.txt in the project root for license information.
20258  *--------------------------------------------------------------------------------------------*/
20259
20260 var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
20261     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20262     return new (P || (P = Promise))(function (resolve, reject) {
20263         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20264         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
20265         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20266         step((generator = generator.apply(thisArg, _arguments || [])).next());
20267     });
20268 };
20269 var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
20270     var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
20271     return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
20272     function verb(n) { return function (v) { return step([n, v]); }; }
20273     function step(op) {
20274         if (f) throw new TypeError("Generator is already executing.");
20275         while (_) try {
20276             if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
20277             if (y = 0, t) op = [op[0] & 2, t.value];
20278             switch (op[0]) {
20279                 case 0: case 1: t = op; break;
20280                 case 4: _.label++; return { value: op[1], done: false };
20281                 case 5: _.label++; y = op[1]; op = [0]; continue;
20282                 case 7: op = _.ops.pop(); _.trys.pop(); continue;
20283                 default:
20284                     if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
20285                     if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
20286                     if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
20287                     if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
20288                     if (t[2]) _.ops.pop();
20289                     _.trys.pop(); continue;
20290             }
20291             op = body.call(thisArg, _);
20292         } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
20293         if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
20294     }
20295 };
20296
20297
20298
20299
20300
20301
20302
20303 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_1__.loadMessageBundle();
20304 var CSSNavigation = /** @class */ (function () {
20305     function CSSNavigation(fileSystemProvider) {
20306         this.fileSystemProvider = fileSystemProvider;
20307     }
20308     CSSNavigation.prototype.findDefinition = function (document, position, stylesheet) {
20309         var symbols = new _parser_cssSymbolScope__WEBPACK_IMPORTED_MODULE_3__.Symbols(stylesheet);
20310         var offset = document.offsetAt(position);
20311         var node = _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.getNodeAtOffset(stylesheet, offset);
20312         if (!node) {
20313             return null;
20314         }
20315         var symbol = symbols.findSymbolFromNode(node);
20316         if (!symbol) {
20317             return null;
20318         }
20319         return {
20320             uri: document.uri,
20321             range: getRange(symbol.node, document)
20322         };
20323     };
20324     CSSNavigation.prototype.findReferences = function (document, position, stylesheet) {
20325         var highlights = this.findDocumentHighlights(document, position, stylesheet);
20326         return highlights.map(function (h) {
20327             return {
20328                 uri: document.uri,
20329                 range: h.range
20330             };
20331         });
20332     };
20333     CSSNavigation.prototype.findDocumentHighlights = function (document, position, stylesheet) {
20334         var result = [];
20335         var offset = document.offsetAt(position);
20336         var node = _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.getNodeAtOffset(stylesheet, offset);
20337         if (!node || node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Stylesheet || node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Declarations) {
20338             return result;
20339         }
20340         if (node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Identifier && node.parent && node.parent.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.ClassSelector) {
20341             node = node.parent;
20342         }
20343         var symbols = new _parser_cssSymbolScope__WEBPACK_IMPORTED_MODULE_3__.Symbols(stylesheet);
20344         var symbol = symbols.findSymbolFromNode(node);
20345         var name = node.getText();
20346         stylesheet.accept(function (candidate) {
20347             if (symbol) {
20348                 if (symbols.matchesSymbol(candidate, symbol)) {
20349                     result.push({
20350                         kind: getHighlightKind(candidate),
20351                         range: getRange(candidate, document)
20352                     });
20353                     return false;
20354                 }
20355             }
20356             else if (node && node.type === candidate.type && candidate.matches(name)) {
20357                 // Same node type and data
20358                 result.push({
20359                     kind: getHighlightKind(candidate),
20360                     range: getRange(candidate, document)
20361                 });
20362             }
20363             return true;
20364         });
20365         return result;
20366     };
20367     CSSNavigation.prototype.isRawStringDocumentLinkNode = function (node) {
20368         return node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Import;
20369     };
20370     CSSNavigation.prototype.findDocumentLinks = function (document, stylesheet, documentContext) {
20371         var links = this.findUnresolvedLinks(document, stylesheet);
20372         for (var i = 0; i < links.length; i++) {
20373             var target = links[i].target;
20374             if (target && !(/^\w+:\/\//g.test(target))) {
20375                 var resolved = documentContext.resolveReference(target, document.uri);
20376                 if (resolved) {
20377                     links[i].target = resolved;
20378                 }
20379             }
20380         }
20381         return links;
20382     };
20383     CSSNavigation.prototype.findDocumentLinks2 = function (document, stylesheet, documentContext) {
20384         return __awaiter(this, void 0, void 0, function () {
20385             var links, resolvedLinks, _i, links_1, link, target, resolvedTarget;
20386             return __generator(this, function (_a) {
20387                 switch (_a.label) {
20388                     case 0:
20389                         links = this.findUnresolvedLinks(document, stylesheet);
20390                         resolvedLinks = [];
20391                         _i = 0, links_1 = links;
20392                         _a.label = 1;
20393                     case 1:
20394                         if (!(_i < links_1.length)) return [3 /*break*/, 5];
20395                         link = links_1[_i];
20396                         target = link.target;
20397                         if (!(target && !(/^\w+:\/\//g.test(target)))) return [3 /*break*/, 3];
20398                         return [4 /*yield*/, this.resolveRelativeReference(target, document.uri, documentContext)];
20399                     case 2:
20400                         resolvedTarget = _a.sent();
20401                         if (resolvedTarget !== undefined) {
20402                             link.target = resolvedTarget;
20403                             resolvedLinks.push(link);
20404                         }
20405                         return [3 /*break*/, 4];
20406                     case 3:
20407                         resolvedLinks.push(link);
20408                         _a.label = 4;
20409                     case 4:
20410                         _i++;
20411                         return [3 /*break*/, 1];
20412                     case 5: return [2 /*return*/, resolvedLinks];
20413                 }
20414             });
20415         });
20416     };
20417     CSSNavigation.prototype.findUnresolvedLinks = function (document, stylesheet) {
20418         var _this = this;
20419         var result = [];
20420         var collect = function (uriStringNode) {
20421             var rawUri = uriStringNode.getText();
20422             var range = getRange(uriStringNode, document);
20423             // Make sure the range is not empty
20424             if (range.start.line === range.end.line && range.start.character === range.end.character) {
20425                 return;
20426             }
20427             if ((0,_utils_strings__WEBPACK_IMPORTED_MODULE_5__.startsWith)(rawUri, "'") || (0,_utils_strings__WEBPACK_IMPORTED_MODULE_5__.startsWith)(rawUri, "\"")) {
20428                 rawUri = rawUri.slice(1, -1);
20429             }
20430             result.push({ target: rawUri, range: range });
20431         };
20432         stylesheet.accept(function (candidate) {
20433             if (candidate.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.URILiteral) {
20434                 var first = candidate.getChild(0);
20435                 if (first) {
20436                     collect(first);
20437                 }
20438                 return false;
20439             }
20440             /**
20441              * In @import, it is possible to include links that do not use `url()`
20442              * For example, `@import 'foo.css';`
20443              */
20444             if (candidate.parent && _this.isRawStringDocumentLinkNode(candidate.parent)) {
20445                 var rawText = candidate.getText();
20446                 if ((0,_utils_strings__WEBPACK_IMPORTED_MODULE_5__.startsWith)(rawText, "'") || (0,_utils_strings__WEBPACK_IMPORTED_MODULE_5__.startsWith)(rawText, "\"")) {
20447                     collect(candidate);
20448                 }
20449                 return false;
20450             }
20451             return true;
20452         });
20453         return result;
20454     };
20455     CSSNavigation.prototype.findDocumentSymbols = function (document, stylesheet) {
20456         var result = [];
20457         stylesheet.accept(function (node) {
20458             var entry = {
20459                 name: null,
20460                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.SymbolKind.Class,
20461                 location: null
20462             };
20463             var locationNode = node;
20464             if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.Selector) {
20465                 entry.name = node.getText();
20466                 locationNode = node.findAParent(_parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Ruleset, _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.ExtendsReference);
20467                 if (locationNode) {
20468                     entry.location = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Location.create(document.uri, getRange(locationNode, document));
20469                     result.push(entry);
20470                 }
20471                 return false;
20472             }
20473             else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.VariableDeclaration) {
20474                 entry.name = node.getName();
20475                 entry.kind = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.SymbolKind.Variable;
20476             }
20477             else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.MixinDeclaration) {
20478                 entry.name = node.getName();
20479                 entry.kind = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.SymbolKind.Method;
20480             }
20481             else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.FunctionDeclaration) {
20482                 entry.name = node.getName();
20483                 entry.kind = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.SymbolKind.Function;
20484             }
20485             else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.Keyframe) {
20486                 entry.name = localize('literal.keyframes', "@keyframes {0}", node.getName());
20487             }
20488             else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.FontFace) {
20489                 entry.name = localize('literal.fontface', "@font-face");
20490             }
20491             else if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.Media) {
20492                 var mediaList = node.getChild(0);
20493                 if (mediaList instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.Medialist) {
20494                     entry.name = '@media ' + mediaList.getText();
20495                     entry.kind = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.SymbolKind.Module;
20496                 }
20497             }
20498             if (entry.name) {
20499                 entry.location = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Location.create(document.uri, getRange(locationNode, document));
20500                 result.push(entry);
20501             }
20502             return true;
20503         });
20504         return result;
20505     };
20506     CSSNavigation.prototype.findDocumentColors = function (document, stylesheet) {
20507         var result = [];
20508         stylesheet.accept(function (node) {
20509             var colorInfo = getColorInformation(node, document);
20510             if (colorInfo) {
20511                 result.push(colorInfo);
20512             }
20513             return true;
20514         });
20515         return result;
20516     };
20517     CSSNavigation.prototype.getColorPresentations = function (document, stylesheet, color, range) {
20518         var result = [];
20519         var red256 = Math.round(color.red * 255), green256 = Math.round(color.green * 255), blue256 = Math.round(color.blue * 255);
20520         var label;
20521         if (color.alpha === 1) {
20522             label = "rgb(" + red256 + ", " + green256 + ", " + blue256 + ")";
20523         }
20524         else {
20525             label = "rgba(" + red256 + ", " + green256 + ", " + blue256 + ", " + color.alpha + ")";
20526         }
20527         result.push({ label: label, textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TextEdit.replace(range, label) });
20528         if (color.alpha === 1) {
20529             label = "#" + toTwoDigitHex(red256) + toTwoDigitHex(green256) + toTwoDigitHex(blue256);
20530         }
20531         else {
20532             label = "#" + toTwoDigitHex(red256) + toTwoDigitHex(green256) + toTwoDigitHex(blue256) + toTwoDigitHex(Math.round(color.alpha * 255));
20533         }
20534         result.push({ label: label, textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TextEdit.replace(range, label) });
20535         var hsl = (0,_languageFacts_facts__WEBPACK_IMPORTED_MODULE_4__.hslFromColor)(color);
20536         if (hsl.a === 1) {
20537             label = "hsl(" + hsl.h + ", " + Math.round(hsl.s * 100) + "%, " + Math.round(hsl.l * 100) + "%)";
20538         }
20539         else {
20540             label = "hsla(" + hsl.h + ", " + Math.round(hsl.s * 100) + "%, " + Math.round(hsl.l * 100) + "%, " + hsl.a + ")";
20541         }
20542         result.push({ label: label, textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TextEdit.replace(range, label) });
20543         return result;
20544     };
20545     CSSNavigation.prototype.doRename = function (document, position, newName, stylesheet) {
20546         var _a;
20547         var highlights = this.findDocumentHighlights(document, position, stylesheet);
20548         var edits = highlights.map(function (h) { return _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TextEdit.replace(h.range, newName); });
20549         return {
20550             changes: (_a = {}, _a[document.uri] = edits, _a)
20551         };
20552     };
20553     CSSNavigation.prototype.resolveRelativeReference = function (ref, documentUri, documentContext) {
20554         return __awaiter(this, void 0, void 0, function () {
20555             var moduleName, rootFolderUri, documentFolderUri, modulePath, pathWithinModule;
20556             return __generator(this, function (_a) {
20557                 switch (_a.label) {
20558                     case 0:
20559                         if (!(ref[0] === '~' && ref[1] !== '/' && this.fileSystemProvider)) return [3 /*break*/, 3];
20560                         ref = ref.substring(1);
20561                         if (!(0,_utils_strings__WEBPACK_IMPORTED_MODULE_5__.startsWith)(documentUri, 'file://')) return [3 /*break*/, 2];
20562                         moduleName = getModuleNameFromPath(ref);
20563                         rootFolderUri = documentContext.resolveReference('/', documentUri);
20564                         documentFolderUri = (0,_utils_resources__WEBPACK_IMPORTED_MODULE_6__.dirname)(documentUri);
20565                         return [4 /*yield*/, this.resolvePathToModule(moduleName, documentFolderUri, rootFolderUri)];
20566                     case 1:
20567                         modulePath = _a.sent();
20568                         if (modulePath) {
20569                             pathWithinModule = ref.substring(moduleName.length + 1);
20570                             return [2 /*return*/, (0,_utils_resources__WEBPACK_IMPORTED_MODULE_6__.joinPath)(modulePath, pathWithinModule)];
20571                         }
20572                         _a.label = 2;
20573                     case 2: return [2 /*return*/, documentContext.resolveReference(ref, documentUri)];
20574                     case 3: return [2 /*return*/, documentContext.resolveReference(ref, documentUri)];
20575                 }
20576             });
20577         });
20578     };
20579     CSSNavigation.prototype.resolvePathToModule = function (_moduleName, documentFolderUri, rootFolderUri) {
20580         return __awaiter(this, void 0, void 0, function () {
20581             var packPath;
20582             return __generator(this, function (_a) {
20583                 switch (_a.label) {
20584                     case 0:
20585                         packPath = (0,_utils_resources__WEBPACK_IMPORTED_MODULE_6__.joinPath)(documentFolderUri, 'node_modules', _moduleName, 'package.json');
20586                         return [4 /*yield*/, this.fileExists(packPath)];
20587                     case 1:
20588                         if (_a.sent()) {
20589                             return [2 /*return*/, (0,_utils_resources__WEBPACK_IMPORTED_MODULE_6__.dirname)(packPath)];
20590                         }
20591                         else if (rootFolderUri && documentFolderUri.startsWith(rootFolderUri) && (documentFolderUri.length !== rootFolderUri.length)) {
20592                             return [2 /*return*/, this.resolvePathToModule(_moduleName, (0,_utils_resources__WEBPACK_IMPORTED_MODULE_6__.dirname)(documentFolderUri), rootFolderUri)];
20593                         }
20594                         return [2 /*return*/, undefined];
20595                 }
20596             });
20597         });
20598     };
20599     CSSNavigation.prototype.fileExists = function (uri) {
20600         return __awaiter(this, void 0, void 0, function () {
20601             var stat, err_1;
20602             return __generator(this, function (_a) {
20603                 switch (_a.label) {
20604                     case 0:
20605                         if (!this.fileSystemProvider) {
20606                             return [2 /*return*/, false];
20607                         }
20608                         _a.label = 1;
20609                     case 1:
20610                         _a.trys.push([1, 3, , 4]);
20611                         return [4 /*yield*/, this.fileSystemProvider.stat(uri)];
20612                     case 2:
20613                         stat = _a.sent();
20614                         if (stat.type === _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.FileType.Unknown && stat.size === -1) {
20615                             return [2 /*return*/, false];
20616                         }
20617                         return [2 /*return*/, true];
20618                     case 3:
20619                         err_1 = _a.sent();
20620                         return [2 /*return*/, false];
20621                     case 4: return [2 /*return*/];
20622                 }
20623             });
20624         });
20625     };
20626     return CSSNavigation;
20627 }());
20628
20629 function getColorInformation(node, document) {
20630     var color = (0,_languageFacts_facts__WEBPACK_IMPORTED_MODULE_4__.getColorValue)(node);
20631     if (color) {
20632         var range = getRange(node, document);
20633         return { color: color, range: range };
20634     }
20635     return null;
20636 }
20637 function getRange(node, document) {
20638     return _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Range.create(document.positionAt(node.offset), document.positionAt(node.end));
20639 }
20640 function getHighlightKind(node) {
20641     if (node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Selector) {
20642         return _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.DocumentHighlightKind.Write;
20643     }
20644     if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.Identifier) {
20645         if (node.parent && node.parent instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.Property) {
20646             if (node.isCustomProperty) {
20647                 return _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.DocumentHighlightKind.Write;
20648             }
20649         }
20650     }
20651     if (node.parent) {
20652         switch (node.parent.type) {
20653             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.FunctionDeclaration:
20654             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.MixinDeclaration:
20655             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Keyframe:
20656             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.VariableDeclaration:
20657             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.FunctionParameter:
20658                 return _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.DocumentHighlightKind.Write;
20659         }
20660     }
20661     return _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.DocumentHighlightKind.Read;
20662 }
20663 function toTwoDigitHex(n) {
20664     var r = n.toString(16);
20665     return r.length !== 2 ? '0' + r : r;
20666 }
20667 function getModuleNameFromPath(path) {
20668     // If a scoped module (starts with @) then get up until second instance of '/', otherwise get until first instance of '/'
20669     if (path[0] === '@') {
20670         return path.substring(0, path.indexOf('/', path.indexOf('/') + 1));
20671     }
20672     return path.substring(0, path.indexOf('/'));
20673 }
20674
20675
20676 /***/ }),
20677 /* 97 */
20678 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
20679
20680 __webpack_require__.r(__webpack_exports__);
20681 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
20682 /* harmony export */   "CSSCodeActions": () => /* binding */ CSSCodeActions
20683 /* harmony export */ });
20684 /* harmony import */ var _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74);
20685 /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(75);
20686 /* harmony import */ var _services_lintRules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(98);
20687 /* harmony import */ var _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(88);
20688 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(77);
20689 /*---------------------------------------------------------------------------------------------
20690  *  Copyright (c) Microsoft Corporation. All rights reserved.
20691  *  Licensed under the MIT License. See License.txt in the project root for license information.
20692  *--------------------------------------------------------------------------------------------*/
20693
20694
20695
20696
20697
20698
20699 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_4__.loadMessageBundle();
20700 var CSSCodeActions = /** @class */ (function () {
20701     function CSSCodeActions(cssDataManager) {
20702         this.cssDataManager = cssDataManager;
20703     }
20704     CSSCodeActions.prototype.doCodeActions = function (document, range, context, stylesheet) {
20705         return this.doCodeActions2(document, range, context, stylesheet).map(function (ca) {
20706             var textDocumentEdit = ca.edit && ca.edit.documentChanges && ca.edit.documentChanges[0];
20707             return _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.Command.create(ca.title, '_css.applyCodeAction', document.uri, document.version, textDocumentEdit && textDocumentEdit.edits);
20708         });
20709     };
20710     CSSCodeActions.prototype.doCodeActions2 = function (document, range, context, stylesheet) {
20711         var result = [];
20712         if (context.diagnostics) {
20713             for (var _i = 0, _a = context.diagnostics; _i < _a.length; _i++) {
20714                 var diagnostic = _a[_i];
20715                 this.appendFixesForMarker(document, stylesheet, diagnostic, result);
20716             }
20717         }
20718         return result;
20719     };
20720     CSSCodeActions.prototype.getFixesForUnknownProperty = function (document, property, marker, result) {
20721         var propertyName = property.getName();
20722         var candidates = [];
20723         this.cssDataManager.getProperties().forEach(function (p) {
20724             var score = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_1__.difference)(propertyName, p.name);
20725             if (score >= propertyName.length / 2 /*score_lim*/) {
20726                 candidates.push({ property: p.name, score: score });
20727             }
20728         });
20729         // Sort in descending order.
20730         candidates.sort(function (a, b) {
20731             return b.score - a.score || a.property.localeCompare(b.property);
20732         });
20733         var maxActions = 3;
20734         for (var _i = 0, candidates_1 = candidates; _i < candidates_1.length; _i++) {
20735             var candidate = candidates_1[_i];
20736             var propertyName_1 = candidate.property;
20737             var title = localize('css.codeaction.rename', "Rename to '{0}'", propertyName_1);
20738             var edit = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.TextEdit.replace(marker.range, propertyName_1);
20739             var documentIdentifier = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.VersionedTextDocumentIdentifier.create(document.uri, document.version);
20740             var workspaceEdit = { documentChanges: [_cssLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.TextDocumentEdit.create(documentIdentifier, [edit])] };
20741             var codeAction = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.CodeAction.create(title, workspaceEdit, _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.CodeActionKind.QuickFix);
20742             codeAction.diagnostics = [marker];
20743             result.push(codeAction);
20744             if (--maxActions <= 0) {
20745                 return;
20746             }
20747         }
20748     };
20749     CSSCodeActions.prototype.appendFixesForMarker = function (document, stylesheet, marker, result) {
20750         if (marker.code !== _services_lintRules__WEBPACK_IMPORTED_MODULE_2__.Rules.UnknownProperty.id) {
20751             return;
20752         }
20753         var offset = document.offsetAt(marker.range.start);
20754         var end = document.offsetAt(marker.range.end);
20755         var nodepath = _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.getNodePath(stylesheet, offset);
20756         for (var i = nodepath.length - 1; i >= 0; i--) {
20757             var node = nodepath[i];
20758             if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Declaration) {
20759                 var property = node.getProperty();
20760                 if (property && property.offset === offset && property.end === end) {
20761                     this.getFixesForUnknownProperty(document, property, marker, result);
20762                     return;
20763                 }
20764             }
20765         }
20766     };
20767     return CSSCodeActions;
20768 }());
20769
20770
20771
20772 /***/ }),
20773 /* 98 */
20774 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
20775
20776 __webpack_require__.r(__webpack_exports__);
20777 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
20778 /* harmony export */   "Rule": () => /* binding */ Rule,
20779 /* harmony export */   "Setting": () => /* binding */ Setting,
20780 /* harmony export */   "Rules": () => /* binding */ Rules,
20781 /* harmony export */   "Settings": () => /* binding */ Settings,
20782 /* harmony export */   "LintConfigurationSettings": () => /* binding */ LintConfigurationSettings
20783 /* harmony export */ });
20784 /* harmony import */ var _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74);
20785 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(77);
20786 /*---------------------------------------------------------------------------------------------
20787  *  Copyright (c) Microsoft Corporation. All rights reserved.
20788  *  Licensed under the MIT License. See License.txt in the project root for license information.
20789  *--------------------------------------------------------------------------------------------*/
20790
20791
20792
20793 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_1__.loadMessageBundle();
20794 var Warning = _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Level.Warning;
20795 var Error = _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Level.Error;
20796 var Ignore = _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Level.Ignore;
20797 var Rule = /** @class */ (function () {
20798     function Rule(id, message, defaultValue) {
20799         this.id = id;
20800         this.message = message;
20801         this.defaultValue = defaultValue;
20802         // nothing to do
20803     }
20804     return Rule;
20805 }());
20806
20807 var Setting = /** @class */ (function () {
20808     function Setting(id, message, defaultValue) {
20809         this.id = id;
20810         this.message = message;
20811         this.defaultValue = defaultValue;
20812         // nothing to do
20813     }
20814     return Setting;
20815 }());
20816
20817 var Rules = {
20818     AllVendorPrefixes: new Rule('compatibleVendorPrefixes', localize('rule.vendorprefixes.all', "When using a vendor-specific prefix make sure to also include all other vendor-specific properties"), Ignore),
20819     IncludeStandardPropertyWhenUsingVendorPrefix: new Rule('vendorPrefix', localize('rule.standardvendorprefix.all', "When using a vendor-specific prefix also include the standard property"), Warning),
20820     DuplicateDeclarations: new Rule('duplicateProperties', localize('rule.duplicateDeclarations', "Do not use duplicate style definitions"), Ignore),
20821     EmptyRuleSet: new Rule('emptyRules', localize('rule.emptyRuleSets', "Do not use empty rulesets"), Warning),
20822     ImportStatemement: new Rule('importStatement', localize('rule.importDirective', "Import statements do not load in parallel"), Ignore),
20823     BewareOfBoxModelSize: new Rule('boxModel', localize('rule.bewareOfBoxModelSize', "Do not use width or height when using padding or border"), Ignore),
20824     UniversalSelector: new Rule('universalSelector', localize('rule.universalSelector', "The universal selector (*) is known to be slow"), Ignore),
20825     ZeroWithUnit: new Rule('zeroUnits', localize('rule.zeroWidthUnit', "No unit for zero needed"), Ignore),
20826     RequiredPropertiesForFontFace: new Rule('fontFaceProperties', localize('rule.fontFaceProperties', "@font-face rule must define 'src' and 'font-family' properties"), Warning),
20827     HexColorLength: new Rule('hexColorLength', localize('rule.hexColor', "Hex colors must consist of three, four, six or eight hex numbers"), Error),
20828     ArgsInColorFunction: new Rule('argumentsInColorFunction', localize('rule.colorFunction', "Invalid number of parameters"), Error),
20829     UnknownProperty: new Rule('unknownProperties', localize('rule.unknownProperty', "Unknown property."), Warning),
20830     UnknownAtRules: new Rule('unknownAtRules', localize('rule.unknownAtRules', "Unknown at-rule."), Warning),
20831     IEStarHack: new Rule('ieHack', localize('rule.ieHack', "IE hacks are only necessary when supporting IE7 and older"), Ignore),
20832     UnknownVendorSpecificProperty: new Rule('unknownVendorSpecificProperties', localize('rule.unknownVendorSpecificProperty', "Unknown vendor specific property."), Ignore),
20833     PropertyIgnoredDueToDisplay: new Rule('propertyIgnoredDueToDisplay', localize('rule.propertyIgnoredDueToDisplay', "Property is ignored due to the display."), Warning),
20834     AvoidImportant: new Rule('important', localize('rule.avoidImportant', "Avoid using !important. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored."), Ignore),
20835     AvoidFloat: new Rule('float', localize('rule.avoidFloat', "Avoid using 'float'. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes."), Ignore),
20836     AvoidIdSelector: new Rule('idSelector', localize('rule.avoidIdSelector', "Selectors should not contain IDs because these rules are too tightly coupled with the HTML."), Ignore),
20837 };
20838 var Settings = {
20839     ValidProperties: new Setting('validProperties', localize('rule.validProperties', "A list of properties that are not validated against the `unknownProperties` rule."), [])
20840 };
20841 var LintConfigurationSettings = /** @class */ (function () {
20842     function LintConfigurationSettings(conf) {
20843         if (conf === void 0) { conf = {}; }
20844         this.conf = conf;
20845     }
20846     LintConfigurationSettings.prototype.getRule = function (rule) {
20847         if (this.conf.hasOwnProperty(rule.id)) {
20848             var level = toLevel(this.conf[rule.id]);
20849             if (level) {
20850                 return level;
20851             }
20852         }
20853         return rule.defaultValue;
20854     };
20855     LintConfigurationSettings.prototype.getSetting = function (setting) {
20856         return this.conf[setting.id];
20857     };
20858     return LintConfigurationSettings;
20859 }());
20860
20861 function toLevel(level) {
20862     switch (level) {
20863         case 'ignore': return _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Level.Ignore;
20864         case 'warning': return _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Level.Warning;
20865         case 'error': return _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Level.Error;
20866     }
20867     return null;
20868 }
20869
20870
20871 /***/ }),
20872 /* 99 */
20873 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
20874
20875 __webpack_require__.r(__webpack_exports__);
20876 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
20877 /* harmony export */   "CSSValidation": () => /* binding */ CSSValidation
20878 /* harmony export */ });
20879 /* harmony import */ var _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74);
20880 /* harmony import */ var _lintRules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(98);
20881 /* harmony import */ var _lint__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(100);
20882 /* harmony import */ var _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(88);
20883 /*---------------------------------------------------------------------------------------------
20884  *  Copyright (c) Microsoft Corporation. All rights reserved.
20885  *  Licensed under the MIT License. See License.txt in the project root for license information.
20886  *--------------------------------------------------------------------------------------------*/
20887
20888
20889
20890
20891
20892 var CSSValidation = /** @class */ (function () {
20893     function CSSValidation(cssDataManager) {
20894         this.cssDataManager = cssDataManager;
20895     }
20896     CSSValidation.prototype.configure = function (settings) {
20897         this.settings = settings;
20898     };
20899     CSSValidation.prototype.doValidation = function (document, stylesheet, settings) {
20900         if (settings === void 0) { settings = this.settings; }
20901         if (settings && settings.validate === false) {
20902             return [];
20903         }
20904         var entries = [];
20905         entries.push.apply(entries, _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.ParseErrorCollector.entries(stylesheet));
20906         entries.push.apply(entries, _lint__WEBPACK_IMPORTED_MODULE_2__.LintVisitor.entries(stylesheet, document, new _lintRules__WEBPACK_IMPORTED_MODULE_1__.LintConfigurationSettings(settings && settings.lint), this.cssDataManager));
20907         var ruleIds = [];
20908         for (var r in _lintRules__WEBPACK_IMPORTED_MODULE_1__.Rules) {
20909             ruleIds.push(_lintRules__WEBPACK_IMPORTED_MODULE_1__.Rules[r].id);
20910         }
20911         function toDiagnostic(marker) {
20912             var range = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.Range.create(document.positionAt(marker.getOffset()), document.positionAt(marker.getOffset() + marker.getLength()));
20913             var source = document.languageId;
20914             return {
20915                 code: marker.getRule().id,
20916                 source: source,
20917                 message: marker.getMessage(),
20918                 severity: marker.getLevel() === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Level.Warning ? _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.DiagnosticSeverity.Warning : _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.DiagnosticSeverity.Error,
20919                 range: range
20920             };
20921         }
20922         return entries.filter(function (entry) { return entry.getLevel() !== _parser_cssNodes__WEBPACK_IMPORTED_MODULE_0__.Level.Ignore; }).map(toDiagnostic);
20923     };
20924     return CSSValidation;
20925 }());
20926
20927
20928
20929 /***/ }),
20930 /* 100 */
20931 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
20932
20933 __webpack_require__.r(__webpack_exports__);
20934 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
20935 /* harmony export */   "LintVisitor": () => /* binding */ LintVisitor
20936 /* harmony export */ });
20937 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77);
20938 /* harmony import */ var _languageFacts_facts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(80);
20939 /* harmony import */ var _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74);
20940 /* harmony import */ var _utils_arrays__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(87);
20941 /* harmony import */ var _lintRules__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(98);
20942 /* harmony import */ var _lintUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(101);
20943 /*---------------------------------------------------------------------------------------------
20944  *  Copyright (c) Microsoft Corporation. All rights reserved.
20945  *  Licensed under the MIT License. See License.txt in the project root for license information.
20946  *--------------------------------------------------------------------------------------------*/
20947
20948
20949
20950
20951
20952
20953
20954 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_0__.loadMessageBundle();
20955 var NodesByRootMap = /** @class */ (function () {
20956     function NodesByRootMap() {
20957         this.data = {};
20958     }
20959     NodesByRootMap.prototype.add = function (root, name, node) {
20960         var entry = this.data[root];
20961         if (!entry) {
20962             entry = { nodes: [], names: [] };
20963             this.data[root] = entry;
20964         }
20965         entry.names.push(name);
20966         if (node) {
20967             entry.nodes.push(node);
20968         }
20969     };
20970     return NodesByRootMap;
20971 }());
20972 var LintVisitor = /** @class */ (function () {
20973     function LintVisitor(document, settings, cssDataManager) {
20974         var _this = this;
20975         this.cssDataManager = cssDataManager;
20976         this.warnings = [];
20977         this.settings = settings;
20978         this.documentText = document.getText();
20979         this.keyframes = new NodesByRootMap();
20980         this.validProperties = {};
20981         var properties = settings.getSetting(_lintRules__WEBPACK_IMPORTED_MODULE_4__.Settings.ValidProperties);
20982         if (Array.isArray(properties)) {
20983             properties.forEach(function (p) {
20984                 if (typeof p === 'string') {
20985                     var name = p.trim().toLowerCase();
20986                     if (name.length) {
20987                         _this.validProperties[name] = true;
20988                     }
20989                 }
20990             });
20991         }
20992     }
20993     LintVisitor.entries = function (node, document, settings, cssDataManager, entryFilter) {
20994         var visitor = new LintVisitor(document, settings, cssDataManager);
20995         node.acceptVisitor(visitor);
20996         visitor.completeValidations();
20997         return visitor.getEntries(entryFilter);
20998     };
20999     LintVisitor.prototype.isValidPropertyDeclaration = function (element) {
21000         var propertyName = element.fullPropertyName;
21001         return this.validProperties[propertyName];
21002     };
21003     LintVisitor.prototype.fetch = function (input, s) {
21004         var elements = [];
21005         for (var _i = 0, input_1 = input; _i < input_1.length; _i++) {
21006             var curr = input_1[_i];
21007             if (curr.fullPropertyName === s) {
21008                 elements.push(curr);
21009             }
21010         }
21011         return elements;
21012     };
21013     LintVisitor.prototype.fetchWithValue = function (input, s, v) {
21014         var elements = [];
21015         for (var _i = 0, input_2 = input; _i < input_2.length; _i++) {
21016             var inputElement = input_2[_i];
21017             if (inputElement.fullPropertyName === s) {
21018                 var expression = inputElement.node.getValue();
21019                 if (expression && this.findValueInExpression(expression, v)) {
21020                     elements.push(inputElement);
21021                 }
21022             }
21023         }
21024         return elements;
21025     };
21026     LintVisitor.prototype.findValueInExpression = function (expression, v) {
21027         var found = false;
21028         expression.accept(function (node) {
21029             if (node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Identifier && node.matches(v)) {
21030                 found = true;
21031             }
21032             return !found;
21033         });
21034         return found;
21035     };
21036     LintVisitor.prototype.getEntries = function (filter) {
21037         if (filter === void 0) { filter = (_parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.Level.Warning | _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.Level.Error); }
21038         return this.warnings.filter(function (entry) {
21039             return (entry.getLevel() & filter) !== 0;
21040         });
21041     };
21042     LintVisitor.prototype.addEntry = function (node, rule, details) {
21043         var entry = new _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.Marker(node, rule, this.settings.getRule(rule), details);
21044         this.warnings.push(entry);
21045     };
21046     LintVisitor.prototype.getMissingNames = function (expected, actual) {
21047         var expectedClone = expected.slice(0); // clone
21048         for (var i = 0; i < actual.length; i++) {
21049             var k = expectedClone.indexOf(actual[i]);
21050             if (k !== -1) {
21051                 expectedClone[k] = null;
21052             }
21053         }
21054         var result = null;
21055         for (var i = 0; i < expectedClone.length; i++) {
21056             var curr = expectedClone[i];
21057             if (curr) {
21058                 if (result === null) {
21059                     result = localize('namelist.single', "'{0}'", curr);
21060                 }
21061                 else {
21062                     result = localize('namelist.concatenated', "{0}, '{1}'", result, curr);
21063                 }
21064             }
21065         }
21066         return result;
21067     };
21068     LintVisitor.prototype.visitNode = function (node) {
21069         switch (node.type) {
21070             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.UnknownAtRule:
21071                 return this.visitUnknownAtRule(node);
21072             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Keyframe:
21073                 return this.visitKeyframe(node);
21074             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.FontFace:
21075                 return this.visitFontFace(node);
21076             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Ruleset:
21077                 return this.visitRuleSet(node);
21078             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.SimpleSelector:
21079                 return this.visitSimpleSelector(node);
21080             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Function:
21081                 return this.visitFunction(node);
21082             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.NumericValue:
21083                 return this.visitNumericValue(node);
21084             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Import:
21085                 return this.visitImport(node);
21086             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.HexColorValue:
21087                 return this.visitHexColorValue(node);
21088             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Prio:
21089                 return this.visitPrio(node);
21090             case _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.IdentifierSelector:
21091                 return this.visitIdentifierSelector(node);
21092         }
21093         return true;
21094     };
21095     LintVisitor.prototype.completeValidations = function () {
21096         this.validateKeyframes();
21097     };
21098     LintVisitor.prototype.visitUnknownAtRule = function (node) {
21099         var atRuleName = node.getChild(0);
21100         if (!atRuleName) {
21101             return false;
21102         }
21103         var atDirective = this.cssDataManager.getAtDirective(atRuleName.getText());
21104         if (atDirective) {
21105             return false;
21106         }
21107         this.addEntry(atRuleName, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.UnknownAtRules, "Unknown at rule " + atRuleName.getText());
21108         return true;
21109     };
21110     LintVisitor.prototype.visitKeyframe = function (node) {
21111         var keyword = node.getKeyword();
21112         if (!keyword) {
21113             return false;
21114         }
21115         var text = keyword.getText();
21116         this.keyframes.add(node.getName(), text, (text !== '@keyframes') ? keyword : null);
21117         return true;
21118     };
21119     LintVisitor.prototype.validateKeyframes = function () {
21120         // @keyframe and it's vendor specific alternatives
21121         // @keyframe should be included
21122         var expected = ['@-webkit-keyframes', '@-moz-keyframes', '@-o-keyframes'];
21123         for (var name in this.keyframes.data) {
21124             var actual = this.keyframes.data[name].names;
21125             var needsStandard = (actual.indexOf('@keyframes') === -1);
21126             if (!needsStandard && actual.length === 1) {
21127                 continue; // only the non-vendor specific keyword is used, that's fine, no warning
21128             }
21129             var missingVendorSpecific = this.getMissingNames(expected, actual);
21130             if (missingVendorSpecific || needsStandard) {
21131                 for (var _i = 0, _a = this.keyframes.data[name].nodes; _i < _a.length; _i++) {
21132                     var node = _a[_i];
21133                     if (needsStandard) {
21134                         var message = localize('keyframes.standardrule.missing', "Always define standard rule '@keyframes' when defining keyframes.");
21135                         this.addEntry(node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.IncludeStandardPropertyWhenUsingVendorPrefix, message);
21136                     }
21137                     if (missingVendorSpecific) {
21138                         var message = localize('keyframes.vendorspecific.missing', "Always include all vendor specific rules: Missing: {0}", missingVendorSpecific);
21139                         this.addEntry(node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.AllVendorPrefixes, message);
21140                     }
21141                 }
21142             }
21143         }
21144         return true;
21145     };
21146     LintVisitor.prototype.visitSimpleSelector = function (node) {
21147         /////////////////////////////////////////////////////////////
21148         //      Lint - The universal selector (*) is known to be slow.
21149         /////////////////////////////////////////////////////////////
21150         var firstChar = this.documentText.charAt(node.offset);
21151         if (node.length === 1 && firstChar === '*') {
21152             this.addEntry(node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.UniversalSelector);
21153         }
21154         return true;
21155     };
21156     LintVisitor.prototype.visitIdentifierSelector = function (node) {
21157         /////////////////////////////////////////////////////////////
21158         //      Lint - Avoid id selectors
21159         /////////////////////////////////////////////////////////////
21160         this.addEntry(node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.AvoidIdSelector);
21161         return true;
21162     };
21163     LintVisitor.prototype.visitImport = function (node) {
21164         /////////////////////////////////////////////////////////////
21165         //      Lint - Import statements shouldn't be used, because they aren't offering parallel downloads.
21166         /////////////////////////////////////////////////////////////
21167         this.addEntry(node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.ImportStatemement);
21168         return true;
21169     };
21170     LintVisitor.prototype.visitRuleSet = function (node) {
21171         /////////////////////////////////////////////////////////////
21172         //      Lint - Don't use empty rulesets.
21173         /////////////////////////////////////////////////////////////
21174         var declarations = node.getDeclarations();
21175         if (!declarations) {
21176             // syntax error
21177             return false;
21178         }
21179         if (!declarations.hasChildren()) {
21180             this.addEntry(node.getSelectors(), _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.EmptyRuleSet);
21181         }
21182         var propertyTable = [];
21183         for (var _i = 0, _a = declarations.getChildren(); _i < _a.length; _i++) {
21184             var element = _a[_i];
21185             if (element instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.Declaration) {
21186                 propertyTable.push(new _lintUtil__WEBPACK_IMPORTED_MODULE_5__.Element(element));
21187             }
21188         }
21189         /////////////////////////////////////////////////////////////
21190         // the rule warns when it finds:
21191         // width being used with border, border-left, border-right, padding, padding-left, or padding-right
21192         // height being used with border, border-top, border-bottom, padding, padding-top, or padding-bottom
21193         // No error when box-sizing property is specified, as it assumes the user knows what he's doing.
21194         // see https://github.com/CSSLint/csslint/wiki/Beware-of-box-model-size
21195         /////////////////////////////////////////////////////////////
21196         var boxModel = (0,_lintUtil__WEBPACK_IMPORTED_MODULE_5__.default)(propertyTable);
21197         if (boxModel.width) {
21198             var properties = [];
21199             if (boxModel.right.value) {
21200                 properties = (0,_utils_arrays__WEBPACK_IMPORTED_MODULE_3__.union)(properties, boxModel.right.properties);
21201             }
21202             if (boxModel.left.value) {
21203                 properties = (0,_utils_arrays__WEBPACK_IMPORTED_MODULE_3__.union)(properties, boxModel.left.properties);
21204             }
21205             if (properties.length !== 0) {
21206                 for (var _b = 0, properties_1 = properties; _b < properties_1.length; _b++) {
21207                     var item = properties_1[_b];
21208                     this.addEntry(item.node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.BewareOfBoxModelSize);
21209                 }
21210                 this.addEntry(boxModel.width.node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.BewareOfBoxModelSize);
21211             }
21212         }
21213         if (boxModel.height) {
21214             var properties = [];
21215             if (boxModel.top.value) {
21216                 properties = (0,_utils_arrays__WEBPACK_IMPORTED_MODULE_3__.union)(properties, boxModel.top.properties);
21217             }
21218             if (boxModel.bottom.value) {
21219                 properties = (0,_utils_arrays__WEBPACK_IMPORTED_MODULE_3__.union)(properties, boxModel.bottom.properties);
21220             }
21221             if (properties.length !== 0) {
21222                 for (var _c = 0, properties_2 = properties; _c < properties_2.length; _c++) {
21223                     var item = properties_2[_c];
21224                     this.addEntry(item.node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.BewareOfBoxModelSize);
21225                 }
21226                 this.addEntry(boxModel.height.node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.BewareOfBoxModelSize);
21227             }
21228         }
21229         /////////////////////////////////////////////////////////////
21230         //      Properties ignored due to display
21231         /////////////////////////////////////////////////////////////
21232         // With 'display: inline-block', 'float' has no effect
21233         var displayElems = this.fetchWithValue(propertyTable, 'display', 'inline-block');
21234         if (displayElems.length > 0) {
21235             var elem = this.fetch(propertyTable, 'float');
21236             for (var index = 0; index < elem.length; index++) {
21237                 var node_1 = elem[index].node;
21238                 var value = node_1.getValue();
21239                 if (value && !value.matches('none')) {
21240                     this.addEntry(node_1, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.PropertyIgnoredDueToDisplay, localize('rule.propertyIgnoredDueToDisplayInlineBlock', "inline-block is ignored due to the float. If 'float' has a value other than 'none', the box is floated and 'display' is treated as 'block'"));
21241                 }
21242             }
21243         }
21244         // With 'display: block', 'vertical-align' has no effect
21245         displayElems = this.fetchWithValue(propertyTable, 'display', 'block');
21246         if (displayElems.length > 0) {
21247             var elem = this.fetch(propertyTable, 'vertical-align');
21248             for (var index = 0; index < elem.length; index++) {
21249                 this.addEntry(elem[index].node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.PropertyIgnoredDueToDisplay, localize('rule.propertyIgnoredDueToDisplayBlock', "Property is ignored due to the display. With 'display: block', vertical-align should not be used."));
21250             }
21251         }
21252         /////////////////////////////////////////////////////////////
21253         //      Avoid 'float'
21254         /////////////////////////////////////////////////////////////
21255         var elements = this.fetch(propertyTable, 'float');
21256         for (var index = 0; index < elements.length; index++) {
21257             var element = elements[index];
21258             if (!this.isValidPropertyDeclaration(element)) {
21259                 this.addEntry(element.node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.AvoidFloat);
21260             }
21261         }
21262         /////////////////////////////////////////////////////////////
21263         //      Don't use duplicate declarations.
21264         /////////////////////////////////////////////////////////////
21265         for (var i = 0; i < propertyTable.length; i++) {
21266             var element = propertyTable[i];
21267             if (element.fullPropertyName !== 'background' && !this.validProperties[element.fullPropertyName]) {
21268                 var value = element.node.getValue();
21269                 if (value && this.documentText.charAt(value.offset) !== '-') {
21270                     var elements_1 = this.fetch(propertyTable, element.fullPropertyName);
21271                     if (elements_1.length > 1) {
21272                         for (var k = 0; k < elements_1.length; k++) {
21273                             var value_1 = elements_1[k].node.getValue();
21274                             if (value_1 && this.documentText.charAt(value_1.offset) !== '-' && elements_1[k] !== element) {
21275                                 this.addEntry(element.node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.DuplicateDeclarations);
21276                             }
21277                         }
21278                     }
21279                 }
21280             }
21281         }
21282         /////////////////////////////////////////////////////////////
21283         //      Unknown propery & When using a vendor-prefixed gradient, make sure to use them all.
21284         /////////////////////////////////////////////////////////////
21285         var isExportBlock = node.getSelectors().matches(":export");
21286         if (!isExportBlock) {
21287             var propertiesBySuffix = new NodesByRootMap();
21288             var containsUnknowns = false;
21289             for (var _d = 0, propertyTable_1 = propertyTable; _d < propertyTable_1.length; _d++) {
21290                 var element = propertyTable_1[_d];
21291                 var decl = element.node;
21292                 if (this.isCSSDeclaration(decl)) {
21293                     var name = element.fullPropertyName;
21294                     var firstChar = name.charAt(0);
21295                     if (firstChar === '-') {
21296                         if (name.charAt(1) !== '-') { // avoid css variables
21297                             if (!this.cssDataManager.isKnownProperty(name) && !this.validProperties[name]) {
21298                                 this.addEntry(decl.getProperty(), _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.UnknownVendorSpecificProperty);
21299                             }
21300                             var nonPrefixedName = decl.getNonPrefixedPropertyName();
21301                             propertiesBySuffix.add(nonPrefixedName, name, decl.getProperty());
21302                         }
21303                     }
21304                     else {
21305                         var fullName = name;
21306                         if (firstChar === '*' || firstChar === '_') {
21307                             this.addEntry(decl.getProperty(), _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.IEStarHack);
21308                             name = name.substr(1);
21309                         }
21310                         // _property and *property might be contributed via custom data
21311                         if (!this.cssDataManager.isKnownProperty(fullName) && !this.cssDataManager.isKnownProperty(name)) {
21312                             if (!this.validProperties[name]) {
21313                                 this.addEntry(decl.getProperty(), _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.UnknownProperty, localize('property.unknownproperty.detailed', "Unknown property: '{0}'", decl.getFullPropertyName()));
21314                             }
21315                         }
21316                         propertiesBySuffix.add(name, name, null); // don't pass the node as we don't show errors on the standard
21317                     }
21318                 }
21319                 else {
21320                     containsUnknowns = true;
21321                 }
21322             }
21323             if (!containsUnknowns) { // don't perform this test if there are
21324                 for (var suffix in propertiesBySuffix.data) {
21325                     var entry = propertiesBySuffix.data[suffix];
21326                     var actual = entry.names;
21327                     var needsStandard = this.cssDataManager.isStandardProperty(suffix) && (actual.indexOf(suffix) === -1);
21328                     if (!needsStandard && actual.length === 1) {
21329                         continue; // only the non-vendor specific rule is used, that's fine, no warning
21330                     }
21331                     var expected = [];
21332                     for (var i = 0, len = LintVisitor.prefixes.length; i < len; i++) {
21333                         var prefix = LintVisitor.prefixes[i];
21334                         if (this.cssDataManager.isStandardProperty(prefix + suffix)) {
21335                             expected.push(prefix + suffix);
21336                         }
21337                     }
21338                     var missingVendorSpecific = this.getMissingNames(expected, actual);
21339                     if (missingVendorSpecific || needsStandard) {
21340                         for (var _e = 0, _f = entry.nodes; _e < _f.length; _e++) {
21341                             var node_2 = _f[_e];
21342                             if (needsStandard) {
21343                                 var message = localize('property.standard.missing', "Also define the standard property '{0}' for compatibility", suffix);
21344                                 this.addEntry(node_2, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.IncludeStandardPropertyWhenUsingVendorPrefix, message);
21345                             }
21346                             if (missingVendorSpecific) {
21347                                 var message = localize('property.vendorspecific.missing', "Always include all vendor specific properties: Missing: {0}", missingVendorSpecific);
21348                                 this.addEntry(node_2, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.AllVendorPrefixes, message);
21349                             }
21350                         }
21351                     }
21352                 }
21353             }
21354         }
21355         return true;
21356     };
21357     LintVisitor.prototype.visitPrio = function (node) {
21358         /////////////////////////////////////////////////////////////
21359         //      Don't use !important
21360         /////////////////////////////////////////////////////////////
21361         this.addEntry(node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.AvoidImportant);
21362         return true;
21363     };
21364     LintVisitor.prototype.visitNumericValue = function (node) {
21365         /////////////////////////////////////////////////////////////
21366         //      0 has no following unit
21367         /////////////////////////////////////////////////////////////
21368         var funcDecl = node.findParent(_parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Function);
21369         if (funcDecl && funcDecl.getName() === 'calc') {
21370             return true;
21371         }
21372         var decl = node.findParent(_parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.NodeType.Declaration);
21373         if (decl) {
21374             var declValue = decl.getValue();
21375             if (declValue) {
21376                 var value = node.getValue();
21377                 if (!value.unit || _languageFacts_facts__WEBPACK_IMPORTED_MODULE_1__.units.length.indexOf(value.unit.toLowerCase()) === -1) {
21378                     return true;
21379                 }
21380                 if (parseFloat(value.value) === 0.0 && !!value.unit && !this.validProperties[decl.getFullPropertyName()]) {
21381                     this.addEntry(node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.ZeroWithUnit);
21382                 }
21383             }
21384         }
21385         return true;
21386     };
21387     LintVisitor.prototype.visitFontFace = function (node) {
21388         var declarations = node.getDeclarations();
21389         if (!declarations) {
21390             // syntax error
21391             return false;
21392         }
21393         var definesSrc = false, definesFontFamily = false;
21394         var containsUnknowns = false;
21395         for (var _i = 0, _a = declarations.getChildren(); _i < _a.length; _i++) {
21396             var node_3 = _a[_i];
21397             if (this.isCSSDeclaration(node_3)) {
21398                 var name = node_3.getProperty().getName().toLowerCase();
21399                 if (name === 'src') {
21400                     definesSrc = true;
21401                 }
21402                 if (name === 'font-family') {
21403                     definesFontFamily = true;
21404                 }
21405             }
21406             else {
21407                 containsUnknowns = true;
21408             }
21409         }
21410         if (!containsUnknowns && (!definesSrc || !definesFontFamily)) {
21411             this.addEntry(node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.RequiredPropertiesForFontFace);
21412         }
21413         return true;
21414     };
21415     LintVisitor.prototype.isCSSDeclaration = function (node) {
21416         if (node instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.Declaration) {
21417             if (!node.getValue()) {
21418                 return false;
21419             }
21420             var property = node.getProperty();
21421             if (!property) {
21422                 return false;
21423             }
21424             var identifier = property.getIdentifier();
21425             if (!identifier || identifier.containsInterpolation()) {
21426                 return false;
21427             }
21428             return true;
21429         }
21430         return false;
21431     };
21432     LintVisitor.prototype.visitHexColorValue = function (node) {
21433         // Rule: #eeff0011 or #eeff00 or #ef01 or #ef0
21434         var length = node.length;
21435         if (length !== 9 && length !== 7 && length !== 5 && length !== 4) {
21436             this.addEntry(node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.HexColorLength);
21437         }
21438         return false;
21439     };
21440     LintVisitor.prototype.visitFunction = function (node) {
21441         var fnName = node.getName().toLowerCase();
21442         var expectedAttrCount = -1;
21443         var actualAttrCount = 0;
21444         switch (fnName) {
21445             case 'rgb(':
21446             case 'hsl(':
21447                 expectedAttrCount = 3;
21448                 break;
21449             case 'rgba(':
21450             case 'hsla(':
21451                 expectedAttrCount = 4;
21452                 break;
21453         }
21454         if (expectedAttrCount !== -1) {
21455             node.getArguments().accept(function (n) {
21456                 if (n instanceof _parser_cssNodes__WEBPACK_IMPORTED_MODULE_2__.BinaryExpression) {
21457                     actualAttrCount += 1;
21458                     return false;
21459                 }
21460                 return true;
21461             });
21462             if (actualAttrCount !== expectedAttrCount) {
21463                 this.addEntry(node, _lintRules__WEBPACK_IMPORTED_MODULE_4__.Rules.ArgsInColorFunction);
21464             }
21465         }
21466         return true;
21467     };
21468     LintVisitor.prefixes = [
21469         '-ms-', '-moz-', '-o-', '-webkit-',
21470     ];
21471     return LintVisitor;
21472 }());
21473
21474
21475
21476 /***/ }),
21477 /* 101 */
21478 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
21479
21480 __webpack_require__.r(__webpack_exports__);
21481 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
21482 /* harmony export */   "Element": () => /* binding */ Element,
21483 /* harmony export */   "default": () => /* binding */ calculateBoxModel
21484 /* harmony export */ });
21485 /* harmony import */ var _utils_arrays__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(87);
21486 /*---------------------------------------------------------------------------------------------
21487  *  Copyright (c) Microsoft Corporation. All rights reserved.
21488  *  Licensed under the MIT License. See License.txt in the project root for license information.
21489  *--------------------------------------------------------------------------------------------*/
21490
21491
21492 var Element = /** @class */ (function () {
21493     function Element(decl) {
21494         this.fullPropertyName = decl.getFullPropertyName().toLowerCase();
21495         this.node = decl;
21496     }
21497     return Element;
21498 }());
21499
21500 function setSide(model, side, value, property) {
21501     var state = model[side];
21502     state.value = value;
21503     if (value) {
21504         if (!(0,_utils_arrays__WEBPACK_IMPORTED_MODULE_0__.includes)(state.properties, property)) {
21505             state.properties.push(property);
21506         }
21507     }
21508 }
21509 function setAllSides(model, value, property) {
21510     setSide(model, 'top', value, property);
21511     setSide(model, 'right', value, property);
21512     setSide(model, 'bottom', value, property);
21513     setSide(model, 'left', value, property);
21514 }
21515 function updateModelWithValue(model, side, value, property) {
21516     if (side === 'top' || side === 'right' ||
21517         side === 'bottom' || side === 'left') {
21518         setSide(model, side, value, property);
21519     }
21520     else {
21521         setAllSides(model, value, property);
21522     }
21523 }
21524 function updateModelWithList(model, values, property) {
21525     switch (values.length) {
21526         case 1:
21527             updateModelWithValue(model, undefined, values[0], property);
21528             break;
21529         case 2:
21530             updateModelWithValue(model, 'top', values[0], property);
21531             updateModelWithValue(model, 'bottom', values[0], property);
21532             updateModelWithValue(model, 'right', values[1], property);
21533             updateModelWithValue(model, 'left', values[1], property);
21534             break;
21535         case 3:
21536             updateModelWithValue(model, 'top', values[0], property);
21537             updateModelWithValue(model, 'right', values[1], property);
21538             updateModelWithValue(model, 'left', values[1], property);
21539             updateModelWithValue(model, 'bottom', values[2], property);
21540             break;
21541         case 4:
21542             updateModelWithValue(model, 'top', values[0], property);
21543             updateModelWithValue(model, 'right', values[1], property);
21544             updateModelWithValue(model, 'bottom', values[2], property);
21545             updateModelWithValue(model, 'left', values[3], property);
21546             break;
21547     }
21548 }
21549 function matches(value, candidates) {
21550     for (var _i = 0, candidates_1 = candidates; _i < candidates_1.length; _i++) {
21551         var candidate = candidates_1[_i];
21552         if (value.matches(candidate)) {
21553             return true;
21554         }
21555     }
21556     return false;
21557 }
21558 /**
21559  * @param allowsKeywords whether the initial value of property is zero, so keywords `initial` and `unset` count as zero
21560  * @return `true` if this node represents a non-zero border; otherwise, `false`
21561  */
21562 function checkLineWidth(value, allowsKeywords) {
21563     if (allowsKeywords === void 0) { allowsKeywords = true; }
21564     if (allowsKeywords && matches(value, ['initial', 'unset'])) {
21565         return false;
21566     }
21567     // a <length> is a value and a unit
21568     // so use `parseFloat` to strip the unit
21569     return parseFloat(value.getText()) !== 0;
21570 }
21571 function checkLineWidthList(nodes, allowsKeywords) {
21572     if (allowsKeywords === void 0) { allowsKeywords = true; }
21573     return nodes.map(function (node) { return checkLineWidth(node, allowsKeywords); });
21574 }
21575 /**
21576  * @param allowsKeywords whether keywords `initial` and `unset` count as zero
21577  * @return `true` if this node represents a non-zero border; otherwise, `false`
21578  */
21579 function checkLineStyle(valueNode, allowsKeywords) {
21580     if (allowsKeywords === void 0) { allowsKeywords = true; }
21581     if (matches(valueNode, ['none', 'hidden'])) {
21582         return false;
21583     }
21584     if (allowsKeywords && matches(valueNode, ['initial', 'unset'])) {
21585         return false;
21586     }
21587     return true;
21588 }
21589 function checkLineStyleList(nodes, allowsKeywords) {
21590     if (allowsKeywords === void 0) { allowsKeywords = true; }
21591     return nodes.map(function (node) { return checkLineStyle(node, allowsKeywords); });
21592 }
21593 function checkBorderShorthand(node) {
21594     var children = node.getChildren();
21595     // the only child can be a keyword, a <line-width>, or a <line-style>
21596     // if either check returns false, the result is no border
21597     if (children.length === 1) {
21598         var value = children[0];
21599         return checkLineWidth(value) && checkLineStyle(value);
21600     }
21601     // multiple children can't contain keywords
21602     // if any child means no border, the result is no border
21603     for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
21604         var child = children_1[_i];
21605         var value = child;
21606         if (!checkLineWidth(value, /* allowsKeywords: */ false) ||
21607             !checkLineStyle(value, /* allowsKeywords: */ false)) {
21608             return false;
21609         }
21610     }
21611     return true;
21612 }
21613 function calculateBoxModel(propertyTable) {
21614     var model = {
21615         top: { value: false, properties: [] },
21616         right: { value: false, properties: [] },
21617         bottom: { value: false, properties: [] },
21618         left: { value: false, properties: [] },
21619     };
21620     for (var _i = 0, propertyTable_1 = propertyTable; _i < propertyTable_1.length; _i++) {
21621         var property = propertyTable_1[_i];
21622         var value = property.node.value;
21623         if (typeof value === 'undefined') {
21624             continue;
21625         }
21626         switch (property.fullPropertyName) {
21627             case 'box-sizing':
21628                 // has `box-sizing`, bail out
21629                 return {
21630                     top: { value: false, properties: [] },
21631                     right: { value: false, properties: [] },
21632                     bottom: { value: false, properties: [] },
21633                     left: { value: false, properties: [] },
21634                 };
21635             case 'width':
21636                 model.width = property;
21637                 break;
21638             case 'height':
21639                 model.height = property;
21640                 break;
21641             default:
21642                 var segments = property.fullPropertyName.split('-');
21643                 switch (segments[0]) {
21644                     case 'border':
21645                         switch (segments[1]) {
21646                             case undefined:
21647                             case 'top':
21648                             case 'right':
21649                             case 'bottom':
21650                             case 'left':
21651                                 switch (segments[2]) {
21652                                     case undefined:
21653                                         updateModelWithValue(model, segments[1], checkBorderShorthand(value), property);
21654                                         break;
21655                                     case 'width':
21656                                         // the initial value of `border-width` is `medium`, not zero
21657                                         updateModelWithValue(model, segments[1], checkLineWidth(value, false), property);
21658                                         break;
21659                                     case 'style':
21660                                         // the initial value of `border-style` is `none`
21661                                         updateModelWithValue(model, segments[1], checkLineStyle(value, true), property);
21662                                         break;
21663                                 }
21664                                 break;
21665                             case 'width':
21666                                 // the initial value of `border-width` is `medium`, not zero
21667                                 updateModelWithList(model, checkLineWidthList(value.getChildren(), false), property);
21668                                 break;
21669                             case 'style':
21670                                 // the initial value of `border-style` is `none`
21671                                 updateModelWithList(model, checkLineStyleList(value.getChildren(), true), property);
21672                                 break;
21673                         }
21674                         break;
21675                     case 'padding':
21676                         if (segments.length === 1) {
21677                             // the initial value of `padding` is zero
21678                             updateModelWithList(model, checkLineWidthList(value.getChildren(), true), property);
21679                         }
21680                         else {
21681                             // the initial value of `padding` is zero
21682                             updateModelWithValue(model, segments[1], checkLineWidth(value, true), property);
21683                         }
21684                         break;
21685                 }
21686                 break;
21687         }
21688     }
21689     return model;
21690 }
21691
21692
21693 /***/ }),
21694 /* 102 */
21695 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
21696
21697 __webpack_require__.r(__webpack_exports__);
21698 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
21699 /* harmony export */   "SCSSParser": () => /* binding */ SCSSParser
21700 /* harmony export */ });
21701 /* harmony import */ var _scssScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(103);
21702 /* harmony import */ var _cssScanner__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73);
21703 /* harmony import */ var _cssParser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(72);
21704 /* harmony import */ var _cssNodes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74);
21705 /* harmony import */ var _scssErrors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(104);
21706 /* harmony import */ var _cssErrors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(76);
21707 /*---------------------------------------------------------------------------------------------
21708  *  Copyright (c) Microsoft Corporation. All rights reserved.
21709  *  Licensed under the MIT License. See License.txt in the project root for license information.
21710  *--------------------------------------------------------------------------------------------*/
21711
21712 var __extends = (undefined && undefined.__extends) || (function () {
21713     var extendStatics = function (d, b) {
21714         extendStatics = Object.setPrototypeOf ||
21715             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
21716             function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
21717         return extendStatics(d, b);
21718     };
21719     return function (d, b) {
21720         extendStatics(d, b);
21721         function __() { this.constructor = d; }
21722         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
21723     };
21724 })();
21725
21726
21727
21728
21729
21730
21731 /// <summary>
21732 /// A parser for scss
21733 /// http://sass-lang.com/documentation/file.SASS_REFERENCE.html
21734 /// </summary>
21735 var SCSSParser = /** @class */ (function (_super) {
21736     __extends(SCSSParser, _super);
21737     function SCSSParser() {
21738         return _super.call(this, new _scssScanner__WEBPACK_IMPORTED_MODULE_0__.SCSSScanner()) || this;
21739     }
21740     SCSSParser.prototype._parseStylesheetStatement = function (isNested) {
21741         if (isNested === void 0) { isNested = false; }
21742         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.AtKeyword)) {
21743             return this._parseWarnAndDebug() // @warn, @debug and @error statements
21744                 || this._parseControlStatement() // @if, @while, @for, @each
21745                 || this._parseMixinDeclaration() // @mixin
21746                 || this._parseMixinContent() // @content
21747                 || this._parseMixinReference() // @include
21748                 || this._parseFunctionDeclaration() // @function
21749                 || this._parseForward() // @forward
21750                 || this._parseUse() // @use
21751                 || this._parseRuleset(isNested) // @at-rule
21752                 || _super.prototype._parseStylesheetAtStatement.call(this, isNested);
21753         }
21754         return this._parseRuleset(true) || this._parseVariableDeclaration();
21755     };
21756     SCSSParser.prototype._parseImport = function () {
21757         if (!this.peekKeyword('@import')) {
21758             return null;
21759         }
21760         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Import);
21761         this.consumeToken();
21762         if (!node.addChild(this._parseURILiteral()) && !node.addChild(this._parseStringLiteral())) {
21763             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.URIOrStringExpected);
21764         }
21765         while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
21766             if (!node.addChild(this._parseURILiteral()) && !node.addChild(this._parseStringLiteral())) {
21767                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.URIOrStringExpected);
21768             }
21769         }
21770         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon) && !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOF)) {
21771             node.setMedialist(this._parseMediaQueryList());
21772         }
21773         return this.finish(node);
21774     };
21775     // scss variables: $font-size: 12px;
21776     SCSSParser.prototype._parseVariableDeclaration = function (panic) {
21777         if (panic === void 0) { panic = []; }
21778         if (!this.peek(_scssScanner__WEBPACK_IMPORTED_MODULE_0__.VariableName)) {
21779             return null;
21780         }
21781         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.VariableDeclaration);
21782         if (!node.setVariable(this._parseVariable())) {
21783             return null;
21784         }
21785         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Colon)) {
21786             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.ColonExpected);
21787         }
21788         if (this.prevToken) {
21789             node.colonPosition = this.prevToken.offset;
21790         }
21791         if (!node.setValue(this._parseExpr())) {
21792             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableValueExpected, [], panic);
21793         }
21794         while (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Exclamation)) {
21795             if (node.addChild(this._tryParsePrio())) {
21796                 // !important
21797             }
21798             else {
21799                 this.consumeToken();
21800                 if (!this.peekRegExp(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Ident, /^(default|global)$/)) {
21801                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.UnknownKeyword);
21802                 }
21803                 this.consumeToken();
21804             }
21805         }
21806         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon)) {
21807             node.semicolonPosition = this.token.offset; // not part of the declaration, but useful information for code assist
21808         }
21809         return this.finish(node);
21810     };
21811     SCSSParser.prototype._parseMediaContentStart = function () {
21812         return this._parseInterpolation();
21813     };
21814     SCSSParser.prototype._parseMediaFeatureName = function () {
21815         return this._parseModuleMember()
21816             || this._parseFunction() // function before ident
21817             || this._parseIdent()
21818             || this._parseVariable();
21819     };
21820     SCSSParser.prototype._parseKeyframeSelector = function () {
21821         return this._tryParseKeyframeSelector()
21822             || this._parseControlStatement(this._parseKeyframeSelector.bind(this))
21823             || this._parseVariableDeclaration()
21824             || this._parseMixinContent();
21825     };
21826     SCSSParser.prototype._parseVariable = function () {
21827         if (!this.peek(_scssScanner__WEBPACK_IMPORTED_MODULE_0__.VariableName)) {
21828             return null;
21829         }
21830         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Variable);
21831         this.consumeToken();
21832         return node;
21833     };
21834     SCSSParser.prototype._parseModuleMember = function () {
21835         var pos = this.mark();
21836         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Module);
21837         if (!node.setIdentifier(this._parseIdent([_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Module]))) {
21838             return null;
21839         }
21840         if (this.hasWhitespace()
21841             || !this.acceptDelim('.')
21842             || this.hasWhitespace()) {
21843             this.restoreAtMark(pos);
21844             return null;
21845         }
21846         if (!node.addChild(this._parseVariable() || this._parseFunction())) {
21847             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.IdentifierOrVariableExpected);
21848         }
21849         return node;
21850     };
21851     SCSSParser.prototype._parseIdent = function (referenceTypes) {
21852         var _this = this;
21853         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Ident) && !this.peek(_scssScanner__WEBPACK_IMPORTED_MODULE_0__.InterpolationFunction) && !this.peekDelim('-')) {
21854             return null;
21855         }
21856         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Identifier);
21857         node.referenceTypes = referenceTypes;
21858         node.isCustomProperty = this.peekRegExp(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Ident, /^--/);
21859         var hasContent = false;
21860         var indentInterpolation = function () {
21861             var pos = _this.mark();
21862             if (_this.acceptDelim('-')) {
21863                 if (!_this.hasWhitespace()) {
21864                     _this.acceptDelim('-');
21865                 }
21866                 if (_this.hasWhitespace()) {
21867                     _this.restoreAtMark(pos);
21868                     return null;
21869                 }
21870             }
21871             return _this._parseInterpolation();
21872         };
21873         while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Ident) || node.addChild(indentInterpolation()) || (hasContent && this.acceptRegexp(/^[\w-]/))) {
21874             hasContent = true;
21875             if (this.hasWhitespace()) {
21876                 break;
21877             }
21878         }
21879         return hasContent ? this.finish(node) : null;
21880     };
21881     SCSSParser.prototype._parseTermExpression = function () {
21882         return this._parseModuleMember() ||
21883             this._parseVariable() ||
21884             this._parseSelectorCombinator() ||
21885             //this._tryParsePrio() ||
21886             _super.prototype._parseTermExpression.call(this);
21887     };
21888     SCSSParser.prototype._parseInterpolation = function () {
21889         if (this.peek(_scssScanner__WEBPACK_IMPORTED_MODULE_0__.InterpolationFunction)) {
21890             var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Interpolation);
21891             this.consumeToken();
21892             if (!node.addChild(this._parseExpr()) && !this._parseSelectorCombinator()) {
21893                 if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR)) {
21894                     return this.finish(node);
21895                 }
21896                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.ExpressionExpected);
21897             }
21898             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR)) {
21899                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.RightCurlyExpected);
21900             }
21901             return this.finish(node);
21902         }
21903         return null;
21904     };
21905     SCSSParser.prototype._parseOperator = function () {
21906         if (this.peek(_scssScanner__WEBPACK_IMPORTED_MODULE_0__.EqualsOperator) || this.peek(_scssScanner__WEBPACK_IMPORTED_MODULE_0__.NotEqualsOperator)
21907             || this.peek(_scssScanner__WEBPACK_IMPORTED_MODULE_0__.GreaterEqualsOperator) || this.peek(_scssScanner__WEBPACK_IMPORTED_MODULE_0__.SmallerEqualsOperator)
21908             || this.peekDelim('>') || this.peekDelim('<')
21909             || this.peekIdent('and') || this.peekIdent('or')
21910             || this.peekDelim('%')) {
21911             var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.Operator);
21912             this.consumeToken();
21913             return this.finish(node);
21914         }
21915         return _super.prototype._parseOperator.call(this);
21916     };
21917     SCSSParser.prototype._parseUnaryOperator = function () {
21918         if (this.peekIdent('not')) {
21919             var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Node);
21920             this.consumeToken();
21921             return this.finish(node);
21922         }
21923         return _super.prototype._parseUnaryOperator.call(this);
21924     };
21925     SCSSParser.prototype._parseRuleSetDeclaration = function () {
21926         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.AtKeyword)) {
21927             return this._parseKeyframe() // nested @keyframe
21928                 || this._parseImport() // nested @import
21929                 || this._parseMedia(true) // nested @media
21930                 || this._parseFontFace() // nested @font-face
21931                 || this._parseWarnAndDebug() // @warn, @debug and @error statements
21932                 || this._parseControlStatement() // @if, @while, @for, @each
21933                 || this._parseFunctionDeclaration() // @function
21934                 || this._parseExtends() // @extends
21935                 || this._parseMixinReference() // @include
21936                 || this._parseMixinContent() // @content
21937                 || this._parseMixinDeclaration() // nested @mixin
21938                 || this._parseRuleset(true) // @at-rule
21939                 || this._parseSupports(true) // @supports
21940                 || _super.prototype._parseRuleSetDeclarationAtStatement.call(this);
21941         }
21942         return this._parseVariableDeclaration() // variable declaration
21943             || this._tryParseRuleset(true) // nested ruleset
21944             || _super.prototype._parseRuleSetDeclaration.call(this); // try css ruleset declaration as last so in the error case, the ast will contain a declaration
21945     };
21946     SCSSParser.prototype._parseDeclaration = function (stopTokens) {
21947         var custonProperty = this._tryParseCustomPropertyDeclaration(stopTokens);
21948         if (custonProperty) {
21949             return custonProperty;
21950         }
21951         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Declaration);
21952         if (!node.setProperty(this._parseProperty())) {
21953             return null;
21954         }
21955         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Colon)) {
21956             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.ColonExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Colon], stopTokens || [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon]);
21957         }
21958         if (this.prevToken) {
21959             node.colonPosition = this.prevToken.offset;
21960         }
21961         var hasContent = false;
21962         if (node.setValue(this._parseExpr())) {
21963             hasContent = true;
21964             node.addChild(this._parsePrio());
21965         }
21966         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyL)) {
21967             node.setNestedProperties(this._parseNestedProperties());
21968         }
21969         else {
21970             if (!hasContent) {
21971                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.PropertyValueExpected);
21972             }
21973         }
21974         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon)) {
21975             node.semicolonPosition = this.token.offset; // not part of the declaration, but useful information for code assist
21976         }
21977         return this.finish(node);
21978     };
21979     SCSSParser.prototype._parseNestedProperties = function () {
21980         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NestedProperties);
21981         return this._parseBody(node, this._parseDeclaration.bind(this));
21982     };
21983     SCSSParser.prototype._parseExtends = function () {
21984         if (this.peekKeyword('@extend')) {
21985             var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ExtendsReference);
21986             this.consumeToken();
21987             if (!node.getSelectors().addChild(this._parseSimpleSelector())) {
21988                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.SelectorExpected);
21989             }
21990             while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
21991                 node.getSelectors().addChild(this._parseSimpleSelector());
21992             }
21993             if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Exclamation)) {
21994                 if (!this.acceptIdent('optional')) {
21995                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.UnknownKeyword);
21996                 }
21997             }
21998             return this.finish(node);
21999         }
22000         return null;
22001     };
22002     SCSSParser.prototype._parseSimpleSelectorBody = function () {
22003         return this._parseSelectorCombinator() || this._parseSelectorPlaceholder() || _super.prototype._parseSimpleSelectorBody.call(this);
22004     };
22005     SCSSParser.prototype._parseSelectorCombinator = function () {
22006         if (this.peekDelim('&')) {
22007             var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.SelectorCombinator);
22008             this.consumeToken();
22009             while (!this.hasWhitespace() && (this.acceptDelim('-') || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Num) || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Dimension) || node.addChild(this._parseIdent()) || this.acceptDelim('&'))) {
22010                 //  support &-foo-1
22011             }
22012             return this.finish(node);
22013         }
22014         return null;
22015     };
22016     SCSSParser.prototype._parseSelectorPlaceholder = function () {
22017         if (this.peekDelim('%')) {
22018             var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.SelectorPlaceholder);
22019             this.consumeToken();
22020             this._parseIdent();
22021             return this.finish(node);
22022         }
22023         else if (this.peekKeyword('@at-root')) {
22024             var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.SelectorPlaceholder);
22025             this.consumeToken();
22026             return this.finish(node);
22027         }
22028         return null;
22029     };
22030     SCSSParser.prototype._parseElementName = function () {
22031         var pos = this.mark();
22032         var node = _super.prototype._parseElementName.call(this);
22033         if (node && !this.hasWhitespace() && this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) { // for #49589
22034             this.restoreAtMark(pos);
22035             return null;
22036         }
22037         return node;
22038     };
22039     SCSSParser.prototype._tryParsePseudoIdentifier = function () {
22040         return this._parseInterpolation() || _super.prototype._tryParsePseudoIdentifier.call(this); // for #49589
22041     };
22042     SCSSParser.prototype._parseWarnAndDebug = function () {
22043         if (!this.peekKeyword('@debug')
22044             && !this.peekKeyword('@warn')
22045             && !this.peekKeyword('@error')) {
22046             return null;
22047         }
22048         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.Debug);
22049         this.consumeToken(); // @debug, @warn or @error
22050         node.addChild(this._parseExpr()); // optional
22051         return this.finish(node);
22052     };
22053     SCSSParser.prototype._parseControlStatement = function (parseStatement) {
22054         if (parseStatement === void 0) { parseStatement = this._parseRuleSetDeclaration.bind(this); }
22055         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.AtKeyword)) {
22056             return null;
22057         }
22058         return this._parseIfStatement(parseStatement) || this._parseForStatement(parseStatement)
22059             || this._parseEachStatement(parseStatement) || this._parseWhileStatement(parseStatement);
22060     };
22061     SCSSParser.prototype._parseIfStatement = function (parseStatement) {
22062         if (!this.peekKeyword('@if')) {
22063             return null;
22064         }
22065         return this._internalParseIfStatement(parseStatement);
22066     };
22067     SCSSParser.prototype._internalParseIfStatement = function (parseStatement) {
22068         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.IfStatement);
22069         this.consumeToken(); // @if or if
22070         if (!node.setExpression(this._parseExpr(true))) {
22071             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.ExpressionExpected);
22072         }
22073         this._parseBody(node, parseStatement);
22074         if (this.acceptKeyword('@else')) {
22075             if (this.peekIdent('if')) {
22076                 node.setElseClause(this._internalParseIfStatement(parseStatement));
22077             }
22078             else if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyL)) {
22079                 var elseNode = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ElseStatement);
22080                 this._parseBody(elseNode, parseStatement);
22081                 node.setElseClause(elseNode);
22082             }
22083         }
22084         return this.finish(node);
22085     };
22086     SCSSParser.prototype._parseForStatement = function (parseStatement) {
22087         if (!this.peekKeyword('@for')) {
22088             return null;
22089         }
22090         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ForStatement);
22091         this.consumeToken(); // @for
22092         if (!node.setVariable(this._parseVariable())) {
22093             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableNameExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22094         }
22095         if (!this.acceptIdent('from')) {
22096             return this.finish(node, _scssErrors__WEBPACK_IMPORTED_MODULE_4__.SCSSParseError.FromExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22097         }
22098         if (!node.addChild(this._parseBinaryExpr())) {
22099             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.ExpressionExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22100         }
22101         if (!this.acceptIdent('to') && !this.acceptIdent('through')) {
22102             return this.finish(node, _scssErrors__WEBPACK_IMPORTED_MODULE_4__.SCSSParseError.ThroughOrToExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22103         }
22104         if (!node.addChild(this._parseBinaryExpr())) {
22105             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.ExpressionExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22106         }
22107         return this._parseBody(node, parseStatement);
22108     };
22109     SCSSParser.prototype._parseEachStatement = function (parseStatement) {
22110         if (!this.peekKeyword('@each')) {
22111             return null;
22112         }
22113         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.EachStatement);
22114         this.consumeToken(); // @each
22115         var variables = node.getVariables();
22116         if (!variables.addChild(this._parseVariable())) {
22117             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableNameExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22118         }
22119         while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
22120             if (!variables.addChild(this._parseVariable())) {
22121                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableNameExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22122             }
22123         }
22124         this.finish(variables);
22125         if (!this.acceptIdent('in')) {
22126             return this.finish(node, _scssErrors__WEBPACK_IMPORTED_MODULE_4__.SCSSParseError.InExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22127         }
22128         if (!node.addChild(this._parseExpr())) {
22129             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.ExpressionExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22130         }
22131         return this._parseBody(node, parseStatement);
22132     };
22133     SCSSParser.prototype._parseWhileStatement = function (parseStatement) {
22134         if (!this.peekKeyword('@while')) {
22135             return null;
22136         }
22137         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.WhileStatement);
22138         this.consumeToken(); // @while
22139         if (!node.addChild(this._parseBinaryExpr())) {
22140             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.ExpressionExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22141         }
22142         return this._parseBody(node, parseStatement);
22143     };
22144     SCSSParser.prototype._parseFunctionBodyDeclaration = function () {
22145         return this._parseVariableDeclaration() || this._parseReturnStatement() || this._parseWarnAndDebug()
22146             || this._parseControlStatement(this._parseFunctionBodyDeclaration.bind(this));
22147     };
22148     SCSSParser.prototype._parseFunctionDeclaration = function () {
22149         if (!this.peekKeyword('@function')) {
22150             return null;
22151         }
22152         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.FunctionDeclaration);
22153         this.consumeToken(); // @function
22154         if (!node.setIdentifier(this._parseIdent([_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Function]))) {
22155             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.IdentifierExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22156         }
22157         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
22158             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.LeftParenthesisExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22159         }
22160         if (node.getParameters().addChild(this._parseParameterDeclaration())) {
22161             while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
22162                 if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22163                     break;
22164                 }
22165                 if (!node.getParameters().addChild(this._parseParameterDeclaration())) {
22166                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableNameExpected);
22167                 }
22168             }
22169         }
22170         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22171             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.RightParenthesisExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22172         }
22173         return this._parseBody(node, this._parseFunctionBodyDeclaration.bind(this));
22174     };
22175     SCSSParser.prototype._parseReturnStatement = function () {
22176         if (!this.peekKeyword('@return')) {
22177             return null;
22178         }
22179         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.ReturnStatement);
22180         this.consumeToken(); // @function
22181         if (!node.addChild(this._parseExpr())) {
22182             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.ExpressionExpected);
22183         }
22184         return this.finish(node);
22185     };
22186     SCSSParser.prototype._parseMixinDeclaration = function () {
22187         if (!this.peekKeyword('@mixin')) {
22188             return null;
22189         }
22190         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.MixinDeclaration);
22191         this.consumeToken();
22192         if (!node.setIdentifier(this._parseIdent([_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Mixin]))) {
22193             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.IdentifierExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22194         }
22195         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
22196             if (node.getParameters().addChild(this._parseParameterDeclaration())) {
22197                 while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
22198                     if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22199                         break;
22200                     }
22201                     if (!node.getParameters().addChild(this._parseParameterDeclaration())) {
22202                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableNameExpected);
22203                     }
22204                 }
22205             }
22206             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22207                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.RightParenthesisExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22208             }
22209         }
22210         return this._parseBody(node, this._parseRuleSetDeclaration.bind(this));
22211     };
22212     SCSSParser.prototype._parseParameterDeclaration = function () {
22213         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.FunctionParameter);
22214         if (!node.setIdentifier(this._parseVariable())) {
22215             return null;
22216         }
22217         if (this.accept(_scssScanner__WEBPACK_IMPORTED_MODULE_0__.Ellipsis)) {
22218             // ok
22219         }
22220         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Colon)) {
22221             if (!node.setDefaultValue(this._parseExpr(true))) {
22222                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableValueExpected, [], [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma, _cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR]);
22223             }
22224         }
22225         return this.finish(node);
22226     };
22227     SCSSParser.prototype._parseMixinContent = function () {
22228         if (!this.peekKeyword('@content')) {
22229             return null;
22230         }
22231         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.MixinContentReference);
22232         this.consumeToken();
22233         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
22234             if (node.getArguments().addChild(this._parseFunctionArgument())) {
22235                 while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
22236                     if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22237                         break;
22238                     }
22239                     if (!node.getArguments().addChild(this._parseFunctionArgument())) {
22240                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.ExpressionExpected);
22241                     }
22242                 }
22243             }
22244             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22245                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.RightParenthesisExpected);
22246             }
22247         }
22248         return this.finish(node);
22249     };
22250     SCSSParser.prototype._parseMixinReference = function () {
22251         if (!this.peekKeyword('@include')) {
22252             return null;
22253         }
22254         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.MixinReference);
22255         this.consumeToken();
22256         // Could be module or mixin identifier, set as mixin as default.
22257         var firstIdent = this._parseIdent([_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Mixin]);
22258         if (!node.setIdentifier(firstIdent)) {
22259             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.IdentifierExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22260         }
22261         // Is a module accessor.
22262         if (!this.hasWhitespace() && this.acceptDelim('.') && !this.hasWhitespace()) {
22263             var secondIdent = this._parseIdent([_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Mixin]);
22264             if (!secondIdent) {
22265                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.IdentifierExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR]);
22266             }
22267             var moduleToken = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Module);
22268             // Re-purpose first matched ident as identifier for module token.
22269             firstIdent.referenceTypes = [_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Module];
22270             moduleToken.setIdentifier(firstIdent);
22271             // Override identifier with second ident.
22272             node.setIdentifier(secondIdent);
22273             node.addChild(moduleToken);
22274         }
22275         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
22276             if (node.getArguments().addChild(this._parseFunctionArgument())) {
22277                 while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
22278                     if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22279                         break;
22280                     }
22281                     if (!node.getArguments().addChild(this._parseFunctionArgument())) {
22282                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.ExpressionExpected);
22283                     }
22284                 }
22285             }
22286             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22287                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.RightParenthesisExpected);
22288             }
22289         }
22290         if (this.peekIdent('using') || this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyL)) {
22291             node.setContent(this._parseMixinContentDeclaration());
22292         }
22293         return this.finish(node);
22294     };
22295     SCSSParser.prototype._parseMixinContentDeclaration = function () {
22296         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.MixinContentDeclaration);
22297         if (this.acceptIdent('using')) {
22298             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
22299                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.LeftParenthesisExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyL]);
22300             }
22301             if (node.getParameters().addChild(this._parseParameterDeclaration())) {
22302                 while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
22303                     if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22304                         break;
22305                     }
22306                     if (!node.getParameters().addChild(this._parseParameterDeclaration())) {
22307                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableNameExpected);
22308                     }
22309                 }
22310             }
22311             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22312                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.RightParenthesisExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyL]);
22313             }
22314         }
22315         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyL)) {
22316             this._parseBody(node, this._parseMixinReferenceBodyStatement.bind(this));
22317         }
22318         return this.finish(node);
22319     };
22320     SCSSParser.prototype._parseMixinReferenceBodyStatement = function () {
22321         return this._tryParseKeyframeSelector() || this._parseRuleSetDeclaration();
22322     };
22323     SCSSParser.prototype._parseFunctionArgument = function () {
22324         // [variableName ':'] expression | variableName '...'
22325         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.FunctionArgument);
22326         var pos = this.mark();
22327         var argument = this._parseVariable();
22328         if (argument) {
22329             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Colon)) {
22330                 if (this.accept(_scssScanner__WEBPACK_IMPORTED_MODULE_0__.Ellipsis)) { // optional
22331                     node.setValue(argument);
22332                     return this.finish(node);
22333                 }
22334                 else {
22335                     this.restoreAtMark(pos);
22336                 }
22337             }
22338             else {
22339                 node.setIdentifier(argument);
22340             }
22341         }
22342         if (node.setValue(this._parseExpr(true))) {
22343             this.accept(_scssScanner__WEBPACK_IMPORTED_MODULE_0__.Ellipsis); // #43746
22344             node.addChild(this._parsePrio()); // #9859
22345             return this.finish(node);
22346         }
22347         else if (node.setValue(this._tryParsePrio())) {
22348             return this.finish(node);
22349         }
22350         return null;
22351     };
22352     SCSSParser.prototype._parseURLArgument = function () {
22353         var pos = this.mark();
22354         var node = _super.prototype._parseURLArgument.call(this);
22355         if (!node || !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22356             this.restoreAtMark(pos);
22357             var node_1 = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Node);
22358             node_1.addChild(this._parseBinaryExpr());
22359             return this.finish(node_1);
22360         }
22361         return node;
22362     };
22363     SCSSParser.prototype._parseOperation = function () {
22364         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
22365             return null;
22366         }
22367         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Node);
22368         this.consumeToken();
22369         while (node.addChild(this._parseListElement())) {
22370             this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma); // optional
22371         }
22372         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22373             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.RightParenthesisExpected);
22374         }
22375         return this.finish(node);
22376     };
22377     SCSSParser.prototype._parseListElement = function () {
22378         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ListEntry);
22379         var child = this._parseBinaryExpr();
22380         if (!child) {
22381             return null;
22382         }
22383         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Colon)) {
22384             node.setKey(child);
22385             if (!node.setValue(this._parseBinaryExpr())) {
22386                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.ExpressionExpected);
22387             }
22388         }
22389         else {
22390             node.setValue(child);
22391         }
22392         return this.finish(node);
22393     };
22394     SCSSParser.prototype._parseUse = function () {
22395         if (!this.peekKeyword('@use')) {
22396             return null;
22397         }
22398         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Use);
22399         this.consumeToken(); // @use
22400         if (!node.addChild(this._parseStringLiteral())) {
22401             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.StringLiteralExpected);
22402         }
22403         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon) && !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOF)) {
22404             if (!this.peekRegExp(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Ident, /as|with/)) {
22405                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.UnknownKeyword);
22406             }
22407             if (this.acceptIdent('as') &&
22408                 (!node.setIdentifier(this._parseIdent([_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Module])) && !this.acceptDelim('*'))) {
22409                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.IdentifierOrWildcardExpected);
22410             }
22411             if (this.acceptIdent('with')) {
22412                 if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
22413                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.LeftParenthesisExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR]);
22414                 }
22415                 // First variable statement, no comma.
22416                 if (!node.getParameters().addChild(this._parseModuleConfigDeclaration())) {
22417                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableNameExpected);
22418                 }
22419                 while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
22420                     if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22421                         break;
22422                     }
22423                     if (!node.getParameters().addChild(this._parseModuleConfigDeclaration())) {
22424                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableNameExpected);
22425                     }
22426                 }
22427                 if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22428                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.RightParenthesisExpected);
22429                 }
22430             }
22431         }
22432         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon) && !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOF)) {
22433             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.SemiColonExpected);
22434         }
22435         return this.finish(node);
22436     };
22437     SCSSParser.prototype._parseModuleConfigDeclaration = function () {
22438         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ModuleConfiguration);
22439         if (!node.setIdentifier(this._parseVariable())) {
22440             return null;
22441         }
22442         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Colon) || !node.setValue(this._parseExpr(true))) {
22443             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableValueExpected, [], [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma, _cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR]);
22444         }
22445         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Exclamation)) {
22446             if (this.hasWhitespace() || !this.acceptIdent('default')) {
22447                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.UnknownKeyword);
22448             }
22449         }
22450         return this.finish(node);
22451     };
22452     SCSSParser.prototype._parseForward = function () {
22453         if (!this.peekKeyword('@forward')) {
22454             return null;
22455         }
22456         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Forward);
22457         this.consumeToken();
22458         if (!node.addChild(this._parseStringLiteral())) {
22459             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.StringLiteralExpected);
22460         }
22461         if (this.acceptIdent('with')) {
22462             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
22463                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.LeftParenthesisExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR]);
22464             }
22465             // First variable statement, no comma.
22466             if (!node.getParameters().addChild(this._parseModuleConfigDeclaration())) {
22467                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableNameExpected);
22468             }
22469             while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
22470                 if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22471                     break;
22472                 }
22473                 if (!node.getParameters().addChild(this._parseModuleConfigDeclaration())) {
22474                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.VariableNameExpected);
22475                 }
22476             }
22477             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
22478                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.RightParenthesisExpected);
22479             }
22480         }
22481         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon) && !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOF)) {
22482             if (!this.peekRegExp(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Ident, /as|hide|show/)) {
22483                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.UnknownKeyword);
22484             }
22485             if (this.acceptIdent('as')) {
22486                 var identifier = this._parseIdent([_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Forward]);
22487                 if (!node.setIdentifier(identifier)) {
22488                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.IdentifierExpected);
22489                 }
22490                 // Wildcard must be the next character after the identifier string.
22491                 if (this.hasWhitespace() || !this.acceptDelim('*')) {
22492                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.WildcardExpected);
22493                 }
22494             }
22495             if (this.peekIdent('hide') || this.peekIdent('show')) {
22496                 if (!node.addChild(this._parseForwardVisibility())) {
22497                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.IdentifierOrVariableExpected);
22498                 }
22499             }
22500         }
22501         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon) && !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOF)) {
22502             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_5__.ParseError.SemiColonExpected);
22503         }
22504         return this.finish(node);
22505     };
22506     SCSSParser.prototype._parseForwardVisibility = function () {
22507         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ForwardVisibility);
22508         // Assume to be "hide" or "show".
22509         node.setIdentifier(this._parseIdent());
22510         while (node.addChild(this._parseVariable() || this._parseIdent())) {
22511             // Consume all variables and idents ahead.
22512             this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma);
22513         }
22514         // More than just identifier 
22515         return node.getChildren().length > 1 ? node : null;
22516     };
22517     SCSSParser.prototype._parseSupportsCondition = function () {
22518         return this._parseInterpolation() || _super.prototype._parseSupportsCondition.call(this);
22519     };
22520     return SCSSParser;
22521 }(_cssParser__WEBPACK_IMPORTED_MODULE_2__.Parser));
22522
22523
22524
22525 /***/ }),
22526 /* 103 */
22527 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
22528
22529 __webpack_require__.r(__webpack_exports__);
22530 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
22531 /* harmony export */   "VariableName": () => /* binding */ VariableName,
22532 /* harmony export */   "InterpolationFunction": () => /* binding */ InterpolationFunction,
22533 /* harmony export */   "Default": () => /* binding */ Default,
22534 /* harmony export */   "EqualsOperator": () => /* binding */ EqualsOperator,
22535 /* harmony export */   "NotEqualsOperator": () => /* binding */ NotEqualsOperator,
22536 /* harmony export */   "GreaterEqualsOperator": () => /* binding */ GreaterEqualsOperator,
22537 /* harmony export */   "SmallerEqualsOperator": () => /* binding */ SmallerEqualsOperator,
22538 /* harmony export */   "Ellipsis": () => /* binding */ Ellipsis,
22539 /* harmony export */   "Module": () => /* binding */ Module,
22540 /* harmony export */   "SCSSScanner": () => /* binding */ SCSSScanner
22541 /* harmony export */ });
22542 /* harmony import */ var _cssScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73);
22543 /*---------------------------------------------------------------------------------------------
22544  *  Copyright (c) Microsoft Corporation. All rights reserved.
22545  *  Licensed under the MIT License. See License.txt in the project root for license information.
22546  *--------------------------------------------------------------------------------------------*/
22547
22548 var __extends = (undefined && undefined.__extends) || (function () {
22549     var extendStatics = function (d, b) {
22550         extendStatics = Object.setPrototypeOf ||
22551             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
22552             function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
22553         return extendStatics(d, b);
22554     };
22555     return function (d, b) {
22556         extendStatics(d, b);
22557         function __() { this.constructor = d; }
22558         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
22559     };
22560 })();
22561
22562 var _FSL = '/'.charCodeAt(0);
22563 var _NWL = '\n'.charCodeAt(0);
22564 var _CAR = '\r'.charCodeAt(0);
22565 var _LFD = '\f'.charCodeAt(0);
22566 var _DLR = '$'.charCodeAt(0);
22567 var _HSH = '#'.charCodeAt(0);
22568 var _CUL = '{'.charCodeAt(0);
22569 var _EQS = '='.charCodeAt(0);
22570 var _BNG = '!'.charCodeAt(0);
22571 var _LAN = '<'.charCodeAt(0);
22572 var _RAN = '>'.charCodeAt(0);
22573 var _DOT = '.'.charCodeAt(0);
22574 var _ATS = '@'.charCodeAt(0);
22575 var customTokenValue = _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CustomToken;
22576 var VariableName = customTokenValue++;
22577 var InterpolationFunction = customTokenValue++;
22578 var Default = customTokenValue++;
22579 var EqualsOperator = customTokenValue++;
22580 var NotEqualsOperator = customTokenValue++;
22581 var GreaterEqualsOperator = customTokenValue++;
22582 var SmallerEqualsOperator = customTokenValue++;
22583 var Ellipsis = customTokenValue++;
22584 var Module = customTokenValue++;
22585 var SCSSScanner = /** @class */ (function (_super) {
22586     __extends(SCSSScanner, _super);
22587     function SCSSScanner() {
22588         return _super !== null && _super.apply(this, arguments) || this;
22589     }
22590     SCSSScanner.prototype.scanNext = function (offset) {
22591         // scss variable
22592         if (this.stream.advanceIfChar(_DLR)) {
22593             var content = ['$'];
22594             if (this.ident(content)) {
22595                 return this.finishToken(offset, VariableName, content.join(''));
22596             }
22597             else {
22598                 this.stream.goBackTo(offset);
22599             }
22600         }
22601         // scss: interpolation function #{..})
22602         if (this.stream.advanceIfChars([_HSH, _CUL])) {
22603             return this.finishToken(offset, InterpolationFunction);
22604         }
22605         // operator ==
22606         if (this.stream.advanceIfChars([_EQS, _EQS])) {
22607             return this.finishToken(offset, EqualsOperator);
22608         }
22609         // operator !=
22610         if (this.stream.advanceIfChars([_BNG, _EQS])) {
22611             return this.finishToken(offset, NotEqualsOperator);
22612         }
22613         // operators <, <=
22614         if (this.stream.advanceIfChar(_LAN)) {
22615             if (this.stream.advanceIfChar(_EQS)) {
22616                 return this.finishToken(offset, SmallerEqualsOperator);
22617             }
22618             return this.finishToken(offset, _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Delim);
22619         }
22620         // ooperators >, >=
22621         if (this.stream.advanceIfChar(_RAN)) {
22622             if (this.stream.advanceIfChar(_EQS)) {
22623                 return this.finishToken(offset, GreaterEqualsOperator);
22624             }
22625             return this.finishToken(offset, _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Delim);
22626         }
22627         // ellipis
22628         if (this.stream.advanceIfChars([_DOT, _DOT, _DOT])) {
22629             return this.finishToken(offset, Ellipsis);
22630         }
22631         return _super.prototype.scanNext.call(this, offset);
22632     };
22633     SCSSScanner.prototype.comment = function () {
22634         if (_super.prototype.comment.call(this)) {
22635             return true;
22636         }
22637         if (!this.inURL && this.stream.advanceIfChars([_FSL, _FSL])) {
22638             this.stream.advanceWhileChar(function (ch) {
22639                 switch (ch) {
22640                     case _NWL:
22641                     case _CAR:
22642                     case _LFD:
22643                         return false;
22644                     default:
22645                         return true;
22646                 }
22647             });
22648             return true;
22649         }
22650         else {
22651             return false;
22652         }
22653     };
22654     return SCSSScanner;
22655 }(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.Scanner));
22656
22657
22658
22659 /***/ }),
22660 /* 104 */
22661 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
22662
22663 __webpack_require__.r(__webpack_exports__);
22664 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
22665 /* harmony export */   "SCSSIssueType": () => /* binding */ SCSSIssueType,
22666 /* harmony export */   "SCSSParseError": () => /* binding */ SCSSParseError
22667 /* harmony export */ });
22668 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77);
22669 /*---------------------------------------------------------------------------------------------
22670  *  Copyright (c) Microsoft Corporation. All rights reserved.
22671  *  Licensed under the MIT License. See License.txt in the project root for license information.
22672  *--------------------------------------------------------------------------------------------*/
22673
22674
22675 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_0__.loadMessageBundle();
22676 var SCSSIssueType = /** @class */ (function () {
22677     function SCSSIssueType(id, message) {
22678         this.id = id;
22679         this.message = message;
22680     }
22681     return SCSSIssueType;
22682 }());
22683
22684 var SCSSParseError = {
22685     FromExpected: new SCSSIssueType('scss-fromexpected', localize('expected.from', "'from' expected")),
22686     ThroughOrToExpected: new SCSSIssueType('scss-throughexpected', localize('expected.through', "'through' or 'to' expected")),
22687     InExpected: new SCSSIssueType('scss-fromexpected', localize('expected.in', "'in' expected")),
22688 };
22689
22690
22691 /***/ }),
22692 /* 105 */
22693 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
22694
22695 __webpack_require__.r(__webpack_exports__);
22696 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
22697 /* harmony export */   "SCSSCompletion": () => /* binding */ SCSSCompletion
22698 /* harmony export */ });
22699 /* harmony import */ var _cssCompletion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(85);
22700 /* harmony import */ var _parser_cssNodes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74);
22701 /* harmony import */ var _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(88);
22702 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(77);
22703 /*---------------------------------------------------------------------------------------------
22704  *  Copyright (c) Microsoft Corporation. All rights reserved.
22705  *  Licensed under the MIT License. See License.txt in the project root for license information.
22706  *--------------------------------------------------------------------------------------------*/
22707
22708 var __extends = (undefined && undefined.__extends) || (function () {
22709     var extendStatics = function (d, b) {
22710         extendStatics = Object.setPrototypeOf ||
22711             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
22712             function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
22713         return extendStatics(d, b);
22714     };
22715     return function (d, b) {
22716         extendStatics(d, b);
22717         function __() { this.constructor = d; }
22718         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
22719     };
22720 })();
22721
22722
22723
22724
22725 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_3__.loadMessageBundle();
22726 var SCSSCompletion = /** @class */ (function (_super) {
22727     __extends(SCSSCompletion, _super);
22728     function SCSSCompletion(lsServiceOptions, cssDataManager) {
22729         var _this = _super.call(this, '$', lsServiceOptions, cssDataManager) || this;
22730         addReferencesToDocumentation(SCSSCompletion.scssModuleLoaders);
22731         addReferencesToDocumentation(SCSSCompletion.scssModuleBuiltIns);
22732         return _this;
22733     }
22734     SCSSCompletion.prototype.isImportPathParent = function (type) {
22735         return type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Forward
22736             || type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Use
22737             || _super.prototype.isImportPathParent.call(this, type);
22738     };
22739     SCSSCompletion.prototype.getCompletionForImportPath = function (importPathNode, result) {
22740         var parentType = importPathNode.getParent().type;
22741         if (parentType === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Forward || parentType === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Use) {
22742             for (var _i = 0, _a = SCSSCompletion.scssModuleBuiltIns; _i < _a.length; _i++) {
22743                 var p = _a[_i];
22744                 var item = {
22745                     label: p.label,
22746                     documentation: p.documentation,
22747                     textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TextEdit.replace(this.getCompletionRange(importPathNode), "'" + p.label + "'"),
22748                     kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Module
22749                 };
22750                 result.items.push(item);
22751             }
22752         }
22753         return _super.prototype.getCompletionForImportPath.call(this, importPathNode, result);
22754     };
22755     SCSSCompletion.prototype.createReplaceFunction = function () {
22756         var tabStopCounter = 1;
22757         return function (_match, p1) {
22758             return '\\' + p1 + ': ${' + tabStopCounter++ + ':' + (SCSSCompletion.variableDefaults[p1] || '') + '}';
22759         };
22760     };
22761     SCSSCompletion.prototype.createFunctionProposals = function (proposals, existingNode, sortToEnd, result) {
22762         for (var _i = 0, proposals_1 = proposals; _i < proposals_1.length; _i++) {
22763             var p = proposals_1[_i];
22764             var insertText = p.func.replace(/\[?(\$\w+)\]?/g, this.createReplaceFunction());
22765             var label = p.func.substr(0, p.func.indexOf('('));
22766             var item = {
22767                 label: label,
22768                 detail: p.func,
22769                 documentation: p.desc,
22770                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TextEdit.replace(this.getCompletionRange(existingNode), insertText),
22771                 insertTextFormat: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.InsertTextFormat.Snippet,
22772                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Function
22773             };
22774             if (sortToEnd) {
22775                 item.sortText = 'z';
22776             }
22777             result.items.push(item);
22778         }
22779         return result;
22780     };
22781     SCSSCompletion.prototype.getCompletionsForSelector = function (ruleSet, isNested, result) {
22782         this.createFunctionProposals(SCSSCompletion.selectorFuncs, null, true, result);
22783         return _super.prototype.getCompletionsForSelector.call(this, ruleSet, isNested, result);
22784     };
22785     SCSSCompletion.prototype.getTermProposals = function (entry, existingNode, result) {
22786         var functions = SCSSCompletion.builtInFuncs;
22787         if (entry) {
22788             functions = functions.filter(function (f) { return !f.type || !entry.restrictions || entry.restrictions.indexOf(f.type) !== -1; });
22789         }
22790         this.createFunctionProposals(functions, existingNode, true, result);
22791         return _super.prototype.getTermProposals.call(this, entry, existingNode, result);
22792     };
22793     SCSSCompletion.prototype.getColorProposals = function (entry, existingNode, result) {
22794         this.createFunctionProposals(SCSSCompletion.colorProposals, existingNode, false, result);
22795         return _super.prototype.getColorProposals.call(this, entry, existingNode, result);
22796     };
22797     SCSSCompletion.prototype.getCompletionsForDeclarationProperty = function (declaration, result) {
22798         this.getCompletionForAtDirectives(result);
22799         this.getCompletionsForSelector(null, true, result);
22800         return _super.prototype.getCompletionsForDeclarationProperty.call(this, declaration, result);
22801     };
22802     SCSSCompletion.prototype.getCompletionsForExtendsReference = function (_extendsRef, existingNode, result) {
22803         var symbols = this.getSymbolContext().findSymbolsAtOffset(this.offset, _parser_cssNodes__WEBPACK_IMPORTED_MODULE_1__.ReferenceType.Rule);
22804         for (var _i = 0, symbols_1 = symbols; _i < symbols_1.length; _i++) {
22805             var symbol = symbols_1[_i];
22806             var suggest = {
22807                 label: symbol.name,
22808                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TextEdit.replace(this.getCompletionRange(existingNode), symbol.name),
22809                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Function,
22810             };
22811             result.items.push(suggest);
22812         }
22813         return result;
22814     };
22815     SCSSCompletion.prototype.getCompletionForAtDirectives = function (result) {
22816         var _a;
22817         (_a = result.items).push.apply(_a, SCSSCompletion.scssAtDirectives);
22818         return result;
22819     };
22820     SCSSCompletion.prototype.getCompletionForTopLevel = function (result) {
22821         this.getCompletionForAtDirectives(result);
22822         this.getCompletionForModuleLoaders(result);
22823         _super.prototype.getCompletionForTopLevel.call(this, result);
22824         return result;
22825     };
22826     SCSSCompletion.prototype.getCompletionForModuleLoaders = function (result) {
22827         var _a;
22828         (_a = result.items).push.apply(_a, SCSSCompletion.scssModuleLoaders);
22829         return result;
22830     };
22831     SCSSCompletion.variableDefaults = {
22832         '$red': '1',
22833         '$green': '2',
22834         '$blue': '3',
22835         '$alpha': '1.0',
22836         '$color': '#000000',
22837         '$weight': '0.5',
22838         '$hue': '0',
22839         '$saturation': '0%',
22840         '$lightness': '0%',
22841         '$degrees': '0',
22842         '$amount': '0',
22843         '$string': '""',
22844         '$substring': '"s"',
22845         '$number': '0',
22846         '$limit': '1'
22847     };
22848     SCSSCompletion.colorProposals = [
22849         { func: 'red($color)', desc: localize('scss.builtin.red', 'Gets the red component of a color.') },
22850         { func: 'green($color)', desc: localize('scss.builtin.green', 'Gets the green component of a color.') },
22851         { func: 'blue($color)', desc: localize('scss.builtin.blue', 'Gets the blue component of a color.') },
22852         { func: 'mix($color, $color, [$weight])', desc: localize('scss.builtin.mix', 'Mixes two colors together.') },
22853         { func: 'hue($color)', desc: localize('scss.builtin.hue', 'Gets the hue component of a color.') },
22854         { func: 'saturation($color)', desc: localize('scss.builtin.saturation', 'Gets the saturation component of a color.') },
22855         { func: 'lightness($color)', desc: localize('scss.builtin.lightness', 'Gets the lightness component of a color.') },
22856         { func: 'adjust-hue($color, $degrees)', desc: localize('scss.builtin.adjust-hue', 'Changes the hue of a color.') },
22857         { func: 'lighten($color, $amount)', desc: localize('scss.builtin.lighten', 'Makes a color lighter.') },
22858         { func: 'darken($color, $amount)', desc: localize('scss.builtin.darken', 'Makes a color darker.') },
22859         { func: 'saturate($color, $amount)', desc: localize('scss.builtin.saturate', 'Makes a color more saturated.') },
22860         { func: 'desaturate($color, $amount)', desc: localize('scss.builtin.desaturate', 'Makes a color less saturated.') },
22861         { func: 'grayscale($color)', desc: localize('scss.builtin.grayscale', 'Converts a color to grayscale.') },
22862         { func: 'complement($color)', desc: localize('scss.builtin.complement', 'Returns the complement of a color.') },
22863         { func: 'invert($color)', desc: localize('scss.builtin.invert', 'Returns the inverse of a color.') },
22864         { func: 'alpha($color)', desc: localize('scss.builtin.alpha', 'Gets the opacity component of a color.') },
22865         { func: 'opacity($color)', desc: 'Gets the alpha component (opacity) of a color.' },
22866         { func: 'rgba($color, $alpha)', desc: localize('scss.builtin.rgba', 'Changes the alpha component for a color.') },
22867         { func: 'opacify($color, $amount)', desc: localize('scss.builtin.opacify', 'Makes a color more opaque.') },
22868         { func: 'fade-in($color, $amount)', desc: localize('scss.builtin.fade-in', 'Makes a color more opaque.') },
22869         { func: 'transparentize($color, $amount)', desc: localize('scss.builtin.transparentize', 'Makes a color more transparent.') },
22870         { func: 'fade-out($color, $amount)', desc: localize('scss.builtin.fade-out', 'Makes a color more transparent.') },
22871         { func: 'adjust-color($color, [$red], [$green], [$blue], [$hue], [$saturation], [$lightness], [$alpha])', desc: localize('scss.builtin.adjust-color', 'Increases or decreases one or more components of a color.') },
22872         { func: 'scale-color($color, [$red], [$green], [$blue], [$saturation], [$lightness], [$alpha])', desc: localize('scss.builtin.scale-color', 'Fluidly scales one or more properties of a color.') },
22873         { func: 'change-color($color, [$red], [$green], [$blue], [$hue], [$saturation], [$lightness], [$alpha])', desc: localize('scss.builtin.change-color', 'Changes one or more properties of a color.') },
22874         { func: 'ie-hex-str($color)', desc: localize('scss.builtin.ie-hex-str', 'Converts a color into the format understood by IE filters.') }
22875     ];
22876     SCSSCompletion.selectorFuncs = [
22877         { func: 'selector-nest($selectors…)', desc: localize('scss.builtin.selector-nest', 'Nests selector beneath one another like they would be nested in the stylesheet.') },
22878         { func: 'selector-append($selectors…)', desc: localize('scss.builtin.selector-append', 'Appends selectors to one another without spaces in between.') },
22879         { func: 'selector-extend($selector, $extendee, $extender)', desc: localize('scss.builtin.selector-extend', 'Extends $extendee with $extender within $selector.') },
22880         { func: 'selector-replace($selector, $original, $replacement)', desc: localize('scss.builtin.selector-replace', 'Replaces $original with $replacement within $selector.') },
22881         { func: 'selector-unify($selector1, $selector2)', desc: localize('scss.builtin.selector-unify', 'Unifies two selectors to produce a selector that matches elements matched by both.') },
22882         { func: 'is-superselector($super, $sub)', desc: localize('scss.builtin.is-superselector', 'Returns whether $super matches all the elements $sub does, and possibly more.') },
22883         { func: 'simple-selectors($selector)', desc: localize('scss.builtin.simple-selectors', 'Returns the simple selectors that comprise a compound selector.') },
22884         { func: 'selector-parse($selector)', desc: localize('scss.builtin.selector-parse', 'Parses a selector into the format returned by &.') }
22885     ];
22886     SCSSCompletion.builtInFuncs = [
22887         { func: 'unquote($string)', desc: localize('scss.builtin.unquote', 'Removes quotes from a string.') },
22888         { func: 'quote($string)', desc: localize('scss.builtin.quote', 'Adds quotes to a string.') },
22889         { func: 'str-length($string)', desc: localize('scss.builtin.str-length', 'Returns the number of characters in a string.') },
22890         { func: 'str-insert($string, $insert, $index)', desc: localize('scss.builtin.str-insert', 'Inserts $insert into $string at $index.') },
22891         { func: 'str-index($string, $substring)', desc: localize('scss.builtin.str-index', 'Returns the index of the first occurance of $substring in $string.') },
22892         { func: 'str-slice($string, $start-at, [$end-at])', desc: localize('scss.builtin.str-slice', 'Extracts a substring from $string.') },
22893         { func: 'to-upper-case($string)', desc: localize('scss.builtin.to-upper-case', 'Converts a string to upper case.') },
22894         { func: 'to-lower-case($string)', desc: localize('scss.builtin.to-lower-case', 'Converts a string to lower case.') },
22895         { func: 'percentage($number)', desc: localize('scss.builtin.percentage', 'Converts a unitless number to a percentage.'), type: 'percentage' },
22896         { func: 'round($number)', desc: localize('scss.builtin.round', 'Rounds a number to the nearest whole number.') },
22897         { func: 'ceil($number)', desc: localize('scss.builtin.ceil', 'Rounds a number up to the next whole number.') },
22898         { func: 'floor($number)', desc: localize('scss.builtin.floor', 'Rounds a number down to the previous whole number.') },
22899         { func: 'abs($number)', desc: localize('scss.builtin.abs', 'Returns the absolute value of a number.') },
22900         { func: 'min($numbers)', desc: localize('scss.builtin.min', 'Finds the minimum of several numbers.') },
22901         { func: 'max($numbers)', desc: localize('scss.builtin.max', 'Finds the maximum of several numbers.') },
22902         { func: 'random([$limit])', desc: localize('scss.builtin.random', 'Returns a random number.') },
22903         { func: 'length($list)', desc: localize('scss.builtin.length', 'Returns the length of a list.') },
22904         { func: 'nth($list, $n)', desc: localize('scss.builtin.nth', 'Returns a specific item in a list.') },
22905         { func: 'set-nth($list, $n, $value)', desc: localize('scss.builtin.set-nth', 'Replaces the nth item in a list.') },
22906         { func: 'join($list1, $list2, [$separator])', desc: localize('scss.builtin.join', 'Joins together two lists into one.') },
22907         { func: 'append($list1, $val, [$separator])', desc: localize('scss.builtin.append', 'Appends a single value onto the end of a list.') },
22908         { func: 'zip($lists)', desc: localize('scss.builtin.zip', 'Combines several lists into a single multidimensional list.') },
22909         { func: 'index($list, $value)', desc: localize('scss.builtin.index', 'Returns the position of a value within a list.') },
22910         { func: 'list-separator(#list)', desc: localize('scss.builtin.list-separator', 'Returns the separator of a list.') },
22911         { func: 'map-get($map, $key)', desc: localize('scss.builtin.map-get', 'Returns the value in a map associated with a given key.') },
22912         { func: 'map-merge($map1, $map2)', desc: localize('scss.builtin.map-merge', 'Merges two maps together into a new map.') },
22913         { func: 'map-remove($map, $keys)', desc: localize('scss.builtin.map-remove', 'Returns a new map with keys removed.') },
22914         { func: 'map-keys($map)', desc: localize('scss.builtin.map-keys', 'Returns a list of all keys in a map.') },
22915         { func: 'map-values($map)', desc: localize('scss.builtin.map-values', 'Returns a list of all values in a map.') },
22916         { func: 'map-has-key($map, $key)', desc: localize('scss.builtin.map-has-key', 'Returns whether a map has a value associated with a given key.') },
22917         { func: 'keywords($args)', desc: localize('scss.builtin.keywords', 'Returns the keywords passed to a function that takes variable arguments.') },
22918         { func: 'feature-exists($feature)', desc: localize('scss.builtin.feature-exists', 'Returns whether a feature exists in the current Sass runtime.') },
22919         { func: 'variable-exists($name)', desc: localize('scss.builtin.variable-exists', 'Returns whether a variable with the given name exists in the current scope.') },
22920         { func: 'global-variable-exists($name)', desc: localize('scss.builtin.global-variable-exists', 'Returns whether a variable with the given name exists in the global scope.') },
22921         { func: 'function-exists($name)', desc: localize('scss.builtin.function-exists', 'Returns whether a function with the given name exists.') },
22922         { func: 'mixin-exists($name)', desc: localize('scss.builtin.mixin-exists', 'Returns whether a mixin with the given name exists.') },
22923         { func: 'inspect($value)', desc: localize('scss.builtin.inspect', 'Returns the string representation of a value as it would be represented in Sass.') },
22924         { func: 'type-of($value)', desc: localize('scss.builtin.type-of', 'Returns the type of a value.') },
22925         { func: 'unit($number)', desc: localize('scss.builtin.unit', 'Returns the unit(s) associated with a number.') },
22926         { func: 'unitless($number)', desc: localize('scss.builtin.unitless', 'Returns whether a number has units.') },
22927         { func: 'comparable($number1, $number2)', desc: localize('scss.builtin.comparable', 'Returns whether two numbers can be added, subtracted, or compared.') },
22928         { func: 'call($name, $args…)', desc: localize('scss.builtin.call', 'Dynamically calls a Sass function.') }
22929     ];
22930     SCSSCompletion.scssAtDirectives = [
22931         {
22932             label: "@extend",
22933             documentation: localize("scss.builtin.@extend", "Inherits the styles of another selector."),
22934             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
22935         },
22936         {
22937             label: "@at-root",
22938             documentation: localize("scss.builtin.@at-root", "Causes one or more rules to be emitted at the root of the document."),
22939             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
22940         },
22941         {
22942             label: "@debug",
22943             documentation: localize("scss.builtin.@debug", "Prints the value of an expression to the standard error output stream. Useful for debugging complicated Sass files."),
22944             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
22945         },
22946         {
22947             label: "@warn",
22948             documentation: localize("scss.builtin.@warn", "Prints the value of an expression to the standard error output stream. Useful for libraries that need to warn users of deprecations or recovering from minor mixin usage mistakes. Warnings can be turned off with the `--quiet` command-line option or the `:quiet` Sass option."),
22949             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
22950         },
22951         {
22952             label: "@error",
22953             documentation: localize("scss.builtin.@error", "Throws the value of an expression as a fatal error with stack trace. Useful for validating arguments to mixins and functions."),
22954             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
22955         },
22956         {
22957             label: "@if",
22958             documentation: localize("scss.builtin.@if", "Includes the body if the expression does not evaluate to `false` or `null`."),
22959             insertText: "@if ${1:expr} {\n\t$0\n}",
22960             insertTextFormat: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.InsertTextFormat.Snippet,
22961             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
22962         },
22963         {
22964             label: "@for",
22965             documentation: localize("scss.builtin.@for", "For loop that repeatedly outputs a set of styles for each `$var` in the `from/through` or `from/to` clause."),
22966             insertText: "@for \\$${1:var} from ${2:start} ${3|to,through|} ${4:end} {\n\t$0\n}",
22967             insertTextFormat: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.InsertTextFormat.Snippet,
22968             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
22969         },
22970         {
22971             label: "@each",
22972             documentation: localize("scss.builtin.@each", "Each loop that sets `$var` to each item in the list or map, then outputs the styles it contains using that value of `$var`."),
22973             insertText: "@each \\$${1:var} in ${2:list} {\n\t$0\n}",
22974             insertTextFormat: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.InsertTextFormat.Snippet,
22975             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
22976         },
22977         {
22978             label: "@while",
22979             documentation: localize("scss.builtin.@while", "While loop that takes an expression and repeatedly outputs the nested styles until the statement evaluates to `false`."),
22980             insertText: "@while ${1:condition} {\n\t$0\n}",
22981             insertTextFormat: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.InsertTextFormat.Snippet,
22982             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
22983         },
22984         {
22985             label: "@mixin",
22986             documentation: localize("scss.builtin.@mixin", "Defines styles that can be re-used throughout the stylesheet with `@include`."),
22987             insertText: "@mixin ${1:name} {\n\t$0\n}",
22988             insertTextFormat: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.InsertTextFormat.Snippet,
22989             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
22990         },
22991         {
22992             label: "@include",
22993             documentation: localize("scss.builtin.@include", "Includes the styles defined by another mixin into the current rule."),
22994             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
22995         },
22996         {
22997             label: "@function",
22998             documentation: localize("scss.builtin.@function", "Defines complex operations that can be re-used throughout stylesheets."),
22999             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
23000         }
23001     ];
23002     SCSSCompletion.scssModuleLoaders = [
23003         {
23004             label: "@use",
23005             documentation: localize("scss.builtin.@use", "Loads mixins, functions, and variables from other Sass stylesheets as 'modules', and combines CSS from multiple stylesheets together."),
23006             references: [{ name: 'Sass documentation', url: 'https://sass-lang.com/documentation/at-rules/use' }],
23007             insertText: "@use '$0';",
23008             insertTextFormat: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.InsertTextFormat.Snippet,
23009             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
23010         },
23011         {
23012             label: "@forward",
23013             documentation: localize("scss.builtin.@forward", "Loads a Sass stylesheet and makes its mixins, functions, and variables available when this stylesheet is loaded with the @use rule."),
23014             references: [{ name: 'Sass documentation', url: 'https://sass-lang.com/documentation/at-rules/forward' }],
23015             insertText: "@forward '$0';",
23016             insertTextFormat: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.InsertTextFormat.Snippet,
23017             kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.CompletionItemKind.Keyword
23018         },
23019     ];
23020     SCSSCompletion.scssModuleBuiltIns = [
23021         {
23022             label: 'sass:math',
23023             documentation: localize('scss.builtin.sass:math', 'Provides functions that operate on numbers.'),
23024             references: [{ name: 'Sass documentation', url: 'https://sass-lang.com/documentation/modules/math' }]
23025         },
23026         {
23027             label: 'sass:string',
23028             documentation: localize('scss.builtin.sass:string', 'Makes it easy to combine, search, or split apart strings.'),
23029             references: [{ name: 'Sass documentation', url: 'https://sass-lang.com/documentation/modules/string' }]
23030         },
23031         {
23032             label: 'sass:color',
23033             documentation: localize('scss.builtin.sass:color', 'Generates new colors based on existing ones, making it easy to build color themes.'),
23034             references: [{ name: 'Sass documentation', url: 'https://sass-lang.com/documentation/modules/color' }]
23035         },
23036         {
23037             label: 'sass:list',
23038             documentation: localize('scss.builtin.sass:list', 'Lets you access and modify values in lists.'),
23039             references: [{ name: 'Sass documentation', url: 'https://sass-lang.com/documentation/modules/list' }]
23040         },
23041         {
23042             label: 'sass:map',
23043             documentation: localize('scss.builtin.sass:map', 'Makes it possible to look up the value associated with a key in a map, and much more.'),
23044             references: [{ name: 'Sass documentation', url: 'https://sass-lang.com/documentation/modules/map' }]
23045         },
23046         {
23047             label: 'sass:selector',
23048             documentation: localize('scss.builtin.sass:selector', 'Provides access to Sass’s powerful selector engine.'),
23049             references: [{ name: 'Sass documentation', url: 'https://sass-lang.com/documentation/modules/selector' }]
23050         },
23051         {
23052             label: 'sass:meta',
23053             documentation: localize('scss.builtin.sass:meta', 'Exposes the details of Sass’s inner workings.'),
23054             references: [{ name: 'Sass documentation', url: 'https://sass-lang.com/documentation/modules/meta' }]
23055         },
23056     ];
23057     return SCSSCompletion;
23058 }(_cssCompletion__WEBPACK_IMPORTED_MODULE_0__.CSSCompletion));
23059
23060 /**
23061  * Todo @Pine: Remove this and do it through custom data
23062  */
23063 function addReferencesToDocumentation(items) {
23064     items.forEach(function (i) {
23065         if (i.documentation && i.references && i.references.length > 0) {
23066             var markdownDoc = typeof i.documentation === 'string'
23067                 ? { kind: 'markdown', value: i.documentation }
23068                 : { kind: 'markdown', value: i.documentation.value };
23069             markdownDoc.value += '\n\n';
23070             markdownDoc.value += i.references
23071                 .map(function (r) {
23072                 return "[" + r.name + "](" + r.url + ")";
23073             })
23074                 .join(' | ');
23075             i.documentation = markdownDoc;
23076         }
23077     });
23078 }
23079
23080
23081 /***/ }),
23082 /* 106 */
23083 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
23084
23085 __webpack_require__.r(__webpack_exports__);
23086 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23087 /* harmony export */   "LESSParser": () => /* binding */ LESSParser
23088 /* harmony export */ });
23089 /* harmony import */ var _lessScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(107);
23090 /* harmony import */ var _cssScanner__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73);
23091 /* harmony import */ var _cssParser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(72);
23092 /* harmony import */ var _cssNodes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74);
23093 /* harmony import */ var _cssErrors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(76);
23094 /*---------------------------------------------------------------------------------------------
23095  *  Copyright (c) Microsoft Corporation. All rights reserved.
23096  *  Licensed under the MIT License. See License.txt in the project root for license information.
23097  *--------------------------------------------------------------------------------------------*/
23098
23099 var __extends = (undefined && undefined.__extends) || (function () {
23100     var extendStatics = function (d, b) {
23101         extendStatics = Object.setPrototypeOf ||
23102             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
23103             function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
23104         return extendStatics(d, b);
23105     };
23106     return function (d, b) {
23107         extendStatics(d, b);
23108         function __() { this.constructor = d; }
23109         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
23110     };
23111 })();
23112
23113
23114
23115
23116
23117 /// <summary>
23118 /// A parser for LESS
23119 /// http://lesscss.org/
23120 /// </summary>
23121 var LESSParser = /** @class */ (function (_super) {
23122     __extends(LESSParser, _super);
23123     function LESSParser() {
23124         return _super.call(this, new _lessScanner__WEBPACK_IMPORTED_MODULE_0__.LESSScanner()) || this;
23125     }
23126     LESSParser.prototype._parseStylesheetStatement = function (isNested) {
23127         if (isNested === void 0) { isNested = false; }
23128         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.AtKeyword)) {
23129             return this._parseVariableDeclaration()
23130                 || this._parsePlugin()
23131                 || _super.prototype._parseStylesheetAtStatement.call(this, isNested);
23132         }
23133         return this._tryParseMixinDeclaration()
23134             || this._tryParseMixinReference()
23135             || this._parseFunction()
23136             || this._parseRuleset(true);
23137     };
23138     LESSParser.prototype._parseImport = function () {
23139         if (!this.peekKeyword('@import') && !this.peekKeyword('@import-once') /* deprecated in less 1.4.1 */) {
23140             return null;
23141         }
23142         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Import);
23143         this.consumeToken();
23144         // less 1.4.1: @import (css) "lib"
23145         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
23146             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Ident)) {
23147                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.IdentifierExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon]);
23148             }
23149             do {
23150                 if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
23151                     break;
23152                 }
23153             } while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Ident));
23154             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23155                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.RightParenthesisExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon]);
23156             }
23157         }
23158         if (!node.addChild(this._parseURILiteral()) && !node.addChild(this._parseStringLiteral())) {
23159             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.URIOrStringExpected, [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon]);
23160         }
23161         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon) && !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOF)) {
23162             node.setMedialist(this._parseMediaQueryList());
23163         }
23164         return this.finish(node);
23165     };
23166     LESSParser.prototype._parsePlugin = function () {
23167         if (!this.peekKeyword('@plugin')) {
23168             return null;
23169         }
23170         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.Plugin);
23171         this.consumeToken(); // @import
23172         if (!node.addChild(this._parseStringLiteral())) {
23173             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.StringLiteralExpected);
23174         }
23175         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon)) {
23176             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.SemiColonExpected);
23177         }
23178         return this.finish(node);
23179     };
23180     LESSParser.prototype._parseMediaQuery = function (resyncStopToken) {
23181         var node = _super.prototype._parseMediaQuery.call(this, resyncStopToken);
23182         if (!node) {
23183             var node_1 = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.MediaQuery);
23184             if (node_1.addChild(this._parseVariable())) {
23185                 return this.finish(node_1);
23186             }
23187             return null;
23188         }
23189         return node;
23190     };
23191     LESSParser.prototype._parseMediaDeclaration = function (isNested) {
23192         if (isNested === void 0) { isNested = false; }
23193         return this._tryParseRuleset(isNested)
23194             || this._tryToParseDeclaration()
23195             || this._tryParseMixinDeclaration()
23196             || this._tryParseMixinReference()
23197             || this._parseDetachedRuleSetMixin()
23198             || this._parseStylesheetStatement(isNested);
23199     };
23200     LESSParser.prototype._parseMediaFeatureName = function () {
23201         return this._parseIdent() || this._parseVariable();
23202     };
23203     LESSParser.prototype._parseVariableDeclaration = function (panic) {
23204         if (panic === void 0) { panic = []; }
23205         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.VariableDeclaration);
23206         var mark = this.mark();
23207         if (!node.setVariable(this._parseVariable(true))) {
23208             return null;
23209         }
23210         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Colon)) {
23211             if (this.prevToken) {
23212                 node.colonPosition = this.prevToken.offset;
23213             }
23214             if (node.setValue(this._parseDetachedRuleSet())) {
23215                 node.needsSemicolon = false;
23216             }
23217             else if (!node.setValue(this._parseExpr())) {
23218                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.VariableValueExpected, [], panic);
23219             }
23220             node.addChild(this._parsePrio());
23221         }
23222         else {
23223             this.restoreAtMark(mark);
23224             return null; // at keyword, but no ':', not a variable declaration but some at keyword
23225         }
23226         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon)) {
23227             node.semicolonPosition = this.token.offset; // not part of the declaration, but useful information for code assist
23228         }
23229         return this.finish(node);
23230     };
23231     LESSParser.prototype._parseDetachedRuleSet = function () {
23232         var mark = this.mark();
23233         // "Anonymous mixin" used in each() and possibly a generic type in the future
23234         if (this.peekDelim('#') || this.peekDelim('.')) {
23235             this.consumeToken();
23236             if (!this.hasWhitespace() && this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
23237                 var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.MixinDeclaration);
23238                 if (node.getParameters().addChild(this._parseMixinParameter())) {
23239                     while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma) || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon)) {
23240                         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23241                             break;
23242                         }
23243                         if (!node.getParameters().addChild(this._parseMixinParameter())) {
23244                             this.markError(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.IdentifierExpected, [], [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR]);
23245                         }
23246                     }
23247                 }
23248                 if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23249                     this.restoreAtMark(mark);
23250                     return null;
23251                 }
23252             }
23253             else {
23254                 this.restoreAtMark(mark);
23255                 return null;
23256             }
23257         }
23258         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyL)) {
23259             return null;
23260         }
23261         var content = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.BodyDeclaration);
23262         this._parseBody(content, this._parseDetachedRuleSetBody.bind(this));
23263         return this.finish(content);
23264     };
23265     LESSParser.prototype._parseDetachedRuleSetBody = function () {
23266         return this._tryParseKeyframeSelector() || this._parseRuleSetDeclaration();
23267     };
23268     LESSParser.prototype._addLookupChildren = function (node) {
23269         if (!node.addChild(this._parseLookupValue())) {
23270             return false;
23271         }
23272         var expectsValue = false;
23273         while (true) {
23274             if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.BracketL)) {
23275                 expectsValue = true;
23276             }
23277             if (!node.addChild(this._parseLookupValue())) {
23278                 break;
23279             }
23280             expectsValue = false;
23281         }
23282         return !expectsValue;
23283     };
23284     LESSParser.prototype._parseLookupValue = function () {
23285         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Node);
23286         var mark = this.mark();
23287         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.BracketL)) {
23288             this.restoreAtMark(mark);
23289             return null;
23290         }
23291         if (((node.addChild(this._parseVariable(false, true)) ||
23292             node.addChild(this._parsePropertyIdentifier())) &&
23293             this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.BracketR)) || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.BracketR)) {
23294             return node;
23295         }
23296         this.restoreAtMark(mark);
23297         return null;
23298     };
23299     LESSParser.prototype._parseVariable = function (declaration, insideLookup) {
23300         if (declaration === void 0) { declaration = false; }
23301         if (insideLookup === void 0) { insideLookup = false; }
23302         var isPropertyReference = !declaration && this.peekDelim('$');
23303         if (!this.peekDelim('@') && !isPropertyReference && !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.AtKeyword)) {
23304             return null;
23305         }
23306         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Variable);
23307         var mark = this.mark();
23308         while (this.acceptDelim('@') || (!declaration && this.acceptDelim('$'))) {
23309             if (this.hasWhitespace()) {
23310                 this.restoreAtMark(mark);
23311                 return null;
23312             }
23313         }
23314         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.AtKeyword) && !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Ident)) {
23315             this.restoreAtMark(mark);
23316             return null;
23317         }
23318         if (!insideLookup && this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.BracketL)) {
23319             if (!this._addLookupChildren(node)) {
23320                 this.restoreAtMark(mark);
23321                 return null;
23322             }
23323         }
23324         return node;
23325     };
23326     LESSParser.prototype._parseTermExpression = function () {
23327         return this._parseVariable() ||
23328             this._parseEscaped() ||
23329             _super.prototype._parseTermExpression.call(this) || // preference for colors before mixin references
23330             this._tryParseMixinReference(false);
23331     };
23332     LESSParser.prototype._parseEscaped = function () {
23333         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.EscapedJavaScript) ||
23334             this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.BadEscapedJavaScript)) {
23335             var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.EscapedValue);
23336             this.consumeToken();
23337             return this.finish(node);
23338         }
23339         if (this.peekDelim('~')) {
23340             var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.EscapedValue);
23341             this.consumeToken();
23342             if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.String) || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.EscapedJavaScript)) {
23343                 return this.finish(node);
23344             }
23345             else {
23346                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.TermExpected);
23347             }
23348         }
23349         return null;
23350     };
23351     LESSParser.prototype._parseOperator = function () {
23352         var node = this._parseGuardOperator();
23353         if (node) {
23354             return node;
23355         }
23356         else {
23357             return _super.prototype._parseOperator.call(this);
23358         }
23359     };
23360     LESSParser.prototype._parseGuardOperator = function () {
23361         if (this.peekDelim('>')) {
23362             var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.Operator);
23363             this.consumeToken();
23364             this.acceptDelim('=');
23365             return node;
23366         }
23367         else if (this.peekDelim('=')) {
23368             var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.Operator);
23369             this.consumeToken();
23370             this.acceptDelim('<');
23371             return node;
23372         }
23373         else if (this.peekDelim('<')) {
23374             var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.Operator);
23375             this.consumeToken();
23376             this.acceptDelim('=');
23377             return node;
23378         }
23379         return null;
23380     };
23381     LESSParser.prototype._parseRuleSetDeclaration = function () {
23382         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.AtKeyword)) {
23383             return this._parseKeyframe()
23384                 || this._parseMedia(true)
23385                 || this._parseImport()
23386                 || this._parseSupports(true) // @supports
23387                 || this._parseDetachedRuleSetMixin() // less detached ruleset mixin
23388                 || this._parseVariableDeclaration() // Variable declarations
23389                 || _super.prototype._parseRuleSetDeclarationAtStatement.call(this);
23390         }
23391         return this._tryParseMixinDeclaration()
23392             || this._tryParseRuleset(true) // nested ruleset
23393             || this._tryParseMixinReference() // less mixin reference
23394             || this._parseFunction()
23395             || this._parseExtend() // less extend declaration
23396             || _super.prototype._parseRuleSetDeclaration.call(this); // try css ruleset declaration as the last option
23397     };
23398     LESSParser.prototype._parseKeyframeIdent = function () {
23399         return this._parseIdent([_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Keyframe]) || this._parseVariable();
23400     };
23401     LESSParser.prototype._parseKeyframeSelector = function () {
23402         return this._parseDetachedRuleSetMixin() // less detached ruleset mixin
23403             || _super.prototype._parseKeyframeSelector.call(this);
23404     };
23405     LESSParser.prototype._parseSimpleSelectorBody = function () {
23406         return this._parseSelectorCombinator() || _super.prototype._parseSimpleSelectorBody.call(this);
23407     };
23408     LESSParser.prototype._parseSelector = function (isNested) {
23409         // CSS Guards
23410         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Selector);
23411         var hasContent = false;
23412         if (isNested) {
23413             // nested selectors can start with a combinator
23414             hasContent = node.addChild(this._parseCombinator());
23415         }
23416         while (node.addChild(this._parseSimpleSelector())) {
23417             hasContent = true;
23418             var mark = this.mark();
23419             if (node.addChild(this._parseGuard()) && this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyL)) {
23420                 break;
23421             }
23422             this.restoreAtMark(mark);
23423             node.addChild(this._parseCombinator()); // optional
23424         }
23425         return hasContent ? this.finish(node) : null;
23426     };
23427     LESSParser.prototype._parseSelectorCombinator = function () {
23428         if (this.peekDelim('&')) {
23429             var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.SelectorCombinator);
23430             this.consumeToken();
23431             while (!this.hasWhitespace() && (this.acceptDelim('-') || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Num) || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Dimension) || node.addChild(this._parseIdent()) || this.acceptDelim('&'))) {
23432                 //  support &-foo
23433             }
23434             return this.finish(node);
23435         }
23436         return null;
23437     };
23438     LESSParser.prototype._parseSelectorIdent = function () {
23439         if (!this.peekInterpolatedIdent()) {
23440             return null;
23441         }
23442         var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.SelectorInterpolation);
23443         var hasContent = this._acceptInterpolatedIdent(node);
23444         return hasContent ? this.finish(node) : null;
23445     };
23446     LESSParser.prototype._parsePropertyIdentifier = function (inLookup) {
23447         if (inLookup === void 0) { inLookup = false; }
23448         var propertyRegex = /^[\w-]+/;
23449         if (!this.peekInterpolatedIdent() && !this.peekRegExp(this.token.type, propertyRegex)) {
23450             return null;
23451         }
23452         var mark = this.mark();
23453         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Identifier);
23454         node.isCustomProperty = this.acceptDelim('-') && this.acceptDelim('-');
23455         var childAdded = false;
23456         if (!inLookup) {
23457             if (node.isCustomProperty) {
23458                 childAdded = this._acceptInterpolatedIdent(node);
23459             }
23460             else {
23461                 childAdded = this._acceptInterpolatedIdent(node, propertyRegex);
23462             }
23463         }
23464         else {
23465             if (node.isCustomProperty) {
23466                 childAdded = node.addChild(this._parseIdent());
23467             }
23468             else {
23469                 childAdded = node.addChild(this._parseRegexp(propertyRegex));
23470             }
23471         }
23472         if (!childAdded) {
23473             this.restoreAtMark(mark);
23474             return null;
23475         }
23476         if (!inLookup && !this.hasWhitespace()) {
23477             this.acceptDelim('+');
23478             if (!this.hasWhitespace()) {
23479                 this.acceptIdent('_');
23480             }
23481         }
23482         return this.finish(node);
23483     };
23484     LESSParser.prototype.peekInterpolatedIdent = function () {
23485         return this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Ident) ||
23486             this.peekDelim('@') ||
23487             this.peekDelim('$') ||
23488             this.peekDelim('-');
23489     };
23490     LESSParser.prototype._acceptInterpolatedIdent = function (node, identRegex) {
23491         var _this = this;
23492         var hasContent = false;
23493         var indentInterpolation = function () {
23494             var pos = _this.mark();
23495             if (_this.acceptDelim('-')) {
23496                 if (!_this.hasWhitespace()) {
23497                     _this.acceptDelim('-');
23498                 }
23499                 if (_this.hasWhitespace()) {
23500                     _this.restoreAtMark(pos);
23501                     return null;
23502                 }
23503             }
23504             return _this._parseInterpolation();
23505         };
23506         var accept = identRegex ?
23507             function () { return _this.acceptRegexp(identRegex); } :
23508             function () { return _this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Ident); };
23509         while (accept() ||
23510             node.addChild(this._parseInterpolation() ||
23511                 this.try(indentInterpolation))) {
23512             hasContent = true;
23513             if (this.hasWhitespace()) {
23514                 break;
23515             }
23516         }
23517         return hasContent;
23518     };
23519     LESSParser.prototype._parseInterpolation = function () {
23520         // @{name} Variable or
23521         // ${name} Property
23522         var mark = this.mark();
23523         if (this.peekDelim('@') || this.peekDelim('$')) {
23524             var node = this.createNode(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.NodeType.Interpolation);
23525             this.consumeToken();
23526             if (this.hasWhitespace() || !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyL)) {
23527                 this.restoreAtMark(mark);
23528                 return null;
23529             }
23530             if (!node.addChild(this._parseIdent())) {
23531                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.IdentifierExpected);
23532             }
23533             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR)) {
23534                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.RightCurlyExpected);
23535             }
23536             return this.finish(node);
23537         }
23538         return null;
23539     };
23540     LESSParser.prototype._tryParseMixinDeclaration = function () {
23541         var mark = this.mark();
23542         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.MixinDeclaration);
23543         if (!node.setIdentifier(this._parseMixinDeclarationIdentifier()) || !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
23544             this.restoreAtMark(mark);
23545             return null;
23546         }
23547         if (node.getParameters().addChild(this._parseMixinParameter())) {
23548             while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma) || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon)) {
23549                 if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23550                     break;
23551                 }
23552                 if (!node.getParameters().addChild(this._parseMixinParameter())) {
23553                     this.markError(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.IdentifierExpected, [], [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR]);
23554                 }
23555             }
23556         }
23557         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23558             this.restoreAtMark(mark);
23559             return null;
23560         }
23561         node.setGuard(this._parseGuard());
23562         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyL)) {
23563             this.restoreAtMark(mark);
23564             return null;
23565         }
23566         return this._parseBody(node, this._parseMixInBodyDeclaration.bind(this));
23567     };
23568     LESSParser.prototype._parseMixInBodyDeclaration = function () {
23569         return this._parseFontFace() || this._parseRuleSetDeclaration();
23570     };
23571     LESSParser.prototype._parseMixinDeclarationIdentifier = function () {
23572         var identifier;
23573         if (this.peekDelim('#') || this.peekDelim('.')) {
23574             identifier = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Identifier);
23575             this.consumeToken(); // # or .
23576             if (this.hasWhitespace() || !identifier.addChild(this._parseIdent())) {
23577                 return null;
23578             }
23579         }
23580         else if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Hash)) {
23581             identifier = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Identifier);
23582             this.consumeToken(); // TokenType.Hash
23583         }
23584         else {
23585             return null;
23586         }
23587         identifier.referenceTypes = [_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Mixin];
23588         return this.finish(identifier);
23589     };
23590     LESSParser.prototype._parsePseudo = function () {
23591         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Colon)) {
23592             return null;
23593         }
23594         var mark = this.mark();
23595         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ExtendsReference);
23596         this.consumeToken(); // :
23597         if (this.acceptIdent('extend')) {
23598             return this._completeExtends(node);
23599         }
23600         this.restoreAtMark(mark);
23601         return _super.prototype._parsePseudo.call(this);
23602     };
23603     LESSParser.prototype._parseExtend = function () {
23604         if (!this.peekDelim('&')) {
23605             return null;
23606         }
23607         var mark = this.mark();
23608         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ExtendsReference);
23609         this.consumeToken(); // &
23610         if (this.hasWhitespace() || !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Colon) || !this.acceptIdent('extend')) {
23611             this.restoreAtMark(mark);
23612             return null;
23613         }
23614         return this._completeExtends(node);
23615     };
23616     LESSParser.prototype._completeExtends = function (node) {
23617         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
23618             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.LeftParenthesisExpected);
23619         }
23620         var selectors = node.getSelectors();
23621         if (!selectors.addChild(this._parseSelector(true))) {
23622             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.SelectorExpected);
23623         }
23624         while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
23625             if (!selectors.addChild(this._parseSelector(true))) {
23626                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.SelectorExpected);
23627             }
23628         }
23629         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23630             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.RightParenthesisExpected);
23631         }
23632         return this.finish(node);
23633     };
23634     LESSParser.prototype._parseDetachedRuleSetMixin = function () {
23635         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.AtKeyword)) {
23636             return null;
23637         }
23638         var mark = this.mark();
23639         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.MixinReference);
23640         if (node.addChild(this._parseVariable(true)) && (this.hasWhitespace() || !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL))) {
23641             this.restoreAtMark(mark);
23642             return null;
23643         }
23644         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23645             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.RightParenthesisExpected);
23646         }
23647         return this.finish(node);
23648     };
23649     LESSParser.prototype._tryParseMixinReference = function (atRoot) {
23650         if (atRoot === void 0) { atRoot = true; }
23651         var mark = this.mark();
23652         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.MixinReference);
23653         var identifier = this._parseMixinDeclarationIdentifier();
23654         while (identifier) {
23655             this.acceptDelim('>');
23656             var nextId = this._parseMixinDeclarationIdentifier();
23657             if (nextId) {
23658                 node.getNamespaces().addChild(identifier);
23659                 identifier = nextId;
23660             }
23661             else {
23662                 break;
23663             }
23664         }
23665         if (!node.setIdentifier(identifier)) {
23666             this.restoreAtMark(mark);
23667             return null;
23668         }
23669         var hasArguments = false;
23670         if (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
23671             hasArguments = true;
23672             if (node.getArguments().addChild(this._parseMixinArgument())) {
23673                 while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma) || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon)) {
23674                     if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23675                         break;
23676                     }
23677                     if (!node.getArguments().addChild(this._parseMixinArgument())) {
23678                         return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.ExpressionExpected);
23679                     }
23680                 }
23681             }
23682             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23683                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.RightParenthesisExpected);
23684             }
23685             identifier.referenceTypes = [_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Mixin];
23686         }
23687         else {
23688             identifier.referenceTypes = [_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Mixin, _cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Rule];
23689         }
23690         if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.BracketL)) {
23691             if (!atRoot) {
23692                 this._addLookupChildren(node);
23693             }
23694         }
23695         else {
23696             node.addChild(this._parsePrio());
23697         }
23698         if (!hasArguments && !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon) && !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.CurlyR) && !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOF)) {
23699             this.restoreAtMark(mark);
23700             return null;
23701         }
23702         return this.finish(node);
23703     };
23704     LESSParser.prototype._parseMixinArgument = function () {
23705         // [variableName ':'] expression | variableName '...'
23706         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.FunctionArgument);
23707         var pos = this.mark();
23708         var argument = this._parseVariable();
23709         if (argument) {
23710             if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Colon)) {
23711                 this.restoreAtMark(pos);
23712             }
23713             else {
23714                 node.setIdentifier(argument);
23715             }
23716         }
23717         if (node.setValue(this._parseDetachedRuleSet() || this._parseExpr(true))) {
23718             return this.finish(node);
23719         }
23720         this.restoreAtMark(pos);
23721         return null;
23722     };
23723     LESSParser.prototype._parseMixinParameter = function () {
23724         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.FunctionParameter);
23725         // special rest variable: @rest...
23726         if (this.peekKeyword('@rest')) {
23727             var restNode = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Node);
23728             this.consumeToken();
23729             if (!this.accept(_lessScanner__WEBPACK_IMPORTED_MODULE_0__.Ellipsis)) {
23730                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.DotExpected, [], [_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma, _cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR]);
23731             }
23732             node.setIdentifier(this.finish(restNode));
23733             return this.finish(node);
23734         }
23735         // special const args: ...
23736         if (this.peek(_lessScanner__WEBPACK_IMPORTED_MODULE_0__.Ellipsis)) {
23737             var varargsNode = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Node);
23738             this.consumeToken();
23739             node.setIdentifier(this.finish(varargsNode));
23740             return this.finish(node);
23741         }
23742         var hasContent = false;
23743         // default variable declaration: @param: 12 or @name
23744         if (node.setIdentifier(this._parseVariable())) {
23745             this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Colon);
23746             hasContent = true;
23747         }
23748         if (!node.setDefaultValue(this._parseDetachedRuleSet() || this._parseExpr(true)) && !hasContent) {
23749             return null;
23750         }
23751         return this.finish(node);
23752     };
23753     LESSParser.prototype._parseGuard = function () {
23754         if (!this.peekIdent('when')) {
23755             return null;
23756         }
23757         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.LessGuard);
23758         this.consumeToken(); // when
23759         node.isNegated = this.acceptIdent('not');
23760         if (!node.getConditions().addChild(this._parseGuardCondition())) {
23761             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.ConditionExpected);
23762         }
23763         while (this.acceptIdent('and') || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma)) {
23764             if (!node.getConditions().addChild(this._parseGuardCondition())) {
23765                 return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.ConditionExpected);
23766             }
23767         }
23768         return this.finish(node);
23769     };
23770     LESSParser.prototype._parseGuardCondition = function () {
23771         if (!this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
23772             return null;
23773         }
23774         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.GuardCondition);
23775         this.consumeToken(); // ParenthesisL
23776         if (!node.addChild(this._parseExpr())) {
23777             // empty (?)
23778         }
23779         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23780             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.RightParenthesisExpected);
23781         }
23782         return this.finish(node);
23783     };
23784     LESSParser.prototype._parseFunction = function () {
23785         var pos = this.mark();
23786         var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Function);
23787         if (!node.setIdentifier(this._parseFunctionIdentifier())) {
23788             return null;
23789         }
23790         if (this.hasWhitespace() || !this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisL)) {
23791             this.restoreAtMark(pos);
23792             return null;
23793         }
23794         if (node.getArguments().addChild(this._parseMixinArgument())) {
23795             while (this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comma) || this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.SemiColon)) {
23796                 if (this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23797                     break;
23798                 }
23799                 if (!node.getArguments().addChild(this._parseMixinArgument())) {
23800                     return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.ExpressionExpected);
23801                 }
23802             }
23803         }
23804         if (!this.accept(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23805             return this.finish(node, _cssErrors__WEBPACK_IMPORTED_MODULE_4__.ParseError.RightParenthesisExpected);
23806         }
23807         return this.finish(node);
23808     };
23809     LESSParser.prototype._parseFunctionIdentifier = function () {
23810         if (this.peekDelim('%')) {
23811             var node = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Identifier);
23812             node.referenceTypes = [_cssNodes__WEBPACK_IMPORTED_MODULE_3__.ReferenceType.Function];
23813             this.consumeToken();
23814             return this.finish(node);
23815         }
23816         return _super.prototype._parseFunctionIdentifier.call(this);
23817     };
23818     LESSParser.prototype._parseURLArgument = function () {
23819         var pos = this.mark();
23820         var node = _super.prototype._parseURLArgument.call(this);
23821         if (!node || !this.peek(_cssScanner__WEBPACK_IMPORTED_MODULE_1__.TokenType.ParenthesisR)) {
23822             this.restoreAtMark(pos);
23823             var node_2 = this.create(_cssNodes__WEBPACK_IMPORTED_MODULE_3__.Node);
23824             node_2.addChild(this._parseBinaryExpr());
23825             return this.finish(node_2);
23826         }
23827         return node;
23828     };
23829     return LESSParser;
23830 }(_cssParser__WEBPACK_IMPORTED_MODULE_2__.Parser));
23831
23832
23833
23834 /***/ }),
23835 /* 107 */
23836 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
23837
23838 __webpack_require__.r(__webpack_exports__);
23839 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23840 /* harmony export */   "Ellipsis": () => /* binding */ Ellipsis,
23841 /* harmony export */   "LESSScanner": () => /* binding */ LESSScanner
23842 /* harmony export */ });
23843 /* harmony import */ var _cssScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73);
23844 /*---------------------------------------------------------------------------------------------
23845  *  Copyright (c) Microsoft Corporation. All rights reserved.
23846  *  Licensed under the MIT License. See License.txt in the project root for license information.
23847  *--------------------------------------------------------------------------------------------*/
23848
23849 var __extends = (undefined && undefined.__extends) || (function () {
23850     var extendStatics = function (d, b) {
23851         extendStatics = Object.setPrototypeOf ||
23852             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
23853             function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
23854         return extendStatics(d, b);
23855     };
23856     return function (d, b) {
23857         extendStatics(d, b);
23858         function __() { this.constructor = d; }
23859         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
23860     };
23861 })();
23862
23863 var _FSL = '/'.charCodeAt(0);
23864 var _NWL = '\n'.charCodeAt(0);
23865 var _CAR = '\r'.charCodeAt(0);
23866 var _LFD = '\f'.charCodeAt(0);
23867 var _TIC = '`'.charCodeAt(0);
23868 var _DOT = '.'.charCodeAt(0);
23869 var customTokenValue = _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CustomToken;
23870 var Ellipsis = customTokenValue++;
23871 var LESSScanner = /** @class */ (function (_super) {
23872     __extends(LESSScanner, _super);
23873     function LESSScanner() {
23874         return _super !== null && _super.apply(this, arguments) || this;
23875     }
23876     LESSScanner.prototype.scanNext = function (offset) {
23877         // LESS: escaped JavaScript code `const a = "dddd"`
23878         var tokenType = this.escapedJavaScript();
23879         if (tokenType !== null) {
23880             return this.finishToken(offset, tokenType);
23881         }
23882         if (this.stream.advanceIfChars([_DOT, _DOT, _DOT])) {
23883             return this.finishToken(offset, Ellipsis);
23884         }
23885         return _super.prototype.scanNext.call(this, offset);
23886     };
23887     LESSScanner.prototype.comment = function () {
23888         if (_super.prototype.comment.call(this)) {
23889             return true;
23890         }
23891         if (!this.inURL && this.stream.advanceIfChars([_FSL, _FSL])) {
23892             this.stream.advanceWhileChar(function (ch) {
23893                 switch (ch) {
23894                     case _NWL:
23895                     case _CAR:
23896                     case _LFD:
23897                         return false;
23898                     default:
23899                         return true;
23900                 }
23901             });
23902             return true;
23903         }
23904         else {
23905             return false;
23906         }
23907     };
23908     LESSScanner.prototype.escapedJavaScript = function () {
23909         var ch = this.stream.peekChar();
23910         if (ch === _TIC) {
23911             this.stream.advance(1);
23912             this.stream.advanceWhileChar(function (ch) { return ch !== _TIC; });
23913             return this.stream.advanceIfChar(_TIC) ? _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EscapedJavaScript : _cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.BadEscapedJavaScript;
23914         }
23915         return null;
23916     };
23917     return LESSScanner;
23918 }(_cssScanner__WEBPACK_IMPORTED_MODULE_0__.Scanner));
23919
23920
23921
23922 /***/ }),
23923 /* 108 */
23924 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
23925
23926 __webpack_require__.r(__webpack_exports__);
23927 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23928 /* harmony export */   "LESSCompletion": () => /* binding */ LESSCompletion
23929 /* harmony export */ });
23930 /* harmony import */ var _cssCompletion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(85);
23931 /* harmony import */ var _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88);
23932 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(77);
23933 /*---------------------------------------------------------------------------------------------
23934  *  Copyright (c) Microsoft Corporation. All rights reserved.
23935  *  Licensed under the MIT License. See License.txt in the project root for license information.
23936  *--------------------------------------------------------------------------------------------*/
23937
23938 var __extends = (undefined && undefined.__extends) || (function () {
23939     var extendStatics = function (d, b) {
23940         extendStatics = Object.setPrototypeOf ||
23941             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
23942             function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
23943         return extendStatics(d, b);
23944     };
23945     return function (d, b) {
23946         extendStatics(d, b);
23947         function __() { this.constructor = d; }
23948         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
23949     };
23950 })();
23951
23952
23953
23954 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_2__.loadMessageBundle();
23955 var LESSCompletion = /** @class */ (function (_super) {
23956     __extends(LESSCompletion, _super);
23957     function LESSCompletion(lsOptions, cssDataManager) {
23958         return _super.call(this, '@', lsOptions, cssDataManager) || this;
23959     }
23960     LESSCompletion.prototype.createFunctionProposals = function (proposals, existingNode, sortToEnd, result) {
23961         for (var _i = 0, proposals_1 = proposals; _i < proposals_1.length; _i++) {
23962             var p = proposals_1[_i];
23963             var item = {
23964                 label: p.name,
23965                 detail: p.example,
23966                 documentation: p.description,
23967                 textEdit: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TextEdit.replace(this.getCompletionRange(existingNode), p.name + '($0)'),
23968                 insertTextFormat: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.InsertTextFormat.Snippet,
23969                 kind: _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.CompletionItemKind.Function
23970             };
23971             if (sortToEnd) {
23972                 item.sortText = 'z';
23973             }
23974             result.items.push(item);
23975         }
23976         return result;
23977     };
23978     LESSCompletion.prototype.getTermProposals = function (entry, existingNode, result) {
23979         var functions = LESSCompletion.builtInProposals;
23980         if (entry) {
23981             functions = functions.filter(function (f) { return !f.type || !entry.restrictions || entry.restrictions.indexOf(f.type) !== -1; });
23982         }
23983         this.createFunctionProposals(functions, existingNode, true, result);
23984         return _super.prototype.getTermProposals.call(this, entry, existingNode, result);
23985     };
23986     LESSCompletion.prototype.getColorProposals = function (entry, existingNode, result) {
23987         this.createFunctionProposals(LESSCompletion.colorProposals, existingNode, false, result);
23988         return _super.prototype.getColorProposals.call(this, entry, existingNode, result);
23989     };
23990     LESSCompletion.prototype.getCompletionsForDeclarationProperty = function (declaration, result) {
23991         this.getCompletionsForSelector(null, true, result);
23992         return _super.prototype.getCompletionsForDeclarationProperty.call(this, declaration, result);
23993     };
23994     LESSCompletion.builtInProposals = [
23995         // Boolean functions
23996         {
23997             'name': 'if',
23998             'example': 'if(condition, trueValue [, falseValue]);',
23999             'description': localize('less.builtin.if', 'returns one of two values depending on a condition.')
24000         },
24001         {
24002             'name': 'boolean',
24003             'example': 'boolean(condition);',
24004             'description': localize('less.builtin.boolean', '"store" a boolean test for later evaluation in a guard or if().')
24005         },
24006         // List functions
24007         {
24008             'name': 'length',
24009             'example': 'length(@list);',
24010             'description': localize('less.builtin.length', 'returns the number of elements in a value list')
24011         },
24012         {
24013             'name': 'extract',
24014             'example': 'extract(@list, index);',
24015             'description': localize('less.builtin.extract', 'returns a value at the specified position in the list')
24016         },
24017         {
24018             'name': 'range',
24019             'example': 'range([start, ] end [, step]);',
24020             'description': localize('less.builtin.range', 'generate a list spanning a range of values')
24021         },
24022         {
24023             'name': 'each',
24024             'example': 'each(@list, ruleset);',
24025             'description': localize('less.builtin.each', 'bind the evaluation of a ruleset to each member of a list.')
24026         },
24027         // Other built-ins
24028         {
24029             'name': 'escape',
24030             'example': 'escape(@string);',
24031             'description': localize('less.builtin.escape', 'URL encodes a string')
24032         },
24033         {
24034             'name': 'e',
24035             'example': 'e(@string);',
24036             'description': localize('less.builtin.e', 'escape string content')
24037         },
24038         {
24039             'name': 'replace',
24040             'example': 'replace(@string, @pattern, @replacement[, @flags]);',
24041             'description': localize('less.builtin.replace', 'string replace')
24042         },
24043         {
24044             'name': 'unit',
24045             'example': 'unit(@dimension, [@unit: \'\']);',
24046             'description': localize('less.builtin.unit', 'remove or change the unit of a dimension')
24047         },
24048         {
24049             'name': 'color',
24050             'example': 'color(@string);',
24051             'description': localize('less.builtin.color', 'parses a string to a color'),
24052             'type': 'color'
24053         },
24054         {
24055             'name': 'convert',
24056             'example': 'convert(@value, unit);',
24057             'description': localize('less.builtin.convert', 'converts numbers from one type into another')
24058         },
24059         {
24060             'name': 'data-uri',
24061             'example': 'data-uri([mimetype,] url);',
24062             'description': localize('less.builtin.data-uri', 'inlines a resource and falls back to `url()`'),
24063             'type': 'url'
24064         },
24065         {
24066             'name': 'abs',
24067             'description': localize('less.builtin.abs', 'absolute value of a number'),
24068             'example': 'abs(number);'
24069         },
24070         {
24071             'name': 'acos',
24072             'description': localize('less.builtin.acos', 'arccosine - inverse of cosine function'),
24073             'example': 'acos(number);'
24074         },
24075         {
24076             'name': 'asin',
24077             'description': localize('less.builtin.asin', 'arcsine - inverse of sine function'),
24078             'example': 'asin(number);'
24079         },
24080         {
24081             'name': 'ceil',
24082             'example': 'ceil(@number);',
24083             'description': localize('less.builtin.ceil', 'rounds up to an integer')
24084         },
24085         {
24086             'name': 'cos',
24087             'description': localize('less.builtin.cos', 'cosine function'),
24088             'example': 'cos(number);'
24089         },
24090         {
24091             'name': 'floor',
24092             'description': localize('less.builtin.floor', 'rounds down to an integer'),
24093             'example': 'floor(@number);'
24094         },
24095         {
24096             'name': 'percentage',
24097             'description': localize('less.builtin.percentage', 'converts to a %, e.g. 0.5 > 50%'),
24098             'example': 'percentage(@number);',
24099             'type': 'percentage'
24100         },
24101         {
24102             'name': 'round',
24103             'description': localize('less.builtin.round', 'rounds a number to a number of places'),
24104             'example': 'round(number, [places: 0]);'
24105         },
24106         {
24107             'name': 'sqrt',
24108             'description': localize('less.builtin.sqrt', 'calculates square root of a number'),
24109             'example': 'sqrt(number);'
24110         },
24111         {
24112             'name': 'sin',
24113             'description': localize('less.builtin.sin', 'sine function'),
24114             'example': 'sin(number);'
24115         },
24116         {
24117             'name': 'tan',
24118             'description': localize('less.builtin.tan', 'tangent function'),
24119             'example': 'tan(number);'
24120         },
24121         {
24122             'name': 'atan',
24123             'description': localize('less.builtin.atan', 'arctangent - inverse of tangent function'),
24124             'example': 'atan(number);'
24125         },
24126         {
24127             'name': 'pi',
24128             'description': localize('less.builtin.pi', 'returns pi'),
24129             'example': 'pi();'
24130         },
24131         {
24132             'name': 'pow',
24133             'description': localize('less.builtin.pow', 'first argument raised to the power of the second argument'),
24134             'example': 'pow(@base, @exponent);'
24135         },
24136         {
24137             'name': 'mod',
24138             'description': localize('less.builtin.mod', 'first argument modulus second argument'),
24139             'example': 'mod(number, number);'
24140         },
24141         {
24142             'name': 'min',
24143             'description': localize('less.builtin.min', 'returns the lowest of one or more values'),
24144             'example': 'min(@x, @y);'
24145         },
24146         {
24147             'name': 'max',
24148             'description': localize('less.builtin.max', 'returns the lowest of one or more values'),
24149             'example': 'max(@x, @y);'
24150         }
24151     ];
24152     LESSCompletion.colorProposals = [
24153         {
24154             'name': 'argb',
24155             'example': 'argb(@color);',
24156             'description': localize('less.builtin.argb', 'creates a #AARRGGBB')
24157         },
24158         {
24159             'name': 'hsl',
24160             'example': 'hsl(@hue, @saturation, @lightness);',
24161             'description': localize('less.builtin.hsl', 'creates a color')
24162         },
24163         {
24164             'name': 'hsla',
24165             'example': 'hsla(@hue, @saturation, @lightness, @alpha);',
24166             'description': localize('less.builtin.hsla', 'creates a color')
24167         },
24168         {
24169             'name': 'hsv',
24170             'example': 'hsv(@hue, @saturation, @value);',
24171             'description': localize('less.builtin.hsv', 'creates a color')
24172         },
24173         {
24174             'name': 'hsva',
24175             'example': 'hsva(@hue, @saturation, @value, @alpha);',
24176             'description': localize('less.builtin.hsva', 'creates a color')
24177         },
24178         {
24179             'name': 'hue',
24180             'example': 'hue(@color);',
24181             'description': localize('less.builtin.hue', 'returns the `hue` channel of `@color` in the HSL space')
24182         },
24183         {
24184             'name': 'saturation',
24185             'example': 'saturation(@color);',
24186             'description': localize('less.builtin.saturation', 'returns the `saturation` channel of `@color` in the HSL space')
24187         },
24188         {
24189             'name': 'lightness',
24190             'example': 'lightness(@color);',
24191             'description': localize('less.builtin.lightness', 'returns the `lightness` channel of `@color` in the HSL space')
24192         },
24193         {
24194             'name': 'hsvhue',
24195             'example': 'hsvhue(@color);',
24196             'description': localize('less.builtin.hsvhue', 'returns the `hue` channel of `@color` in the HSV space')
24197         },
24198         {
24199             'name': 'hsvsaturation',
24200             'example': 'hsvsaturation(@color);',
24201             'description': localize('less.builtin.hsvsaturation', 'returns the `saturation` channel of `@color` in the HSV space')
24202         },
24203         {
24204             'name': 'hsvvalue',
24205             'example': 'hsvvalue(@color);',
24206             'description': localize('less.builtin.hsvvalue', 'returns the `value` channel of `@color` in the HSV space')
24207         },
24208         {
24209             'name': 'red',
24210             'example': 'red(@color);',
24211             'description': localize('less.builtin.red', 'returns the `red` channel of `@color`')
24212         },
24213         {
24214             'name': 'green',
24215             'example': 'green(@color);',
24216             'description': localize('less.builtin.green', 'returns the `green` channel of `@color`')
24217         },
24218         {
24219             'name': 'blue',
24220             'example': 'blue(@color);',
24221             'description': localize('less.builtin.blue', 'returns the `blue` channel of `@color`')
24222         },
24223         {
24224             'name': 'alpha',
24225             'example': 'alpha(@color);',
24226             'description': localize('less.builtin.alpha', 'returns the `alpha` channel of `@color`')
24227         },
24228         {
24229             'name': 'luma',
24230             'example': 'luma(@color);',
24231             'description': localize('less.builtin.luma', 'returns the `luma` value (perceptual brightness) of `@color`')
24232         },
24233         {
24234             'name': 'saturate',
24235             'example': 'saturate(@color, 10%);',
24236             'description': localize('less.builtin.saturate', 'return `@color` 10% points more saturated')
24237         },
24238         {
24239             'name': 'desaturate',
24240             'example': 'desaturate(@color, 10%);',
24241             'description': localize('less.builtin.desaturate', 'return `@color` 10% points less saturated')
24242         },
24243         {
24244             'name': 'lighten',
24245             'example': 'lighten(@color, 10%);',
24246             'description': localize('less.builtin.lighten', 'return `@color` 10% points lighter')
24247         },
24248         {
24249             'name': 'darken',
24250             'example': 'darken(@color, 10%);',
24251             'description': localize('less.builtin.darken', 'return `@color` 10% points darker')
24252         },
24253         {
24254             'name': 'fadein',
24255             'example': 'fadein(@color, 10%);',
24256             'description': localize('less.builtin.fadein', 'return `@color` 10% points less transparent')
24257         },
24258         {
24259             'name': 'fadeout',
24260             'example': 'fadeout(@color, 10%);',
24261             'description': localize('less.builtin.fadeout', 'return `@color` 10% points more transparent')
24262         },
24263         {
24264             'name': 'fade',
24265             'example': 'fade(@color, 50%);',
24266             'description': localize('less.builtin.fade', 'return `@color` with 50% transparency')
24267         },
24268         {
24269             'name': 'spin',
24270             'example': 'spin(@color, 10);',
24271             'description': localize('less.builtin.spin', 'return `@color` with a 10 degree larger in hue')
24272         },
24273         {
24274             'name': 'mix',
24275             'example': 'mix(@color1, @color2, [@weight: 50%]);',
24276             'description': localize('less.builtin.mix', 'return a mix of `@color1` and `@color2`')
24277         },
24278         {
24279             'name': 'greyscale',
24280             'example': 'greyscale(@color);',
24281             'description': localize('less.builtin.greyscale', 'returns a grey, 100% desaturated color'),
24282         },
24283         {
24284             'name': 'contrast',
24285             'example': 'contrast(@color1, [@darkcolor: black], [@lightcolor: white], [@threshold: 43%]);',
24286             'description': localize('less.builtin.contrast', 'return `@darkcolor` if `@color1 is> 43% luma` otherwise return `@lightcolor`, see notes')
24287         },
24288         {
24289             'name': 'multiply',
24290             'example': 'multiply(@color1, @color2);'
24291         },
24292         {
24293             'name': 'screen',
24294             'example': 'screen(@color1, @color2);'
24295         },
24296         {
24297             'name': 'overlay',
24298             'example': 'overlay(@color1, @color2);'
24299         },
24300         {
24301             'name': 'softlight',
24302             'example': 'softlight(@color1, @color2);'
24303         },
24304         {
24305             'name': 'hardlight',
24306             'example': 'hardlight(@color1, @color2);'
24307         },
24308         {
24309             'name': 'difference',
24310             'example': 'difference(@color1, @color2);'
24311         },
24312         {
24313             'name': 'exclusion',
24314             'example': 'exclusion(@color1, @color2);'
24315         },
24316         {
24317             'name': 'average',
24318             'example': 'average(@color1, @color2);'
24319         },
24320         {
24321             'name': 'negation',
24322             'example': 'negation(@color1, @color2);'
24323         }
24324     ];
24325     return LESSCompletion;
24326 }(_cssCompletion__WEBPACK_IMPORTED_MODULE_0__.CSSCompletion));
24327
24328
24329
24330 /***/ }),
24331 /* 109 */
24332 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
24333
24334 __webpack_require__.r(__webpack_exports__);
24335 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
24336 /* harmony export */   "getFoldingRanges": () => /* binding */ getFoldingRanges
24337 /* harmony export */ });
24338 /* harmony import */ var _parser_cssScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73);
24339 /* harmony import */ var _parser_scssScanner__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(103);
24340 /* harmony import */ var _parser_lessScanner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(107);
24341 /*---------------------------------------------------------------------------------------------
24342  *  Copyright (c) Microsoft Corporation. All rights reserved.
24343  *  Licensed under the MIT License. See License.txt in the project root for license information.
24344  *--------------------------------------------------------------------------------------------*/
24345
24346
24347
24348
24349 function getFoldingRanges(document, context) {
24350     var ranges = computeFoldingRanges(document);
24351     return limitFoldingRanges(ranges, context);
24352 }
24353 function computeFoldingRanges(document) {
24354     function getStartLine(t) {
24355         return document.positionAt(t.offset).line;
24356     }
24357     function getEndLine(t) {
24358         return document.positionAt(t.offset + t.len).line;
24359     }
24360     function getScanner() {
24361         switch (document.languageId) {
24362             case 'scss':
24363                 return new _parser_scssScanner__WEBPACK_IMPORTED_MODULE_1__.SCSSScanner();
24364             case 'less':
24365                 return new _parser_lessScanner__WEBPACK_IMPORTED_MODULE_2__.LESSScanner();
24366             default:
24367                 return new _parser_cssScanner__WEBPACK_IMPORTED_MODULE_0__.Scanner();
24368         }
24369     }
24370     function tokenToRange(t, kind) {
24371         var startLine = getStartLine(t);
24372         var endLine = getEndLine(t);
24373         if (startLine !== endLine) {
24374             return {
24375                 startLine: startLine,
24376                 endLine: endLine,
24377                 kind: kind
24378             };
24379         }
24380         else {
24381             return null;
24382         }
24383     }
24384     var ranges = [];
24385     var delimiterStack = [];
24386     var scanner = getScanner();
24387     scanner.ignoreComment = false;
24388     scanner.setSource(document.getText());
24389     var token = scanner.scan();
24390     var prevToken = null;
24391     var _loop_1 = function () {
24392         switch (token.type) {
24393             case _parser_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyL:
24394             case _parser_scssScanner__WEBPACK_IMPORTED_MODULE_1__.InterpolationFunction:
24395                 {
24396                     delimiterStack.push({ line: getStartLine(token), type: 'brace', isStart: true });
24397                     break;
24398                 }
24399             case _parser_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.CurlyR: {
24400                 if (delimiterStack.length !== 0) {
24401                     var prevDelimiter = popPrevStartDelimiterOfType(delimiterStack, 'brace');
24402                     if (!prevDelimiter) {
24403                         break;
24404                     }
24405                     var endLine = getEndLine(token);
24406                     if (prevDelimiter.type === 'brace') {
24407                         /**
24408                          * Other than the case when curly brace is not on a new line by itself, for example
24409                          * .foo {
24410                          *   color: red; }
24411                          * Use endLine minus one to show ending curly brace
24412                          */
24413                         if (prevToken && getEndLine(prevToken) !== endLine) {
24414                             endLine--;
24415                         }
24416                         if (prevDelimiter.line !== endLine) {
24417                             ranges.push({
24418                                 startLine: prevDelimiter.line,
24419                                 endLine: endLine,
24420                                 kind: undefined
24421                             });
24422                         }
24423                     }
24424                 }
24425                 break;
24426             }
24427             /**
24428              * In CSS, there is no single line comment prefixed with //
24429              * All comments are marked as `Comment`
24430              */
24431             case _parser_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.Comment: {
24432                 var commentRegionMarkerToDelimiter_1 = function (marker) {
24433                     if (marker === '#region') {
24434                         return { line: getStartLine(token), type: 'comment', isStart: true };
24435                     }
24436                     else {
24437                         return { line: getEndLine(token), type: 'comment', isStart: false };
24438                     }
24439                 };
24440                 var getCurrDelimiter = function (token) {
24441                     var matches = token.text.match(/^\s*\/\*\s*(#region|#endregion)\b\s*(.*?)\s*\*\//);
24442                     if (matches) {
24443                         return commentRegionMarkerToDelimiter_1(matches[1]);
24444                     }
24445                     else if (document.languageId === 'scss' || document.languageId === 'less') {
24446                         var matches_1 = token.text.match(/^\s*\/\/\s*(#region|#endregion)\b\s*(.*?)\s*/);
24447                         if (matches_1) {
24448                             return commentRegionMarkerToDelimiter_1(matches_1[1]);
24449                         }
24450                     }
24451                     return null;
24452                 };
24453                 var currDelimiter = getCurrDelimiter(token);
24454                 // /* */ comment region folding
24455                 // All #region and #endregion cases
24456                 if (currDelimiter) {
24457                     if (currDelimiter.isStart) {
24458                         delimiterStack.push(currDelimiter);
24459                     }
24460                     else {
24461                         var prevDelimiter = popPrevStartDelimiterOfType(delimiterStack, 'comment');
24462                         if (!prevDelimiter) {
24463                             break;
24464                         }
24465                         if (prevDelimiter.type === 'comment') {
24466                             if (prevDelimiter.line !== currDelimiter.line) {
24467                                 ranges.push({
24468                                     startLine: prevDelimiter.line,
24469                                     endLine: currDelimiter.line,
24470                                     kind: 'region'
24471                                 });
24472                             }
24473                         }
24474                     }
24475                 }
24476                 // Multiline comment case
24477                 else {
24478                     var range = tokenToRange(token, 'comment');
24479                     if (range) {
24480                         ranges.push(range);
24481                     }
24482                 }
24483                 break;
24484             }
24485         }
24486         prevToken = token;
24487         token = scanner.scan();
24488     };
24489     while (token.type !== _parser_cssScanner__WEBPACK_IMPORTED_MODULE_0__.TokenType.EOF) {
24490         _loop_1();
24491     }
24492     return ranges;
24493 }
24494 function popPrevStartDelimiterOfType(stack, type) {
24495     if (stack.length === 0) {
24496         return null;
24497     }
24498     for (var i = stack.length - 1; i >= 0; i--) {
24499         if (stack[i].type === type && stack[i].isStart) {
24500             return stack.splice(i, 1)[0];
24501         }
24502     }
24503     return null;
24504 }
24505 /**
24506  * - Sort regions
24507  * - Remove invalid regions (intersections)
24508  * - If limit exceeds, only return `rangeLimit` amount of ranges
24509  */
24510 function limitFoldingRanges(ranges, context) {
24511     var maxRanges = context && context.rangeLimit || Number.MAX_VALUE;
24512     var sortedRanges = ranges.sort(function (r1, r2) {
24513         var diff = r1.startLine - r2.startLine;
24514         if (diff === 0) {
24515             diff = r1.endLine - r2.endLine;
24516         }
24517         return diff;
24518     });
24519     var validRanges = [];
24520     var prevEndLine = -1;
24521     sortedRanges.forEach(function (r) {
24522         if (!(r.startLine < prevEndLine && prevEndLine < r.endLine)) {
24523             validRanges.push(r);
24524             prevEndLine = r.endLine;
24525         }
24526     });
24527     if (validRanges.length < maxRanges) {
24528         return validRanges;
24529     }
24530     else {
24531         return validRanges.slice(0, maxRanges);
24532     }
24533 }
24534
24535
24536 /***/ }),
24537 /* 110 */
24538 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
24539
24540 __webpack_require__.r(__webpack_exports__);
24541 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
24542 /* harmony export */   "CSSDataManager": () => /* binding */ CSSDataManager
24543 /* harmony export */ });
24544 /* harmony import */ var _utils_objects__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84);
24545 /* harmony import */ var _data_webCustomData__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(111);
24546 /* harmony import */ var _dataProvider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(112);
24547 /*---------------------------------------------------------------------------------------------
24548  *  Copyright (c) Microsoft Corporation. All rights reserved.
24549  *  Licensed under the MIT License. See License.txt in the project root for license information.
24550  *--------------------------------------------------------------------------------------------*/
24551
24552
24553
24554
24555 var CSSDataManager = /** @class */ (function () {
24556     function CSSDataManager(options) {
24557         this.dataProviders = [];
24558         this._propertySet = {};
24559         this._atDirectiveSet = {};
24560         this._pseudoClassSet = {};
24561         this._pseudoElementSet = {};
24562         this._properties = [];
24563         this._atDirectives = [];
24564         this._pseudoClasses = [];
24565         this._pseudoElements = [];
24566         this.setDataProviders((options === null || options === void 0 ? void 0 : options.useDefaultDataProvider) !== false, (options === null || options === void 0 ? void 0 : options.customDataProviders) || []);
24567     }
24568     CSSDataManager.prototype.setDataProviders = function (builtIn, providers) {
24569         var _a;
24570         this.dataProviders = [];
24571         if (builtIn) {
24572             this.dataProviders.push(new _dataProvider__WEBPACK_IMPORTED_MODULE_2__.CSSDataProvider(_data_webCustomData__WEBPACK_IMPORTED_MODULE_1__.cssData));
24573         }
24574         (_a = this.dataProviders).push.apply(_a, providers);
24575         this.collectData();
24576     };
24577     /**
24578      * Collect all data  & handle duplicates
24579      */
24580     CSSDataManager.prototype.collectData = function () {
24581         var _this = this;
24582         this._propertySet = {};
24583         this._atDirectiveSet = {};
24584         this._pseudoClassSet = {};
24585         this._pseudoElementSet = {};
24586         this.dataProviders.forEach(function (provider) {
24587             provider.provideProperties().forEach(function (p) {
24588                 if (!_this._propertySet[p.name]) {
24589                     _this._propertySet[p.name] = p;
24590                 }
24591             });
24592             provider.provideAtDirectives().forEach(function (p) {
24593                 if (!_this._atDirectiveSet[p.name]) {
24594                     _this._atDirectiveSet[p.name] = p;
24595                 }
24596             });
24597             provider.providePseudoClasses().forEach(function (p) {
24598                 if (!_this._pseudoClassSet[p.name]) {
24599                     _this._pseudoClassSet[p.name] = p;
24600                 }
24601             });
24602             provider.providePseudoElements().forEach(function (p) {
24603                 if (!_this._pseudoElementSet[p.name]) {
24604                     _this._pseudoElementSet[p.name] = p;
24605                 }
24606             });
24607         });
24608         this._properties = _utils_objects__WEBPACK_IMPORTED_MODULE_0__.values(this._propertySet);
24609         this._atDirectives = _utils_objects__WEBPACK_IMPORTED_MODULE_0__.values(this._atDirectiveSet);
24610         this._pseudoClasses = _utils_objects__WEBPACK_IMPORTED_MODULE_0__.values(this._pseudoClassSet);
24611         this._pseudoElements = _utils_objects__WEBPACK_IMPORTED_MODULE_0__.values(this._pseudoElementSet);
24612     };
24613     CSSDataManager.prototype.getProperty = function (name) { return this._propertySet[name]; };
24614     CSSDataManager.prototype.getAtDirective = function (name) { return this._atDirectiveSet[name]; };
24615     CSSDataManager.prototype.getPseudoClass = function (name) { return this._pseudoClassSet[name]; };
24616     CSSDataManager.prototype.getPseudoElement = function (name) { return this._pseudoElementSet[name]; };
24617     CSSDataManager.prototype.getProperties = function () {
24618         return this._properties;
24619     };
24620     CSSDataManager.prototype.getAtDirectives = function () {
24621         return this._atDirectives;
24622     };
24623     CSSDataManager.prototype.getPseudoClasses = function () {
24624         return this._pseudoClasses;
24625     };
24626     CSSDataManager.prototype.getPseudoElements = function () {
24627         return this._pseudoElements;
24628     };
24629     CSSDataManager.prototype.isKnownProperty = function (name) {
24630         return name.toLowerCase() in this._propertySet;
24631     };
24632     CSSDataManager.prototype.isStandardProperty = function (name) {
24633         return this.isKnownProperty(name) &&
24634             (!this._propertySet[name.toLowerCase()].status || this._propertySet[name.toLowerCase()].status === 'standard');
24635     };
24636     return CSSDataManager;
24637 }());
24638
24639
24640
24641 /***/ }),
24642 /* 111 */
24643 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
24644
24645 __webpack_require__.r(__webpack_exports__);
24646 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
24647 /* harmony export */   "cssData": () => /* binding */ cssData
24648 /* harmony export */ });
24649 /*---------------------------------------------------------------------------------------------
24650  *  Copyright (c) Microsoft Corporation. All rights reserved.
24651  *  Licensed under the MIT License. See License.txt in the project root for license information.
24652  *--------------------------------------------------------------------------------------------*/
24653 // file generated from vscode-web-custom-data NPM package
24654 var cssData = {
24655     "version": 1.1,
24656     "properties": [
24657         {
24658             "name": "additive-symbols",
24659             "browsers": [
24660                 "FF33"
24661             ],
24662             "syntax": "[ <integer> && <symbol> ]#",
24663             "relevance": 50,
24664             "description": "@counter-style descriptor. Specifies the symbols used by the marker-construction algorithm specified by the system descriptor. Needs to be specified if the counter system is 'additive'.",
24665             "restrictions": [
24666                 "integer",
24667                 "string",
24668                 "image",
24669                 "identifier"
24670             ]
24671         },
24672         {
24673             "name": "align-content",
24674             "values": [
24675                 {
24676                     "name": "center",
24677                     "description": "Lines are packed toward the center of the flex container."
24678                 },
24679                 {
24680                     "name": "flex-end",
24681                     "description": "Lines are packed toward the end of the flex container."
24682                 },
24683                 {
24684                     "name": "flex-start",
24685                     "description": "Lines are packed toward the start of the flex container."
24686                 },
24687                 {
24688                     "name": "space-around",
24689                     "description": "Lines are evenly distributed in the flex container, with half-size spaces on either end."
24690                 },
24691                 {
24692                     "name": "space-between",
24693                     "description": "Lines are evenly distributed in the flex container."
24694                 },
24695                 {
24696                     "name": "stretch",
24697                     "description": "Lines stretch to take up the remaining space."
24698                 }
24699             ],
24700             "syntax": "normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position>",
24701             "relevance": 59,
24702             "description": "Aligns a flex container’s lines within the flex container when there is extra space in the cross-axis, similar to how 'justify-content' aligns individual items within the main-axis.",
24703             "restrictions": [
24704                 "enum"
24705             ]
24706         },
24707         {
24708             "name": "align-items",
24709             "values": [
24710                 {
24711                     "name": "baseline",
24712                     "description": "If the flex item’s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment."
24713                 },
24714                 {
24715                     "name": "center",
24716                     "description": "The flex item’s margin box is centered in the cross axis within the line."
24717                 },
24718                 {
24719                     "name": "flex-end",
24720                     "description": "The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line."
24721                 },
24722                 {
24723                     "name": "flex-start",
24724                     "description": "The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line."
24725                 },
24726                 {
24727                     "name": "stretch",
24728                     "description": "If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."
24729                 }
24730             ],
24731             "syntax": "normal | stretch | <baseline-position> | [ <overflow-position>? <self-position> ]",
24732             "relevance": 81,
24733             "description": "Aligns flex items along the cross axis of the current line of the flex container.",
24734             "restrictions": [
24735                 "enum"
24736             ]
24737         },
24738         {
24739             "name": "justify-items",
24740             "values": [
24741                 {
24742                     "name": "auto"
24743                 },
24744                 {
24745                     "name": "normal"
24746                 },
24747                 {
24748                     "name": "end"
24749                 },
24750                 {
24751                     "name": "start"
24752                 },
24753                 {
24754                     "name": "flex-end",
24755                     "description": "\"Flex items are packed toward the end of the line.\""
24756                 },
24757                 {
24758                     "name": "flex-start",
24759                     "description": "\"Flex items are packed toward the start of the line.\""
24760                 },
24761                 {
24762                     "name": "self-end",
24763                     "description": "The item is packed flush to the edge of the alignment container of the end side of the item, in the appropriate axis."
24764                 },
24765                 {
24766                     "name": "self-start",
24767                     "description": "The item is packed flush to the edge of the alignment container of the start side of the item, in the appropriate axis.."
24768                 },
24769                 {
24770                     "name": "center",
24771                     "description": "The items are packed flush to each other toward the center of the of the alignment container."
24772                 },
24773                 {
24774                     "name": "left"
24775                 },
24776                 {
24777                     "name": "right"
24778                 },
24779                 {
24780                     "name": "baseline"
24781                 },
24782                 {
24783                     "name": "first baseline"
24784                 },
24785                 {
24786                     "name": "last baseline"
24787                 },
24788                 {
24789                     "name": "stretch",
24790                     "description": "If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."
24791                 },
24792                 {
24793                     "name": "save"
24794                 },
24795                 {
24796                     "name": "unsave"
24797                 },
24798                 {
24799                     "name": "legacy"
24800                 }
24801             ],
24802             "syntax": "normal | stretch | <baseline-position> | <overflow-position>? [ <self-position> | left | right ] | legacy | legacy && [ left | right | center ]",
24803             "relevance": 50,
24804             "description": "Defines the default justify-self for all items of the box, giving them the default way of justifying each box along the appropriate axis",
24805             "restrictions": [
24806                 "enum"
24807             ]
24808         },
24809         {
24810             "name": "justify-self",
24811             "browsers": [
24812                 "E16",
24813                 "FF45",
24814                 "S10.1",
24815                 "C57",
24816                 "O44"
24817             ],
24818             "values": [
24819                 {
24820                     "name": "auto"
24821                 },
24822                 {
24823                     "name": "normal"
24824                 },
24825                 {
24826                     "name": "end"
24827                 },
24828                 {
24829                     "name": "start"
24830                 },
24831                 {
24832                     "name": "flex-end",
24833                     "description": "\"Flex items are packed toward the end of the line.\""
24834                 },
24835                 {
24836                     "name": "flex-start",
24837                     "description": "\"Flex items are packed toward the start of the line.\""
24838                 },
24839                 {
24840                     "name": "self-end",
24841                     "description": "The item is packed flush to the edge of the alignment container of the end side of the item, in the appropriate axis."
24842                 },
24843                 {
24844                     "name": "self-start",
24845                     "description": "The item is packed flush to the edge of the alignment container of the start side of the item, in the appropriate axis.."
24846                 },
24847                 {
24848                     "name": "center",
24849                     "description": "The items are packed flush to each other toward the center of the of the alignment container."
24850                 },
24851                 {
24852                     "name": "left"
24853                 },
24854                 {
24855                     "name": "right"
24856                 },
24857                 {
24858                     "name": "baseline"
24859                 },
24860                 {
24861                     "name": "first baseline"
24862                 },
24863                 {
24864                     "name": "last baseline"
24865                 },
24866                 {
24867                     "name": "stretch",
24868                     "description": "If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."
24869                 },
24870                 {
24871                     "name": "save"
24872                 },
24873                 {
24874                     "name": "unsave"
24875                 }
24876             ],
24877             "syntax": "auto | normal | stretch | <baseline-position> | <overflow-position>? [ <self-position> | left | right ]",
24878             "relevance": 52,
24879             "description": "Defines the way of justifying a box inside its container along the appropriate axis.",
24880             "restrictions": [
24881                 "enum"
24882             ]
24883         },
24884         {
24885             "name": "align-self",
24886             "values": [
24887                 {
24888                     "name": "auto",
24889                     "description": "Computes to the value of 'align-items' on the element’s parent, or 'stretch' if the element has no parent. On absolutely positioned elements, it computes to itself."
24890                 },
24891                 {
24892                     "name": "baseline",
24893                     "description": "If the flex item’s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment."
24894                 },
24895                 {
24896                     "name": "center",
24897                     "description": "The flex item’s margin box is centered in the cross axis within the line."
24898                 },
24899                 {
24900                     "name": "flex-end",
24901                     "description": "The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line."
24902                 },
24903                 {
24904                     "name": "flex-start",
24905                     "description": "The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line."
24906                 },
24907                 {
24908                     "name": "stretch",
24909                     "description": "If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."
24910                 }
24911             ],
24912             "syntax": "auto | normal | stretch | <baseline-position> | <overflow-position>? <self-position>",
24913             "relevance": 69,
24914             "description": "Allows the default alignment along the cross axis to be overridden for individual flex items.",
24915             "restrictions": [
24916                 "enum"
24917             ]
24918         },
24919         {
24920             "name": "all",
24921             "browsers": [
24922                 "E79",
24923                 "FF27",
24924                 "S9.1",
24925                 "C37",
24926                 "O24"
24927             ],
24928             "values": [],
24929             "syntax": "initial | inherit | unset | revert",
24930             "relevance": 51,
24931             "references": [
24932                 {
24933                     "name": "MDN Reference",
24934                     "url": "https://developer.mozilla.org/docs/Web/CSS/all"
24935                 }
24936             ],
24937             "description": "Shorthand that resets all properties except 'direction' and 'unicode-bidi'.",
24938             "restrictions": [
24939                 "enum"
24940             ]
24941         },
24942         {
24943             "name": "alt",
24944             "browsers": [
24945                 "S9"
24946             ],
24947             "values": [],
24948             "relevance": 50,
24949             "references": [
24950                 {
24951                     "name": "MDN Reference",
24952                     "url": "https://developer.mozilla.org/docs/Web/CSS/alt"
24953                 }
24954             ],
24955             "description": "Provides alternative text for assistive technology to replace the generated content of a ::before or ::after element.",
24956             "restrictions": [
24957                 "string",
24958                 "enum"
24959             ]
24960         },
24961         {
24962             "name": "animation",
24963             "values": [
24964                 {
24965                     "name": "alternate",
24966                     "description": "The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction."
24967                 },
24968                 {
24969                     "name": "alternate-reverse",
24970                     "description": "The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction."
24971                 },
24972                 {
24973                     "name": "backwards",
24974                     "description": "The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'."
24975                 },
24976                 {
24977                     "name": "both",
24978                     "description": "Both forwards and backwards fill modes are applied."
24979                 },
24980                 {
24981                     "name": "forwards",
24982                     "description": "The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes."
24983                 },
24984                 {
24985                     "name": "infinite",
24986                     "description": "Causes the animation to repeat forever."
24987                 },
24988                 {
24989                     "name": "none",
24990                     "description": "No animation is performed"
24991                 },
24992                 {
24993                     "name": "normal",
24994                     "description": "Normal playback."
24995                 },
24996                 {
24997                     "name": "reverse",
24998                     "description": "All iterations of the animation are played in the reverse direction from the way they were specified."
24999                 }
25000             ],
25001             "syntax": "<single-animation>#",
25002             "relevance": 79,
25003             "references": [
25004                 {
25005                     "name": "MDN Reference",
25006                     "url": "https://developer.mozilla.org/docs/Web/CSS/animation"
25007                 }
25008             ],
25009             "description": "Shorthand property combines six of the animation properties into a single property.",
25010             "restrictions": [
25011                 "time",
25012                 "timing-function",
25013                 "enum",
25014                 "identifier",
25015                 "number"
25016             ]
25017         },
25018         {
25019             "name": "animation-delay",
25020             "syntax": "<time>#",
25021             "relevance": 62,
25022             "references": [
25023                 {
25024                     "name": "MDN Reference",
25025                     "url": "https://developer.mozilla.org/docs/Web/CSS/animation-delay"
25026                 }
25027             ],
25028             "description": "Defines when the animation will start.",
25029             "restrictions": [
25030                 "time"
25031             ]
25032         },
25033         {
25034             "name": "animation-direction",
25035             "values": [
25036                 {
25037                     "name": "alternate",
25038                     "description": "The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction."
25039                 },
25040                 {
25041                     "name": "alternate-reverse",
25042                     "description": "The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction."
25043                 },
25044                 {
25045                     "name": "normal",
25046                     "description": "Normal playback."
25047                 },
25048                 {
25049                     "name": "reverse",
25050                     "description": "All iterations of the animation are played in the reverse direction from the way they were specified."
25051                 }
25052             ],
25053             "syntax": "<single-animation-direction>#",
25054             "relevance": 55,
25055             "references": [
25056                 {
25057                     "name": "MDN Reference",
25058                     "url": "https://developer.mozilla.org/docs/Web/CSS/animation-direction"
25059                 }
25060             ],
25061             "description": "Defines whether or not the animation should play in reverse on alternate cycles.",
25062             "restrictions": [
25063                 "enum"
25064             ]
25065         },
25066         {
25067             "name": "animation-duration",
25068             "syntax": "<time>#",
25069             "relevance": 64,
25070             "references": [
25071                 {
25072                     "name": "MDN Reference",
25073                     "url": "https://developer.mozilla.org/docs/Web/CSS/animation-duration"
25074                 }
25075             ],
25076             "description": "Defines the length of time that an animation takes to complete one cycle.",
25077             "restrictions": [
25078                 "time"
25079             ]
25080         },
25081         {
25082             "name": "animation-fill-mode",
25083             "values": [
25084                 {
25085                     "name": "backwards",
25086                     "description": "The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'."
25087                 },
25088                 {
25089                     "name": "both",
25090                     "description": "Both forwards and backwards fill modes are applied."
25091                 },
25092                 {
25093                     "name": "forwards",
25094                     "description": "The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes."
25095                 },
25096                 {
25097                     "name": "none",
25098                     "description": "There is no change to the property value between the time the animation is applied and the time the animation begins playing or after the animation completes."
25099                 }
25100             ],
25101             "syntax": "<single-animation-fill-mode>#",
25102             "relevance": 61,
25103             "references": [
25104                 {
25105                     "name": "MDN Reference",
25106                     "url": "https://developer.mozilla.org/docs/Web/CSS/animation-fill-mode"
25107                 }
25108             ],
25109             "description": "Defines what values are applied by the animation outside the time it is executing.",
25110             "restrictions": [
25111                 "enum"
25112             ]
25113         },
25114         {
25115             "name": "animation-iteration-count",
25116             "values": [
25117                 {
25118                     "name": "infinite",
25119                     "description": "Causes the animation to repeat forever."
25120                 }
25121             ],
25122             "syntax": "<single-animation-iteration-count>#",
25123             "relevance": 59,
25124             "references": [
25125                 {
25126                     "name": "MDN Reference",
25127                     "url": "https://developer.mozilla.org/docs/Web/CSS/animation-iteration-count"
25128                 }
25129             ],
25130             "description": "Defines the number of times an animation cycle is played. The default value is one, meaning the animation will play from beginning to end once.",
25131             "restrictions": [
25132                 "number",
25133                 "enum"
25134             ]
25135         },
25136         {
25137             "name": "animation-name",
25138             "values": [
25139                 {
25140                     "name": "none",
25141                     "description": "No animation is performed"
25142                 }
25143             ],
25144             "syntax": "[ none | <keyframes-name> ]#",
25145             "relevance": 64,
25146             "references": [
25147                 {
25148                     "name": "MDN Reference",
25149                     "url": "https://developer.mozilla.org/docs/Web/CSS/animation-name"
25150                 }
25151             ],
25152             "description": "Defines a list of animations that apply. Each name is used to select the keyframe at-rule that provides the property values for the animation.",
25153             "restrictions": [
25154                 "identifier",
25155                 "enum"
25156             ]
25157         },
25158         {
25159             "name": "animation-play-state",
25160             "values": [
25161                 {
25162                     "name": "paused",
25163                     "description": "A running animation will be paused."
25164                 },
25165                 {
25166                     "name": "running",
25167                     "description": "Resume playback of a paused animation."
25168                 }
25169             ],
25170             "syntax": "<single-animation-play-state>#",
25171             "relevance": 53,
25172             "references": [
25173                 {
25174                     "name": "MDN Reference",
25175                     "url": "https://developer.mozilla.org/docs/Web/CSS/animation-play-state"
25176                 }
25177             ],
25178             "description": "Defines whether the animation is running or paused.",
25179             "restrictions": [
25180                 "enum"
25181             ]
25182         },
25183         {
25184             "name": "animation-timing-function",
25185             "syntax": "<timing-function>#",
25186             "relevance": 68,
25187             "references": [
25188                 {
25189                     "name": "MDN Reference",
25190                     "url": "https://developer.mozilla.org/docs/Web/CSS/animation-timing-function"
25191                 }
25192             ],
25193             "description": "Describes how the animation will progress over one cycle of its duration.",
25194             "restrictions": [
25195                 "timing-function"
25196             ]
25197         },
25198         {
25199             "name": "backface-visibility",
25200             "values": [
25201                 {
25202                     "name": "hidden",
25203                     "description": "Back side is hidden."
25204                 },
25205                 {
25206                     "name": "visible",
25207                     "description": "Back side is visible."
25208                 }
25209             ],
25210             "syntax": "visible | hidden",
25211             "relevance": 59,
25212             "references": [
25213                 {
25214                     "name": "MDN Reference",
25215                     "url": "https://developer.mozilla.org/docs/Web/CSS/backface-visibility"
25216                 }
25217             ],
25218             "description": "Determines whether or not the 'back' side of a transformed element is visible when facing the viewer. With an identity transform, the front side of an element faces the viewer.",
25219             "restrictions": [
25220                 "enum"
25221             ]
25222         },
25223         {
25224             "name": "background",
25225             "values": [
25226                 {
25227                     "name": "fixed",
25228                     "description": "The background is fixed with regard to the viewport. In paged media where there is no viewport, a 'fixed' background is fixed with respect to the page box and therefore replicated on every page."
25229                 },
25230                 {
25231                     "name": "local",
25232                     "description": "The background is fixed with regard to the element's contents: if the element has a scrolling mechanism, the background scrolls with the element's contents."
25233                 },
25234                 {
25235                     "name": "none",
25236                     "description": "A value of 'none' counts as an image layer but draws nothing."
25237                 },
25238                 {
25239                     "name": "scroll",
25240                     "description": "The background is fixed with regard to the element itself and does not scroll with its contents. (It is effectively attached to the element's border.)"
25241                 }
25242             ],
25243             "syntax": "[ <bg-layer> , ]* <final-bg-layer>",
25244             "relevance": 93,
25245             "references": [
25246                 {
25247                     "name": "MDN Reference",
25248                     "url": "https://developer.mozilla.org/docs/Web/CSS/background"
25249                 }
25250             ],
25251             "description": "Shorthand property for setting most background properties at the same place in the style sheet.",
25252             "restrictions": [
25253                 "enum",
25254                 "image",
25255                 "color",
25256                 "position",
25257                 "length",
25258                 "repeat",
25259                 "percentage",
25260                 "box"
25261             ]
25262         },
25263         {
25264             "name": "background-attachment",
25265             "values": [
25266                 {
25267                     "name": "fixed",
25268                     "description": "The background is fixed with regard to the viewport. In paged media where there is no viewport, a 'fixed' background is fixed with respect to the page box and therefore replicated on every page."
25269                 },
25270                 {
25271                     "name": "local",
25272                     "description": "The background is fixed with regard to the element’s contents: if the element has a scrolling mechanism, the background scrolls with the element’s contents."
25273                 },
25274                 {
25275                     "name": "scroll",
25276                     "description": "The background is fixed with regard to the element itself and does not scroll with its contents. (It is effectively attached to the element’s border.)"
25277                 }
25278             ],
25279             "syntax": "<attachment>#",
25280             "relevance": 53,
25281             "references": [
25282                 {
25283                     "name": "MDN Reference",
25284                     "url": "https://developer.mozilla.org/docs/Web/CSS/background-attachment"
25285                 }
25286             ],
25287             "description": "Specifies whether the background images are fixed with regard to the viewport ('fixed') or scroll along with the element ('scroll') or its contents ('local').",
25288             "restrictions": [
25289                 "enum"
25290             ]
25291         },
25292         {
25293             "name": "background-blend-mode",
25294             "browsers": [
25295                 "E79",
25296                 "FF30",
25297                 "S8",
25298                 "C35",
25299                 "O22"
25300             ],
25301             "values": [
25302                 {
25303                     "name": "normal",
25304                     "description": "Default attribute which specifies no blending"
25305                 },
25306                 {
25307                     "name": "multiply",
25308                     "description": "The source color is multiplied by the destination color and replaces the destination."
25309                 },
25310                 {
25311                     "name": "screen",
25312                     "description": "Multiplies the complements of the backdrop and source color values, then complements the result."
25313                 },
25314                 {
25315                     "name": "overlay",
25316                     "description": "Multiplies or screens the colors, depending on the backdrop color value."
25317                 },
25318                 {
25319                     "name": "darken",
25320                     "description": "Selects the darker of the backdrop and source colors."
25321                 },
25322                 {
25323                     "name": "lighten",
25324                     "description": "Selects the lighter of the backdrop and source colors."
25325                 },
25326                 {
25327                     "name": "color-dodge",
25328                     "description": "Brightens the backdrop color to reflect the source color."
25329                 },
25330                 {
25331                     "name": "color-burn",
25332                     "description": "Darkens the backdrop color to reflect the source color."
25333                 },
25334                 {
25335                     "name": "hard-light",
25336                     "description": "Multiplies or screens the colors, depending on the source color value."
25337                 },
25338                 {
25339                     "name": "soft-light",
25340                     "description": "Darkens or lightens the colors, depending on the source color value."
25341                 },
25342                 {
25343                     "name": "difference",
25344                     "description": "Subtracts the darker of the two constituent colors from the lighter color.."
25345                 },
25346                 {
25347                     "name": "exclusion",
25348                     "description": "Produces an effect similar to that of the Difference mode but lower in contrast."
25349                 },
25350                 {
25351                     "name": "hue",
25352                     "browsers": [
25353                         "E79",
25354                         "FF30",
25355                         "S8",
25356                         "C35",
25357                         "O22"
25358                     ],
25359                     "description": "Creates a color with the hue of the source color and the saturation and luminosity of the backdrop color."
25360                 },
25361                 {
25362                     "name": "saturation",
25363                     "browsers": [
25364                         "E79",
25365                         "FF30",
25366                         "S8",
25367                         "C35",
25368                         "O22"
25369                     ],
25370                     "description": "Creates a color with the saturation of the source color and the hue and luminosity of the backdrop color."
25371                 },
25372                 {
25373                     "name": "color",
25374                     "browsers": [
25375                         "E79",
25376                         "FF30",
25377                         "S8",
25378                         "C35",
25379                         "O22"
25380                     ],
25381                     "description": "Creates a color with the hue and saturation of the source color and the luminosity of the backdrop color."
25382                 },
25383                 {
25384                     "name": "luminosity",
25385                     "browsers": [
25386                         "E79",
25387                         "FF30",
25388                         "S8",
25389                         "C35",
25390                         "O22"
25391                     ],
25392                     "description": "Creates a color with the luminosity of the source color and the hue and saturation of the backdrop color."
25393                 }
25394             ],
25395             "syntax": "<blend-mode>#",
25396             "relevance": 50,
25397             "references": [
25398                 {
25399                     "name": "MDN Reference",
25400                     "url": "https://developer.mozilla.org/docs/Web/CSS/background-blend-mode"
25401                 }
25402             ],
25403             "description": "Defines the blending mode of each background layer.",
25404             "restrictions": [
25405                 "enum"
25406             ]
25407         },
25408         {
25409             "name": "background-clip",
25410             "syntax": "<box>#",
25411             "relevance": 67,
25412             "references": [
25413                 {
25414                     "name": "MDN Reference",
25415                     "url": "https://developer.mozilla.org/docs/Web/CSS/background-clip"
25416                 }
25417             ],
25418             "description": "Determines the background painting area.",
25419             "restrictions": [
25420                 "box"
25421             ]
25422         },
25423         {
25424             "name": "background-color",
25425             "syntax": "<color>",
25426             "relevance": 94,
25427             "references": [
25428                 {
25429                     "name": "MDN Reference",
25430                     "url": "https://developer.mozilla.org/docs/Web/CSS/background-color"
25431                 }
25432             ],
25433             "description": "Sets the background color of an element.",
25434             "restrictions": [
25435                 "color"
25436             ]
25437         },
25438         {
25439             "name": "background-image",
25440             "values": [
25441                 {
25442                     "name": "none",
25443                     "description": "Counts as an image layer but draws nothing."
25444                 }
25445             ],
25446             "syntax": "<bg-image>#",
25447             "relevance": 88,
25448             "references": [
25449                 {
25450                     "name": "MDN Reference",
25451                     "url": "https://developer.mozilla.org/docs/Web/CSS/background-image"
25452                 }
25453             ],
25454             "description": "Sets the background image(s) of an element.",
25455             "restrictions": [
25456                 "image",
25457                 "enum"
25458             ]
25459         },
25460         {
25461             "name": "background-origin",
25462             "syntax": "<box>#",
25463             "relevance": 53,
25464             "references": [
25465                 {
25466                     "name": "MDN Reference",
25467                     "url": "https://developer.mozilla.org/docs/Web/CSS/background-origin"
25468                 }
25469             ],
25470             "description": "For elements rendered as a single box, specifies the background positioning area. For elements rendered as multiple boxes (e.g., inline boxes on several lines, boxes on several pages) specifies which boxes 'box-decoration-break' operates on to determine the background positioning area(s).",
25471             "restrictions": [
25472                 "box"
25473             ]
25474         },
25475         {
25476             "name": "background-position",
25477             "syntax": "<bg-position>#",
25478             "relevance": 87,
25479             "references": [
25480                 {
25481                     "name": "MDN Reference",
25482                     "url": "https://developer.mozilla.org/docs/Web/CSS/background-position"
25483                 }
25484             ],
25485             "description": "Specifies the initial position of the background image(s) (after any resizing) within their corresponding background positioning area.",
25486             "restrictions": [
25487                 "position",
25488                 "length",
25489                 "percentage"
25490             ]
25491         },
25492         {
25493             "name": "background-position-x",
25494             "values": [
25495                 {
25496                     "name": "center",
25497                     "description": "Equivalent to '50%' ('left 50%') for the horizontal position if the horizontal position is not otherwise specified, or '50%' ('top 50%') for the vertical position if it is."
25498                 },
25499                 {
25500                     "name": "left",
25501                     "description": "Equivalent to '0%' for the horizontal position if one or two values are given, otherwise specifies the left edge as the origin for the next offset."
25502                 },
25503                 {
25504                     "name": "right",
25505                     "description": "Equivalent to '100%' for the horizontal position if one or two values are given, otherwise specifies the right edge as the origin for the next offset."
25506                 }
25507             ],
25508             "status": "experimental",
25509             "syntax": "[ center | [ [ left | right | x-start | x-end ]? <length-percentage>? ]! ]#",
25510             "relevance": 54,
25511             "references": [
25512                 {
25513                     "name": "MDN Reference",
25514                     "url": "https://developer.mozilla.org/docs/Web/CSS/background-position-x"
25515                 }
25516             ],
25517             "description": "If background images have been specified, this property specifies their initial position (after any resizing) within their corresponding background positioning area.",
25518             "restrictions": [
25519                 "length",
25520                 "percentage"
25521             ]
25522         },
25523         {
25524             "name": "background-position-y",
25525             "values": [
25526                 {
25527                     "name": "bottom",
25528                     "description": "Equivalent to '100%' for the vertical position if one or two values are given, otherwise specifies the bottom edge as the origin for the next offset."
25529                 },
25530                 {
25531                     "name": "center",
25532                     "description": "Equivalent to '50%' ('left 50%') for the horizontal position if the horizontal position is not otherwise specified, or '50%' ('top 50%') for the vertical position if it is."
25533                 },
25534                 {
25535                     "name": "top",
25536                     "description": "Equivalent to '0%' for the vertical position if one or two values are given, otherwise specifies the top edge as the origin for the next offset."
25537                 }
25538             ],
25539             "status": "experimental",
25540             "syntax": "[ center | [ [ top | bottom | y-start | y-end ]? <length-percentage>? ]! ]#",
25541             "relevance": 53,
25542             "references": [
25543                 {
25544                     "name": "MDN Reference",
25545                     "url": "https://developer.mozilla.org/docs/Web/CSS/background-position-y"
25546                 }
25547             ],
25548             "description": "If background images have been specified, this property specifies their initial position (after any resizing) within their corresponding background positioning area.",
25549             "restrictions": [
25550                 "length",
25551                 "percentage"
25552             ]
25553         },
25554         {
25555             "name": "background-repeat",
25556             "values": [],
25557             "syntax": "<repeat-style>#",
25558             "relevance": 85,
25559             "references": [
25560                 {
25561                     "name": "MDN Reference",
25562                     "url": "https://developer.mozilla.org/docs/Web/CSS/background-repeat"
25563                 }
25564             ],
25565             "description": "Specifies how background images are tiled after they have been sized and positioned.",
25566             "restrictions": [
25567                 "repeat"
25568             ]
25569         },
25570         {
25571             "name": "background-size",
25572             "values": [
25573                 {
25574                     "name": "auto",
25575                     "description": "Resolved by using the image’s intrinsic ratio and the size of the other dimension, or failing that, using the image’s intrinsic size, or failing that, treating it as 100%."
25576                 },
25577                 {
25578                     "name": "contain",
25579                     "description": "Scale the image, while preserving its intrinsic aspect ratio (if any), to the largest size such that both its width and its height can fit inside the background positioning area."
25580                 },
25581                 {
25582                     "name": "cover",
25583                     "description": "Scale the image, while preserving its intrinsic aspect ratio (if any), to the smallest size such that both its width and its height can completely cover the background positioning area."
25584                 }
25585             ],
25586             "syntax": "<bg-size>#",
25587             "relevance": 85,
25588             "references": [
25589                 {
25590                     "name": "MDN Reference",
25591                     "url": "https://developer.mozilla.org/docs/Web/CSS/background-size"
25592                 }
25593             ],
25594             "description": "Specifies the size of the background images.",
25595             "restrictions": [
25596                 "length",
25597                 "percentage"
25598             ]
25599         },
25600         {
25601             "name": "behavior",
25602             "browsers": [
25603                 "IE6"
25604             ],
25605             "relevance": 50,
25606             "description": "IE only. Used to extend behaviors of the browser.",
25607             "restrictions": [
25608                 "url"
25609             ]
25610         },
25611         {
25612             "name": "block-size",
25613             "browsers": [
25614                 "E79",
25615                 "FF41",
25616                 "S12.1",
25617                 "C57",
25618                 "O44"
25619             ],
25620             "values": [
25621                 {
25622                     "name": "auto",
25623                     "description": "Depends on the values of other properties."
25624                 }
25625             ],
25626             "syntax": "<'width'>",
25627             "relevance": 50,
25628             "references": [
25629                 {
25630                     "name": "MDN Reference",
25631                     "url": "https://developer.mozilla.org/docs/Web/CSS/block-size"
25632                 }
25633             ],
25634             "description": "Logical 'width'. Mapping depends on the element’s 'writing-mode'.",
25635             "restrictions": [
25636                 "length",
25637                 "percentage"
25638             ]
25639         },
25640         {
25641             "name": "border",
25642             "syntax": "<line-width> || <line-style> || <color>",
25643             "relevance": 95,
25644             "references": [
25645                 {
25646                     "name": "MDN Reference",
25647                     "url": "https://developer.mozilla.org/docs/Web/CSS/border"
25648                 }
25649             ],
25650             "description": "Shorthand property for setting border width, style, and color.",
25651             "restrictions": [
25652                 "length",
25653                 "line-width",
25654                 "line-style",
25655                 "color"
25656             ]
25657         },
25658         {
25659             "name": "border-block-end",
25660             "browsers": [
25661                 "E79",
25662                 "FF41",
25663                 "S12.1",
25664                 "C69",
25665                 "O56"
25666             ],
25667             "syntax": "<'border-top-width'> || <'border-top-style'> || <'color'>",
25668             "relevance": 50,
25669             "references": [
25670                 {
25671                     "name": "MDN Reference",
25672                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-block-end"
25673                 }
25674             ],
25675             "description": "Logical 'border-bottom'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
25676             "restrictions": [
25677                 "length",
25678                 "line-width",
25679                 "line-style",
25680                 "color"
25681             ]
25682         },
25683         {
25684             "name": "border-block-start",
25685             "browsers": [
25686                 "E79",
25687                 "FF41",
25688                 "S12.1",
25689                 "C69",
25690                 "O56"
25691             ],
25692             "syntax": "<'border-top-width'> || <'border-top-style'> || <'color'>",
25693             "relevance": 50,
25694             "references": [
25695                 {
25696                     "name": "MDN Reference",
25697                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-block-start"
25698                 }
25699             ],
25700             "description": "Logical 'border-top'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
25701             "restrictions": [
25702                 "length",
25703                 "line-width",
25704                 "line-style",
25705                 "color"
25706             ]
25707         },
25708         {
25709             "name": "border-block-end-color",
25710             "browsers": [
25711                 "E79",
25712                 "FF41",
25713                 "S12.1",
25714                 "C69",
25715                 "O56"
25716             ],
25717             "syntax": "<'border-top-color'>",
25718             "relevance": 50,
25719             "references": [
25720                 {
25721                     "name": "MDN Reference",
25722                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-block-end-color"
25723                 }
25724             ],
25725             "description": "Logical 'border-bottom-color'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
25726             "restrictions": [
25727                 "color"
25728             ]
25729         },
25730         {
25731             "name": "border-block-start-color",
25732             "browsers": [
25733                 "E79",
25734                 "FF41",
25735                 "S12.1",
25736                 "C69",
25737                 "O56"
25738             ],
25739             "syntax": "<'border-top-color'>",
25740             "relevance": 50,
25741             "references": [
25742                 {
25743                     "name": "MDN Reference",
25744                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-block-start-color"
25745                 }
25746             ],
25747             "description": "Logical 'border-top-color'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
25748             "restrictions": [
25749                 "color"
25750             ]
25751         },
25752         {
25753             "name": "border-block-end-style",
25754             "browsers": [
25755                 "E79",
25756                 "FF41",
25757                 "S12.1",
25758                 "C69",
25759                 "O56"
25760             ],
25761             "syntax": "<'border-top-style'>",
25762             "relevance": 50,
25763             "references": [
25764                 {
25765                     "name": "MDN Reference",
25766                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-block-end-style"
25767                 }
25768             ],
25769             "description": "Logical 'border-bottom-style'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
25770             "restrictions": [
25771                 "line-style"
25772             ]
25773         },
25774         {
25775             "name": "border-block-start-style",
25776             "browsers": [
25777                 "E79",
25778                 "FF41",
25779                 "S12.1",
25780                 "C69",
25781                 "O56"
25782             ],
25783             "syntax": "<'border-top-style'>",
25784             "relevance": 50,
25785             "references": [
25786                 {
25787                     "name": "MDN Reference",
25788                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-block-start-style"
25789                 }
25790             ],
25791             "description": "Logical 'border-top-style'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
25792             "restrictions": [
25793                 "line-style"
25794             ]
25795         },
25796         {
25797             "name": "border-block-end-width",
25798             "browsers": [
25799                 "E79",
25800                 "FF41",
25801                 "S12.1",
25802                 "C69",
25803                 "O56"
25804             ],
25805             "syntax": "<'border-top-width'>",
25806             "relevance": 50,
25807             "references": [
25808                 {
25809                     "name": "MDN Reference",
25810                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-block-end-width"
25811                 }
25812             ],
25813             "description": "Logical 'border-bottom-width'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
25814             "restrictions": [
25815                 "length",
25816                 "line-width"
25817             ]
25818         },
25819         {
25820             "name": "border-block-start-width",
25821             "browsers": [
25822                 "E79",
25823                 "FF41",
25824                 "S12.1",
25825                 "C69",
25826                 "O56"
25827             ],
25828             "syntax": "<'border-top-width'>",
25829             "relevance": 50,
25830             "references": [
25831                 {
25832                     "name": "MDN Reference",
25833                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-block-start-width"
25834                 }
25835             ],
25836             "description": "Logical 'border-top-width'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
25837             "restrictions": [
25838                 "length",
25839                 "line-width"
25840             ]
25841         },
25842         {
25843             "name": "border-bottom",
25844             "syntax": "<line-width> || <line-style> || <color>",
25845             "relevance": 88,
25846             "references": [
25847                 {
25848                     "name": "MDN Reference",
25849                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-bottom"
25850                 }
25851             ],
25852             "description": "Shorthand property for setting border width, style and color.",
25853             "restrictions": [
25854                 "length",
25855                 "line-width",
25856                 "line-style",
25857                 "color"
25858             ]
25859         },
25860         {
25861             "name": "border-bottom-color",
25862             "syntax": "<'border-top-color'>",
25863             "relevance": 71,
25864             "references": [
25865                 {
25866                     "name": "MDN Reference",
25867                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-bottom-color"
25868                 }
25869             ],
25870             "description": "Sets the color of the bottom border.",
25871             "restrictions": [
25872                 "color"
25873             ]
25874         },
25875         {
25876             "name": "border-bottom-left-radius",
25877             "syntax": "<length-percentage>{1,2}",
25878             "relevance": 74,
25879             "references": [
25880                 {
25881                     "name": "MDN Reference",
25882                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-bottom-left-radius"
25883                 }
25884             ],
25885             "description": "Defines the radii of the bottom left outer border edge.",
25886             "restrictions": [
25887                 "length",
25888                 "percentage"
25889             ]
25890         },
25891         {
25892             "name": "border-bottom-right-radius",
25893             "syntax": "<length-percentage>{1,2}",
25894             "relevance": 73,
25895             "references": [
25896                 {
25897                     "name": "MDN Reference",
25898                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-bottom-right-radius"
25899                 }
25900             ],
25901             "description": "Defines the radii of the bottom right outer border edge.",
25902             "restrictions": [
25903                 "length",
25904                 "percentage"
25905             ]
25906         },
25907         {
25908             "name": "border-bottom-style",
25909             "syntax": "<line-style>",
25910             "relevance": 57,
25911             "references": [
25912                 {
25913                     "name": "MDN Reference",
25914                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-bottom-style"
25915                 }
25916             ],
25917             "description": "Sets the style of the bottom border.",
25918             "restrictions": [
25919                 "line-style"
25920             ]
25921         },
25922         {
25923             "name": "border-bottom-width",
25924             "syntax": "<line-width>",
25925             "relevance": 62,
25926             "references": [
25927                 {
25928                     "name": "MDN Reference",
25929                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-bottom-width"
25930                 }
25931             ],
25932             "description": "Sets the thickness of the bottom border.",
25933             "restrictions": [
25934                 "length",
25935                 "line-width"
25936             ]
25937         },
25938         {
25939             "name": "border-collapse",
25940             "values": [
25941                 {
25942                     "name": "collapse",
25943                     "description": "Selects the collapsing borders model."
25944                 },
25945                 {
25946                     "name": "separate",
25947                     "description": "Selects the separated borders border model."
25948                 }
25949             ],
25950             "syntax": "collapse | separate",
25951             "relevance": 75,
25952             "references": [
25953                 {
25954                     "name": "MDN Reference",
25955                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-collapse"
25956                 }
25957             ],
25958             "description": "Selects a table's border model.",
25959             "restrictions": [
25960                 "enum"
25961             ]
25962         },
25963         {
25964             "name": "border-color",
25965             "values": [],
25966             "syntax": "<color>{1,4}",
25967             "relevance": 86,
25968             "references": [
25969                 {
25970                     "name": "MDN Reference",
25971                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-color"
25972                 }
25973             ],
25974             "description": "The color of the border around all four edges of an element.",
25975             "restrictions": [
25976                 "color"
25977             ]
25978         },
25979         {
25980             "name": "border-image",
25981             "values": [
25982                 {
25983                     "name": "auto",
25984                     "description": "If 'auto' is specified then the border image width is the intrinsic width or height (whichever is applicable) of the corresponding image slice. If the image does not have the required intrinsic dimension then the corresponding border-width is used instead."
25985                 },
25986                 {
25987                     "name": "fill",
25988                     "description": "Causes the middle part of the border-image to be preserved."
25989                 },
25990                 {
25991                     "name": "none",
25992                     "description": "Use the border styles."
25993                 },
25994                 {
25995                     "name": "repeat",
25996                     "description": "The image is tiled (repeated) to fill the area."
25997                 },
25998                 {
25999                     "name": "round",
26000                     "description": "The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the image is rescaled so that it does."
26001                 },
26002                 {
26003                     "name": "space",
26004                     "description": "The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the extra space is distributed around the tiles."
26005                 },
26006                 {
26007                     "name": "stretch",
26008                     "description": "The image is stretched to fill the area."
26009                 },
26010                 {
26011                     "name": "url()"
26012                 }
26013             ],
26014             "syntax": "<'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>",
26015             "relevance": 52,
26016             "references": [
26017                 {
26018                     "name": "MDN Reference",
26019                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-image"
26020                 }
26021             ],
26022             "description": "Shorthand property for setting 'border-image-source', 'border-image-slice', 'border-image-width', 'border-image-outset' and 'border-image-repeat'. Omitted values are set to their initial values.",
26023             "restrictions": [
26024                 "length",
26025                 "percentage",
26026                 "number",
26027                 "url",
26028                 "enum"
26029             ]
26030         },
26031         {
26032             "name": "border-image-outset",
26033             "syntax": "[ <length> | <number> ]{1,4}",
26034             "relevance": 50,
26035             "references": [
26036                 {
26037                     "name": "MDN Reference",
26038                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-image-outset"
26039                 }
26040             ],
26041             "description": "The values specify the amount by which the border image area extends beyond the border box on the top, right, bottom, and left sides respectively. If the fourth value is absent, it is the same as the second. If the third one is also absent, it is the same as the first. If the second one is also absent, it is the same as the first. Numbers represent multiples of the corresponding border-width.",
26042             "restrictions": [
26043                 "length",
26044                 "number"
26045             ]
26046         },
26047         {
26048             "name": "border-image-repeat",
26049             "values": [
26050                 {
26051                     "name": "repeat",
26052                     "description": "The image is tiled (repeated) to fill the area."
26053                 },
26054                 {
26055                     "name": "round",
26056                     "description": "The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the image is rescaled so that it does."
26057                 },
26058                 {
26059                     "name": "space",
26060                     "description": "The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the extra space is distributed around the tiles."
26061                 },
26062                 {
26063                     "name": "stretch",
26064                     "description": "The image is stretched to fill the area."
26065                 }
26066             ],
26067             "syntax": "[ stretch | repeat | round | space ]{1,2}",
26068             "relevance": 51,
26069             "references": [
26070                 {
26071                     "name": "MDN Reference",
26072                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-image-repeat"
26073                 }
26074             ],
26075             "description": "Specifies how the images for the sides and the middle part of the border image are scaled and tiled. If the second keyword is absent, it is assumed to be the same as the first.",
26076             "restrictions": [
26077                 "enum"
26078             ]
26079         },
26080         {
26081             "name": "border-image-slice",
26082             "values": [
26083                 {
26084                     "name": "fill",
26085                     "description": "Causes the middle part of the border-image to be preserved."
26086                 }
26087             ],
26088             "syntax": "<number-percentage>{1,4} && fill?",
26089             "relevance": 51,
26090             "references": [
26091                 {
26092                     "name": "MDN Reference",
26093                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-image-slice"
26094                 }
26095             ],
26096             "description": "Specifies inward offsets from the top, right, bottom, and left edges of the image, dividing it into nine regions: four corners, four edges and a middle.",
26097             "restrictions": [
26098                 "number",
26099                 "percentage"
26100             ]
26101         },
26102         {
26103             "name": "border-image-source",
26104             "values": [
26105                 {
26106                     "name": "none",
26107                     "description": "Use the border styles."
26108                 }
26109             ],
26110             "syntax": "none | <image>",
26111             "relevance": 50,
26112             "references": [
26113                 {
26114                     "name": "MDN Reference",
26115                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-image-source"
26116                 }
26117             ],
26118             "description": "Specifies an image to use instead of the border styles given by the 'border-style' properties and as an additional background layer for the element. If the value is 'none' or if the image cannot be displayed, the border styles will be used.",
26119             "restrictions": [
26120                 "image"
26121             ]
26122         },
26123         {
26124             "name": "border-image-width",
26125             "values": [
26126                 {
26127                     "name": "auto",
26128                     "description": "The border image width is the intrinsic width or height (whichever is applicable) of the corresponding image slice. If the image does not have the required intrinsic dimension then the corresponding border-width is used instead."
26129                 }
26130             ],
26131             "syntax": "[ <length-percentage> | <number> | auto ]{1,4}",
26132             "relevance": 51,
26133             "references": [
26134                 {
26135                     "name": "MDN Reference",
26136                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-image-width"
26137                 }
26138             ],
26139             "description": "The four values of 'border-image-width' specify offsets that are used to divide the border image area into nine parts. They represent inward distances from the top, right, bottom, and left sides of the area, respectively.",
26140             "restrictions": [
26141                 "length",
26142                 "percentage",
26143                 "number"
26144             ]
26145         },
26146         {
26147             "name": "border-inline-end",
26148             "browsers": [
26149                 "E79",
26150                 "FF41",
26151                 "S12.1",
26152                 "C69",
26153                 "O56"
26154             ],
26155             "syntax": "<'border-top-width'> || <'border-top-style'> || <'color'>",
26156             "relevance": 50,
26157             "references": [
26158                 {
26159                     "name": "MDN Reference",
26160                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-inline-end"
26161                 }
26162             ],
26163             "description": "Logical 'border-right'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
26164             "restrictions": [
26165                 "length",
26166                 "line-width",
26167                 "line-style",
26168                 "color"
26169             ]
26170         },
26171         {
26172             "name": "border-inline-start",
26173             "browsers": [
26174                 "E79",
26175                 "FF41",
26176                 "S12.1",
26177                 "C69",
26178                 "O56"
26179             ],
26180             "syntax": "<'border-top-width'> || <'border-top-style'> || <'color'>",
26181             "relevance": 50,
26182             "references": [
26183                 {
26184                     "name": "MDN Reference",
26185                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-inline-start"
26186                 }
26187             ],
26188             "description": "Logical 'border-left'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
26189             "restrictions": [
26190                 "length",
26191                 "line-width",
26192                 "line-style",
26193                 "color"
26194             ]
26195         },
26196         {
26197             "name": "border-inline-end-color",
26198             "browsers": [
26199                 "E79",
26200                 "FF41",
26201                 "S12.1",
26202                 "C69",
26203                 "O56"
26204             ],
26205             "syntax": "<'border-top-color'>",
26206             "relevance": 50,
26207             "references": [
26208                 {
26209                     "name": "MDN Reference",
26210                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-inline-end-color"
26211                 }
26212             ],
26213             "description": "Logical 'border-right-color'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
26214             "restrictions": [
26215                 "color"
26216             ]
26217         },
26218         {
26219             "name": "border-inline-start-color",
26220             "browsers": [
26221                 "E79",
26222                 "FF41",
26223                 "S12.1",
26224                 "C69",
26225                 "O56"
26226             ],
26227             "syntax": "<'border-top-color'>",
26228             "relevance": 50,
26229             "references": [
26230                 {
26231                     "name": "MDN Reference",
26232                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-inline-start-color"
26233                 }
26234             ],
26235             "description": "Logical 'border-left-color'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
26236             "restrictions": [
26237                 "color"
26238             ]
26239         },
26240         {
26241             "name": "border-inline-end-style",
26242             "browsers": [
26243                 "E79",
26244                 "FF41",
26245                 "S12.1",
26246                 "C69",
26247                 "O56"
26248             ],
26249             "syntax": "<'border-top-style'>",
26250             "relevance": 50,
26251             "references": [
26252                 {
26253                     "name": "MDN Reference",
26254                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-inline-end-style"
26255                 }
26256             ],
26257             "description": "Logical 'border-right-style'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
26258             "restrictions": [
26259                 "line-style"
26260             ]
26261         },
26262         {
26263             "name": "border-inline-start-style",
26264             "browsers": [
26265                 "E79",
26266                 "FF41",
26267                 "S12.1",
26268                 "C69",
26269                 "O56"
26270             ],
26271             "syntax": "<'border-top-style'>",
26272             "relevance": 50,
26273             "references": [
26274                 {
26275                     "name": "MDN Reference",
26276                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-inline-start-style"
26277                 }
26278             ],
26279             "description": "Logical 'border-left-style'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
26280             "restrictions": [
26281                 "line-style"
26282             ]
26283         },
26284         {
26285             "name": "border-inline-end-width",
26286             "browsers": [
26287                 "E79",
26288                 "FF41",
26289                 "S12.1",
26290                 "C69",
26291                 "O56"
26292             ],
26293             "syntax": "<'border-top-width'>",
26294             "relevance": 50,
26295             "references": [
26296                 {
26297                     "name": "MDN Reference",
26298                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-inline-end-width"
26299                 }
26300             ],
26301             "description": "Logical 'border-right-width'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
26302             "restrictions": [
26303                 "length",
26304                 "line-width"
26305             ]
26306         },
26307         {
26308             "name": "border-inline-start-width",
26309             "browsers": [
26310                 "E79",
26311                 "FF41",
26312                 "S12.1",
26313                 "C69",
26314                 "O56"
26315             ],
26316             "syntax": "<'border-top-width'>",
26317             "relevance": 50,
26318             "references": [
26319                 {
26320                     "name": "MDN Reference",
26321                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-inline-start-width"
26322                 }
26323             ],
26324             "description": "Logical 'border-left-width'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
26325             "restrictions": [
26326                 "length",
26327                 "line-width"
26328             ]
26329         },
26330         {
26331             "name": "border-left",
26332             "syntax": "<line-width> || <line-style> || <color>",
26333             "relevance": 82,
26334             "references": [
26335                 {
26336                     "name": "MDN Reference",
26337                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-left"
26338                 }
26339             ],
26340             "description": "Shorthand property for setting border width, style and color",
26341             "restrictions": [
26342                 "length",
26343                 "line-width",
26344                 "line-style",
26345                 "color"
26346             ]
26347         },
26348         {
26349             "name": "border-left-color",
26350             "syntax": "<color>",
26351             "relevance": 65,
26352             "references": [
26353                 {
26354                     "name": "MDN Reference",
26355                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-left-color"
26356                 }
26357             ],
26358             "description": "Sets the color of the left border.",
26359             "restrictions": [
26360                 "color"
26361             ]
26362         },
26363         {
26364             "name": "border-left-style",
26365             "syntax": "<line-style>",
26366             "relevance": 54,
26367             "references": [
26368                 {
26369                     "name": "MDN Reference",
26370                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-left-style"
26371                 }
26372             ],
26373             "description": "Sets the style of the left border.",
26374             "restrictions": [
26375                 "line-style"
26376             ]
26377         },
26378         {
26379             "name": "border-left-width",
26380             "syntax": "<line-width>",
26381             "relevance": 58,
26382             "references": [
26383                 {
26384                     "name": "MDN Reference",
26385                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-left-width"
26386                 }
26387             ],
26388             "description": "Sets the thickness of the left border.",
26389             "restrictions": [
26390                 "length",
26391                 "line-width"
26392             ]
26393         },
26394         {
26395             "name": "border-radius",
26396             "syntax": "<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?",
26397             "relevance": 91,
26398             "references": [
26399                 {
26400                     "name": "MDN Reference",
26401                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-radius"
26402                 }
26403             ],
26404             "description": "Defines the radii of the outer border edge.",
26405             "restrictions": [
26406                 "length",
26407                 "percentage"
26408             ]
26409         },
26410         {
26411             "name": "border-right",
26412             "syntax": "<line-width> || <line-style> || <color>",
26413             "relevance": 81,
26414             "references": [
26415                 {
26416                     "name": "MDN Reference",
26417                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-right"
26418                 }
26419             ],
26420             "description": "Shorthand property for setting border width, style and color",
26421             "restrictions": [
26422                 "length",
26423                 "line-width",
26424                 "line-style",
26425                 "color"
26426             ]
26427         },
26428         {
26429             "name": "border-right-color",
26430             "syntax": "<color>",
26431             "relevance": 64,
26432             "references": [
26433                 {
26434                     "name": "MDN Reference",
26435                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-right-color"
26436                 }
26437             ],
26438             "description": "Sets the color of the right border.",
26439             "restrictions": [
26440                 "color"
26441             ]
26442         },
26443         {
26444             "name": "border-right-style",
26445             "syntax": "<line-style>",
26446             "relevance": 54,
26447             "references": [
26448                 {
26449                     "name": "MDN Reference",
26450                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-right-style"
26451                 }
26452             ],
26453             "description": "Sets the style of the right border.",
26454             "restrictions": [
26455                 "line-style"
26456             ]
26457         },
26458         {
26459             "name": "border-right-width",
26460             "syntax": "<line-width>",
26461             "relevance": 60,
26462             "references": [
26463                 {
26464                     "name": "MDN Reference",
26465                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-right-width"
26466                 }
26467             ],
26468             "description": "Sets the thickness of the right border.",
26469             "restrictions": [
26470                 "length",
26471                 "line-width"
26472             ]
26473         },
26474         {
26475             "name": "border-spacing",
26476             "syntax": "<length> <length>?",
26477             "relevance": 68,
26478             "references": [
26479                 {
26480                     "name": "MDN Reference",
26481                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-spacing"
26482                 }
26483             ],
26484             "description": "The lengths specify the distance that separates adjoining cell borders. If one length is specified, it gives both the horizontal and vertical spacing. If two are specified, the first gives the horizontal spacing and the second the vertical spacing. Lengths may not be negative.",
26485             "restrictions": [
26486                 "length"
26487             ]
26488         },
26489         {
26490             "name": "border-style",
26491             "values": [],
26492             "syntax": "<line-style>{1,4}",
26493             "relevance": 79,
26494             "references": [
26495                 {
26496                     "name": "MDN Reference",
26497                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-style"
26498                 }
26499             ],
26500             "description": "The style of the border around edges of an element.",
26501             "restrictions": [
26502                 "line-style"
26503             ]
26504         },
26505         {
26506             "name": "border-top",
26507             "syntax": "<line-width> || <line-style> || <color>",
26508             "relevance": 87,
26509             "references": [
26510                 {
26511                     "name": "MDN Reference",
26512                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-top"
26513                 }
26514             ],
26515             "description": "Shorthand property for setting border width, style and color",
26516             "restrictions": [
26517                 "length",
26518                 "line-width",
26519                 "line-style",
26520                 "color"
26521             ]
26522         },
26523         {
26524             "name": "border-top-color",
26525             "syntax": "<color>",
26526             "relevance": 71,
26527             "references": [
26528                 {
26529                     "name": "MDN Reference",
26530                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-top-color"
26531                 }
26532             ],
26533             "description": "Sets the color of the top border.",
26534             "restrictions": [
26535                 "color"
26536             ]
26537         },
26538         {
26539             "name": "border-top-left-radius",
26540             "syntax": "<length-percentage>{1,2}",
26541             "relevance": 74,
26542             "references": [
26543                 {
26544                     "name": "MDN Reference",
26545                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-top-left-radius"
26546                 }
26547             ],
26548             "description": "Defines the radii of the top left outer border edge.",
26549             "restrictions": [
26550                 "length",
26551                 "percentage"
26552             ]
26553         },
26554         {
26555             "name": "border-top-right-radius",
26556             "syntax": "<length-percentage>{1,2}",
26557             "relevance": 72,
26558             "references": [
26559                 {
26560                     "name": "MDN Reference",
26561                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-top-right-radius"
26562                 }
26563             ],
26564             "description": "Defines the radii of the top right outer border edge.",
26565             "restrictions": [
26566                 "length",
26567                 "percentage"
26568             ]
26569         },
26570         {
26571             "name": "border-top-style",
26572             "syntax": "<line-style>",
26573             "relevance": 57,
26574             "references": [
26575                 {
26576                     "name": "MDN Reference",
26577                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-top-style"
26578                 }
26579             ],
26580             "description": "Sets the style of the top border.",
26581             "restrictions": [
26582                 "line-style"
26583             ]
26584         },
26585         {
26586             "name": "border-top-width",
26587             "syntax": "<line-width>",
26588             "relevance": 61,
26589             "references": [
26590                 {
26591                     "name": "MDN Reference",
26592                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-top-width"
26593                 }
26594             ],
26595             "description": "Sets the thickness of the top border.",
26596             "restrictions": [
26597                 "length",
26598                 "line-width"
26599             ]
26600         },
26601         {
26602             "name": "border-width",
26603             "values": [],
26604             "syntax": "<line-width>{1,4}",
26605             "relevance": 81,
26606             "references": [
26607                 {
26608                     "name": "MDN Reference",
26609                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-width"
26610                 }
26611             ],
26612             "description": "Shorthand that sets the four 'border-*-width' properties. If it has four values, they set top, right, bottom and left in that order. If left is missing, it is the same as right; if bottom is missing, it is the same as top; if right is missing, it is the same as top.",
26613             "restrictions": [
26614                 "length",
26615                 "line-width"
26616             ]
26617         },
26618         {
26619             "name": "bottom",
26620             "values": [
26621                 {
26622                     "name": "auto",
26623                     "description": "For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well"
26624                 }
26625             ],
26626             "syntax": "<length> | <percentage> | auto",
26627             "relevance": 89,
26628             "references": [
26629                 {
26630                     "name": "MDN Reference",
26631                     "url": "https://developer.mozilla.org/docs/Web/CSS/bottom"
26632                 }
26633             ],
26634             "description": "Specifies how far an absolutely positioned box's bottom margin edge is offset above the bottom edge of the box's 'containing block'.",
26635             "restrictions": [
26636                 "length",
26637                 "percentage"
26638             ]
26639         },
26640         {
26641             "name": "box-decoration-break",
26642             "browsers": [
26643                 "E79",
26644                 "FF32",
26645                 "S6.1",
26646                 "C22",
26647                 "O15"
26648             ],
26649             "values": [
26650                 {
26651                     "name": "clone",
26652                     "description": "Each box is independently wrapped with the border and padding."
26653                 },
26654                 {
26655                     "name": "slice",
26656                     "description": "The effect is as though the element were rendered with no breaks present, and then sliced by the breaks afterward."
26657                 }
26658             ],
26659             "syntax": "slice | clone",
26660             "relevance": 50,
26661             "references": [
26662                 {
26663                     "name": "MDN Reference",
26664                     "url": "https://developer.mozilla.org/docs/Web/CSS/box-decoration-break"
26665                 }
26666             ],
26667             "description": "Specifies whether individual boxes are treated as broken pieces of one continuous box, or whether each box is individually wrapped with the border and padding.",
26668             "restrictions": [
26669                 "enum"
26670             ]
26671         },
26672         {
26673             "name": "box-shadow",
26674             "values": [
26675                 {
26676                     "name": "inset",
26677                     "description": "Changes the drop shadow from an outer shadow (one that shadows the box onto the canvas, as if it were lifted above the canvas) to an inner shadow (one that shadows the canvas onto the box, as if the box were cut out of the canvas and shifted behind it)."
26678                 },
26679                 {
26680                     "name": "none",
26681                     "description": "No shadow."
26682                 }
26683             ],
26684             "syntax": "none | <shadow>#",
26685             "relevance": 89,
26686             "references": [
26687                 {
26688                     "name": "MDN Reference",
26689                     "url": "https://developer.mozilla.org/docs/Web/CSS/box-shadow"
26690                 }
26691             ],
26692             "description": "Attaches one or more drop-shadows to the box. The property is a comma-separated list of shadows, each specified by 2-4 length values, an optional color, and an optional 'inset' keyword. Omitted lengths are 0; omitted colors are a user agent chosen color.",
26693             "restrictions": [
26694                 "length",
26695                 "color",
26696                 "enum"
26697             ]
26698         },
26699         {
26700             "name": "box-sizing",
26701             "values": [
26702                 {
26703                     "name": "border-box",
26704                     "description": "The specified width and height (and respective min/max properties) on this element determine the border box of the element."
26705                 },
26706                 {
26707                     "name": "content-box",
26708                     "description": "Behavior of width and height as specified by CSS2.1. The specified width and height (and respective min/max properties) apply to the width and height respectively of the content box of the element."
26709                 }
26710             ],
26711             "syntax": "content-box | border-box",
26712             "relevance": 92,
26713             "references": [
26714                 {
26715                     "name": "MDN Reference",
26716                     "url": "https://developer.mozilla.org/docs/Web/CSS/box-sizing"
26717                 }
26718             ],
26719             "description": "Specifies the behavior of the 'width' and 'height' properties.",
26720             "restrictions": [
26721                 "enum"
26722             ]
26723         },
26724         {
26725             "name": "break-after",
26726             "values": [
26727                 {
26728                     "name": "always",
26729                     "description": "Always force a page break before/after the generated box."
26730                 },
26731                 {
26732                     "name": "auto",
26733                     "description": "Neither force nor forbid a page/column break before/after the principal box."
26734                 },
26735                 {
26736                     "name": "avoid",
26737                     "description": "Avoid a break before/after the principal box."
26738                 },
26739                 {
26740                     "name": "avoid-column",
26741                     "description": "Avoid a column break before/after the principal box."
26742                 },
26743                 {
26744                     "name": "avoid-page",
26745                     "description": "Avoid a page break before/after the principal box."
26746                 },
26747                 {
26748                     "name": "column",
26749                     "description": "Always force a column break before/after the principal box."
26750                 },
26751                 {
26752                     "name": "left",
26753                     "description": "Force one or two page breaks before/after the generated box so that the next page is formatted as a left page."
26754                 },
26755                 {
26756                     "name": "page",
26757                     "description": "Always force a page break before/after the principal box."
26758                 },
26759                 {
26760                     "name": "right",
26761                     "description": "Force one or two page breaks before/after the generated box so that the next page is formatted as a right page."
26762                 }
26763             ],
26764             "syntax": "auto | avoid | always | all | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region",
26765             "relevance": 50,
26766             "description": "Describes the page/column/region break behavior after the generated box.",
26767             "restrictions": [
26768                 "enum"
26769             ]
26770         },
26771         {
26772             "name": "break-before",
26773             "values": [
26774                 {
26775                     "name": "always",
26776                     "description": "Always force a page break before/after the generated box."
26777                 },
26778                 {
26779                     "name": "auto",
26780                     "description": "Neither force nor forbid a page/column break before/after the principal box."
26781                 },
26782                 {
26783                     "name": "avoid",
26784                     "description": "Avoid a break before/after the principal box."
26785                 },
26786                 {
26787                     "name": "avoid-column",
26788                     "description": "Avoid a column break before/after the principal box."
26789                 },
26790                 {
26791                     "name": "avoid-page",
26792                     "description": "Avoid a page break before/after the principal box."
26793                 },
26794                 {
26795                     "name": "column",
26796                     "description": "Always force a column break before/after the principal box."
26797                 },
26798                 {
26799                     "name": "left",
26800                     "description": "Force one or two page breaks before/after the generated box so that the next page is formatted as a left page."
26801                 },
26802                 {
26803                     "name": "page",
26804                     "description": "Always force a page break before/after the principal box."
26805                 },
26806                 {
26807                     "name": "right",
26808                     "description": "Force one or two page breaks before/after the generated box so that the next page is formatted as a right page."
26809                 }
26810             ],
26811             "syntax": "auto | avoid | always | all | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region",
26812             "relevance": 50,
26813             "description": "Describes the page/column/region break behavior before the generated box.",
26814             "restrictions": [
26815                 "enum"
26816             ]
26817         },
26818         {
26819             "name": "break-inside",
26820             "values": [
26821                 {
26822                     "name": "auto",
26823                     "description": "Impose no additional breaking constraints within the box."
26824                 },
26825                 {
26826                     "name": "avoid",
26827                     "description": "Avoid breaks within the box."
26828                 },
26829                 {
26830                     "name": "avoid-column",
26831                     "description": "Avoid a column break within the box."
26832                 },
26833                 {
26834                     "name": "avoid-page",
26835                     "description": "Avoid a page break within the box."
26836                 }
26837             ],
26838             "syntax": "auto | avoid | avoid-page | avoid-column | avoid-region",
26839             "relevance": 50,
26840             "description": "Describes the page/column/region break behavior inside the principal box.",
26841             "restrictions": [
26842                 "enum"
26843             ]
26844         },
26845         {
26846             "name": "caption-side",
26847             "values": [
26848                 {
26849                     "name": "bottom",
26850                     "description": "Positions the caption box below the table box."
26851                 },
26852                 {
26853                     "name": "top",
26854                     "description": "Positions the caption box above the table box."
26855                 }
26856             ],
26857             "syntax": "top | bottom | block-start | block-end | inline-start | inline-end",
26858             "relevance": 51,
26859             "references": [
26860                 {
26861                     "name": "MDN Reference",
26862                     "url": "https://developer.mozilla.org/docs/Web/CSS/caption-side"
26863                 }
26864             ],
26865             "description": "Specifies the position of the caption box with respect to the table box.",
26866             "restrictions": [
26867                 "enum"
26868             ]
26869         },
26870         {
26871             "name": "caret-color",
26872             "browsers": [
26873                 "E79",
26874                 "FF53",
26875                 "S11.1",
26876                 "C57",
26877                 "O44"
26878             ],
26879             "values": [
26880                 {
26881                     "name": "auto",
26882                     "description": "The user agent selects an appropriate color for the caret. This is generally currentcolor, but the user agent may choose a different color to ensure good visibility and contrast with the surrounding content, taking into account the value of currentcolor, the background, shadows, and other factors."
26883                 }
26884             ],
26885             "syntax": "auto | <color>",
26886             "relevance": 51,
26887             "references": [
26888                 {
26889                     "name": "MDN Reference",
26890                     "url": "https://developer.mozilla.org/docs/Web/CSS/caret-color"
26891                 }
26892             ],
26893             "description": "Controls the color of the text insertion indicator.",
26894             "restrictions": [
26895                 "color",
26896                 "enum"
26897             ]
26898         },
26899         {
26900             "name": "clear",
26901             "values": [
26902                 {
26903                     "name": "both",
26904                     "description": "The clearance of the generated box is set to the amount necessary to place the top border edge below the bottom outer edge of any right-floating and left-floating boxes that resulted from elements earlier in the source document."
26905                 },
26906                 {
26907                     "name": "left",
26908                     "description": "The clearance of the generated box is set to the amount necessary to place the top border edge below the bottom outer edge of any left-floating boxes that resulted from elements earlier in the source document."
26909                 },
26910                 {
26911                     "name": "none",
26912                     "description": "No constraint on the box's position with respect to floats."
26913                 },
26914                 {
26915                     "name": "right",
26916                     "description": "The clearance of the generated box is set to the amount necessary to place the top border edge below the bottom outer edge of any right-floating boxes that resulted from elements earlier in the source document."
26917                 }
26918             ],
26919             "syntax": "none | left | right | both | inline-start | inline-end",
26920             "relevance": 84,
26921             "references": [
26922                 {
26923                     "name": "MDN Reference",
26924                     "url": "https://developer.mozilla.org/docs/Web/CSS/clear"
26925                 }
26926             ],
26927             "description": "Indicates which sides of an element's box(es) may not be adjacent to an earlier floating box. The 'clear' property does not consider floats inside the element itself or in other block formatting contexts.",
26928             "restrictions": [
26929                 "enum"
26930             ]
26931         },
26932         {
26933             "name": "clip",
26934             "values": [
26935                 {
26936                     "name": "auto",
26937                     "description": "The element does not clip."
26938                 },
26939                 {
26940                     "name": "rect()",
26941                     "description": "Specifies offsets from the edges of the border box."
26942                 }
26943             ],
26944             "syntax": "<shape> | auto",
26945             "relevance": 73,
26946             "references": [
26947                 {
26948                     "name": "MDN Reference",
26949                     "url": "https://developer.mozilla.org/docs/Web/CSS/clip"
26950                 }
26951             ],
26952             "description": "Deprecated. Use the 'clip-path' property when support allows. Defines the visible portion of an element’s box.",
26953             "restrictions": [
26954                 "enum"
26955             ]
26956         },
26957         {
26958             "name": "clip-path",
26959             "values": [
26960                 {
26961                     "name": "none",
26962                     "description": "No clipping path gets created."
26963                 },
26964                 {
26965                     "name": "url()",
26966                     "description": "References a <clipPath> element to create a clipping path."
26967                 }
26968             ],
26969             "syntax": "<clip-source> | [ <basic-shape> || <geometry-box> ] | none",
26970             "relevance": 55,
26971             "references": [
26972                 {
26973                     "name": "MDN Reference",
26974                     "url": "https://developer.mozilla.org/docs/Web/CSS/clip-path"
26975                 }
26976             ],
26977             "description": "Specifies a clipping path where everything inside the path is visible and everything outside is clipped out.",
26978             "restrictions": [
26979                 "url",
26980                 "shape",
26981                 "geometry-box",
26982                 "enum"
26983             ]
26984         },
26985         {
26986             "name": "clip-rule",
26987             "browsers": [
26988                 "E",
26989                 "C5",
26990                 "FF3",
26991                 "IE10",
26992                 "O9",
26993                 "S6"
26994             ],
26995             "values": [
26996                 {
26997                     "name": "evenodd",
26998                     "description": "Determines the ‘insideness’ of a point on the canvas by drawing a ray from that point to infinity in any direction and counting the number of path segments from the given shape that the ray crosses."
26999                 },
27000                 {
27001                     "name": "nonzero",
27002                     "description": "Determines the ‘insideness’ of a point on the canvas by drawing a ray from that point to infinity in any direction and then examining the places where a segment of the shape crosses the ray."
27003                 }
27004             ],
27005             "relevance": 50,
27006             "description": "Indicates the algorithm which is to be used to determine what parts of the canvas are included inside the shape.",
27007             "restrictions": [
27008                 "enum"
27009             ]
27010         },
27011         {
27012             "name": "color",
27013             "syntax": "<color>",
27014             "relevance": 94,
27015             "references": [
27016                 {
27017                     "name": "MDN Reference",
27018                     "url": "https://developer.mozilla.org/docs/Web/CSS/color"
27019                 }
27020             ],
27021             "description": "Sets the color of an element's text",
27022             "restrictions": [
27023                 "color"
27024             ]
27025         },
27026         {
27027             "name": "color-interpolation-filters",
27028             "browsers": [
27029                 "E",
27030                 "C5",
27031                 "FF3",
27032                 "IE10",
27033                 "O9",
27034                 "S6"
27035             ],
27036             "values": [
27037                 {
27038                     "name": "auto",
27039                     "description": "Color operations are not required to occur in a particular color space."
27040                 },
27041                 {
27042                     "name": "linearRGB",
27043                     "description": "Color operations should occur in the linearized RGB color space."
27044                 },
27045                 {
27046                     "name": "sRGB",
27047                     "description": "Color operations should occur in the sRGB color space."
27048                 }
27049             ],
27050             "relevance": 50,
27051             "description": "Specifies the color space for imaging operations performed via filter effects.",
27052             "restrictions": [
27053                 "enum"
27054             ]
27055         },
27056         {
27057             "name": "column-count",
27058             "values": [
27059                 {
27060                     "name": "auto",
27061                     "description": "Determines the number of columns by the 'column-width' property and the element width."
27062                 }
27063             ],
27064             "syntax": "<integer> | auto",
27065             "relevance": 52,
27066             "references": [
27067                 {
27068                     "name": "MDN Reference",
27069                     "url": "https://developer.mozilla.org/docs/Web/CSS/column-count"
27070                 }
27071             ],
27072             "description": "Describes the optimal number of columns into which the content of the element will be flowed.",
27073             "restrictions": [
27074                 "integer",
27075                 "enum"
27076             ]
27077         },
27078         {
27079             "name": "column-fill",
27080             "values": [
27081                 {
27082                     "name": "auto",
27083                     "description": "Fills columns sequentially."
27084                 },
27085                 {
27086                     "name": "balance",
27087                     "description": "Balance content equally between columns, if possible."
27088                 }
27089             ],
27090             "syntax": "auto | balance | balance-all",
27091             "relevance": 50,
27092             "references": [
27093                 {
27094                     "name": "MDN Reference",
27095                     "url": "https://developer.mozilla.org/docs/Web/CSS/column-fill"
27096                 }
27097             ],
27098             "description": "In continuous media, this property will only be consulted if the length of columns has been constrained. Otherwise, columns will automatically be balanced.",
27099             "restrictions": [
27100                 "enum"
27101             ]
27102         },
27103         {
27104             "name": "column-gap",
27105             "values": [
27106                 {
27107                     "name": "normal",
27108                     "description": "User agent specific and typically equivalent to 1em."
27109                 }
27110             ],
27111             "syntax": "normal | <length-percentage>",
27112             "relevance": 52,
27113             "description": "Sets the gap between columns. If there is a column rule between columns, it will appear in the middle of the gap.",
27114             "restrictions": [
27115                 "length",
27116                 "enum"
27117             ]
27118         },
27119         {
27120             "name": "column-rule",
27121             "syntax": "<'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'>",
27122             "relevance": 51,
27123             "references": [
27124                 {
27125                     "name": "MDN Reference",
27126                     "url": "https://developer.mozilla.org/docs/Web/CSS/column-rule"
27127                 }
27128             ],
27129             "description": "Shorthand for setting 'column-rule-width', 'column-rule-style', and 'column-rule-color' at the same place in the style sheet. Omitted values are set to their initial values.",
27130             "restrictions": [
27131                 "length",
27132                 "line-width",
27133                 "line-style",
27134                 "color"
27135             ]
27136         },
27137         {
27138             "name": "column-rule-color",
27139             "syntax": "<color>",
27140             "relevance": 50,
27141             "references": [
27142                 {
27143                     "name": "MDN Reference",
27144                     "url": "https://developer.mozilla.org/docs/Web/CSS/column-rule-color"
27145                 }
27146             ],
27147             "description": "Sets the color of the column rule",
27148             "restrictions": [
27149                 "color"
27150             ]
27151         },
27152         {
27153             "name": "column-rule-style",
27154             "syntax": "<'border-style'>",
27155             "relevance": 50,
27156             "references": [
27157                 {
27158                     "name": "MDN Reference",
27159                     "url": "https://developer.mozilla.org/docs/Web/CSS/column-rule-style"
27160                 }
27161             ],
27162             "description": "Sets the style of the rule between columns of an element.",
27163             "restrictions": [
27164                 "line-style"
27165             ]
27166         },
27167         {
27168             "name": "column-rule-width",
27169             "syntax": "<'border-width'>",
27170             "relevance": 50,
27171             "references": [
27172                 {
27173                     "name": "MDN Reference",
27174                     "url": "https://developer.mozilla.org/docs/Web/CSS/column-rule-width"
27175                 }
27176             ],
27177             "description": "Sets the width of the rule between columns. Negative values are not allowed.",
27178             "restrictions": [
27179                 "length",
27180                 "line-width"
27181             ]
27182         },
27183         {
27184             "name": "columns",
27185             "values": [
27186                 {
27187                     "name": "auto",
27188                     "description": "The width depends on the values of other properties."
27189                 }
27190             ],
27191             "syntax": "<'column-width'> || <'column-count'>",
27192             "relevance": 51,
27193             "references": [
27194                 {
27195                     "name": "MDN Reference",
27196                     "url": "https://developer.mozilla.org/docs/Web/CSS/columns"
27197                 }
27198             ],
27199             "description": "A shorthand property which sets both 'column-width' and 'column-count'.",
27200             "restrictions": [
27201                 "length",
27202                 "integer",
27203                 "enum"
27204             ]
27205         },
27206         {
27207             "name": "column-span",
27208             "values": [
27209                 {
27210                     "name": "all",
27211                     "description": "The element spans across all columns. Content in the normal flow that appears before the element is automatically balanced across all columns before the element appear."
27212                 },
27213                 {
27214                     "name": "none",
27215                     "description": "The element does not span multiple columns."
27216                 }
27217             ],
27218             "syntax": "none | all",
27219             "relevance": 50,
27220             "references": [
27221                 {
27222                     "name": "MDN Reference",
27223                     "url": "https://developer.mozilla.org/docs/Web/CSS/column-span"
27224                 }
27225             ],
27226             "description": "Describes the page/column break behavior after the generated box.",
27227             "restrictions": [
27228                 "enum"
27229             ]
27230         },
27231         {
27232             "name": "column-width",
27233             "values": [
27234                 {
27235                     "name": "auto",
27236                     "description": "The width depends on the values of other properties."
27237                 }
27238             ],
27239             "syntax": "<length> | auto",
27240             "relevance": 51,
27241             "references": [
27242                 {
27243                     "name": "MDN Reference",
27244                     "url": "https://developer.mozilla.org/docs/Web/CSS/column-width"
27245                 }
27246             ],
27247             "description": "Describes the width of columns in multicol elements.",
27248             "restrictions": [
27249                 "length",
27250                 "enum"
27251             ]
27252         },
27253         {
27254             "name": "contain",
27255             "browsers": [
27256                 "E79",
27257                 "FF69",
27258                 "C52",
27259                 "O40"
27260             ],
27261             "values": [
27262                 {
27263                     "name": "none",
27264                     "description": "Indicates that the property has no effect."
27265                 },
27266                 {
27267                     "name": "strict",
27268                     "description": "Turns on all forms of containment for the element."
27269                 },
27270                 {
27271                     "name": "content",
27272                     "description": "All containment rules except size are applied to the element."
27273                 },
27274                 {
27275                     "name": "size",
27276                     "description": "For properties that can have effects on more than just an element and its descendants, those effects don't escape the containing element."
27277                 },
27278                 {
27279                     "name": "layout",
27280                     "description": "Turns on layout containment for the element."
27281                 },
27282                 {
27283                     "name": "style",
27284                     "description": "Turns on style containment for the element."
27285                 },
27286                 {
27287                     "name": "paint",
27288                     "description": "Turns on paint containment for the element."
27289                 }
27290             ],
27291             "syntax": "none | strict | content | [ size || layout || style || paint ]",
27292             "relevance": 55,
27293             "references": [
27294                 {
27295                     "name": "MDN Reference",
27296                     "url": "https://developer.mozilla.org/docs/Web/CSS/contain"
27297                 }
27298             ],
27299             "description": "Indicates that an element and its contents are, as much as possible, independent of the rest of the document tree.",
27300             "restrictions": [
27301                 "enum"
27302             ]
27303         },
27304         {
27305             "name": "content",
27306             "values": [
27307                 {
27308                     "name": "attr()",
27309                     "description": "The attr(n) function returns as a string the value of attribute n for the subject of the selector."
27310                 },
27311                 {
27312                     "name": "counter(name)",
27313                     "description": "Counters are denoted by identifiers (see the 'counter-increment' and 'counter-reset' properties)."
27314                 },
27315                 {
27316                     "name": "icon",
27317                     "description": "The (pseudo-)element is replaced in its entirety by the resource referenced by its 'icon' property, and treated as a replaced element."
27318                 },
27319                 {
27320                     "name": "none",
27321                     "description": "On elements, this inhibits the children of the element from being rendered as children of this element, as if the element was empty. On pseudo-elements it causes the pseudo-element to have no content."
27322                 },
27323                 {
27324                     "name": "normal",
27325                     "description": "See http://www.w3.org/TR/css3-content/#content for computation rules."
27326                 },
27327                 {
27328                     "name": "url()"
27329                 }
27330             ],
27331             "syntax": "normal | none | [ <content-replacement> | <content-list> ] [/ <string> ]?",
27332             "relevance": 89,
27333             "references": [
27334                 {
27335                     "name": "MDN Reference",
27336                     "url": "https://developer.mozilla.org/docs/Web/CSS/content"
27337                 }
27338             ],
27339             "description": "Determines which page-based occurrence of a given element is applied to a counter or string value.",
27340             "restrictions": [
27341                 "string",
27342                 "url"
27343             ]
27344         },
27345         {
27346             "name": "counter-increment",
27347             "values": [
27348                 {
27349                     "name": "none",
27350                     "description": "This element does not alter the value of any counters."
27351                 }
27352             ],
27353             "syntax": "[ <custom-ident> <integer>? ]+ | none",
27354             "relevance": 52,
27355             "references": [
27356                 {
27357                     "name": "MDN Reference",
27358                     "url": "https://developer.mozilla.org/docs/Web/CSS/counter-increment"
27359                 }
27360             ],
27361             "description": "Manipulate the value of existing counters.",
27362             "restrictions": [
27363                 "identifier",
27364                 "integer"
27365             ]
27366         },
27367         {
27368             "name": "counter-reset",
27369             "values": [
27370                 {
27371                     "name": "none",
27372                     "description": "The counter is not modified."
27373                 }
27374             ],
27375             "syntax": "[ <custom-ident> <integer>? ]+ | none",
27376             "relevance": 52,
27377             "references": [
27378                 {
27379                     "name": "MDN Reference",
27380                     "url": "https://developer.mozilla.org/docs/Web/CSS/counter-reset"
27381                 }
27382             ],
27383             "description": "Property accepts one or more names of counters (identifiers), each one optionally followed by an integer. The integer gives the value that the counter is set to on each occurrence of the element.",
27384             "restrictions": [
27385                 "identifier",
27386                 "integer"
27387             ]
27388         },
27389         {
27390             "name": "cursor",
27391             "values": [
27392                 {
27393                     "name": "alias",
27394                     "description": "Indicates an alias of/shortcut to something is to be created. Often rendered as an arrow with a small curved arrow next to it."
27395                 },
27396                 {
27397                     "name": "all-scroll",
27398                     "description": "Indicates that the something can be scrolled in any direction. Often rendered as arrows pointing up, down, left, and right with a dot in the middle."
27399                 },
27400                 {
27401                     "name": "auto",
27402                     "description": "The UA determines the cursor to display based on the current context."
27403                 },
27404                 {
27405                     "name": "cell",
27406                     "description": "Indicates that a cell or set of cells may be selected. Often rendered as a thick plus-sign with a dot in the middle."
27407                 },
27408                 {
27409                     "name": "col-resize",
27410                     "description": "Indicates that the item/column can be resized horizontally. Often rendered as arrows pointing left and right with a vertical bar separating them."
27411                 },
27412                 {
27413                     "name": "context-menu",
27414                     "description": "A context menu is available for the object under the cursor. Often rendered as an arrow with a small menu-like graphic next to it."
27415                 },
27416                 {
27417                     "name": "copy",
27418                     "description": "Indicates something is to be copied. Often rendered as an arrow with a small plus sign next to it."
27419                 },
27420                 {
27421                     "name": "crosshair",
27422                     "description": "A simple crosshair (e.g., short line segments resembling a '+' sign). Often used to indicate a two dimensional bitmap selection mode."
27423                 },
27424                 {
27425                     "name": "default",
27426                     "description": "The platform-dependent default cursor. Often rendered as an arrow."
27427                 },
27428                 {
27429                     "name": "e-resize",
27430                     "description": "Indicates that east edge is to be moved."
27431                 },
27432                 {
27433                     "name": "ew-resize",
27434                     "description": "Indicates a bidirectional east-west resize cursor."
27435                 },
27436                 {
27437                     "name": "grab",
27438                     "description": "Indicates that something can be grabbed."
27439                 },
27440                 {
27441                     "name": "grabbing",
27442                     "description": "Indicates that something is being grabbed."
27443                 },
27444                 {
27445                     "name": "help",
27446                     "description": "Help is available for the object under the cursor. Often rendered as a question mark or a balloon."
27447                 },
27448                 {
27449                     "name": "move",
27450                     "description": "Indicates something is to be moved."
27451                 },
27452                 {
27453                     "name": "-moz-grab",
27454                     "description": "Indicates that something can be grabbed."
27455                 },
27456                 {
27457                     "name": "-moz-grabbing",
27458                     "description": "Indicates that something is being grabbed."
27459                 },
27460                 {
27461                     "name": "-moz-zoom-in",
27462                     "description": "Indicates that something can be zoomed (magnified) in."
27463                 },
27464                 {
27465                     "name": "-moz-zoom-out",
27466                     "description": "Indicates that something can be zoomed (magnified) out."
27467                 },
27468                 {
27469                     "name": "ne-resize",
27470                     "description": "Indicates that movement starts from north-east corner."
27471                 },
27472                 {
27473                     "name": "nesw-resize",
27474                     "description": "Indicates a bidirectional north-east/south-west cursor."
27475                 },
27476                 {
27477                     "name": "no-drop",
27478                     "description": "Indicates that the dragged item cannot be dropped at the current cursor location. Often rendered as a hand or pointer with a small circle with a line through it."
27479                 },
27480                 {
27481                     "name": "none",
27482                     "description": "No cursor is rendered for the element."
27483                 },
27484                 {
27485                     "name": "not-allowed",
27486                     "description": "Indicates that the requested action will not be carried out. Often rendered as a circle with a line through it."
27487                 },
27488                 {
27489                     "name": "n-resize",
27490                     "description": "Indicates that north edge is to be moved."
27491                 },
27492                 {
27493                     "name": "ns-resize",
27494                     "description": "Indicates a bidirectional north-south cursor."
27495                 },
27496                 {
27497                     "name": "nw-resize",
27498                     "description": "Indicates that movement starts from north-west corner."
27499                 },
27500                 {
27501                     "name": "nwse-resize",
27502                     "description": "Indicates a bidirectional north-west/south-east cursor."
27503                 },
27504                 {
27505                     "name": "pointer",
27506                     "description": "The cursor is a pointer that indicates a link."
27507                 },
27508                 {
27509                     "name": "progress",
27510                     "description": "A progress indicator. The program is performing some processing, but is different from 'wait' in that the user may still interact with the program. Often rendered as a spinning beach ball, or an arrow with a watch or hourglass."
27511                 },
27512                 {
27513                     "name": "row-resize",
27514                     "description": "Indicates that the item/row can be resized vertically. Often rendered as arrows pointing up and down with a horizontal bar separating them."
27515                 },
27516                 {
27517                     "name": "se-resize",
27518                     "description": "Indicates that movement starts from south-east corner."
27519                 },
27520                 {
27521                     "name": "s-resize",
27522                     "description": "Indicates that south edge is to be moved."
27523                 },
27524                 {
27525                     "name": "sw-resize",
27526                     "description": "Indicates that movement starts from south-west corner."
27527                 },
27528                 {
27529                     "name": "text",
27530                     "description": "Indicates text that may be selected. Often rendered as a vertical I-beam."
27531                 },
27532                 {
27533                     "name": "vertical-text",
27534                     "description": "Indicates vertical-text that may be selected. Often rendered as a horizontal I-beam."
27535                 },
27536                 {
27537                     "name": "wait",
27538                     "description": "Indicates that the program is busy and the user should wait. Often rendered as a watch or hourglass."
27539                 },
27540                 {
27541                     "name": "-webkit-grab",
27542                     "description": "Indicates that something can be grabbed."
27543                 },
27544                 {
27545                     "name": "-webkit-grabbing",
27546                     "description": "Indicates that something is being grabbed."
27547                 },
27548                 {
27549                     "name": "-webkit-zoom-in",
27550                     "description": "Indicates that something can be zoomed (magnified) in."
27551                 },
27552                 {
27553                     "name": "-webkit-zoom-out",
27554                     "description": "Indicates that something can be zoomed (magnified) out."
27555                 },
27556                 {
27557                     "name": "w-resize",
27558                     "description": "Indicates that west edge is to be moved."
27559                 },
27560                 {
27561                     "name": "zoom-in",
27562                     "description": "Indicates that something can be zoomed (magnified) in."
27563                 },
27564                 {
27565                     "name": "zoom-out",
27566                     "description": "Indicates that something can be zoomed (magnified) out."
27567                 }
27568             ],
27569             "syntax": "[ [ <url> [ <x> <y> ]? , ]* [ auto | default | none | context-menu | help | pointer | progress | wait | cell | crosshair | text | vertical-text | alias | copy | move | no-drop | not-allowed | e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll | zoom-in | zoom-out | grab | grabbing ] ]",
27570             "relevance": 91,
27571             "references": [
27572                 {
27573                     "name": "MDN Reference",
27574                     "url": "https://developer.mozilla.org/docs/Web/CSS/cursor"
27575                 }
27576             ],
27577             "description": "Allows control over cursor appearance in an element",
27578             "restrictions": [
27579                 "url",
27580                 "number",
27581                 "enum"
27582             ]
27583         },
27584         {
27585             "name": "direction",
27586             "values": [
27587                 {
27588                     "name": "ltr",
27589                     "description": "Left-to-right direction."
27590                 },
27591                 {
27592                     "name": "rtl",
27593                     "description": "Right-to-left direction."
27594                 }
27595             ],
27596             "syntax": "ltr | rtl",
27597             "relevance": 68,
27598             "references": [
27599                 {
27600                     "name": "MDN Reference",
27601                     "url": "https://developer.mozilla.org/docs/Web/CSS/direction"
27602                 }
27603             ],
27604             "description": "Specifies the inline base direction or directionality of any bidi paragraph, embedding, isolate, or override established by the box. Note: for HTML content use the 'dir' attribute and 'bdo' element rather than this property.",
27605             "restrictions": [
27606                 "enum"
27607             ]
27608         },
27609         {
27610             "name": "display",
27611             "values": [
27612                 {
27613                     "name": "block",
27614                     "description": "The element generates a block-level box"
27615                 },
27616                 {
27617                     "name": "contents",
27618                     "description": "The element itself does not generate any boxes, but its children and pseudo-elements still generate boxes as normal."
27619                 },
27620                 {
27621                     "name": "flex",
27622                     "description": "The element generates a principal flex container box and establishes a flex formatting context."
27623                 },
27624                 {
27625                     "name": "flexbox",
27626                     "description": "The element lays out its contents using flow layout (block-and-inline layout). Standardized as 'flex'."
27627                 },
27628                 {
27629                     "name": "flow-root",
27630                     "description": "The element generates a block container box, and lays out its contents using flow layout."
27631                 },
27632                 {
27633                     "name": "grid",
27634                     "description": "The element generates a principal grid container box, and establishes a grid formatting context."
27635                 },
27636                 {
27637                     "name": "inline",
27638                     "description": "The element generates an inline-level box."
27639                 },
27640                 {
27641                     "name": "inline-block",
27642                     "description": "A block box, which itself is flowed as a single inline box, similar to a replaced element. The inside of an inline-block is formatted as a block box, and the box itself is formatted as an inline box."
27643                 },
27644                 {
27645                     "name": "inline-flex",
27646                     "description": "Inline-level flex container."
27647                 },
27648                 {
27649                     "name": "inline-flexbox",
27650                     "description": "Inline-level flex container. Standardized as 'inline-flex'"
27651                 },
27652                 {
27653                     "name": "inline-table",
27654                     "description": "Inline-level table wrapper box containing table box."
27655                 },
27656                 {
27657                     "name": "list-item",
27658                     "description": "One or more block boxes and one marker box."
27659                 },
27660                 {
27661                     "name": "-moz-box",
27662                     "description": "The element lays out its contents using flow layout (block-and-inline layout). Standardized as 'flex'."
27663                 },
27664                 {
27665                     "name": "-moz-deck"
27666                 },
27667                 {
27668                     "name": "-moz-grid"
27669                 },
27670                 {
27671                     "name": "-moz-grid-group"
27672                 },
27673                 {
27674                     "name": "-moz-grid-line"
27675                 },
27676                 {
27677                     "name": "-moz-groupbox"
27678                 },
27679                 {
27680                     "name": "-moz-inline-box",
27681                     "description": "Inline-level flex container. Standardized as 'inline-flex'"
27682                 },
27683                 {
27684                     "name": "-moz-inline-grid"
27685                 },
27686                 {
27687                     "name": "-moz-inline-stack"
27688                 },
27689                 {
27690                     "name": "-moz-marker"
27691                 },
27692                 {
27693                     "name": "-moz-popup"
27694                 },
27695                 {
27696                     "name": "-moz-stack"
27697                 },
27698                 {
27699                     "name": "-ms-flexbox",
27700                     "description": "The element lays out its contents using flow layout (block-and-inline layout). Standardized as 'flex'."
27701                 },
27702                 {
27703                     "name": "-ms-grid",
27704                     "description": "The element generates a principal grid container box, and establishes a grid formatting context."
27705                 },
27706                 {
27707                     "name": "-ms-inline-flexbox",
27708                     "description": "Inline-level flex container. Standardized as 'inline-flex'"
27709                 },
27710                 {
27711                     "name": "-ms-inline-grid",
27712                     "description": "Inline-level grid container."
27713                 },
27714                 {
27715                     "name": "none",
27716                     "description": "The element and its descendants generates no boxes."
27717                 },
27718                 {
27719                     "name": "ruby",
27720                     "description": "The element generates a principal ruby container box, and establishes a ruby formatting context."
27721                 },
27722                 {
27723                     "name": "ruby-base"
27724                 },
27725                 {
27726                     "name": "ruby-base-container"
27727                 },
27728                 {
27729                     "name": "ruby-text"
27730                 },
27731                 {
27732                     "name": "ruby-text-container"
27733                 },
27734                 {
27735                     "name": "run-in",
27736                     "description": "The element generates a run-in box. Run-in elements act like inlines or blocks, depending on the surrounding elements."
27737                 },
27738                 {
27739                     "name": "table",
27740                     "description": "The element generates a principal table wrapper box containing an additionally-generated table box, and establishes a table formatting context."
27741                 },
27742                 {
27743                     "name": "table-caption"
27744                 },
27745                 {
27746                     "name": "table-cell"
27747                 },
27748                 {
27749                     "name": "table-column"
27750                 },
27751                 {
27752                     "name": "table-column-group"
27753                 },
27754                 {
27755                     "name": "table-footer-group"
27756                 },
27757                 {
27758                     "name": "table-header-group"
27759                 },
27760                 {
27761                     "name": "table-row"
27762                 },
27763                 {
27764                     "name": "table-row-group"
27765                 },
27766                 {
27767                     "name": "-webkit-box",
27768                     "description": "The element lays out its contents using flow layout (block-and-inline layout). Standardized as 'flex'."
27769                 },
27770                 {
27771                     "name": "-webkit-flex",
27772                     "description": "The element lays out its contents using flow layout (block-and-inline layout)."
27773                 },
27774                 {
27775                     "name": "-webkit-inline-box",
27776                     "description": "Inline-level flex container. Standardized as 'inline-flex'"
27777                 },
27778                 {
27779                     "name": "-webkit-inline-flex",
27780                     "description": "Inline-level flex container."
27781                 }
27782             ],
27783             "syntax": "[ <display-outside> || <display-inside> ] | <display-listitem> | <display-internal> | <display-box> | <display-legacy>",
27784             "relevance": 96,
27785             "references": [
27786                 {
27787                     "name": "MDN Reference",
27788                     "url": "https://developer.mozilla.org/docs/Web/CSS/display"
27789                 }
27790             ],
27791             "description": "In combination with 'float' and 'position', determines the type of box or boxes that are generated for an element.",
27792             "restrictions": [
27793                 "enum"
27794             ]
27795         },
27796         {
27797             "name": "empty-cells",
27798             "values": [
27799                 {
27800                     "name": "hide",
27801                     "description": "No borders or backgrounds are drawn around/behind empty cells."
27802                 },
27803                 {
27804                     "name": "-moz-show-background"
27805                 },
27806                 {
27807                     "name": "show",
27808                     "description": "Borders and backgrounds are drawn around/behind empty cells (like normal cells)."
27809                 }
27810             ],
27811             "syntax": "show | hide",
27812             "relevance": 51,
27813             "references": [
27814                 {
27815                     "name": "MDN Reference",
27816                     "url": "https://developer.mozilla.org/docs/Web/CSS/empty-cells"
27817                 }
27818             ],
27819             "description": "In the separated borders model, this property controls the rendering of borders and backgrounds around cells that have no visible content.",
27820             "restrictions": [
27821                 "enum"
27822             ]
27823         },
27824         {
27825             "name": "enable-background",
27826             "values": [
27827                 {
27828                     "name": "accumulate",
27829                     "description": "If the ancestor container element has a property of new, then all graphics elements within the current container are rendered both on the parent's background image and onto the target."
27830                 },
27831                 {
27832                     "name": "new",
27833                     "description": "Create a new background image canvas. All children of the current container element can access the background, and they will be rendered onto both the parent's background image canvas in addition to the target device."
27834                 }
27835             ],
27836             "relevance": 50,
27837             "description": "Deprecated. Use 'isolation' property instead when support allows. Specifies how the accumulation of the background image is managed.",
27838             "restrictions": [
27839                 "integer",
27840                 "length",
27841                 "percentage",
27842                 "enum"
27843             ]
27844         },
27845         {
27846             "name": "fallback",
27847             "browsers": [
27848                 "FF33"
27849             ],
27850             "syntax": "<counter-style-name>",
27851             "relevance": 50,
27852             "description": "@counter-style descriptor. Specifies a fallback counter style to be used when the current counter style can’t create a representation for a given counter value.",
27853             "restrictions": [
27854                 "identifier"
27855             ]
27856         },
27857         {
27858             "name": "fill",
27859             "values": [
27860                 {
27861                     "name": "url()",
27862                     "description": "A URL reference to a paint server element, which is an element that defines a paint server: ‘hatch’, ‘linearGradient’, ‘mesh’, ‘pattern’, ‘radialGradient’ and ‘solidcolor’."
27863                 },
27864                 {
27865                     "name": "none",
27866                     "description": "No paint is applied in this layer."
27867                 }
27868             ],
27869             "relevance": 74,
27870             "description": "Paints the interior of the given graphical element.",
27871             "restrictions": [
27872                 "color",
27873                 "enum",
27874                 "url"
27875             ]
27876         },
27877         {
27878             "name": "fill-opacity",
27879             "relevance": 52,
27880             "description": "Specifies the opacity of the painting operation used to paint the interior the current object.",
27881             "restrictions": [
27882                 "number(0-1)"
27883             ]
27884         },
27885         {
27886             "name": "fill-rule",
27887             "values": [
27888                 {
27889                     "name": "evenodd",
27890                     "description": "Determines the ‘insideness’ of a point on the canvas by drawing a ray from that point to infinity in any direction and counting the number of path segments from the given shape that the ray crosses."
27891                 },
27892                 {
27893                     "name": "nonzero",
27894                     "description": "Determines the ‘insideness’ of a point on the canvas by drawing a ray from that point to infinity in any direction and then examining the places where a segment of the shape crosses the ray."
27895                 }
27896             ],
27897             "relevance": 50,
27898             "description": "Indicates the algorithm (or winding rule) which is to be used to determine what parts of the canvas are included inside the shape.",
27899             "restrictions": [
27900                 "enum"
27901             ]
27902         },
27903         {
27904             "name": "filter",
27905             "browsers": [
27906                 "E12",
27907                 "FF35",
27908                 "S9.1",
27909                 "C53",
27910                 "O40"
27911             ],
27912             "values": [
27913                 {
27914                     "name": "none",
27915                     "description": "No filter effects are applied."
27916                 },
27917                 {
27918                     "name": "blur()",
27919                     "description": "Applies a Gaussian blur to the input image."
27920                 },
27921                 {
27922                     "name": "brightness()",
27923                     "description": "Applies a linear multiplier to input image, making it appear more or less bright."
27924                 },
27925                 {
27926                     "name": "contrast()",
27927                     "description": "Adjusts the contrast of the input."
27928                 },
27929                 {
27930                     "name": "drop-shadow()",
27931                     "description": "Applies a drop shadow effect to the input image."
27932                 },
27933                 {
27934                     "name": "grayscale()",
27935                     "description": "Converts the input image to grayscale."
27936                 },
27937                 {
27938                     "name": "hue-rotate()",
27939                     "description": "Applies a hue rotation on the input image. "
27940                 },
27941                 {
27942                     "name": "invert()",
27943                     "description": "Inverts the samples in the input image."
27944                 },
27945                 {
27946                     "name": "opacity()",
27947                     "description": "Applies transparency to the samples in the input image."
27948                 },
27949                 {
27950                     "name": "saturate()",
27951                     "description": "Saturates the input image."
27952                 },
27953                 {
27954                     "name": "sepia()",
27955                     "description": "Converts the input image to sepia."
27956                 },
27957                 {
27958                     "name": "url()",
27959                     "browsers": [
27960                         "E12",
27961                         "FF35",
27962                         "S9.1",
27963                         "C53",
27964                         "O40"
27965                     ],
27966                     "description": "A filter reference to a <filter> element."
27967                 }
27968             ],
27969             "syntax": "none | <filter-function-list>",
27970             "relevance": 64,
27971             "references": [
27972                 {
27973                     "name": "MDN Reference",
27974                     "url": "https://developer.mozilla.org/docs/Web/CSS/filter"
27975                 }
27976             ],
27977             "description": "Processes an element’s rendering before it is displayed in the document, by applying one or more filter effects.",
27978             "restrictions": [
27979                 "enum",
27980                 "url"
27981             ]
27982         },
27983         {
27984             "name": "flex",
27985             "values": [
27986                 {
27987                     "name": "auto",
27988                     "description": "Retrieves the value of the main size property as the used 'flex-basis'."
27989                 },
27990                 {
27991                     "name": "content",
27992                     "description": "Indicates automatic sizing, based on the flex item’s content."
27993                 },
27994                 {
27995                     "name": "none",
27996                     "description": "Expands to '0 0 auto'."
27997                 }
27998             ],
27999             "syntax": "none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]",
28000             "relevance": 77,
28001             "references": [
28002                 {
28003                     "name": "MDN Reference",
28004                     "url": "https://developer.mozilla.org/docs/Web/CSS/flex"
28005                 }
28006             ],
28007             "description": "Specifies the components of a flexible length: the flex grow factor and flex shrink factor, and the flex basis.",
28008             "restrictions": [
28009                 "length",
28010                 "number",
28011                 "percentage"
28012             ]
28013         },
28014         {
28015             "name": "flex-basis",
28016             "values": [
28017                 {
28018                     "name": "auto",
28019                     "description": "Retrieves the value of the main size property as the used 'flex-basis'."
28020                 },
28021                 {
28022                     "name": "content",
28023                     "description": "Indicates automatic sizing, based on the flex item’s content."
28024                 }
28025             ],
28026             "syntax": "content | <'width'>",
28027             "relevance": 62,
28028             "references": [
28029                 {
28030                     "name": "MDN Reference",
28031                     "url": "https://developer.mozilla.org/docs/Web/CSS/flex-basis"
28032                 }
28033             ],
28034             "description": "Sets the flex basis.",
28035             "restrictions": [
28036                 "length",
28037                 "number",
28038                 "percentage"
28039             ]
28040         },
28041         {
28042             "name": "flex-direction",
28043             "values": [
28044                 {
28045                     "name": "column",
28046                     "description": "The flex container’s main axis has the same orientation as the block axis of the current writing mode."
28047                 },
28048                 {
28049                     "name": "column-reverse",
28050                     "description": "Same as 'column', except the main-start and main-end directions are swapped."
28051                 },
28052                 {
28053                     "name": "row",
28054                     "description": "The flex container’s main axis has the same orientation as the inline axis of the current writing mode."
28055                 },
28056                 {
28057                     "name": "row-reverse",
28058                     "description": "Same as 'row', except the main-start and main-end directions are swapped."
28059                 }
28060             ],
28061             "syntax": "row | row-reverse | column | column-reverse",
28062             "relevance": 78,
28063             "references": [
28064                 {
28065                     "name": "MDN Reference",
28066                     "url": "https://developer.mozilla.org/docs/Web/CSS/flex-direction"
28067                 }
28068             ],
28069             "description": "Specifies how flex items are placed in the flex container, by setting the direction of the flex container’s main axis.",
28070             "restrictions": [
28071                 "enum"
28072             ]
28073         },
28074         {
28075             "name": "flex-flow",
28076             "values": [
28077                 {
28078                     "name": "column",
28079                     "description": "The flex container’s main axis has the same orientation as the block axis of the current writing mode."
28080                 },
28081                 {
28082                     "name": "column-reverse",
28083                     "description": "Same as 'column', except the main-start and main-end directions are swapped."
28084                 },
28085                 {
28086                     "name": "nowrap",
28087                     "description": "The flex container is single-line."
28088                 },
28089                 {
28090                     "name": "row",
28091                     "description": "The flex container’s main axis has the same orientation as the inline axis of the current writing mode."
28092                 },
28093                 {
28094                     "name": "row-reverse",
28095                     "description": "Same as 'row', except the main-start and main-end directions are swapped."
28096                 },
28097                 {
28098                     "name": "wrap",
28099                     "description": "The flexbox is multi-line."
28100                 },
28101                 {
28102                     "name": "wrap-reverse",
28103                     "description": "Same as 'wrap', except the cross-start and cross-end directions are swapped."
28104                 }
28105             ],
28106             "syntax": "<'flex-direction'> || <'flex-wrap'>",
28107             "relevance": 58,
28108             "references": [
28109                 {
28110                     "name": "MDN Reference",
28111                     "url": "https://developer.mozilla.org/docs/Web/CSS/flex-flow"
28112                 }
28113             ],
28114             "description": "Specifies how flexbox items are placed in the flexbox.",
28115             "restrictions": [
28116                 "enum"
28117             ]
28118         },
28119         {
28120             "name": "flex-grow",
28121             "syntax": "<number>",
28122             "relevance": 71,
28123             "references": [
28124                 {
28125                     "name": "MDN Reference",
28126                     "url": "https://developer.mozilla.org/docs/Web/CSS/flex-grow"
28127                 }
28128             ],
28129             "description": "Sets the flex grow factor. Negative numbers are invalid.",
28130             "restrictions": [
28131                 "number"
28132             ]
28133         },
28134         {
28135             "name": "flex-shrink",
28136             "syntax": "<number>",
28137             "relevance": 69,
28138             "references": [
28139                 {
28140                     "name": "MDN Reference",
28141                     "url": "https://developer.mozilla.org/docs/Web/CSS/flex-shrink"
28142                 }
28143             ],
28144             "description": "Sets the flex shrink factor. Negative numbers are invalid.",
28145             "restrictions": [
28146                 "number"
28147             ]
28148         },
28149         {
28150             "name": "flex-wrap",
28151             "values": [
28152                 {
28153                     "name": "nowrap",
28154                     "description": "The flex container is single-line."
28155                 },
28156                 {
28157                     "name": "wrap",
28158                     "description": "The flexbox is multi-line."
28159                 },
28160                 {
28161                     "name": "wrap-reverse",
28162                     "description": "Same as 'wrap', except the cross-start and cross-end directions are swapped."
28163                 }
28164             ],
28165             "syntax": "nowrap | wrap | wrap-reverse",
28166             "relevance": 74,
28167             "references": [
28168                 {
28169                     "name": "MDN Reference",
28170                     "url": "https://developer.mozilla.org/docs/Web/CSS/flex-wrap"
28171                 }
28172             ],
28173             "description": "Controls whether the flex container is single-line or multi-line, and the direction of the cross-axis, which determines the direction new lines are stacked in.",
28174             "restrictions": [
28175                 "enum"
28176             ]
28177         },
28178         {
28179             "name": "float",
28180             "values": [
28181                 {
28182                     "name": "inline-end",
28183                     "description": "A keyword indicating that the element must float on the end side of its containing block. That is the right side with ltr scripts, and the left side with rtl scripts."
28184                 },
28185                 {
28186                     "name": "inline-start",
28187                     "description": "A keyword indicating that the element must float on the start side of its containing block. That is the left side with ltr scripts, and the right side with rtl scripts."
28188                 },
28189                 {
28190                     "name": "left",
28191                     "description": "The element generates a block box that is floated to the left. Content flows on the right side of the box, starting at the top (subject to the 'clear' property)."
28192                 },
28193                 {
28194                     "name": "none",
28195                     "description": "The box is not floated."
28196                 },
28197                 {
28198                     "name": "right",
28199                     "description": "Similar to 'left', except the box is floated to the right, and content flows on the left side of the box, starting at the top."
28200                 }
28201             ],
28202             "syntax": "left | right | none | inline-start | inline-end",
28203             "relevance": 92,
28204             "references": [
28205                 {
28206                     "name": "MDN Reference",
28207                     "url": "https://developer.mozilla.org/docs/Web/CSS/float"
28208                 }
28209             ],
28210             "description": "Specifies how a box should be floated. It may be set for any element, but only applies to elements that generate boxes that are not absolutely positioned.",
28211             "restrictions": [
28212                 "enum"
28213             ]
28214         },
28215         {
28216             "name": "flood-color",
28217             "browsers": [
28218                 "E",
28219                 "C5",
28220                 "FF3",
28221                 "IE10",
28222                 "O9",
28223                 "S6"
28224             ],
28225             "relevance": 50,
28226             "description": "Indicates what color to use to flood the current filter primitive subregion.",
28227             "restrictions": [
28228                 "color"
28229             ]
28230         },
28231         {
28232             "name": "flood-opacity",
28233             "browsers": [
28234                 "E",
28235                 "C5",
28236                 "FF3",
28237                 "IE10",
28238                 "O9",
28239                 "S6"
28240             ],
28241             "relevance": 50,
28242             "description": "Indicates what opacity to use to flood the current filter primitive subregion.",
28243             "restrictions": [
28244                 "number(0-1)",
28245                 "percentage"
28246             ]
28247         },
28248         {
28249             "name": "font",
28250             "values": [
28251                 {
28252                     "name": "100",
28253                     "description": "Thin"
28254                 },
28255                 {
28256                     "name": "200",
28257                     "description": "Extra Light (Ultra Light)"
28258                 },
28259                 {
28260                     "name": "300",
28261                     "description": "Light"
28262                 },
28263                 {
28264                     "name": "400",
28265                     "description": "Normal"
28266                 },
28267                 {
28268                     "name": "500",
28269                     "description": "Medium"
28270                 },
28271                 {
28272                     "name": "600",
28273                     "description": "Semi Bold (Demi Bold)"
28274                 },
28275                 {
28276                     "name": "700",
28277                     "description": "Bold"
28278                 },
28279                 {
28280                     "name": "800",
28281                     "description": "Extra Bold (Ultra Bold)"
28282                 },
28283                 {
28284                     "name": "900",
28285                     "description": "Black (Heavy)"
28286                 },
28287                 {
28288                     "name": "bold",
28289                     "description": "Same as 700"
28290                 },
28291                 {
28292                     "name": "bolder",
28293                     "description": "Specifies the weight of the face bolder than the inherited value."
28294                 },
28295                 {
28296                     "name": "caption",
28297                     "description": "The font used for captioned controls (e.g., buttons, drop-downs, etc.)."
28298                 },
28299                 {
28300                     "name": "icon",
28301                     "description": "The font used to label icons."
28302                 },
28303                 {
28304                     "name": "italic",
28305                     "description": "Selects a font that is labeled 'italic', or, if that is not available, one labeled 'oblique'."
28306                 },
28307                 {
28308                     "name": "large"
28309                 },
28310                 {
28311                     "name": "larger"
28312                 },
28313                 {
28314                     "name": "lighter",
28315                     "description": "Specifies the weight of the face lighter than the inherited value."
28316                 },
28317                 {
28318                     "name": "medium"
28319                 },
28320                 {
28321                     "name": "menu",
28322                     "description": "The font used in menus (e.g., dropdown menus and menu lists)."
28323                 },
28324                 {
28325                     "name": "message-box",
28326                     "description": "The font used in dialog boxes."
28327                 },
28328                 {
28329                     "name": "normal",
28330                     "description": "Specifies a face that is not labeled as a small-caps font."
28331                 },
28332                 {
28333                     "name": "oblique",
28334                     "description": "Selects a font that is labeled 'oblique'."
28335                 },
28336                 {
28337                     "name": "small"
28338                 },
28339                 {
28340                     "name": "small-caps",
28341                     "description": "Specifies a font that is labeled as a small-caps font. If a genuine small-caps font is not available, user agents should simulate a small-caps font."
28342                 },
28343                 {
28344                     "name": "small-caption",
28345                     "description": "The font used for labeling small controls."
28346                 },
28347                 {
28348                     "name": "smaller"
28349                 },
28350                 {
28351                     "name": "status-bar",
28352                     "description": "The font used in window status bars."
28353                 },
28354                 {
28355                     "name": "x-large"
28356                 },
28357                 {
28358                     "name": "x-small"
28359                 },
28360                 {
28361                     "name": "xx-large"
28362                 },
28363                 {
28364                     "name": "xx-small"
28365                 }
28366             ],
28367             "syntax": "[ [ <'font-style'> || <font-variant-css21> || <'font-weight'> || <'font-stretch'> ]? <'font-size'> [ / <'line-height'> ]? <'font-family'> ] | caption | icon | menu | message-box | small-caption | status-bar",
28368             "relevance": 82,
28369             "references": [
28370                 {
28371                     "name": "MDN Reference",
28372                     "url": "https://developer.mozilla.org/docs/Web/CSS/font"
28373                 }
28374             ],
28375             "description": "Shorthand property for setting 'font-style', 'font-variant', 'font-weight', 'font-size', 'line-height', and 'font-family', at the same place in the style sheet. The syntax of this property is based on a traditional typographical shorthand notation to set multiple properties related to fonts.",
28376             "restrictions": [
28377                 "font"
28378             ]
28379         },
28380         {
28381             "name": "font-family",
28382             "values": [
28383                 {
28384                     "name": "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif"
28385                 },
28386                 {
28387                     "name": "Arial, Helvetica, sans-serif"
28388                 },
28389                 {
28390                     "name": "Cambria, Cochin, Georgia, Times, 'Times New Roman', serif"
28391                 },
28392                 {
28393                     "name": "'Courier New', Courier, monospace"
28394                 },
28395                 {
28396                     "name": "cursive"
28397                 },
28398                 {
28399                     "name": "fantasy"
28400                 },
28401                 {
28402                     "name": "'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif"
28403                 },
28404                 {
28405                     "name": "Georgia, 'Times New Roman', Times, serif"
28406                 },
28407                 {
28408                     "name": "'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif"
28409                 },
28410                 {
28411                     "name": "Impact, Haettenschweiler, 'Arial Narrow Bold', sans-serif"
28412                 },
28413                 {
28414                     "name": "'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif"
28415                 },
28416                 {
28417                     "name": "monospace"
28418                 },
28419                 {
28420                     "name": "sans-serif"
28421                 },
28422                 {
28423                     "name": "'Segoe UI', Tahoma, Geneva, Verdana, sans-serif"
28424                 },
28425                 {
28426                     "name": "serif"
28427                 },
28428                 {
28429                     "name": "'Times New Roman', Times, serif"
28430                 },
28431                 {
28432                     "name": "'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif"
28433                 },
28434                 {
28435                     "name": "Verdana, Geneva, Tahoma, sans-serif"
28436                 }
28437             ],
28438             "syntax": "<family-name>",
28439             "relevance": 92,
28440             "references": [
28441                 {
28442                     "name": "MDN Reference",
28443                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-family"
28444                 }
28445             ],
28446             "description": "Specifies a prioritized list of font family names or generic family names. A user agent iterates through the list of family names until it matches an available font that contains a glyph for the character to be rendered.",
28447             "restrictions": [
28448                 "font"
28449             ]
28450         },
28451         {
28452             "name": "font-feature-settings",
28453             "values": [
28454                 {
28455                     "name": "\"aalt\"",
28456                     "description": "Access All Alternates."
28457                 },
28458                 {
28459                     "name": "\"abvf\"",
28460                     "description": "Above-base Forms. Required in Khmer script."
28461                 },
28462                 {
28463                     "name": "\"abvm\"",
28464                     "description": "Above-base Mark Positioning. Required in Indic scripts."
28465                 },
28466                 {
28467                     "name": "\"abvs\"",
28468                     "description": "Above-base Substitutions. Required in Indic scripts."
28469                 },
28470                 {
28471                     "name": "\"afrc\"",
28472                     "description": "Alternative Fractions."
28473                 },
28474                 {
28475                     "name": "\"akhn\"",
28476                     "description": "Akhand. Required in most Indic scripts."
28477                 },
28478                 {
28479                     "name": "\"blwf\"",
28480                     "description": "Below-base Form. Required in a number of Indic scripts."
28481                 },
28482                 {
28483                     "name": "\"blwm\"",
28484                     "description": "Below-base Mark Positioning. Required in Indic scripts."
28485                 },
28486                 {
28487                     "name": "\"blws\"",
28488                     "description": "Below-base Substitutions. Required in Indic scripts."
28489                 },
28490                 {
28491                     "name": "\"calt\"",
28492                     "description": "Contextual Alternates."
28493                 },
28494                 {
28495                     "name": "\"case\"",
28496                     "description": "Case-Sensitive Forms. Applies only to European scripts; particularly prominent in Spanish-language setting."
28497                 },
28498                 {
28499                     "name": "\"ccmp\"",
28500                     "description": "Glyph Composition/Decomposition."
28501                 },
28502                 {
28503                     "name": "\"cfar\"",
28504                     "description": "Conjunct Form After Ro. Required in Khmer scripts."
28505                 },
28506                 {
28507                     "name": "\"cjct\"",
28508                     "description": "Conjunct Forms. Required in Indic scripts that show similarity to Devanagari."
28509                 },
28510                 {
28511                     "name": "\"clig\"",
28512                     "description": "Contextual Ligatures."
28513                 },
28514                 {
28515                     "name": "\"cpct\"",
28516                     "description": "Centered CJK Punctuation. Used primarily in Chinese fonts."
28517                 },
28518                 {
28519                     "name": "\"cpsp\"",
28520                     "description": "Capital Spacing. Should not be used in connecting scripts (e.g. most Arabic)."
28521                 },
28522                 {
28523                     "name": "\"cswh\"",
28524                     "description": "Contextual Swash."
28525                 },
28526                 {
28527                     "name": "\"curs\"",
28528                     "description": "Cursive Positioning. Can be used in any cursive script."
28529                 },
28530                 {
28531                     "name": "\"c2pc\"",
28532                     "description": "Petite Capitals From Capitals. Applies only to bicameral scripts."
28533                 },
28534                 {
28535                     "name": "\"c2sc\"",
28536                     "description": "Small Capitals From Capitals. Applies only to bicameral scripts."
28537                 },
28538                 {
28539                     "name": "\"dist\"",
28540                     "description": "Distances. Required in Indic scripts."
28541                 },
28542                 {
28543                     "name": "\"dlig\"",
28544                     "description": "Discretionary ligatures."
28545                 },
28546                 {
28547                     "name": "\"dnom\"",
28548                     "description": "Denominators."
28549                 },
28550                 {
28551                     "name": "\"dtls\"",
28552                     "description": "Dotless Forms. Applied to math formula layout."
28553                 },
28554                 {
28555                     "name": "\"expt\"",
28556                     "description": "Expert Forms. Applies only to Japanese."
28557                 },
28558                 {
28559                     "name": "\"falt\"",
28560                     "description": "Final Glyph on Line Alternates. Can be used in any cursive script."
28561                 },
28562                 {
28563                     "name": "\"fin2\"",
28564                     "description": "Terminal Form #2. Used only with the Syriac script."
28565                 },
28566                 {
28567                     "name": "\"fin3\"",
28568                     "description": "Terminal Form #3. Used only with the Syriac script."
28569                 },
28570                 {
28571                     "name": "\"fina\"",
28572                     "description": "Terminal Forms. Can be used in any alphabetic script."
28573                 },
28574                 {
28575                     "name": "\"flac\"",
28576                     "description": "Flattened ascent forms. Applied to math formula layout."
28577                 },
28578                 {
28579                     "name": "\"frac\"",
28580                     "description": "Fractions."
28581                 },
28582                 {
28583                     "name": "\"fwid\"",
28584                     "description": "Full Widths. Applies to any script which can use monospaced forms."
28585                 },
28586                 {
28587                     "name": "\"half\"",
28588                     "description": "Half Forms. Required in Indic scripts that show similarity to Devanagari."
28589                 },
28590                 {
28591                     "name": "\"haln\"",
28592                     "description": "Halant Forms. Required in Indic scripts."
28593                 },
28594                 {
28595                     "name": "\"halt\"",
28596                     "description": "Alternate Half Widths. Used only in CJKV fonts."
28597                 },
28598                 {
28599                     "name": "\"hist\"",
28600                     "description": "Historical Forms."
28601                 },
28602                 {
28603                     "name": "\"hkna\"",
28604                     "description": "Horizontal Kana Alternates. Applies only to fonts that support kana (hiragana and katakana)."
28605                 },
28606                 {
28607                     "name": "\"hlig\"",
28608                     "description": "Historical Ligatures."
28609                 },
28610                 {
28611                     "name": "\"hngl\"",
28612                     "description": "Hangul. Korean only."
28613                 },
28614                 {
28615                     "name": "\"hojo\"",
28616                     "description": "Hojo Kanji Forms (JIS X 0212-1990 Kanji Forms). Used only with Kanji script."
28617                 },
28618                 {
28619                     "name": "\"hwid\"",
28620                     "description": "Half Widths. Generally used only in CJKV fonts."
28621                 },
28622                 {
28623                     "name": "\"init\"",
28624                     "description": "Initial Forms. Can be used in any alphabetic script."
28625                 },
28626                 {
28627                     "name": "\"isol\"",
28628                     "description": "Isolated Forms. Can be used in any cursive script."
28629                 },
28630                 {
28631                     "name": "\"ital\"",
28632                     "description": "Italics. Applies mostly to Latin; note that many non-Latin fonts contain Latin as well."
28633                 },
28634                 {
28635                     "name": "\"jalt\"",
28636                     "description": "Justification Alternates. Can be used in any cursive script."
28637                 },
28638                 {
28639                     "name": "\"jp78\"",
28640                     "description": "JIS78 Forms. Applies only to Japanese."
28641                 },
28642                 {
28643                     "name": "\"jp83\"",
28644                     "description": "JIS83 Forms. Applies only to Japanese."
28645                 },
28646                 {
28647                     "name": "\"jp90\"",
28648                     "description": "JIS90 Forms. Applies only to Japanese."
28649                 },
28650                 {
28651                     "name": "\"jp04\"",
28652                     "description": "JIS2004 Forms. Applies only to Japanese."
28653                 },
28654                 {
28655                     "name": "\"kern\"",
28656                     "description": "Kerning."
28657                 },
28658                 {
28659                     "name": "\"lfbd\"",
28660                     "description": "Left Bounds."
28661                 },
28662                 {
28663                     "name": "\"liga\"",
28664                     "description": "Standard Ligatures."
28665                 },
28666                 {
28667                     "name": "\"ljmo\"",
28668                     "description": "Leading Jamo Forms. Required for Hangul script when Ancient Hangul writing system is supported."
28669                 },
28670                 {
28671                     "name": "\"lnum\"",
28672                     "description": "Lining Figures."
28673                 },
28674                 {
28675                     "name": "\"locl\"",
28676                     "description": "Localized Forms."
28677                 },
28678                 {
28679                     "name": "\"ltra\"",
28680                     "description": "Left-to-right glyph alternates."
28681                 },
28682                 {
28683                     "name": "\"ltrm\"",
28684                     "description": "Left-to-right mirrored forms."
28685                 },
28686                 {
28687                     "name": "\"mark\"",
28688                     "description": "Mark Positioning."
28689                 },
28690                 {
28691                     "name": "\"med2\"",
28692                     "description": "Medial Form #2. Used only with the Syriac script."
28693                 },
28694                 {
28695                     "name": "\"medi\"",
28696                     "description": "Medial Forms."
28697                 },
28698                 {
28699                     "name": "\"mgrk\"",
28700                     "description": "Mathematical Greek."
28701                 },
28702                 {
28703                     "name": "\"mkmk\"",
28704                     "description": "Mark to Mark Positioning."
28705                 },
28706                 {
28707                     "name": "\"nalt\"",
28708                     "description": "Alternate Annotation Forms."
28709                 },
28710                 {
28711                     "name": "\"nlck\"",
28712                     "description": "NLC Kanji Forms. Used only with Kanji script."
28713                 },
28714                 {
28715                     "name": "\"nukt\"",
28716                     "description": "Nukta Forms. Required in Indic scripts.."
28717                 },
28718                 {
28719                     "name": "\"numr\"",
28720                     "description": "Numerators."
28721                 },
28722                 {
28723                     "name": "\"onum\"",
28724                     "description": "Oldstyle Figures."
28725                 },
28726                 {
28727                     "name": "\"opbd\"",
28728                     "description": "Optical Bounds."
28729                 },
28730                 {
28731                     "name": "\"ordn\"",
28732                     "description": "Ordinals. Applies mostly to Latin script."
28733                 },
28734                 {
28735                     "name": "\"ornm\"",
28736                     "description": "Ornaments."
28737                 },
28738                 {
28739                     "name": "\"palt\"",
28740                     "description": "Proportional Alternate Widths. Used mostly in CJKV fonts."
28741                 },
28742                 {
28743                     "name": "\"pcap\"",
28744                     "description": "Petite Capitals."
28745                 },
28746                 {
28747                     "name": "\"pkna\"",
28748                     "description": "Proportional Kana. Generally used only in Japanese fonts."
28749                 },
28750                 {
28751                     "name": "\"pnum\"",
28752                     "description": "Proportional Figures."
28753                 },
28754                 {
28755                     "name": "\"pref\"",
28756                     "description": "Pre-base Forms. Required in Khmer and Myanmar (Burmese) scripts and southern Indic scripts that may display a pre-base form of Ra."
28757                 },
28758                 {
28759                     "name": "\"pres\"",
28760                     "description": "Pre-base Substitutions. Required in Indic scripts."
28761                 },
28762                 {
28763                     "name": "\"pstf\"",
28764                     "description": "Post-base Forms. Required in scripts of south and southeast Asia that have post-base forms for consonants eg: Gurmukhi, Malayalam, Khmer."
28765                 },
28766                 {
28767                     "name": "\"psts\"",
28768                     "description": "Post-base Substitutions."
28769                 },
28770                 {
28771                     "name": "\"pwid\"",
28772                     "description": "Proportional Widths."
28773                 },
28774                 {
28775                     "name": "\"qwid\"",
28776                     "description": "Quarter Widths. Generally used only in CJKV fonts."
28777                 },
28778                 {
28779                     "name": "\"rand\"",
28780                     "description": "Randomize."
28781                 },
28782                 {
28783                     "name": "\"rclt\"",
28784                     "description": "Required Contextual Alternates. May apply to any script, but is especially important for many styles of Arabic."
28785                 },
28786                 {
28787                     "name": "\"rlig\"",
28788                     "description": "Required Ligatures. Applies to Arabic and Syriac. May apply to some other scripts."
28789                 },
28790                 {
28791                     "name": "\"rkrf\"",
28792                     "description": "Rakar Forms. Required in Devanagari and Gujarati scripts."
28793                 },
28794                 {
28795                     "name": "\"rphf\"",
28796                     "description": "Reph Form. Required in Indic scripts. E.g. Devanagari, Kannada."
28797                 },
28798                 {
28799                     "name": "\"rtbd\"",
28800                     "description": "Right Bounds."
28801                 },
28802                 {
28803                     "name": "\"rtla\"",
28804                     "description": "Right-to-left alternates."
28805                 },
28806                 {
28807                     "name": "\"rtlm\"",
28808                     "description": "Right-to-left mirrored forms."
28809                 },
28810                 {
28811                     "name": "\"ruby\"",
28812                     "description": "Ruby Notation Forms. Applies only to Japanese."
28813                 },
28814                 {
28815                     "name": "\"salt\"",
28816                     "description": "Stylistic Alternates."
28817                 },
28818                 {
28819                     "name": "\"sinf\"",
28820                     "description": "Scientific Inferiors."
28821                 },
28822                 {
28823                     "name": "\"size\"",
28824                     "description": "Optical size."
28825                 },
28826                 {
28827                     "name": "\"smcp\"",
28828                     "description": "Small Capitals. Applies only to bicameral scripts."
28829                 },
28830                 {
28831                     "name": "\"smpl\"",
28832                     "description": "Simplified Forms. Applies only to Chinese and Japanese."
28833                 },
28834                 {
28835                     "name": "\"ssty\"",
28836                     "description": "Math script style alternates."
28837                 },
28838                 {
28839                     "name": "\"stch\"",
28840                     "description": "Stretching Glyph Decomposition."
28841                 },
28842                 {
28843                     "name": "\"subs\"",
28844                     "description": "Subscript."
28845                 },
28846                 {
28847                     "name": "\"sups\"",
28848                     "description": "Superscript."
28849                 },
28850                 {
28851                     "name": "\"swsh\"",
28852                     "description": "Swash. Does not apply to ideographic scripts."
28853                 },
28854                 {
28855                     "name": "\"titl\"",
28856                     "description": "Titling."
28857                 },
28858                 {
28859                     "name": "\"tjmo\"",
28860                     "description": "Trailing Jamo Forms. Required for Hangul script when Ancient Hangul writing system is supported."
28861                 },
28862                 {
28863                     "name": "\"tnam\"",
28864                     "description": "Traditional Name Forms. Applies only to Japanese."
28865                 },
28866                 {
28867                     "name": "\"tnum\"",
28868                     "description": "Tabular Figures."
28869                 },
28870                 {
28871                     "name": "\"trad\"",
28872                     "description": "Traditional Forms. Applies only to Chinese and Japanese."
28873                 },
28874                 {
28875                     "name": "\"twid\"",
28876                     "description": "Third Widths. Generally used only in CJKV fonts."
28877                 },
28878                 {
28879                     "name": "\"unic\"",
28880                     "description": "Unicase."
28881                 },
28882                 {
28883                     "name": "\"valt\"",
28884                     "description": "Alternate Vertical Metrics. Applies only to scripts with vertical writing modes."
28885                 },
28886                 {
28887                     "name": "\"vatu\"",
28888                     "description": "Vattu Variants. Used for Indic scripts. E.g. Devanagari."
28889                 },
28890                 {
28891                     "name": "\"vert\"",
28892                     "description": "Vertical Alternates. Applies only to scripts with vertical writing modes."
28893                 },
28894                 {
28895                     "name": "\"vhal\"",
28896                     "description": "Alternate Vertical Half Metrics. Used only in CJKV fonts."
28897                 },
28898                 {
28899                     "name": "\"vjmo\"",
28900                     "description": "Vowel Jamo Forms. Required for Hangul script when Ancient Hangul writing system is supported."
28901                 },
28902                 {
28903                     "name": "\"vkna\"",
28904                     "description": "Vertical Kana Alternates. Applies only to fonts that support kana (hiragana and katakana)."
28905                 },
28906                 {
28907                     "name": "\"vkrn\"",
28908                     "description": "Vertical Kerning."
28909                 },
28910                 {
28911                     "name": "\"vpal\"",
28912                     "description": "Proportional Alternate Vertical Metrics. Used mostly in CJKV fonts."
28913                 },
28914                 {
28915                     "name": "\"vrt2\"",
28916                     "description": "Vertical Alternates and Rotation. Applies only to scripts with vertical writing modes."
28917                 },
28918                 {
28919                     "name": "\"zero\"",
28920                     "description": "Slashed Zero."
28921                 },
28922                 {
28923                     "name": "normal",
28924                     "description": "No change in glyph substitution or positioning occurs."
28925                 },
28926                 {
28927                     "name": "off",
28928                     "description": "Disable feature."
28929                 },
28930                 {
28931                     "name": "on",
28932                     "description": "Enable feature."
28933                 }
28934             ],
28935             "syntax": "normal | <feature-tag-value>#",
28936             "relevance": 55,
28937             "references": [
28938                 {
28939                     "name": "MDN Reference",
28940                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-feature-settings"
28941                 }
28942             ],
28943             "description": "Provides low-level control over OpenType font features. It is intended as a way of providing access to font features that are not widely used but are needed for a particular use case.",
28944             "restrictions": [
28945                 "string",
28946                 "integer"
28947             ]
28948         },
28949         {
28950             "name": "font-kerning",
28951             "browsers": [
28952                 "E79",
28953                 "FF32",
28954                 "S9",
28955                 "C33",
28956                 "O20"
28957             ],
28958             "values": [
28959                 {
28960                     "name": "auto",
28961                     "description": "Specifies that kerning is applied at the discretion of the user agent."
28962                 },
28963                 {
28964                     "name": "none",
28965                     "description": "Specifies that kerning is not applied."
28966                 },
28967                 {
28968                     "name": "normal",
28969                     "description": "Specifies that kerning is applied."
28970                 }
28971             ],
28972             "syntax": "auto | normal | none",
28973             "relevance": 51,
28974             "references": [
28975                 {
28976                     "name": "MDN Reference",
28977                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-kerning"
28978                 }
28979             ],
28980             "description": "Kerning is the contextual adjustment of inter-glyph spacing. This property controls metric kerning, kerning that utilizes adjustment data contained in the font.",
28981             "restrictions": [
28982                 "enum"
28983             ]
28984         },
28985         {
28986             "name": "font-language-override",
28987             "browsers": [
28988                 "FF34"
28989             ],
28990             "values": [
28991                 {
28992                     "name": "normal",
28993                     "description": "Implies that when rendering with OpenType fonts the language of the document is used to infer the OpenType language system, used to select language specific features when rendering."
28994                 }
28995             ],
28996             "syntax": "normal | <string>",
28997             "relevance": 50,
28998             "references": [
28999                 {
29000                     "name": "MDN Reference",
29001                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-language-override"
29002                 }
29003             ],
29004             "description": "The value of 'normal' implies that when rendering with OpenType fonts the language of the document is used to infer the OpenType language system, used to select language specific features when rendering.",
29005             "restrictions": [
29006                 "string"
29007             ]
29008         },
29009         {
29010             "name": "font-size",
29011             "values": [
29012                 {
29013                     "name": "large"
29014                 },
29015                 {
29016                     "name": "larger"
29017                 },
29018                 {
29019                     "name": "medium"
29020                 },
29021                 {
29022                     "name": "small"
29023                 },
29024                 {
29025                     "name": "smaller"
29026                 },
29027                 {
29028                     "name": "x-large"
29029                 },
29030                 {
29031                     "name": "x-small"
29032                 },
29033                 {
29034                     "name": "xx-large"
29035                 },
29036                 {
29037                     "name": "xx-small"
29038                 }
29039             ],
29040             "syntax": "<absolute-size> | <relative-size> | <length-percentage>",
29041             "relevance": 94,
29042             "references": [
29043                 {
29044                     "name": "MDN Reference",
29045                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-size"
29046                 }
29047             ],
29048             "description": "Indicates the desired height of glyphs from the font. For scalable fonts, the font-size is a scale factor applied to the EM unit of the font. (Note that certain glyphs may bleed outside their EM box.) For non-scalable fonts, the font-size is converted into absolute units and matched against the declared font-size of the font, using the same absolute coordinate space for both of the matched values.",
29049             "restrictions": [
29050                 "length",
29051                 "percentage"
29052             ]
29053         },
29054         {
29055             "name": "font-size-adjust",
29056             "browsers": [
29057                 "E79",
29058                 "FF40",
29059                 "C43",
29060                 "O30"
29061             ],
29062             "values": [
29063                 {
29064                     "name": "none",
29065                     "description": "Do not preserve the font’s x-height."
29066                 }
29067             ],
29068             "syntax": "none | <number>",
29069             "relevance": 50,
29070             "references": [
29071                 {
29072                     "name": "MDN Reference",
29073                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-size-adjust"
29074                 }
29075             ],
29076             "description": "Preserves the readability of text when font fallback occurs by adjusting the font-size so that the x-height is the same regardless of the font used.",
29077             "restrictions": [
29078                 "number"
29079             ]
29080         },
29081         {
29082             "name": "font-stretch",
29083             "values": [
29084                 {
29085                     "name": "condensed"
29086                 },
29087                 {
29088                     "name": "expanded"
29089                 },
29090                 {
29091                     "name": "extra-condensed"
29092                 },
29093                 {
29094                     "name": "extra-expanded"
29095                 },
29096                 {
29097                     "name": "narrower",
29098                     "description": "Indicates a narrower value relative to the width of the parent element."
29099                 },
29100                 {
29101                     "name": "normal"
29102                 },
29103                 {
29104                     "name": "semi-condensed"
29105                 },
29106                 {
29107                     "name": "semi-expanded"
29108                 },
29109                 {
29110                     "name": "ultra-condensed"
29111                 },
29112                 {
29113                     "name": "ultra-expanded"
29114                 },
29115                 {
29116                     "name": "wider",
29117                     "description": "Indicates a wider value relative to the width of the parent element."
29118                 }
29119             ],
29120             "syntax": "<font-stretch-absolute>{1,2}",
29121             "relevance": 53,
29122             "references": [
29123                 {
29124                     "name": "MDN Reference",
29125                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-stretch"
29126                 }
29127             ],
29128             "description": "Selects a normal, condensed, or expanded face from a font family.",
29129             "restrictions": [
29130                 "enum"
29131             ]
29132         },
29133         {
29134             "name": "font-style",
29135             "values": [
29136                 {
29137                     "name": "italic",
29138                     "description": "Selects a font that is labeled as an 'italic' face, or an 'oblique' face if one is not"
29139                 },
29140                 {
29141                     "name": "normal",
29142                     "description": "Selects a face that is classified as 'normal'."
29143                 },
29144                 {
29145                     "name": "oblique",
29146                     "description": "Selects a font that is labeled as an 'oblique' face, or an 'italic' face if one is not."
29147                 }
29148             ],
29149             "syntax": "normal | italic | oblique <angle>{0,2}",
29150             "relevance": 83,
29151             "references": [
29152                 {
29153                     "name": "MDN Reference",
29154                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-style"
29155                 }
29156             ],
29157             "description": "Allows italic or oblique faces to be selected. Italic forms are generally cursive in nature while oblique faces are typically sloped versions of the regular face.",
29158             "restrictions": [
29159                 "enum"
29160             ]
29161         },
29162         {
29163             "name": "font-synthesis",
29164             "browsers": [
29165                 "FF34",
29166                 "S9"
29167             ],
29168             "values": [
29169                 {
29170                     "name": "none",
29171                     "description": "Disallow all synthetic faces."
29172                 },
29173                 {
29174                     "name": "style",
29175                     "description": "Allow synthetic italic faces."
29176                 },
29177                 {
29178                     "name": "weight",
29179                     "description": "Allow synthetic bold faces."
29180                 }
29181             ],
29182             "syntax": "none | [ weight || style ]",
29183             "relevance": 50,
29184             "references": [
29185                 {
29186                     "name": "MDN Reference",
29187                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-synthesis"
29188                 }
29189             ],
29190             "description": "Controls whether user agents are allowed to synthesize bold or oblique font faces when a font family lacks bold or italic faces.",
29191             "restrictions": [
29192                 "enum"
29193             ]
29194         },
29195         {
29196             "name": "font-variant",
29197             "values": [
29198                 {
29199                     "name": "normal",
29200                     "description": "Specifies a face that is not labeled as a small-caps font."
29201                 },
29202                 {
29203                     "name": "small-caps",
29204                     "description": "Specifies a font that is labeled as a small-caps font. If a genuine small-caps font is not available, user agents should simulate a small-caps font."
29205                 }
29206             ],
29207             "syntax": "normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> || stylistic(<feature-value-name>) || historical-forms || styleset(<feature-value-name>#) || character-variant(<feature-value-name>#) || swash(<feature-value-name>) || ornaments(<feature-value-name>) || annotation(<feature-value-name>) || [ small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps ] || <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero || <east-asian-variant-values> || <east-asian-width-values> || ruby ]",
29208             "relevance": 63,
29209             "references": [
29210                 {
29211                     "name": "MDN Reference",
29212                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-variant"
29213                 }
29214             ],
29215             "description": "Specifies variant representations of the font",
29216             "restrictions": [
29217                 "enum"
29218             ]
29219         },
29220         {
29221             "name": "font-variant-alternates",
29222             "browsers": [
29223                 "FF34"
29224             ],
29225             "values": [
29226                 {
29227                     "name": "annotation()",
29228                     "description": "Enables display of alternate annotation forms."
29229                 },
29230                 {
29231                     "name": "character-variant()",
29232                     "description": "Enables display of specific character variants."
29233                 },
29234                 {
29235                     "name": "historical-forms",
29236                     "description": "Enables display of historical forms."
29237                 },
29238                 {
29239                     "name": "normal",
29240                     "description": "None of the features are enabled."
29241                 },
29242                 {
29243                     "name": "ornaments()",
29244                     "description": "Enables replacement of default glyphs with ornaments, if provided in the font."
29245                 },
29246                 {
29247                     "name": "styleset()",
29248                     "description": "Enables display with stylistic sets."
29249                 },
29250                 {
29251                     "name": "stylistic()",
29252                     "description": "Enables display of stylistic alternates."
29253                 },
29254                 {
29255                     "name": "swash()",
29256                     "description": "Enables display of swash glyphs."
29257                 }
29258             ],
29259             "syntax": "normal | [ stylistic( <feature-value-name> ) || historical-forms || styleset( <feature-value-name># ) || character-variant( <feature-value-name># ) || swash( <feature-value-name> ) || ornaments( <feature-value-name> ) || annotation( <feature-value-name> ) ]",
29260             "relevance": 50,
29261             "references": [
29262                 {
29263                     "name": "MDN Reference",
29264                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-variant-alternates"
29265                 }
29266             ],
29267             "description": "For any given character, fonts can provide a variety of alternate glyphs in addition to the default glyph for that character. This property provides control over the selection of these alternate glyphs.",
29268             "restrictions": [
29269                 "enum"
29270             ]
29271         },
29272         {
29273             "name": "font-variant-caps",
29274             "browsers": [
29275                 "E79",
29276                 "FF34",
29277                 "C52",
29278                 "O39"
29279             ],
29280             "values": [
29281                 {
29282                     "name": "all-petite-caps",
29283                     "description": "Enables display of petite capitals for both upper and lowercase letters."
29284                 },
29285                 {
29286                     "name": "all-small-caps",
29287                     "description": "Enables display of small capitals for both upper and lowercase letters."
29288                 },
29289                 {
29290                     "name": "normal",
29291                     "description": "None of the features are enabled."
29292                 },
29293                 {
29294                     "name": "petite-caps",
29295                     "description": "Enables display of petite capitals."
29296                 },
29297                 {
29298                     "name": "small-caps",
29299                     "description": "Enables display of small capitals. Small-caps glyphs typically use the form of uppercase letters but are reduced to the size of lowercase letters."
29300                 },
29301                 {
29302                     "name": "titling-caps",
29303                     "description": "Enables display of titling capitals."
29304                 },
29305                 {
29306                     "name": "unicase",
29307                     "description": "Enables display of mixture of small capitals for uppercase letters with normal lowercase letters."
29308                 }
29309             ],
29310             "syntax": "normal | small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps",
29311             "relevance": 50,
29312             "references": [
29313                 {
29314                     "name": "MDN Reference",
29315                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-variant-caps"
29316                 }
29317             ],
29318             "description": "Specifies control over capitalized forms.",
29319             "restrictions": [
29320                 "enum"
29321             ]
29322         },
29323         {
29324             "name": "font-variant-east-asian",
29325             "browsers": [
29326                 "E79",
29327                 "FF34",
29328                 "C63",
29329                 "O50"
29330             ],
29331             "values": [
29332                 {
29333                     "name": "full-width",
29334                     "description": "Enables rendering of full-width variants."
29335                 },
29336                 {
29337                     "name": "jis04",
29338                     "description": "Enables rendering of JIS04 forms."
29339                 },
29340                 {
29341                     "name": "jis78",
29342                     "description": "Enables rendering of JIS78 forms."
29343                 },
29344                 {
29345                     "name": "jis83",
29346                     "description": "Enables rendering of JIS83 forms."
29347                 },
29348                 {
29349                     "name": "jis90",
29350                     "description": "Enables rendering of JIS90 forms."
29351                 },
29352                 {
29353                     "name": "normal",
29354                     "description": "None of the features are enabled."
29355                 },
29356                 {
29357                     "name": "proportional-width",
29358                     "description": "Enables rendering of proportionally-spaced variants."
29359                 },
29360                 {
29361                     "name": "ruby",
29362                     "description": "Enables display of ruby variant glyphs."
29363                 },
29364                 {
29365                     "name": "simplified",
29366                     "description": "Enables rendering of simplified forms."
29367                 },
29368                 {
29369                     "name": "traditional",
29370                     "description": "Enables rendering of traditional forms."
29371                 }
29372             ],
29373             "syntax": "normal | [ <east-asian-variant-values> || <east-asian-width-values> || ruby ]",
29374             "relevance": 50,
29375             "references": [
29376                 {
29377                     "name": "MDN Reference",
29378                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-variant-east-asian"
29379                 }
29380             ],
29381             "description": "Allows control of glyph substitute and positioning in East Asian text.",
29382             "restrictions": [
29383                 "enum"
29384             ]
29385         },
29386         {
29387             "name": "font-variant-ligatures",
29388             "browsers": [
29389                 "E79",
29390                 "FF34",
29391                 "S9.1",
29392                 "C34",
29393                 "O21"
29394             ],
29395             "values": [
29396                 {
29397                     "name": "additional-ligatures",
29398                     "description": "Enables display of additional ligatures."
29399                 },
29400                 {
29401                     "name": "common-ligatures",
29402                     "description": "Enables display of common ligatures."
29403                 },
29404                 {
29405                     "name": "contextual",
29406                     "browsers": [
29407                         "E79",
29408                         "FF34",
29409                         "S9.1",
29410                         "C34",
29411                         "O21"
29412                     ],
29413                     "description": "Enables display of contextual alternates."
29414                 },
29415                 {
29416                     "name": "discretionary-ligatures",
29417                     "description": "Enables display of discretionary ligatures."
29418                 },
29419                 {
29420                     "name": "historical-ligatures",
29421                     "description": "Enables display of historical ligatures."
29422                 },
29423                 {
29424                     "name": "no-additional-ligatures",
29425                     "description": "Disables display of additional ligatures."
29426                 },
29427                 {
29428                     "name": "no-common-ligatures",
29429                     "description": "Disables display of common ligatures."
29430                 },
29431                 {
29432                     "name": "no-contextual",
29433                     "browsers": [
29434                         "E79",
29435                         "FF34",
29436                         "S9.1",
29437                         "C34",
29438                         "O21"
29439                     ],
29440                     "description": "Disables display of contextual alternates."
29441                 },
29442                 {
29443                     "name": "no-discretionary-ligatures",
29444                     "description": "Disables display of discretionary ligatures."
29445                 },
29446                 {
29447                     "name": "no-historical-ligatures",
29448                     "description": "Disables display of historical ligatures."
29449                 },
29450                 {
29451                     "name": "none",
29452                     "browsers": [
29453                         "E79",
29454                         "FF34",
29455                         "S9.1",
29456                         "C34",
29457                         "O21"
29458                     ],
29459                     "description": "Disables all ligatures."
29460                 },
29461                 {
29462                     "name": "normal",
29463                     "description": "Implies that the defaults set by the font are used."
29464                 }
29465             ],
29466             "syntax": "normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> ]",
29467             "relevance": 51,
29468             "references": [
29469                 {
29470                     "name": "MDN Reference",
29471                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-variant-ligatures"
29472                 }
29473             ],
29474             "description": "Specifies control over which ligatures are enabled or disabled. A value of ‘normal’ implies that the defaults set by the font are used.",
29475             "restrictions": [
29476                 "enum"
29477             ]
29478         },
29479         {
29480             "name": "font-variant-numeric",
29481             "browsers": [
29482                 "E79",
29483                 "FF34",
29484                 "S9.1",
29485                 "C52",
29486                 "O39"
29487             ],
29488             "values": [
29489                 {
29490                     "name": "diagonal-fractions",
29491                     "description": "Enables display of lining diagonal fractions."
29492                 },
29493                 {
29494                     "name": "lining-nums",
29495                     "description": "Enables display of lining numerals."
29496                 },
29497                 {
29498                     "name": "normal",
29499                     "description": "None of the features are enabled."
29500                 },
29501                 {
29502                     "name": "oldstyle-nums",
29503                     "description": "Enables display of old-style numerals."
29504                 },
29505                 {
29506                     "name": "ordinal",
29507                     "description": "Enables display of letter forms used with ordinal numbers."
29508                 },
29509                 {
29510                     "name": "proportional-nums",
29511                     "description": "Enables display of proportional numerals."
29512                 },
29513                 {
29514                     "name": "slashed-zero",
29515                     "description": "Enables display of slashed zeros."
29516                 },
29517                 {
29518                     "name": "stacked-fractions",
29519                     "description": "Enables display of lining stacked fractions."
29520                 },
29521                 {
29522                     "name": "tabular-nums",
29523                     "description": "Enables display of tabular numerals."
29524                 }
29525             ],
29526             "syntax": "normal | [ <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero ]",
29527             "relevance": 50,
29528             "references": [
29529                 {
29530                     "name": "MDN Reference",
29531                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-variant-numeric"
29532                 }
29533             ],
29534             "description": "Specifies control over numerical forms.",
29535             "restrictions": [
29536                 "enum"
29537             ]
29538         },
29539         {
29540             "name": "font-variant-position",
29541             "browsers": [
29542                 "FF34"
29543             ],
29544             "values": [
29545                 {
29546                     "name": "normal",
29547                     "description": "None of the features are enabled."
29548                 },
29549                 {
29550                     "name": "sub",
29551                     "description": "Enables display of subscript variants (OpenType feature: subs)."
29552                 },
29553                 {
29554                     "name": "super",
29555                     "description": "Enables display of superscript variants (OpenType feature: sups)."
29556                 }
29557             ],
29558             "syntax": "normal | sub | super",
29559             "relevance": 50,
29560             "references": [
29561                 {
29562                     "name": "MDN Reference",
29563                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-variant-position"
29564                 }
29565             ],
29566             "description": "Specifies the vertical position",
29567             "restrictions": [
29568                 "enum"
29569             ]
29570         },
29571         {
29572             "name": "font-weight",
29573             "values": [
29574                 {
29575                     "name": "100",
29576                     "description": "Thin"
29577                 },
29578                 {
29579                     "name": "200",
29580                     "description": "Extra Light (Ultra Light)"
29581                 },
29582                 {
29583                     "name": "300",
29584                     "description": "Light"
29585                 },
29586                 {
29587                     "name": "400",
29588                     "description": "Normal"
29589                 },
29590                 {
29591                     "name": "500",
29592                     "description": "Medium"
29593                 },
29594                 {
29595                     "name": "600",
29596                     "description": "Semi Bold (Demi Bold)"
29597                 },
29598                 {
29599                     "name": "700",
29600                     "description": "Bold"
29601                 },
29602                 {
29603                     "name": "800",
29604                     "description": "Extra Bold (Ultra Bold)"
29605                 },
29606                 {
29607                     "name": "900",
29608                     "description": "Black (Heavy)"
29609                 },
29610                 {
29611                     "name": "bold",
29612                     "description": "Same as 700"
29613                 },
29614                 {
29615                     "name": "bolder",
29616                     "description": "Specifies the weight of the face bolder than the inherited value."
29617                 },
29618                 {
29619                     "name": "lighter",
29620                     "description": "Specifies the weight of the face lighter than the inherited value."
29621                 },
29622                 {
29623                     "name": "normal",
29624                     "description": "Same as 400"
29625                 }
29626             ],
29627             "syntax": "<font-weight-absolute>{1,2}",
29628             "relevance": 93,
29629             "references": [
29630                 {
29631                     "name": "MDN Reference",
29632                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-weight"
29633                 }
29634             ],
29635             "description": "Specifies weight of glyphs in the font, their degree of blackness or stroke thickness.",
29636             "restrictions": [
29637                 "enum"
29638             ]
29639         },
29640         {
29641             "name": "glyph-orientation-horizontal",
29642             "relevance": 50,
29643             "description": "Controls glyph orientation when the inline-progression-direction is horizontal.",
29644             "restrictions": [
29645                 "angle",
29646                 "number"
29647             ]
29648         },
29649         {
29650             "name": "glyph-orientation-vertical",
29651             "values": [
29652                 {
29653                     "name": "auto",
29654                     "description": "Sets the orientation based on the fullwidth or non-fullwidth characters and the most common orientation."
29655                 }
29656             ],
29657             "relevance": 50,
29658             "description": "Controls glyph orientation when the inline-progression-direction is vertical.",
29659             "restrictions": [
29660                 "angle",
29661                 "number",
29662                 "enum"
29663             ]
29664         },
29665         {
29666             "name": "grid-area",
29667             "browsers": [
29668                 "E16",
29669                 "FF52",
29670                 "S10.1",
29671                 "C57",
29672                 "O44"
29673             ],
29674             "values": [
29675                 {
29676                     "name": "auto",
29677                     "description": "The property contributes nothing to the grid item’s placement, indicating auto-placement, an automatic span, or a default span of one."
29678                 },
29679                 {
29680                     "name": "span",
29681                     "description": "Contributes a grid span to the grid item’s placement such that the corresponding edge of the grid item’s grid area is N lines from its opposite edge."
29682                 }
29683             ],
29684             "syntax": "<grid-line> [ / <grid-line> ]{0,3}",
29685             "relevance": 51,
29686             "references": [
29687                 {
29688                     "name": "MDN Reference",
29689                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-area"
29690                 }
29691             ],
29692             "description": "Determine a grid item’s size and location within the grid by contributing a line, a span, or nothing (automatic) to its grid placement. Shorthand for 'grid-row-start', 'grid-column-start', 'grid-row-end', and 'grid-column-end'.",
29693             "restrictions": [
29694                 "identifier",
29695                 "integer"
29696             ]
29697         },
29698         {
29699             "name": "grid",
29700             "browsers": [
29701                 "E16",
29702                 "FF52",
29703                 "S10.1",
29704                 "C57",
29705                 "O44"
29706             ],
29707             "syntax": "<'grid-template'> | <'grid-template-rows'> / [ auto-flow && dense? ] <'grid-auto-columns'>? | [ auto-flow && dense? ] <'grid-auto-rows'>? / <'grid-template-columns'>",
29708             "relevance": 50,
29709             "references": [
29710                 {
29711                     "name": "MDN Reference",
29712                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid"
29713                 }
29714             ],
29715             "description": "The grid CSS property is a shorthand property that sets all of the explicit grid properties ('grid-template-rows', 'grid-template-columns', and 'grid-template-areas'), and all the implicit grid properties ('grid-auto-rows', 'grid-auto-columns', and 'grid-auto-flow'), in a single declaration.",
29716             "restrictions": [
29717                 "identifier",
29718                 "length",
29719                 "percentage",
29720                 "string",
29721                 "enum"
29722             ]
29723         },
29724         {
29725             "name": "grid-auto-columns",
29726             "values": [
29727                 {
29728                     "name": "min-content",
29729                     "description": "Represents the largest min-content contribution of the grid items occupying the grid track."
29730                 },
29731                 {
29732                     "name": "max-content",
29733                     "description": "Represents the largest max-content contribution of the grid items occupying the grid track."
29734                 },
29735                 {
29736                     "name": "auto",
29737                     "description": "As a maximum, identical to 'max-content'. As a minimum, represents the largest minimum size (as specified by min-width/min-height) of the grid items occupying the grid track."
29738                 },
29739                 {
29740                     "name": "minmax()",
29741                     "description": "Defines a size range greater than or equal to min and less than or equal to max."
29742                 }
29743             ],
29744             "syntax": "<track-size>+",
29745             "relevance": 50,
29746             "references": [
29747                 {
29748                     "name": "MDN Reference",
29749                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-auto-columns"
29750                 }
29751             ],
29752             "description": "Specifies the size of implicitly created columns.",
29753             "restrictions": [
29754                 "length",
29755                 "percentage"
29756             ]
29757         },
29758         {
29759             "name": "grid-auto-flow",
29760             "browsers": [
29761                 "E16",
29762                 "FF52",
29763                 "S10.1",
29764                 "C57",
29765                 "O44"
29766             ],
29767             "values": [
29768                 {
29769                     "name": "row",
29770                     "description": "The auto-placement algorithm places items by filling each row in turn, adding new rows as necessary."
29771                 },
29772                 {
29773                     "name": "column",
29774                     "description": "The auto-placement algorithm places items by filling each column in turn, adding new columns as necessary."
29775                 },
29776                 {
29777                     "name": "dense",
29778                     "description": "If specified, the auto-placement algorithm uses a “dense” packing algorithm, which attempts to fill in holes earlier in the grid if smaller items come up later."
29779                 }
29780             ],
29781             "syntax": "[ row | column ] || dense",
29782             "relevance": 50,
29783             "references": [
29784                 {
29785                     "name": "MDN Reference",
29786                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-auto-flow"
29787                 }
29788             ],
29789             "description": "Controls how the auto-placement algorithm works, specifying exactly how auto-placed items get flowed into the grid.",
29790             "restrictions": [
29791                 "enum"
29792             ]
29793         },
29794         {
29795             "name": "grid-auto-rows",
29796             "values": [
29797                 {
29798                     "name": "min-content",
29799                     "description": "Represents the largest min-content contribution of the grid items occupying the grid track."
29800                 },
29801                 {
29802                     "name": "max-content",
29803                     "description": "Represents the largest max-content contribution of the grid items occupying the grid track."
29804                 },
29805                 {
29806                     "name": "auto",
29807                     "description": "As a maximum, identical to 'max-content'. As a minimum, represents the largest minimum size (as specified by min-width/min-height) of the grid items occupying the grid track."
29808                 },
29809                 {
29810                     "name": "minmax()",
29811                     "description": "Defines a size range greater than or equal to min and less than or equal to max."
29812                 }
29813             ],
29814             "syntax": "<track-size>+",
29815             "relevance": 50,
29816             "references": [
29817                 {
29818                     "name": "MDN Reference",
29819                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-auto-rows"
29820                 }
29821             ],
29822             "description": "Specifies the size of implicitly created rows.",
29823             "restrictions": [
29824                 "length",
29825                 "percentage"
29826             ]
29827         },
29828         {
29829             "name": "grid-column",
29830             "browsers": [
29831                 "E16",
29832                 "FF52",
29833                 "S10.1",
29834                 "C57",
29835                 "O44"
29836             ],
29837             "values": [
29838                 {
29839                     "name": "auto",
29840                     "description": "The property contributes nothing to the grid item’s placement, indicating auto-placement, an automatic span, or a default span of one."
29841                 },
29842                 {
29843                     "name": "span",
29844                     "description": "Contributes a grid span to the grid item’s placement such that the corresponding edge of the grid item’s grid area is N lines from its opposite edge."
29845                 }
29846             ],
29847             "syntax": "<grid-line> [ / <grid-line> ]?",
29848             "relevance": 51,
29849             "references": [
29850                 {
29851                     "name": "MDN Reference",
29852                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-column"
29853                 }
29854             ],
29855             "description": "Shorthand for 'grid-column-start' and 'grid-column-end'.",
29856             "restrictions": [
29857                 "identifier",
29858                 "integer",
29859                 "enum"
29860             ]
29861         },
29862         {
29863             "name": "grid-column-end",
29864             "browsers": [
29865                 "E16",
29866                 "FF52",
29867                 "S10.1",
29868                 "C57",
29869                 "O44"
29870             ],
29871             "values": [
29872                 {
29873                     "name": "auto",
29874                     "description": "The property contributes nothing to the grid item’s placement, indicating auto-placement, an automatic span, or a default span of one."
29875                 },
29876                 {
29877                     "name": "span",
29878                     "description": "Contributes a grid span to the grid item’s placement such that the corresponding edge of the grid item’s grid area is N lines from its opposite edge."
29879                 }
29880             ],
29881             "syntax": "<grid-line>",
29882             "relevance": 50,
29883             "references": [
29884                 {
29885                     "name": "MDN Reference",
29886                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-column-end"
29887                 }
29888             ],
29889             "description": "Determine a grid item’s size and location within the grid by contributing a line, a span, or nothing (automatic) to its grid placement.",
29890             "restrictions": [
29891                 "identifier",
29892                 "integer",
29893                 "enum"
29894             ]
29895         },
29896         {
29897             "name": "grid-column-gap",
29898             "browsers": [
29899                 "FF52",
29900                 "C57",
29901                 "S10.1",
29902                 "O44"
29903             ],
29904             "status": "obsolete",
29905             "syntax": "<length-percentage>",
29906             "relevance": 1,
29907             "description": "Specifies the gutters between grid columns. Replaced by 'column-gap' property.",
29908             "restrictions": [
29909                 "length"
29910             ]
29911         },
29912         {
29913             "name": "grid-column-start",
29914             "browsers": [
29915                 "E16",
29916                 "FF52",
29917                 "S10.1",
29918                 "C57",
29919                 "O44"
29920             ],
29921             "values": [
29922                 {
29923                     "name": "auto",
29924                     "description": "The property contributes nothing to the grid item’s placement, indicating auto-placement, an automatic span, or a default span of one."
29925                 },
29926                 {
29927                     "name": "span",
29928                     "description": "Contributes a grid span to the grid item’s placement such that the corresponding edge of the grid item’s grid area is N lines from its opposite edge."
29929                 }
29930             ],
29931             "syntax": "<grid-line>",
29932             "relevance": 50,
29933             "references": [
29934                 {
29935                     "name": "MDN Reference",
29936                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-column-start"
29937                 }
29938             ],
29939             "description": "Determine a grid item’s size and location within the grid by contributing a line, a span, or nothing (automatic) to its grid placement.",
29940             "restrictions": [
29941                 "identifier",
29942                 "integer",
29943                 "enum"
29944             ]
29945         },
29946         {
29947             "name": "grid-gap",
29948             "browsers": [
29949                 "FF52",
29950                 "C57",
29951                 "S10.1",
29952                 "O44"
29953             ],
29954             "status": "obsolete",
29955             "syntax": "<'grid-row-gap'> <'grid-column-gap'>?",
29956             "relevance": 1,
29957             "description": "Shorthand that specifies the gutters between grid columns and grid rows in one declaration. Replaced by 'gap' property.",
29958             "restrictions": [
29959                 "length"
29960             ]
29961         },
29962         {
29963             "name": "grid-row",
29964             "browsers": [
29965                 "E16",
29966                 "FF52",
29967                 "S10.1",
29968                 "C57",
29969                 "O44"
29970             ],
29971             "values": [
29972                 {
29973                     "name": "auto",
29974                     "description": "The property contributes nothing to the grid item’s placement, indicating auto-placement, an automatic span, or a default span of one."
29975                 },
29976                 {
29977                     "name": "span",
29978                     "description": "Contributes a grid span to the grid item’s placement such that the corresponding edge of the grid item’s grid area is N lines from its opposite edge."
29979                 }
29980             ],
29981             "syntax": "<grid-line> [ / <grid-line> ]?",
29982             "relevance": 51,
29983             "references": [
29984                 {
29985                     "name": "MDN Reference",
29986                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-row"
29987                 }
29988             ],
29989             "description": "Shorthand for 'grid-row-start' and 'grid-row-end'.",
29990             "restrictions": [
29991                 "identifier",
29992                 "integer",
29993                 "enum"
29994             ]
29995         },
29996         {
29997             "name": "grid-row-end",
29998             "browsers": [
29999                 "E16",
30000                 "FF52",
30001                 "S10.1",
30002                 "C57",
30003                 "O44"
30004             ],
30005             "values": [
30006                 {
30007                     "name": "auto",
30008                     "description": "The property contributes nothing to the grid item’s placement, indicating auto-placement, an automatic span, or a default span of one."
30009                 },
30010                 {
30011                     "name": "span",
30012                     "description": "Contributes a grid span to the grid item’s placement such that the corresponding edge of the grid item’s grid area is N lines from its opposite edge."
30013                 }
30014             ],
30015             "syntax": "<grid-line>",
30016             "relevance": 50,
30017             "references": [
30018                 {
30019                     "name": "MDN Reference",
30020                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-row-end"
30021                 }
30022             ],
30023             "description": "Determine a grid item’s size and location within the grid by contributing a line, a span, or nothing (automatic) to its grid placement.",
30024             "restrictions": [
30025                 "identifier",
30026                 "integer",
30027                 "enum"
30028             ]
30029         },
30030         {
30031             "name": "grid-row-gap",
30032             "browsers": [
30033                 "FF52",
30034                 "C57",
30035                 "S10.1",
30036                 "O44"
30037             ],
30038             "status": "obsolete",
30039             "syntax": "<length-percentage>",
30040             "relevance": 1,
30041             "description": "Specifies the gutters between grid rows. Replaced by 'row-gap' property.",
30042             "restrictions": [
30043                 "length"
30044             ]
30045         },
30046         {
30047             "name": "grid-row-start",
30048             "browsers": [
30049                 "E16",
30050                 "FF52",
30051                 "S10.1",
30052                 "C57",
30053                 "O44"
30054             ],
30055             "values": [
30056                 {
30057                     "name": "auto",
30058                     "description": "The property contributes nothing to the grid item’s placement, indicating auto-placement, an automatic span, or a default span of one."
30059                 },
30060                 {
30061                     "name": "span",
30062                     "description": "Contributes a grid span to the grid item’s placement such that the corresponding edge of the grid item’s grid area is N lines from its opposite edge."
30063                 }
30064             ],
30065             "syntax": "<grid-line>",
30066             "relevance": 50,
30067             "references": [
30068                 {
30069                     "name": "MDN Reference",
30070                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-row-start"
30071                 }
30072             ],
30073             "description": "Determine a grid item’s size and location within the grid by contributing a line, a span, or nothing (automatic) to its grid placement.",
30074             "restrictions": [
30075                 "identifier",
30076                 "integer",
30077                 "enum"
30078             ]
30079         },
30080         {
30081             "name": "grid-template",
30082             "browsers": [
30083                 "E16",
30084                 "FF52",
30085                 "S10.1",
30086                 "C57",
30087                 "O44"
30088             ],
30089             "values": [
30090                 {
30091                     "name": "none",
30092                     "description": "Sets all three properties to their initial values."
30093                 },
30094                 {
30095                     "name": "min-content",
30096                     "description": "Represents the largest min-content contribution of the grid items occupying the grid track."
30097                 },
30098                 {
30099                     "name": "max-content",
30100                     "description": "Represents the largest max-content contribution of the grid items occupying the grid track."
30101                 },
30102                 {
30103                     "name": "auto",
30104                     "description": "As a maximum, identical to 'max-content'. As a minimum, represents the largest minimum size (as specified by min-width/min-height) of the grid items occupying the grid track."
30105                 },
30106                 {
30107                     "name": "subgrid",
30108                     "description": "Sets 'grid-template-rows' and 'grid-template-columns' to 'subgrid', and 'grid-template-areas' to its initial value."
30109                 },
30110                 {
30111                     "name": "minmax()",
30112                     "description": "Defines a size range greater than or equal to min and less than or equal to max."
30113                 },
30114                 {
30115                     "name": "repeat()",
30116                     "description": "Represents a repeated fragment of the track list, allowing a large number of columns or rows that exhibit a recurring pattern to be written in a more compact form."
30117                 }
30118             ],
30119             "syntax": "none | [ <'grid-template-rows'> / <'grid-template-columns'> ] | [ <line-names>? <string> <track-size>? <line-names>? ]+ [ / <explicit-track-list> ]?",
30120             "relevance": 50,
30121             "references": [
30122                 {
30123                     "name": "MDN Reference",
30124                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-template"
30125                 }
30126             ],
30127             "description": "Shorthand for setting grid-template-columns, grid-template-rows, and grid-template-areas in a single declaration.",
30128             "restrictions": [
30129                 "identifier",
30130                 "length",
30131                 "percentage",
30132                 "string",
30133                 "enum"
30134             ]
30135         },
30136         {
30137             "name": "grid-template-areas",
30138             "browsers": [
30139                 "E16",
30140                 "FF52",
30141                 "S10.1",
30142                 "C57",
30143                 "O44"
30144             ],
30145             "values": [
30146                 {
30147                     "name": "none",
30148                     "description": "The grid container doesn’t define any named grid areas."
30149                 }
30150             ],
30151             "syntax": "none | <string>+",
30152             "relevance": 50,
30153             "references": [
30154                 {
30155                     "name": "MDN Reference",
30156                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-template-areas"
30157                 }
30158             ],
30159             "description": "Specifies named grid areas, which are not associated with any particular grid item, but can be referenced from the grid-placement properties.",
30160             "restrictions": [
30161                 "string"
30162             ]
30163         },
30164         {
30165             "name": "grid-template-columns",
30166             "browsers": [
30167                 "E16",
30168                 "FF52",
30169                 "S10.1",
30170                 "C57",
30171                 "O44"
30172             ],
30173             "values": [
30174                 {
30175                     "name": "none",
30176                     "description": "There is no explicit grid; any rows/columns will be implicitly generated."
30177                 },
30178                 {
30179                     "name": "min-content",
30180                     "description": "Represents the largest min-content contribution of the grid items occupying the grid track."
30181                 },
30182                 {
30183                     "name": "max-content",
30184                     "description": "Represents the largest max-content contribution of the grid items occupying the grid track."
30185                 },
30186                 {
30187                     "name": "auto",
30188                     "description": "As a maximum, identical to 'max-content'. As a minimum, represents the largest minimum size (as specified by min-width/min-height) of the grid items occupying the grid track."
30189                 },
30190                 {
30191                     "name": "subgrid",
30192                     "description": "Indicates that the grid will align to its parent grid in that axis."
30193                 },
30194                 {
30195                     "name": "minmax()",
30196                     "description": "Defines a size range greater than or equal to min and less than or equal to max."
30197                 },
30198                 {
30199                     "name": "repeat()",
30200                     "description": "Represents a repeated fragment of the track list, allowing a large number of columns or rows that exhibit a recurring pattern to be written in a more compact form."
30201                 }
30202             ],
30203             "syntax": "none | <track-list> | <auto-track-list> | subgrid <line-name-list>?",
30204             "relevance": 55,
30205             "references": [
30206                 {
30207                     "name": "MDN Reference",
30208                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-template-columns"
30209                 }
30210             ],
30211             "description": "specifies, as a space-separated track list, the line names and track sizing functions of the grid.",
30212             "restrictions": [
30213                 "identifier",
30214                 "length",
30215                 "percentage",
30216                 "enum"
30217             ]
30218         },
30219         {
30220             "name": "grid-template-rows",
30221             "browsers": [
30222                 "E16",
30223                 "FF52",
30224                 "S10.1",
30225                 "C57",
30226                 "O44"
30227             ],
30228             "values": [
30229                 {
30230                     "name": "none",
30231                     "description": "There is no explicit grid; any rows/columns will be implicitly generated."
30232                 },
30233                 {
30234                     "name": "min-content",
30235                     "description": "Represents the largest min-content contribution of the grid items occupying the grid track."
30236                 },
30237                 {
30238                     "name": "max-content",
30239                     "description": "Represents the largest max-content contribution of the grid items occupying the grid track."
30240                 },
30241                 {
30242                     "name": "auto",
30243                     "description": "As a maximum, identical to 'max-content'. As a minimum, represents the largest minimum size (as specified by min-width/min-height) of the grid items occupying the grid track."
30244                 },
30245                 {
30246                     "name": "subgrid",
30247                     "description": "Indicates that the grid will align to its parent grid in that axis."
30248                 },
30249                 {
30250                     "name": "minmax()",
30251                     "description": "Defines a size range greater than or equal to min and less than or equal to max."
30252                 },
30253                 {
30254                     "name": "repeat()",
30255                     "description": "Represents a repeated fragment of the track list, allowing a large number of columns or rows that exhibit a recurring pattern to be written in a more compact form."
30256                 }
30257             ],
30258             "syntax": "none | <track-list> | <auto-track-list> | subgrid <line-name-list>?",
30259             "relevance": 52,
30260             "references": [
30261                 {
30262                     "name": "MDN Reference",
30263                     "url": "https://developer.mozilla.org/docs/Web/CSS/grid-template-rows"
30264                 }
30265             ],
30266             "description": "specifies, as a space-separated track list, the line names and track sizing functions of the grid.",
30267             "restrictions": [
30268                 "identifier",
30269                 "length",
30270                 "percentage",
30271                 "string",
30272                 "enum"
30273             ]
30274         },
30275         {
30276             "name": "height",
30277             "values": [
30278                 {
30279                     "name": "auto",
30280                     "description": "The height depends on the values of other properties."
30281                 },
30282                 {
30283                     "name": "fit-content",
30284                     "description": "Use the fit-content inline size or fit-content block size, as appropriate to the writing mode."
30285                 },
30286                 {
30287                     "name": "max-content",
30288                     "description": "Use the max-content inline size or max-content block size, as appropriate to the writing mode."
30289                 },
30290                 {
30291                     "name": "min-content",
30292                     "description": "Use the min-content inline size or min-content block size, as appropriate to the writing mode."
30293                 }
30294             ],
30295             "syntax": "<viewport-length>{1,2}",
30296             "relevance": 96,
30297             "references": [
30298                 {
30299                     "name": "MDN Reference",
30300                     "url": "https://developer.mozilla.org/docs/Web/CSS/height"
30301                 }
30302             ],
30303             "description": "Specifies the height of the content area, padding area or border area (depending on 'box-sizing') of certain boxes.",
30304             "restrictions": [
30305                 "length",
30306                 "percentage"
30307             ]
30308         },
30309         {
30310             "name": "hyphens",
30311             "values": [
30312                 {
30313                     "name": "auto",
30314                     "description": "Conditional hyphenation characters inside a word, if present, take priority over automatic resources when determining hyphenation points within the word."
30315                 },
30316                 {
30317                     "name": "manual",
30318                     "description": "Words are only broken at line breaks where there are characters inside the word that suggest line break opportunities"
30319                 },
30320                 {
30321                     "name": "none",
30322                     "description": "Words are not broken at line breaks, even if characters inside the word suggest line break points."
30323                 }
30324             ],
30325             "syntax": "none | manual | auto",
30326             "relevance": 53,
30327             "references": [
30328                 {
30329                     "name": "MDN Reference",
30330                     "url": "https://developer.mozilla.org/docs/Web/CSS/hyphens"
30331                 }
30332             ],
30333             "description": "Controls whether hyphenation is allowed to create more break opportunities within a line of text.",
30334             "restrictions": [
30335                 "enum"
30336             ]
30337         },
30338         {
30339             "name": "image-orientation",
30340             "browsers": [
30341                 "E81",
30342                 "FF26",
30343                 "S13.1",
30344                 "C81",
30345                 "O67"
30346             ],
30347             "values": [
30348                 {
30349                     "name": "flip",
30350                     "description": "After rotating by the precededing angle, the image is flipped horizontally. Defaults to 0deg if the angle is ommitted."
30351                 },
30352                 {
30353                     "name": "from-image",
30354                     "description": "If the image has an orientation specified in its metadata, such as EXIF, this value computes to the angle that the metadata specifies is necessary to correctly orient the image."
30355                 }
30356             ],
30357             "syntax": "from-image | <angle> | [ <angle>? flip ]",
30358             "relevance": 50,
30359             "references": [
30360                 {
30361                     "name": "MDN Reference",
30362                     "url": "https://developer.mozilla.org/docs/Web/CSS/image-orientation"
30363                 }
30364             ],
30365             "description": "Specifies an orthogonal rotation to be applied to an image before it is laid out.",
30366             "restrictions": [
30367                 "angle"
30368             ]
30369         },
30370         {
30371             "name": "image-rendering",
30372             "browsers": [
30373                 "E79",
30374                 "FF3.6",
30375                 "S6",
30376                 "C13",
30377                 "O15"
30378             ],
30379             "values": [
30380                 {
30381                     "name": "auto",
30382                     "description": "The image should be scaled with an algorithm that maximizes the appearance of the image."
30383                 },
30384                 {
30385                     "name": "crisp-edges",
30386                     "description": "The image must be scaled with an algorithm that preserves contrast and edges in the image, and which does not smooth colors or introduce blur to the image in the process."
30387                 },
30388                 {
30389                     "name": "-moz-crisp-edges",
30390                     "browsers": [
30391                         "E79",
30392                         "FF3.6",
30393                         "S6",
30394                         "C13",
30395                         "O15"
30396                     ]
30397                 },
30398                 {
30399                     "name": "optimizeQuality",
30400                     "description": "Deprecated."
30401                 },
30402                 {
30403                     "name": "optimizeSpeed",
30404                     "description": "Deprecated."
30405                 },
30406                 {
30407                     "name": "pixelated",
30408                     "description": "When scaling the image up, the 'nearest neighbor' or similar algorithm must be used, so that the image appears to be simply composed of very large pixels."
30409                 }
30410             ],
30411             "syntax": "auto | crisp-edges | pixelated",
30412             "relevance": 55,
30413             "references": [
30414                 {
30415                     "name": "MDN Reference",
30416                     "url": "https://developer.mozilla.org/docs/Web/CSS/image-rendering"
30417                 }
30418             ],
30419             "description": "Provides a hint to the user-agent about what aspects of an image are most important to preserve when the image is scaled, to aid the user-agent in the choice of an appropriate scaling algorithm.",
30420             "restrictions": [
30421                 "enum"
30422             ]
30423         },
30424         {
30425             "name": "ime-mode",
30426             "browsers": [
30427                 "E12",
30428                 "FF3",
30429                 "IE5"
30430             ],
30431             "values": [
30432                 {
30433                     "name": "active",
30434                     "description": "The input method editor is initially active; text entry is performed using it unless the user specifically dismisses it."
30435                 },
30436                 {
30437                     "name": "auto",
30438                     "description": "No change is made to the current input method editor state. This is the default."
30439                 },
30440                 {
30441                     "name": "disabled",
30442                     "description": "The input method editor is disabled and may not be activated by the user."
30443                 },
30444                 {
30445                     "name": "inactive",
30446                     "description": "The input method editor is initially inactive, but the user may activate it if they wish."
30447                 },
30448                 {
30449                     "name": "normal",
30450                     "description": "The IME state should be normal; this value can be used in a user style sheet to override the page setting."
30451                 }
30452             ],
30453             "status": "obsolete",
30454             "syntax": "auto | normal | active | inactive | disabled",
30455             "relevance": 0,
30456             "references": [
30457                 {
30458                     "name": "MDN Reference",
30459                     "url": "https://developer.mozilla.org/docs/Web/CSS/ime-mode"
30460                 }
30461             ],
30462             "description": "Controls the state of the input method editor for text fields.",
30463             "restrictions": [
30464                 "enum"
30465             ]
30466         },
30467         {
30468             "name": "inline-size",
30469             "browsers": [
30470                 "E79",
30471                 "FF41",
30472                 "S12.1",
30473                 "C57",
30474                 "O44"
30475             ],
30476             "values": [
30477                 {
30478                     "name": "auto",
30479                     "description": "Depends on the values of other properties."
30480                 }
30481             ],
30482             "syntax": "<'width'>",
30483             "relevance": 50,
30484             "references": [
30485                 {
30486                     "name": "MDN Reference",
30487                     "url": "https://developer.mozilla.org/docs/Web/CSS/inline-size"
30488                 }
30489             ],
30490             "description": "Logical 'height'. Mapping depends on the element’s 'writing-mode'.",
30491             "restrictions": [
30492                 "length",
30493                 "percentage"
30494             ]
30495         },
30496         {
30497             "name": "isolation",
30498             "browsers": [
30499                 "E79",
30500                 "FF36",
30501                 "S8",
30502                 "C41",
30503                 "O30"
30504             ],
30505             "values": [
30506                 {
30507                     "name": "auto",
30508                     "description": "Elements are not isolated unless an operation is applied that causes the creation of a stacking context."
30509                 },
30510                 {
30511                     "name": "isolate",
30512                     "description": "In CSS will turn the element into a stacking context."
30513                 }
30514             ],
30515             "syntax": "auto | isolate",
30516             "relevance": 50,
30517             "references": [
30518                 {
30519                     "name": "MDN Reference",
30520                     "url": "https://developer.mozilla.org/docs/Web/CSS/isolation"
30521                 }
30522             ],
30523             "description": "In CSS setting to 'isolate' will turn the element into a stacking context. In SVG, it defines whether an element is isolated or not.",
30524             "restrictions": [
30525                 "enum"
30526             ]
30527         },
30528         {
30529             "name": "justify-content",
30530             "values": [
30531                 {
30532                     "name": "center",
30533                     "description": "Flex items are packed toward the center of the line."
30534                 },
30535                 {
30536                     "name": "start",
30537                     "description": "The items are packed flush to each other toward the start edge of the alignment container in the main axis."
30538                 },
30539                 {
30540                     "name": "end",
30541                     "description": "The items are packed flush to each other toward the end edge of the alignment container in the main axis."
30542                 },
30543                 {
30544                     "name": "left",
30545                     "description": "The items are packed flush to each other toward the left edge of the alignment container in the main axis."
30546                 },
30547                 {
30548                     "name": "right",
30549                     "description": "The items are packed flush to each other toward the right edge of the alignment container in the main axis."
30550                 },
30551                 {
30552                     "name": "safe",
30553                     "description": "If the size of the item overflows the alignment container, the item is instead aligned as if the alignment mode were start."
30554                 },
30555                 {
30556                     "name": "unsafe",
30557                     "description": "Regardless of the relative sizes of the item and alignment container, the given alignment value is honored."
30558                 },
30559                 {
30560                     "name": "stretch",
30561                     "description": "If the combined size of the alignment subjects is less than the size of the alignment container, any auto-sized alignment subjects have their size increased equally (not proportionally), while still respecting the constraints imposed by max-height/max-width (or equivalent functionality), so that the combined size exactly fills the alignment container."
30562                 },
30563                 {
30564                     "name": "space-evenly",
30565                     "description": "The items are evenly distributed within the alignment container along the main axis."
30566                 },
30567                 {
30568                     "name": "flex-end",
30569                     "description": "Flex items are packed toward the end of the line."
30570                 },
30571                 {
30572                     "name": "flex-start",
30573                     "description": "Flex items are packed toward the start of the line."
30574                 },
30575                 {
30576                     "name": "space-around",
30577                     "description": "Flex items are evenly distributed in the line, with half-size spaces on either end."
30578                 },
30579                 {
30580                     "name": "space-between",
30581                     "description": "Flex items are evenly distributed in the line."
30582                 },
30583                 {
30584                     "name": "baseline",
30585                     "description": "Specifies participation in first-baseline alignment."
30586                 },
30587                 {
30588                     "name": "first baseline",
30589                     "description": "Specifies participation in first-baseline alignment."
30590                 },
30591                 {
30592                     "name": "last baseline",
30593                     "description": "Specifies participation in last-baseline alignment."
30594                 }
30595             ],
30596             "syntax": "normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ]",
30597             "relevance": 82,
30598             "description": "Aligns flex items along the main axis of the current line of the flex container.",
30599             "restrictions": [
30600                 "enum"
30601             ]
30602         },
30603         {
30604             "name": "kerning",
30605             "values": [
30606                 {
30607                     "name": "auto",
30608                     "description": "Indicates that the user agent should adjust inter-glyph spacing based on kerning tables that are included in the font that will be used."
30609                 }
30610             ],
30611             "relevance": 50,
30612             "description": "Indicates whether the user agent should adjust inter-glyph spacing based on kerning tables that are included in the relevant font or instead disable auto-kerning and set inter-character spacing to a specific length.",
30613             "restrictions": [
30614                 "length",
30615                 "enum"
30616             ]
30617         },
30618         {
30619             "name": "left",
30620             "values": [
30621                 {
30622                     "name": "auto",
30623                     "description": "For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well"
30624                 }
30625             ],
30626             "syntax": "<length> | <percentage> | auto",
30627             "relevance": 95,
30628             "references": [
30629                 {
30630                     "name": "MDN Reference",
30631                     "url": "https://developer.mozilla.org/docs/Web/CSS/left"
30632                 }
30633             ],
30634             "description": "Specifies how far an absolutely positioned box's left margin edge is offset to the right of the left edge of the box's 'containing block'.",
30635             "restrictions": [
30636                 "length",
30637                 "percentage"
30638             ]
30639         },
30640         {
30641             "name": "letter-spacing",
30642             "values": [
30643                 {
30644                     "name": "normal",
30645                     "description": "The spacing is the normal spacing for the current font. It is typically zero-length."
30646                 }
30647             ],
30648             "syntax": "normal | <length>",
30649             "relevance": 79,
30650             "references": [
30651                 {
30652                     "name": "MDN Reference",
30653                     "url": "https://developer.mozilla.org/docs/Web/CSS/letter-spacing"
30654                 }
30655             ],
30656             "description": "Specifies the minimum, maximum, and optimal spacing between grapheme clusters.",
30657             "restrictions": [
30658                 "length"
30659             ]
30660         },
30661         {
30662             "name": "lighting-color",
30663             "browsers": [
30664                 "E",
30665                 "C5",
30666                 "FF3",
30667                 "IE10",
30668                 "O9",
30669                 "S6"
30670             ],
30671             "relevance": 50,
30672             "description": "Defines the color of the light source for filter primitives 'feDiffuseLighting' and 'feSpecularLighting'.",
30673             "restrictions": [
30674                 "color"
30675             ]
30676         },
30677         {
30678             "name": "line-break",
30679             "values": [
30680                 {
30681                     "name": "auto",
30682                     "description": "The UA determines the set of line-breaking restrictions to use for CJK scripts, and it may vary the restrictions based on the length of the line; e.g., use a less restrictive set of line-break rules for short lines."
30683                 },
30684                 {
30685                     "name": "loose",
30686                     "description": "Breaks text using the least restrictive set of line-breaking rules. Typically used for short lines, such as in newspapers."
30687                 },
30688                 {
30689                     "name": "normal",
30690                     "description": "Breaks text using the most common set of line-breaking rules."
30691                 },
30692                 {
30693                     "name": "strict",
30694                     "description": "Breaks CJK scripts using a more restrictive set of line-breaking rules than 'normal'."
30695                 }
30696             ],
30697             "syntax": "auto | loose | normal | strict | anywhere",
30698             "relevance": 51,
30699             "references": [
30700                 {
30701                     "name": "MDN Reference",
30702                     "url": "https://developer.mozilla.org/docs/Web/CSS/line-break"
30703                 }
30704             ],
30705             "description": "Specifies what set of line breaking restrictions are in effect within the element.",
30706             "restrictions": [
30707                 "enum"
30708             ]
30709         },
30710         {
30711             "name": "line-height",
30712             "values": [
30713                 {
30714                     "name": "normal",
30715                     "description": "Tells user agents to set the computed value to a 'reasonable' value based on the font size of the element."
30716                 }
30717             ],
30718             "syntax": "normal | <number> | <length> | <percentage>",
30719             "relevance": 92,
30720             "references": [
30721                 {
30722                     "name": "MDN Reference",
30723                     "url": "https://developer.mozilla.org/docs/Web/CSS/line-height"
30724                 }
30725             ],
30726             "description": "Determines the block-progression dimension of the text content area of an inline box.",
30727             "restrictions": [
30728                 "number",
30729                 "length",
30730                 "percentage"
30731             ]
30732         },
30733         {
30734             "name": "list-style",
30735             "values": [
30736                 {
30737                     "name": "armenian"
30738                 },
30739                 {
30740                     "name": "circle",
30741                     "description": "A hollow circle."
30742                 },
30743                 {
30744                     "name": "decimal"
30745                 },
30746                 {
30747                     "name": "decimal-leading-zero"
30748                 },
30749                 {
30750                     "name": "disc",
30751                     "description": "A filled circle."
30752                 },
30753                 {
30754                     "name": "georgian"
30755                 },
30756                 {
30757                     "name": "inside",
30758                     "description": "The marker box is outside the principal block box, as described in the section on the ::marker pseudo-element below."
30759                 },
30760                 {
30761                     "name": "lower-alpha"
30762                 },
30763                 {
30764                     "name": "lower-greek"
30765                 },
30766                 {
30767                     "name": "lower-latin"
30768                 },
30769                 {
30770                     "name": "lower-roman"
30771                 },
30772                 {
30773                     "name": "none"
30774                 },
30775                 {
30776                     "name": "outside",
30777                     "description": "The ::marker pseudo-element is an inline element placed immediately before all ::before pseudo-elements in the principal block box, after which the element's content flows."
30778                 },
30779                 {
30780                     "name": "square",
30781                     "description": "A filled square."
30782                 },
30783                 {
30784                     "name": "symbols()",
30785                     "description": "Allows a counter style to be defined inline."
30786                 },
30787                 {
30788                     "name": "upper-alpha"
30789                 },
30790                 {
30791                     "name": "upper-latin"
30792                 },
30793                 {
30794                     "name": "upper-roman"
30795                 },
30796                 {
30797                     "name": "url()"
30798                 }
30799             ],
30800             "syntax": "<'list-style-type'> || <'list-style-position'> || <'list-style-image'>",
30801             "relevance": 84,
30802             "references": [
30803                 {
30804                     "name": "MDN Reference",
30805                     "url": "https://developer.mozilla.org/docs/Web/CSS/list-style"
30806                 }
30807             ],
30808             "description": "Shorthand for setting 'list-style-type', 'list-style-position' and 'list-style-image'",
30809             "restrictions": [
30810                 "image",
30811                 "enum",
30812                 "url"
30813             ]
30814         },
30815         {
30816             "name": "list-style-image",
30817             "values": [
30818                 {
30819                     "name": "none",
30820                     "description": "The default contents of the of the list item’s marker are given by 'list-style-type' instead."
30821                 }
30822             ],
30823             "syntax": "<url> | none",
30824             "relevance": 52,
30825             "references": [
30826                 {
30827                     "name": "MDN Reference",
30828                     "url": "https://developer.mozilla.org/docs/Web/CSS/list-style-image"
30829                 }
30830             ],
30831             "description": "Sets the image that will be used as the list item marker. When the image is available, it will replace the marker set with the 'list-style-type' marker.",
30832             "restrictions": [
30833                 "image"
30834             ]
30835         },
30836         {
30837             "name": "list-style-position",
30838             "values": [
30839                 {
30840                     "name": "inside",
30841                     "description": "The marker box is outside the principal block box, as described in the section on the ::marker pseudo-element below."
30842                 },
30843                 {
30844                     "name": "outside",
30845                     "description": "The ::marker pseudo-element is an inline element placed immediately before all ::before pseudo-elements in the principal block box, after which the element's content flows."
30846                 }
30847             ],
30848             "syntax": "inside | outside",
30849             "relevance": 55,
30850             "references": [
30851                 {
30852                     "name": "MDN Reference",
30853                     "url": "https://developer.mozilla.org/docs/Web/CSS/list-style-position"
30854                 }
30855             ],
30856             "description": "Specifies the position of the '::marker' pseudo-element's box in the list item.",
30857             "restrictions": [
30858                 "enum"
30859             ]
30860         },
30861         {
30862             "name": "list-style-type",
30863             "values": [
30864                 {
30865                     "name": "armenian",
30866                     "description": "Traditional uppercase Armenian numbering."
30867                 },
30868                 {
30869                     "name": "circle",
30870                     "description": "A hollow circle."
30871                 },
30872                 {
30873                     "name": "decimal",
30874                     "description": "Western decimal numbers."
30875                 },
30876                 {
30877                     "name": "decimal-leading-zero",
30878                     "description": "Decimal numbers padded by initial zeros."
30879                 },
30880                 {
30881                     "name": "disc",
30882                     "description": "A filled circle."
30883                 },
30884                 {
30885                     "name": "georgian",
30886                     "description": "Traditional Georgian numbering."
30887                 },
30888                 {
30889                     "name": "lower-alpha",
30890                     "description": "Lowercase ASCII letters."
30891                 },
30892                 {
30893                     "name": "lower-greek",
30894                     "description": "Lowercase classical Greek."
30895                 },
30896                 {
30897                     "name": "lower-latin",
30898                     "description": "Lowercase ASCII letters."
30899                 },
30900                 {
30901                     "name": "lower-roman",
30902                     "description": "Lowercase ASCII Roman numerals."
30903                 },
30904                 {
30905                     "name": "none",
30906                     "description": "No marker"
30907                 },
30908                 {
30909                     "name": "square",
30910                     "description": "A filled square."
30911                 },
30912                 {
30913                     "name": "symbols()",
30914                     "description": "Allows a counter style to be defined inline."
30915                 },
30916                 {
30917                     "name": "upper-alpha",
30918                     "description": "Uppercase ASCII letters."
30919                 },
30920                 {
30921                     "name": "upper-latin",
30922                     "description": "Uppercase ASCII letters."
30923                 },
30924                 {
30925                     "name": "upper-roman",
30926                     "description": "Uppercase ASCII Roman numerals."
30927                 }
30928             ],
30929             "syntax": "<counter-style> | <string> | none",
30930             "relevance": 74,
30931             "references": [
30932                 {
30933                     "name": "MDN Reference",
30934                     "url": "https://developer.mozilla.org/docs/Web/CSS/list-style-type"
30935                 }
30936             ],
30937             "description": "Used to construct the default contents of a list item’s marker",
30938             "restrictions": [
30939                 "enum",
30940                 "string"
30941             ]
30942         },
30943         {
30944             "name": "margin",
30945             "values": [
30946                 {
30947                     "name": "auto"
30948                 }
30949             ],
30950             "syntax": "[ <length> | <percentage> | auto ]{1,4}",
30951             "relevance": 95,
30952             "references": [
30953                 {
30954                     "name": "MDN Reference",
30955                     "url": "https://developer.mozilla.org/docs/Web/CSS/margin"
30956                 }
30957             ],
30958             "description": "Shorthand property to set values the thickness of the margin area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. Negative values for margin properties are allowed, but there may be implementation-specific limits.",
30959             "restrictions": [
30960                 "length",
30961                 "percentage"
30962             ]
30963         },
30964         {
30965             "name": "margin-block-end",
30966             "browsers": [
30967                 "E79",
30968                 "FF41",
30969                 "S12.1",
30970                 "C69",
30971                 "O56"
30972             ],
30973             "values": [
30974                 {
30975                     "name": "auto"
30976                 }
30977             ],
30978             "syntax": "<'margin-left'>",
30979             "relevance": 53,
30980             "references": [
30981                 {
30982                     "name": "MDN Reference",
30983                     "url": "https://developer.mozilla.org/docs/Web/CSS/margin-block-end"
30984                 }
30985             ],
30986             "description": "Logical 'margin-bottom'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
30987             "restrictions": [
30988                 "length",
30989                 "percentage"
30990             ]
30991         },
30992         {
30993             "name": "margin-block-start",
30994             "browsers": [
30995                 "E79",
30996                 "FF41",
30997                 "S12.1",
30998                 "C69",
30999                 "O56"
31000             ],
31001             "values": [
31002                 {
31003                     "name": "auto"
31004                 }
31005             ],
31006             "syntax": "<'margin-left'>",
31007             "relevance": 52,
31008             "references": [
31009                 {
31010                     "name": "MDN Reference",
31011                     "url": "https://developer.mozilla.org/docs/Web/CSS/margin-block-start"
31012                 }
31013             ],
31014             "description": "Logical 'margin-top'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
31015             "restrictions": [
31016                 "length",
31017                 "percentage"
31018             ]
31019         },
31020         {
31021             "name": "margin-bottom",
31022             "values": [
31023                 {
31024                     "name": "auto"
31025                 }
31026             ],
31027             "syntax": "<length> | <percentage> | auto",
31028             "relevance": 91,
31029             "references": [
31030                 {
31031                     "name": "MDN Reference",
31032                     "url": "https://developer.mozilla.org/docs/Web/CSS/margin-bottom"
31033                 }
31034             ],
31035             "description": "Shorthand property to set values the thickness of the margin area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. Negative values for margin properties are allowed, but there may be implementation-specific limits..",
31036             "restrictions": [
31037                 "length",
31038                 "percentage"
31039             ]
31040         },
31041         {
31042             "name": "margin-inline-end",
31043             "browsers": [
31044                 "E79",
31045                 "FF41",
31046                 "S12.1",
31047                 "C69",
31048                 "O56"
31049             ],
31050             "values": [
31051                 {
31052                     "name": "auto"
31053                 }
31054             ],
31055             "syntax": "<'margin-left'>",
31056             "relevance": 51,
31057             "references": [
31058                 {
31059                     "name": "MDN Reference",
31060                     "url": "https://developer.mozilla.org/docs/Web/CSS/margin-inline-end"
31061                 }
31062             ],
31063             "description": "Logical 'margin-right'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
31064             "restrictions": [
31065                 "length",
31066                 "percentage"
31067             ]
31068         },
31069         {
31070             "name": "margin-inline-start",
31071             "browsers": [
31072                 "E79",
31073                 "FF41",
31074                 "S12.1",
31075                 "C69",
31076                 "O56"
31077             ],
31078             "values": [
31079                 {
31080                     "name": "auto"
31081                 }
31082             ],
31083             "syntax": "<'margin-left'>",
31084             "relevance": 51,
31085             "references": [
31086                 {
31087                     "name": "MDN Reference",
31088                     "url": "https://developer.mozilla.org/docs/Web/CSS/margin-inline-start"
31089                 }
31090             ],
31091             "description": "Logical 'margin-left'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
31092             "restrictions": [
31093                 "length",
31094                 "percentage"
31095             ]
31096         },
31097         {
31098             "name": "margin-left",
31099             "values": [
31100                 {
31101                     "name": "auto"
31102                 }
31103             ],
31104             "syntax": "<length> | <percentage> | auto",
31105             "relevance": 91,
31106             "references": [
31107                 {
31108                     "name": "MDN Reference",
31109                     "url": "https://developer.mozilla.org/docs/Web/CSS/margin-left"
31110                 }
31111             ],
31112             "description": "Shorthand property to set values the thickness of the margin area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. Negative values for margin properties are allowed, but there may be implementation-specific limits..",
31113             "restrictions": [
31114                 "length",
31115                 "percentage"
31116             ]
31117         },
31118         {
31119             "name": "margin-right",
31120             "values": [
31121                 {
31122                     "name": "auto"
31123                 }
31124             ],
31125             "syntax": "<length> | <percentage> | auto",
31126             "relevance": 90,
31127             "references": [
31128                 {
31129                     "name": "MDN Reference",
31130                     "url": "https://developer.mozilla.org/docs/Web/CSS/margin-right"
31131                 }
31132             ],
31133             "description": "Shorthand property to set values the thickness of the margin area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. Negative values for margin properties are allowed, but there may be implementation-specific limits..",
31134             "restrictions": [
31135                 "length",
31136                 "percentage"
31137             ]
31138         },
31139         {
31140             "name": "margin-top",
31141             "values": [
31142                 {
31143                     "name": "auto"
31144                 }
31145             ],
31146             "syntax": "<length> | <percentage> | auto",
31147             "relevance": 95,
31148             "references": [
31149                 {
31150                     "name": "MDN Reference",
31151                     "url": "https://developer.mozilla.org/docs/Web/CSS/margin-top"
31152                 }
31153             ],
31154             "description": "Shorthand property to set values the thickness of the margin area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. Negative values for margin properties are allowed, but there may be implementation-specific limits..",
31155             "restrictions": [
31156                 "length",
31157                 "percentage"
31158             ]
31159         },
31160         {
31161             "name": "marker",
31162             "values": [
31163                 {
31164                     "name": "none",
31165                     "description": "Indicates that no marker symbol will be drawn at the given vertex or vertices."
31166                 },
31167                 {
31168                     "name": "url()",
31169                     "description": "Indicates that the <marker> element referenced will be used."
31170                 }
31171             ],
31172             "relevance": 50,
31173             "description": "Specifies the marker symbol that shall be used for all points on the sets the value for all vertices on the given ‘path’ element or basic shape.",
31174             "restrictions": [
31175                 "url"
31176             ]
31177         },
31178         {
31179             "name": "marker-end",
31180             "values": [
31181                 {
31182                     "name": "none",
31183                     "description": "Indicates that no marker symbol will be drawn at the given vertex or vertices."
31184                 },
31185                 {
31186                     "name": "url()",
31187                     "description": "Indicates that the <marker> element referenced will be used."
31188                 }
31189             ],
31190             "relevance": 50,
31191             "description": "Specifies the marker that will be drawn at the last vertices of the given markable element.",
31192             "restrictions": [
31193                 "url"
31194             ]
31195         },
31196         {
31197             "name": "marker-mid",
31198             "values": [
31199                 {
31200                     "name": "none",
31201                     "description": "Indicates that no marker symbol will be drawn at the given vertex or vertices."
31202                 },
31203                 {
31204                     "name": "url()",
31205                     "description": "Indicates that the <marker> element referenced will be used."
31206                 }
31207             ],
31208             "relevance": 50,
31209             "description": "Specifies the marker that will be drawn at all vertices except the first and last.",
31210             "restrictions": [
31211                 "url"
31212             ]
31213         },
31214         {
31215             "name": "marker-start",
31216             "values": [
31217                 {
31218                     "name": "none",
31219                     "description": "Indicates that no marker symbol will be drawn at the given vertex or vertices."
31220                 },
31221                 {
31222                     "name": "url()",
31223                     "description": "Indicates that the <marker> element referenced will be used."
31224                 }
31225             ],
31226             "relevance": 50,
31227             "description": "Specifies the marker that will be drawn at the first vertices of the given markable element.",
31228             "restrictions": [
31229                 "url"
31230             ]
31231         },
31232         {
31233             "name": "mask-image",
31234             "browsers": [
31235                 "E16",
31236                 "FF53",
31237                 "S4",
31238                 "C1",
31239                 "O15"
31240             ],
31241             "values": [
31242                 {
31243                     "name": "none",
31244                     "description": "Counts as a transparent black image layer."
31245                 },
31246                 {
31247                     "name": "url()",
31248                     "description": "Reference to a <mask element or to a CSS image."
31249                 }
31250             ],
31251             "syntax": "<mask-reference>#",
31252             "relevance": 50,
31253             "references": [
31254                 {
31255                     "name": "MDN Reference",
31256                     "url": "https://developer.mozilla.org/docs/Web/CSS/mask-image"
31257                 }
31258             ],
31259             "description": "Sets the mask layer image of an element.",
31260             "restrictions": [
31261                 "url",
31262                 "image",
31263                 "enum"
31264             ]
31265         },
31266         {
31267             "name": "mask-mode",
31268             "browsers": [
31269                 "FF53"
31270             ],
31271             "values": [
31272                 {
31273                     "name": "alpha",
31274                     "description": "Alpha values of the mask layer image should be used as the mask values."
31275                 },
31276                 {
31277                     "name": "auto",
31278                     "description": "Use alpha values if 'mask-image' is an image, luminance if a <mask> element or a CSS image."
31279                 },
31280                 {
31281                     "name": "luminance",
31282                     "description": "Luminance values of the mask layer image should be used as the mask values."
31283                 }
31284             ],
31285             "syntax": "<masking-mode>#",
31286             "relevance": 50,
31287             "references": [
31288                 {
31289                     "name": "MDN Reference",
31290                     "url": "https://developer.mozilla.org/docs/Web/CSS/mask-mode"
31291                 }
31292             ],
31293             "description": "Indicates whether the mask layer image is treated as luminance mask or alpha mask.",
31294             "restrictions": [
31295                 "url",
31296                 "image",
31297                 "enum"
31298             ]
31299         },
31300         {
31301             "name": "mask-origin",
31302             "browsers": [
31303                 "E79",
31304                 "FF53",
31305                 "S4",
31306                 "C1",
31307                 "O15"
31308             ],
31309             "syntax": "<geometry-box>#",
31310             "relevance": 50,
31311             "references": [
31312                 {
31313                     "name": "MDN Reference",
31314                     "url": "https://developer.mozilla.org/docs/Web/CSS/mask-origin"
31315                 }
31316             ],
31317             "description": "Specifies the mask positioning area.",
31318             "restrictions": [
31319                 "geometry-box",
31320                 "enum"
31321             ]
31322         },
31323         {
31324             "name": "mask-position",
31325             "browsers": [
31326                 "E18",
31327                 "FF53",
31328                 "S3.2",
31329                 "C1",
31330                 "O15"
31331             ],
31332             "syntax": "<position>#",
31333             "relevance": 50,
31334             "references": [
31335                 {
31336                     "name": "MDN Reference",
31337                     "url": "https://developer.mozilla.org/docs/Web/CSS/mask-position"
31338                 }
31339             ],
31340             "description": "Specifies how mask layer images are positioned.",
31341             "restrictions": [
31342                 "position",
31343                 "length",
31344                 "percentage"
31345             ]
31346         },
31347         {
31348             "name": "mask-repeat",
31349             "browsers": [
31350                 "E18",
31351                 "FF53",
31352                 "S3.2",
31353                 "C1",
31354                 "O15"
31355             ],
31356             "syntax": "<repeat-style>#",
31357             "relevance": 50,
31358             "references": [
31359                 {
31360                     "name": "MDN Reference",
31361                     "url": "https://developer.mozilla.org/docs/Web/CSS/mask-repeat"
31362                 }
31363             ],
31364             "description": "Specifies how mask layer images are tiled after they have been sized and positioned.",
31365             "restrictions": [
31366                 "repeat"
31367             ]
31368         },
31369         {
31370             "name": "mask-size",
31371             "browsers": [
31372                 "E18",
31373                 "FF53",
31374                 "S4",
31375                 "C4",
31376                 "O15"
31377             ],
31378             "values": [
31379                 {
31380                     "name": "auto",
31381                     "description": "Resolved by using the image’s intrinsic ratio and the size of the other dimension, or failing that, using the image’s intrinsic size, or failing that, treating it as 100%."
31382                 },
31383                 {
31384                     "name": "contain",
31385                     "description": "Scale the image, while preserving its intrinsic aspect ratio (if any), to the largest size such that both its width and its height can fit inside the background positioning area."
31386                 },
31387                 {
31388                     "name": "cover",
31389                     "description": "Scale the image, while preserving its intrinsic aspect ratio (if any), to the smallest size such that both its width and its height can completely cover the background positioning area."
31390                 }
31391             ],
31392             "syntax": "<bg-size>#",
31393             "relevance": 50,
31394             "references": [
31395                 {
31396                     "name": "MDN Reference",
31397                     "url": "https://developer.mozilla.org/docs/Web/CSS/mask-size"
31398                 }
31399             ],
31400             "description": "Specifies the size of the mask layer images.",
31401             "restrictions": [
31402                 "length",
31403                 "percentage",
31404                 "enum"
31405             ]
31406         },
31407         {
31408             "name": "mask-type",
31409             "browsers": [
31410                 "E79",
31411                 "FF35",
31412                 "S6.1",
31413                 "C24",
31414                 "O15"
31415             ],
31416             "values": [
31417                 {
31418                     "name": "alpha",
31419                     "description": "Indicates that the alpha values of the mask should be used."
31420                 },
31421                 {
31422                     "name": "luminance",
31423                     "description": "Indicates that the luminance values of the mask should be used."
31424                 }
31425             ],
31426             "syntax": "luminance | alpha",
31427             "relevance": 50,
31428             "references": [
31429                 {
31430                     "name": "MDN Reference",
31431                     "url": "https://developer.mozilla.org/docs/Web/CSS/mask-type"
31432                 }
31433             ],
31434             "description": "Defines whether the content of the <mask> element is treated as as luminance mask or alpha mask.",
31435             "restrictions": [
31436                 "enum"
31437             ]
31438         },
31439         {
31440             "name": "max-block-size",
31441             "browsers": [
31442                 "E79",
31443                 "FF41",
31444                 "S12.1",
31445                 "C57",
31446                 "O44"
31447             ],
31448             "values": [
31449                 {
31450                     "name": "none",
31451                     "description": "No limit on the width of the box."
31452                 }
31453             ],
31454             "syntax": "<'max-width'>",
31455             "relevance": 50,
31456             "references": [
31457                 {
31458                     "name": "MDN Reference",
31459                     "url": "https://developer.mozilla.org/docs/Web/CSS/max-block-size"
31460                 }
31461             ],
31462             "description": "Logical 'max-width'. Mapping depends on the element’s 'writing-mode'.",
31463             "restrictions": [
31464                 "length",
31465                 "percentage"
31466             ]
31467         },
31468         {
31469             "name": "max-height",
31470             "values": [
31471                 {
31472                     "name": "none",
31473                     "description": "No limit on the height of the box."
31474                 },
31475                 {
31476                     "name": "fit-content",
31477                     "description": "Use the fit-content inline size or fit-content block size, as appropriate to the writing mode."
31478                 },
31479                 {
31480                     "name": "max-content",
31481                     "description": "Use the max-content inline size or max-content block size, as appropriate to the writing mode."
31482                 },
31483                 {
31484                     "name": "min-content",
31485                     "description": "Use the min-content inline size or min-content block size, as appropriate to the writing mode."
31486                 }
31487             ],
31488             "syntax": "<viewport-length>",
31489             "relevance": 84,
31490             "references": [
31491                 {
31492                     "name": "MDN Reference",
31493                     "url": "https://developer.mozilla.org/docs/Web/CSS/max-height"
31494                 }
31495             ],
31496             "description": "Allows authors to constrain content height to a certain range.",
31497             "restrictions": [
31498                 "length",
31499                 "percentage"
31500             ]
31501         },
31502         {
31503             "name": "max-inline-size",
31504             "browsers": [
31505                 "E79",
31506                 "FF41",
31507                 "S10.1",
31508                 "C57",
31509                 "O44"
31510             ],
31511             "values": [
31512                 {
31513                     "name": "none",
31514                     "description": "No limit on the height of the box."
31515                 }
31516             ],
31517             "syntax": "<'max-width'>",
31518             "relevance": 50,
31519             "references": [
31520                 {
31521                     "name": "MDN Reference",
31522                     "url": "https://developer.mozilla.org/docs/Web/CSS/max-inline-size"
31523                 }
31524             ],
31525             "description": "Logical 'max-height'. Mapping depends on the element’s 'writing-mode'.",
31526             "restrictions": [
31527                 "length",
31528                 "percentage"
31529             ]
31530         },
31531         {
31532             "name": "max-width",
31533             "values": [
31534                 {
31535                     "name": "none",
31536                     "description": "No limit on the width of the box."
31537                 },
31538                 {
31539                     "name": "fit-content",
31540                     "description": "Use the fit-content inline size or fit-content block size, as appropriate to the writing mode."
31541                 },
31542                 {
31543                     "name": "max-content",
31544                     "description": "Use the max-content inline size or max-content block size, as appropriate to the writing mode."
31545                 },
31546                 {
31547                     "name": "min-content",
31548                     "description": "Use the min-content inline size or min-content block size, as appropriate to the writing mode."
31549                 }
31550             ],
31551             "syntax": "<viewport-length>",
31552             "relevance": 89,
31553             "references": [
31554                 {
31555                     "name": "MDN Reference",
31556                     "url": "https://developer.mozilla.org/docs/Web/CSS/max-width"
31557                 }
31558             ],
31559             "description": "Allows authors to constrain content width to a certain range.",
31560             "restrictions": [
31561                 "length",
31562                 "percentage"
31563             ]
31564         },
31565         {
31566             "name": "min-block-size",
31567             "browsers": [
31568                 "E79",
31569                 "FF41",
31570                 "S12.1",
31571                 "C57",
31572                 "O44"
31573             ],
31574             "syntax": "<'min-width'>",
31575             "relevance": 50,
31576             "references": [
31577                 {
31578                     "name": "MDN Reference",
31579                     "url": "https://developer.mozilla.org/docs/Web/CSS/min-block-size"
31580                 }
31581             ],
31582             "description": "Logical 'min-width'. Mapping depends on the element’s 'writing-mode'.",
31583             "restrictions": [
31584                 "length",
31585                 "percentage"
31586             ]
31587         },
31588         {
31589             "name": "min-height",
31590             "values": [
31591                 {
31592                     "name": "auto"
31593                 },
31594                 {
31595                     "name": "fit-content",
31596                     "description": "Use the fit-content inline size or fit-content block size, as appropriate to the writing mode."
31597                 },
31598                 {
31599                     "name": "max-content",
31600                     "description": "Use the max-content inline size or max-content block size, as appropriate to the writing mode."
31601                 },
31602                 {
31603                     "name": "min-content",
31604                     "description": "Use the min-content inline size or min-content block size, as appropriate to the writing mode."
31605                 }
31606             ],
31607             "syntax": "<viewport-length>",
31608             "relevance": 88,
31609             "references": [
31610                 {
31611                     "name": "MDN Reference",
31612                     "url": "https://developer.mozilla.org/docs/Web/CSS/min-height"
31613                 }
31614             ],
31615             "description": "Allows authors to constrain content height to a certain range.",
31616             "restrictions": [
31617                 "length",
31618                 "percentage"
31619             ]
31620         },
31621         {
31622             "name": "min-inline-size",
31623             "browsers": [
31624                 "E79",
31625                 "FF41",
31626                 "S12.1",
31627                 "C57",
31628                 "O44"
31629             ],
31630             "syntax": "<'min-width'>",
31631             "relevance": 50,
31632             "references": [
31633                 {
31634                     "name": "MDN Reference",
31635                     "url": "https://developer.mozilla.org/docs/Web/CSS/min-inline-size"
31636                 }
31637             ],
31638             "description": "Logical 'min-height'. Mapping depends on the element’s 'writing-mode'.",
31639             "restrictions": [
31640                 "length",
31641                 "percentage"
31642             ]
31643         },
31644         {
31645             "name": "min-width",
31646             "values": [
31647                 {
31648                     "name": "auto"
31649                 },
31650                 {
31651                     "name": "fit-content",
31652                     "description": "Use the fit-content inline size or fit-content block size, as appropriate to the writing mode."
31653                 },
31654                 {
31655                     "name": "max-content",
31656                     "description": "Use the max-content inline size or max-content block size, as appropriate to the writing mode."
31657                 },
31658                 {
31659                     "name": "min-content",
31660                     "description": "Use the min-content inline size or min-content block size, as appropriate to the writing mode."
31661                 }
31662             ],
31663             "syntax": "<viewport-length>",
31664             "relevance": 87,
31665             "references": [
31666                 {
31667                     "name": "MDN Reference",
31668                     "url": "https://developer.mozilla.org/docs/Web/CSS/min-width"
31669                 }
31670             ],
31671             "description": "Allows authors to constrain content width to a certain range.",
31672             "restrictions": [
31673                 "length",
31674                 "percentage"
31675             ]
31676         },
31677         {
31678             "name": "mix-blend-mode",
31679             "browsers": [
31680                 "E79",
31681                 "FF32",
31682                 "S8",
31683                 "C41",
31684                 "O28"
31685             ],
31686             "values": [
31687                 {
31688                     "name": "normal",
31689                     "description": "Default attribute which specifies no blending"
31690                 },
31691                 {
31692                     "name": "multiply",
31693                     "description": "The source color is multiplied by the destination color and replaces the destination."
31694                 },
31695                 {
31696                     "name": "screen",
31697                     "description": "Multiplies the complements of the backdrop and source color values, then complements the result."
31698                 },
31699                 {
31700                     "name": "overlay",
31701                     "description": "Multiplies or screens the colors, depending on the backdrop color value."
31702                 },
31703                 {
31704                     "name": "darken",
31705                     "description": "Selects the darker of the backdrop and source colors."
31706                 },
31707                 {
31708                     "name": "lighten",
31709                     "description": "Selects the lighter of the backdrop and source colors."
31710                 },
31711                 {
31712                     "name": "color-dodge",
31713                     "description": "Brightens the backdrop color to reflect the source color."
31714                 },
31715                 {
31716                     "name": "color-burn",
31717                     "description": "Darkens the backdrop color to reflect the source color."
31718                 },
31719                 {
31720                     "name": "hard-light",
31721                     "description": "Multiplies or screens the colors, depending on the source color value."
31722                 },
31723                 {
31724                     "name": "soft-light",
31725                     "description": "Darkens or lightens the colors, depending on the source color value."
31726                 },
31727                 {
31728                     "name": "difference",
31729                     "description": "Subtracts the darker of the two constituent colors from the lighter color.."
31730                 },
31731                 {
31732                     "name": "exclusion",
31733                     "description": "Produces an effect similar to that of the Difference mode but lower in contrast."
31734                 },
31735                 {
31736                     "name": "hue",
31737                     "browsers": [
31738                         "E79",
31739                         "FF32",
31740                         "S8",
31741                         "C41",
31742                         "O28"
31743                     ],
31744                     "description": "Creates a color with the hue of the source color and the saturation and luminosity of the backdrop color."
31745                 },
31746                 {
31747                     "name": "saturation",
31748                     "browsers": [
31749                         "E79",
31750                         "FF32",
31751                         "S8",
31752                         "C41",
31753                         "O28"
31754                     ],
31755                     "description": "Creates a color with the saturation of the source color and the hue and luminosity of the backdrop color."
31756                 },
31757                 {
31758                     "name": "color",
31759                     "browsers": [
31760                         "E79",
31761                         "FF32",
31762                         "S8",
31763                         "C41",
31764                         "O28"
31765                     ],
31766                     "description": "Creates a color with the hue and saturation of the source color and the luminosity of the backdrop color."
31767                 },
31768                 {
31769                     "name": "luminosity",
31770                     "browsers": [
31771                         "E79",
31772                         "FF32",
31773                         "S8",
31774                         "C41",
31775                         "O28"
31776                     ],
31777                     "description": "Creates a color with the luminosity of the source color and the hue and saturation of the backdrop color."
31778                 }
31779             ],
31780             "syntax": "<blend-mode>",
31781             "relevance": 51,
31782             "references": [
31783                 {
31784                     "name": "MDN Reference",
31785                     "url": "https://developer.mozilla.org/docs/Web/CSS/mix-blend-mode"
31786                 }
31787             ],
31788             "description": "Defines the formula that must be used to mix the colors with the backdrop.",
31789             "restrictions": [
31790                 "enum"
31791             ]
31792         },
31793         {
31794             "name": "motion",
31795             "browsers": [
31796                 "C46",
31797                 "O33"
31798             ],
31799             "values": [
31800                 {
31801                     "name": "none",
31802                     "description": "No motion path gets created."
31803                 },
31804                 {
31805                     "name": "path()",
31806                     "description": "Defines an SVG path as a string, with optional 'fill-rule' as the first argument."
31807                 },
31808                 {
31809                     "name": "auto",
31810                     "description": "Indicates that the object is rotated by the angle of the direction of the motion path."
31811                 },
31812                 {
31813                     "name": "reverse",
31814                     "description": "Indicates that the object is rotated by the angle of the direction of the motion path plus 180 degrees."
31815                 }
31816             ],
31817             "relevance": 50,
31818             "description": "Shorthand property for setting 'motion-path', 'motion-offset' and 'motion-rotation'.",
31819             "restrictions": [
31820                 "url",
31821                 "length",
31822                 "percentage",
31823                 "angle",
31824                 "shape",
31825                 "geometry-box",
31826                 "enum"
31827             ]
31828         },
31829         {
31830             "name": "motion-offset",
31831             "browsers": [
31832                 "C46",
31833                 "O33"
31834             ],
31835             "relevance": 50,
31836             "description": "A distance that describes the position along the specified motion path.",
31837             "restrictions": [
31838                 "length",
31839                 "percentage"
31840             ]
31841         },
31842         {
31843             "name": "motion-path",
31844             "browsers": [
31845                 "C46",
31846                 "O33"
31847             ],
31848             "values": [
31849                 {
31850                     "name": "none",
31851                     "description": "No motion path gets created."
31852                 },
31853                 {
31854                     "name": "path()",
31855                     "description": "Defines an SVG path as a string, with optional 'fill-rule' as the first argument."
31856                 }
31857             ],
31858             "relevance": 50,
31859             "description": "Specifies the motion path the element gets positioned at.",
31860             "restrictions": [
31861                 "url",
31862                 "shape",
31863                 "geometry-box",
31864                 "enum"
31865             ]
31866         },
31867         {
31868             "name": "motion-rotation",
31869             "browsers": [
31870                 "C46",
31871                 "O33"
31872             ],
31873             "values": [
31874                 {
31875                     "name": "auto",
31876                     "description": "Indicates that the object is rotated by the angle of the direction of the motion path."
31877                 },
31878                 {
31879                     "name": "reverse",
31880                     "description": "Indicates that the object is rotated by the angle of the direction of the motion path plus 180 degrees."
31881                 }
31882             ],
31883             "relevance": 50,
31884             "description": "Defines the direction of the element while positioning along the motion path.",
31885             "restrictions": [
31886                 "angle"
31887             ]
31888         },
31889         {
31890             "name": "-moz-animation",
31891             "browsers": [
31892                 "FF9"
31893             ],
31894             "values": [
31895                 {
31896                     "name": "alternate",
31897                     "description": "The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction."
31898                 },
31899                 {
31900                     "name": "alternate-reverse",
31901                     "description": "The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction."
31902                 },
31903                 {
31904                     "name": "backwards",
31905                     "description": "The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'."
31906                 },
31907                 {
31908                     "name": "both",
31909                     "description": "Both forwards and backwards fill modes are applied."
31910                 },
31911                 {
31912                     "name": "forwards",
31913                     "description": "The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes."
31914                 },
31915                 {
31916                     "name": "infinite",
31917                     "description": "Causes the animation to repeat forever."
31918                 },
31919                 {
31920                     "name": "none",
31921                     "description": "No animation is performed"
31922                 },
31923                 {
31924                     "name": "normal",
31925                     "description": "Normal playback."
31926                 },
31927                 {
31928                     "name": "reverse",
31929                     "description": "All iterations of the animation are played in the reverse direction from the way they were specified."
31930                 }
31931             ],
31932             "relevance": 50,
31933             "description": "Shorthand property combines six of the animation properties into a single property.",
31934             "restrictions": [
31935                 "time",
31936                 "enum",
31937                 "timing-function",
31938                 "identifier",
31939                 "number"
31940             ]
31941         },
31942         {
31943             "name": "-moz-animation-delay",
31944             "browsers": [
31945                 "FF9"
31946             ],
31947             "relevance": 50,
31948             "description": "Defines when the animation will start.",
31949             "restrictions": [
31950                 "time"
31951             ]
31952         },
31953         {
31954             "name": "-moz-animation-direction",
31955             "browsers": [
31956                 "FF9"
31957             ],
31958             "values": [
31959                 {
31960                     "name": "alternate",
31961                     "description": "The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction."
31962                 },
31963                 {
31964                     "name": "alternate-reverse",
31965                     "description": "The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction."
31966                 },
31967                 {
31968                     "name": "normal",
31969                     "description": "Normal playback."
31970                 },
31971                 {
31972                     "name": "reverse",
31973                     "description": "All iterations of the animation are played in the reverse direction from the way they were specified."
31974                 }
31975             ],
31976             "relevance": 50,
31977             "description": "Defines whether or not the animation should play in reverse on alternate cycles.",
31978             "restrictions": [
31979                 "enum"
31980             ]
31981         },
31982         {
31983             "name": "-moz-animation-duration",
31984             "browsers": [
31985                 "FF9"
31986             ],
31987             "relevance": 50,
31988             "description": "Defines the length of time that an animation takes to complete one cycle.",
31989             "restrictions": [
31990                 "time"
31991             ]
31992         },
31993         {
31994             "name": "-moz-animation-iteration-count",
31995             "browsers": [
31996                 "FF9"
31997             ],
31998             "values": [
31999                 {
32000                     "name": "infinite",
32001                     "description": "Causes the animation to repeat forever."
32002                 }
32003             ],
32004             "relevance": 50,
32005             "description": "Defines the number of times an animation cycle is played. The default value is one, meaning the animation will play from beginning to end once.",
32006             "restrictions": [
32007                 "number",
32008                 "enum"
32009             ]
32010         },
32011         {
32012             "name": "-moz-animation-name",
32013             "browsers": [
32014                 "FF9"
32015             ],
32016             "values": [
32017                 {
32018                     "name": "none",
32019                     "description": "No animation is performed"
32020                 }
32021             ],
32022             "relevance": 50,
32023             "description": "Defines a list of animations that apply. Each name is used to select the keyframe at-rule that provides the property values for the animation.",
32024             "restrictions": [
32025                 "identifier",
32026                 "enum"
32027             ]
32028         },
32029         {
32030             "name": "-moz-animation-play-state",
32031             "browsers": [
32032                 "FF9"
32033             ],
32034             "values": [
32035                 {
32036                     "name": "paused",
32037                     "description": "A running animation will be paused."
32038                 },
32039                 {
32040                     "name": "running",
32041                     "description": "Resume playback of a paused animation."
32042                 }
32043             ],
32044             "relevance": 50,
32045             "description": "Defines whether the animation is running or paused.",
32046             "restrictions": [
32047                 "enum"
32048             ]
32049         },
32050         {
32051             "name": "-moz-animation-timing-function",
32052             "browsers": [
32053                 "FF9"
32054             ],
32055             "relevance": 50,
32056             "description": "Describes how the animation will progress over one cycle of its duration. See the 'transition-timing-function'.",
32057             "restrictions": [
32058                 "timing-function"
32059             ]
32060         },
32061         {
32062             "name": "-moz-appearance",
32063             "browsers": [
32064                 "FF1"
32065             ],
32066             "values": [
32067                 {
32068                     "name": "button"
32069                 },
32070                 {
32071                     "name": "button-arrow-down"
32072                 },
32073                 {
32074                     "name": "button-arrow-next"
32075                 },
32076                 {
32077                     "name": "button-arrow-previous"
32078                 },
32079                 {
32080                     "name": "button-arrow-up"
32081                 },
32082                 {
32083                     "name": "button-bevel"
32084                 },
32085                 {
32086                     "name": "checkbox"
32087                 },
32088                 {
32089                     "name": "checkbox-container"
32090                 },
32091                 {
32092                     "name": "checkbox-label"
32093                 },
32094                 {
32095                     "name": "dialog"
32096                 },
32097                 {
32098                     "name": "groupbox"
32099                 },
32100                 {
32101                     "name": "listbox"
32102                 },
32103                 {
32104                     "name": "menuarrow"
32105                 },
32106                 {
32107                     "name": "menuimage"
32108                 },
32109                 {
32110                     "name": "menuitem"
32111                 },
32112                 {
32113                     "name": "menuitemtext"
32114                 },
32115                 {
32116                     "name": "menulist"
32117                 },
32118                 {
32119                     "name": "menulist-button"
32120                 },
32121                 {
32122                     "name": "menulist-text"
32123                 },
32124                 {
32125                     "name": "menulist-textfield"
32126                 },
32127                 {
32128                     "name": "menupopup"
32129                 },
32130                 {
32131                     "name": "menuradio"
32132                 },
32133                 {
32134                     "name": "menuseparator"
32135                 },
32136                 {
32137                     "name": "-moz-mac-unified-toolbar"
32138                 },
32139                 {
32140                     "name": "-moz-win-borderless-glass"
32141                 },
32142                 {
32143                     "name": "-moz-win-browsertabbar-toolbox"
32144                 },
32145                 {
32146                     "name": "-moz-win-communications-toolbox"
32147                 },
32148                 {
32149                     "name": "-moz-win-glass"
32150                 },
32151                 {
32152                     "name": "-moz-win-media-toolbox"
32153                 },
32154                 {
32155                     "name": "none"
32156                 },
32157                 {
32158                     "name": "progressbar"
32159                 },
32160                 {
32161                     "name": "progresschunk"
32162                 },
32163                 {
32164                     "name": "radio"
32165                 },
32166                 {
32167                     "name": "radio-container"
32168                 },
32169                 {
32170                     "name": "radio-label"
32171                 },
32172                 {
32173                     "name": "radiomenuitem"
32174                 },
32175                 {
32176                     "name": "resizer"
32177                 },
32178                 {
32179                     "name": "resizerpanel"
32180                 },
32181                 {
32182                     "name": "scrollbarbutton-down"
32183                 },
32184                 {
32185                     "name": "scrollbarbutton-left"
32186                 },
32187                 {
32188                     "name": "scrollbarbutton-right"
32189                 },
32190                 {
32191                     "name": "scrollbarbutton-up"
32192                 },
32193                 {
32194                     "name": "scrollbar-small"
32195                 },
32196                 {
32197                     "name": "scrollbartrack-horizontal"
32198                 },
32199                 {
32200                     "name": "scrollbartrack-vertical"
32201                 },
32202                 {
32203                     "name": "separator"
32204                 },
32205                 {
32206                     "name": "spinner"
32207                 },
32208                 {
32209                     "name": "spinner-downbutton"
32210                 },
32211                 {
32212                     "name": "spinner-textfield"
32213                 },
32214                 {
32215                     "name": "spinner-upbutton"
32216                 },
32217                 {
32218                     "name": "statusbar"
32219                 },
32220                 {
32221                     "name": "statusbarpanel"
32222                 },
32223                 {
32224                     "name": "tab"
32225                 },
32226                 {
32227                     "name": "tabpanels"
32228                 },
32229                 {
32230                     "name": "tab-scroll-arrow-back"
32231                 },
32232                 {
32233                     "name": "tab-scroll-arrow-forward"
32234                 },
32235                 {
32236                     "name": "textfield"
32237                 },
32238                 {
32239                     "name": "textfield-multiline"
32240                 },
32241                 {
32242                     "name": "toolbar"
32243                 },
32244                 {
32245                     "name": "toolbox"
32246                 },
32247                 {
32248                     "name": "tooltip"
32249                 },
32250                 {
32251                     "name": "treeheadercell"
32252                 },
32253                 {
32254                     "name": "treeheadersortarrow"
32255                 },
32256                 {
32257                     "name": "treeitem"
32258                 },
32259                 {
32260                     "name": "treetwistyopen"
32261                 },
32262                 {
32263                     "name": "treeview"
32264                 },
32265                 {
32266                     "name": "treewisty"
32267                 },
32268                 {
32269                     "name": "window"
32270                 }
32271             ],
32272             "status": "nonstandard",
32273             "syntax": "none | button | button-arrow-down | button-arrow-next | button-arrow-previous | button-arrow-up | button-bevel | button-focus | caret | checkbox | checkbox-container | checkbox-label | checkmenuitem | dualbutton | groupbox | listbox | listitem | menuarrow | menubar | menucheckbox | menuimage | menuitem | menuitemtext | menulist | menulist-button | menulist-text | menulist-textfield | menupopup | menuradio | menuseparator | meterbar | meterchunk | progressbar | progressbar-vertical | progresschunk | progresschunk-vertical | radio | radio-container | radio-label | radiomenuitem | range | range-thumb | resizer | resizerpanel | scale-horizontal | scalethumbend | scalethumb-horizontal | scalethumbstart | scalethumbtick | scalethumb-vertical | scale-vertical | scrollbarbutton-down | scrollbarbutton-left | scrollbarbutton-right | scrollbarbutton-up | scrollbarthumb-horizontal | scrollbarthumb-vertical | scrollbartrack-horizontal | scrollbartrack-vertical | searchfield | separator | sheet | spinner | spinner-downbutton | spinner-textfield | spinner-upbutton | splitter | statusbar | statusbarpanel | tab | tabpanel | tabpanels | tab-scroll-arrow-back | tab-scroll-arrow-forward | textfield | textfield-multiline | toolbar | toolbarbutton | toolbarbutton-dropdown | toolbargripper | toolbox | tooltip | treeheader | treeheadercell | treeheadersortarrow | treeitem | treeline | treetwisty | treetwistyopen | treeview | -moz-mac-unified-toolbar | -moz-win-borderless-glass | -moz-win-browsertabbar-toolbox | -moz-win-communicationstext | -moz-win-communications-toolbox | -moz-win-exclude-glass | -moz-win-glass | -moz-win-mediatext | -moz-win-media-toolbox | -moz-window-button-box | -moz-window-button-box-maximized | -moz-window-button-close | -moz-window-button-maximize | -moz-window-button-minimize | -moz-window-button-restore | -moz-window-frame-bottom | -moz-window-frame-left | -moz-window-frame-right | -moz-window-titlebar | -moz-window-titlebar-maximized",
32274             "relevance": 0,
32275             "description": "Used in Gecko (Firefox) to display an element using a platform-native styling based on the operating system's theme.",
32276             "restrictions": [
32277                 "enum"
32278             ]
32279         },
32280         {
32281             "name": "-moz-backface-visibility",
32282             "browsers": [
32283                 "FF10"
32284             ],
32285             "values": [
32286                 {
32287                     "name": "hidden"
32288                 },
32289                 {
32290                     "name": "visible"
32291                 }
32292             ],
32293             "relevance": 50,
32294             "description": "Determines whether or not the 'back' side of a transformed element is visible when facing the viewer. With an identity transform, the front side of an element faces the viewer.",
32295             "restrictions": [
32296                 "enum"
32297             ]
32298         },
32299         {
32300             "name": "-moz-background-clip",
32301             "browsers": [
32302                 "FF1-3.6"
32303             ],
32304             "values": [
32305                 {
32306                     "name": "padding"
32307                 }
32308             ],
32309             "relevance": 50,
32310             "description": "Determines the background painting area.",
32311             "restrictions": [
32312                 "box",
32313                 "enum"
32314             ]
32315         },
32316         {
32317             "name": "-moz-background-inline-policy",
32318             "browsers": [
32319                 "FF1"
32320             ],
32321             "values": [
32322                 {
32323                     "name": "bounding-box"
32324                 },
32325                 {
32326                     "name": "continuous"
32327                 },
32328                 {
32329                     "name": "each-box"
32330                 }
32331             ],
32332             "relevance": 50,
32333             "description": "In Gecko-based applications like Firefox, the -moz-background-inline-policy CSS property specifies how the background image of an inline element is determined when the content of the inline element wraps onto multiple lines. The choice of position has significant effects on repetition.",
32334             "restrictions": [
32335                 "enum"
32336             ]
32337         },
32338         {
32339             "name": "-moz-background-origin",
32340             "browsers": [
32341                 "FF1"
32342             ],
32343             "relevance": 50,
32344             "description": "For elements rendered as a single box, specifies the background positioning area. For elements rendered as multiple boxes (e.g., inline boxes on several lines, boxes on several pages) specifies which boxes 'box-decoration-break' operates on to determine the background positioning area(s).",
32345             "restrictions": [
32346                 "box"
32347             ]
32348         },
32349         {
32350             "name": "-moz-border-bottom-colors",
32351             "browsers": [
32352                 "FF1"
32353             ],
32354             "status": "nonstandard",
32355             "syntax": "<color>+ | none",
32356             "relevance": 0,
32357             "description": "Sets a list of colors for the bottom border.",
32358             "restrictions": [
32359                 "color"
32360             ]
32361         },
32362         {
32363             "name": "-moz-border-image",
32364             "browsers": [
32365                 "FF3.6"
32366             ],
32367             "values": [
32368                 {
32369                     "name": "auto",
32370                     "description": "If 'auto' is specified then the border image width is the intrinsic width or height (whichever is applicable) of the corresponding image slice. If the image does not have the required intrinsic dimension then the corresponding border-width is used instead."
32371                 },
32372                 {
32373                     "name": "fill",
32374                     "description": "Causes the middle part of the border-image to be preserved."
32375                 },
32376                 {
32377                     "name": "none"
32378                 },
32379                 {
32380                     "name": "repeat",
32381                     "description": "The image is tiled (repeated) to fill the area."
32382                 },
32383                 {
32384                     "name": "round",
32385                     "description": "The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the image is rescaled so that it does."
32386                 },
32387                 {
32388                     "name": "space",
32389                     "description": "The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the extra space is distributed around the tiles."
32390                 },
32391                 {
32392                     "name": "stretch",
32393                     "description": "The image is stretched to fill the area."
32394                 },
32395                 {
32396                     "name": "url()"
32397                 }
32398             ],
32399             "relevance": 50,
32400             "description": "Shorthand property for setting 'border-image-source', 'border-image-slice', 'border-image-width', 'border-image-outset' and 'border-image-repeat'. Omitted values are set to their initial values.",
32401             "restrictions": [
32402                 "length",
32403                 "percentage",
32404                 "number",
32405                 "url",
32406                 "enum"
32407             ]
32408         },
32409         {
32410             "name": "-moz-border-left-colors",
32411             "browsers": [
32412                 "FF1"
32413             ],
32414             "status": "nonstandard",
32415             "syntax": "<color>+ | none",
32416             "relevance": 0,
32417             "description": "Sets a list of colors for the bottom border.",
32418             "restrictions": [
32419                 "color"
32420             ]
32421         },
32422         {
32423             "name": "-moz-border-right-colors",
32424             "browsers": [
32425                 "FF1"
32426             ],
32427             "status": "nonstandard",
32428             "syntax": "<color>+ | none",
32429             "relevance": 0,
32430             "description": "Sets a list of colors for the bottom border.",
32431             "restrictions": [
32432                 "color"
32433             ]
32434         },
32435         {
32436             "name": "-moz-border-top-colors",
32437             "browsers": [
32438                 "FF1"
32439             ],
32440             "status": "nonstandard",
32441             "syntax": "<color>+ | none",
32442             "relevance": 0,
32443             "description": "Ske Firefox, -moz-border-bottom-colors sets a list of colors for the bottom border.",
32444             "restrictions": [
32445                 "color"
32446             ]
32447         },
32448         {
32449             "name": "-moz-box-align",
32450             "browsers": [
32451                 "FF1"
32452             ],
32453             "values": [
32454                 {
32455                     "name": "baseline",
32456                     "description": "If this box orientation is inline-axis or horizontal, all children are placed with their baselines aligned, and extra space placed before or after as necessary. For block flows, the baseline of the first non-empty line box located within the element is used. For tables, the baseline of the first cell is used."
32457                 },
32458                 {
32459                     "name": "center",
32460                     "description": "Any extra space is divided evenly, with half placed above the child and the other half placed after the child."
32461                 },
32462                 {
32463                     "name": "end",
32464                     "description": "For normal direction boxes, the bottom edge of each child is placed along the bottom of the box. Extra space is placed above the element. For reverse direction boxes, the top edge of each child is placed along the top of the box. Extra space is placed below the element."
32465                 },
32466                 {
32467                     "name": "start",
32468                     "description": "For normal direction boxes, the top edge of each child is placed along the top of the box. Extra space is placed below the element. For reverse direction boxes, the bottom edge of each child is placed along the bottom of the box. Extra space is placed above the element."
32469                 },
32470                 {
32471                     "name": "stretch",
32472                     "description": "The height of each child is adjusted to that of the containing block."
32473                 }
32474             ],
32475             "relevance": 50,
32476             "description": "Specifies how a XUL box aligns its contents across (perpendicular to) the direction of its layout. The effect of this is only visible if there is extra space in the box.",
32477             "restrictions": [
32478                 "enum"
32479             ]
32480         },
32481         {
32482             "name": "-moz-box-direction",
32483             "browsers": [
32484                 "FF1"
32485             ],
32486             "values": [
32487                 {
32488                     "name": "normal",
32489                     "description": "A box with a computed value of horizontal for box-orient displays its children from left to right. A box with a computed value of vertical displays its children from top to bottom."
32490                 },
32491                 {
32492                     "name": "reverse",
32493                     "description": "A box with a computed value of horizontal for box-orient displays its children from right to left. A box with a computed value of vertical displays its children from bottom to top."
32494                 }
32495             ],
32496             "relevance": 50,
32497             "description": "Specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).",
32498             "restrictions": [
32499                 "enum"
32500             ]
32501         },
32502         {
32503             "name": "-moz-box-flex",
32504             "browsers": [
32505                 "FF1"
32506             ],
32507             "relevance": 50,
32508             "description": "Specifies how a box grows to fill the box that contains it, in the direction of the containing box's layout.",
32509             "restrictions": [
32510                 "number"
32511             ]
32512         },
32513         {
32514             "name": "-moz-box-flexgroup",
32515             "browsers": [
32516                 "FF1"
32517             ],
32518             "relevance": 50,
32519             "description": "Flexible elements can be assigned to flex groups using the 'box-flex-group' property.",
32520             "restrictions": [
32521                 "integer"
32522             ]
32523         },
32524         {
32525             "name": "-moz-box-ordinal-group",
32526             "browsers": [
32527                 "FF1"
32528             ],
32529             "relevance": 50,
32530             "description": "Indicates the ordinal group the element belongs to. Elements with a lower ordinal group are displayed before those with a higher ordinal group.",
32531             "restrictions": [
32532                 "integer"
32533             ]
32534         },
32535         {
32536             "name": "-moz-box-orient",
32537             "browsers": [
32538                 "FF1"
32539             ],
32540             "values": [
32541                 {
32542                     "name": "block-axis",
32543                     "description": "Elements are oriented along the box's axis."
32544                 },
32545                 {
32546                     "name": "horizontal",
32547                     "description": "The box displays its children from left to right in a horizontal line."
32548                 },
32549                 {
32550                     "name": "inline-axis",
32551                     "description": "Elements are oriented vertically."
32552                 },
32553                 {
32554                     "name": "vertical",
32555                     "description": "The box displays its children from stacked from top to bottom vertically."
32556                 }
32557             ],
32558             "relevance": 50,
32559             "description": "In Mozilla applications, -moz-box-orient specifies whether a box lays out its contents horizontally or vertically.",
32560             "restrictions": [
32561                 "enum"
32562             ]
32563         },
32564         {
32565             "name": "-moz-box-pack",
32566             "browsers": [
32567                 "FF1"
32568             ],
32569             "values": [
32570                 {
32571                     "name": "center",
32572                     "description": "The extra space is divided evenly, with half placed before the first child and the other half placed after the last child."
32573                 },
32574                 {
32575                     "name": "end",
32576                     "description": "For normal direction boxes, the right edge of the last child is placed at the right side, with all extra space placed before the first child. For reverse direction boxes, the left edge of the first child is placed at the left side, with all extra space placed after the last child."
32577                 },
32578                 {
32579                     "name": "justify",
32580                     "description": "The space is divided evenly in-between each child, with none of the extra space placed before the first child or after the last child. If there is only one child, treat the pack value as if it were start."
32581                 },
32582                 {
32583                     "name": "start",
32584                     "description": "For normal direction boxes, the left edge of the first child is placed at the left side, with all extra space placed after the last child. For reverse direction boxes, the right edge of the last child is placed at the right side, with all extra space placed before the first child."
32585                 }
32586             ],
32587             "relevance": 50,
32588             "description": "Specifies how a box packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.",
32589             "restrictions": [
32590                 "enum"
32591             ]
32592         },
32593         {
32594             "name": "-moz-box-sizing",
32595             "browsers": [
32596                 "FF1"
32597             ],
32598             "values": [
32599                 {
32600                     "name": "border-box",
32601                     "description": "The specified width and height (and respective min/max properties) on this element determine the border box of the element."
32602                 },
32603                 {
32604                     "name": "content-box",
32605                     "description": "Behavior of width and height as specified by CSS2.1. The specified width and height (and respective min/max properties) apply to the width and height respectively of the content box of the element."
32606                 },
32607                 {
32608                     "name": "padding-box",
32609                     "description": "The specified width and height (and respective min/max properties) on this element determine the padding box of the element."
32610                 }
32611             ],
32612             "relevance": 50,
32613             "description": "Box Model addition in CSS3.",
32614             "restrictions": [
32615                 "enum"
32616             ]
32617         },
32618         {
32619             "name": "-moz-column-count",
32620             "browsers": [
32621                 "FF3.5"
32622             ],
32623             "values": [
32624                 {
32625                     "name": "auto",
32626                     "description": "Determines the number of columns by the 'column-width' property and the element width."
32627                 }
32628             ],
32629             "relevance": 50,
32630             "description": "Describes the optimal number of columns into which the content of the element will be flowed.",
32631             "restrictions": [
32632                 "integer"
32633             ]
32634         },
32635         {
32636             "name": "-moz-column-gap",
32637             "browsers": [
32638                 "FF3.5"
32639             ],
32640             "values": [
32641                 {
32642                     "name": "normal",
32643                     "description": "User agent specific and typically equivalent to 1em."
32644                 }
32645             ],
32646             "relevance": 50,
32647             "description": "Sets the gap between columns. If there is a column rule between columns, it will appear in the middle of the gap.",
32648             "restrictions": [
32649                 "length"
32650             ]
32651         },
32652         {
32653             "name": "-moz-column-rule",
32654             "browsers": [
32655                 "FF3.5"
32656             ],
32657             "relevance": 50,
32658             "description": "Shorthand for setting 'column-rule-width', 'column-rule-style', and 'column-rule-color' at the same place in the style sheet. Omitted values are set to their initial values.",
32659             "restrictions": [
32660                 "length",
32661                 "line-width",
32662                 "line-style",
32663                 "color"
32664             ]
32665         },
32666         {
32667             "name": "-moz-column-rule-color",
32668             "browsers": [
32669                 "FF3.5"
32670             ],
32671             "relevance": 50,
32672             "description": "Sets the color of the column rule",
32673             "restrictions": [
32674                 "color"
32675             ]
32676         },
32677         {
32678             "name": "-moz-column-rule-style",
32679             "browsers": [
32680                 "FF3.5"
32681             ],
32682             "relevance": 50,
32683             "description": "Sets the style of the rule between columns of an element.",
32684             "restrictions": [
32685                 "line-style"
32686             ]
32687         },
32688         {
32689             "name": "-moz-column-rule-width",
32690             "browsers": [
32691                 "FF3.5"
32692             ],
32693             "relevance": 50,
32694             "description": "Sets the width of the rule between columns. Negative values are not allowed.",
32695             "restrictions": [
32696                 "length",
32697                 "line-width"
32698             ]
32699         },
32700         {
32701             "name": "-moz-columns",
32702             "browsers": [
32703                 "FF9"
32704             ],
32705             "values": [
32706                 {
32707                     "name": "auto",
32708                     "description": "The width depends on the values of other properties."
32709                 }
32710             ],
32711             "relevance": 50,
32712             "description": "A shorthand property which sets both 'column-width' and 'column-count'.",
32713             "restrictions": [
32714                 "length",
32715                 "integer"
32716             ]
32717         },
32718         {
32719             "name": "-moz-column-width",
32720             "browsers": [
32721                 "FF3.5"
32722             ],
32723             "values": [
32724                 {
32725                     "name": "auto",
32726                     "description": "The width depends on the values of other properties."
32727                 }
32728             ],
32729             "relevance": 50,
32730             "description": "This property describes the width of columns in multicol elements.",
32731             "restrictions": [
32732                 "length"
32733             ]
32734         },
32735         {
32736             "name": "-moz-font-feature-settings",
32737             "browsers": [
32738                 "FF4"
32739             ],
32740             "values": [
32741                 {
32742                     "name": "\"c2cs\""
32743                 },
32744                 {
32745                     "name": "\"dlig\""
32746                 },
32747                 {
32748                     "name": "\"kern\""
32749                 },
32750                 {
32751                     "name": "\"liga\""
32752                 },
32753                 {
32754                     "name": "\"lnum\""
32755                 },
32756                 {
32757                     "name": "\"onum\""
32758                 },
32759                 {
32760                     "name": "\"smcp\""
32761                 },
32762                 {
32763                     "name": "\"swsh\""
32764                 },
32765                 {
32766                     "name": "\"tnum\""
32767                 },
32768                 {
32769                     "name": "normal",
32770                     "description": "No change in glyph substitution or positioning occurs."
32771                 },
32772                 {
32773                     "name": "off",
32774                     "browsers": [
32775                         "FF4"
32776                     ]
32777                 },
32778                 {
32779                     "name": "on",
32780                     "browsers": [
32781                         "FF4"
32782                     ]
32783                 }
32784             ],
32785             "relevance": 50,
32786             "description": "Provides low-level control over OpenType font features. It is intended as a way of providing access to font features that are not widely used but are needed for a particular use case.",
32787             "restrictions": [
32788                 "string",
32789                 "integer"
32790             ]
32791         },
32792         {
32793             "name": "-moz-hyphens",
32794             "browsers": [
32795                 "FF9"
32796             ],
32797             "values": [
32798                 {
32799                     "name": "auto",
32800                     "description": "Conditional hyphenation characters inside a word, if present, take priority over automatic resources when determining hyphenation points within the word."
32801                 },
32802                 {
32803                     "name": "manual",
32804                     "description": "Words are only broken at line breaks where there are characters inside the word that suggest line break opportunities"
32805                 },
32806                 {
32807                     "name": "none",
32808                     "description": "Words are not broken at line breaks, even if characters inside the word suggest line break points."
32809                 }
32810             ],
32811             "relevance": 50,
32812             "description": "Controls whether hyphenation is allowed to create more break opportunities within a line of text.",
32813             "restrictions": [
32814                 "enum"
32815             ]
32816         },
32817         {
32818             "name": "-moz-perspective",
32819             "browsers": [
32820                 "FF10"
32821             ],
32822             "values": [
32823                 {
32824                     "name": "none",
32825                     "description": "No perspective transform is applied."
32826                 }
32827             ],
32828             "relevance": 50,
32829             "description": "Applies the same transform as the perspective(<number>) transform function, except that it applies only to the positioned or transformed children of the element, not to the transform on the element itself.",
32830             "restrictions": [
32831                 "length"
32832             ]
32833         },
32834         {
32835             "name": "-moz-perspective-origin",
32836             "browsers": [
32837                 "FF10"
32838             ],
32839             "relevance": 50,
32840             "description": "Establishes the origin for the perspective property. It effectively sets the X and Y position at which the viewer appears to be looking at the children of the element.",
32841             "restrictions": [
32842                 "position",
32843                 "percentage",
32844                 "length"
32845             ]
32846         },
32847         {
32848             "name": "-moz-text-align-last",
32849             "browsers": [
32850                 "FF12"
32851             ],
32852             "values": [
32853                 {
32854                     "name": "auto"
32855                 },
32856                 {
32857                     "name": "center",
32858                     "description": "The inline contents are centered within the line box."
32859                 },
32860                 {
32861                     "name": "justify",
32862                     "description": "The text is justified according to the method specified by the 'text-justify' property."
32863                 },
32864                 {
32865                     "name": "left",
32866                     "description": "The inline contents are aligned to the left edge of the line box. In vertical text, 'left' aligns to the edge of the line box that would be the start edge for left-to-right text."
32867                 },
32868                 {
32869                     "name": "right",
32870                     "description": "The inline contents are aligned to the right edge of the line box. In vertical text, 'right' aligns to the edge of the line box that would be the end edge for left-to-right text."
32871                 }
32872             ],
32873             "relevance": 50,
32874             "description": "Describes how the last line of a block or a line right before a forced line break is aligned when 'text-align' is set to 'justify'.",
32875             "restrictions": [
32876                 "enum"
32877             ]
32878         },
32879         {
32880             "name": "-moz-text-decoration-color",
32881             "browsers": [
32882                 "FF6"
32883             ],
32884             "relevance": 50,
32885             "description": "Specifies the color of text decoration (underlines overlines, and line-throughs) set on the element with text-decoration-line.",
32886             "restrictions": [
32887                 "color"
32888             ]
32889         },
32890         {
32891             "name": "-moz-text-decoration-line",
32892             "browsers": [
32893                 "FF6"
32894             ],
32895             "values": [
32896                 {
32897                     "name": "line-through",
32898                     "description": "Each line of text has a line through the middle."
32899                 },
32900                 {
32901                     "name": "none",
32902                     "description": "Neither produces nor inhibits text decoration."
32903                 },
32904                 {
32905                     "name": "overline",
32906                     "description": "Each line of text has a line above it."
32907                 },
32908                 {
32909                     "name": "underline",
32910                     "description": "Each line of text is underlined."
32911                 }
32912             ],
32913             "relevance": 50,
32914             "description": "Specifies what line decorations, if any, are added to the element.",
32915             "restrictions": [
32916                 "enum"
32917             ]
32918         },
32919         {
32920             "name": "-moz-text-decoration-style",
32921             "browsers": [
32922                 "FF6"
32923             ],
32924             "values": [
32925                 {
32926                     "name": "dashed",
32927                     "description": "Produces a dashed line style."
32928                 },
32929                 {
32930                     "name": "dotted",
32931                     "description": "Produces a dotted line."
32932                 },
32933                 {
32934                     "name": "double",
32935                     "description": "Produces a double line."
32936                 },
32937                 {
32938                     "name": "none",
32939                     "description": "Produces no line."
32940                 },
32941                 {
32942                     "name": "solid",
32943                     "description": "Produces a solid line."
32944                 },
32945                 {
32946                     "name": "wavy",
32947                     "description": "Produces a wavy line."
32948                 }
32949             ],
32950             "relevance": 50,
32951             "description": "Specifies the line style for underline, line-through and overline text decoration.",
32952             "restrictions": [
32953                 "enum"
32954             ]
32955         },
32956         {
32957             "name": "-moz-text-size-adjust",
32958             "browsers": [
32959                 "FF"
32960             ],
32961             "values": [
32962                 {
32963                     "name": "auto",
32964                     "description": "Renderers must use the default size adjustment when displaying on a small device."
32965                 },
32966                 {
32967                     "name": "none",
32968                     "description": "Renderers must not do size adjustment when displaying on a small device."
32969                 }
32970             ],
32971             "relevance": 50,
32972             "description": "Specifies a size adjustment for displaying text content in mobile browsers.",
32973             "restrictions": [
32974                 "enum",
32975                 "percentage"
32976             ]
32977         },
32978         {
32979             "name": "-moz-transform",
32980             "browsers": [
32981                 "FF3.5"
32982             ],
32983             "values": [
32984                 {
32985                     "name": "matrix()",
32986                     "description": "Specifies a 2D transformation in the form of a transformation matrix of six values. matrix(a,b,c,d,e,f) is equivalent to applying the transformation matrix [a b c d e f]"
32987                 },
32988                 {
32989                     "name": "matrix3d()",
32990                     "description": "Specifies a 3D transformation as a 4x4 homogeneous matrix of 16 values in column-major order."
32991                 },
32992                 {
32993                     "name": "none"
32994                 },
32995                 {
32996                     "name": "perspective",
32997                     "description": "Specifies a perspective projection matrix."
32998                 },
32999                 {
33000                     "name": "rotate()",
33001                     "description": "Specifies a 2D rotation by the angle specified in the parameter about the origin of the element, as defined by the transform-origin property."
33002                 },
33003                 {
33004                     "name": "rotate3d()",
33005                     "description": "Specifies a clockwise 3D rotation by the angle specified in last parameter about the [x,y,z] direction vector described by the first 3 parameters."
33006                 },
33007                 {
33008                     "name": "rotateX('angle')",
33009                     "description": "Specifies a clockwise rotation by the given angle about the X axis."
33010                 },
33011                 {
33012                     "name": "rotateY('angle')",
33013                     "description": "Specifies a clockwise rotation by the given angle about the Y axis."
33014                 },
33015                 {
33016                     "name": "rotateZ('angle')",
33017                     "description": "Specifies a clockwise rotation by the given angle about the Z axis."
33018                 },
33019                 {
33020                     "name": "scale()",
33021                     "description": "Specifies a 2D scale operation by the [sx,sy] scaling vector described by the 2 parameters. If the second parameter is not provided, it is takes a value equal to the first."
33022                 },
33023                 {
33024                     "name": "scale3d()",
33025                     "description": "Specifies a 3D scale operation by the [sx,sy,sz] scaling vector described by the 3 parameters."
33026                 },
33027                 {
33028                     "name": "scaleX()",
33029                     "description": "Specifies a scale operation using the [sx,1] scaling vector, where sx is given as the parameter."
33030                 },
33031                 {
33032                     "name": "scaleY()",
33033                     "description": "Specifies a scale operation using the [sy,1] scaling vector, where sy is given as the parameter."
33034                 },
33035                 {
33036                     "name": "scaleZ()",
33037                     "description": "Specifies a scale operation using the [1,1,sz] scaling vector, where sz is given as the parameter."
33038                 },
33039                 {
33040                     "name": "skew()",
33041                     "description": "Specifies a skew transformation along the X and Y axes. The first angle parameter specifies the skew on the X axis. The second angle parameter specifies the skew on the Y axis. If the second parameter is not given then a value of 0 is used for the Y angle (ie: no skew on the Y axis)."
33042                 },
33043                 {
33044                     "name": "skewX()",
33045                     "description": "Specifies a skew transformation along the X axis by the given angle."
33046                 },
33047                 {
33048                     "name": "skewY()",
33049                     "description": "Specifies a skew transformation along the Y axis by the given angle."
33050                 },
33051                 {
33052                     "name": "translate()",
33053                     "description": "Specifies a 2D translation by the vector [tx, ty], where tx is the first translation-value parameter and ty is the optional second translation-value parameter."
33054                 },
33055                 {
33056                     "name": "translate3d()",
33057                     "description": "Specifies a 3D translation by the vector [tx,ty,tz], with tx, ty and tz being the first, second and third translation-value parameters respectively."
33058                 },
33059                 {
33060                     "name": "translateX()",
33061                     "description": "Specifies a translation by the given amount in the X direction."
33062                 },
33063                 {
33064                     "name": "translateY()",
33065                     "description": "Specifies a translation by the given amount in the Y direction."
33066                 },
33067                 {
33068                     "name": "translateZ()",
33069                     "description": "Specifies a translation by the given amount in the Z direction. Note that percentage values are not allowed in the translateZ translation-value, and if present are evaluated as 0."
33070                 }
33071             ],
33072             "relevance": 50,
33073             "description": "A two-dimensional transformation is applied to an element through the 'transform' property. This property contains a list of transform functions similar to those allowed by SVG.",
33074             "restrictions": [
33075                 "enum"
33076             ]
33077         },
33078         {
33079             "name": "-moz-transform-origin",
33080             "browsers": [
33081                 "FF3.5"
33082             ],
33083             "relevance": 50,
33084             "description": "Establishes the origin of transformation for an element.",
33085             "restrictions": [
33086                 "position",
33087                 "length",
33088                 "percentage"
33089             ]
33090         },
33091         {
33092             "name": "-moz-transition",
33093             "browsers": [
33094                 "FF4"
33095             ],
33096             "values": [
33097                 {
33098                     "name": "all",
33099                     "description": "Every property that is able to undergo a transition will do so."
33100                 },
33101                 {
33102                     "name": "none",
33103                     "description": "No property will transition."
33104                 }
33105             ],
33106             "relevance": 50,
33107             "description": "Shorthand property combines four of the transition properties into a single property.",
33108             "restrictions": [
33109                 "time",
33110                 "property",
33111                 "timing-function",
33112                 "enum"
33113             ]
33114         },
33115         {
33116             "name": "-moz-transition-delay",
33117             "browsers": [
33118                 "FF4"
33119             ],
33120             "relevance": 50,
33121             "description": "Defines when the transition will start. It allows a transition to begin execution some period of time from when it is applied.",
33122             "restrictions": [
33123                 "time"
33124             ]
33125         },
33126         {
33127             "name": "-moz-transition-duration",
33128             "browsers": [
33129                 "FF4"
33130             ],
33131             "relevance": 50,
33132             "description": "Specifies how long the transition from the old value to the new value should take.",
33133             "restrictions": [
33134                 "time"
33135             ]
33136         },
33137         {
33138             "name": "-moz-transition-property",
33139             "browsers": [
33140                 "FF4"
33141             ],
33142             "values": [
33143                 {
33144                     "name": "all",
33145                     "description": "Every property that is able to undergo a transition will do so."
33146                 },
33147                 {
33148                     "name": "none",
33149                     "description": "No property will transition."
33150                 }
33151             ],
33152             "relevance": 50,
33153             "description": "Specifies the name of the CSS property to which the transition is applied.",
33154             "restrictions": [
33155                 "property"
33156             ]
33157         },
33158         {
33159             "name": "-moz-transition-timing-function",
33160             "browsers": [
33161                 "FF4"
33162             ],
33163             "relevance": 50,
33164             "description": "Describes how the intermediate values used during a transition will be calculated.",
33165             "restrictions": [
33166                 "timing-function"
33167             ]
33168         },
33169         {
33170             "name": "-moz-user-focus",
33171             "browsers": [
33172                 "FF1"
33173             ],
33174             "values": [
33175                 {
33176                     "name": "ignore"
33177                 },
33178                 {
33179                     "name": "normal"
33180                 }
33181             ],
33182             "status": "nonstandard",
33183             "syntax": "ignore | normal | select-after | select-before | select-menu | select-same | select-all | none",
33184             "relevance": 0,
33185             "references": [
33186                 {
33187                     "name": "MDN Reference",
33188                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-user-focus"
33189                 }
33190             ],
33191             "description": "Used to indicate whether the element can have focus."
33192         },
33193         {
33194             "name": "-moz-user-select",
33195             "browsers": [
33196                 "FF1.5"
33197             ],
33198             "values": [
33199                 {
33200                     "name": "all"
33201                 },
33202                 {
33203                     "name": "element"
33204                 },
33205                 {
33206                     "name": "elements"
33207                 },
33208                 {
33209                     "name": "-moz-all"
33210                 },
33211                 {
33212                     "name": "-moz-none"
33213                 },
33214                 {
33215                     "name": "none"
33216                 },
33217                 {
33218                     "name": "text"
33219                 },
33220                 {
33221                     "name": "toggle"
33222                 }
33223             ],
33224             "relevance": 50,
33225             "description": "Controls the appearance of selection.",
33226             "restrictions": [
33227                 "enum"
33228             ]
33229         },
33230         {
33231             "name": "-ms-accelerator",
33232             "browsers": [
33233                 "E",
33234                 "IE10"
33235             ],
33236             "values": [
33237                 {
33238                     "name": "false",
33239                     "description": "The element does not contain an accelerator key sequence."
33240                 },
33241                 {
33242                     "name": "true",
33243                     "description": "The element contains an accelerator key sequence."
33244                 }
33245             ],
33246             "status": "nonstandard",
33247             "syntax": "false | true",
33248             "relevance": 0,
33249             "description": "IE only. Has the ability to turn off its system underlines for accelerator keys until the ALT key is pressed",
33250             "restrictions": [
33251                 "enum"
33252             ]
33253         },
33254         {
33255             "name": "-ms-behavior",
33256             "browsers": [
33257                 "IE8"
33258             ],
33259             "relevance": 50,
33260             "description": "IE only. Used to extend behaviors of the browser",
33261             "restrictions": [
33262                 "url"
33263             ]
33264         },
33265         {
33266             "name": "-ms-block-progression",
33267             "browsers": [
33268                 "IE8"
33269             ],
33270             "values": [
33271                 {
33272                     "name": "bt",
33273                     "description": "Bottom-to-top block flow. Layout is horizontal."
33274                 },
33275                 {
33276                     "name": "lr",
33277                     "description": "Left-to-right direction. The flow orientation is vertical."
33278                 },
33279                 {
33280                     "name": "rl",
33281                     "description": "Right-to-left direction. The flow orientation is vertical."
33282                 },
33283                 {
33284                     "name": "tb",
33285                     "description": "Top-to-bottom direction. The flow orientation is horizontal."
33286                 }
33287             ],
33288             "status": "nonstandard",
33289             "syntax": "tb | rl | bt | lr",
33290             "relevance": 0,
33291             "description": "Sets the block-progression value and the flow orientation",
33292             "restrictions": [
33293                 "enum"
33294             ]
33295         },
33296         {
33297             "name": "-ms-content-zoom-chaining",
33298             "browsers": [
33299                 "E",
33300                 "IE10"
33301             ],
33302             "values": [
33303                 {
33304                     "name": "chained",
33305                     "description": "The nearest zoomable parent element begins zooming when the user hits a zoom limit during a manipulation. No bounce effect is shown."
33306                 },
33307                 {
33308                     "name": "none",
33309                     "description": "A bounce effect is shown when the user hits a zoom limit during a manipulation."
33310                 }
33311             ],
33312             "status": "nonstandard",
33313             "syntax": "none | chained",
33314             "relevance": 0,
33315             "description": "Specifies the zoom behavior that occurs when a user hits the zoom limit during a manipulation."
33316         },
33317         {
33318             "name": "-ms-content-zooming",
33319             "browsers": [
33320                 "E",
33321                 "IE10"
33322             ],
33323             "values": [
33324                 {
33325                     "name": "none",
33326                     "description": "The element is not zoomable."
33327                 },
33328                 {
33329                     "name": "zoom",
33330                     "description": "The element is zoomable."
33331                 }
33332             ],
33333             "status": "nonstandard",
33334             "syntax": "none | zoom",
33335             "relevance": 0,
33336             "description": "Specifies whether zooming is enabled.",
33337             "restrictions": [
33338                 "enum"
33339             ]
33340         },
33341         {
33342             "name": "-ms-content-zoom-limit",
33343             "browsers": [
33344                 "E",
33345                 "IE10"
33346             ],
33347             "status": "nonstandard",
33348             "syntax": "<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>",
33349             "relevance": 0,
33350             "description": "Shorthand property for the -ms-content-zoom-limit-min and -ms-content-zoom-limit-max properties.",
33351             "restrictions": [
33352                 "percentage"
33353             ]
33354         },
33355         {
33356             "name": "-ms-content-zoom-limit-max",
33357             "browsers": [
33358                 "E",
33359                 "IE10"
33360             ],
33361             "status": "nonstandard",
33362             "syntax": "<percentage>",
33363             "relevance": 0,
33364             "description": "Specifies the maximum zoom factor.",
33365             "restrictions": [
33366                 "percentage"
33367             ]
33368         },
33369         {
33370             "name": "-ms-content-zoom-limit-min",
33371             "browsers": [
33372                 "E",
33373                 "IE10"
33374             ],
33375             "status": "nonstandard",
33376             "syntax": "<percentage>",
33377             "relevance": 0,
33378             "description": "Specifies the minimum zoom factor.",
33379             "restrictions": [
33380                 "percentage"
33381             ]
33382         },
33383         {
33384             "name": "-ms-content-zoom-snap",
33385             "browsers": [
33386                 "E",
33387                 "IE10"
33388             ],
33389             "values": [
33390                 {
33391                     "name": "mandatory",
33392                     "description": "Indicates that the motion of the content after the contact is picked up is always adjusted so that it lands on a snap-point."
33393                 },
33394                 {
33395                     "name": "none",
33396                     "description": "Indicates that zooming is unaffected by any defined snap-points."
33397                 },
33398                 {
33399                     "name": "proximity",
33400                     "description": "Indicates that the motion of the content after the contact is picked up may be adjusted if the content would normally stop \"close enough\" to a snap-point."
33401                 },
33402                 {
33403                     "name": "snapInterval(100%, 100%)",
33404                     "description": "Specifies where the snap-points will be placed."
33405                 },
33406                 {
33407                     "name": "snapList()",
33408                     "description": "Specifies the position of individual snap-points as a comma-separated list of zoom factors."
33409                 }
33410             ],
33411             "status": "nonstandard",
33412             "syntax": "<'-ms-content-zoom-snap-type'> || <'-ms-content-zoom-snap-points'>",
33413             "relevance": 0,
33414             "description": "Shorthand property for the -ms-content-zoom-snap-type and -ms-content-zoom-snap-points properties."
33415         },
33416         {
33417             "name": "-ms-content-zoom-snap-points",
33418             "browsers": [
33419                 "E",
33420                 "IE10"
33421             ],
33422             "values": [
33423                 {
33424                     "name": "snapInterval(100%, 100%)",
33425                     "description": "Specifies where the snap-points will be placed."
33426                 },
33427                 {
33428                     "name": "snapList()",
33429                     "description": "Specifies the position of individual snap-points as a comma-separated list of zoom factors."
33430                 }
33431             ],
33432             "status": "nonstandard",
33433             "syntax": "snapInterval( <percentage>, <percentage> ) | snapList( <percentage># )",
33434             "relevance": 0,
33435             "description": "Defines where zoom snap-points are located."
33436         },
33437         {
33438             "name": "-ms-content-zoom-snap-type",
33439             "browsers": [
33440                 "E",
33441                 "IE10"
33442             ],
33443             "values": [
33444                 {
33445                     "name": "mandatory",
33446                     "description": "Indicates that the motion of the content after the contact is picked up is always adjusted so that it lands on a snap-point."
33447                 },
33448                 {
33449                     "name": "none",
33450                     "description": "Indicates that zooming is unaffected by any defined snap-points."
33451                 },
33452                 {
33453                     "name": "proximity",
33454                     "description": "Indicates that the motion of the content after the contact is picked up may be adjusted if the content would normally stop \"close enough\" to a snap-point."
33455                 }
33456             ],
33457             "status": "nonstandard",
33458             "syntax": "none | proximity | mandatory",
33459             "relevance": 0,
33460             "description": "Specifies how zooming is affected by defined snap-points.",
33461             "restrictions": [
33462                 "enum"
33463             ]
33464         },
33465         {
33466             "name": "-ms-filter",
33467             "browsers": [
33468                 "IE8-9"
33469             ],
33470             "status": "nonstandard",
33471             "syntax": "<string>",
33472             "relevance": 0,
33473             "description": "IE only. Used to produce visual effects.",
33474             "restrictions": [
33475                 "string"
33476             ]
33477         },
33478         {
33479             "name": "-ms-flex",
33480             "browsers": [
33481                 "IE10"
33482             ],
33483             "values": [
33484                 {
33485                     "name": "auto",
33486                     "description": "Retrieves the value of the main size property as the used 'flex-basis'."
33487                 },
33488                 {
33489                     "name": "none",
33490                     "description": "Expands to '0 0 auto'."
33491                 }
33492             ],
33493             "relevance": 50,
33494             "description": "specifies the parameters of a flexible length: the positive and negative flexibility, and the preferred size.",
33495             "restrictions": [
33496                 "length",
33497                 "number",
33498                 "percentage"
33499             ]
33500         },
33501         {
33502             "name": "-ms-flex-align",
33503             "browsers": [
33504                 "IE10"
33505             ],
33506             "values": [
33507                 {
33508                     "name": "baseline",
33509                     "description": "If the flex item’s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment."
33510                 },
33511                 {
33512                     "name": "center",
33513                     "description": "The flex item’s margin box is centered in the cross axis within the line."
33514                 },
33515                 {
33516                     "name": "end",
33517                     "description": "The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line."
33518                 },
33519                 {
33520                     "name": "start",
33521                     "description": "The cross-start margin edge of the flexbox item is placed flush with the cross-start edge of the line."
33522                 },
33523                 {
33524                     "name": "stretch",
33525                     "description": "If the cross size property of the flexbox item is anything other than 'auto', this value is identical to 'start'."
33526                 }
33527             ],
33528             "relevance": 50,
33529             "description": "Aligns flex items along the cross axis of the current line of the flex container.",
33530             "restrictions": [
33531                 "enum"
33532             ]
33533         },
33534         {
33535             "name": "-ms-flex-direction",
33536             "browsers": [
33537                 "IE10"
33538             ],
33539             "values": [
33540                 {
33541                     "name": "column",
33542                     "description": "The flex container’s main axis has the same orientation as the block axis of the current writing mode."
33543                 },
33544                 {
33545                     "name": "column-reverse",
33546                     "description": "Same as 'column', except the main-start and main-end directions are swapped."
33547                 },
33548                 {
33549                     "name": "row",
33550                     "description": "The flex container’s main axis has the same orientation as the inline axis of the current writing mode."
33551                 },
33552                 {
33553                     "name": "row-reverse",
33554                     "description": "Same as 'row', except the main-start and main-end directions are swapped."
33555                 }
33556             ],
33557             "relevance": 50,
33558             "description": "Specifies how flex items are placed in the flex container, by setting the direction of the flex container’s main axis.",
33559             "restrictions": [
33560                 "enum"
33561             ]
33562         },
33563         {
33564             "name": "-ms-flex-flow",
33565             "browsers": [
33566                 "IE10"
33567             ],
33568             "values": [
33569                 {
33570                     "name": "column",
33571                     "description": "The flex container’s main axis has the same orientation as the block axis of the current writing mode."
33572                 },
33573                 {
33574                     "name": "column-reverse",
33575                     "description": "Same as 'column', except the main-start and main-end directions are swapped."
33576                 },
33577                 {
33578                     "name": "nowrap",
33579                     "description": "The flex container is single-line."
33580                 },
33581                 {
33582                     "name": "row",
33583                     "description": "The flex container’s main axis has the same orientation as the inline axis of the current writing mode."
33584                 },
33585                 {
33586                     "name": "wrap",
33587                     "description": "The flexbox is multi-line."
33588                 },
33589                 {
33590                     "name": "wrap-reverse",
33591                     "description": "Same as 'wrap', except the cross-start and cross-end directions are swapped."
33592                 }
33593             ],
33594             "relevance": 50,
33595             "description": "Specifies how flexbox items are placed in the flexbox.",
33596             "restrictions": [
33597                 "enum"
33598             ]
33599         },
33600         {
33601             "name": "-ms-flex-item-align",
33602             "browsers": [
33603                 "IE10"
33604             ],
33605             "values": [
33606                 {
33607                     "name": "auto",
33608                     "description": "Computes to the value of 'align-items' on the element’s parent, or 'stretch' if the element has no parent. On absolutely positioned elements, it computes to itself."
33609                 },
33610                 {
33611                     "name": "baseline",
33612                     "description": "If the flex item’s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment."
33613                 },
33614                 {
33615                     "name": "center",
33616                     "description": "The flex item’s margin box is centered in the cross axis within the line."
33617                 },
33618                 {
33619                     "name": "end",
33620                     "description": "The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line."
33621                 },
33622                 {
33623                     "name": "start",
33624                     "description": "The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line."
33625                 },
33626                 {
33627                     "name": "stretch",
33628                     "description": "If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."
33629                 }
33630             ],
33631             "relevance": 50,
33632             "description": "Allows the default alignment along the cross axis to be overridden for individual flex items.",
33633             "restrictions": [
33634                 "enum"
33635             ]
33636         },
33637         {
33638             "name": "-ms-flex-line-pack",
33639             "browsers": [
33640                 "IE10"
33641             ],
33642             "values": [
33643                 {
33644                     "name": "center",
33645                     "description": "Lines are packed toward the center of the flex container."
33646                 },
33647                 {
33648                     "name": "distribute",
33649                     "description": "Lines are evenly distributed in the flex container, with half-size spaces on either end."
33650                 },
33651                 {
33652                     "name": "end",
33653                     "description": "Lines are packed toward the end of the flex container."
33654                 },
33655                 {
33656                     "name": "justify",
33657                     "description": "Lines are evenly distributed in the flex container."
33658                 },
33659                 {
33660                     "name": "start",
33661                     "description": "Lines are packed toward the start of the flex container."
33662                 },
33663                 {
33664                     "name": "stretch",
33665                     "description": "Lines stretch to take up the remaining space."
33666                 }
33667             ],
33668             "relevance": 50,
33669             "description": "Aligns a flex container’s lines within the flex container when there is extra space in the cross-axis, similar to how 'justify-content' aligns individual items within the main-axis.",
33670             "restrictions": [
33671                 "enum"
33672             ]
33673         },
33674         {
33675             "name": "-ms-flex-order",
33676             "browsers": [
33677                 "IE10"
33678             ],
33679             "relevance": 50,
33680             "description": "Controls the order in which children of a flex container appear within the flex container, by assigning them to ordinal groups.",
33681             "restrictions": [
33682                 "integer"
33683             ]
33684         },
33685         {
33686             "name": "-ms-flex-pack",
33687             "browsers": [
33688                 "IE10"
33689             ],
33690             "values": [
33691                 {
33692                     "name": "center",
33693                     "description": "Flex items are packed toward the center of the line."
33694                 },
33695                 {
33696                     "name": "distribute",
33697                     "description": "Flex items are evenly distributed in the line, with half-size spaces on either end."
33698                 },
33699                 {
33700                     "name": "end",
33701                     "description": "Flex items are packed toward the end of the line."
33702                 },
33703                 {
33704                     "name": "justify",
33705                     "description": "Flex items are evenly distributed in the line."
33706                 },
33707                 {
33708                     "name": "start",
33709                     "description": "Flex items are packed toward the start of the line."
33710                 }
33711             ],
33712             "relevance": 50,
33713             "description": "Aligns flex items along the main axis of the current line of the flex container.",
33714             "restrictions": [
33715                 "enum"
33716             ]
33717         },
33718         {
33719             "name": "-ms-flex-wrap",
33720             "browsers": [
33721                 "IE10"
33722             ],
33723             "values": [
33724                 {
33725                     "name": "nowrap",
33726                     "description": "The flex container is single-line."
33727                 },
33728                 {
33729                     "name": "wrap",
33730                     "description": "The flexbox is multi-line."
33731                 },
33732                 {
33733                     "name": "wrap-reverse",
33734                     "description": "Same as 'wrap', except the cross-start and cross-end directions are swapped."
33735                 }
33736             ],
33737             "relevance": 50,
33738             "description": "Controls whether the flex container is single-line or multi-line, and the direction of the cross-axis, which determines the direction new lines are stacked in.",
33739             "restrictions": [
33740                 "enum"
33741             ]
33742         },
33743         {
33744             "name": "-ms-flow-from",
33745             "browsers": [
33746                 "E",
33747                 "IE10"
33748             ],
33749             "values": [
33750                 {
33751                     "name": "none",
33752                     "description": "The block container is not a CSS Region."
33753                 }
33754             ],
33755             "status": "nonstandard",
33756             "syntax": "[ none | <custom-ident> ]#",
33757             "relevance": 0,
33758             "description": "Makes a block container a region and associates it with a named flow.",
33759             "restrictions": [
33760                 "identifier"
33761             ]
33762         },
33763         {
33764             "name": "-ms-flow-into",
33765             "browsers": [
33766                 "E",
33767                 "IE10"
33768             ],
33769             "values": [
33770                 {
33771                     "name": "none",
33772                     "description": "The element is not moved to a named flow and normal CSS processing takes place."
33773                 }
33774             ],
33775             "status": "nonstandard",
33776             "syntax": "[ none | <custom-ident> ]#",
33777             "relevance": 0,
33778             "description": "Places an element or its contents into a named flow.",
33779             "restrictions": [
33780                 "identifier"
33781             ]
33782         },
33783         {
33784             "name": "-ms-grid-column",
33785             "browsers": [
33786                 "E12",
33787                 "IE10"
33788             ],
33789             "values": [
33790                 {
33791                     "name": "auto"
33792                 },
33793                 {
33794                     "name": "end"
33795                 },
33796                 {
33797                     "name": "start"
33798                 }
33799             ],
33800             "relevance": 50,
33801             "description": "Used to place grid items and explicitly defined grid cells in the Grid.",
33802             "restrictions": [
33803                 "integer",
33804                 "string",
33805                 "enum"
33806             ]
33807         },
33808         {
33809             "name": "-ms-grid-column-align",
33810             "browsers": [
33811                 "E12",
33812                 "IE10"
33813             ],
33814             "values": [
33815                 {
33816                     "name": "center",
33817                     "description": "Places the center of the Grid Item's margin box at the center of the Grid Item's column."
33818                 },
33819                 {
33820                     "name": "end",
33821                     "description": "Aligns the end edge of the Grid Item's margin box to the end edge of the Grid Item's column."
33822                 },
33823                 {
33824                     "name": "start",
33825                     "description": "Aligns the starting edge of the Grid Item's margin box to the starting edge of the Grid Item's column."
33826                 },
33827                 {
33828                     "name": "stretch",
33829                     "description": "Ensures that the Grid Item's margin box is equal to the size of the Grid Item's column."
33830                 }
33831             ],
33832             "relevance": 50,
33833             "description": "Aligns the columns in a grid.",
33834             "restrictions": [
33835                 "enum"
33836             ]
33837         },
33838         {
33839             "name": "-ms-grid-columns",
33840             "browsers": [
33841                 "E12",
33842                 "IE10"
33843             ],
33844             "relevance": 50,
33845             "description": "Lays out the columns of the grid."
33846         },
33847         {
33848             "name": "-ms-grid-column-span",
33849             "browsers": [
33850                 "E12",
33851                 "IE10"
33852             ],
33853             "relevance": 50,
33854             "description": "Specifies the number of columns to span.",
33855             "restrictions": [
33856                 "integer"
33857             ]
33858         },
33859         {
33860             "name": "-ms-grid-layer",
33861             "browsers": [
33862                 "E",
33863                 "IE10"
33864             ],
33865             "relevance": 50,
33866             "description": "Grid-layer is similar in concept to z-index, but avoids overloading the meaning of the z-index property, which is applicable only to positioned elements.",
33867             "restrictions": [
33868                 "integer"
33869             ]
33870         },
33871         {
33872             "name": "-ms-grid-row",
33873             "browsers": [
33874                 "E12",
33875                 "IE10"
33876             ],
33877             "values": [
33878                 {
33879                     "name": "auto"
33880                 },
33881                 {
33882                     "name": "end"
33883                 },
33884                 {
33885                     "name": "start"
33886                 }
33887             ],
33888             "relevance": 50,
33889             "description": "grid-row is used to place grid items and explicitly defined grid cells in the Grid.",
33890             "restrictions": [
33891                 "integer",
33892                 "string",
33893                 "enum"
33894             ]
33895         },
33896         {
33897             "name": "-ms-grid-row-align",
33898             "browsers": [
33899                 "E12",
33900                 "IE10"
33901             ],
33902             "values": [
33903                 {
33904                     "name": "center",
33905                     "description": "Places the center of the Grid Item's margin box at the center of the Grid Item's row."
33906                 },
33907                 {
33908                     "name": "end",
33909                     "description": "Aligns the end edge of the Grid Item's margin box to the end edge of the Grid Item's row."
33910                 },
33911                 {
33912                     "name": "start",
33913                     "description": "Aligns the starting edge of the Grid Item's margin box to the starting edge of the Grid Item's row."
33914                 },
33915                 {
33916                     "name": "stretch",
33917                     "description": "Ensures that the Grid Item's margin box is equal to the size of the Grid Item's row."
33918                 }
33919             ],
33920             "relevance": 50,
33921             "description": "Aligns the rows in a grid.",
33922             "restrictions": [
33923                 "enum"
33924             ]
33925         },
33926         {
33927             "name": "-ms-grid-rows",
33928             "browsers": [
33929                 "E12",
33930                 "IE10"
33931             ],
33932             "relevance": 50,
33933             "description": "Lays out the columns of the grid."
33934         },
33935         {
33936             "name": "-ms-grid-row-span",
33937             "browsers": [
33938                 "E12",
33939                 "IE10"
33940             ],
33941             "relevance": 50,
33942             "description": "Specifies the number of rows to span.",
33943             "restrictions": [
33944                 "integer"
33945             ]
33946         },
33947         {
33948             "name": "-ms-high-contrast-adjust",
33949             "browsers": [
33950                 "E",
33951                 "IE10"
33952             ],
33953             "values": [
33954                 {
33955                     "name": "auto",
33956                     "description": "Properties will be adjusted as applicable."
33957                 },
33958                 {
33959                     "name": "none",
33960                     "description": "No adjustments will be applied."
33961                 }
33962             ],
33963             "status": "nonstandard",
33964             "syntax": "auto | none",
33965             "relevance": 0,
33966             "description": "Specifies if properties should be adjusted in high contrast mode.",
33967             "restrictions": [
33968                 "enum"
33969             ]
33970         },
33971         {
33972             "name": "-ms-hyphenate-limit-chars",
33973             "browsers": [
33974                 "E",
33975                 "IE10"
33976             ],
33977             "values": [
33978                 {
33979                     "name": "auto",
33980                     "description": "The user agent chooses a value that adapts to the current layout."
33981                 }
33982             ],
33983             "status": "nonstandard",
33984             "syntax": "auto | <integer>{1,3}",
33985             "relevance": 0,
33986             "description": "Specifies the minimum number of characters in a hyphenated word.",
33987             "restrictions": [
33988                 "integer"
33989             ]
33990         },
33991         {
33992             "name": "-ms-hyphenate-limit-lines",
33993             "browsers": [
33994                 "E",
33995                 "IE10"
33996             ],
33997             "values": [
33998                 {
33999                     "name": "no-limit",
34000                     "description": "There is no limit."
34001                 }
34002             ],
34003             "status": "nonstandard",
34004             "syntax": "no-limit | <integer>",
34005             "relevance": 0,
34006             "description": "Indicates the maximum number of successive hyphenated lines in an element.",
34007             "restrictions": [
34008                 "integer"
34009             ]
34010         },
34011         {
34012             "name": "-ms-hyphenate-limit-zone",
34013             "browsers": [
34014                 "E",
34015                 "IE10"
34016             ],
34017             "status": "nonstandard",
34018             "syntax": "<percentage> | <length>",
34019             "relevance": 0,
34020             "description": "Specifies the maximum amount of unfilled space (before justification) that may be left in the line box before hyphenation is triggered to pull part of a word from the next line back up into the current line.",
34021             "restrictions": [
34022                 "percentage",
34023                 "length"
34024             ]
34025         },
34026         {
34027             "name": "-ms-hyphens",
34028             "browsers": [
34029                 "E",
34030                 "IE10"
34031             ],
34032             "values": [
34033                 {
34034                     "name": "auto",
34035                     "description": "Conditional hyphenation characters inside a word, if present, take priority over automatic resources when determining hyphenation points within the word."
34036                 },
34037                 {
34038                     "name": "manual",
34039                     "description": "Words are only broken at line breaks where there are characters inside the word that suggest line break opportunities"
34040                 },
34041                 {
34042                     "name": "none",
34043                     "description": "Words are not broken at line breaks, even if characters inside the word suggest line break points."
34044                 }
34045             ],
34046             "relevance": 50,
34047             "description": "Controls whether hyphenation is allowed to create more break opportunities within a line of text.",
34048             "restrictions": [
34049                 "enum"
34050             ]
34051         },
34052         {
34053             "name": "-ms-ime-mode",
34054             "browsers": [
34055                 "IE10"
34056             ],
34057             "values": [
34058                 {
34059                     "name": "active",
34060                     "description": "The input method editor is initially active; text entry is performed using it unless the user specifically dismisses it."
34061                 },
34062                 {
34063                     "name": "auto",
34064                     "description": "No change is made to the current input method editor state. This is the default."
34065                 },
34066                 {
34067                     "name": "disabled",
34068                     "description": "The input method editor is disabled and may not be activated by the user."
34069                 },
34070                 {
34071                     "name": "inactive",
34072                     "description": "The input method editor is initially inactive, but the user may activate it if they wish."
34073                 },
34074                 {
34075                     "name": "normal",
34076                     "description": "The IME state should be normal; this value can be used in a user style sheet to override the page setting."
34077                 }
34078             ],
34079             "relevance": 50,
34080             "description": "Controls the state of the input method editor for text fields.",
34081             "restrictions": [
34082                 "enum"
34083             ]
34084         },
34085         {
34086             "name": "-ms-interpolation-mode",
34087             "browsers": [
34088                 "IE7"
34089             ],
34090             "values": [
34091                 {
34092                     "name": "bicubic"
34093                 },
34094                 {
34095                     "name": "nearest-neighbor"
34096                 }
34097             ],
34098             "relevance": 50,
34099             "description": "Gets or sets the interpolation (resampling) method used to stretch images.",
34100             "restrictions": [
34101                 "enum"
34102             ]
34103         },
34104         {
34105             "name": "-ms-layout-grid",
34106             "browsers": [
34107                 "E",
34108                 "IE10"
34109             ],
34110             "values": [
34111                 {
34112                     "name": "char",
34113                     "description": "Any of the range of character values available to the -ms-layout-grid-char property."
34114                 },
34115                 {
34116                     "name": "line",
34117                     "description": "Any of the range of line values available to the -ms-layout-grid-line property."
34118                 },
34119                 {
34120                     "name": "mode",
34121                     "description": "Any of the range of mode values available to the -ms-layout-grid-mode property."
34122                 },
34123                 {
34124                     "name": "type",
34125                     "description": "Any of the range of type values available to the -ms-layout-grid-type property."
34126                 }
34127             ],
34128             "relevance": 50,
34129             "description": "Sets or retrieves the composite document grid properties that specify the layout of text characters."
34130         },
34131         {
34132             "name": "-ms-layout-grid-char",
34133             "browsers": [
34134                 "E",
34135                 "IE10"
34136             ],
34137             "values": [
34138                 {
34139                     "name": "auto",
34140                     "description": "Largest character in the font of the element is used to set the character grid."
34141                 },
34142                 {
34143                     "name": "none",
34144                     "description": "Default. No character grid is set."
34145                 }
34146             ],
34147             "relevance": 50,
34148             "description": "Sets or retrieves the size of the character grid used for rendering the text content of an element.",
34149             "restrictions": [
34150                 "enum",
34151                 "length",
34152                 "percentage"
34153             ]
34154         },
34155         {
34156             "name": "-ms-layout-grid-line",
34157             "browsers": [
34158                 "E",
34159                 "IE10"
34160             ],
34161             "values": [
34162                 {
34163                     "name": "auto",
34164                     "description": "Largest character in the font of the element is used to set the character grid."
34165                 },
34166                 {
34167                     "name": "none",
34168                     "description": "Default. No grid line is set."
34169                 }
34170             ],
34171             "relevance": 50,
34172             "description": "Sets or retrieves the gridline value used for rendering the text content of an element.",
34173             "restrictions": [
34174                 "length"
34175             ]
34176         },
34177         {
34178             "name": "-ms-layout-grid-mode",
34179             "browsers": [
34180                 "E",
34181                 "IE10"
34182             ],
34183             "values": [
34184                 {
34185                     "name": "both",
34186                     "description": "Default. Both the char and line grid modes are enabled. This setting is necessary to fully enable the layout grid on an element."
34187                 },
34188                 {
34189                     "name": "char",
34190                     "description": "Only a character grid is used. This is recommended for use with block-level elements, such as a blockquote, where the line grid is intended to be disabled."
34191                 },
34192                 {
34193                     "name": "line",
34194                     "description": "Only a line grid is used. This is recommended for use with inline elements, such as a span, to disable the horizontal grid on runs of text that act as a single entity in the grid layout."
34195                 },
34196                 {
34197                     "name": "none",
34198                     "description": "No grid is used."
34199                 }
34200             ],
34201             "relevance": 50,
34202             "description": "Gets or sets whether the text layout grid uses two dimensions.",
34203             "restrictions": [
34204                 "enum"
34205             ]
34206         },
34207         {
34208             "name": "-ms-layout-grid-type",
34209             "browsers": [
34210                 "E",
34211                 "IE10"
34212             ],
34213             "values": [
34214                 {
34215                     "name": "fixed",
34216                     "description": "Grid used for monospaced layout. All noncursive characters are treated as equal; every character is centered within a single grid space by default."
34217                 },
34218                 {
34219                     "name": "loose",
34220                     "description": "Default. Grid used for Japanese and Korean characters."
34221                 },
34222                 {
34223                     "name": "strict",
34224                     "description": "Grid used for Chinese, as well as Japanese (Genko) and Korean characters. Only the ideographs, kanas, and wide characters are snapped to the grid."
34225                 }
34226             ],
34227             "relevance": 50,
34228             "description": "Sets or retrieves the type of grid used for rendering the text content of an element.",
34229             "restrictions": [
34230                 "enum"
34231             ]
34232         },
34233         {
34234             "name": "-ms-line-break",
34235             "browsers": [
34236                 "E",
34237                 "IE10"
34238             ],
34239             "values": [
34240                 {
34241                     "name": "auto",
34242                     "description": "The UA determines the set of line-breaking restrictions to use for CJK scripts, and it may vary the restrictions based on the length of the line; e.g., use a less restrictive set of line-break rules for short lines."
34243                 },
34244                 {
34245                     "name": "keep-all",
34246                     "description": "Sequences of CJK characters can no longer break on implied break points. This option should only be used where the presence of word separator characters still creates line-breaking opportunities, as in Korean."
34247                 },
34248                 {
34249                     "name": "newspaper",
34250                     "description": "Breaks CJK scripts using the least restrictive set of line-breaking rules. Typically used for short lines, such as in newspapers."
34251                 },
34252                 {
34253                     "name": "normal",
34254                     "description": "Breaks CJK scripts using a normal set of line-breaking rules."
34255                 },
34256                 {
34257                     "name": "strict",
34258                     "description": "Breaks CJK scripts using a more restrictive set of line-breaking rules than 'normal'."
34259                 }
34260             ],
34261             "relevance": 50,
34262             "description": "Specifies what set of line breaking restrictions are in effect within the element.",
34263             "restrictions": [
34264                 "enum"
34265             ]
34266         },
34267         {
34268             "name": "-ms-overflow-style",
34269             "browsers": [
34270                 "E",
34271                 "IE10"
34272             ],
34273             "values": [
34274                 {
34275                     "name": "auto",
34276                     "description": "No preference, UA should use the first scrolling method in the list that it supports."
34277                 },
34278                 {
34279                     "name": "-ms-autohiding-scrollbar",
34280                     "description": "Indicates the element displays auto-hiding scrollbars during mouse interactions and panning indicators during touch and keyboard interactions."
34281                 },
34282                 {
34283                     "name": "none",
34284                     "description": "Indicates the element does not display scrollbars or panning indicators, even when its content overflows."
34285                 },
34286                 {
34287                     "name": "scrollbar",
34288                     "description": "Scrollbars are typically narrow strips inserted on one or two edges of an element and which often have arrows to click on and a \"thumb\" to drag up and down (or left and right) to move the contents of the element."
34289                 }
34290             ],
34291             "status": "nonstandard",
34292             "syntax": "auto | none | scrollbar | -ms-autohiding-scrollbar",
34293             "relevance": 0,
34294             "description": "Specify whether content is clipped when it overflows the element's content area.",
34295             "restrictions": [
34296                 "enum"
34297             ]
34298         },
34299         {
34300             "name": "-ms-perspective",
34301             "browsers": [
34302                 "IE10"
34303             ],
34304             "values": [
34305                 {
34306                     "name": "none",
34307                     "description": "No perspective transform is applied."
34308                 }
34309             ],
34310             "relevance": 50,
34311             "description": "Applies the same transform as the perspective(<number>) transform function, except that it applies only to the positioned or transformed children of the element, not to the transform on the element itself.",
34312             "restrictions": [
34313                 "length"
34314             ]
34315         },
34316         {
34317             "name": "-ms-perspective-origin",
34318             "browsers": [
34319                 "IE10"
34320             ],
34321             "relevance": 50,
34322             "description": "Establishes the origin for the perspective property. It effectively sets the X and Y position at which the viewer appears to be looking at the children of the element.",
34323             "restrictions": [
34324                 "position",
34325                 "percentage",
34326                 "length"
34327             ]
34328         },
34329         {
34330             "name": "-ms-perspective-origin-x",
34331             "browsers": [
34332                 "IE10"
34333             ],
34334             "relevance": 50,
34335             "description": "Establishes the origin for the perspective property. It effectively sets the X  position at which the viewer appears to be looking at the children of the element.",
34336             "restrictions": [
34337                 "position",
34338                 "percentage",
34339                 "length"
34340             ]
34341         },
34342         {
34343             "name": "-ms-perspective-origin-y",
34344             "browsers": [
34345                 "IE10"
34346             ],
34347             "relevance": 50,
34348             "description": "Establishes the origin for the perspective property. It effectively sets the Y position at which the viewer appears to be looking at the children of the element.",
34349             "restrictions": [
34350                 "position",
34351                 "percentage",
34352                 "length"
34353             ]
34354         },
34355         {
34356             "name": "-ms-progress-appearance",
34357             "browsers": [
34358                 "IE10"
34359             ],
34360             "values": [
34361                 {
34362                     "name": "bar"
34363                 },
34364                 {
34365                     "name": "ring"
34366                 }
34367             ],
34368             "relevance": 50,
34369             "description": "Gets or sets a value that specifies whether a progress control displays as a bar or a ring.",
34370             "restrictions": [
34371                 "enum"
34372             ]
34373         },
34374         {
34375             "name": "-ms-scrollbar-3dlight-color",
34376             "browsers": [
34377                 "IE8"
34378             ],
34379             "status": "nonstandard",
34380             "syntax": "<color>",
34381             "relevance": 0,
34382             "description": "Determines the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.",
34383             "restrictions": [
34384                 "color"
34385             ]
34386         },
34387         {
34388             "name": "-ms-scrollbar-arrow-color",
34389             "browsers": [
34390                 "IE8"
34391             ],
34392             "status": "nonstandard",
34393             "syntax": "<color>",
34394             "relevance": 0,
34395             "description": "Determines the color of the arrow elements of a scroll arrow.",
34396             "restrictions": [
34397                 "color"
34398             ]
34399         },
34400         {
34401             "name": "-ms-scrollbar-base-color",
34402             "browsers": [
34403                 "IE8"
34404             ],
34405             "status": "nonstandard",
34406             "syntax": "<color>",
34407             "relevance": 0,
34408             "description": "Determines the color of the main elements of a scroll bar, which include the scroll box, track, and scroll arrows.",
34409             "restrictions": [
34410                 "color"
34411             ]
34412         },
34413         {
34414             "name": "-ms-scrollbar-darkshadow-color",
34415             "browsers": [
34416                 "IE8"
34417             ],
34418             "status": "nonstandard",
34419             "syntax": "<color>",
34420             "relevance": 0,
34421             "description": "Determines the color of the gutter of a scroll bar.",
34422             "restrictions": [
34423                 "color"
34424             ]
34425         },
34426         {
34427             "name": "-ms-scrollbar-face-color",
34428             "browsers": [
34429                 "IE8"
34430             ],
34431             "status": "nonstandard",
34432             "syntax": "<color>",
34433             "relevance": 0,
34434             "description": "Determines the color of the scroll box and scroll arrows of a scroll bar.",
34435             "restrictions": [
34436                 "color"
34437             ]
34438         },
34439         {
34440             "name": "-ms-scrollbar-highlight-color",
34441             "browsers": [
34442                 "IE8"
34443             ],
34444             "status": "nonstandard",
34445             "syntax": "<color>",
34446             "relevance": 0,
34447             "description": "Determines the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.",
34448             "restrictions": [
34449                 "color"
34450             ]
34451         },
34452         {
34453             "name": "-ms-scrollbar-shadow-color",
34454             "browsers": [
34455                 "IE8"
34456             ],
34457             "status": "nonstandard",
34458             "syntax": "<color>",
34459             "relevance": 0,
34460             "description": "Determines the color of the bottom and right edges of the scroll box and scroll arrows of a scroll bar.",
34461             "restrictions": [
34462                 "color"
34463             ]
34464         },
34465         {
34466             "name": "-ms-scrollbar-track-color",
34467             "browsers": [
34468                 "IE5"
34469             ],
34470             "status": "nonstandard",
34471             "syntax": "<color>",
34472             "relevance": 0,
34473             "references": [
34474                 {
34475                     "name": "MDN Reference",
34476                     "url": "https://developer.mozilla.org/docs/Web/CSS/-ms-scrollbar-track-color"
34477                 }
34478             ],
34479             "description": "Determines the color of the track element of a scroll bar.",
34480             "restrictions": [
34481                 "color"
34482             ]
34483         },
34484         {
34485             "name": "-ms-scroll-chaining",
34486             "browsers": [
34487                 "E",
34488                 "IE10"
34489             ],
34490             "values": [
34491                 {
34492                     "name": "chained"
34493                 },
34494                 {
34495                     "name": "none"
34496                 }
34497             ],
34498             "status": "nonstandard",
34499             "syntax": "chained | none",
34500             "relevance": 0,
34501             "description": "Gets or sets a value that indicates the scrolling behavior that occurs when a user hits the content boundary during a manipulation.",
34502             "restrictions": [
34503                 "enum",
34504                 "length"
34505             ]
34506         },
34507         {
34508             "name": "-ms-scroll-limit",
34509             "browsers": [
34510                 "E",
34511                 "IE10"
34512             ],
34513             "values": [
34514                 {
34515                     "name": "auto"
34516                 }
34517             ],
34518             "status": "nonstandard",
34519             "syntax": "<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>",
34520             "relevance": 0,
34521             "description": "Gets or sets a shorthand value that sets values for the -ms-scroll-limit-x-min, -ms-scroll-limit-y-min, -ms-scroll-limit-x-max, and -ms-scroll-limit-y-max properties.",
34522             "restrictions": [
34523                 "length"
34524             ]
34525         },
34526         {
34527             "name": "-ms-scroll-limit-x-max",
34528             "browsers": [
34529                 "E",
34530                 "IE10"
34531             ],
34532             "values": [
34533                 {
34534                     "name": "auto"
34535                 }
34536             ],
34537             "status": "nonstandard",
34538             "syntax": "auto | <length>",
34539             "relevance": 0,
34540             "description": "Gets or sets a value that specifies the maximum value for the scrollLeft property.",
34541             "restrictions": [
34542                 "length"
34543             ]
34544         },
34545         {
34546             "name": "-ms-scroll-limit-x-min",
34547             "browsers": [
34548                 "E",
34549                 "IE10"
34550             ],
34551             "status": "nonstandard",
34552             "syntax": "<length>",
34553             "relevance": 0,
34554             "description": "Gets or sets a value that specifies the minimum value for the scrollLeft property.",
34555             "restrictions": [
34556                 "length"
34557             ]
34558         },
34559         {
34560             "name": "-ms-scroll-limit-y-max",
34561             "browsers": [
34562                 "E",
34563                 "IE10"
34564             ],
34565             "values": [
34566                 {
34567                     "name": "auto"
34568                 }
34569             ],
34570             "status": "nonstandard",
34571             "syntax": "auto | <length>",
34572             "relevance": 0,
34573             "description": "Gets or sets a value that specifies the maximum value for the scrollTop property.",
34574             "restrictions": [
34575                 "length"
34576             ]
34577         },
34578         {
34579             "name": "-ms-scroll-limit-y-min",
34580             "browsers": [
34581                 "E",
34582                 "IE10"
34583             ],
34584             "status": "nonstandard",
34585             "syntax": "<length>",
34586             "relevance": 0,
34587             "description": "Gets or sets a value that specifies the minimum value for the scrollTop property.",
34588             "restrictions": [
34589                 "length"
34590             ]
34591         },
34592         {
34593             "name": "-ms-scroll-rails",
34594             "browsers": [
34595                 "E",
34596                 "IE10"
34597             ],
34598             "values": [
34599                 {
34600                     "name": "none"
34601                 },
34602                 {
34603                     "name": "railed"
34604                 }
34605             ],
34606             "status": "nonstandard",
34607             "syntax": "none | railed",
34608             "relevance": 0,
34609             "description": "Gets or sets a value that indicates whether or not small motions perpendicular to the primary axis of motion will result in either changes to both the scrollTop and scrollLeft properties or a change to the primary axis (for instance, either the scrollTop or scrollLeft properties will change, but not both).",
34610             "restrictions": [
34611                 "enum",
34612                 "length"
34613             ]
34614         },
34615         {
34616             "name": "-ms-scroll-snap-points-x",
34617             "browsers": [
34618                 "E",
34619                 "IE10"
34620             ],
34621             "values": [
34622                 {
34623                     "name": "snapInterval(100%, 100%)"
34624                 },
34625                 {
34626                     "name": "snapList()"
34627                 }
34628             ],
34629             "status": "nonstandard",
34630             "syntax": "snapInterval( <length-percentage>, <length-percentage> ) | snapList( <length-percentage># )",
34631             "relevance": 0,
34632             "description": "Gets or sets a value that defines where snap-points will be located along the x-axis.",
34633             "restrictions": [
34634                 "enum"
34635             ]
34636         },
34637         {
34638             "name": "-ms-scroll-snap-points-y",
34639             "browsers": [
34640                 "E",
34641                 "IE10"
34642             ],
34643             "values": [
34644                 {
34645                     "name": "snapInterval(100%, 100%)"
34646                 },
34647                 {
34648                     "name": "snapList()"
34649                 }
34650             ],
34651             "status": "nonstandard",
34652             "syntax": "snapInterval( <length-percentage>, <length-percentage> ) | snapList( <length-percentage># )",
34653             "relevance": 0,
34654             "description": "Gets or sets a value that defines where snap-points will be located along the y-axis.",
34655             "restrictions": [
34656                 "enum"
34657             ]
34658         },
34659         {
34660             "name": "-ms-scroll-snap-type",
34661             "browsers": [
34662                 "E",
34663                 "IE10"
34664             ],
34665             "values": [
34666                 {
34667                     "name": "none",
34668                     "description": "The visual viewport of this scroll container must ignore snap points, if any, when scrolled."
34669                 },
34670                 {
34671                     "name": "mandatory",
34672                     "description": "The visual viewport of this scroll container is guaranteed to rest on a snap point when there are no active scrolling operations."
34673                 },
34674                 {
34675                     "name": "proximity",
34676                     "description": "The visual viewport of this scroll container may come to rest on a snap point at the termination of a scroll at the discretion of the UA given the parameters of the scroll."
34677                 }
34678             ],
34679             "status": "nonstandard",
34680             "syntax": "none | proximity | mandatory",
34681             "relevance": 0,
34682             "description": "Gets or sets a value that defines what type of snap-point should be used for the current element. There are two type of snap-points, with the primary difference being whether or not the user is guaranteed to always stop on a snap-point.",
34683             "restrictions": [
34684                 "enum"
34685             ]
34686         },
34687         {
34688             "name": "-ms-scroll-snap-x",
34689             "browsers": [
34690                 "E",
34691                 "IE10"
34692             ],
34693             "values": [
34694                 {
34695                     "name": "mandatory"
34696                 },
34697                 {
34698                     "name": "none"
34699                 },
34700                 {
34701                     "name": "proximity"
34702                 },
34703                 {
34704                     "name": "snapInterval(100%, 100%)"
34705                 },
34706                 {
34707                     "name": "snapList()"
34708                 }
34709             ],
34710             "status": "nonstandard",
34711             "syntax": "<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>",
34712             "relevance": 0,
34713             "description": "Gets or sets a shorthand value that sets values for the -ms-scroll-snap-type and -ms-scroll-snap-points-x properties.",
34714             "restrictions": [
34715                 "enum"
34716             ]
34717         },
34718         {
34719             "name": "-ms-scroll-snap-y",
34720             "browsers": [
34721                 "E",
34722                 "IE10"
34723             ],
34724             "values": [
34725                 {
34726                     "name": "mandatory"
34727                 },
34728                 {
34729                     "name": "none"
34730                 },
34731                 {
34732                     "name": "proximity"
34733                 },
34734                 {
34735                     "name": "snapInterval(100%, 100%)"
34736                 },
34737                 {
34738                     "name": "snapList()"
34739                 }
34740             ],
34741             "status": "nonstandard",
34742             "syntax": "<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>",
34743             "relevance": 0,
34744             "description": "Gets or sets a shorthand value that sets values for the -ms-scroll-snap-type and -ms-scroll-snap-points-y properties.",
34745             "restrictions": [
34746                 "enum"
34747             ]
34748         },
34749         {
34750             "name": "-ms-scroll-translation",
34751             "browsers": [
34752                 "E",
34753                 "IE10"
34754             ],
34755             "values": [
34756                 {
34757                     "name": "none"
34758                 },
34759                 {
34760                     "name": "vertical-to-horizontal"
34761                 }
34762             ],
34763             "status": "nonstandard",
34764             "syntax": "none | vertical-to-horizontal",
34765             "relevance": 0,
34766             "description": "Gets or sets a value that specifies whether vertical-to-horizontal scroll wheel translation occurs on the specified element.",
34767             "restrictions": [
34768                 "enum"
34769             ]
34770         },
34771         {
34772             "name": "-ms-text-align-last",
34773             "browsers": [
34774                 "E",
34775                 "IE8"
34776             ],
34777             "values": [
34778                 {
34779                     "name": "auto"
34780                 },
34781                 {
34782                     "name": "center",
34783                     "description": "The inline contents are centered within the line box."
34784                 },
34785                 {
34786                     "name": "justify",
34787                     "description": "The text is justified according to the method specified by the 'text-justify' property."
34788                 },
34789                 {
34790                     "name": "left",
34791                     "description": "The inline contents are aligned to the left edge of the line box. In vertical text, 'left' aligns to the edge of the line box that would be the start edge for left-to-right text."
34792                 },
34793                 {
34794                     "name": "right",
34795                     "description": "The inline contents are aligned to the right edge of the line box. In vertical text, 'right' aligns to the edge of the line box that would be the end edge for left-to-right text."
34796                 }
34797             ],
34798             "relevance": 50,
34799             "description": "Describes how the last line of a block or a line right before a forced line break is aligned when 'text-align' is set to 'justify'.",
34800             "restrictions": [
34801                 "enum"
34802             ]
34803         },
34804         {
34805             "name": "-ms-text-autospace",
34806             "browsers": [
34807                 "E",
34808                 "IE8"
34809             ],
34810             "values": [
34811                 {
34812                     "name": "ideograph-alpha",
34813                     "description": "Creates 1/4em extra spacing between runs of ideographic letters and non-ideographic letters, such as Latin-based, Cyrillic, Greek, Arabic or Hebrew."
34814                 },
34815                 {
34816                     "name": "ideograph-numeric",
34817                     "description": "Creates 1/4em extra spacing between runs of ideographic letters and numeric glyphs."
34818                 },
34819                 {
34820                     "name": "ideograph-parenthesis",
34821                     "description": "Creates extra spacing between normal (non wide) parenthesis and ideographs."
34822                 },
34823                 {
34824                     "name": "ideograph-space",
34825                     "description": "Extends the width of the space character while surrounded by ideographs."
34826                 },
34827                 {
34828                     "name": "none",
34829                     "description": "No extra space is created."
34830                 },
34831                 {
34832                     "name": "punctuation",
34833                     "description": "Creates extra non-breaking spacing around punctuation as required by language-specific typographic conventions."
34834                 }
34835             ],
34836             "status": "nonstandard",
34837             "syntax": "none | ideograph-alpha | ideograph-numeric | ideograph-parenthesis | ideograph-space",
34838             "relevance": 0,
34839             "description": "Determines whether or not a full-width punctuation mark character should be trimmed if it appears at the beginning of a line, so that its 'ink' lines up with the first glyph in the line above and below.",
34840             "restrictions": [
34841                 "enum"
34842             ]
34843         },
34844         {
34845             "name": "-ms-text-combine-horizontal",
34846             "browsers": [
34847                 "E",
34848                 "IE11"
34849             ],
34850             "values": [
34851                 {
34852                     "name": "all",
34853                     "description": "Attempt to typeset horizontally all consecutive characters within the box such that they take up the space of a single character within the vertical line box."
34854                 },
34855                 {
34856                     "name": "digits",
34857                     "description": "Attempt to typeset horizontally each maximal sequence of consecutive ASCII digits (U+0030–U+0039) that has as many or fewer characters than the specified integer such that it takes up the space of a single character within the vertical line box."
34858                 },
34859                 {
34860                     "name": "none",
34861                     "description": "No special processing."
34862                 }
34863             ],
34864             "relevance": 50,
34865             "description": "This property specifies the combination of multiple characters into the space of a single character.",
34866             "restrictions": [
34867                 "enum",
34868                 "integer"
34869             ]
34870         },
34871         {
34872             "name": "-ms-text-justify",
34873             "browsers": [
34874                 "E",
34875                 "IE8"
34876             ],
34877             "values": [
34878                 {
34879                     "name": "auto",
34880                     "description": "The UA determines the justification algorithm to follow, based on a balance between performance and adequate presentation quality."
34881                 },
34882                 {
34883                     "name": "distribute",
34884                     "description": "Justification primarily changes spacing both at word separators and at grapheme cluster boundaries in all scripts except those in the connected and cursive groups. This value is sometimes used in e.g. Japanese, often with the 'text-align-last' property."
34885                 },
34886                 {
34887                     "name": "inter-cluster",
34888                     "description": "Justification primarily changes spacing at word separators and at grapheme cluster boundaries in clustered scripts. This value is typically used for Southeast Asian scripts such as Thai."
34889                 },
34890                 {
34891                     "name": "inter-ideograph",
34892                     "description": "Justification primarily changes spacing at word separators and at inter-graphemic boundaries in scripts that use no word spaces. This value is typically used for CJK languages."
34893                 },
34894                 {
34895                     "name": "inter-word",
34896                     "description": "Justification primarily changes spacing at word separators. This value is typically used for languages that separate words using spaces, like English or (sometimes) Korean."
34897                 },
34898                 {
34899                     "name": "kashida",
34900                     "description": "Justification primarily stretches Arabic and related scripts through the use of kashida or other calligraphic elongation."
34901                 }
34902             ],
34903             "relevance": 50,
34904             "description": "Selects the justification algorithm used when 'text-align' is set to 'justify'. The property applies to block containers, but the UA may (but is not required to) also support it on inline elements.",
34905             "restrictions": [
34906                 "enum"
34907             ]
34908         },
34909         {
34910             "name": "-ms-text-kashida-space",
34911             "browsers": [
34912                 "E",
34913                 "IE10"
34914             ],
34915             "relevance": 50,
34916             "description": "Sets or retrieves the ratio of kashida expansion to white space expansion when justifying lines of text in the object.",
34917             "restrictions": [
34918                 "percentage"
34919             ]
34920         },
34921         {
34922             "name": "-ms-text-overflow",
34923             "browsers": [
34924                 "IE10"
34925             ],
34926             "values": [
34927                 {
34928                     "name": "clip",
34929                     "description": "Clip inline content that overflows. Characters may be only partially rendered."
34930                 },
34931                 {
34932                     "name": "ellipsis",
34933                     "description": "Render an ellipsis character (U+2026) to represent clipped inline content."
34934                 }
34935             ],
34936             "relevance": 50,
34937             "description": "Text can overflow for example when it is prevented from wrapping",
34938             "restrictions": [
34939                 "enum"
34940             ]
34941         },
34942         {
34943             "name": "-ms-text-size-adjust",
34944             "browsers": [
34945                 "E",
34946                 "IE10"
34947             ],
34948             "values": [
34949                 {
34950                     "name": "auto",
34951                     "description": "Renderers must use the default size adjustment when displaying on a small device."
34952                 },
34953                 {
34954                     "name": "none",
34955                     "description": "Renderers must not do size adjustment when displaying on a small device."
34956                 }
34957             ],
34958             "relevance": 50,
34959             "description": "Specifies a size adjustment for displaying text content in mobile browsers.",
34960             "restrictions": [
34961                 "enum",
34962                 "percentage"
34963             ]
34964         },
34965         {
34966             "name": "-ms-text-underline-position",
34967             "browsers": [
34968                 "E",
34969                 "IE10"
34970             ],
34971             "values": [
34972                 {
34973                     "name": "alphabetic",
34974                     "description": "The underline is aligned with the alphabetic baseline. In this case the underline is likely to cross some descenders."
34975                 },
34976                 {
34977                     "name": "auto",
34978                     "description": "The user agent may use any algorithm to determine the underline's position. In horizontal line layout, the underline should be aligned as for alphabetic. In vertical line layout, if the language is set to Japanese or Korean, the underline should be aligned as for over."
34979                 },
34980                 {
34981                     "name": "over",
34982                     "description": "The underline is aligned with the 'top' (right in vertical writing) edge of the element's em-box. In this mode, an overline also switches sides."
34983                 },
34984                 {
34985                     "name": "under",
34986                     "description": "The underline is aligned with the 'bottom' (left in vertical writing) edge of the element's em-box. In this case the underline usually does not cross the descenders. This is sometimes called 'accounting' underline."
34987                 }
34988             ],
34989             "relevance": 50,
34990             "description": "Sets the position of an underline specified on the same element: it does not affect underlines specified by ancestor elements.This property is typically used in vertical writing contexts such as in Japanese documents where it often desired to have the underline appear 'over' (to the right of) the affected run of text",
34991             "restrictions": [
34992                 "enum"
34993             ]
34994         },
34995         {
34996             "name": "-ms-touch-action",
34997             "browsers": [
34998                 "IE10"
34999             ],
35000             "values": [
35001                 {
35002                     "name": "auto",
35003                     "description": "The element is a passive element, with several exceptions."
35004                 },
35005                 {
35006                     "name": "double-tap-zoom",
35007                     "description": "The element will zoom on double-tap."
35008                 },
35009                 {
35010                     "name": "manipulation",
35011                     "description": "The element is a manipulation-causing element."
35012                 },
35013                 {
35014                     "name": "none",
35015                     "description": "The element is a manipulation-blocking element."
35016                 },
35017                 {
35018                     "name": "pan-x",
35019                     "description": "The element permits touch-driven panning on the horizontal axis. The touch pan is performed on the nearest ancestor with horizontally scrollable content."
35020                 },
35021                 {
35022                     "name": "pan-y",
35023                     "description": "The element permits touch-driven panning on the vertical axis. The touch pan is performed on the nearest ancestor with vertically scrollable content."
35024                 },
35025                 {
35026                     "name": "pinch-zoom",
35027                     "description": "The element permits pinch-zooming. The pinch-zoom is performed on the nearest ancestor with zoomable content."
35028                 }
35029             ],
35030             "relevance": 50,
35031             "description": "Gets or sets a value that indicates whether and how a given region can be manipulated by the user.",
35032             "restrictions": [
35033                 "enum"
35034             ]
35035         },
35036         {
35037             "name": "-ms-touch-select",
35038             "browsers": [
35039                 "E",
35040                 "IE10"
35041             ],
35042             "values": [
35043                 {
35044                     "name": "grippers",
35045                     "description": "Grippers are always on."
35046                 },
35047                 {
35048                     "name": "none",
35049                     "description": "Grippers are always off."
35050                 }
35051             ],
35052             "status": "nonstandard",
35053             "syntax": "grippers | none",
35054             "relevance": 0,
35055             "description": "Gets or sets a value that toggles the 'gripper' visual elements that enable touch text selection.",
35056             "restrictions": [
35057                 "enum"
35058             ]
35059         },
35060         {
35061             "name": "-ms-transform",
35062             "browsers": [
35063                 "IE9-9"
35064             ],
35065             "values": [
35066                 {
35067                     "name": "matrix()",
35068                     "description": "Specifies a 2D transformation in the form of a transformation matrix of six values. matrix(a,b,c,d,e,f) is equivalent to applying the transformation matrix [a b c d e f]"
35069                 },
35070                 {
35071                     "name": "matrix3d()",
35072                     "description": "Specifies a 3D transformation as a 4x4 homogeneous matrix of 16 values in column-major order."
35073                 },
35074                 {
35075                     "name": "none"
35076                 },
35077                 {
35078                     "name": "rotate()",
35079                     "description": "Specifies a 2D rotation by the angle specified in the parameter about the origin of the element, as defined by the transform-origin property."
35080                 },
35081                 {
35082                     "name": "rotate3d()",
35083                     "description": "Specifies a clockwise 3D rotation by the angle specified in last parameter about the [x,y,z] direction vector described by the first 3 parameters."
35084                 },
35085                 {
35086                     "name": "rotateX('angle')",
35087                     "description": "Specifies a clockwise rotation by the given angle about the X axis."
35088                 },
35089                 {
35090                     "name": "rotateY('angle')",
35091                     "description": "Specifies a clockwise rotation by the given angle about the Y axis."
35092                 },
35093                 {
35094                     "name": "rotateZ('angle')",
35095                     "description": "Specifies a clockwise rotation by the given angle about the Z axis."
35096                 },
35097                 {
35098                     "name": "scale()",
35099                     "description": "Specifies a 2D scale operation by the [sx,sy] scaling vector described by the 2 parameters. If the second parameter is not provided, it is takes a value equal to the first."
35100                 },
35101                 {
35102                     "name": "scale3d()",
35103                     "description": "Specifies a 3D scale operation by the [sx,sy,sz] scaling vector described by the 3 parameters."
35104                 },
35105                 {
35106                     "name": "scaleX()",
35107                     "description": "Specifies a scale operation using the [sx,1] scaling vector, where sx is given as the parameter."
35108                 },
35109                 {
35110                     "name": "scaleY()",
35111                     "description": "Specifies a scale operation using the [sy,1] scaling vector, where sy is given as the parameter."
35112                 },
35113                 {
35114                     "name": "scaleZ()",
35115                     "description": "Specifies a scale operation using the [1,1,sz] scaling vector, where sz is given as the parameter."
35116                 },
35117                 {
35118                     "name": "skew()",
35119                     "description": "Specifies a skew transformation along the X and Y axes. The first angle parameter specifies the skew on the X axis. The second angle parameter specifies the skew on the Y axis. If the second parameter is not given then a value of 0 is used for the Y angle (ie: no skew on the Y axis)."
35120                 },
35121                 {
35122                     "name": "skewX()",
35123                     "description": "Specifies a skew transformation along the X axis by the given angle."
35124                 },
35125                 {
35126                     "name": "skewY()",
35127                     "description": "Specifies a skew transformation along the Y axis by the given angle."
35128                 },
35129                 {
35130                     "name": "translate()",
35131                     "description": "Specifies a 2D translation by the vector [tx, ty], where tx is the first translation-value parameter and ty is the optional second translation-value parameter."
35132                 },
35133                 {
35134                     "name": "translate3d()",
35135                     "description": "Specifies a 3D translation by the vector [tx,ty,tz], with tx, ty and tz being the first, second and third translation-value parameters respectively."
35136                 },
35137                 {
35138                     "name": "translateX()",
35139                     "description": "Specifies a translation by the given amount in the X direction."
35140                 },
35141                 {
35142                     "name": "translateY()",
35143                     "description": "Specifies a translation by the given amount in the Y direction."
35144                 },
35145                 {
35146                     "name": "translateZ()",
35147                     "description": "Specifies a translation by the given amount in the Z direction. Note that percentage values are not allowed in the translateZ translation-value, and if present are evaluated as 0."
35148                 }
35149             ],
35150             "relevance": 50,
35151             "description": "A two-dimensional transformation is applied to an element through the 'transform' property. This property contains a list of transform functions similar to those allowed by SVG.",
35152             "restrictions": [
35153                 "enum"
35154             ]
35155         },
35156         {
35157             "name": "-ms-transform-origin",
35158             "browsers": [
35159                 "IE9-9"
35160             ],
35161             "relevance": 50,
35162             "description": "Establishes the origin of transformation for an element.",
35163             "restrictions": [
35164                 "position",
35165                 "length",
35166                 "percentage"
35167             ]
35168         },
35169         {
35170             "name": "-ms-transform-origin-x",
35171             "browsers": [
35172                 "IE10"
35173             ],
35174             "relevance": 50,
35175             "description": "The x coordinate of the origin for transforms applied to an element with respect to its border box.",
35176             "restrictions": [
35177                 "length",
35178                 "percentage"
35179             ]
35180         },
35181         {
35182             "name": "-ms-transform-origin-y",
35183             "browsers": [
35184                 "IE10"
35185             ],
35186             "relevance": 50,
35187             "description": "The y coordinate of the origin for transforms applied to an element with respect to its border box.",
35188             "restrictions": [
35189                 "length",
35190                 "percentage"
35191             ]
35192         },
35193         {
35194             "name": "-ms-transform-origin-z",
35195             "browsers": [
35196                 "IE10"
35197             ],
35198             "relevance": 50,
35199             "description": "The z coordinate of the origin for transforms applied to an element with respect to its border box.",
35200             "restrictions": [
35201                 "length",
35202                 "percentage"
35203             ]
35204         },
35205         {
35206             "name": "-ms-user-select",
35207             "browsers": [
35208                 "E",
35209                 "IE10"
35210             ],
35211             "values": [
35212                 {
35213                     "name": "element"
35214                 },
35215                 {
35216                     "name": "none"
35217                 },
35218                 {
35219                     "name": "text"
35220                 }
35221             ],
35222             "status": "nonstandard",
35223             "syntax": "none | element | text",
35224             "relevance": 0,
35225             "description": "Controls the appearance of selection.",
35226             "restrictions": [
35227                 "enum"
35228             ]
35229         },
35230         {
35231             "name": "-ms-word-break",
35232             "browsers": [
35233                 "IE8"
35234             ],
35235             "values": [
35236                 {
35237                     "name": "break-all",
35238                     "description": "Lines may break between any two grapheme clusters for non-CJK scripts."
35239                 },
35240                 {
35241                     "name": "keep-all",
35242                     "description": "Block characters can no longer create implied break points."
35243                 },
35244                 {
35245                     "name": "normal",
35246                     "description": "Breaks non-CJK scripts according to their own rules."
35247                 }
35248             ],
35249             "relevance": 50,
35250             "description": "Specifies line break opportunities for non-CJK scripts.",
35251             "restrictions": [
35252                 "enum"
35253             ]
35254         },
35255         {
35256             "name": "-ms-word-wrap",
35257             "browsers": [
35258                 "IE8"
35259             ],
35260             "values": [
35261                 {
35262                     "name": "break-word",
35263                     "description": "An unbreakable 'word' may be broken at an arbitrary point if there are no otherwise-acceptable break points in the line."
35264                 },
35265                 {
35266                     "name": "normal",
35267                     "description": "Lines may break only at allowed break points."
35268                 }
35269             ],
35270             "relevance": 50,
35271             "description": "Specifies whether the UA may break within a word to prevent overflow when an otherwise-unbreakable string is too long to fit.",
35272             "restrictions": [
35273                 "enum"
35274             ]
35275         },
35276         {
35277             "name": "-ms-wrap-flow",
35278             "browsers": [
35279                 "E",
35280                 "IE10"
35281             ],
35282             "values": [
35283                 {
35284                     "name": "auto",
35285                     "description": "For floats an exclusion is created, for all other elements an exclusion is not created."
35286                 },
35287                 {
35288                     "name": "both",
35289                     "description": "Inline flow content can flow on all sides of the exclusion."
35290                 },
35291                 {
35292                     "name": "clear",
35293                     "description": "Inline flow content can only wrap on top and bottom of the exclusion and must leave the areas to the start and end edges of the exclusion box empty."
35294                 },
35295                 {
35296                     "name": "end",
35297                     "description": "Inline flow content can wrap on the end side of the exclusion area but must leave the area to the start edge of the exclusion area empty."
35298                 },
35299                 {
35300                     "name": "maximum",
35301                     "description": "Inline flow content can wrap on the side of the exclusion with the largest available space for the given line, and must leave the other side of the exclusion empty."
35302                 },
35303                 {
35304                     "name": "minimum",
35305                     "description": "Inline flow content can flow around the edge of the exclusion with the smallest available space within the flow content’s containing block, and must leave the other edge of the exclusion empty."
35306                 },
35307                 {
35308                     "name": "start",
35309                     "description": "Inline flow content can wrap on the start edge of the exclusion area but must leave the area to end edge of the exclusion area empty."
35310                 }
35311             ],
35312             "status": "nonstandard",
35313             "syntax": "auto | both | start | end | maximum | clear",
35314             "relevance": 0,
35315             "description": "An element becomes an exclusion when its 'wrap-flow' property has a computed value other than 'auto'.",
35316             "restrictions": [
35317                 "enum"
35318             ]
35319         },
35320         {
35321             "name": "-ms-wrap-margin",
35322             "browsers": [
35323                 "E",
35324                 "IE10"
35325             ],
35326             "status": "nonstandard",
35327             "syntax": "<length>",
35328             "relevance": 0,
35329             "description": "Gets or sets a value that is used to offset the inner wrap shape from other shapes.",
35330             "restrictions": [
35331                 "length",
35332                 "percentage"
35333             ]
35334         },
35335         {
35336             "name": "-ms-wrap-through",
35337             "browsers": [
35338                 "E",
35339                 "IE10"
35340             ],
35341             "values": [
35342                 {
35343                     "name": "none",
35344                     "description": "The exclusion element does not inherit its parent node's wrapping context. Its descendants are only subject to exclusion shapes defined inside the element."
35345                 },
35346                 {
35347                     "name": "wrap",
35348                     "description": "The exclusion element inherits its parent node's wrapping context. Its descendant inline content wraps around exclusions defined outside the element."
35349                 }
35350             ],
35351             "status": "nonstandard",
35352             "syntax": "wrap | none",
35353             "relevance": 0,
35354             "description": "Specifies if an element inherits its parent wrapping context. In other words if it is subject to the exclusions defined outside the element.",
35355             "restrictions": [
35356                 "enum"
35357             ]
35358         },
35359         {
35360             "name": "-ms-writing-mode",
35361             "browsers": [
35362                 "IE8"
35363             ],
35364             "values": [
35365                 {
35366                     "name": "bt-lr"
35367                 },
35368                 {
35369                     "name": "bt-rl"
35370                 },
35371                 {
35372                     "name": "lr-bt"
35373                 },
35374                 {
35375                     "name": "lr-tb"
35376                 },
35377                 {
35378                     "name": "rl-bt"
35379                 },
35380                 {
35381                     "name": "rl-tb"
35382                 },
35383                 {
35384                     "name": "tb-lr"
35385                 },
35386                 {
35387                     "name": "tb-rl"
35388                 }
35389             ],
35390             "relevance": 50,
35391             "description": "Shorthand property for both 'direction' and 'block-progression'.",
35392             "restrictions": [
35393                 "enum"
35394             ]
35395         },
35396         {
35397             "name": "-ms-zoom",
35398             "browsers": [
35399                 "IE8"
35400             ],
35401             "values": [
35402                 {
35403                     "name": "normal"
35404                 }
35405             ],
35406             "relevance": 50,
35407             "description": "Sets or retrieves the magnification scale of the object.",
35408             "restrictions": [
35409                 "enum",
35410                 "integer",
35411                 "number",
35412                 "percentage"
35413             ]
35414         },
35415         {
35416             "name": "-ms-zoom-animation",
35417             "browsers": [
35418                 "IE10"
35419             ],
35420             "values": [
35421                 {
35422                     "name": "default"
35423                 },
35424                 {
35425                     "name": "none"
35426                 }
35427             ],
35428             "relevance": 50,
35429             "description": "Gets or sets a value that indicates whether an animation is used when zooming.",
35430             "restrictions": [
35431                 "enum"
35432             ]
35433         },
35434         {
35435             "name": "nav-down",
35436             "browsers": [
35437                 "O9.5"
35438             ],
35439             "values": [
35440                 {
35441                     "name": "auto",
35442                     "description": "The user agent automatically determines which element to navigate the focus to in response to directional navigational input."
35443                 },
35444                 {
35445                     "name": "current",
35446                     "description": "Indicates that the user agent should target the frame that the element is in."
35447                 },
35448                 {
35449                     "name": "root",
35450                     "description": "Indicates that the user agent should target the full window."
35451                 }
35452             ],
35453             "relevance": 50,
35454             "description": "Provides an way to control directional focus navigation.",
35455             "restrictions": [
35456                 "enum",
35457                 "identifier",
35458                 "string"
35459             ]
35460         },
35461         {
35462             "name": "nav-index",
35463             "browsers": [
35464                 "O9.5"
35465             ],
35466             "values": [
35467                 {
35468                     "name": "auto",
35469                     "description": "The element's sequential navigation order is assigned automatically by the user agent."
35470                 }
35471             ],
35472             "relevance": 50,
35473             "description": "Provides an input-method-neutral way of specifying the sequential navigation order (also known as 'tabbing order').",
35474             "restrictions": [
35475                 "number"
35476             ]
35477         },
35478         {
35479             "name": "nav-left",
35480             "browsers": [
35481                 "O9.5"
35482             ],
35483             "values": [
35484                 {
35485                     "name": "auto",
35486                     "description": "The user agent automatically determines which element to navigate the focus to in response to directional navigational input."
35487                 },
35488                 {
35489                     "name": "current",
35490                     "description": "Indicates that the user agent should target the frame that the element is in."
35491                 },
35492                 {
35493                     "name": "root",
35494                     "description": "Indicates that the user agent should target the full window."
35495                 }
35496             ],
35497             "relevance": 50,
35498             "description": "Provides an way to control directional focus navigation.",
35499             "restrictions": [
35500                 "enum",
35501                 "identifier",
35502                 "string"
35503             ]
35504         },
35505         {
35506             "name": "nav-right",
35507             "browsers": [
35508                 "O9.5"
35509             ],
35510             "values": [
35511                 {
35512                     "name": "auto",
35513                     "description": "The user agent automatically determines which element to navigate the focus to in response to directional navigational input."
35514                 },
35515                 {
35516                     "name": "current",
35517                     "description": "Indicates that the user agent should target the frame that the element is in."
35518                 },
35519                 {
35520                     "name": "root",
35521                     "description": "Indicates that the user agent should target the full window."
35522                 }
35523             ],
35524             "relevance": 50,
35525             "description": "Provides an way to control directional focus navigation.",
35526             "restrictions": [
35527                 "enum",
35528                 "identifier",
35529                 "string"
35530             ]
35531         },
35532         {
35533             "name": "nav-up",
35534             "browsers": [
35535                 "O9.5"
35536             ],
35537             "values": [
35538                 {
35539                     "name": "auto",
35540                     "description": "The user agent automatically determines which element to navigate the focus to in response to directional navigational input."
35541                 },
35542                 {
35543                     "name": "current",
35544                     "description": "Indicates that the user agent should target the frame that the element is in."
35545                 },
35546                 {
35547                     "name": "root",
35548                     "description": "Indicates that the user agent should target the full window."
35549                 }
35550             ],
35551             "relevance": 50,
35552             "description": "Provides an way to control directional focus navigation.",
35553             "restrictions": [
35554                 "enum",
35555                 "identifier",
35556                 "string"
35557             ]
35558         },
35559         {
35560             "name": "negative",
35561             "browsers": [
35562                 "FF33"
35563             ],
35564             "syntax": "<symbol> <symbol>?",
35565             "relevance": 50,
35566             "description": "@counter-style descriptor. Defines how to alter the representation when the counter value is negative.",
35567             "restrictions": [
35568                 "image",
35569                 "identifier",
35570                 "string"
35571             ]
35572         },
35573         {
35574             "name": "-o-animation",
35575             "browsers": [
35576                 "O12"
35577             ],
35578             "values": [
35579                 {
35580                     "name": "alternate",
35581                     "description": "The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction."
35582                 },
35583                 {
35584                     "name": "alternate-reverse",
35585                     "description": "The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction."
35586                 },
35587                 {
35588                     "name": "backwards",
35589                     "description": "The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'."
35590                 },
35591                 {
35592                     "name": "both",
35593                     "description": "Both forwards and backwards fill modes are applied."
35594                 },
35595                 {
35596                     "name": "forwards",
35597                     "description": "The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes."
35598                 },
35599                 {
35600                     "name": "infinite",
35601                     "description": "Causes the animation to repeat forever."
35602                 },
35603                 {
35604                     "name": "none",
35605                     "description": "No animation is performed"
35606                 },
35607                 {
35608                     "name": "normal",
35609                     "description": "Normal playback."
35610                 },
35611                 {
35612                     "name": "reverse",
35613                     "description": "All iterations of the animation are played in the reverse direction from the way they were specified."
35614                 }
35615             ],
35616             "relevance": 50,
35617             "description": "Shorthand property combines six of the animation properties into a single property.",
35618             "restrictions": [
35619                 "time",
35620                 "enum",
35621                 "timing-function",
35622                 "identifier",
35623                 "number"
35624             ]
35625         },
35626         {
35627             "name": "-o-animation-delay",
35628             "browsers": [
35629                 "O12"
35630             ],
35631             "relevance": 50,
35632             "description": "Defines when the animation will start.",
35633             "restrictions": [
35634                 "time"
35635             ]
35636         },
35637         {
35638             "name": "-o-animation-direction",
35639             "browsers": [
35640                 "O12"
35641             ],
35642             "values": [
35643                 {
35644                     "name": "alternate",
35645                     "description": "The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction."
35646                 },
35647                 {
35648                     "name": "alternate-reverse",
35649                     "description": "The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction."
35650                 },
35651                 {
35652                     "name": "normal",
35653                     "description": "Normal playback."
35654                 },
35655                 {
35656                     "name": "reverse",
35657                     "description": "All iterations of the animation are played in the reverse direction from the way they were specified."
35658                 }
35659             ],
35660             "relevance": 50,
35661             "description": "Defines whether or not the animation should play in reverse on alternate cycles.",
35662             "restrictions": [
35663                 "enum"
35664             ]
35665         },
35666         {
35667             "name": "-o-animation-duration",
35668             "browsers": [
35669                 "O12"
35670             ],
35671             "relevance": 50,
35672             "description": "Defines the length of time that an animation takes to complete one cycle.",
35673             "restrictions": [
35674                 "time"
35675             ]
35676         },
35677         {
35678             "name": "-o-animation-fill-mode",
35679             "browsers": [
35680                 "O12"
35681             ],
35682             "values": [
35683                 {
35684                     "name": "backwards",
35685                     "description": "The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'."
35686                 },
35687                 {
35688                     "name": "both",
35689                     "description": "Both forwards and backwards fill modes are applied."
35690                 },
35691                 {
35692                     "name": "forwards",
35693                     "description": "The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes."
35694                 },
35695                 {
35696                     "name": "none",
35697                     "description": "There is no change to the property value between the time the animation is applied and the time the animation begins playing or after the animation completes."
35698                 }
35699             ],
35700             "relevance": 50,
35701             "description": "Defines what values are applied by the animation outside the time it is executing.",
35702             "restrictions": [
35703                 "enum"
35704             ]
35705         },
35706         {
35707             "name": "-o-animation-iteration-count",
35708             "browsers": [
35709                 "O12"
35710             ],
35711             "values": [
35712                 {
35713                     "name": "infinite",
35714                     "description": "Causes the animation to repeat forever."
35715                 }
35716             ],
35717             "relevance": 50,
35718             "description": "Defines the number of times an animation cycle is played. The default value is one, meaning the animation will play from beginning to end once.",
35719             "restrictions": [
35720                 "number",
35721                 "enum"
35722             ]
35723         },
35724         {
35725             "name": "-o-animation-name",
35726             "browsers": [
35727                 "O12"
35728             ],
35729             "values": [
35730                 {
35731                     "name": "none",
35732                     "description": "No animation is performed"
35733                 }
35734             ],
35735             "relevance": 50,
35736             "description": "Defines a list of animations that apply. Each name is used to select the keyframe at-rule that provides the property values for the animation.",
35737             "restrictions": [
35738                 "identifier",
35739                 "enum"
35740             ]
35741         },
35742         {
35743             "name": "-o-animation-play-state",
35744             "browsers": [
35745                 "O12"
35746             ],
35747             "values": [
35748                 {
35749                     "name": "paused",
35750                     "description": "A running animation will be paused."
35751                 },
35752                 {
35753                     "name": "running",
35754                     "description": "Resume playback of a paused animation."
35755                 }
35756             ],
35757             "relevance": 50,
35758             "description": "Defines whether the animation is running or paused.",
35759             "restrictions": [
35760                 "enum"
35761             ]
35762         },
35763         {
35764             "name": "-o-animation-timing-function",
35765             "browsers": [
35766                 "O12"
35767             ],
35768             "relevance": 50,
35769             "description": "Describes how the animation will progress over one cycle of its duration. See the 'transition-timing-function'.",
35770             "restrictions": [
35771                 "timing-function"
35772             ]
35773         },
35774         {
35775             "name": "object-fit",
35776             "browsers": [
35777                 "E16",
35778                 "FF36",
35779                 "S10",
35780                 "C31",
35781                 "O19"
35782             ],
35783             "values": [
35784                 {
35785                     "name": "contain",
35786                     "description": "The replaced content is sized to maintain its aspect ratio while fitting within the element’s content box: its concrete object size is resolved as a contain constraint against the element's used width and height."
35787                 },
35788                 {
35789                     "name": "cover",
35790                     "description": "The replaced content is sized to maintain its aspect ratio while filling the element's entire content box: its concrete object size is resolved as a cover constraint against the element’s used width and height."
35791                 },
35792                 {
35793                     "name": "fill",
35794                     "description": "The replaced content is sized to fill the element’s content box: the object's concrete object size is the element's used width and height."
35795                 },
35796                 {
35797                     "name": "none",
35798                     "description": "The replaced content is not resized to fit inside the element's content box"
35799                 },
35800                 {
35801                     "name": "scale-down",
35802                     "description": "Size the content as if ‘none’ or ‘contain’ were specified, whichever would result in a smaller concrete object size."
35803                 }
35804             ],
35805             "syntax": "fill | contain | cover | none | scale-down",
35806             "relevance": 61,
35807             "references": [
35808                 {
35809                     "name": "MDN Reference",
35810                     "url": "https://developer.mozilla.org/docs/Web/CSS/object-fit"
35811                 }
35812             ],
35813             "description": "Specifies how the contents of a replaced element should be scaled relative to the box established by its used height and width.",
35814             "restrictions": [
35815                 "enum"
35816             ]
35817         },
35818         {
35819             "name": "object-position",
35820             "browsers": [
35821                 "E16",
35822                 "FF36",
35823                 "S10",
35824                 "C31",
35825                 "O19"
35826             ],
35827             "syntax": "<position>",
35828             "relevance": 52,
35829             "references": [
35830                 {
35831                     "name": "MDN Reference",
35832                     "url": "https://developer.mozilla.org/docs/Web/CSS/object-position"
35833                 }
35834             ],
35835             "description": "Determines the alignment of the replaced element inside its box.",
35836             "restrictions": [
35837                 "position",
35838                 "length",
35839                 "percentage"
35840             ]
35841         },
35842         {
35843             "name": "-o-border-image",
35844             "browsers": [
35845                 "O11.6"
35846             ],
35847             "values": [
35848                 {
35849                     "name": "auto",
35850                     "description": "If 'auto' is specified then the border image width is the intrinsic width or height (whichever is applicable) of the corresponding image slice. If the image does not have the required intrinsic dimension then the corresponding border-width is used instead."
35851                 },
35852                 {
35853                     "name": "fill",
35854                     "description": "Causes the middle part of the border-image to be preserved."
35855                 },
35856                 {
35857                     "name": "none"
35858                 },
35859                 {
35860                     "name": "repeat",
35861                     "description": "The image is tiled (repeated) to fill the area."
35862                 },
35863                 {
35864                     "name": "round",
35865                     "description": "The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the image is rescaled so that it does."
35866                 },
35867                 {
35868                     "name": "space",
35869                     "description": "The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the extra space is distributed around the tiles."
35870                 },
35871                 {
35872                     "name": "stretch",
35873                     "description": "The image is stretched to fill the area."
35874                 }
35875             ],
35876             "relevance": 50,
35877             "description": "Shorthand property for setting 'border-image-source', 'border-image-slice', 'border-image-width', 'border-image-outset' and 'border-image-repeat'. Omitted values are set to their initial values.",
35878             "restrictions": [
35879                 "length",
35880                 "percentage",
35881                 "number",
35882                 "image",
35883                 "enum"
35884             ]
35885         },
35886         {
35887             "name": "-o-object-fit",
35888             "browsers": [
35889                 "O10.6"
35890             ],
35891             "values": [
35892                 {
35893                     "name": "contain",
35894                     "description": "The replaced content is sized to maintain its aspect ratio while fitting within the element’s content box: its concrete object size is resolved as a contain constraint against the element's used width and height."
35895                 },
35896                 {
35897                     "name": "cover",
35898                     "description": "The replaced content is sized to maintain its aspect ratio while filling the element's entire content box: its concrete object size is resolved as a cover constraint against the element’s used width and height."
35899                 },
35900                 {
35901                     "name": "fill",
35902                     "description": "The replaced content is sized to fill the element’s content box: the object's concrete object size is the element's used width and height."
35903                 },
35904                 {
35905                     "name": "none",
35906                     "description": "The replaced content is not resized to fit inside the element's content box"
35907                 },
35908                 {
35909                     "name": "scale-down",
35910                     "description": "Size the content as if ‘none’ or ‘contain’ were specified, whichever would result in a smaller concrete object size."
35911                 }
35912             ],
35913             "relevance": 50,
35914             "description": "Specifies how the contents of a replaced element should be scaled relative to the box established by its used height and width.",
35915             "restrictions": [
35916                 "enum"
35917             ]
35918         },
35919         {
35920             "name": "-o-object-position",
35921             "browsers": [
35922                 "O10.6"
35923             ],
35924             "relevance": 50,
35925             "description": "Determines the alignment of the replaced element inside its box.",
35926             "restrictions": [
35927                 "position",
35928                 "length",
35929                 "percentage"
35930             ]
35931         },
35932         {
35933             "name": "opacity",
35934             "syntax": "<alpha-value>",
35935             "relevance": 93,
35936             "references": [
35937                 {
35938                     "name": "MDN Reference",
35939                     "url": "https://developer.mozilla.org/docs/Web/CSS/opacity"
35940                 }
35941             ],
35942             "description": "Opacity of an element's text, where 1 is opaque and 0 is entirely transparent.",
35943             "restrictions": [
35944                 "number(0-1)"
35945             ]
35946         },
35947         {
35948             "name": "order",
35949             "syntax": "<integer>",
35950             "relevance": 61,
35951             "references": [
35952                 {
35953                     "name": "MDN Reference",
35954                     "url": "https://developer.mozilla.org/docs/Web/CSS/order"
35955                 }
35956             ],
35957             "description": "Controls the order in which children of a flex container appear within the flex container, by assigning them to ordinal groups.",
35958             "restrictions": [
35959                 "integer"
35960             ]
35961         },
35962         {
35963             "name": "orphans",
35964             "browsers": [
35965                 "E12",
35966                 "S1.3",
35967                 "C25",
35968                 "IE8",
35969                 "O9.2"
35970             ],
35971             "syntax": "<integer>",
35972             "relevance": 51,
35973             "references": [
35974                 {
35975                     "name": "MDN Reference",
35976                     "url": "https://developer.mozilla.org/docs/Web/CSS/orphans"
35977                 }
35978             ],
35979             "description": "Specifies the minimum number of line boxes in a block container that must be left in a fragment before a fragmentation break.",
35980             "restrictions": [
35981                 "integer"
35982             ]
35983         },
35984         {
35985             "name": "-o-table-baseline",
35986             "browsers": [
35987                 "O9.6"
35988             ],
35989             "relevance": 50,
35990             "description": "Determines which row of a inline-table should be used as baseline of inline-table.",
35991             "restrictions": [
35992                 "integer"
35993             ]
35994         },
35995         {
35996             "name": "-o-tab-size",
35997             "browsers": [
35998                 "O10.6"
35999             ],
36000             "relevance": 50,
36001             "description": "This property determines the width of the tab character (U+0009), in space characters (U+0020), when rendered.",
36002             "restrictions": [
36003                 "integer",
36004                 "length"
36005             ]
36006         },
36007         {
36008             "name": "-o-text-overflow",
36009             "browsers": [
36010                 "O10"
36011             ],
36012             "values": [
36013                 {
36014                     "name": "clip",
36015                     "description": "Clip inline content that overflows. Characters may be only partially rendered."
36016                 },
36017                 {
36018                     "name": "ellipsis",
36019                     "description": "Render an ellipsis character (U+2026) to represent clipped inline content."
36020                 }
36021             ],
36022             "relevance": 50,
36023             "description": "Text can overflow for example when it is prevented from wrapping",
36024             "restrictions": [
36025                 "enum"
36026             ]
36027         },
36028         {
36029             "name": "-o-transform",
36030             "browsers": [
36031                 "O10.5"
36032             ],
36033             "values": [
36034                 {
36035                     "name": "matrix()",
36036                     "description": "Specifies a 2D transformation in the form of a transformation matrix of six values. matrix(a,b,c,d,e,f) is equivalent to applying the transformation matrix [a b c d e f]"
36037                 },
36038                 {
36039                     "name": "matrix3d()",
36040                     "description": "Specifies a 3D transformation as a 4x4 homogeneous matrix of 16 values in column-major order."
36041                 },
36042                 {
36043                     "name": "none"
36044                 },
36045                 {
36046                     "name": "rotate()",
36047                     "description": "Specifies a 2D rotation by the angle specified in the parameter about the origin of the element, as defined by the transform-origin property."
36048                 },
36049                 {
36050                     "name": "rotate3d()",
36051                     "description": "Specifies a clockwise 3D rotation by the angle specified in last parameter about the [x,y,z] direction vector described by the first 3 parameters."
36052                 },
36053                 {
36054                     "name": "rotateX('angle')",
36055                     "description": "Specifies a clockwise rotation by the given angle about the X axis."
36056                 },
36057                 {
36058                     "name": "rotateY('angle')",
36059                     "description": "Specifies a clockwise rotation by the given angle about the Y axis."
36060                 },
36061                 {
36062                     "name": "rotateZ('angle')",
36063                     "description": "Specifies a clockwise rotation by the given angle about the Z axis."
36064                 },
36065                 {
36066                     "name": "scale()",
36067                     "description": "Specifies a 2D scale operation by the [sx,sy] scaling vector described by the 2 parameters. If the second parameter is not provided, it is takes a value equal to the first."
36068                 },
36069                 {
36070                     "name": "scale3d()",
36071                     "description": "Specifies a 3D scale operation by the [sx,sy,sz] scaling vector described by the 3 parameters."
36072                 },
36073                 {
36074                     "name": "scaleX()",
36075                     "description": "Specifies a scale operation using the [sx,1] scaling vector, where sx is given as the parameter."
36076                 },
36077                 {
36078                     "name": "scaleY()",
36079                     "description": "Specifies a scale operation using the [sy,1] scaling vector, where sy is given as the parameter."
36080                 },
36081                 {
36082                     "name": "scaleZ()",
36083                     "description": "Specifies a scale operation using the [1,1,sz] scaling vector, where sz is given as the parameter."
36084                 },
36085                 {
36086                     "name": "skew()",
36087                     "description": "Specifies a skew transformation along the X and Y axes. The first angle parameter specifies the skew on the X axis. The second angle parameter specifies the skew on the Y axis. If the second parameter is not given then a value of 0 is used for the Y angle (ie: no skew on the Y axis)."
36088                 },
36089                 {
36090                     "name": "skewX()",
36091                     "description": "Specifies a skew transformation along the X axis by the given angle."
36092                 },
36093                 {
36094                     "name": "skewY()",
36095                     "description": "Specifies a skew transformation along the Y axis by the given angle."
36096                 },
36097                 {
36098                     "name": "translate()",
36099                     "description": "Specifies a 2D translation by the vector [tx, ty], where tx is the first translation-value parameter and ty is the optional second translation-value parameter."
36100                 },
36101                 {
36102                     "name": "translate3d()",
36103                     "description": "Specifies a 3D translation by the vector [tx,ty,tz], with tx, ty and tz being the first, second and third translation-value parameters respectively."
36104                 },
36105                 {
36106                     "name": "translateX()",
36107                     "description": "Specifies a translation by the given amount in the X direction."
36108                 },
36109                 {
36110                     "name": "translateY()",
36111                     "description": "Specifies a translation by the given amount in the Y direction."
36112                 },
36113                 {
36114                     "name": "translateZ()",
36115                     "description": "Specifies a translation by the given amount in the Z direction. Note that percentage values are not allowed in the translateZ translation-value, and if present are evaluated as 0."
36116                 }
36117             ],
36118             "relevance": 50,
36119             "description": "A two-dimensional transformation is applied to an element through the 'transform' property. This property contains a list of transform functions similar to those allowed by SVG.",
36120             "restrictions": [
36121                 "enum"
36122             ]
36123         },
36124         {
36125             "name": "-o-transform-origin",
36126             "browsers": [
36127                 "O10.5"
36128             ],
36129             "relevance": 50,
36130             "description": "Establishes the origin of transformation for an element.",
36131             "restrictions": [
36132                 "positon",
36133                 "length",
36134                 "percentage"
36135             ]
36136         },
36137         {
36138             "name": "-o-transition",
36139             "browsers": [
36140                 "O11.5"
36141             ],
36142             "values": [
36143                 {
36144                     "name": "all",
36145                     "description": "Every property that is able to undergo a transition will do so."
36146                 },
36147                 {
36148                     "name": "none",
36149                     "description": "No property will transition."
36150                 }
36151             ],
36152             "relevance": 50,
36153             "description": "Shorthand property combines four of the transition properties into a single property.",
36154             "restrictions": [
36155                 "time",
36156                 "property",
36157                 "timing-function",
36158                 "enum"
36159             ]
36160         },
36161         {
36162             "name": "-o-transition-delay",
36163             "browsers": [
36164                 "O11.5"
36165             ],
36166             "relevance": 50,
36167             "description": "Defines when the transition will start. It allows a transition to begin execution some period of time from when it is applied.",
36168             "restrictions": [
36169                 "time"
36170             ]
36171         },
36172         {
36173             "name": "-o-transition-duration",
36174             "browsers": [
36175                 "O11.5"
36176             ],
36177             "relevance": 50,
36178             "description": "Specifies how long the transition from the old value to the new value should take.",
36179             "restrictions": [
36180                 "time"
36181             ]
36182         },
36183         {
36184             "name": "-o-transition-property",
36185             "browsers": [
36186                 "O11.5"
36187             ],
36188             "values": [
36189                 {
36190                     "name": "all",
36191                     "description": "Every property that is able to undergo a transition will do so."
36192                 },
36193                 {
36194                     "name": "none",
36195                     "description": "No property will transition."
36196                 }
36197             ],
36198             "relevance": 50,
36199             "description": "Specifies the name of the CSS property to which the transition is applied.",
36200             "restrictions": [
36201                 "property"
36202             ]
36203         },
36204         {
36205             "name": "-o-transition-timing-function",
36206             "browsers": [
36207                 "O11.5"
36208             ],
36209             "relevance": 50,
36210             "description": "Describes how the intermediate values used during a transition will be calculated.",
36211             "restrictions": [
36212                 "timing-function"
36213             ]
36214         },
36215         {
36216             "name": "offset-block-end",
36217             "browsers": [
36218                 "FF41"
36219             ],
36220             "values": [
36221                 {
36222                     "name": "auto",
36223                     "description": "For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well."
36224                 }
36225             ],
36226             "relevance": 50,
36227             "description": "Logical 'bottom'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
36228             "restrictions": [
36229                 "length",
36230                 "percentage"
36231             ]
36232         },
36233         {
36234             "name": "offset-block-start",
36235             "browsers": [
36236                 "FF41"
36237             ],
36238             "values": [
36239                 {
36240                     "name": "auto",
36241                     "description": "For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well."
36242                 }
36243             ],
36244             "relevance": 50,
36245             "description": "Logical 'top'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
36246             "restrictions": [
36247                 "length",
36248                 "percentage"
36249             ]
36250         },
36251         {
36252             "name": "offset-inline-end",
36253             "browsers": [
36254                 "FF41"
36255             ],
36256             "values": [
36257                 {
36258                     "name": "auto",
36259                     "description": "For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well."
36260                 }
36261             ],
36262             "relevance": 50,
36263             "description": "Logical 'right'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
36264             "restrictions": [
36265                 "length",
36266                 "percentage"
36267             ]
36268         },
36269         {
36270             "name": "offset-inline-start",
36271             "browsers": [
36272                 "FF41"
36273             ],
36274             "values": [
36275                 {
36276                     "name": "auto",
36277                     "description": "For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well."
36278                 }
36279             ],
36280             "relevance": 50,
36281             "description": "Logical 'left'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
36282             "restrictions": [
36283                 "length",
36284                 "percentage"
36285             ]
36286         },
36287         {
36288             "name": "outline",
36289             "values": [
36290                 {
36291                     "name": "auto",
36292                     "description": "Permits the user agent to render a custom outline style, typically the default platform style."
36293                 },
36294                 {
36295                     "name": "invert",
36296                     "description": "Performs a color inversion on the pixels on the screen."
36297                 }
36298             ],
36299             "syntax": "[ <'outline-color'> || <'outline-style'> || <'outline-width'> ]",
36300             "relevance": 87,
36301             "references": [
36302                 {
36303                     "name": "MDN Reference",
36304                     "url": "https://developer.mozilla.org/docs/Web/CSS/outline"
36305                 }
36306             ],
36307             "description": "Shorthand property for 'outline-style', 'outline-width', and 'outline-color'.",
36308             "restrictions": [
36309                 "length",
36310                 "line-width",
36311                 "line-style",
36312                 "color",
36313                 "enum"
36314             ]
36315         },
36316         {
36317             "name": "outline-color",
36318             "values": [
36319                 {
36320                     "name": "invert",
36321                     "description": "Performs a color inversion on the pixels on the screen."
36322                 }
36323             ],
36324             "syntax": "<color> | invert",
36325             "relevance": 53,
36326             "references": [
36327                 {
36328                     "name": "MDN Reference",
36329                     "url": "https://developer.mozilla.org/docs/Web/CSS/outline-color"
36330                 }
36331             ],
36332             "description": "The color of the outline.",
36333             "restrictions": [
36334                 "enum",
36335                 "color"
36336             ]
36337         },
36338         {
36339             "name": "outline-offset",
36340             "browsers": [
36341                 "E15",
36342                 "FF1.5",
36343                 "S1.2",
36344                 "C1",
36345                 "O9.5"
36346             ],
36347             "syntax": "<length>",
36348             "relevance": 59,
36349             "references": [
36350                 {
36351                     "name": "MDN Reference",
36352                     "url": "https://developer.mozilla.org/docs/Web/CSS/outline-offset"
36353                 }
36354             ],
36355             "description": "Offset the outline and draw it beyond the border edge.",
36356             "restrictions": [
36357                 "length"
36358             ]
36359         },
36360         {
36361             "name": "outline-style",
36362             "values": [
36363                 {
36364                     "name": "auto",
36365                     "description": "Permits the user agent to render a custom outline style, typically the default platform style."
36366                 }
36367             ],
36368             "syntax": "auto | <'border-style'>",
36369             "relevance": 60,
36370             "references": [
36371                 {
36372                     "name": "MDN Reference",
36373                     "url": "https://developer.mozilla.org/docs/Web/CSS/outline-style"
36374                 }
36375             ],
36376             "description": "Style of the outline.",
36377             "restrictions": [
36378                 "line-style",
36379                 "enum"
36380             ]
36381         },
36382         {
36383             "name": "outline-width",
36384             "syntax": "<line-width>",
36385             "relevance": 60,
36386             "references": [
36387                 {
36388                     "name": "MDN Reference",
36389                     "url": "https://developer.mozilla.org/docs/Web/CSS/outline-width"
36390                 }
36391             ],
36392             "description": "Width of the outline.",
36393             "restrictions": [
36394                 "length",
36395                 "line-width"
36396             ]
36397         },
36398         {
36399             "name": "overflow",
36400             "values": [
36401                 {
36402                     "name": "auto",
36403                     "description": "The behavior of the 'auto' value is UA-dependent, but should cause a scrolling mechanism to be provided for overflowing boxes."
36404                 },
36405                 {
36406                     "name": "hidden",
36407                     "description": "Content is clipped and no scrolling mechanism should be provided to view the content outside the clipping region."
36408                 },
36409                 {
36410                     "name": "-moz-hidden-unscrollable",
36411                     "description": "Same as the standardized 'clip', except doesn’t establish a block formatting context."
36412                 },
36413                 {
36414                     "name": "scroll",
36415                     "description": "Content is clipped and if the user agent uses a scrolling mechanism that is visible on the screen (such as a scroll bar or a panner), that mechanism should be displayed for a box whether or not any of its content is clipped."
36416                 },
36417                 {
36418                     "name": "visible",
36419                     "description": "Content is not clipped, i.e., it may be rendered outside the content box."
36420                 }
36421             ],
36422             "syntax": "[ visible | hidden | clip | scroll | auto ]{1,2}",
36423             "relevance": 92,
36424             "references": [
36425                 {
36426                     "name": "MDN Reference",
36427                     "url": "https://developer.mozilla.org/docs/Web/CSS/overflow"
36428                 }
36429             ],
36430             "description": "Shorthand for setting 'overflow-x' and 'overflow-y'.",
36431             "restrictions": [
36432                 "enum"
36433             ]
36434         },
36435         {
36436             "name": "overflow-wrap",
36437             "values": [
36438                 {
36439                     "name": "break-word",
36440                     "description": "An otherwise unbreakable sequence of characters may be broken at an arbitrary point if there are no otherwise-acceptable break points in the line."
36441                 },
36442                 {
36443                     "name": "normal",
36444                     "description": "Lines may break only at allowed break points."
36445                 }
36446             ],
36447             "syntax": "normal | break-word | anywhere",
36448             "relevance": 63,
36449             "references": [
36450                 {
36451                     "name": "MDN Reference",
36452                     "url": "https://developer.mozilla.org/docs/Web/CSS/overflow-wrap"
36453                 }
36454             ],
36455             "description": "Specifies whether the UA may break within a word to prevent overflow when an otherwise-unbreakable string is too long to fit within the line box.",
36456             "restrictions": [
36457                 "enum"
36458             ]
36459         },
36460         {
36461             "name": "overflow-x",
36462             "values": [
36463                 {
36464                     "name": "auto",
36465                     "description": "The behavior of the 'auto' value is UA-dependent, but should cause a scrolling mechanism to be provided for overflowing boxes."
36466                 },
36467                 {
36468                     "name": "hidden",
36469                     "description": "Content is clipped and no scrolling mechanism should be provided to view the content outside the clipping region."
36470                 },
36471                 {
36472                     "name": "scroll",
36473                     "description": "Content is clipped and if the user agent uses a scrolling mechanism that is visible on the screen (such as a scroll bar or a panner), that mechanism should be displayed for a box whether or not any of its content is clipped."
36474                 },
36475                 {
36476                     "name": "visible",
36477                     "description": "Content is not clipped, i.e., it may be rendered outside the content box."
36478                 }
36479             ],
36480             "syntax": "visible | hidden | clip | scroll | auto",
36481             "relevance": 79,
36482             "references": [
36483                 {
36484                     "name": "MDN Reference",
36485                     "url": "https://developer.mozilla.org/docs/Web/CSS/overflow-x"
36486                 }
36487             ],
36488             "description": "Specifies the handling of overflow in the horizontal direction.",
36489             "restrictions": [
36490                 "enum"
36491             ]
36492         },
36493         {
36494             "name": "overflow-y",
36495             "values": [
36496                 {
36497                     "name": "auto",
36498                     "description": "The behavior of the 'auto' value is UA-dependent, but should cause a scrolling mechanism to be provided for overflowing boxes."
36499                 },
36500                 {
36501                     "name": "hidden",
36502                     "description": "Content is clipped and no scrolling mechanism should be provided to view the content outside the clipping region."
36503                 },
36504                 {
36505                     "name": "scroll",
36506                     "description": "Content is clipped and if the user agent uses a scrolling mechanism that is visible on the screen (such as a scroll bar or a panner), that mechanism should be displayed for a box whether or not any of its content is clipped."
36507                 },
36508                 {
36509                     "name": "visible",
36510                     "description": "Content is not clipped, i.e., it may be rendered outside the content box."
36511                 }
36512             ],
36513             "syntax": "visible | hidden | clip | scroll | auto",
36514             "relevance": 81,
36515             "references": [
36516                 {
36517                     "name": "MDN Reference",
36518                     "url": "https://developer.mozilla.org/docs/Web/CSS/overflow-y"
36519                 }
36520             ],
36521             "description": "Specifies the handling of overflow in the vertical direction.",
36522             "restrictions": [
36523                 "enum"
36524             ]
36525         },
36526         {
36527             "name": "pad",
36528             "browsers": [
36529                 "FF33"
36530             ],
36531             "syntax": "<integer> && <symbol>",
36532             "relevance": 50,
36533             "description": "@counter-style descriptor. Specifies a “fixed-width” counter style, where representations shorter than the pad value are padded with a particular <symbol>",
36534             "restrictions": [
36535                 "integer",
36536                 "image",
36537                 "string",
36538                 "identifier"
36539             ]
36540         },
36541         {
36542             "name": "padding",
36543             "values": [],
36544             "syntax": "[ <length> | <percentage> ]{1,4}",
36545             "relevance": 96,
36546             "references": [
36547                 {
36548                     "name": "MDN Reference",
36549                     "url": "https://developer.mozilla.org/docs/Web/CSS/padding"
36550                 }
36551             ],
36552             "description": "Shorthand property to set values the thickness of the padding area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. The value may not be negative.",
36553             "restrictions": [
36554                 "length",
36555                 "percentage"
36556             ]
36557         },
36558         {
36559             "name": "padding-bottom",
36560             "syntax": "<length> | <percentage>",
36561             "relevance": 88,
36562             "references": [
36563                 {
36564                     "name": "MDN Reference",
36565                     "url": "https://developer.mozilla.org/docs/Web/CSS/padding-bottom"
36566                 }
36567             ],
36568             "description": "Shorthand property to set values the thickness of the padding area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. The value may not be negative.",
36569             "restrictions": [
36570                 "length",
36571                 "percentage"
36572             ]
36573         },
36574         {
36575             "name": "padding-block-end",
36576             "browsers": [
36577                 "E79",
36578                 "FF41",
36579                 "S12.1",
36580                 "C69",
36581                 "O56"
36582             ],
36583             "syntax": "<'padding-left'>",
36584             "relevance": 50,
36585             "references": [
36586                 {
36587                     "name": "MDN Reference",
36588                     "url": "https://developer.mozilla.org/docs/Web/CSS/padding-block-end"
36589                 }
36590             ],
36591             "description": "Logical 'padding-bottom'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
36592             "restrictions": [
36593                 "length",
36594                 "percentage"
36595             ]
36596         },
36597         {
36598             "name": "padding-block-start",
36599             "browsers": [
36600                 "E79",
36601                 "FF41",
36602                 "S12.1",
36603                 "C69",
36604                 "O56"
36605             ],
36606             "syntax": "<'padding-left'>",
36607             "relevance": 50,
36608             "references": [
36609                 {
36610                     "name": "MDN Reference",
36611                     "url": "https://developer.mozilla.org/docs/Web/CSS/padding-block-start"
36612                 }
36613             ],
36614             "description": "Logical 'padding-top'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
36615             "restrictions": [
36616                 "length",
36617                 "percentage"
36618             ]
36619         },
36620         {
36621             "name": "padding-inline-end",
36622             "browsers": [
36623                 "E79",
36624                 "FF41",
36625                 "S12.1",
36626                 "C69",
36627                 "O56"
36628             ],
36629             "syntax": "<'padding-left'>",
36630             "relevance": 51,
36631             "references": [
36632                 {
36633                     "name": "MDN Reference",
36634                     "url": "https://developer.mozilla.org/docs/Web/CSS/padding-inline-end"
36635                 }
36636             ],
36637             "description": "Logical 'padding-right'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
36638             "restrictions": [
36639                 "length",
36640                 "percentage"
36641             ]
36642         },
36643         {
36644             "name": "padding-inline-start",
36645             "browsers": [
36646                 "E79",
36647                 "FF41",
36648                 "S12.1",
36649                 "C69",
36650                 "O56"
36651             ],
36652             "syntax": "<'padding-left'>",
36653             "relevance": 52,
36654             "references": [
36655                 {
36656                     "name": "MDN Reference",
36657                     "url": "https://developer.mozilla.org/docs/Web/CSS/padding-inline-start"
36658                 }
36659             ],
36660             "description": "Logical 'padding-left'. Mapping depends on the parent element’s 'writing-mode', 'direction', and 'text-orientation'.",
36661             "restrictions": [
36662                 "length",
36663                 "percentage"
36664             ]
36665         },
36666         {
36667             "name": "padding-left",
36668             "syntax": "<length> | <percentage>",
36669             "relevance": 90,
36670             "references": [
36671                 {
36672                     "name": "MDN Reference",
36673                     "url": "https://developer.mozilla.org/docs/Web/CSS/padding-left"
36674                 }
36675             ],
36676             "description": "Shorthand property to set values the thickness of the padding area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. The value may not be negative.",
36677             "restrictions": [
36678                 "length",
36679                 "percentage"
36680             ]
36681         },
36682         {
36683             "name": "padding-right",
36684             "syntax": "<length> | <percentage>",
36685             "relevance": 88,
36686             "references": [
36687                 {
36688                     "name": "MDN Reference",
36689                     "url": "https://developer.mozilla.org/docs/Web/CSS/padding-right"
36690                 }
36691             ],
36692             "description": "Shorthand property to set values the thickness of the padding area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. The value may not be negative.",
36693             "restrictions": [
36694                 "length",
36695                 "percentage"
36696             ]
36697         },
36698         {
36699             "name": "padding-top",
36700             "syntax": "<length> | <percentage>",
36701             "relevance": 90,
36702             "references": [
36703                 {
36704                     "name": "MDN Reference",
36705                     "url": "https://developer.mozilla.org/docs/Web/CSS/padding-top"
36706                 }
36707             ],
36708             "description": "Shorthand property to set values the thickness of the padding area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. The value may not be negative.",
36709             "restrictions": [
36710                 "length",
36711                 "percentage"
36712             ]
36713         },
36714         {
36715             "name": "page-break-after",
36716             "values": [
36717                 {
36718                     "name": "always",
36719                     "description": "Always force a page break after the generated box."
36720                 },
36721                 {
36722                     "name": "auto",
36723                     "description": "Neither force nor forbid a page break after generated box."
36724                 },
36725                 {
36726                     "name": "avoid",
36727                     "description": "Avoid a page break after the generated box."
36728                 },
36729                 {
36730                     "name": "left",
36731                     "description": "Force one or two page breaks after the generated box so that the next page is formatted as a left page."
36732                 },
36733                 {
36734                     "name": "right",
36735                     "description": "Force one or two page breaks after the generated box so that the next page is formatted as a right page."
36736                 }
36737             ],
36738             "syntax": "auto | always | avoid | left | right | recto | verso",
36739             "relevance": 52,
36740             "references": [
36741                 {
36742                     "name": "MDN Reference",
36743                     "url": "https://developer.mozilla.org/docs/Web/CSS/page-break-after"
36744                 }
36745             ],
36746             "description": "Defines rules for page breaks after an element.",
36747             "restrictions": [
36748                 "enum"
36749             ]
36750         },
36751         {
36752             "name": "page-break-before",
36753             "values": [
36754                 {
36755                     "name": "always",
36756                     "description": "Always force a page break before the generated box."
36757                 },
36758                 {
36759                     "name": "auto",
36760                     "description": "Neither force nor forbid a page break before the generated box."
36761                 },
36762                 {
36763                     "name": "avoid",
36764                     "description": "Avoid a page break before the generated box."
36765                 },
36766                 {
36767                     "name": "left",
36768                     "description": "Force one or two page breaks before the generated box so that the next page is formatted as a left page."
36769                 },
36770                 {
36771                     "name": "right",
36772                     "description": "Force one or two page breaks before the generated box so that the next page is formatted as a right page."
36773                 }
36774             ],
36775             "syntax": "auto | always | avoid | left | right | recto | verso",
36776             "relevance": 50,
36777             "references": [
36778                 {
36779                     "name": "MDN Reference",
36780                     "url": "https://developer.mozilla.org/docs/Web/CSS/page-break-before"
36781                 }
36782             ],
36783             "description": "Defines rules for page breaks before an element.",
36784             "restrictions": [
36785                 "enum"
36786             ]
36787         },
36788         {
36789             "name": "page-break-inside",
36790             "values": [
36791                 {
36792                     "name": "auto",
36793                     "description": "Neither force nor forbid a page break inside the generated box."
36794                 },
36795                 {
36796                     "name": "avoid",
36797                     "description": "Avoid a page break inside the generated box."
36798                 }
36799             ],
36800             "syntax": "auto | avoid",
36801             "relevance": 52,
36802             "references": [
36803                 {
36804                     "name": "MDN Reference",
36805                     "url": "https://developer.mozilla.org/docs/Web/CSS/page-break-inside"
36806                 }
36807             ],
36808             "description": "Defines rules for page breaks inside an element.",
36809             "restrictions": [
36810                 "enum"
36811             ]
36812         },
36813         {
36814             "name": "paint-order",
36815             "browsers": [
36816                 "E17",
36817                 "FF60",
36818                 "S8",
36819                 "C35",
36820                 "O22"
36821             ],
36822             "values": [
36823                 {
36824                     "name": "fill"
36825                 },
36826                 {
36827                     "name": "markers"
36828                 },
36829                 {
36830                     "name": "normal",
36831                     "description": "The element is painted with the standard order of painting operations: the 'fill' is painted first, then its 'stroke' and finally its markers."
36832                 },
36833                 {
36834                     "name": "stroke"
36835                 }
36836             ],
36837             "syntax": "normal | [ fill || stroke || markers ]",
36838             "relevance": 50,
36839             "references": [
36840                 {
36841                     "name": "MDN Reference",
36842                     "url": "https://developer.mozilla.org/docs/Web/CSS/paint-order"
36843                 }
36844             ],
36845             "description": "Controls the order that the three paint operations that shapes and text are rendered with: their fill, their stroke and any markers they might have.",
36846             "restrictions": [
36847                 "enum"
36848             ]
36849         },
36850         {
36851             "name": "perspective",
36852             "values": [
36853                 {
36854                     "name": "none",
36855                     "description": "No perspective transform is applied."
36856                 }
36857             ],
36858             "syntax": "none | <length>",
36859             "relevance": 55,
36860             "references": [
36861                 {
36862                     "name": "MDN Reference",
36863                     "url": "https://developer.mozilla.org/docs/Web/CSS/perspective"
36864                 }
36865             ],
36866             "description": "Applies the same transform as the perspective(<number>) transform function, except that it applies only to the positioned or transformed children of the element, not to the transform on the element itself.",
36867             "restrictions": [
36868                 "length",
36869                 "enum"
36870             ]
36871         },
36872         {
36873             "name": "perspective-origin",
36874             "syntax": "<position>",
36875             "relevance": 51,
36876             "references": [
36877                 {
36878                     "name": "MDN Reference",
36879                     "url": "https://developer.mozilla.org/docs/Web/CSS/perspective-origin"
36880                 }
36881             ],
36882             "description": "Establishes the origin for the perspective property. It effectively sets the X and Y position at which the viewer appears to be looking at the children of the element.",
36883             "restrictions": [
36884                 "position",
36885                 "percentage",
36886                 "length"
36887             ]
36888         },
36889         {
36890             "name": "pointer-events",
36891             "values": [
36892                 {
36893                     "name": "all",
36894                     "description": "The given element can be the target element for pointer events whenever the pointer is over either the interior or the perimeter of the element."
36895                 },
36896                 {
36897                     "name": "fill",
36898                     "description": "The given element can be the target element for pointer events whenever the pointer is over the interior of the element."
36899                 },
36900                 {
36901                     "name": "none",
36902                     "description": "The given element does not receive pointer events."
36903                 },
36904                 {
36905                     "name": "painted",
36906                     "description": "The given element can be the target element for pointer events when the pointer is over a \"painted\" area. "
36907                 },
36908                 {
36909                     "name": "stroke",
36910                     "description": "The given element can be the target element for pointer events whenever the pointer is over the perimeter of the element."
36911                 },
36912                 {
36913                     "name": "visible",
36914                     "description": "The given element can be the target element for pointer events when the ‘visibility’ property is set to visible and the pointer is over either the interior or the perimete of the element."
36915                 },
36916                 {
36917                     "name": "visibleFill",
36918                     "description": "The given element can be the target element for pointer events when the ‘visibility’ property is set to visible and when the pointer is over the interior of the element."
36919                 },
36920                 {
36921                     "name": "visiblePainted",
36922                     "description": "The given element can be the target element for pointer events when the ‘visibility’ property is set to visible and when the pointer is over a ‘painted’ area."
36923                 },
36924                 {
36925                     "name": "visibleStroke",
36926                     "description": "The given element can be the target element for pointer events when the ‘visibility’ property is set to visible and when the pointer is over the perimeter of the element."
36927                 }
36928             ],
36929             "syntax": "auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit",
36930             "relevance": 80,
36931             "references": [
36932                 {
36933                     "name": "MDN Reference",
36934                     "url": "https://developer.mozilla.org/docs/Web/CSS/pointer-events"
36935                 }
36936             ],
36937             "description": "Specifies under what circumstances a given element can be the target element for a pointer event.",
36938             "restrictions": [
36939                 "enum"
36940             ]
36941         },
36942         {
36943             "name": "position",
36944             "values": [
36945                 {
36946                     "name": "absolute",
36947                     "description": "The box's position (and possibly size) is specified with the 'top', 'right', 'bottom', and 'left' properties. These properties specify offsets with respect to the box's 'containing block'."
36948                 },
36949                 {
36950                     "name": "fixed",
36951                     "description": "The box's position is calculated according to the 'absolute' model, but in addition, the box is fixed with respect to some reference. As with the 'absolute' model, the box's margins do not collapse with any other margins."
36952                 },
36953                 {
36954                     "name": "-ms-page",
36955                     "description": "The box's position is calculated according to the 'absolute' model."
36956                 },
36957                 {
36958                     "name": "relative",
36959                     "description": "The box's position is calculated according to the normal flow (this is called the position in normal flow). Then the box is offset relative to its normal position."
36960                 },
36961                 {
36962                     "name": "static",
36963                     "description": "The box is a normal box, laid out according to the normal flow. The 'top', 'right', 'bottom', and 'left' properties do not apply."
36964                 },
36965                 {
36966                     "name": "sticky",
36967                     "description": "The box's position is calculated according to the normal flow. Then the box is offset relative to its flow root and containing block and in all cases, including table elements, does not affect the position of any following boxes."
36968                 },
36969                 {
36970                     "name": "-webkit-sticky",
36971                     "description": "The box's position is calculated according to the normal flow. Then the box is offset relative to its flow root and containing block and in all cases, including table elements, does not affect the position of any following boxes."
36972                 }
36973             ],
36974             "syntax": "static | relative | absolute | sticky | fixed",
36975             "relevance": 96,
36976             "references": [
36977                 {
36978                     "name": "MDN Reference",
36979                     "url": "https://developer.mozilla.org/docs/Web/CSS/position"
36980                 }
36981             ],
36982             "description": "The position CSS property sets how an element is positioned in a document. The top, right, bottom, and left properties determine the final location of positioned elements.",
36983             "restrictions": [
36984                 "enum"
36985             ]
36986         },
36987         {
36988             "name": "prefix",
36989             "browsers": [
36990                 "FF33"
36991             ],
36992             "syntax": "<symbol>",
36993             "relevance": 50,
36994             "description": "@counter-style descriptor. Specifies a <symbol> that is prepended to the marker representation.",
36995             "restrictions": [
36996                 "image",
36997                 "string",
36998                 "identifier"
36999             ]
37000         },
37001         {
37002             "name": "quotes",
37003             "values": [
37004                 {
37005                     "name": "none",
37006                     "description": "The 'open-quote' and 'close-quote' values of the 'content' property produce no quotations marks, as if they were 'no-open-quote' and 'no-close-quote' respectively."
37007                 }
37008             ],
37009             "syntax": "none | auto | [ <string> <string> ]+",
37010             "relevance": 53,
37011             "references": [
37012                 {
37013                     "name": "MDN Reference",
37014                     "url": "https://developer.mozilla.org/docs/Web/CSS/quotes"
37015                 }
37016             ],
37017             "description": "Specifies quotation marks for any number of embedded quotations.",
37018             "restrictions": [
37019                 "string"
37020             ]
37021         },
37022         {
37023             "name": "range",
37024             "browsers": [
37025                 "FF33"
37026             ],
37027             "values": [
37028                 {
37029                     "name": "auto",
37030                     "description": "The range depends on the counter system."
37031                 },
37032                 {
37033                     "name": "infinite",
37034                     "description": "If used as the first value in a range, it represents negative infinity; if used as the second value, it represents positive infinity."
37035                 }
37036             ],
37037             "syntax": "[ [ <integer> | infinite ]{2} ]# | auto",
37038             "relevance": 50,
37039             "description": "@counter-style descriptor. Defines the ranges over which the counter style is defined.",
37040             "restrictions": [
37041                 "integer",
37042                 "enum"
37043             ]
37044         },
37045         {
37046             "name": "resize",
37047             "browsers": [
37048                 "E79",
37049                 "FF4",
37050                 "S3",
37051                 "C1",
37052                 "O12.1"
37053             ],
37054             "values": [
37055                 {
37056                     "name": "both",
37057                     "description": "The UA presents a bidirectional resizing mechanism to allow the user to adjust both the height and the width of the element."
37058                 },
37059                 {
37060                     "name": "horizontal",
37061                     "description": "The UA presents a unidirectional horizontal resizing mechanism to allow the user to adjust only the width of the element."
37062                 },
37063                 {
37064                     "name": "none",
37065                     "description": "The UA does not present a resizing mechanism on the element, and the user is given no direct manipulation mechanism to resize the element."
37066                 },
37067                 {
37068                     "name": "vertical",
37069                     "description": "The UA presents a unidirectional vertical resizing mechanism to allow the user to adjust only the height of the element."
37070                 }
37071             ],
37072             "syntax": "none | both | horizontal | vertical | block | inline",
37073             "relevance": 60,
37074             "references": [
37075                 {
37076                     "name": "MDN Reference",
37077                     "url": "https://developer.mozilla.org/docs/Web/CSS/resize"
37078                 }
37079             ],
37080             "description": "Specifies whether or not an element is resizable by the user, and if so, along which axis/axes.",
37081             "restrictions": [
37082                 "enum"
37083             ]
37084         },
37085         {
37086             "name": "right",
37087             "values": [
37088                 {
37089                     "name": "auto",
37090                     "description": "For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well"
37091                 }
37092             ],
37093             "syntax": "<length> | <percentage> | auto",
37094             "relevance": 90,
37095             "references": [
37096                 {
37097                     "name": "MDN Reference",
37098                     "url": "https://developer.mozilla.org/docs/Web/CSS/right"
37099                 }
37100             ],
37101             "description": "Specifies how far an absolutely positioned box's right margin edge is offset to the left of the right edge of the box's 'containing block'.",
37102             "restrictions": [
37103                 "length",
37104                 "percentage"
37105             ]
37106         },
37107         {
37108             "name": "ruby-align",
37109             "browsers": [
37110                 "FF38"
37111             ],
37112             "values": [
37113                 {
37114                     "name": "auto",
37115                     "browsers": [
37116                         "FF38"
37117                     ],
37118                     "description": "The user agent determines how the ruby contents are aligned. This is the initial value."
37119                 },
37120                 {
37121                     "name": "center",
37122                     "description": "The ruby content is centered within its box."
37123                 },
37124                 {
37125                     "name": "distribute-letter",
37126                     "browsers": [
37127                         "FF38"
37128                     ],
37129                     "description": "If the width of the ruby text is smaller than that of the base, then the ruby text contents are evenly distributed across the width of the base, with the first and last ruby text glyphs lining up with the corresponding first and last base glyphs. If the width of the ruby text is at least the width of the base, then the letters of the base are evenly distributed across the width of the ruby text."
37130                 },
37131                 {
37132                     "name": "distribute-space",
37133                     "browsers": [
37134                         "FF38"
37135                     ],
37136                     "description": "If the width of the ruby text is smaller than that of the base, then the ruby text contents are evenly distributed across the width of the base, with a certain amount of white space preceding the first and following the last character in the ruby text. That amount of white space is normally equal to half the amount of inter-character space of the ruby text."
37137                 },
37138                 {
37139                     "name": "left",
37140                     "description": "The ruby text content is aligned with the start edge of the base."
37141                 },
37142                 {
37143                     "name": "line-edge",
37144                     "browsers": [
37145                         "FF38"
37146                     ],
37147                     "description": "If the ruby text is not adjacent to a line edge, it is aligned as in 'auto'. If it is adjacent to a line edge, then it is still aligned as in auto, but the side of the ruby text that touches the end of the line is lined up with the corresponding edge of the base."
37148                 },
37149                 {
37150                     "name": "right",
37151                     "browsers": [
37152                         "FF38"
37153                     ],
37154                     "description": "The ruby text content is aligned with the end edge of the base."
37155                 },
37156                 {
37157                     "name": "start",
37158                     "browsers": [
37159                         "FF38"
37160                     ],
37161                     "description": "The ruby text content is aligned with the start edge of the base."
37162                 },
37163                 {
37164                     "name": "space-between",
37165                     "browsers": [
37166                         "FF38"
37167                     ],
37168                     "description": "The ruby content expands as defined for normal text justification (as defined by 'text-justify'),"
37169                 },
37170                 {
37171                     "name": "space-around",
37172                     "browsers": [
37173                         "FF38"
37174                     ],
37175                     "description": "As for 'space-between' except that there exists an extra justification opportunities whose space is distributed half before and half after the ruby content."
37176                 }
37177             ],
37178             "status": "experimental",
37179             "syntax": "start | center | space-between | space-around",
37180             "relevance": 50,
37181             "references": [
37182                 {
37183                     "name": "MDN Reference",
37184                     "url": "https://developer.mozilla.org/docs/Web/CSS/ruby-align"
37185                 }
37186             ],
37187             "description": "Specifies how text is distributed within the various ruby boxes when their contents do not exactly fill their respective boxes.",
37188             "restrictions": [
37189                 "enum"
37190             ]
37191         },
37192         {
37193             "name": "ruby-overhang",
37194             "browsers": [
37195                 "FF10",
37196                 "IE5"
37197             ],
37198             "values": [
37199                 {
37200                     "name": "auto",
37201                     "description": "The ruby text can overhang text adjacent to the base on either side. This is the initial value."
37202                 },
37203                 {
37204                     "name": "end",
37205                     "description": "The ruby text can overhang the text that follows it."
37206                 },
37207                 {
37208                     "name": "none",
37209                     "description": "The ruby text cannot overhang any text adjacent to its base, only its own base."
37210                 },
37211                 {
37212                     "name": "start",
37213                     "description": "The ruby text can overhang the text that precedes it."
37214                 }
37215             ],
37216             "relevance": 50,
37217             "description": "Determines whether, and on which side, ruby text is allowed to partially overhang any adjacent text in addition to its own base, when the ruby text is wider than the ruby base.",
37218             "restrictions": [
37219                 "enum"
37220             ]
37221         },
37222         {
37223             "name": "ruby-position",
37224             "browsers": [
37225                 "E12",
37226                 "FF38"
37227             ],
37228             "values": [
37229                 {
37230                     "name": "after",
37231                     "description": "The ruby text appears after the base. This is a relatively rare setting used in ideographic East Asian writing systems, most easily found in educational text."
37232                 },
37233                 {
37234                     "name": "before",
37235                     "description": "The ruby text appears before the base. This is the most common setting used in ideographic East Asian writing systems."
37236                 },
37237                 {
37238                     "name": "inline"
37239                 },
37240                 {
37241                     "name": "right",
37242                     "description": "The ruby text appears on the right of the base. Unlike 'before' and 'after', this value is not relative to the text flow direction."
37243                 }
37244             ],
37245             "status": "experimental",
37246             "syntax": "over | under | inter-character",
37247             "relevance": 50,
37248             "references": [
37249                 {
37250                     "name": "MDN Reference",
37251                     "url": "https://developer.mozilla.org/docs/Web/CSS/ruby-position"
37252                 }
37253             ],
37254             "description": "Used by the parent of elements with display: ruby-text to control the position of the ruby text with respect to its base.",
37255             "restrictions": [
37256                 "enum"
37257             ]
37258         },
37259         {
37260             "name": "ruby-span",
37261             "browsers": [
37262                 "FF10"
37263             ],
37264             "values": [
37265                 {
37266                     "name": "attr(x)",
37267                     "description": "The value of attribute 'x' is a string value. The string value is evaluated as a <number> to determine the number of ruby base elements to be spanned by the annotation element."
37268                 },
37269                 {
37270                     "name": "none",
37271                     "description": "No spanning. The computed value is '1'."
37272                 }
37273             ],
37274             "relevance": 50,
37275             "description": "Determines whether, and on which side, ruby text is allowed to partially overhang any adjacent text in addition to its own base, when the ruby text is wider than the ruby base.",
37276             "restrictions": [
37277                 "enum"
37278             ]
37279         },
37280         {
37281             "name": "scrollbar-3dlight-color",
37282             "browsers": [
37283                 "IE5"
37284             ],
37285             "relevance": 50,
37286             "references": [
37287                 {
37288                     "name": "MDN Reference",
37289                     "url": "https://developer.mozilla.org/docs/Web/CSS/scrollbar-3dlight-color"
37290                 }
37291             ],
37292             "description": "Determines the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.",
37293             "restrictions": [
37294                 "color"
37295             ]
37296         },
37297         {
37298             "name": "scrollbar-arrow-color",
37299             "browsers": [
37300                 "IE5"
37301             ],
37302             "relevance": 50,
37303             "references": [
37304                 {
37305                     "name": "MDN Reference",
37306                     "url": "https://developer.mozilla.org/docs/Web/CSS/scrollbar-arrow-color"
37307                 }
37308             ],
37309             "description": "Determines the color of the arrow elements of a scroll arrow.",
37310             "restrictions": [
37311                 "color"
37312             ]
37313         },
37314         {
37315             "name": "scrollbar-base-color",
37316             "browsers": [
37317                 "IE5"
37318             ],
37319             "relevance": 50,
37320             "references": [
37321                 {
37322                     "name": "MDN Reference",
37323                     "url": "https://developer.mozilla.org/docs/Web/CSS/scrollbar-base-color"
37324                 }
37325             ],
37326             "description": "Determines the color of the main elements of a scroll bar, which include the scroll box, track, and scroll arrows.",
37327             "restrictions": [
37328                 "color"
37329             ]
37330         },
37331         {
37332             "name": "scrollbar-darkshadow-color",
37333             "browsers": [
37334                 "IE5"
37335             ],
37336             "relevance": 50,
37337             "references": [
37338                 {
37339                     "name": "MDN Reference",
37340                     "url": "https://developer.mozilla.org/docs/Web/CSS/scrollbar-darkshadow-color"
37341                 }
37342             ],
37343             "description": "Determines the color of the gutter of a scroll bar.",
37344             "restrictions": [
37345                 "color"
37346             ]
37347         },
37348         {
37349             "name": "scrollbar-face-color",
37350             "browsers": [
37351                 "IE5"
37352             ],
37353             "relevance": 50,
37354             "references": [
37355                 {
37356                     "name": "MDN Reference",
37357                     "url": "https://developer.mozilla.org/docs/Web/CSS/scrollbar-face-color"
37358                 }
37359             ],
37360             "description": "Determines the color of the scroll box and scroll arrows of a scroll bar.",
37361             "restrictions": [
37362                 "color"
37363             ]
37364         },
37365         {
37366             "name": "scrollbar-highlight-color",
37367             "browsers": [
37368                 "IE5"
37369             ],
37370             "relevance": 50,
37371             "references": [
37372                 {
37373                     "name": "MDN Reference",
37374                     "url": "https://developer.mozilla.org/docs/Web/CSS/scrollbar-highlight-color"
37375                 }
37376             ],
37377             "description": "Determines the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.",
37378             "restrictions": [
37379                 "color"
37380             ]
37381         },
37382         {
37383             "name": "scrollbar-shadow-color",
37384             "browsers": [
37385                 "IE5"
37386             ],
37387             "relevance": 50,
37388             "references": [
37389                 {
37390                     "name": "MDN Reference",
37391                     "url": "https://developer.mozilla.org/docs/Web/CSS/scrollbar-shadow-color"
37392                 }
37393             ],
37394             "description": "Determines the color of the bottom and right edges of the scroll box and scroll arrows of a scroll bar.",
37395             "restrictions": [
37396                 "color"
37397             ]
37398         },
37399         {
37400             "name": "scrollbar-track-color",
37401             "browsers": [
37402                 "IE6"
37403             ],
37404             "relevance": 50,
37405             "description": "Determines the color of the track element of a scroll bar.",
37406             "restrictions": [
37407                 "color"
37408             ]
37409         },
37410         {
37411             "name": "scroll-behavior",
37412             "browsers": [
37413                 "E79",
37414                 "FF36",
37415                 "C61",
37416                 "O48"
37417             ],
37418             "values": [
37419                 {
37420                     "name": "auto",
37421                     "description": "Scrolls in an instant fashion."
37422                 },
37423                 {
37424                     "name": "smooth",
37425                     "description": "Scrolls in a smooth fashion using a user-agent-defined timing function and time period."
37426                 }
37427             ],
37428             "syntax": "auto | smooth",
37429             "relevance": 51,
37430             "references": [
37431                 {
37432                     "name": "MDN Reference",
37433                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-behavior"
37434                 }
37435             ],
37436             "description": "Specifies the scrolling behavior for a scrolling box, when scrolling happens due to navigation or CSSOM scrolling APIs.",
37437             "restrictions": [
37438                 "enum"
37439             ]
37440         },
37441         {
37442             "name": "scroll-snap-coordinate",
37443             "browsers": [
37444                 "FF39"
37445             ],
37446             "values": [
37447                 {
37448                     "name": "none",
37449                     "description": "Specifies that this element does not contribute a snap point."
37450                 }
37451             ],
37452             "status": "obsolete",
37453             "syntax": "none | <position>#",
37454             "relevance": 0,
37455             "references": [
37456                 {
37457                     "name": "MDN Reference",
37458                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-snap-coordinate"
37459                 }
37460             ],
37461             "description": "Defines the x and y coordinate within the element which will align with the nearest ancestor scroll container’s snap-destination for the respective axis.",
37462             "restrictions": [
37463                 "position",
37464                 "length",
37465                 "percentage",
37466                 "enum"
37467             ]
37468         },
37469         {
37470             "name": "scroll-snap-destination",
37471             "browsers": [
37472                 "FF39"
37473             ],
37474             "status": "obsolete",
37475             "syntax": "<position>",
37476             "relevance": 0,
37477             "references": [
37478                 {
37479                     "name": "MDN Reference",
37480                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-snap-destination"
37481                 }
37482             ],
37483             "description": "Define the x and y coordinate within the scroll container’s visual viewport which element snap points will align with.",
37484             "restrictions": [
37485                 "position",
37486                 "length",
37487                 "percentage"
37488             ]
37489         },
37490         {
37491             "name": "scroll-snap-points-x",
37492             "browsers": [
37493                 "FF39",
37494                 "S9"
37495             ],
37496             "values": [
37497                 {
37498                     "name": "none",
37499                     "description": "No snap points are defined by this scroll container."
37500                 },
37501                 {
37502                     "name": "repeat()",
37503                     "description": "Defines an interval at which snap points are defined, starting from the container’s relevant start edge."
37504                 }
37505             ],
37506             "status": "obsolete",
37507             "syntax": "none | repeat( <length-percentage> )",
37508             "relevance": 0,
37509             "references": [
37510                 {
37511                     "name": "MDN Reference",
37512                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-snap-points-x"
37513                 }
37514             ],
37515             "description": "Defines the positioning of snap points along the x axis of the scroll container it is applied to.",
37516             "restrictions": [
37517                 "enum"
37518             ]
37519         },
37520         {
37521             "name": "scroll-snap-points-y",
37522             "browsers": [
37523                 "FF39",
37524                 "S9"
37525             ],
37526             "values": [
37527                 {
37528                     "name": "none",
37529                     "description": "No snap points are defined by this scroll container."
37530                 },
37531                 {
37532                     "name": "repeat()",
37533                     "description": "Defines an interval at which snap points are defined, starting from the container’s relevant start edge."
37534                 }
37535             ],
37536             "status": "obsolete",
37537             "syntax": "none | repeat( <length-percentage> )",
37538             "relevance": 0,
37539             "references": [
37540                 {
37541                     "name": "MDN Reference",
37542                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-snap-points-y"
37543                 }
37544             ],
37545             "description": "Defines the positioning of snap points along the y axis of the scroll container it is applied to.",
37546             "restrictions": [
37547                 "enum"
37548             ]
37549         },
37550         {
37551             "name": "scroll-snap-type",
37552             "values": [
37553                 {
37554                     "name": "none",
37555                     "description": "The visual viewport of this scroll container must ignore snap points, if any, when scrolled."
37556                 },
37557                 {
37558                     "name": "mandatory",
37559                     "description": "The visual viewport of this scroll container is guaranteed to rest on a snap point when there are no active scrolling operations."
37560                 },
37561                 {
37562                     "name": "proximity",
37563                     "description": "The visual viewport of this scroll container may come to rest on a snap point at the termination of a scroll at the discretion of the UA given the parameters of the scroll."
37564                 }
37565             ],
37566             "syntax": "none | [ x | y | block | inline | both ] [ mandatory | proximity ]?",
37567             "relevance": 50,
37568             "references": [
37569                 {
37570                     "name": "MDN Reference",
37571                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type"
37572                 }
37573             ],
37574             "description": "Defines how strictly snap points are enforced on the scroll container.",
37575             "restrictions": [
37576                 "enum"
37577             ]
37578         },
37579         {
37580             "name": "shape-image-threshold",
37581             "browsers": [
37582                 "E79",
37583                 "FF62",
37584                 "S10.1",
37585                 "C37",
37586                 "O24"
37587             ],
37588             "syntax": "<alpha-value>",
37589             "relevance": 50,
37590             "references": [
37591                 {
37592                     "name": "MDN Reference",
37593                     "url": "https://developer.mozilla.org/docs/Web/CSS/shape-image-threshold"
37594                 }
37595             ],
37596             "description": "Defines the alpha channel threshold used to extract the shape using an image. A value of 0.5 means that the shape will enclose all the pixels that are more than 50% opaque.",
37597             "restrictions": [
37598                 "number"
37599             ]
37600         },
37601         {
37602             "name": "shape-margin",
37603             "browsers": [
37604                 "E79",
37605                 "FF62",
37606                 "S10.1",
37607                 "C37",
37608                 "O24"
37609             ],
37610             "syntax": "<length-percentage>",
37611             "relevance": 50,
37612             "references": [
37613                 {
37614                     "name": "MDN Reference",
37615                     "url": "https://developer.mozilla.org/docs/Web/CSS/shape-margin"
37616                 }
37617             ],
37618             "description": "Adds a margin to a 'shape-outside'. This defines a new shape that is the smallest contour that includes all the points that are the 'shape-margin' distance outward in the perpendicular direction from a point on the underlying shape.",
37619             "restrictions": [
37620                 "url",
37621                 "length",
37622                 "percentage"
37623             ]
37624         },
37625         {
37626             "name": "shape-outside",
37627             "browsers": [
37628                 "E79",
37629                 "FF62",
37630                 "S10.1",
37631                 "C37",
37632                 "O24"
37633             ],
37634             "values": [
37635                 {
37636                     "name": "margin-box",
37637                     "description": "The background is painted within (clipped to) the margin box."
37638                 },
37639                 {
37640                     "name": "none",
37641                     "description": "The float area is unaffected."
37642                 }
37643             ],
37644             "syntax": "none | <shape-box> || <basic-shape> | <image>",
37645             "relevance": 50,
37646             "references": [
37647                 {
37648                     "name": "MDN Reference",
37649                     "url": "https://developer.mozilla.org/docs/Web/CSS/shape-outside"
37650                 }
37651             ],
37652             "description": "Specifies an orthogonal rotation to be applied to an image before it is laid out.",
37653             "restrictions": [
37654                 "image",
37655                 "box",
37656                 "shape",
37657                 "enum"
37658             ]
37659         },
37660         {
37661             "name": "shape-rendering",
37662             "values": [
37663                 {
37664                     "name": "auto",
37665                     "description": "Suppresses aural rendering."
37666                 },
37667                 {
37668                     "name": "crispEdges",
37669                     "description": "Emphasize the contrast between clean edges of artwork over rendering speed and geometric precision."
37670                 },
37671                 {
37672                     "name": "geometricPrecision",
37673                     "description": "Emphasize geometric precision over speed and crisp edges."
37674                 },
37675                 {
37676                     "name": "optimizeSpeed",
37677                     "description": "Emphasize rendering speed over geometric precision and crisp edges."
37678                 }
37679             ],
37680             "relevance": 50,
37681             "description": "Provides hints about what tradeoffs to make as it renders vector graphics elements such as <path> elements and basic shapes such as circles and rectangles.",
37682             "restrictions": [
37683                 "enum"
37684             ]
37685         },
37686         {
37687             "name": "size",
37688             "browsers": [
37689                 "C",
37690                 "O8"
37691             ],
37692             "syntax": "<length>{1,2} | auto | [ <page-size> || [ portrait | landscape ] ]",
37693             "relevance": 52,
37694             "description": "The size CSS at-rule descriptor, used with the @page at-rule, defines the size and orientation of the box which is used to represent a page. Most of the time, this size corresponds to the target size of the printed page if applicable.",
37695             "restrictions": [
37696                 "length"
37697             ]
37698         },
37699         {
37700             "name": "src",
37701             "values": [
37702                 {
37703                     "name": "url()",
37704                     "description": "Reference font by URL"
37705                 },
37706                 {
37707                     "name": "format()",
37708                     "description": "Optional hint describing the format of the font resource."
37709                 },
37710                 {
37711                     "name": "local()",
37712                     "description": "Format-specific string that identifies a locally available copy of a given font."
37713                 }
37714             ],
37715             "syntax": "[ <url> [ format( <string># ) ]? | local( <family-name> ) ]#",
37716             "relevance": 67,
37717             "description": "@font-face descriptor. Specifies the resource containing font data. It is required, whether the font is downloadable or locally installed.",
37718             "restrictions": [
37719                 "enum",
37720                 "url",
37721                 "identifier"
37722             ]
37723         },
37724         {
37725             "name": "stop-color",
37726             "relevance": 51,
37727             "description": "Indicates what color to use at that gradient stop.",
37728             "restrictions": [
37729                 "color"
37730             ]
37731         },
37732         {
37733             "name": "stop-opacity",
37734             "relevance": 50,
37735             "description": "Defines the opacity of a given gradient stop.",
37736             "restrictions": [
37737                 "number(0-1)"
37738             ]
37739         },
37740         {
37741             "name": "stroke",
37742             "values": [
37743                 {
37744                     "name": "url()",
37745                     "description": "A URL reference to a paint server element, which is an element that defines a paint server: ‘hatch’, ‘linearGradient’, ‘mesh’, ‘pattern’, ‘radialGradient’ and ‘solidcolor’."
37746                 },
37747                 {
37748                     "name": "none",
37749                     "description": "No paint is applied in this layer."
37750                 }
37751             ],
37752             "relevance": 63,
37753             "description": "Paints along the outline of the given graphical element.",
37754             "restrictions": [
37755                 "color",
37756                 "enum",
37757                 "url"
37758             ]
37759         },
37760         {
37761             "name": "stroke-dasharray",
37762             "values": [
37763                 {
37764                     "name": "none",
37765                     "description": "Indicates that no dashing is used."
37766                 }
37767             ],
37768             "relevance": 58,
37769             "description": "Controls the pattern of dashes and gaps used to stroke paths.",
37770             "restrictions": [
37771                 "length",
37772                 "percentage",
37773                 "number",
37774                 "enum"
37775             ]
37776         },
37777         {
37778             "name": "stroke-dashoffset",
37779             "relevance": 58,
37780             "description": "Specifies the distance into the dash pattern to start the dash.",
37781             "restrictions": [
37782                 "percentage",
37783                 "length"
37784             ]
37785         },
37786         {
37787             "name": "stroke-linecap",
37788             "values": [
37789                 {
37790                     "name": "butt",
37791                     "description": "Indicates that the stroke for each subpath does not extend beyond its two endpoints."
37792                 },
37793                 {
37794                     "name": "round",
37795                     "description": "Indicates that at each end of each subpath, the shape representing the stroke will be extended by a half circle with a radius equal to the stroke width."
37796                 },
37797                 {
37798                     "name": "square",
37799                     "description": "Indicates that at the end of each subpath, the shape representing the stroke will be extended by a rectangle with the same width as the stroke width and whose length is half of the stroke width."
37800                 }
37801             ],
37802             "relevance": 53,
37803             "description": "Specifies the shape to be used at the end of open subpaths when they are stroked.",
37804             "restrictions": [
37805                 "enum"
37806             ]
37807         },
37808         {
37809             "name": "stroke-linejoin",
37810             "values": [
37811                 {
37812                     "name": "bevel",
37813                     "description": "Indicates that a bevelled corner is to be used to join path segments."
37814                 },
37815                 {
37816                     "name": "miter",
37817                     "description": "Indicates that a sharp corner is to be used to join path segments."
37818                 },
37819                 {
37820                     "name": "round",
37821                     "description": "Indicates that a round corner is to be used to join path segments."
37822                 }
37823             ],
37824             "relevance": 50,
37825             "description": "Specifies the shape to be used at the corners of paths or basic shapes when they are stroked.",
37826             "restrictions": [
37827                 "enum"
37828             ]
37829         },
37830         {
37831             "name": "stroke-miterlimit",
37832             "relevance": 50,
37833             "description": "When two line segments meet at a sharp angle and miter joins have been specified for 'stroke-linejoin', it is possible for the miter to extend far beyond the thickness of the line stroking the path.",
37834             "restrictions": [
37835                 "number"
37836             ]
37837         },
37838         {
37839             "name": "stroke-opacity",
37840             "relevance": 51,
37841             "description": "Specifies the opacity of the painting operation used to stroke the current object.",
37842             "restrictions": [
37843                 "number(0-1)"
37844             ]
37845         },
37846         {
37847             "name": "stroke-width",
37848             "relevance": 60,
37849             "description": "Specifies the width of the stroke on the current object.",
37850             "restrictions": [
37851                 "percentage",
37852                 "length"
37853             ]
37854         },
37855         {
37856             "name": "suffix",
37857             "browsers": [
37858                 "FF33"
37859             ],
37860             "syntax": "<symbol>",
37861             "relevance": 50,
37862             "description": "@counter-style descriptor. Specifies a <symbol> that is appended to the marker representation.",
37863             "restrictions": [
37864                 "image",
37865                 "string",
37866                 "identifier"
37867             ]
37868         },
37869         {
37870             "name": "system",
37871             "browsers": [
37872                 "FF33"
37873             ],
37874             "values": [
37875                 {
37876                     "name": "additive",
37877                     "description": "Represents “sign-value” numbering systems, which, rather than using reusing digits in different positions to change their value, define additional digits with much larger values, so that the value of the number can be obtained by adding all the digits together."
37878                 },
37879                 {
37880                     "name": "alphabetic",
37881                     "description": "Interprets the list of counter symbols as digits to an alphabetic numbering system, similar to the default lower-alpha counter style, which wraps from \"a\", \"b\", \"c\", to \"aa\", \"ab\", \"ac\"."
37882                 },
37883                 {
37884                     "name": "cyclic",
37885                     "description": "Cycles repeatedly through its provided symbols, looping back to the beginning when it reaches the end of the list."
37886                 },
37887                 {
37888                     "name": "extends",
37889                     "description": "Use the algorithm of another counter style, but alter other aspects."
37890                 },
37891                 {
37892                     "name": "fixed",
37893                     "description": "Runs through its list of counter symbols once, then falls back."
37894                 },
37895                 {
37896                     "name": "numeric",
37897                     "description": "interprets the list of counter symbols as digits to a \"place-value\" numbering system, similar to the default 'decimal' counter style."
37898                 },
37899                 {
37900                     "name": "symbolic",
37901                     "description": "Cycles repeatedly through its provided symbols, doubling, tripling, etc. the symbols on each successive pass through the list."
37902                 }
37903             ],
37904             "syntax": "cyclic | numeric | alphabetic | symbolic | additive | [ fixed <integer>? ] | [ extends <counter-style-name> ]",
37905             "relevance": 50,
37906             "description": "@counter-style descriptor. Specifies which algorithm will be used to construct the counter’s representation based on the counter value.",
37907             "restrictions": [
37908                 "enum",
37909                 "integer"
37910             ]
37911         },
37912         {
37913             "name": "symbols",
37914             "browsers": [
37915                 "FF33"
37916             ],
37917             "syntax": "<symbol>+",
37918             "relevance": 50,
37919             "description": "@counter-style descriptor. Specifies the symbols used by the marker-construction algorithm specified by the system descriptor.",
37920             "restrictions": [
37921                 "image",
37922                 "string",
37923                 "identifier"
37924             ]
37925         },
37926         {
37927             "name": "table-layout",
37928             "values": [
37929                 {
37930                     "name": "auto",
37931                     "description": "Use any automatic table layout algorithm."
37932                 },
37933                 {
37934                     "name": "fixed",
37935                     "description": "Use the fixed table layout algorithm."
37936                 }
37937             ],
37938             "syntax": "auto | fixed",
37939             "relevance": 61,
37940             "references": [
37941                 {
37942                     "name": "MDN Reference",
37943                     "url": "https://developer.mozilla.org/docs/Web/CSS/table-layout"
37944                 }
37945             ],
37946             "description": "Controls the algorithm used to lay out the table cells, rows, and columns.",
37947             "restrictions": [
37948                 "enum"
37949             ]
37950         },
37951         {
37952             "name": "tab-size",
37953             "browsers": [
37954                 "E79",
37955                 "FF4",
37956                 "S6.1",
37957                 "C21",
37958                 "O15"
37959             ],
37960             "syntax": "<integer> | <length>",
37961             "relevance": 51,
37962             "references": [
37963                 {
37964                     "name": "MDN Reference",
37965                     "url": "https://developer.mozilla.org/docs/Web/CSS/tab-size"
37966                 }
37967             ],
37968             "description": "Determines the width of the tab character (U+0009), in space characters (U+0020), when rendered.",
37969             "restrictions": [
37970                 "integer",
37971                 "length"
37972             ]
37973         },
37974         {
37975             "name": "text-align",
37976             "values": [
37977                 {
37978                     "name": "center",
37979                     "description": "The inline contents are centered within the line box."
37980                 },
37981                 {
37982                     "name": "end",
37983                     "description": "The inline contents are aligned to the end edge of the line box."
37984                 },
37985                 {
37986                     "name": "justify",
37987                     "description": "The text is justified according to the method specified by the 'text-justify' property."
37988                 },
37989                 {
37990                     "name": "left",
37991                     "description": "The inline contents are aligned to the left edge of the line box. In vertical text, 'left' aligns to the edge of the line box that would be the start edge for left-to-right text."
37992                 },
37993                 {
37994                     "name": "right",
37995                     "description": "The inline contents are aligned to the right edge of the line box. In vertical text, 'right' aligns to the edge of the line box that would be the end edge for left-to-right text."
37996                 },
37997                 {
37998                     "name": "start",
37999                     "description": "The inline contents are aligned to the start edge of the line box."
38000                 }
38001             ],
38002             "syntax": "start | end | left | right | center | justify | match-parent",
38003             "relevance": 93,
38004             "references": [
38005                 {
38006                     "name": "MDN Reference",
38007                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-align"
38008                 }
38009             ],
38010             "description": "Describes how inline contents of a block are horizontally aligned if the contents do not completely fill the line box.",
38011             "restrictions": [
38012                 "string"
38013             ]
38014         },
38015         {
38016             "name": "text-align-last",
38017             "browsers": [
38018                 "E12",
38019                 "FF49",
38020                 "C47",
38021                 "IE5.5",
38022                 "O34"
38023             ],
38024             "values": [
38025                 {
38026                     "name": "auto",
38027                     "description": "Content on the affected line is aligned per 'text-align' unless 'text-align' is set to 'justify', in which case it is 'start-aligned'."
38028                 },
38029                 {
38030                     "name": "center",
38031                     "description": "The inline contents are centered within the line box."
38032                 },
38033                 {
38034                     "name": "justify",
38035                     "description": "The text is justified according to the method specified by the 'text-justify' property."
38036                 },
38037                 {
38038                     "name": "left",
38039                     "description": "The inline contents are aligned to the left edge of the line box. In vertical text, 'left' aligns to the edge of the line box that would be the start edge for left-to-right text."
38040                 },
38041                 {
38042                     "name": "right",
38043                     "description": "The inline contents are aligned to the right edge of the line box. In vertical text, 'right' aligns to the edge of the line box that would be the end edge for left-to-right text."
38044                 }
38045             ],
38046             "syntax": "auto | start | end | left | right | center | justify",
38047             "relevance": 50,
38048             "references": [
38049                 {
38050                     "name": "MDN Reference",
38051                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-align-last"
38052                 }
38053             ],
38054             "description": "Describes how the last line of a block or a line right before a forced line break is aligned when 'text-align' is set to 'justify'.",
38055             "restrictions": [
38056                 "enum"
38057             ]
38058         },
38059         {
38060             "name": "text-anchor",
38061             "values": [
38062                 {
38063                     "name": "end",
38064                     "description": "The rendered characters are aligned such that the end of the resulting rendered text is at the initial current text position."
38065                 },
38066                 {
38067                     "name": "middle",
38068                     "description": "The rendered characters are aligned such that the geometric middle of the resulting rendered text is at the initial current text position."
38069                 },
38070                 {
38071                     "name": "start",
38072                     "description": "The rendered characters are aligned such that the start of the resulting rendered text is at the initial current text position."
38073                 }
38074             ],
38075             "relevance": 50,
38076             "description": "Used to align (start-, middle- or end-alignment) a string of text relative to a given point.",
38077             "restrictions": [
38078                 "enum"
38079             ]
38080         },
38081         {
38082             "name": "text-decoration",
38083             "values": [
38084                 {
38085                     "name": "dashed",
38086                     "description": "Produces a dashed line style."
38087                 },
38088                 {
38089                     "name": "dotted",
38090                     "description": "Produces a dotted line."
38091                 },
38092                 {
38093                     "name": "double",
38094                     "description": "Produces a double line."
38095                 },
38096                 {
38097                     "name": "line-through",
38098                     "description": "Each line of text has a line through the middle."
38099                 },
38100                 {
38101                     "name": "none",
38102                     "description": "Produces no line."
38103                 },
38104                 {
38105                     "name": "overline",
38106                     "description": "Each line of text has a line above it."
38107                 },
38108                 {
38109                     "name": "solid",
38110                     "description": "Produces a solid line."
38111                 },
38112                 {
38113                     "name": "underline",
38114                     "description": "Each line of text is underlined."
38115                 },
38116                 {
38117                     "name": "wavy",
38118                     "description": "Produces a wavy line."
38119                 }
38120             ],
38121             "syntax": "<'text-decoration-line'> || <'text-decoration-style'> || <'text-decoration-color'> || <'text-decoration-thickness'>",
38122             "relevance": 91,
38123             "references": [
38124                 {
38125                     "name": "MDN Reference",
38126                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-decoration"
38127                 }
38128             ],
38129             "description": "Decorations applied to font used for an element's text.",
38130             "restrictions": [
38131                 "enum",
38132                 "color"
38133             ]
38134         },
38135         {
38136             "name": "text-decoration-color",
38137             "browsers": [
38138                 "E79",
38139                 "FF36",
38140                 "S12.1",
38141                 "C57",
38142                 "O44"
38143             ],
38144             "syntax": "<color>",
38145             "relevance": 52,
38146             "references": [
38147                 {
38148                     "name": "MDN Reference",
38149                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-decoration-color"
38150                 }
38151             ],
38152             "description": "Specifies the color of text decoration (underlines overlines, and line-throughs) set on the element with text-decoration-line.",
38153             "restrictions": [
38154                 "color"
38155             ]
38156         },
38157         {
38158             "name": "text-decoration-line",
38159             "browsers": [
38160                 "E79",
38161                 "FF36",
38162                 "S12.1",
38163                 "C57",
38164                 "O44"
38165             ],
38166             "values": [
38167                 {
38168                     "name": "line-through",
38169                     "description": "Each line of text has a line through the middle."
38170                 },
38171                 {
38172                     "name": "none",
38173                     "description": "Neither produces nor inhibits text decoration."
38174                 },
38175                 {
38176                     "name": "overline",
38177                     "description": "Each line of text has a line above it."
38178                 },
38179                 {
38180                     "name": "underline",
38181                     "description": "Each line of text is underlined."
38182                 }
38183             ],
38184             "syntax": "none | [ underline || overline || line-through || blink ] | spelling-error | grammar-error",
38185             "relevance": 50,
38186             "references": [
38187                 {
38188                     "name": "MDN Reference",
38189                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-decoration-line"
38190                 }
38191             ],
38192             "description": "Specifies what line decorations, if any, are added to the element.",
38193             "restrictions": [
38194                 "enum"
38195             ]
38196         },
38197         {
38198             "name": "text-decoration-style",
38199             "browsers": [
38200                 "E79",
38201                 "FF36",
38202                 "S12.1",
38203                 "C57",
38204                 "O44"
38205             ],
38206             "values": [
38207                 {
38208                     "name": "dashed",
38209                     "description": "Produces a dashed line style."
38210                 },
38211                 {
38212                     "name": "dotted",
38213                     "description": "Produces a dotted line."
38214                 },
38215                 {
38216                     "name": "double",
38217                     "description": "Produces a double line."
38218                 },
38219                 {
38220                     "name": "none",
38221                     "description": "Produces no line."
38222                 },
38223                 {
38224                     "name": "solid",
38225                     "description": "Produces a solid line."
38226                 },
38227                 {
38228                     "name": "wavy",
38229                     "description": "Produces a wavy line."
38230                 }
38231             ],
38232             "syntax": "solid | double | dotted | dashed | wavy",
38233             "relevance": 50,
38234             "references": [
38235                 {
38236                     "name": "MDN Reference",
38237                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-decoration-style"
38238                 }
38239             ],
38240             "description": "Specifies the line style for underline, line-through and overline text decoration.",
38241             "restrictions": [
38242                 "enum"
38243             ]
38244         },
38245         {
38246             "name": "text-indent",
38247             "values": [],
38248             "syntax": "<length-percentage> && hanging? && each-line?",
38249             "relevance": 68,
38250             "references": [
38251                 {
38252                     "name": "MDN Reference",
38253                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-indent"
38254                 }
38255             ],
38256             "description": "Specifies the indentation applied to lines of inline content in a block. The indentation only affects the first line of inline content in the block unless the 'hanging' keyword is specified, in which case it affects all lines except the first.",
38257             "restrictions": [
38258                 "percentage",
38259                 "length"
38260             ]
38261         },
38262         {
38263             "name": "text-justify",
38264             "browsers": [
38265                 "E12",
38266                 "FF55",
38267                 "C32",
38268                 "IE11",
38269                 "O19"
38270             ],
38271             "values": [
38272                 {
38273                     "name": "auto",
38274                     "description": "The UA determines the justification algorithm to follow, based on a balance between performance and adequate presentation quality."
38275                 },
38276                 {
38277                     "name": "distribute",
38278                     "description": "Justification primarily changes spacing both at word separators and at grapheme cluster boundaries in all scripts except those in the connected and cursive groups. This value is sometimes used in e.g. Japanese, often with the 'text-align-last' property."
38279                 },
38280                 {
38281                     "name": "distribute-all-lines"
38282                 },
38283                 {
38284                     "name": "inter-cluster",
38285                     "description": "Justification primarily changes spacing at word separators and at grapheme cluster boundaries in clustered scripts. This value is typically used for Southeast Asian scripts such as Thai."
38286                 },
38287                 {
38288                     "name": "inter-ideograph",
38289                     "description": "Justification primarily changes spacing at word separators and at inter-graphemic boundaries in scripts that use no word spaces. This value is typically used for CJK languages."
38290                 },
38291                 {
38292                     "name": "inter-word",
38293                     "description": "Justification primarily changes spacing at word separators. This value is typically used for languages that separate words using spaces, like English or (sometimes) Korean."
38294                 },
38295                 {
38296                     "name": "kashida",
38297                     "description": "Justification primarily stretches Arabic and related scripts through the use of kashida or other calligraphic elongation."
38298                 },
38299                 {
38300                     "name": "newspaper"
38301                 }
38302             ],
38303             "syntax": "auto | inter-character | inter-word | none",
38304             "relevance": 50,
38305             "references": [
38306                 {
38307                     "name": "MDN Reference",
38308                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-justify"
38309                 }
38310             ],
38311             "description": "Selects the justification algorithm used when 'text-align' is set to 'justify'. The property applies to block containers, but the UA may (but is not required to) also support it on inline elements.",
38312             "restrictions": [
38313                 "enum"
38314             ]
38315         },
38316         {
38317             "name": "text-orientation",
38318             "browsers": [
38319                 "E79",
38320                 "FF41",
38321                 "S5.1",
38322                 "C48",
38323                 "O15"
38324             ],
38325             "values": [
38326                 {
38327                     "name": "sideways",
38328                     "browsers": [
38329                         "E79",
38330                         "FF41",
38331                         "S5.1",
38332                         "C48",
38333                         "O15"
38334                     ],
38335                     "description": "This value is equivalent to 'sideways-right' in 'vertical-rl' writing mode and equivalent to 'sideways-left' in 'vertical-lr' writing mode."
38336                 },
38337                 {
38338                     "name": "sideways-right",
38339                     "browsers": [
38340                         "E79",
38341                         "FF41",
38342                         "S5.1",
38343                         "C48",
38344                         "O15"
38345                     ],
38346                     "description": "In vertical writing modes, this causes text to be set as if in a horizontal layout, but rotated 90° clockwise."
38347                 },
38348                 {
38349                     "name": "upright",
38350                     "description": "In vertical writing modes, characters from horizontal-only scripts are rendered upright, i.e. in their standard horizontal orientation."
38351                 }
38352             ],
38353             "syntax": "mixed | upright | sideways",
38354             "relevance": 50,
38355             "references": [
38356                 {
38357                     "name": "MDN Reference",
38358                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-orientation"
38359                 }
38360             ],
38361             "description": "Specifies the orientation of text within a line.",
38362             "restrictions": [
38363                 "enum"
38364             ]
38365         },
38366         {
38367             "name": "text-overflow",
38368             "values": [
38369                 {
38370                     "name": "clip",
38371                     "description": "Clip inline content that overflows. Characters may be only partially rendered."
38372                 },
38373                 {
38374                     "name": "ellipsis",
38375                     "description": "Render an ellipsis character (U+2026) to represent clipped inline content."
38376                 }
38377             ],
38378             "syntax": "[ clip | ellipsis | <string> ]{1,2}",
38379             "relevance": 81,
38380             "references": [
38381                 {
38382                     "name": "MDN Reference",
38383                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-overflow"
38384                 }
38385             ],
38386             "description": "Text can overflow for example when it is prevented from wrapping.",
38387             "restrictions": [
38388                 "enum",
38389                 "string"
38390             ]
38391         },
38392         {
38393             "name": "text-rendering",
38394             "browsers": [
38395                 "E79",
38396                 "FF1",
38397                 "S5",
38398                 "C4",
38399                 "O15"
38400             ],
38401             "values": [
38402                 {
38403                     "name": "auto"
38404                 },
38405                 {
38406                     "name": "geometricPrecision",
38407                     "description": "Indicates that the user agent shall emphasize geometric precision over legibility and rendering speed."
38408                 },
38409                 {
38410                     "name": "optimizeLegibility",
38411                     "description": "Indicates that the user agent shall emphasize legibility over rendering speed and geometric precision."
38412                 },
38413                 {
38414                     "name": "optimizeSpeed",
38415                     "description": "Indicates that the user agent shall emphasize rendering speed over legibility and geometric precision."
38416                 }
38417             ],
38418             "syntax": "auto | optimizeSpeed | optimizeLegibility | geometricPrecision",
38419             "relevance": 68,
38420             "references": [
38421                 {
38422                     "name": "MDN Reference",
38423                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-rendering"
38424                 }
38425             ],
38426             "description": "The creator of SVG content might want to provide a hint to the implementation about what tradeoffs to make as it renders text. The ‘text-rendering’ property provides these hints.",
38427             "restrictions": [
38428                 "enum"
38429             ]
38430         },
38431         {
38432             "name": "text-shadow",
38433             "values": [
38434                 {
38435                     "name": "none",
38436                     "description": "No shadow."
38437                 }
38438             ],
38439             "syntax": "none | <shadow-t>#",
38440             "relevance": 74,
38441             "references": [
38442                 {
38443                     "name": "MDN Reference",
38444                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-shadow"
38445                 }
38446             ],
38447             "description": "Enables shadow effects to be applied to the text of the element.",
38448             "restrictions": [
38449                 "length",
38450                 "color"
38451             ]
38452         },
38453         {
38454             "name": "text-transform",
38455             "values": [
38456                 {
38457                     "name": "capitalize",
38458                     "description": "Puts the first typographic letter unit of each word in titlecase."
38459                 },
38460                 {
38461                     "name": "lowercase",
38462                     "description": "Puts all letters in lowercase."
38463                 },
38464                 {
38465                     "name": "none",
38466                     "description": "No effects."
38467                 },
38468                 {
38469                     "name": "uppercase",
38470                     "description": "Puts all letters in uppercase."
38471                 }
38472             ],
38473             "syntax": "none | capitalize | uppercase | lowercase | full-width | full-size-kana",
38474             "relevance": 84,
38475             "references": [
38476                 {
38477                     "name": "MDN Reference",
38478                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-transform"
38479                 }
38480             ],
38481             "description": "Controls capitalization effects of an element’s text.",
38482             "restrictions": [
38483                 "enum"
38484             ]
38485         },
38486         {
38487             "name": "text-underline-position",
38488             "values": [
38489                 {
38490                     "name": "above"
38491                 },
38492                 {
38493                     "name": "auto",
38494                     "description": "The user agent may use any algorithm to determine the underline’s position. In horizontal line layout, the underline should be aligned as for alphabetic. In vertical line layout, if the language is set to Japanese or Korean, the underline should be aligned as for over."
38495                 },
38496                 {
38497                     "name": "below",
38498                     "description": "The underline is aligned with the under edge of the element’s content box."
38499                 }
38500             ],
38501             "syntax": "auto | from-font | [ under || [ left | right ] ]",
38502             "relevance": 50,
38503             "references": [
38504                 {
38505                     "name": "MDN Reference",
38506                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-underline-position"
38507                 }
38508             ],
38509             "description": "Sets the position of an underline specified on the same element: it does not affect underlines specified by ancestor elements. This property is typically used in vertical writing contexts such as in Japanese documents where it often desired to have the underline appear 'over' (to the right of) the affected run of text",
38510             "restrictions": [
38511                 "enum"
38512             ]
38513         },
38514         {
38515             "name": "top",
38516             "values": [
38517                 {
38518                     "name": "auto",
38519                     "description": "For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well"
38520                 }
38521             ],
38522             "syntax": "<length> | <percentage> | auto",
38523             "relevance": 95,
38524             "references": [
38525                 {
38526                     "name": "MDN Reference",
38527                     "url": "https://developer.mozilla.org/docs/Web/CSS/top"
38528                 }
38529             ],
38530             "description": "Specifies how far an absolutely positioned box's top margin edge is offset below the top edge of the box's 'containing block'.",
38531             "restrictions": [
38532                 "length",
38533                 "percentage"
38534             ]
38535         },
38536         {
38537             "name": "touch-action",
38538             "values": [
38539                 {
38540                     "name": "auto",
38541                     "description": "The user agent may determine any permitted touch behaviors for touches that begin on the element."
38542                 },
38543                 {
38544                     "name": "cross-slide-x"
38545                 },
38546                 {
38547                     "name": "cross-slide-y"
38548                 },
38549                 {
38550                     "name": "double-tap-zoom"
38551                 },
38552                 {
38553                     "name": "manipulation",
38554                     "description": "The user agent may consider touches that begin on the element only for the purposes of scrolling and continuous zooming."
38555                 },
38556                 {
38557                     "name": "none",
38558                     "description": "Touches that begin on the element must not trigger default touch behaviors."
38559                 },
38560                 {
38561                     "name": "pan-x",
38562                     "description": "The user agent may consider touches that begin on the element only for the purposes of horizontally scrolling the element’s nearest ancestor with horizontally scrollable content."
38563                 },
38564                 {
38565                     "name": "pan-y",
38566                     "description": "The user agent may consider touches that begin on the element only for the purposes of vertically scrolling the element’s nearest ancestor with vertically scrollable content."
38567                 },
38568                 {
38569                     "name": "pinch-zoom"
38570                 }
38571             ],
38572             "syntax": "auto | none | [ [ pan-x | pan-left | pan-right ] || [ pan-y | pan-up | pan-down ] || pinch-zoom ] | manipulation",
38573             "relevance": 65,
38574             "references": [
38575                 {
38576                     "name": "MDN Reference",
38577                     "url": "https://developer.mozilla.org/docs/Web/CSS/touch-action"
38578                 }
38579             ],
38580             "description": "Determines whether touch input may trigger default behavior supplied by user agent.",
38581             "restrictions": [
38582                 "enum"
38583             ]
38584         },
38585         {
38586             "name": "transform",
38587             "values": [
38588                 {
38589                     "name": "matrix()",
38590                     "description": "Specifies a 2D transformation in the form of a transformation matrix of six values. matrix(a,b,c,d,e,f) is equivalent to applying the transformation matrix [a b c d e f]"
38591                 },
38592                 {
38593                     "name": "matrix3d()",
38594                     "description": "Specifies a 3D transformation as a 4x4 homogeneous matrix of 16 values in column-major order."
38595                 },
38596                 {
38597                     "name": "none"
38598                 },
38599                 {
38600                     "name": "perspective()",
38601                     "description": "Specifies a perspective projection matrix."
38602                 },
38603                 {
38604                     "name": "rotate()",
38605                     "description": "Specifies a 2D rotation by the angle specified in the parameter about the origin of the element, as defined by the transform-origin property."
38606                 },
38607                 {
38608                     "name": "rotate3d()",
38609                     "description": "Specifies a clockwise 3D rotation by the angle specified in last parameter about the [x,y,z] direction vector described by the first 3 parameters."
38610                 },
38611                 {
38612                     "name": "rotateX('angle')",
38613                     "description": "Specifies a clockwise rotation by the given angle about the X axis."
38614                 },
38615                 {
38616                     "name": "rotateY('angle')",
38617                     "description": "Specifies a clockwise rotation by the given angle about the Y axis."
38618                 },
38619                 {
38620                     "name": "rotateZ('angle')",
38621                     "description": "Specifies a clockwise rotation by the given angle about the Z axis."
38622                 },
38623                 {
38624                     "name": "scale()",
38625                     "description": "Specifies a 2D scale operation by the [sx,sy] scaling vector described by the 2 parameters. If the second parameter is not provided, it is takes a value equal to the first."
38626                 },
38627                 {
38628                     "name": "scale3d()",
38629                     "description": "Specifies a 3D scale operation by the [sx,sy,sz] scaling vector described by the 3 parameters."
38630                 },
38631                 {
38632                     "name": "scaleX()",
38633                     "description": "Specifies a scale operation using the [sx,1] scaling vector, where sx is given as the parameter."
38634                 },
38635                 {
38636                     "name": "scaleY()",
38637                     "description": "Specifies a scale operation using the [sy,1] scaling vector, where sy is given as the parameter."
38638                 },
38639                 {
38640                     "name": "scaleZ()",
38641                     "description": "Specifies a scale operation using the [1,1,sz] scaling vector, where sz is given as the parameter."
38642                 },
38643                 {
38644                     "name": "skew()",
38645                     "description": "Specifies a skew transformation along the X and Y axes. The first angle parameter specifies the skew on the X axis. The second angle parameter specifies the skew on the Y axis. If the second parameter is not given then a value of 0 is used for the Y angle (ie: no skew on the Y axis)."
38646                 },
38647                 {
38648                     "name": "skewX()",
38649                     "description": "Specifies a skew transformation along the X axis by the given angle."
38650                 },
38651                 {
38652                     "name": "skewY()",
38653                     "description": "Specifies a skew transformation along the Y axis by the given angle."
38654                 },
38655                 {
38656                     "name": "translate()",
38657                     "description": "Specifies a 2D translation by the vector [tx, ty], where tx is the first translation-value parameter and ty is the optional second translation-value parameter."
38658                 },
38659                 {
38660                     "name": "translate3d()",
38661                     "description": "Specifies a 3D translation by the vector [tx,ty,tz], with tx, ty and tz being the first, second and third translation-value parameters respectively."
38662                 },
38663                 {
38664                     "name": "translateX()",
38665                     "description": "Specifies a translation by the given amount in the X direction."
38666                 },
38667                 {
38668                     "name": "translateY()",
38669                     "description": "Specifies a translation by the given amount in the Y direction."
38670                 },
38671                 {
38672                     "name": "translateZ()",
38673                     "description": "Specifies a translation by the given amount in the Z direction. Note that percentage values are not allowed in the translateZ translation-value, and if present are evaluated as 0."
38674                 }
38675             ],
38676             "syntax": "none | <transform-list>",
38677             "relevance": 88,
38678             "references": [
38679                 {
38680                     "name": "MDN Reference",
38681                     "url": "https://developer.mozilla.org/docs/Web/CSS/transform"
38682                 }
38683             ],
38684             "description": "A two-dimensional transformation is applied to an element through the 'transform' property. This property contains a list of transform functions similar to those allowed by SVG.",
38685             "restrictions": [
38686                 "enum"
38687             ]
38688         },
38689         {
38690             "name": "transform-origin",
38691             "syntax": "[ <length-percentage> | left | center | right | top | bottom ] | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>?",
38692             "relevance": 74,
38693             "references": [
38694                 {
38695                     "name": "MDN Reference",
38696                     "url": "https://developer.mozilla.org/docs/Web/CSS/transform-origin"
38697                 }
38698             ],
38699             "description": "Establishes the origin of transformation for an element.",
38700             "restrictions": [
38701                 "position",
38702                 "length",
38703                 "percentage"
38704             ]
38705         },
38706         {
38707             "name": "transform-style",
38708             "browsers": [
38709                 "E12",
38710                 "FF16",
38711                 "S9",
38712                 "C36",
38713                 "O23"
38714             ],
38715             "values": [
38716                 {
38717                     "name": "flat",
38718                     "description": "All children of this element are rendered flattened into the 2D plane of the element."
38719                 },
38720                 {
38721                     "name": "preserve-3d",
38722                     "browsers": [
38723                         "E12",
38724                         "FF16",
38725                         "S9",
38726                         "C36",
38727                         "O23"
38728                     ],
38729                     "description": "Flattening is not performed, so children maintain their position in 3D space."
38730                 }
38731             ],
38732             "syntax": "flat | preserve-3d",
38733             "relevance": 54,
38734             "references": [
38735                 {
38736                     "name": "MDN Reference",
38737                     "url": "https://developer.mozilla.org/docs/Web/CSS/transform-style"
38738                 }
38739             ],
38740             "description": "Defines how nested elements are rendered in 3D space.",
38741             "restrictions": [
38742                 "enum"
38743             ]
38744         },
38745         {
38746             "name": "transition",
38747             "values": [
38748                 {
38749                     "name": "all",
38750                     "description": "Every property that is able to undergo a transition will do so."
38751                 },
38752                 {
38753                     "name": "none",
38754                     "description": "No property will transition."
38755                 }
38756             ],
38757             "syntax": "<single-transition>#",
38758             "relevance": 87,
38759             "references": [
38760                 {
38761                     "name": "MDN Reference",
38762                     "url": "https://developer.mozilla.org/docs/Web/CSS/transition"
38763                 }
38764             ],
38765             "description": "Shorthand property combines four of the transition properties into a single property.",
38766             "restrictions": [
38767                 "time",
38768                 "property",
38769                 "timing-function",
38770                 "enum"
38771             ]
38772         },
38773         {
38774             "name": "transition-delay",
38775             "syntax": "<time>#",
38776             "relevance": 62,
38777             "references": [
38778                 {
38779                     "name": "MDN Reference",
38780                     "url": "https://developer.mozilla.org/docs/Web/CSS/transition-delay"
38781                 }
38782             ],
38783             "description": "Defines when the transition will start. It allows a transition to begin execution some period of time from when it is applied.",
38784             "restrictions": [
38785                 "time"
38786             ]
38787         },
38788         {
38789             "name": "transition-duration",
38790             "syntax": "<time>#",
38791             "relevance": 62,
38792             "references": [
38793                 {
38794                     "name": "MDN Reference",
38795                     "url": "https://developer.mozilla.org/docs/Web/CSS/transition-duration"
38796                 }
38797             ],
38798             "description": "Specifies how long the transition from the old value to the new value should take.",
38799             "restrictions": [
38800                 "time"
38801             ]
38802         },
38803         {
38804             "name": "transition-property",
38805             "values": [
38806                 {
38807                     "name": "all",
38808                     "description": "Every property that is able to undergo a transition will do so."
38809                 },
38810                 {
38811                     "name": "none",
38812                     "description": "No property will transition."
38813                 }
38814             ],
38815             "syntax": "none | <single-transition-property>#",
38816             "relevance": 64,
38817             "references": [
38818                 {
38819                     "name": "MDN Reference",
38820                     "url": "https://developer.mozilla.org/docs/Web/CSS/transition-property"
38821                 }
38822             ],
38823             "description": "Specifies the name of the CSS property to which the transition is applied.",
38824             "restrictions": [
38825                 "property"
38826             ]
38827         },
38828         {
38829             "name": "transition-timing-function",
38830             "syntax": "<timing-function>#",
38831             "relevance": 60,
38832             "references": [
38833                 {
38834                     "name": "MDN Reference",
38835                     "url": "https://developer.mozilla.org/docs/Web/CSS/transition-timing-function"
38836                 }
38837             ],
38838             "description": "Describes how the intermediate values used during a transition will be calculated.",
38839             "restrictions": [
38840                 "timing-function"
38841             ]
38842         },
38843         {
38844             "name": "unicode-bidi",
38845             "values": [
38846                 {
38847                     "name": "bidi-override",
38848                     "description": "Inside the element, reordering is strictly in sequence according to the 'direction' property; the implicit part of the bidirectional algorithm is ignored."
38849                 },
38850                 {
38851                     "name": "embed",
38852                     "description": "If the element is inline-level, this value opens an additional level of embedding with respect to the bidirectional algorithm. The direction of this embedding level is given by the 'direction' property."
38853                 },
38854                 {
38855                     "name": "isolate",
38856                     "description": "The contents of the element are considered to be inside a separate, independent paragraph."
38857                 },
38858                 {
38859                     "name": "isolate-override",
38860                     "description": "This combines the isolation behavior of 'isolate' with the directional override behavior of 'bidi-override'"
38861                 },
38862                 {
38863                     "name": "normal",
38864                     "description": "The element does not open an additional level of embedding with respect to the bidirectional algorithm. For inline-level elements, implicit reordering works across element boundaries."
38865                 },
38866                 {
38867                     "name": "plaintext",
38868                     "description": "For the purposes of the Unicode bidirectional algorithm, the base directionality of each bidi paragraph for which the element forms the containing block is determined not by the element's computed 'direction'."
38869                 }
38870             ],
38871             "syntax": "normal | embed | isolate | bidi-override | isolate-override | plaintext",
38872             "relevance": 57,
38873             "references": [
38874                 {
38875                     "name": "MDN Reference",
38876                     "url": "https://developer.mozilla.org/docs/Web/CSS/unicode-bidi"
38877                 }
38878             ],
38879             "description": "The level of embedding with respect to the bidirectional algorithm.",
38880             "restrictions": [
38881                 "enum"
38882             ]
38883         },
38884         {
38885             "name": "unicode-range",
38886             "values": [
38887                 {
38888                     "name": "U+26",
38889                     "description": "Ampersand."
38890                 },
38891                 {
38892                     "name": "U+20-24F, U+2B0-2FF, U+370-4FF, U+1E00-1EFF, U+2000-20CF, U+2100-23FF, U+2500-26FF, U+E000-F8FF, U+FB00–FB4F",
38893                     "description": "WGL4 character set (Pan-European)."
38894                 },
38895                 {
38896                     "name": "U+20-17F, U+2B0-2FF, U+2000-206F, U+20A0-20CF, U+2100-21FF, U+2600-26FF",
38897                     "description": "The Multilingual European Subset No. 1. Latin. Covers ~44 languages."
38898                 },
38899                 {
38900                     "name": "U+20-2FF, U+370-4FF, U+1E00-20CF, U+2100-23FF, U+2500-26FF, U+FB00-FB4F, U+FFF0-FFFD",
38901                     "description": "The Multilingual European Subset No. 2. Latin, Greek, and Cyrillic. Covers ~128 language."
38902                 },
38903                 {
38904                     "name": "U+20-4FF, U+530-58F, U+10D0-10FF, U+1E00-23FF, U+2440-245F, U+2500-26FF, U+FB00-FB4F, U+FE20-FE2F, U+FFF0-FFFD",
38905                     "description": "The Multilingual European Subset No. 3. Covers all characters belonging to European scripts."
38906                 },
38907                 {
38908                     "name": "U+00-7F",
38909                     "description": "Basic Latin (ASCII)."
38910                 },
38911                 {
38912                     "name": "U+80-FF",
38913                     "description": "Latin-1 Supplement. Accented characters for Western European languages, common punctuation characters, multiplication and division signs."
38914                 },
38915                 {
38916                     "name": "U+100-17F",
38917                     "description": "Latin Extended-A. Accented characters for for Czech, Dutch, Polish, and Turkish."
38918                 },
38919                 {
38920                     "name": "U+180-24F",
38921                     "description": "Latin Extended-B. Croatian, Slovenian, Romanian, Non-European and historic latin, Khoisan, Pinyin, Livonian, Sinology."
38922                 },
38923                 {
38924                     "name": "U+1E00-1EFF",
38925                     "description": "Latin Extended Additional. Vietnamese, German captial sharp s, Medievalist, Latin general use."
38926                 },
38927                 {
38928                     "name": "U+250-2AF",
38929                     "description": "International Phonetic Alphabet Extensions."
38930                 },
38931                 {
38932                     "name": "U+370-3FF",
38933                     "description": "Greek and Coptic."
38934                 },
38935                 {
38936                     "name": "U+1F00-1FFF",
38937                     "description": "Greek Extended. Accented characters for polytonic Greek."
38938                 },
38939                 {
38940                     "name": "U+400-4FF",
38941                     "description": "Cyrillic."
38942                 },
38943                 {
38944                     "name": "U+500-52F",
38945                     "description": "Cyrillic Supplement. Extra letters for Komi, Khanty, Chukchi, Mordvin, Kurdish, Aleut, Chuvash, Abkhaz, Azerbaijani, and Orok."
38946                 },
38947                 {
38948                     "name": "U+00-52F, U+1E00-1FFF, U+2200–22FF",
38949                     "description": "Latin, Greek, Cyrillic, some punctuation and symbols."
38950                 },
38951                 {
38952                     "name": "U+530–58F",
38953                     "description": "Armenian."
38954                 },
38955                 {
38956                     "name": "U+590–5FF",
38957                     "description": "Hebrew."
38958                 },
38959                 {
38960                     "name": "U+600–6FF",
38961                     "description": "Arabic."
38962                 },
38963                 {
38964                     "name": "U+750–77F",
38965                     "description": "Arabic Supplement. Additional letters for African languages, Khowar, Torwali, Burushaski, and early Persian."
38966                 },
38967                 {
38968                     "name": "U+8A0–8FF",
38969                     "description": "Arabic Extended-A. Additional letters for African languages, European and Central Asian languages, Rohingya, Tamazight, Arwi, and Koranic annotation signs."
38970                 },
38971                 {
38972                     "name": "U+700–74F",
38973                     "description": "Syriac."
38974                 },
38975                 {
38976                     "name": "U+900–97F",
38977                     "description": "Devanagari."
38978                 },
38979                 {
38980                     "name": "U+980–9FF",
38981                     "description": "Bengali."
38982                 },
38983                 {
38984                     "name": "U+A00–A7F",
38985                     "description": "Gurmukhi."
38986                 },
38987                 {
38988                     "name": "U+A80–AFF",
38989                     "description": "Gujarati."
38990                 },
38991                 {
38992                     "name": "U+B00–B7F",
38993                     "description": "Oriya."
38994                 },
38995                 {
38996                     "name": "U+B80–BFF",
38997                     "description": "Tamil."
38998                 },
38999                 {
39000                     "name": "U+C00–C7F",
39001                     "description": "Telugu."
39002                 },
39003                 {
39004                     "name": "U+C80–CFF",
39005                     "description": "Kannada."
39006                 },
39007                 {
39008                     "name": "U+D00–D7F",
39009                     "description": "Malayalam."
39010                 },
39011                 {
39012                     "name": "U+D80–DFF",
39013                     "description": "Sinhala."
39014                 },
39015                 {
39016                     "name": "U+118A0–118FF",
39017                     "description": "Warang Citi."
39018                 },
39019                 {
39020                     "name": "U+E00–E7F",
39021                     "description": "Thai."
39022                 },
39023                 {
39024                     "name": "U+1A20–1AAF",
39025                     "description": "Tai Tham."
39026                 },
39027                 {
39028                     "name": "U+AA80–AADF",
39029                     "description": "Tai Viet."
39030                 },
39031                 {
39032                     "name": "U+E80–EFF",
39033                     "description": "Lao."
39034                 },
39035                 {
39036                     "name": "U+F00–FFF",
39037                     "description": "Tibetan."
39038                 },
39039                 {
39040                     "name": "U+1000–109F",
39041                     "description": "Myanmar (Burmese)."
39042                 },
39043                 {
39044                     "name": "U+10A0–10FF",
39045                     "description": "Georgian."
39046                 },
39047                 {
39048                     "name": "U+1200–137F",
39049                     "description": "Ethiopic."
39050                 },
39051                 {
39052                     "name": "U+1380–139F",
39053                     "description": "Ethiopic Supplement. Extra Syllables for Sebatbeit, and Tonal marks"
39054                 },
39055                 {
39056                     "name": "U+2D80–2DDF",
39057                     "description": "Ethiopic Extended. Extra Syllables for Me'en, Blin, and Sebatbeit."
39058                 },
39059                 {
39060                     "name": "U+AB00–AB2F",
39061                     "description": "Ethiopic Extended-A. Extra characters for Gamo-Gofa-Dawro, Basketo, and Gumuz."
39062                 },
39063                 {
39064                     "name": "U+1780–17FF",
39065                     "description": "Khmer."
39066                 },
39067                 {
39068                     "name": "U+1800–18AF",
39069                     "description": "Mongolian."
39070                 },
39071                 {
39072                     "name": "U+1B80–1BBF",
39073                     "description": "Sundanese."
39074                 },
39075                 {
39076                     "name": "U+1CC0–1CCF",
39077                     "description": "Sundanese Supplement. Punctuation."
39078                 },
39079                 {
39080                     "name": "U+4E00–9FD5",
39081                     "description": "CJK (Chinese, Japanese, Korean) Unified Ideographs. Most common ideographs for modern Chinese and Japanese."
39082                 },
39083                 {
39084                     "name": "U+3400–4DB5",
39085                     "description": "CJK Unified Ideographs Extension A. Rare ideographs."
39086                 },
39087                 {
39088                     "name": "U+2F00–2FDF",
39089                     "description": "Kangxi Radicals."
39090                 },
39091                 {
39092                     "name": "U+2E80–2EFF",
39093                     "description": "CJK Radicals Supplement. Alternative forms of Kangxi Radicals."
39094                 },
39095                 {
39096                     "name": "U+1100–11FF",
39097                     "description": "Hangul Jamo."
39098                 },
39099                 {
39100                     "name": "U+AC00–D7AF",
39101                     "description": "Hangul Syllables."
39102                 },
39103                 {
39104                     "name": "U+3040–309F",
39105                     "description": "Hiragana."
39106                 },
39107                 {
39108                     "name": "U+30A0–30FF",
39109                     "description": "Katakana."
39110                 },
39111                 {
39112                     "name": "U+A5, U+4E00-9FFF, U+30??, U+FF00-FF9F",
39113                     "description": "Japanese Kanji, Hiragana and Katakana characters plus Yen/Yuan symbol."
39114                 },
39115                 {
39116                     "name": "U+A4D0–A4FF",
39117                     "description": "Lisu."
39118                 },
39119                 {
39120                     "name": "U+A000–A48F",
39121                     "description": "Yi Syllables."
39122                 },
39123                 {
39124                     "name": "U+A490–A4CF",
39125                     "description": "Yi Radicals."
39126                 },
39127                 {
39128                     "name": "U+2000-206F",
39129                     "description": "General Punctuation."
39130                 },
39131                 {
39132                     "name": "U+3000–303F",
39133                     "description": "CJK Symbols and Punctuation."
39134                 },
39135                 {
39136                     "name": "U+2070–209F",
39137                     "description": "Superscripts and Subscripts."
39138                 },
39139                 {
39140                     "name": "U+20A0–20CF",
39141                     "description": "Currency Symbols."
39142                 },
39143                 {
39144                     "name": "U+2100–214F",
39145                     "description": "Letterlike Symbols."
39146                 },
39147                 {
39148                     "name": "U+2150–218F",
39149                     "description": "Number Forms."
39150                 },
39151                 {
39152                     "name": "U+2190–21FF",
39153                     "description": "Arrows."
39154                 },
39155                 {
39156                     "name": "U+2200–22FF",
39157                     "description": "Mathematical Operators."
39158                 },
39159                 {
39160                     "name": "U+2300–23FF",
39161                     "description": "Miscellaneous Technical."
39162                 },
39163                 {
39164                     "name": "U+E000-F8FF",
39165                     "description": "Private Use Area."
39166                 },
39167                 {
39168                     "name": "U+FB00–FB4F",
39169                     "description": "Alphabetic Presentation Forms. Ligatures for latin, Armenian, and Hebrew."
39170                 },
39171                 {
39172                     "name": "U+FB50–FDFF",
39173                     "description": "Arabic Presentation Forms-A. Contextual forms / ligatures for Persian, Urdu, Sindhi, Central Asian languages, etc, Arabic pedagogical symbols, word ligatures."
39174                 },
39175                 {
39176                     "name": "U+1F600–1F64F",
39177                     "description": "Emoji: Emoticons."
39178                 },
39179                 {
39180                     "name": "U+2600–26FF",
39181                     "description": "Emoji: Miscellaneous Symbols."
39182                 },
39183                 {
39184                     "name": "U+1F300–1F5FF",
39185                     "description": "Emoji: Miscellaneous Symbols and Pictographs."
39186                 },
39187                 {
39188                     "name": "U+1F900–1F9FF",
39189                     "description": "Emoji: Supplemental Symbols and Pictographs."
39190                 },
39191                 {
39192                     "name": "U+1F680–1F6FF",
39193                     "description": "Emoji: Transport and Map Symbols."
39194                 }
39195             ],
39196             "syntax": "<unicode-range>#",
39197             "relevance": 58,
39198             "description": "@font-face descriptor. Defines the set of Unicode codepoints that may be supported by the font face for which it is declared.",
39199             "restrictions": [
39200                 "unicode-range"
39201             ]
39202         },
39203         {
39204             "name": "user-select",
39205             "values": [
39206                 {
39207                     "name": "all",
39208                     "description": "The content of the element must be selected atomically"
39209                 },
39210                 {
39211                     "name": "auto"
39212                 },
39213                 {
39214                     "name": "contain",
39215                     "description": "UAs must not allow a selection which is started in this element to be extended outside of this element."
39216                 },
39217                 {
39218                     "name": "none",
39219                     "description": "The UA must not allow selections to be started in this element."
39220                 },
39221                 {
39222                     "name": "text",
39223                     "description": "The element imposes no constraint on the selection."
39224                 }
39225             ],
39226             "status": "nonstandard",
39227             "syntax": "auto | text | none | contain | all",
39228             "relevance": 24,
39229             "references": [
39230                 {
39231                     "name": "MDN Reference",
39232                     "url": "https://developer.mozilla.org/docs/Web/CSS/user-select"
39233                 }
39234             ],
39235             "description": "Controls the appearance of selection.",
39236             "restrictions": [
39237                 "enum"
39238             ]
39239         },
39240         {
39241             "name": "vertical-align",
39242             "values": [
39243                 {
39244                     "name": "auto",
39245                     "description": "Align the dominant baseline of the parent box with the equivalent, or heuristically reconstructed, baseline of the element inline box."
39246                 },
39247                 {
39248                     "name": "baseline",
39249                     "description": "Align the 'alphabetic' baseline of the element with the 'alphabetic' baseline of the parent element."
39250                 },
39251                 {
39252                     "name": "bottom",
39253                     "description": "Align the after edge of the extended inline box with the after-edge of the line box."
39254                 },
39255                 {
39256                     "name": "middle",
39257                     "description": "Align the 'middle' baseline of the inline element with the middle baseline of the parent."
39258                 },
39259                 {
39260                     "name": "sub",
39261                     "description": "Lower the baseline of the box to the proper position for subscripts of the parent's box. (This value has no effect on the font size of the element's text.)"
39262                 },
39263                 {
39264                     "name": "super",
39265                     "description": "Raise the baseline of the box to the proper position for superscripts of the parent's box. (This value has no effect on the font size of the element's text.)"
39266                 },
39267                 {
39268                     "name": "text-bottom",
39269                     "description": "Align the bottom of the box with the after-edge of the parent element's font."
39270                 },
39271                 {
39272                     "name": "text-top",
39273                     "description": "Align the top of the box with the before-edge of the parent element's font."
39274                 },
39275                 {
39276                     "name": "top",
39277                     "description": "Align the before edge of the extended inline box with the before-edge of the line box."
39278                 },
39279                 {
39280                     "name": "-webkit-baseline-middle"
39281                 }
39282             ],
39283             "syntax": "baseline | sub | super | text-top | text-bottom | middle | top | bottom | <percentage> | <length>",
39284             "relevance": 91,
39285             "references": [
39286                 {
39287                     "name": "MDN Reference",
39288                     "url": "https://developer.mozilla.org/docs/Web/CSS/vertical-align"
39289                 }
39290             ],
39291             "description": "Affects the vertical positioning of the inline boxes generated by an inline-level element inside a line box.",
39292             "restrictions": [
39293                 "percentage",
39294                 "length"
39295             ]
39296         },
39297         {
39298             "name": "visibility",
39299             "values": [
39300                 {
39301                     "name": "collapse",
39302                     "description": "Table-specific. If used on elements other than rows, row groups, columns, or column groups, 'collapse' has the same meaning as 'hidden'."
39303                 },
39304                 {
39305                     "name": "hidden",
39306                     "description": "The generated box is invisible (fully transparent, nothing is drawn), but still affects layout."
39307                 },
39308                 {
39309                     "name": "visible",
39310                     "description": "The generated box is visible."
39311                 }
39312             ],
39313             "syntax": "visible | hidden | collapse",
39314             "relevance": 88,
39315             "references": [
39316                 {
39317                     "name": "MDN Reference",
39318                     "url": "https://developer.mozilla.org/docs/Web/CSS/visibility"
39319                 }
39320             ],
39321             "description": "Specifies whether the boxes generated by an element are rendered. Invisible boxes still affect layout (set the ‘display’ property to ‘none’ to suppress box generation altogether).",
39322             "restrictions": [
39323                 "enum"
39324             ]
39325         },
39326         {
39327             "name": "-webkit-animation",
39328             "browsers": [
39329                 "C",
39330                 "S5"
39331             ],
39332             "values": [
39333                 {
39334                     "name": "alternate",
39335                     "description": "The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction."
39336                 },
39337                 {
39338                     "name": "alternate-reverse",
39339                     "description": "The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction."
39340                 },
39341                 {
39342                     "name": "backwards",
39343                     "description": "The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'."
39344                 },
39345                 {
39346                     "name": "both",
39347                     "description": "Both forwards and backwards fill modes are applied."
39348                 },
39349                 {
39350                     "name": "forwards",
39351                     "description": "The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes."
39352                 },
39353                 {
39354                     "name": "infinite",
39355                     "description": "Causes the animation to repeat forever."
39356                 },
39357                 {
39358                     "name": "none",
39359                     "description": "No animation is performed"
39360                 },
39361                 {
39362                     "name": "normal",
39363                     "description": "Normal playback."
39364                 },
39365                 {
39366                     "name": "reverse",
39367                     "description": "All iterations of the animation are played in the reverse direction from the way they were specified."
39368                 }
39369             ],
39370             "relevance": 50,
39371             "description": "Shorthand property combines six of the animation properties into a single property.",
39372             "restrictions": [
39373                 "time",
39374                 "enum",
39375                 "timing-function",
39376                 "identifier",
39377                 "number"
39378             ]
39379         },
39380         {
39381             "name": "-webkit-animation-delay",
39382             "browsers": [
39383                 "C",
39384                 "S5"
39385             ],
39386             "relevance": 50,
39387             "description": "Defines when the animation will start.",
39388             "restrictions": [
39389                 "time"
39390             ]
39391         },
39392         {
39393             "name": "-webkit-animation-direction",
39394             "browsers": [
39395                 "C",
39396                 "S5"
39397             ],
39398             "values": [
39399                 {
39400                     "name": "alternate",
39401                     "description": "The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction."
39402                 },
39403                 {
39404                     "name": "alternate-reverse",
39405                     "description": "The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction."
39406                 },
39407                 {
39408                     "name": "normal",
39409                     "description": "Normal playback."
39410                 },
39411                 {
39412                     "name": "reverse",
39413                     "description": "All iterations of the animation are played in the reverse direction from the way they were specified."
39414                 }
39415             ],
39416             "relevance": 50,
39417             "description": "Defines whether or not the animation should play in reverse on alternate cycles.",
39418             "restrictions": [
39419                 "enum"
39420             ]
39421         },
39422         {
39423             "name": "-webkit-animation-duration",
39424             "browsers": [
39425                 "C",
39426                 "S5"
39427             ],
39428             "relevance": 50,
39429             "description": "Defines the length of time that an animation takes to complete one cycle.",
39430             "restrictions": [
39431                 "time"
39432             ]
39433         },
39434         {
39435             "name": "-webkit-animation-fill-mode",
39436             "browsers": [
39437                 "C",
39438                 "S5"
39439             ],
39440             "values": [
39441                 {
39442                     "name": "backwards",
39443                     "description": "The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'."
39444                 },
39445                 {
39446                     "name": "both",
39447                     "description": "Both forwards and backwards fill modes are applied."
39448                 },
39449                 {
39450                     "name": "forwards",
39451                     "description": "The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes."
39452                 },
39453                 {
39454                     "name": "none",
39455                     "description": "There is no change to the property value between the time the animation is applied and the time the animation begins playing or after the animation completes."
39456                 }
39457             ],
39458             "relevance": 50,
39459             "description": "Defines what values are applied by the animation outside the time it is executing.",
39460             "restrictions": [
39461                 "enum"
39462             ]
39463         },
39464         {
39465             "name": "-webkit-animation-iteration-count",
39466             "browsers": [
39467                 "C",
39468                 "S5"
39469             ],
39470             "values": [
39471                 {
39472                     "name": "infinite",
39473                     "description": "Causes the animation to repeat forever."
39474                 }
39475             ],
39476             "relevance": 50,
39477             "description": "Defines the number of times an animation cycle is played. The default value is one, meaning the animation will play from beginning to end once.",
39478             "restrictions": [
39479                 "number",
39480                 "enum"
39481             ]
39482         },
39483         {
39484             "name": "-webkit-animation-name",
39485             "browsers": [
39486                 "C",
39487                 "S5"
39488             ],
39489             "values": [
39490                 {
39491                     "name": "none",
39492                     "description": "No animation is performed"
39493                 }
39494             ],
39495             "relevance": 50,
39496             "description": "Defines a list of animations that apply. Each name is used to select the keyframe at-rule that provides the property values for the animation.",
39497             "restrictions": [
39498                 "identifier",
39499                 "enum"
39500             ]
39501         },
39502         {
39503             "name": "-webkit-animation-play-state",
39504             "browsers": [
39505                 "C",
39506                 "S5"
39507             ],
39508             "values": [
39509                 {
39510                     "name": "paused",
39511                     "description": "A running animation will be paused."
39512                 },
39513                 {
39514                     "name": "running",
39515                     "description": "Resume playback of a paused animation."
39516                 }
39517             ],
39518             "relevance": 50,
39519             "description": "Defines whether the animation is running or paused.",
39520             "restrictions": [
39521                 "enum"
39522             ]
39523         },
39524         {
39525             "name": "-webkit-animation-timing-function",
39526             "browsers": [
39527                 "C",
39528                 "S5"
39529             ],
39530             "relevance": 50,
39531             "description": "Describes how the animation will progress over one cycle of its duration. See the 'transition-timing-function'.",
39532             "restrictions": [
39533                 "timing-function"
39534             ]
39535         },
39536         {
39537             "name": "-webkit-appearance",
39538             "browsers": [
39539                 "C",
39540                 "S3"
39541             ],
39542             "values": [
39543                 {
39544                     "name": "button"
39545                 },
39546                 {
39547                     "name": "button-bevel"
39548                 },
39549                 {
39550                     "name": "caps-lock-indicator"
39551                 },
39552                 {
39553                     "name": "caret"
39554                 },
39555                 {
39556                     "name": "checkbox"
39557                 },
39558                 {
39559                     "name": "default-button"
39560                 },
39561                 {
39562                     "name": "listbox"
39563                 },
39564                 {
39565                     "name": "listitem"
39566                 },
39567                 {
39568                     "name": "media-fullscreen-button"
39569                 },
39570                 {
39571                     "name": "media-mute-button"
39572                 },
39573                 {
39574                     "name": "media-play-button"
39575                 },
39576                 {
39577                     "name": "media-seek-back-button"
39578                 },
39579                 {
39580                     "name": "media-seek-forward-button"
39581                 },
39582                 {
39583                     "name": "media-slider"
39584                 },
39585                 {
39586                     "name": "media-sliderthumb"
39587                 },
39588                 {
39589                     "name": "menulist"
39590                 },
39591                 {
39592                     "name": "menulist-button"
39593                 },
39594                 {
39595                     "name": "menulist-text"
39596                 },
39597                 {
39598                     "name": "menulist-textfield"
39599                 },
39600                 {
39601                     "name": "none"
39602                 },
39603                 {
39604                     "name": "push-button"
39605                 },
39606                 {
39607                     "name": "radio"
39608                 },
39609                 {
39610                     "name": "scrollbarbutton-down"
39611                 },
39612                 {
39613                     "name": "scrollbarbutton-left"
39614                 },
39615                 {
39616                     "name": "scrollbarbutton-right"
39617                 },
39618                 {
39619                     "name": "scrollbarbutton-up"
39620                 },
39621                 {
39622                     "name": "scrollbargripper-horizontal"
39623                 },
39624                 {
39625                     "name": "scrollbargripper-vertical"
39626                 },
39627                 {
39628                     "name": "scrollbarthumb-horizontal"
39629                 },
39630                 {
39631                     "name": "scrollbarthumb-vertical"
39632                 },
39633                 {
39634                     "name": "scrollbartrack-horizontal"
39635                 },
39636                 {
39637                     "name": "scrollbartrack-vertical"
39638                 },
39639                 {
39640                     "name": "searchfield"
39641                 },
39642                 {
39643                     "name": "searchfield-cancel-button"
39644                 },
39645                 {
39646                     "name": "searchfield-decoration"
39647                 },
39648                 {
39649                     "name": "searchfield-results-button"
39650                 },
39651                 {
39652                     "name": "searchfield-results-decoration"
39653                 },
39654                 {
39655                     "name": "slider-horizontal"
39656                 },
39657                 {
39658                     "name": "sliderthumb-horizontal"
39659                 },
39660                 {
39661                     "name": "sliderthumb-vertical"
39662                 },
39663                 {
39664                     "name": "slider-vertical"
39665                 },
39666                 {
39667                     "name": "square-button"
39668                 },
39669                 {
39670                     "name": "textarea"
39671                 },
39672                 {
39673                     "name": "textfield"
39674                 }
39675             ],
39676             "status": "nonstandard",
39677             "syntax": "none | button | button-bevel | caret | checkbox | default-button | inner-spin-button | listbox | listitem | media-controls-background | media-controls-fullscreen-background | media-current-time-display | media-enter-fullscreen-button | media-exit-fullscreen-button | media-fullscreen-button | media-mute-button | media-overlay-play-button | media-play-button | media-seek-back-button | media-seek-forward-button | media-slider | media-sliderthumb | media-time-remaining-display | media-toggle-closed-captions-button | media-volume-slider | media-volume-slider-container | media-volume-sliderthumb | menulist | menulist-button | menulist-text | menulist-textfield | meter | progress-bar | progress-bar-value | push-button | radio | searchfield | searchfield-cancel-button | searchfield-decoration | searchfield-results-button | searchfield-results-decoration | slider-horizontal | slider-vertical | sliderthumb-horizontal | sliderthumb-vertical | square-button | textarea | textfield",
39678             "relevance": 0,
39679             "description": "Changes the appearance of buttons and other controls to resemble native controls.",
39680             "restrictions": [
39681                 "enum"
39682             ]
39683         },
39684         {
39685             "name": "-webkit-backdrop-filter",
39686             "browsers": [
39687                 "S9"
39688             ],
39689             "values": [
39690                 {
39691                     "name": "none",
39692                     "description": "No filter effects are applied."
39693                 },
39694                 {
39695                     "name": "blur()",
39696                     "description": "Applies a Gaussian blur to the input image."
39697                 },
39698                 {
39699                     "name": "brightness()",
39700                     "description": "Applies a linear multiplier to input image, making it appear more or less bright."
39701                 },
39702                 {
39703                     "name": "contrast()",
39704                     "description": "Adjusts the contrast of the input."
39705                 },
39706                 {
39707                     "name": "drop-shadow()",
39708                     "description": "Applies a drop shadow effect to the input image."
39709                 },
39710                 {
39711                     "name": "grayscale()",
39712                     "description": "Converts the input image to grayscale."
39713                 },
39714                 {
39715                     "name": "hue-rotate()",
39716                     "description": "Applies a hue rotation on the input image. "
39717                 },
39718                 {
39719                     "name": "invert()",
39720                     "description": "Inverts the samples in the input image."
39721                 },
39722                 {
39723                     "name": "opacity()",
39724                     "description": "Applies transparency to the samples in the input image."
39725                 },
39726                 {
39727                     "name": "saturate()",
39728                     "description": "Saturates the input image."
39729                 },
39730                 {
39731                     "name": "sepia()",
39732                     "description": "Converts the input image to sepia."
39733                 },
39734                 {
39735                     "name": "url()",
39736                     "description": "A filter reference to a <filter> element."
39737                 }
39738             ],
39739             "relevance": 50,
39740             "description": "Applies a filter effect where the first filter in the list takes the element's background image as the input image.",
39741             "restrictions": [
39742                 "enum",
39743                 "url"
39744             ]
39745         },
39746         {
39747             "name": "-webkit-backface-visibility",
39748             "browsers": [
39749                 "C",
39750                 "S5"
39751             ],
39752             "values": [
39753                 {
39754                     "name": "hidden"
39755                 },
39756                 {
39757                     "name": "visible"
39758                 }
39759             ],
39760             "relevance": 50,
39761             "description": "Determines whether or not the 'back' side of a transformed element is visible when facing the viewer. With an identity transform, the front side of an element faces the viewer.",
39762             "restrictions": [
39763                 "enum"
39764             ]
39765         },
39766         {
39767             "name": "-webkit-background-clip",
39768             "browsers": [
39769                 "C",
39770                 "S3"
39771             ],
39772             "relevance": 50,
39773             "description": "Determines the background painting area.",
39774             "restrictions": [
39775                 "box"
39776             ]
39777         },
39778         {
39779             "name": "-webkit-background-composite",
39780             "browsers": [
39781                 "C",
39782                 "S3"
39783             ],
39784             "values": [
39785                 {
39786                     "name": "border"
39787                 },
39788                 {
39789                     "name": "padding"
39790                 }
39791             ],
39792             "relevance": 50,
39793             "restrictions": [
39794                 "enum"
39795             ]
39796         },
39797         {
39798             "name": "-webkit-background-origin",
39799             "browsers": [
39800                 "C",
39801                 "S3"
39802             ],
39803             "relevance": 50,
39804             "description": "For elements rendered as a single box, specifies the background positioning area. For elements rendered as multiple boxes (e.g., inline boxes on several lines, boxes on several pages) specifies which boxes 'box-decoration-break' operates on to determine the background positioning area(s).",
39805             "restrictions": [
39806                 "box"
39807             ]
39808         },
39809         {
39810             "name": "-webkit-border-image",
39811             "browsers": [
39812                 "C",
39813                 "S5"
39814             ],
39815             "values": [
39816                 {
39817                     "name": "auto",
39818                     "description": "If 'auto' is specified then the border image width is the intrinsic width or height (whichever is applicable) of the corresponding image slice. If the image does not have the required intrinsic dimension then the corresponding border-width is used instead."
39819                 },
39820                 {
39821                     "name": "fill",
39822                     "description": "Causes the middle part of the border-image to be preserved."
39823                 },
39824                 {
39825                     "name": "none"
39826                 },
39827                 {
39828                     "name": "repeat",
39829                     "description": "The image is tiled (repeated) to fill the area."
39830                 },
39831                 {
39832                     "name": "round",
39833                     "description": "The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the image is rescaled so that it does."
39834                 },
39835                 {
39836                     "name": "space",
39837                     "description": "The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the extra space is distributed around the tiles."
39838                 },
39839                 {
39840                     "name": "stretch",
39841                     "description": "The image is stretched to fill the area."
39842                 },
39843                 {
39844                     "name": "url()"
39845                 }
39846             ],
39847             "relevance": 50,
39848             "description": "Shorthand property for setting 'border-image-source', 'border-image-slice', 'border-image-width', 'border-image-outset' and 'border-image-repeat'. Omitted values are set to their initial values.",
39849             "restrictions": [
39850                 "length",
39851                 "percentage",
39852                 "number",
39853                 "url",
39854                 "enum"
39855             ]
39856         },
39857         {
39858             "name": "-webkit-box-align",
39859             "browsers": [
39860                 "C",
39861                 "S3"
39862             ],
39863             "values": [
39864                 {
39865                     "name": "baseline",
39866                     "description": "If this box orientation is inline-axis or horizontal, all children are placed with their baselines aligned, and extra space placed before or after as necessary. For block flows, the baseline of the first non-empty line box located within the element is used. For tables, the baseline of the first cell is used."
39867                 },
39868                 {
39869                     "name": "center",
39870                     "description": "Any extra space is divided evenly, with half placed above the child and the other half placed after the child."
39871                 },
39872                 {
39873                     "name": "end",
39874                     "description": "For normal direction boxes, the bottom edge of each child is placed along the bottom of the box. Extra space is placed above the element. For reverse direction boxes, the top edge of each child is placed along the top of the box. Extra space is placed below the element."
39875                 },
39876                 {
39877                     "name": "start",
39878                     "description": "For normal direction boxes, the top edge of each child is placed along the top of the box. Extra space is placed below the element. For reverse direction boxes, the bottom edge of each child is placed along the bottom of the box. Extra space is placed above the element."
39879                 },
39880                 {
39881                     "name": "stretch",
39882                     "description": "The height of each child is adjusted to that of the containing block."
39883                 }
39884             ],
39885             "relevance": 50,
39886             "description": "Specifies the alignment of nested elements within an outer flexible box element.",
39887             "restrictions": [
39888                 "enum"
39889             ]
39890         },
39891         {
39892             "name": "-webkit-box-direction",
39893             "browsers": [
39894                 "C",
39895                 "S3"
39896             ],
39897             "values": [
39898                 {
39899                     "name": "normal",
39900                     "description": "A box with a computed value of horizontal for box-orient displays its children from left to right. A box with a computed value of vertical displays its children from top to bottom."
39901                 },
39902                 {
39903                     "name": "reverse",
39904                     "description": "A box with a computed value of horizontal for box-orient displays its children from right to left. A box with a computed value of vertical displays its children from bottom to top."
39905                 }
39906             ],
39907             "relevance": 50,
39908             "description": "In webkit applications, -webkit-box-direction specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).",
39909             "restrictions": [
39910                 "enum"
39911             ]
39912         },
39913         {
39914             "name": "-webkit-box-flex",
39915             "browsers": [
39916                 "C",
39917                 "S3"
39918             ],
39919             "relevance": 50,
39920             "description": "Specifies an element's flexibility.",
39921             "restrictions": [
39922                 "number"
39923             ]
39924         },
39925         {
39926             "name": "-webkit-box-flex-group",
39927             "browsers": [
39928                 "C",
39929                 "S3"
39930             ],
39931             "relevance": 50,
39932             "description": "Flexible elements can be assigned to flex groups using the 'box-flex-group' property.",
39933             "restrictions": [
39934                 "integer"
39935             ]
39936         },
39937         {
39938             "name": "-webkit-box-ordinal-group",
39939             "browsers": [
39940                 "C",
39941                 "S3"
39942             ],
39943             "relevance": 50,
39944             "description": "Indicates the ordinal group the element belongs to. Elements with a lower ordinal group are displayed before those with a higher ordinal group.",
39945             "restrictions": [
39946                 "integer"
39947             ]
39948         },
39949         {
39950             "name": "-webkit-box-orient",
39951             "browsers": [
39952                 "C",
39953                 "S3"
39954             ],
39955             "values": [
39956                 {
39957                     "name": "block-axis",
39958                     "description": "Elements are oriented along the box's axis."
39959                 },
39960                 {
39961                     "name": "horizontal",
39962                     "description": "The box displays its children from left to right in a horizontal line."
39963                 },
39964                 {
39965                     "name": "inline-axis",
39966                     "description": "Elements are oriented vertically."
39967                 },
39968                 {
39969                     "name": "vertical",
39970                     "description": "The box displays its children from stacked from top to bottom vertically."
39971                 }
39972             ],
39973             "relevance": 50,
39974             "description": "In webkit applications, -webkit-box-orient specifies whether a box lays out its contents horizontally or vertically.",
39975             "restrictions": [
39976                 "enum"
39977             ]
39978         },
39979         {
39980             "name": "-webkit-box-pack",
39981             "browsers": [
39982                 "C",
39983                 "S3"
39984             ],
39985             "values": [
39986                 {
39987                     "name": "center",
39988                     "description": "The extra space is divided evenly, with half placed before the first child and the other half placed after the last child."
39989                 },
39990                 {
39991                     "name": "end",
39992                     "description": "For normal direction boxes, the right edge of the last child is placed at the right side, with all extra space placed before the first child. For reverse direction boxes, the left edge of the first child is placed at the left side, with all extra space placed after the last child."
39993                 },
39994                 {
39995                     "name": "justify",
39996                     "description": "The space is divided evenly in-between each child, with none of the extra space placed before the first child or after the last child. If there is only one child, treat the pack value as if it were start."
39997                 },
39998                 {
39999                     "name": "start",
40000                     "description": "For normal direction boxes, the left edge of the first child is placed at the left side, with all extra space placed after the last child. For reverse direction boxes, the right edge of the last child is placed at the right side, with all extra space placed before the first child."
40001                 }
40002             ],
40003             "relevance": 50,
40004             "description": "Specifies alignment of child elements within the current element in the direction of orientation.",
40005             "restrictions": [
40006                 "enum"
40007             ]
40008         },
40009         {
40010             "name": "-webkit-box-reflect",
40011             "browsers": [
40012                 "E79",
40013                 "S4",
40014                 "C4",
40015                 "O15"
40016             ],
40017             "values": [
40018                 {
40019                     "name": "above",
40020                     "description": "The reflection appears above the border box."
40021                 },
40022                 {
40023                     "name": "below",
40024                     "description": "The reflection appears below the border box."
40025                 },
40026                 {
40027                     "name": "left",
40028                     "description": "The reflection appears to the left of the border box."
40029                 },
40030                 {
40031                     "name": "right",
40032                     "description": "The reflection appears to the right of the border box."
40033                 }
40034             ],
40035             "status": "nonstandard",
40036             "syntax": "[ above | below | right | left ]? <length>? <image>?",
40037             "relevance": 0,
40038             "references": [
40039                 {
40040                     "name": "MDN Reference",
40041                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-box-reflect"
40042                 }
40043             ],
40044             "description": "Defines a reflection of a border box."
40045         },
40046         {
40047             "name": "-webkit-box-sizing",
40048             "browsers": [
40049                 "C",
40050                 "S3"
40051             ],
40052             "values": [
40053                 {
40054                     "name": "border-box",
40055                     "description": "The specified width and height (and respective min/max properties) on this element determine the border box of the element."
40056                 },
40057                 {
40058                     "name": "content-box",
40059                     "description": "Behavior of width and height as specified by CSS2.1. The specified width and height (and respective min/max properties) apply to the width and height respectively of the content box of the element."
40060                 }
40061             ],
40062             "relevance": 50,
40063             "description": "Box Model addition in CSS3.",
40064             "restrictions": [
40065                 "enum"
40066             ]
40067         },
40068         {
40069             "name": "-webkit-break-after",
40070             "browsers": [
40071                 "S7"
40072             ],
40073             "values": [
40074                 {
40075                     "name": "always",
40076                     "description": "Always force a page break before/after the generated box."
40077                 },
40078                 {
40079                     "name": "auto",
40080                     "description": "Neither force nor forbid a page/column break before/after the generated box."
40081                 },
40082                 {
40083                     "name": "avoid",
40084                     "description": "Avoid a page/column break before/after the generated box."
40085                 },
40086                 {
40087                     "name": "avoid-column",
40088                     "description": "Avoid a column break before/after the generated box."
40089                 },
40090                 {
40091                     "name": "avoid-page",
40092                     "description": "Avoid a page break before/after the generated box."
40093                 },
40094                 {
40095                     "name": "avoid-region"
40096                 },
40097                 {
40098                     "name": "column",
40099                     "description": "Always force a column break before/after the generated box."
40100                 },
40101                 {
40102                     "name": "left",
40103                     "description": "Force one or two page breaks before/after the generated box so that the next page is formatted as a left page."
40104                 },
40105                 {
40106                     "name": "page",
40107                     "description": "Always force a page break before/after the generated box."
40108                 },
40109                 {
40110                     "name": "region"
40111                 },
40112                 {
40113                     "name": "right",
40114                     "description": "Force one or two page breaks before/after the generated box so that the next page is formatted as a right page."
40115                 }
40116             ],
40117             "relevance": 50,
40118             "description": "Describes the page/column break behavior before the generated box.",
40119             "restrictions": [
40120                 "enum"
40121             ]
40122         },
40123         {
40124             "name": "-webkit-break-before",
40125             "browsers": [
40126                 "S7"
40127             ],
40128             "values": [
40129                 {
40130                     "name": "always",
40131                     "description": "Always force a page break before/after the generated box."
40132                 },
40133                 {
40134                     "name": "auto",
40135                     "description": "Neither force nor forbid a page/column break before/after the generated box."
40136                 },
40137                 {
40138                     "name": "avoid",
40139                     "description": "Avoid a page/column break before/after the generated box."
40140                 },
40141                 {
40142                     "name": "avoid-column",
40143                     "description": "Avoid a column break before/after the generated box."
40144                 },
40145                 {
40146                     "name": "avoid-page",
40147                     "description": "Avoid a page break before/after the generated box."
40148                 },
40149                 {
40150                     "name": "avoid-region"
40151                 },
40152                 {
40153                     "name": "column",
40154                     "description": "Always force a column break before/after the generated box."
40155                 },
40156                 {
40157                     "name": "left",
40158                     "description": "Force one or two page breaks before/after the generated box so that the next page is formatted as a left page."
40159                 },
40160                 {
40161                     "name": "page",
40162                     "description": "Always force a page break before/after the generated box."
40163                 },
40164                 {
40165                     "name": "region"
40166                 },
40167                 {
40168                     "name": "right",
40169                     "description": "Force one or two page breaks before/after the generated box so that the next page is formatted as a right page."
40170                 }
40171             ],
40172             "relevance": 50,
40173             "description": "Describes the page/column break behavior before the generated box.",
40174             "restrictions": [
40175                 "enum"
40176             ]
40177         },
40178         {
40179             "name": "-webkit-break-inside",
40180             "browsers": [
40181                 "S7"
40182             ],
40183             "values": [
40184                 {
40185                     "name": "auto",
40186                     "description": "Neither force nor forbid a page/column break inside the generated box."
40187                 },
40188                 {
40189                     "name": "avoid",
40190                     "description": "Avoid a page/column break inside the generated box."
40191                 },
40192                 {
40193                     "name": "avoid-column",
40194                     "description": "Avoid a column break inside the generated box."
40195                 },
40196                 {
40197                     "name": "avoid-page",
40198                     "description": "Avoid a page break inside the generated box."
40199                 },
40200                 {
40201                     "name": "avoid-region"
40202                 }
40203             ],
40204             "relevance": 50,
40205             "description": "Describes the page/column break behavior inside the generated box.",
40206             "restrictions": [
40207                 "enum"
40208             ]
40209         },
40210         {
40211             "name": "-webkit-column-break-after",
40212             "browsers": [
40213                 "C",
40214                 "S3"
40215             ],
40216             "values": [
40217                 {
40218                     "name": "always",
40219                     "description": "Always force a page break before/after the generated box."
40220                 },
40221                 {
40222                     "name": "auto",
40223                     "description": "Neither force nor forbid a page/column break before/after the generated box."
40224                 },
40225                 {
40226                     "name": "avoid",
40227                     "description": "Avoid a page/column break before/after the generated box."
40228                 },
40229                 {
40230                     "name": "avoid-column",
40231                     "description": "Avoid a column break before/after the generated box."
40232                 },
40233                 {
40234                     "name": "avoid-page",
40235                     "description": "Avoid a page break before/after the generated box."
40236                 },
40237                 {
40238                     "name": "avoid-region"
40239                 },
40240                 {
40241                     "name": "column",
40242                     "description": "Always force a column break before/after the generated box."
40243                 },
40244                 {
40245                     "name": "left",
40246                     "description": "Force one or two page breaks before/after the generated box so that the next page is formatted as a left page."
40247                 },
40248                 {
40249                     "name": "page",
40250                     "description": "Always force a page break before/after the generated box."
40251                 },
40252                 {
40253                     "name": "region"
40254                 },
40255                 {
40256                     "name": "right",
40257                     "description": "Force one or two page breaks before/after the generated box so that the next page is formatted as a right page."
40258                 }
40259             ],
40260             "relevance": 50,
40261             "description": "Describes the page/column break behavior before the generated box.",
40262             "restrictions": [
40263                 "enum"
40264             ]
40265         },
40266         {
40267             "name": "-webkit-column-break-before",
40268             "browsers": [
40269                 "C",
40270                 "S3"
40271             ],
40272             "values": [
40273                 {
40274                     "name": "always",
40275                     "description": "Always force a page break before/after the generated box."
40276                 },
40277                 {
40278                     "name": "auto",
40279                     "description": "Neither force nor forbid a page/column break before/after the generated box."
40280                 },
40281                 {
40282                     "name": "avoid",
40283                     "description": "Avoid a page/column break before/after the generated box."
40284                 },
40285                 {
40286                     "name": "avoid-column",
40287                     "description": "Avoid a column break before/after the generated box."
40288                 },
40289                 {
40290                     "name": "avoid-page",
40291                     "description": "Avoid a page break before/after the generated box."
40292                 },
40293                 {
40294                     "name": "avoid-region"
40295                 },
40296                 {
40297                     "name": "column",
40298                     "description": "Always force a column break before/after the generated box."
40299                 },
40300                 {
40301                     "name": "left",
40302                     "description": "Force one or two page breaks before/after the generated box so that the next page is formatted as a left page."
40303                 },
40304                 {
40305                     "name": "page",
40306                     "description": "Always force a page break before/after the generated box."
40307                 },
40308                 {
40309                     "name": "region"
40310                 },
40311                 {
40312                     "name": "right",
40313                     "description": "Force one or two page breaks before/after the generated box so that the next page is formatted as a right page."
40314                 }
40315             ],
40316             "relevance": 50,
40317             "description": "Describes the page/column break behavior before the generated box.",
40318             "restrictions": [
40319                 "enum"
40320             ]
40321         },
40322         {
40323             "name": "-webkit-column-break-inside",
40324             "browsers": [
40325                 "C",
40326                 "S3"
40327             ],
40328             "values": [
40329                 {
40330                     "name": "auto",
40331                     "description": "Neither force nor forbid a page/column break inside the generated box."
40332                 },
40333                 {
40334                     "name": "avoid",
40335                     "description": "Avoid a page/column break inside the generated box."
40336                 },
40337                 {
40338                     "name": "avoid-column",
40339                     "description": "Avoid a column break inside the generated box."
40340                 },
40341                 {
40342                     "name": "avoid-page",
40343                     "description": "Avoid a page break inside the generated box."
40344                 },
40345                 {
40346                     "name": "avoid-region"
40347                 }
40348             ],
40349             "relevance": 50,
40350             "description": "Describes the page/column break behavior inside the generated box.",
40351             "restrictions": [
40352                 "enum"
40353             ]
40354         },
40355         {
40356             "name": "-webkit-column-count",
40357             "browsers": [
40358                 "C",
40359                 "S3"
40360             ],
40361             "values": [
40362                 {
40363                     "name": "auto",
40364                     "description": "Determines the number of columns by the 'column-width' property and the element width."
40365                 }
40366             ],
40367             "relevance": 50,
40368             "description": "Describes the optimal number of columns into which the content of the element will be flowed.",
40369             "restrictions": [
40370                 "integer"
40371             ]
40372         },
40373         {
40374             "name": "-webkit-column-gap",
40375             "browsers": [
40376                 "C",
40377                 "S3"
40378             ],
40379             "values": [
40380                 {
40381                     "name": "normal",
40382                     "description": "User agent specific and typically equivalent to 1em."
40383                 }
40384             ],
40385             "relevance": 50,
40386             "description": "Sets the gap between columns. If there is a column rule between columns, it will appear in the middle of the gap.",
40387             "restrictions": [
40388                 "length"
40389             ]
40390         },
40391         {
40392             "name": "-webkit-column-rule",
40393             "browsers": [
40394                 "C",
40395                 "S3"
40396             ],
40397             "relevance": 50,
40398             "description": "This property is a shorthand for setting 'column-rule-width', 'column-rule-style', and 'column-rule-color' at the same place in the style sheet. Omitted values are set to their initial values.",
40399             "restrictions": [
40400                 "length",
40401                 "line-width",
40402                 "line-style",
40403                 "color"
40404             ]
40405         },
40406         {
40407             "name": "-webkit-column-rule-color",
40408             "browsers": [
40409                 "C",
40410                 "S3"
40411             ],
40412             "relevance": 50,
40413             "description": "Sets the color of the column rule",
40414             "restrictions": [
40415                 "color"
40416             ]
40417         },
40418         {
40419             "name": "-webkit-column-rule-style",
40420             "browsers": [
40421                 "C",
40422                 "S3"
40423             ],
40424             "relevance": 50,
40425             "description": "Sets the style of the rule between columns of an element.",
40426             "restrictions": [
40427                 "line-style"
40428             ]
40429         },
40430         {
40431             "name": "-webkit-column-rule-width",
40432             "browsers": [
40433                 "C",
40434                 "S3"
40435             ],
40436             "relevance": 50,
40437             "description": "Sets the width of the rule between columns. Negative values are not allowed.",
40438             "restrictions": [
40439                 "length",
40440                 "line-width"
40441             ]
40442         },
40443         {
40444             "name": "-webkit-columns",
40445             "browsers": [
40446                 "C",
40447                 "S3"
40448             ],
40449             "values": [
40450                 {
40451                     "name": "auto",
40452                     "description": "The width depends on the values of other properties."
40453                 }
40454             ],
40455             "relevance": 50,
40456             "description": "A shorthand property which sets both 'column-width' and 'column-count'.",
40457             "restrictions": [
40458                 "length",
40459                 "integer"
40460             ]
40461         },
40462         {
40463             "name": "-webkit-column-span",
40464             "browsers": [
40465                 "C",
40466                 "S3"
40467             ],
40468             "values": [
40469                 {
40470                     "name": "all",
40471                     "description": "The element spans across all columns. Content in the normal flow that appears before the element is automatically balanced across all columns before the element appear."
40472                 },
40473                 {
40474                     "name": "none",
40475                     "description": "The element does not span multiple columns."
40476                 }
40477             ],
40478             "relevance": 50,
40479             "description": "Describes the page/column break behavior after the generated box.",
40480             "restrictions": [
40481                 "enum"
40482             ]
40483         },
40484         {
40485             "name": "-webkit-column-width",
40486             "browsers": [
40487                 "C",
40488                 "S3"
40489             ],
40490             "values": [
40491                 {
40492                     "name": "auto",
40493                     "description": "The width depends on the values of other properties."
40494                 }
40495             ],
40496             "relevance": 50,
40497             "description": "This property describes the width of columns in multicol elements.",
40498             "restrictions": [
40499                 "length"
40500             ]
40501         },
40502         {
40503             "name": "-webkit-filter",
40504             "browsers": [
40505                 "C18",
40506                 "O15",
40507                 "S6"
40508             ],
40509             "values": [
40510                 {
40511                     "name": "none",
40512                     "description": "No filter effects are applied."
40513                 },
40514                 {
40515                     "name": "blur()",
40516                     "description": "Applies a Gaussian blur to the input image."
40517                 },
40518                 {
40519                     "name": "brightness()",
40520                     "description": "Applies a linear multiplier to input image, making it appear more or less bright."
40521                 },
40522                 {
40523                     "name": "contrast()",
40524                     "description": "Adjusts the contrast of the input."
40525                 },
40526                 {
40527                     "name": "drop-shadow()",
40528                     "description": "Applies a drop shadow effect to the input image."
40529                 },
40530                 {
40531                     "name": "grayscale()",
40532                     "description": "Converts the input image to grayscale."
40533                 },
40534                 {
40535                     "name": "hue-rotate()",
40536                     "description": "Applies a hue rotation on the input image. "
40537                 },
40538                 {
40539                     "name": "invert()",
40540                     "description": "Inverts the samples in the input image."
40541                 },
40542                 {
40543                     "name": "opacity()",
40544                     "description": "Applies transparency to the samples in the input image."
40545                 },
40546                 {
40547                     "name": "saturate()",
40548                     "description": "Saturates the input image."
40549                 },
40550                 {
40551                     "name": "sepia()",
40552                     "description": "Converts the input image to sepia."
40553                 },
40554                 {
40555                     "name": "url()",
40556                     "description": "A filter reference to a <filter> element."
40557                 }
40558             ],
40559             "relevance": 50,
40560             "description": "Processes an element’s rendering before it is displayed in the document, by applying one or more filter effects.",
40561             "restrictions": [
40562                 "enum",
40563                 "url"
40564             ]
40565         },
40566         {
40567             "name": "-webkit-flow-from",
40568             "browsers": [
40569                 "S6.1"
40570             ],
40571             "values": [
40572                 {
40573                     "name": "none",
40574                     "description": "The block container is not a CSS Region."
40575                 }
40576             ],
40577             "relevance": 50,
40578             "description": "Makes a block container a region and associates it with a named flow.",
40579             "restrictions": [
40580                 "identifier"
40581             ]
40582         },
40583         {
40584             "name": "-webkit-flow-into",
40585             "browsers": [
40586                 "S6.1"
40587             ],
40588             "values": [
40589                 {
40590                     "name": "none",
40591                     "description": "The element is not moved to a named flow and normal CSS processing takes place."
40592                 }
40593             ],
40594             "relevance": 50,
40595             "description": "Places an element or its contents into a named flow.",
40596             "restrictions": [
40597                 "identifier"
40598             ]
40599         },
40600         {
40601             "name": "-webkit-font-feature-settings",
40602             "browsers": [
40603                 "C16"
40604             ],
40605             "values": [
40606                 {
40607                     "name": "\"c2cs\""
40608                 },
40609                 {
40610                     "name": "\"dlig\""
40611                 },
40612                 {
40613                     "name": "\"kern\""
40614                 },
40615                 {
40616                     "name": "\"liga\""
40617                 },
40618                 {
40619                     "name": "\"lnum\""
40620                 },
40621                 {
40622                     "name": "\"onum\""
40623                 },
40624                 {
40625                     "name": "\"smcp\""
40626                 },
40627                 {
40628                     "name": "\"swsh\""
40629                 },
40630                 {
40631                     "name": "\"tnum\""
40632                 },
40633                 {
40634                     "name": "normal",
40635                     "description": "No change in glyph substitution or positioning occurs."
40636                 },
40637                 {
40638                     "name": "off"
40639                 },
40640                 {
40641                     "name": "on"
40642                 }
40643             ],
40644             "relevance": 50,
40645             "description": "This property provides low-level control over OpenType font features. It is intended as a way of providing access to font features that are not widely used but are needed for a particular use case.",
40646             "restrictions": [
40647                 "string",
40648                 "integer"
40649             ]
40650         },
40651         {
40652             "name": "-webkit-hyphens",
40653             "browsers": [
40654                 "S5.1"
40655             ],
40656             "values": [
40657                 {
40658                     "name": "auto",
40659                     "description": "Conditional hyphenation characters inside a word, if present, take priority over automatic resources when determining hyphenation points within the word."
40660                 },
40661                 {
40662                     "name": "manual",
40663                     "description": "Words are only broken at line breaks where there are characters inside the word that suggest line break opportunities"
40664                 },
40665                 {
40666                     "name": "none",
40667                     "description": "Words are not broken at line breaks, even if characters inside the word suggest line break points."
40668                 }
40669             ],
40670             "relevance": 50,
40671             "description": "Controls whether hyphenation is allowed to create more break opportunities within a line of text.",
40672             "restrictions": [
40673                 "enum"
40674             ]
40675         },
40676         {
40677             "name": "-webkit-line-break",
40678             "browsers": [
40679                 "C",
40680                 "S3"
40681             ],
40682             "values": [
40683                 {
40684                     "name": "after-white-space"
40685                 },
40686                 {
40687                     "name": "normal"
40688                 }
40689             ],
40690             "relevance": 50,
40691             "description": "Specifies line-breaking rules for CJK (Chinese, Japanese, and Korean) text."
40692         },
40693         {
40694             "name": "-webkit-margin-bottom-collapse",
40695             "browsers": [
40696                 "C",
40697                 "S3"
40698             ],
40699             "values": [
40700                 {
40701                     "name": "collapse"
40702                 },
40703                 {
40704                     "name": "discard"
40705                 },
40706                 {
40707                     "name": "separate"
40708                 }
40709             ],
40710             "relevance": 50,
40711             "restrictions": [
40712                 "enum"
40713             ]
40714         },
40715         {
40716             "name": "-webkit-margin-collapse",
40717             "browsers": [
40718                 "C",
40719                 "S3"
40720             ],
40721             "values": [
40722                 {
40723                     "name": "collapse"
40724                 },
40725                 {
40726                     "name": "discard"
40727                 },
40728                 {
40729                     "name": "separate"
40730                 }
40731             ],
40732             "relevance": 50,
40733             "restrictions": [
40734                 "enum"
40735             ]
40736         },
40737         {
40738             "name": "-webkit-margin-start",
40739             "browsers": [
40740                 "C",
40741                 "S3"
40742             ],
40743             "values": [
40744                 {
40745                     "name": "auto"
40746                 }
40747             ],
40748             "relevance": 50,
40749             "restrictions": [
40750                 "percentage",
40751                 "length"
40752             ]
40753         },
40754         {
40755             "name": "-webkit-margin-top-collapse",
40756             "browsers": [
40757                 "C",
40758                 "S3"
40759             ],
40760             "values": [
40761                 {
40762                     "name": "collapse"
40763                 },
40764                 {
40765                     "name": "discard"
40766                 },
40767                 {
40768                     "name": "separate"
40769                 }
40770             ],
40771             "relevance": 50,
40772             "restrictions": [
40773                 "enum"
40774             ]
40775         },
40776         {
40777             "name": "-webkit-mask-clip",
40778             "browsers": [
40779                 "C",
40780                 "O15",
40781                 "S4"
40782             ],
40783             "status": "nonstandard",
40784             "syntax": "[ <box> | border | padding | content | text ]#",
40785             "relevance": 0,
40786             "description": "Determines the mask painting area, which determines the area that is affected by the mask.",
40787             "restrictions": [
40788                 "box"
40789             ]
40790         },
40791         {
40792             "name": "-webkit-mask-image",
40793             "browsers": [
40794                 "C",
40795                 "O15",
40796                 "S4"
40797             ],
40798             "values": [
40799                 {
40800                     "name": "none",
40801                     "description": "Counts as a transparent black image layer."
40802                 },
40803                 {
40804                     "name": "url()",
40805                     "description": "Reference to a <mask element or to a CSS image."
40806                 }
40807             ],
40808             "status": "nonstandard",
40809             "syntax": "<mask-reference>#",
40810             "relevance": 0,
40811             "description": "Sets the mask layer image of an element.",
40812             "restrictions": [
40813                 "url",
40814                 "image",
40815                 "enum"
40816             ]
40817         },
40818         {
40819             "name": "-webkit-mask-origin",
40820             "browsers": [
40821                 "C",
40822                 "O15",
40823                 "S4"
40824             ],
40825             "status": "nonstandard",
40826             "syntax": "[ <box> | border | padding | content ]#",
40827             "relevance": 0,
40828             "description": "Specifies the mask positioning area.",
40829             "restrictions": [
40830                 "box"
40831             ]
40832         },
40833         {
40834             "name": "-webkit-mask-repeat",
40835             "browsers": [
40836                 "C",
40837                 "O15",
40838                 "S4"
40839             ],
40840             "status": "nonstandard",
40841             "syntax": "<repeat-style>#",
40842             "relevance": 0,
40843             "description": "Specifies how mask layer images are tiled after they have been sized and positioned.",
40844             "restrictions": [
40845                 "repeat"
40846             ]
40847         },
40848         {
40849             "name": "-webkit-mask-size",
40850             "browsers": [
40851                 "C",
40852                 "O15",
40853                 "S4"
40854             ],
40855             "values": [
40856                 {
40857                     "name": "auto",
40858                     "description": "Resolved by using the image’s intrinsic ratio and the size of the other dimension, or failing that, using the image’s intrinsic size, or failing that, treating it as 100%."
40859                 },
40860                 {
40861                     "name": "contain",
40862                     "description": "Scale the image, while preserving its intrinsic aspect ratio (if any), to the largest size such that both its width and its height can fit inside the background positioning area."
40863                 },
40864                 {
40865                     "name": "cover",
40866                     "description": "Scale the image, while preserving its intrinsic aspect ratio (if any), to the smallest size such that both its width and its height can completely cover the background positioning area."
40867                 }
40868             ],
40869             "status": "nonstandard",
40870             "syntax": "<bg-size>#",
40871             "relevance": 0,
40872             "description": "Specifies the size of the mask layer images.",
40873             "restrictions": [
40874                 "length",
40875                 "percentage",
40876                 "enum"
40877             ]
40878         },
40879         {
40880             "name": "-webkit-nbsp-mode",
40881             "browsers": [
40882                 "C",
40883                 "S3"
40884             ],
40885             "values": [
40886                 {
40887                     "name": "normal"
40888                 },
40889                 {
40890                     "name": "space"
40891                 }
40892             ],
40893             "relevance": 50,
40894             "description": "Defines the behavior of nonbreaking spaces within text."
40895         },
40896         {
40897             "name": "-webkit-overflow-scrolling",
40898             "browsers": [
40899                 "C",
40900                 "S5"
40901             ],
40902             "values": [
40903                 {
40904                     "name": "auto"
40905                 },
40906                 {
40907                     "name": "touch"
40908                 }
40909             ],
40910             "status": "nonstandard",
40911             "syntax": "auto | touch",
40912             "relevance": 0,
40913             "references": [
40914                 {
40915                     "name": "MDN Reference",
40916                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-overflow-scrolling"
40917                 }
40918             ],
40919             "description": "Specifies whether to use native-style scrolling in an overflow:scroll element."
40920         },
40921         {
40922             "name": "-webkit-padding-start",
40923             "browsers": [
40924                 "C",
40925                 "S3"
40926             ],
40927             "relevance": 50,
40928             "restrictions": [
40929                 "percentage",
40930                 "length"
40931             ]
40932         },
40933         {
40934             "name": "-webkit-perspective",
40935             "browsers": [
40936                 "C",
40937                 "S4"
40938             ],
40939             "values": [
40940                 {
40941                     "name": "none",
40942                     "description": "No perspective transform is applied."
40943                 }
40944             ],
40945             "relevance": 50,
40946             "description": "Applies the same transform as the perspective(<number>) transform function, except that it applies only to the positioned or transformed children of the element, not to the transform on the element itself.",
40947             "restrictions": [
40948                 "length"
40949             ]
40950         },
40951         {
40952             "name": "-webkit-perspective-origin",
40953             "browsers": [
40954                 "C",
40955                 "S4"
40956             ],
40957             "relevance": 50,
40958             "description": "Establishes the origin for the perspective property. It effectively sets the X and Y position at which the viewer appears to be looking at the children of the element.",
40959             "restrictions": [
40960                 "position",
40961                 "percentage",
40962                 "length"
40963             ]
40964         },
40965         {
40966             "name": "-webkit-region-fragment",
40967             "browsers": [
40968                 "S7"
40969             ],
40970             "values": [
40971                 {
40972                     "name": "auto",
40973                     "description": "Content flows as it would in a regular content box."
40974                 },
40975                 {
40976                     "name": "break",
40977                     "description": "If the content fits within the CSS Region, then this property has no effect."
40978                 }
40979             ],
40980             "relevance": 50,
40981             "description": "The 'region-fragment' property controls the behavior of the last region associated with a named flow.",
40982             "restrictions": [
40983                 "enum"
40984             ]
40985         },
40986         {
40987             "name": "-webkit-tap-highlight-color",
40988             "browsers": [
40989                 "E12",
40990                 "C16",
40991                 "O≤15"
40992             ],
40993             "status": "nonstandard",
40994             "syntax": "<color>",
40995             "relevance": 0,
40996             "references": [
40997                 {
40998                     "name": "MDN Reference",
40999                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-tap-highlight-color"
41000                 }
41001             ],
41002             "restrictions": [
41003                 "color"
41004             ]
41005         },
41006         {
41007             "name": "-webkit-text-fill-color",
41008             "browsers": [
41009                 "E12",
41010                 "FF49",
41011                 "S3",
41012                 "C1",
41013                 "O15"
41014             ],
41015             "status": "nonstandard",
41016             "syntax": "<color>",
41017             "relevance": 0,
41018             "references": [
41019                 {
41020                     "name": "MDN Reference",
41021                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-text-fill-color"
41022                 }
41023             ],
41024             "restrictions": [
41025                 "color"
41026             ]
41027         },
41028         {
41029             "name": "-webkit-text-size-adjust",
41030             "browsers": [
41031                 "E",
41032                 "C",
41033                 "S3"
41034             ],
41035             "values": [
41036                 {
41037                     "name": "auto",
41038                     "description": "Renderers must use the default size adjustment when displaying on a small device."
41039                 },
41040                 {
41041                     "name": "none",
41042                     "description": "Renderers must not do size adjustment when displaying on a small device."
41043                 }
41044             ],
41045             "relevance": 50,
41046             "description": "Specifies a size adjustment for displaying text content in mobile browsers.",
41047             "restrictions": [
41048                 "percentage"
41049             ]
41050         },
41051         {
41052             "name": "-webkit-text-stroke",
41053             "browsers": [
41054                 "E15",
41055                 "FF49",
41056                 "S3",
41057                 "C4",
41058                 "O15"
41059             ],
41060             "status": "nonstandard",
41061             "syntax": "<length> || <color>",
41062             "relevance": 0,
41063             "references": [
41064                 {
41065                     "name": "MDN Reference",
41066                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-text-stroke"
41067                 }
41068             ],
41069             "restrictions": [
41070                 "length",
41071                 "line-width",
41072                 "color",
41073                 "percentage"
41074             ]
41075         },
41076         {
41077             "name": "-webkit-text-stroke-color",
41078             "browsers": [
41079                 "E15",
41080                 "FF49",
41081                 "S3",
41082                 "C1",
41083                 "O15"
41084             ],
41085             "status": "nonstandard",
41086             "syntax": "<color>",
41087             "relevance": 0,
41088             "references": [
41089                 {
41090                     "name": "MDN Reference",
41091                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-text-stroke-color"
41092                 }
41093             ],
41094             "restrictions": [
41095                 "color"
41096             ]
41097         },
41098         {
41099             "name": "-webkit-text-stroke-width",
41100             "browsers": [
41101                 "E15",
41102                 "FF49",
41103                 "S3",
41104                 "C1",
41105                 "O15"
41106             ],
41107             "status": "nonstandard",
41108             "syntax": "<length>",
41109             "relevance": 0,
41110             "references": [
41111                 {
41112                     "name": "MDN Reference",
41113                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-text-stroke-width"
41114                 }
41115             ],
41116             "restrictions": [
41117                 "length",
41118                 "line-width",
41119                 "percentage"
41120             ]
41121         },
41122         {
41123             "name": "-webkit-touch-callout",
41124             "browsers": [
41125                 "S3"
41126             ],
41127             "values": [
41128                 {
41129                     "name": "none"
41130                 }
41131             ],
41132             "status": "nonstandard",
41133             "syntax": "default | none",
41134             "relevance": 0,
41135             "references": [
41136                 {
41137                     "name": "MDN Reference",
41138                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-touch-callout"
41139                 }
41140             ],
41141             "restrictions": [
41142                 "enum"
41143             ]
41144         },
41145         {
41146             "name": "-webkit-transform",
41147             "browsers": [
41148                 "C",
41149                 "O12",
41150                 "S3.1"
41151             ],
41152             "values": [
41153                 {
41154                     "name": "matrix()",
41155                     "description": "Specifies a 2D transformation in the form of a transformation matrix of six values. matrix(a,b,c,d,e,f) is equivalent to applying the transformation matrix [a b c d e f]"
41156                 },
41157                 {
41158                     "name": "matrix3d()",
41159                     "description": "Specifies a 3D transformation as a 4x4 homogeneous matrix of 16 values in column-major order."
41160                 },
41161                 {
41162                     "name": "none"
41163                 },
41164                 {
41165                     "name": "perspective()",
41166                     "description": "Specifies a perspective projection matrix."
41167                 },
41168                 {
41169                     "name": "rotate()",
41170                     "description": "Specifies a 2D rotation by the angle specified in the parameter about the origin of the element, as defined by the transform-origin property."
41171                 },
41172                 {
41173                     "name": "rotate3d()",
41174                     "description": "Specifies a clockwise 3D rotation by the angle specified in last parameter about the [x,y,z] direction vector described by the first 3 parameters."
41175                 },
41176                 {
41177                     "name": "rotateX('angle')",
41178                     "description": "Specifies a clockwise rotation by the given angle about the X axis."
41179                 },
41180                 {
41181                     "name": "rotateY('angle')",
41182                     "description": "Specifies a clockwise rotation by the given angle about the Y axis."
41183                 },
41184                 {
41185                     "name": "rotateZ('angle')",
41186                     "description": "Specifies a clockwise rotation by the given angle about the Z axis."
41187                 },
41188                 {
41189                     "name": "scale()",
41190                     "description": "Specifies a 2D scale operation by the [sx,sy] scaling vector described by the 2 parameters. If the second parameter is not provided, it is takes a value equal to the first."
41191                 },
41192                 {
41193                     "name": "scale3d()",
41194                     "description": "Specifies a 3D scale operation by the [sx,sy,sz] scaling vector described by the 3 parameters."
41195                 },
41196                 {
41197                     "name": "scaleX()",
41198                     "description": "Specifies a scale operation using the [sx,1] scaling vector, where sx is given as the parameter."
41199                 },
41200                 {
41201                     "name": "scaleY()",
41202                     "description": "Specifies a scale operation using the [sy,1] scaling vector, where sy is given as the parameter."
41203                 },
41204                 {
41205                     "name": "scaleZ()",
41206                     "description": "Specifies a scale operation using the [1,1,sz] scaling vector, where sz is given as the parameter."
41207                 },
41208                 {
41209                     "name": "skew()",
41210                     "description": "Specifies a skew transformation along the X and Y axes. The first angle parameter specifies the skew on the X axis. The second angle parameter specifies the skew on the Y axis. If the second parameter is not given then a value of 0 is used for the Y angle (ie: no skew on the Y axis)."
41211                 },
41212                 {
41213                     "name": "skewX()",
41214                     "description": "Specifies a skew transformation along the X axis by the given angle."
41215                 },
41216                 {
41217                     "name": "skewY()",
41218                     "description": "Specifies a skew transformation along the Y axis by the given angle."
41219                 },
41220                 {
41221                     "name": "translate()",
41222                     "description": "Specifies a 2D translation by the vector [tx, ty], where tx is the first translation-value parameter and ty is the optional second translation-value parameter."
41223                 },
41224                 {
41225                     "name": "translate3d()",
41226                     "description": "Specifies a 3D translation by the vector [tx,ty,tz], with tx, ty and tz being the first, second and third translation-value parameters respectively."
41227                 },
41228                 {
41229                     "name": "translateX()",
41230                     "description": "Specifies a translation by the given amount in the X direction."
41231                 },
41232                 {
41233                     "name": "translateY()",
41234                     "description": "Specifies a translation by the given amount in the Y direction."
41235                 },
41236                 {
41237                     "name": "translateZ()",
41238                     "description": "Specifies a translation by the given amount in the Z direction. Note that percentage values are not allowed in the translateZ translation-value, and if present are evaluated as 0."
41239                 }
41240             ],
41241             "relevance": 50,
41242             "description": "A two-dimensional transformation is applied to an element through the 'transform' property. This property contains a list of transform functions similar to those allowed by SVG.",
41243             "restrictions": [
41244                 "enum"
41245             ]
41246         },
41247         {
41248             "name": "-webkit-transform-origin",
41249             "browsers": [
41250                 "C",
41251                 "O15",
41252                 "S3.1"
41253             ],
41254             "relevance": 50,
41255             "description": "Establishes the origin of transformation for an element.",
41256             "restrictions": [
41257                 "position",
41258                 "length",
41259                 "percentage"
41260             ]
41261         },
41262         {
41263             "name": "-webkit-transform-origin-x",
41264             "browsers": [
41265                 "C",
41266                 "S3.1"
41267             ],
41268             "relevance": 50,
41269             "description": "The x coordinate of the origin for transforms applied to an element with respect to its border box.",
41270             "restrictions": [
41271                 "length",
41272                 "percentage"
41273             ]
41274         },
41275         {
41276             "name": "-webkit-transform-origin-y",
41277             "browsers": [
41278                 "C",
41279                 "S3.1"
41280             ],
41281             "relevance": 50,
41282             "description": "The y coordinate of the origin for transforms applied to an element with respect to its border box.",
41283             "restrictions": [
41284                 "length",
41285                 "percentage"
41286             ]
41287         },
41288         {
41289             "name": "-webkit-transform-origin-z",
41290             "browsers": [
41291                 "C",
41292                 "S4"
41293             ],
41294             "relevance": 50,
41295             "description": "The z coordinate of the origin for transforms applied to an element with respect to its border box.",
41296             "restrictions": [
41297                 "length",
41298                 "percentage"
41299             ]
41300         },
41301         {
41302             "name": "-webkit-transform-style",
41303             "browsers": [
41304                 "C",
41305                 "S4"
41306             ],
41307             "values": [
41308                 {
41309                     "name": "flat",
41310                     "description": "All children of this element are rendered flattened into the 2D plane of the element."
41311                 }
41312             ],
41313             "relevance": 50,
41314             "description": "Defines how nested elements are rendered in 3D space.",
41315             "restrictions": [
41316                 "enum"
41317             ]
41318         },
41319         {
41320             "name": "-webkit-transition",
41321             "browsers": [
41322                 "C",
41323                 "O12",
41324                 "S5"
41325             ],
41326             "values": [
41327                 {
41328                     "name": "all",
41329                     "description": "Every property that is able to undergo a transition will do so."
41330                 },
41331                 {
41332                     "name": "none",
41333                     "description": "No property will transition."
41334                 }
41335             ],
41336             "relevance": 50,
41337             "description": "Shorthand property combines four of the transition properties into a single property.",
41338             "restrictions": [
41339                 "time",
41340                 "property",
41341                 "timing-function",
41342                 "enum"
41343             ]
41344         },
41345         {
41346             "name": "-webkit-transition-delay",
41347             "browsers": [
41348                 "C",
41349                 "O12",
41350                 "S5"
41351             ],
41352             "relevance": 50,
41353             "description": "Defines when the transition will start. It allows a transition to begin execution some period of time from when it is applied.",
41354             "restrictions": [
41355                 "time"
41356             ]
41357         },
41358         {
41359             "name": "-webkit-transition-duration",
41360             "browsers": [
41361                 "C",
41362                 "O12",
41363                 "S5"
41364             ],
41365             "relevance": 50,
41366             "description": "Specifies how long the transition from the old value to the new value should take.",
41367             "restrictions": [
41368                 "time"
41369             ]
41370         },
41371         {
41372             "name": "-webkit-transition-property",
41373             "browsers": [
41374                 "C",
41375                 "O12",
41376                 "S5"
41377             ],
41378             "values": [
41379                 {
41380                     "name": "all",
41381                     "description": "Every property that is able to undergo a transition will do so."
41382                 },
41383                 {
41384                     "name": "none",
41385                     "description": "No property will transition."
41386                 }
41387             ],
41388             "relevance": 50,
41389             "description": "Specifies the name of the CSS property to which the transition is applied.",
41390             "restrictions": [
41391                 "property"
41392             ]
41393         },
41394         {
41395             "name": "-webkit-transition-timing-function",
41396             "browsers": [
41397                 "C",
41398                 "O12",
41399                 "S5"
41400             ],
41401             "relevance": 50,
41402             "description": "Describes how the intermediate values used during a transition will be calculated.",
41403             "restrictions": [
41404                 "timing-function"
41405             ]
41406         },
41407         {
41408             "name": "-webkit-user-drag",
41409             "browsers": [
41410                 "S3"
41411             ],
41412             "values": [
41413                 {
41414                     "name": "auto"
41415                 },
41416                 {
41417                     "name": "element"
41418                 },
41419                 {
41420                     "name": "none"
41421                 }
41422             ],
41423             "relevance": 50,
41424             "restrictions": [
41425                 "enum"
41426             ]
41427         },
41428         {
41429             "name": "-webkit-user-modify",
41430             "browsers": [
41431                 "C",
41432                 "S3"
41433             ],
41434             "values": [
41435                 {
41436                     "name": "read-only"
41437                 },
41438                 {
41439                     "name": "read-write"
41440                 },
41441                 {
41442                     "name": "read-write-plaintext-only"
41443                 }
41444             ],
41445             "status": "nonstandard",
41446             "syntax": "read-only | read-write | read-write-plaintext-only",
41447             "relevance": 0,
41448             "description": "Determines whether a user can edit the content of an element.",
41449             "restrictions": [
41450                 "enum"
41451             ]
41452         },
41453         {
41454             "name": "-webkit-user-select",
41455             "browsers": [
41456                 "C",
41457                 "S3"
41458             ],
41459             "values": [
41460                 {
41461                     "name": "auto"
41462                 },
41463                 {
41464                     "name": "none"
41465                 },
41466                 {
41467                     "name": "text"
41468                 }
41469             ],
41470             "relevance": 50,
41471             "description": "Controls the appearance of selection.",
41472             "restrictions": [
41473                 "enum"
41474             ]
41475         },
41476         {
41477             "name": "white-space",
41478             "values": [
41479                 {
41480                     "name": "normal",
41481                     "description": "Sets 'white-space-collapsing' to 'collapse' and 'text-wrap' to 'normal'."
41482                 },
41483                 {
41484                     "name": "nowrap",
41485                     "description": "Sets 'white-space-collapsing' to 'collapse' and 'text-wrap' to 'none'."
41486                 },
41487                 {
41488                     "name": "pre",
41489                     "description": "Sets 'white-space-collapsing' to 'preserve' and 'text-wrap' to 'none'."
41490                 },
41491                 {
41492                     "name": "pre-line",
41493                     "description": "Sets 'white-space-collapsing' to 'preserve-breaks' and 'text-wrap' to 'normal'."
41494                 },
41495                 {
41496                     "name": "pre-wrap",
41497                     "description": "Sets 'white-space-collapsing' to 'preserve' and 'text-wrap' to 'normal'."
41498                 }
41499             ],
41500             "syntax": "normal | pre | nowrap | pre-wrap | pre-line | break-spaces",
41501             "relevance": 88,
41502             "references": [
41503                 {
41504                     "name": "MDN Reference",
41505                     "url": "https://developer.mozilla.org/docs/Web/CSS/white-space"
41506                 }
41507             ],
41508             "description": "Shorthand property for the 'white-space-collapsing' and 'text-wrap' properties.",
41509             "restrictions": [
41510                 "enum"
41511             ]
41512         },
41513         {
41514             "name": "widows",
41515             "browsers": [
41516                 "E12",
41517                 "S1.3",
41518                 "C25",
41519                 "IE8",
41520                 "O9.2"
41521             ],
41522             "syntax": "<integer>",
41523             "relevance": 51,
41524             "references": [
41525                 {
41526                     "name": "MDN Reference",
41527                     "url": "https://developer.mozilla.org/docs/Web/CSS/widows"
41528                 }
41529             ],
41530             "description": "Specifies the minimum number of line boxes of a block container that must be left in a fragment after a break.",
41531             "restrictions": [
41532                 "integer"
41533             ]
41534         },
41535         {
41536             "name": "width",
41537             "values": [
41538                 {
41539                     "name": "auto",
41540                     "description": "The width depends on the values of other properties."
41541                 },
41542                 {
41543                     "name": "fit-content",
41544                     "description": "Use the fit-content inline size or fit-content block size, as appropriate to the writing mode."
41545                 },
41546                 {
41547                     "name": "max-content",
41548                     "description": "Use the max-content inline size or max-content block size, as appropriate to the writing mode."
41549                 },
41550                 {
41551                     "name": "min-content",
41552                     "description": "Use the min-content inline size or min-content block size, as appropriate to the writing mode."
41553                 }
41554             ],
41555             "syntax": "<viewport-length>{1,2}",
41556             "relevance": 96,
41557             "references": [
41558                 {
41559                     "name": "MDN Reference",
41560                     "url": "https://developer.mozilla.org/docs/Web/CSS/width"
41561                 }
41562             ],
41563             "description": "Specifies the width of the content area, padding area or border area (depending on 'box-sizing') of certain boxes.",
41564             "restrictions": [
41565                 "length",
41566                 "percentage"
41567             ]
41568         },
41569         {
41570             "name": "will-change",
41571             "browsers": [
41572                 "E79",
41573                 "FF36",
41574                 "S9.1",
41575                 "C36",
41576                 "O24"
41577             ],
41578             "values": [
41579                 {
41580                     "name": "auto",
41581                     "description": "Expresses no particular intent."
41582                 },
41583                 {
41584                     "name": "contents",
41585                     "description": "Indicates that the author expects to animate or change something about the element’s contents in the near future."
41586                 },
41587                 {
41588                     "name": "scroll-position",
41589                     "description": "Indicates that the author expects to animate or change the scroll position of the element in the near future."
41590                 }
41591             ],
41592             "syntax": "auto | <animateable-feature>#",
41593             "relevance": 62,
41594             "references": [
41595                 {
41596                     "name": "MDN Reference",
41597                     "url": "https://developer.mozilla.org/docs/Web/CSS/will-change"
41598                 }
41599             ],
41600             "description": "Provides a rendering hint to the user agent, stating what kinds of changes the author expects to perform on the element.",
41601             "restrictions": [
41602                 "enum",
41603                 "identifier"
41604             ]
41605         },
41606         {
41607             "name": "word-break",
41608             "values": [
41609                 {
41610                     "name": "break-all",
41611                     "description": "Lines may break between any two grapheme clusters for non-CJK scripts."
41612                 },
41613                 {
41614                     "name": "keep-all",
41615                     "description": "Block characters can no longer create implied break points."
41616                 },
41617                 {
41618                     "name": "normal",
41619                     "description": "Breaks non-CJK scripts according to their own rules."
41620                 }
41621             ],
41622             "syntax": "normal | break-all | keep-all | break-word",
41623             "relevance": 72,
41624             "references": [
41625                 {
41626                     "name": "MDN Reference",
41627                     "url": "https://developer.mozilla.org/docs/Web/CSS/word-break"
41628                 }
41629             ],
41630             "description": "Specifies line break opportunities for non-CJK scripts.",
41631             "restrictions": [
41632                 "enum"
41633             ]
41634         },
41635         {
41636             "name": "word-spacing",
41637             "values": [
41638                 {
41639                     "name": "normal",
41640                     "description": "No additional spacing is applied. Computes to zero."
41641                 }
41642             ],
41643             "syntax": "normal | <length-percentage>",
41644             "relevance": 57,
41645             "references": [
41646                 {
41647                     "name": "MDN Reference",
41648                     "url": "https://developer.mozilla.org/docs/Web/CSS/word-spacing"
41649                 }
41650             ],
41651             "description": "Specifies additional spacing between “words”.",
41652             "restrictions": [
41653                 "length",
41654                 "percentage"
41655             ]
41656         },
41657         {
41658             "name": "word-wrap",
41659             "values": [
41660                 {
41661                     "name": "break-word",
41662                     "description": "An otherwise unbreakable sequence of characters may be broken at an arbitrary point if there are no otherwise-acceptable break points in the line."
41663                 },
41664                 {
41665                     "name": "normal",
41666                     "description": "Lines may break only at allowed break points."
41667                 }
41668             ],
41669             "syntax": "normal | break-word",
41670             "relevance": 77,
41671             "references": [
41672                 {
41673                     "name": "MDN Reference",
41674                     "url": "https://developer.mozilla.org/docs/Web/CSS/overflow-wrap"
41675                 }
41676             ],
41677             "description": "Specifies whether the UA may break within a word to prevent overflow when an otherwise-unbreakable string is too long to fit.",
41678             "restrictions": [
41679                 "enum"
41680             ]
41681         },
41682         {
41683             "name": "writing-mode",
41684             "values": [
41685                 {
41686                     "name": "horizontal-tb",
41687                     "description": "Top-to-bottom block flow direction. The writing mode is horizontal."
41688                 },
41689                 {
41690                     "name": "sideways-lr",
41691                     "description": "Left-to-right block flow direction. The writing mode is vertical, while the typographic mode is horizontal."
41692                 },
41693                 {
41694                     "name": "sideways-rl",
41695                     "description": "Right-to-left block flow direction. The writing mode is vertical, while the typographic mode is horizontal."
41696                 },
41697                 {
41698                     "name": "vertical-lr",
41699                     "description": "Left-to-right block flow direction. The writing mode is vertical."
41700                 },
41701                 {
41702                     "name": "vertical-rl",
41703                     "description": "Right-to-left block flow direction. The writing mode is vertical."
41704                 }
41705             ],
41706             "syntax": "horizontal-tb | vertical-rl | vertical-lr | sideways-rl | sideways-lr",
41707             "relevance": 50,
41708             "references": [
41709                 {
41710                     "name": "MDN Reference",
41711                     "url": "https://developer.mozilla.org/docs/Web/CSS/writing-mode"
41712                 }
41713             ],
41714             "description": "This is a shorthand property for both 'direction' and 'block-progression'.",
41715             "restrictions": [
41716                 "enum"
41717             ]
41718         },
41719         {
41720             "name": "z-index",
41721             "values": [
41722                 {
41723                     "name": "auto",
41724                     "description": "The stack level of the generated box in the current stacking context is 0. The box does not establish a new stacking context unless it is the root element."
41725                 }
41726             ],
41727             "syntax": "auto | <integer>",
41728             "relevance": 91,
41729             "references": [
41730                 {
41731                     "name": "MDN Reference",
41732                     "url": "https://developer.mozilla.org/docs/Web/CSS/z-index"
41733                 }
41734             ],
41735             "description": "For a positioned box, the 'z-index' property specifies the stack level of the box in the current stacking context and whether the box establishes a local stacking context.",
41736             "restrictions": [
41737                 "integer"
41738             ]
41739         },
41740         {
41741             "name": "zoom",
41742             "browsers": [
41743                 "E12",
41744                 "S3.1",
41745                 "C1",
41746                 "IE5.5",
41747                 "O15"
41748             ],
41749             "values": [
41750                 {
41751                     "name": "normal"
41752                 }
41753             ],
41754             "syntax": "auto | <number> | <percentage>",
41755             "relevance": 74,
41756             "references": [
41757                 {
41758                     "name": "MDN Reference",
41759                     "url": "https://developer.mozilla.org/docs/Web/CSS/zoom"
41760                 }
41761             ],
41762             "description": "Non-standard. Specifies the magnification scale of the object. See 'transform: scale()' for a standards-based alternative.",
41763             "restrictions": [
41764                 "enum",
41765                 "integer",
41766                 "number",
41767                 "percentage"
41768             ]
41769         },
41770         {
41771             "name": "-ms-ime-align",
41772             "status": "nonstandard",
41773             "syntax": "auto | after",
41774             "relevance": 0,
41775             "description": "Aligns the Input Method Editor (IME) candidate window box relative to the element on which the IME composition is active."
41776         },
41777         {
41778             "name": "-moz-binding",
41779             "status": "nonstandard",
41780             "syntax": "<url> | none",
41781             "relevance": 0,
41782             "browsers": [
41783                 "FF1"
41784             ],
41785             "references": [
41786                 {
41787                     "name": "MDN Reference",
41788                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-binding"
41789                 }
41790             ],
41791             "description": "The -moz-binding CSS property is used by Mozilla-based applications to attach an XBL binding to a DOM element."
41792         },
41793         {
41794             "name": "-moz-context-properties",
41795             "status": "nonstandard",
41796             "syntax": "none | [ fill | fill-opacity | stroke | stroke-opacity ]#",
41797             "relevance": 0,
41798             "browsers": [
41799                 "FF55"
41800             ],
41801             "references": [
41802                 {
41803                     "name": "MDN Reference",
41804                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-context-properties"
41805                 }
41806             ],
41807             "description": "If you reference an SVG image in a webpage (such as with the <img> element or as a background image), the SVG image can coordinate with the embedding element (its context) to have the image adopt property values set on the embedding element. To do this the embedding element needs to list the properties that are to be made available to the image by listing them as values of the -moz-context-properties property, and the image needs to opt in to using those properties by using values such as the context-fill value.\n\nThis feature is available since Firefox 55, but is only currently supported with SVG images loaded via chrome:// or resource:// URLs. To experiment with the feature in SVG on the Web it is necessary to set the svg.context-properties.content.enabled pref to true."
41808         },
41809         {
41810             "name": "-moz-float-edge",
41811             "status": "nonstandard",
41812             "syntax": "border-box | content-box | margin-box | padding-box",
41813             "relevance": 0,
41814             "browsers": [
41815                 "FF1"
41816             ],
41817             "references": [
41818                 {
41819                     "name": "MDN Reference",
41820                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-float-edge"
41821                 }
41822             ],
41823             "description": "The non-standard -moz-float-edge CSS property specifies whether the height and width properties of the element include the margin, border, or padding thickness."
41824         },
41825         {
41826             "name": "-moz-force-broken-image-icon",
41827             "status": "nonstandard",
41828             "syntax": "<integer>",
41829             "relevance": 0,
41830             "browsers": [
41831                 "FF1"
41832             ],
41833             "references": [
41834                 {
41835                     "name": "MDN Reference",
41836                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-force-broken-image-icon"
41837                 }
41838             ],
41839             "description": "The -moz-force-broken-image-icon extended CSS property can be used to force the broken image icon to be shown even when a broken image has an alt attribute."
41840         },
41841         {
41842             "name": "-moz-image-region",
41843             "status": "nonstandard",
41844             "syntax": "<shape> | auto",
41845             "relevance": 0,
41846             "browsers": [
41847                 "FF1"
41848             ],
41849             "references": [
41850                 {
41851                     "name": "MDN Reference",
41852                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-image-region"
41853                 }
41854             ],
41855             "description": "For certain XUL elements and pseudo-elements that use an image from the list-style-image property, this property specifies a region of the image that is used in place of the whole image. This allows elements to use different pieces of the same image to improve performance."
41856         },
41857         {
41858             "name": "-moz-orient",
41859             "status": "nonstandard",
41860             "syntax": "inline | block | horizontal | vertical",
41861             "relevance": 0,
41862             "browsers": [
41863                 "FF6"
41864             ],
41865             "references": [
41866                 {
41867                     "name": "MDN Reference",
41868                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-orient"
41869                 }
41870             ],
41871             "description": "The -moz-orient CSS property specifies the orientation of the element to which it's applied."
41872         },
41873         {
41874             "name": "-moz-outline-radius",
41875             "status": "nonstandard",
41876             "syntax": "<outline-radius>{1,4} [ / <outline-radius>{1,4} ]?",
41877             "relevance": 0,
41878             "browsers": [
41879                 "FF1"
41880             ],
41881             "references": [
41882                 {
41883                     "name": "MDN Reference",
41884                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-outline-radius"
41885                 }
41886             ],
41887             "description": "In Mozilla applications like Firefox, the -moz-outline-radius CSS property can be used to give an element's outline rounded corners."
41888         },
41889         {
41890             "name": "-moz-outline-radius-bottomleft",
41891             "status": "nonstandard",
41892             "syntax": "<outline-radius>",
41893             "relevance": 0,
41894             "browsers": [
41895                 "FF1"
41896             ],
41897             "references": [
41898                 {
41899                     "name": "MDN Reference",
41900                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-outline-radius-bottomleft"
41901                 }
41902             ],
41903             "description": "In Mozilla applications, the -moz-outline-radius-bottomleft CSS property can be used to round the bottom-left corner of an element's outline."
41904         },
41905         {
41906             "name": "-moz-outline-radius-bottomright",
41907             "status": "nonstandard",
41908             "syntax": "<outline-radius>",
41909             "relevance": 0,
41910             "browsers": [
41911                 "FF1"
41912             ],
41913             "references": [
41914                 {
41915                     "name": "MDN Reference",
41916                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-outline-radius-bottomright"
41917                 }
41918             ],
41919             "description": "In Mozilla applications, the -moz-outline-radius-bottomright CSS property can be used to round the bottom-right corner of an element's outline."
41920         },
41921         {
41922             "name": "-moz-outline-radius-topleft",
41923             "status": "nonstandard",
41924             "syntax": "<outline-radius>",
41925             "relevance": 0,
41926             "browsers": [
41927                 "FF1"
41928             ],
41929             "references": [
41930                 {
41931                     "name": "MDN Reference",
41932                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-outline-radius-topleft"
41933                 }
41934             ],
41935             "description": "In Mozilla applications, the -moz-outline-radius-topleft CSS property can be used to round the top-left corner of an element's outline."
41936         },
41937         {
41938             "name": "-moz-outline-radius-topright",
41939             "status": "nonstandard",
41940             "syntax": "<outline-radius>",
41941             "relevance": 0,
41942             "browsers": [
41943                 "FF1"
41944             ],
41945             "references": [
41946                 {
41947                     "name": "MDN Reference",
41948                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-outline-radius-topright"
41949                 }
41950             ],
41951             "description": "In Mozilla applications, the -moz-outline-radius-topright CSS property can be used to round the top-right corner of an element's outline."
41952         },
41953         {
41954             "name": "-moz-stack-sizing",
41955             "status": "nonstandard",
41956             "syntax": "ignore | stretch-to-fit",
41957             "relevance": 0,
41958             "description": "-moz-stack-sizing is an extended CSS property. Normally, a stack will change its size so that all of its child elements are completely visible. For example, moving a child of the stack far to the right will widen the stack so the child remains visible."
41959         },
41960         {
41961             "name": "-moz-text-blink",
41962             "status": "nonstandard",
41963             "syntax": "none | blink",
41964             "relevance": 0,
41965             "description": "The -moz-text-blink non-standard Mozilla CSS extension specifies the blink mode."
41966         },
41967         {
41968             "name": "-moz-user-input",
41969             "status": "nonstandard",
41970             "syntax": "auto | none | enabled | disabled",
41971             "relevance": 0,
41972             "browsers": [
41973                 "FF1"
41974             ],
41975             "references": [
41976                 {
41977                     "name": "MDN Reference",
41978                     "url": "https://developer.mozilla.org/docs/Web/CSS/-moz-user-input"
41979                 }
41980             ],
41981             "description": "In Mozilla applications, -moz-user-input determines if an element will accept user input."
41982         },
41983         {
41984             "name": "-moz-user-modify",
41985             "status": "nonstandard",
41986             "syntax": "read-only | read-write | write-only",
41987             "relevance": 0,
41988             "description": "The -moz-user-modify property has no effect. It was originally planned to determine whether or not the content of an element can be edited by a user."
41989         },
41990         {
41991             "name": "-moz-window-dragging",
41992             "status": "nonstandard",
41993             "syntax": "drag | no-drag",
41994             "relevance": 0,
41995             "description": "The -moz-window-dragging CSS property specifies whether a window is draggable or not. It only works in Chrome code, and only on Mac OS X."
41996         },
41997         {
41998             "name": "-moz-window-shadow",
41999             "status": "nonstandard",
42000             "syntax": "default | menu | tooltip | sheet | none",
42001             "relevance": 0,
42002             "description": "The -moz-window-shadow CSS property specifies whether a window will have a shadow. It only works on Mac OS X."
42003         },
42004         {
42005             "name": "-webkit-border-before",
42006             "status": "nonstandard",
42007             "syntax": "<'border-width'> || <'border-style'> || <'color'>",
42008             "relevance": 0,
42009             "browsers": [
42010                 "E79",
42011                 "S5.1",
42012                 "C8",
42013                 "O15"
42014             ],
42015             "references": [
42016                 {
42017                     "name": "MDN Reference",
42018                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-border-before"
42019                 }
42020             ],
42021             "description": "The -webkit-border-before CSS property is a shorthand property for setting the individual logical block start border property values in a single place in the style sheet."
42022         },
42023         {
42024             "name": "-webkit-border-before-color",
42025             "status": "nonstandard",
42026             "syntax": "<'color'>",
42027             "relevance": 0,
42028             "description": "The -webkit-border-before-color CSS property sets the color of the individual logical block start border in a single place in the style sheet."
42029         },
42030         {
42031             "name": "-webkit-border-before-style",
42032             "status": "nonstandard",
42033             "syntax": "<'border-style'>",
42034             "relevance": 0,
42035             "description": "The -webkit-border-before-style CSS property sets the style of the individual logical block start border in a single place in the style sheet."
42036         },
42037         {
42038             "name": "-webkit-border-before-width",
42039             "status": "nonstandard",
42040             "syntax": "<'border-width'>",
42041             "relevance": 0,
42042             "description": "The -webkit-border-before-width CSS property sets the width of the individual logical block start border in a single place in the style sheet."
42043         },
42044         {
42045             "name": "-webkit-line-clamp",
42046             "syntax": "none | <integer>",
42047             "relevance": 50,
42048             "browsers": [
42049                 "E17",
42050                 "FF68",
42051                 "S5",
42052                 "C6",
42053                 "O15"
42054             ],
42055             "references": [
42056                 {
42057                     "name": "MDN Reference",
42058                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-line-clamp"
42059                 }
42060             ],
42061             "description": "The -webkit-line-clamp CSS property allows limiting of the contents of a block container to the specified number of lines."
42062         },
42063         {
42064             "name": "-webkit-mask",
42065             "status": "nonstandard",
42066             "syntax": "[ <mask-reference> || <position> [ / <bg-size> ]? || <repeat-style> || [ <box> | border | padding | content | text ] || [ <box> | border | padding | content ] ]#",
42067             "relevance": 0,
42068             "description": "The mask CSS property alters the visibility of an element by either partially or fully hiding it. This is accomplished by either masking or clipping the image at specific points."
42069         },
42070         {
42071             "name": "-webkit-mask-attachment",
42072             "status": "nonstandard",
42073             "syntax": "<attachment>#",
42074             "relevance": 0,
42075             "browsers": [
42076                 "S4",
42077                 "C1"
42078             ],
42079             "references": [
42080                 {
42081                     "name": "MDN Reference",
42082                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-attachment"
42083                 }
42084             ],
42085             "description": "If a -webkit-mask-image is specified, -webkit-mask-attachment determines whether the mask image's position is fixed within the viewport, or scrolls along with its containing block."
42086         },
42087         {
42088             "name": "-webkit-mask-composite",
42089             "status": "nonstandard",
42090             "syntax": "<composite-style>#",
42091             "relevance": 0,
42092             "browsers": [
42093                 "E18",
42094                 "FF53",
42095                 "S3.2",
42096                 "C1",
42097                 "O15"
42098             ],
42099             "references": [
42100                 {
42101                     "name": "MDN Reference",
42102                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-composite"
42103                 }
42104             ],
42105             "description": "The -webkit-mask-composite property specifies the manner in which multiple mask images applied to the same element are composited with one another. Mask images are composited in the opposite order that they are declared with the -webkit-mask-image property."
42106         },
42107         {
42108             "name": "-webkit-mask-position",
42109             "status": "nonstandard",
42110             "syntax": "<position>#",
42111             "relevance": 0,
42112             "description": "The mask-position CSS property sets the initial position, relative to the mask position layer defined by mask-origin, for each defined mask image."
42113         },
42114         {
42115             "name": "-webkit-mask-position-x",
42116             "status": "nonstandard",
42117             "syntax": "[ <length-percentage> | left | center | right ]#",
42118             "relevance": 0,
42119             "browsers": [
42120                 "E18",
42121                 "FF49",
42122                 "S3.2",
42123                 "C1",
42124                 "O15"
42125             ],
42126             "references": [
42127                 {
42128                     "name": "MDN Reference",
42129                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-position-x"
42130                 }
42131             ],
42132             "description": "The -webkit-mask-position-x CSS property sets the initial horizontal position of a mask image."
42133         },
42134         {
42135             "name": "-webkit-mask-position-y",
42136             "status": "nonstandard",
42137             "syntax": "[ <length-percentage> | top | center | bottom ]#",
42138             "relevance": 0,
42139             "browsers": [
42140                 "E18",
42141                 "FF49",
42142                 "S3.2",
42143                 "C1",
42144                 "O15"
42145             ],
42146             "references": [
42147                 {
42148                     "name": "MDN Reference",
42149                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-position-y"
42150                 }
42151             ],
42152             "description": "The -webkit-mask-position-y CSS property sets the initial vertical position of a mask image."
42153         },
42154         {
42155             "name": "-webkit-mask-repeat-x",
42156             "status": "nonstandard",
42157             "syntax": "repeat | no-repeat | space | round",
42158             "relevance": 0,
42159             "browsers": [
42160                 "E18",
42161                 "S5",
42162                 "C3",
42163                 "O15"
42164             ],
42165             "references": [
42166                 {
42167                     "name": "MDN Reference",
42168                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-repeat-x"
42169                 }
42170             ],
42171             "description": "The -webkit-mask-repeat-x property specifies whether and how a mask image is repeated (tiled) horizontally."
42172         },
42173         {
42174             "name": "-webkit-mask-repeat-y",
42175             "status": "nonstandard",
42176             "syntax": "repeat | no-repeat | space | round",
42177             "relevance": 0,
42178             "browsers": [
42179                 "E18",
42180                 "S5",
42181                 "C3",
42182                 "O15"
42183             ],
42184             "references": [
42185                 {
42186                     "name": "MDN Reference",
42187                     "url": "https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-repeat-y"
42188                 }
42189             ],
42190             "description": "The -webkit-mask-repeat-y property specifies whether and how a mask image is repeated (tiled) vertically."
42191         },
42192         {
42193             "name": "appearance",
42194             "status": "experimental",
42195             "syntax": "none | auto | button | textfield | menulist-button | <compat-auto>",
42196             "relevance": 60,
42197             "browsers": [
42198                 "E84",
42199                 "FF1",
42200                 "S3",
42201                 "C84",
42202                 "O70"
42203             ],
42204             "references": [
42205                 {
42206                     "name": "MDN Reference",
42207                     "url": "https://developer.mozilla.org/docs/Web/CSS/appearance"
42208                 }
42209             ],
42210             "description": "Changes the appearance of buttons and other controls to resemble native controls."
42211         },
42212         {
42213             "name": "aspect-ratio",
42214             "status": "experimental",
42215             "syntax": "auto | <ratio>",
42216             "relevance": 50,
42217             "browsers": [
42218                 "E79",
42219                 "FF71",
42220                 "C79"
42221             ],
42222             "references": [
42223                 {
42224                     "name": "MDN Reference",
42225                     "url": "https://developer.mozilla.org/docs/Web/CSS/aspect-ratio"
42226                 }
42227             ],
42228             "description": "The aspect-ratio   CSS property sets a preferred aspect ratio for the box, which will be used in the calculation of auto sizes and some other layout functions."
42229         },
42230         {
42231             "name": "azimuth",
42232             "status": "obsolete",
42233             "syntax": "<angle> | [ [ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards",
42234             "relevance": 0,
42235             "references": [
42236                 {
42237                     "name": "MDN Reference",
42238                     "url": "https://developer.mozilla.org/docs/Web/CSS/azimuth"
42239                 }
42240             ],
42241             "description": "In combination with elevation, the azimuth CSS property enables different audio sources to be positioned spatially for aural presentation. This is important in that it provides a natural way to tell several voices apart, as each can be positioned to originate at a different location on the sound stage. Stereo output produce a lateral sound stage, while binaural headphones and multi-speaker setups allow for a fully three-dimensional stage."
42242         },
42243         {
42244             "name": "backdrop-filter",
42245             "syntax": "none | <filter-function-list>",
42246             "relevance": 51,
42247             "browsers": [
42248                 "E17",
42249                 "FF70",
42250                 "S9",
42251                 "C76",
42252                 "O34"
42253             ],
42254             "references": [
42255                 {
42256                     "name": "MDN Reference",
42257                     "url": "https://developer.mozilla.org/docs/Web/CSS/backdrop-filter"
42258                 }
42259             ],
42260             "description": "The backdrop-filter CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything behind the element, to see the effect you must make the element or its background at least partially transparent."
42261         },
42262         {
42263             "name": "border-block",
42264             "syntax": "<'border-top-width'> || <'border-top-style'> || <'color'>",
42265             "relevance": 50,
42266             "browsers": [
42267                 "E79",
42268                 "FF66",
42269                 "C69",
42270                 "O56"
42271             ],
42272             "references": [
42273                 {
42274                     "name": "MDN Reference",
42275                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-block"
42276                 }
42277             ],
42278             "description": "The border-block CSS property is a shorthand property for setting the individual logical block border property values in a single place in the style sheet."
42279         },
42280         {
42281             "name": "border-block-color",
42282             "syntax": "<'border-top-color'>{1,2}",
42283             "relevance": 50,
42284             "browsers": [
42285                 "E79",
42286                 "FF66",
42287                 "C69",
42288                 "O56"
42289             ],
42290             "references": [
42291                 {
42292                     "name": "MDN Reference",
42293                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-block-color"
42294                 }
42295             ],
42296             "description": "The border-block-color CSS property defines the color of the logical block borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the border-top-color and border-bottom-color, or border-right-color and border-left-color property depending on the values defined for writing-mode, direction, and text-orientation."
42297         },
42298         {
42299             "name": "border-block-style",
42300             "syntax": "<'border-top-style'>",
42301             "relevance": 50,
42302             "browsers": [
42303                 "E79",
42304                 "FF66",
42305                 "C69",
42306                 "O56"
42307             ],
42308             "references": [
42309                 {
42310                     "name": "MDN Reference",
42311                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-block-style"
42312                 }
42313             ],
42314             "description": "The border-block-style CSS property defines the style of the logical block borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the border-top-style and border-bottom-style, or border-left-style and border-right-style properties depending on the values defined for writing-mode, direction, and text-orientation."
42315         },
42316         {
42317             "name": "border-block-width",
42318             "syntax": "<'border-top-width'>",
42319             "relevance": 50,
42320             "browsers": [
42321                 "E79",
42322                 "FF66",
42323                 "C69",
42324                 "O56"
42325             ],
42326             "references": [
42327                 {
42328                     "name": "MDN Reference",
42329                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-block-width"
42330                 }
42331             ],
42332             "description": "The border-block-width CSS property defines the width of the logical block borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the border-top-width and border-bottom-width, or border-left-width, and border-right-width property depending on the values defined for writing-mode, direction, and text-orientation."
42333         },
42334         {
42335             "name": "border-end-end-radius",
42336             "syntax": "<length-percentage>{1,2}",
42337             "relevance": 50,
42338             "browsers": [
42339                 "FF66"
42340             ],
42341             "references": [
42342                 {
42343                     "name": "MDN Reference",
42344                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-end-end-radius"
42345                 }
42346             ],
42347             "description": "The border-end-end-radius CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on on the element's writing-mode, direction, and text-orientation."
42348         },
42349         {
42350             "name": "border-end-start-radius",
42351             "syntax": "<length-percentage>{1,2}",
42352             "relevance": 50,
42353             "browsers": [
42354                 "FF66"
42355             ],
42356             "references": [
42357                 {
42358                     "name": "MDN Reference",
42359                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-end-start-radius"
42360                 }
42361             ],
42362             "description": "The border-end-start-radius CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's writing-mode, direction, and text-orientation."
42363         },
42364         {
42365             "name": "border-inline",
42366             "syntax": "<'border-top-width'> || <'border-top-style'> || <'color'>",
42367             "relevance": 50,
42368             "browsers": [
42369                 "E79",
42370                 "FF66",
42371                 "C69",
42372                 "O56"
42373             ],
42374             "references": [
42375                 {
42376                     "name": "MDN Reference",
42377                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-inline"
42378                 }
42379             ],
42380             "description": "The border-inline CSS property is a shorthand property for setting the individual logical inline border property values in a single place in the style sheet."
42381         },
42382         {
42383             "name": "border-inline-color",
42384             "syntax": "<'border-top-color'>{1,2}",
42385             "relevance": 50,
42386             "browsers": [
42387                 "E79",
42388                 "FF66",
42389                 "C69",
42390                 "O56"
42391             ],
42392             "references": [
42393                 {
42394                     "name": "MDN Reference",
42395                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-inline-color"
42396                 }
42397             ],
42398             "description": "The border-inline-color CSS property defines the color of the logical inline borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the border-top-color and border-bottom-color, or border-right-color and border-left-color property depending on the values defined for writing-mode, direction, and text-orientation."
42399         },
42400         {
42401             "name": "border-inline-style",
42402             "syntax": "<'border-top-style'>",
42403             "relevance": 50,
42404             "browsers": [
42405                 "E79",
42406                 "FF66",
42407                 "C69",
42408                 "O56"
42409             ],
42410             "references": [
42411                 {
42412                     "name": "MDN Reference",
42413                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-inline-style"
42414                 }
42415             ],
42416             "description": "The border-inline-style CSS property defines the style of the logical inline borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the border-top-style and border-bottom-style, or border-left-style and border-right-style properties depending on the values defined for writing-mode, direction, and text-orientation."
42417         },
42418         {
42419             "name": "border-inline-width",
42420             "syntax": "<'border-top-width'>",
42421             "relevance": 50,
42422             "browsers": [
42423                 "E79",
42424                 "FF66",
42425                 "C69",
42426                 "O56"
42427             ],
42428             "references": [
42429                 {
42430                     "name": "MDN Reference",
42431                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-inline-width"
42432                 }
42433             ],
42434             "description": "The border-inline-width CSS property defines the width of the logical inline borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the border-top-width and border-bottom-width, or border-left-width, and border-right-width property depending on the values defined for writing-mode, direction, and text-orientation."
42435         },
42436         {
42437             "name": "border-start-end-radius",
42438             "syntax": "<length-percentage>{1,2}",
42439             "relevance": 50,
42440             "browsers": [
42441                 "FF66"
42442             ],
42443             "references": [
42444                 {
42445                     "name": "MDN Reference",
42446                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-start-end-radius"
42447                 }
42448             ],
42449             "description": "The border-start-end-radius CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's writing-mode, direction, and text-orientation."
42450         },
42451         {
42452             "name": "border-start-start-radius",
42453             "syntax": "<length-percentage>{1,2}",
42454             "relevance": 50,
42455             "browsers": [
42456                 "FF66"
42457             ],
42458             "references": [
42459                 {
42460                     "name": "MDN Reference",
42461                     "url": "https://developer.mozilla.org/docs/Web/CSS/border-start-start-radius"
42462                 }
42463             ],
42464             "description": "The border-start-start-radius CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on the element's writing-mode, direction, and text-orientation."
42465         },
42466         {
42467             "name": "box-align",
42468             "status": "nonstandard",
42469             "syntax": "start | center | end | baseline | stretch",
42470             "relevance": 0,
42471             "browsers": [
42472                 "E12",
42473                 "FF1",
42474                 "S3",
42475                 "C1",
42476                 "O15"
42477             ],
42478             "references": [
42479                 {
42480                     "name": "MDN Reference",
42481                     "url": "https://developer.mozilla.org/docs/Web/CSS/box-align"
42482                 }
42483             ],
42484             "description": "The box-align CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box."
42485         },
42486         {
42487             "name": "box-direction",
42488             "status": "nonstandard",
42489             "syntax": "normal | reverse | inherit",
42490             "relevance": 0,
42491             "browsers": [
42492                 "E12",
42493                 "FF1",
42494                 "S3",
42495                 "C1",
42496                 "O15"
42497             ],
42498             "references": [
42499                 {
42500                     "name": "MDN Reference",
42501                     "url": "https://developer.mozilla.org/docs/Web/CSS/box-direction"
42502                 }
42503             ],
42504             "description": "The box-direction CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge)."
42505         },
42506         {
42507             "name": "box-flex",
42508             "status": "nonstandard",
42509             "syntax": "<number>",
42510             "relevance": 0,
42511             "browsers": [
42512                 "E12",
42513                 "FF1",
42514                 "S3",
42515                 "C1",
42516                 "O15"
42517             ],
42518             "references": [
42519                 {
42520                     "name": "MDN Reference",
42521                     "url": "https://developer.mozilla.org/docs/Web/CSS/box-flex"
42522                 }
42523             ],
42524             "description": "The -moz-box-flex and -webkit-box-flex CSS properties specify how a -moz-box or -webkit-box grows to fill the box that contains it, in the direction of the containing box's layout."
42525         },
42526         {
42527             "name": "box-flex-group",
42528             "status": "nonstandard",
42529             "syntax": "<integer>",
42530             "relevance": 0,
42531             "browsers": [
42532                 "S3",
42533                 "C1",
42534                 "O15"
42535             ],
42536             "references": [
42537                 {
42538                     "name": "MDN Reference",
42539                     "url": "https://developer.mozilla.org/docs/Web/CSS/box-flex-group"
42540                 }
42541             ],
42542             "description": "The box-flex-group CSS property assigns the flexbox's child elements to a flex group."
42543         },
42544         {
42545             "name": "box-lines",
42546             "status": "nonstandard",
42547             "syntax": "single | multiple",
42548             "relevance": 0,
42549             "browsers": [
42550                 "S3",
42551                 "C1",
42552                 "O15"
42553             ],
42554             "references": [
42555                 {
42556                     "name": "MDN Reference",
42557                     "url": "https://developer.mozilla.org/docs/Web/CSS/box-lines"
42558                 }
42559             ],
42560             "description": "The box-lines CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes)."
42561         },
42562         {
42563             "name": "box-ordinal-group",
42564             "status": "nonstandard",
42565             "syntax": "<integer>",
42566             "relevance": 0,
42567             "browsers": [
42568                 "E12",
42569                 "FF1",
42570                 "S3",
42571                 "C1",
42572                 "O15"
42573             ],
42574             "references": [
42575                 {
42576                     "name": "MDN Reference",
42577                     "url": "https://developer.mozilla.org/docs/Web/CSS/box-ordinal-group"
42578                 }
42579             ],
42580             "description": "The box-ordinal-group CSS property assigns the flexbox's child elements to an ordinal group."
42581         },
42582         {
42583             "name": "box-orient",
42584             "status": "nonstandard",
42585             "syntax": "horizontal | vertical | inline-axis | block-axis | inherit",
42586             "relevance": 0,
42587             "browsers": [
42588                 "E12",
42589                 "FF1",
42590                 "S3",
42591                 "C1",
42592                 "O15"
42593             ],
42594             "references": [
42595                 {
42596                     "name": "MDN Reference",
42597                     "url": "https://developer.mozilla.org/docs/Web/CSS/box-orient"
42598                 }
42599             ],
42600             "description": "The box-orient CSS property specifies whether an element lays out its contents horizontally or vertically."
42601         },
42602         {
42603             "name": "box-pack",
42604             "status": "nonstandard",
42605             "syntax": "start | center | end | justify",
42606             "relevance": 0,
42607             "browsers": [
42608                 "E12",
42609                 "FF1",
42610                 "S3",
42611                 "C1",
42612                 "O15"
42613             ],
42614             "references": [
42615                 {
42616                     "name": "MDN Reference",
42617                     "url": "https://developer.mozilla.org/docs/Web/CSS/box-pack"
42618                 }
42619             ],
42620             "description": "The -moz-box-pack and -webkit-box-pack CSS properties specify how a -moz-box or -webkit-box packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box."
42621         },
42622         {
42623             "name": "color-adjust",
42624             "syntax": "economy | exact",
42625             "relevance": 50,
42626             "browsers": [
42627                 "E79",
42628                 "FF48",
42629                 "S6",
42630                 "C49",
42631                 "O15"
42632             ],
42633             "references": [
42634                 {
42635                     "name": "MDN Reference",
42636                     "url": "https://developer.mozilla.org/docs/Web/CSS/color-adjust"
42637                 }
42638             ],
42639             "description": "The color-adjust property is a non-standard CSS extension that can be used to force printing of background colors and images in browsers based on the WebKit engine."
42640         },
42641         {
42642             "name": "counter-set",
42643             "syntax": "[ <custom-ident> <integer>? ]+ | none",
42644             "relevance": 50,
42645             "browsers": [
42646                 "FF68"
42647             ],
42648             "references": [
42649                 {
42650                     "name": "MDN Reference",
42651                     "url": "https://developer.mozilla.org/docs/Web/CSS/counter-set"
42652                 }
42653             ],
42654             "description": "The counter-set CSS property sets a CSS counter to a given value. It manipulates the value of existing counters, and will only create new counters if there isn't already a counter of the given name on the element."
42655         },
42656         {
42657             "name": "font-optical-sizing",
42658             "syntax": "auto | none",
42659             "relevance": 50,
42660             "browsers": [
42661                 "E17",
42662                 "FF62",
42663                 "S11",
42664                 "C79",
42665                 "O66"
42666             ],
42667             "references": [
42668                 {
42669                     "name": "MDN Reference",
42670                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-optical-sizing"
42671                 }
42672             ],
42673             "description": "The font-optical-sizing CSS property allows developers to control whether browsers render text with slightly differing visual representations to optimize viewing at different sizes, or not. This only works for fonts that have an optical size variation axis."
42674         },
42675         {
42676             "name": "font-variation-settings",
42677             "syntax": "normal | [ <string> <number> ]#",
42678             "relevance": 50,
42679             "browsers": [
42680                 "E17",
42681                 "FF62",
42682                 "S11",
42683                 "C62",
42684                 "O49"
42685             ],
42686             "references": [
42687                 {
42688                     "name": "MDN Reference",
42689                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-variation-settings"
42690                 }
42691             ],
42692             "description": "The font-variation-settings CSS property provides low-level control over OpenType or TrueType font variations, by specifying the four letter axis names of the features you want to vary, along with their variation values."
42693         },
42694         {
42695             "name": "font-smooth",
42696             "status": "nonstandard",
42697             "syntax": "auto | never | always | <absolute-size> | <length>",
42698             "relevance": 0,
42699             "browsers": [
42700                 "E79",
42701                 "FF25",
42702                 "S4",
42703                 "C5",
42704                 "O15"
42705             ],
42706             "references": [
42707                 {
42708                     "name": "MDN Reference",
42709                     "url": "https://developer.mozilla.org/docs/Web/CSS/font-smooth"
42710                 }
42711             ],
42712             "description": ""
42713         },
42714         {
42715             "name": "gap",
42716             "syntax": "<'row-gap'> <'column-gap'>?",
42717             "relevance": 50,
42718             "browsers": [
42719                 "E84",
42720                 "FF63",
42721                 "S10.1",
42722                 "C84",
42723                 "O70"
42724             ],
42725             "description": "The gap CSS property is a shorthand property for row-gap and column-gap specifying the gutters between grid rows and columns."
42726         },
42727         {
42728             "name": "hanging-punctuation",
42729             "syntax": "none | [ first || [ force-end | allow-end ] || last ]",
42730             "relevance": 50,
42731             "browsers": [
42732                 "S10"
42733             ],
42734             "references": [
42735                 {
42736                     "name": "MDN Reference",
42737                     "url": "https://developer.mozilla.org/docs/Web/CSS/hanging-punctuation"
42738                 }
42739             ],
42740             "description": "The hanging-punctuation CSS property specifies whether a punctuation mark should hang at the start or end of a line of text. Hanging punctuation may be placed outside the line box."
42741         },
42742         {
42743             "name": "image-resolution",
42744             "status": "experimental",
42745             "syntax": "[ from-image || <resolution> ] && snap?",
42746             "relevance": 50,
42747             "description": "The image-resolution property specifies the intrinsic resolution of all raster images used in or on the element. It affects both content images (e.g. replaced elements and generated content) and decorative images (such as background-image). The intrinsic resolution of an image is used to determine the image’s intrinsic dimensions."
42748         },
42749         {
42750             "name": "initial-letter",
42751             "status": "experimental",
42752             "syntax": "normal | [ <number> <integer>? ]",
42753             "relevance": 50,
42754             "browsers": [
42755                 "S9"
42756             ],
42757             "references": [
42758                 {
42759                     "name": "MDN Reference",
42760                     "url": "https://developer.mozilla.org/docs/Web/CSS/initial-letter"
42761                 }
42762             ],
42763             "description": "The initial-letter CSS property specifies styling for dropped, raised, and sunken initial letters."
42764         },
42765         {
42766             "name": "initial-letter-align",
42767             "status": "experimental",
42768             "syntax": "[ auto | alphabetic | hanging | ideographic ]",
42769             "relevance": 50,
42770             "references": [
42771                 {
42772                     "name": "MDN Reference",
42773                     "url": "https://developer.mozilla.org/docs/Web/CSS/initial-letter-align"
42774                 }
42775             ],
42776             "description": "The initial-letter-align CSS property specifies the alignment of initial letters within a paragraph."
42777         },
42778         {
42779             "name": "inset",
42780             "syntax": "<'top'>{1,4}",
42781             "relevance": 50,
42782             "browsers": [
42783                 "FF66"
42784             ],
42785             "references": [
42786                 {
42787                     "name": "MDN Reference",
42788                     "url": "https://developer.mozilla.org/docs/Web/CSS/inset"
42789                 }
42790             ],
42791             "description": "The inset CSS property defines the logical block and inline start and end offsets of an element, which map to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the top and bottom, or right and left properties depending on the values defined for writing-mode, direction, and text-orientation."
42792         },
42793         {
42794             "name": "inset-block",
42795             "syntax": "<'top'>{1,2}",
42796             "relevance": 50,
42797             "browsers": [
42798                 "E79",
42799                 "FF63",
42800                 "C69",
42801                 "O56"
42802             ],
42803             "references": [
42804                 {
42805                     "name": "MDN Reference",
42806                     "url": "https://developer.mozilla.org/docs/Web/CSS/inset-block"
42807                 }
42808             ],
42809             "description": "The inset-block CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the top and bottom, or right and left properties depending on the values defined for writing-mode, direction, and text-orientation."
42810         },
42811         {
42812             "name": "inset-block-end",
42813             "syntax": "<'top'>",
42814             "relevance": 50,
42815             "browsers": [
42816                 "E79",
42817                 "FF63",
42818                 "C69",
42819                 "O56"
42820             ],
42821             "references": [
42822                 {
42823                     "name": "MDN Reference",
42824                     "url": "https://developer.mozilla.org/docs/Web/CSS/inset-block-end"
42825                 }
42826             ],
42827             "description": "The inset-block-end CSS property defines the logical block end offset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the top, right, bottom, or left property depending on the values defined for writing-mode, direction, and text-orientation."
42828         },
42829         {
42830             "name": "inset-block-start",
42831             "syntax": "<'top'>",
42832             "relevance": 50,
42833             "browsers": [
42834                 "E79",
42835                 "FF63",
42836                 "C69",
42837                 "O56"
42838             ],
42839             "references": [
42840                 {
42841                     "name": "MDN Reference",
42842                     "url": "https://developer.mozilla.org/docs/Web/CSS/inset-block-start"
42843                 }
42844             ],
42845             "description": "The inset-block-start CSS property defines the logical block start offset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the top, right, bottom, or left property depending on the values defined for writing-mode, direction, and text-orientation."
42846         },
42847         {
42848             "name": "inset-inline",
42849             "syntax": "<'top'>{1,2}",
42850             "relevance": 50,
42851             "browsers": [
42852                 "E79",
42853                 "FF63",
42854                 "C69",
42855                 "O56"
42856             ],
42857             "references": [
42858                 {
42859                     "name": "MDN Reference",
42860                     "url": "https://developer.mozilla.org/docs/Web/CSS/inset-inline"
42861                 }
42862             ],
42863             "description": "The inset-inline CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the top and bottom, or right and left properties depending on the values defined for writing-mode, direction, and text-orientation."
42864         },
42865         {
42866             "name": "inset-inline-end",
42867             "syntax": "<'top'>",
42868             "relevance": 50,
42869             "browsers": [
42870                 "E79",
42871                 "FF63",
42872                 "C69",
42873                 "O56"
42874             ],
42875             "references": [
42876                 {
42877                     "name": "MDN Reference",
42878                     "url": "https://developer.mozilla.org/docs/Web/CSS/inset-inline-end"
42879                 }
42880             ],
42881             "description": "The inset-inline-end CSS property defines the logical inline end inset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the top, right, bottom, or left property depending on the values defined for writing-mode, direction, and text-orientation."
42882         },
42883         {
42884             "name": "inset-inline-start",
42885             "syntax": "<'top'>",
42886             "relevance": 50,
42887             "browsers": [
42888                 "E79",
42889                 "FF63",
42890                 "C69",
42891                 "O56"
42892             ],
42893             "references": [
42894                 {
42895                     "name": "MDN Reference",
42896                     "url": "https://developer.mozilla.org/docs/Web/CSS/inset-inline-start"
42897                 }
42898             ],
42899             "description": "The inset-inline-start CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the top, right, bottom, or left property depending on the values defined for writing-mode, direction, and text-orientation."
42900         },
42901         {
42902             "name": "line-clamp",
42903             "status": "experimental",
42904             "syntax": "none | <integer>",
42905             "relevance": 50,
42906             "description": "The line-clamp property allows limiting the contents of a block container to the specified number of lines; remaining content is fragmented away and neither rendered nor measured. Optionally, it also allows inserting content into the last line box to indicate the continuity of truncated/interrupted content."
42907         },
42908         {
42909             "name": "line-height-step",
42910             "status": "experimental",
42911             "syntax": "<length>",
42912             "relevance": 50,
42913             "browsers": [
42914                 "E79",
42915                 "C60",
42916                 "O47"
42917             ],
42918             "references": [
42919                 {
42920                     "name": "MDN Reference",
42921                     "url": "https://developer.mozilla.org/docs/Web/CSS/line-height-step"
42922                 }
42923             ],
42924             "description": "The line-height-step CSS property defines the step units for line box heights. When the step unit is positive, line box heights are rounded up to the closest multiple of the unit. Negative values are invalid."
42925         },
42926         {
42927             "name": "margin-block",
42928             "syntax": "<'margin-left'>{1,2}",
42929             "relevance": 50,
42930             "browsers": [
42931                 "E79",
42932                 "FF66",
42933                 "C69",
42934                 "O56"
42935             ],
42936             "references": [
42937                 {
42938                     "name": "MDN Reference",
42939                     "url": "https://developer.mozilla.org/docs/Web/CSS/margin-block"
42940                 }
42941             ],
42942             "description": "The margin-block CSS property defines the logical block start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation."
42943         },
42944         {
42945             "name": "margin-inline",
42946             "syntax": "<'margin-left'>{1,2}",
42947             "relevance": 50,
42948             "browsers": [
42949                 "E79",
42950                 "FF66",
42951                 "C69",
42952                 "O56"
42953             ],
42954             "references": [
42955                 {
42956                     "name": "MDN Reference",
42957                     "url": "https://developer.mozilla.org/docs/Web/CSS/margin-inline"
42958                 }
42959             ],
42960             "description": "The margin-inline CSS property defines the logical inline start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation."
42961         },
42962         {
42963             "name": "margin-trim",
42964             "status": "experimental",
42965             "syntax": "none | in-flow | all",
42966             "relevance": 50,
42967             "references": [
42968                 {
42969                     "name": "MDN Reference",
42970                     "url": "https://developer.mozilla.org/docs/Web/CSS/margin-trim"
42971                 }
42972             ],
42973             "description": "The margin-trim property allows the container to trim the margins of its children where they adjoin the container’s edges."
42974         },
42975         {
42976             "name": "mask",
42977             "syntax": "<mask-layer>#",
42978             "relevance": 50,
42979             "browsers": [
42980                 "E12",
42981                 "FF2",
42982                 "S3.2",
42983                 "C1",
42984                 "O15"
42985             ],
42986             "references": [
42987                 {
42988                     "name": "MDN Reference",
42989                     "url": "https://developer.mozilla.org/docs/Web/CSS/mask"
42990                 }
42991             ],
42992             "description": "The mask CSS property alters the visibility of an element by either partially or fully hiding it. This is accomplished by either masking or clipping the image at specific points."
42993         },
42994         {
42995             "name": "mask-border",
42996             "syntax": "<'mask-border-source'> || <'mask-border-slice'> [ / <'mask-border-width'>? [ / <'mask-border-outset'> ]? ]? || <'mask-border-repeat'> || <'mask-border-mode'>",
42997             "relevance": 50,
42998             "description": "The mask-border CSS property lets you create a mask along the edge of an element's border.\n\nThis property is a shorthand for mask-border-source, mask-border-slice, mask-border-width, mask-border-outset, mask-border-repeat, and mask-border-mode. As with all shorthand properties, any omitted sub-values will be set to their initial value."
42999         },
43000         {
43001             "name": "mask-border-mode",
43002             "syntax": "luminance | alpha",
43003             "relevance": 50,
43004             "description": "The mask-border-mode CSS property specifies the blending mode used in a mask border."
43005         },
43006         {
43007             "name": "mask-border-outset",
43008             "syntax": "[ <length> | <number> ]{1,4}",
43009             "relevance": 50,
43010             "description": "The mask-border-outset CSS property specifies the distance by which an element's mask border is set out from its border box."
43011         },
43012         {
43013             "name": "mask-border-repeat",
43014             "syntax": "[ stretch | repeat | round | space ]{1,2}",
43015             "relevance": 50,
43016             "description": "The mask-border-repeat CSS property defines how the edge regions of a source image are adjusted to fit the dimensions of an element's mask border."
43017         },
43018         {
43019             "name": "mask-border-slice",
43020             "syntax": "<number-percentage>{1,4} fill?",
43021             "relevance": 50,
43022             "description": "The mask-border-slice CSS property divides the image specified by mask-border-source into regions. These regions are used to form the components of an element's mask border."
43023         },
43024         {
43025             "name": "mask-border-source",
43026             "syntax": "none | <image>",
43027             "relevance": 50,
43028             "description": "The mask-border-source CSS property specifies the source image used to create an element's mask border.\n\nThe mask-border-slice property is used to divide the source image into regions, which are then dynamically applied to the final mask border."
43029         },
43030         {
43031             "name": "mask-border-width",
43032             "syntax": "[ <length-percentage> | <number> | auto ]{1,4}",
43033             "relevance": 50,
43034             "description": "The mask-border-width CSS property specifies the width of an element's mask border."
43035         },
43036         {
43037             "name": "mask-clip",
43038             "syntax": "[ <geometry-box> | no-clip ]#",
43039             "relevance": 50,
43040             "browsers": [
43041                 "E79",
43042                 "FF53",
43043                 "S4",
43044                 "C1",
43045                 "O15"
43046             ],
43047             "references": [
43048                 {
43049                     "name": "MDN Reference",
43050                     "url": "https://developer.mozilla.org/docs/Web/CSS/mask-clip"
43051                 }
43052             ],
43053             "description": "The mask-clip CSS property determines the area, which is affected by a mask. The painted content of an element must be restricted to this area."
43054         },
43055         {
43056             "name": "mask-composite",
43057             "syntax": "<compositing-operator>#",
43058             "relevance": 50,
43059             "browsers": [
43060                 "E18",
43061                 "FF53"
43062             ],
43063             "references": [
43064                 {
43065                     "name": "MDN Reference",
43066                     "url": "https://developer.mozilla.org/docs/Web/CSS/mask-composite"
43067                 }
43068             ],
43069             "description": "The mask-composite CSS property represents a compositing operation used on the current mask layer with the mask layers below it."
43070         },
43071         {
43072             "name": "max-lines",
43073             "status": "experimental",
43074             "syntax": "none | <integer>",
43075             "relevance": 50,
43076             "description": "The max-liens property forces a break after a set number of lines"
43077         },
43078         {
43079             "name": "offset",
43080             "syntax": "[ <'offset-position'>? [ <'offset-path'> [ <'offset-distance'> || <'offset-rotate'> ]? ]? ]! [ / <'offset-anchor'> ]?",
43081             "relevance": 50,
43082             "browsers": [
43083                 "E79",
43084                 "FF72",
43085                 "C55",
43086                 "O42"
43087             ],
43088             "references": [
43089                 {
43090                     "name": "MDN Reference",
43091                     "url": "https://developer.mozilla.org/docs/Web/CSS/offset"
43092                 }
43093             ],
43094             "description": "The offset CSS property is a shorthand property for animating an element along a defined path."
43095         },
43096         {
43097             "name": "offset-anchor",
43098             "syntax": "auto | <position>",
43099             "relevance": 50,
43100             "browsers": [
43101                 "E79",
43102                 "FF72",
43103                 "C79"
43104             ],
43105             "references": [
43106                 {
43107                     "name": "MDN Reference",
43108                     "url": "https://developer.mozilla.org/docs/Web/CSS/offset-anchor"
43109                 }
43110             ],
43111             "description": "Defines an anchor point of the box positioned along the path. The anchor point specifies the point of the box which is to be considered as the point that is moved along the path."
43112         },
43113         {
43114             "name": "offset-distance",
43115             "syntax": "<length-percentage>",
43116             "relevance": 50,
43117             "browsers": [
43118                 "E79",
43119                 "FF72",
43120                 "C55",
43121                 "O42"
43122             ],
43123             "references": [
43124                 {
43125                     "name": "MDN Reference",
43126                     "url": "https://developer.mozilla.org/docs/Web/CSS/offset-distance"
43127                 }
43128             ],
43129             "description": "The offset-distance CSS property specifies a position along an offset-path."
43130         },
43131         {
43132             "name": "offset-path",
43133             "syntax": "none | ray( [ <angle> && <size>? && contain? ] ) | <path()> | <url> | [ <basic-shape> || <geometry-box> ]",
43134             "relevance": 50,
43135             "browsers": [
43136                 "E79",
43137                 "FF72",
43138                 "C55",
43139                 "O45"
43140             ],
43141             "references": [
43142                 {
43143                     "name": "MDN Reference",
43144                     "url": "https://developer.mozilla.org/docs/Web/CSS/offset-path"
43145                 }
43146             ],
43147             "description": "The offset-path CSS property specifies the offset path where the element gets positioned. The exact element’s position on the offset path is determined by the offset-distance property. An offset path is either a specified path with one or multiple sub-paths or the geometry of a not-styled basic shape. Each shape or path must define an initial position for the computed value of \"0\" for offset-distance and an initial direction which specifies the rotation of the object to the initial position.\n\nIn this specification, a direction (or rotation) of 0 degrees is equivalent to the direction of the positive x-axis in the object’s local coordinate system. In other words, a rotation of 0 degree points to the right side of the UA if the object and its ancestors have no transformation applied."
43148         },
43149         {
43150             "name": "offset-position",
43151             "status": "experimental",
43152             "syntax": "auto | <position>",
43153             "relevance": 50,
43154             "references": [
43155                 {
43156                     "name": "MDN Reference",
43157                     "url": "https://developer.mozilla.org/docs/Web/CSS/offset-position"
43158                 }
43159             ],
43160             "description": "Specifies the initial position of the offset path. If position is specified with static, offset-position would be ignored."
43161         },
43162         {
43163             "name": "offset-rotate",
43164             "syntax": "[ auto | reverse ] || <angle>",
43165             "relevance": 50,
43166             "browsers": [
43167                 "E79",
43168                 "FF72",
43169                 "C56",
43170                 "O43"
43171             ],
43172             "references": [
43173                 {
43174                     "name": "MDN Reference",
43175                     "url": "https://developer.mozilla.org/docs/Web/CSS/offset-rotate"
43176                 }
43177             ],
43178             "description": "The offset-rotate CSS property defines the direction of the element while positioning along the offset path."
43179         },
43180         {
43181             "name": "overflow-anchor",
43182             "syntax": "auto | none",
43183             "relevance": 51,
43184             "browsers": [
43185                 "E79",
43186                 "FF66",
43187                 "C56",
43188                 "O43"
43189             ],
43190             "references": [
43191                 {
43192                     "name": "MDN Reference",
43193                     "url": "https://developer.mozilla.org/docs/Web/CSS/overflow-anchor"
43194                 }
43195             ],
43196             "description": "The overflow-anchor CSS property provides a way to opt out browser scroll anchoring behavior which adjusts scroll position to minimize content shifts."
43197         },
43198         {
43199             "name": "overflow-block",
43200             "syntax": "visible | hidden | clip | scroll | auto",
43201             "relevance": 50,
43202             "browsers": [
43203                 "FF69"
43204             ],
43205             "references": [
43206                 {
43207                     "name": "MDN Reference",
43208                     "url": "https://developer.mozilla.org/docs/Web/CSS/overflow-block"
43209                 }
43210             ],
43211             "description": "The overflow-block CSS media feature can be used to test how the output device handles content that overflows the initial containing block along the block axis."
43212         },
43213         {
43214             "name": "overflow-clip-box",
43215             "status": "nonstandard",
43216             "syntax": "padding-box | content-box",
43217             "relevance": 0,
43218             "browsers": [
43219                 "FF29"
43220             ],
43221             "references": [
43222                 {
43223                     "name": "MDN Reference",
43224                     "url": "https://developer.mozilla.org/docs/Mozilla/Gecko/Chrome/CSS/overflow-clip-box"
43225                 }
43226             ],
43227             "description": "The overflow-clip-box CSS property specifies relative to which box the clipping happens when there is an overflow. It is short hand for the overflow-clip-box-inline and overflow-clip-box-block properties."
43228         },
43229         {
43230             "name": "overflow-inline",
43231             "syntax": "visible | hidden | clip | scroll | auto",
43232             "relevance": 50,
43233             "browsers": [
43234                 "FF69"
43235             ],
43236             "references": [
43237                 {
43238                     "name": "MDN Reference",
43239                     "url": "https://developer.mozilla.org/docs/Web/CSS/overflow-inline"
43240                 }
43241             ],
43242             "description": "The overflow-inline CSS media feature can be used to test how the output device handles content that overflows the initial containing block along the inline axis."
43243         },
43244         {
43245             "name": "overscroll-behavior",
43246             "syntax": "[ contain | none | auto ]{1,2}",
43247             "relevance": 50,
43248             "browsers": [
43249                 "E18",
43250                 "FF59",
43251                 "C63",
43252                 "O50"
43253             ],
43254             "references": [
43255                 {
43256                     "name": "MDN Reference",
43257                     "url": "https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior"
43258                 }
43259             ],
43260             "description": "The overscroll-behavior CSS property is shorthand for the overscroll-behavior-x and overscroll-behavior-y properties, which allow you to control the browser's scroll overflow behavior — what happens when the boundary of a scrolling area is reached."
43261         },
43262         {
43263             "name": "overscroll-behavior-block",
43264             "syntax": "contain | none | auto",
43265             "relevance": 50,
43266             "browsers": [
43267                 "E79",
43268                 "FF73",
43269                 "C77",
43270                 "O64"
43271             ],
43272             "references": [
43273                 {
43274                     "name": "MDN Reference",
43275                     "url": "https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-block"
43276                 }
43277             ],
43278             "description": "The overscroll-behavior-block CSS property sets the browser's behavior when the block direction boundary of a scrolling area is reached."
43279         },
43280         {
43281             "name": "overscroll-behavior-inline",
43282             "syntax": "contain | none | auto",
43283             "relevance": 50,
43284             "browsers": [
43285                 "E79",
43286                 "FF73",
43287                 "C77",
43288                 "O64"
43289             ],
43290             "references": [
43291                 {
43292                     "name": "MDN Reference",
43293                     "url": "https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-inline"
43294                 }
43295             ],
43296             "description": "The overscroll-behavior-inline CSS property sets the browser's behavior when the inline direction boundary of a scrolling area is reached."
43297         },
43298         {
43299             "name": "overscroll-behavior-x",
43300             "syntax": "contain | none | auto",
43301             "relevance": 50,
43302             "browsers": [
43303                 "E18",
43304                 "FF59",
43305                 "C63",
43306                 "O50"
43307             ],
43308             "references": [
43309                 {
43310                     "name": "MDN Reference",
43311                     "url": "https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-x"
43312                 }
43313             ],
43314             "description": "The overscroll-behavior-x CSS property is allows you to control the browser's scroll overflow behavior — what happens when the boundary of a scrolling area is reached — in the x axis direction."
43315         },
43316         {
43317             "name": "overscroll-behavior-y",
43318             "syntax": "contain | none | auto",
43319             "relevance": 50,
43320             "browsers": [
43321                 "E18",
43322                 "FF59",
43323                 "C63",
43324                 "O50"
43325             ],
43326             "references": [
43327                 {
43328                     "name": "MDN Reference",
43329                     "url": "https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-y"
43330                 }
43331             ],
43332             "description": "The overscroll-behavior-y CSS property is allows you to control the browser's scroll overflow behavior — what happens when the boundary of a scrolling area is reached — in the y axis direction."
43333         },
43334         {
43335             "name": "padding-block",
43336             "syntax": "<'padding-left'>{1,2}",
43337             "relevance": 50,
43338             "browsers": [
43339                 "E79",
43340                 "FF66",
43341                 "C69",
43342                 "O56"
43343             ],
43344             "references": [
43345                 {
43346                     "name": "MDN Reference",
43347                     "url": "https://developer.mozilla.org/docs/Web/CSS/padding-block"
43348                 }
43349             ],
43350             "description": "The padding-block CSS property defines the logical block start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation."
43351         },
43352         {
43353             "name": "padding-inline",
43354             "syntax": "<'padding-left'>{1,2}",
43355             "relevance": 50,
43356             "browsers": [
43357                 "E79",
43358                 "FF66",
43359                 "C69",
43360                 "O56"
43361             ],
43362             "references": [
43363                 {
43364                     "name": "MDN Reference",
43365                     "url": "https://developer.mozilla.org/docs/Web/CSS/padding-inline"
43366                 }
43367             ],
43368             "description": "The padding-inline CSS property defines the logical inline start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation."
43369         },
43370         {
43371             "name": "place-content",
43372             "syntax": "<'align-content'> <'justify-content'>?",
43373             "relevance": 50,
43374             "browsers": [
43375                 "E79",
43376                 "FF53",
43377                 "S9",
43378                 "C59",
43379                 "O46"
43380             ],
43381             "description": "The place-content CSS shorthand property sets both the align-content and justify-content properties."
43382         },
43383         {
43384             "name": "place-items",
43385             "syntax": "<'align-items'> <'justify-items'>?",
43386             "relevance": 50,
43387             "browsers": [
43388                 "E79",
43389                 "FF45",
43390                 "S11",
43391                 "C59",
43392                 "O46"
43393             ],
43394             "description": "The CSS place-items shorthand property sets both the align-items and justify-items properties. The first value is the align-items property value, the second the justify-items one. If the second value is not present, the first value is also used for it."
43395         },
43396         {
43397             "name": "place-self",
43398             "syntax": "<'align-self'> <'justify-self'>?",
43399             "relevance": 50,
43400             "browsers": [
43401                 "E79",
43402                 "FF45",
43403                 "C59",
43404                 "O46"
43405             ],
43406             "description": "The place-self CSS property is a shorthand property sets both the align-self and justify-self properties. The first value is the align-self property value, the second the justify-self one. If the second value is not present, the first value is also used for it."
43407         },
43408         {
43409             "name": "rotate",
43410             "syntax": "none | <angle> | [ x | y | z | <number>{3} ] && <angle>",
43411             "relevance": 50,
43412             "browsers": [
43413                 "FF72"
43414             ],
43415             "references": [
43416                 {
43417                     "name": "MDN Reference",
43418                     "url": "https://developer.mozilla.org/docs/Web/CSS/rotate"
43419                 }
43420             ],
43421             "description": "The rotate CSS property allows you to specify rotation transforms individually and independently of the transform property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the transform value."
43422         },
43423         {
43424             "name": "row-gap",
43425             "syntax": "normal | <length-percentage>",
43426             "relevance": 50,
43427             "browsers": [
43428                 "E84",
43429                 "FF63",
43430                 "S10.1",
43431                 "C84",
43432                 "O70"
43433             ],
43434             "description": "The row-gap CSS property specifies the gutter between grid rows."
43435         },
43436         {
43437             "name": "ruby-merge",
43438             "status": "experimental",
43439             "syntax": "separate | collapse | auto",
43440             "relevance": 50,
43441             "description": "This property controls how ruby annotation boxes should be rendered when there are more than one in a ruby container box: whether each pair should be kept separate, the annotations should be collapsed and rendered as a group, or the separation should be determined based on the space available."
43442         },
43443         {
43444             "name": "scale",
43445             "syntax": "none | <number>{1,3}",
43446             "relevance": 50,
43447             "browsers": [
43448                 "FF72"
43449             ],
43450             "references": [
43451                 {
43452                     "name": "MDN Reference",
43453                     "url": "https://developer.mozilla.org/docs/Web/CSS/scale"
43454                 }
43455             ],
43456             "description": "The scale CSS property allows you to specify scale transforms individually and independently of the transform property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the transform value."
43457         },
43458         {
43459             "name": "scrollbar-color",
43460             "syntax": "auto | dark | light | <color>{2}",
43461             "relevance": 50,
43462             "browsers": [
43463                 "FF64"
43464             ],
43465             "references": [
43466                 {
43467                     "name": "MDN Reference",
43468                     "url": "https://developer.mozilla.org/docs/Web/CSS/scrollbar-color"
43469                 }
43470             ],
43471             "description": "The scrollbar-color CSS property sets the color of the scrollbar track and thumb."
43472         },
43473         {
43474             "name": "scrollbar-width",
43475             "syntax": "auto | thin | none",
43476             "relevance": 50,
43477             "browsers": [
43478                 "FF64"
43479             ],
43480             "references": [
43481                 {
43482                     "name": "MDN Reference",
43483                     "url": "https://developer.mozilla.org/docs/Web/CSS/scrollbar-width"
43484                 }
43485             ],
43486             "description": "The scrollbar-width property allows the author to set the maximum thickness of an element’s scrollbars when they are shown. "
43487         },
43488         {
43489             "name": "scroll-margin",
43490             "syntax": "<length>{1,4}",
43491             "relevance": 50,
43492             "browsers": [
43493                 "E79",
43494                 "FF68",
43495                 "S11",
43496                 "C69",
43497                 "O56"
43498             ],
43499             "references": [
43500                 {
43501                     "name": "MDN Reference",
43502                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-margin"
43503                 }
43504             ],
43505             "description": "The scroll-margin property is a shorthand property which sets all of the scroll-margin longhands, assigning values much like the margin property does for the margin-* longhands."
43506         },
43507         {
43508             "name": "scroll-margin-block",
43509             "syntax": "<length>{1,2}",
43510             "relevance": 50,
43511             "browsers": [
43512                 "E79",
43513                 "FF68",
43514                 "C69",
43515                 "O56"
43516             ],
43517             "references": [
43518                 {
43519                     "name": "MDN Reference",
43520                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block"
43521                 }
43522             ],
43523             "description": "The scroll-margin-block property is a shorthand property which sets the scroll-margin longhands in the block dimension."
43524         },
43525         {
43526             "name": "scroll-margin-block-start",
43527             "syntax": "<length>",
43528             "relevance": 50,
43529             "browsers": [
43530                 "E79",
43531                 "FF68",
43532                 "C69",
43533                 "O56"
43534             ],
43535             "references": [
43536                 {
43537                     "name": "MDN Reference",
43538                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-start"
43539                 }
43540             ],
43541             "description": "The scroll-margin-block-start property defines the margin of the scroll snap area at the start of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets."
43542         },
43543         {
43544             "name": "scroll-margin-block-end",
43545             "syntax": "<length>",
43546             "relevance": 50,
43547             "browsers": [
43548                 "E79",
43549                 "FF68",
43550                 "C69",
43551                 "O56"
43552             ],
43553             "references": [
43554                 {
43555                     "name": "MDN Reference",
43556                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-end"
43557                 }
43558             ],
43559             "description": "The scroll-margin-block-end property defines the margin of the scroll snap area at the end of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets."
43560         },
43561         {
43562             "name": "scroll-margin-bottom",
43563             "syntax": "<length>",
43564             "relevance": 50,
43565             "browsers": [
43566                 "E79",
43567                 "FF68",
43568                 "S11",
43569                 "C69",
43570                 "O56"
43571             ],
43572             "references": [
43573                 {
43574                     "name": "MDN Reference",
43575                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-margin-bottom"
43576                 }
43577             ],
43578             "description": "The scroll-margin-bottom property defines the bottom margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets."
43579         },
43580         {
43581             "name": "scroll-margin-inline",
43582             "syntax": "<length>{1,2}",
43583             "relevance": 50,
43584             "browsers": [
43585                 "FF68"
43586             ],
43587             "references": [
43588                 {
43589                     "name": "MDN Reference",
43590                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline"
43591                 }
43592             ],
43593             "description": "The scroll-margin-inline property is a shorthand property which sets the scroll-margin longhands in the inline dimension."
43594         },
43595         {
43596             "name": "scroll-margin-inline-start",
43597             "syntax": "<length>",
43598             "relevance": 50,
43599             "browsers": [
43600                 "E79",
43601                 "FF68",
43602                 "C69",
43603                 "O56"
43604             ],
43605             "references": [
43606                 {
43607                     "name": "MDN Reference",
43608                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-start"
43609                 }
43610             ],
43611             "description": "The scroll-margin-inline-start property defines the margin of the scroll snap area at the start of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets."
43612         },
43613         {
43614             "name": "scroll-margin-inline-end",
43615             "syntax": "<length>",
43616             "relevance": 50,
43617             "browsers": [
43618                 "E79",
43619                 "FF68",
43620                 "C69",
43621                 "O56"
43622             ],
43623             "references": [
43624                 {
43625                     "name": "MDN Reference",
43626                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-end"
43627                 }
43628             ],
43629             "description": "The scroll-margin-inline-end property defines the margin of the scroll snap area at the end of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets."
43630         },
43631         {
43632             "name": "scroll-margin-left",
43633             "syntax": "<length>",
43634             "relevance": 50,
43635             "browsers": [
43636                 "E79",
43637                 "FF68",
43638                 "S11",
43639                 "C69",
43640                 "O56"
43641             ],
43642             "references": [
43643                 {
43644                     "name": "MDN Reference",
43645                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-margin-left"
43646                 }
43647             ],
43648             "description": "The scroll-margin-left property defines the left margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets."
43649         },
43650         {
43651             "name": "scroll-margin-right",
43652             "syntax": "<length>",
43653             "relevance": 50,
43654             "browsers": [
43655                 "E79",
43656                 "FF68",
43657                 "S11",
43658                 "C69",
43659                 "O56"
43660             ],
43661             "references": [
43662                 {
43663                     "name": "MDN Reference",
43664                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-margin-right"
43665                 }
43666             ],
43667             "description": "The scroll-margin-right property defines the right margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets."
43668         },
43669         {
43670             "name": "scroll-margin-top",
43671             "syntax": "<length>",
43672             "relevance": 50,
43673             "browsers": [
43674                 "E79",
43675                 "FF68",
43676                 "S11",
43677                 "C69",
43678                 "O56"
43679             ],
43680             "references": [
43681                 {
43682                     "name": "MDN Reference",
43683                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-margin-top"
43684                 }
43685             ],
43686             "description": "The scroll-margin-top property defines the top margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container’s coordinate space), then adding the specified outsets."
43687         },
43688         {
43689             "name": "scroll-padding",
43690             "syntax": "[ auto | <length-percentage> ]{1,4}",
43691             "relevance": 50,
43692             "browsers": [
43693                 "E79",
43694                 "FF68",
43695                 "S11",
43696                 "C69",
43697                 "O56"
43698             ],
43699             "references": [
43700                 {
43701                     "name": "MDN Reference",
43702                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-padding"
43703                 }
43704             ],
43705             "description": "The scroll-padding property is a shorthand property which sets all of the scroll-padding longhands, assigning values much like the padding property does for the padding-* longhands."
43706         },
43707         {
43708             "name": "scroll-padding-block",
43709             "syntax": "[ auto | <length-percentage> ]{1,2}",
43710             "relevance": 50,
43711             "browsers": [
43712                 "E79",
43713                 "FF68",
43714                 "C69",
43715                 "O56"
43716             ],
43717             "references": [
43718                 {
43719                     "name": "MDN Reference",
43720                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block"
43721                 }
43722             ],
43723             "description": "The scroll-padding-block property is a shorthand property which sets the scroll-padding longhands for the block dimension."
43724         },
43725         {
43726             "name": "scroll-padding-block-start",
43727             "syntax": "auto | <length-percentage>",
43728             "relevance": 50,
43729             "browsers": [
43730                 "E79",
43731                 "FF68",
43732                 "C69",
43733                 "O56"
43734             ],
43735             "references": [
43736                 {
43737                     "name": "MDN Reference",
43738                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-start"
43739                 }
43740             ],
43741             "description": "The scroll-padding-block-start property defines offsets for the start edge in the block dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport."
43742         },
43743         {
43744             "name": "scroll-padding-block-end",
43745             "syntax": "auto | <length-percentage>",
43746             "relevance": 50,
43747             "browsers": [
43748                 "E79",
43749                 "FF68",
43750                 "C69",
43751                 "O56"
43752             ],
43753             "references": [
43754                 {
43755                     "name": "MDN Reference",
43756                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-end"
43757                 }
43758             ],
43759             "description": "The scroll-padding-block-end property defines offsets for the end edge in the block dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport."
43760         },
43761         {
43762             "name": "scroll-padding-bottom",
43763             "syntax": "auto | <length-percentage>",
43764             "relevance": 50,
43765             "browsers": [
43766                 "E79",
43767                 "FF68",
43768                 "S11",
43769                 "C69",
43770                 "O56"
43771             ],
43772             "references": [
43773                 {
43774                     "name": "MDN Reference",
43775                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-padding-bottom"
43776                 }
43777             ],
43778             "description": "The scroll-padding-bottom property defines offsets for the bottom of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport."
43779         },
43780         {
43781             "name": "scroll-padding-inline",
43782             "syntax": "[ auto | <length-percentage> ]{1,2}",
43783             "relevance": 50,
43784             "browsers": [
43785                 "E79",
43786                 "FF68",
43787                 "C69",
43788                 "O56"
43789             ],
43790             "references": [
43791                 {
43792                     "name": "MDN Reference",
43793                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline"
43794                 }
43795             ],
43796             "description": "The scroll-padding-inline property is a shorthand property which sets the scroll-padding longhands for the inline dimension."
43797         },
43798         {
43799             "name": "scroll-padding-inline-start",
43800             "syntax": "auto | <length-percentage>",
43801             "relevance": 50,
43802             "browsers": [
43803                 "E79",
43804                 "FF68",
43805                 "C69",
43806                 "O56"
43807             ],
43808             "references": [
43809                 {
43810                     "name": "MDN Reference",
43811                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-start"
43812                 }
43813             ],
43814             "description": "The scroll-padding-inline-start property defines offsets for the start edge in the inline dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport."
43815         },
43816         {
43817             "name": "scroll-padding-inline-end",
43818             "syntax": "auto | <length-percentage>",
43819             "relevance": 50,
43820             "browsers": [
43821                 "E79",
43822                 "FF68",
43823                 "C69",
43824                 "O56"
43825             ],
43826             "references": [
43827                 {
43828                     "name": "MDN Reference",
43829                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-end"
43830                 }
43831             ],
43832             "description": "The scroll-padding-inline-end property defines offsets for the end edge in the inline dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport."
43833         },
43834         {
43835             "name": "scroll-padding-left",
43836             "syntax": "auto | <length-percentage>",
43837             "relevance": 50,
43838             "browsers": [
43839                 "E79",
43840                 "FF68",
43841                 "S11",
43842                 "C69",
43843                 "O56"
43844             ],
43845             "references": [
43846                 {
43847                     "name": "MDN Reference",
43848                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-padding-left"
43849                 }
43850             ],
43851             "description": "The scroll-padding-left property defines offsets for the left of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport."
43852         },
43853         {
43854             "name": "scroll-padding-right",
43855             "syntax": "auto | <length-percentage>",
43856             "relevance": 50,
43857             "browsers": [
43858                 "E79",
43859                 "FF68",
43860                 "S11",
43861                 "C69",
43862                 "O56"
43863             ],
43864             "references": [
43865                 {
43866                     "name": "MDN Reference",
43867                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-padding-right"
43868                 }
43869             ],
43870             "description": "The scroll-padding-right property defines offsets for the right of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport."
43871         },
43872         {
43873             "name": "scroll-padding-top",
43874             "syntax": "auto | <length-percentage>",
43875             "relevance": 50,
43876             "browsers": [
43877                 "E79",
43878                 "FF68",
43879                 "S11",
43880                 "C69",
43881                 "O56"
43882             ],
43883             "references": [
43884                 {
43885                     "name": "MDN Reference",
43886                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-padding-top"
43887                 }
43888             ],
43889             "description": "The scroll-padding-top property defines offsets for the top of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport."
43890         },
43891         {
43892             "name": "scroll-snap-align",
43893             "syntax": "[ none | start | end | center ]{1,2}",
43894             "relevance": 50,
43895             "browsers": [
43896                 "E79",
43897                 "FF68",
43898                 "S11",
43899                 "C69",
43900                 "O56"
43901             ],
43902             "references": [
43903                 {
43904                     "name": "MDN Reference",
43905                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-snap-align"
43906                 }
43907             ],
43908             "description": "The scroll-snap-align property specifies the box’s snap position as an alignment of its snap area (as the alignment subject) within its snap container’s snapport (as the alignment container). The two values specify the snapping alignment in the block axis and inline axis, respectively. If only one value is specified, the second value defaults to the same value."
43909         },
43910         {
43911             "name": "scroll-snap-stop",
43912             "syntax": "normal | always",
43913             "relevance": 50,
43914             "browsers": [
43915                 "E79",
43916                 "C75",
43917                 "O62"
43918             ],
43919             "references": [
43920                 {
43921                     "name": "MDN Reference",
43922                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-snap-stop"
43923                 }
43924             ],
43925             "description": "The scroll-snap-stop CSS property defines whether the scroll container is allowed to \"pass over\" possible snap positions."
43926         },
43927         {
43928             "name": "scroll-snap-type-x",
43929             "status": "obsolete",
43930             "syntax": "none | mandatory | proximity",
43931             "relevance": 0,
43932             "browsers": [
43933                 "FF39",
43934                 "S9"
43935             ],
43936             "references": [
43937                 {
43938                     "name": "MDN Reference",
43939                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type-x"
43940                 }
43941             ],
43942             "description": "The scroll-snap-type-x CSS property defines how strictly snap points are enforced on the horizontal axis of the scroll container in case there is one.\n\nSpecifying any precise animations or physics used to enforce those snap points is not covered by this property but instead left up to the user agent."
43943         },
43944         {
43945             "name": "scroll-snap-type-y",
43946             "status": "obsolete",
43947             "syntax": "none | mandatory | proximity",
43948             "relevance": 0,
43949             "browsers": [
43950                 "FF39"
43951             ],
43952             "references": [
43953                 {
43954                     "name": "MDN Reference",
43955                     "url": "https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type-y"
43956                 }
43957             ],
43958             "description": "The scroll-snap-type-y CSS property defines how strictly snap points are enforced on the vertical axis of the scroll container in case there is one.\n\nSpecifying any precise animations or physics used to enforce those snap points is not covered by this property but instead left up to the user agent."
43959         },
43960         {
43961             "name": "text-combine-upright",
43962             "syntax": "none | all | [ digits <integer>? ]",
43963             "relevance": 50,
43964             "references": [
43965                 {
43966                     "name": "MDN Reference",
43967                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-combine-upright"
43968                 }
43969             ],
43970             "description": "The text-combine-upright CSS property specifies the combination of multiple characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n\nThis is used to produce an effect that is known as tate-chū-yoko (縦中横) in Japanese, or as 直書橫向 in Chinese."
43971         },
43972         {
43973             "name": "text-decoration-skip",
43974             "status": "experimental",
43975             "syntax": "none | [ objects || [ spaces | [ leading-spaces || trailing-spaces ] ] || edges || box-decoration ]",
43976             "relevance": 52,
43977             "browsers": [
43978                 "S12.1",
43979                 "C57",
43980                 "O44"
43981             ],
43982             "references": [
43983                 {
43984                     "name": "MDN Reference",
43985                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip"
43986                 }
43987             ],
43988             "description": "The text-decoration-skip CSS property specifies what parts of the element’s content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors."
43989         },
43990         {
43991             "name": "text-decoration-skip-ink",
43992             "syntax": "auto | all | none",
43993             "relevance": 50,
43994             "browsers": [
43995                 "E79",
43996                 "FF70",
43997                 "C64",
43998                 "O50"
43999             ],
44000             "references": [
44001                 {
44002                     "name": "MDN Reference",
44003                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip-ink"
44004                 }
44005             ],
44006             "description": "The text-decoration-skip-ink CSS property specifies how overlines and underlines are drawn when they pass over glyph ascenders and descenders."
44007         },
44008         {
44009             "name": "text-decoration-thickness",
44010             "syntax": "auto | from-font | <length> | <percentage> ",
44011             "relevance": 50,
44012             "browsers": [
44013                 "FF70",
44014                 "S12.1"
44015             ],
44016             "references": [
44017                 {
44018                     "name": "MDN Reference",
44019                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness"
44020                 }
44021             ],
44022             "description": "The text-decoration-thickness CSS property sets the thickness, or width, of the decoration line that is used on text in an element, such as a line-through, underline, or overline."
44023         },
44024         {
44025             "name": "text-emphasis",
44026             "syntax": "<'text-emphasis-style'> || <'text-emphasis-color'>",
44027             "relevance": 50,
44028             "browsers": [
44029                 "E79",
44030                 "FF46",
44031                 "S6.1",
44032                 "C25",
44033                 "O15"
44034             ],
44035             "references": [
44036                 {
44037                     "name": "MDN Reference",
44038                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-emphasis"
44039                 }
44040             ],
44041             "description": "The text-emphasis CSS property is a shorthand property for setting text-emphasis-style and text-emphasis-color in one declaration. This property will apply the specified emphasis mark to each character of the element's text, except separator characters, like spaces,  and control characters."
44042         },
44043         {
44044             "name": "text-emphasis-color",
44045             "syntax": "<color>",
44046             "relevance": 50,
44047             "browsers": [
44048                 "E79",
44049                 "FF46",
44050                 "S6.1",
44051                 "C25",
44052                 "O15"
44053             ],
44054             "references": [
44055                 {
44056                     "name": "MDN Reference",
44057                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-emphasis-color"
44058                 }
44059             ],
44060             "description": "The text-emphasis-color CSS property defines the color used to draw emphasis marks on text being rendered in the HTML document. This value can also be set and reset using the text-emphasis shorthand."
44061         },
44062         {
44063             "name": "text-emphasis-position",
44064             "syntax": "[ over | under ] && [ right | left ]",
44065             "relevance": 50,
44066             "browsers": [
44067                 "E79",
44068                 "FF46",
44069                 "S6.1",
44070                 "C25",
44071                 "O15"
44072             ],
44073             "references": [
44074                 {
44075                     "name": "MDN Reference",
44076                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-emphasis-position"
44077                 }
44078             ],
44079             "description": "The text-emphasis-position CSS property describes where emphasis marks are drawn at. The effect of emphasis marks on the line height is the same as for ruby text: if there isn't enough place, the line height is increased."
44080         },
44081         {
44082             "name": "text-emphasis-style",
44083             "syntax": "none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string>",
44084             "relevance": 50,
44085             "browsers": [
44086                 "E79",
44087                 "FF46",
44088                 "S6.1",
44089                 "C25",
44090                 "O15"
44091             ],
44092             "references": [
44093                 {
44094                     "name": "MDN Reference",
44095                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-emphasis-style"
44096                 }
44097             ],
44098             "description": "The text-emphasis-style CSS property defines the type of emphasis used. It can also be set, and reset, using the text-emphasis shorthand."
44099         },
44100         {
44101             "name": "text-size-adjust",
44102             "status": "experimental",
44103             "syntax": "none | auto | <percentage>",
44104             "relevance": 56,
44105             "browsers": [
44106                 "E79",
44107                 "C54",
44108                 "O41"
44109             ],
44110             "references": [
44111                 {
44112                     "name": "MDN Reference",
44113                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-size-adjust"
44114                 }
44115             ],
44116             "description": "The text-size-adjust CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property."
44117         },
44118         {
44119             "name": "text-underline-offset",
44120             "syntax": "auto | <length> | <percentage> ",
44121             "relevance": 50,
44122             "browsers": [
44123                 "FF70",
44124                 "S12.1"
44125             ],
44126             "references": [
44127                 {
44128                     "name": "MDN Reference",
44129                     "url": "https://developer.mozilla.org/docs/Web/CSS/text-underline-offset"
44130                 }
44131             ],
44132             "description": "The text-underline-offset CSS property sets the offset distance of an underline text decoration line (applied using text-decoration) from its original position."
44133         },
44134         {
44135             "name": "transform-box",
44136             "syntax": "content-box | border-box | fill-box | stroke-box | view-box",
44137             "relevance": 50,
44138             "browsers": [
44139                 "E79",
44140                 "FF55",
44141                 "S11",
44142                 "C64",
44143                 "O51"
44144             ],
44145             "references": [
44146                 {
44147                     "name": "MDN Reference",
44148                     "url": "https://developer.mozilla.org/docs/Web/CSS/transform-box"
44149                 }
44150             ],
44151             "description": "The transform-box CSS property defines the layout box to which the transform and transform-origin properties relate."
44152         },
44153         {
44154             "name": "translate",
44155             "syntax": "none | <length-percentage> [ <length-percentage> <length>? ]?",
44156             "relevance": 50,
44157             "browsers": [
44158                 "FF72"
44159             ],
44160             "references": [
44161                 {
44162                     "name": "MDN Reference",
44163                     "url": "https://developer.mozilla.org/docs/Web/CSS/translate"
44164                 }
44165             ],
44166             "description": "The translate CSS property allows you to specify translation transforms individually and independently of the transform property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the transform value."
44167         },
44168         {
44169             "name": "speak-as",
44170             "syntax": "auto | bullets | numbers | words | spell-out | <counter-style-name>",
44171             "relevance": 50,
44172             "description": "The speak-as descriptor specifies how a counter symbol constructed with a given @counter-style will be represented in the spoken form. For example, an author can specify a counter symbol to be either spoken as its numerical value or just represented with an audio cue."
44173         },
44174         {
44175             "name": "font-display",
44176             "status": "experimental",
44177             "syntax": "[ auto | block | swap | fallback | optional ]",
44178             "relevance": 54,
44179             "description": "The font-display descriptor determines how a font face is displayed based on whether and when it is downloaded and ready to use."
44180         },
44181         {
44182             "name": "bleed",
44183             "syntax": "auto | <length>",
44184             "relevance": 50,
44185             "description": "The bleed CSS at-rule descriptor, used with the @page at-rule, specifies the extent of the page bleed area outside the page box. This property only has effect if crop marks are enabled using the marks property."
44186         },
44187         {
44188             "name": "marks",
44189             "syntax": "none | [ crop || cross ]",
44190             "relevance": 50,
44191             "description": "The marks CSS at-rule descriptor, used with the @page at-rule, adds crop and/or cross marks to the presentation of the document. Crop marks indicate where the page should be cut. Cross marks are used to align sheets."
44192         },
44193         {
44194             "name": "max-zoom",
44195             "syntax": "auto | <number> | <percentage>",
44196             "relevance": 50,
44197             "description": "The max-zoom CSS descriptor sets the maximum zoom factor of a document defined by the @viewport at-rule. The browser will not zoom in any further than this, whether automatically or at the user's request.\n\nA zoom factor of 1.0 or 100% corresponds to no zooming. Larger values are zoomed in. Smaller values are zoomed out."
44198         },
44199         {
44200             "name": "min-zoom",
44201             "syntax": "auto | <number> | <percentage>",
44202             "relevance": 50,
44203             "description": "The min-zoom CSS descriptor sets the minimum zoom factor of a document defined by the @viewport at-rule. The browser will not zoom out any further than this, whether automatically or at the user's request.\n\nA zoom factor of 1.0 or 100% corresponds to no zooming. Larger values are zoomed in. Smaller values are zoomed out."
44204         },
44205         {
44206             "name": "orientation",
44207             "syntax": "auto | portrait | landscape",
44208             "relevance": 50,
44209             "description": "The orientation CSS @media media feature can be used to apply styles based on the orientation of the viewport (or the page box, for paged media)."
44210         },
44211         {
44212             "name": "user-zoom",
44213             "syntax": "zoom | fixed",
44214             "relevance": 50,
44215             "description": "The user-zoom CSS descriptor controls whether or not the user can change the zoom factor of a document defined by @viewport."
44216         },
44217         {
44218             "name": "viewport-fit",
44219             "syntax": "auto | contain | cover",
44220             "relevance": 50,
44221             "description": "The border-block-style CSS property defines the style of the logical block borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation."
44222         }
44223     ],
44224     "atDirectives": [
44225         {
44226             "name": "@charset",
44227             "references": [
44228                 {
44229                     "name": "MDN Reference",
44230                     "url": "https://developer.mozilla.org/docs/Web/CSS/@charset"
44231                 }
44232             ],
44233             "description": "Defines character set of the document."
44234         },
44235         {
44236             "name": "@counter-style",
44237             "browsers": [
44238                 "FF33"
44239             ],
44240             "references": [
44241                 {
44242                     "name": "MDN Reference",
44243                     "url": "https://developer.mozilla.org/docs/Web/CSS/@counter-style"
44244                 }
44245             ],
44246             "description": "Defines a custom counter style."
44247         },
44248         {
44249             "name": "@font-face",
44250             "references": [
44251                 {
44252                     "name": "MDN Reference",
44253                     "url": "https://developer.mozilla.org/docs/Web/CSS/@font-face"
44254                 }
44255             ],
44256             "description": "Allows for linking to fonts that are automatically activated when needed. This permits authors to work around the limitation of 'web-safe' fonts, allowing for consistent rendering independent of the fonts available in a given user's environment."
44257         },
44258         {
44259             "name": "@font-feature-values",
44260             "browsers": [
44261                 "FF34",
44262                 "S9.1"
44263             ],
44264             "references": [
44265                 {
44266                     "name": "MDN Reference",
44267                     "url": "https://developer.mozilla.org/docs/Web/CSS/@font-feature-values"
44268                 }
44269             ],
44270             "description": "Defines named values for the indices used to select alternate glyphs for a given font family."
44271         },
44272         {
44273             "name": "@import",
44274             "references": [
44275                 {
44276                     "name": "MDN Reference",
44277                     "url": "https://developer.mozilla.org/docs/Web/CSS/@import"
44278                 }
44279             ],
44280             "description": "Includes content of another file."
44281         },
44282         {
44283             "name": "@keyframes",
44284             "references": [
44285                 {
44286                     "name": "MDN Reference",
44287                     "url": "https://developer.mozilla.org/docs/Web/CSS/@keyframes"
44288                 }
44289             ],
44290             "description": "Defines set of animation key frames."
44291         },
44292         {
44293             "name": "@media",
44294             "references": [
44295                 {
44296                     "name": "MDN Reference",
44297                     "url": "https://developer.mozilla.org/docs/Web/CSS/@media"
44298                 }
44299             ],
44300             "description": "Defines a stylesheet for a particular media type."
44301         },
44302         {
44303             "name": "@-moz-document",
44304             "browsers": [
44305                 "FF1.8"
44306             ],
44307             "description": "Gecko-specific at-rule that restricts the style rules contained within it based on the URL of the document."
44308         },
44309         {
44310             "name": "@-moz-keyframes",
44311             "browsers": [
44312                 "FF5"
44313             ],
44314             "description": "Defines set of animation key frames."
44315         },
44316         {
44317             "name": "@-ms-viewport",
44318             "browsers": [
44319                 "E",
44320                 "IE10"
44321             ],
44322             "description": "Specifies the size, zoom factor, and orientation of the viewport."
44323         },
44324         {
44325             "name": "@namespace",
44326             "references": [
44327                 {
44328                     "name": "MDN Reference",
44329                     "url": "https://developer.mozilla.org/docs/Web/CSS/@namespace"
44330                 }
44331             ],
44332             "description": "Declares a prefix and associates it with a namespace name."
44333         },
44334         {
44335             "name": "@-o-keyframes",
44336             "browsers": [
44337                 "O12"
44338             ],
44339             "description": "Defines set of animation key frames."
44340         },
44341         {
44342             "name": "@-o-viewport",
44343             "browsers": [
44344                 "O11"
44345             ],
44346             "description": "Specifies the size, zoom factor, and orientation of the viewport."
44347         },
44348         {
44349             "name": "@page",
44350             "browsers": [
44351                 "E12",
44352                 "FF19",
44353                 "C2",
44354                 "IE8",
44355                 "O6"
44356             ],
44357             "references": [
44358                 {
44359                     "name": "MDN Reference",
44360                     "url": "https://developer.mozilla.org/docs/Web/CSS/@page"
44361                 }
44362             ],
44363             "description": "Directive defines various page parameters."
44364         },
44365         {
44366             "name": "@supports",
44367             "browsers": [
44368                 "E12",
44369                 "FF22",
44370                 "S9",
44371                 "C28",
44372                 "O12.1"
44373             ],
44374             "references": [
44375                 {
44376                     "name": "MDN Reference",
44377                     "url": "https://developer.mozilla.org/docs/Web/CSS/@supports"
44378                 }
44379             ],
44380             "description": "A conditional group rule whose condition tests whether the user agent supports CSS property:value pairs."
44381         },
44382         {
44383             "name": "@-webkit-keyframes",
44384             "browsers": [
44385                 "C",
44386                 "S4"
44387             ],
44388             "description": "Defines set of animation key frames."
44389         }
44390     ],
44391     "pseudoClasses": [
44392         {
44393             "name": ":active",
44394             "references": [
44395                 {
44396                     "name": "MDN Reference",
44397                     "url": "https://developer.mozilla.org/docs/Web/CSS/:active"
44398                 }
44399             ],
44400             "description": "Applies while an element is being activated by the user. For example, between the times the user presses the mouse button and releases it."
44401         },
44402         {
44403             "name": ":any-link",
44404             "browsers": [
44405                 "E79",
44406                 "FF50",
44407                 "S9",
44408                 "C65",
44409                 "O52"
44410             ],
44411             "references": [
44412                 {
44413                     "name": "MDN Reference",
44414                     "url": "https://developer.mozilla.org/docs/Web/CSS/:any-link"
44415                 }
44416             ],
44417             "description": "Represents an element that acts as the source anchor of a hyperlink. Applies to both visited and unvisited links."
44418         },
44419         {
44420             "name": ":checked",
44421             "references": [
44422                 {
44423                     "name": "MDN Reference",
44424                     "url": "https://developer.mozilla.org/docs/Web/CSS/:checked"
44425                 }
44426             ],
44427             "description": "Radio and checkbox elements can be toggled by the user. Some menu items are 'checked' when the user selects them. When such elements are toggled 'on' the :checked pseudo-class applies."
44428         },
44429         {
44430             "name": ":corner-present",
44431             "browsers": [
44432                 "C",
44433                 "S5"
44434             ],
44435             "description": "Non-standard. Indicates whether or not a scrollbar corner is present."
44436         },
44437         {
44438             "name": ":decrement",
44439             "browsers": [
44440                 "C",
44441                 "S5"
44442             ],
44443             "description": "Non-standard. Applies to buttons and track pieces. Indicates whether or not the button or track piece will decrement the view’s position when used."
44444         },
44445         {
44446             "name": ":default",
44447             "browsers": [
44448                 "E79",
44449                 "FF4",
44450                 "S5",
44451                 "C10",
44452                 "O10"
44453             ],
44454             "references": [
44455                 {
44456                     "name": "MDN Reference",
44457                     "url": "https://developer.mozilla.org/docs/Web/CSS/:default"
44458                 }
44459             ],
44460             "description": "Applies to the one or more UI elements that are the default among a set of similar elements. Typically applies to context menu items, buttons, and select lists/menus."
44461         },
44462         {
44463             "name": ":disabled",
44464             "references": [
44465                 {
44466                     "name": "MDN Reference",
44467                     "url": "https://developer.mozilla.org/docs/Web/CSS/:disabled"
44468                 }
44469             ],
44470             "description": "Represents user interface elements that are in a disabled state; such elements have a corresponding enabled state."
44471         },
44472         {
44473             "name": ":double-button",
44474             "browsers": [
44475                 "C",
44476                 "S5"
44477             ],
44478             "description": "Non-standard. Applies to buttons and track pieces. Applies when both buttons are displayed together at the same end of the scrollbar."
44479         },
44480         {
44481             "name": ":empty",
44482             "references": [
44483                 {
44484                     "name": "MDN Reference",
44485                     "url": "https://developer.mozilla.org/docs/Web/CSS/:empty"
44486                 }
44487             ],
44488             "description": "Represents an element that has no children at all."
44489         },
44490         {
44491             "name": ":enabled",
44492             "references": [
44493                 {
44494                     "name": "MDN Reference",
44495                     "url": "https://developer.mozilla.org/docs/Web/CSS/:enabled"
44496                 }
44497             ],
44498             "description": "Represents user interface elements that are in an enabled state; such elements have a corresponding disabled state."
44499         },
44500         {
44501             "name": ":end",
44502             "browsers": [
44503                 "C",
44504                 "S5"
44505             ],
44506             "description": "Non-standard. Applies to buttons and track pieces. Indicates whether the object is placed after the thumb."
44507         },
44508         {
44509             "name": ":first",
44510             "browsers": [
44511                 "E12",
44512                 "S6",
44513                 "C18",
44514                 "IE8",
44515                 "O9.2"
44516             ],
44517             "references": [
44518                 {
44519                     "name": "MDN Reference",
44520                     "url": "https://developer.mozilla.org/docs/Web/CSS/:first"
44521                 }
44522             ],
44523             "description": "When printing double-sided documents, the page boxes on left and right pages may be different. This can be expressed through CSS pseudo-classes defined in the  page context."
44524         },
44525         {
44526             "name": ":first-child",
44527             "references": [
44528                 {
44529                     "name": "MDN Reference",
44530                     "url": "https://developer.mozilla.org/docs/Web/CSS/:first-child"
44531                 }
44532             ],
44533             "description": "Same as :nth-child(1). Represents an element that is the first child of some other element."
44534         },
44535         {
44536             "name": ":first-of-type",
44537             "references": [
44538                 {
44539                     "name": "MDN Reference",
44540                     "url": "https://developer.mozilla.org/docs/Web/CSS/:first-of-type"
44541                 }
44542             ],
44543             "description": "Same as :nth-of-type(1). Represents an element that is the first sibling of its type in the list of children of its parent element."
44544         },
44545         {
44546             "name": ":focus",
44547             "references": [
44548                 {
44549                     "name": "MDN Reference",
44550                     "url": "https://developer.mozilla.org/docs/Web/CSS/:focus"
44551                 }
44552             ],
44553             "description": "Applies while an element has the focus (accepts keyboard or mouse events, or other forms of input)."
44554         },
44555         {
44556             "name": ":fullscreen",
44557             "references": [
44558                 {
44559                     "name": "MDN Reference",
44560                     "url": "https://developer.mozilla.org/docs/Web/CSS/:fullscreen"
44561                 }
44562             ],
44563             "description": "Matches any element that has its fullscreen flag set."
44564         },
44565         {
44566             "name": ":future",
44567             "browsers": [
44568                 "C",
44569                 "O16",
44570                 "S6"
44571             ],
44572             "description": "Represents any element that is defined to occur entirely after a :current element."
44573         },
44574         {
44575             "name": ":horizontal",
44576             "browsers": [
44577                 "C",
44578                 "S5"
44579             ],
44580             "description": "Non-standard. Applies to any scrollbar pieces that have a horizontal orientation."
44581         },
44582         {
44583             "name": ":host",
44584             "browsers": [
44585                 "E79",
44586                 "FF63",
44587                 "S10",
44588                 "C54",
44589                 "O41"
44590             ],
44591             "references": [
44592                 {
44593                     "name": "MDN Reference",
44594                     "url": "https://developer.mozilla.org/docs/Web/CSS/:host"
44595                 }
44596             ],
44597             "description": "When evaluated in the context of a shadow tree, matches the shadow tree’s host element."
44598         },
44599         {
44600             "name": ":host()",
44601             "browsers": [
44602                 "C35",
44603                 "O22"
44604             ],
44605             "description": "When evaluated in the context of a shadow tree, it matches the shadow tree’s host element if the host element, in its normal context, matches the selector argument."
44606         },
44607         {
44608             "name": ":host-context()",
44609             "browsers": [
44610                 "C35",
44611                 "O22"
44612             ],
44613             "description": "Tests whether there is an ancestor, outside the shadow tree, which matches a particular selector."
44614         },
44615         {
44616             "name": ":hover",
44617             "references": [
44618                 {
44619                     "name": "MDN Reference",
44620                     "url": "https://developer.mozilla.org/docs/Web/CSS/:hover"
44621                 }
44622             ],
44623             "description": "Applies while the user designates an element with a pointing device, but does not necessarily activate it. For example, a visual user agent could apply this pseudo-class when the cursor (mouse pointer) hovers over a box generated by the element."
44624         },
44625         {
44626             "name": ":increment",
44627             "browsers": [
44628                 "C",
44629                 "S5"
44630             ],
44631             "description": "Non-standard. Applies to buttons and track pieces. Indicates whether or not the button or track piece will increment the view’s position when used."
44632         },
44633         {
44634             "name": ":indeterminate",
44635             "references": [
44636                 {
44637                     "name": "MDN Reference",
44638                     "url": "https://developer.mozilla.org/docs/Web/CSS/:indeterminate"
44639                 }
44640             ],
44641             "description": "Applies to UI elements whose value is in an indeterminate state."
44642         },
44643         {
44644             "name": ":in-range",
44645             "browsers": [
44646                 "E13",
44647                 "FF29",
44648                 "S5.1",
44649                 "C10",
44650                 "O11"
44651             ],
44652             "references": [
44653                 {
44654                     "name": "MDN Reference",
44655                     "url": "https://developer.mozilla.org/docs/Web/CSS/:in-range"
44656                 }
44657             ],
44658             "description": "Used in conjunction with the min and max attributes, whether on a range input, a number field, or any other types that accept those attributes."
44659         },
44660         {
44661             "name": ":invalid",
44662             "references": [
44663                 {
44664                     "name": "MDN Reference",
44665                     "url": "https://developer.mozilla.org/docs/Web/CSS/:invalid"
44666                 }
44667             ],
44668             "description": "An element is :valid or :invalid when it is, respectively, valid or invalid with respect to data validity semantics defined by a different specification."
44669         },
44670         {
44671             "name": ":lang()",
44672             "browsers": [
44673                 "E",
44674                 "C",
44675                 "FF1",
44676                 "IE8",
44677                 "O8",
44678                 "S3"
44679             ],
44680             "description": "Represents an element that is in language specified."
44681         },
44682         {
44683             "name": ":last-child",
44684             "references": [
44685                 {
44686                     "name": "MDN Reference",
44687                     "url": "https://developer.mozilla.org/docs/Web/CSS/:last-child"
44688                 }
44689             ],
44690             "description": "Same as :nth-last-child(1). Represents an element that is the last child of some other element."
44691         },
44692         {
44693             "name": ":last-of-type",
44694             "references": [
44695                 {
44696                     "name": "MDN Reference",
44697                     "url": "https://developer.mozilla.org/docs/Web/CSS/:last-of-type"
44698                 }
44699             ],
44700             "description": "Same as :nth-last-of-type(1). Represents an element that is the last sibling of its type in the list of children of its parent element."
44701         },
44702         {
44703             "name": ":left",
44704             "browsers": [
44705                 "E12",
44706                 "S5.1",
44707                 "C6",
44708                 "IE8",
44709                 "O9.2"
44710             ],
44711             "references": [
44712                 {
44713                     "name": "MDN Reference",
44714                     "url": "https://developer.mozilla.org/docs/Web/CSS/:left"
44715                 }
44716             ],
44717             "description": "When printing double-sided documents, the page boxes on left and right pages may be different. This can be expressed through CSS pseudo-classes defined in the  page context."
44718         },
44719         {
44720             "name": ":link",
44721             "references": [
44722                 {
44723                     "name": "MDN Reference",
44724                     "url": "https://developer.mozilla.org/docs/Web/CSS/:link"
44725                 }
44726             ],
44727             "description": "Applies to links that have not yet been visited."
44728         },
44729         {
44730             "name": ":matches()",
44731             "browsers": [
44732                 "S9"
44733             ],
44734             "description": "Takes a selector list as its argument. It represents an element that is represented by its argument."
44735         },
44736         {
44737             "name": ":-moz-any()",
44738             "browsers": [
44739                 "FF4"
44740             ],
44741             "description": "Represents an element that is represented by the selector list passed as its argument. Standardized as :matches()."
44742         },
44743         {
44744             "name": ":-moz-any-link",
44745             "browsers": [
44746                 "FF1"
44747             ],
44748             "description": "Represents an element that acts as the source anchor of a hyperlink. Applies to both visited and unvisited links."
44749         },
44750         {
44751             "name": ":-moz-broken",
44752             "browsers": [
44753                 "FF3"
44754             ],
44755             "references": [
44756                 {
44757                     "name": "MDN Reference",
44758                     "url": "https://developer.mozilla.org/docs/Web/CSS/:-moz-broken"
44759                 }
44760             ],
44761             "description": "Non-standard. Matches elements representing broken images."
44762         },
44763         {
44764             "name": ":-moz-drag-over",
44765             "browsers": [
44766                 "FF1"
44767             ],
44768             "description": "Non-standard. Matches elements when a drag-over event applies to it."
44769         },
44770         {
44771             "name": ":-moz-first-node",
44772             "browsers": [
44773                 "FF1"
44774             ],
44775             "description": "Non-standard. Represents an element that is the first child node of some other element."
44776         },
44777         {
44778             "name": ":-moz-focusring",
44779             "browsers": [
44780                 "FF4"
44781             ],
44782             "description": "Non-standard. Matches an element that has focus and focus ring drawing is enabled in the browser."
44783         },
44784         {
44785             "name": ":-moz-full-screen",
44786             "browsers": [
44787                 "FF9"
44788             ],
44789             "description": "Matches any element that has its fullscreen flag set. Standardized as :fullscreen."
44790         },
44791         {
44792             "name": ":-moz-last-node",
44793             "browsers": [
44794                 "FF1"
44795             ],
44796             "description": "Non-standard. Represents an element that is the last child node of some other element."
44797         },
44798         {
44799             "name": ":-moz-loading",
44800             "browsers": [
44801                 "FF3"
44802             ],
44803             "description": "Non-standard. Matches elements, such as images, that haven’t started loading yet."
44804         },
44805         {
44806             "name": ":-moz-only-whitespace",
44807             "browsers": [
44808                 "FF1"
44809             ],
44810             "references": [
44811                 {
44812                     "name": "MDN Reference",
44813                     "url": "https://developer.mozilla.org/docs/Web/CSS/:-moz-only-whitespace"
44814                 }
44815             ],
44816             "description": "The same as :empty, except that it additionally matches elements that only contain code points affected by whitespace processing. Standardized as :blank."
44817         },
44818         {
44819             "name": ":-moz-placeholder",
44820             "browsers": [
44821                 "FF4"
44822             ],
44823             "description": "Deprecated. Represents placeholder text in an input field. Use ::-moz-placeholder for Firefox 19+."
44824         },
44825         {
44826             "name": ":-moz-submit-invalid",
44827             "browsers": [
44828                 "FF4"
44829             ],
44830             "references": [
44831                 {
44832                     "name": "MDN Reference",
44833                     "url": "https://developer.mozilla.org/docs/Web/CSS/:-moz-submit-invalid"
44834                 }
44835             ],
44836             "description": "Non-standard. Represents any submit button when the contents of the associated form are not valid."
44837         },
44838         {
44839             "name": ":-moz-suppressed",
44840             "browsers": [
44841                 "FF3"
44842             ],
44843             "description": "Non-standard. Matches elements representing images that have been blocked from loading."
44844         },
44845         {
44846             "name": ":-moz-ui-invalid",
44847             "browsers": [
44848                 "FF4"
44849             ],
44850             "references": [
44851                 {
44852                     "name": "MDN Reference",
44853                     "url": "https://developer.mozilla.org/docs/Web/CSS/:-moz-ui-invalid"
44854                 }
44855             ],
44856             "description": "Non-standard. Represents any validated form element whose value isn't valid "
44857         },
44858         {
44859             "name": ":-moz-ui-valid",
44860             "browsers": [
44861                 "FF4"
44862             ],
44863             "references": [
44864                 {
44865                     "name": "MDN Reference",
44866                     "url": "https://developer.mozilla.org/docs/Web/CSS/:-moz-ui-valid"
44867                 }
44868             ],
44869             "description": "Non-standard. Represents any validated form element whose value is valid "
44870         },
44871         {
44872             "name": ":-moz-user-disabled",
44873             "browsers": [
44874                 "FF3"
44875             ],
44876             "description": "Non-standard. Matches elements representing images that have been disabled due to the user’s preferences."
44877         },
44878         {
44879             "name": ":-moz-window-inactive",
44880             "browsers": [
44881                 "FF4"
44882             ],
44883             "references": [
44884                 {
44885                     "name": "MDN Reference",
44886                     "url": "https://developer.mozilla.org/docs/Web/CSS/:-moz-window-inactive"
44887                 }
44888             ],
44889             "description": "Non-standard. Matches elements in an inactive window."
44890         },
44891         {
44892             "name": ":-ms-fullscreen",
44893             "browsers": [
44894                 "IE11"
44895             ],
44896             "description": "Matches any element that has its fullscreen flag set."
44897         },
44898         {
44899             "name": ":-ms-input-placeholder",
44900             "browsers": [
44901                 "IE10"
44902             ],
44903             "description": "Represents placeholder text in an input field. Note: for Edge use the pseudo-element ::-ms-input-placeholder. Standardized as ::placeholder."
44904         },
44905         {
44906             "name": ":-ms-keyboard-active",
44907             "browsers": [
44908                 "IE10"
44909             ],
44910             "description": "Windows Store apps only. Applies one or more styles to an element when it has focus and the user presses the space bar."
44911         },
44912         {
44913             "name": ":-ms-lang()",
44914             "browsers": [
44915                 "E",
44916                 "IE10"
44917             ],
44918             "description": "Represents an element that is in the language specified. Accepts a comma separated list of language tokens."
44919         },
44920         {
44921             "name": ":no-button",
44922             "browsers": [
44923                 "C",
44924                 "S5"
44925             ],
44926             "description": "Non-standard. Applies to track pieces. Applies when there is no button at that end of the track."
44927         },
44928         {
44929             "name": ":not()",
44930             "browsers": [
44931                 "E",
44932                 "C",
44933                 "FF1",
44934                 "IE9",
44935                 "O9.5",
44936                 "S2"
44937             ],
44938             "description": "The negation pseudo-class, :not(X), is a functional notation taking a simple selector (excluding the negation pseudo-class itself) as an argument. It represents an element that is not represented by its argument."
44939         },
44940         {
44941             "name": ":nth-child()",
44942             "browsers": [
44943                 "E",
44944                 "C",
44945                 "FF3.5",
44946                 "IE9",
44947                 "O9.5",
44948                 "S3.1"
44949             ],
44950             "description": "Represents an element that has an+b-1 siblings before it in the document tree, for any positive integer or zero value of n, and has a parent element."
44951         },
44952         {
44953             "name": ":nth-last-child()",
44954             "browsers": [
44955                 "E",
44956                 "C",
44957                 "FF3.5",
44958                 "IE9",
44959                 "O9.5",
44960                 "S3.1"
44961             ],
44962             "description": "Represents an element that has an+b-1 siblings after it in the document tree, for any positive integer or zero value of n, and has a parent element."
44963         },
44964         {
44965             "name": ":nth-last-of-type()",
44966             "browsers": [
44967                 "E",
44968                 "C",
44969                 "FF3.5",
44970                 "IE9",
44971                 "O9.5",
44972                 "S3.1"
44973             ],
44974             "description": "Represents an element that has an+b-1 siblings with the same expanded element name after it in the document tree, for any zero or positive integer value of n, and has a parent element."
44975         },
44976         {
44977             "name": ":nth-of-type()",
44978             "browsers": [
44979                 "E",
44980                 "C",
44981                 "FF3.5",
44982                 "IE9",
44983                 "O9.5",
44984                 "S3.1"
44985             ],
44986             "description": "Represents an element that has an+b-1 siblings with the same expanded element name before it in the document tree, for any zero or positive integer value of n, and has a parent element."
44987         },
44988         {
44989             "name": ":only-child",
44990             "references": [
44991                 {
44992                     "name": "MDN Reference",
44993                     "url": "https://developer.mozilla.org/docs/Web/CSS/:only-child"
44994                 }
44995             ],
44996             "description": "Represents an element that has a parent element and whose parent element has no other element children. Same as :first-child:last-child or :nth-child(1):nth-last-child(1), but with a lower specificity."
44997         },
44998         {
44999             "name": ":only-of-type",
45000             "references": [
45001                 {
45002                     "name": "MDN Reference",
45003                     "url": "https://developer.mozilla.org/docs/Web/CSS/:only-of-type"
45004                 }
45005             ],
45006             "description": "Matches every element that is the only child of its type, of its parent. Same as :first-of-type:last-of-type or :nth-of-type(1):nth-last-of-type(1), but with a lower specificity."
45007         },
45008         {
45009             "name": ":optional",
45010             "references": [
45011                 {
45012                     "name": "MDN Reference",
45013                     "url": "https://developer.mozilla.org/docs/Web/CSS/:optional"
45014                 }
45015             ],
45016             "description": "A form element is :required or :optional if a value for it is, respectively, required or optional before the form it belongs to is submitted. Elements that are not form elements are neither required nor optional."
45017         },
45018         {
45019             "name": ":out-of-range",
45020             "browsers": [
45021                 "E13",
45022                 "FF29",
45023                 "S5.1",
45024                 "C10",
45025                 "O11"
45026             ],
45027             "references": [
45028                 {
45029                     "name": "MDN Reference",
45030                     "url": "https://developer.mozilla.org/docs/Web/CSS/:out-of-range"
45031                 }
45032             ],
45033             "description": "Used in conjunction with the min and max attributes, whether on a range input, a number field, or any other types that accept those attributes."
45034         },
45035         {
45036             "name": ":past",
45037             "browsers": [
45038                 "C",
45039                 "O16",
45040                 "S6"
45041             ],
45042             "description": "Represents any element that is defined to occur entirely prior to a :current element."
45043         },
45044         {
45045             "name": ":read-only",
45046             "browsers": [
45047                 "E13",
45048                 "FF78",
45049                 "S4",
45050                 "C1",
45051                 "O9"
45052             ],
45053             "references": [
45054                 {
45055                     "name": "MDN Reference",
45056                     "url": "https://developer.mozilla.org/docs/Web/CSS/:read-only"
45057                 }
45058             ],
45059             "description": "An element whose contents are not user-alterable is :read-only. However, elements whose contents are user-alterable (such as text input fields) are considered to be in a :read-write state. In typical documents, most elements are :read-only."
45060         },
45061         {
45062             "name": ":read-write",
45063             "browsers": [
45064                 "E13",
45065                 "FF78",
45066                 "S4",
45067                 "C1",
45068                 "O9"
45069             ],
45070             "references": [
45071                 {
45072                     "name": "MDN Reference",
45073                     "url": "https://developer.mozilla.org/docs/Web/CSS/:read-write"
45074                 }
45075             ],
45076             "description": "An element whose contents are not user-alterable is :read-only. However, elements whose contents are user-alterable (such as text input fields) are considered to be in a :read-write state. In typical documents, most elements are :read-only."
45077         },
45078         {
45079             "name": ":required",
45080             "references": [
45081                 {
45082                     "name": "MDN Reference",
45083                     "url": "https://developer.mozilla.org/docs/Web/CSS/:required"
45084                 }
45085             ],
45086             "description": "A form element is :required or :optional if a value for it is, respectively, required or optional before the form it belongs to is submitted. Elements that are not form elements are neither required nor optional."
45087         },
45088         {
45089             "name": ":right",
45090             "browsers": [
45091                 "E12",
45092                 "S5.1",
45093                 "C6",
45094                 "IE8",
45095                 "O9.2"
45096             ],
45097             "references": [
45098                 {
45099                     "name": "MDN Reference",
45100                     "url": "https://developer.mozilla.org/docs/Web/CSS/:right"
45101                 }
45102             ],
45103             "description": "When printing double-sided documents, the page boxes on left and right pages may be different. This can be expressed through CSS pseudo-classes defined in the  page context."
45104         },
45105         {
45106             "name": ":root",
45107             "references": [
45108                 {
45109                     "name": "MDN Reference",
45110                     "url": "https://developer.mozilla.org/docs/Web/CSS/:root"
45111                 }
45112             ],
45113             "description": "Represents an element that is the root of the document. In HTML 4, this is always the HTML element."
45114         },
45115         {
45116             "name": ":scope",
45117             "browsers": [
45118                 "E79",
45119                 "FF32",
45120                 "S7",
45121                 "C27",
45122                 "O15"
45123             ],
45124             "references": [
45125                 {
45126                     "name": "MDN Reference",
45127                     "url": "https://developer.mozilla.org/docs/Web/CSS/:scope"
45128                 }
45129             ],
45130             "description": "Represents any element that is in the contextual reference element set."
45131         },
45132         {
45133             "name": ":single-button",
45134             "browsers": [
45135                 "C",
45136                 "S5"
45137             ],
45138             "description": "Non-standard. Applies to buttons and track pieces. Applies when both buttons are displayed separately at either end of the scrollbar."
45139         },
45140         {
45141             "name": ":start",
45142             "browsers": [
45143                 "C",
45144                 "S5"
45145             ],
45146             "description": "Non-standard. Applies to buttons and track pieces. Indicates whether the object is placed before the thumb."
45147         },
45148         {
45149             "name": ":target",
45150             "references": [
45151                 {
45152                     "name": "MDN Reference",
45153                     "url": "https://developer.mozilla.org/docs/Web/CSS/:target"
45154                 }
45155             ],
45156             "description": "Some URIs refer to a location within a resource. This kind of URI ends with a 'number sign' (#) followed by an anchor identifier (called the fragment identifier)."
45157         },
45158         {
45159             "name": ":valid",
45160             "references": [
45161                 {
45162                     "name": "MDN Reference",
45163                     "url": "https://developer.mozilla.org/docs/Web/CSS/:valid"
45164                 }
45165             ],
45166             "description": "An element is :valid or :invalid when it is, respectively, valid or invalid with respect to data validity semantics defined by a different specification."
45167         },
45168         {
45169             "name": ":vertical",
45170             "browsers": [
45171                 "C",
45172                 "S5"
45173             ],
45174             "description": "Non-standard. Applies to any scrollbar pieces that have a vertical orientation."
45175         },
45176         {
45177             "name": ":visited",
45178             "references": [
45179                 {
45180                     "name": "MDN Reference",
45181                     "url": "https://developer.mozilla.org/docs/Web/CSS/:visited"
45182                 }
45183             ],
45184             "description": "Applies once the link has been visited by the user."
45185         },
45186         {
45187             "name": ":-webkit-any()",
45188             "browsers": [
45189                 "C",
45190                 "S5"
45191             ],
45192             "description": "Represents an element that is represented by the selector list passed as its argument. Standardized as :matches()."
45193         },
45194         {
45195             "name": ":-webkit-full-screen",
45196             "browsers": [
45197                 "C",
45198                 "S6"
45199             ],
45200             "description": "Matches any element that has its fullscreen flag set. Standardized as :fullscreen."
45201         },
45202         {
45203             "name": ":window-inactive",
45204             "browsers": [
45205                 "C",
45206                 "S3"
45207             ],
45208             "description": "Non-standard. Applies to all scrollbar pieces. Indicates whether or not the window containing the scrollbar is currently active."
45209         },
45210         {
45211             "name": ":blank",
45212             "status": "experimental",
45213             "references": [
45214                 {
45215                     "name": "MDN Reference",
45216                     "url": "https://developer.mozilla.org/docs/Web/CSS/:blank"
45217                 }
45218             ],
45219             "description": "The :blank CSS pseudo-class selects empty user input elements (eg. <input> or <textarea>)."
45220         },
45221         {
45222             "name": ":defined",
45223             "status": "experimental",
45224             "browsers": [
45225                 "E79",
45226                 "FF63",
45227                 "S10",
45228                 "C54",
45229                 "O41"
45230             ],
45231             "references": [
45232                 {
45233                     "name": "MDN Reference",
45234                     "url": "https://developer.mozilla.org/docs/Web/CSS/:defined"
45235                 }
45236             ],
45237             "description": "The :defined CSS pseudo-class represents any element that has been defined. This includes any standard element built in to the browser, and custom elements that have been successfully defined (i.e. with the CustomElementRegistry.define() method)."
45238         },
45239         {
45240             "name": ":dir",
45241             "browsers": [
45242                 "FF49"
45243             ],
45244             "references": [
45245                 {
45246                     "name": "MDN Reference",
45247                     "url": "https://developer.mozilla.org/docs/Web/CSS/:dir"
45248                 }
45249             ],
45250             "description": "The :dir() CSS pseudo-class matches elements based on the directionality of the text contained in them."
45251         },
45252         {
45253             "name": ":focus-visible",
45254             "status": "experimental",
45255             "browsers": [
45256                 "E79",
45257                 "FF4",
45258                 "C67",
45259                 "O54"
45260             ],
45261             "references": [
45262                 {
45263                     "name": "MDN Reference",
45264                     "url": "https://developer.mozilla.org/docs/Web/CSS/:focus-visible"
45265                 }
45266             ],
45267             "description": "The :focus-visible pseudo-class applies while an element matches the :focus pseudo-class and the UA determines via heuristics that the focus should be made evident on the element."
45268         },
45269         {
45270             "name": ":focus-within",
45271             "status": "experimental",
45272             "browsers": [
45273                 "E79",
45274                 "FF52",
45275                 "S10.1",
45276                 "C60",
45277                 "O47"
45278             ],
45279             "references": [
45280                 {
45281                     "name": "MDN Reference",
45282                     "url": "https://developer.mozilla.org/docs/Web/CSS/:focus-within"
45283                 }
45284             ],
45285             "description": "The :focus-within pseudo-class applies to any element for which the :focus pseudo class applies as well as to an element whose descendant in the flat tree (including non-element nodes, such as text nodes) matches the conditions for matching :focus."
45286         },
45287         {
45288             "name": ":has",
45289             "status": "experimental",
45290             "references": [
45291                 {
45292                     "name": "MDN Reference",
45293                     "url": "https://developer.mozilla.org/docs/Web/CSS/:has"
45294                 }
45295             ],
45296             "description": ":The :has() CSS pseudo-class represents an element if any of the selectors passed as parameters (relative to the :scope of the given element), match at least one element."
45297         },
45298         {
45299             "name": ":is",
45300             "status": "experimental",
45301             "browsers": [
45302                 "E79",
45303                 "FF78",
45304                 "S9",
45305                 "C68",
45306                 "O55"
45307             ],
45308             "references": [
45309                 {
45310                     "name": "MDN Reference",
45311                     "url": "https://developer.mozilla.org/docs/Web/CSS/:is"
45312                 }
45313             ],
45314             "description": "The :is() CSS pseudo-class function takes a selector list as its argument, and selects any element that can be selected by one of the selectors in that list. This is useful for writing large selectors in a more compact form."
45315         },
45316         {
45317             "name": ":placeholder-shown",
45318             "status": "experimental",
45319             "references": [
45320                 {
45321                     "name": "MDN Reference",
45322                     "url": "https://developer.mozilla.org/docs/Web/CSS/:placeholder-shown"
45323                 }
45324             ],
45325             "description": "The :placeholder-shown CSS pseudo-class represents any <input> or <textarea> element that is currently displaying placeholder text."
45326         },
45327         {
45328             "name": ":where",
45329             "status": "experimental",
45330             "browsers": [
45331                 "FF78",
45332                 "C72"
45333             ],
45334             "references": [
45335                 {
45336                     "name": "MDN Reference",
45337                     "url": "https://developer.mozilla.org/docs/Web/CSS/:where"
45338                 }
45339             ],
45340             "description": "The :where() CSS pseudo-class function takes a selector list as its argument, and selects any element that can be selected by one of the selectors in that list."
45341         }
45342     ],
45343     "pseudoElements": [
45344         {
45345             "name": "::after",
45346             "references": [
45347                 {
45348                     "name": "MDN Reference",
45349                     "url": "https://developer.mozilla.org/docs/Web/CSS/::after"
45350                 }
45351             ],
45352             "description": "Represents a styleable child pseudo-element immediately after the originating element’s actual content."
45353         },
45354         {
45355             "name": "::backdrop",
45356             "browsers": [
45357                 "E12",
45358                 "FF47",
45359                 "C37",
45360                 "IE11",
45361                 "O24"
45362             ],
45363             "references": [
45364                 {
45365                     "name": "MDN Reference",
45366                     "url": "https://developer.mozilla.org/docs/Web/CSS/::backdrop"
45367                 }
45368             ],
45369             "description": "Used to create a backdrop that hides the underlying document for an element in a top layer (such as an element that is displayed fullscreen)."
45370         },
45371         {
45372             "name": "::before",
45373             "references": [
45374                 {
45375                     "name": "MDN Reference",
45376                     "url": "https://developer.mozilla.org/docs/Web/CSS/::before"
45377                 }
45378             ],
45379             "description": "Represents a styleable child pseudo-element immediately before the originating element’s actual content."
45380         },
45381         {
45382             "name": "::content",
45383             "browsers": [
45384                 "C35",
45385                 "O22"
45386             ],
45387             "description": "Deprecated. Matches the distribution list itself, on elements that have one. Use ::slotted for forward compatibility."
45388         },
45389         {
45390             "name": "::cue",
45391             "browsers": [
45392                 "E79",
45393                 "FF55",
45394                 "S6.1",
45395                 "C26",
45396                 "O15"
45397             ],
45398             "references": [
45399                 {
45400                     "name": "MDN Reference",
45401                     "url": "https://developer.mozilla.org/docs/Web/CSS/::cue"
45402                 }
45403             ]
45404         },
45405         {
45406             "name": "::cue()",
45407             "browsers": [
45408                 "C",
45409                 "O16",
45410                 "S6"
45411             ]
45412         },
45413         {
45414             "name": "::cue-region",
45415             "browsers": [
45416                 "C",
45417                 "O16",
45418                 "S6"
45419             ]
45420         },
45421         {
45422             "name": "::cue-region()",
45423             "browsers": [
45424                 "C",
45425                 "O16",
45426                 "S6"
45427             ]
45428         },
45429         {
45430             "name": "::first-letter",
45431             "references": [
45432                 {
45433                     "name": "MDN Reference",
45434                     "url": "https://developer.mozilla.org/docs/Web/CSS/::first-letter"
45435                 }
45436             ],
45437             "description": "Represents the first letter of an element, if it is not preceded by any other content (such as images or inline tables) on its line."
45438         },
45439         {
45440             "name": "::first-line",
45441             "references": [
45442                 {
45443                     "name": "MDN Reference",
45444                     "url": "https://developer.mozilla.org/docs/Web/CSS/::first-line"
45445                 }
45446             ],
45447             "description": "Describes the contents of the first formatted line of its originating element."
45448         },
45449         {
45450             "name": "::-moz-focus-inner",
45451             "browsers": [
45452                 "FF4"
45453             ]
45454         },
45455         {
45456             "name": "::-moz-focus-outer",
45457             "browsers": [
45458                 "FF4"
45459             ]
45460         },
45461         {
45462             "name": "::-moz-list-bullet",
45463             "browsers": [
45464                 "FF1"
45465             ],
45466             "description": "Used to style the bullet of a list element. Similar to the standardized ::marker."
45467         },
45468         {
45469             "name": "::-moz-list-number",
45470             "browsers": [
45471                 "FF1"
45472             ],
45473             "description": "Used to style the numbers of a list element. Similar to the standardized ::marker."
45474         },
45475         {
45476             "name": "::-moz-placeholder",
45477             "browsers": [
45478                 "FF19"
45479             ],
45480             "description": "Represents placeholder text in an input field"
45481         },
45482         {
45483             "name": "::-moz-progress-bar",
45484             "browsers": [
45485                 "FF9"
45486             ],
45487             "description": "Represents the bar portion of a progress bar."
45488         },
45489         {
45490             "name": "::-moz-selection",
45491             "browsers": [
45492                 "FF1"
45493             ],
45494             "description": "Represents the portion of a document that has been highlighted by the user."
45495         },
45496         {
45497             "name": "::-ms-backdrop",
45498             "browsers": [
45499                 "IE11"
45500             ],
45501             "description": "Used to create a backdrop that hides the underlying document for an element in a top layer (such as an element that is displayed fullscreen)."
45502         },
45503         {
45504             "name": "::-ms-browse",
45505             "browsers": [
45506                 "E",
45507                 "IE10"
45508             ],
45509             "description": "Represents the browse button of an input type=file control."
45510         },
45511         {
45512             "name": "::-ms-check",
45513             "browsers": [
45514                 "E",
45515                 "IE10"
45516             ],
45517             "description": "Represents the check of a checkbox or radio button input control."
45518         },
45519         {
45520             "name": "::-ms-clear",
45521             "browsers": [
45522                 "E",
45523                 "IE10"
45524             ],
45525             "description": "Represents the clear button of a text input control"
45526         },
45527         {
45528             "name": "::-ms-expand",
45529             "browsers": [
45530                 "E",
45531                 "IE10"
45532             ],
45533             "description": "Represents the drop-down button of a select control."
45534         },
45535         {
45536             "name": "::-ms-fill",
45537             "browsers": [
45538                 "E",
45539                 "IE10"
45540             ],
45541             "description": "Represents the bar portion of a progress bar."
45542         },
45543         {
45544             "name": "::-ms-fill-lower",
45545             "browsers": [
45546                 "E",
45547                 "IE10"
45548             ],
45549             "description": "Represents the portion of the slider track from its smallest value up to the value currently selected by the thumb. In a left-to-right layout, this is the portion of the slider track to the left of the thumb."
45550         },
45551         {
45552             "name": "::-ms-fill-upper",
45553             "browsers": [
45554                 "E",
45555                 "IE10"
45556             ],
45557             "description": "Represents the portion of the slider track from the value currently selected by the thumb up to the slider's largest value. In a left-to-right layout, this is the portion of the slider track to the right of the thumb."
45558         },
45559         {
45560             "name": "::-ms-reveal",
45561             "browsers": [
45562                 "E",
45563                 "IE10"
45564             ],
45565             "description": "Represents the password reveal button of an input type=password control."
45566         },
45567         {
45568             "name": "::-ms-thumb",
45569             "browsers": [
45570                 "E",
45571                 "IE10"
45572             ],
45573             "description": "Represents the portion of range input control (also known as a slider control) that the user drags."
45574         },
45575         {
45576             "name": "::-ms-ticks-after",
45577             "browsers": [
45578                 "E",
45579                 "IE10"
45580             ],
45581             "description": "Represents the tick marks of a slider that begin just after the thumb and continue up to the slider's largest value. In a left-to-right layout, these are the ticks to the right of the thumb."
45582         },
45583         {
45584             "name": "::-ms-ticks-before",
45585             "browsers": [
45586                 "E",
45587                 "IE10"
45588             ],
45589             "description": "Represents the tick marks of a slider that represent its smallest values up to the value currently selected by the thumb. In a left-to-right layout, these are the ticks to the left of the thumb."
45590         },
45591         {
45592             "name": "::-ms-tooltip",
45593             "browsers": [
45594                 "E",
45595                 "IE10"
45596             ],
45597             "description": "Represents the tooltip of a slider (input type=range)."
45598         },
45599         {
45600             "name": "::-ms-track",
45601             "browsers": [
45602                 "E",
45603                 "IE10"
45604             ],
45605             "description": "Represents the track of a slider."
45606         },
45607         {
45608             "name": "::-ms-value",
45609             "browsers": [
45610                 "E",
45611                 "IE10"
45612             ],
45613             "description": "Represents the content of a text or password input control, or a select control."
45614         },
45615         {
45616             "name": "::selection",
45617             "references": [
45618                 {
45619                     "name": "MDN Reference",
45620                     "url": "https://developer.mozilla.org/docs/Web/CSS/::selection"
45621                 }
45622             ],
45623             "description": "Represents the portion of a document that has been highlighted by the user."
45624         },
45625         {
45626             "name": "::shadow",
45627             "browsers": [
45628                 "C35",
45629                 "O22"
45630             ],
45631             "description": "Matches the shadow root if an element has a shadow tree."
45632         },
45633         {
45634             "name": "::-webkit-file-upload-button",
45635             "browsers": [
45636                 "E79",
45637                 "S3",
45638                 "C1",
45639                 "O15"
45640             ],
45641             "references": [
45642                 {
45643                     "name": "MDN Reference",
45644                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-file-upload-button"
45645                 }
45646             ]
45647         },
45648         {
45649             "name": "::-webkit-inner-spin-button",
45650             "browsers": [
45651                 "E79",
45652                 "S5",
45653                 "C6",
45654                 "O15"
45655             ],
45656             "references": [
45657                 {
45658                     "name": "MDN Reference",
45659                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-inner-spin-button"
45660                 }
45661             ]
45662         },
45663         {
45664             "name": "::-webkit-input-placeholder",
45665             "browsers": [
45666                 "C",
45667                 "S4"
45668             ]
45669         },
45670         {
45671             "name": "::-webkit-keygen-select",
45672             "browsers": [
45673                 "C",
45674                 "O",
45675                 "S6"
45676             ]
45677         },
45678         {
45679             "name": "::-webkit-meter-bar",
45680             "browsers": [
45681                 "E79",
45682                 "S5.1",
45683                 "C12",
45684                 "O15"
45685             ],
45686             "references": [
45687                 {
45688                     "name": "MDN Reference",
45689                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-meter-bar"
45690                 }
45691             ]
45692         },
45693         {
45694             "name": "::-webkit-meter-even-less-good-value",
45695             "browsers": [
45696                 "E79",
45697                 "S5.1",
45698                 "C12",
45699                 "O15"
45700             ],
45701             "references": [
45702                 {
45703                     "name": "MDN Reference",
45704                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-meter-even-less-good-value"
45705                 }
45706             ]
45707         },
45708         {
45709             "name": "::-webkit-meter-optimum-value",
45710             "browsers": [
45711                 "E79",
45712                 "S5.1",
45713                 "C12",
45714                 "O15"
45715             ],
45716             "references": [
45717                 {
45718                     "name": "MDN Reference",
45719                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-meter-optimum-value"
45720                 }
45721             ]
45722         },
45723         {
45724             "name": "::-webkit-meter-suboptimum-value",
45725             "browsers": [
45726                 "E79",
45727                 "S5.1",
45728                 "C12",
45729                 "O15"
45730             ],
45731             "references": [
45732                 {
45733                     "name": "MDN Reference",
45734                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-meter-suboptimum-value"
45735                 }
45736             ]
45737         },
45738         {
45739             "name": "::-webkit-outer-spin-button",
45740             "browsers": [
45741                 "S5",
45742                 "C6"
45743             ],
45744             "references": [
45745                 {
45746                     "name": "MDN Reference",
45747                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-outer-spin-button"
45748                 }
45749             ]
45750         },
45751         {
45752             "name": "::-webkit-progress-bar",
45753             "browsers": [
45754                 "E79",
45755                 "S6.1",
45756                 "C25",
45757                 "O15"
45758             ],
45759             "references": [
45760                 {
45761                     "name": "MDN Reference",
45762                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-progress-bar"
45763                 }
45764             ]
45765         },
45766         {
45767             "name": "::-webkit-progress-inner-element",
45768             "browsers": [
45769                 "E79",
45770                 "S6.1",
45771                 "C23",
45772                 "O15"
45773             ],
45774             "references": [
45775                 {
45776                     "name": "MDN Reference",
45777                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-progress-inner-element"
45778                 }
45779             ]
45780         },
45781         {
45782             "name": "::-webkit-progress-value",
45783             "browsers": [
45784                 "E79",
45785                 "S6.1",
45786                 "C25",
45787                 "O15"
45788             ],
45789             "references": [
45790                 {
45791                     "name": "MDN Reference",
45792                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-progress-value"
45793                 }
45794             ]
45795         },
45796         {
45797             "name": "::-webkit-resizer",
45798             "browsers": [
45799                 "E79",
45800                 "S4",
45801                 "C2",
45802                 "O15"
45803             ],
45804             "references": [
45805                 {
45806                     "name": "MDN Reference",
45807                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar"
45808                 }
45809             ]
45810         },
45811         {
45812             "name": "::-webkit-scrollbar",
45813             "browsers": [
45814                 "E79",
45815                 "S4",
45816                 "C2",
45817                 "O15"
45818             ],
45819             "references": [
45820                 {
45821                     "name": "MDN Reference",
45822                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar"
45823                 }
45824             ]
45825         },
45826         {
45827             "name": "::-webkit-scrollbar-button",
45828             "browsers": [
45829                 "E79",
45830                 "S4",
45831                 "C2",
45832                 "O15"
45833             ],
45834             "references": [
45835                 {
45836                     "name": "MDN Reference",
45837                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar"
45838                 }
45839             ]
45840         },
45841         {
45842             "name": "::-webkit-scrollbar-corner",
45843             "browsers": [
45844                 "E79",
45845                 "S4",
45846                 "C2",
45847                 "O15"
45848             ],
45849             "references": [
45850                 {
45851                     "name": "MDN Reference",
45852                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar"
45853                 }
45854             ]
45855         },
45856         {
45857             "name": "::-webkit-scrollbar-thumb",
45858             "browsers": [
45859                 "E79",
45860                 "S4",
45861                 "C2",
45862                 "O15"
45863             ],
45864             "references": [
45865                 {
45866                     "name": "MDN Reference",
45867                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar"
45868                 }
45869             ]
45870         },
45871         {
45872             "name": "::-webkit-scrollbar-track",
45873             "browsers": [
45874                 "E79",
45875                 "S4",
45876                 "C2",
45877                 "O15"
45878             ],
45879             "references": [
45880                 {
45881                     "name": "MDN Reference",
45882                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar"
45883                 }
45884             ]
45885         },
45886         {
45887             "name": "::-webkit-scrollbar-track-piece",
45888             "browsers": [
45889                 "E79",
45890                 "S4",
45891                 "C2",
45892                 "O15"
45893             ],
45894             "references": [
45895                 {
45896                     "name": "MDN Reference",
45897                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar"
45898                 }
45899             ]
45900         },
45901         {
45902             "name": "::-webkit-search-cancel-button",
45903             "browsers": [
45904                 "E79",
45905                 "S3",
45906                 "C1",
45907                 "O15"
45908             ],
45909             "references": [
45910                 {
45911                     "name": "MDN Reference",
45912                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-search-cancel-button"
45913                 }
45914             ]
45915         },
45916         {
45917             "name": "::-webkit-search-decoration",
45918             "browsers": [
45919                 "C",
45920                 "S4"
45921             ]
45922         },
45923         {
45924             "name": "::-webkit-search-results-button",
45925             "browsers": [
45926                 "E79",
45927                 "S3",
45928                 "C1",
45929                 "O15"
45930             ],
45931             "references": [
45932                 {
45933                     "name": "MDN Reference",
45934                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-webkit-search-results-button"
45935                 }
45936             ]
45937         },
45938         {
45939             "name": "::-webkit-search-results-decoration",
45940             "browsers": [
45941                 "C",
45942                 "S4"
45943             ]
45944         },
45945         {
45946             "name": "::-webkit-slider-runnable-track",
45947             "browsers": [
45948                 "C",
45949                 "O",
45950                 "S6"
45951             ]
45952         },
45953         {
45954             "name": "::-webkit-slider-thumb",
45955             "browsers": [
45956                 "C",
45957                 "O",
45958                 "S6"
45959             ]
45960         },
45961         {
45962             "name": "::-webkit-textfield-decoration-container",
45963             "browsers": [
45964                 "C",
45965                 "O",
45966                 "S6"
45967             ]
45968         },
45969         {
45970             "name": "::-webkit-validation-bubble",
45971             "browsers": [
45972                 "C",
45973                 "O",
45974                 "S6"
45975             ]
45976         },
45977         {
45978             "name": "::-webkit-validation-bubble-arrow",
45979             "browsers": [
45980                 "C",
45981                 "O",
45982                 "S6"
45983             ]
45984         },
45985         {
45986             "name": "::-webkit-validation-bubble-arrow-clipper",
45987             "browsers": [
45988                 "C",
45989                 "O",
45990                 "S6"
45991             ]
45992         },
45993         {
45994             "name": "::-webkit-validation-bubble-heading",
45995             "browsers": [
45996                 "C",
45997                 "O",
45998                 "S6"
45999             ]
46000         },
46001         {
46002             "name": "::-webkit-validation-bubble-message",
46003             "browsers": [
46004                 "C",
46005                 "O",
46006                 "S6"
46007             ]
46008         },
46009         {
46010             "name": "::-webkit-validation-bubble-text-block",
46011             "browsers": [
46012                 "C",
46013                 "O",
46014                 "S6"
46015             ]
46016         },
46017         {
46018             "name": "::-moz-range-progress",
46019             "status": "nonstandard",
46020             "browsers": [
46021                 "FF22"
46022             ],
46023             "references": [
46024                 {
46025                     "name": "MDN Reference",
46026                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-moz-range-progress"
46027                 }
46028             ],
46029             "description": "The ::-moz-range-progress CSS pseudo-element is a Mozilla extension that represents the lower portion of the track (i.e., groove) in which the indicator slides in an <input> of type=\"range\". This portion corresponds to values lower than the value currently selected by the thumb (i.e., virtual knob)."
46030         },
46031         {
46032             "name": "::-moz-range-thumb",
46033             "status": "nonstandard",
46034             "browsers": [
46035                 "FF21"
46036             ],
46037             "references": [
46038                 {
46039                     "name": "MDN Reference",
46040                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-moz-range-thumb"
46041                 }
46042             ],
46043             "description": "The ::-moz-range-thumb CSS pseudo-element is a Mozilla extension that represents the thumb (i.e., virtual knob) of an <input> of type=\"range\". The user can move the thumb along the input's track to alter its numerical value."
46044         },
46045         {
46046             "name": "::-moz-range-track",
46047             "status": "nonstandard",
46048             "browsers": [
46049                 "FF21"
46050             ],
46051             "references": [
46052                 {
46053                     "name": "MDN Reference",
46054                     "url": "https://developer.mozilla.org/docs/Web/CSS/::-moz-range-track"
46055                 }
46056             ],
46057             "description": "The ::-moz-range-track CSS pseudo-element is a Mozilla extension that represents the track (i.e., groove) in which the indicator slides in an <input> of type=\"range\"."
46058         },
46059         {
46060             "name": "::-webkit-progress-inner-value",
46061             "status": "nonstandard",
46062             "description": "The ::-webkit-progress-value CSS pseudo-element represents the filled-in portion of the bar of a <progress> element. It is a child of the ::-webkit-progress-bar pseudo-element.\n\nIn order to let ::-webkit-progress-value take effect, -webkit-appearance needs to be set to none on the <progress> element."
46063         },
46064         {
46065             "name": "::grammar-error",
46066             "status": "experimental",
46067             "references": [
46068                 {
46069                     "name": "MDN Reference",
46070                     "url": "https://developer.mozilla.org/docs/Web/CSS/::grammar-error"
46071                 }
46072             ],
46073             "description": "The ::grammar-error CSS pseudo-element represents a text segment which the user agent has flagged as grammatically incorrect."
46074         },
46075         {
46076             "name": "::marker",
46077             "browsers": [
46078                 "E80",
46079                 "FF68",
46080                 "S11.1",
46081                 "C80"
46082             ],
46083             "references": [
46084                 {
46085                     "name": "MDN Reference",
46086                     "url": "https://developer.mozilla.org/docs/Web/CSS/::marker"
46087                 }
46088             ],
46089             "description": "The ::marker CSS pseudo-element selects the marker box of a list item, which typically contains a bullet or number. It works on any element or pseudo-element set to display: list-item, such as the <li> and <summary> elements."
46090         },
46091         {
46092             "name": "::part",
46093             "status": "experimental",
46094             "browsers": [
46095                 "E79",
46096                 "FF72",
46097                 "S13.1",
46098                 "C73",
46099                 "O60"
46100             ],
46101             "references": [
46102                 {
46103                     "name": "MDN Reference",
46104                     "url": "https://developer.mozilla.org/docs/Web/CSS/::part"
46105                 }
46106             ],
46107             "description": "The ::part CSS pseudo-element represents any element within a shadow tree that has a matching part attribute."
46108         },
46109         {
46110             "name": "::placeholder",
46111             "browsers": [
46112                 "E12",
46113                 "FF51",
46114                 "S10.1",
46115                 "C57",
46116                 "O44"
46117             ],
46118             "references": [
46119                 {
46120                     "name": "MDN Reference",
46121                     "url": "https://developer.mozilla.org/docs/Web/CSS/::placeholder"
46122                 }
46123             ],
46124             "description": "The ::placeholder CSS pseudo-element represents the placeholder text of a form element."
46125         },
46126         {
46127             "name": "::slotted",
46128             "browsers": [
46129                 "E79",
46130                 "FF63",
46131                 "S10",
46132                 "C50",
46133                 "O37"
46134             ],
46135             "references": [
46136                 {
46137                     "name": "MDN Reference",
46138                     "url": "https://developer.mozilla.org/docs/Web/CSS/::slotted"
46139                 }
46140             ],
46141             "description": "The :slotted() CSS pseudo-element represents any element that has been placed into a slot inside an HTML template."
46142         },
46143         {
46144             "name": "::spelling-error",
46145             "status": "experimental",
46146             "references": [
46147                 {
46148                     "name": "MDN Reference",
46149                     "url": "https://developer.mozilla.org/docs/Web/CSS/::spelling-error"
46150                 }
46151             ],
46152             "description": "The ::spelling-error CSS pseudo-element represents a text segment which the user agent has flagged as incorrectly spelled."
46153         }
46154     ]
46155 };
46156
46157
46158 /***/ }),
46159 /* 112 */
46160 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
46161
46162 __webpack_require__.r(__webpack_exports__);
46163 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
46164 /* harmony export */   "CSSDataProvider": () => /* binding */ CSSDataProvider
46165 /* harmony export */ });
46166 /*---------------------------------------------------------------------------------------------
46167  *  Copyright (c) Microsoft Corporation. All rights reserved.
46168  *  Licensed under the MIT License. See License.txt in the project root for license information.
46169  *--------------------------------------------------------------------------------------------*/
46170
46171 var CSSDataProvider = /** @class */ (function () {
46172     /**
46173      * Currently, unversioned data uses the V1 implementation
46174      * In the future when the provider handles multiple versions of HTML custom data,
46175      * use the latest implementation for unversioned data
46176      */
46177     function CSSDataProvider(data) {
46178         this._properties = [];
46179         this._atDirectives = [];
46180         this._pseudoClasses = [];
46181         this._pseudoElements = [];
46182         this.addData(data);
46183     }
46184     CSSDataProvider.prototype.provideProperties = function () {
46185         return this._properties;
46186     };
46187     CSSDataProvider.prototype.provideAtDirectives = function () {
46188         return this._atDirectives;
46189     };
46190     CSSDataProvider.prototype.providePseudoClasses = function () {
46191         return this._pseudoClasses;
46192     };
46193     CSSDataProvider.prototype.providePseudoElements = function () {
46194         return this._pseudoElements;
46195     };
46196     CSSDataProvider.prototype.addData = function (data) {
46197         if (Array.isArray(data.properties)) {
46198             for (var _i = 0, _a = data.properties; _i < _a.length; _i++) {
46199                 var prop = _a[_i];
46200                 if (isPropertyData(prop)) {
46201                     this._properties.push(prop);
46202                 }
46203             }
46204         }
46205         if (Array.isArray(data.atDirectives)) {
46206             for (var _b = 0, _c = data.atDirectives; _b < _c.length; _b++) {
46207                 var prop = _c[_b];
46208                 if (isAtDirective(prop)) {
46209                     this._atDirectives.push(prop);
46210                 }
46211             }
46212         }
46213         if (Array.isArray(data.pseudoClasses)) {
46214             for (var _d = 0, _e = data.pseudoClasses; _d < _e.length; _d++) {
46215                 var prop = _e[_d];
46216                 if (isPseudoClassData(prop)) {
46217                     this._pseudoClasses.push(prop);
46218                 }
46219             }
46220         }
46221         if (Array.isArray(data.pseudoElements)) {
46222             for (var _f = 0, _g = data.pseudoElements; _f < _g.length; _f++) {
46223                 var prop = _g[_f];
46224                 if (isPseudoElementData(prop)) {
46225                     this._pseudoElements.push(prop);
46226                 }
46227             }
46228         }
46229     };
46230     return CSSDataProvider;
46231 }());
46232
46233 function isPropertyData(d) {
46234     return typeof d.name === 'string';
46235 }
46236 function isAtDirective(d) {
46237     return typeof d.name === 'string';
46238 }
46239 function isPseudoClassData(d) {
46240     return typeof d.name === 'string';
46241 }
46242 function isPseudoElementData(d) {
46243     return typeof d.name === 'string';
46244 }
46245
46246
46247 /***/ }),
46248 /* 113 */
46249 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
46250
46251 __webpack_require__.r(__webpack_exports__);
46252 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
46253 /* harmony export */   "getSelectionRanges": () => /* binding */ getSelectionRanges
46254 /* harmony export */ });
46255 /* harmony import */ var _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(88);
46256 /* harmony import */ var _parser_cssNodes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74);
46257 /*---------------------------------------------------------------------------------------------
46258  *  Copyright (c) Microsoft Corporation. All rights reserved.
46259  *  Licensed under the MIT License. See License.txt in the project root for license information.
46260  *--------------------------------------------------------------------------------------------*/
46261
46262
46263
46264 function getSelectionRanges(document, positions, stylesheet) {
46265     function getSelectionRange(position) {
46266         var applicableRanges = getApplicableRanges(position);
46267         var current = undefined;
46268         for (var index = applicableRanges.length - 1; index >= 0; index--) {
46269             current = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.SelectionRange.create(_cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Range.create(document.positionAt(applicableRanges[index][0]), document.positionAt(applicableRanges[index][1])), current);
46270         }
46271         if (!current) {
46272             current = _cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.SelectionRange.create(_cssLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Range.create(position, position));
46273         }
46274         return current;
46275     }
46276     return positions.map(getSelectionRange);
46277     function getApplicableRanges(position) {
46278         var offset = document.offsetAt(position);
46279         var currNode = stylesheet.findChildAtOffset(offset, true);
46280         if (!currNode) {
46281             return [];
46282         }
46283         var result = [];
46284         while (currNode) {
46285             if (currNode.parent &&
46286                 currNode.offset === currNode.parent.offset &&
46287                 currNode.end === currNode.parent.end) {
46288                 currNode = currNode.parent;
46289                 continue;
46290             }
46291             // The `{ }` part of `.a { }`
46292             if (currNode.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Declarations) {
46293                 if (offset > currNode.offset && offset < currNode.end) {
46294                     // Return `{ }` and the range inside `{` and `}`
46295                     result.push([currNode.offset + 1, currNode.end - 1]);
46296                 }
46297             }
46298             result.push([currNode.offset, currNode.end]);
46299             currNode = currNode.parent;
46300         }
46301         return result;
46302     }
46303 }
46304
46305
46306 /***/ }),
46307 /* 114 */
46308 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
46309
46310 __webpack_require__.r(__webpack_exports__);
46311 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
46312 /* harmony export */   "SCSSNavigation": () => /* binding */ SCSSNavigation
46313 /* harmony export */ });
46314 /* harmony import */ var _cssNavigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96);
46315 /* harmony import */ var _parser_cssNodes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74);
46316 /* harmony import */ var vscode_uri__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(93);
46317 /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(75);
46318 /*---------------------------------------------------------------------------------------------
46319  *  Copyright (c) Microsoft Corporation. All rights reserved.
46320  *  Licensed under the MIT License. See License.txt in the project root for license information.
46321  *--------------------------------------------------------------------------------------------*/
46322
46323 var __extends = (undefined && undefined.__extends) || (function () {
46324     var extendStatics = function (d, b) {
46325         extendStatics = Object.setPrototypeOf ||
46326             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
46327             function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
46328         return extendStatics(d, b);
46329     };
46330     return function (d, b) {
46331         extendStatics(d, b);
46332         function __() { this.constructor = d; }
46333         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
46334     };
46335 })();
46336 var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
46337     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
46338     return new (P || (P = Promise))(function (resolve, reject) {
46339         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
46340         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
46341         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
46342         step((generator = generator.apply(thisArg, _arguments || [])).next());
46343     });
46344 };
46345 var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
46346     var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
46347     return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
46348     function verb(n) { return function (v) { return step([n, v]); }; }
46349     function step(op) {
46350         if (f) throw new TypeError("Generator is already executing.");
46351         while (_) try {
46352             if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
46353             if (y = 0, t) op = [op[0] & 2, t.value];
46354             switch (op[0]) {
46355                 case 0: case 1: t = op; break;
46356                 case 4: _.label++; return { value: op[1], done: false };
46357                 case 5: _.label++; y = op[1]; op = [0]; continue;
46358                 case 7: op = _.ops.pop(); _.trys.pop(); continue;
46359                 default:
46360                     if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
46361                     if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
46362                     if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
46363                     if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
46364                     if (t[2]) _.ops.pop();
46365                     _.trys.pop(); continue;
46366             }
46367             op = body.call(thisArg, _);
46368         } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46369         if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46370     }
46371 };
46372
46373
46374
46375
46376 var SCSSNavigation = /** @class */ (function (_super) {
46377     __extends(SCSSNavigation, _super);
46378     function SCSSNavigation(fileSystemProvider) {
46379         return _super.call(this, fileSystemProvider) || this;
46380     }
46381     SCSSNavigation.prototype.isRawStringDocumentLinkNode = function (node) {
46382         return (_super.prototype.isRawStringDocumentLinkNode.call(this, node) ||
46383             node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Use ||
46384             node.type === _parser_cssNodes__WEBPACK_IMPORTED_MODULE_1__.NodeType.Forward);
46385     };
46386     SCSSNavigation.prototype.resolveRelativeReference = function (ref, documentUri, documentContext) {
46387         return __awaiter(this, void 0, void 0, function () {
46388             function toPathVariations(uri) {
46389                 // No valid path
46390                 if (uri.path === '') {
46391                     return undefined;
46392                 }
46393                 // No variation for links that ends with suffix
46394                 if (uri.path.endsWith('.scss') || uri.path.endsWith('.css')) {
46395                     return undefined;
46396                 }
46397                 // If a link is like a/, try resolving a/index.scss and a/_index.scss
46398                 if (uri.path.endsWith('/')) {
46399                     return [
46400                         uri.with({ path: uri.path + 'index.scss' }).toString(),
46401                         uri.with({ path: uri.path + '_index.scss' }).toString()
46402                     ];
46403                 }
46404                 // Use `uri.path` since it's normalized to use `/` in all platforms
46405                 var pathFragments = uri.path.split('/');
46406                 var basename = pathFragments[pathFragments.length - 1];
46407                 var pathWithoutBasename = uri.path.slice(0, -basename.length);
46408                 // No variation for links such as _a
46409                 if (basename.startsWith('_')) {
46410                     if (uri.path.endsWith('.scss')) {
46411                         return undefined;
46412                     }
46413                     else {
46414                         return [uri.with({ path: uri.path + '.scss' }).toString()];
46415                     }
46416                 }
46417                 var normalizedBasename = basename + '.scss';
46418                 var documentUriWithBasename = function (newBasename) {
46419                     return uri.with({ path: pathWithoutBasename + newBasename }).toString();
46420                 };
46421                 var normalizedPath = documentUriWithBasename(normalizedBasename);
46422                 var underScorePath = documentUriWithBasename('_' + normalizedBasename);
46423                 var indexPath = documentUriWithBasename(normalizedBasename.slice(0, -5) + '/index.scss');
46424                 var indexUnderscoreUri = documentUriWithBasename(normalizedBasename.slice(0, -5) + '/_index.scss');
46425                 var cssPath = documentUriWithBasename(normalizedBasename.slice(0, -5) + '.css');
46426                 return [normalizedPath, underScorePath, indexPath, indexUnderscoreUri, cssPath];
46427             }
46428             var target, parsedUri, pathVariations, j, e_1;
46429             return __generator(this, function (_a) {
46430                 switch (_a.label) {
46431                     case 0:
46432                         if ((0,_utils_strings__WEBPACK_IMPORTED_MODULE_2__.startsWith)(ref, 'sass:')) {
46433                             return [2 /*return*/, undefined]; // sass library
46434                         }
46435                         return [4 /*yield*/, _super.prototype.resolveRelativeReference.call(this, ref, documentUri, documentContext)];
46436                     case 1:
46437                         target = _a.sent();
46438                         if (!(this.fileSystemProvider && target)) return [3 /*break*/, 8];
46439                         parsedUri = vscode_uri__WEBPACK_IMPORTED_MODULE_3__.URI.parse(target);
46440                         if (!(parsedUri.path && vscode_uri__WEBPACK_IMPORTED_MODULE_3__.Utils.extname(parsedUri).length === 0)) return [3 /*break*/, 8];
46441                         _a.label = 2;
46442                     case 2:
46443                         _a.trys.push([2, 7, , 8]);
46444                         pathVariations = toPathVariations(parsedUri);
46445                         if (!pathVariations) return [3 /*break*/, 6];
46446                         j = 0;
46447                         _a.label = 3;
46448                     case 3:
46449                         if (!(j < pathVariations.length)) return [3 /*break*/, 6];
46450                         return [4 /*yield*/, this.fileExists(pathVariations[j])];
46451                     case 4:
46452                         if (_a.sent()) {
46453                             return [2 /*return*/, pathVariations[j]];
46454                         }
46455                         _a.label = 5;
46456                     case 5:
46457                         j++;
46458                         return [3 /*break*/, 3];
46459                     case 6: return [2 /*return*/, undefined];
46460                     case 7:
46461                         e_1 = _a.sent();
46462                         return [3 /*break*/, 8];
46463                     case 8: return [2 /*return*/, target];
46464                 }
46465             });
46466         });
46467     };
46468     return SCSSNavigation;
46469 }(_cssNavigation__WEBPACK_IMPORTED_MODULE_0__.CSSNavigation));
46470
46471
46472
46473 /***/ }),
46474 /* 115 */
46475 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
46476
46477 __webpack_require__.r(__webpack_exports__);
46478 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
46479 /* harmony export */   "AnnotatedTextEdit": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.AnnotatedTextEdit,
46480 /* harmony export */   "ChangeAnnotation": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ChangeAnnotation,
46481 /* harmony export */   "ChangeAnnotationIdentifier": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ChangeAnnotationIdentifier,
46482 /* harmony export */   "ClientCapabilities": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ClientCapabilities,
46483 /* harmony export */   "CodeAction": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CodeAction,
46484 /* harmony export */   "CodeActionContext": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CodeActionContext,
46485 /* harmony export */   "CodeActionKind": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CodeActionKind,
46486 /* harmony export */   "CodeDescription": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CodeDescription,
46487 /* harmony export */   "CodeLens": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CodeLens,
46488 /* harmony export */   "Color": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Color,
46489 /* harmony export */   "ColorInformation": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ColorInformation,
46490 /* harmony export */   "ColorPresentation": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ColorPresentation,
46491 /* harmony export */   "Command": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Command,
46492 /* harmony export */   "CompletionItem": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CompletionItem,
46493 /* harmony export */   "CompletionItemKind": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CompletionItemKind,
46494 /* harmony export */   "CompletionItemTag": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CompletionItemTag,
46495 /* harmony export */   "CompletionList": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CompletionList,
46496 /* harmony export */   "CreateFile": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.CreateFile,
46497 /* harmony export */   "DeleteFile": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DeleteFile,
46498 /* harmony export */   "Diagnostic": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Diagnostic,
46499 /* harmony export */   "DiagnosticRelatedInformation": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DiagnosticRelatedInformation,
46500 /* harmony export */   "DiagnosticSeverity": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DiagnosticSeverity,
46501 /* harmony export */   "DiagnosticTag": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DiagnosticTag,
46502 /* harmony export */   "DocumentHighlight": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DocumentHighlight,
46503 /* harmony export */   "DocumentHighlightKind": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DocumentHighlightKind,
46504 /* harmony export */   "DocumentLink": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DocumentLink,
46505 /* harmony export */   "DocumentSymbol": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.DocumentSymbol,
46506 /* harmony export */   "EOL": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.EOL,
46507 /* harmony export */   "FileType": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.FileType,
46508 /* harmony export */   "FoldingRange": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.FoldingRange,
46509 /* harmony export */   "FoldingRangeKind": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.FoldingRangeKind,
46510 /* harmony export */   "FormattingOptions": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.FormattingOptions,
46511 /* harmony export */   "Hover": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Hover,
46512 /* harmony export */   "InsertReplaceEdit": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.InsertReplaceEdit,
46513 /* harmony export */   "InsertTextFormat": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.InsertTextFormat,
46514 /* harmony export */   "InsertTextMode": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.InsertTextMode,
46515 /* harmony export */   "Location": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Location,
46516 /* harmony export */   "LocationLink": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.LocationLink,
46517 /* harmony export */   "MarkedString": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.MarkedString,
46518 /* harmony export */   "MarkupContent": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.MarkupContent,
46519 /* harmony export */   "MarkupKind": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.MarkupKind,
46520 /* harmony export */   "OptionalVersionedTextDocumentIdentifier": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.OptionalVersionedTextDocumentIdentifier,
46521 /* harmony export */   "ParameterInformation": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ParameterInformation,
46522 /* harmony export */   "Position": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Position,
46523 /* harmony export */   "Range": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.Range,
46524 /* harmony export */   "RenameFile": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.RenameFile,
46525 /* harmony export */   "ScannerState": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.ScannerState,
46526 /* harmony export */   "SelectionRange": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.SelectionRange,
46527 /* harmony export */   "SignatureInformation": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.SignatureInformation,
46528 /* harmony export */   "SymbolInformation": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.SymbolInformation,
46529 /* harmony export */   "SymbolKind": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.SymbolKind,
46530 /* harmony export */   "SymbolTag": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.SymbolTag,
46531 /* harmony export */   "TextDocument": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.TextDocument,
46532 /* harmony export */   "TextDocumentEdit": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.TextDocumentEdit,
46533 /* harmony export */   "TextDocumentIdentifier": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.TextDocumentIdentifier,
46534 /* harmony export */   "TextDocumentItem": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.TextDocumentItem,
46535 /* harmony export */   "TextEdit": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.TextEdit,
46536 /* harmony export */   "TokenType": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.TokenType,
46537 /* harmony export */   "VersionedTextDocumentIdentifier": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.VersionedTextDocumentIdentifier,
46538 /* harmony export */   "WorkspaceChange": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.WorkspaceChange,
46539 /* harmony export */   "WorkspaceEdit": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.WorkspaceEdit,
46540 /* harmony export */   "integer": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.integer,
46541 /* harmony export */   "uinteger": () => /* reexport safe */ _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__.uinteger,
46542 /* harmony export */   "getLanguageService": () => /* binding */ getLanguageService,
46543 /* harmony export */   "newHTMLDataProvider": () => /* binding */ newHTMLDataProvider,
46544 /* harmony export */   "getDefaultHTMLDataProvider": () => /* binding */ getDefaultHTMLDataProvider
46545 /* harmony export */ });
46546 /* harmony import */ var _parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(116);
46547 /* harmony import */ var _parser_htmlParser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(119);
46548 /* harmony import */ var _services_htmlCompletion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(122);
46549 /* harmony import */ var _services_htmlHover__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(129);
46550 /* harmony import */ var _services_htmlFormatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(130);
46551 /* harmony import */ var _services_htmlLinks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(134);
46552 /* harmony import */ var _services_htmlHighlighting__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(136);
46553 /* harmony import */ var _services_htmlSymbolsProvider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(137);
46554 /* harmony import */ var _services_htmlRename__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(138);
46555 /* harmony import */ var _services_htmlMatchingTagPosition__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(139);
46556 /* harmony import */ var _services_htmlLinkedEditing__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(140);
46557 /* harmony import */ var _services_htmlFolding__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(141);
46558 /* harmony import */ var _services_htmlSelectionRange__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(142);
46559 /* harmony import */ var _languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(126);
46560 /* harmony import */ var _languageFacts_dataManager__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(143);
46561 /* harmony import */ var _languageFacts_data_webCustomData__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(144);
46562 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(117);
46563 /*---------------------------------------------------------------------------------------------
46564  *  Copyright (c) Microsoft Corporation. All rights reserved.
46565  *  Licensed under the MIT License. See License.txt in the project root for license information.
46566  *--------------------------------------------------------------------------------------------*/
46567
46568
46569
46570
46571
46572
46573
46574
46575
46576
46577
46578
46579
46580
46581
46582
46583
46584 var defaultLanguageServiceOptions = {};
46585 function getLanguageService(options) {
46586     if (options === void 0) { options = defaultLanguageServiceOptions; }
46587     var dataManager = new _languageFacts_dataManager__WEBPACK_IMPORTED_MODULE_14__.HTMLDataManager(options);
46588     var htmlHover = new _services_htmlHover__WEBPACK_IMPORTED_MODULE_3__.HTMLHover(options, dataManager);
46589     var htmlCompletion = new _services_htmlCompletion__WEBPACK_IMPORTED_MODULE_2__.HTMLCompletion(options, dataManager);
46590     return {
46591         setDataProviders: dataManager.setDataProviders.bind(dataManager),
46592         createScanner: _parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__.createScanner,
46593         parseHTMLDocument: function (document) { return (0,_parser_htmlParser__WEBPACK_IMPORTED_MODULE_1__.parse)(document.getText()); },
46594         doComplete: htmlCompletion.doComplete.bind(htmlCompletion),
46595         doComplete2: htmlCompletion.doComplete2.bind(htmlCompletion),
46596         setCompletionParticipants: htmlCompletion.setCompletionParticipants.bind(htmlCompletion),
46597         doHover: htmlHover.doHover.bind(htmlHover),
46598         format: _services_htmlFormatter__WEBPACK_IMPORTED_MODULE_4__.format,
46599         findDocumentHighlights: _services_htmlHighlighting__WEBPACK_IMPORTED_MODULE_6__.findDocumentHighlights,
46600         findDocumentLinks: _services_htmlLinks__WEBPACK_IMPORTED_MODULE_5__.findDocumentLinks,
46601         findDocumentSymbols: _services_htmlSymbolsProvider__WEBPACK_IMPORTED_MODULE_7__.findDocumentSymbols,
46602         getFoldingRanges: _services_htmlFolding__WEBPACK_IMPORTED_MODULE_11__.getFoldingRanges,
46603         getSelectionRanges: _services_htmlSelectionRange__WEBPACK_IMPORTED_MODULE_12__.getSelectionRanges,
46604         doTagComplete: htmlCompletion.doTagComplete.bind(htmlCompletion),
46605         doRename: _services_htmlRename__WEBPACK_IMPORTED_MODULE_8__.doRename,
46606         findMatchingTagPosition: _services_htmlMatchingTagPosition__WEBPACK_IMPORTED_MODULE_9__.findMatchingTagPosition,
46607         findOnTypeRenameRanges: _services_htmlLinkedEditing__WEBPACK_IMPORTED_MODULE_10__.findLinkedEditingRanges,
46608         findLinkedEditingRanges: _services_htmlLinkedEditing__WEBPACK_IMPORTED_MODULE_10__.findLinkedEditingRanges
46609     };
46610 }
46611 function newHTMLDataProvider(id, customData) {
46612     return new _languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_13__.HTMLDataProvider(id, customData);
46613 }
46614 function getDefaultHTMLDataProvider() {
46615     return newHTMLDataProvider('default', _languageFacts_data_webCustomData__WEBPACK_IMPORTED_MODULE_15__.htmlData);
46616 }
46617
46618
46619 /***/ }),
46620 /* 116 */
46621 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
46622
46623 __webpack_require__.r(__webpack_exports__);
46624 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
46625 /* harmony export */   "createScanner": () => /* binding */ createScanner
46626 /* harmony export */ });
46627 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77);
46628 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(117);
46629 /*---------------------------------------------------------------------------------------------
46630  *  Copyright (c) Microsoft Corporation. All rights reserved.
46631  *  Licensed under the MIT License. See License.txt in the project root for license information.
46632  *--------------------------------------------------------------------------------------------*/
46633
46634
46635 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_0__.loadMessageBundle();
46636 var MultiLineStream = /** @class */ (function () {
46637     function MultiLineStream(source, position) {
46638         this.source = source;
46639         this.len = source.length;
46640         this.position = position;
46641     }
46642     MultiLineStream.prototype.eos = function () {
46643         return this.len <= this.position;
46644     };
46645     MultiLineStream.prototype.getSource = function () {
46646         return this.source;
46647     };
46648     MultiLineStream.prototype.pos = function () {
46649         return this.position;
46650     };
46651     MultiLineStream.prototype.goBackTo = function (pos) {
46652         this.position = pos;
46653     };
46654     MultiLineStream.prototype.goBack = function (n) {
46655         this.position -= n;
46656     };
46657     MultiLineStream.prototype.advance = function (n) {
46658         this.position += n;
46659     };
46660     MultiLineStream.prototype.goToEnd = function () {
46661         this.position = this.source.length;
46662     };
46663     MultiLineStream.prototype.nextChar = function () {
46664         return this.source.charCodeAt(this.position++) || 0;
46665     };
46666     MultiLineStream.prototype.peekChar = function (n) {
46667         if (n === void 0) { n = 0; }
46668         return this.source.charCodeAt(this.position + n) || 0;
46669     };
46670     MultiLineStream.prototype.advanceIfChar = function (ch) {
46671         if (ch === this.source.charCodeAt(this.position)) {
46672             this.position++;
46673             return true;
46674         }
46675         return false;
46676     };
46677     MultiLineStream.prototype.advanceIfChars = function (ch) {
46678         var i;
46679         if (this.position + ch.length > this.source.length) {
46680             return false;
46681         }
46682         for (i = 0; i < ch.length; i++) {
46683             if (this.source.charCodeAt(this.position + i) !== ch[i]) {
46684                 return false;
46685             }
46686         }
46687         this.advance(i);
46688         return true;
46689     };
46690     MultiLineStream.prototype.advanceIfRegExp = function (regex) {
46691         var str = this.source.substr(this.position);
46692         var match = str.match(regex);
46693         if (match) {
46694             this.position = this.position + match.index + match[0].length;
46695             return match[0];
46696         }
46697         return '';
46698     };
46699     MultiLineStream.prototype.advanceUntilRegExp = function (regex) {
46700         var str = this.source.substr(this.position);
46701         var match = str.match(regex);
46702         if (match) {
46703             this.position = this.position + match.index;
46704             return match[0];
46705         }
46706         else {
46707             this.goToEnd();
46708         }
46709         return '';
46710     };
46711     MultiLineStream.prototype.advanceUntilChar = function (ch) {
46712         while (this.position < this.source.length) {
46713             if (this.source.charCodeAt(this.position) === ch) {
46714                 return true;
46715             }
46716             this.advance(1);
46717         }
46718         return false;
46719     };
46720     MultiLineStream.prototype.advanceUntilChars = function (ch) {
46721         while (this.position + ch.length <= this.source.length) {
46722             var i = 0;
46723             for (; i < ch.length && this.source.charCodeAt(this.position + i) === ch[i]; i++) {
46724             }
46725             if (i === ch.length) {
46726                 return true;
46727             }
46728             this.advance(1);
46729         }
46730         this.goToEnd();
46731         return false;
46732     };
46733     MultiLineStream.prototype.skipWhitespace = function () {
46734         var n = this.advanceWhileChar(function (ch) {
46735             return ch === _WSP || ch === _TAB || ch === _NWL || ch === _LFD || ch === _CAR;
46736         });
46737         return n > 0;
46738     };
46739     MultiLineStream.prototype.advanceWhileChar = function (condition) {
46740         var posNow = this.position;
46741         while (this.position < this.len && condition(this.source.charCodeAt(this.position))) {
46742             this.position++;
46743         }
46744         return this.position - posNow;
46745     };
46746     return MultiLineStream;
46747 }());
46748 var _BNG = '!'.charCodeAt(0);
46749 var _MIN = '-'.charCodeAt(0);
46750 var _LAN = '<'.charCodeAt(0);
46751 var _RAN = '>'.charCodeAt(0);
46752 var _FSL = '/'.charCodeAt(0);
46753 var _EQS = '='.charCodeAt(0);
46754 var _DQO = '"'.charCodeAt(0);
46755 var _SQO = '\''.charCodeAt(0);
46756 var _NWL = '\n'.charCodeAt(0);
46757 var _CAR = '\r'.charCodeAt(0);
46758 var _LFD = '\f'.charCodeAt(0);
46759 var _WSP = ' '.charCodeAt(0);
46760 var _TAB = '\t'.charCodeAt(0);
46761 var htmlScriptContents = {
46762     'text/x-handlebars-template': true
46763 };
46764 function createScanner(input, initialOffset, initialState, emitPseudoCloseTags) {
46765     if (initialOffset === void 0) { initialOffset = 0; }
46766     if (initialState === void 0) { initialState = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent; }
46767     if (emitPseudoCloseTags === void 0) { emitPseudoCloseTags = false; }
46768     var stream = new MultiLineStream(input, initialOffset);
46769     var state = initialState;
46770     var tokenOffset = 0;
46771     var tokenType = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Unknown;
46772     var tokenError;
46773     var hasSpaceAfterTag;
46774     var lastTag;
46775     var lastAttributeName;
46776     var lastTypeValue;
46777     function nextElementName() {
46778         return stream.advanceIfRegExp(/^[_:\w][_:\w-.\d]*/).toLowerCase();
46779     }
46780     function nextAttributeName() {
46781         return stream.advanceIfRegExp(/^[^\s"'></=\x00-\x0F\x7F\x80-\x9F]*/).toLowerCase();
46782     }
46783     function finishToken(offset, type, errorMessage) {
46784         tokenType = type;
46785         tokenOffset = offset;
46786         tokenError = errorMessage;
46787         return type;
46788     }
46789     function scan() {
46790         var offset = stream.pos();
46791         var oldState = state;
46792         var token = internalScan();
46793         if (token !== _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOS && offset === stream.pos() && !(emitPseudoCloseTags && (token === _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTagClose || token === _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndTagClose))) {
46794             console.log('Scanner.scan has not advanced at offset ' + offset + ', state before: ' + oldState + ' after: ' + state);
46795             stream.advance(1);
46796             return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Unknown);
46797         }
46798         return token;
46799     }
46800     function internalScan() {
46801         var offset = stream.pos();
46802         if (stream.eos()) {
46803             return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOS);
46804         }
46805         var errorMessage;
46806         switch (state) {
46807             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinComment:
46808                 if (stream.advanceIfChars([_MIN, _MIN, _RAN])) { // -->
46809                     state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent;
46810                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndCommentTag);
46811                 }
46812                 stream.advanceUntilChars([_MIN, _MIN, _RAN]); // -->
46813                 return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Comment);
46814             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinDoctype:
46815                 if (stream.advanceIfChar(_RAN)) {
46816                     state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent;
46817                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndDoctypeTag);
46818                 }
46819                 stream.advanceUntilChar(_RAN); // >
46820                 return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Doctype);
46821             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent:
46822                 if (stream.advanceIfChar(_LAN)) { // <
46823                     if (!stream.eos() && stream.peekChar() === _BNG) { // !
46824                         if (stream.advanceIfChars([_BNG, _MIN, _MIN])) { // <!--
46825                             state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinComment;
46826                             return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartCommentTag);
46827                         }
46828                         if (stream.advanceIfRegExp(/^!doctype/i)) {
46829                             state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinDoctype;
46830                             return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartDoctypeTag);
46831                         }
46832                     }
46833                     if (stream.advanceIfChar(_FSL)) { // /
46834                         state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.AfterOpeningEndTag;
46835                         return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndTagOpen);
46836                     }
46837                     state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.AfterOpeningStartTag;
46838                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTagOpen);
46839                 }
46840                 stream.advanceUntilChar(_LAN);
46841                 return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Content);
46842             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.AfterOpeningEndTag:
46843                 var tagName = nextElementName();
46844                 if (tagName.length > 0) {
46845                     state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinEndTag;
46846                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndTag);
46847                 }
46848                 if (stream.skipWhitespace()) { // white space is not valid here
46849                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Whitespace, localize('error.unexpectedWhitespace', 'Tag name must directly follow the open bracket.'));
46850                 }
46851                 state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinEndTag;
46852                 stream.advanceUntilChar(_RAN);
46853                 if (offset < stream.pos()) {
46854                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Unknown, localize('error.endTagNameExpected', 'End tag name expected.'));
46855                 }
46856                 return internalScan();
46857             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinEndTag:
46858                 if (stream.skipWhitespace()) { // white space is valid here
46859                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Whitespace);
46860                 }
46861                 if (stream.advanceIfChar(_RAN)) { // >
46862                     state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent;
46863                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndTagClose);
46864                 }
46865                 if (emitPseudoCloseTags && stream.peekChar() === _LAN) { // <
46866                     state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent;
46867                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndTagClose, localize('error.closingBracketMissing', 'Closing bracket missing.'));
46868                 }
46869                 errorMessage = localize('error.closingBracketExpected', 'Closing bracket expected.');
46870                 break;
46871             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.AfterOpeningStartTag:
46872                 lastTag = nextElementName();
46873                 lastTypeValue = void 0;
46874                 lastAttributeName = void 0;
46875                 if (lastTag.length > 0) {
46876                     hasSpaceAfterTag = false;
46877                     state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinTag;
46878                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTag);
46879                 }
46880                 if (stream.skipWhitespace()) { // white space is not valid here
46881                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Whitespace, localize('error.unexpectedWhitespace', 'Tag name must directly follow the open bracket.'));
46882                 }
46883                 state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinTag;
46884                 stream.advanceUntilChar(_RAN);
46885                 if (offset < stream.pos()) {
46886                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Unknown, localize('error.startTagNameExpected', 'Start tag name expected.'));
46887                 }
46888                 return internalScan();
46889             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinTag:
46890                 if (stream.skipWhitespace()) {
46891                     hasSpaceAfterTag = true; // remember that we have seen a whitespace
46892                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Whitespace);
46893                 }
46894                 if (hasSpaceAfterTag) {
46895                     lastAttributeName = nextAttributeName();
46896                     if (lastAttributeName.length > 0) {
46897                         state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.AfterAttributeName;
46898                         hasSpaceAfterTag = false;
46899                         return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.AttributeName);
46900                     }
46901                 }
46902                 if (stream.advanceIfChars([_FSL, _RAN])) { // />
46903                     state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent;
46904                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTagSelfClose);
46905                 }
46906                 if (stream.advanceIfChar(_RAN)) { // >
46907                     if (lastTag === 'script') {
46908                         if (lastTypeValue && htmlScriptContents[lastTypeValue]) {
46909                             // stay in html
46910                             state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent;
46911                         }
46912                         else {
46913                             state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinScriptContent;
46914                         }
46915                     }
46916                     else if (lastTag === 'style') {
46917                         state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinStyleContent;
46918                     }
46919                     else {
46920                         state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent;
46921                     }
46922                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTagClose);
46923                 }
46924                 if (emitPseudoCloseTags && stream.peekChar() === _LAN) { // <
46925                     state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent;
46926                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTagClose, localize('error.closingBracketMissing', 'Closing bracket missing.'));
46927                 }
46928                 stream.advance(1);
46929                 return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Unknown, localize('error.unexpectedCharacterInTag', 'Unexpected character in tag.'));
46930             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.AfterAttributeName:
46931                 if (stream.skipWhitespace()) {
46932                     hasSpaceAfterTag = true;
46933                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Whitespace);
46934                 }
46935                 if (stream.advanceIfChar(_EQS)) {
46936                     state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.BeforeAttributeValue;
46937                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.DelimiterAssign);
46938                 }
46939                 state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinTag;
46940                 return internalScan(); // no advance yet - jump to WithinTag
46941             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.BeforeAttributeValue:
46942                 if (stream.skipWhitespace()) {
46943                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Whitespace);
46944                 }
46945                 var attributeValue = stream.advanceIfRegExp(/^[^\s"'`=<>]+/);
46946                 if (attributeValue.length > 0) {
46947                     if (stream.peekChar() === _RAN && stream.peekChar(-1) === _FSL) { // <foo bar=http://foo/>
46948                         stream.goBack(1);
46949                         attributeValue = attributeValue.substr(0, attributeValue.length - 1);
46950                     }
46951                     if (lastAttributeName === 'type') {
46952                         lastTypeValue = attributeValue;
46953                     }
46954                     state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinTag;
46955                     hasSpaceAfterTag = false;
46956                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.AttributeValue);
46957                 }
46958                 var ch = stream.peekChar();
46959                 if (ch === _SQO || ch === _DQO) {
46960                     stream.advance(1); // consume quote
46961                     if (stream.advanceUntilChar(ch)) {
46962                         stream.advance(1); // consume quote
46963                     }
46964                     if (lastAttributeName === 'type') {
46965                         lastTypeValue = stream.getSource().substring(offset + 1, stream.pos() - 1);
46966                     }
46967                     state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinTag;
46968                     hasSpaceAfterTag = false;
46969                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.AttributeValue);
46970                 }
46971                 state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinTag;
46972                 hasSpaceAfterTag = false;
46973                 return internalScan(); // no advance yet - jump to WithinTag
46974             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinScriptContent:
46975                 // see http://stackoverflow.com/questions/14574471/how-do-browsers-parse-a-script-tag-exactly
46976                 var sciptState = 1;
46977                 while (!stream.eos()) {
46978                     var match = stream.advanceIfRegExp(/<!--|-->|<\/?script\s*\/?>?/i);
46979                     if (match.length === 0) {
46980                         stream.goToEnd();
46981                         return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Script);
46982                     }
46983                     else if (match === '<!--') {
46984                         if (sciptState === 1) {
46985                             sciptState = 2;
46986                         }
46987                     }
46988                     else if (match === '-->') {
46989                         sciptState = 1;
46990                     }
46991                     else if (match[1] !== '/') { // <script
46992                         if (sciptState === 2) {
46993                             sciptState = 3;
46994                         }
46995                     }
46996                     else { // </script
46997                         if (sciptState === 3) {
46998                             sciptState = 2;
46999                         }
47000                         else {
47001                             stream.goBack(match.length); // to the beginning of the closing tag
47002                             break;
47003                         }
47004                     }
47005                 }
47006                 state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent;
47007                 if (offset < stream.pos()) {
47008                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Script);
47009                 }
47010                 return internalScan(); // no advance yet - jump to content
47011             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinStyleContent:
47012                 stream.advanceUntilRegExp(/<\/style/i);
47013                 state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent;
47014                 if (offset < stream.pos()) {
47015                     return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Styles);
47016                 }
47017                 return internalScan(); // no advance yet - jump to content
47018         }
47019         stream.advance(1);
47020         state = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent;
47021         return finishToken(offset, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Unknown, errorMessage);
47022     }
47023     return {
47024         scan: scan,
47025         getTokenType: function () { return tokenType; },
47026         getTokenOffset: function () { return tokenOffset; },
47027         getTokenLength: function () { return stream.pos() - tokenOffset; },
47028         getTokenEnd: function () { return stream.pos(); },
47029         getTokenText: function () { return stream.getSource().substring(tokenOffset, stream.pos()); },
47030         getScannerState: function () { return state; },
47031         getTokenError: function () { return tokenError; }
47032     };
47033 }
47034
47035
47036 /***/ }),
47037 /* 117 */
47038 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
47039
47040 __webpack_require__.r(__webpack_exports__);
47041 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
47042 /* harmony export */   "TextDocument": () => /* reexport safe */ vscode_languageserver_textdocument__WEBPACK_IMPORTED_MODULE_1__.TextDocument,
47043 /* harmony export */   "AnnotatedTextEdit": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.AnnotatedTextEdit,
47044 /* harmony export */   "ChangeAnnotation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.ChangeAnnotation,
47045 /* harmony export */   "ChangeAnnotationIdentifier": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.ChangeAnnotationIdentifier,
47046 /* harmony export */   "CodeAction": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CodeAction,
47047 /* harmony export */   "CodeActionContext": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CodeActionContext,
47048 /* harmony export */   "CodeActionKind": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CodeActionKind,
47049 /* harmony export */   "CodeDescription": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CodeDescription,
47050 /* harmony export */   "CodeLens": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CodeLens,
47051 /* harmony export */   "Color": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Color,
47052 /* harmony export */   "ColorInformation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.ColorInformation,
47053 /* harmony export */   "ColorPresentation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.ColorPresentation,
47054 /* harmony export */   "Command": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Command,
47055 /* harmony export */   "CompletionItem": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CompletionItem,
47056 /* harmony export */   "CompletionItemKind": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CompletionItemKind,
47057 /* harmony export */   "CompletionItemTag": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CompletionItemTag,
47058 /* harmony export */   "CompletionList": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CompletionList,
47059 /* harmony export */   "CreateFile": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.CreateFile,
47060 /* harmony export */   "DeleteFile": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DeleteFile,
47061 /* harmony export */   "Diagnostic": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Diagnostic,
47062 /* harmony export */   "DiagnosticRelatedInformation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DiagnosticRelatedInformation,
47063 /* harmony export */   "DiagnosticSeverity": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DiagnosticSeverity,
47064 /* harmony export */   "DiagnosticTag": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DiagnosticTag,
47065 /* harmony export */   "DocumentHighlight": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DocumentHighlight,
47066 /* harmony export */   "DocumentHighlightKind": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DocumentHighlightKind,
47067 /* harmony export */   "DocumentLink": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DocumentLink,
47068 /* harmony export */   "DocumentSymbol": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.DocumentSymbol,
47069 /* harmony export */   "EOL": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.EOL,
47070 /* harmony export */   "FoldingRange": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.FoldingRange,
47071 /* harmony export */   "FoldingRangeKind": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.FoldingRangeKind,
47072 /* harmony export */   "FormattingOptions": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.FormattingOptions,
47073 /* harmony export */   "Hover": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Hover,
47074 /* harmony export */   "InsertReplaceEdit": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.InsertReplaceEdit,
47075 /* harmony export */   "InsertTextFormat": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.InsertTextFormat,
47076 /* harmony export */   "InsertTextMode": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.InsertTextMode,
47077 /* harmony export */   "Location": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Location,
47078 /* harmony export */   "LocationLink": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.LocationLink,
47079 /* harmony export */   "MarkedString": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkedString,
47080 /* harmony export */   "MarkupContent": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkupContent,
47081 /* harmony export */   "MarkupKind": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkupKind,
47082 /* harmony export */   "OptionalVersionedTextDocumentIdentifier": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.OptionalVersionedTextDocumentIdentifier,
47083 /* harmony export */   "ParameterInformation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.ParameterInformation,
47084 /* harmony export */   "Position": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Position,
47085 /* harmony export */   "Range": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.Range,
47086 /* harmony export */   "RenameFile": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.RenameFile,
47087 /* harmony export */   "SelectionRange": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.SelectionRange,
47088 /* harmony export */   "SignatureInformation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.SignatureInformation,
47089 /* harmony export */   "SymbolInformation": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.SymbolInformation,
47090 /* harmony export */   "SymbolKind": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.SymbolKind,
47091 /* harmony export */   "SymbolTag": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.SymbolTag,
47092 /* harmony export */   "TextDocumentEdit": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.TextDocumentEdit,
47093 /* harmony export */   "TextDocumentIdentifier": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.TextDocumentIdentifier,
47094 /* harmony export */   "TextDocumentItem": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.TextDocumentItem,
47095 /* harmony export */   "TextEdit": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.TextEdit,
47096 /* harmony export */   "VersionedTextDocumentIdentifier": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.VersionedTextDocumentIdentifier,
47097 /* harmony export */   "WorkspaceChange": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.WorkspaceChange,
47098 /* harmony export */   "WorkspaceEdit": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.WorkspaceEdit,
47099 /* harmony export */   "integer": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.integer,
47100 /* harmony export */   "uinteger": () => /* reexport safe */ vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.uinteger,
47101 /* harmony export */   "TokenType": () => /* binding */ TokenType,
47102 /* harmony export */   "ScannerState": () => /* binding */ ScannerState,
47103 /* harmony export */   "ClientCapabilities": () => /* binding */ ClientCapabilities,
47104 /* harmony export */   "FileType": () => /* binding */ FileType
47105 /* harmony export */ });
47106 /* harmony import */ var vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(118);
47107 /* harmony import */ var vscode_languageserver_textdocument__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(90);
47108 /*---------------------------------------------------------------------------------------------
47109  *  Copyright (c) Microsoft Corporation. All rights reserved.
47110  *  Licensed under the MIT License. See License.txt in the project root for license information.
47111  *--------------------------------------------------------------------------------------------*/
47112
47113
47114
47115 var TokenType;
47116 (function (TokenType) {
47117     TokenType[TokenType["StartCommentTag"] = 0] = "StartCommentTag";
47118     TokenType[TokenType["Comment"] = 1] = "Comment";
47119     TokenType[TokenType["EndCommentTag"] = 2] = "EndCommentTag";
47120     TokenType[TokenType["StartTagOpen"] = 3] = "StartTagOpen";
47121     TokenType[TokenType["StartTagClose"] = 4] = "StartTagClose";
47122     TokenType[TokenType["StartTagSelfClose"] = 5] = "StartTagSelfClose";
47123     TokenType[TokenType["StartTag"] = 6] = "StartTag";
47124     TokenType[TokenType["EndTagOpen"] = 7] = "EndTagOpen";
47125     TokenType[TokenType["EndTagClose"] = 8] = "EndTagClose";
47126     TokenType[TokenType["EndTag"] = 9] = "EndTag";
47127     TokenType[TokenType["DelimiterAssign"] = 10] = "DelimiterAssign";
47128     TokenType[TokenType["AttributeName"] = 11] = "AttributeName";
47129     TokenType[TokenType["AttributeValue"] = 12] = "AttributeValue";
47130     TokenType[TokenType["StartDoctypeTag"] = 13] = "StartDoctypeTag";
47131     TokenType[TokenType["Doctype"] = 14] = "Doctype";
47132     TokenType[TokenType["EndDoctypeTag"] = 15] = "EndDoctypeTag";
47133     TokenType[TokenType["Content"] = 16] = "Content";
47134     TokenType[TokenType["Whitespace"] = 17] = "Whitespace";
47135     TokenType[TokenType["Unknown"] = 18] = "Unknown";
47136     TokenType[TokenType["Script"] = 19] = "Script";
47137     TokenType[TokenType["Styles"] = 20] = "Styles";
47138     TokenType[TokenType["EOS"] = 21] = "EOS";
47139 })(TokenType || (TokenType = {}));
47140 var ScannerState;
47141 (function (ScannerState) {
47142     ScannerState[ScannerState["WithinContent"] = 0] = "WithinContent";
47143     ScannerState[ScannerState["AfterOpeningStartTag"] = 1] = "AfterOpeningStartTag";
47144     ScannerState[ScannerState["AfterOpeningEndTag"] = 2] = "AfterOpeningEndTag";
47145     ScannerState[ScannerState["WithinDoctype"] = 3] = "WithinDoctype";
47146     ScannerState[ScannerState["WithinTag"] = 4] = "WithinTag";
47147     ScannerState[ScannerState["WithinEndTag"] = 5] = "WithinEndTag";
47148     ScannerState[ScannerState["WithinComment"] = 6] = "WithinComment";
47149     ScannerState[ScannerState["WithinScriptContent"] = 7] = "WithinScriptContent";
47150     ScannerState[ScannerState["WithinStyleContent"] = 8] = "WithinStyleContent";
47151     ScannerState[ScannerState["AfterAttributeName"] = 9] = "AfterAttributeName";
47152     ScannerState[ScannerState["BeforeAttributeValue"] = 10] = "BeforeAttributeValue";
47153 })(ScannerState || (ScannerState = {}));
47154 var ClientCapabilities;
47155 (function (ClientCapabilities) {
47156     ClientCapabilities.LATEST = {
47157         textDocument: {
47158             completion: {
47159                 completionItem: {
47160                     documentationFormat: [vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkupKind.Markdown, vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkupKind.PlainText]
47161                 }
47162             },
47163             hover: {
47164                 contentFormat: [vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkupKind.Markdown, vscode_languageserver_types__WEBPACK_IMPORTED_MODULE_0__.MarkupKind.PlainText]
47165             }
47166         }
47167     };
47168 })(ClientCapabilities || (ClientCapabilities = {}));
47169 var FileType;
47170 (function (FileType) {
47171     /**
47172      * The file type is unknown.
47173      */
47174     FileType[FileType["Unknown"] = 0] = "Unknown";
47175     /**
47176      * A regular file.
47177      */
47178     FileType[FileType["File"] = 1] = "File";
47179     /**
47180      * A directory.
47181      */
47182     FileType[FileType["Directory"] = 2] = "Directory";
47183     /**
47184      * A symbolic link to a file.
47185      */
47186     FileType[FileType["SymbolicLink"] = 64] = "SymbolicLink";
47187 })(FileType || (FileType = {}));
47188
47189
47190 /***/ }),
47191 /* 118 */
47192 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
47193
47194 __webpack_require__.r(__webpack_exports__);
47195 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
47196 /* harmony export */   "integer": () => /* binding */ integer,
47197 /* harmony export */   "uinteger": () => /* binding */ uinteger,
47198 /* harmony export */   "Position": () => /* binding */ Position,
47199 /* harmony export */   "Range": () => /* binding */ Range,
47200 /* harmony export */   "Location": () => /* binding */ Location,
47201 /* harmony export */   "LocationLink": () => /* binding */ LocationLink,
47202 /* harmony export */   "Color": () => /* binding */ Color,
47203 /* harmony export */   "ColorInformation": () => /* binding */ ColorInformation,
47204 /* harmony export */   "ColorPresentation": () => /* binding */ ColorPresentation,
47205 /* harmony export */   "FoldingRangeKind": () => /* binding */ FoldingRangeKind,
47206 /* harmony export */   "FoldingRange": () => /* binding */ FoldingRange,
47207 /* harmony export */   "DiagnosticRelatedInformation": () => /* binding */ DiagnosticRelatedInformation,
47208 /* harmony export */   "DiagnosticSeverity": () => /* binding */ DiagnosticSeverity,
47209 /* harmony export */   "DiagnosticTag": () => /* binding */ DiagnosticTag,
47210 /* harmony export */   "CodeDescription": () => /* binding */ CodeDescription,
47211 /* harmony export */   "Diagnostic": () => /* binding */ Diagnostic,
47212 /* harmony export */   "Command": () => /* binding */ Command,
47213 /* harmony export */   "TextEdit": () => /* binding */ TextEdit,
47214 /* harmony export */   "ChangeAnnotation": () => /* binding */ ChangeAnnotation,
47215 /* harmony export */   "ChangeAnnotationIdentifier": () => /* binding */ ChangeAnnotationIdentifier,
47216 /* harmony export */   "AnnotatedTextEdit": () => /* binding */ AnnotatedTextEdit,
47217 /* harmony export */   "TextDocumentEdit": () => /* binding */ TextDocumentEdit,
47218 /* harmony export */   "CreateFile": () => /* binding */ CreateFile,
47219 /* harmony export */   "RenameFile": () => /* binding */ RenameFile,
47220 /* harmony export */   "DeleteFile": () => /* binding */ DeleteFile,
47221 /* harmony export */   "WorkspaceEdit": () => /* binding */ WorkspaceEdit,
47222 /* harmony export */   "WorkspaceChange": () => /* binding */ WorkspaceChange,
47223 /* harmony export */   "TextDocumentIdentifier": () => /* binding */ TextDocumentIdentifier,
47224 /* harmony export */   "VersionedTextDocumentIdentifier": () => /* binding */ VersionedTextDocumentIdentifier,
47225 /* harmony export */   "OptionalVersionedTextDocumentIdentifier": () => /* binding */ OptionalVersionedTextDocumentIdentifier,
47226 /* harmony export */   "TextDocumentItem": () => /* binding */ TextDocumentItem,
47227 /* harmony export */   "MarkupKind": () => /* binding */ MarkupKind,
47228 /* harmony export */   "MarkupContent": () => /* binding */ MarkupContent,
47229 /* harmony export */   "CompletionItemKind": () => /* binding */ CompletionItemKind,
47230 /* harmony export */   "InsertTextFormat": () => /* binding */ InsertTextFormat,
47231 /* harmony export */   "CompletionItemTag": () => /* binding */ CompletionItemTag,
47232 /* harmony export */   "InsertReplaceEdit": () => /* binding */ InsertReplaceEdit,
47233 /* harmony export */   "InsertTextMode": () => /* binding */ InsertTextMode,
47234 /* harmony export */   "CompletionItem": () => /* binding */ CompletionItem,
47235 /* harmony export */   "CompletionList": () => /* binding */ CompletionList,
47236 /* harmony export */   "MarkedString": () => /* binding */ MarkedString,
47237 /* harmony export */   "Hover": () => /* binding */ Hover,
47238 /* harmony export */   "ParameterInformation": () => /* binding */ ParameterInformation,
47239 /* harmony export */   "SignatureInformation": () => /* binding */ SignatureInformation,
47240 /* harmony export */   "DocumentHighlightKind": () => /* binding */ DocumentHighlightKind,
47241 /* harmony export */   "DocumentHighlight": () => /* binding */ DocumentHighlight,
47242 /* harmony export */   "SymbolKind": () => /* binding */ SymbolKind,
47243 /* harmony export */   "SymbolTag": () => /* binding */ SymbolTag,
47244 /* harmony export */   "SymbolInformation": () => /* binding */ SymbolInformation,
47245 /* harmony export */   "DocumentSymbol": () => /* binding */ DocumentSymbol,
47246 /* harmony export */   "CodeActionKind": () => /* binding */ CodeActionKind,
47247 /* harmony export */   "CodeActionContext": () => /* binding */ CodeActionContext,
47248 /* harmony export */   "CodeAction": () => /* binding */ CodeAction,
47249 /* harmony export */   "CodeLens": () => /* binding */ CodeLens,
47250 /* harmony export */   "FormattingOptions": () => /* binding */ FormattingOptions,
47251 /* harmony export */   "DocumentLink": () => /* binding */ DocumentLink,
47252 /* harmony export */   "SelectionRange": () => /* binding */ SelectionRange,
47253 /* harmony export */   "EOL": () => /* binding */ EOL,
47254 /* harmony export */   "TextDocument": () => /* binding */ TextDocument
47255 /* harmony export */ });
47256 /* --------------------------------------------------------------------------------------------
47257  * Copyright (c) Microsoft Corporation. All rights reserved.
47258  * Licensed under the MIT License. See License.txt in the project root for license information.
47259  * ------------------------------------------------------------------------------------------ */
47260
47261 var integer;
47262 (function (integer) {
47263     integer.MIN_VALUE = -2147483648;
47264     integer.MAX_VALUE = 2147483647;
47265 })(integer || (integer = {}));
47266 var uinteger;
47267 (function (uinteger) {
47268     uinteger.MIN_VALUE = 0;
47269     uinteger.MAX_VALUE = 2147483647;
47270 })(uinteger || (uinteger = {}));
47271 /**
47272  * The Position namespace provides helper functions to work with
47273  * [Position](#Position) literals.
47274  */
47275 var Position;
47276 (function (Position) {
47277     /**
47278      * Creates a new Position literal from the given line and character.
47279      * @param line The position's line.
47280      * @param character The position's character.
47281      */
47282     function create(line, character) {
47283         if (line === Number.MAX_VALUE) {
47284             line = uinteger.MAX_VALUE;
47285         }
47286         if (character === Number.MAX_VALUE) {
47287             character = uinteger.MAX_VALUE;
47288         }
47289         return { line: line, character: character };
47290     }
47291     Position.create = create;
47292     /**
47293      * Checks whether the given literal conforms to the [Position](#Position) interface.
47294      */
47295     function is(value) {
47296         var candidate = value;
47297         return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);
47298     }
47299     Position.is = is;
47300 })(Position || (Position = {}));
47301 /**
47302  * The Range namespace provides helper functions to work with
47303  * [Range](#Range) literals.
47304  */
47305 var Range;
47306 (function (Range) {
47307     function create(one, two, three, four) {
47308         if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {
47309             return { start: Position.create(one, two), end: Position.create(three, four) };
47310         }
47311         else if (Position.is(one) && Position.is(two)) {
47312             return { start: one, end: two };
47313         }
47314         else {
47315             throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");
47316         }
47317     }
47318     Range.create = create;
47319     /**
47320      * Checks whether the given literal conforms to the [Range](#Range) interface.
47321      */
47322     function is(value) {
47323         var candidate = value;
47324         return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
47325     }
47326     Range.is = is;
47327 })(Range || (Range = {}));
47328 /**
47329  * The Location namespace provides helper functions to work with
47330  * [Location](#Location) literals.
47331  */
47332 var Location;
47333 (function (Location) {
47334     /**
47335      * Creates a Location literal.
47336      * @param uri The location's uri.
47337      * @param range The location's range.
47338      */
47339     function create(uri, range) {
47340         return { uri: uri, range: range };
47341     }
47342     Location.create = create;
47343     /**
47344      * Checks whether the given literal conforms to the [Location](#Location) interface.
47345      */
47346     function is(value) {
47347         var candidate = value;
47348         return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
47349     }
47350     Location.is = is;
47351 })(Location || (Location = {}));
47352 /**
47353  * The LocationLink namespace provides helper functions to work with
47354  * [LocationLink](#LocationLink) literals.
47355  */
47356 var LocationLink;
47357 (function (LocationLink) {
47358     /**
47359      * Creates a LocationLink literal.
47360      * @param targetUri The definition's uri.
47361      * @param targetRange The full range of the definition.
47362      * @param targetSelectionRange The span of the symbol definition at the target.
47363      * @param originSelectionRange The span of the symbol being defined in the originating source file.
47364      */
47365     function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
47366         return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };
47367     }
47368     LocationLink.create = create;
47369     /**
47370      * Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.
47371      */
47372     function is(value) {
47373         var candidate = value;
47374         return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)
47375             && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange))
47376             && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
47377     }
47378     LocationLink.is = is;
47379 })(LocationLink || (LocationLink = {}));
47380 /**
47381  * The Color namespace provides helper functions to work with
47382  * [Color](#Color) literals.
47383  */
47384 var Color;
47385 (function (Color) {
47386     /**
47387      * Creates a new Color literal.
47388      */
47389     function create(red, green, blue, alpha) {
47390         return {
47391             red: red,
47392             green: green,
47393             blue: blue,
47394             alpha: alpha,
47395         };
47396     }
47397     Color.create = create;
47398     /**
47399      * Checks whether the given literal conforms to the [Color](#Color) interface.
47400      */
47401     function is(value) {
47402         var candidate = value;
47403         return Is.numberRange(candidate.red, 0, 1)
47404             && Is.numberRange(candidate.green, 0, 1)
47405             && Is.numberRange(candidate.blue, 0, 1)
47406             && Is.numberRange(candidate.alpha, 0, 1);
47407     }
47408     Color.is = is;
47409 })(Color || (Color = {}));
47410 /**
47411  * The ColorInformation namespace provides helper functions to work with
47412  * [ColorInformation](#ColorInformation) literals.
47413  */
47414 var ColorInformation;
47415 (function (ColorInformation) {
47416     /**
47417      * Creates a new ColorInformation literal.
47418      */
47419     function create(range, color) {
47420         return {
47421             range: range,
47422             color: color,
47423         };
47424     }
47425     ColorInformation.create = create;
47426     /**
47427      * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
47428      */
47429     function is(value) {
47430         var candidate = value;
47431         return Range.is(candidate.range) && Color.is(candidate.color);
47432     }
47433     ColorInformation.is = is;
47434 })(ColorInformation || (ColorInformation = {}));
47435 /**
47436  * The Color namespace provides helper functions to work with
47437  * [ColorPresentation](#ColorPresentation) literals.
47438  */
47439 var ColorPresentation;
47440 (function (ColorPresentation) {
47441     /**
47442      * Creates a new ColorInformation literal.
47443      */
47444     function create(label, textEdit, additionalTextEdits) {
47445         return {
47446             label: label,
47447             textEdit: textEdit,
47448             additionalTextEdits: additionalTextEdits,
47449         };
47450     }
47451     ColorPresentation.create = create;
47452     /**
47453      * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
47454      */
47455     function is(value) {
47456         var candidate = value;
47457         return Is.string(candidate.label)
47458             && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))
47459             && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
47460     }
47461     ColorPresentation.is = is;
47462 })(ColorPresentation || (ColorPresentation = {}));
47463 /**
47464  * Enum of known range kinds
47465  */
47466 var FoldingRangeKind;
47467 (function (FoldingRangeKind) {
47468     /**
47469      * Folding range for a comment
47470      */
47471     FoldingRangeKind["Comment"] = "comment";
47472     /**
47473      * Folding range for a imports or includes
47474      */
47475     FoldingRangeKind["Imports"] = "imports";
47476     /**
47477      * Folding range for a region (e.g. `#region`)
47478      */
47479     FoldingRangeKind["Region"] = "region";
47480 })(FoldingRangeKind || (FoldingRangeKind = {}));
47481 /**
47482  * The folding range namespace provides helper functions to work with
47483  * [FoldingRange](#FoldingRange) literals.
47484  */
47485 var FoldingRange;
47486 (function (FoldingRange) {
47487     /**
47488      * Creates a new FoldingRange literal.
47489      */
47490     function create(startLine, endLine, startCharacter, endCharacter, kind) {
47491         var result = {
47492             startLine: startLine,
47493             endLine: endLine
47494         };
47495         if (Is.defined(startCharacter)) {
47496             result.startCharacter = startCharacter;
47497         }
47498         if (Is.defined(endCharacter)) {
47499             result.endCharacter = endCharacter;
47500         }
47501         if (Is.defined(kind)) {
47502             result.kind = kind;
47503         }
47504         return result;
47505     }
47506     FoldingRange.create = create;
47507     /**
47508      * Checks whether the given literal conforms to the [FoldingRange](#FoldingRange) interface.
47509      */
47510     function is(value) {
47511         var candidate = value;
47512         return Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine)
47513             && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter))
47514             && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter))
47515             && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
47516     }
47517     FoldingRange.is = is;
47518 })(FoldingRange || (FoldingRange = {}));
47519 /**
47520  * The DiagnosticRelatedInformation namespace provides helper functions to work with
47521  * [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) literals.
47522  */
47523 var DiagnosticRelatedInformation;
47524 (function (DiagnosticRelatedInformation) {
47525     /**
47526      * Creates a new DiagnosticRelatedInformation literal.
47527      */
47528     function create(location, message) {
47529         return {
47530             location: location,
47531             message: message
47532         };
47533     }
47534     DiagnosticRelatedInformation.create = create;
47535     /**
47536      * Checks whether the given literal conforms to the [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) interface.
47537      */
47538     function is(value) {
47539         var candidate = value;
47540         return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
47541     }
47542     DiagnosticRelatedInformation.is = is;
47543 })(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));
47544 /**
47545  * The diagnostic's severity.
47546  */
47547 var DiagnosticSeverity;
47548 (function (DiagnosticSeverity) {
47549     /**
47550      * Reports an error.
47551      */
47552     DiagnosticSeverity.Error = 1;
47553     /**
47554      * Reports a warning.
47555      */
47556     DiagnosticSeverity.Warning = 2;
47557     /**
47558      * Reports an information.
47559      */
47560     DiagnosticSeverity.Information = 3;
47561     /**
47562      * Reports a hint.
47563      */
47564     DiagnosticSeverity.Hint = 4;
47565 })(DiagnosticSeverity || (DiagnosticSeverity = {}));
47566 /**
47567  * The diagnostic tags.
47568  *
47569  * @since 3.15.0
47570  */
47571 var DiagnosticTag;
47572 (function (DiagnosticTag) {
47573     /**
47574      * Unused or unnecessary code.
47575      *
47576      * Clients are allowed to render diagnostics with this tag faded out instead of having
47577      * an error squiggle.
47578      */
47579     DiagnosticTag.Unnecessary = 1;
47580     /**
47581      * Deprecated or obsolete code.
47582      *
47583      * Clients are allowed to rendered diagnostics with this tag strike through.
47584      */
47585     DiagnosticTag.Deprecated = 2;
47586 })(DiagnosticTag || (DiagnosticTag = {}));
47587 /**
47588  * The CodeDescription namespace provides functions to deal with descriptions for diagnostic codes.
47589  *
47590  * @since 3.16.0
47591  */
47592 var CodeDescription;
47593 (function (CodeDescription) {
47594     function is(value) {
47595         var candidate = value;
47596         return candidate !== undefined && candidate !== null && Is.string(candidate.href);
47597     }
47598     CodeDescription.is = is;
47599 })(CodeDescription || (CodeDescription = {}));
47600 /**
47601  * The Diagnostic namespace provides helper functions to work with
47602  * [Diagnostic](#Diagnostic) literals.
47603  */
47604 var Diagnostic;
47605 (function (Diagnostic) {
47606     /**
47607      * Creates a new Diagnostic literal.
47608      */
47609     function create(range, message, severity, code, source, relatedInformation) {
47610         var result = { range: range, message: message };
47611         if (Is.defined(severity)) {
47612             result.severity = severity;
47613         }
47614         if (Is.defined(code)) {
47615             result.code = code;
47616         }
47617         if (Is.defined(source)) {
47618             result.source = source;
47619         }
47620         if (Is.defined(relatedInformation)) {
47621             result.relatedInformation = relatedInformation;
47622         }
47623         return result;
47624     }
47625     Diagnostic.create = create;
47626     /**
47627      * Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.
47628      */
47629     function is(value) {
47630         var _a;
47631         var candidate = value;
47632         return Is.defined(candidate)
47633             && Range.is(candidate.range)
47634             && Is.string(candidate.message)
47635             && (Is.number(candidate.severity) || Is.undefined(candidate.severity))
47636             && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))
47637             && (Is.undefined(candidate.codeDescription) || (Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)))
47638             && (Is.string(candidate.source) || Is.undefined(candidate.source))
47639             && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
47640     }
47641     Diagnostic.is = is;
47642 })(Diagnostic || (Diagnostic = {}));
47643 /**
47644  * The Command namespace provides helper functions to work with
47645  * [Command](#Command) literals.
47646  */
47647 var Command;
47648 (function (Command) {
47649     /**
47650      * Creates a new Command literal.
47651      */
47652     function create(title, command) {
47653         var args = [];
47654         for (var _i = 2; _i < arguments.length; _i++) {
47655             args[_i - 2] = arguments[_i];
47656         }
47657         var result = { title: title, command: command };
47658         if (Is.defined(args) && args.length > 0) {
47659             result.arguments = args;
47660         }
47661         return result;
47662     }
47663     Command.create = create;
47664     /**
47665      * Checks whether the given literal conforms to the [Command](#Command) interface.
47666      */
47667     function is(value) {
47668         var candidate = value;
47669         return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);
47670     }
47671     Command.is = is;
47672 })(Command || (Command = {}));
47673 /**
47674  * The TextEdit namespace provides helper function to create replace,
47675  * insert and delete edits more easily.
47676  */
47677 var TextEdit;
47678 (function (TextEdit) {
47679     /**
47680      * Creates a replace text edit.
47681      * @param range The range of text to be replaced.
47682      * @param newText The new text.
47683      */
47684     function replace(range, newText) {
47685         return { range: range, newText: newText };
47686     }
47687     TextEdit.replace = replace;
47688     /**
47689      * Creates a insert text edit.
47690      * @param position The position to insert the text at.
47691      * @param newText The text to be inserted.
47692      */
47693     function insert(position, newText) {
47694         return { range: { start: position, end: position }, newText: newText };
47695     }
47696     TextEdit.insert = insert;
47697     /**
47698      * Creates a delete text edit.
47699      * @param range The range of text to be deleted.
47700      */
47701     function del(range) {
47702         return { range: range, newText: '' };
47703     }
47704     TextEdit.del = del;
47705     function is(value) {
47706         var candidate = value;
47707         return Is.objectLiteral(candidate)
47708             && Is.string(candidate.newText)
47709             && Range.is(candidate.range);
47710     }
47711     TextEdit.is = is;
47712 })(TextEdit || (TextEdit = {}));
47713 var ChangeAnnotation;
47714 (function (ChangeAnnotation) {
47715     function create(label, needsConfirmation, description) {
47716         var result = { label: label };
47717         if (needsConfirmation !== undefined) {
47718             result.needsConfirmation = needsConfirmation;
47719         }
47720         if (description !== undefined) {
47721             result.description = description;
47722         }
47723         return result;
47724     }
47725     ChangeAnnotation.create = create;
47726     function is(value) {
47727         var candidate = value;
47728         return candidate !== undefined && Is.objectLiteral(candidate) && Is.string(candidate.label) &&
47729             (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === undefined) &&
47730             (Is.string(candidate.description) || candidate.description === undefined);
47731     }
47732     ChangeAnnotation.is = is;
47733 })(ChangeAnnotation || (ChangeAnnotation = {}));
47734 var ChangeAnnotationIdentifier;
47735 (function (ChangeAnnotationIdentifier) {
47736     function is(value) {
47737         var candidate = value;
47738         return typeof candidate === 'string';
47739     }
47740     ChangeAnnotationIdentifier.is = is;
47741 })(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));
47742 var AnnotatedTextEdit;
47743 (function (AnnotatedTextEdit) {
47744     /**
47745      * Creates an annotated replace text edit.
47746      *
47747      * @param range The range of text to be replaced.
47748      * @param newText The new text.
47749      * @param annotation The annotation.
47750      */
47751     function replace(range, newText, annotation) {
47752         return { range: range, newText: newText, annotationId: annotation };
47753     }
47754     AnnotatedTextEdit.replace = replace;
47755     /**
47756      * Creates an annotated insert text edit.
47757      *
47758      * @param position The position to insert the text at.
47759      * @param newText The text to be inserted.
47760      * @param annotation The annotation.
47761      */
47762     function insert(position, newText, annotation) {
47763         return { range: { start: position, end: position }, newText: newText, annotationId: annotation };
47764     }
47765     AnnotatedTextEdit.insert = insert;
47766     /**
47767      * Creates an annotated delete text edit.
47768      *
47769      * @param range The range of text to be deleted.
47770      * @param annotation The annotation.
47771      */
47772     function del(range, annotation) {
47773         return { range: range, newText: '', annotationId: annotation };
47774     }
47775     AnnotatedTextEdit.del = del;
47776     function is(value) {
47777         var candidate = value;
47778         return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));
47779     }
47780     AnnotatedTextEdit.is = is;
47781 })(AnnotatedTextEdit || (AnnotatedTextEdit = {}));
47782 /**
47783  * The TextDocumentEdit namespace provides helper function to create
47784  * an edit that manipulates a text document.
47785  */
47786 var TextDocumentEdit;
47787 (function (TextDocumentEdit) {
47788     /**
47789      * Creates a new `TextDocumentEdit`
47790      */
47791     function create(textDocument, edits) {
47792         return { textDocument: textDocument, edits: edits };
47793     }
47794     TextDocumentEdit.create = create;
47795     function is(value) {
47796         var candidate = value;
47797         return Is.defined(candidate)
47798             && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument)
47799             && Array.isArray(candidate.edits);
47800     }
47801     TextDocumentEdit.is = is;
47802 })(TextDocumentEdit || (TextDocumentEdit = {}));
47803 var CreateFile;
47804 (function (CreateFile) {
47805     function create(uri, options, annotation) {
47806         var result = {
47807             kind: 'create',
47808             uri: uri
47809         };
47810         if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {
47811             result.options = options;
47812         }
47813         if (annotation !== undefined) {
47814             result.annotationId = annotation;
47815         }
47816         return result;
47817     }
47818     CreateFile.create = create;
47819     function is(value) {
47820         var candidate = value;
47821         return candidate && candidate.kind === 'create' && Is.string(candidate.uri) && (candidate.options === undefined ||
47822             ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
47823     }
47824     CreateFile.is = is;
47825 })(CreateFile || (CreateFile = {}));
47826 var RenameFile;
47827 (function (RenameFile) {
47828     function create(oldUri, newUri, options, annotation) {
47829         var result = {
47830             kind: 'rename',
47831             oldUri: oldUri,
47832             newUri: newUri
47833         };
47834         if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {
47835             result.options = options;
47836         }
47837         if (annotation !== undefined) {
47838             result.annotationId = annotation;
47839         }
47840         return result;
47841     }
47842     RenameFile.create = create;
47843     function is(value) {
47844         var candidate = value;
47845         return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === undefined ||
47846             ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
47847     }
47848     RenameFile.is = is;
47849 })(RenameFile || (RenameFile = {}));
47850 var DeleteFile;
47851 (function (DeleteFile) {
47852     function create(uri, options, annotation) {
47853         var result = {
47854             kind: 'delete',
47855             uri: uri
47856         };
47857         if (options !== undefined && (options.recursive !== undefined || options.ignoreIfNotExists !== undefined)) {
47858             result.options = options;
47859         }
47860         if (annotation !== undefined) {
47861             result.annotationId = annotation;
47862         }
47863         return result;
47864     }
47865     DeleteFile.create = create;
47866     function is(value) {
47867         var candidate = value;
47868         return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) && (candidate.options === undefined ||
47869             ((candidate.options.recursive === undefined || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === undefined || Is.boolean(candidate.options.ignoreIfNotExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
47870     }
47871     DeleteFile.is = is;
47872 })(DeleteFile || (DeleteFile = {}));
47873 var WorkspaceEdit;
47874 (function (WorkspaceEdit) {
47875     function is(value) {
47876         var candidate = value;
47877         return candidate &&
47878             (candidate.changes !== undefined || candidate.documentChanges !== undefined) &&
47879             (candidate.documentChanges === undefined || candidate.documentChanges.every(function (change) {
47880                 if (Is.string(change.kind)) {
47881                     return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
47882                 }
47883                 else {
47884                     return TextDocumentEdit.is(change);
47885                 }
47886             }));
47887     }
47888     WorkspaceEdit.is = is;
47889 })(WorkspaceEdit || (WorkspaceEdit = {}));
47890 var TextEditChangeImpl = /** @class */ (function () {
47891     function TextEditChangeImpl(edits, changeAnnotations) {
47892         this.edits = edits;
47893         this.changeAnnotations = changeAnnotations;
47894     }
47895     TextEditChangeImpl.prototype.insert = function (position, newText, annotation) {
47896         var edit;
47897         var id;
47898         if (annotation === undefined) {
47899             edit = TextEdit.insert(position, newText);
47900         }
47901         else if (ChangeAnnotationIdentifier.is(annotation)) {
47902             id = annotation;
47903             edit = AnnotatedTextEdit.insert(position, newText, annotation);
47904         }
47905         else {
47906             this.assertChangeAnnotations(this.changeAnnotations);
47907             id = this.changeAnnotations.manage(annotation);
47908             edit = AnnotatedTextEdit.insert(position, newText, id);
47909         }
47910         this.edits.push(edit);
47911         if (id !== undefined) {
47912             return id;
47913         }
47914     };
47915     TextEditChangeImpl.prototype.replace = function (range, newText, annotation) {
47916         var edit;
47917         var id;
47918         if (annotation === undefined) {
47919             edit = TextEdit.replace(range, newText);
47920         }
47921         else if (ChangeAnnotationIdentifier.is(annotation)) {
47922             id = annotation;
47923             edit = AnnotatedTextEdit.replace(range, newText, annotation);
47924         }
47925         else {
47926             this.assertChangeAnnotations(this.changeAnnotations);
47927             id = this.changeAnnotations.manage(annotation);
47928             edit = AnnotatedTextEdit.replace(range, newText, id);
47929         }
47930         this.edits.push(edit);
47931         if (id !== undefined) {
47932             return id;
47933         }
47934     };
47935     TextEditChangeImpl.prototype.delete = function (range, annotation) {
47936         var edit;
47937         var id;
47938         if (annotation === undefined) {
47939             edit = TextEdit.del(range);
47940         }
47941         else if (ChangeAnnotationIdentifier.is(annotation)) {
47942             id = annotation;
47943             edit = AnnotatedTextEdit.del(range, annotation);
47944         }
47945         else {
47946             this.assertChangeAnnotations(this.changeAnnotations);
47947             id = this.changeAnnotations.manage(annotation);
47948             edit = AnnotatedTextEdit.del(range, id);
47949         }
47950         this.edits.push(edit);
47951         if (id !== undefined) {
47952             return id;
47953         }
47954     };
47955     TextEditChangeImpl.prototype.add = function (edit) {
47956         this.edits.push(edit);
47957     };
47958     TextEditChangeImpl.prototype.all = function () {
47959         return this.edits;
47960     };
47961     TextEditChangeImpl.prototype.clear = function () {
47962         this.edits.splice(0, this.edits.length);
47963     };
47964     TextEditChangeImpl.prototype.assertChangeAnnotations = function (value) {
47965         if (value === undefined) {
47966             throw new Error("Text edit change is not configured to manage change annotations.");
47967         }
47968     };
47969     return TextEditChangeImpl;
47970 }());
47971 /**
47972  * A helper class
47973  */
47974 var ChangeAnnotations = /** @class */ (function () {
47975     function ChangeAnnotations(annotations) {
47976         this._annotations = annotations === undefined ? Object.create(null) : annotations;
47977         this._counter = 0;
47978         this._size = 0;
47979     }
47980     ChangeAnnotations.prototype.all = function () {
47981         return this._annotations;
47982     };
47983     Object.defineProperty(ChangeAnnotations.prototype, "size", {
47984         get: function () {
47985             return this._size;
47986         },
47987         enumerable: false,
47988         configurable: true
47989     });
47990     ChangeAnnotations.prototype.manage = function (idOrAnnotation, annotation) {
47991         var id;
47992         if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {
47993             id = idOrAnnotation;
47994         }
47995         else {
47996             id = this.nextId();
47997             annotation = idOrAnnotation;
47998         }
47999         if (this._annotations[id] !== undefined) {
48000             throw new Error("Id " + id + " is already in use.");
48001         }
48002         if (annotation === undefined) {
48003             throw new Error("No annotation provided for id " + id);
48004         }
48005         this._annotations[id] = annotation;
48006         this._size++;
48007         return id;
48008     };
48009     ChangeAnnotations.prototype.nextId = function () {
48010         this._counter++;
48011         return this._counter.toString();
48012     };
48013     return ChangeAnnotations;
48014 }());
48015 /**
48016  * A workspace change helps constructing changes to a workspace.
48017  */
48018 var WorkspaceChange = /** @class */ (function () {
48019     function WorkspaceChange(workspaceEdit) {
48020         var _this = this;
48021         this._textEditChanges = Object.create(null);
48022         if (workspaceEdit !== undefined) {
48023             this._workspaceEdit = workspaceEdit;
48024             if (workspaceEdit.documentChanges) {
48025                 this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);
48026                 workspaceEdit.changeAnnotations = this._changeAnnotations.all();
48027                 workspaceEdit.documentChanges.forEach(function (change) {
48028                     if (TextDocumentEdit.is(change)) {
48029                         var textEditChange = new TextEditChangeImpl(change.edits, _this._changeAnnotations);
48030                         _this._textEditChanges[change.textDocument.uri] = textEditChange;
48031                     }
48032                 });
48033             }
48034             else if (workspaceEdit.changes) {
48035                 Object.keys(workspaceEdit.changes).forEach(function (key) {
48036                     var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
48037                     _this._textEditChanges[key] = textEditChange;
48038                 });
48039             }
48040         }
48041         else {
48042             this._workspaceEdit = {};
48043         }
48044     }
48045     Object.defineProperty(WorkspaceChange.prototype, "edit", {
48046         /**
48047          * Returns the underlying [WorkspaceEdit](#WorkspaceEdit) literal
48048          * use to be returned from a workspace edit operation like rename.
48049          */
48050         get: function () {
48051             this.initDocumentChanges();
48052             if (this._changeAnnotations !== undefined) {
48053                 if (this._changeAnnotations.size === 0) {
48054                     this._workspaceEdit.changeAnnotations = undefined;
48055                 }
48056                 else {
48057                     this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
48058                 }
48059             }
48060             return this._workspaceEdit;
48061         },
48062         enumerable: false,
48063         configurable: true
48064     });
48065     WorkspaceChange.prototype.getTextEditChange = function (key) {
48066         if (OptionalVersionedTextDocumentIdentifier.is(key)) {
48067             this.initDocumentChanges();
48068             if (this._workspaceEdit.documentChanges === undefined) {
48069                 throw new Error('Workspace edit is not configured for document changes.');
48070             }
48071             var textDocument = { uri: key.uri, version: key.version };
48072             var result = this._textEditChanges[textDocument.uri];
48073             if (!result) {
48074                 var edits = [];
48075                 var textDocumentEdit = {
48076                     textDocument: textDocument,
48077                     edits: edits
48078                 };
48079                 this._workspaceEdit.documentChanges.push(textDocumentEdit);
48080                 result = new TextEditChangeImpl(edits, this._changeAnnotations);
48081                 this._textEditChanges[textDocument.uri] = result;
48082             }
48083             return result;
48084         }
48085         else {
48086             this.initChanges();
48087             if (this._workspaceEdit.changes === undefined) {
48088                 throw new Error('Workspace edit is not configured for normal text edit changes.');
48089             }
48090             var result = this._textEditChanges[key];
48091             if (!result) {
48092                 var edits = [];
48093                 this._workspaceEdit.changes[key] = edits;
48094                 result = new TextEditChangeImpl(edits);
48095                 this._textEditChanges[key] = result;
48096             }
48097             return result;
48098         }
48099     };
48100     WorkspaceChange.prototype.initDocumentChanges = function () {
48101         if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {
48102             this._changeAnnotations = new ChangeAnnotations();
48103             this._workspaceEdit.documentChanges = [];
48104             this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
48105         }
48106     };
48107     WorkspaceChange.prototype.initChanges = function () {
48108         if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {
48109             this._workspaceEdit.changes = Object.create(null);
48110         }
48111     };
48112     WorkspaceChange.prototype.createFile = function (uri, optionsOrAnnotation, options) {
48113         this.initDocumentChanges();
48114         if (this._workspaceEdit.documentChanges === undefined) {
48115             throw new Error('Workspace edit is not configured for document changes.');
48116         }
48117         var annotation;
48118         if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
48119             annotation = optionsOrAnnotation;
48120         }
48121         else {
48122             options = optionsOrAnnotation;
48123         }
48124         var operation;
48125         var id;
48126         if (annotation === undefined) {
48127             operation = CreateFile.create(uri, options);
48128         }
48129         else {
48130             id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
48131             operation = CreateFile.create(uri, options, id);
48132         }
48133         this._workspaceEdit.documentChanges.push(operation);
48134         if (id !== undefined) {
48135             return id;
48136         }
48137     };
48138     WorkspaceChange.prototype.renameFile = function (oldUri, newUri, optionsOrAnnotation, options) {
48139         this.initDocumentChanges();
48140         if (this._workspaceEdit.documentChanges === undefined) {
48141             throw new Error('Workspace edit is not configured for document changes.');
48142         }
48143         var annotation;
48144         if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
48145             annotation = optionsOrAnnotation;
48146         }
48147         else {
48148             options = optionsOrAnnotation;
48149         }
48150         var operation;
48151         var id;
48152         if (annotation === undefined) {
48153             operation = RenameFile.create(oldUri, newUri, options);
48154         }
48155         else {
48156             id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
48157             operation = RenameFile.create(oldUri, newUri, options, id);
48158         }
48159         this._workspaceEdit.documentChanges.push(operation);
48160         if (id !== undefined) {
48161             return id;
48162         }
48163     };
48164     WorkspaceChange.prototype.deleteFile = function (uri, optionsOrAnnotation, options) {
48165         this.initDocumentChanges();
48166         if (this._workspaceEdit.documentChanges === undefined) {
48167             throw new Error('Workspace edit is not configured for document changes.');
48168         }
48169         var annotation;
48170         if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
48171             annotation = optionsOrAnnotation;
48172         }
48173         else {
48174             options = optionsOrAnnotation;
48175         }
48176         var operation;
48177         var id;
48178         if (annotation === undefined) {
48179             operation = DeleteFile.create(uri, options);
48180         }
48181         else {
48182             id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
48183             operation = DeleteFile.create(uri, options, id);
48184         }
48185         this._workspaceEdit.documentChanges.push(operation);
48186         if (id !== undefined) {
48187             return id;
48188         }
48189     };
48190     return WorkspaceChange;
48191 }());
48192
48193 /**
48194  * The TextDocumentIdentifier namespace provides helper functions to work with
48195  * [TextDocumentIdentifier](#TextDocumentIdentifier) literals.
48196  */
48197 var TextDocumentIdentifier;
48198 (function (TextDocumentIdentifier) {
48199     /**
48200      * Creates a new TextDocumentIdentifier literal.
48201      * @param uri The document's uri.
48202      */
48203     function create(uri) {
48204         return { uri: uri };
48205     }
48206     TextDocumentIdentifier.create = create;
48207     /**
48208      * Checks whether the given literal conforms to the [TextDocumentIdentifier](#TextDocumentIdentifier) interface.
48209      */
48210     function is(value) {
48211         var candidate = value;
48212         return Is.defined(candidate) && Is.string(candidate.uri);
48213     }
48214     TextDocumentIdentifier.is = is;
48215 })(TextDocumentIdentifier || (TextDocumentIdentifier = {}));
48216 /**
48217  * The VersionedTextDocumentIdentifier namespace provides helper functions to work with
48218  * [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) literals.
48219  */
48220 var VersionedTextDocumentIdentifier;
48221 (function (VersionedTextDocumentIdentifier) {
48222     /**
48223      * Creates a new VersionedTextDocumentIdentifier literal.
48224      * @param uri The document's uri.
48225      * @param uri The document's text.
48226      */
48227     function create(uri, version) {
48228         return { uri: uri, version: version };
48229     }
48230     VersionedTextDocumentIdentifier.create = create;
48231     /**
48232      * Checks whether the given literal conforms to the [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) interface.
48233      */
48234     function is(value) {
48235         var candidate = value;
48236         return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);
48237     }
48238     VersionedTextDocumentIdentifier.is = is;
48239 })(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));
48240 /**
48241  * The OptionalVersionedTextDocumentIdentifier namespace provides helper functions to work with
48242  * [OptionalVersionedTextDocumentIdentifier](#OptionalVersionedTextDocumentIdentifier) literals.
48243  */
48244 var OptionalVersionedTextDocumentIdentifier;
48245 (function (OptionalVersionedTextDocumentIdentifier) {
48246     /**
48247      * Creates a new OptionalVersionedTextDocumentIdentifier literal.
48248      * @param uri The document's uri.
48249      * @param uri The document's text.
48250      */
48251     function create(uri, version) {
48252         return { uri: uri, version: version };
48253     }
48254     OptionalVersionedTextDocumentIdentifier.create = create;
48255     /**
48256      * Checks whether the given literal conforms to the [OptionalVersionedTextDocumentIdentifier](#OptionalVersionedTextDocumentIdentifier) interface.
48257      */
48258     function is(value) {
48259         var candidate = value;
48260         return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));
48261     }
48262     OptionalVersionedTextDocumentIdentifier.is = is;
48263 })(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));
48264 /**
48265  * The TextDocumentItem namespace provides helper functions to work with
48266  * [TextDocumentItem](#TextDocumentItem) literals.
48267  */
48268 var TextDocumentItem;
48269 (function (TextDocumentItem) {
48270     /**
48271      * Creates a new TextDocumentItem literal.
48272      * @param uri The document's uri.
48273      * @param languageId The document's language identifier.
48274      * @param version The document's version number.
48275      * @param text The document's text.
48276      */
48277     function create(uri, languageId, version, text) {
48278         return { uri: uri, languageId: languageId, version: version, text: text };
48279     }
48280     TextDocumentItem.create = create;
48281     /**
48282      * Checks whether the given literal conforms to the [TextDocumentItem](#TextDocumentItem) interface.
48283      */
48284     function is(value) {
48285         var candidate = value;
48286         return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);
48287     }
48288     TextDocumentItem.is = is;
48289 })(TextDocumentItem || (TextDocumentItem = {}));
48290 /**
48291  * Describes the content type that a client supports in various
48292  * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.
48293  *
48294  * Please note that `MarkupKinds` must not start with a `$`. This kinds
48295  * are reserved for internal usage.
48296  */
48297 var MarkupKind;
48298 (function (MarkupKind) {
48299     /**
48300      * Plain text is supported as a content format
48301      */
48302     MarkupKind.PlainText = 'plaintext';
48303     /**
48304      * Markdown is supported as a content format
48305      */
48306     MarkupKind.Markdown = 'markdown';
48307 })(MarkupKind || (MarkupKind = {}));
48308 (function (MarkupKind) {
48309     /**
48310      * Checks whether the given value is a value of the [MarkupKind](#MarkupKind) type.
48311      */
48312     function is(value) {
48313         var candidate = value;
48314         return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;
48315     }
48316     MarkupKind.is = is;
48317 })(MarkupKind || (MarkupKind = {}));
48318 var MarkupContent;
48319 (function (MarkupContent) {
48320     /**
48321      * Checks whether the given value conforms to the [MarkupContent](#MarkupContent) interface.
48322      */
48323     function is(value) {
48324         var candidate = value;
48325         return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
48326     }
48327     MarkupContent.is = is;
48328 })(MarkupContent || (MarkupContent = {}));
48329 /**
48330  * The kind of a completion entry.
48331  */
48332 var CompletionItemKind;
48333 (function (CompletionItemKind) {
48334     CompletionItemKind.Text = 1;
48335     CompletionItemKind.Method = 2;
48336     CompletionItemKind.Function = 3;
48337     CompletionItemKind.Constructor = 4;
48338     CompletionItemKind.Field = 5;
48339     CompletionItemKind.Variable = 6;
48340     CompletionItemKind.Class = 7;
48341     CompletionItemKind.Interface = 8;
48342     CompletionItemKind.Module = 9;
48343     CompletionItemKind.Property = 10;
48344     CompletionItemKind.Unit = 11;
48345     CompletionItemKind.Value = 12;
48346     CompletionItemKind.Enum = 13;
48347     CompletionItemKind.Keyword = 14;
48348     CompletionItemKind.Snippet = 15;
48349     CompletionItemKind.Color = 16;
48350     CompletionItemKind.File = 17;
48351     CompletionItemKind.Reference = 18;
48352     CompletionItemKind.Folder = 19;
48353     CompletionItemKind.EnumMember = 20;
48354     CompletionItemKind.Constant = 21;
48355     CompletionItemKind.Struct = 22;
48356     CompletionItemKind.Event = 23;
48357     CompletionItemKind.Operator = 24;
48358     CompletionItemKind.TypeParameter = 25;
48359 })(CompletionItemKind || (CompletionItemKind = {}));
48360 /**
48361  * Defines whether the insert text in a completion item should be interpreted as
48362  * plain text or a snippet.
48363  */
48364 var InsertTextFormat;
48365 (function (InsertTextFormat) {
48366     /**
48367      * The primary text to be inserted is treated as a plain string.
48368      */
48369     InsertTextFormat.PlainText = 1;
48370     /**
48371      * The primary text to be inserted is treated as a snippet.
48372      *
48373      * A snippet can define tab stops and placeholders with `$1`, `$2`
48374      * and `${3:foo}`. `$0` defines the final tab stop, it defaults to
48375      * the end of the snippet. Placeholders with equal identifiers are linked,
48376      * that is typing in one will update others too.
48377      *
48378      * See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax
48379      */
48380     InsertTextFormat.Snippet = 2;
48381 })(InsertTextFormat || (InsertTextFormat = {}));
48382 /**
48383  * Completion item tags are extra annotations that tweak the rendering of a completion
48384  * item.
48385  *
48386  * @since 3.15.0
48387  */
48388 var CompletionItemTag;
48389 (function (CompletionItemTag) {
48390     /**
48391      * Render a completion as obsolete, usually using a strike-out.
48392      */
48393     CompletionItemTag.Deprecated = 1;
48394 })(CompletionItemTag || (CompletionItemTag = {}));
48395 /**
48396  * The InsertReplaceEdit namespace provides functions to deal with insert / replace edits.
48397  *
48398  * @since 3.16.0
48399  */
48400 var InsertReplaceEdit;
48401 (function (InsertReplaceEdit) {
48402     /**
48403      * Creates a new insert / replace edit
48404      */
48405     function create(newText, insert, replace) {
48406         return { newText: newText, insert: insert, replace: replace };
48407     }
48408     InsertReplaceEdit.create = create;
48409     /**
48410      * Checks whether the given literal conforms to the [InsertReplaceEdit](#InsertReplaceEdit) interface.
48411      */
48412     function is(value) {
48413         var candidate = value;
48414         return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);
48415     }
48416     InsertReplaceEdit.is = is;
48417 })(InsertReplaceEdit || (InsertReplaceEdit = {}));
48418 /**
48419  * How whitespace and indentation is handled during completion
48420  * item insertion.
48421  *
48422  * @since 3.16.0
48423  */
48424 var InsertTextMode;
48425 (function (InsertTextMode) {
48426     /**
48427      * The insertion or replace strings is taken as it is. If the
48428      * value is multi line the lines below the cursor will be
48429      * inserted using the indentation defined in the string value.
48430      * The client will not apply any kind of adjustments to the
48431      * string.
48432      */
48433     InsertTextMode.asIs = 1;
48434     /**
48435      * The editor adjusts leading whitespace of new lines so that
48436      * they match the indentation up to the cursor of the line for
48437      * which the item is accepted.
48438      *
48439      * Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a
48440      * multi line completion item is indented using 2 tabs and all
48441      * following lines inserted will be indented using 2 tabs as well.
48442      */
48443     InsertTextMode.adjustIndentation = 2;
48444 })(InsertTextMode || (InsertTextMode = {}));
48445 /**
48446  * The CompletionItem namespace provides functions to deal with
48447  * completion items.
48448  */
48449 var CompletionItem;
48450 (function (CompletionItem) {
48451     /**
48452      * Create a completion item and seed it with a label.
48453      * @param label The completion item's label
48454      */
48455     function create(label) {
48456         return { label: label };
48457     }
48458     CompletionItem.create = create;
48459 })(CompletionItem || (CompletionItem = {}));
48460 /**
48461  * The CompletionList namespace provides functions to deal with
48462  * completion lists.
48463  */
48464 var CompletionList;
48465 (function (CompletionList) {
48466     /**
48467      * Creates a new completion list.
48468      *
48469      * @param items The completion items.
48470      * @param isIncomplete The list is not complete.
48471      */
48472     function create(items, isIncomplete) {
48473         return { items: items ? items : [], isIncomplete: !!isIncomplete };
48474     }
48475     CompletionList.create = create;
48476 })(CompletionList || (CompletionList = {}));
48477 var MarkedString;
48478 (function (MarkedString) {
48479     /**
48480      * Creates a marked string from plain text.
48481      *
48482      * @param plainText The plain text.
48483      */
48484     function fromPlainText(plainText) {
48485         return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
48486     }
48487     MarkedString.fromPlainText = fromPlainText;
48488     /**
48489      * Checks whether the given value conforms to the [MarkedString](#MarkedString) type.
48490      */
48491     function is(value) {
48492         var candidate = value;
48493         return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));
48494     }
48495     MarkedString.is = is;
48496 })(MarkedString || (MarkedString = {}));
48497 var Hover;
48498 (function (Hover) {
48499     /**
48500      * Checks whether the given value conforms to the [Hover](#Hover) interface.
48501      */
48502     function is(value) {
48503         var candidate = value;
48504         return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||
48505             MarkedString.is(candidate.contents) ||
48506             Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === undefined || Range.is(value.range));
48507     }
48508     Hover.is = is;
48509 })(Hover || (Hover = {}));
48510 /**
48511  * The ParameterInformation namespace provides helper functions to work with
48512  * [ParameterInformation](#ParameterInformation) literals.
48513  */
48514 var ParameterInformation;
48515 (function (ParameterInformation) {
48516     /**
48517      * Creates a new parameter information literal.
48518      *
48519      * @param label A label string.
48520      * @param documentation A doc string.
48521      */
48522     function create(label, documentation) {
48523         return documentation ? { label: label, documentation: documentation } : { label: label };
48524     }
48525     ParameterInformation.create = create;
48526 })(ParameterInformation || (ParameterInformation = {}));
48527 /**
48528  * The SignatureInformation namespace provides helper functions to work with
48529  * [SignatureInformation](#SignatureInformation) literals.
48530  */
48531 var SignatureInformation;
48532 (function (SignatureInformation) {
48533     function create(label, documentation) {
48534         var parameters = [];
48535         for (var _i = 2; _i < arguments.length; _i++) {
48536             parameters[_i - 2] = arguments[_i];
48537         }
48538         var result = { label: label };
48539         if (Is.defined(documentation)) {
48540             result.documentation = documentation;
48541         }
48542         if (Is.defined(parameters)) {
48543             result.parameters = parameters;
48544         }
48545         else {
48546             result.parameters = [];
48547         }
48548         return result;
48549     }
48550     SignatureInformation.create = create;
48551 })(SignatureInformation || (SignatureInformation = {}));
48552 /**
48553  * A document highlight kind.
48554  */
48555 var DocumentHighlightKind;
48556 (function (DocumentHighlightKind) {
48557     /**
48558      * A textual occurrence.
48559      */
48560     DocumentHighlightKind.Text = 1;
48561     /**
48562      * Read-access of a symbol, like reading a variable.
48563      */
48564     DocumentHighlightKind.Read = 2;
48565     /**
48566      * Write-access of a symbol, like writing to a variable.
48567      */
48568     DocumentHighlightKind.Write = 3;
48569 })(DocumentHighlightKind || (DocumentHighlightKind = {}));
48570 /**
48571  * DocumentHighlight namespace to provide helper functions to work with
48572  * [DocumentHighlight](#DocumentHighlight) literals.
48573  */
48574 var DocumentHighlight;
48575 (function (DocumentHighlight) {
48576     /**
48577      * Create a DocumentHighlight object.
48578      * @param range The range the highlight applies to.
48579      */
48580     function create(range, kind) {
48581         var result = { range: range };
48582         if (Is.number(kind)) {
48583             result.kind = kind;
48584         }
48585         return result;
48586     }
48587     DocumentHighlight.create = create;
48588 })(DocumentHighlight || (DocumentHighlight = {}));
48589 /**
48590  * A symbol kind.
48591  */
48592 var SymbolKind;
48593 (function (SymbolKind) {
48594     SymbolKind.File = 1;
48595     SymbolKind.Module = 2;
48596     SymbolKind.Namespace = 3;
48597     SymbolKind.Package = 4;
48598     SymbolKind.Class = 5;
48599     SymbolKind.Method = 6;
48600     SymbolKind.Property = 7;
48601     SymbolKind.Field = 8;
48602     SymbolKind.Constructor = 9;
48603     SymbolKind.Enum = 10;
48604     SymbolKind.Interface = 11;
48605     SymbolKind.Function = 12;
48606     SymbolKind.Variable = 13;
48607     SymbolKind.Constant = 14;
48608     SymbolKind.String = 15;
48609     SymbolKind.Number = 16;
48610     SymbolKind.Boolean = 17;
48611     SymbolKind.Array = 18;
48612     SymbolKind.Object = 19;
48613     SymbolKind.Key = 20;
48614     SymbolKind.Null = 21;
48615     SymbolKind.EnumMember = 22;
48616     SymbolKind.Struct = 23;
48617     SymbolKind.Event = 24;
48618     SymbolKind.Operator = 25;
48619     SymbolKind.TypeParameter = 26;
48620 })(SymbolKind || (SymbolKind = {}));
48621 /**
48622  * Symbol tags are extra annotations that tweak the rendering of a symbol.
48623  * @since 3.16
48624  */
48625 var SymbolTag;
48626 (function (SymbolTag) {
48627     /**
48628      * Render a symbol as obsolete, usually using a strike-out.
48629      */
48630     SymbolTag.Deprecated = 1;
48631 })(SymbolTag || (SymbolTag = {}));
48632 var SymbolInformation;
48633 (function (SymbolInformation) {
48634     /**
48635      * Creates a new symbol information literal.
48636      *
48637      * @param name The name of the symbol.
48638      * @param kind The kind of the symbol.
48639      * @param range The range of the location of the symbol.
48640      * @param uri The resource of the location of symbol, defaults to the current document.
48641      * @param containerName The name of the symbol containing the symbol.
48642      */
48643     function create(name, kind, range, uri, containerName) {
48644         var result = {
48645             name: name,
48646             kind: kind,
48647             location: { uri: uri, range: range }
48648         };
48649         if (containerName) {
48650             result.containerName = containerName;
48651         }
48652         return result;
48653     }
48654     SymbolInformation.create = create;
48655 })(SymbolInformation || (SymbolInformation = {}));
48656 var DocumentSymbol;
48657 (function (DocumentSymbol) {
48658     /**
48659      * Creates a new symbol information literal.
48660      *
48661      * @param name The name of the symbol.
48662      * @param detail The detail of the symbol.
48663      * @param kind The kind of the symbol.
48664      * @param range The range of the symbol.
48665      * @param selectionRange The selectionRange of the symbol.
48666      * @param children Children of the symbol.
48667      */
48668     function create(name, detail, kind, range, selectionRange, children) {
48669         var result = {
48670             name: name,
48671             detail: detail,
48672             kind: kind,
48673             range: range,
48674             selectionRange: selectionRange
48675         };
48676         if (children !== undefined) {
48677             result.children = children;
48678         }
48679         return result;
48680     }
48681     DocumentSymbol.create = create;
48682     /**
48683      * Checks whether the given literal conforms to the [DocumentSymbol](#DocumentSymbol) interface.
48684      */
48685     function is(value) {
48686         var candidate = value;
48687         return candidate &&
48688             Is.string(candidate.name) && Is.number(candidate.kind) &&
48689             Range.is(candidate.range) && Range.is(candidate.selectionRange) &&
48690             (candidate.detail === undefined || Is.string(candidate.detail)) &&
48691             (candidate.deprecated === undefined || Is.boolean(candidate.deprecated)) &&
48692             (candidate.children === undefined || Array.isArray(candidate.children)) &&
48693             (candidate.tags === undefined || Array.isArray(candidate.tags));
48694     }
48695     DocumentSymbol.is = is;
48696 })(DocumentSymbol || (DocumentSymbol = {}));
48697 /**
48698  * A set of predefined code action kinds
48699  */
48700 var CodeActionKind;
48701 (function (CodeActionKind) {
48702     /**
48703      * Empty kind.
48704      */
48705     CodeActionKind.Empty = '';
48706     /**
48707      * Base kind for quickfix actions: 'quickfix'
48708      */
48709     CodeActionKind.QuickFix = 'quickfix';
48710     /**
48711      * Base kind for refactoring actions: 'refactor'
48712      */
48713     CodeActionKind.Refactor = 'refactor';
48714     /**
48715      * Base kind for refactoring extraction actions: 'refactor.extract'
48716      *
48717      * Example extract actions:
48718      *
48719      * - Extract method
48720      * - Extract function
48721      * - Extract variable
48722      * - Extract interface from class
48723      * - ...
48724      */
48725     CodeActionKind.RefactorExtract = 'refactor.extract';
48726     /**
48727      * Base kind for refactoring inline actions: 'refactor.inline'
48728      *
48729      * Example inline actions:
48730      *
48731      * - Inline function
48732      * - Inline variable
48733      * - Inline constant
48734      * - ...
48735      */
48736     CodeActionKind.RefactorInline = 'refactor.inline';
48737     /**
48738      * Base kind for refactoring rewrite actions: 'refactor.rewrite'
48739      *
48740      * Example rewrite actions:
48741      *
48742      * - Convert JavaScript function to class
48743      * - Add or remove parameter
48744      * - Encapsulate field
48745      * - Make method static
48746      * - Move method to base class
48747      * - ...
48748      */
48749     CodeActionKind.RefactorRewrite = 'refactor.rewrite';
48750     /**
48751      * Base kind for source actions: `source`
48752      *
48753      * Source code actions apply to the entire file.
48754      */
48755     CodeActionKind.Source = 'source';
48756     /**
48757      * Base kind for an organize imports source action: `source.organizeImports`
48758      */
48759     CodeActionKind.SourceOrganizeImports = 'source.organizeImports';
48760     /**
48761      * Base kind for auto-fix source actions: `source.fixAll`.
48762      *
48763      * Fix all actions automatically fix errors that have a clear fix that do not require user input.
48764      * They should not suppress errors or perform unsafe fixes such as generating new types or classes.
48765      *
48766      * @since 3.15.0
48767      */
48768     CodeActionKind.SourceFixAll = 'source.fixAll';
48769 })(CodeActionKind || (CodeActionKind = {}));
48770 /**
48771  * The CodeActionContext namespace provides helper functions to work with
48772  * [CodeActionContext](#CodeActionContext) literals.
48773  */
48774 var CodeActionContext;
48775 (function (CodeActionContext) {
48776     /**
48777      * Creates a new CodeActionContext literal.
48778      */
48779     function create(diagnostics, only) {
48780         var result = { diagnostics: diagnostics };
48781         if (only !== undefined && only !== null) {
48782             result.only = only;
48783         }
48784         return result;
48785     }
48786     CodeActionContext.create = create;
48787     /**
48788      * Checks whether the given literal conforms to the [CodeActionContext](#CodeActionContext) interface.
48789      */
48790     function is(value) {
48791         var candidate = value;
48792         return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === undefined || Is.typedArray(candidate.only, Is.string));
48793     }
48794     CodeActionContext.is = is;
48795 })(CodeActionContext || (CodeActionContext = {}));
48796 var CodeAction;
48797 (function (CodeAction) {
48798     function create(title, kindOrCommandOrEdit, kind) {
48799         var result = { title: title };
48800         var checkKind = true;
48801         if (typeof kindOrCommandOrEdit === 'string') {
48802             checkKind = false;
48803             result.kind = kindOrCommandOrEdit;
48804         }
48805         else if (Command.is(kindOrCommandOrEdit)) {
48806             result.command = kindOrCommandOrEdit;
48807         }
48808         else {
48809             result.edit = kindOrCommandOrEdit;
48810         }
48811         if (checkKind && kind !== undefined) {
48812             result.kind = kind;
48813         }
48814         return result;
48815     }
48816     CodeAction.create = create;
48817     function is(value) {
48818         var candidate = value;
48819         return candidate && Is.string(candidate.title) &&
48820             (candidate.diagnostics === undefined || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&
48821             (candidate.kind === undefined || Is.string(candidate.kind)) &&
48822             (candidate.edit !== undefined || candidate.command !== undefined) &&
48823             (candidate.command === undefined || Command.is(candidate.command)) &&
48824             (candidate.isPreferred === undefined || Is.boolean(candidate.isPreferred)) &&
48825             (candidate.edit === undefined || WorkspaceEdit.is(candidate.edit));
48826     }
48827     CodeAction.is = is;
48828 })(CodeAction || (CodeAction = {}));
48829 /**
48830  * The CodeLens namespace provides helper functions to work with
48831  * [CodeLens](#CodeLens) literals.
48832  */
48833 var CodeLens;
48834 (function (CodeLens) {
48835     /**
48836      * Creates a new CodeLens literal.
48837      */
48838     function create(range, data) {
48839         var result = { range: range };
48840         if (Is.defined(data)) {
48841             result.data = data;
48842         }
48843         return result;
48844     }
48845     CodeLens.create = create;
48846     /**
48847      * Checks whether the given literal conforms to the [CodeLens](#CodeLens) interface.
48848      */
48849     function is(value) {
48850         var candidate = value;
48851         return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
48852     }
48853     CodeLens.is = is;
48854 })(CodeLens || (CodeLens = {}));
48855 /**
48856  * The FormattingOptions namespace provides helper functions to work with
48857  * [FormattingOptions](#FormattingOptions) literals.
48858  */
48859 var FormattingOptions;
48860 (function (FormattingOptions) {
48861     /**
48862      * Creates a new FormattingOptions literal.
48863      */
48864     function create(tabSize, insertSpaces) {
48865         return { tabSize: tabSize, insertSpaces: insertSpaces };
48866     }
48867     FormattingOptions.create = create;
48868     /**
48869      * Checks whether the given literal conforms to the [FormattingOptions](#FormattingOptions) interface.
48870      */
48871     function is(value) {
48872         var candidate = value;
48873         return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
48874     }
48875     FormattingOptions.is = is;
48876 })(FormattingOptions || (FormattingOptions = {}));
48877 /**
48878  * The DocumentLink namespace provides helper functions to work with
48879  * [DocumentLink](#DocumentLink) literals.
48880  */
48881 var DocumentLink;
48882 (function (DocumentLink) {
48883     /**
48884      * Creates a new DocumentLink literal.
48885      */
48886     function create(range, target, data) {
48887         return { range: range, target: target, data: data };
48888     }
48889     DocumentLink.create = create;
48890     /**
48891      * Checks whether the given literal conforms to the [DocumentLink](#DocumentLink) interface.
48892      */
48893     function is(value) {
48894         var candidate = value;
48895         return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
48896     }
48897     DocumentLink.is = is;
48898 })(DocumentLink || (DocumentLink = {}));
48899 /**
48900  * The SelectionRange namespace provides helper function to work with
48901  * SelectionRange literals.
48902  */
48903 var SelectionRange;
48904 (function (SelectionRange) {
48905     /**
48906      * Creates a new SelectionRange
48907      * @param range the range.
48908      * @param parent an optional parent.
48909      */
48910     function create(range, parent) {
48911         return { range: range, parent: parent };
48912     }
48913     SelectionRange.create = create;
48914     function is(value) {
48915         var candidate = value;
48916         return candidate !== undefined && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));
48917     }
48918     SelectionRange.is = is;
48919 })(SelectionRange || (SelectionRange = {}));
48920 var EOL = ['\n', '\r\n', '\r'];
48921 /**
48922  * @deprecated Use the text document from the new vscode-languageserver-textdocument package.
48923  */
48924 var TextDocument;
48925 (function (TextDocument) {
48926     /**
48927      * Creates a new ITextDocument literal from the given uri and content.
48928      * @param uri The document's uri.
48929      * @param languageId  The document's language Id.
48930      * @param content The document's content.
48931      */
48932     function create(uri, languageId, version, content) {
48933         return new FullTextDocument(uri, languageId, version, content);
48934     }
48935     TextDocument.create = create;
48936     /**
48937      * Checks whether the given literal conforms to the [ITextDocument](#ITextDocument) interface.
48938      */
48939     function is(value) {
48940         var candidate = value;
48941         return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount)
48942             && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
48943     }
48944     TextDocument.is = is;
48945     function applyEdits(document, edits) {
48946         var text = document.getText();
48947         var sortedEdits = mergeSort(edits, function (a, b) {
48948             var diff = a.range.start.line - b.range.start.line;
48949             if (diff === 0) {
48950                 return a.range.start.character - b.range.start.character;
48951             }
48952             return diff;
48953         });
48954         var lastModifiedOffset = text.length;
48955         for (var i = sortedEdits.length - 1; i >= 0; i--) {
48956             var e = sortedEdits[i];
48957             var startOffset = document.offsetAt(e.range.start);
48958             var endOffset = document.offsetAt(e.range.end);
48959             if (endOffset <= lastModifiedOffset) {
48960                 text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
48961             }
48962             else {
48963                 throw new Error('Overlapping edit');
48964             }
48965             lastModifiedOffset = startOffset;
48966         }
48967         return text;
48968     }
48969     TextDocument.applyEdits = applyEdits;
48970     function mergeSort(data, compare) {
48971         if (data.length <= 1) {
48972             // sorted
48973             return data;
48974         }
48975         var p = (data.length / 2) | 0;
48976         var left = data.slice(0, p);
48977         var right = data.slice(p);
48978         mergeSort(left, compare);
48979         mergeSort(right, compare);
48980         var leftIdx = 0;
48981         var rightIdx = 0;
48982         var i = 0;
48983         while (leftIdx < left.length && rightIdx < right.length) {
48984             var ret = compare(left[leftIdx], right[rightIdx]);
48985             if (ret <= 0) {
48986                 // smaller_equal -> take left to preserve order
48987                 data[i++] = left[leftIdx++];
48988             }
48989             else {
48990                 // greater -> take right
48991                 data[i++] = right[rightIdx++];
48992             }
48993         }
48994         while (leftIdx < left.length) {
48995             data[i++] = left[leftIdx++];
48996         }
48997         while (rightIdx < right.length) {
48998             data[i++] = right[rightIdx++];
48999         }
49000         return data;
49001     }
49002 })(TextDocument || (TextDocument = {}));
49003 /**
49004  * @deprecated Use the text document from the new vscode-languageserver-textdocument package.
49005  */
49006 var FullTextDocument = /** @class */ (function () {
49007     function FullTextDocument(uri, languageId, version, content) {
49008         this._uri = uri;
49009         this._languageId = languageId;
49010         this._version = version;
49011         this._content = content;
49012         this._lineOffsets = undefined;
49013     }
49014     Object.defineProperty(FullTextDocument.prototype, "uri", {
49015         get: function () {
49016             return this._uri;
49017         },
49018         enumerable: false,
49019         configurable: true
49020     });
49021     Object.defineProperty(FullTextDocument.prototype, "languageId", {
49022         get: function () {
49023             return this._languageId;
49024         },
49025         enumerable: false,
49026         configurable: true
49027     });
49028     Object.defineProperty(FullTextDocument.prototype, "version", {
49029         get: function () {
49030             return this._version;
49031         },
49032         enumerable: false,
49033         configurable: true
49034     });
49035     FullTextDocument.prototype.getText = function (range) {
49036         if (range) {
49037             var start = this.offsetAt(range.start);
49038             var end = this.offsetAt(range.end);
49039             return this._content.substring(start, end);
49040         }
49041         return this._content;
49042     };
49043     FullTextDocument.prototype.update = function (event, version) {
49044         this._content = event.text;
49045         this._version = version;
49046         this._lineOffsets = undefined;
49047     };
49048     FullTextDocument.prototype.getLineOffsets = function () {
49049         if (this._lineOffsets === undefined) {
49050             var lineOffsets = [];
49051             var text = this._content;
49052             var isLineStart = true;
49053             for (var i = 0; i < text.length; i++) {
49054                 if (isLineStart) {
49055                     lineOffsets.push(i);
49056                     isLineStart = false;
49057                 }
49058                 var ch = text.charAt(i);
49059                 isLineStart = (ch === '\r' || ch === '\n');
49060                 if (ch === '\r' && i + 1 < text.length && text.charAt(i + 1) === '\n') {
49061                     i++;
49062                 }
49063             }
49064             if (isLineStart && text.length > 0) {
49065                 lineOffsets.push(text.length);
49066             }
49067             this._lineOffsets = lineOffsets;
49068         }
49069         return this._lineOffsets;
49070     };
49071     FullTextDocument.prototype.positionAt = function (offset) {
49072         offset = Math.max(Math.min(offset, this._content.length), 0);
49073         var lineOffsets = this.getLineOffsets();
49074         var low = 0, high = lineOffsets.length;
49075         if (high === 0) {
49076             return Position.create(0, offset);
49077         }
49078         while (low < high) {
49079             var mid = Math.floor((low + high) / 2);
49080             if (lineOffsets[mid] > offset) {
49081                 high = mid;
49082             }
49083             else {
49084                 low = mid + 1;
49085             }
49086         }
49087         // low is the least x for which the line offset is larger than the current offset
49088         // or array.length if no line offset is larger than the current offset
49089         var line = low - 1;
49090         return Position.create(line, offset - lineOffsets[line]);
49091     };
49092     FullTextDocument.prototype.offsetAt = function (position) {
49093         var lineOffsets = this.getLineOffsets();
49094         if (position.line >= lineOffsets.length) {
49095             return this._content.length;
49096         }
49097         else if (position.line < 0) {
49098             return 0;
49099         }
49100         var lineOffset = lineOffsets[position.line];
49101         var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
49102         return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
49103     };
49104     Object.defineProperty(FullTextDocument.prototype, "lineCount", {
49105         get: function () {
49106             return this.getLineOffsets().length;
49107         },
49108         enumerable: false,
49109         configurable: true
49110     });
49111     return FullTextDocument;
49112 }());
49113 var Is;
49114 (function (Is) {
49115     var toString = Object.prototype.toString;
49116     function defined(value) {
49117         return typeof value !== 'undefined';
49118     }
49119     Is.defined = defined;
49120     function undefined(value) {
49121         return typeof value === 'undefined';
49122     }
49123     Is.undefined = undefined;
49124     function boolean(value) {
49125         return value === true || value === false;
49126     }
49127     Is.boolean = boolean;
49128     function string(value) {
49129         return toString.call(value) === '[object String]';
49130     }
49131     Is.string = string;
49132     function number(value) {
49133         return toString.call(value) === '[object Number]';
49134     }
49135     Is.number = number;
49136     function numberRange(value, min, max) {
49137         return toString.call(value) === '[object Number]' && min <= value && value <= max;
49138     }
49139     Is.numberRange = numberRange;
49140     function integer(value) {
49141         return toString.call(value) === '[object Number]' && -2147483648 <= value && value <= 2147483647;
49142     }
49143     Is.integer = integer;
49144     function uinteger(value) {
49145         return toString.call(value) === '[object Number]' && 0 <= value && value <= 2147483647;
49146     }
49147     Is.uinteger = uinteger;
49148     function func(value) {
49149         return toString.call(value) === '[object Function]';
49150     }
49151     Is.func = func;
49152     function objectLiteral(value) {
49153         // Strictly speaking class instances pass this check as well. Since the LSP
49154         // doesn't use classes we ignore this for now. If we do we need to add something
49155         // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
49156         return value !== null && typeof value === 'object';
49157     }
49158     Is.objectLiteral = objectLiteral;
49159     function typedArray(value, check) {
49160         return Array.isArray(value) && value.every(check);
49161     }
49162     Is.typedArray = typedArray;
49163 })(Is || (Is = {}));
49164
49165
49166 /***/ }),
49167 /* 119 */
49168 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
49169
49170 __webpack_require__.r(__webpack_exports__);
49171 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
49172 /* harmony export */   "Node": () => /* binding */ Node,
49173 /* harmony export */   "parse": () => /* binding */ parse
49174 /* harmony export */ });
49175 /* harmony import */ var _htmlScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(116);
49176 /* harmony import */ var _utils_arrays__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(120);
49177 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(117);
49178 /* harmony import */ var _languageFacts_fact__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(121);
49179 /*---------------------------------------------------------------------------------------------
49180  *  Copyright (c) Microsoft Corporation. All rights reserved.
49181  *  Licensed under the MIT License. See License.txt in the project root for license information.
49182  *--------------------------------------------------------------------------------------------*/
49183
49184
49185
49186
49187 var Node = /** @class */ (function () {
49188     function Node(start, end, children, parent) {
49189         this.start = start;
49190         this.end = end;
49191         this.children = children;
49192         this.parent = parent;
49193         this.closed = false;
49194     }
49195     Object.defineProperty(Node.prototype, "attributeNames", {
49196         get: function () { return this.attributes ? Object.keys(this.attributes) : []; },
49197         enumerable: false,
49198         configurable: true
49199     });
49200     Node.prototype.isSameTag = function (tagInLowerCase) {
49201         if (this.tag === undefined) {
49202             return tagInLowerCase === undefined;
49203         }
49204         else {
49205             return tagInLowerCase !== undefined && this.tag.length === tagInLowerCase.length && this.tag.toLowerCase() === tagInLowerCase;
49206         }
49207     };
49208     Object.defineProperty(Node.prototype, "firstChild", {
49209         get: function () { return this.children[0]; },
49210         enumerable: false,
49211         configurable: true
49212     });
49213     Object.defineProperty(Node.prototype, "lastChild", {
49214         get: function () { return this.children.length ? this.children[this.children.length - 1] : void 0; },
49215         enumerable: false,
49216         configurable: true
49217     });
49218     Node.prototype.findNodeBefore = function (offset) {
49219         var idx = (0,_utils_arrays__WEBPACK_IMPORTED_MODULE_1__.findFirst)(this.children, function (c) { return offset <= c.start; }) - 1;
49220         if (idx >= 0) {
49221             var child = this.children[idx];
49222             if (offset > child.start) {
49223                 if (offset < child.end) {
49224                     return child.findNodeBefore(offset);
49225                 }
49226                 var lastChild = child.lastChild;
49227                 if (lastChild && lastChild.end === child.end) {
49228                     return child.findNodeBefore(offset);
49229                 }
49230                 return child;
49231             }
49232         }
49233         return this;
49234     };
49235     Node.prototype.findNodeAt = function (offset) {
49236         var idx = (0,_utils_arrays__WEBPACK_IMPORTED_MODULE_1__.findFirst)(this.children, function (c) { return offset <= c.start; }) - 1;
49237         if (idx >= 0) {
49238             var child = this.children[idx];
49239             if (offset > child.start && offset <= child.end) {
49240                 return child.findNodeAt(offset);
49241             }
49242         }
49243         return this;
49244     };
49245     return Node;
49246 }());
49247
49248 function parse(text) {
49249     var scanner = (0,_htmlScanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(text, undefined, undefined, true);
49250     var htmlDocument = new Node(0, text.length, [], void 0);
49251     var curr = htmlDocument;
49252     var endTagStart = -1;
49253     var endTagName = undefined;
49254     var pendingAttribute = null;
49255     var token = scanner.scan();
49256     while (token !== _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.EOS) {
49257         switch (token) {
49258             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.StartTagOpen:
49259                 var child = new Node(scanner.getTokenOffset(), text.length, [], curr);
49260                 curr.children.push(child);
49261                 curr = child;
49262                 break;
49263             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.StartTag:
49264                 curr.tag = scanner.getTokenText();
49265                 break;
49266             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.StartTagClose:
49267                 if (curr.parent) {
49268                     curr.end = scanner.getTokenEnd(); // might be later set to end tag position
49269                     if (scanner.getTokenLength()) {
49270                         curr.startTagEnd = scanner.getTokenEnd();
49271                         if (curr.tag && (0,_languageFacts_fact__WEBPACK_IMPORTED_MODULE_3__.isVoidElement)(curr.tag)) {
49272                             curr.closed = true;
49273                             curr = curr.parent;
49274                         }
49275                     }
49276                     else {
49277                         // pseudo close token from an incomplete start tag
49278                         curr = curr.parent;
49279                     }
49280                 }
49281                 break;
49282             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.StartTagSelfClose:
49283                 if (curr.parent) {
49284                     curr.closed = true;
49285                     curr.end = scanner.getTokenEnd();
49286                     curr.startTagEnd = scanner.getTokenEnd();
49287                     curr = curr.parent;
49288                 }
49289                 break;
49290             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.EndTagOpen:
49291                 endTagStart = scanner.getTokenOffset();
49292                 endTagName = undefined;
49293                 break;
49294             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.EndTag:
49295                 endTagName = scanner.getTokenText().toLowerCase();
49296                 break;
49297             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.EndTagClose:
49298                 var node = curr;
49299                 // see if we can find a matching tag
49300                 while (!node.isSameTag(endTagName) && node.parent) {
49301                     node = node.parent;
49302                 }
49303                 if (node.parent) {
49304                     while (curr !== node) {
49305                         curr.end = endTagStart;
49306                         curr.closed = false;
49307                         curr = curr.parent;
49308                     }
49309                     curr.closed = true;
49310                     curr.endTagStart = endTagStart;
49311                     curr.end = scanner.getTokenEnd();
49312                     curr = curr.parent;
49313                 }
49314                 break;
49315             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.AttributeName: {
49316                 pendingAttribute = scanner.getTokenText();
49317                 var attributes = curr.attributes;
49318                 if (!attributes) {
49319                     curr.attributes = attributes = {};
49320                 }
49321                 attributes[pendingAttribute] = null; // Support valueless attributes such as 'checked'
49322                 break;
49323             }
49324             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.AttributeValue: {
49325                 var value = scanner.getTokenText();
49326                 var attributes = curr.attributes;
49327                 if (attributes && pendingAttribute) {
49328                     attributes[pendingAttribute] = value;
49329                     pendingAttribute = null;
49330                 }
49331                 break;
49332             }
49333         }
49334         token = scanner.scan();
49335     }
49336     while (curr.parent) {
49337         curr.end = text.length;
49338         curr.closed = false;
49339         curr = curr.parent;
49340     }
49341     return {
49342         roots: htmlDocument.children,
49343         findNodeBefore: htmlDocument.findNodeBefore.bind(htmlDocument),
49344         findNodeAt: htmlDocument.findNodeAt.bind(htmlDocument)
49345     };
49346 }
49347
49348
49349 /***/ }),
49350 /* 120 */
49351 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
49352
49353 __webpack_require__.r(__webpack_exports__);
49354 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
49355 /* harmony export */   "findFirst": () => /* binding */ findFirst,
49356 /* harmony export */   "binarySearch": () => /* binding */ binarySearch
49357 /* harmony export */ });
49358 /*---------------------------------------------------------------------------------------------
49359  *  Copyright (c) Microsoft Corporation. All rights reserved.
49360  *  Licensed under the MIT License. See License.txt in the project root for license information.
49361  *--------------------------------------------------------------------------------------------*/
49362 /**
49363  * Takes a sorted array and a function p. The array is sorted in such a way that all elements where p(x) is false
49364  * are located before all elements where p(x) is true.
49365  * @returns the least x for which p(x) is true or array.length if no element fullfills the given function.
49366  */
49367 function findFirst(array, p) {
49368     var low = 0, high = array.length;
49369     if (high === 0) {
49370         return 0; // no children
49371     }
49372     while (low < high) {
49373         var mid = Math.floor((low + high) / 2);
49374         if (p(array[mid])) {
49375             high = mid;
49376         }
49377         else {
49378             low = mid + 1;
49379         }
49380     }
49381     return low;
49382 }
49383 function binarySearch(array, key, comparator) {
49384     var low = 0, high = array.length - 1;
49385     while (low <= high) {
49386         var mid = ((low + high) / 2) | 0;
49387         var comp = comparator(array[mid], key);
49388         if (comp < 0) {
49389             low = mid + 1;
49390         }
49391         else if (comp > 0) {
49392             high = mid - 1;
49393         }
49394         else {
49395             return mid;
49396         }
49397     }
49398     return -(low + 1);
49399 }
49400
49401
49402 /***/ }),
49403 /* 121 */
49404 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
49405
49406 __webpack_require__.r(__webpack_exports__);
49407 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
49408 /* harmony export */   "VOID_ELEMENTS": () => /* binding */ VOID_ELEMENTS,
49409 /* harmony export */   "isVoidElement": () => /* binding */ isVoidElement
49410 /* harmony export */ });
49411 /* harmony import */ var _utils_arrays__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(120);
49412 /*---------------------------------------------------------------------------------------------
49413  *  Copyright (c) Microsoft Corporation. All rights reserved.
49414  *  Licensed under the MIT License. See License.txt in the project root for license information.
49415  *--------------------------------------------------------------------------------------------*/
49416
49417 // As defined in https://www.w3.org/TR/html5/syntax.html#void-elements
49418 var VOID_ELEMENTS = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr'];
49419 function isVoidElement(e) {
49420     return !!e && _utils_arrays__WEBPACK_IMPORTED_MODULE_0__.binarySearch(VOID_ELEMENTS, e.toLowerCase(), function (s1, s2) { return s1.localeCompare(s2); }) >= 0;
49421 }
49422
49423
49424 /***/ }),
49425 /* 122 */
49426 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
49427
49428 __webpack_require__.r(__webpack_exports__);
49429 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
49430 /* harmony export */   "HTMLCompletion": () => /* binding */ HTMLCompletion
49431 /* harmony export */ });
49432 /* harmony import */ var _parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(116);
49433 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(117);
49434 /* harmony import */ var _parser_htmlEntities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(123);
49435 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(77);
49436 /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(124);
49437 /* harmony import */ var _languageFacts_fact__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(121);
49438 /* harmony import */ var _utils_object__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(125);
49439 /* harmony import */ var _languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(126);
49440 /* harmony import */ var _pathCompletion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(128);
49441 /*---------------------------------------------------------------------------------------------
49442  *  Copyright (c) Microsoft Corporation. All rights reserved.
49443  *  Licensed under the MIT License. See License.txt in the project root for license information.
49444  *--------------------------------------------------------------------------------------------*/
49445 var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
49446     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
49447     return new (P || (P = Promise))(function (resolve, reject) {
49448         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
49449         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
49450         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
49451         step((generator = generator.apply(thisArg, _arguments || [])).next());
49452     });
49453 };
49454 var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
49455     var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
49456     return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
49457     function verb(n) { return function (v) { return step([n, v]); }; }
49458     function step(op) {
49459         if (f) throw new TypeError("Generator is already executing.");
49460         while (_) try {
49461             if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
49462             if (y = 0, t) op = [op[0] & 2, t.value];
49463             switch (op[0]) {
49464                 case 0: case 1: t = op; break;
49465                 case 4: _.label++; return { value: op[1], done: false };
49466                 case 5: _.label++; y = op[1]; op = [0]; continue;
49467                 case 7: op = _.ops.pop(); _.trys.pop(); continue;
49468                 default:
49469                     if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
49470                     if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
49471                     if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
49472                     if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
49473                     if (t[2]) _.ops.pop();
49474                     _.trys.pop(); continue;
49475             }
49476             op = body.call(thisArg, _);
49477         } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
49478         if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
49479     }
49480 };
49481
49482
49483
49484
49485
49486
49487
49488
49489
49490 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_3__.loadMessageBundle();
49491 var HTMLCompletion = /** @class */ (function () {
49492     function HTMLCompletion(lsOptions, dataManager) {
49493         this.lsOptions = lsOptions;
49494         this.dataManager = dataManager;
49495         this.completionParticipants = [];
49496     }
49497     HTMLCompletion.prototype.setCompletionParticipants = function (registeredCompletionParticipants) {
49498         this.completionParticipants = registeredCompletionParticipants || [];
49499     };
49500     HTMLCompletion.prototype.doComplete2 = function (document, position, htmlDocument, documentContext, settings) {
49501         return __awaiter(this, void 0, void 0, function () {
49502             var participant, contributedParticipants, result, pathCompletionResult;
49503             return __generator(this, function (_a) {
49504                 switch (_a.label) {
49505                     case 0:
49506                         if (!this.lsOptions.fileSystemProvider || !this.lsOptions.fileSystemProvider.readDirectory) {
49507                             return [2 /*return*/, this.doComplete(document, position, htmlDocument, settings)];
49508                         }
49509                         participant = new _pathCompletion__WEBPACK_IMPORTED_MODULE_8__.PathCompletionParticipant(this.lsOptions.fileSystemProvider.readDirectory);
49510                         contributedParticipants = this.completionParticipants;
49511                         this.completionParticipants = [participant].concat(contributedParticipants);
49512                         result = this.doComplete(document, position, htmlDocument, settings);
49513                         _a.label = 1;
49514                     case 1:
49515                         _a.trys.push([1, , 3, 4]);
49516                         return [4 /*yield*/, participant.computeCompletions(document, documentContext)];
49517                     case 2:
49518                         pathCompletionResult = _a.sent();
49519                         return [2 /*return*/, {
49520                                 isIncomplete: result.isIncomplete || pathCompletionResult.isIncomplete,
49521                                 items: pathCompletionResult.items.concat(result.items)
49522                             }];
49523                     case 3:
49524                         this.completionParticipants = contributedParticipants;
49525                         return [7 /*endfinally*/];
49526                     case 4: return [2 /*return*/];
49527                 }
49528             });
49529         });
49530     };
49531     HTMLCompletion.prototype.doComplete = function (document, position, htmlDocument, settings) {
49532         var result = this._doComplete(document, position, htmlDocument, settings);
49533         return this.convertCompletionList(result);
49534     };
49535     HTMLCompletion.prototype._doComplete = function (document, position, htmlDocument, settings) {
49536         var result = {
49537             isIncomplete: false,
49538             items: []
49539         };
49540         var completionParticipants = this.completionParticipants;
49541         var dataProviders = this.dataManager.getDataProviders().filter(function (p) { return p.isApplicable(document.languageId) && (!settings || settings[p.getId()] !== false); });
49542         var doesSupportMarkdown = this.doesSupportMarkdown();
49543         var text = document.getText();
49544         var offset = document.offsetAt(position);
49545         var node = htmlDocument.findNodeBefore(offset);
49546         if (!node) {
49547             return result;
49548         }
49549         var scanner = (0,_parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(text, node.start);
49550         var currentTag = '';
49551         var currentAttributeName;
49552         function getReplaceRange(replaceStart, replaceEnd) {
49553             if (replaceEnd === void 0) { replaceEnd = offset; }
49554             if (replaceStart > offset) {
49555                 replaceStart = offset;
49556             }
49557             return { start: document.positionAt(replaceStart), end: document.positionAt(replaceEnd) };
49558         }
49559         function collectOpenTagSuggestions(afterOpenBracket, tagNameEnd) {
49560             var range = getReplaceRange(afterOpenBracket, tagNameEnd);
49561             dataProviders.forEach(function (provider) {
49562                 provider.provideTags().forEach(function (tag) {
49563                     result.items.push({
49564                         label: tag.name,
49565                         kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.CompletionItemKind.Property,
49566                         documentation: (0,_languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_7__.generateDocumentation)(tag, undefined, doesSupportMarkdown),
49567                         textEdit: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TextEdit.replace(range, tag.name),
49568                         insertTextFormat: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.InsertTextFormat.PlainText
49569                     });
49570                 });
49571             });
49572             return result;
49573         }
49574         function getLineIndent(offset) {
49575             var start = offset;
49576             while (start > 0) {
49577                 var ch = text.charAt(start - 1);
49578                 if ("\n\r".indexOf(ch) >= 0) {
49579                     return text.substring(start, offset);
49580                 }
49581                 if (!isWhiteSpace(ch)) {
49582                     return null;
49583                 }
49584                 start--;
49585             }
49586             return text.substring(0, offset);
49587         }
49588         function collectCloseTagSuggestions(afterOpenBracket, inOpenTag, tagNameEnd) {
49589             if (tagNameEnd === void 0) { tagNameEnd = offset; }
49590             var range = getReplaceRange(afterOpenBracket, tagNameEnd);
49591             var closeTag = isFollowedBy(text, tagNameEnd, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinEndTag, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndTagClose) ? '' : '>';
49592             var curr = node;
49593             if (inOpenTag) {
49594                 curr = curr.parent; // don't suggest the own tag, it's not yet open
49595             }
49596             while (curr) {
49597                 var tag = curr.tag;
49598                 if (tag && (!curr.closed || curr.endTagStart && (curr.endTagStart > offset))) {
49599                     var item = {
49600                         label: '/' + tag,
49601                         kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.CompletionItemKind.Property,
49602                         filterText: '/' + tag,
49603                         textEdit: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TextEdit.replace(range, '/' + tag + closeTag),
49604                         insertTextFormat: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.InsertTextFormat.PlainText
49605                     };
49606                     var startIndent = getLineIndent(curr.start);
49607                     var endIndent = getLineIndent(afterOpenBracket - 1);
49608                     if (startIndent !== null && endIndent !== null && startIndent !== endIndent) {
49609                         var insertText = startIndent + '</' + tag + closeTag;
49610                         item.textEdit = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TextEdit.replace(getReplaceRange(afterOpenBracket - 1 - endIndent.length), insertText);
49611                         item.filterText = endIndent + '</' + tag;
49612                     }
49613                     result.items.push(item);
49614                     return result;
49615                 }
49616                 curr = curr.parent;
49617             }
49618             if (inOpenTag) {
49619                 return result;
49620             }
49621             dataProviders.forEach(function (provider) {
49622                 provider.provideTags().forEach(function (tag) {
49623                     result.items.push({
49624                         label: '/' + tag.name,
49625                         kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.CompletionItemKind.Property,
49626                         documentation: (0,_languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_7__.generateDocumentation)(tag, undefined, doesSupportMarkdown),
49627                         filterText: '/' + tag.name + closeTag,
49628                         textEdit: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TextEdit.replace(range, '/' + tag.name + closeTag),
49629                         insertTextFormat: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.InsertTextFormat.PlainText
49630                     });
49631                 });
49632             });
49633             return result;
49634         }
49635         function collectAutoCloseTagSuggestion(tagCloseEnd, tag) {
49636             if (settings && settings.hideAutoCompleteProposals) {
49637                 return result;
49638             }
49639             if (!(0,_languageFacts_fact__WEBPACK_IMPORTED_MODULE_5__.isVoidElement)(tag)) {
49640                 var pos = document.positionAt(tagCloseEnd);
49641                 result.items.push({
49642                     label: '</' + tag + '>',
49643                     kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.CompletionItemKind.Property,
49644                     filterText: '</' + tag + '>',
49645                     textEdit: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TextEdit.insert(pos, '$0</' + tag + '>'),
49646                     insertTextFormat: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.InsertTextFormat.Snippet
49647                 });
49648             }
49649             return result;
49650         }
49651         function collectTagSuggestions(tagStart, tagEnd) {
49652             collectOpenTagSuggestions(tagStart, tagEnd);
49653             collectCloseTagSuggestions(tagStart, true, tagEnd);
49654             return result;
49655         }
49656         function collectAttributeNameSuggestions(nameStart, nameEnd) {
49657             if (nameEnd === void 0) { nameEnd = offset; }
49658             var replaceEnd = offset;
49659             while (replaceEnd < nameEnd && text[replaceEnd] !== '<') { // < is a valid attribute name character, but we rather assume the attribute name ends. See #23236.
49660                 replaceEnd++;
49661             }
49662             var range = getReplaceRange(nameStart, replaceEnd);
49663             var value = isFollowedBy(text, nameEnd, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.AfterAttributeName, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.DelimiterAssign) ? '' : '="$1"';
49664             var seenAttributes = Object.create(null);
49665             dataProviders.forEach(function (provider) {
49666                 provider.provideAttributes(currentTag).forEach(function (attr) {
49667                     if (seenAttributes[attr.name]) {
49668                         return;
49669                     }
49670                     seenAttributes[attr.name] = true;
49671                     var codeSnippet = attr.name;
49672                     var command;
49673                     if (attr.valueSet !== 'v' && value.length) {
49674                         codeSnippet = codeSnippet + value;
49675                         if (attr.valueSet || attr.name === 'style') {
49676                             command = {
49677                                 title: 'Suggest',
49678                                 command: 'editor.action.triggerSuggest'
49679                             };
49680                         }
49681                     }
49682                     result.items.push({
49683                         label: attr.name,
49684                         kind: attr.valueSet === 'handler' ? _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.CompletionItemKind.Function : _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.CompletionItemKind.Value,
49685                         documentation: (0,_languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_7__.generateDocumentation)(attr, undefined, doesSupportMarkdown),
49686                         textEdit: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TextEdit.replace(range, codeSnippet),
49687                         insertTextFormat: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.InsertTextFormat.Snippet,
49688                         command: command
49689                     });
49690                 });
49691             });
49692             collectDataAttributesSuggestions(range, seenAttributes);
49693             return result;
49694         }
49695         function collectDataAttributesSuggestions(range, seenAttributes) {
49696             var dataAttr = 'data-';
49697             var dataAttributes = {};
49698             dataAttributes[dataAttr] = dataAttr + "$1=\"$2\"";
49699             function addNodeDataAttributes(node) {
49700                 node.attributeNames.forEach(function (attr) {
49701                     if ((0,_utils_strings__WEBPACK_IMPORTED_MODULE_4__.startsWith)(attr, dataAttr) && !dataAttributes[attr] && !seenAttributes[attr]) {
49702                         dataAttributes[attr] = attr + '="$1"';
49703                     }
49704                 });
49705                 node.children.forEach(function (child) { return addNodeDataAttributes(child); });
49706             }
49707             if (htmlDocument) {
49708                 htmlDocument.roots.forEach(function (root) { return addNodeDataAttributes(root); });
49709             }
49710             Object.keys(dataAttributes).forEach(function (attr) { return result.items.push({
49711                 label: attr,
49712                 kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.CompletionItemKind.Value,
49713                 textEdit: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TextEdit.replace(range, dataAttributes[attr]),
49714                 insertTextFormat: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.InsertTextFormat.Snippet
49715             }); });
49716         }
49717         function collectAttributeValueSuggestions(valueStart, valueEnd) {
49718             if (valueEnd === void 0) { valueEnd = offset; }
49719             var range;
49720             var addQuotes;
49721             var valuePrefix;
49722             if (offset > valueStart && offset <= valueEnd && isQuote(text[valueStart])) {
49723                 // inside quoted attribute
49724                 var valueContentStart = valueStart + 1;
49725                 var valueContentEnd = valueEnd;
49726                 // valueEnd points to the char after quote, which encloses the replace range
49727                 if (valueEnd > valueStart && text[valueEnd - 1] === text[valueStart]) {
49728                     valueContentEnd--;
49729                 }
49730                 var wsBefore = getWordStart(text, offset, valueContentStart);
49731                 var wsAfter = getWordEnd(text, offset, valueContentEnd);
49732                 range = getReplaceRange(wsBefore, wsAfter);
49733                 valuePrefix = offset >= valueContentStart && offset <= valueContentEnd ? text.substring(valueContentStart, offset) : '';
49734                 addQuotes = false;
49735             }
49736             else {
49737                 range = getReplaceRange(valueStart, valueEnd);
49738                 valuePrefix = text.substring(valueStart, offset);
49739                 addQuotes = true;
49740             }
49741             if (completionParticipants.length > 0) {
49742                 var tag = currentTag.toLowerCase();
49743                 var attribute = currentAttributeName.toLowerCase();
49744                 var fullRange = getReplaceRange(valueStart, valueEnd);
49745                 for (var _i = 0, completionParticipants_1 = completionParticipants; _i < completionParticipants_1.length; _i++) {
49746                     var participant = completionParticipants_1[_i];
49747                     if (participant.onHtmlAttributeValue) {
49748                         participant.onHtmlAttributeValue({ document: document, position: position, tag: tag, attribute: attribute, value: valuePrefix, range: fullRange });
49749                     }
49750                 }
49751             }
49752             dataProviders.forEach(function (provider) {
49753                 provider.provideValues(currentTag, currentAttributeName).forEach(function (value) {
49754                     var insertText = addQuotes ? '"' + value.name + '"' : value.name;
49755                     result.items.push({
49756                         label: value.name,
49757                         filterText: insertText,
49758                         kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.CompletionItemKind.Unit,
49759                         documentation: (0,_languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_7__.generateDocumentation)(value, undefined, doesSupportMarkdown),
49760                         textEdit: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TextEdit.replace(range, insertText),
49761                         insertTextFormat: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.InsertTextFormat.PlainText
49762                     });
49763                 });
49764             });
49765             collectCharacterEntityProposals();
49766             return result;
49767         }
49768         function scanNextForEndPos(nextToken) {
49769             if (offset === scanner.getTokenEnd()) {
49770                 token = scanner.scan();
49771                 if (token === nextToken && scanner.getTokenOffset() === offset) {
49772                     return scanner.getTokenEnd();
49773                 }
49774             }
49775             return offset;
49776         }
49777         function collectInsideContent() {
49778             for (var _i = 0, completionParticipants_2 = completionParticipants; _i < completionParticipants_2.length; _i++) {
49779                 var participant = completionParticipants_2[_i];
49780                 if (participant.onHtmlContent) {
49781                     participant.onHtmlContent({ document: document, position: position });
49782                 }
49783             }
49784             return collectCharacterEntityProposals();
49785         }
49786         function collectCharacterEntityProposals() {
49787             // character entities
49788             var k = offset - 1;
49789             var characterStart = position.character;
49790             while (k >= 0 && (0,_utils_strings__WEBPACK_IMPORTED_MODULE_4__.isLetterOrDigit)(text, k)) {
49791                 k--;
49792                 characterStart--;
49793             }
49794             if (k >= 0 && text[k] === '&') {
49795                 var range = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.Range.create(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.Position.create(position.line, characterStart - 1), position);
49796                 for (var entity in _parser_htmlEntities__WEBPACK_IMPORTED_MODULE_2__.entities) {
49797                     if ((0,_utils_strings__WEBPACK_IMPORTED_MODULE_4__.endsWith)(entity, ';')) {
49798                         var label = '&' + entity;
49799                         result.items.push({
49800                             label: label,
49801                             kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.CompletionItemKind.Keyword,
49802                             documentation: localize('entity.propose', "Character entity representing '" + _parser_htmlEntities__WEBPACK_IMPORTED_MODULE_2__.entities[entity] + "'"),
49803                             textEdit: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TextEdit.replace(range, label),
49804                             insertTextFormat: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.InsertTextFormat.PlainText
49805                         });
49806                     }
49807                 }
49808             }
49809             return result;
49810         }
49811         function suggestDoctype(replaceStart, replaceEnd) {
49812             var range = getReplaceRange(replaceStart, replaceEnd);
49813             result.items.push({
49814                 label: '!DOCTYPE',
49815                 kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.CompletionItemKind.Property,
49816                 documentation: 'A preamble for an HTML document.',
49817                 textEdit: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TextEdit.replace(range, '!DOCTYPE html>'),
49818                 insertTextFormat: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.InsertTextFormat.PlainText
49819             });
49820         }
49821         var token = scanner.scan();
49822         while (token !== _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOS && scanner.getTokenOffset() <= offset) {
49823             switch (token) {
49824                 case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTagOpen:
49825                     if (scanner.getTokenEnd() === offset) {
49826                         var endPos = scanNextForEndPos(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTag);
49827                         if (position.line === 0) {
49828                             suggestDoctype(offset, endPos);
49829                         }
49830                         return collectTagSuggestions(offset, endPos);
49831                     }
49832                     break;
49833                 case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTag:
49834                     if (scanner.getTokenOffset() <= offset && offset <= scanner.getTokenEnd()) {
49835                         return collectOpenTagSuggestions(scanner.getTokenOffset(), scanner.getTokenEnd());
49836                     }
49837                     currentTag = scanner.getTokenText();
49838                     break;
49839                 case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.AttributeName:
49840                     if (scanner.getTokenOffset() <= offset && offset <= scanner.getTokenEnd()) {
49841                         return collectAttributeNameSuggestions(scanner.getTokenOffset(), scanner.getTokenEnd());
49842                     }
49843                     currentAttributeName = scanner.getTokenText();
49844                     break;
49845                 case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.DelimiterAssign:
49846                     if (scanner.getTokenEnd() === offset) {
49847                         var endPos = scanNextForEndPos(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.AttributeValue);
49848                         return collectAttributeValueSuggestions(offset, endPos);
49849                     }
49850                     break;
49851                 case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.AttributeValue:
49852                     if (scanner.getTokenOffset() <= offset && offset <= scanner.getTokenEnd()) {
49853                         return collectAttributeValueSuggestions(scanner.getTokenOffset(), scanner.getTokenEnd());
49854                     }
49855                     break;
49856                 case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Whitespace:
49857                     if (offset <= scanner.getTokenEnd()) {
49858                         switch (scanner.getScannerState()) {
49859                             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.AfterOpeningStartTag:
49860                                 var startPos = scanner.getTokenOffset();
49861                                 var endTagPos = scanNextForEndPos(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTag);
49862                                 return collectTagSuggestions(startPos, endTagPos);
49863                             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinTag:
49864                             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.AfterAttributeName:
49865                                 return collectAttributeNameSuggestions(scanner.getTokenEnd());
49866                             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.BeforeAttributeValue:
49867                                 return collectAttributeValueSuggestions(scanner.getTokenEnd());
49868                             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.AfterOpeningEndTag:
49869                                 return collectCloseTagSuggestions(scanner.getTokenOffset() - 1, false);
49870                             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.ScannerState.WithinContent:
49871                                 return collectInsideContent();
49872                         }
49873                     }
49874                     break;
49875                 case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndTagOpen:
49876                     if (offset <= scanner.getTokenEnd()) {
49877                         var afterOpenBracket = scanner.getTokenOffset() + 1;
49878                         var endOffset = scanNextForEndPos(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndTag);
49879                         return collectCloseTagSuggestions(afterOpenBracket, false, endOffset);
49880                     }
49881                     break;
49882                 case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndTag:
49883                     if (offset <= scanner.getTokenEnd()) {
49884                         var start = scanner.getTokenOffset() - 1;
49885                         while (start >= 0) {
49886                             var ch = text.charAt(start);
49887                             if (ch === '/') {
49888                                 return collectCloseTagSuggestions(start, false, scanner.getTokenEnd());
49889                             }
49890                             else if (!isWhiteSpace(ch)) {
49891                                 break;
49892                             }
49893                             start--;
49894                         }
49895                     }
49896                     break;
49897                 case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTagClose:
49898                     if (offset <= scanner.getTokenEnd()) {
49899                         if (currentTag) {
49900                             return collectAutoCloseTagSuggestion(scanner.getTokenEnd(), currentTag);
49901                         }
49902                     }
49903                     break;
49904                 case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Content:
49905                     if (offset <= scanner.getTokenEnd()) {
49906                         return collectInsideContent();
49907                     }
49908                     break;
49909                 default:
49910                     if (offset <= scanner.getTokenEnd()) {
49911                         return result;
49912                     }
49913                     break;
49914             }
49915             token = scanner.scan();
49916         }
49917         return result;
49918     };
49919     HTMLCompletion.prototype.doTagComplete = function (document, position, htmlDocument) {
49920         var offset = document.offsetAt(position);
49921         if (offset <= 0) {
49922             return null;
49923         }
49924         var char = document.getText().charAt(offset - 1);
49925         if (char === '>') {
49926             var node = htmlDocument.findNodeBefore(offset);
49927             if (node && node.tag && !(0,_languageFacts_fact__WEBPACK_IMPORTED_MODULE_5__.isVoidElement)(node.tag) && node.start < offset && (!node.endTagStart || node.endTagStart > offset)) {
49928                 var scanner = (0,_parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(document.getText(), node.start);
49929                 var token = scanner.scan();
49930                 while (token !== _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOS && scanner.getTokenEnd() <= offset) {
49931                     if (token === _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTagClose && scanner.getTokenEnd() === offset) {
49932                         return "$0</" + node.tag + ">";
49933                     }
49934                     token = scanner.scan();
49935                 }
49936             }
49937         }
49938         else if (char === '/') {
49939             var node = htmlDocument.findNodeBefore(offset);
49940             while (node && node.closed) {
49941                 node = node.parent;
49942             }
49943             if (node && node.tag) {
49944                 var scanner = (0,_parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(document.getText(), node.start);
49945                 var token = scanner.scan();
49946                 while (token !== _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOS && scanner.getTokenEnd() <= offset) {
49947                     if (token === _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndTagOpen && scanner.getTokenEnd() === offset) {
49948                         return node.tag + ">";
49949                     }
49950                     token = scanner.scan();
49951                 }
49952             }
49953         }
49954         return null;
49955     };
49956     HTMLCompletion.prototype.convertCompletionList = function (list) {
49957         if (!this.doesSupportMarkdown()) {
49958             list.items.forEach(function (item) {
49959                 if (item.documentation && typeof item.documentation !== 'string') {
49960                     item.documentation = {
49961                         kind: 'plaintext',
49962                         value: item.documentation.value
49963                     };
49964                 }
49965             });
49966         }
49967         return list;
49968     };
49969     HTMLCompletion.prototype.doesSupportMarkdown = function () {
49970         var _a, _b, _c;
49971         if (!(0,_utils_object__WEBPACK_IMPORTED_MODULE_6__.isDefined)(this.supportsMarkdown)) {
49972             if (!(0,_utils_object__WEBPACK_IMPORTED_MODULE_6__.isDefined)(this.lsOptions.clientCapabilities)) {
49973                 this.supportsMarkdown = true;
49974                 return this.supportsMarkdown;
49975             }
49976             var documentationFormat = (_c = (_b = (_a = this.lsOptions.clientCapabilities.textDocument) === null || _a === void 0 ? void 0 : _a.completion) === null || _b === void 0 ? void 0 : _b.completionItem) === null || _c === void 0 ? void 0 : _c.documentationFormat;
49977             this.supportsMarkdown = Array.isArray(documentationFormat) && documentationFormat.indexOf(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.MarkupKind.Markdown) !== -1;
49978         }
49979         return this.supportsMarkdown;
49980     };
49981     return HTMLCompletion;
49982 }());
49983
49984 function isQuote(s) {
49985     return /^["']*$/.test(s);
49986 }
49987 function isWhiteSpace(s) {
49988     return /^\s*$/.test(s);
49989 }
49990 function isFollowedBy(s, offset, intialState, expectedToken) {
49991     var scanner = (0,_parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(s, offset, intialState);
49992     var token = scanner.scan();
49993     while (token === _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.Whitespace) {
49994         token = scanner.scan();
49995     }
49996     return token === expectedToken;
49997 }
49998 function getWordStart(s, offset, limit) {
49999     while (offset > limit && !isWhiteSpace(s[offset - 1])) {
50000         offset--;
50001     }
50002     return offset;
50003 }
50004 function getWordEnd(s, offset, limit) {
50005     while (offset < limit && !isWhiteSpace(s[offset])) {
50006         offset++;
50007     }
50008     return offset;
50009 }
50010
50011
50012 /***/ }),
50013 /* 123 */
50014 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
50015
50016 __webpack_require__.r(__webpack_exports__);
50017 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
50018 /* harmony export */   "entities": () => /* binding */ entities
50019 /* harmony export */ });
50020 /*---------------------------------------------------------------------------------------------
50021  *  Copyright (c) Microsoft Corporation. All rights reserved.
50022  *  Licensed under the MIT License. See License.txt in the project root for license information.
50023  *--------------------------------------------------------------------------------------------*/
50024 /**
50025  * HTML 5 character entities
50026  * https://www.w3.org/TR/html5/syntax.html#named-character-references
50027  */
50028 var entities = {
50029     "Aacute;": "\u00C1",
50030     "Aacute": "\u00C1",
50031     "aacute;": "\u00E1",
50032     "aacute": "\u00E1",
50033     "Abreve;": "\u0102",
50034     "abreve;": "\u0103",
50035     "ac;": "\u223E",
50036     "acd;": "\u223F",
50037     "acE;": "\u223E\u0333",
50038     "Acirc;": "\u00C2",
50039     "Acirc": "\u00C2",
50040     "acirc;": "\u00E2",
50041     "acirc": "\u00E2",
50042     "acute;": "\u00B4",
50043     "acute": "\u00B4",
50044     "Acy;": "\u0410",
50045     "acy;": "\u0430",
50046     "AElig;": "\u00C6",
50047     "AElig": "\u00C6",
50048     "aelig;": "\u00E6",
50049     "aelig": "\u00E6",
50050     "af;": "\u2061",
50051     "Afr;": "\uD835\uDD04",
50052     "afr;": "\uD835\uDD1E",
50053     "Agrave;": "\u00C0",
50054     "Agrave": "\u00C0",
50055     "agrave;": "\u00E0",
50056     "agrave": "\u00E0",
50057     "alefsym;": "\u2135",
50058     "aleph;": "\u2135",
50059     "Alpha;": "\u0391",
50060     "alpha;": "\u03B1",
50061     "Amacr;": "\u0100",
50062     "amacr;": "\u0101",
50063     "amalg;": "\u2A3F",
50064     "AMP;": "\u0026",
50065     "AMP": "\u0026",
50066     "amp;": "\u0026",
50067     "amp": "\u0026",
50068     "And;": "\u2A53",
50069     "and;": "\u2227",
50070     "andand;": "\u2A55",
50071     "andd;": "\u2A5C",
50072     "andslope;": "\u2A58",
50073     "andv;": "\u2A5A",
50074     "ang;": "\u2220",
50075     "ange;": "\u29A4",
50076     "angle;": "\u2220",
50077     "angmsd;": "\u2221",
50078     "angmsdaa;": "\u29A8",
50079     "angmsdab;": "\u29A9",
50080     "angmsdac;": "\u29AA",
50081     "angmsdad;": "\u29AB",
50082     "angmsdae;": "\u29AC",
50083     "angmsdaf;": "\u29AD",
50084     "angmsdag;": "\u29AE",
50085     "angmsdah;": "\u29AF",
50086     "angrt;": "\u221F",
50087     "angrtvb;": "\u22BE",
50088     "angrtvbd;": "\u299D",
50089     "angsph;": "\u2222",
50090     "angst;": "\u00C5",
50091     "angzarr;": "\u237C",
50092     "Aogon;": "\u0104",
50093     "aogon;": "\u0105",
50094     "Aopf;": "\uD835\uDD38",
50095     "aopf;": "\uD835\uDD52",
50096     "ap;": "\u2248",
50097     "apacir;": "\u2A6F",
50098     "apE;": "\u2A70",
50099     "ape;": "\u224A",
50100     "apid;": "\u224B",
50101     "apos;": "\u0027",
50102     "ApplyFunction;": "\u2061",
50103     "approx;": "\u2248",
50104     "approxeq;": "\u224A",
50105     "Aring;": "\u00C5",
50106     "Aring": "\u00C5",
50107     "aring;": "\u00E5",
50108     "aring": "\u00E5",
50109     "Ascr;": "\uD835\uDC9C",
50110     "ascr;": "\uD835\uDCB6",
50111     "Assign;": "\u2254",
50112     "ast;": "\u002A",
50113     "asymp;": "\u2248",
50114     "asympeq;": "\u224D",
50115     "Atilde;": "\u00C3",
50116     "Atilde": "\u00C3",
50117     "atilde;": "\u00E3",
50118     "atilde": "\u00E3",
50119     "Auml;": "\u00C4",
50120     "Auml": "\u00C4",
50121     "auml;": "\u00E4",
50122     "auml": "\u00E4",
50123     "awconint;": "\u2233",
50124     "awint;": "\u2A11",
50125     "backcong;": "\u224C",
50126     "backepsilon;": "\u03F6",
50127     "backprime;": "\u2035",
50128     "backsim;": "\u223D",
50129     "backsimeq;": "\u22CD",
50130     "Backslash;": "\u2216",
50131     "Barv;": "\u2AE7",
50132     "barvee;": "\u22BD",
50133     "Barwed;": "\u2306",
50134     "barwed;": "\u2305",
50135     "barwedge;": "\u2305",
50136     "bbrk;": "\u23B5",
50137     "bbrktbrk;": "\u23B6",
50138     "bcong;": "\u224C",
50139     "Bcy;": "\u0411",
50140     "bcy;": "\u0431",
50141     "bdquo;": "\u201E",
50142     "becaus;": "\u2235",
50143     "Because;": "\u2235",
50144     "because;": "\u2235",
50145     "bemptyv;": "\u29B0",
50146     "bepsi;": "\u03F6",
50147     "bernou;": "\u212C",
50148     "Bernoullis;": "\u212C",
50149     "Beta;": "\u0392",
50150     "beta;": "\u03B2",
50151     "beth;": "\u2136",
50152     "between;": "\u226C",
50153     "Bfr;": "\uD835\uDD05",
50154     "bfr;": "\uD835\uDD1F",
50155     "bigcap;": "\u22C2",
50156     "bigcirc;": "\u25EF",
50157     "bigcup;": "\u22C3",
50158     "bigodot;": "\u2A00",
50159     "bigoplus;": "\u2A01",
50160     "bigotimes;": "\u2A02",
50161     "bigsqcup;": "\u2A06",
50162     "bigstar;": "\u2605",
50163     "bigtriangledown;": "\u25BD",
50164     "bigtriangleup;": "\u25B3",
50165     "biguplus;": "\u2A04",
50166     "bigvee;": "\u22C1",
50167     "bigwedge;": "\u22C0",
50168     "bkarow;": "\u290D",
50169     "blacklozenge;": "\u29EB",
50170     "blacksquare;": "\u25AA",
50171     "blacktriangle;": "\u25B4",
50172     "blacktriangledown;": "\u25BE",
50173     "blacktriangleleft;": "\u25C2",
50174     "blacktriangleright;": "\u25B8",
50175     "blank;": "\u2423",
50176     "blk12;": "\u2592",
50177     "blk14;": "\u2591",
50178     "blk34;": "\u2593",
50179     "block;": "\u2588",
50180     "bne;": "\u003D\u20E5",
50181     "bnequiv;": "\u2261\u20E5",
50182     "bNot;": "\u2AED",
50183     "bnot;": "\u2310",
50184     "Bopf;": "\uD835\uDD39",
50185     "bopf;": "\uD835\uDD53",
50186     "bot;": "\u22A5",
50187     "bottom;": "\u22A5",
50188     "bowtie;": "\u22C8",
50189     "boxbox;": "\u29C9",
50190     "boxDL;": "\u2557",
50191     "boxDl;": "\u2556",
50192     "boxdL;": "\u2555",
50193     "boxdl;": "\u2510",
50194     "boxDR;": "\u2554",
50195     "boxDr;": "\u2553",
50196     "boxdR;": "\u2552",
50197     "boxdr;": "\u250C",
50198     "boxH;": "\u2550",
50199     "boxh;": "\u2500",
50200     "boxHD;": "\u2566",
50201     "boxHd;": "\u2564",
50202     "boxhD;": "\u2565",
50203     "boxhd;": "\u252C",
50204     "boxHU;": "\u2569",
50205     "boxHu;": "\u2567",
50206     "boxhU;": "\u2568",
50207     "boxhu;": "\u2534",
50208     "boxminus;": "\u229F",
50209     "boxplus;": "\u229E",
50210     "boxtimes;": "\u22A0",
50211     "boxUL;": "\u255D",
50212     "boxUl;": "\u255C",
50213     "boxuL;": "\u255B",
50214     "boxul;": "\u2518",
50215     "boxUR;": "\u255A",
50216     "boxUr;": "\u2559",
50217     "boxuR;": "\u2558",
50218     "boxur;": "\u2514",
50219     "boxV;": "\u2551",
50220     "boxv;": "\u2502",
50221     "boxVH;": "\u256C",
50222     "boxVh;": "\u256B",
50223     "boxvH;": "\u256A",
50224     "boxvh;": "\u253C",
50225     "boxVL;": "\u2563",
50226     "boxVl;": "\u2562",
50227     "boxvL;": "\u2561",
50228     "boxvl;": "\u2524",
50229     "boxVR;": "\u2560",
50230     "boxVr;": "\u255F",
50231     "boxvR;": "\u255E",
50232     "boxvr;": "\u251C",
50233     "bprime;": "\u2035",
50234     "Breve;": "\u02D8",
50235     "breve;": "\u02D8",
50236     "brvbar;": "\u00A6",
50237     "brvbar": "\u00A6",
50238     "Bscr;": "\u212C",
50239     "bscr;": "\uD835\uDCB7",
50240     "bsemi;": "\u204F",
50241     "bsim;": "\u223D",
50242     "bsime;": "\u22CD",
50243     "bsol;": "\u005C",
50244     "bsolb;": "\u29C5",
50245     "bsolhsub;": "\u27C8",
50246     "bull;": "\u2022",
50247     "bullet;": "\u2022",
50248     "bump;": "\u224E",
50249     "bumpE;": "\u2AAE",
50250     "bumpe;": "\u224F",
50251     "Bumpeq;": "\u224E",
50252     "bumpeq;": "\u224F",
50253     "Cacute;": "\u0106",
50254     "cacute;": "\u0107",
50255     "Cap;": "\u22D2",
50256     "cap;": "\u2229",
50257     "capand;": "\u2A44",
50258     "capbrcup;": "\u2A49",
50259     "capcap;": "\u2A4B",
50260     "capcup;": "\u2A47",
50261     "capdot;": "\u2A40",
50262     "CapitalDifferentialD;": "\u2145",
50263     "caps;": "\u2229\uFE00",
50264     "caret;": "\u2041",
50265     "caron;": "\u02C7",
50266     "Cayleys;": "\u212D",
50267     "ccaps;": "\u2A4D",
50268     "Ccaron;": "\u010C",
50269     "ccaron;": "\u010D",
50270     "Ccedil;": "\u00C7",
50271     "Ccedil": "\u00C7",
50272     "ccedil;": "\u00E7",
50273     "ccedil": "\u00E7",
50274     "Ccirc;": "\u0108",
50275     "ccirc;": "\u0109",
50276     "Cconint;": "\u2230",
50277     "ccups;": "\u2A4C",
50278     "ccupssm;": "\u2A50",
50279     "Cdot;": "\u010A",
50280     "cdot;": "\u010B",
50281     "cedil;": "\u00B8",
50282     "cedil": "\u00B8",
50283     "Cedilla;": "\u00B8",
50284     "cemptyv;": "\u29B2",
50285     "cent;": "\u00A2",
50286     "cent": "\u00A2",
50287     "CenterDot;": "\u00B7",
50288     "centerdot;": "\u00B7",
50289     "Cfr;": "\u212D",
50290     "cfr;": "\uD835\uDD20",
50291     "CHcy;": "\u0427",
50292     "chcy;": "\u0447",
50293     "check;": "\u2713",
50294     "checkmark;": "\u2713",
50295     "Chi;": "\u03A7",
50296     "chi;": "\u03C7",
50297     "cir;": "\u25CB",
50298     "circ;": "\u02C6",
50299     "circeq;": "\u2257",
50300     "circlearrowleft;": "\u21BA",
50301     "circlearrowright;": "\u21BB",
50302     "circledast;": "\u229B",
50303     "circledcirc;": "\u229A",
50304     "circleddash;": "\u229D",
50305     "CircleDot;": "\u2299",
50306     "circledR;": "\u00AE",
50307     "circledS;": "\u24C8",
50308     "CircleMinus;": "\u2296",
50309     "CirclePlus;": "\u2295",
50310     "CircleTimes;": "\u2297",
50311     "cirE;": "\u29C3",
50312     "cire;": "\u2257",
50313     "cirfnint;": "\u2A10",
50314     "cirmid;": "\u2AEF",
50315     "cirscir;": "\u29C2",
50316     "ClockwiseContourIntegral;": "\u2232",
50317     "CloseCurlyDoubleQuote;": "\u201D",
50318     "CloseCurlyQuote;": "\u2019",
50319     "clubs;": "\u2663",
50320     "clubsuit;": "\u2663",
50321     "Colon;": "\u2237",
50322     "colon;": "\u003A",
50323     "Colone;": "\u2A74",
50324     "colone;": "\u2254",
50325     "coloneq;": "\u2254",
50326     "comma;": "\u002C",
50327     "commat;": "\u0040",
50328     "comp;": "\u2201",
50329     "compfn;": "\u2218",
50330     "complement;": "\u2201",
50331     "complexes;": "\u2102",
50332     "cong;": "\u2245",
50333     "congdot;": "\u2A6D",
50334     "Congruent;": "\u2261",
50335     "Conint;": "\u222F",
50336     "conint;": "\u222E",
50337     "ContourIntegral;": "\u222E",
50338     "Copf;": "\u2102",
50339     "copf;": "\uD835\uDD54",
50340     "coprod;": "\u2210",
50341     "Coproduct;": "\u2210",
50342     "COPY;": "\u00A9",
50343     "COPY": "\u00A9",
50344     "copy;": "\u00A9",
50345     "copy": "\u00A9",
50346     "copysr;": "\u2117",
50347     "CounterClockwiseContourIntegral;": "\u2233",
50348     "crarr;": "\u21B5",
50349     "Cross;": "\u2A2F",
50350     "cross;": "\u2717",
50351     "Cscr;": "\uD835\uDC9E",
50352     "cscr;": "\uD835\uDCB8",
50353     "csub;": "\u2ACF",
50354     "csube;": "\u2AD1",
50355     "csup;": "\u2AD0",
50356     "csupe;": "\u2AD2",
50357     "ctdot;": "\u22EF",
50358     "cudarrl;": "\u2938",
50359     "cudarrr;": "\u2935",
50360     "cuepr;": "\u22DE",
50361     "cuesc;": "\u22DF",
50362     "cularr;": "\u21B6",
50363     "cularrp;": "\u293D",
50364     "Cup;": "\u22D3",
50365     "cup;": "\u222A",
50366     "cupbrcap;": "\u2A48",
50367     "CupCap;": "\u224D",
50368     "cupcap;": "\u2A46",
50369     "cupcup;": "\u2A4A",
50370     "cupdot;": "\u228D",
50371     "cupor;": "\u2A45",
50372     "cups;": "\u222A\uFE00",
50373     "curarr;": "\u21B7",
50374     "curarrm;": "\u293C",
50375     "curlyeqprec;": "\u22DE",
50376     "curlyeqsucc;": "\u22DF",
50377     "curlyvee;": "\u22CE",
50378     "curlywedge;": "\u22CF",
50379     "curren;": "\u00A4",
50380     "curren": "\u00A4",
50381     "curvearrowleft;": "\u21B6",
50382     "curvearrowright;": "\u21B7",
50383     "cuvee;": "\u22CE",
50384     "cuwed;": "\u22CF",
50385     "cwconint;": "\u2232",
50386     "cwint;": "\u2231",
50387     "cylcty;": "\u232D",
50388     "Dagger;": "\u2021",
50389     "dagger;": "\u2020",
50390     "daleth;": "\u2138",
50391     "Darr;": "\u21A1",
50392     "dArr;": "\u21D3",
50393     "darr;": "\u2193",
50394     "dash;": "\u2010",
50395     "Dashv;": "\u2AE4",
50396     "dashv;": "\u22A3",
50397     "dbkarow;": "\u290F",
50398     "dblac;": "\u02DD",
50399     "Dcaron;": "\u010E",
50400     "dcaron;": "\u010F",
50401     "Dcy;": "\u0414",
50402     "dcy;": "\u0434",
50403     "DD;": "\u2145",
50404     "dd;": "\u2146",
50405     "ddagger;": "\u2021",
50406     "ddarr;": "\u21CA",
50407     "DDotrahd;": "\u2911",
50408     "ddotseq;": "\u2A77",
50409     "deg;": "\u00B0",
50410     "deg": "\u00B0",
50411     "Del;": "\u2207",
50412     "Delta;": "\u0394",
50413     "delta;": "\u03B4",
50414     "demptyv;": "\u29B1",
50415     "dfisht;": "\u297F",
50416     "Dfr;": "\uD835\uDD07",
50417     "dfr;": "\uD835\uDD21",
50418     "dHar;": "\u2965",
50419     "dharl;": "\u21C3",
50420     "dharr;": "\u21C2",
50421     "DiacriticalAcute;": "\u00B4",
50422     "DiacriticalDot;": "\u02D9",
50423     "DiacriticalDoubleAcute;": "\u02DD",
50424     "DiacriticalGrave;": "\u0060",
50425     "DiacriticalTilde;": "\u02DC",
50426     "diam;": "\u22C4",
50427     "Diamond;": "\u22C4",
50428     "diamond;": "\u22C4",
50429     "diamondsuit;": "\u2666",
50430     "diams;": "\u2666",
50431     "die;": "\u00A8",
50432     "DifferentialD;": "\u2146",
50433     "digamma;": "\u03DD",
50434     "disin;": "\u22F2",
50435     "div;": "\u00F7",
50436     "divide;": "\u00F7",
50437     "divide": "\u00F7",
50438     "divideontimes;": "\u22C7",
50439     "divonx;": "\u22C7",
50440     "DJcy;": "\u0402",
50441     "djcy;": "\u0452",
50442     "dlcorn;": "\u231E",
50443     "dlcrop;": "\u230D",
50444     "dollar;": "\u0024",
50445     "Dopf;": "\uD835\uDD3B",
50446     "dopf;": "\uD835\uDD55",
50447     "Dot;": "\u00A8",
50448     "dot;": "\u02D9",
50449     "DotDot;": "\u20DC",
50450     "doteq;": "\u2250",
50451     "doteqdot;": "\u2251",
50452     "DotEqual;": "\u2250",
50453     "dotminus;": "\u2238",
50454     "dotplus;": "\u2214",
50455     "dotsquare;": "\u22A1",
50456     "doublebarwedge;": "\u2306",
50457     "DoubleContourIntegral;": "\u222F",
50458     "DoubleDot;": "\u00A8",
50459     "DoubleDownArrow;": "\u21D3",
50460     "DoubleLeftArrow;": "\u21D0",
50461     "DoubleLeftRightArrow;": "\u21D4",
50462     "DoubleLeftTee;": "\u2AE4",
50463     "DoubleLongLeftArrow;": "\u27F8",
50464     "DoubleLongLeftRightArrow;": "\u27FA",
50465     "DoubleLongRightArrow;": "\u27F9",
50466     "DoubleRightArrow;": "\u21D2",
50467     "DoubleRightTee;": "\u22A8",
50468     "DoubleUpArrow;": "\u21D1",
50469     "DoubleUpDownArrow;": "\u21D5",
50470     "DoubleVerticalBar;": "\u2225",
50471     "DownArrow;": "\u2193",
50472     "Downarrow;": "\u21D3",
50473     "downarrow;": "\u2193",
50474     "DownArrowBar;": "\u2913",
50475     "DownArrowUpArrow;": "\u21F5",
50476     "DownBreve;": "\u0311",
50477     "downdownarrows;": "\u21CA",
50478     "downharpoonleft;": "\u21C3",
50479     "downharpoonright;": "\u21C2",
50480     "DownLeftRightVector;": "\u2950",
50481     "DownLeftTeeVector;": "\u295E",
50482     "DownLeftVector;": "\u21BD",
50483     "DownLeftVectorBar;": "\u2956",
50484     "DownRightTeeVector;": "\u295F",
50485     "DownRightVector;": "\u21C1",
50486     "DownRightVectorBar;": "\u2957",
50487     "DownTee;": "\u22A4",
50488     "DownTeeArrow;": "\u21A7",
50489     "drbkarow;": "\u2910",
50490     "drcorn;": "\u231F",
50491     "drcrop;": "\u230C",
50492     "Dscr;": "\uD835\uDC9F",
50493     "dscr;": "\uD835\uDCB9",
50494     "DScy;": "\u0405",
50495     "dscy;": "\u0455",
50496     "dsol;": "\u29F6",
50497     "Dstrok;": "\u0110",
50498     "dstrok;": "\u0111",
50499     "dtdot;": "\u22F1",
50500     "dtri;": "\u25BF",
50501     "dtrif;": "\u25BE",
50502     "duarr;": "\u21F5",
50503     "duhar;": "\u296F",
50504     "dwangle;": "\u29A6",
50505     "DZcy;": "\u040F",
50506     "dzcy;": "\u045F",
50507     "dzigrarr;": "\u27FF",
50508     "Eacute;": "\u00C9",
50509     "Eacute": "\u00C9",
50510     "eacute;": "\u00E9",
50511     "eacute": "\u00E9",
50512     "easter;": "\u2A6E",
50513     "Ecaron;": "\u011A",
50514     "ecaron;": "\u011B",
50515     "ecir;": "\u2256",
50516     "Ecirc;": "\u00CA",
50517     "Ecirc": "\u00CA",
50518     "ecirc;": "\u00EA",
50519     "ecirc": "\u00EA",
50520     "ecolon;": "\u2255",
50521     "Ecy;": "\u042D",
50522     "ecy;": "\u044D",
50523     "eDDot;": "\u2A77",
50524     "Edot;": "\u0116",
50525     "eDot;": "\u2251",
50526     "edot;": "\u0117",
50527     "ee;": "\u2147",
50528     "efDot;": "\u2252",
50529     "Efr;": "\uD835\uDD08",
50530     "efr;": "\uD835\uDD22",
50531     "eg;": "\u2A9A",
50532     "Egrave;": "\u00C8",
50533     "Egrave": "\u00C8",
50534     "egrave;": "\u00E8",
50535     "egrave": "\u00E8",
50536     "egs;": "\u2A96",
50537     "egsdot;": "\u2A98",
50538     "el;": "\u2A99",
50539     "Element;": "\u2208",
50540     "elinters;": "\u23E7",
50541     "ell;": "\u2113",
50542     "els;": "\u2A95",
50543     "elsdot;": "\u2A97",
50544     "Emacr;": "\u0112",
50545     "emacr;": "\u0113",
50546     "empty;": "\u2205",
50547     "emptyset;": "\u2205",
50548     "EmptySmallSquare;": "\u25FB",
50549     "emptyv;": "\u2205",
50550     "EmptyVerySmallSquare;": "\u25AB",
50551     "emsp;": "\u2003",
50552     "emsp13;": "\u2004",
50553     "emsp14;": "\u2005",
50554     "ENG;": "\u014A",
50555     "eng;": "\u014B",
50556     "ensp;": "\u2002",
50557     "Eogon;": "\u0118",
50558     "eogon;": "\u0119",
50559     "Eopf;": "\uD835\uDD3C",
50560     "eopf;": "\uD835\uDD56",
50561     "epar;": "\u22D5",
50562     "eparsl;": "\u29E3",
50563     "eplus;": "\u2A71",
50564     "epsi;": "\u03B5",
50565     "Epsilon;": "\u0395",
50566     "epsilon;": "\u03B5",
50567     "epsiv;": "\u03F5",
50568     "eqcirc;": "\u2256",
50569     "eqcolon;": "\u2255",
50570     "eqsim;": "\u2242",
50571     "eqslantgtr;": "\u2A96",
50572     "eqslantless;": "\u2A95",
50573     "Equal;": "\u2A75",
50574     "equals;": "\u003D",
50575     "EqualTilde;": "\u2242",
50576     "equest;": "\u225F",
50577     "Equilibrium;": "\u21CC",
50578     "equiv;": "\u2261",
50579     "equivDD;": "\u2A78",
50580     "eqvparsl;": "\u29E5",
50581     "erarr;": "\u2971",
50582     "erDot;": "\u2253",
50583     "Escr;": "\u2130",
50584     "escr;": "\u212F",
50585     "esdot;": "\u2250",
50586     "Esim;": "\u2A73",
50587     "esim;": "\u2242",
50588     "Eta;": "\u0397",
50589     "eta;": "\u03B7",
50590     "ETH;": "\u00D0",
50591     "ETH": "\u00D0",
50592     "eth;": "\u00F0",
50593     "eth": "\u00F0",
50594     "Euml;": "\u00CB",
50595     "Euml": "\u00CB",
50596     "euml;": "\u00EB",
50597     "euml": "\u00EB",
50598     "euro;": "\u20AC",
50599     "excl;": "\u0021",
50600     "exist;": "\u2203",
50601     "Exists;": "\u2203",
50602     "expectation;": "\u2130",
50603     "ExponentialE;": "\u2147",
50604     "exponentiale;": "\u2147",
50605     "fallingdotseq;": "\u2252",
50606     "Fcy;": "\u0424",
50607     "fcy;": "\u0444",
50608     "female;": "\u2640",
50609     "ffilig;": "\uFB03",
50610     "fflig;": "\uFB00",
50611     "ffllig;": "\uFB04",
50612     "Ffr;": "\uD835\uDD09",
50613     "ffr;": "\uD835\uDD23",
50614     "filig;": "\uFB01",
50615     "FilledSmallSquare;": "\u25FC",
50616     "FilledVerySmallSquare;": "\u25AA",
50617     "fjlig;": "\u0066\u006A",
50618     "flat;": "\u266D",
50619     "fllig;": "\uFB02",
50620     "fltns;": "\u25B1",
50621     "fnof;": "\u0192",
50622     "Fopf;": "\uD835\uDD3D",
50623     "fopf;": "\uD835\uDD57",
50624     "ForAll;": "\u2200",
50625     "forall;": "\u2200",
50626     "fork;": "\u22D4",
50627     "forkv;": "\u2AD9",
50628     "Fouriertrf;": "\u2131",
50629     "fpartint;": "\u2A0D",
50630     "frac12;": "\u00BD",
50631     "frac12": "\u00BD",
50632     "frac13;": "\u2153",
50633     "frac14;": "\u00BC",
50634     "frac14": "\u00BC",
50635     "frac15;": "\u2155",
50636     "frac16;": "\u2159",
50637     "frac18;": "\u215B",
50638     "frac23;": "\u2154",
50639     "frac25;": "\u2156",
50640     "frac34;": "\u00BE",
50641     "frac34": "\u00BE",
50642     "frac35;": "\u2157",
50643     "frac38;": "\u215C",
50644     "frac45;": "\u2158",
50645     "frac56;": "\u215A",
50646     "frac58;": "\u215D",
50647     "frac78;": "\u215E",
50648     "frasl;": "\u2044",
50649     "frown;": "\u2322",
50650     "Fscr;": "\u2131",
50651     "fscr;": "\uD835\uDCBB",
50652     "gacute;": "\u01F5",
50653     "Gamma;": "\u0393",
50654     "gamma;": "\u03B3",
50655     "Gammad;": "\u03DC",
50656     "gammad;": "\u03DD",
50657     "gap;": "\u2A86",
50658     "Gbreve;": "\u011E",
50659     "gbreve;": "\u011F",
50660     "Gcedil;": "\u0122",
50661     "Gcirc;": "\u011C",
50662     "gcirc;": "\u011D",
50663     "Gcy;": "\u0413",
50664     "gcy;": "\u0433",
50665     "Gdot;": "\u0120",
50666     "gdot;": "\u0121",
50667     "gE;": "\u2267",
50668     "ge;": "\u2265",
50669     "gEl;": "\u2A8C",
50670     "gel;": "\u22DB",
50671     "geq;": "\u2265",
50672     "geqq;": "\u2267",
50673     "geqslant;": "\u2A7E",
50674     "ges;": "\u2A7E",
50675     "gescc;": "\u2AA9",
50676     "gesdot;": "\u2A80",
50677     "gesdoto;": "\u2A82",
50678     "gesdotol;": "\u2A84",
50679     "gesl;": "\u22DB\uFE00",
50680     "gesles;": "\u2A94",
50681     "Gfr;": "\uD835\uDD0A",
50682     "gfr;": "\uD835\uDD24",
50683     "Gg;": "\u22D9",
50684     "gg;": "\u226B",
50685     "ggg;": "\u22D9",
50686     "gimel;": "\u2137",
50687     "GJcy;": "\u0403",
50688     "gjcy;": "\u0453",
50689     "gl;": "\u2277",
50690     "gla;": "\u2AA5",
50691     "glE;": "\u2A92",
50692     "glj;": "\u2AA4",
50693     "gnap;": "\u2A8A",
50694     "gnapprox;": "\u2A8A",
50695     "gnE;": "\u2269",
50696     "gne;": "\u2A88",
50697     "gneq;": "\u2A88",
50698     "gneqq;": "\u2269",
50699     "gnsim;": "\u22E7",
50700     "Gopf;": "\uD835\uDD3E",
50701     "gopf;": "\uD835\uDD58",
50702     "grave;": "\u0060",
50703     "GreaterEqual;": "\u2265",
50704     "GreaterEqualLess;": "\u22DB",
50705     "GreaterFullEqual;": "\u2267",
50706     "GreaterGreater;": "\u2AA2",
50707     "GreaterLess;": "\u2277",
50708     "GreaterSlantEqual;": "\u2A7E",
50709     "GreaterTilde;": "\u2273",
50710     "Gscr;": "\uD835\uDCA2",
50711     "gscr;": "\u210A",
50712     "gsim;": "\u2273",
50713     "gsime;": "\u2A8E",
50714     "gsiml;": "\u2A90",
50715     "GT;": "\u003E",
50716     "GT": "\u003E",
50717     "Gt;": "\u226B",
50718     "gt;": "\u003E",
50719     "gt": "\u003E",
50720     "gtcc;": "\u2AA7",
50721     "gtcir;": "\u2A7A",
50722     "gtdot;": "\u22D7",
50723     "gtlPar;": "\u2995",
50724     "gtquest;": "\u2A7C",
50725     "gtrapprox;": "\u2A86",
50726     "gtrarr;": "\u2978",
50727     "gtrdot;": "\u22D7",
50728     "gtreqless;": "\u22DB",
50729     "gtreqqless;": "\u2A8C",
50730     "gtrless;": "\u2277",
50731     "gtrsim;": "\u2273",
50732     "gvertneqq;": "\u2269\uFE00",
50733     "gvnE;": "\u2269\uFE00",
50734     "Hacek;": "\u02C7",
50735     "hairsp;": "\u200A",
50736     "half;": "\u00BD",
50737     "hamilt;": "\u210B",
50738     "HARDcy;": "\u042A",
50739     "hardcy;": "\u044A",
50740     "hArr;": "\u21D4",
50741     "harr;": "\u2194",
50742     "harrcir;": "\u2948",
50743     "harrw;": "\u21AD",
50744     "Hat;": "\u005E",
50745     "hbar;": "\u210F",
50746     "Hcirc;": "\u0124",
50747     "hcirc;": "\u0125",
50748     "hearts;": "\u2665",
50749     "heartsuit;": "\u2665",
50750     "hellip;": "\u2026",
50751     "hercon;": "\u22B9",
50752     "Hfr;": "\u210C",
50753     "hfr;": "\uD835\uDD25",
50754     "HilbertSpace;": "\u210B",
50755     "hksearow;": "\u2925",
50756     "hkswarow;": "\u2926",
50757     "hoarr;": "\u21FF",
50758     "homtht;": "\u223B",
50759     "hookleftarrow;": "\u21A9",
50760     "hookrightarrow;": "\u21AA",
50761     "Hopf;": "\u210D",
50762     "hopf;": "\uD835\uDD59",
50763     "horbar;": "\u2015",
50764     "HorizontalLine;": "\u2500",
50765     "Hscr;": "\u210B",
50766     "hscr;": "\uD835\uDCBD",
50767     "hslash;": "\u210F",
50768     "Hstrok;": "\u0126",
50769     "hstrok;": "\u0127",
50770     "HumpDownHump;": "\u224E",
50771     "HumpEqual;": "\u224F",
50772     "hybull;": "\u2043",
50773     "hyphen;": "\u2010",
50774     "Iacute;": "\u00CD",
50775     "Iacute": "\u00CD",
50776     "iacute;": "\u00ED",
50777     "iacute": "\u00ED",
50778     "ic;": "\u2063",
50779     "Icirc;": "\u00CE",
50780     "Icirc": "\u00CE",
50781     "icirc;": "\u00EE",
50782     "icirc": "\u00EE",
50783     "Icy;": "\u0418",
50784     "icy;": "\u0438",
50785     "Idot;": "\u0130",
50786     "IEcy;": "\u0415",
50787     "iecy;": "\u0435",
50788     "iexcl;": "\u00A1",
50789     "iexcl": "\u00A1",
50790     "iff;": "\u21D4",
50791     "Ifr;": "\u2111",
50792     "ifr;": "\uD835\uDD26",
50793     "Igrave;": "\u00CC",
50794     "Igrave": "\u00CC",
50795     "igrave;": "\u00EC",
50796     "igrave": "\u00EC",
50797     "ii;": "\u2148",
50798     "iiiint;": "\u2A0C",
50799     "iiint;": "\u222D",
50800     "iinfin;": "\u29DC",
50801     "iiota;": "\u2129",
50802     "IJlig;": "\u0132",
50803     "ijlig;": "\u0133",
50804     "Im;": "\u2111",
50805     "Imacr;": "\u012A",
50806     "imacr;": "\u012B",
50807     "image;": "\u2111",
50808     "ImaginaryI;": "\u2148",
50809     "imagline;": "\u2110",
50810     "imagpart;": "\u2111",
50811     "imath;": "\u0131",
50812     "imof;": "\u22B7",
50813     "imped;": "\u01B5",
50814     "Implies;": "\u21D2",
50815     "in;": "\u2208",
50816     "incare;": "\u2105",
50817     "infin;": "\u221E",
50818     "infintie;": "\u29DD",
50819     "inodot;": "\u0131",
50820     "Int;": "\u222C",
50821     "int;": "\u222B",
50822     "intcal;": "\u22BA",
50823     "integers;": "\u2124",
50824     "Integral;": "\u222B",
50825     "intercal;": "\u22BA",
50826     "Intersection;": "\u22C2",
50827     "intlarhk;": "\u2A17",
50828     "intprod;": "\u2A3C",
50829     "InvisibleComma;": "\u2063",
50830     "InvisibleTimes;": "\u2062",
50831     "IOcy;": "\u0401",
50832     "iocy;": "\u0451",
50833     "Iogon;": "\u012E",
50834     "iogon;": "\u012F",
50835     "Iopf;": "\uD835\uDD40",
50836     "iopf;": "\uD835\uDD5A",
50837     "Iota;": "\u0399",
50838     "iota;": "\u03B9",
50839     "iprod;": "\u2A3C",
50840     "iquest;": "\u00BF",
50841     "iquest": "\u00BF",
50842     "Iscr;": "\u2110",
50843     "iscr;": "\uD835\uDCBE",
50844     "isin;": "\u2208",
50845     "isindot;": "\u22F5",
50846     "isinE;": "\u22F9",
50847     "isins;": "\u22F4",
50848     "isinsv;": "\u22F3",
50849     "isinv;": "\u2208",
50850     "it;": "\u2062",
50851     "Itilde;": "\u0128",
50852     "itilde;": "\u0129",
50853     "Iukcy;": "\u0406",
50854     "iukcy;": "\u0456",
50855     "Iuml;": "\u00CF",
50856     "Iuml": "\u00CF",
50857     "iuml;": "\u00EF",
50858     "iuml": "\u00EF",
50859     "Jcirc;": "\u0134",
50860     "jcirc;": "\u0135",
50861     "Jcy;": "\u0419",
50862     "jcy;": "\u0439",
50863     "Jfr;": "\uD835\uDD0D",
50864     "jfr;": "\uD835\uDD27",
50865     "jmath;": "\u0237",
50866     "Jopf;": "\uD835\uDD41",
50867     "jopf;": "\uD835\uDD5B",
50868     "Jscr;": "\uD835\uDCA5",
50869     "jscr;": "\uD835\uDCBF",
50870     "Jsercy;": "\u0408",
50871     "jsercy;": "\u0458",
50872     "Jukcy;": "\u0404",
50873     "jukcy;": "\u0454",
50874     "Kappa;": "\u039A",
50875     "kappa;": "\u03BA",
50876     "kappav;": "\u03F0",
50877     "Kcedil;": "\u0136",
50878     "kcedil;": "\u0137",
50879     "Kcy;": "\u041A",
50880     "kcy;": "\u043A",
50881     "Kfr;": "\uD835\uDD0E",
50882     "kfr;": "\uD835\uDD28",
50883     "kgreen;": "\u0138",
50884     "KHcy;": "\u0425",
50885     "khcy;": "\u0445",
50886     "KJcy;": "\u040C",
50887     "kjcy;": "\u045C",
50888     "Kopf;": "\uD835\uDD42",
50889     "kopf;": "\uD835\uDD5C",
50890     "Kscr;": "\uD835\uDCA6",
50891     "kscr;": "\uD835\uDCC0",
50892     "lAarr;": "\u21DA",
50893     "Lacute;": "\u0139",
50894     "lacute;": "\u013A",
50895     "laemptyv;": "\u29B4",
50896     "lagran;": "\u2112",
50897     "Lambda;": "\u039B",
50898     "lambda;": "\u03BB",
50899     "Lang;": "\u27EA",
50900     "lang;": "\u27E8",
50901     "langd;": "\u2991",
50902     "langle;": "\u27E8",
50903     "lap;": "\u2A85",
50904     "Laplacetrf;": "\u2112",
50905     "laquo;": "\u00AB",
50906     "laquo": "\u00AB",
50907     "Larr;": "\u219E",
50908     "lArr;": "\u21D0",
50909     "larr;": "\u2190",
50910     "larrb;": "\u21E4",
50911     "larrbfs;": "\u291F",
50912     "larrfs;": "\u291D",
50913     "larrhk;": "\u21A9",
50914     "larrlp;": "\u21AB",
50915     "larrpl;": "\u2939",
50916     "larrsim;": "\u2973",
50917     "larrtl;": "\u21A2",
50918     "lat;": "\u2AAB",
50919     "lAtail;": "\u291B",
50920     "latail;": "\u2919",
50921     "late;": "\u2AAD",
50922     "lates;": "\u2AAD\uFE00",
50923     "lBarr;": "\u290E",
50924     "lbarr;": "\u290C",
50925     "lbbrk;": "\u2772",
50926     "lbrace;": "\u007B",
50927     "lbrack;": "\u005B",
50928     "lbrke;": "\u298B",
50929     "lbrksld;": "\u298F",
50930     "lbrkslu;": "\u298D",
50931     "Lcaron;": "\u013D",
50932     "lcaron;": "\u013E",
50933     "Lcedil;": "\u013B",
50934     "lcedil;": "\u013C",
50935     "lceil;": "\u2308",
50936     "lcub;": "\u007B",
50937     "Lcy;": "\u041B",
50938     "lcy;": "\u043B",
50939     "ldca;": "\u2936",
50940     "ldquo;": "\u201C",
50941     "ldquor;": "\u201E",
50942     "ldrdhar;": "\u2967",
50943     "ldrushar;": "\u294B",
50944     "ldsh;": "\u21B2",
50945     "lE;": "\u2266",
50946     "le;": "\u2264",
50947     "LeftAngleBracket;": "\u27E8",
50948     "LeftArrow;": "\u2190",
50949     "Leftarrow;": "\u21D0",
50950     "leftarrow;": "\u2190",
50951     "LeftArrowBar;": "\u21E4",
50952     "LeftArrowRightArrow;": "\u21C6",
50953     "leftarrowtail;": "\u21A2",
50954     "LeftCeiling;": "\u2308",
50955     "LeftDoubleBracket;": "\u27E6",
50956     "LeftDownTeeVector;": "\u2961",
50957     "LeftDownVector;": "\u21C3",
50958     "LeftDownVectorBar;": "\u2959",
50959     "LeftFloor;": "\u230A",
50960     "leftharpoondown;": "\u21BD",
50961     "leftharpoonup;": "\u21BC",
50962     "leftleftarrows;": "\u21C7",
50963     "LeftRightArrow;": "\u2194",
50964     "Leftrightarrow;": "\u21D4",
50965     "leftrightarrow;": "\u2194",
50966     "leftrightarrows;": "\u21C6",
50967     "leftrightharpoons;": "\u21CB",
50968     "leftrightsquigarrow;": "\u21AD",
50969     "LeftRightVector;": "\u294E",
50970     "LeftTee;": "\u22A3",
50971     "LeftTeeArrow;": "\u21A4",
50972     "LeftTeeVector;": "\u295A",
50973     "leftthreetimes;": "\u22CB",
50974     "LeftTriangle;": "\u22B2",
50975     "LeftTriangleBar;": "\u29CF",
50976     "LeftTriangleEqual;": "\u22B4",
50977     "LeftUpDownVector;": "\u2951",
50978     "LeftUpTeeVector;": "\u2960",
50979     "LeftUpVector;": "\u21BF",
50980     "LeftUpVectorBar;": "\u2958",
50981     "LeftVector;": "\u21BC",
50982     "LeftVectorBar;": "\u2952",
50983     "lEg;": "\u2A8B",
50984     "leg;": "\u22DA",
50985     "leq;": "\u2264",
50986     "leqq;": "\u2266",
50987     "leqslant;": "\u2A7D",
50988     "les;": "\u2A7D",
50989     "lescc;": "\u2AA8",
50990     "lesdot;": "\u2A7F",
50991     "lesdoto;": "\u2A81",
50992     "lesdotor;": "\u2A83",
50993     "lesg;": "\u22DA\uFE00",
50994     "lesges;": "\u2A93",
50995     "lessapprox;": "\u2A85",
50996     "lessdot;": "\u22D6",
50997     "lesseqgtr;": "\u22DA",
50998     "lesseqqgtr;": "\u2A8B",
50999     "LessEqualGreater;": "\u22DA",
51000     "LessFullEqual;": "\u2266",
51001     "LessGreater;": "\u2276",
51002     "lessgtr;": "\u2276",
51003     "LessLess;": "\u2AA1",
51004     "lesssim;": "\u2272",
51005     "LessSlantEqual;": "\u2A7D",
51006     "LessTilde;": "\u2272",
51007     "lfisht;": "\u297C",
51008     "lfloor;": "\u230A",
51009     "Lfr;": "\uD835\uDD0F",
51010     "lfr;": "\uD835\uDD29",
51011     "lg;": "\u2276",
51012     "lgE;": "\u2A91",
51013     "lHar;": "\u2962",
51014     "lhard;": "\u21BD",
51015     "lharu;": "\u21BC",
51016     "lharul;": "\u296A",
51017     "lhblk;": "\u2584",
51018     "LJcy;": "\u0409",
51019     "ljcy;": "\u0459",
51020     "Ll;": "\u22D8",
51021     "ll;": "\u226A",
51022     "llarr;": "\u21C7",
51023     "llcorner;": "\u231E",
51024     "Lleftarrow;": "\u21DA",
51025     "llhard;": "\u296B",
51026     "lltri;": "\u25FA",
51027     "Lmidot;": "\u013F",
51028     "lmidot;": "\u0140",
51029     "lmoust;": "\u23B0",
51030     "lmoustache;": "\u23B0",
51031     "lnap;": "\u2A89",
51032     "lnapprox;": "\u2A89",
51033     "lnE;": "\u2268",
51034     "lne;": "\u2A87",
51035     "lneq;": "\u2A87",
51036     "lneqq;": "\u2268",
51037     "lnsim;": "\u22E6",
51038     "loang;": "\u27EC",
51039     "loarr;": "\u21FD",
51040     "lobrk;": "\u27E6",
51041     "LongLeftArrow;": "\u27F5",
51042     "Longleftarrow;": "\u27F8",
51043     "longleftarrow;": "\u27F5",
51044     "LongLeftRightArrow;": "\u27F7",
51045     "Longleftrightarrow;": "\u27FA",
51046     "longleftrightarrow;": "\u27F7",
51047     "longmapsto;": "\u27FC",
51048     "LongRightArrow;": "\u27F6",
51049     "Longrightarrow;": "\u27F9",
51050     "longrightarrow;": "\u27F6",
51051     "looparrowleft;": "\u21AB",
51052     "looparrowright;": "\u21AC",
51053     "lopar;": "\u2985",
51054     "Lopf;": "\uD835\uDD43",
51055     "lopf;": "\uD835\uDD5D",
51056     "loplus;": "\u2A2D",
51057     "lotimes;": "\u2A34",
51058     "lowast;": "\u2217",
51059     "lowbar;": "\u005F",
51060     "LowerLeftArrow;": "\u2199",
51061     "LowerRightArrow;": "\u2198",
51062     "loz;": "\u25CA",
51063     "lozenge;": "\u25CA",
51064     "lozf;": "\u29EB",
51065     "lpar;": "\u0028",
51066     "lparlt;": "\u2993",
51067     "lrarr;": "\u21C6",
51068     "lrcorner;": "\u231F",
51069     "lrhar;": "\u21CB",
51070     "lrhard;": "\u296D",
51071     "lrm;": "\u200E",
51072     "lrtri;": "\u22BF",
51073     "lsaquo;": "\u2039",
51074     "Lscr;": "\u2112",
51075     "lscr;": "\uD835\uDCC1",
51076     "Lsh;": "\u21B0",
51077     "lsh;": "\u21B0",
51078     "lsim;": "\u2272",
51079     "lsime;": "\u2A8D",
51080     "lsimg;": "\u2A8F",
51081     "lsqb;": "\u005B",
51082     "lsquo;": "\u2018",
51083     "lsquor;": "\u201A",
51084     "Lstrok;": "\u0141",
51085     "lstrok;": "\u0142",
51086     "LT;": "\u003C",
51087     "LT": "\u003C",
51088     "Lt;": "\u226A",
51089     "lt;": "\u003C",
51090     "lt": "\u003C",
51091     "ltcc;": "\u2AA6",
51092     "ltcir;": "\u2A79",
51093     "ltdot;": "\u22D6",
51094     "lthree;": "\u22CB",
51095     "ltimes;": "\u22C9",
51096     "ltlarr;": "\u2976",
51097     "ltquest;": "\u2A7B",
51098     "ltri;": "\u25C3",
51099     "ltrie;": "\u22B4",
51100     "ltrif;": "\u25C2",
51101     "ltrPar;": "\u2996",
51102     "lurdshar;": "\u294A",
51103     "luruhar;": "\u2966",
51104     "lvertneqq;": "\u2268\uFE00",
51105     "lvnE;": "\u2268\uFE00",
51106     "macr;": "\u00AF",
51107     "macr": "\u00AF",
51108     "male;": "\u2642",
51109     "malt;": "\u2720",
51110     "maltese;": "\u2720",
51111     "Map;": "\u2905",
51112     "map;": "\u21A6",
51113     "mapsto;": "\u21A6",
51114     "mapstodown;": "\u21A7",
51115     "mapstoleft;": "\u21A4",
51116     "mapstoup;": "\u21A5",
51117     "marker;": "\u25AE",
51118     "mcomma;": "\u2A29",
51119     "Mcy;": "\u041C",
51120     "mcy;": "\u043C",
51121     "mdash;": "\u2014",
51122     "mDDot;": "\u223A",
51123     "measuredangle;": "\u2221",
51124     "MediumSpace;": "\u205F",
51125     "Mellintrf;": "\u2133",
51126     "Mfr;": "\uD835\uDD10",
51127     "mfr;": "\uD835\uDD2A",
51128     "mho;": "\u2127",
51129     "micro;": "\u00B5",
51130     "micro": "\u00B5",
51131     "mid;": "\u2223",
51132     "midast;": "\u002A",
51133     "midcir;": "\u2AF0",
51134     "middot;": "\u00B7",
51135     "middot": "\u00B7",
51136     "minus;": "\u2212",
51137     "minusb;": "\u229F",
51138     "minusd;": "\u2238",
51139     "minusdu;": "\u2A2A",
51140     "MinusPlus;": "\u2213",
51141     "mlcp;": "\u2ADB",
51142     "mldr;": "\u2026",
51143     "mnplus;": "\u2213",
51144     "models;": "\u22A7",
51145     "Mopf;": "\uD835\uDD44",
51146     "mopf;": "\uD835\uDD5E",
51147     "mp;": "\u2213",
51148     "Mscr;": "\u2133",
51149     "mscr;": "\uD835\uDCC2",
51150     "mstpos;": "\u223E",
51151     "Mu;": "\u039C",
51152     "mu;": "\u03BC",
51153     "multimap;": "\u22B8",
51154     "mumap;": "\u22B8",
51155     "nabla;": "\u2207",
51156     "Nacute;": "\u0143",
51157     "nacute;": "\u0144",
51158     "nang;": "\u2220\u20D2",
51159     "nap;": "\u2249",
51160     "napE;": "\u2A70\u0338",
51161     "napid;": "\u224B\u0338",
51162     "napos;": "\u0149",
51163     "napprox;": "\u2249",
51164     "natur;": "\u266E",
51165     "natural;": "\u266E",
51166     "naturals;": "\u2115",
51167     "nbsp;": "\u00A0",
51168     "nbsp": "\u00A0",
51169     "nbump;": "\u224E\u0338",
51170     "nbumpe;": "\u224F\u0338",
51171     "ncap;": "\u2A43",
51172     "Ncaron;": "\u0147",
51173     "ncaron;": "\u0148",
51174     "Ncedil;": "\u0145",
51175     "ncedil;": "\u0146",
51176     "ncong;": "\u2247",
51177     "ncongdot;": "\u2A6D\u0338",
51178     "ncup;": "\u2A42",
51179     "Ncy;": "\u041D",
51180     "ncy;": "\u043D",
51181     "ndash;": "\u2013",
51182     "ne;": "\u2260",
51183     "nearhk;": "\u2924",
51184     "neArr;": "\u21D7",
51185     "nearr;": "\u2197",
51186     "nearrow;": "\u2197",
51187     "nedot;": "\u2250\u0338",
51188     "NegativeMediumSpace;": "\u200B",
51189     "NegativeThickSpace;": "\u200B",
51190     "NegativeThinSpace;": "\u200B",
51191     "NegativeVeryThinSpace;": "\u200B",
51192     "nequiv;": "\u2262",
51193     "nesear;": "\u2928",
51194     "nesim;": "\u2242\u0338",
51195     "NestedGreaterGreater;": "\u226B",
51196     "NestedLessLess;": "\u226A",
51197     "NewLine;": "\u000A",
51198     "nexist;": "\u2204",
51199     "nexists;": "\u2204",
51200     "Nfr;": "\uD835\uDD11",
51201     "nfr;": "\uD835\uDD2B",
51202     "ngE;": "\u2267\u0338",
51203     "nge;": "\u2271",
51204     "ngeq;": "\u2271",
51205     "ngeqq;": "\u2267\u0338",
51206     "ngeqslant;": "\u2A7E\u0338",
51207     "nges;": "\u2A7E\u0338",
51208     "nGg;": "\u22D9\u0338",
51209     "ngsim;": "\u2275",
51210     "nGt;": "\u226B\u20D2",
51211     "ngt;": "\u226F",
51212     "ngtr;": "\u226F",
51213     "nGtv;": "\u226B\u0338",
51214     "nhArr;": "\u21CE",
51215     "nharr;": "\u21AE",
51216     "nhpar;": "\u2AF2",
51217     "ni;": "\u220B",
51218     "nis;": "\u22FC",
51219     "nisd;": "\u22FA",
51220     "niv;": "\u220B",
51221     "NJcy;": "\u040A",
51222     "njcy;": "\u045A",
51223     "nlArr;": "\u21CD",
51224     "nlarr;": "\u219A",
51225     "nldr;": "\u2025",
51226     "nlE;": "\u2266\u0338",
51227     "nle;": "\u2270",
51228     "nLeftarrow;": "\u21CD",
51229     "nleftarrow;": "\u219A",
51230     "nLeftrightarrow;": "\u21CE",
51231     "nleftrightarrow;": "\u21AE",
51232     "nleq;": "\u2270",
51233     "nleqq;": "\u2266\u0338",
51234     "nleqslant;": "\u2A7D\u0338",
51235     "nles;": "\u2A7D\u0338",
51236     "nless;": "\u226E",
51237     "nLl;": "\u22D8\u0338",
51238     "nlsim;": "\u2274",
51239     "nLt;": "\u226A\u20D2",
51240     "nlt;": "\u226E",
51241     "nltri;": "\u22EA",
51242     "nltrie;": "\u22EC",
51243     "nLtv;": "\u226A\u0338",
51244     "nmid;": "\u2224",
51245     "NoBreak;": "\u2060",
51246     "NonBreakingSpace;": "\u00A0",
51247     "Nopf;": "\u2115",
51248     "nopf;": "\uD835\uDD5F",
51249     "Not;": "\u2AEC",
51250     "not;": "\u00AC",
51251     "not": "\u00AC",
51252     "NotCongruent;": "\u2262",
51253     "NotCupCap;": "\u226D",
51254     "NotDoubleVerticalBar;": "\u2226",
51255     "NotElement;": "\u2209",
51256     "NotEqual;": "\u2260",
51257     "NotEqualTilde;": "\u2242\u0338",
51258     "NotExists;": "\u2204",
51259     "NotGreater;": "\u226F",
51260     "NotGreaterEqual;": "\u2271",
51261     "NotGreaterFullEqual;": "\u2267\u0338",
51262     "NotGreaterGreater;": "\u226B\u0338",
51263     "NotGreaterLess;": "\u2279",
51264     "NotGreaterSlantEqual;": "\u2A7E\u0338",
51265     "NotGreaterTilde;": "\u2275",
51266     "NotHumpDownHump;": "\u224E\u0338",
51267     "NotHumpEqual;": "\u224F\u0338",
51268     "notin;": "\u2209",
51269     "notindot;": "\u22F5\u0338",
51270     "notinE;": "\u22F9\u0338",
51271     "notinva;": "\u2209",
51272     "notinvb;": "\u22F7",
51273     "notinvc;": "\u22F6",
51274     "NotLeftTriangle;": "\u22EA",
51275     "NotLeftTriangleBar;": "\u29CF\u0338",
51276     "NotLeftTriangleEqual;": "\u22EC",
51277     "NotLess;": "\u226E",
51278     "NotLessEqual;": "\u2270",
51279     "NotLessGreater;": "\u2278",
51280     "NotLessLess;": "\u226A\u0338",
51281     "NotLessSlantEqual;": "\u2A7D\u0338",
51282     "NotLessTilde;": "\u2274",
51283     "NotNestedGreaterGreater;": "\u2AA2\u0338",
51284     "NotNestedLessLess;": "\u2AA1\u0338",
51285     "notni;": "\u220C",
51286     "notniva;": "\u220C",
51287     "notnivb;": "\u22FE",
51288     "notnivc;": "\u22FD",
51289     "NotPrecedes;": "\u2280",
51290     "NotPrecedesEqual;": "\u2AAF\u0338",
51291     "NotPrecedesSlantEqual;": "\u22E0",
51292     "NotReverseElement;": "\u220C",
51293     "NotRightTriangle;": "\u22EB",
51294     "NotRightTriangleBar;": "\u29D0\u0338",
51295     "NotRightTriangleEqual;": "\u22ED",
51296     "NotSquareSubset;": "\u228F\u0338",
51297     "NotSquareSubsetEqual;": "\u22E2",
51298     "NotSquareSuperset;": "\u2290\u0338",
51299     "NotSquareSupersetEqual;": "\u22E3",
51300     "NotSubset;": "\u2282\u20D2",
51301     "NotSubsetEqual;": "\u2288",
51302     "NotSucceeds;": "\u2281",
51303     "NotSucceedsEqual;": "\u2AB0\u0338",
51304     "NotSucceedsSlantEqual;": "\u22E1",
51305     "NotSucceedsTilde;": "\u227F\u0338",
51306     "NotSuperset;": "\u2283\u20D2",
51307     "NotSupersetEqual;": "\u2289",
51308     "NotTilde;": "\u2241",
51309     "NotTildeEqual;": "\u2244",
51310     "NotTildeFullEqual;": "\u2247",
51311     "NotTildeTilde;": "\u2249",
51312     "NotVerticalBar;": "\u2224",
51313     "npar;": "\u2226",
51314     "nparallel;": "\u2226",
51315     "nparsl;": "\u2AFD\u20E5",
51316     "npart;": "\u2202\u0338",
51317     "npolint;": "\u2A14",
51318     "npr;": "\u2280",
51319     "nprcue;": "\u22E0",
51320     "npre;": "\u2AAF\u0338",
51321     "nprec;": "\u2280",
51322     "npreceq;": "\u2AAF\u0338",
51323     "nrArr;": "\u21CF",
51324     "nrarr;": "\u219B",
51325     "nrarrc;": "\u2933\u0338",
51326     "nrarrw;": "\u219D\u0338",
51327     "nRightarrow;": "\u21CF",
51328     "nrightarrow;": "\u219B",
51329     "nrtri;": "\u22EB",
51330     "nrtrie;": "\u22ED",
51331     "nsc;": "\u2281",
51332     "nsccue;": "\u22E1",
51333     "nsce;": "\u2AB0\u0338",
51334     "Nscr;": "\uD835\uDCA9",
51335     "nscr;": "\uD835\uDCC3",
51336     "nshortmid;": "\u2224",
51337     "nshortparallel;": "\u2226",
51338     "nsim;": "\u2241",
51339     "nsime;": "\u2244",
51340     "nsimeq;": "\u2244",
51341     "nsmid;": "\u2224",
51342     "nspar;": "\u2226",
51343     "nsqsube;": "\u22E2",
51344     "nsqsupe;": "\u22E3",
51345     "nsub;": "\u2284",
51346     "nsubE;": "\u2AC5\u0338",
51347     "nsube;": "\u2288",
51348     "nsubset;": "\u2282\u20D2",
51349     "nsubseteq;": "\u2288",
51350     "nsubseteqq;": "\u2AC5\u0338",
51351     "nsucc;": "\u2281",
51352     "nsucceq;": "\u2AB0\u0338",
51353     "nsup;": "\u2285",
51354     "nsupE;": "\u2AC6\u0338",
51355     "nsupe;": "\u2289",
51356     "nsupset;": "\u2283\u20D2",
51357     "nsupseteq;": "\u2289",
51358     "nsupseteqq;": "\u2AC6\u0338",
51359     "ntgl;": "\u2279",
51360     "Ntilde;": "\u00D1",
51361     "Ntilde": "\u00D1",
51362     "ntilde;": "\u00F1",
51363     "ntilde": "\u00F1",
51364     "ntlg;": "\u2278",
51365     "ntriangleleft;": "\u22EA",
51366     "ntrianglelefteq;": "\u22EC",
51367     "ntriangleright;": "\u22EB",
51368     "ntrianglerighteq;": "\u22ED",
51369     "Nu;": "\u039D",
51370     "nu;": "\u03BD",
51371     "num;": "\u0023",
51372     "numero;": "\u2116",
51373     "numsp;": "\u2007",
51374     "nvap;": "\u224D\u20D2",
51375     "nVDash;": "\u22AF",
51376     "nVdash;": "\u22AE",
51377     "nvDash;": "\u22AD",
51378     "nvdash;": "\u22AC",
51379     "nvge;": "\u2265\u20D2",
51380     "nvgt;": "\u003E\u20D2",
51381     "nvHarr;": "\u2904",
51382     "nvinfin;": "\u29DE",
51383     "nvlArr;": "\u2902",
51384     "nvle;": "\u2264\u20D2",
51385     "nvlt;": "\u003C\u20D2",
51386     "nvltrie;": "\u22B4\u20D2",
51387     "nvrArr;": "\u2903",
51388     "nvrtrie;": "\u22B5\u20D2",
51389     "nvsim;": "\u223C\u20D2",
51390     "nwarhk;": "\u2923",
51391     "nwArr;": "\u21D6",
51392     "nwarr;": "\u2196",
51393     "nwarrow;": "\u2196",
51394     "nwnear;": "\u2927",
51395     "Oacute;": "\u00D3",
51396     "Oacute": "\u00D3",
51397     "oacute;": "\u00F3",
51398     "oacute": "\u00F3",
51399     "oast;": "\u229B",
51400     "ocir;": "\u229A",
51401     "Ocirc;": "\u00D4",
51402     "Ocirc": "\u00D4",
51403     "ocirc;": "\u00F4",
51404     "ocirc": "\u00F4",
51405     "Ocy;": "\u041E",
51406     "ocy;": "\u043E",
51407     "odash;": "\u229D",
51408     "Odblac;": "\u0150",
51409     "odblac;": "\u0151",
51410     "odiv;": "\u2A38",
51411     "odot;": "\u2299",
51412     "odsold;": "\u29BC",
51413     "OElig;": "\u0152",
51414     "oelig;": "\u0153",
51415     "ofcir;": "\u29BF",
51416     "Ofr;": "\uD835\uDD12",
51417     "ofr;": "\uD835\uDD2C",
51418     "ogon;": "\u02DB",
51419     "Ograve;": "\u00D2",
51420     "Ograve": "\u00D2",
51421     "ograve;": "\u00F2",
51422     "ograve": "\u00F2",
51423     "ogt;": "\u29C1",
51424     "ohbar;": "\u29B5",
51425     "ohm;": "\u03A9",
51426     "oint;": "\u222E",
51427     "olarr;": "\u21BA",
51428     "olcir;": "\u29BE",
51429     "olcross;": "\u29BB",
51430     "oline;": "\u203E",
51431     "olt;": "\u29C0",
51432     "Omacr;": "\u014C",
51433     "omacr;": "\u014D",
51434     "Omega;": "\u03A9",
51435     "omega;": "\u03C9",
51436     "Omicron;": "\u039F",
51437     "omicron;": "\u03BF",
51438     "omid;": "\u29B6",
51439     "ominus;": "\u2296",
51440     "Oopf;": "\uD835\uDD46",
51441     "oopf;": "\uD835\uDD60",
51442     "opar;": "\u29B7",
51443     "OpenCurlyDoubleQuote;": "\u201C",
51444     "OpenCurlyQuote;": "\u2018",
51445     "operp;": "\u29B9",
51446     "oplus;": "\u2295",
51447     "Or;": "\u2A54",
51448     "or;": "\u2228",
51449     "orarr;": "\u21BB",
51450     "ord;": "\u2A5D",
51451     "order;": "\u2134",
51452     "orderof;": "\u2134",
51453     "ordf;": "\u00AA",
51454     "ordf": "\u00AA",
51455     "ordm;": "\u00BA",
51456     "ordm": "\u00BA",
51457     "origof;": "\u22B6",
51458     "oror;": "\u2A56",
51459     "orslope;": "\u2A57",
51460     "orv;": "\u2A5B",
51461     "oS;": "\u24C8",
51462     "Oscr;": "\uD835\uDCAA",
51463     "oscr;": "\u2134",
51464     "Oslash;": "\u00D8",
51465     "Oslash": "\u00D8",
51466     "oslash;": "\u00F8",
51467     "oslash": "\u00F8",
51468     "osol;": "\u2298",
51469     "Otilde;": "\u00D5",
51470     "Otilde": "\u00D5",
51471     "otilde;": "\u00F5",
51472     "otilde": "\u00F5",
51473     "Otimes;": "\u2A37",
51474     "otimes;": "\u2297",
51475     "otimesas;": "\u2A36",
51476     "Ouml;": "\u00D6",
51477     "Ouml": "\u00D6",
51478     "ouml;": "\u00F6",
51479     "ouml": "\u00F6",
51480     "ovbar;": "\u233D",
51481     "OverBar;": "\u203E",
51482     "OverBrace;": "\u23DE",
51483     "OverBracket;": "\u23B4",
51484     "OverParenthesis;": "\u23DC",
51485     "par;": "\u2225",
51486     "para;": "\u00B6",
51487     "para": "\u00B6",
51488     "parallel;": "\u2225",
51489     "parsim;": "\u2AF3",
51490     "parsl;": "\u2AFD",
51491     "part;": "\u2202",
51492     "PartialD;": "\u2202",
51493     "Pcy;": "\u041F",
51494     "pcy;": "\u043F",
51495     "percnt;": "\u0025",
51496     "period;": "\u002E",
51497     "permil;": "\u2030",
51498     "perp;": "\u22A5",
51499     "pertenk;": "\u2031",
51500     "Pfr;": "\uD835\uDD13",
51501     "pfr;": "\uD835\uDD2D",
51502     "Phi;": "\u03A6",
51503     "phi;": "\u03C6",
51504     "phiv;": "\u03D5",
51505     "phmmat;": "\u2133",
51506     "phone;": "\u260E",
51507     "Pi;": "\u03A0",
51508     "pi;": "\u03C0",
51509     "pitchfork;": "\u22D4",
51510     "piv;": "\u03D6",
51511     "planck;": "\u210F",
51512     "planckh;": "\u210E",
51513     "plankv;": "\u210F",
51514     "plus;": "\u002B",
51515     "plusacir;": "\u2A23",
51516     "plusb;": "\u229E",
51517     "pluscir;": "\u2A22",
51518     "plusdo;": "\u2214",
51519     "plusdu;": "\u2A25",
51520     "pluse;": "\u2A72",
51521     "PlusMinus;": "\u00B1",
51522     "plusmn;": "\u00B1",
51523     "plusmn": "\u00B1",
51524     "plussim;": "\u2A26",
51525     "plustwo;": "\u2A27",
51526     "pm;": "\u00B1",
51527     "Poincareplane;": "\u210C",
51528     "pointint;": "\u2A15",
51529     "Popf;": "\u2119",
51530     "popf;": "\uD835\uDD61",
51531     "pound;": "\u00A3",
51532     "pound": "\u00A3",
51533     "Pr;": "\u2ABB",
51534     "pr;": "\u227A",
51535     "prap;": "\u2AB7",
51536     "prcue;": "\u227C",
51537     "prE;": "\u2AB3",
51538     "pre;": "\u2AAF",
51539     "prec;": "\u227A",
51540     "precapprox;": "\u2AB7",
51541     "preccurlyeq;": "\u227C",
51542     "Precedes;": "\u227A",
51543     "PrecedesEqual;": "\u2AAF",
51544     "PrecedesSlantEqual;": "\u227C",
51545     "PrecedesTilde;": "\u227E",
51546     "preceq;": "\u2AAF",
51547     "precnapprox;": "\u2AB9",
51548     "precneqq;": "\u2AB5",
51549     "precnsim;": "\u22E8",
51550     "precsim;": "\u227E",
51551     "Prime;": "\u2033",
51552     "prime;": "\u2032",
51553     "primes;": "\u2119",
51554     "prnap;": "\u2AB9",
51555     "prnE;": "\u2AB5",
51556     "prnsim;": "\u22E8",
51557     "prod;": "\u220F",
51558     "Product;": "\u220F",
51559     "profalar;": "\u232E",
51560     "profline;": "\u2312",
51561     "profsurf;": "\u2313",
51562     "prop;": "\u221D",
51563     "Proportion;": "\u2237",
51564     "Proportional;": "\u221D",
51565     "propto;": "\u221D",
51566     "prsim;": "\u227E",
51567     "prurel;": "\u22B0",
51568     "Pscr;": "\uD835\uDCAB",
51569     "pscr;": "\uD835\uDCC5",
51570     "Psi;": "\u03A8",
51571     "psi;": "\u03C8",
51572     "puncsp;": "\u2008",
51573     "Qfr;": "\uD835\uDD14",
51574     "qfr;": "\uD835\uDD2E",
51575     "qint;": "\u2A0C",
51576     "Qopf;": "\u211A",
51577     "qopf;": "\uD835\uDD62",
51578     "qprime;": "\u2057",
51579     "Qscr;": "\uD835\uDCAC",
51580     "qscr;": "\uD835\uDCC6",
51581     "quaternions;": "\u210D",
51582     "quatint;": "\u2A16",
51583     "quest;": "\u003F",
51584     "questeq;": "\u225F",
51585     "QUOT;": "\u0022",
51586     "QUOT": "\u0022",
51587     "quot;": "\u0022",
51588     "quot": "\u0022",
51589     "rAarr;": "\u21DB",
51590     "race;": "\u223D\u0331",
51591     "Racute;": "\u0154",
51592     "racute;": "\u0155",
51593     "radic;": "\u221A",
51594     "raemptyv;": "\u29B3",
51595     "Rang;": "\u27EB",
51596     "rang;": "\u27E9",
51597     "rangd;": "\u2992",
51598     "range;": "\u29A5",
51599     "rangle;": "\u27E9",
51600     "raquo;": "\u00BB",
51601     "raquo": "\u00BB",
51602     "Rarr;": "\u21A0",
51603     "rArr;": "\u21D2",
51604     "rarr;": "\u2192",
51605     "rarrap;": "\u2975",
51606     "rarrb;": "\u21E5",
51607     "rarrbfs;": "\u2920",
51608     "rarrc;": "\u2933",
51609     "rarrfs;": "\u291E",
51610     "rarrhk;": "\u21AA",
51611     "rarrlp;": "\u21AC",
51612     "rarrpl;": "\u2945",
51613     "rarrsim;": "\u2974",
51614     "Rarrtl;": "\u2916",
51615     "rarrtl;": "\u21A3",
51616     "rarrw;": "\u219D",
51617     "rAtail;": "\u291C",
51618     "ratail;": "\u291A",
51619     "ratio;": "\u2236",
51620     "rationals;": "\u211A",
51621     "RBarr;": "\u2910",
51622     "rBarr;": "\u290F",
51623     "rbarr;": "\u290D",
51624     "rbbrk;": "\u2773",
51625     "rbrace;": "\u007D",
51626     "rbrack;": "\u005D",
51627     "rbrke;": "\u298C",
51628     "rbrksld;": "\u298E",
51629     "rbrkslu;": "\u2990",
51630     "Rcaron;": "\u0158",
51631     "rcaron;": "\u0159",
51632     "Rcedil;": "\u0156",
51633     "rcedil;": "\u0157",
51634     "rceil;": "\u2309",
51635     "rcub;": "\u007D",
51636     "Rcy;": "\u0420",
51637     "rcy;": "\u0440",
51638     "rdca;": "\u2937",
51639     "rdldhar;": "\u2969",
51640     "rdquo;": "\u201D",
51641     "rdquor;": "\u201D",
51642     "rdsh;": "\u21B3",
51643     "Re;": "\u211C",
51644     "real;": "\u211C",
51645     "realine;": "\u211B",
51646     "realpart;": "\u211C",
51647     "reals;": "\u211D",
51648     "rect;": "\u25AD",
51649     "REG;": "\u00AE",
51650     "REG": "\u00AE",
51651     "reg;": "\u00AE",
51652     "reg": "\u00AE",
51653     "ReverseElement;": "\u220B",
51654     "ReverseEquilibrium;": "\u21CB",
51655     "ReverseUpEquilibrium;": "\u296F",
51656     "rfisht;": "\u297D",
51657     "rfloor;": "\u230B",
51658     "Rfr;": "\u211C",
51659     "rfr;": "\uD835\uDD2F",
51660     "rHar;": "\u2964",
51661     "rhard;": "\u21C1",
51662     "rharu;": "\u21C0",
51663     "rharul;": "\u296C",
51664     "Rho;": "\u03A1",
51665     "rho;": "\u03C1",
51666     "rhov;": "\u03F1",
51667     "RightAngleBracket;": "\u27E9",
51668     "RightArrow;": "\u2192",
51669     "Rightarrow;": "\u21D2",
51670     "rightarrow;": "\u2192",
51671     "RightArrowBar;": "\u21E5",
51672     "RightArrowLeftArrow;": "\u21C4",
51673     "rightarrowtail;": "\u21A3",
51674     "RightCeiling;": "\u2309",
51675     "RightDoubleBracket;": "\u27E7",
51676     "RightDownTeeVector;": "\u295D",
51677     "RightDownVector;": "\u21C2",
51678     "RightDownVectorBar;": "\u2955",
51679     "RightFloor;": "\u230B",
51680     "rightharpoondown;": "\u21C1",
51681     "rightharpoonup;": "\u21C0",
51682     "rightleftarrows;": "\u21C4",
51683     "rightleftharpoons;": "\u21CC",
51684     "rightrightarrows;": "\u21C9",
51685     "rightsquigarrow;": "\u219D",
51686     "RightTee;": "\u22A2",
51687     "RightTeeArrow;": "\u21A6",
51688     "RightTeeVector;": "\u295B",
51689     "rightthreetimes;": "\u22CC",
51690     "RightTriangle;": "\u22B3",
51691     "RightTriangleBar;": "\u29D0",
51692     "RightTriangleEqual;": "\u22B5",
51693     "RightUpDownVector;": "\u294F",
51694     "RightUpTeeVector;": "\u295C",
51695     "RightUpVector;": "\u21BE",
51696     "RightUpVectorBar;": "\u2954",
51697     "RightVector;": "\u21C0",
51698     "RightVectorBar;": "\u2953",
51699     "ring;": "\u02DA",
51700     "risingdotseq;": "\u2253",
51701     "rlarr;": "\u21C4",
51702     "rlhar;": "\u21CC",
51703     "rlm;": "\u200F",
51704     "rmoust;": "\u23B1",
51705     "rmoustache;": "\u23B1",
51706     "rnmid;": "\u2AEE",
51707     "roang;": "\u27ED",
51708     "roarr;": "\u21FE",
51709     "robrk;": "\u27E7",
51710     "ropar;": "\u2986",
51711     "Ropf;": "\u211D",
51712     "ropf;": "\uD835\uDD63",
51713     "roplus;": "\u2A2E",
51714     "rotimes;": "\u2A35",
51715     "RoundImplies;": "\u2970",
51716     "rpar;": "\u0029",
51717     "rpargt;": "\u2994",
51718     "rppolint;": "\u2A12",
51719     "rrarr;": "\u21C9",
51720     "Rrightarrow;": "\u21DB",
51721     "rsaquo;": "\u203A",
51722     "Rscr;": "\u211B",
51723     "rscr;": "\uD835\uDCC7",
51724     "Rsh;": "\u21B1",
51725     "rsh;": "\u21B1",
51726     "rsqb;": "\u005D",
51727     "rsquo;": "\u2019",
51728     "rsquor;": "\u2019",
51729     "rthree;": "\u22CC",
51730     "rtimes;": "\u22CA",
51731     "rtri;": "\u25B9",
51732     "rtrie;": "\u22B5",
51733     "rtrif;": "\u25B8",
51734     "rtriltri;": "\u29CE",
51735     "RuleDelayed;": "\u29F4",
51736     "ruluhar;": "\u2968",
51737     "rx;": "\u211E",
51738     "Sacute;": "\u015A",
51739     "sacute;": "\u015B",
51740     "sbquo;": "\u201A",
51741     "Sc;": "\u2ABC",
51742     "sc;": "\u227B",
51743     "scap;": "\u2AB8",
51744     "Scaron;": "\u0160",
51745     "scaron;": "\u0161",
51746     "sccue;": "\u227D",
51747     "scE;": "\u2AB4",
51748     "sce;": "\u2AB0",
51749     "Scedil;": "\u015E",
51750     "scedil;": "\u015F",
51751     "Scirc;": "\u015C",
51752     "scirc;": "\u015D",
51753     "scnap;": "\u2ABA",
51754     "scnE;": "\u2AB6",
51755     "scnsim;": "\u22E9",
51756     "scpolint;": "\u2A13",
51757     "scsim;": "\u227F",
51758     "Scy;": "\u0421",
51759     "scy;": "\u0441",
51760     "sdot;": "\u22C5",
51761     "sdotb;": "\u22A1",
51762     "sdote;": "\u2A66",
51763     "searhk;": "\u2925",
51764     "seArr;": "\u21D8",
51765     "searr;": "\u2198",
51766     "searrow;": "\u2198",
51767     "sect;": "\u00A7",
51768     "sect": "\u00A7",
51769     "semi;": "\u003B",
51770     "seswar;": "\u2929",
51771     "setminus;": "\u2216",
51772     "setmn;": "\u2216",
51773     "sext;": "\u2736",
51774     "Sfr;": "\uD835\uDD16",
51775     "sfr;": "\uD835\uDD30",
51776     "sfrown;": "\u2322",
51777     "sharp;": "\u266F",
51778     "SHCHcy;": "\u0429",
51779     "shchcy;": "\u0449",
51780     "SHcy;": "\u0428",
51781     "shcy;": "\u0448",
51782     "ShortDownArrow;": "\u2193",
51783     "ShortLeftArrow;": "\u2190",
51784     "shortmid;": "\u2223",
51785     "shortparallel;": "\u2225",
51786     "ShortRightArrow;": "\u2192",
51787     "ShortUpArrow;": "\u2191",
51788     "shy;": "\u00AD",
51789     "shy": "\u00AD",
51790     "Sigma;": "\u03A3",
51791     "sigma;": "\u03C3",
51792     "sigmaf;": "\u03C2",
51793     "sigmav;": "\u03C2",
51794     "sim;": "\u223C",
51795     "simdot;": "\u2A6A",
51796     "sime;": "\u2243",
51797     "simeq;": "\u2243",
51798     "simg;": "\u2A9E",
51799     "simgE;": "\u2AA0",
51800     "siml;": "\u2A9D",
51801     "simlE;": "\u2A9F",
51802     "simne;": "\u2246",
51803     "simplus;": "\u2A24",
51804     "simrarr;": "\u2972",
51805     "slarr;": "\u2190",
51806     "SmallCircle;": "\u2218",
51807     "smallsetminus;": "\u2216",
51808     "smashp;": "\u2A33",
51809     "smeparsl;": "\u29E4",
51810     "smid;": "\u2223",
51811     "smile;": "\u2323",
51812     "smt;": "\u2AAA",
51813     "smte;": "\u2AAC",
51814     "smtes;": "\u2AAC\uFE00",
51815     "SOFTcy;": "\u042C",
51816     "softcy;": "\u044C",
51817     "sol;": "\u002F",
51818     "solb;": "\u29C4",
51819     "solbar;": "\u233F",
51820     "Sopf;": "\uD835\uDD4A",
51821     "sopf;": "\uD835\uDD64",
51822     "spades;": "\u2660",
51823     "spadesuit;": "\u2660",
51824     "spar;": "\u2225",
51825     "sqcap;": "\u2293",
51826     "sqcaps;": "\u2293\uFE00",
51827     "sqcup;": "\u2294",
51828     "sqcups;": "\u2294\uFE00",
51829     "Sqrt;": "\u221A",
51830     "sqsub;": "\u228F",
51831     "sqsube;": "\u2291",
51832     "sqsubset;": "\u228F",
51833     "sqsubseteq;": "\u2291",
51834     "sqsup;": "\u2290",
51835     "sqsupe;": "\u2292",
51836     "sqsupset;": "\u2290",
51837     "sqsupseteq;": "\u2292",
51838     "squ;": "\u25A1",
51839     "Square;": "\u25A1",
51840     "square;": "\u25A1",
51841     "SquareIntersection;": "\u2293",
51842     "SquareSubset;": "\u228F",
51843     "SquareSubsetEqual;": "\u2291",
51844     "SquareSuperset;": "\u2290",
51845     "SquareSupersetEqual;": "\u2292",
51846     "SquareUnion;": "\u2294",
51847     "squarf;": "\u25AA",
51848     "squf;": "\u25AA",
51849     "srarr;": "\u2192",
51850     "Sscr;": "\uD835\uDCAE",
51851     "sscr;": "\uD835\uDCC8",
51852     "ssetmn;": "\u2216",
51853     "ssmile;": "\u2323",
51854     "sstarf;": "\u22C6",
51855     "Star;": "\u22C6",
51856     "star;": "\u2606",
51857     "starf;": "\u2605",
51858     "straightepsilon;": "\u03F5",
51859     "straightphi;": "\u03D5",
51860     "strns;": "\u00AF",
51861     "Sub;": "\u22D0",
51862     "sub;": "\u2282",
51863     "subdot;": "\u2ABD",
51864     "subE;": "\u2AC5",
51865     "sube;": "\u2286",
51866     "subedot;": "\u2AC3",
51867     "submult;": "\u2AC1",
51868     "subnE;": "\u2ACB",
51869     "subne;": "\u228A",
51870     "subplus;": "\u2ABF",
51871     "subrarr;": "\u2979",
51872     "Subset;": "\u22D0",
51873     "subset;": "\u2282",
51874     "subseteq;": "\u2286",
51875     "subseteqq;": "\u2AC5",
51876     "SubsetEqual;": "\u2286",
51877     "subsetneq;": "\u228A",
51878     "subsetneqq;": "\u2ACB",
51879     "subsim;": "\u2AC7",
51880     "subsub;": "\u2AD5",
51881     "subsup;": "\u2AD3",
51882     "succ;": "\u227B",
51883     "succapprox;": "\u2AB8",
51884     "succcurlyeq;": "\u227D",
51885     "Succeeds;": "\u227B",
51886     "SucceedsEqual;": "\u2AB0",
51887     "SucceedsSlantEqual;": "\u227D",
51888     "SucceedsTilde;": "\u227F",
51889     "succeq;": "\u2AB0",
51890     "succnapprox;": "\u2ABA",
51891     "succneqq;": "\u2AB6",
51892     "succnsim;": "\u22E9",
51893     "succsim;": "\u227F",
51894     "SuchThat;": "\u220B",
51895     "Sum;": "\u2211",
51896     "sum;": "\u2211",
51897     "sung;": "\u266A",
51898     "Sup;": "\u22D1",
51899     "sup;": "\u2283",
51900     "sup1;": "\u00B9",
51901     "sup1": "\u00B9",
51902     "sup2;": "\u00B2",
51903     "sup2": "\u00B2",
51904     "sup3;": "\u00B3",
51905     "sup3": "\u00B3",
51906     "supdot;": "\u2ABE",
51907     "supdsub;": "\u2AD8",
51908     "supE;": "\u2AC6",
51909     "supe;": "\u2287",
51910     "supedot;": "\u2AC4",
51911     "Superset;": "\u2283",
51912     "SupersetEqual;": "\u2287",
51913     "suphsol;": "\u27C9",
51914     "suphsub;": "\u2AD7",
51915     "suplarr;": "\u297B",
51916     "supmult;": "\u2AC2",
51917     "supnE;": "\u2ACC",
51918     "supne;": "\u228B",
51919     "supplus;": "\u2AC0",
51920     "Supset;": "\u22D1",
51921     "supset;": "\u2283",
51922     "supseteq;": "\u2287",
51923     "supseteqq;": "\u2AC6",
51924     "supsetneq;": "\u228B",
51925     "supsetneqq;": "\u2ACC",
51926     "supsim;": "\u2AC8",
51927     "supsub;": "\u2AD4",
51928     "supsup;": "\u2AD6",
51929     "swarhk;": "\u2926",
51930     "swArr;": "\u21D9",
51931     "swarr;": "\u2199",
51932     "swarrow;": "\u2199",
51933     "swnwar;": "\u292A",
51934     "szlig;": "\u00DF",
51935     "szlig": "\u00DF",
51936     "Tab;": "\u0009",
51937     "target;": "\u2316",
51938     "Tau;": "\u03A4",
51939     "tau;": "\u03C4",
51940     "tbrk;": "\u23B4",
51941     "Tcaron;": "\u0164",
51942     "tcaron;": "\u0165",
51943     "Tcedil;": "\u0162",
51944     "tcedil;": "\u0163",
51945     "Tcy;": "\u0422",
51946     "tcy;": "\u0442",
51947     "tdot;": "\u20DB",
51948     "telrec;": "\u2315",
51949     "Tfr;": "\uD835\uDD17",
51950     "tfr;": "\uD835\uDD31",
51951     "there4;": "\u2234",
51952     "Therefore;": "\u2234",
51953     "therefore;": "\u2234",
51954     "Theta;": "\u0398",
51955     "theta;": "\u03B8",
51956     "thetasym;": "\u03D1",
51957     "thetav;": "\u03D1",
51958     "thickapprox;": "\u2248",
51959     "thicksim;": "\u223C",
51960     "ThickSpace;": "\u205F\u200A",
51961     "thinsp;": "\u2009",
51962     "ThinSpace;": "\u2009",
51963     "thkap;": "\u2248",
51964     "thksim;": "\u223C",
51965     "THORN;": "\u00DE",
51966     "THORN": "\u00DE",
51967     "thorn;": "\u00FE",
51968     "thorn": "\u00FE",
51969     "Tilde;": "\u223C",
51970     "tilde;": "\u02DC",
51971     "TildeEqual;": "\u2243",
51972     "TildeFullEqual;": "\u2245",
51973     "TildeTilde;": "\u2248",
51974     "times;": "\u00D7",
51975     "times": "\u00D7",
51976     "timesb;": "\u22A0",
51977     "timesbar;": "\u2A31",
51978     "timesd;": "\u2A30",
51979     "tint;": "\u222D",
51980     "toea;": "\u2928",
51981     "top;": "\u22A4",
51982     "topbot;": "\u2336",
51983     "topcir;": "\u2AF1",
51984     "Topf;": "\uD835\uDD4B",
51985     "topf;": "\uD835\uDD65",
51986     "topfork;": "\u2ADA",
51987     "tosa;": "\u2929",
51988     "tprime;": "\u2034",
51989     "TRADE;": "\u2122",
51990     "trade;": "\u2122",
51991     "triangle;": "\u25B5",
51992     "triangledown;": "\u25BF",
51993     "triangleleft;": "\u25C3",
51994     "trianglelefteq;": "\u22B4",
51995     "triangleq;": "\u225C",
51996     "triangleright;": "\u25B9",
51997     "trianglerighteq;": "\u22B5",
51998     "tridot;": "\u25EC",
51999     "trie;": "\u225C",
52000     "triminus;": "\u2A3A",
52001     "TripleDot;": "\u20DB",
52002     "triplus;": "\u2A39",
52003     "trisb;": "\u29CD",
52004     "tritime;": "\u2A3B",
52005     "trpezium;": "\u23E2",
52006     "Tscr;": "\uD835\uDCAF",
52007     "tscr;": "\uD835\uDCC9",
52008     "TScy;": "\u0426",
52009     "tscy;": "\u0446",
52010     "TSHcy;": "\u040B",
52011     "tshcy;": "\u045B",
52012     "Tstrok;": "\u0166",
52013     "tstrok;": "\u0167",
52014     "twixt;": "\u226C",
52015     "twoheadleftarrow;": "\u219E",
52016     "twoheadrightarrow;": "\u21A0",
52017     "Uacute;": "\u00DA",
52018     "Uacute": "\u00DA",
52019     "uacute;": "\u00FA",
52020     "uacute": "\u00FA",
52021     "Uarr;": "\u219F",
52022     "uArr;": "\u21D1",
52023     "uarr;": "\u2191",
52024     "Uarrocir;": "\u2949",
52025     "Ubrcy;": "\u040E",
52026     "ubrcy;": "\u045E",
52027     "Ubreve;": "\u016C",
52028     "ubreve;": "\u016D",
52029     "Ucirc;": "\u00DB",
52030     "Ucirc": "\u00DB",
52031     "ucirc;": "\u00FB",
52032     "ucirc": "\u00FB",
52033     "Ucy;": "\u0423",
52034     "ucy;": "\u0443",
52035     "udarr;": "\u21C5",
52036     "Udblac;": "\u0170",
52037     "udblac;": "\u0171",
52038     "udhar;": "\u296E",
52039     "ufisht;": "\u297E",
52040     "Ufr;": "\uD835\uDD18",
52041     "ufr;": "\uD835\uDD32",
52042     "Ugrave;": "\u00D9",
52043     "Ugrave": "\u00D9",
52044     "ugrave;": "\u00F9",
52045     "ugrave": "\u00F9",
52046     "uHar;": "\u2963",
52047     "uharl;": "\u21BF",
52048     "uharr;": "\u21BE",
52049     "uhblk;": "\u2580",
52050     "ulcorn;": "\u231C",
52051     "ulcorner;": "\u231C",
52052     "ulcrop;": "\u230F",
52053     "ultri;": "\u25F8",
52054     "Umacr;": "\u016A",
52055     "umacr;": "\u016B",
52056     "uml;": "\u00A8",
52057     "uml": "\u00A8",
52058     "UnderBar;": "\u005F",
52059     "UnderBrace;": "\u23DF",
52060     "UnderBracket;": "\u23B5",
52061     "UnderParenthesis;": "\u23DD",
52062     "Union;": "\u22C3",
52063     "UnionPlus;": "\u228E",
52064     "Uogon;": "\u0172",
52065     "uogon;": "\u0173",
52066     "Uopf;": "\uD835\uDD4C",
52067     "uopf;": "\uD835\uDD66",
52068     "UpArrow;": "\u2191",
52069     "Uparrow;": "\u21D1",
52070     "uparrow;": "\u2191",
52071     "UpArrowBar;": "\u2912",
52072     "UpArrowDownArrow;": "\u21C5",
52073     "UpDownArrow;": "\u2195",
52074     "Updownarrow;": "\u21D5",
52075     "updownarrow;": "\u2195",
52076     "UpEquilibrium;": "\u296E",
52077     "upharpoonleft;": "\u21BF",
52078     "upharpoonright;": "\u21BE",
52079     "uplus;": "\u228E",
52080     "UpperLeftArrow;": "\u2196",
52081     "UpperRightArrow;": "\u2197",
52082     "Upsi;": "\u03D2",
52083     "upsi;": "\u03C5",
52084     "upsih;": "\u03D2",
52085     "Upsilon;": "\u03A5",
52086     "upsilon;": "\u03C5",
52087     "UpTee;": "\u22A5",
52088     "UpTeeArrow;": "\u21A5",
52089     "upuparrows;": "\u21C8",
52090     "urcorn;": "\u231D",
52091     "urcorner;": "\u231D",
52092     "urcrop;": "\u230E",
52093     "Uring;": "\u016E",
52094     "uring;": "\u016F",
52095     "urtri;": "\u25F9",
52096     "Uscr;": "\uD835\uDCB0",
52097     "uscr;": "\uD835\uDCCA",
52098     "utdot;": "\u22F0",
52099     "Utilde;": "\u0168",
52100     "utilde;": "\u0169",
52101     "utri;": "\u25B5",
52102     "utrif;": "\u25B4",
52103     "uuarr;": "\u21C8",
52104     "Uuml;": "\u00DC",
52105     "Uuml": "\u00DC",
52106     "uuml;": "\u00FC",
52107     "uuml": "\u00FC",
52108     "uwangle;": "\u29A7",
52109     "vangrt;": "\u299C",
52110     "varepsilon;": "\u03F5",
52111     "varkappa;": "\u03F0",
52112     "varnothing;": "\u2205",
52113     "varphi;": "\u03D5",
52114     "varpi;": "\u03D6",
52115     "varpropto;": "\u221D",
52116     "vArr;": "\u21D5",
52117     "varr;": "\u2195",
52118     "varrho;": "\u03F1",
52119     "varsigma;": "\u03C2",
52120     "varsubsetneq;": "\u228A\uFE00",
52121     "varsubsetneqq;": "\u2ACB\uFE00",
52122     "varsupsetneq;": "\u228B\uFE00",
52123     "varsupsetneqq;": "\u2ACC\uFE00",
52124     "vartheta;": "\u03D1",
52125     "vartriangleleft;": "\u22B2",
52126     "vartriangleright;": "\u22B3",
52127     "Vbar;": "\u2AEB",
52128     "vBar;": "\u2AE8",
52129     "vBarv;": "\u2AE9",
52130     "Vcy;": "\u0412",
52131     "vcy;": "\u0432",
52132     "VDash;": "\u22AB",
52133     "Vdash;": "\u22A9",
52134     "vDash;": "\u22A8",
52135     "vdash;": "\u22A2",
52136     "Vdashl;": "\u2AE6",
52137     "Vee;": "\u22C1",
52138     "vee;": "\u2228",
52139     "veebar;": "\u22BB",
52140     "veeeq;": "\u225A",
52141     "vellip;": "\u22EE",
52142     "Verbar;": "\u2016",
52143     "verbar;": "\u007C",
52144     "Vert;": "\u2016",
52145     "vert;": "\u007C",
52146     "VerticalBar;": "\u2223",
52147     "VerticalLine;": "\u007C",
52148     "VerticalSeparator;": "\u2758",
52149     "VerticalTilde;": "\u2240",
52150     "VeryThinSpace;": "\u200A",
52151     "Vfr;": "\uD835\uDD19",
52152     "vfr;": "\uD835\uDD33",
52153     "vltri;": "\u22B2",
52154     "vnsub;": "\u2282\u20D2",
52155     "vnsup;": "\u2283\u20D2",
52156     "Vopf;": "\uD835\uDD4D",
52157     "vopf;": "\uD835\uDD67",
52158     "vprop;": "\u221D",
52159     "vrtri;": "\u22B3",
52160     "Vscr;": "\uD835\uDCB1",
52161     "vscr;": "\uD835\uDCCB",
52162     "vsubnE;": "\u2ACB\uFE00",
52163     "vsubne;": "\u228A\uFE00",
52164     "vsupnE;": "\u2ACC\uFE00",
52165     "vsupne;": "\u228B\uFE00",
52166     "Vvdash;": "\u22AA",
52167     "vzigzag;": "\u299A",
52168     "Wcirc;": "\u0174",
52169     "wcirc;": "\u0175",
52170     "wedbar;": "\u2A5F",
52171     "Wedge;": "\u22C0",
52172     "wedge;": "\u2227",
52173     "wedgeq;": "\u2259",
52174     "weierp;": "\u2118",
52175     "Wfr;": "\uD835\uDD1A",
52176     "wfr;": "\uD835\uDD34",
52177     "Wopf;": "\uD835\uDD4E",
52178     "wopf;": "\uD835\uDD68",
52179     "wp;": "\u2118",
52180     "wr;": "\u2240",
52181     "wreath;": "\u2240",
52182     "Wscr;": "\uD835\uDCB2",
52183     "wscr;": "\uD835\uDCCC",
52184     "xcap;": "\u22C2",
52185     "xcirc;": "\u25EF",
52186     "xcup;": "\u22C3",
52187     "xdtri;": "\u25BD",
52188     "Xfr;": "\uD835\uDD1B",
52189     "xfr;": "\uD835\uDD35",
52190     "xhArr;": "\u27FA",
52191     "xharr;": "\u27F7",
52192     "Xi;": "\u039E",
52193     "xi;": "\u03BE",
52194     "xlArr;": "\u27F8",
52195     "xlarr;": "\u27F5",
52196     "xmap;": "\u27FC",
52197     "xnis;": "\u22FB",
52198     "xodot;": "\u2A00",
52199     "Xopf;": "\uD835\uDD4F",
52200     "xopf;": "\uD835\uDD69",
52201     "xoplus;": "\u2A01",
52202     "xotime;": "\u2A02",
52203     "xrArr;": "\u27F9",
52204     "xrarr;": "\u27F6",
52205     "Xscr;": "\uD835\uDCB3",
52206     "xscr;": "\uD835\uDCCD",
52207     "xsqcup;": "\u2A06",
52208     "xuplus;": "\u2A04",
52209     "xutri;": "\u25B3",
52210     "xvee;": "\u22C1",
52211     "xwedge;": "\u22C0",
52212     "Yacute;": "\u00DD",
52213     "Yacute": "\u00DD",
52214     "yacute;": "\u00FD",
52215     "yacute": "\u00FD",
52216     "YAcy;": "\u042F",
52217     "yacy;": "\u044F",
52218     "Ycirc;": "\u0176",
52219     "ycirc;": "\u0177",
52220     "Ycy;": "\u042B",
52221     "ycy;": "\u044B",
52222     "yen;": "\u00A5",
52223     "yen": "\u00A5",
52224     "Yfr;": "\uD835\uDD1C",
52225     "yfr;": "\uD835\uDD36",
52226     "YIcy;": "\u0407",
52227     "yicy;": "\u0457",
52228     "Yopf;": "\uD835\uDD50",
52229     "yopf;": "\uD835\uDD6A",
52230     "Yscr;": "\uD835\uDCB4",
52231     "yscr;": "\uD835\uDCCE",
52232     "YUcy;": "\u042E",
52233     "yucy;": "\u044E",
52234     "Yuml;": "\u0178",
52235     "yuml;": "\u00FF",
52236     "yuml": "\u00FF",
52237     "Zacute;": "\u0179",
52238     "zacute;": "\u017A",
52239     "Zcaron;": "\u017D",
52240     "zcaron;": "\u017E",
52241     "Zcy;": "\u0417",
52242     "zcy;": "\u0437",
52243     "Zdot;": "\u017B",
52244     "zdot;": "\u017C",
52245     "zeetrf;": "\u2128",
52246     "ZeroWidthSpace;": "\u200B",
52247     "Zeta;": "\u0396",
52248     "zeta;": "\u03B6",
52249     "Zfr;": "\u2128",
52250     "zfr;": "\uD835\uDD37",
52251     "ZHcy;": "\u0416",
52252     "zhcy;": "\u0436",
52253     "zigrarr;": "\u21DD",
52254     "Zopf;": "\u2124",
52255     "zopf;": "\uD835\uDD6B",
52256     "Zscr;": "\uD835\uDCB5",
52257     "zscr;": "\uD835\uDCCF",
52258     "zwj;": "\u200D",
52259     "zwnj;": "\u200C"
52260 };
52261
52262
52263 /***/ }),
52264 /* 124 */
52265 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
52266
52267 __webpack_require__.r(__webpack_exports__);
52268 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
52269 /* harmony export */   "startsWith": () => /* binding */ startsWith,
52270 /* harmony export */   "endsWith": () => /* binding */ endsWith,
52271 /* harmony export */   "commonPrefixLength": () => /* binding */ commonPrefixLength,
52272 /* harmony export */   "repeat": () => /* binding */ repeat,
52273 /* harmony export */   "isLetterOrDigit": () => /* binding */ isLetterOrDigit
52274 /* harmony export */ });
52275 /*---------------------------------------------------------------------------------------------
52276  *  Copyright (c) Microsoft Corporation. All rights reserved.
52277  *  Licensed under the MIT License. See License.txt in the project root for license information.
52278  *--------------------------------------------------------------------------------------------*/
52279 function startsWith(haystack, needle) {
52280     if (haystack.length < needle.length) {
52281         return false;
52282     }
52283     for (var i = 0; i < needle.length; i++) {
52284         if (haystack[i] !== needle[i]) {
52285             return false;
52286         }
52287     }
52288     return true;
52289 }
52290 /**
52291  * Determines if haystack ends with needle.
52292  */
52293 function endsWith(haystack, needle) {
52294     var diff = haystack.length - needle.length;
52295     if (diff > 0) {
52296         return haystack.lastIndexOf(needle) === diff;
52297     }
52298     else if (diff === 0) {
52299         return haystack === needle;
52300     }
52301     else {
52302         return false;
52303     }
52304 }
52305 /**
52306  * @returns the length of the common prefix of the two strings.
52307  */
52308 function commonPrefixLength(a, b) {
52309     var i;
52310     var len = Math.min(a.length, b.length);
52311     for (i = 0; i < len; i++) {
52312         if (a.charCodeAt(i) !== b.charCodeAt(i)) {
52313             return i;
52314         }
52315     }
52316     return len;
52317 }
52318 function repeat(value, count) {
52319     var s = '';
52320     while (count > 0) {
52321         if ((count & 1) === 1) {
52322             s += value;
52323         }
52324         value += value;
52325         count = count >>> 1;
52326     }
52327     return s;
52328 }
52329 var _a = 'a'.charCodeAt(0);
52330 var _z = 'z'.charCodeAt(0);
52331 var _A = 'A'.charCodeAt(0);
52332 var _Z = 'Z'.charCodeAt(0);
52333 var _0 = '0'.charCodeAt(0);
52334 var _9 = '9'.charCodeAt(0);
52335 function isLetterOrDigit(text, index) {
52336     var c = text.charCodeAt(index);
52337     return (_a <= c && c <= _z) || (_A <= c && c <= _Z) || (_0 <= c && c <= _9);
52338 }
52339
52340
52341 /***/ }),
52342 /* 125 */
52343 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
52344
52345 __webpack_require__.r(__webpack_exports__);
52346 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
52347 /* harmony export */   "isDefined": () => /* binding */ isDefined
52348 /* harmony export */ });
52349 /*---------------------------------------------------------------------------------------------
52350  *  Copyright (c) Microsoft Corporation. All rights reserved.
52351  *  Licensed under the MIT License. See License.txt in the project root for license information.
52352  *--------------------------------------------------------------------------------------------*/
52353 function isDefined(obj) {
52354     return typeof obj !== 'undefined';
52355 }
52356
52357
52358 /***/ }),
52359 /* 126 */
52360 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
52361
52362 __webpack_require__.r(__webpack_exports__);
52363 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
52364 /* harmony export */   "HTMLDataProvider": () => /* binding */ HTMLDataProvider,
52365 /* harmony export */   "generateDocumentation": () => /* binding */ generateDocumentation
52366 /* harmony export */ });
52367 /* harmony import */ var _utils_markup__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(127);
52368 /*---------------------------------------------------------------------------------------------
52369  *  Copyright (c) Microsoft Corporation. All rights reserved.
52370  *  Licensed under the MIT License. See License.txt in the project root for license information.
52371  *--------------------------------------------------------------------------------------------*/
52372
52373 var HTMLDataProvider = /** @class */ (function () {
52374     /**
52375      * Currently, unversioned data uses the V1 implementation
52376      * In the future when the provider handles multiple versions of HTML custom data,
52377      * use the latest implementation for unversioned data
52378      */
52379     function HTMLDataProvider(id, customData) {
52380         var _this = this;
52381         this.id = id;
52382         this._tags = [];
52383         this._tagMap = {};
52384         this._valueSetMap = {};
52385         this._tags = customData.tags || [];
52386         this._globalAttributes = customData.globalAttributes || [];
52387         this._tags.forEach(function (t) {
52388             _this._tagMap[t.name.toLowerCase()] = t;
52389         });
52390         if (customData.valueSets) {
52391             customData.valueSets.forEach(function (vs) {
52392                 _this._valueSetMap[vs.name] = vs.values;
52393             });
52394         }
52395     }
52396     HTMLDataProvider.prototype.isApplicable = function () {
52397         return true;
52398     };
52399     HTMLDataProvider.prototype.getId = function () {
52400         return this.id;
52401     };
52402     HTMLDataProvider.prototype.provideTags = function () {
52403         return this._tags;
52404     };
52405     HTMLDataProvider.prototype.provideAttributes = function (tag) {
52406         var attributes = [];
52407         var processAttribute = function (a) {
52408             attributes.push(a);
52409         };
52410         var tagEntry = this._tagMap[tag.toLowerCase()];
52411         if (tagEntry) {
52412             tagEntry.attributes.forEach(processAttribute);
52413         }
52414         this._globalAttributes.forEach(processAttribute);
52415         return attributes;
52416     };
52417     HTMLDataProvider.prototype.provideValues = function (tag, attribute) {
52418         var _this = this;
52419         var values = [];
52420         attribute = attribute.toLowerCase();
52421         var processAttributes = function (attributes) {
52422             attributes.forEach(function (a) {
52423                 if (a.name.toLowerCase() === attribute) {
52424                     if (a.values) {
52425                         a.values.forEach(function (v) {
52426                             values.push(v);
52427                         });
52428                     }
52429                     if (a.valueSet) {
52430                         if (_this._valueSetMap[a.valueSet]) {
52431                             _this._valueSetMap[a.valueSet].forEach(function (v) {
52432                                 values.push(v);
52433                             });
52434                         }
52435                     }
52436                 }
52437             });
52438         };
52439         var tagEntry = this._tagMap[tag.toLowerCase()];
52440         if (!tagEntry) {
52441             return [];
52442         }
52443         processAttributes(tagEntry.attributes);
52444         processAttributes(this._globalAttributes);
52445         return values;
52446     };
52447     return HTMLDataProvider;
52448 }());
52449
52450 /**
52451  * Generate Documentation used in hover/complete
52452  * From `documentation` and `references`
52453  */
52454 function generateDocumentation(item, settings, doesSupportMarkdown) {
52455     if (settings === void 0) { settings = {}; }
52456     var result = {
52457         kind: doesSupportMarkdown ? 'markdown' : 'plaintext',
52458         value: ''
52459     };
52460     if (item.description && settings.documentation !== false) {
52461         var normalizedDescription = (0,_utils_markup__WEBPACK_IMPORTED_MODULE_0__.normalizeMarkupContent)(item.description);
52462         if (normalizedDescription) {
52463             result.value += normalizedDescription.value;
52464         }
52465     }
52466     if (item.references && item.references.length > 0 && settings.references !== false) {
52467         if (result.value.length) {
52468             result.value += "\n\n";
52469         }
52470         if (doesSupportMarkdown) {
52471             result.value += item.references.map(function (r) {
52472                 return "[" + r.name + "](" + r.url + ")";
52473             }).join(' | ');
52474         }
52475         else {
52476             result.value += item.references.map(function (r) {
52477                 return r.name + ": " + r.url;
52478             }).join('\n');
52479         }
52480     }
52481     if (result.value === '') {
52482         return undefined;
52483     }
52484     return result;
52485 }
52486
52487
52488 /***/ }),
52489 /* 127 */
52490 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
52491
52492 __webpack_require__.r(__webpack_exports__);
52493 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
52494 /* harmony export */   "normalizeMarkupContent": () => /* binding */ normalizeMarkupContent
52495 /* harmony export */ });
52496 /*---------------------------------------------------------------------------------------------
52497  *  Copyright (c) Microsoft Corporation. All rights reserved.
52498  *  Licensed under the MIT License. See License.txt in the project root for license information.
52499  *--------------------------------------------------------------------------------------------*/
52500 function normalizeMarkupContent(input) {
52501     if (!input) {
52502         return undefined;
52503     }
52504     if (typeof input === 'string') {
52505         return {
52506             kind: 'markdown',
52507             value: input
52508         };
52509     }
52510     return {
52511         kind: 'markdown',
52512         value: input.value
52513     };
52514 }
52515
52516
52517 /***/ }),
52518 /* 128 */
52519 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
52520
52521 __webpack_require__.r(__webpack_exports__);
52522 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
52523 /* harmony export */   "PathCompletionParticipant": () => /* binding */ PathCompletionParticipant
52524 /* harmony export */ });
52525 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(117);
52526 /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(124);
52527 /*---------------------------------------------------------------------------------------------
52528  *  Copyright (c) Microsoft Corporation. All rights reserved.
52529  *  Licensed under the MIT License. See License.txt in the project root for license information.
52530  *--------------------------------------------------------------------------------------------*/
52531 var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
52532     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
52533     return new (P || (P = Promise))(function (resolve, reject) {
52534         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
52535         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
52536         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
52537         step((generator = generator.apply(thisArg, _arguments || [])).next());
52538     });
52539 };
52540 var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
52541     var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
52542     return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
52543     function verb(n) { return function (v) { return step([n, v]); }; }
52544     function step(op) {
52545         if (f) throw new TypeError("Generator is already executing.");
52546         while (_) try {
52547             if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
52548             if (y = 0, t) op = [op[0] & 2, t.value];
52549             switch (op[0]) {
52550                 case 0: case 1: t = op; break;
52551                 case 4: _.label++; return { value: op[1], done: false };
52552                 case 5: _.label++; y = op[1]; op = [0]; continue;
52553                 case 7: op = _.ops.pop(); _.trys.pop(); continue;
52554                 default:
52555                     if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
52556                     if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
52557                     if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52558                     if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
52559                     if (t[2]) _.ops.pop();
52560                     _.trys.pop(); continue;
52561             }
52562             op = body.call(thisArg, _);
52563         } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
52564         if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
52565     }
52566 };
52567
52568
52569 var PathCompletionParticipant = /** @class */ (function () {
52570     function PathCompletionParticipant(readDirectory) {
52571         this.readDirectory = readDirectory;
52572         this.atributeCompletions = [];
52573     }
52574     PathCompletionParticipant.prototype.onHtmlAttributeValue = function (context) {
52575         if (isPathAttribute(context.tag, context.attribute)) {
52576             this.atributeCompletions.push(context);
52577         }
52578     };
52579     PathCompletionParticipant.prototype.computeCompletions = function (document, documentContext) {
52580         return __awaiter(this, void 0, void 0, function () {
52581             var result, _i, _a, attributeCompletion, fullValue, replaceRange, suggestions, _b, suggestions_1, item;
52582             return __generator(this, function (_c) {
52583                 switch (_c.label) {
52584                     case 0:
52585                         result = { items: [], isIncomplete: false };
52586                         _i = 0, _a = this.atributeCompletions;
52587                         _c.label = 1;
52588                     case 1:
52589                         if (!(_i < _a.length)) return [3 /*break*/, 5];
52590                         attributeCompletion = _a[_i];
52591                         fullValue = stripQuotes(document.getText(attributeCompletion.range));
52592                         if (!isCompletablePath(fullValue)) return [3 /*break*/, 4];
52593                         if (!(fullValue === '.' || fullValue === '..')) return [3 /*break*/, 2];
52594                         result.isIncomplete = true;
52595                         return [3 /*break*/, 4];
52596                     case 2:
52597                         replaceRange = pathToReplaceRange(attributeCompletion.value, fullValue, attributeCompletion.range);
52598                         return [4 /*yield*/, this.providePathSuggestions(attributeCompletion.value, replaceRange, document, documentContext)];
52599                     case 3:
52600                         suggestions = _c.sent();
52601                         for (_b = 0, suggestions_1 = suggestions; _b < suggestions_1.length; _b++) {
52602                             item = suggestions_1[_b];
52603                             result.items.push(item);
52604                         }
52605                         _c.label = 4;
52606                     case 4:
52607                         _i++;
52608                         return [3 /*break*/, 1];
52609                     case 5: return [2 /*return*/, result];
52610                 }
52611             });
52612         });
52613     };
52614     PathCompletionParticipant.prototype.providePathSuggestions = function (valueBeforeCursor, replaceRange, document, documentContext) {
52615         return __awaiter(this, void 0, void 0, function () {
52616             var valueBeforeLastSlash, parentDir, result, infos, _i, infos_1, _a, name, type, e_1;
52617             return __generator(this, function (_b) {
52618                 switch (_b.label) {
52619                     case 0:
52620                         valueBeforeLastSlash = valueBeforeCursor.substring(0, valueBeforeCursor.lastIndexOf('/') + 1);
52621                         parentDir = documentContext.resolveReference(valueBeforeLastSlash || '.', document.uri);
52622                         if (!parentDir) return [3 /*break*/, 4];
52623                         _b.label = 1;
52624                     case 1:
52625                         _b.trys.push([1, 3, , 4]);
52626                         result = [];
52627                         return [4 /*yield*/, this.readDirectory(parentDir)];
52628                     case 2:
52629                         infos = _b.sent();
52630                         for (_i = 0, infos_1 = infos; _i < infos_1.length; _i++) {
52631                             _a = infos_1[_i], name = _a[0], type = _a[1];
52632                             // Exclude paths that start with `.`
52633                             if (name.charCodeAt(0) !== CharCode_dot) {
52634                                 result.push(createCompletionItem(name, type === _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.FileType.Directory, replaceRange));
52635                             }
52636                         }
52637                         return [2 /*return*/, result];
52638                     case 3:
52639                         e_1 = _b.sent();
52640                         return [3 /*break*/, 4];
52641                     case 4: return [2 /*return*/, []];
52642                 }
52643             });
52644         });
52645     };
52646     return PathCompletionParticipant;
52647 }());
52648
52649 var CharCode_dot = '.'.charCodeAt(0);
52650 function stripQuotes(fullValue) {
52651     if ((0,_utils_strings__WEBPACK_IMPORTED_MODULE_1__.startsWith)(fullValue, "'") || (0,_utils_strings__WEBPACK_IMPORTED_MODULE_1__.startsWith)(fullValue, "\"")) {
52652         return fullValue.slice(1, -1);
52653     }
52654     else {
52655         return fullValue;
52656     }
52657 }
52658 function isCompletablePath(value) {
52659     if ((0,_utils_strings__WEBPACK_IMPORTED_MODULE_1__.startsWith)(value, 'http') || (0,_utils_strings__WEBPACK_IMPORTED_MODULE_1__.startsWith)(value, 'https') || (0,_utils_strings__WEBPACK_IMPORTED_MODULE_1__.startsWith)(value, '//')) {
52660         return false;
52661     }
52662     return true;
52663 }
52664 function isPathAttribute(tag, attr) {
52665     var a = PATH_TAG_AND_ATTR[tag];
52666     if (a) {
52667         if (typeof a === 'string') {
52668             return a === attr;
52669         }
52670         else {
52671             return a.indexOf(attr) !== -1;
52672         }
52673     }
52674     return false;
52675 }
52676 function pathToReplaceRange(valueBeforeCursor, fullValue, range) {
52677     var replaceRange;
52678     var lastIndexOfSlash = valueBeforeCursor.lastIndexOf('/');
52679     if (lastIndexOfSlash === -1) {
52680         replaceRange = shiftRange(range, 1, -1);
52681     }
52682     else {
52683         // For cases where cursor is in the middle of attribute value, like <script src="./s|rc/test.js">
52684         // Find the last slash before cursor, and calculate the start of replace range from there
52685         var valueAfterLastSlash = fullValue.slice(lastIndexOfSlash + 1);
52686         var startPos = shiftPosition(range.end, -1 - valueAfterLastSlash.length);
52687         // If whitespace exists, replace until there is no more
52688         var whitespaceIndex = valueAfterLastSlash.indexOf(' ');
52689         var endPos = void 0;
52690         if (whitespaceIndex !== -1) {
52691             endPos = shiftPosition(startPos, whitespaceIndex);
52692         }
52693         else {
52694             endPos = shiftPosition(range.end, -1);
52695         }
52696         replaceRange = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Range.create(startPos, endPos);
52697     }
52698     return replaceRange;
52699 }
52700 function createCompletionItem(p, isDir, replaceRange) {
52701     if (isDir) {
52702         p = p + '/';
52703         return {
52704             label: p,
52705             kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.CompletionItemKind.Folder,
52706             textEdit: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TextEdit.replace(replaceRange, p),
52707             command: {
52708                 title: 'Suggest',
52709                 command: 'editor.action.triggerSuggest'
52710             }
52711         };
52712     }
52713     else {
52714         return {
52715             label: p,
52716             kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.CompletionItemKind.File,
52717             textEdit: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TextEdit.replace(replaceRange, p)
52718         };
52719     }
52720 }
52721 function shiftPosition(pos, offset) {
52722     return _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Position.create(pos.line, pos.character + offset);
52723 }
52724 function shiftRange(range, startOffset, endOffset) {
52725     var start = shiftPosition(range.start, startOffset);
52726     var end = shiftPosition(range.end, endOffset);
52727     return _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Range.create(start, end);
52728 }
52729 // Selected from https://stackoverflow.com/a/2725168/1780148
52730 var PATH_TAG_AND_ATTR = {
52731     // HTML 4
52732     a: 'href',
52733     area: 'href',
52734     body: 'background',
52735     del: 'cite',
52736     form: 'action',
52737     frame: ['src', 'longdesc'],
52738     img: ['src', 'longdesc'],
52739     ins: 'cite',
52740     link: 'href',
52741     object: 'data',
52742     q: 'cite',
52743     script: 'src',
52744     // HTML 5
52745     audio: 'src',
52746     button: 'formaction',
52747     command: 'icon',
52748     embed: 'src',
52749     html: 'manifest',
52750     input: ['src', 'formaction'],
52751     source: 'src',
52752     track: 'src',
52753     video: ['src', 'poster']
52754 };
52755
52756
52757 /***/ }),
52758 /* 129 */
52759 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
52760
52761 __webpack_require__.r(__webpack_exports__);
52762 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
52763 /* harmony export */   "HTMLHover": () => /* binding */ HTMLHover
52764 /* harmony export */ });
52765 /* harmony import */ var _parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(116);
52766 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(117);
52767 /* harmony import */ var _utils_object__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(125);
52768 /* harmony import */ var _languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(126);
52769 /* harmony import */ var _parser_htmlEntities__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(123);
52770 /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(124);
52771 /* harmony import */ var vscode_nls__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(77);
52772 /*---------------------------------------------------------------------------------------------
52773  *  Copyright (c) Microsoft Corporation. All rights reserved.
52774  *  Licensed under the MIT License. See License.txt in the project root for license information.
52775  *--------------------------------------------------------------------------------------------*/
52776
52777
52778
52779
52780
52781
52782
52783 var localize = vscode_nls__WEBPACK_IMPORTED_MODULE_6__.loadMessageBundle();
52784 var HTMLHover = /** @class */ (function () {
52785     function HTMLHover(lsOptions, dataManager) {
52786         this.lsOptions = lsOptions;
52787         this.dataManager = dataManager;
52788     }
52789     HTMLHover.prototype.doHover = function (document, position, htmlDocument, options) {
52790         var convertContents = this.convertContents.bind(this);
52791         var doesSupportMarkdown = this.doesSupportMarkdown();
52792         var offset = document.offsetAt(position);
52793         var node = htmlDocument.findNodeAt(offset);
52794         var text = document.getText();
52795         if (!node || !node.tag) {
52796             return null;
52797         }
52798         var dataProviders = this.dataManager.getDataProviders().filter(function (p) { return p.isApplicable(document.languageId); });
52799         function getTagHover(currTag, range, open) {
52800             var _loop_1 = function (provider) {
52801                 var hover = null;
52802                 provider.provideTags().forEach(function (tag) {
52803                     if (tag.name.toLowerCase() === currTag.toLowerCase()) {
52804                         var markupContent = (0,_languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_3__.generateDocumentation)(tag, options, doesSupportMarkdown);
52805                         if (!markupContent) {
52806                             markupContent = {
52807                                 kind: doesSupportMarkdown ? 'markdown' : 'plaintext',
52808                                 value: ''
52809                             };
52810                         }
52811                         hover = { contents: markupContent, range: range };
52812                     }
52813                 });
52814                 if (hover) {
52815                     hover.contents = convertContents(hover.contents);
52816                     return { value: hover };
52817                 }
52818             };
52819             for (var _i = 0, dataProviders_1 = dataProviders; _i < dataProviders_1.length; _i++) {
52820                 var provider = dataProviders_1[_i];
52821                 var state_1 = _loop_1(provider);
52822                 if (typeof state_1 === "object")
52823                     return state_1.value;
52824             }
52825             return null;
52826         }
52827         function getAttrHover(currTag, currAttr, range) {
52828             var _loop_2 = function (provider) {
52829                 var hover = null;
52830                 provider.provideAttributes(currTag).forEach(function (attr) {
52831                     if (currAttr === attr.name && attr.description) {
52832                         var contentsDoc = (0,_languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_3__.generateDocumentation)(attr, options, doesSupportMarkdown);
52833                         if (contentsDoc) {
52834                             hover = { contents: contentsDoc, range: range };
52835                         }
52836                         else {
52837                             hover = null;
52838                         }
52839                     }
52840                 });
52841                 if (hover) {
52842                     hover.contents = convertContents(hover.contents);
52843                     return { value: hover };
52844                 }
52845             };
52846             for (var _i = 0, dataProviders_2 = dataProviders; _i < dataProviders_2.length; _i++) {
52847                 var provider = dataProviders_2[_i];
52848                 var state_2 = _loop_2(provider);
52849                 if (typeof state_2 === "object")
52850                     return state_2.value;
52851             }
52852             return null;
52853         }
52854         function getAttrValueHover(currTag, currAttr, currAttrValue, range) {
52855             var _loop_3 = function (provider) {
52856                 var hover = null;
52857                 provider.provideValues(currTag, currAttr).forEach(function (attrValue) {
52858                     if (currAttrValue === attrValue.name && attrValue.description) {
52859                         var contentsDoc = (0,_languageFacts_dataProvider__WEBPACK_IMPORTED_MODULE_3__.generateDocumentation)(attrValue, options, doesSupportMarkdown);
52860                         if (contentsDoc) {
52861                             hover = { contents: contentsDoc, range: range };
52862                         }
52863                         else {
52864                             hover = null;
52865                         }
52866                     }
52867                 });
52868                 if (hover) {
52869                     hover.contents = convertContents(hover.contents);
52870                     return { value: hover };
52871                 }
52872             };
52873             for (var _i = 0, dataProviders_3 = dataProviders; _i < dataProviders_3.length; _i++) {
52874                 var provider = dataProviders_3[_i];
52875                 var state_3 = _loop_3(provider);
52876                 if (typeof state_3 === "object")
52877                     return state_3.value;
52878             }
52879             return null;
52880         }
52881         function getEntityHover(text, range) {
52882             var currEntity = filterEntity(text);
52883             for (var entity in _parser_htmlEntities__WEBPACK_IMPORTED_MODULE_4__.entities) {
52884                 var hover = null;
52885                 var label = '&' + entity;
52886                 if (currEntity === label) {
52887                     var code = _parser_htmlEntities__WEBPACK_IMPORTED_MODULE_4__.entities[entity].charCodeAt(0).toString(16).toUpperCase();
52888                     var hex = 'U+';
52889                     if (code.length < 4) {
52890                         var zeroes = 4 - code.length;
52891                         var k = 0;
52892                         while (k < zeroes) {
52893                             hex += '0';
52894                             k += 1;
52895                         }
52896                     }
52897                     hex += code;
52898                     var contentsDoc = localize('entity.propose', "Character entity representing '" + _parser_htmlEntities__WEBPACK_IMPORTED_MODULE_4__.entities[entity] + "', unicode equivalent '" + hex + "'");
52899                     if (contentsDoc) {
52900                         hover = { contents: contentsDoc, range: range };
52901                     }
52902                     else {
52903                         hover = null;
52904                     }
52905                 }
52906                 if (hover) {
52907                     hover.contents = convertContents(hover.contents);
52908                     return hover;
52909                 }
52910             }
52911             return null;
52912         }
52913         function getTagNameRange(tokenType, startOffset) {
52914             var scanner = (0,_parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(document.getText(), startOffset);
52915             var token = scanner.scan();
52916             while (token !== _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOS && (scanner.getTokenEnd() < offset || scanner.getTokenEnd() === offset && token !== tokenType)) {
52917                 token = scanner.scan();
52918             }
52919             if (token === tokenType && offset <= scanner.getTokenEnd()) {
52920                 return { start: document.positionAt(scanner.getTokenOffset()), end: document.positionAt(scanner.getTokenEnd()) };
52921             }
52922             return null;
52923         }
52924         function getEntityRange() {
52925             var k = offset - 1;
52926             var characterStart = position.character;
52927             while (k >= 0 && (0,_utils_strings__WEBPACK_IMPORTED_MODULE_5__.isLetterOrDigit)(text, k)) {
52928                 k--;
52929                 characterStart--;
52930             }
52931             var n = k + 1;
52932             var characterEnd = characterStart;
52933             while ((0,_utils_strings__WEBPACK_IMPORTED_MODULE_5__.isLetterOrDigit)(text, n)) {
52934                 n++;
52935                 characterEnd++;
52936             }
52937             if (k >= 0 && text[k] === '&') {
52938                 var range = null;
52939                 if (text[n] === ';') {
52940                     range = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.Range.create(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.Position.create(position.line, characterStart), _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.Position.create(position.line, characterEnd + 1));
52941                 }
52942                 else {
52943                     range = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.Range.create(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.Position.create(position.line, characterStart), _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.Position.create(position.line, characterEnd));
52944                 }
52945                 return range;
52946             }
52947             return null;
52948         }
52949         function filterEntity(text) {
52950             var k = offset - 1;
52951             var newText = '&';
52952             while (k >= 0 && (0,_utils_strings__WEBPACK_IMPORTED_MODULE_5__.isLetterOrDigit)(text, k)) {
52953                 k--;
52954             }
52955             k = k + 1;
52956             while ((0,_utils_strings__WEBPACK_IMPORTED_MODULE_5__.isLetterOrDigit)(text, k)) {
52957                 newText += text[k];
52958                 k += 1;
52959             }
52960             newText += ';';
52961             return newText;
52962         }
52963         if (node.endTagStart && offset >= node.endTagStart) {
52964             var tagRange_1 = getTagNameRange(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndTag, node.endTagStart);
52965             if (tagRange_1) {
52966                 return getTagHover(node.tag, tagRange_1, false);
52967             }
52968             return null;
52969         }
52970         var tagRange = getTagNameRange(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTag, node.start);
52971         if (tagRange) {
52972             return getTagHover(node.tag, tagRange, true);
52973         }
52974         var attrRange = getTagNameRange(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.AttributeName, node.start);
52975         if (attrRange) {
52976             var tag = node.tag;
52977             var attr = document.getText(attrRange);
52978             return getAttrHover(tag, attr, attrRange);
52979         }
52980         var entityRange = getEntityRange();
52981         if (entityRange) {
52982             return getEntityHover(text, entityRange);
52983         }
52984         function scanAttrAndAttrValue(nodeStart, attrValueStart) {
52985             var scanner = (0,_parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(document.getText(), nodeStart);
52986             var token = scanner.scan();
52987             var prevAttr = undefined;
52988             while (token !== _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOS && (scanner.getTokenEnd() <= attrValueStart)) {
52989                 token = scanner.scan();
52990                 if (token === _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.AttributeName) {
52991                     prevAttr = scanner.getTokenText();
52992                 }
52993             }
52994             return prevAttr;
52995         }
52996         var attrValueRange = getTagNameRange(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.AttributeValue, node.start);
52997         if (attrValueRange) {
52998             var tag = node.tag;
52999             var attrValue = trimQuotes(document.getText(attrValueRange));
53000             var matchAttr = scanAttrAndAttrValue(node.start, document.offsetAt(attrValueRange.start));
53001             if (matchAttr) {
53002                 return getAttrValueHover(tag, matchAttr, attrValue, attrValueRange);
53003             }
53004         }
53005         return null;
53006     };
53007     HTMLHover.prototype.convertContents = function (contents) {
53008         if (!this.doesSupportMarkdown()) {
53009             if (typeof contents === 'string') {
53010                 return contents;
53011             }
53012             // MarkupContent
53013             else if ('kind' in contents) {
53014                 return {
53015                     kind: 'plaintext',
53016                     value: contents.value
53017                 };
53018             }
53019             // MarkedString[]
53020             else if (Array.isArray(contents)) {
53021                 contents.map(function (c) {
53022                     return typeof c === 'string' ? c : c.value;
53023                 });
53024             }
53025             // MarkedString
53026             else {
53027                 return contents.value;
53028             }
53029         }
53030         return contents;
53031     };
53032     HTMLHover.prototype.doesSupportMarkdown = function () {
53033         var _a, _b, _c;
53034         if (!(0,_utils_object__WEBPACK_IMPORTED_MODULE_2__.isDefined)(this.supportsMarkdown)) {
53035             if (!(0,_utils_object__WEBPACK_IMPORTED_MODULE_2__.isDefined)(this.lsOptions.clientCapabilities)) {
53036                 this.supportsMarkdown = true;
53037                 return this.supportsMarkdown;
53038             }
53039             var contentFormat = (_c = (_b = (_a = this.lsOptions.clientCapabilities) === null || _a === void 0 ? void 0 : _a.textDocument) === null || _b === void 0 ? void 0 : _b.hover) === null || _c === void 0 ? void 0 : _c.contentFormat;
53040             this.supportsMarkdown = Array.isArray(contentFormat) && contentFormat.indexOf(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.MarkupKind.Markdown) !== -1;
53041         }
53042         return this.supportsMarkdown;
53043     };
53044     return HTMLHover;
53045 }());
53046
53047 function trimQuotes(s) {
53048     if (s.length <= 1) {
53049         return s.replace(/['"]/, '');
53050     }
53051     if (s[0] === "'" || s[0] === "\"") {
53052         s = s.slice(1);
53053     }
53054     if (s[s.length - 1] === "'" || s[s.length - 1] === "\"") {
53055         s = s.slice(0, -1);
53056     }
53057     return s;
53058 }
53059
53060
53061 /***/ }),
53062 /* 130 */
53063 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
53064
53065 __webpack_require__.r(__webpack_exports__);
53066 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
53067 /* harmony export */   "format": () => /* binding */ format
53068 /* harmony export */ });
53069 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(117);
53070 /* harmony import */ var _beautify_beautify_html__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(131);
53071 /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(124);
53072 /*---------------------------------------------------------------------------------------------
53073  *  Copyright (c) Microsoft Corporation. All rights reserved.
53074  *  Licensed under the MIT License. See License.txt in the project root for license information.
53075  *--------------------------------------------------------------------------------------------*/
53076
53077
53078
53079 function format(document, range, options) {
53080     var value = document.getText();
53081     var includesEnd = true;
53082     var initialIndentLevel = 0;
53083     var tabSize = options.tabSize || 4;
53084     if (range) {
53085         var startOffset = document.offsetAt(range.start);
53086         // include all leading whitespace iff at the beginning of the line
53087         var extendedStart = startOffset;
53088         while (extendedStart > 0 && isWhitespace(value, extendedStart - 1)) {
53089             extendedStart--;
53090         }
53091         if (extendedStart === 0 || isEOL(value, extendedStart - 1)) {
53092             startOffset = extendedStart;
53093         }
53094         else {
53095             // else keep at least one whitespace
53096             if (extendedStart < startOffset) {
53097                 startOffset = extendedStart + 1;
53098             }
53099         }
53100         // include all following whitespace until the end of the line
53101         var endOffset = document.offsetAt(range.end);
53102         var extendedEnd = endOffset;
53103         while (extendedEnd < value.length && isWhitespace(value, extendedEnd)) {
53104             extendedEnd++;
53105         }
53106         if (extendedEnd === value.length || isEOL(value, extendedEnd)) {
53107             endOffset = extendedEnd;
53108         }
53109         range = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Range.create(document.positionAt(startOffset), document.positionAt(endOffset));
53110         // Do not modify if substring starts in inside an element
53111         // Ending inside an element is fine as it doesn't cause formatting errors
53112         var firstHalf = value.substring(0, startOffset);
53113         if (new RegExp(/.*[<][^>]*$/).test(firstHalf)) {
53114             //return without modification
53115             value = value.substring(startOffset, endOffset);
53116             return [{
53117                     range: range,
53118                     newText: value
53119                 }];
53120         }
53121         includesEnd = endOffset === value.length;
53122         value = value.substring(startOffset, endOffset);
53123         if (startOffset !== 0) {
53124             var startOfLineOffset = document.offsetAt(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Position.create(range.start.line, 0));
53125             initialIndentLevel = computeIndentLevel(document.getText(), startOfLineOffset, options);
53126         }
53127     }
53128     else {
53129         range = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Range.create(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Position.create(0, 0), document.positionAt(value.length));
53130     }
53131     var htmlOptions = {
53132         indent_size: tabSize,
53133         indent_char: options.insertSpaces ? ' ' : '\t',
53134         indent_empty_lines: getFormatOption(options, 'indentEmptyLines', false),
53135         wrap_line_length: getFormatOption(options, 'wrapLineLength', 120),
53136         unformatted: getTagsFormatOption(options, 'unformatted', void 0),
53137         content_unformatted: getTagsFormatOption(options, 'contentUnformatted', void 0),
53138         indent_inner_html: getFormatOption(options, 'indentInnerHtml', false),
53139         preserve_newlines: getFormatOption(options, 'preserveNewLines', true),
53140         max_preserve_newlines: getFormatOption(options, 'maxPreserveNewLines', 32786),
53141         indent_handlebars: getFormatOption(options, 'indentHandlebars', false),
53142         end_with_newline: includesEnd && getFormatOption(options, 'endWithNewline', false),
53143         extra_liners: getTagsFormatOption(options, 'extraLiners', void 0),
53144         wrap_attributes: getFormatOption(options, 'wrapAttributes', 'auto'),
53145         wrap_attributes_indent_size: getFormatOption(options, 'wrapAttributesIndentSize', void 0),
53146         eol: '\n',
53147         indent_scripts: getFormatOption(options, 'indentScripts', 'normal'),
53148         templating: getTemplatingFormatOption(options, 'all'),
53149         unformatted_content_delimiter: getFormatOption(options, 'unformattedContentDelimiter', ''),
53150     };
53151     var result = (0,_beautify_beautify_html__WEBPACK_IMPORTED_MODULE_1__.html_beautify)(trimLeft(value), htmlOptions);
53152     if (initialIndentLevel > 0) {
53153         var indent = options.insertSpaces ? (0,_utils_strings__WEBPACK_IMPORTED_MODULE_2__.repeat)(' ', tabSize * initialIndentLevel) : (0,_utils_strings__WEBPACK_IMPORTED_MODULE_2__.repeat)('\t', initialIndentLevel);
53154         result = result.split('\n').join('\n' + indent);
53155         if (range.start.character === 0) {
53156             result = indent + result; // keep the indent
53157         }
53158     }
53159     return [{
53160             range: range,
53161             newText: result
53162         }];
53163 }
53164 function trimLeft(str) {
53165     return str.replace(/^\s+/, '');
53166 }
53167 function getFormatOption(options, key, dflt) {
53168     if (options && options.hasOwnProperty(key)) {
53169         var value = options[key];
53170         if (value !== null) {
53171             return value;
53172         }
53173     }
53174     return dflt;
53175 }
53176 function getTagsFormatOption(options, key, dflt) {
53177     var list = getFormatOption(options, key, null);
53178     if (typeof list === 'string') {
53179         if (list.length > 0) {
53180             return list.split(',').map(function (t) { return t.trim().toLowerCase(); });
53181         }
53182         return [];
53183     }
53184     return dflt;
53185 }
53186 function getTemplatingFormatOption(options, dflt) {
53187     var value = getFormatOption(options, 'templating', dflt);
53188     if (value === true) {
53189         return ['auto'];
53190     }
53191     return ['none'];
53192 }
53193 function computeIndentLevel(content, offset, options) {
53194     var i = offset;
53195     var nChars = 0;
53196     var tabSize = options.tabSize || 4;
53197     while (i < content.length) {
53198         var ch = content.charAt(i);
53199         if (ch === ' ') {
53200             nChars++;
53201         }
53202         else if (ch === '\t') {
53203             nChars += tabSize;
53204         }
53205         else {
53206             break;
53207         }
53208         i++;
53209     }
53210     return Math.floor(nChars / tabSize);
53211 }
53212 function getEOL(document) {
53213     var text = document.getText();
53214     if (document.lineCount > 1) {
53215         var to = document.offsetAt(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Position.create(1, 0));
53216         var from = to;
53217         while (from > 0 && isEOL(text, from - 1)) {
53218             from--;
53219         }
53220         return text.substr(from, to - from);
53221     }
53222     return '\n';
53223 }
53224 function isEOL(text, offset) {
53225     return '\r\n'.indexOf(text.charAt(offset)) !== -1;
53226 }
53227 function isWhitespace(text, offset) {
53228     return ' \t'.indexOf(text.charAt(offset)) !== -1;
53229 }
53230
53231
53232 /***/ }),
53233 /* 131 */
53234 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
53235
53236 __webpack_require__.r(__webpack_exports__);
53237 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
53238 /* harmony export */   "html_beautify": () => /* binding */ html_beautify
53239 /* harmony export */ });
53240 /* harmony import */ var _beautify__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(132);
53241 /* harmony import */ var _beautify_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(133);
53242 // copied from js-beautify/js/lib/beautify-html.js
53243 // version: 1.13.0
53244 /* AUTO-GENERATED. DO NOT MODIFY. */
53245 /*
53246
53247   The MIT License (MIT)
53248
53249   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
53250
53251   Permission is hereby granted, free of charge, to any person
53252   obtaining a copy of this software and associated documentation files
53253   (the "Software"), to deal in the Software without restriction,
53254   including without limitation the rights to use, copy, modify, merge,
53255   publish, distribute, sublicense, and/or sell copies of the Software,
53256   and to permit persons to whom the Software is furnished to do so,
53257   subject to the following conditions:
53258
53259   The above copyright notice and this permission notice shall be
53260   included in all copies or substantial portions of the Software.
53261
53262   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
53263   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
53264   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
53265   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
53266   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
53267   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
53268   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
53269   SOFTWARE.
53270
53271
53272  Style HTML
53273 ---------------
53274
53275   Written by Nochum Sossonko, (nsossonko@hotmail.com)
53276
53277   Based on code initially developed by: Einar Lielmanis, <einar@beautifier.io>
53278     https://beautifier.io/
53279
53280   Usage:
53281     style_html(html_source);
53282
53283     style_html(html_source, options);
53284
53285   The options are:
53286     indent_inner_html (default false)  — indent <head> and <body> sections,
53287     indent_size (default 4)          — indentation size,
53288     indent_char (default space)      — character to indent with,
53289     wrap_line_length (default 250)            -  maximum amount of characters per line (0 = disable)
53290     brace_style (default "collapse") - "collapse" | "expand" | "end-expand" | "none"
53291             put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line, or attempt to keep them where they are.
53292     inline (defaults to inline tags) - list of tags to be considered inline tags
53293     unformatted (defaults to inline tags) - list of tags, that shouldn't be reformatted
53294     content_unformatted (defaults to ["pre", "textarea"] tags) - list of tags, whose content shouldn't be reformatted
53295     indent_scripts (default normal)  - "keep"|"separate"|"normal"
53296     preserve_newlines (default true) - whether existing line breaks before elements should be preserved
53297                                         Only works before elements, not inside tags or for text.
53298     max_preserve_newlines (default unlimited) - maximum number of line breaks to be preserved in one chunk
53299     indent_handlebars (default false) - format and indent {{#foo}} and {{/foo}}
53300     end_with_newline (false)          - end with a newline
53301     extra_liners (default [head,body,/html]) -List of tags that should have an extra newline before them.
53302
53303     e.g.
53304
53305     style_html(html_source, {
53306       'indent_inner_html': false,
53307       'indent_size': 2,
53308       'indent_char': ' ',
53309       'wrap_line_length': 78,
53310       'brace_style': 'expand',
53311       'preserve_newlines': true,
53312       'max_preserve_newlines': 5,
53313       'indent_handlebars': false,
53314       'extra_liners': ['/html']
53315     });
53316 */
53317
53318
53319
53320
53321 var legacy_beautify_html =
53322 /******/ (function(modules) { // webpackBootstrap
53323 /******/        // The module cache
53324 /******/        var installedModules = {};
53325 /******/
53326 /******/        // The require function
53327 /******/        function __nested_webpack_require_3664__(moduleId) {
53328 /******/
53329 /******/                // Check if module is in cache
53330 /******/                if(installedModules[moduleId]) {
53331 /******/                        return installedModules[moduleId].exports;
53332 /******/                }
53333 /******/                // Create a new module (and put it into the cache)
53334 /******/                var module = installedModules[moduleId] = {
53335 /******/                        i: moduleId,
53336 /******/                        l: false,
53337 /******/                        exports: {}
53338 /******/                };
53339 /******/
53340 /******/                // Execute the module function
53341 /******/                modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_3664__);
53342 /******/
53343 /******/                // Flag the module as loaded
53344 /******/                module.l = true;
53345 /******/
53346 /******/                // Return the exports of the module
53347 /******/                return module.exports;
53348 /******/        }
53349 /******/
53350 /******/
53351 /******/        // expose the modules object (__webpack_modules__)
53352 /******/        __nested_webpack_require_3664__.m = modules;
53353 /******/
53354 /******/        // expose the module cache
53355 /******/        __nested_webpack_require_3664__.c = installedModules;
53356 /******/
53357 /******/        // define getter function for harmony exports
53358 /******/        __nested_webpack_require_3664__.d = function(exports, name, getter) {
53359 /******/                if(!__nested_webpack_require_3664__.o(exports, name)) {
53360 /******/                        Object.defineProperty(exports, name, { enumerable: true, get: getter });
53361 /******/                }
53362 /******/        };
53363 /******/
53364 /******/        // define __esModule on exports
53365 /******/        __nested_webpack_require_3664__.r = function(exports) {
53366 /******/                if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
53367 /******/                        Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
53368 /******/                }
53369 /******/                Object.defineProperty(exports, '__esModule', { value: true });
53370 /******/        };
53371 /******/
53372 /******/        // create a fake namespace object
53373 /******/        // mode & 1: value is a module id, require it
53374 /******/        // mode & 2: merge all properties of value into the ns
53375 /******/        // mode & 4: return value when already ns object
53376 /******/        // mode & 8|1: behave like require
53377 /******/        __nested_webpack_require_3664__.t = function(value, mode) {
53378 /******/                if(mode & 1) value = __nested_webpack_require_3664__(value);
53379 /******/                if(mode & 8) return value;
53380 /******/                if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
53381 /******/                var ns = Object.create(null);
53382 /******/                __nested_webpack_require_3664__.r(ns);
53383 /******/                Object.defineProperty(ns, 'default', { enumerable: true, value: value });
53384 /******/                if(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_3664__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
53385 /******/                return ns;
53386 /******/        };
53387 /******/
53388 /******/        // getDefaultExport function for compatibility with non-harmony modules
53389 /******/        __nested_webpack_require_3664__.n = function(module) {
53390 /******/                var getter = module && module.__esModule ?
53391 /******/                        function getDefault() { return module['default']; } :
53392 /******/                        function getModuleExports() { return module; };
53393 /******/                __nested_webpack_require_3664__.d(getter, 'a', getter);
53394 /******/                return getter;
53395 /******/        };
53396 /******/
53397 /******/        // Object.prototype.hasOwnProperty.call
53398 /******/        __nested_webpack_require_3664__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
53399 /******/
53400 /******/        // __webpack_public_path__
53401 /******/        __nested_webpack_require_3664__.p = "";
53402 /******/
53403 /******/
53404 /******/        // Load entry module and return exports
53405 /******/        return __nested_webpack_require_3664__(__nested_webpack_require_3664__.s = 18);
53406 /******/ })
53407 /************************************************************************/
53408 /******/ ([
53409 /* 0 */,
53410 /* 1 */,
53411 /* 2 */
53412 /***/ (function(module, exports, __nested_webpack_require_7147__) {
53413
53414 "use strict";
53415 /*jshint node:true */
53416 /*
53417   The MIT License (MIT)
53418
53419   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
53420
53421   Permission is hereby granted, free of charge, to any person
53422   obtaining a copy of this software and associated documentation files
53423   (the "Software"), to deal in the Software without restriction,
53424   including without limitation the rights to use, copy, modify, merge,
53425   publish, distribute, sublicense, and/or sell copies of the Software,
53426   and to permit persons to whom the Software is furnished to do so,
53427   subject to the following conditions:
53428
53429   The above copyright notice and this permission notice shall be
53430   included in all copies or substantial portions of the Software.
53431
53432   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
53433   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
53434   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
53435   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
53436   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
53437   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
53438   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
53439   SOFTWARE.
53440 */
53441
53442
53443
53444 function OutputLine(parent) {
53445   this.__parent = parent;
53446   this.__character_count = 0;
53447   // use indent_count as a marker for this.__lines that have preserved indentation
53448   this.__indent_count = -1;
53449   this.__alignment_count = 0;
53450   this.__wrap_point_index = 0;
53451   this.__wrap_point_character_count = 0;
53452   this.__wrap_point_indent_count = -1;
53453   this.__wrap_point_alignment_count = 0;
53454
53455   this.__items = [];
53456 }
53457
53458 OutputLine.prototype.clone_empty = function() {
53459   var line = new OutputLine(this.__parent);
53460   line.set_indent(this.__indent_count, this.__alignment_count);
53461   return line;
53462 };
53463
53464 OutputLine.prototype.item = function(index) {
53465   if (index < 0) {
53466     return this.__items[this.__items.length + index];
53467   } else {
53468     return this.__items[index];
53469   }
53470 };
53471
53472 OutputLine.prototype.has_match = function(pattern) {
53473   for (var lastCheckedOutput = this.__items.length - 1; lastCheckedOutput >= 0; lastCheckedOutput--) {
53474     if (this.__items[lastCheckedOutput].match(pattern)) {
53475       return true;
53476     }
53477   }
53478   return false;
53479 };
53480
53481 OutputLine.prototype.set_indent = function(indent, alignment) {
53482   if (this.is_empty()) {
53483     this.__indent_count = indent || 0;
53484     this.__alignment_count = alignment || 0;
53485     this.__character_count = this.__parent.get_indent_size(this.__indent_count, this.__alignment_count);
53486   }
53487 };
53488
53489 OutputLine.prototype._set_wrap_point = function() {
53490   if (this.__parent.wrap_line_length) {
53491     this.__wrap_point_index = this.__items.length;
53492     this.__wrap_point_character_count = this.__character_count;
53493     this.__wrap_point_indent_count = this.__parent.next_line.__indent_count;
53494     this.__wrap_point_alignment_count = this.__parent.next_line.__alignment_count;
53495   }
53496 };
53497
53498 OutputLine.prototype._should_wrap = function() {
53499   return this.__wrap_point_index &&
53500     this.__character_count > this.__parent.wrap_line_length &&
53501     this.__wrap_point_character_count > this.__parent.next_line.__character_count;
53502 };
53503
53504 OutputLine.prototype._allow_wrap = function() {
53505   if (this._should_wrap()) {
53506     this.__parent.add_new_line();
53507     var next = this.__parent.current_line;
53508     next.set_indent(this.__wrap_point_indent_count, this.__wrap_point_alignment_count);
53509     next.__items = this.__items.slice(this.__wrap_point_index);
53510     this.__items = this.__items.slice(0, this.__wrap_point_index);
53511
53512     next.__character_count += this.__character_count - this.__wrap_point_character_count;
53513     this.__character_count = this.__wrap_point_character_count;
53514
53515     if (next.__items[0] === " ") {
53516       next.__items.splice(0, 1);
53517       next.__character_count -= 1;
53518     }
53519     return true;
53520   }
53521   return false;
53522 };
53523
53524 OutputLine.prototype.is_empty = function() {
53525   return this.__items.length === 0;
53526 };
53527
53528 OutputLine.prototype.last = function() {
53529   if (!this.is_empty()) {
53530     return this.__items[this.__items.length - 1];
53531   } else {
53532     return null;
53533   }
53534 };
53535
53536 OutputLine.prototype.push = function(item) {
53537   this.__items.push(item);
53538   var last_newline_index = item.lastIndexOf('\n');
53539   if (last_newline_index !== -1) {
53540     this.__character_count = item.length - last_newline_index;
53541   } else {
53542     this.__character_count += item.length;
53543   }
53544 };
53545
53546 OutputLine.prototype.pop = function() {
53547   var item = null;
53548   if (!this.is_empty()) {
53549     item = this.__items.pop();
53550     this.__character_count -= item.length;
53551   }
53552   return item;
53553 };
53554
53555
53556 OutputLine.prototype._remove_indent = function() {
53557   if (this.__indent_count > 0) {
53558     this.__indent_count -= 1;
53559     this.__character_count -= this.__parent.indent_size;
53560   }
53561 };
53562
53563 OutputLine.prototype._remove_wrap_indent = function() {
53564   if (this.__wrap_point_indent_count > 0) {
53565     this.__wrap_point_indent_count -= 1;
53566   }
53567 };
53568 OutputLine.prototype.trim = function() {
53569   while (this.last() === ' ') {
53570     this.__items.pop();
53571     this.__character_count -= 1;
53572   }
53573 };
53574
53575 OutputLine.prototype.toString = function() {
53576   var result = '';
53577   if (this.is_empty()) {
53578     if (this.__parent.indent_empty_lines) {
53579       result = this.__parent.get_indent_string(this.__indent_count);
53580     }
53581   } else {
53582     result = this.__parent.get_indent_string(this.__indent_count, this.__alignment_count);
53583     result += this.__items.join('');
53584   }
53585   return result;
53586 };
53587
53588 function IndentStringCache(options, baseIndentString) {
53589   this.__cache = [''];
53590   this.__indent_size = options.indent_size;
53591   this.__indent_string = options.indent_char;
53592   if (!options.indent_with_tabs) {
53593     this.__indent_string = new Array(options.indent_size + 1).join(options.indent_char);
53594   }
53595
53596   // Set to null to continue support for auto detection of base indent
53597   baseIndentString = baseIndentString || '';
53598   if (options.indent_level > 0) {
53599     baseIndentString = new Array(options.indent_level + 1).join(this.__indent_string);
53600   }
53601
53602   this.__base_string = baseIndentString;
53603   this.__base_string_length = baseIndentString.length;
53604 }
53605
53606 IndentStringCache.prototype.get_indent_size = function(indent, column) {
53607   var result = this.__base_string_length;
53608   column = column || 0;
53609   if (indent < 0) {
53610     result = 0;
53611   }
53612   result += indent * this.__indent_size;
53613   result += column;
53614   return result;
53615 };
53616
53617 IndentStringCache.prototype.get_indent_string = function(indent_level, column) {
53618   var result = this.__base_string;
53619   column = column || 0;
53620   if (indent_level < 0) {
53621     indent_level = 0;
53622     result = '';
53623   }
53624   column += indent_level * this.__indent_size;
53625   this.__ensure_cache(column);
53626   result += this.__cache[column];
53627   return result;
53628 };
53629
53630 IndentStringCache.prototype.__ensure_cache = function(column) {
53631   while (column >= this.__cache.length) {
53632     this.__add_column();
53633   }
53634 };
53635
53636 IndentStringCache.prototype.__add_column = function() {
53637   var column = this.__cache.length;
53638   var indent = 0;
53639   var result = '';
53640   if (this.__indent_size && column >= this.__indent_size) {
53641     indent = Math.floor(column / this.__indent_size);
53642     column -= indent * this.__indent_size;
53643     result = new Array(indent + 1).join(this.__indent_string);
53644   }
53645   if (column) {
53646     result += new Array(column + 1).join(' ');
53647   }
53648
53649   this.__cache.push(result);
53650 };
53651
53652 function Output(options, baseIndentString) {
53653   this.__indent_cache = new IndentStringCache(options, baseIndentString);
53654   this.raw = false;
53655   this._end_with_newline = options.end_with_newline;
53656   this.indent_size = options.indent_size;
53657   this.wrap_line_length = options.wrap_line_length;
53658   this.indent_empty_lines = options.indent_empty_lines;
53659   this.__lines = [];
53660   this.previous_line = null;
53661   this.current_line = null;
53662   this.next_line = new OutputLine(this);
53663   this.space_before_token = false;
53664   this.non_breaking_space = false;
53665   this.previous_token_wrapped = false;
53666   // initialize
53667   this.__add_outputline();
53668 }
53669
53670 Output.prototype.__add_outputline = function() {
53671   this.previous_line = this.current_line;
53672   this.current_line = this.next_line.clone_empty();
53673   this.__lines.push(this.current_line);
53674 };
53675
53676 Output.prototype.get_line_number = function() {
53677   return this.__lines.length;
53678 };
53679
53680 Output.prototype.get_indent_string = function(indent, column) {
53681   return this.__indent_cache.get_indent_string(indent, column);
53682 };
53683
53684 Output.prototype.get_indent_size = function(indent, column) {
53685   return this.__indent_cache.get_indent_size(indent, column);
53686 };
53687
53688 Output.prototype.is_empty = function() {
53689   return !this.previous_line && this.current_line.is_empty();
53690 };
53691
53692 Output.prototype.add_new_line = function(force_newline) {
53693   // never newline at the start of file
53694   // otherwise, newline only if we didn't just add one or we're forced
53695   if (this.is_empty() ||
53696     (!force_newline && this.just_added_newline())) {
53697     return false;
53698   }
53699
53700   // if raw output is enabled, don't print additional newlines,
53701   // but still return True as though you had
53702   if (!this.raw) {
53703     this.__add_outputline();
53704   }
53705   return true;
53706 };
53707
53708 Output.prototype.get_code = function(eol) {
53709   this.trim(true);
53710
53711   // handle some edge cases where the last tokens
53712   // has text that ends with newline(s)
53713   var last_item = this.current_line.pop();
53714   if (last_item) {
53715     if (last_item[last_item.length - 1] === '\n') {
53716       last_item = last_item.replace(/\n+$/g, '');
53717     }
53718     this.current_line.push(last_item);
53719   }
53720
53721   if (this._end_with_newline) {
53722     this.__add_outputline();
53723   }
53724
53725   var sweet_code = this.__lines.join('\n');
53726
53727   if (eol !== '\n') {
53728     sweet_code = sweet_code.replace(/[\n]/g, eol);
53729   }
53730   return sweet_code;
53731 };
53732
53733 Output.prototype.set_wrap_point = function() {
53734   this.current_line._set_wrap_point();
53735 };
53736
53737 Output.prototype.set_indent = function(indent, alignment) {
53738   indent = indent || 0;
53739   alignment = alignment || 0;
53740
53741   // Next line stores alignment values
53742   this.next_line.set_indent(indent, alignment);
53743
53744   // Never indent your first output indent at the start of the file
53745   if (this.__lines.length > 1) {
53746     this.current_line.set_indent(indent, alignment);
53747     return true;
53748   }
53749
53750   this.current_line.set_indent();
53751   return false;
53752 };
53753
53754 Output.prototype.add_raw_token = function(token) {
53755   for (var x = 0; x < token.newlines; x++) {
53756     this.__add_outputline();
53757   }
53758   this.current_line.set_indent(-1);
53759   this.current_line.push(token.whitespace_before);
53760   this.current_line.push(token.text);
53761   this.space_before_token = false;
53762   this.non_breaking_space = false;
53763   this.previous_token_wrapped = false;
53764 };
53765
53766 Output.prototype.add_token = function(printable_token) {
53767   this.__add_space_before_token();
53768   this.current_line.push(printable_token);
53769   this.space_before_token = false;
53770   this.non_breaking_space = false;
53771   this.previous_token_wrapped = this.current_line._allow_wrap();
53772 };
53773
53774 Output.prototype.__add_space_before_token = function() {
53775   if (this.space_before_token && !this.just_added_newline()) {
53776     if (!this.non_breaking_space) {
53777       this.set_wrap_point();
53778     }
53779     this.current_line.push(' ');
53780   }
53781 };
53782
53783 Output.prototype.remove_indent = function(index) {
53784   var output_length = this.__lines.length;
53785   while (index < output_length) {
53786     this.__lines[index]._remove_indent();
53787     index++;
53788   }
53789   this.current_line._remove_wrap_indent();
53790 };
53791
53792 Output.prototype.trim = function(eat_newlines) {
53793   eat_newlines = (eat_newlines === undefined) ? false : eat_newlines;
53794
53795   this.current_line.trim();
53796
53797   while (eat_newlines && this.__lines.length > 1 &&
53798     this.current_line.is_empty()) {
53799     this.__lines.pop();
53800     this.current_line = this.__lines[this.__lines.length - 1];
53801     this.current_line.trim();
53802   }
53803
53804   this.previous_line = this.__lines.length > 1 ?
53805     this.__lines[this.__lines.length - 2] : null;
53806 };
53807
53808 Output.prototype.just_added_newline = function() {
53809   return this.current_line.is_empty();
53810 };
53811
53812 Output.prototype.just_added_blankline = function() {
53813   return this.is_empty() ||
53814     (this.current_line.is_empty() && this.previous_line.is_empty());
53815 };
53816
53817 Output.prototype.ensure_empty_line_above = function(starts_with, ends_with) {
53818   var index = this.__lines.length - 2;
53819   while (index >= 0) {
53820     var potentialEmptyLine = this.__lines[index];
53821     if (potentialEmptyLine.is_empty()) {
53822       break;
53823     } else if (potentialEmptyLine.item(0).indexOf(starts_with) !== 0 &&
53824       potentialEmptyLine.item(-1) !== ends_with) {
53825       this.__lines.splice(index + 1, 0, new OutputLine(this));
53826       this.previous_line = this.__lines[this.__lines.length - 2];
53827       break;
53828     }
53829     index--;
53830   }
53831 };
53832
53833 module.exports.Output = Output;
53834
53835
53836 /***/ }),
53837 /* 3 */
53838 /***/ (function(module, exports, __nested_webpack_require_19580__) {
53839
53840 "use strict";
53841 /*jshint node:true */
53842 /*
53843
53844   The MIT License (MIT)
53845
53846   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
53847
53848   Permission is hereby granted, free of charge, to any person
53849   obtaining a copy of this software and associated documentation files
53850   (the "Software"), to deal in the Software without restriction,
53851   including without limitation the rights to use, copy, modify, merge,
53852   publish, distribute, sublicense, and/or sell copies of the Software,
53853   and to permit persons to whom the Software is furnished to do so,
53854   subject to the following conditions:
53855
53856   The above copyright notice and this permission notice shall be
53857   included in all copies or substantial portions of the Software.
53858
53859   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
53860   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
53861   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
53862   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
53863   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
53864   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
53865   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
53866   SOFTWARE.
53867 */
53868
53869
53870
53871 function Token(type, text, newlines, whitespace_before) {
53872   this.type = type;
53873   this.text = text;
53874
53875   // comments_before are
53876   // comments that have a new line before them
53877   // and may or may not have a newline after
53878   // this is a set of comments before
53879   this.comments_before = null; /* inline comment*/
53880
53881
53882   // this.comments_after =  new TokenStream(); // no new line before and newline after
53883   this.newlines = newlines || 0;
53884   this.whitespace_before = whitespace_before || '';
53885   this.parent = null;
53886   this.next = null;
53887   this.previous = null;
53888   this.opened = null;
53889   this.closed = null;
53890   this.directives = null;
53891 }
53892
53893
53894 module.exports.Token = Token;
53895
53896
53897 /***/ }),
53898 /* 4 */,
53899 /* 5 */,
53900 /* 6 */
53901 /***/ (function(module, exports, __nested_webpack_require_21527__) {
53902
53903 "use strict";
53904 /*jshint node:true */
53905 /*
53906
53907   The MIT License (MIT)
53908
53909   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
53910
53911   Permission is hereby granted, free of charge, to any person
53912   obtaining a copy of this software and associated documentation files
53913   (the "Software"), to deal in the Software without restriction,
53914   including without limitation the rights to use, copy, modify, merge,
53915   publish, distribute, sublicense, and/or sell copies of the Software,
53916   and to permit persons to whom the Software is furnished to do so,
53917   subject to the following conditions:
53918
53919   The above copyright notice and this permission notice shall be
53920   included in all copies or substantial portions of the Software.
53921
53922   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
53923   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
53924   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
53925   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
53926   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
53927   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
53928   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
53929   SOFTWARE.
53930 */
53931
53932
53933
53934 function Options(options, merge_child_field) {
53935   this.raw_options = _mergeOpts(options, merge_child_field);
53936
53937   // Support passing the source text back with no change
53938   this.disabled = this._get_boolean('disabled');
53939
53940   this.eol = this._get_characters('eol', 'auto');
53941   this.end_with_newline = this._get_boolean('end_with_newline');
53942   this.indent_size = this._get_number('indent_size', 4);
53943   this.indent_char = this._get_characters('indent_char', ' ');
53944   this.indent_level = this._get_number('indent_level');
53945
53946   this.preserve_newlines = this._get_boolean('preserve_newlines', true);
53947   this.max_preserve_newlines = this._get_number('max_preserve_newlines', 32786);
53948   if (!this.preserve_newlines) {
53949     this.max_preserve_newlines = 0;
53950   }
53951
53952   this.indent_with_tabs = this._get_boolean('indent_with_tabs', this.indent_char === '\t');
53953   if (this.indent_with_tabs) {
53954     this.indent_char = '\t';
53955
53956     // indent_size behavior changed after 1.8.6
53957     // It used to be that indent_size would be
53958     // set to 1 for indent_with_tabs. That is no longer needed and
53959     // actually doesn't make sense - why not use spaces? Further,
53960     // that might produce unexpected behavior - tabs being used
53961     // for single-column alignment. So, when indent_with_tabs is true
53962     // and indent_size is 1, reset indent_size to 4.
53963     if (this.indent_size === 1) {
53964       this.indent_size = 4;
53965     }
53966   }
53967
53968   // Backwards compat with 1.3.x
53969   this.wrap_line_length = this._get_number('wrap_line_length', this._get_number('max_char'));
53970
53971   this.indent_empty_lines = this._get_boolean('indent_empty_lines');
53972
53973   // valid templating languages ['django', 'erb', 'handlebars', 'php']
53974   // For now, 'auto' = all off for javascript, all on for html (and inline javascript).
53975   // other values ignored
53976   this.templating = this._get_selection_list('templating', ['auto', 'none', 'django', 'erb', 'handlebars', 'php'], ['auto']);
53977 }
53978
53979 Options.prototype._get_array = function(name, default_value) {
53980   var option_value = this.raw_options[name];
53981   var result = default_value || [];
53982   if (typeof option_value === 'object') {
53983     if (option_value !== null && typeof option_value.concat === 'function') {
53984       result = option_value.concat();
53985     }
53986   } else if (typeof option_value === 'string') {
53987     result = option_value.split(/[^a-zA-Z0-9_\/\-]+/);
53988   }
53989   return result;
53990 };
53991
53992 Options.prototype._get_boolean = function(name, default_value) {
53993   var option_value = this.raw_options[name];
53994   var result = option_value === undefined ? !!default_value : !!option_value;
53995   return result;
53996 };
53997
53998 Options.prototype._get_characters = function(name, default_value) {
53999   var option_value = this.raw_options[name];
54000   var result = default_value || '';
54001   if (typeof option_value === 'string') {
54002     result = option_value.replace(/\\r/, '\r').replace(/\\n/, '\n').replace(/\\t/, '\t');
54003   }
54004   return result;
54005 };
54006
54007 Options.prototype._get_number = function(name, default_value) {
54008   var option_value = this.raw_options[name];
54009   default_value = parseInt(default_value, 10);
54010   if (isNaN(default_value)) {
54011     default_value = 0;
54012   }
54013   var result = parseInt(option_value, 10);
54014   if (isNaN(result)) {
54015     result = default_value;
54016   }
54017   return result;
54018 };
54019
54020 Options.prototype._get_selection = function(name, selection_list, default_value) {
54021   var result = this._get_selection_list(name, selection_list, default_value);
54022   if (result.length !== 1) {
54023     throw new Error(
54024       "Invalid Option Value: The option '" + name + "' can only be one of the following values:\n" +
54025       selection_list + "\nYou passed in: '" + this.raw_options[name] + "'");
54026   }
54027
54028   return result[0];
54029 };
54030
54031
54032 Options.prototype._get_selection_list = function(name, selection_list, default_value) {
54033   if (!selection_list || selection_list.length === 0) {
54034     throw new Error("Selection list cannot be empty.");
54035   }
54036
54037   default_value = default_value || [selection_list[0]];
54038   if (!this._is_valid_selection(default_value, selection_list)) {
54039     throw new Error("Invalid Default Value!");
54040   }
54041
54042   var result = this._get_array(name, default_value);
54043   if (!this._is_valid_selection(result, selection_list)) {
54044     throw new Error(
54045       "Invalid Option Value: The option '" + name + "' can contain only the following values:\n" +
54046       selection_list + "\nYou passed in: '" + this.raw_options[name] + "'");
54047   }
54048
54049   return result;
54050 };
54051
54052 Options.prototype._is_valid_selection = function(result, selection_list) {
54053   return result.length && selection_list.length &&
54054     !result.some(function(item) { return selection_list.indexOf(item) === -1; });
54055 };
54056
54057
54058 // merges child options up with the parent options object
54059 // Example: obj = {a: 1, b: {a: 2}}
54060 //          mergeOpts(obj, 'b')
54061 //
54062 //          Returns: {a: 2}
54063 function _mergeOpts(allOptions, childFieldName) {
54064   var finalOpts = {};
54065   allOptions = _normalizeOpts(allOptions);
54066   var name;
54067
54068   for (name in allOptions) {
54069     if (name !== childFieldName) {
54070       finalOpts[name] = allOptions[name];
54071     }
54072   }
54073
54074   //merge in the per type settings for the childFieldName
54075   if (childFieldName && allOptions[childFieldName]) {
54076     for (name in allOptions[childFieldName]) {
54077       finalOpts[name] = allOptions[childFieldName][name];
54078     }
54079   }
54080   return finalOpts;
54081 }
54082
54083 function _normalizeOpts(options) {
54084   var convertedOpts = {};
54085   var key;
54086
54087   for (key in options) {
54088     var newKey = key.replace(/-/g, "_");
54089     convertedOpts[newKey] = options[key];
54090   }
54091   return convertedOpts;
54092 }
54093
54094 module.exports.Options = Options;
54095 module.exports.normalizeOpts = _normalizeOpts;
54096 module.exports.mergeOpts = _mergeOpts;
54097
54098
54099 /***/ }),
54100 /* 7 */,
54101 /* 8 */
54102 /***/ (function(module, exports, __nested_webpack_require_28319__) {
54103
54104 "use strict";
54105 /*jshint node:true */
54106 /*
54107
54108   The MIT License (MIT)
54109
54110   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
54111
54112   Permission is hereby granted, free of charge, to any person
54113   obtaining a copy of this software and associated documentation files
54114   (the "Software"), to deal in the Software without restriction,
54115   including without limitation the rights to use, copy, modify, merge,
54116   publish, distribute, sublicense, and/or sell copies of the Software,
54117   and to permit persons to whom the Software is furnished to do so,
54118   subject to the following conditions:
54119
54120   The above copyright notice and this permission notice shall be
54121   included in all copies or substantial portions of the Software.
54122
54123   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
54124   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
54125   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
54126   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
54127   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
54128   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
54129   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
54130   SOFTWARE.
54131 */
54132
54133
54134
54135 var regexp_has_sticky = RegExp.prototype.hasOwnProperty('sticky');
54136
54137 function InputScanner(input_string) {
54138   this.__input = input_string || '';
54139   this.__input_length = this.__input.length;
54140   this.__position = 0;
54141 }
54142
54143 InputScanner.prototype.restart = function() {
54144   this.__position = 0;
54145 };
54146
54147 InputScanner.prototype.back = function() {
54148   if (this.__position > 0) {
54149     this.__position -= 1;
54150   }
54151 };
54152
54153 InputScanner.prototype.hasNext = function() {
54154   return this.__position < this.__input_length;
54155 };
54156
54157 InputScanner.prototype.next = function() {
54158   var val = null;
54159   if (this.hasNext()) {
54160     val = this.__input.charAt(this.__position);
54161     this.__position += 1;
54162   }
54163   return val;
54164 };
54165
54166 InputScanner.prototype.peek = function(index) {
54167   var val = null;
54168   index = index || 0;
54169   index += this.__position;
54170   if (index >= 0 && index < this.__input_length) {
54171     val = this.__input.charAt(index);
54172   }
54173   return val;
54174 };
54175
54176 // This is a JavaScript only helper function (not in python)
54177 // Javascript doesn't have a match method
54178 // and not all implementation support "sticky" flag.
54179 // If they do not support sticky then both this.match() and this.test() method
54180 // must get the match and check the index of the match.
54181 // If sticky is supported and set, this method will use it.
54182 // Otherwise it will check that global is set, and fall back to the slower method.
54183 InputScanner.prototype.__match = function(pattern, index) {
54184   pattern.lastIndex = index;
54185   var pattern_match = pattern.exec(this.__input);
54186
54187   if (pattern_match && !(regexp_has_sticky && pattern.sticky)) {
54188     if (pattern_match.index !== index) {
54189       pattern_match = null;
54190     }
54191   }
54192
54193   return pattern_match;
54194 };
54195
54196 InputScanner.prototype.test = function(pattern, index) {
54197   index = index || 0;
54198   index += this.__position;
54199
54200   if (index >= 0 && index < this.__input_length) {
54201     return !!this.__match(pattern, index);
54202   } else {
54203     return false;
54204   }
54205 };
54206
54207 InputScanner.prototype.testChar = function(pattern, index) {
54208   // test one character regex match
54209   var val = this.peek(index);
54210   pattern.lastIndex = 0;
54211   return val !== null && pattern.test(val);
54212 };
54213
54214 InputScanner.prototype.match = function(pattern) {
54215   var pattern_match = this.__match(pattern, this.__position);
54216   if (pattern_match) {
54217     this.__position += pattern_match[0].length;
54218   } else {
54219     pattern_match = null;
54220   }
54221   return pattern_match;
54222 };
54223
54224 InputScanner.prototype.read = function(starting_pattern, until_pattern, until_after) {
54225   var val = '';
54226   var match;
54227   if (starting_pattern) {
54228     match = this.match(starting_pattern);
54229     if (match) {
54230       val += match[0];
54231     }
54232   }
54233   if (until_pattern && (match || !starting_pattern)) {
54234     val += this.readUntil(until_pattern, until_after);
54235   }
54236   return val;
54237 };
54238
54239 InputScanner.prototype.readUntil = function(pattern, until_after) {
54240   var val = '';
54241   var match_index = this.__position;
54242   pattern.lastIndex = this.__position;
54243   var pattern_match = pattern.exec(this.__input);
54244   if (pattern_match) {
54245     match_index = pattern_match.index;
54246     if (until_after) {
54247       match_index += pattern_match[0].length;
54248     }
54249   } else {
54250     match_index = this.__input_length;
54251   }
54252
54253   val = this.__input.substring(this.__position, match_index);
54254   this.__position = match_index;
54255   return val;
54256 };
54257
54258 InputScanner.prototype.readUntilAfter = function(pattern) {
54259   return this.readUntil(pattern, true);
54260 };
54261
54262 InputScanner.prototype.get_regexp = function(pattern, match_from) {
54263   var result = null;
54264   var flags = 'g';
54265   if (match_from && regexp_has_sticky) {
54266     flags = 'y';
54267   }
54268   // strings are converted to regexp
54269   if (typeof pattern === "string" && pattern !== '') {
54270     // result = new RegExp(pattern.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), flags);
54271     result = new RegExp(pattern, flags);
54272   } else if (pattern) {
54273     result = new RegExp(pattern.source, flags);
54274   }
54275   return result;
54276 };
54277
54278 InputScanner.prototype.get_literal_regexp = function(literal_string) {
54279   return RegExp(literal_string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'));
54280 };
54281
54282 /* css beautifier legacy helpers */
54283 InputScanner.prototype.peekUntilAfter = function(pattern) {
54284   var start = this.__position;
54285   var val = this.readUntilAfter(pattern);
54286   this.__position = start;
54287   return val;
54288 };
54289
54290 InputScanner.prototype.lookBack = function(testVal) {
54291   var start = this.__position - 1;
54292   return start >= testVal.length && this.__input.substring(start - testVal.length, start)
54293     .toLowerCase() === testVal;
54294 };
54295
54296 module.exports.InputScanner = InputScanner;
54297
54298
54299 /***/ }),
54300 /* 9 */
54301 /***/ (function(module, exports, __nested_webpack_require_34031__) {
54302
54303 "use strict";
54304 /*jshint node:true */
54305 /*
54306
54307   The MIT License (MIT)
54308
54309   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
54310
54311   Permission is hereby granted, free of charge, to any person
54312   obtaining a copy of this software and associated documentation files
54313   (the "Software"), to deal in the Software without restriction,
54314   including without limitation the rights to use, copy, modify, merge,
54315   publish, distribute, sublicense, and/or sell copies of the Software,
54316   and to permit persons to whom the Software is furnished to do so,
54317   subject to the following conditions:
54318
54319   The above copyright notice and this permission notice shall be
54320   included in all copies or substantial portions of the Software.
54321
54322   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
54323   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
54324   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
54325   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
54326   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
54327   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
54328   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
54329   SOFTWARE.
54330 */
54331
54332
54333
54334 var InputScanner = __nested_webpack_require_34031__(8).InputScanner;
54335 var Token = __nested_webpack_require_34031__(3).Token;
54336 var TokenStream = __nested_webpack_require_34031__(10).TokenStream;
54337 var WhitespacePattern = __nested_webpack_require_34031__(11).WhitespacePattern;
54338
54339 var TOKEN = {
54340   START: 'TK_START',
54341   RAW: 'TK_RAW',
54342   EOF: 'TK_EOF'
54343 };
54344
54345 var Tokenizer = function(input_string, options) {
54346   this._input = new InputScanner(input_string);
54347   this._options = options || {};
54348   this.__tokens = null;
54349
54350   this._patterns = {};
54351   this._patterns.whitespace = new WhitespacePattern(this._input);
54352 };
54353
54354 Tokenizer.prototype.tokenize = function() {
54355   this._input.restart();
54356   this.__tokens = new TokenStream();
54357
54358   this._reset();
54359
54360   var current;
54361   var previous = new Token(TOKEN.START, '');
54362   var open_token = null;
54363   var open_stack = [];
54364   var comments = new TokenStream();
54365
54366   while (previous.type !== TOKEN.EOF) {
54367     current = this._get_next_token(previous, open_token);
54368     while (this._is_comment(current)) {
54369       comments.add(current);
54370       current = this._get_next_token(previous, open_token);
54371     }
54372
54373     if (!comments.isEmpty()) {
54374       current.comments_before = comments;
54375       comments = new TokenStream();
54376     }
54377
54378     current.parent = open_token;
54379
54380     if (this._is_opening(current)) {
54381       open_stack.push(open_token);
54382       open_token = current;
54383     } else if (open_token && this._is_closing(current, open_token)) {
54384       current.opened = open_token;
54385       open_token.closed = current;
54386       open_token = open_stack.pop();
54387       current.parent = open_token;
54388     }
54389
54390     current.previous = previous;
54391     previous.next = current;
54392
54393     this.__tokens.add(current);
54394     previous = current;
54395   }
54396
54397   return this.__tokens;
54398 };
54399
54400
54401 Tokenizer.prototype._is_first_token = function() {
54402   return this.__tokens.isEmpty();
54403 };
54404
54405 Tokenizer.prototype._reset = function() {};
54406
54407 Tokenizer.prototype._get_next_token = function(previous_token, open_token) { // jshint unused:false
54408   this._readWhitespace();
54409   var resulting_string = this._input.read(/.+/g);
54410   if (resulting_string) {
54411     return this._create_token(TOKEN.RAW, resulting_string);
54412   } else {
54413     return this._create_token(TOKEN.EOF, '');
54414   }
54415 };
54416
54417 Tokenizer.prototype._is_comment = function(current_token) { // jshint unused:false
54418   return false;
54419 };
54420
54421 Tokenizer.prototype._is_opening = function(current_token) { // jshint unused:false
54422   return false;
54423 };
54424
54425 Tokenizer.prototype._is_closing = function(current_token, open_token) { // jshint unused:false
54426   return false;
54427 };
54428
54429 Tokenizer.prototype._create_token = function(type, text) {
54430   var token = new Token(type, text,
54431     this._patterns.whitespace.newline_count,
54432     this._patterns.whitespace.whitespace_before_token);
54433   return token;
54434 };
54435
54436 Tokenizer.prototype._readWhitespace = function() {
54437   return this._patterns.whitespace.read();
54438 };
54439
54440
54441
54442 module.exports.Tokenizer = Tokenizer;
54443 module.exports.TOKEN = TOKEN;
54444
54445
54446 /***/ }),
54447 /* 10 */
54448 /***/ (function(module, exports, __nested_webpack_require_38146__) {
54449
54450 "use strict";
54451 /*jshint node:true */
54452 /*
54453
54454   The MIT License (MIT)
54455
54456   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
54457
54458   Permission is hereby granted, free of charge, to any person
54459   obtaining a copy of this software and associated documentation files
54460   (the "Software"), to deal in the Software without restriction,
54461   including without limitation the rights to use, copy, modify, merge,
54462   publish, distribute, sublicense, and/or sell copies of the Software,
54463   and to permit persons to whom the Software is furnished to do so,
54464   subject to the following conditions:
54465
54466   The above copyright notice and this permission notice shall be
54467   included in all copies or substantial portions of the Software.
54468
54469   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
54470   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
54471   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
54472   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
54473   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
54474   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
54475   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
54476   SOFTWARE.
54477 */
54478
54479
54480
54481 function TokenStream(parent_token) {
54482   // private
54483   this.__tokens = [];
54484   this.__tokens_length = this.__tokens.length;
54485   this.__position = 0;
54486   this.__parent_token = parent_token;
54487 }
54488
54489 TokenStream.prototype.restart = function() {
54490   this.__position = 0;
54491 };
54492
54493 TokenStream.prototype.isEmpty = function() {
54494   return this.__tokens_length === 0;
54495 };
54496
54497 TokenStream.prototype.hasNext = function() {
54498   return this.__position < this.__tokens_length;
54499 };
54500
54501 TokenStream.prototype.next = function() {
54502   var val = null;
54503   if (this.hasNext()) {
54504     val = this.__tokens[this.__position];
54505     this.__position += 1;
54506   }
54507   return val;
54508 };
54509
54510 TokenStream.prototype.peek = function(index) {
54511   var val = null;
54512   index = index || 0;
54513   index += this.__position;
54514   if (index >= 0 && index < this.__tokens_length) {
54515     val = this.__tokens[index];
54516   }
54517   return val;
54518 };
54519
54520 TokenStream.prototype.add = function(token) {
54521   if (this.__parent_token) {
54522     token.parent = this.__parent_token;
54523   }
54524   this.__tokens.push(token);
54525   this.__tokens_length += 1;
54526 };
54527
54528 module.exports.TokenStream = TokenStream;
54529
54530
54531 /***/ }),
54532 /* 11 */
54533 /***/ (function(module, exports, __nested_webpack_require_40484__) {
54534
54535 "use strict";
54536 /*jshint node:true */
54537 /*
54538
54539   The MIT License (MIT)
54540
54541   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
54542
54543   Permission is hereby granted, free of charge, to any person
54544   obtaining a copy of this software and associated documentation files
54545   (the "Software"), to deal in the Software without restriction,
54546   including without limitation the rights to use, copy, modify, merge,
54547   publish, distribute, sublicense, and/or sell copies of the Software,
54548   and to permit persons to whom the Software is furnished to do so,
54549   subject to the following conditions:
54550
54551   The above copyright notice and this permission notice shall be
54552   included in all copies or substantial portions of the Software.
54553
54554   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
54555   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
54556   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
54557   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
54558   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
54559   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
54560   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
54561   SOFTWARE.
54562 */
54563
54564
54565
54566 var Pattern = __nested_webpack_require_40484__(12).Pattern;
54567
54568 function WhitespacePattern(input_scanner, parent) {
54569   Pattern.call(this, input_scanner, parent);
54570   if (parent) {
54571     this._line_regexp = this._input.get_regexp(parent._line_regexp);
54572   } else {
54573     this.__set_whitespace_patterns('', '');
54574   }
54575
54576   this.newline_count = 0;
54577   this.whitespace_before_token = '';
54578 }
54579 WhitespacePattern.prototype = new Pattern();
54580
54581 WhitespacePattern.prototype.__set_whitespace_patterns = function(whitespace_chars, newline_chars) {
54582   whitespace_chars += '\\t ';
54583   newline_chars += '\\n\\r';
54584
54585   this._match_pattern = this._input.get_regexp(
54586     '[' + whitespace_chars + newline_chars + ']+', true);
54587   this._newline_regexp = this._input.get_regexp(
54588     '\\r\\n|[' + newline_chars + ']');
54589 };
54590
54591 WhitespacePattern.prototype.read = function() {
54592   this.newline_count = 0;
54593   this.whitespace_before_token = '';
54594
54595   var resulting_string = this._input.read(this._match_pattern);
54596   if (resulting_string === ' ') {
54597     this.whitespace_before_token = ' ';
54598   } else if (resulting_string) {
54599     var matches = this.__split(this._newline_regexp, resulting_string);
54600     this.newline_count = matches.length - 1;
54601     this.whitespace_before_token = matches[this.newline_count];
54602   }
54603
54604   return resulting_string;
54605 };
54606
54607 WhitespacePattern.prototype.matching = function(whitespace_chars, newline_chars) {
54608   var result = this._create();
54609   result.__set_whitespace_patterns(whitespace_chars, newline_chars);
54610   result._update();
54611   return result;
54612 };
54613
54614 WhitespacePattern.prototype._create = function() {
54615   return new WhitespacePattern(this._input, this);
54616 };
54617
54618 WhitespacePattern.prototype.__split = function(regexp, input_string) {
54619   regexp.lastIndex = 0;
54620   var start_index = 0;
54621   var result = [];
54622   var next_match = regexp.exec(input_string);
54623   while (next_match) {
54624     result.push(input_string.substring(start_index, next_match.index));
54625     start_index = next_match.index + next_match[0].length;
54626     next_match = regexp.exec(input_string);
54627   }
54628
54629   if (start_index < input_string.length) {
54630     result.push(input_string.substring(start_index, input_string.length));
54631   } else {
54632     result.push('');
54633   }
54634
54635   return result;
54636 };
54637
54638
54639
54640 module.exports.WhitespacePattern = WhitespacePattern;
54641
54642
54643 /***/ }),
54644 /* 12 */
54645 /***/ (function(module, exports, __nested_webpack_require_43972__) {
54646
54647 "use strict";
54648 /*jshint node:true */
54649 /*
54650
54651   The MIT License (MIT)
54652
54653   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
54654
54655   Permission is hereby granted, free of charge, to any person
54656   obtaining a copy of this software and associated documentation files
54657   (the "Software"), to deal in the Software without restriction,
54658   including without limitation the rights to use, copy, modify, merge,
54659   publish, distribute, sublicense, and/or sell copies of the Software,
54660   and to permit persons to whom the Software is furnished to do so,
54661   subject to the following conditions:
54662
54663   The above copyright notice and this permission notice shall be
54664   included in all copies or substantial portions of the Software.
54665
54666   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
54667   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
54668   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
54669   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
54670   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
54671   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
54672   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
54673   SOFTWARE.
54674 */
54675
54676
54677
54678 function Pattern(input_scanner, parent) {
54679   this._input = input_scanner;
54680   this._starting_pattern = null;
54681   this._match_pattern = null;
54682   this._until_pattern = null;
54683   this._until_after = false;
54684
54685   if (parent) {
54686     this._starting_pattern = this._input.get_regexp(parent._starting_pattern, true);
54687     this._match_pattern = this._input.get_regexp(parent._match_pattern, true);
54688     this._until_pattern = this._input.get_regexp(parent._until_pattern);
54689     this._until_after = parent._until_after;
54690   }
54691 }
54692
54693 Pattern.prototype.read = function() {
54694   var result = this._input.read(this._starting_pattern);
54695   if (!this._starting_pattern || result) {
54696     result += this._input.read(this._match_pattern, this._until_pattern, this._until_after);
54697   }
54698   return result;
54699 };
54700
54701 Pattern.prototype.read_match = function() {
54702   return this._input.match(this._match_pattern);
54703 };
54704
54705 Pattern.prototype.until_after = function(pattern) {
54706   var result = this._create();
54707   result._until_after = true;
54708   result._until_pattern = this._input.get_regexp(pattern);
54709   result._update();
54710   return result;
54711 };
54712
54713 Pattern.prototype.until = function(pattern) {
54714   var result = this._create();
54715   result._until_after = false;
54716   result._until_pattern = this._input.get_regexp(pattern);
54717   result._update();
54718   return result;
54719 };
54720
54721 Pattern.prototype.starting_with = function(pattern) {
54722   var result = this._create();
54723   result._starting_pattern = this._input.get_regexp(pattern, true);
54724   result._update();
54725   return result;
54726 };
54727
54728 Pattern.prototype.matching = function(pattern) {
54729   var result = this._create();
54730   result._match_pattern = this._input.get_regexp(pattern, true);
54731   result._update();
54732   return result;
54733 };
54734
54735 Pattern.prototype._create = function() {
54736   return new Pattern(this._input, this);
54737 };
54738
54739 Pattern.prototype._update = function() {};
54740
54741 module.exports.Pattern = Pattern;
54742
54743
54744 /***/ }),
54745 /* 13 */
54746 /***/ (function(module, exports, __nested_webpack_require_47072__) {
54747
54748 "use strict";
54749 /*jshint node:true */
54750 /*
54751
54752   The MIT License (MIT)
54753
54754   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
54755
54756   Permission is hereby granted, free of charge, to any person
54757   obtaining a copy of this software and associated documentation files
54758   (the "Software"), to deal in the Software without restriction,
54759   including without limitation the rights to use, copy, modify, merge,
54760   publish, distribute, sublicense, and/or sell copies of the Software,
54761   and to permit persons to whom the Software is furnished to do so,
54762   subject to the following conditions:
54763
54764   The above copyright notice and this permission notice shall be
54765   included in all copies or substantial portions of the Software.
54766
54767   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
54768   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
54769   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
54770   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
54771   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
54772   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
54773   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
54774   SOFTWARE.
54775 */
54776
54777
54778
54779 function Directives(start_block_pattern, end_block_pattern) {
54780   start_block_pattern = typeof start_block_pattern === 'string' ? start_block_pattern : start_block_pattern.source;
54781   end_block_pattern = typeof end_block_pattern === 'string' ? end_block_pattern : end_block_pattern.source;
54782   this.__directives_block_pattern = new RegExp(start_block_pattern + / beautify( \w+[:]\w+)+ /.source + end_block_pattern, 'g');
54783   this.__directive_pattern = / (\w+)[:](\w+)/g;
54784
54785   this.__directives_end_ignore_pattern = new RegExp(start_block_pattern + /\sbeautify\signore:end\s/.source + end_block_pattern, 'g');
54786 }
54787
54788 Directives.prototype.get_directives = function(text) {
54789   if (!text.match(this.__directives_block_pattern)) {
54790     return null;
54791   }
54792
54793   var directives = {};
54794   this.__directive_pattern.lastIndex = 0;
54795   var directive_match = this.__directive_pattern.exec(text);
54796
54797   while (directive_match) {
54798     directives[directive_match[1]] = directive_match[2];
54799     directive_match = this.__directive_pattern.exec(text);
54800   }
54801
54802   return directives;
54803 };
54804
54805 Directives.prototype.readIgnored = function(input) {
54806   return input.readUntilAfter(this.__directives_end_ignore_pattern);
54807 };
54808
54809
54810 module.exports.Directives = Directives;
54811
54812
54813 /***/ }),
54814 /* 14 */
54815 /***/ (function(module, exports, __nested_webpack_require_49554__) {
54816
54817 "use strict";
54818 /*jshint node:true */
54819 /*
54820
54821   The MIT License (MIT)
54822
54823   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
54824
54825   Permission is hereby granted, free of charge, to any person
54826   obtaining a copy of this software and associated documentation files
54827   (the "Software"), to deal in the Software without restriction,
54828   including without limitation the rights to use, copy, modify, merge,
54829   publish, distribute, sublicense, and/or sell copies of the Software,
54830   and to permit persons to whom the Software is furnished to do so,
54831   subject to the following conditions:
54832
54833   The above copyright notice and this permission notice shall be
54834   included in all copies or substantial portions of the Software.
54835
54836   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
54837   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
54838   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
54839   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
54840   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
54841   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
54842   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
54843   SOFTWARE.
54844 */
54845
54846
54847
54848 var Pattern = __nested_webpack_require_49554__(12).Pattern;
54849
54850
54851 var template_names = {
54852   django: false,
54853   erb: false,
54854   handlebars: false,
54855   php: false
54856 };
54857
54858 // This lets templates appear anywhere we would do a readUntil
54859 // The cost is higher but it is pay to play.
54860 function TemplatablePattern(input_scanner, parent) {
54861   Pattern.call(this, input_scanner, parent);
54862   this.__template_pattern = null;
54863   this._disabled = Object.assign({}, template_names);
54864   this._excluded = Object.assign({}, template_names);
54865
54866   if (parent) {
54867     this.__template_pattern = this._input.get_regexp(parent.__template_pattern);
54868     this._excluded = Object.assign(this._excluded, parent._excluded);
54869     this._disabled = Object.assign(this._disabled, parent._disabled);
54870   }
54871   var pattern = new Pattern(input_scanner);
54872   this.__patterns = {
54873     handlebars_comment: pattern.starting_with(/{{!--/).until_after(/--}}/),
54874     handlebars_unescaped: pattern.starting_with(/{{{/).until_after(/}}}/),
54875     handlebars: pattern.starting_with(/{{/).until_after(/}}/),
54876     php: pattern.starting_with(/<\?(?:[=]|php)/).until_after(/\?>/),
54877     erb: pattern.starting_with(/<%[^%]/).until_after(/[^%]%>/),
54878     // django coflicts with handlebars a bit.
54879     django: pattern.starting_with(/{%/).until_after(/%}/),
54880     django_value: pattern.starting_with(/{{/).until_after(/}}/),
54881     django_comment: pattern.starting_with(/{#/).until_after(/#}/)
54882   };
54883 }
54884 TemplatablePattern.prototype = new Pattern();
54885
54886 TemplatablePattern.prototype._create = function() {
54887   return new TemplatablePattern(this._input, this);
54888 };
54889
54890 TemplatablePattern.prototype._update = function() {
54891   this.__set_templated_pattern();
54892 };
54893
54894 TemplatablePattern.prototype.disable = function(language) {
54895   var result = this._create();
54896   result._disabled[language] = true;
54897   result._update();
54898   return result;
54899 };
54900
54901 TemplatablePattern.prototype.read_options = function(options) {
54902   var result = this._create();
54903   for (var language in template_names) {
54904     result._disabled[language] = options.templating.indexOf(language) === -1;
54905   }
54906   result._update();
54907   return result;
54908 };
54909
54910 TemplatablePattern.prototype.exclude = function(language) {
54911   var result = this._create();
54912   result._excluded[language] = true;
54913   result._update();
54914   return result;
54915 };
54916
54917 TemplatablePattern.prototype.read = function() {
54918   var result = '';
54919   if (this._match_pattern) {
54920     result = this._input.read(this._starting_pattern);
54921   } else {
54922     result = this._input.read(this._starting_pattern, this.__template_pattern);
54923   }
54924   var next = this._read_template();
54925   while (next) {
54926     if (this._match_pattern) {
54927       next += this._input.read(this._match_pattern);
54928     } else {
54929       next += this._input.readUntil(this.__template_pattern);
54930     }
54931     result += next;
54932     next = this._read_template();
54933   }
54934
54935   if (this._until_after) {
54936     result += this._input.readUntilAfter(this._until_pattern);
54937   }
54938   return result;
54939 };
54940
54941 TemplatablePattern.prototype.__set_templated_pattern = function() {
54942   var items = [];
54943
54944   if (!this._disabled.php) {
54945     items.push(this.__patterns.php._starting_pattern.source);
54946   }
54947   if (!this._disabled.handlebars) {
54948     items.push(this.__patterns.handlebars._starting_pattern.source);
54949   }
54950   if (!this._disabled.erb) {
54951     items.push(this.__patterns.erb._starting_pattern.source);
54952   }
54953   if (!this._disabled.django) {
54954     items.push(this.__patterns.django._starting_pattern.source);
54955     items.push(this.__patterns.django_value._starting_pattern.source);
54956     items.push(this.__patterns.django_comment._starting_pattern.source);
54957   }
54958
54959   if (this._until_pattern) {
54960     items.push(this._until_pattern.source);
54961   }
54962   this.__template_pattern = this._input.get_regexp('(?:' + items.join('|') + ')');
54963 };
54964
54965 TemplatablePattern.prototype._read_template = function() {
54966   var resulting_string = '';
54967   var c = this._input.peek();
54968   if (c === '<') {
54969     var peek1 = this._input.peek(1);
54970     //if we're in a comment, do something special
54971     // We treat all comments as literals, even more than preformatted tags
54972     // we just look for the appropriate close tag
54973     if (!this._disabled.php && !this._excluded.php && peek1 === '?') {
54974       resulting_string = resulting_string ||
54975         this.__patterns.php.read();
54976     }
54977     if (!this._disabled.erb && !this._excluded.erb && peek1 === '%') {
54978       resulting_string = resulting_string ||
54979         this.__patterns.erb.read();
54980     }
54981   } else if (c === '{') {
54982     if (!this._disabled.handlebars && !this._excluded.handlebars) {
54983       resulting_string = resulting_string ||
54984         this.__patterns.handlebars_comment.read();
54985       resulting_string = resulting_string ||
54986         this.__patterns.handlebars_unescaped.read();
54987       resulting_string = resulting_string ||
54988         this.__patterns.handlebars.read();
54989     }
54990     if (!this._disabled.django) {
54991       // django coflicts with handlebars a bit.
54992       if (!this._excluded.django && !this._excluded.handlebars) {
54993         resulting_string = resulting_string ||
54994           this.__patterns.django_value.read();
54995       }
54996       if (!this._excluded.django) {
54997         resulting_string = resulting_string ||
54998           this.__patterns.django_comment.read();
54999         resulting_string = resulting_string ||
55000           this.__patterns.django.read();
55001       }
55002     }
55003   }
55004   return resulting_string;
55005 };
55006
55007
55008 module.exports.TemplatablePattern = TemplatablePattern;
55009
55010
55011 /***/ }),
55012 /* 15 */,
55013 /* 16 */,
55014 /* 17 */,
55015 /* 18 */
55016 /***/ (function(module, exports, __nested_webpack_require_56152__) {
55017
55018 "use strict";
55019 /*jshint node:true */
55020 /*
55021
55022   The MIT License (MIT)
55023
55024   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
55025
55026   Permission is hereby granted, free of charge, to any person
55027   obtaining a copy of this software and associated documentation files
55028   (the "Software"), to deal in the Software without restriction,
55029   including without limitation the rights to use, copy, modify, merge,
55030   publish, distribute, sublicense, and/or sell copies of the Software,
55031   and to permit persons to whom the Software is furnished to do so,
55032   subject to the following conditions:
55033
55034   The above copyright notice and this permission notice shall be
55035   included in all copies or substantial portions of the Software.
55036
55037   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
55038   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
55039   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
55040   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
55041   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
55042   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
55043   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
55044   SOFTWARE.
55045 */
55046
55047
55048
55049 var Beautifier = __nested_webpack_require_56152__(19).Beautifier,
55050   Options = __nested_webpack_require_56152__(20).Options;
55051
55052 function style_html(html_source, options, js_beautify, css_beautify) {
55053   var beautifier = new Beautifier(html_source, options, js_beautify, css_beautify);
55054   return beautifier.beautify();
55055 }
55056
55057 module.exports = style_html;
55058 module.exports.defaultOptions = function() {
55059   return new Options();
55060 };
55061
55062
55063 /***/ }),
55064 /* 19 */
55065 /***/ (function(module, exports, __nested_webpack_require_57823__) {
55066
55067 "use strict";
55068 /*jshint node:true */
55069 /*
55070
55071   The MIT License (MIT)
55072
55073   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
55074
55075   Permission is hereby granted, free of charge, to any person
55076   obtaining a copy of this software and associated documentation files
55077   (the "Software"), to deal in the Software without restriction,
55078   including without limitation the rights to use, copy, modify, merge,
55079   publish, distribute, sublicense, and/or sell copies of the Software,
55080   and to permit persons to whom the Software is furnished to do so,
55081   subject to the following conditions:
55082
55083   The above copyright notice and this permission notice shall be
55084   included in all copies or substantial portions of the Software.
55085
55086   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
55087   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
55088   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
55089   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
55090   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
55091   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
55092   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
55093   SOFTWARE.
55094 */
55095
55096
55097
55098 var Options = __nested_webpack_require_57823__(20).Options;
55099 var Output = __nested_webpack_require_57823__(2).Output;
55100 var Tokenizer = __nested_webpack_require_57823__(21).Tokenizer;
55101 var TOKEN = __nested_webpack_require_57823__(21).TOKEN;
55102
55103 var lineBreak = /\r\n|[\r\n]/;
55104 var allLineBreaks = /\r\n|[\r\n]/g;
55105
55106 var Printer = function(options, base_indent_string) { //handles input/output and some other printing functions
55107
55108   this.indent_level = 0;
55109   this.alignment_size = 0;
55110   this.max_preserve_newlines = options.max_preserve_newlines;
55111   this.preserve_newlines = options.preserve_newlines;
55112
55113   this._output = new Output(options, base_indent_string);
55114
55115 };
55116
55117 Printer.prototype.current_line_has_match = function(pattern) {
55118   return this._output.current_line.has_match(pattern);
55119 };
55120
55121 Printer.prototype.set_space_before_token = function(value, non_breaking) {
55122   this._output.space_before_token = value;
55123   this._output.non_breaking_space = non_breaking;
55124 };
55125
55126 Printer.prototype.set_wrap_point = function() {
55127   this._output.set_indent(this.indent_level, this.alignment_size);
55128   this._output.set_wrap_point();
55129 };
55130
55131
55132 Printer.prototype.add_raw_token = function(token) {
55133   this._output.add_raw_token(token);
55134 };
55135
55136 Printer.prototype.print_preserved_newlines = function(raw_token) {
55137   var newlines = 0;
55138   if (raw_token.type !== TOKEN.TEXT && raw_token.previous.type !== TOKEN.TEXT) {
55139     newlines = raw_token.newlines ? 1 : 0;
55140   }
55141
55142   if (this.preserve_newlines) {
55143     newlines = raw_token.newlines < this.max_preserve_newlines + 1 ? raw_token.newlines : this.max_preserve_newlines + 1;
55144   }
55145   for (var n = 0; n < newlines; n++) {
55146     this.print_newline(n > 0);
55147   }
55148
55149   return newlines !== 0;
55150 };
55151
55152 Printer.prototype.traverse_whitespace = function(raw_token) {
55153   if (raw_token.whitespace_before || raw_token.newlines) {
55154     if (!this.print_preserved_newlines(raw_token)) {
55155       this._output.space_before_token = true;
55156     }
55157     return true;
55158   }
55159   return false;
55160 };
55161
55162 Printer.prototype.previous_token_wrapped = function() {
55163   return this._output.previous_token_wrapped;
55164 };
55165
55166 Printer.prototype.print_newline = function(force) {
55167   this._output.add_new_line(force);
55168 };
55169
55170 Printer.prototype.print_token = function(token) {
55171   if (token.text) {
55172     this._output.set_indent(this.indent_level, this.alignment_size);
55173     this._output.add_token(token.text);
55174   }
55175 };
55176
55177 Printer.prototype.indent = function() {
55178   this.indent_level++;
55179 };
55180
55181 Printer.prototype.get_full_indent = function(level) {
55182   level = this.indent_level + (level || 0);
55183   if (level < 1) {
55184     return '';
55185   }
55186
55187   return this._output.get_indent_string(level);
55188 };
55189
55190 var get_type_attribute = function(start_token) {
55191   var result = null;
55192   var raw_token = start_token.next;
55193
55194   // Search attributes for a type attribute
55195   while (raw_token.type !== TOKEN.EOF && start_token.closed !== raw_token) {
55196     if (raw_token.type === TOKEN.ATTRIBUTE && raw_token.text === 'type') {
55197       if (raw_token.next && raw_token.next.type === TOKEN.EQUALS &&
55198         raw_token.next.next && raw_token.next.next.type === TOKEN.VALUE) {
55199         result = raw_token.next.next.text;
55200       }
55201       break;
55202     }
55203     raw_token = raw_token.next;
55204   }
55205
55206   return result;
55207 };
55208
55209 var get_custom_beautifier_name = function(tag_check, raw_token) {
55210   var typeAttribute = null;
55211   var result = null;
55212
55213   if (!raw_token.closed) {
55214     return null;
55215   }
55216
55217   if (tag_check === 'script') {
55218     typeAttribute = 'text/javascript';
55219   } else if (tag_check === 'style') {
55220     typeAttribute = 'text/css';
55221   }
55222
55223   typeAttribute = get_type_attribute(raw_token) || typeAttribute;
55224
55225   // For script and style tags that have a type attribute, only enable custom beautifiers for matching values
55226   // For those without a type attribute use default;
55227   if (typeAttribute.search('text/css') > -1) {
55228     result = 'css';
55229   } else if (typeAttribute.search(/module|((text|application|dojo)\/(x-)?(javascript|ecmascript|jscript|livescript|(ld\+)?json|method|aspect))/) > -1) {
55230     result = 'javascript';
55231   } else if (typeAttribute.search(/(text|application|dojo)\/(x-)?(html)/) > -1) {
55232     result = 'html';
55233   } else if (typeAttribute.search(/test\/null/) > -1) {
55234     // Test only mime-type for testing the beautifier when null is passed as beautifing function
55235     result = 'null';
55236   }
55237
55238   return result;
55239 };
55240
55241 function in_array(what, arr) {
55242   return arr.indexOf(what) !== -1;
55243 }
55244
55245 function TagFrame(parent, parser_token, indent_level) {
55246   this.parent = parent || null;
55247   this.tag = parser_token ? parser_token.tag_name : '';
55248   this.indent_level = indent_level || 0;
55249   this.parser_token = parser_token || null;
55250 }
55251
55252 function TagStack(printer) {
55253   this._printer = printer;
55254   this._current_frame = null;
55255 }
55256
55257 TagStack.prototype.get_parser_token = function() {
55258   return this._current_frame ? this._current_frame.parser_token : null;
55259 };
55260
55261 TagStack.prototype.record_tag = function(parser_token) { //function to record a tag and its parent in this.tags Object
55262   var new_frame = new TagFrame(this._current_frame, parser_token, this._printer.indent_level);
55263   this._current_frame = new_frame;
55264 };
55265
55266 TagStack.prototype._try_pop_frame = function(frame) { //function to retrieve the opening tag to the corresponding closer
55267   var parser_token = null;
55268
55269   if (frame) {
55270     parser_token = frame.parser_token;
55271     this._printer.indent_level = frame.indent_level;
55272     this._current_frame = frame.parent;
55273   }
55274
55275   return parser_token;
55276 };
55277
55278 TagStack.prototype._get_frame = function(tag_list, stop_list) { //function to retrieve the opening tag to the corresponding closer
55279   var frame = this._current_frame;
55280
55281   while (frame) { //till we reach '' (the initial value);
55282     if (tag_list.indexOf(frame.tag) !== -1) { //if this is it use it
55283       break;
55284     } else if (stop_list && stop_list.indexOf(frame.tag) !== -1) {
55285       frame = null;
55286       break;
55287     }
55288     frame = frame.parent;
55289   }
55290
55291   return frame;
55292 };
55293
55294 TagStack.prototype.try_pop = function(tag, stop_list) { //function to retrieve the opening tag to the corresponding closer
55295   var frame = this._get_frame([tag], stop_list);
55296   return this._try_pop_frame(frame);
55297 };
55298
55299 TagStack.prototype.indent_to_tag = function(tag_list) {
55300   var frame = this._get_frame(tag_list);
55301   if (frame) {
55302     this._printer.indent_level = frame.indent_level;
55303   }
55304 };
55305
55306 function Beautifier(source_text, options, js_beautify, css_beautify) {
55307   //Wrapper function to invoke all the necessary constructors and deal with the output.
55308   this._source_text = source_text || '';
55309   options = options || {};
55310   this._js_beautify = js_beautify;
55311   this._css_beautify = css_beautify;
55312   this._tag_stack = null;
55313
55314   // Allow the setting of language/file-type specific options
55315   // with inheritance of overall settings
55316   var optionHtml = new Options(options, 'html');
55317
55318   this._options = optionHtml;
55319
55320   this._is_wrap_attributes_force = this._options.wrap_attributes.substr(0, 'force'.length) === 'force';
55321   this._is_wrap_attributes_force_expand_multiline = (this._options.wrap_attributes === 'force-expand-multiline');
55322   this._is_wrap_attributes_force_aligned = (this._options.wrap_attributes === 'force-aligned');
55323   this._is_wrap_attributes_aligned_multiple = (this._options.wrap_attributes === 'aligned-multiple');
55324   this._is_wrap_attributes_preserve = this._options.wrap_attributes.substr(0, 'preserve'.length) === 'preserve';
55325   this._is_wrap_attributes_preserve_aligned = (this._options.wrap_attributes === 'preserve-aligned');
55326 }
55327
55328 Beautifier.prototype.beautify = function() {
55329
55330   // if disabled, return the input unchanged.
55331   if (this._options.disabled) {
55332     return this._source_text;
55333   }
55334
55335   var source_text = this._source_text;
55336   var eol = this._options.eol;
55337   if (this._options.eol === 'auto') {
55338     eol = '\n';
55339     if (source_text && lineBreak.test(source_text)) {
55340       eol = source_text.match(lineBreak)[0];
55341     }
55342   }
55343
55344   // HACK: newline parsing inconsistent. This brute force normalizes the input.
55345   source_text = source_text.replace(allLineBreaks, '\n');
55346
55347   var baseIndentString = source_text.match(/^[\t ]*/)[0];
55348
55349   var last_token = {
55350     text: '',
55351     type: ''
55352   };
55353
55354   var last_tag_token = new TagOpenParserToken();
55355
55356   var printer = new Printer(this._options, baseIndentString);
55357   var tokens = new Tokenizer(source_text, this._options).tokenize();
55358
55359   this._tag_stack = new TagStack(printer);
55360
55361   var parser_token = null;
55362   var raw_token = tokens.next();
55363   while (raw_token.type !== TOKEN.EOF) {
55364
55365     if (raw_token.type === TOKEN.TAG_OPEN || raw_token.type === TOKEN.COMMENT) {
55366       parser_token = this._handle_tag_open(printer, raw_token, last_tag_token, last_token);
55367       last_tag_token = parser_token;
55368     } else if ((raw_token.type === TOKEN.ATTRIBUTE || raw_token.type === TOKEN.EQUALS || raw_token.type === TOKEN.VALUE) ||
55369       (raw_token.type === TOKEN.TEXT && !last_tag_token.tag_complete)) {
55370       parser_token = this._handle_inside_tag(printer, raw_token, last_tag_token, tokens);
55371     } else if (raw_token.type === TOKEN.TAG_CLOSE) {
55372       parser_token = this._handle_tag_close(printer, raw_token, last_tag_token);
55373     } else if (raw_token.type === TOKEN.TEXT) {
55374       parser_token = this._handle_text(printer, raw_token, last_tag_token);
55375     } else {
55376       // This should never happen, but if it does. Print the raw token
55377       printer.add_raw_token(raw_token);
55378     }
55379
55380     last_token = parser_token;
55381
55382     raw_token = tokens.next();
55383   }
55384   var sweet_code = printer._output.get_code(eol);
55385
55386   return sweet_code;
55387 };
55388
55389 Beautifier.prototype._handle_tag_close = function(printer, raw_token, last_tag_token) {
55390   var parser_token = {
55391     text: raw_token.text,
55392     type: raw_token.type
55393   };
55394   printer.alignment_size = 0;
55395   last_tag_token.tag_complete = true;
55396
55397   printer.set_space_before_token(raw_token.newlines || raw_token.whitespace_before !== '', true);
55398   if (last_tag_token.is_unformatted) {
55399     printer.add_raw_token(raw_token);
55400   } else {
55401     if (last_tag_token.tag_start_char === '<') {
55402       printer.set_space_before_token(raw_token.text[0] === '/', true); // space before />, no space before >
55403       if (this._is_wrap_attributes_force_expand_multiline && last_tag_token.has_wrapped_attrs) {
55404         printer.print_newline(false);
55405       }
55406     }
55407     printer.print_token(raw_token);
55408
55409   }
55410
55411   if (last_tag_token.indent_content &&
55412     !(last_tag_token.is_unformatted || last_tag_token.is_content_unformatted)) {
55413     printer.indent();
55414
55415     // only indent once per opened tag
55416     last_tag_token.indent_content = false;
55417   }
55418
55419   if (!last_tag_token.is_inline_element &&
55420     !(last_tag_token.is_unformatted || last_tag_token.is_content_unformatted)) {
55421     printer.set_wrap_point();
55422   }
55423
55424   return parser_token;
55425 };
55426
55427 Beautifier.prototype._handle_inside_tag = function(printer, raw_token, last_tag_token, tokens) {
55428   var wrapped = last_tag_token.has_wrapped_attrs;
55429   var parser_token = {
55430     text: raw_token.text,
55431     type: raw_token.type
55432   };
55433
55434   printer.set_space_before_token(raw_token.newlines || raw_token.whitespace_before !== '', true);
55435   if (last_tag_token.is_unformatted) {
55436     printer.add_raw_token(raw_token);
55437   } else if (last_tag_token.tag_start_char === '{' && raw_token.type === TOKEN.TEXT) {
55438     // For the insides of handlebars allow newlines or a single space between open and contents
55439     if (printer.print_preserved_newlines(raw_token)) {
55440       raw_token.newlines = 0;
55441       printer.add_raw_token(raw_token);
55442     } else {
55443       printer.print_token(raw_token);
55444     }
55445   } else {
55446     if (raw_token.type === TOKEN.ATTRIBUTE) {
55447       printer.set_space_before_token(true);
55448       last_tag_token.attr_count += 1;
55449     } else if (raw_token.type === TOKEN.EQUALS) { //no space before =
55450       printer.set_space_before_token(false);
55451     } else if (raw_token.type === TOKEN.VALUE && raw_token.previous.type === TOKEN.EQUALS) { //no space before value
55452       printer.set_space_before_token(false);
55453     }
55454
55455     if (raw_token.type === TOKEN.ATTRIBUTE && last_tag_token.tag_start_char === '<') {
55456       if (this._is_wrap_attributes_preserve || this._is_wrap_attributes_preserve_aligned) {
55457         printer.traverse_whitespace(raw_token);
55458         wrapped = wrapped || raw_token.newlines !== 0;
55459       }
55460
55461
55462       if (this._is_wrap_attributes_force) {
55463         var force_attr_wrap = last_tag_token.attr_count > 1;
55464         if (this._is_wrap_attributes_force_expand_multiline && last_tag_token.attr_count === 1) {
55465           var is_only_attribute = true;
55466           var peek_index = 0;
55467           var peek_token;
55468           do {
55469             peek_token = tokens.peek(peek_index);
55470             if (peek_token.type === TOKEN.ATTRIBUTE) {
55471               is_only_attribute = false;
55472               break;
55473             }
55474             peek_index += 1;
55475           } while (peek_index < 4 && peek_token.type !== TOKEN.EOF && peek_token.type !== TOKEN.TAG_CLOSE);
55476
55477           force_attr_wrap = !is_only_attribute;
55478         }
55479
55480         if (force_attr_wrap) {
55481           printer.print_newline(false);
55482           wrapped = true;
55483         }
55484       }
55485     }
55486     printer.print_token(raw_token);
55487     wrapped = wrapped || printer.previous_token_wrapped();
55488     last_tag_token.has_wrapped_attrs = wrapped;
55489   }
55490   return parser_token;
55491 };
55492
55493 Beautifier.prototype._handle_text = function(printer, raw_token, last_tag_token) {
55494   var parser_token = {
55495     text: raw_token.text,
55496     type: 'TK_CONTENT'
55497   };
55498   if (last_tag_token.custom_beautifier_name) { //check if we need to format javascript
55499     this._print_custom_beatifier_text(printer, raw_token, last_tag_token);
55500   } else if (last_tag_token.is_unformatted || last_tag_token.is_content_unformatted) {
55501     printer.add_raw_token(raw_token);
55502   } else {
55503     printer.traverse_whitespace(raw_token);
55504     printer.print_token(raw_token);
55505   }
55506   return parser_token;
55507 };
55508
55509 Beautifier.prototype._print_custom_beatifier_text = function(printer, raw_token, last_tag_token) {
55510   var local = this;
55511   if (raw_token.text !== '') {
55512
55513     var text = raw_token.text,
55514       _beautifier,
55515       script_indent_level = 1,
55516       pre = '',
55517       post = '';
55518     if (last_tag_token.custom_beautifier_name === 'javascript' && typeof this._js_beautify === 'function') {
55519       _beautifier = this._js_beautify;
55520     } else if (last_tag_token.custom_beautifier_name === 'css' && typeof this._css_beautify === 'function') {
55521       _beautifier = this._css_beautify;
55522     } else if (last_tag_token.custom_beautifier_name === 'html') {
55523       _beautifier = function(html_source, options) {
55524         var beautifier = new Beautifier(html_source, options, local._js_beautify, local._css_beautify);
55525         return beautifier.beautify();
55526       };
55527     }
55528
55529     if (this._options.indent_scripts === "keep") {
55530       script_indent_level = 0;
55531     } else if (this._options.indent_scripts === "separate") {
55532       script_indent_level = -printer.indent_level;
55533     }
55534
55535     var indentation = printer.get_full_indent(script_indent_level);
55536
55537     // if there is at least one empty line at the end of this text, strip it
55538     // we'll be adding one back after the text but before the containing tag.
55539     text = text.replace(/\n[ \t]*$/, '');
55540
55541     // Handle the case where content is wrapped in a comment or cdata.
55542     if (last_tag_token.custom_beautifier_name !== 'html' &&
55543       text[0] === '<' && text.match(/^(<!--|<!\[CDATA\[)/)) {
55544       var matched = /^(<!--[^\n]*|<!\[CDATA\[)(\n?)([ \t\n]*)([\s\S]*)(-->|]]>)$/.exec(text);
55545
55546       // if we start to wrap but don't finish, print raw
55547       if (!matched) {
55548         printer.add_raw_token(raw_token);
55549         return;
55550       }
55551
55552       pre = indentation + matched[1] + '\n';
55553       text = matched[4];
55554       if (matched[5]) {
55555         post = indentation + matched[5];
55556       }
55557
55558       // if there is at least one empty line at the end of this text, strip it
55559       // we'll be adding one back after the text but before the containing tag.
55560       text = text.replace(/\n[ \t]*$/, '');
55561
55562       if (matched[2] || matched[3].indexOf('\n') !== -1) {
55563         // if the first line of the non-comment text has spaces
55564         // use that as the basis for indenting in null case.
55565         matched = matched[3].match(/[ \t]+$/);
55566         if (matched) {
55567           raw_token.whitespace_before = matched[0];
55568         }
55569       }
55570     }
55571
55572     if (text) {
55573       if (_beautifier) {
55574
55575         // call the Beautifier if avaliable
55576         var Child_options = function() {
55577           this.eol = '\n';
55578         };
55579         Child_options.prototype = this._options.raw_options;
55580         var child_options = new Child_options();
55581         text = _beautifier(indentation + text, child_options);
55582       } else {
55583         // simply indent the string otherwise
55584         var white = raw_token.whitespace_before;
55585         if (white) {
55586           text = text.replace(new RegExp('\n(' + white + ')?', 'g'), '\n');
55587         }
55588
55589         text = indentation + text.replace(/\n/g, '\n' + indentation);
55590       }
55591     }
55592
55593     if (pre) {
55594       if (!text) {
55595         text = pre + post;
55596       } else {
55597         text = pre + text + '\n' + post;
55598       }
55599     }
55600
55601     printer.print_newline(false);
55602     if (text) {
55603       raw_token.text = text;
55604       raw_token.whitespace_before = '';
55605       raw_token.newlines = 0;
55606       printer.add_raw_token(raw_token);
55607       printer.print_newline(true);
55608     }
55609   }
55610 };
55611
55612 Beautifier.prototype._handle_tag_open = function(printer, raw_token, last_tag_token, last_token) {
55613   var parser_token = this._get_tag_open_token(raw_token);
55614
55615   if ((last_tag_token.is_unformatted || last_tag_token.is_content_unformatted) &&
55616     !last_tag_token.is_empty_element &&
55617     raw_token.type === TOKEN.TAG_OPEN && raw_token.text.indexOf('</') === 0) {
55618     // End element tags for unformatted or content_unformatted elements
55619     // are printed raw to keep any newlines inside them exactly the same.
55620     printer.add_raw_token(raw_token);
55621     parser_token.start_tag_token = this._tag_stack.try_pop(parser_token.tag_name);
55622   } else {
55623     printer.traverse_whitespace(raw_token);
55624     this._set_tag_position(printer, raw_token, parser_token, last_tag_token, last_token);
55625     if (!parser_token.is_inline_element) {
55626       printer.set_wrap_point();
55627     }
55628     printer.print_token(raw_token);
55629   }
55630
55631   //indent attributes an auto, forced, aligned or forced-align line-wrap
55632   if (this._is_wrap_attributes_force_aligned || this._is_wrap_attributes_aligned_multiple || this._is_wrap_attributes_preserve_aligned) {
55633     parser_token.alignment_size = raw_token.text.length + 1;
55634   }
55635
55636   if (!parser_token.tag_complete && !parser_token.is_unformatted) {
55637     printer.alignment_size = parser_token.alignment_size;
55638   }
55639
55640   return parser_token;
55641 };
55642
55643 var TagOpenParserToken = function(parent, raw_token) {
55644   this.parent = parent || null;
55645   this.text = '';
55646   this.type = 'TK_TAG_OPEN';
55647   this.tag_name = '';
55648   this.is_inline_element = false;
55649   this.is_unformatted = false;
55650   this.is_content_unformatted = false;
55651   this.is_empty_element = false;
55652   this.is_start_tag = false;
55653   this.is_end_tag = false;
55654   this.indent_content = false;
55655   this.multiline_content = false;
55656   this.custom_beautifier_name = null;
55657   this.start_tag_token = null;
55658   this.attr_count = 0;
55659   this.has_wrapped_attrs = false;
55660   this.alignment_size = 0;
55661   this.tag_complete = false;
55662   this.tag_start_char = '';
55663   this.tag_check = '';
55664
55665   if (!raw_token) {
55666     this.tag_complete = true;
55667   } else {
55668     var tag_check_match;
55669
55670     this.tag_start_char = raw_token.text[0];
55671     this.text = raw_token.text;
55672
55673     if (this.tag_start_char === '<') {
55674       tag_check_match = raw_token.text.match(/^<([^\s>]*)/);
55675       this.tag_check = tag_check_match ? tag_check_match[1] : '';
55676     } else {
55677       tag_check_match = raw_token.text.match(/^{{(?:[\^]|#\*?)?([^\s}]+)/);
55678       this.tag_check = tag_check_match ? tag_check_match[1] : '';
55679
55680       // handle "{{#> myPartial}}
55681       if (raw_token.text === '{{#>' && this.tag_check === '>' && raw_token.next !== null) {
55682         this.tag_check = raw_token.next.text;
55683       }
55684     }
55685     this.tag_check = this.tag_check.toLowerCase();
55686
55687     if (raw_token.type === TOKEN.COMMENT) {
55688       this.tag_complete = true;
55689     }
55690
55691     this.is_start_tag = this.tag_check.charAt(0) !== '/';
55692     this.tag_name = !this.is_start_tag ? this.tag_check.substr(1) : this.tag_check;
55693     this.is_end_tag = !this.is_start_tag ||
55694       (raw_token.closed && raw_token.closed.text === '/>');
55695
55696     // handlebars tags that don't start with # or ^ are single_tags, and so also start and end.
55697     this.is_end_tag = this.is_end_tag ||
55698       (this.tag_start_char === '{' && (this.text.length < 3 || (/[^#\^]/.test(this.text.charAt(2)))));
55699   }
55700 };
55701
55702 Beautifier.prototype._get_tag_open_token = function(raw_token) { //function to get a full tag and parse its type
55703   var parser_token = new TagOpenParserToken(this._tag_stack.get_parser_token(), raw_token);
55704
55705   parser_token.alignment_size = this._options.wrap_attributes_indent_size;
55706
55707   parser_token.is_end_tag = parser_token.is_end_tag ||
55708     in_array(parser_token.tag_check, this._options.void_elements);
55709
55710   parser_token.is_empty_element = parser_token.tag_complete ||
55711     (parser_token.is_start_tag && parser_token.is_end_tag);
55712
55713   parser_token.is_unformatted = !parser_token.tag_complete && in_array(parser_token.tag_check, this._options.unformatted);
55714   parser_token.is_content_unformatted = !parser_token.is_empty_element && in_array(parser_token.tag_check, this._options.content_unformatted);
55715   parser_token.is_inline_element = in_array(parser_token.tag_name, this._options.inline) || parser_token.tag_start_char === '{';
55716
55717   return parser_token;
55718 };
55719
55720 Beautifier.prototype._set_tag_position = function(printer, raw_token, parser_token, last_tag_token, last_token) {
55721
55722   if (!parser_token.is_empty_element) {
55723     if (parser_token.is_end_tag) { //this tag is a double tag so check for tag-ending
55724       parser_token.start_tag_token = this._tag_stack.try_pop(parser_token.tag_name); //remove it and all ancestors
55725     } else { // it's a start-tag
55726       // check if this tag is starting an element that has optional end element
55727       // and do an ending needed
55728       if (this._do_optional_end_element(parser_token)) {
55729         if (!parser_token.is_inline_element) {
55730           printer.print_newline(false);
55731         }
55732       }
55733
55734       this._tag_stack.record_tag(parser_token); //push it on the tag stack
55735
55736       if ((parser_token.tag_name === 'script' || parser_token.tag_name === 'style') &&
55737         !(parser_token.is_unformatted || parser_token.is_content_unformatted)) {
55738         parser_token.custom_beautifier_name = get_custom_beautifier_name(parser_token.tag_check, raw_token);
55739       }
55740     }
55741   }
55742
55743   if (in_array(parser_token.tag_check, this._options.extra_liners)) { //check if this double needs an extra line
55744     printer.print_newline(false);
55745     if (!printer._output.just_added_blankline()) {
55746       printer.print_newline(true);
55747     }
55748   }
55749
55750   if (parser_token.is_empty_element) { //if this tag name is a single tag type (either in the list or has a closing /)
55751
55752     // if you hit an else case, reset the indent level if you are inside an:
55753     // 'if', 'unless', or 'each' block.
55754     if (parser_token.tag_start_char === '{' && parser_token.tag_check === 'else') {
55755       this._tag_stack.indent_to_tag(['if', 'unless', 'each']);
55756       parser_token.indent_content = true;
55757       // Don't add a newline if opening {{#if}} tag is on the current line
55758       var foundIfOnCurrentLine = printer.current_line_has_match(/{{#if/);
55759       if (!foundIfOnCurrentLine) {
55760         printer.print_newline(false);
55761       }
55762     }
55763
55764     // Don't add a newline before elements that should remain where they are.
55765     if (parser_token.tag_name === '!--' && last_token.type === TOKEN.TAG_CLOSE &&
55766       last_tag_token.is_end_tag && parser_token.text.indexOf('\n') === -1) {
55767       //Do nothing. Leave comments on same line.
55768     } else {
55769       if (!(parser_token.is_inline_element || parser_token.is_unformatted)) {
55770         printer.print_newline(false);
55771       }
55772       this._calcluate_parent_multiline(printer, parser_token);
55773     }
55774   } else if (parser_token.is_end_tag) { //this tag is a double tag so check for tag-ending
55775     var do_end_expand = false;
55776
55777     // deciding whether a block is multiline should not be this hard
55778     do_end_expand = parser_token.start_tag_token && parser_token.start_tag_token.multiline_content;
55779     do_end_expand = do_end_expand || (!parser_token.is_inline_element &&
55780       !(last_tag_token.is_inline_element || last_tag_token.is_unformatted) &&
55781       !(last_token.type === TOKEN.TAG_CLOSE && parser_token.start_tag_token === last_tag_token) &&
55782       last_token.type !== 'TK_CONTENT'
55783     );
55784
55785     if (parser_token.is_content_unformatted || parser_token.is_unformatted) {
55786       do_end_expand = false;
55787     }
55788
55789     if (do_end_expand) {
55790       printer.print_newline(false);
55791     }
55792   } else { // it's a start-tag
55793     parser_token.indent_content = !parser_token.custom_beautifier_name;
55794
55795     if (parser_token.tag_start_char === '<') {
55796       if (parser_token.tag_name === 'html') {
55797         parser_token.indent_content = this._options.indent_inner_html;
55798       } else if (parser_token.tag_name === 'head') {
55799         parser_token.indent_content = this._options.indent_head_inner_html;
55800       } else if (parser_token.tag_name === 'body') {
55801         parser_token.indent_content = this._options.indent_body_inner_html;
55802       }
55803     }
55804
55805     if (!(parser_token.is_inline_element || parser_token.is_unformatted) &&
55806       (last_token.type !== 'TK_CONTENT' || parser_token.is_content_unformatted)) {
55807       printer.print_newline(false);
55808     }
55809
55810     this._calcluate_parent_multiline(printer, parser_token);
55811   }
55812 };
55813
55814 Beautifier.prototype._calcluate_parent_multiline = function(printer, parser_token) {
55815   if (parser_token.parent && printer._output.just_added_newline() &&
55816     !((parser_token.is_inline_element || parser_token.is_unformatted) && parser_token.parent.is_inline_element)) {
55817     parser_token.parent.multiline_content = true;
55818   }
55819 };
55820
55821 //To be used for <p> tag special case:
55822 var p_closers = ['address', 'article', 'aside', 'blockquote', 'details', 'div', 'dl', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hr', 'main', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul'];
55823 var p_parent_excludes = ['a', 'audio', 'del', 'ins', 'map', 'noscript', 'video'];
55824
55825 Beautifier.prototype._do_optional_end_element = function(parser_token) {
55826   var result = null;
55827   // NOTE: cases of "if there is no more content in the parent element"
55828   // are handled automatically by the beautifier.
55829   // It assumes parent or ancestor close tag closes all children.
55830   // https://www.w3.org/TR/html5/syntax.html#optional-tags
55831   if (parser_token.is_empty_element || !parser_token.is_start_tag || !parser_token.parent) {
55832     return;
55833
55834   }
55835
55836   if (parser_token.tag_name === 'body') {
55837     // A head element’s end tag may be omitted if the head element is not immediately followed by a space character or a comment.
55838     result = result || this._tag_stack.try_pop('head');
55839
55840     //} else if (parser_token.tag_name === 'body') {
55841     // DONE: A body element’s end tag may be omitted if the body element is not immediately followed by a comment.
55842
55843   } else if (parser_token.tag_name === 'li') {
55844     // An li element’s end tag may be omitted if the li element is immediately followed by another li element or if there is no more content in the parent element.
55845     result = result || this._tag_stack.try_pop('li', ['ol', 'ul']);
55846
55847   } else if (parser_token.tag_name === 'dd' || parser_token.tag_name === 'dt') {
55848     // A dd element’s end tag may be omitted if the dd element is immediately followed by another dd element or a dt element, or if there is no more content in the parent element.
55849     // A dt element’s end tag may be omitted if the dt element is immediately followed by another dt element or a dd element.
55850     result = result || this._tag_stack.try_pop('dt', ['dl']);
55851     result = result || this._tag_stack.try_pop('dd', ['dl']);
55852
55853
55854   } else if (parser_token.parent.tag_name === 'p' && p_closers.indexOf(parser_token.tag_name) !== -1) {
55855     // IMPORTANT: this else-if works because p_closers has no overlap with any other element we look for in this method
55856     // check for the parent element is an HTML element that is not an <a>, <audio>, <del>, <ins>, <map>, <noscript>, or <video> element,  or an autonomous custom element.
55857     // To do this right, this needs to be coded as an inclusion of the inverse of the exclusion above.
55858     // But to start with (if we ignore "autonomous custom elements") the exclusion would be fine.
55859     var p_parent = parser_token.parent.parent;
55860     if (!p_parent || p_parent_excludes.indexOf(p_parent.tag_name) === -1) {
55861       result = result || this._tag_stack.try_pop('p');
55862     }
55863   } else if (parser_token.tag_name === 'rp' || parser_token.tag_name === 'rt') {
55864     // An rt element’s end tag may be omitted if the rt element is immediately followed by an rt or rp element, or if there is no more content in the parent element.
55865     // An rp element’s end tag may be omitted if the rp element is immediately followed by an rt or rp element, or if there is no more content in the parent element.
55866     result = result || this._tag_stack.try_pop('rt', ['ruby', 'rtc']);
55867     result = result || this._tag_stack.try_pop('rp', ['ruby', 'rtc']);
55868
55869   } else if (parser_token.tag_name === 'optgroup') {
55870     // An optgroup element’s end tag may be omitted if the optgroup element is immediately followed by another optgroup element, or if there is no more content in the parent element.
55871     // An option element’s end tag may be omitted if the option element is immediately followed by another option element, or if it is immediately followed by an optgroup element, or if there is no more content in the parent element.
55872     result = result || this._tag_stack.try_pop('optgroup', ['select']);
55873     //result = result || this._tag_stack.try_pop('option', ['select']);
55874
55875   } else if (parser_token.tag_name === 'option') {
55876     // An option element’s end tag may be omitted if the option element is immediately followed by another option element, or if it is immediately followed by an optgroup element, or if there is no more content in the parent element.
55877     result = result || this._tag_stack.try_pop('option', ['select', 'datalist', 'optgroup']);
55878
55879   } else if (parser_token.tag_name === 'colgroup') {
55880     // DONE: A colgroup element’s end tag may be omitted if the colgroup element is not immediately followed by a space character or a comment.
55881     // A caption element's end tag may be ommitted if a colgroup, thead, tfoot, tbody, or tr element is started.
55882     result = result || this._tag_stack.try_pop('caption', ['table']);
55883
55884   } else if (parser_token.tag_name === 'thead') {
55885     // A colgroup element's end tag may be ommitted if a thead, tfoot, tbody, or tr element is started.
55886     // A caption element's end tag may be ommitted if a colgroup, thead, tfoot, tbody, or tr element is started.
55887     result = result || this._tag_stack.try_pop('caption', ['table']);
55888     result = result || this._tag_stack.try_pop('colgroup', ['table']);
55889
55890     //} else if (parser_token.tag_name === 'caption') {
55891     // DONE: A caption element’s end tag may be omitted if the caption element is not immediately followed by a space character or a comment.
55892
55893   } else if (parser_token.tag_name === 'tbody' || parser_token.tag_name === 'tfoot') {
55894     // A thead element’s end tag may be omitted if the thead element is immediately followed by a tbody or tfoot element.
55895     // A tbody element’s end tag may be omitted if the tbody element is immediately followed by a tbody or tfoot element, or if there is no more content in the parent element.
55896     // A colgroup element's end tag may be ommitted if a thead, tfoot, tbody, or tr element is started.
55897     // A caption element's end tag may be ommitted if a colgroup, thead, tfoot, tbody, or tr element is started.
55898     result = result || this._tag_stack.try_pop('caption', ['table']);
55899     result = result || this._tag_stack.try_pop('colgroup', ['table']);
55900     result = result || this._tag_stack.try_pop('thead', ['table']);
55901     result = result || this._tag_stack.try_pop('tbody', ['table']);
55902
55903     //} else if (parser_token.tag_name === 'tfoot') {
55904     // DONE: A tfoot element’s end tag may be omitted if there is no more content in the parent element.
55905
55906   } else if (parser_token.tag_name === 'tr') {
55907     // A tr element’s end tag may be omitted if the tr element is immediately followed by another tr element, or if there is no more content in the parent element.
55908     // A colgroup element's end tag may be ommitted if a thead, tfoot, tbody, or tr element is started.
55909     // A caption element's end tag may be ommitted if a colgroup, thead, tfoot, tbody, or tr element is started.
55910     result = result || this._tag_stack.try_pop('caption', ['table']);
55911     result = result || this._tag_stack.try_pop('colgroup', ['table']);
55912     result = result || this._tag_stack.try_pop('tr', ['table', 'thead', 'tbody', 'tfoot']);
55913
55914   } else if (parser_token.tag_name === 'th' || parser_token.tag_name === 'td') {
55915     // A td element’s end tag may be omitted if the td element is immediately followed by a td or th element, or if there is no more content in the parent element.
55916     // A th element’s end tag may be omitted if the th element is immediately followed by a td or th element, or if there is no more content in the parent element.
55917     result = result || this._tag_stack.try_pop('td', ['table', 'thead', 'tbody', 'tfoot', 'tr']);
55918     result = result || this._tag_stack.try_pop('th', ['table', 'thead', 'tbody', 'tfoot', 'tr']);
55919   }
55920
55921   // Start element omission not handled currently
55922   // A head element’s start tag may be omitted if the element is empty, or if the first thing inside the head element is an element.
55923   // A tbody element’s start tag may be omitted if the first thing inside the tbody element is a tr element, and if the element is not immediately preceded by a tbody, thead, or tfoot element whose end tag has been omitted. (It can’t be omitted if the element is empty.)
55924   // A colgroup element’s start tag may be omitted if the first thing inside the colgroup element is a col element, and if the element is not immediately preceded by another colgroup element whose end tag has been omitted. (It can’t be omitted if the element is empty.)
55925
55926   // Fix up the parent of the parser token
55927   parser_token.parent = this._tag_stack.get_parser_token();
55928
55929   return result;
55930 };
55931
55932 module.exports.Beautifier = Beautifier;
55933
55934
55935 /***/ }),
55936 /* 20 */
55937 /***/ (function(module, exports, __nested_webpack_require_93162__) {
55938
55939 "use strict";
55940 /*jshint node:true */
55941 /*
55942
55943   The MIT License (MIT)
55944
55945   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
55946
55947   Permission is hereby granted, free of charge, to any person
55948   obtaining a copy of this software and associated documentation files
55949   (the "Software"), to deal in the Software without restriction,
55950   including without limitation the rights to use, copy, modify, merge,
55951   publish, distribute, sublicense, and/or sell copies of the Software,
55952   and to permit persons to whom the Software is furnished to do so,
55953   subject to the following conditions:
55954
55955   The above copyright notice and this permission notice shall be
55956   included in all copies or substantial portions of the Software.
55957
55958   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
55959   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
55960   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
55961   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
55962   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
55963   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
55964   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
55965   SOFTWARE.
55966 */
55967
55968
55969
55970 var BaseOptions = __nested_webpack_require_93162__(6).Options;
55971
55972 function Options(options) {
55973   BaseOptions.call(this, options, 'html');
55974   if (this.templating.length === 1 && this.templating[0] === 'auto') {
55975     this.templating = ['django', 'erb', 'handlebars', 'php'];
55976   }
55977
55978   this.indent_inner_html = this._get_boolean('indent_inner_html');
55979   this.indent_body_inner_html = this._get_boolean('indent_body_inner_html', true);
55980   this.indent_head_inner_html = this._get_boolean('indent_head_inner_html', true);
55981
55982   this.indent_handlebars = this._get_boolean('indent_handlebars', true);
55983   this.wrap_attributes = this._get_selection('wrap_attributes',
55984     ['auto', 'force', 'force-aligned', 'force-expand-multiline', 'aligned-multiple', 'preserve', 'preserve-aligned']);
55985   this.wrap_attributes_indent_size = this._get_number('wrap_attributes_indent_size', this.indent_size);
55986   this.extra_liners = this._get_array('extra_liners', ['head', 'body', '/html']);
55987
55988   // Block vs inline elements
55989   // https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements
55990   // https://developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements
55991   // https://www.w3.org/TR/html5/dom.html#phrasing-content
55992   this.inline = this._get_array('inline', [
55993     'a', 'abbr', 'area', 'audio', 'b', 'bdi', 'bdo', 'br', 'button', 'canvas', 'cite',
55994     'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'i', 'iframe', 'img',
55995     'input', 'ins', 'kbd', 'keygen', 'label', 'map', 'mark', 'math', 'meter', 'noscript',
55996     'object', 'output', 'progress', 'q', 'ruby', 's', 'samp', /* 'script', */ 'select', 'small',
55997     'span', 'strong', 'sub', 'sup', 'svg', 'template', 'textarea', 'time', 'u', 'var',
55998     'video', 'wbr', 'text',
55999     // obsolete inline tags
56000     'acronym', 'big', 'strike', 'tt'
56001   ]);
56002   this.void_elements = this._get_array('void_elements', [
56003     // HTLM void elements - aka self-closing tags - aka singletons
56004     // https://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements
56005     'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen',
56006     'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr',
56007     // NOTE: Optional tags are too complex for a simple list
56008     // they are hard coded in _do_optional_end_element
56009
56010     // Doctype and xml elements
56011     '!doctype', '?xml',
56012
56013     // obsolete tags
56014     // basefont: https://www.computerhope.com/jargon/h/html-basefont-tag.htm
56015     // isndex: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/isindex
56016     'basefont', 'isindex'
56017   ]);
56018   this.unformatted = this._get_array('unformatted', []);
56019   this.content_unformatted = this._get_array('content_unformatted', [
56020     'pre', 'textarea'
56021   ]);
56022   this.unformatted_content_delimiter = this._get_characters('unformatted_content_delimiter');
56023   this.indent_scripts = this._get_selection('indent_scripts', ['normal', 'keep', 'separate']);
56024
56025 }
56026 Options.prototype = new BaseOptions();
56027
56028
56029
56030 module.exports.Options = Options;
56031
56032
56033 /***/ }),
56034 /* 21 */
56035 /***/ (function(module, exports, __nested_webpack_require_97356__) {
56036
56037 "use strict";
56038 /*jshint node:true */
56039 /*
56040
56041   The MIT License (MIT)
56042
56043   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
56044
56045   Permission is hereby granted, free of charge, to any person
56046   obtaining a copy of this software and associated documentation files
56047   (the "Software"), to deal in the Software without restriction,
56048   including without limitation the rights to use, copy, modify, merge,
56049   publish, distribute, sublicense, and/or sell copies of the Software,
56050   and to permit persons to whom the Software is furnished to do so,
56051   subject to the following conditions:
56052
56053   The above copyright notice and this permission notice shall be
56054   included in all copies or substantial portions of the Software.
56055
56056   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
56057   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
56058   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
56059   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
56060   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
56061   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
56062   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
56063   SOFTWARE.
56064 */
56065
56066
56067
56068 var BaseTokenizer = __nested_webpack_require_97356__(9).Tokenizer;
56069 var BASETOKEN = __nested_webpack_require_97356__(9).TOKEN;
56070 var Directives = __nested_webpack_require_97356__(13).Directives;
56071 var TemplatablePattern = __nested_webpack_require_97356__(14).TemplatablePattern;
56072 var Pattern = __nested_webpack_require_97356__(12).Pattern;
56073
56074 var TOKEN = {
56075   TAG_OPEN: 'TK_TAG_OPEN',
56076   TAG_CLOSE: 'TK_TAG_CLOSE',
56077   ATTRIBUTE: 'TK_ATTRIBUTE',
56078   EQUALS: 'TK_EQUALS',
56079   VALUE: 'TK_VALUE',
56080   COMMENT: 'TK_COMMENT',
56081   TEXT: 'TK_TEXT',
56082   UNKNOWN: 'TK_UNKNOWN',
56083   START: BASETOKEN.START,
56084   RAW: BASETOKEN.RAW,
56085   EOF: BASETOKEN.EOF
56086 };
56087
56088 var directives_core = new Directives(/<\!--/, /-->/);
56089
56090 var Tokenizer = function(input_string, options) {
56091   BaseTokenizer.call(this, input_string, options);
56092   this._current_tag_name = '';
56093
56094   // Words end at whitespace or when a tag starts
56095   // if we are indenting handlebars, they are considered tags
56096   var templatable_reader = new TemplatablePattern(this._input).read_options(this._options);
56097   var pattern_reader = new Pattern(this._input);
56098
56099   this.__patterns = {
56100     word: templatable_reader.until(/[\n\r\t <]/),
56101     single_quote: templatable_reader.until_after(/'/),
56102     double_quote: templatable_reader.until_after(/"/),
56103     attribute: templatable_reader.until(/[\n\r\t =>]|\/>/),
56104     element_name: templatable_reader.until(/[\n\r\t >\/]/),
56105
56106     handlebars_comment: pattern_reader.starting_with(/{{!--/).until_after(/--}}/),
56107     handlebars: pattern_reader.starting_with(/{{/).until_after(/}}/),
56108     handlebars_open: pattern_reader.until(/[\n\r\t }]/),
56109     handlebars_raw_close: pattern_reader.until(/}}/),
56110     comment: pattern_reader.starting_with(/<!--/).until_after(/-->/),
56111     cdata: pattern_reader.starting_with(/<!\[CDATA\[/).until_after(/]]>/),
56112     // https://en.wikipedia.org/wiki/Conditional_comment
56113     conditional_comment: pattern_reader.starting_with(/<!\[/).until_after(/]>/),
56114     processing: pattern_reader.starting_with(/<\?/).until_after(/\?>/)
56115   };
56116
56117   if (this._options.indent_handlebars) {
56118     this.__patterns.word = this.__patterns.word.exclude('handlebars');
56119   }
56120
56121   this._unformatted_content_delimiter = null;
56122
56123   if (this._options.unformatted_content_delimiter) {
56124     var literal_regexp = this._input.get_literal_regexp(this._options.unformatted_content_delimiter);
56125     this.__patterns.unformatted_content_delimiter =
56126       pattern_reader.matching(literal_regexp)
56127       .until_after(literal_regexp);
56128   }
56129 };
56130 Tokenizer.prototype = new BaseTokenizer();
56131
56132 Tokenizer.prototype._is_comment = function(current_token) { // jshint unused:false
56133   return false; //current_token.type === TOKEN.COMMENT || current_token.type === TOKEN.UNKNOWN;
56134 };
56135
56136 Tokenizer.prototype._is_opening = function(current_token) {
56137   return current_token.type === TOKEN.TAG_OPEN;
56138 };
56139
56140 Tokenizer.prototype._is_closing = function(current_token, open_token) {
56141   return current_token.type === TOKEN.TAG_CLOSE &&
56142     (open_token && (
56143       ((current_token.text === '>' || current_token.text === '/>') && open_token.text[0] === '<') ||
56144       (current_token.text === '}}' && open_token.text[0] === '{' && open_token.text[1] === '{')));
56145 };
56146
56147 Tokenizer.prototype._reset = function() {
56148   this._current_tag_name = '';
56149 };
56150
56151 Tokenizer.prototype._get_next_token = function(previous_token, open_token) { // jshint unused:false
56152   var token = null;
56153   this._readWhitespace();
56154   var c = this._input.peek();
56155
56156   if (c === null) {
56157     return this._create_token(TOKEN.EOF, '');
56158   }
56159
56160   token = token || this._read_open_handlebars(c, open_token);
56161   token = token || this._read_attribute(c, previous_token, open_token);
56162   token = token || this._read_close(c, open_token);
56163   token = token || this._read_raw_content(c, previous_token, open_token);
56164   token = token || this._read_content_word(c);
56165   token = token || this._read_comment_or_cdata(c);
56166   token = token || this._read_processing(c);
56167   token = token || this._read_open(c, open_token);
56168   token = token || this._create_token(TOKEN.UNKNOWN, this._input.next());
56169
56170   return token;
56171 };
56172
56173 Tokenizer.prototype._read_comment_or_cdata = function(c) { // jshint unused:false
56174   var token = null;
56175   var resulting_string = null;
56176   var directives = null;
56177
56178   if (c === '<') {
56179     var peek1 = this._input.peek(1);
56180     // We treat all comments as literals, even more than preformatted tags
56181     // we only look for the appropriate closing marker
56182     if (peek1 === '!') {
56183       resulting_string = this.__patterns.comment.read();
56184
56185       // only process directive on html comments
56186       if (resulting_string) {
56187         directives = directives_core.get_directives(resulting_string);
56188         if (directives && directives.ignore === 'start') {
56189           resulting_string += directives_core.readIgnored(this._input);
56190         }
56191       } else {
56192         resulting_string = this.__patterns.cdata.read();
56193       }
56194     }
56195
56196     if (resulting_string) {
56197       token = this._create_token(TOKEN.COMMENT, resulting_string);
56198       token.directives = directives;
56199     }
56200   }
56201
56202   return token;
56203 };
56204
56205 Tokenizer.prototype._read_processing = function(c) { // jshint unused:false
56206   var token = null;
56207   var resulting_string = null;
56208   var directives = null;
56209
56210   if (c === '<') {
56211     var peek1 = this._input.peek(1);
56212     if (peek1 === '!' || peek1 === '?') {
56213       resulting_string = this.__patterns.conditional_comment.read();
56214       resulting_string = resulting_string || this.__patterns.processing.read();
56215     }
56216
56217     if (resulting_string) {
56218       token = this._create_token(TOKEN.COMMENT, resulting_string);
56219       token.directives = directives;
56220     }
56221   }
56222
56223   return token;
56224 };
56225
56226 Tokenizer.prototype._read_open = function(c, open_token) {
56227   var resulting_string = null;
56228   var token = null;
56229   if (!open_token) {
56230     if (c === '<') {
56231
56232       resulting_string = this._input.next();
56233       if (this._input.peek() === '/') {
56234         resulting_string += this._input.next();
56235       }
56236       resulting_string += this.__patterns.element_name.read();
56237       token = this._create_token(TOKEN.TAG_OPEN, resulting_string);
56238     }
56239   }
56240   return token;
56241 };
56242
56243 Tokenizer.prototype._read_open_handlebars = function(c, open_token) {
56244   var resulting_string = null;
56245   var token = null;
56246   if (!open_token) {
56247     if (this._options.indent_handlebars && c === '{' && this._input.peek(1) === '{') {
56248       if (this._input.peek(2) === '!') {
56249         resulting_string = this.__patterns.handlebars_comment.read();
56250         resulting_string = resulting_string || this.__patterns.handlebars.read();
56251         token = this._create_token(TOKEN.COMMENT, resulting_string);
56252       } else {
56253         resulting_string = this.__patterns.handlebars_open.read();
56254         token = this._create_token(TOKEN.TAG_OPEN, resulting_string);
56255       }
56256     }
56257   }
56258   return token;
56259 };
56260
56261
56262 Tokenizer.prototype._read_close = function(c, open_token) {
56263   var resulting_string = null;
56264   var token = null;
56265   if (open_token) {
56266     if (open_token.text[0] === '<' && (c === '>' || (c === '/' && this._input.peek(1) === '>'))) {
56267       resulting_string = this._input.next();
56268       if (c === '/') { //  for close tag "/>"
56269         resulting_string += this._input.next();
56270       }
56271       token = this._create_token(TOKEN.TAG_CLOSE, resulting_string);
56272     } else if (open_token.text[0] === '{' && c === '}' && this._input.peek(1) === '}') {
56273       this._input.next();
56274       this._input.next();
56275       token = this._create_token(TOKEN.TAG_CLOSE, '}}');
56276     }
56277   }
56278
56279   return token;
56280 };
56281
56282 Tokenizer.prototype._read_attribute = function(c, previous_token, open_token) {
56283   var token = null;
56284   var resulting_string = '';
56285   if (open_token && open_token.text[0] === '<') {
56286
56287     if (c === '=') {
56288       token = this._create_token(TOKEN.EQUALS, this._input.next());
56289     } else if (c === '"' || c === "'") {
56290       var content = this._input.next();
56291       if (c === '"') {
56292         content += this.__patterns.double_quote.read();
56293       } else {
56294         content += this.__patterns.single_quote.read();
56295       }
56296       token = this._create_token(TOKEN.VALUE, content);
56297     } else {
56298       resulting_string = this.__patterns.attribute.read();
56299
56300       if (resulting_string) {
56301         if (previous_token.type === TOKEN.EQUALS) {
56302           token = this._create_token(TOKEN.VALUE, resulting_string);
56303         } else {
56304           token = this._create_token(TOKEN.ATTRIBUTE, resulting_string);
56305         }
56306       }
56307     }
56308   }
56309   return token;
56310 };
56311
56312 Tokenizer.prototype._is_content_unformatted = function(tag_name) {
56313   // void_elements have no content and so cannot have unformatted content
56314   // script and style tags should always be read as unformatted content
56315   // finally content_unformatted and unformatted element contents are unformatted
56316   return this._options.void_elements.indexOf(tag_name) === -1 &&
56317     (this._options.content_unformatted.indexOf(tag_name) !== -1 ||
56318       this._options.unformatted.indexOf(tag_name) !== -1);
56319 };
56320
56321
56322 Tokenizer.prototype._read_raw_content = function(c, previous_token, open_token) { // jshint unused:false
56323   var resulting_string = '';
56324   if (open_token && open_token.text[0] === '{') {
56325     resulting_string = this.__patterns.handlebars_raw_close.read();
56326   } else if (previous_token.type === TOKEN.TAG_CLOSE &&
56327     previous_token.opened.text[0] === '<' && previous_token.text[0] !== '/') {
56328     // ^^ empty tag has no content 
56329     var tag_name = previous_token.opened.text.substr(1).toLowerCase();
56330     if (tag_name === 'script' || tag_name === 'style') {
56331       // Script and style tags are allowed to have comments wrapping their content
56332       // or just have regular content.
56333       var token = this._read_comment_or_cdata(c);
56334       if (token) {
56335         token.type = TOKEN.TEXT;
56336         return token;
56337       }
56338       resulting_string = this._input.readUntil(new RegExp('</' + tag_name + '[\\n\\r\\t ]*?>', 'ig'));
56339     } else if (this._is_content_unformatted(tag_name)) {
56340
56341       resulting_string = this._input.readUntil(new RegExp('</' + tag_name + '[\\n\\r\\t ]*?>', 'ig'));
56342     }
56343   }
56344
56345   if (resulting_string) {
56346     return this._create_token(TOKEN.TEXT, resulting_string);
56347   }
56348
56349   return null;
56350 };
56351
56352 Tokenizer.prototype._read_content_word = function(c) {
56353   var resulting_string = '';
56354   if (this._options.unformatted_content_delimiter) {
56355     if (c === this._options.unformatted_content_delimiter[0]) {
56356       resulting_string = this.__patterns.unformatted_content_delimiter.read();
56357     }
56358   }
56359
56360   if (!resulting_string) {
56361     resulting_string = this.__patterns.word.read();
56362   }
56363   if (resulting_string) {
56364     return this._create_token(TOKEN.TEXT, resulting_string);
56365   }
56366 };
56367
56368 module.exports.Tokenizer = Tokenizer;
56369 module.exports.TOKEN = TOKEN;
56370
56371
56372 /***/ })
56373 /******/ ]);
56374
56375 function html_beautify(html_source, options) {
56376     return legacy_beautify_html(html_source, options, _beautify__WEBPACK_IMPORTED_MODULE_0__.js_beautify, _beautify_css__WEBPACK_IMPORTED_MODULE_1__.css_beautify);
56377 }
56378
56379 /***/ }),
56380 /* 132 */
56381 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
56382
56383 __webpack_require__.r(__webpack_exports__);
56384 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
56385 /* harmony export */   "js_beautify": () => /* binding */ js_beautify
56386 /* harmony export */ });
56387 /*---------------------------------------------------------------------------------------------
56388  *  Copyright (c) Microsoft Corporation. All rights reserved.
56389  *  Licensed under the MIT License. See License.txt in the project root for license information.
56390  *--------------------------------------------------------------------------------------------*/
56391 /*
56392  * Mock for the JS formatter. Ignore formatting of JS content in HTML.
56393  */
56394 function js_beautify(js_source_text, options) {
56395     // no formatting
56396     return js_source_text;
56397 }
56398
56399
56400 /***/ }),
56401 /* 133 */
56402 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
56403
56404 __webpack_require__.r(__webpack_exports__);
56405 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
56406 /* harmony export */   "css_beautify": () => /* binding */ css_beautify
56407 /* harmony export */ });
56408 // copied from js-beautify/js/lib/beautify-css.js
56409 // version: 1.13.0
56410 /* AUTO-GENERATED. DO NOT MODIFY. */
56411 /*
56412
56413   The MIT License (MIT)
56414
56415   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
56416
56417   Permission is hereby granted, free of charge, to any person
56418   obtaining a copy of this software and associated documentation files
56419   (the "Software"), to deal in the Software without restriction,
56420   including without limitation the rights to use, copy, modify, merge,
56421   publish, distribute, sublicense, and/or sell copies of the Software,
56422   and to permit persons to whom the Software is furnished to do so,
56423   subject to the following conditions:
56424
56425   The above copyright notice and this permission notice shall be
56426   included in all copies or substantial portions of the Software.
56427
56428   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
56429   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
56430   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
56431   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
56432   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
56433   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
56434   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
56435   SOFTWARE.
56436
56437
56438  CSS Beautifier
56439 ---------------
56440
56441     Written by Harutyun Amirjanyan, (amirjanyan@gmail.com)
56442
56443     Based on code initially developed by: Einar Lielmanis, <einar@beautifier.io>
56444         https://beautifier.io/
56445
56446     Usage:
56447         css_beautify(source_text);
56448         css_beautify(source_text, options);
56449
56450     The options are (default in brackets):
56451         indent_size (4)                         — indentation size,
56452         indent_char (space)                     — character to indent with,
56453         selector_separator_newline (true)       - separate selectors with newline or
56454                                                   not (e.g. "a,\nbr" or "a, br")
56455         end_with_newline (false)                - end with a newline
56456         newline_between_rules (true)            - add a new line after every css rule
56457         space_around_selector_separator (false) - ensure space around selector separators:
56458                                                   '>', '+', '~' (e.g. "a>b" -> "a > b")
56459     e.g
56460
56461     css_beautify(css_source_text, {
56462       'indent_size': 1,
56463       'indent_char': '\t',
56464       'selector_separator': ' ',
56465       'end_with_newline': false,
56466       'newline_between_rules': true,
56467       'space_around_selector_separator': true
56468     });
56469 */
56470
56471 // http://www.w3.org/TR/CSS21/syndata.html#tokenization
56472 // http://www.w3.org/TR/css3-syntax/
56473
56474 var legacy_beautify_css =
56475 /******/ (function(modules) { // webpackBootstrap
56476 /******/        // The module cache
56477 /******/        var installedModules = {};
56478 /******/
56479 /******/        // The require function
56480 /******/        function __nested_webpack_require_2800__(moduleId) {
56481 /******/
56482 /******/                // Check if module is in cache
56483 /******/                if(installedModules[moduleId]) {
56484 /******/                        return installedModules[moduleId].exports;
56485 /******/                }
56486 /******/                // Create a new module (and put it into the cache)
56487 /******/                var module = installedModules[moduleId] = {
56488 /******/                        i: moduleId,
56489 /******/                        l: false,
56490 /******/                        exports: {}
56491 /******/                };
56492 /******/
56493 /******/                // Execute the module function
56494 /******/                modules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_2800__);
56495 /******/
56496 /******/                // Flag the module as loaded
56497 /******/                module.l = true;
56498 /******/
56499 /******/                // Return the exports of the module
56500 /******/                return module.exports;
56501 /******/        }
56502 /******/
56503 /******/
56504 /******/        // expose the modules object (__webpack_modules__)
56505 /******/        __nested_webpack_require_2800__.m = modules;
56506 /******/
56507 /******/        // expose the module cache
56508 /******/        __nested_webpack_require_2800__.c = installedModules;
56509 /******/
56510 /******/        // define getter function for harmony exports
56511 /******/        __nested_webpack_require_2800__.d = function(exports, name, getter) {
56512 /******/                if(!__nested_webpack_require_2800__.o(exports, name)) {
56513 /******/                        Object.defineProperty(exports, name, { enumerable: true, get: getter });
56514 /******/                }
56515 /******/        };
56516 /******/
56517 /******/        // define __esModule on exports
56518 /******/        __nested_webpack_require_2800__.r = function(exports) {
56519 /******/                if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
56520 /******/                        Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
56521 /******/                }
56522 /******/                Object.defineProperty(exports, '__esModule', { value: true });
56523 /******/        };
56524 /******/
56525 /******/        // create a fake namespace object
56526 /******/        // mode & 1: value is a module id, require it
56527 /******/        // mode & 2: merge all properties of value into the ns
56528 /******/        // mode & 4: return value when already ns object
56529 /******/        // mode & 8|1: behave like require
56530 /******/        __nested_webpack_require_2800__.t = function(value, mode) {
56531 /******/                if(mode & 1) value = __nested_webpack_require_2800__(value);
56532 /******/                if(mode & 8) return value;
56533 /******/                if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
56534 /******/                var ns = Object.create(null);
56535 /******/                __nested_webpack_require_2800__.r(ns);
56536 /******/                Object.defineProperty(ns, 'default', { enumerable: true, value: value });
56537 /******/                if(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_2800__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
56538 /******/                return ns;
56539 /******/        };
56540 /******/
56541 /******/        // getDefaultExport function for compatibility with non-harmony modules
56542 /******/        __nested_webpack_require_2800__.n = function(module) {
56543 /******/                var getter = module && module.__esModule ?
56544 /******/                        function getDefault() { return module['default']; } :
56545 /******/                        function getModuleExports() { return module; };
56546 /******/                __nested_webpack_require_2800__.d(getter, 'a', getter);
56547 /******/                return getter;
56548 /******/        };
56549 /******/
56550 /******/        // Object.prototype.hasOwnProperty.call
56551 /******/        __nested_webpack_require_2800__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
56552 /******/
56553 /******/        // __webpack_public_path__
56554 /******/        __nested_webpack_require_2800__.p = "";
56555 /******/
56556 /******/
56557 /******/        // Load entry module and return exports
56558 /******/        return __nested_webpack_require_2800__(__nested_webpack_require_2800__.s = 15);
56559 /******/ })
56560 /************************************************************************/
56561 /******/ ([
56562 /* 0 */,
56563 /* 1 */,
56564 /* 2 */
56565 /***/ (function(module, exports, __nested_webpack_require_6283__) {
56566
56567 "use strict";
56568 /*jshint node:true */
56569 /*
56570   The MIT License (MIT)
56571
56572   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
56573
56574   Permission is hereby granted, free of charge, to any person
56575   obtaining a copy of this software and associated documentation files
56576   (the "Software"), to deal in the Software without restriction,
56577   including without limitation the rights to use, copy, modify, merge,
56578   publish, distribute, sublicense, and/or sell copies of the Software,
56579   and to permit persons to whom the Software is furnished to do so,
56580   subject to the following conditions:
56581
56582   The above copyright notice and this permission notice shall be
56583   included in all copies or substantial portions of the Software.
56584
56585   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
56586   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
56587   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
56588   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
56589   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
56590   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
56591   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
56592   SOFTWARE.
56593 */
56594
56595
56596
56597 function OutputLine(parent) {
56598   this.__parent = parent;
56599   this.__character_count = 0;
56600   // use indent_count as a marker for this.__lines that have preserved indentation
56601   this.__indent_count = -1;
56602   this.__alignment_count = 0;
56603   this.__wrap_point_index = 0;
56604   this.__wrap_point_character_count = 0;
56605   this.__wrap_point_indent_count = -1;
56606   this.__wrap_point_alignment_count = 0;
56607
56608   this.__items = [];
56609 }
56610
56611 OutputLine.prototype.clone_empty = function() {
56612   var line = new OutputLine(this.__parent);
56613   line.set_indent(this.__indent_count, this.__alignment_count);
56614   return line;
56615 };
56616
56617 OutputLine.prototype.item = function(index) {
56618   if (index < 0) {
56619     return this.__items[this.__items.length + index];
56620   } else {
56621     return this.__items[index];
56622   }
56623 };
56624
56625 OutputLine.prototype.has_match = function(pattern) {
56626   for (var lastCheckedOutput = this.__items.length - 1; lastCheckedOutput >= 0; lastCheckedOutput--) {
56627     if (this.__items[lastCheckedOutput].match(pattern)) {
56628       return true;
56629     }
56630   }
56631   return false;
56632 };
56633
56634 OutputLine.prototype.set_indent = function(indent, alignment) {
56635   if (this.is_empty()) {
56636     this.__indent_count = indent || 0;
56637     this.__alignment_count = alignment || 0;
56638     this.__character_count = this.__parent.get_indent_size(this.__indent_count, this.__alignment_count);
56639   }
56640 };
56641
56642 OutputLine.prototype._set_wrap_point = function() {
56643   if (this.__parent.wrap_line_length) {
56644     this.__wrap_point_index = this.__items.length;
56645     this.__wrap_point_character_count = this.__character_count;
56646     this.__wrap_point_indent_count = this.__parent.next_line.__indent_count;
56647     this.__wrap_point_alignment_count = this.__parent.next_line.__alignment_count;
56648   }
56649 };
56650
56651 OutputLine.prototype._should_wrap = function() {
56652   return this.__wrap_point_index &&
56653     this.__character_count > this.__parent.wrap_line_length &&
56654     this.__wrap_point_character_count > this.__parent.next_line.__character_count;
56655 };
56656
56657 OutputLine.prototype._allow_wrap = function() {
56658   if (this._should_wrap()) {
56659     this.__parent.add_new_line();
56660     var next = this.__parent.current_line;
56661     next.set_indent(this.__wrap_point_indent_count, this.__wrap_point_alignment_count);
56662     next.__items = this.__items.slice(this.__wrap_point_index);
56663     this.__items = this.__items.slice(0, this.__wrap_point_index);
56664
56665     next.__character_count += this.__character_count - this.__wrap_point_character_count;
56666     this.__character_count = this.__wrap_point_character_count;
56667
56668     if (next.__items[0] === " ") {
56669       next.__items.splice(0, 1);
56670       next.__character_count -= 1;
56671     }
56672     return true;
56673   }
56674   return false;
56675 };
56676
56677 OutputLine.prototype.is_empty = function() {
56678   return this.__items.length === 0;
56679 };
56680
56681 OutputLine.prototype.last = function() {
56682   if (!this.is_empty()) {
56683     return this.__items[this.__items.length - 1];
56684   } else {
56685     return null;
56686   }
56687 };
56688
56689 OutputLine.prototype.push = function(item) {
56690   this.__items.push(item);
56691   var last_newline_index = item.lastIndexOf('\n');
56692   if (last_newline_index !== -1) {
56693     this.__character_count = item.length - last_newline_index;
56694   } else {
56695     this.__character_count += item.length;
56696   }
56697 };
56698
56699 OutputLine.prototype.pop = function() {
56700   var item = null;
56701   if (!this.is_empty()) {
56702     item = this.__items.pop();
56703     this.__character_count -= item.length;
56704   }
56705   return item;
56706 };
56707
56708
56709 OutputLine.prototype._remove_indent = function() {
56710   if (this.__indent_count > 0) {
56711     this.__indent_count -= 1;
56712     this.__character_count -= this.__parent.indent_size;
56713   }
56714 };
56715
56716 OutputLine.prototype._remove_wrap_indent = function() {
56717   if (this.__wrap_point_indent_count > 0) {
56718     this.__wrap_point_indent_count -= 1;
56719   }
56720 };
56721 OutputLine.prototype.trim = function() {
56722   while (this.last() === ' ') {
56723     this.__items.pop();
56724     this.__character_count -= 1;
56725   }
56726 };
56727
56728 OutputLine.prototype.toString = function() {
56729   var result = '';
56730   if (this.is_empty()) {
56731     if (this.__parent.indent_empty_lines) {
56732       result = this.__parent.get_indent_string(this.__indent_count);
56733     }
56734   } else {
56735     result = this.__parent.get_indent_string(this.__indent_count, this.__alignment_count);
56736     result += this.__items.join('');
56737   }
56738   return result;
56739 };
56740
56741 function IndentStringCache(options, baseIndentString) {
56742   this.__cache = [''];
56743   this.__indent_size = options.indent_size;
56744   this.__indent_string = options.indent_char;
56745   if (!options.indent_with_tabs) {
56746     this.__indent_string = new Array(options.indent_size + 1).join(options.indent_char);
56747   }
56748
56749   // Set to null to continue support for auto detection of base indent
56750   baseIndentString = baseIndentString || '';
56751   if (options.indent_level > 0) {
56752     baseIndentString = new Array(options.indent_level + 1).join(this.__indent_string);
56753   }
56754
56755   this.__base_string = baseIndentString;
56756   this.__base_string_length = baseIndentString.length;
56757 }
56758
56759 IndentStringCache.prototype.get_indent_size = function(indent, column) {
56760   var result = this.__base_string_length;
56761   column = column || 0;
56762   if (indent < 0) {
56763     result = 0;
56764   }
56765   result += indent * this.__indent_size;
56766   result += column;
56767   return result;
56768 };
56769
56770 IndentStringCache.prototype.get_indent_string = function(indent_level, column) {
56771   var result = this.__base_string;
56772   column = column || 0;
56773   if (indent_level < 0) {
56774     indent_level = 0;
56775     result = '';
56776   }
56777   column += indent_level * this.__indent_size;
56778   this.__ensure_cache(column);
56779   result += this.__cache[column];
56780   return result;
56781 };
56782
56783 IndentStringCache.prototype.__ensure_cache = function(column) {
56784   while (column >= this.__cache.length) {
56785     this.__add_column();
56786   }
56787 };
56788
56789 IndentStringCache.prototype.__add_column = function() {
56790   var column = this.__cache.length;
56791   var indent = 0;
56792   var result = '';
56793   if (this.__indent_size && column >= this.__indent_size) {
56794     indent = Math.floor(column / this.__indent_size);
56795     column -= indent * this.__indent_size;
56796     result = new Array(indent + 1).join(this.__indent_string);
56797   }
56798   if (column) {
56799     result += new Array(column + 1).join(' ');
56800   }
56801
56802   this.__cache.push(result);
56803 };
56804
56805 function Output(options, baseIndentString) {
56806   this.__indent_cache = new IndentStringCache(options, baseIndentString);
56807   this.raw = false;
56808   this._end_with_newline = options.end_with_newline;
56809   this.indent_size = options.indent_size;
56810   this.wrap_line_length = options.wrap_line_length;
56811   this.indent_empty_lines = options.indent_empty_lines;
56812   this.__lines = [];
56813   this.previous_line = null;
56814   this.current_line = null;
56815   this.next_line = new OutputLine(this);
56816   this.space_before_token = false;
56817   this.non_breaking_space = false;
56818   this.previous_token_wrapped = false;
56819   // initialize
56820   this.__add_outputline();
56821 }
56822
56823 Output.prototype.__add_outputline = function() {
56824   this.previous_line = this.current_line;
56825   this.current_line = this.next_line.clone_empty();
56826   this.__lines.push(this.current_line);
56827 };
56828
56829 Output.prototype.get_line_number = function() {
56830   return this.__lines.length;
56831 };
56832
56833 Output.prototype.get_indent_string = function(indent, column) {
56834   return this.__indent_cache.get_indent_string(indent, column);
56835 };
56836
56837 Output.prototype.get_indent_size = function(indent, column) {
56838   return this.__indent_cache.get_indent_size(indent, column);
56839 };
56840
56841 Output.prototype.is_empty = function() {
56842   return !this.previous_line && this.current_line.is_empty();
56843 };
56844
56845 Output.prototype.add_new_line = function(force_newline) {
56846   // never newline at the start of file
56847   // otherwise, newline only if we didn't just add one or we're forced
56848   if (this.is_empty() ||
56849     (!force_newline && this.just_added_newline())) {
56850     return false;
56851   }
56852
56853   // if raw output is enabled, don't print additional newlines,
56854   // but still return True as though you had
56855   if (!this.raw) {
56856     this.__add_outputline();
56857   }
56858   return true;
56859 };
56860
56861 Output.prototype.get_code = function(eol) {
56862   this.trim(true);
56863
56864   // handle some edge cases where the last tokens
56865   // has text that ends with newline(s)
56866   var last_item = this.current_line.pop();
56867   if (last_item) {
56868     if (last_item[last_item.length - 1] === '\n') {
56869       last_item = last_item.replace(/\n+$/g, '');
56870     }
56871     this.current_line.push(last_item);
56872   }
56873
56874   if (this._end_with_newline) {
56875     this.__add_outputline();
56876   }
56877
56878   var sweet_code = this.__lines.join('\n');
56879
56880   if (eol !== '\n') {
56881     sweet_code = sweet_code.replace(/[\n]/g, eol);
56882   }
56883   return sweet_code;
56884 };
56885
56886 Output.prototype.set_wrap_point = function() {
56887   this.current_line._set_wrap_point();
56888 };
56889
56890 Output.prototype.set_indent = function(indent, alignment) {
56891   indent = indent || 0;
56892   alignment = alignment || 0;
56893
56894   // Next line stores alignment values
56895   this.next_line.set_indent(indent, alignment);
56896
56897   // Never indent your first output indent at the start of the file
56898   if (this.__lines.length > 1) {
56899     this.current_line.set_indent(indent, alignment);
56900     return true;
56901   }
56902
56903   this.current_line.set_indent();
56904   return false;
56905 };
56906
56907 Output.prototype.add_raw_token = function(token) {
56908   for (var x = 0; x < token.newlines; x++) {
56909     this.__add_outputline();
56910   }
56911   this.current_line.set_indent(-1);
56912   this.current_line.push(token.whitespace_before);
56913   this.current_line.push(token.text);
56914   this.space_before_token = false;
56915   this.non_breaking_space = false;
56916   this.previous_token_wrapped = false;
56917 };
56918
56919 Output.prototype.add_token = function(printable_token) {
56920   this.__add_space_before_token();
56921   this.current_line.push(printable_token);
56922   this.space_before_token = false;
56923   this.non_breaking_space = false;
56924   this.previous_token_wrapped = this.current_line._allow_wrap();
56925 };
56926
56927 Output.prototype.__add_space_before_token = function() {
56928   if (this.space_before_token && !this.just_added_newline()) {
56929     if (!this.non_breaking_space) {
56930       this.set_wrap_point();
56931     }
56932     this.current_line.push(' ');
56933   }
56934 };
56935
56936 Output.prototype.remove_indent = function(index) {
56937   var output_length = this.__lines.length;
56938   while (index < output_length) {
56939     this.__lines[index]._remove_indent();
56940     index++;
56941   }
56942   this.current_line._remove_wrap_indent();
56943 };
56944
56945 Output.prototype.trim = function(eat_newlines) {
56946   eat_newlines = (eat_newlines === undefined) ? false : eat_newlines;
56947
56948   this.current_line.trim();
56949
56950   while (eat_newlines && this.__lines.length > 1 &&
56951     this.current_line.is_empty()) {
56952     this.__lines.pop();
56953     this.current_line = this.__lines[this.__lines.length - 1];
56954     this.current_line.trim();
56955   }
56956
56957   this.previous_line = this.__lines.length > 1 ?
56958     this.__lines[this.__lines.length - 2] : null;
56959 };
56960
56961 Output.prototype.just_added_newline = function() {
56962   return this.current_line.is_empty();
56963 };
56964
56965 Output.prototype.just_added_blankline = function() {
56966   return this.is_empty() ||
56967     (this.current_line.is_empty() && this.previous_line.is_empty());
56968 };
56969
56970 Output.prototype.ensure_empty_line_above = function(starts_with, ends_with) {
56971   var index = this.__lines.length - 2;
56972   while (index >= 0) {
56973     var potentialEmptyLine = this.__lines[index];
56974     if (potentialEmptyLine.is_empty()) {
56975       break;
56976     } else if (potentialEmptyLine.item(0).indexOf(starts_with) !== 0 &&
56977       potentialEmptyLine.item(-1) !== ends_with) {
56978       this.__lines.splice(index + 1, 0, new OutputLine(this));
56979       this.previous_line = this.__lines[this.__lines.length - 2];
56980       break;
56981     }
56982     index--;
56983   }
56984 };
56985
56986 module.exports.Output = Output;
56987
56988
56989 /***/ }),
56990 /* 3 */,
56991 /* 4 */,
56992 /* 5 */,
56993 /* 6 */
56994 /***/ (function(module, exports, __nested_webpack_require_18743__) {
56995
56996 "use strict";
56997 /*jshint node:true */
56998 /*
56999
57000   The MIT License (MIT)
57001
57002   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
57003
57004   Permission is hereby granted, free of charge, to any person
57005   obtaining a copy of this software and associated documentation files
57006   (the "Software"), to deal in the Software without restriction,
57007   including without limitation the rights to use, copy, modify, merge,
57008   publish, distribute, sublicense, and/or sell copies of the Software,
57009   and to permit persons to whom the Software is furnished to do so,
57010   subject to the following conditions:
57011
57012   The above copyright notice and this permission notice shall be
57013   included in all copies or substantial portions of the Software.
57014
57015   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
57016   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
57017   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
57018   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
57019   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
57020   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
57021   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
57022   SOFTWARE.
57023 */
57024
57025
57026
57027 function Options(options, merge_child_field) {
57028   this.raw_options = _mergeOpts(options, merge_child_field);
57029
57030   // Support passing the source text back with no change
57031   this.disabled = this._get_boolean('disabled');
57032
57033   this.eol = this._get_characters('eol', 'auto');
57034   this.end_with_newline = this._get_boolean('end_with_newline');
57035   this.indent_size = this._get_number('indent_size', 4);
57036   this.indent_char = this._get_characters('indent_char', ' ');
57037   this.indent_level = this._get_number('indent_level');
57038
57039   this.preserve_newlines = this._get_boolean('preserve_newlines', true);
57040   this.max_preserve_newlines = this._get_number('max_preserve_newlines', 32786);
57041   if (!this.preserve_newlines) {
57042     this.max_preserve_newlines = 0;
57043   }
57044
57045   this.indent_with_tabs = this._get_boolean('indent_with_tabs', this.indent_char === '\t');
57046   if (this.indent_with_tabs) {
57047     this.indent_char = '\t';
57048
57049     // indent_size behavior changed after 1.8.6
57050     // It used to be that indent_size would be
57051     // set to 1 for indent_with_tabs. That is no longer needed and
57052     // actually doesn't make sense - why not use spaces? Further,
57053     // that might produce unexpected behavior - tabs being used
57054     // for single-column alignment. So, when indent_with_tabs is true
57055     // and indent_size is 1, reset indent_size to 4.
57056     if (this.indent_size === 1) {
57057       this.indent_size = 4;
57058     }
57059   }
57060
57061   // Backwards compat with 1.3.x
57062   this.wrap_line_length = this._get_number('wrap_line_length', this._get_number('max_char'));
57063
57064   this.indent_empty_lines = this._get_boolean('indent_empty_lines');
57065
57066   // valid templating languages ['django', 'erb', 'handlebars', 'php']
57067   // For now, 'auto' = all off for javascript, all on for html (and inline javascript).
57068   // other values ignored
57069   this.templating = this._get_selection_list('templating', ['auto', 'none', 'django', 'erb', 'handlebars', 'php'], ['auto']);
57070 }
57071
57072 Options.prototype._get_array = function(name, default_value) {
57073   var option_value = this.raw_options[name];
57074   var result = default_value || [];
57075   if (typeof option_value === 'object') {
57076     if (option_value !== null && typeof option_value.concat === 'function') {
57077       result = option_value.concat();
57078     }
57079   } else if (typeof option_value === 'string') {
57080     result = option_value.split(/[^a-zA-Z0-9_\/\-]+/);
57081   }
57082   return result;
57083 };
57084
57085 Options.prototype._get_boolean = function(name, default_value) {
57086   var option_value = this.raw_options[name];
57087   var result = option_value === undefined ? !!default_value : !!option_value;
57088   return result;
57089 };
57090
57091 Options.prototype._get_characters = function(name, default_value) {
57092   var option_value = this.raw_options[name];
57093   var result = default_value || '';
57094   if (typeof option_value === 'string') {
57095     result = option_value.replace(/\\r/, '\r').replace(/\\n/, '\n').replace(/\\t/, '\t');
57096   }
57097   return result;
57098 };
57099
57100 Options.prototype._get_number = function(name, default_value) {
57101   var option_value = this.raw_options[name];
57102   default_value = parseInt(default_value, 10);
57103   if (isNaN(default_value)) {
57104     default_value = 0;
57105   }
57106   var result = parseInt(option_value, 10);
57107   if (isNaN(result)) {
57108     result = default_value;
57109   }
57110   return result;
57111 };
57112
57113 Options.prototype._get_selection = function(name, selection_list, default_value) {
57114   var result = this._get_selection_list(name, selection_list, default_value);
57115   if (result.length !== 1) {
57116     throw new Error(
57117       "Invalid Option Value: The option '" + name + "' can only be one of the following values:\n" +
57118       selection_list + "\nYou passed in: '" + this.raw_options[name] + "'");
57119   }
57120
57121   return result[0];
57122 };
57123
57124
57125 Options.prototype._get_selection_list = function(name, selection_list, default_value) {
57126   if (!selection_list || selection_list.length === 0) {
57127     throw new Error("Selection list cannot be empty.");
57128   }
57129
57130   default_value = default_value || [selection_list[0]];
57131   if (!this._is_valid_selection(default_value, selection_list)) {
57132     throw new Error("Invalid Default Value!");
57133   }
57134
57135   var result = this._get_array(name, default_value);
57136   if (!this._is_valid_selection(result, selection_list)) {
57137     throw new Error(
57138       "Invalid Option Value: The option '" + name + "' can contain only the following values:\n" +
57139       selection_list + "\nYou passed in: '" + this.raw_options[name] + "'");
57140   }
57141
57142   return result;
57143 };
57144
57145 Options.prototype._is_valid_selection = function(result, selection_list) {
57146   return result.length && selection_list.length &&
57147     !result.some(function(item) { return selection_list.indexOf(item) === -1; });
57148 };
57149
57150
57151 // merges child options up with the parent options object
57152 // Example: obj = {a: 1, b: {a: 2}}
57153 //          mergeOpts(obj, 'b')
57154 //
57155 //          Returns: {a: 2}
57156 function _mergeOpts(allOptions, childFieldName) {
57157   var finalOpts = {};
57158   allOptions = _normalizeOpts(allOptions);
57159   var name;
57160
57161   for (name in allOptions) {
57162     if (name !== childFieldName) {
57163       finalOpts[name] = allOptions[name];
57164     }
57165   }
57166
57167   //merge in the per type settings for the childFieldName
57168   if (childFieldName && allOptions[childFieldName]) {
57169     for (name in allOptions[childFieldName]) {
57170       finalOpts[name] = allOptions[childFieldName][name];
57171     }
57172   }
57173   return finalOpts;
57174 }
57175
57176 function _normalizeOpts(options) {
57177   var convertedOpts = {};
57178   var key;
57179
57180   for (key in options) {
57181     var newKey = key.replace(/-/g, "_");
57182     convertedOpts[newKey] = options[key];
57183   }
57184   return convertedOpts;
57185 }
57186
57187 module.exports.Options = Options;
57188 module.exports.normalizeOpts = _normalizeOpts;
57189 module.exports.mergeOpts = _mergeOpts;
57190
57191
57192 /***/ }),
57193 /* 7 */,
57194 /* 8 */
57195 /***/ (function(module, exports, __nested_webpack_require_25535__) {
57196
57197 "use strict";
57198 /*jshint node:true */
57199 /*
57200
57201   The MIT License (MIT)
57202
57203   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
57204
57205   Permission is hereby granted, free of charge, to any person
57206   obtaining a copy of this software and associated documentation files
57207   (the "Software"), to deal in the Software without restriction,
57208   including without limitation the rights to use, copy, modify, merge,
57209   publish, distribute, sublicense, and/or sell copies of the Software,
57210   and to permit persons to whom the Software is furnished to do so,
57211   subject to the following conditions:
57212
57213   The above copyright notice and this permission notice shall be
57214   included in all copies or substantial portions of the Software.
57215
57216   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
57217   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
57218   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
57219   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
57220   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
57221   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
57222   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
57223   SOFTWARE.
57224 */
57225
57226
57227
57228 var regexp_has_sticky = RegExp.prototype.hasOwnProperty('sticky');
57229
57230 function InputScanner(input_string) {
57231   this.__input = input_string || '';
57232   this.__input_length = this.__input.length;
57233   this.__position = 0;
57234 }
57235
57236 InputScanner.prototype.restart = function() {
57237   this.__position = 0;
57238 };
57239
57240 InputScanner.prototype.back = function() {
57241   if (this.__position > 0) {
57242     this.__position -= 1;
57243   }
57244 };
57245
57246 InputScanner.prototype.hasNext = function() {
57247   return this.__position < this.__input_length;
57248 };
57249
57250 InputScanner.prototype.next = function() {
57251   var val = null;
57252   if (this.hasNext()) {
57253     val = this.__input.charAt(this.__position);
57254     this.__position += 1;
57255   }
57256   return val;
57257 };
57258
57259 InputScanner.prototype.peek = function(index) {
57260   var val = null;
57261   index = index || 0;
57262   index += this.__position;
57263   if (index >= 0 && index < this.__input_length) {
57264     val = this.__input.charAt(index);
57265   }
57266   return val;
57267 };
57268
57269 // This is a JavaScript only helper function (not in python)
57270 // Javascript doesn't have a match method
57271 // and not all implementation support "sticky" flag.
57272 // If they do not support sticky then both this.match() and this.test() method
57273 // must get the match and check the index of the match.
57274 // If sticky is supported and set, this method will use it.
57275 // Otherwise it will check that global is set, and fall back to the slower method.
57276 InputScanner.prototype.__match = function(pattern, index) {
57277   pattern.lastIndex = index;
57278   var pattern_match = pattern.exec(this.__input);
57279
57280   if (pattern_match && !(regexp_has_sticky && pattern.sticky)) {
57281     if (pattern_match.index !== index) {
57282       pattern_match = null;
57283     }
57284   }
57285
57286   return pattern_match;
57287 };
57288
57289 InputScanner.prototype.test = function(pattern, index) {
57290   index = index || 0;
57291   index += this.__position;
57292
57293   if (index >= 0 && index < this.__input_length) {
57294     return !!this.__match(pattern, index);
57295   } else {
57296     return false;
57297   }
57298 };
57299
57300 InputScanner.prototype.testChar = function(pattern, index) {
57301   // test one character regex match
57302   var val = this.peek(index);
57303   pattern.lastIndex = 0;
57304   return val !== null && pattern.test(val);
57305 };
57306
57307 InputScanner.prototype.match = function(pattern) {
57308   var pattern_match = this.__match(pattern, this.__position);
57309   if (pattern_match) {
57310     this.__position += pattern_match[0].length;
57311   } else {
57312     pattern_match = null;
57313   }
57314   return pattern_match;
57315 };
57316
57317 InputScanner.prototype.read = function(starting_pattern, until_pattern, until_after) {
57318   var val = '';
57319   var match;
57320   if (starting_pattern) {
57321     match = this.match(starting_pattern);
57322     if (match) {
57323       val += match[0];
57324     }
57325   }
57326   if (until_pattern && (match || !starting_pattern)) {
57327     val += this.readUntil(until_pattern, until_after);
57328   }
57329   return val;
57330 };
57331
57332 InputScanner.prototype.readUntil = function(pattern, until_after) {
57333   var val = '';
57334   var match_index = this.__position;
57335   pattern.lastIndex = this.__position;
57336   var pattern_match = pattern.exec(this.__input);
57337   if (pattern_match) {
57338     match_index = pattern_match.index;
57339     if (until_after) {
57340       match_index += pattern_match[0].length;
57341     }
57342   } else {
57343     match_index = this.__input_length;
57344   }
57345
57346   val = this.__input.substring(this.__position, match_index);
57347   this.__position = match_index;
57348   return val;
57349 };
57350
57351 InputScanner.prototype.readUntilAfter = function(pattern) {
57352   return this.readUntil(pattern, true);
57353 };
57354
57355 InputScanner.prototype.get_regexp = function(pattern, match_from) {
57356   var result = null;
57357   var flags = 'g';
57358   if (match_from && regexp_has_sticky) {
57359     flags = 'y';
57360   }
57361   // strings are converted to regexp
57362   if (typeof pattern === "string" && pattern !== '') {
57363     // result = new RegExp(pattern.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), flags);
57364     result = new RegExp(pattern, flags);
57365   } else if (pattern) {
57366     result = new RegExp(pattern.source, flags);
57367   }
57368   return result;
57369 };
57370
57371 InputScanner.prototype.get_literal_regexp = function(literal_string) {
57372   return RegExp(literal_string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'));
57373 };
57374
57375 /* css beautifier legacy helpers */
57376 InputScanner.prototype.peekUntilAfter = function(pattern) {
57377   var start = this.__position;
57378   var val = this.readUntilAfter(pattern);
57379   this.__position = start;
57380   return val;
57381 };
57382
57383 InputScanner.prototype.lookBack = function(testVal) {
57384   var start = this.__position - 1;
57385   return start >= testVal.length && this.__input.substring(start - testVal.length, start)
57386     .toLowerCase() === testVal;
57387 };
57388
57389 module.exports.InputScanner = InputScanner;
57390
57391
57392 /***/ }),
57393 /* 9 */,
57394 /* 10 */,
57395 /* 11 */,
57396 /* 12 */,
57397 /* 13 */
57398 /***/ (function(module, exports, __nested_webpack_require_31287__) {
57399
57400 "use strict";
57401 /*jshint node:true */
57402 /*
57403
57404   The MIT License (MIT)
57405
57406   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
57407
57408   Permission is hereby granted, free of charge, to any person
57409   obtaining a copy of this software and associated documentation files
57410   (the "Software"), to deal in the Software without restriction,
57411   including without limitation the rights to use, copy, modify, merge,
57412   publish, distribute, sublicense, and/or sell copies of the Software,
57413   and to permit persons to whom the Software is furnished to do so,
57414   subject to the following conditions:
57415
57416   The above copyright notice and this permission notice shall be
57417   included in all copies or substantial portions of the Software.
57418
57419   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
57420   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
57421   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
57422   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
57423   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
57424   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
57425   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
57426   SOFTWARE.
57427 */
57428
57429
57430
57431 function Directives(start_block_pattern, end_block_pattern) {
57432   start_block_pattern = typeof start_block_pattern === 'string' ? start_block_pattern : start_block_pattern.source;
57433   end_block_pattern = typeof end_block_pattern === 'string' ? end_block_pattern : end_block_pattern.source;
57434   this.__directives_block_pattern = new RegExp(start_block_pattern + / beautify( \w+[:]\w+)+ /.source + end_block_pattern, 'g');
57435   this.__directive_pattern = / (\w+)[:](\w+)/g;
57436
57437   this.__directives_end_ignore_pattern = new RegExp(start_block_pattern + /\sbeautify\signore:end\s/.source + end_block_pattern, 'g');
57438 }
57439
57440 Directives.prototype.get_directives = function(text) {
57441   if (!text.match(this.__directives_block_pattern)) {
57442     return null;
57443   }
57444
57445   var directives = {};
57446   this.__directive_pattern.lastIndex = 0;
57447   var directive_match = this.__directive_pattern.exec(text);
57448
57449   while (directive_match) {
57450     directives[directive_match[1]] = directive_match[2];
57451     directive_match = this.__directive_pattern.exec(text);
57452   }
57453
57454   return directives;
57455 };
57456
57457 Directives.prototype.readIgnored = function(input) {
57458   return input.readUntilAfter(this.__directives_end_ignore_pattern);
57459 };
57460
57461
57462 module.exports.Directives = Directives;
57463
57464
57465 /***/ }),
57466 /* 14 */,
57467 /* 15 */
57468 /***/ (function(module, exports, __nested_webpack_require_33779__) {
57469
57470 "use strict";
57471 /*jshint node:true */
57472 /*
57473
57474   The MIT License (MIT)
57475
57476   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
57477
57478   Permission is hereby granted, free of charge, to any person
57479   obtaining a copy of this software and associated documentation files
57480   (the "Software"), to deal in the Software without restriction,
57481   including without limitation the rights to use, copy, modify, merge,
57482   publish, distribute, sublicense, and/or sell copies of the Software,
57483   and to permit persons to whom the Software is furnished to do so,
57484   subject to the following conditions:
57485
57486   The above copyright notice and this permission notice shall be
57487   included in all copies or substantial portions of the Software.
57488
57489   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
57490   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
57491   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
57492   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
57493   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
57494   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
57495   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
57496   SOFTWARE.
57497 */
57498
57499
57500
57501 var Beautifier = __nested_webpack_require_33779__(16).Beautifier,
57502   Options = __nested_webpack_require_33779__(17).Options;
57503
57504 function css_beautify(source_text, options) {
57505   var beautifier = new Beautifier(source_text, options);
57506   return beautifier.beautify();
57507 }
57508
57509 module.exports = css_beautify;
57510 module.exports.defaultOptions = function() {
57511   return new Options();
57512 };
57513
57514
57515 /***/ }),
57516 /* 16 */
57517 /***/ (function(module, exports, __nested_webpack_require_35400__) {
57518
57519 "use strict";
57520 /*jshint node:true */
57521 /*
57522
57523   The MIT License (MIT)
57524
57525   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
57526
57527   Permission is hereby granted, free of charge, to any person
57528   obtaining a copy of this software and associated documentation files
57529   (the "Software"), to deal in the Software without restriction,
57530   including without limitation the rights to use, copy, modify, merge,
57531   publish, distribute, sublicense, and/or sell copies of the Software,
57532   and to permit persons to whom the Software is furnished to do so,
57533   subject to the following conditions:
57534
57535   The above copyright notice and this permission notice shall be
57536   included in all copies or substantial portions of the Software.
57537
57538   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
57539   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
57540   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
57541   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
57542   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
57543   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
57544   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
57545   SOFTWARE.
57546 */
57547
57548
57549
57550 var Options = __nested_webpack_require_35400__(17).Options;
57551 var Output = __nested_webpack_require_35400__(2).Output;
57552 var InputScanner = __nested_webpack_require_35400__(8).InputScanner;
57553 var Directives = __nested_webpack_require_35400__(13).Directives;
57554
57555 var directives_core = new Directives(/\/\*/, /\*\//);
57556
57557 var lineBreak = /\r\n|[\r\n]/;
57558 var allLineBreaks = /\r\n|[\r\n]/g;
57559
57560 // tokenizer
57561 var whitespaceChar = /\s/;
57562 var whitespacePattern = /(?:\s|\n)+/g;
57563 var block_comment_pattern = /\/\*(?:[\s\S]*?)((?:\*\/)|$)/g;
57564 var comment_pattern = /\/\/(?:[^\n\r\u2028\u2029]*)/g;
57565
57566 function Beautifier(source_text, options) {
57567   this._source_text = source_text || '';
57568   // Allow the setting of language/file-type specific options
57569   // with inheritance of overall settings
57570   this._options = new Options(options);
57571   this._ch = null;
57572   this._input = null;
57573
57574   // https://developer.mozilla.org/en-US/docs/Web/CSS/At-rule
57575   this.NESTED_AT_RULE = {
57576     "@page": true,
57577     "@font-face": true,
57578     "@keyframes": true,
57579     // also in CONDITIONAL_GROUP_RULE below
57580     "@media": true,
57581     "@supports": true,
57582     "@document": true
57583   };
57584   this.CONDITIONAL_GROUP_RULE = {
57585     "@media": true,
57586     "@supports": true,
57587     "@document": true
57588   };
57589
57590 }
57591
57592 Beautifier.prototype.eatString = function(endChars) {
57593   var result = '';
57594   this._ch = this._input.next();
57595   while (this._ch) {
57596     result += this._ch;
57597     if (this._ch === "\\") {
57598       result += this._input.next();
57599     } else if (endChars.indexOf(this._ch) !== -1 || this._ch === "\n") {
57600       break;
57601     }
57602     this._ch = this._input.next();
57603   }
57604   return result;
57605 };
57606
57607 // Skips any white space in the source text from the current position.
57608 // When allowAtLeastOneNewLine is true, will output new lines for each
57609 // newline character found; if the user has preserve_newlines off, only
57610 // the first newline will be output
57611 Beautifier.prototype.eatWhitespace = function(allowAtLeastOneNewLine) {
57612   var result = whitespaceChar.test(this._input.peek());
57613   var isFirstNewLine = true;
57614
57615   while (whitespaceChar.test(this._input.peek())) {
57616     this._ch = this._input.next();
57617     if (allowAtLeastOneNewLine && this._ch === '\n') {
57618       if (this._options.preserve_newlines || isFirstNewLine) {
57619         isFirstNewLine = false;
57620         this._output.add_new_line(true);
57621       }
57622     }
57623   }
57624   return result;
57625 };
57626
57627 // Nested pseudo-class if we are insideRule
57628 // and the next special character found opens
57629 // a new block
57630 Beautifier.prototype.foundNestedPseudoClass = function() {
57631   var openParen = 0;
57632   var i = 1;
57633   var ch = this._input.peek(i);
57634   while (ch) {
57635     if (ch === "{") {
57636       return true;
57637     } else if (ch === '(') {
57638       // pseudoclasses can contain ()
57639       openParen += 1;
57640     } else if (ch === ')') {
57641       if (openParen === 0) {
57642         return false;
57643       }
57644       openParen -= 1;
57645     } else if (ch === ";" || ch === "}") {
57646       return false;
57647     }
57648     i++;
57649     ch = this._input.peek(i);
57650   }
57651   return false;
57652 };
57653
57654 Beautifier.prototype.print_string = function(output_string) {
57655   this._output.set_indent(this._indentLevel);
57656   this._output.non_breaking_space = true;
57657   this._output.add_token(output_string);
57658 };
57659
57660 Beautifier.prototype.preserveSingleSpace = function(isAfterSpace) {
57661   if (isAfterSpace) {
57662     this._output.space_before_token = true;
57663   }
57664 };
57665
57666 Beautifier.prototype.indent = function() {
57667   this._indentLevel++;
57668 };
57669
57670 Beautifier.prototype.outdent = function() {
57671   if (this._indentLevel > 0) {
57672     this._indentLevel--;
57673   }
57674 };
57675
57676 /*_____________________--------------------_____________________*/
57677
57678 Beautifier.prototype.beautify = function() {
57679   if (this._options.disabled) {
57680     return this._source_text;
57681   }
57682
57683   var source_text = this._source_text;
57684   var eol = this._options.eol;
57685   if (eol === 'auto') {
57686     eol = '\n';
57687     if (source_text && lineBreak.test(source_text || '')) {
57688       eol = source_text.match(lineBreak)[0];
57689     }
57690   }
57691
57692
57693   // HACK: newline parsing inconsistent. This brute force normalizes the this._input.
57694   source_text = source_text.replace(allLineBreaks, '\n');
57695
57696   // reset
57697   var baseIndentString = source_text.match(/^[\t ]*/)[0];
57698
57699   this._output = new Output(this._options, baseIndentString);
57700   this._input = new InputScanner(source_text);
57701   this._indentLevel = 0;
57702   this._nestedLevel = 0;
57703
57704   this._ch = null;
57705   var parenLevel = 0;
57706
57707   var insideRule = false;
57708   // This is the value side of a property value pair (blue in the following ex)
57709   // label { content: blue }
57710   var insidePropertyValue = false;
57711   var enteringConditionalGroup = false;
57712   var insideAtExtend = false;
57713   var insideAtImport = false;
57714   var topCharacter = this._ch;
57715   var whitespace;
57716   var isAfterSpace;
57717   var previous_ch;
57718
57719   while (true) {
57720     whitespace = this._input.read(whitespacePattern);
57721     isAfterSpace = whitespace !== '';
57722     previous_ch = topCharacter;
57723     this._ch = this._input.next();
57724     if (this._ch === '\\' && this._input.hasNext()) {
57725       this._ch += this._input.next();
57726     }
57727     topCharacter = this._ch;
57728
57729     if (!this._ch) {
57730       break;
57731     } else if (this._ch === '/' && this._input.peek() === '*') {
57732       // /* css comment */
57733       // Always start block comments on a new line.
57734       // This handles scenarios where a block comment immediately
57735       // follows a property definition on the same line or where
57736       // minified code is being beautified.
57737       this._output.add_new_line();
57738       this._input.back();
57739
57740       var comment = this._input.read(block_comment_pattern);
57741
57742       // Handle ignore directive
57743       var directives = directives_core.get_directives(comment);
57744       if (directives && directives.ignore === 'start') {
57745         comment += directives_core.readIgnored(this._input);
57746       }
57747
57748       this.print_string(comment);
57749
57750       // Ensures any new lines following the comment are preserved
57751       this.eatWhitespace(true);
57752
57753       // Block comments are followed by a new line so they don't
57754       // share a line with other properties
57755       this._output.add_new_line();
57756     } else if (this._ch === '/' && this._input.peek() === '/') {
57757       // // single line comment
57758       // Preserves the space before a comment
57759       // on the same line as a rule
57760       this._output.space_before_token = true;
57761       this._input.back();
57762       this.print_string(this._input.read(comment_pattern));
57763
57764       // Ensures any new lines following the comment are preserved
57765       this.eatWhitespace(true);
57766     } else if (this._ch === '@') {
57767       this.preserveSingleSpace(isAfterSpace);
57768
57769       // deal with less propery mixins @{...}
57770       if (this._input.peek() === '{') {
57771         this.print_string(this._ch + this.eatString('}'));
57772       } else {
57773         this.print_string(this._ch);
57774
57775         // strip trailing space, if present, for hash property checks
57776         var variableOrRule = this._input.peekUntilAfter(/[: ,;{}()[\]\/='"]/g);
57777
57778         if (variableOrRule.match(/[ :]$/)) {
57779           // we have a variable or pseudo-class, add it and insert one space before continuing
57780           variableOrRule = this.eatString(": ").replace(/\s$/, '');
57781           this.print_string(variableOrRule);
57782           this._output.space_before_token = true;
57783         }
57784
57785         variableOrRule = variableOrRule.replace(/\s$/, '');
57786
57787         if (variableOrRule === 'extend') {
57788           insideAtExtend = true;
57789         } else if (variableOrRule === 'import') {
57790           insideAtImport = true;
57791         }
57792
57793         // might be a nesting at-rule
57794         if (variableOrRule in this.NESTED_AT_RULE) {
57795           this._nestedLevel += 1;
57796           if (variableOrRule in this.CONDITIONAL_GROUP_RULE) {
57797             enteringConditionalGroup = true;
57798           }
57799           // might be less variable
57800         } else if (!insideRule && parenLevel === 0 && variableOrRule.indexOf(':') !== -1) {
57801           insidePropertyValue = true;
57802           this.indent();
57803         }
57804       }
57805     } else if (this._ch === '#' && this._input.peek() === '{') {
57806       this.preserveSingleSpace(isAfterSpace);
57807       this.print_string(this._ch + this.eatString('}'));
57808     } else if (this._ch === '{') {
57809       if (insidePropertyValue) {
57810         insidePropertyValue = false;
57811         this.outdent();
57812       }
57813
57814       // when entering conditional groups, only rulesets are allowed
57815       if (enteringConditionalGroup) {
57816         enteringConditionalGroup = false;
57817         insideRule = (this._indentLevel >= this._nestedLevel);
57818       } else {
57819         // otherwise, declarations are also allowed
57820         insideRule = (this._indentLevel >= this._nestedLevel - 1);
57821       }
57822       if (this._options.newline_between_rules && insideRule) {
57823         if (this._output.previous_line && this._output.previous_line.item(-1) !== '{') {
57824           this._output.ensure_empty_line_above('/', ',');
57825         }
57826       }
57827
57828       this._output.space_before_token = true;
57829
57830       // The difference in print_string and indent order is necessary to indent the '{' correctly
57831       if (this._options.brace_style === 'expand') {
57832         this._output.add_new_line();
57833         this.print_string(this._ch);
57834         this.indent();
57835         this._output.set_indent(this._indentLevel);
57836       } else {
57837         this.indent();
57838         this.print_string(this._ch);
57839       }
57840
57841       this.eatWhitespace(true);
57842       this._output.add_new_line();
57843     } else if (this._ch === '}') {
57844       this.outdent();
57845       this._output.add_new_line();
57846       if (previous_ch === '{') {
57847         this._output.trim(true);
57848       }
57849       insideAtImport = false;
57850       insideAtExtend = false;
57851       if (insidePropertyValue) {
57852         this.outdent();
57853         insidePropertyValue = false;
57854       }
57855       this.print_string(this._ch);
57856       insideRule = false;
57857       if (this._nestedLevel) {
57858         this._nestedLevel--;
57859       }
57860
57861       this.eatWhitespace(true);
57862       this._output.add_new_line();
57863
57864       if (this._options.newline_between_rules && !this._output.just_added_blankline()) {
57865         if (this._input.peek() !== '}') {
57866           this._output.add_new_line(true);
57867         }
57868       }
57869     } else if (this._ch === ":") {
57870       if ((insideRule || enteringConditionalGroup) && !(this._input.lookBack("&") || this.foundNestedPseudoClass()) && !this._input.lookBack("(") && !insideAtExtend && parenLevel === 0) {
57871         // 'property: value' delimiter
57872         // which could be in a conditional group query
57873         this.print_string(':');
57874         if (!insidePropertyValue) {
57875           insidePropertyValue = true;
57876           this._output.space_before_token = true;
57877           this.eatWhitespace(true);
57878           this.indent();
57879         }
57880       } else {
57881         // sass/less parent reference don't use a space
57882         // sass nested pseudo-class don't use a space
57883
57884         // preserve space before pseudoclasses/pseudoelements, as it means "in any child"
57885         if (this._input.lookBack(" ")) {
57886           this._output.space_before_token = true;
57887         }
57888         if (this._input.peek() === ":") {
57889           // pseudo-element
57890           this._ch = this._input.next();
57891           this.print_string("::");
57892         } else {
57893           // pseudo-class
57894           this.print_string(':');
57895         }
57896       }
57897     } else if (this._ch === '"' || this._ch === '\'') {
57898       this.preserveSingleSpace(isAfterSpace);
57899       this.print_string(this._ch + this.eatString(this._ch));
57900       this.eatWhitespace(true);
57901     } else if (this._ch === ';') {
57902       if (parenLevel === 0) {
57903         if (insidePropertyValue) {
57904           this.outdent();
57905           insidePropertyValue = false;
57906         }
57907         insideAtExtend = false;
57908         insideAtImport = false;
57909         this.print_string(this._ch);
57910         this.eatWhitespace(true);
57911
57912         // This maintains single line comments on the same
57913         // line. Block comments are also affected, but
57914         // a new line is always output before one inside
57915         // that section
57916         if (this._input.peek() !== '/') {
57917           this._output.add_new_line();
57918         }
57919       } else {
57920         this.print_string(this._ch);
57921         this.eatWhitespace(true);
57922         this._output.space_before_token = true;
57923       }
57924     } else if (this._ch === '(') { // may be a url
57925       if (this._input.lookBack("url")) {
57926         this.print_string(this._ch);
57927         this.eatWhitespace();
57928         parenLevel++;
57929         this.indent();
57930         this._ch = this._input.next();
57931         if (this._ch === ')' || this._ch === '"' || this._ch === '\'') {
57932           this._input.back();
57933         } else if (this._ch) {
57934           this.print_string(this._ch + this.eatString(')'));
57935           if (parenLevel) {
57936             parenLevel--;
57937             this.outdent();
57938           }
57939         }
57940       } else {
57941         this.preserveSingleSpace(isAfterSpace);
57942         this.print_string(this._ch);
57943         this.eatWhitespace();
57944         parenLevel++;
57945         this.indent();
57946       }
57947     } else if (this._ch === ')') {
57948       if (parenLevel) {
57949         parenLevel--;
57950         this.outdent();
57951       }
57952       this.print_string(this._ch);
57953     } else if (this._ch === ',') {
57954       this.print_string(this._ch);
57955       this.eatWhitespace(true);
57956       if (this._options.selector_separator_newline && !insidePropertyValue && parenLevel === 0 && !insideAtImport) {
57957         this._output.add_new_line();
57958       } else {
57959         this._output.space_before_token = true;
57960       }
57961     } else if ((this._ch === '>' || this._ch === '+' || this._ch === '~') && !insidePropertyValue && parenLevel === 0) {
57962       //handle combinator spacing
57963       if (this._options.space_around_combinator) {
57964         this._output.space_before_token = true;
57965         this.print_string(this._ch);
57966         this._output.space_before_token = true;
57967       } else {
57968         this.print_string(this._ch);
57969         this.eatWhitespace();
57970         // squash extra whitespace
57971         if (this._ch && whitespaceChar.test(this._ch)) {
57972           this._ch = '';
57973         }
57974       }
57975     } else if (this._ch === ']') {
57976       this.print_string(this._ch);
57977     } else if (this._ch === '[') {
57978       this.preserveSingleSpace(isAfterSpace);
57979       this.print_string(this._ch);
57980     } else if (this._ch === '=') { // no whitespace before or after
57981       this.eatWhitespace();
57982       this.print_string('=');
57983       if (whitespaceChar.test(this._ch)) {
57984         this._ch = '';
57985       }
57986     } else if (this._ch === '!' && !this._input.lookBack("\\")) { // !important
57987       this.print_string(' ');
57988       this.print_string(this._ch);
57989     } else {
57990       this.preserveSingleSpace(isAfterSpace);
57991       this.print_string(this._ch);
57992     }
57993   }
57994
57995   var sweetCode = this._output.get_code(eol);
57996
57997   return sweetCode;
57998 };
57999
58000 module.exports.Beautifier = Beautifier;
58001
58002
58003 /***/ }),
58004 /* 17 */
58005 /***/ (function(module, exports, __nested_webpack_require_51026__) {
58006
58007 "use strict";
58008 /*jshint node:true */
58009 /*
58010
58011   The MIT License (MIT)
58012
58013   Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
58014
58015   Permission is hereby granted, free of charge, to any person
58016   obtaining a copy of this software and associated documentation files
58017   (the "Software"), to deal in the Software without restriction,
58018   including without limitation the rights to use, copy, modify, merge,
58019   publish, distribute, sublicense, and/or sell copies of the Software,
58020   and to permit persons to whom the Software is furnished to do so,
58021   subject to the following conditions:
58022
58023   The above copyright notice and this permission notice shall be
58024   included in all copies or substantial portions of the Software.
58025
58026   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
58027   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
58028   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
58029   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
58030   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
58031   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
58032   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
58033   SOFTWARE.
58034 */
58035
58036
58037
58038 var BaseOptions = __nested_webpack_require_51026__(6).Options;
58039
58040 function Options(options) {
58041   BaseOptions.call(this, options, 'css');
58042
58043   this.selector_separator_newline = this._get_boolean('selector_separator_newline', true);
58044   this.newline_between_rules = this._get_boolean('newline_between_rules', true);
58045   var space_around_selector_separator = this._get_boolean('space_around_selector_separator');
58046   this.space_around_combinator = this._get_boolean('space_around_combinator') || space_around_selector_separator;
58047
58048   var brace_style_split = this._get_selection_list('brace_style', ['collapse', 'expand', 'end-expand', 'none', 'preserve-inline']);
58049   this.brace_style = 'collapse';
58050   for (var bs = 0; bs < brace_style_split.length; bs++) {
58051     if (brace_style_split[bs] !== 'expand') {
58052       // default to collapse, as only collapse|expand is implemented for now
58053       this.brace_style = 'collapse';
58054     } else {
58055       this.brace_style = brace_style_split[bs];
58056     }
58057   }
58058 }
58059 Options.prototype = new BaseOptions();
58060
58061
58062
58063 module.exports.Options = Options;
58064
58065
58066 /***/ })
58067 /******/ ]);
58068
58069 var css_beautify = legacy_beautify_css;
58070
58071 /***/ }),
58072 /* 134 */
58073 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58074
58075 __webpack_require__.r(__webpack_exports__);
58076 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
58077 /* harmony export */   "findDocumentLinks": () => /* binding */ findDocumentLinks
58078 /* harmony export */ });
58079 /* harmony import */ var _parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(116);
58080 /* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(124);
58081 /* harmony import */ var vscode_uri__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(135);
58082 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(117);
58083 /*---------------------------------------------------------------------------------------------
58084  *  Copyright (c) Microsoft Corporation. All rights reserved.
58085  *  Licensed under the MIT License. See License.txt in the project root for license information.
58086  *--------------------------------------------------------------------------------------------*/
58087
58088
58089
58090
58091 function normalizeRef(url) {
58092     var first = url[0];
58093     var last = url[url.length - 1];
58094     if (first === last && (first === '\'' || first === '\"')) {
58095         url = url.substr(1, url.length - 2);
58096     }
58097     return url;
58098 }
58099 function validateRef(url, languageId) {
58100     if (!url.length) {
58101         return false;
58102     }
58103     if (languageId === 'handlebars' && /{{.*}}/.test(url)) {
58104         return false;
58105     }
58106     return /\b(w[\w\d+.-]*:\/\/)?[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|\/?))/.test(url);
58107 }
58108 function getWorkspaceUrl(documentUri, tokenContent, documentContext, base) {
58109     if (/^\s*javascript\:/i.test(tokenContent) || /[\n\r]/.test(tokenContent)) {
58110         return undefined;
58111     }
58112     tokenContent = tokenContent.replace(/^\s*/g, '');
58113     if (/^https?:\/\//i.test(tokenContent) || /^file:\/\//i.test(tokenContent)) {
58114         // Absolute link that needs no treatment
58115         return tokenContent;
58116     }
58117     if (/^\#/i.test(tokenContent)) {
58118         return documentUri + tokenContent;
58119     }
58120     if (/^\/\//i.test(tokenContent)) {
58121         // Absolute link (that does not name the protocol)
58122         var pickedScheme = _utils_strings__WEBPACK_IMPORTED_MODULE_1__.startsWith(documentUri, 'https://') ? 'https' : 'http';
58123         return pickedScheme + ':' + tokenContent.replace(/^\s*/g, '');
58124     }
58125     if (documentContext) {
58126         return documentContext.resolveReference(tokenContent, base || documentUri);
58127     }
58128     return tokenContent;
58129 }
58130 function createLink(document, documentContext, attributeValue, startOffset, endOffset, base) {
58131     var tokenContent = normalizeRef(attributeValue);
58132     if (!validateRef(tokenContent, document.languageId)) {
58133         return undefined;
58134     }
58135     if (tokenContent.length < attributeValue.length) {
58136         startOffset++;
58137         endOffset--;
58138     }
58139     var workspaceUrl = getWorkspaceUrl(document.uri, tokenContent, documentContext, base);
58140     if (!workspaceUrl || !isValidURI(workspaceUrl)) {
58141         return undefined;
58142     }
58143     return {
58144         range: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.Range.create(document.positionAt(startOffset), document.positionAt(endOffset)),
58145         target: workspaceUrl
58146     };
58147 }
58148 function isValidURI(uri) {
58149     try {
58150         vscode_uri__WEBPACK_IMPORTED_MODULE_2__.URI.parse(uri);
58151         return true;
58152     }
58153     catch (e) {
58154         return false;
58155     }
58156 }
58157 function findDocumentLinks(document, documentContext) {
58158     var newLinks = [];
58159     var scanner = (0,_parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(document.getText(), 0);
58160     var token = scanner.scan();
58161     var lastAttributeName = undefined;
58162     var afterBase = false;
58163     var base = void 0;
58164     var idLocations = {};
58165     while (token !== _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.TokenType.EOS) {
58166         switch (token) {
58167             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.TokenType.StartTag:
58168                 if (!base) {
58169                     var tagName = scanner.getTokenText().toLowerCase();
58170                     afterBase = tagName === 'base';
58171                 }
58172                 break;
58173             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.TokenType.AttributeName:
58174                 lastAttributeName = scanner.getTokenText().toLowerCase();
58175                 break;
58176             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_3__.TokenType.AttributeValue:
58177                 if (lastAttributeName === 'src' || lastAttributeName === 'href') {
58178                     var attributeValue = scanner.getTokenText();
58179                     if (!afterBase) { // don't highlight the base link itself
58180                         var link = createLink(document, documentContext, attributeValue, scanner.getTokenOffset(), scanner.getTokenEnd(), base);
58181                         if (link) {
58182                             newLinks.push(link);
58183                         }
58184                     }
58185                     if (afterBase && typeof base === 'undefined') {
58186                         base = normalizeRef(attributeValue);
58187                         if (base && documentContext) {
58188                             base = documentContext.resolveReference(base, document.uri);
58189                         }
58190                     }
58191                     afterBase = false;
58192                     lastAttributeName = undefined;
58193                 }
58194                 else if (lastAttributeName === 'id') {
58195                     var id = normalizeRef(scanner.getTokenText());
58196                     idLocations[id] = scanner.getTokenOffset();
58197                 }
58198                 break;
58199         }
58200         token = scanner.scan();
58201     }
58202     // change local links with ids to actual positions
58203     for (var _i = 0, newLinks_1 = newLinks; _i < newLinks_1.length; _i++) {
58204         var link = newLinks_1[_i];
58205         var localWithHash = document.uri + '#';
58206         if (link.target && _utils_strings__WEBPACK_IMPORTED_MODULE_1__.startsWith(link.target, localWithHash)) {
58207             var target = link.target.substr(localWithHash.length);
58208             var offset = idLocations[target];
58209             if (offset !== undefined) {
58210                 var pos = document.positionAt(offset);
58211                 link.target = "" + localWithHash + (pos.line + 1) + "," + (pos.character + 1);
58212             }
58213         }
58214     }
58215     return newLinks;
58216 }
58217
58218
58219 /***/ }),
58220 /* 135 */
58221 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58222
58223 __webpack_require__.r(__webpack_exports__);
58224 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
58225 /* harmony export */   "URI": () => /* binding */ URI,
58226 /* harmony export */   "uriToFsPath": () => /* binding */ uriToFsPath
58227 /* harmony export */ });
58228 /*---------------------------------------------------------------------------------------------
58229  *  Copyright (c) Microsoft Corporation. All rights reserved.
58230  *  Licensed under the MIT License. See License.txt in the project root for license information.
58231  *--------------------------------------------------------------------------------------------*/
58232
58233 var __extends = (undefined && undefined.__extends) || (function () {
58234     var extendStatics = function (d, b) {
58235         extendStatics = Object.setPrototypeOf ||
58236             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
58237             function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
58238         return extendStatics(d, b);
58239     };
58240     return function (d, b) {
58241         extendStatics(d, b);
58242         function __() { this.constructor = d; }
58243         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
58244     };
58245 })();
58246 var _a;
58247 var isWindows;
58248 if (typeof process === 'object') {
58249     isWindows = process.platform === 'win32';
58250 }
58251 else if (typeof navigator === 'object') {
58252     var userAgent = navigator.userAgent;
58253     isWindows = userAgent.indexOf('Windows') >= 0;
58254 }
58255 function isHighSurrogate(charCode) {
58256     return (0xD800 <= charCode && charCode <= 0xDBFF);
58257 }
58258 function isLowSurrogate(charCode) {
58259     return (0xDC00 <= charCode && charCode <= 0xDFFF);
58260 }
58261 function isLowerAsciiHex(code) {
58262     return code >= 97 /* a */ && code <= 102 /* f */;
58263 }
58264 function isLowerAsciiLetter(code) {
58265     return code >= 97 /* a */ && code <= 122 /* z */;
58266 }
58267 function isUpperAsciiLetter(code) {
58268     return code >= 65 /* A */ && code <= 90 /* Z */;
58269 }
58270 function isAsciiLetter(code) {
58271     return isLowerAsciiLetter(code) || isUpperAsciiLetter(code);
58272 }
58273 //#endregion
58274 var _schemePattern = /^\w[\w\d+.-]*$/;
58275 var _singleSlashStart = /^\//;
58276 var _doubleSlashStart = /^\/\//;
58277 function _validateUri(ret, _strict) {
58278     // scheme, must be set
58279     if (!ret.scheme && _strict) {
58280         throw new Error("[UriError]: Scheme is missing: {scheme: \"\", authority: \"" + ret.authority + "\", path: \"" + ret.path + "\", query: \"" + ret.query + "\", fragment: \"" + ret.fragment + "\"}");
58281     }
58282     // scheme, https://tools.ietf.org/html/rfc3986#section-3.1
58283     // ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
58284     if (ret.scheme && !_schemePattern.test(ret.scheme)) {
58285         throw new Error('[UriError]: Scheme contains illegal characters.');
58286     }
58287     // path, http://tools.ietf.org/html/rfc3986#section-3.3
58288     // If a URI contains an authority component, then the path component
58289     // must either be empty or begin with a slash ("/") character.  If a URI
58290     // does not contain an authority component, then the path cannot begin
58291     // with two slash characters ("//").
58292     if (ret.path) {
58293         if (ret.authority) {
58294             if (!_singleSlashStart.test(ret.path)) {
58295                 throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character');
58296             }
58297         }
58298         else {
58299             if (_doubleSlashStart.test(ret.path)) {
58300                 throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")');
58301             }
58302         }
58303     }
58304 }
58305 // for a while we allowed uris *without* schemes and this is the migration
58306 // for them, e.g. an uri without scheme and without strict-mode warns and falls
58307 // back to the file-scheme. that should cause the least carnage and still be a
58308 // clear warning
58309 function _schemeFix(scheme, _strict) {
58310     if (!scheme && !_strict) {
58311         return 'file';
58312     }
58313     return scheme;
58314 }
58315 // implements a bit of https://tools.ietf.org/html/rfc3986#section-5
58316 function _referenceResolution(scheme, path) {
58317     // the slash-character is our 'default base' as we don't
58318     // support constructing URIs relative to other URIs. This
58319     // also means that we alter and potentially break paths.
58320     // see https://tools.ietf.org/html/rfc3986#section-5.1.4
58321     switch (scheme) {
58322         case 'https':
58323         case 'http':
58324         case 'file':
58325             if (!path) {
58326                 path = _slash;
58327             }
58328             else if (path[0] !== _slash) {
58329                 path = _slash + path;
58330             }
58331             break;
58332     }
58333     return path;
58334 }
58335 var _empty = '';
58336 var _slash = '/';
58337 var _regexp = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
58338 /**
58339  * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.
58340  * This class is a simple parser which creates the basic component parts
58341  * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation
58342  * and encoding.
58343  *
58344  * ```txt
58345  *       foo://example.com:8042/over/there?name=ferret#nose
58346  *       \_/   \______________/\_________/ \_________/ \__/
58347  *        |           |            |            |        |
58348  *     scheme     authority       path        query   fragment
58349  *        |   _____________________|__
58350  *       / \ /                        \
58351  *       urn:example:animal:ferret:nose
58352  * ```
58353  */
58354 var URI = /** @class */ (function () {
58355     /**
58356      * @internal
58357      */
58358     function URI(schemeOrData, authority, path, query, fragment, _strict) {
58359         if (_strict === void 0) { _strict = false; }
58360         if (typeof schemeOrData === 'object') {
58361             this.scheme = schemeOrData.scheme || _empty;
58362             this.authority = schemeOrData.authority || _empty;
58363             this.path = schemeOrData.path || _empty;
58364             this.query = schemeOrData.query || _empty;
58365             this.fragment = schemeOrData.fragment || _empty;
58366             // no validation because it's this URI
58367             // that creates uri components.
58368             // _validateUri(this);
58369         }
58370         else {
58371             this.scheme = _schemeFix(schemeOrData, _strict);
58372             this.authority = authority || _empty;
58373             this.path = _referenceResolution(this.scheme, path || _empty);
58374             this.query = query || _empty;
58375             this.fragment = fragment || _empty;
58376             _validateUri(this, _strict);
58377         }
58378     }
58379     URI.isUri = function (thing) {
58380         if (thing instanceof URI) {
58381             return true;
58382         }
58383         if (!thing) {
58384             return false;
58385         }
58386         return typeof thing.authority === 'string'
58387             && typeof thing.fragment === 'string'
58388             && typeof thing.path === 'string'
58389             && typeof thing.query === 'string'
58390             && typeof thing.scheme === 'string'
58391             && typeof thing.fsPath === 'function'
58392             && typeof thing.with === 'function'
58393             && typeof thing.toString === 'function';
58394     };
58395     Object.defineProperty(URI.prototype, "fsPath", {
58396         // ---- filesystem path -----------------------
58397         /**
58398          * Returns a string representing the corresponding file system path of this URI.
58399          * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the
58400          * platform specific path separator.
58401          *
58402          * * Will *not* validate the path for invalid characters and semantics.
58403          * * Will *not* look at the scheme of this URI.
58404          * * The result shall *not* be used for display purposes but for accessing a file on disk.
58405          *
58406          *
58407          * The *difference* to `URI#path` is the use of the platform specific separator and the handling
58408          * of UNC paths. See the below sample of a file-uri with an authority (UNC path).
58409          *
58410          * ```ts
58411             const u = URI.parse('file://server/c$/folder/file.txt')
58412             u.authority === 'server'
58413             u.path === '/shares/c$/file.txt'
58414             u.fsPath === '\\server\c$\folder\file.txt'
58415         ```
58416          *
58417          * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,
58418          * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working
58419          * with URIs that represent files on disk (`file` scheme).
58420          */
58421         get: function () {
58422             // if (this.scheme !== 'file') {
58423             //  console.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);
58424             // }
58425             return uriToFsPath(this, false);
58426         },
58427         enumerable: true,
58428         configurable: true
58429     });
58430     // ---- modify to new -------------------------
58431     URI.prototype.with = function (change) {
58432         if (!change) {
58433             return this;
58434         }
58435         var scheme = change.scheme, authority = change.authority, path = change.path, query = change.query, fragment = change.fragment;
58436         if (scheme === undefined) {
58437             scheme = this.scheme;
58438         }
58439         else if (scheme === null) {
58440             scheme = _empty;
58441         }
58442         if (authority === undefined) {
58443             authority = this.authority;
58444         }
58445         else if (authority === null) {
58446             authority = _empty;
58447         }
58448         if (path === undefined) {
58449             path = this.path;
58450         }
58451         else if (path === null) {
58452             path = _empty;
58453         }
58454         if (query === undefined) {
58455             query = this.query;
58456         }
58457         else if (query === null) {
58458             query = _empty;
58459         }
58460         if (fragment === undefined) {
58461             fragment = this.fragment;
58462         }
58463         else if (fragment === null) {
58464             fragment = _empty;
58465         }
58466         if (scheme === this.scheme
58467             && authority === this.authority
58468             && path === this.path
58469             && query === this.query
58470             && fragment === this.fragment) {
58471             return this;
58472         }
58473         return new _URI(scheme, authority, path, query, fragment);
58474     };
58475     // ---- parse & validate ------------------------
58476     /**
58477      * Creates a new URI from a string, e.g. `http://www.msft.com/some/path`,
58478      * `file:///usr/home`, or `scheme:with/path`.
58479      *
58480      * @param value A string which represents an URI (see `URI#toString`).
58481      */
58482     URI.parse = function (value, _strict) {
58483         if (_strict === void 0) { _strict = false; }
58484         var match = _regexp.exec(value);
58485         if (!match) {
58486             return new _URI(_empty, _empty, _empty, _empty, _empty);
58487         }
58488         return new _URI(match[2] || _empty, percentDecode(match[4] || _empty), percentDecode(match[5] || _empty), percentDecode(match[7] || _empty), percentDecode(match[9] || _empty), _strict);
58489     };
58490     /**
58491      * Creates a new URI from a file system path, e.g. `c:\my\files`,
58492      * `/usr/home`, or `\\server\share\some\path`.
58493      *
58494      * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument
58495      * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**
58496      * `URI.parse('file://' + path)` because the path might contain characters that are
58497      * interpreted (# and ?). See the following sample:
58498      * ```ts
58499     const good = URI.file('/coding/c#/project1');
58500     good.scheme === 'file';
58501     good.path === '/coding/c#/project1';
58502     good.fragment === '';
58503     const bad = URI.parse('file://' + '/coding/c#/project1');
58504     bad.scheme === 'file';
58505     bad.path === '/coding/c'; // path is now broken
58506     bad.fragment === '/project1';
58507     ```
58508      *
58509      * @param path A file system path (see `URI#fsPath`)
58510      */
58511     URI.file = function (path) {
58512         var authority = _empty;
58513         // normalize to fwd-slashes on windows,
58514         // on other systems bwd-slashes are valid
58515         // filename character, eg /f\oo/ba\r.txt
58516         if (isWindows) {
58517             path = path.replace(/\\/g, _slash);
58518         }
58519         // check for authority as used in UNC shares
58520         // or use the path as given
58521         if (path[0] === _slash && path[1] === _slash) {
58522             var idx = path.indexOf(_slash, 2);
58523             if (idx === -1) {
58524                 authority = path.substring(2);
58525                 path = _slash;
58526             }
58527             else {
58528                 authority = path.substring(2, idx);
58529                 path = path.substring(idx) || _slash;
58530             }
58531         }
58532         return new _URI('file', authority, path, _empty, _empty);
58533     };
58534     URI.from = function (components) {
58535         return new _URI(components.scheme, components.authority, components.path, components.query, components.fragment);
58536     };
58537     // /**
58538     //  * Join a URI path with path fragments and normalizes the resulting path.
58539     //  *
58540     //  * @param uri The input URI.
58541     //  * @param pathFragment The path fragment to add to the URI path.
58542     //  * @returns The resulting URI.
58543     //  */
58544     // static joinPath(uri: URI, ...pathFragment: string[]): URI {
58545     //  if (!uri.path) {
58546     //          throw new Error(`[UriError]: cannot call joinPaths on URI without path`);
58547     //  }
58548     //  let newPath: string;
58549     //  if (isWindows && uri.scheme === 'file') {
58550     //          newPath = URI.file(paths.win32.join(uriToFsPath(uri, true), ...pathFragment)).path;
58551     //  } else {
58552     //          newPath = paths.posix.join(uri.path, ...pathFragment);
58553     //  }
58554     //  return uri.with({ path: newPath });
58555     // }
58556     // ---- printing/externalize ---------------------------
58557     /**
58558      * Creates a string representation for this URI. It's guaranteed that calling
58559      * `URI.parse` with the result of this function creates an URI which is equal
58560      * to this URI.
58561      *
58562      * * The result shall *not* be used for display purposes but for externalization or transport.
58563      * * The result will be encoded using the percentage encoding and encoding happens mostly
58564      * ignore the scheme-specific encoding rules.
58565      *
58566      * @param skipEncoding Do not encode the result, default is `false`
58567      */
58568     URI.prototype.toString = function (skipEncoding) {
58569         if (skipEncoding === void 0) { skipEncoding = false; }
58570         return _asFormatted(this, skipEncoding);
58571     };
58572     URI.prototype.toJSON = function () {
58573         return this;
58574     };
58575     URI.revive = function (data) {
58576         if (!data) {
58577             return data;
58578         }
58579         else if (data instanceof URI) {
58580             return data;
58581         }
58582         else {
58583             var result = new _URI(data);
58584             result._formatted = data.external;
58585             result._fsPath = data._sep === _pathSepMarker ? data.fsPath : null;
58586             return result;
58587         }
58588     };
58589     return URI;
58590 }());
58591
58592 var _pathSepMarker = isWindows ? 1 : undefined;
58593 // eslint-disable-next-line @typescript-eslint/class-name-casing
58594 var _URI = /** @class */ (function (_super) {
58595     __extends(_URI, _super);
58596     function _URI() {
58597         var _this = _super !== null && _super.apply(this, arguments) || this;
58598         _this._formatted = null;
58599         _this._fsPath = null;
58600         return _this;
58601     }
58602     Object.defineProperty(_URI.prototype, "fsPath", {
58603         get: function () {
58604             if (!this._fsPath) {
58605                 this._fsPath = uriToFsPath(this, false);
58606             }
58607             return this._fsPath;
58608         },
58609         enumerable: true,
58610         configurable: true
58611     });
58612     _URI.prototype.toString = function (skipEncoding) {
58613         if (skipEncoding === void 0) { skipEncoding = false; }
58614         if (!skipEncoding) {
58615             if (!this._formatted) {
58616                 this._formatted = _asFormatted(this, false);
58617             }
58618             return this._formatted;
58619         }
58620         else {
58621             // we don't cache that
58622             return _asFormatted(this, true);
58623         }
58624     };
58625     _URI.prototype.toJSON = function () {
58626         var res = {
58627             $mid: 1
58628         };
58629         // cached state
58630         if (this._fsPath) {
58631             res.fsPath = this._fsPath;
58632             res._sep = _pathSepMarker;
58633         }
58634         if (this._formatted) {
58635             res.external = this._formatted;
58636         }
58637         // uri components
58638         if (this.path) {
58639             res.path = this.path;
58640         }
58641         if (this.scheme) {
58642             res.scheme = this.scheme;
58643         }
58644         if (this.authority) {
58645             res.authority = this.authority;
58646         }
58647         if (this.query) {
58648             res.query = this.query;
58649         }
58650         if (this.fragment) {
58651             res.fragment = this.fragment;
58652         }
58653         return res;
58654     };
58655     return _URI;
58656 }(URI));
58657 // reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2
58658 var encodeTable = (_a = {},
58659     _a[58 /* Colon */] = '%3A',
58660     _a[47 /* Slash */] = '%2F',
58661     _a[63 /* QuestionMark */] = '%3F',
58662     _a[35 /* Hash */] = '%23',
58663     _a[91 /* OpenSquareBracket */] = '%5B',
58664     _a[93 /* CloseSquareBracket */] = '%5D',
58665     _a[64 /* AtSign */] = '%40',
58666     _a[33 /* ExclamationMark */] = '%21',
58667     _a[36 /* DollarSign */] = '%24',
58668     _a[38 /* Ampersand */] = '%26',
58669     _a[39 /* SingleQuote */] = '%27',
58670     _a[40 /* OpenParen */] = '%28',
58671     _a[41 /* CloseParen */] = '%29',
58672     _a[42 /* Asterisk */] = '%2A',
58673     _a[43 /* Plus */] = '%2B',
58674     _a[44 /* Comma */] = '%2C',
58675     _a[59 /* Semicolon */] = '%3B',
58676     _a[61 /* Equals */] = '%3D',
58677     _a[32 /* Space */] = '%20',
58678     _a);
58679 function encodeURIComponentFast(uriComponent, allowSlash) {
58680     var res = undefined;
58681     var nativeEncodePos = -1;
58682     for (var pos = 0; pos < uriComponent.length; pos++) {
58683         var code = uriComponent.charCodeAt(pos);
58684         // unreserved characters: https://tools.ietf.org/html/rfc3986#section-2.3
58685         if ((code >= 97 /* a */ && code <= 122 /* z */)
58686             || (code >= 65 /* A */ && code <= 90 /* Z */)
58687             || (code >= 48 /* Digit0 */ && code <= 57 /* Digit9 */)
58688             || code === 45 /* Dash */
58689             || code === 46 /* Period */
58690             || code === 95 /* Underline */
58691             || code === 126 /* Tilde */
58692             || (allowSlash && code === 47 /* Slash */)) {
58693             // check if we are delaying native encode
58694             if (nativeEncodePos !== -1) {
58695                 res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));
58696                 nativeEncodePos = -1;
58697             }
58698             // check if we write into a new string (by default we try to return the param)
58699             if (res !== undefined) {
58700                 res += uriComponent.charAt(pos);
58701             }
58702         }
58703         else {
58704             // encoding needed, we need to allocate a new string
58705             if (res === undefined) {
58706                 res = uriComponent.substr(0, pos);
58707             }
58708             // check with default table first
58709             var escaped = encodeTable[code];
58710             if (escaped !== undefined) {
58711                 // check if we are delaying native encode
58712                 if (nativeEncodePos !== -1) {
58713                     res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));
58714                     nativeEncodePos = -1;
58715                 }
58716                 // append escaped variant to result
58717                 res += escaped;
58718             }
58719             else if (nativeEncodePos === -1) {
58720                 // use native encode only when needed
58721                 nativeEncodePos = pos;
58722             }
58723         }
58724     }
58725     if (nativeEncodePos !== -1) {
58726         res += encodeURIComponent(uriComponent.substring(nativeEncodePos));
58727     }
58728     return res !== undefined ? res : uriComponent;
58729 }
58730 function encodeURIComponentMinimal(path) {
58731     var res = undefined;
58732     for (var pos = 0; pos < path.length; pos++) {
58733         var code = path.charCodeAt(pos);
58734         if (code === 35 /* Hash */ || code === 63 /* QuestionMark */) {
58735             if (res === undefined) {
58736                 res = path.substr(0, pos);
58737             }
58738             res += encodeTable[code];
58739         }
58740         else {
58741             if (res !== undefined) {
58742                 res += path[pos];
58743             }
58744         }
58745     }
58746     return res !== undefined ? res : path;
58747 }
58748 /**
58749  * Compute `fsPath` for the given uri
58750  */
58751 function uriToFsPath(uri, keepDriveLetterCasing) {
58752     var value;
58753     if (uri.authority && uri.path.length > 1 && uri.scheme === 'file') {
58754         // unc path: file://shares/c$/far/boo
58755         value = "//" + uri.authority + uri.path;
58756     }
58757     else if (uri.path.charCodeAt(0) === 47 /* Slash */
58758         && (uri.path.charCodeAt(1) >= 65 /* A */ && uri.path.charCodeAt(1) <= 90 /* Z */ || uri.path.charCodeAt(1) >= 97 /* a */ && uri.path.charCodeAt(1) <= 122 /* z */)
58759         && uri.path.charCodeAt(2) === 58 /* Colon */) {
58760         if (!keepDriveLetterCasing) {
58761             // windows drive letter: file:///c:/far/boo
58762             value = uri.path[1].toLowerCase() + uri.path.substr(2);
58763         }
58764         else {
58765             value = uri.path.substr(1);
58766         }
58767     }
58768     else {
58769         // other path
58770         value = uri.path;
58771     }
58772     if (isWindows) {
58773         value = value.replace(/\//g, '\\');
58774     }
58775     return value;
58776 }
58777 /**
58778  * Create the external version of a uri
58779  */
58780 function _asFormatted(uri, skipEncoding) {
58781     var encoder = !skipEncoding
58782         ? encodeURIComponentFast
58783         : encodeURIComponentMinimal;
58784     var res = '';
58785     var scheme = uri.scheme, authority = uri.authority, path = uri.path, query = uri.query, fragment = uri.fragment;
58786     if (scheme) {
58787         res += scheme;
58788         res += ':';
58789     }
58790     if (authority || scheme === 'file') {
58791         res += _slash;
58792         res += _slash;
58793     }
58794     if (authority) {
58795         var idx = authority.indexOf('@');
58796         if (idx !== -1) {
58797             // <user>@<auth>
58798             var userinfo = authority.substr(0, idx);
58799             authority = authority.substr(idx + 1);
58800             idx = userinfo.indexOf(':');
58801             if (idx === -1) {
58802                 res += encoder(userinfo, false);
58803             }
58804             else {
58805                 // <user>:<pass>@<auth>
58806                 res += encoder(userinfo.substr(0, idx), false);
58807                 res += ':';
58808                 res += encoder(userinfo.substr(idx + 1), false);
58809             }
58810             res += '@';
58811         }
58812         authority = authority.toLowerCase();
58813         idx = authority.indexOf(':');
58814         if (idx === -1) {
58815             res += encoder(authority, false);
58816         }
58817         else {
58818             // <auth>:<port>
58819             res += encoder(authority.substr(0, idx), false);
58820             res += authority.substr(idx);
58821         }
58822     }
58823     if (path) {
58824         // lower-case windows drive letters in /C:/fff or C:/fff
58825         if (path.length >= 3 && path.charCodeAt(0) === 47 /* Slash */ && path.charCodeAt(2) === 58 /* Colon */) {
58826             var code = path.charCodeAt(1);
58827             if (code >= 65 /* A */ && code <= 90 /* Z */) {
58828                 path = "/" + String.fromCharCode(code + 32) + ":" + path.substr(3); // "/c:".length === 3
58829             }
58830         }
58831         else if (path.length >= 2 && path.charCodeAt(1) === 58 /* Colon */) {
58832             var code = path.charCodeAt(0);
58833             if (code >= 65 /* A */ && code <= 90 /* Z */) {
58834                 path = String.fromCharCode(code + 32) + ":" + path.substr(2); // "/c:".length === 3
58835             }
58836         }
58837         // encode the rest of the path
58838         res += encoder(path, true);
58839     }
58840     if (query) {
58841         res += '?';
58842         res += encoder(query, false);
58843     }
58844     if (fragment) {
58845         res += '#';
58846         res += !skipEncoding ? encodeURIComponentFast(fragment, false) : fragment;
58847     }
58848     return res;
58849 }
58850 // --- decode
58851 function decodeURIComponentGraceful(str) {
58852     try {
58853         return decodeURIComponent(str);
58854     }
58855     catch (_a) {
58856         if (str.length > 3) {
58857             return str.substr(0, 3) + decodeURIComponentGraceful(str.substr(3));
58858         }
58859         else {
58860             return str;
58861         }
58862     }
58863 }
58864 var _rEncodedAsHex = /(%[0-9A-Za-z][0-9A-Za-z])+/g;
58865 function percentDecode(str) {
58866     if (!str.match(_rEncodedAsHex)) {
58867         return str;
58868     }
58869     return str.replace(_rEncodedAsHex, function (match) { return decodeURIComponentGraceful(match); });
58870 }
58871
58872
58873 /***/ }),
58874 /* 136 */
58875 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58876
58877 __webpack_require__.r(__webpack_exports__);
58878 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
58879 /* harmony export */   "findDocumentHighlights": () => /* binding */ findDocumentHighlights
58880 /* harmony export */ });
58881 /* harmony import */ var _parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(116);
58882 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(117);
58883 /*---------------------------------------------------------------------------------------------
58884  *  Copyright (c) Microsoft Corporation. All rights reserved.
58885  *  Licensed under the MIT License. See License.txt in the project root for license information.
58886  *--------------------------------------------------------------------------------------------*/
58887
58888
58889 function findDocumentHighlights(document, position, htmlDocument) {
58890     var offset = document.offsetAt(position);
58891     var node = htmlDocument.findNodeAt(offset);
58892     if (!node.tag) {
58893         return [];
58894     }
58895     var result = [];
58896     var startTagRange = getTagNameRange(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.StartTag, document, node.start);
58897     var endTagRange = typeof node.endTagStart === 'number' && getTagNameRange(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EndTag, document, node.endTagStart);
58898     if (startTagRange && covers(startTagRange, position) || endTagRange && covers(endTagRange, position)) {
58899         if (startTagRange) {
58900             result.push({ kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.DocumentHighlightKind.Read, range: startTagRange });
58901         }
58902         if (endTagRange) {
58903             result.push({ kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.DocumentHighlightKind.Read, range: endTagRange });
58904         }
58905     }
58906     return result;
58907 }
58908 function isBeforeOrEqual(pos1, pos2) {
58909     return pos1.line < pos2.line || (pos1.line === pos2.line && pos1.character <= pos2.character);
58910 }
58911 function covers(range, position) {
58912     return isBeforeOrEqual(range.start, position) && isBeforeOrEqual(position, range.end);
58913 }
58914 function getTagNameRange(tokenType, document, startOffset) {
58915     var scanner = (0,_parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(document.getText(), startOffset);
58916     var token = scanner.scan();
58917     while (token !== _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOS && token !== tokenType) {
58918         token = scanner.scan();
58919     }
58920     if (token !== _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_1__.TokenType.EOS) {
58921         return { start: document.positionAt(scanner.getTokenOffset()), end: document.positionAt(scanner.getTokenEnd()) };
58922     }
58923     return null;
58924 }
58925
58926
58927 /***/ }),
58928 /* 137 */
58929 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58930
58931 __webpack_require__.r(__webpack_exports__);
58932 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
58933 /* harmony export */   "findDocumentSymbols": () => /* binding */ findDocumentSymbols
58934 /* harmony export */ });
58935 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(117);
58936 /*---------------------------------------------------------------------------------------------
58937  *  Copyright (c) Microsoft Corporation. All rights reserved.
58938  *  Licensed under the MIT License. See License.txt in the project root for license information.
58939  *--------------------------------------------------------------------------------------------*/
58940
58941 function findDocumentSymbols(document, htmlDocument) {
58942     var symbols = [];
58943     htmlDocument.roots.forEach(function (node) {
58944         provideFileSymbolsInternal(document, node, '', symbols);
58945     });
58946     return symbols;
58947 }
58948 function provideFileSymbolsInternal(document, node, container, symbols) {
58949     var name = nodeToName(node);
58950     var location = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Location.create(document.uri, _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Range.create(document.positionAt(node.start), document.positionAt(node.end)));
58951     var symbol = {
58952         name: name,
58953         location: location,
58954         containerName: container,
58955         kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.SymbolKind.Field
58956     };
58957     symbols.push(symbol);
58958     node.children.forEach(function (child) {
58959         provideFileSymbolsInternal(document, child, name, symbols);
58960     });
58961 }
58962 function nodeToName(node) {
58963     var name = node.tag;
58964     if (node.attributes) {
58965         var id = node.attributes['id'];
58966         var classes = node.attributes['class'];
58967         if (id) {
58968             name += "#" + id.replace(/[\"\']/g, '');
58969         }
58970         if (classes) {
58971             name += classes.replace(/[\"\']/g, '').split(/\s+/).map(function (className) { return "." + className; }).join('');
58972         }
58973     }
58974     return name || '?';
58975 }
58976
58977
58978 /***/ }),
58979 /* 138 */
58980 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58981
58982 __webpack_require__.r(__webpack_exports__);
58983 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
58984 /* harmony export */   "doRename": () => /* binding */ doRename
58985 /* harmony export */ });
58986 /*---------------------------------------------------------------------------------------------
58987  *  Copyright (c) Microsoft Corporation. All rights reserved.
58988  *  Licensed under the MIT License. See License.txt in the project root for license information.
58989  *--------------------------------------------------------------------------------------------*/
58990 function doRename(document, position, newName, htmlDocument) {
58991     var _a;
58992     var offset = document.offsetAt(position);
58993     var node = htmlDocument.findNodeAt(offset);
58994     if (!node.tag) {
58995         return null;
58996     }
58997     if (!isWithinTagRange(node, offset, node.tag)) {
58998         return null;
58999     }
59000     var edits = [];
59001     var startTagRange = {
59002         start: document.positionAt(node.start + '<'.length),
59003         end: document.positionAt(node.start + '<'.length + node.tag.length)
59004     };
59005     edits.push({
59006         range: startTagRange,
59007         newText: newName
59008     });
59009     if (node.endTagStart) {
59010         var endTagRange = {
59011             start: document.positionAt(node.endTagStart + '</'.length),
59012             end: document.positionAt(node.endTagStart + '</'.length + node.tag.length)
59013         };
59014         edits.push({
59015             range: endTagRange,
59016             newText: newName
59017         });
59018     }
59019     var changes = (_a = {},
59020         _a[document.uri.toString()] = edits,
59021         _a);
59022     return {
59023         changes: changes
59024     };
59025 }
59026 function toLocString(p) {
59027     return "(" + p.line + ", " + p.character + ")";
59028 }
59029 function isWithinTagRange(node, offset, nodeTag) {
59030     // Self-closing tag
59031     if (node.endTagStart) {
59032         if (node.endTagStart + '</'.length <= offset && offset <= node.endTagStart + '</'.length + nodeTag.length) {
59033             return true;
59034         }
59035     }
59036     return node.start + '<'.length <= offset && offset <= node.start + '<'.length + nodeTag.length;
59037 }
59038
59039
59040 /***/ }),
59041 /* 139 */
59042 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59043
59044 __webpack_require__.r(__webpack_exports__);
59045 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
59046 /* harmony export */   "findMatchingTagPosition": () => /* binding */ findMatchingTagPosition
59047 /* harmony export */ });
59048 /*---------------------------------------------------------------------------------------------
59049  *  Copyright (c) Microsoft Corporation. All rights reserved.
59050  *  Licensed under the MIT License. See License.txt in the project root for license information.
59051  *--------------------------------------------------------------------------------------------*/
59052 function findMatchingTagPosition(document, position, htmlDocument) {
59053     var offset = document.offsetAt(position);
59054     var node = htmlDocument.findNodeAt(offset);
59055     if (!node.tag) {
59056         return null;
59057     }
59058     if (!node.endTagStart) {
59059         return null;
59060     }
59061     // Within open tag, compute close tag
59062     if (node.start + '<'.length <= offset && offset <= node.start + '<'.length + node.tag.length) {
59063         var mirrorOffset = (offset - '<'.length - node.start) + node.endTagStart + '</'.length;
59064         return document.positionAt(mirrorOffset);
59065     }
59066     // Within closing tag, compute open tag
59067     if (node.endTagStart + '</'.length <= offset && offset <= node.endTagStart + '</'.length + node.tag.length) {
59068         var mirrorOffset = (offset - '</'.length - node.endTagStart) + node.start + '<'.length;
59069         return document.positionAt(mirrorOffset);
59070     }
59071     return null;
59072 }
59073
59074
59075 /***/ }),
59076 /* 140 */
59077 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59078
59079 __webpack_require__.r(__webpack_exports__);
59080 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
59081 /* harmony export */   "findLinkedEditingRanges": () => /* binding */ findLinkedEditingRanges
59082 /* harmony export */ });
59083 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(117);
59084 /*---------------------------------------------------------------------------------------------
59085  *  Copyright (c) Microsoft Corporation. All rights reserved.
59086  *  Licensed under the MIT License. See License.txt in the project root for license information.
59087  *--------------------------------------------------------------------------------------------*/
59088
59089 function findLinkedEditingRanges(document, position, htmlDocument) {
59090     var offset = document.offsetAt(position);
59091     var node = htmlDocument.findNodeAt(offset);
59092     var tagLength = node.tag ? node.tag.length : 0;
59093     if (!node.endTagStart) {
59094         return null;
59095     }
59096     if (
59097     // Within open tag, compute close tag
59098     (node.start + '<'.length <= offset && offset <= node.start + '<'.length + tagLength) ||
59099         // Within closing tag, compute open tag
59100         node.endTagStart + '</'.length <= offset && offset <= node.endTagStart + '</'.length + tagLength) {
59101         return [
59102             _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Range.create(document.positionAt(node.start + '<'.length), document.positionAt(node.start + '<'.length + tagLength)),
59103             _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.Range.create(document.positionAt(node.endTagStart + '</'.length), document.positionAt(node.endTagStart + '</'.length + tagLength))
59104         ];
59105     }
59106     return null;
59107 }
59108
59109
59110 /***/ }),
59111 /* 141 */
59112 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59113
59114 __webpack_require__.r(__webpack_exports__);
59115 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
59116 /* harmony export */   "getFoldingRanges": () => /* binding */ getFoldingRanges
59117 /* harmony export */ });
59118 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(117);
59119 /* harmony import */ var _parser_htmlScanner__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(116);
59120 /* harmony import */ var _languageFacts_fact__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(121);
59121 /*---------------------------------------------------------------------------------------------
59122  *  Copyright (c) Microsoft Corporation. All rights reserved.
59123  *  Licensed under the MIT License. See License.txt in the project root for license information.
59124  *--------------------------------------------------------------------------------------------*/
59125
59126
59127
59128 function limitRanges(ranges, rangeLimit) {
59129     ranges = ranges.sort(function (r1, r2) {
59130         var diff = r1.startLine - r2.startLine;
59131         if (diff === 0) {
59132             diff = r1.endLine - r2.endLine;
59133         }
59134         return diff;
59135     });
59136     // compute each range's nesting level in 'nestingLevels'.
59137     // count the number of ranges for each level in 'nestingLevelCounts'
59138     var top = void 0;
59139     var previous = [];
59140     var nestingLevels = [];
59141     var nestingLevelCounts = [];
59142     var setNestingLevel = function (index, level) {
59143         nestingLevels[index] = level;
59144         if (level < 30) {
59145             nestingLevelCounts[level] = (nestingLevelCounts[level] || 0) + 1;
59146         }
59147     };
59148     // compute nesting levels and sanitize
59149     for (var i = 0; i < ranges.length; i++) {
59150         var entry = ranges[i];
59151         if (!top) {
59152             top = entry;
59153             setNestingLevel(i, 0);
59154         }
59155         else {
59156             if (entry.startLine > top.startLine) {
59157                 if (entry.endLine <= top.endLine) {
59158                     previous.push(top);
59159                     top = entry;
59160                     setNestingLevel(i, previous.length);
59161                 }
59162                 else if (entry.startLine > top.endLine) {
59163                     do {
59164                         top = previous.pop();
59165                     } while (top && entry.startLine > top.endLine);
59166                     if (top) {
59167                         previous.push(top);
59168                     }
59169                     top = entry;
59170                     setNestingLevel(i, previous.length);
59171                 }
59172             }
59173         }
59174     }
59175     var entries = 0;
59176     var maxLevel = 0;
59177     for (var i = 0; i < nestingLevelCounts.length; i++) {
59178         var n = nestingLevelCounts[i];
59179         if (n) {
59180             if (n + entries > rangeLimit) {
59181                 maxLevel = i;
59182                 break;
59183             }
59184             entries += n;
59185         }
59186     }
59187     var result = [];
59188     for (var i = 0; i < ranges.length; i++) {
59189         var level = nestingLevels[i];
59190         if (typeof level === 'number') {
59191             if (level < maxLevel || (level === maxLevel && entries++ < rangeLimit)) {
59192                 result.push(ranges[i]);
59193             }
59194         }
59195     }
59196     return result;
59197 }
59198 function getFoldingRanges(document, context) {
59199     var scanner = (0,_parser_htmlScanner__WEBPACK_IMPORTED_MODULE_1__.createScanner)(document.getText());
59200     var token = scanner.scan();
59201     var ranges = [];
59202     var stack = [];
59203     var lastTagName = null;
59204     var prevStart = -1;
59205     function addRange(range) {
59206         ranges.push(range);
59207         prevStart = range.startLine;
59208     }
59209     while (token !== _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TokenType.EOS) {
59210         switch (token) {
59211             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TokenType.StartTag: {
59212                 var tagName = scanner.getTokenText();
59213                 var startLine = document.positionAt(scanner.getTokenOffset()).line;
59214                 stack.push({ startLine: startLine, tagName: tagName });
59215                 lastTagName = tagName;
59216                 break;
59217             }
59218             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TokenType.EndTag: {
59219                 lastTagName = scanner.getTokenText();
59220                 break;
59221             }
59222             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TokenType.StartTagClose:
59223                 if (!lastTagName || !(0,_languageFacts_fact__WEBPACK_IMPORTED_MODULE_2__.isVoidElement)(lastTagName)) {
59224                     break;
59225                 }
59226             // fallthrough
59227             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TokenType.EndTagClose:
59228             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TokenType.StartTagSelfClose: {
59229                 var i = stack.length - 1;
59230                 while (i >= 0 && stack[i].tagName !== lastTagName) {
59231                     i--;
59232                 }
59233                 if (i >= 0) {
59234                     var stackElement = stack[i];
59235                     stack.length = i;
59236                     var line = document.positionAt(scanner.getTokenOffset()).line;
59237                     var startLine = stackElement.startLine;
59238                     var endLine = line - 1;
59239                     if (endLine > startLine && prevStart !== startLine) {
59240                         addRange({ startLine: startLine, endLine: endLine });
59241                     }
59242                 }
59243                 break;
59244             }
59245             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.TokenType.Comment: {
59246                 var startLine = document.positionAt(scanner.getTokenOffset()).line;
59247                 var text = scanner.getTokenText();
59248                 var m = text.match(/^\s*#(region\b)|(endregion\b)/);
59249                 if (m) {
59250                     if (m[1]) { // start pattern match
59251                         stack.push({ startLine: startLine, tagName: '' }); // empty tagName marks region
59252                     }
59253                     else {
59254                         var i = stack.length - 1;
59255                         while (i >= 0 && stack[i].tagName.length) {
59256                             i--;
59257                         }
59258                         if (i >= 0) {
59259                             var stackElement = stack[i];
59260                             stack.length = i;
59261                             var endLine = startLine;
59262                             startLine = stackElement.startLine;
59263                             if (endLine > startLine && prevStart !== startLine) {
59264                                 addRange({ startLine: startLine, endLine: endLine, kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.FoldingRangeKind.Region });
59265                             }
59266                         }
59267                     }
59268                 }
59269                 else {
59270                     var endLine = document.positionAt(scanner.getTokenOffset() + scanner.getTokenLength()).line;
59271                     if (startLine < endLine) {
59272                         addRange({ startLine: startLine, endLine: endLine, kind: _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_0__.FoldingRangeKind.Comment });
59273                     }
59274                 }
59275                 break;
59276             }
59277         }
59278         token = scanner.scan();
59279     }
59280     var rangeLimit = context && context.rangeLimit || Number.MAX_VALUE;
59281     if (ranges.length > rangeLimit) {
59282         return limitRanges(ranges, rangeLimit);
59283     }
59284     return ranges;
59285 }
59286
59287
59288 /***/ }),
59289 /* 142 */
59290 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59291
59292 __webpack_require__.r(__webpack_exports__);
59293 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
59294 /* harmony export */   "getSelectionRanges": () => /* binding */ getSelectionRanges
59295 /* harmony export */ });
59296 /* harmony import */ var _parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(116);
59297 /* harmony import */ var _parser_htmlParser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(119);
59298 /* harmony import */ var _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(117);
59299 /*---------------------------------------------------------------------------------------------
59300  *  Copyright (c) Microsoft Corporation. All rights reserved.
59301  *  Licensed under the MIT License. See License.txt in the project root for license information.
59302  *--------------------------------------------------------------------------------------------*/
59303
59304
59305
59306 function getSelectionRanges(document, positions) {
59307     function getSelectionRange(position) {
59308         var applicableRanges = getApplicableRanges(document, position);
59309         var prev = undefined;
59310         var current = undefined;
59311         for (var index = applicableRanges.length - 1; index >= 0; index--) {
59312             var range = applicableRanges[index];
59313             if (!prev || range[0] !== prev[0] || range[1] !== prev[1]) {
59314                 current = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.SelectionRange.create(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.Range.create(document.positionAt(applicableRanges[index][0]), document.positionAt(applicableRanges[index][1])), current);
59315             }
59316             prev = range;
59317         }
59318         if (!current) {
59319             current = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.SelectionRange.create(_htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.Range.create(position, position));
59320         }
59321         return current;
59322     }
59323     return positions.map(getSelectionRange);
59324 }
59325 function getApplicableRanges(document, position) {
59326     var htmlDoc = (0,_parser_htmlParser__WEBPACK_IMPORTED_MODULE_1__.parse)(document.getText());
59327     var currOffset = document.offsetAt(position);
59328     var currNode = htmlDoc.findNodeAt(currOffset);
59329     var result = getAllParentTagRanges(currNode);
59330     // Self-closing or void elements
59331     if (currNode.startTagEnd && !currNode.endTagStart) {
59332         // THe rare case of unmatching tag pairs like <div></div1>
59333         if (currNode.startTagEnd !== currNode.end) {
59334             return [[currNode.start, currNode.end]];
59335         }
59336         var closeRange = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.Range.create(document.positionAt(currNode.startTagEnd - 2), document.positionAt(currNode.startTagEnd));
59337         var closeText = document.getText(closeRange);
59338         // Self-closing element
59339         if (closeText === '/>') {
59340             result.unshift([currNode.start + 1, currNode.startTagEnd - 2]);
59341         }
59342         // Void element
59343         else {
59344             result.unshift([currNode.start + 1, currNode.startTagEnd - 1]);
59345         }
59346         var attributeLevelRanges = getAttributeLevelRanges(document, currNode, currOffset);
59347         result = attributeLevelRanges.concat(result);
59348         return result;
59349     }
59350     if (!currNode.startTagEnd || !currNode.endTagStart) {
59351         return result;
59352     }
59353     /**
59354      * For html like
59355      * `<div class="foo">bar</div>`
59356      */
59357     result.unshift([currNode.start, currNode.end]);
59358     /**
59359      * Cursor inside `<div class="foo">`
59360      */
59361     if (currNode.start < currOffset && currOffset < currNode.startTagEnd) {
59362         result.unshift([currNode.start + 1, currNode.startTagEnd - 1]);
59363         var attributeLevelRanges = getAttributeLevelRanges(document, currNode, currOffset);
59364         result = attributeLevelRanges.concat(result);
59365         return result;
59366     }
59367     /**
59368      * Cursor inside `bar`
59369      */
59370     else if (currNode.startTagEnd <= currOffset && currOffset <= currNode.endTagStart) {
59371         result.unshift([currNode.startTagEnd, currNode.endTagStart]);
59372         return result;
59373     }
59374     /**
59375      * Cursor inside `</div>`
59376      */
59377     else {
59378         // `div` inside `</div>`
59379         if (currOffset >= currNode.endTagStart + 2) {
59380             result.unshift([currNode.endTagStart + 2, currNode.end - 1]);
59381         }
59382         return result;
59383     }
59384 }
59385 function getAllParentTagRanges(initialNode) {
59386     var currNode = initialNode;
59387     var getNodeRanges = function (n) {
59388         if (n.startTagEnd && n.endTagStart && n.startTagEnd < n.endTagStart) {
59389             return [
59390                 [n.startTagEnd, n.endTagStart],
59391                 [n.start, n.end]
59392             ];
59393         }
59394         return [
59395             [n.start, n.end]
59396         ];
59397     };
59398     var result = [];
59399     while (currNode.parent) {
59400         currNode = currNode.parent;
59401         getNodeRanges(currNode).forEach(function (r) { return result.push(r); });
59402     }
59403     return result;
59404 }
59405 function getAttributeLevelRanges(document, currNode, currOffset) {
59406     var currNodeRange = _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.Range.create(document.positionAt(currNode.start), document.positionAt(currNode.end));
59407     var currNodeText = document.getText(currNodeRange);
59408     var relativeOffset = currOffset - currNode.start;
59409     /**
59410      * Tag level semantic selection
59411      */
59412     var scanner = (0,_parser_htmlScanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(currNodeText);
59413     var token = scanner.scan();
59414     /**
59415      * For text like
59416      * <div class="foo">bar</div>
59417      */
59418     var positionOffset = currNode.start;
59419     var result = [];
59420     var isInsideAttribute = false;
59421     var attrStart = -1;
59422     while (token !== _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.EOS) {
59423         switch (token) {
59424             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.AttributeName: {
59425                 if (relativeOffset < scanner.getTokenOffset()) {
59426                     isInsideAttribute = false;
59427                     break;
59428                 }
59429                 if (relativeOffset <= scanner.getTokenEnd()) {
59430                     // `class`
59431                     result.unshift([scanner.getTokenOffset(), scanner.getTokenEnd()]);
59432                 }
59433                 isInsideAttribute = true;
59434                 attrStart = scanner.getTokenOffset();
59435                 break;
59436             }
59437             case _htmlLanguageTypes__WEBPACK_IMPORTED_MODULE_2__.TokenType.AttributeValue: {
59438                 if (!isInsideAttribute) {
59439                     break;
59440                 }
59441                 var valueText = scanner.getTokenText();
59442                 if (relativeOffset < scanner.getTokenOffset()) {
59443                     // `class="foo"`
59444                     result.push([attrStart, scanner.getTokenEnd()]);
59445                     break;
59446                 }
59447                 if (relativeOffset >= scanner.getTokenOffset() && relativeOffset <= scanner.getTokenEnd()) {
59448                     // `"foo"`
59449                     result.unshift([scanner.getTokenOffset(), scanner.getTokenEnd()]);
59450                     // `foo`
59451                     if ((valueText[0] === "\"" && valueText[valueText.length - 1] === "\"") || (valueText[0] === "'" && valueText[valueText.length - 1] === "'")) {
59452                         if (relativeOffset >= scanner.getTokenOffset() + 1 && relativeOffset <= scanner.getTokenEnd() - 1) {
59453                             result.unshift([scanner.getTokenOffset() + 1, scanner.getTokenEnd() - 1]);
59454                         }
59455                     }
59456                     // `class="foo"`
59457                     result.push([attrStart, scanner.getTokenEnd()]);
59458                 }
59459                 break;
59460             }
59461         }
59462         token = scanner.scan();
59463     }
59464     return result.map(function (pair) {
59465         return [pair[0] + positionOffset, pair[1] + positionOffset];
59466     });
59467 }
59468
59469
59470 /***/ }),
59471 /* 143 */
59472 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59473
59474 __webpack_require__.r(__webpack_exports__);
59475 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
59476 /* harmony export */   "HTMLDataManager": () => /* binding */ HTMLDataManager
59477 /* harmony export */ });
59478 /* harmony import */ var _dataProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(126);
59479 /* harmony import */ var _data_webCustomData__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(144);
59480 /*---------------------------------------------------------------------------------------------
59481  *  Copyright (c) Microsoft Corporation. All rights reserved.
59482  *  Licensed under the MIT License. See License.txt in the project root for license information.
59483  *--------------------------------------------------------------------------------------------*/
59484
59485
59486 var HTMLDataManager = /** @class */ (function () {
59487     function HTMLDataManager(options) {
59488         this.dataProviders = [];
59489         this.setDataProviders(options.useDefaultDataProvider !== false, options.customDataProviders || []);
59490     }
59491     HTMLDataManager.prototype.setDataProviders = function (builtIn, providers) {
59492         var _a;
59493         this.dataProviders = [];
59494         if (builtIn) {
59495             this.dataProviders.push(new _dataProvider__WEBPACK_IMPORTED_MODULE_0__.HTMLDataProvider('html5', _data_webCustomData__WEBPACK_IMPORTED_MODULE_1__.htmlData));
59496         }
59497         (_a = this.dataProviders).push.apply(_a, providers);
59498     };
59499     HTMLDataManager.prototype.getDataProviders = function () {
59500         return this.dataProviders;
59501     };
59502     return HTMLDataManager;
59503 }());
59504
59505
59506
59507 /***/ }),
59508 /* 144 */
59509 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59510
59511 __webpack_require__.r(__webpack_exports__);
59512 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
59513 /* harmony export */   "htmlData": () => /* binding */ htmlData
59514 /* harmony export */ });
59515 /*---------------------------------------------------------------------------------------------
59516  *  Copyright (c) Microsoft Corporation. All rights reserved.
59517  *  Licensed under the MIT License. See License.txt in the project root for license information.
59518  *--------------------------------------------------------------------------------------------*/
59519 // file generated from vscode-web-custom-data NPM package
59520 var htmlData = {
59521     "version": 1.1,
59522     "tags": [
59523         {
59524             "name": "html",
59525             "description": {
59526                 "kind": "markdown",
59527                 "value": "The html element represents the root of an HTML document."
59528             },
59529             "attributes": [
59530                 {
59531                     "name": "manifest",
59532                     "description": {
59533                         "kind": "markdown",
59534                         "value": "Specifies the URI of a resource manifest indicating resources that should be cached locally. See [Using the application cache](https://developer.mozilla.org/en-US/docs/Web/HTML/Using_the_application_cache) for details."
59535                     }
59536                 },
59537                 {
59538                     "name": "version",
59539                     "description": "Specifies the version of the HTML [Document Type Definition](https://developer.mozilla.org/en-US/docs/Glossary/DTD \"Document Type Definition: In HTML, the doctype is the required \"<!DOCTYPE html>\" preamble found at the top of all documents. Its sole purpose is to prevent a browser from switching into so-called “quirks mode” when rendering a document; that is, the \"<!DOCTYPE html>\" doctype ensures that the browser makes a best-effort attempt at following the relevant specifications, rather than using a different rendering mode that is incompatible with some specifications.\") that governs the current document. This attribute is not needed, because it is redundant with the version information in the document type declaration."
59540                 },
59541                 {
59542                     "name": "xmlns",
59543                     "description": "Specifies the XML Namespace of the document. Default value is `\"http://www.w3.org/1999/xhtml\"`. This is required in documents parsed with XML parsers, and optional in text/html documents."
59544                 }
59545             ],
59546             "references": [
59547                 {
59548                     "name": "MDN Reference",
59549                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/html"
59550                 }
59551             ]
59552         },
59553         {
59554             "name": "head",
59555             "description": {
59556                 "kind": "markdown",
59557                 "value": "The head element represents a collection of metadata for the Document."
59558             },
59559             "attributes": [
59560                 {
59561                     "name": "profile",
59562                     "description": "The URIs of one or more metadata profiles, separated by white space."
59563                 }
59564             ],
59565             "references": [
59566                 {
59567                     "name": "MDN Reference",
59568                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/head"
59569                 }
59570             ]
59571         },
59572         {
59573             "name": "title",
59574             "description": {
59575                 "kind": "markdown",
59576                 "value": "The title element represents the document's title or name. Authors should use titles that identify their documents even when they are used out of context, for example in a user's history or bookmarks, or in search results. The document's title is often different from its first heading, since the first heading does not have to stand alone when taken out of context."
59577             },
59578             "attributes": [],
59579             "references": [
59580                 {
59581                     "name": "MDN Reference",
59582                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/title"
59583                 }
59584             ]
59585         },
59586         {
59587             "name": "base",
59588             "description": {
59589                 "kind": "markdown",
59590                 "value": "The base element allows authors to specify the document base URL for the purposes of resolving relative URLs, and the name of the default browsing context for the purposes of following hyperlinks. The element does not represent any content beyond this information."
59591             },
59592             "attributes": [
59593                 {
59594                     "name": "href",
59595                     "description": {
59596                         "kind": "markdown",
59597                         "value": "The base URL to be used throughout the document for relative URL addresses. If this attribute is specified, this element must come before any other elements with attributes whose values are URLs. Absolute and relative URLs are allowed."
59598                     }
59599                 },
59600                 {
59601                     "name": "target",
59602                     "description": {
59603                         "kind": "markdown",
59604                         "value": "A name or keyword indicating the default location to display the result when hyperlinks or forms cause navigation, for elements that do not have an explicit target reference. It is a name of, or keyword for, a _browsing context_ (for example: tab, window, or inline frame). The following keywords have special meanings:\n\n*   `_self`: Load the result into the same browsing context as the current one. This value is the default if the attribute is not specified.\n*   `_blank`: Load the result into a new unnamed browsing context.\n*   `_parent`: Load the result into the parent browsing context of the current one. If there is no parent, this option behaves the same way as `_self`.\n*   `_top`: Load the result into the top-level browsing context (that is, the browsing context that is an ancestor of the current one, and has no parent). If there is no parent, this option behaves the same way as `_self`.\n\nIf this attribute is specified, this element must come before any other elements with attributes whose values are URLs."
59605                     }
59606                 }
59607             ],
59608             "references": [
59609                 {
59610                     "name": "MDN Reference",
59611                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/base"
59612                 }
59613             ]
59614         },
59615         {
59616             "name": "link",
59617             "description": {
59618                 "kind": "markdown",
59619                 "value": "The link element allows authors to link their document to other resources."
59620             },
59621             "attributes": [
59622                 {
59623                     "name": "href",
59624                     "description": {
59625                         "kind": "markdown",
59626                         "value": "This attribute specifies the [URL](https://developer.mozilla.org/en-US/docs/Glossary/URL \"URL: Uniform Resource Locator (URL) is a text string specifying where a resource can be found on the Internet.\") of the linked resource. A URL can be absolute or relative."
59627                     }
59628                 },
59629                 {
59630                     "name": "crossorigin",
59631                     "valueSet": "xo",
59632                     "description": {
59633                         "kind": "markdown",
59634                         "value": "This enumerated attribute indicates whether [CORS](https://developer.mozilla.org/en-US/docs/Glossary/CORS \"CORS: CORS (Cross-Origin Resource Sharing) is a system, consisting of transmitting HTTP headers, that determines whether browsers block frontend JavaScript code from accessing responses for cross-origin requests.\") must be used when fetching the resource. [CORS-enabled images](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_Enabled_Image) can be reused in the [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas \"Use the HTML <canvas> element with either the canvas scripting API or the WebGL API to draw graphics and animations.\") element without being _tainted_. The allowed values are:\n\n`anonymous`\n\nA cross-origin request (i.e. with an [`Origin`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin \"The Origin request header indicates where a fetch originates from. It doesn't include any path information, but only the server name. It is sent with CORS requests, as well as with POST requests. It is similar to the Referer header, but, unlike this header, it doesn't disclose the whole path.\") HTTP header) is performed, but no credential is sent (i.e. no cookie, X.509 certificate, or HTTP Basic authentication). If the server does not give credentials to the origin site (by not setting the [`Access-Control-Allow-Origin`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin \"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given origin.\") HTTP header) the image will be tainted and its usage restricted.\n\n`use-credentials`\n\nA cross-origin request (i.e. with an `Origin` HTTP header) is performed along with a credential sent (i.e. a cookie, certificate, and/or HTTP Basic authentication is performed). If the server does not give credentials to the origin site (through [`Access-Control-Allow-Credentials`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials \"The Access-Control-Allow-Credentials response header tells browsers whether to expose the response to frontend JavaScript code when the request's credentials mode (Request.credentials) is \"include\".\") HTTP header), the resource will be _tainted_ and its usage restricted.\n\nIf the attribute is not present, the resource is fetched without a [CORS](https://developer.mozilla.org/en-US/docs/Glossary/CORS \"CORS: CORS (Cross-Origin Resource Sharing) is a system, consisting of transmitting HTTP headers, that determines whether browsers block frontend JavaScript code from accessing responses for cross-origin requests.\") request (i.e. without sending the `Origin` HTTP header), preventing its non-tainted usage. If invalid, it is handled as if the enumerated keyword **anonymous** was used. See [CORS settings attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for additional information."
59635                     }
59636                 },
59637                 {
59638                     "name": "rel",
59639                     "description": {
59640                         "kind": "markdown",
59641                         "value": "This attribute names a relationship of the linked document to the current document. The attribute must be a space-separated list of the [link types values](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types)."
59642                     }
59643                 },
59644                 {
59645                     "name": "media",
59646                     "description": {
59647                         "kind": "markdown",
59648                         "value": "This attribute specifies the media that the linked resource applies to. Its value must be a media type / [media query](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_queries). This attribute is mainly useful when linking to external stylesheets — it allows the user agent to pick the best adapted one for the device it runs on.\n\n**Notes:**\n\n*   In HTML 4, this can only be a simple white-space-separated list of media description literals, i.e., [media types and groups](https://developer.mozilla.org/en-US/docs/Web/CSS/@media), where defined and allowed as values for this attribute, such as `print`, `screen`, `aural`, `braille`. HTML5 extended this to any kind of [media queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_queries), which are a superset of the allowed values of HTML 4.\n*   Browsers not supporting [CSS3 Media Queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_queries) won't necessarily recognize the adequate link; do not forget to set fallback links, the restricted set of media queries defined in HTML 4."
59649                     }
59650                 },
59651                 {
59652                     "name": "hreflang",
59653                     "description": {
59654                         "kind": "markdown",
59655                         "value": "This attribute indicates the language of the linked resource. It is purely advisory. Allowed values are determined by [BCP47](https://www.ietf.org/rfc/bcp/bcp47.txt). Use this attribute only if the [`href`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-href) attribute is present."
59656                     }
59657                 },
59658                 {
59659                     "name": "type",
59660                     "description": {
59661                         "kind": "markdown",
59662                         "value": "This attribute is used to define the type of the content linked to. The value of the attribute should be a MIME type such as **text/html**, **text/css**, and so on. The common use of this attribute is to define the type of stylesheet being referenced (such as **text/css**), but given that CSS is the only stylesheet language used on the web, not only is it possible to omit the `type` attribute, but is actually now recommended practice. It is also used on `rel=\"preload\"` link types, to make sure the browser only downloads file types that it supports."
59663                     }
59664                 },
59665                 {
59666                     "name": "sizes",
59667                     "description": {
59668                         "kind": "markdown",
59669                         "value": "This attribute defines the sizes of the icons for visual media contained in the resource. It must be present only if the [`rel`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link#attr-rel) contains a value of `icon` or a non-standard type such as Apple's `apple-touch-icon`. It may have the following values:\n\n*   `any`, meaning that the icon can be scaled to any size as it is in a vector format, like `image/svg+xml`.\n*   a white-space separated list of sizes, each in the format `_<width in pixels>_x_<height in pixels>_` or `_<width in pixels>_X_<height in pixels>_`. Each of these sizes must be contained in the resource.\n\n**Note:** Most icon formats are only able to store one single icon; therefore most of the time the [`sizes`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-sizes) contains only one entry. MS's ICO format does, as well as Apple's ICNS. ICO is more ubiquitous; you should definitely use it."
59670                     }
59671                 },
59672                 {
59673                     "name": "as",
59674                     "description": "This attribute is only used when `rel=\"preload\"` or `rel=\"prefetch\"` has been set on the `<link>` element. It specifies the type of content being loaded by the `<link>`, which is necessary for content prioritization, request matching, application of correct [content security policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP), and setting of correct [`Accept`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept \"The Accept request HTTP header advertises which content types, expressed as MIME types, the client is able to understand. Using content negotiation, the server then selects one of the proposals, uses it and informs the client of its choice with the Content-Type response header. Browsers set adequate values for this header depending on the context where the request is done: when fetching a CSS stylesheet a different value is set for the request than when fetching an image, video or a script.\") request header."
59675                 },
59676                 {
59677                     "name": "importance",
59678                     "description": "Indicates the relative importance of the resource. Priority hints are delegated using the values:"
59679                 },
59680                 {
59681                     "name": "importance",
59682                     "description": "**`auto`**: Indicates **no preference**. The browser may use its own heuristics to decide the priority of the resource.\n\n**`high`**: Indicates to the browser that the resource is of **high** priority.\n\n**`low`**: Indicates to the browser that the resource is of **low** priority.\n\n**Note:** The `importance` attribute may only be used for the `<link>` element if `rel=\"preload\"` or `rel=\"prefetch\"` is present."
59683                 },
59684                 {
59685                     "name": "integrity",
59686                     "description": "Contains inline metadata — a base64-encoded cryptographic hash of the resource (file) you’re telling the browser to fetch. The browser can use this to verify that the fetched resource has been delivered free of unexpected manipulation. See [Subresource Integrity](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity)."
59687                 },
59688                 {
59689                     "name": "referrerpolicy",
59690                     "description": "A string indicating which referrer to use when fetching the resource:\n\n*   `no-referrer` means that the [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will not be sent.\n*   `no-referrer-when-downgrade` means that no [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will be sent when navigating to an origin without TLS (HTTPS). This is a user agent’s default behavior, if no policy is otherwise specified.\n*   `origin` means that the referrer will be the origin of the page, which is roughly the scheme, the host, and the port.\n*   `origin-when-cross-origin` means that navigating to other origins will be limited to the scheme, the host, and the port, while navigating on the same origin will include the referrer's path.\n*   `unsafe-url` means that the referrer will include the origin and the path (but not the fragment, password, or username). This case is unsafe because it can leak origins and paths from TLS-protected resources to insecure origins."
59691                 },
59692                 {
59693                     "name": "title",
59694                     "description": "The `title` attribute has special semantics on the `<link>` element. When used on a `<link rel=\"stylesheet\">` it defines a [preferred or an alternate stylesheet](https://developer.mozilla.org/en-US/docs/Web/CSS/Alternative_style_sheets). Incorrectly using it may [cause the stylesheet to be ignored](https://developer.mozilla.org/en-US/docs/Correctly_Using_Titles_With_External_Stylesheets)."
59695                 }
59696             ],
59697             "references": [
59698                 {
59699                     "name": "MDN Reference",
59700                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/link"
59701                 }
59702             ]
59703         },
59704         {
59705             "name": "meta",
59706             "description": {
59707                 "kind": "markdown",
59708                 "value": "The meta element represents various kinds of metadata that cannot be expressed using the title, base, link, style, and script elements."
59709             },
59710             "attributes": [
59711                 {
59712                     "name": "name",
59713                     "description": {
59714                         "kind": "markdown",
59715                         "value": "This attribute defines the name of a piece of document-level metadata. It should not be set if one of the attributes [`itemprop`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-itemprop), [`http-equiv`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-http-equiv) or [`charset`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-charset) is also set.\n\nThis metadata name is associated with the value contained by the [`content`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-content) attribute. The possible values for the name attribute are:\n\n*   `application-name` which defines the name of the application running in the web page.\n    \n    **Note:**\n    \n    *   Browsers may use this to identify the application. It is different from the [`<title>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title \"The HTML Title element (<title>) defines the document's title that is shown in a browser's title bar or a page's tab.\") element, which usually contain the application name, but may also contain information like the document name or a status.\n    *   Simple web pages shouldn't define an application-name.\n    \n*   `author` which defines the name of the document's author.\n*   `description` which contains a short and accurate summary of the content of the page. Several browsers, like Firefox and Opera, use this as the default description of bookmarked pages.\n*   `generator` which contains the identifier of the software that generated the page.\n*   `keywords` which contains words relevant to the page's content separated by commas.\n*   `referrer` which controls the [`Referer` HTTP header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer) attached to requests sent from the document:\n    \n    Values for the `content` attribute of `<meta name=\"referrer\">`\n    \n    `no-referrer`\n    \n    Do not send a HTTP `Referrer` header.\n    \n    `origin`\n    \n    Send the [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin) of the document.\n    \n    `no-referrer-when-downgrade`\n    \n    Send the [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin) as a referrer to URLs as secure as the current page, (https→https), but does not send a referrer to less secure URLs (https→http). This is the default behaviour.\n    \n    `origin-when-cross-origin`\n    \n    Send the full URL (stripped of parameters) for same-origin requests, but only send the [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin) for other cases.\n    \n    `same-origin`\n    \n    A referrer will be sent for [same-site origins](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy), but cross-origin requests will contain no referrer information.\n    \n    `strict-origin`\n    \n    Only send the origin of the document as the referrer to a-priori as-much-secure destination (HTTPS->HTTPS), but don't send it to a less secure destination (HTTPS->HTTP).\n    \n    `strict-origin-when-cross-origin`\n    \n    Send a full URL when performing a same-origin request, only send the origin of the document to a-priori as-much-secure destination (HTTPS->HTTPS), and send no header to a less secure destination (HTTPS->HTTP).\n    \n    `unsafe-URL`\n    \n    Send the full URL (stripped of parameters) for same-origin or cross-origin requests.\n    \n    **Notes:**\n    \n    *   Some browsers support the deprecated values of `always`, `default`, and `never` for referrer.\n    *   Dynamically inserting `<meta name=\"referrer\">` (with [`document.write`](https://developer.mozilla.org/en-US/docs/Web/API/Document/write) or [`appendChild`](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild)) makes the referrer behaviour unpredictable.\n    *   When several conflicting policies are defined, the no-referrer policy is applied.\n    \n\nThis attribute may also have a value taken from the extended list defined on [WHATWG Wiki MetaExtensions page](https://wiki.whatwg.org/wiki/MetaExtensions). Although none have been formally accepted yet, a few commonly used names are:\n\n*   `creator` which defines the name of the creator of the document, such as an organization or institution. If there are more than one, several [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta \"The HTML <meta> element represents metadata that cannot be represented by other HTML meta-related elements, like <base>, <link>, <script>, <style> or <title>.\") elements should be used.\n*   `googlebot`, a synonym of `robots`, is only followed by Googlebot (the indexing crawler for Google).\n*   `publisher` which defines the name of the document's publisher.\n*   `robots` which defines the behaviour that cooperative crawlers, or \"robots\", should use with the page. It is a comma-separated list of the values below:\n    \n    Values for the content of `<meta name=\"robots\">`\n    \n    Value\n    \n    Description\n    \n    Used by\n    \n    `index`\n    \n    Allows the robot to index the page (default).\n    \n    All\n    \n    `noindex`\n    \n    Requests the robot to not index the page.\n    \n    All\n    \n    `follow`\n    \n    Allows the robot to follow the links on the page (default).\n    \n    All\n    \n    `nofollow`\n    \n    Requests the robot to not follow the links on the page.\n    \n    All\n    \n    `none`\n    \n    Equivalent to `noindex, nofollow`\n    \n    [Google](https://support.google.com/webmasters/answer/79812)\n    \n    `noodp`\n    \n    Prevents using the [Open Directory Project](https://www.dmoz.org/) description, if any, as the page description in search engine results.\n    \n    [Google](https://support.google.com/webmasters/answer/35624#nodmoz), [Yahoo](https://help.yahoo.com/kb/search-for-desktop/meta-tags-robotstxt-yahoo-search-sln2213.html#cont5), [Bing](https://www.bing.com/webmaster/help/which-robots-metatags-does-bing-support-5198d240)\n    \n    `noarchive`\n    \n    Requests the search engine not to cache the page content.\n    \n    [Google](https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag#valid-indexing--serving-directives), [Yahoo](https://help.yahoo.com/kb/search-for-desktop/SLN2213.html), [Bing](https://www.bing.com/webmaster/help/which-robots-metatags-does-bing-support-5198d240)\n    \n    `nosnippet`\n    \n    Prevents displaying any description of the page in search engine results.\n    \n    [Google](https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag#valid-indexing--serving-directives), [Bing](https://www.bing.com/webmaster/help/which-robots-metatags-does-bing-support-5198d240)\n    \n    `noimageindex`\n    \n    Requests this page not to appear as the referring page of an indexed image.\n    \n    [Google](https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag#valid-indexing--serving-directives)\n    \n    `nocache`\n    \n    Synonym of `noarchive`.\n    \n    [Bing](https://www.bing.com/webmaster/help/which-robots-metatags-does-bing-support-5198d240)\n    \n    **Notes:**\n    \n    *   Only cooperative robots follow these rules. Do not expect to prevent e-mail harvesters with them.\n    *   The robot still needs to access the page in order to read these rules. To prevent bandwidth consumption, use a _[robots.txt](https://developer.mozilla.org/en-US/docs/Glossary/robots.txt \"robots.txt: Robots.txt is a file which is usually placed in the root of any website. It decides whether crawlers are permitted or forbidden access to the web site.\")_ file.\n    *   If you want to remove a page, `noindex` will work, but only after the robot visits the page again. Ensure that the `robots.txt` file is not preventing revisits.\n    *   Some values are mutually exclusive, like `index` and `noindex`, or `follow` and `nofollow`. In these cases the robot's behaviour is undefined and may vary between them.\n    *   Some crawler robots, like Google, Yahoo and Bing, support the same values for the HTTP header `X-Robots-Tag`; this allows non-HTML documents like images to use these rules.\n    \n*   `slurp`, is a synonym of `robots`, but only for Slurp - the crawler for Yahoo Search.\n*   `viewport`, which gives hints about the size of the initial size of the [viewport](https://developer.mozilla.org/en-US/docs/Glossary/viewport \"viewport: A viewport represents a polygonal (normally rectangular) area in computer graphics that is currently being viewed. In web browser terms, it refers to the part of the document you're viewing which is currently visible in its window (or the screen, if the document is being viewed in full screen mode). Content outside the viewport is not visible onscreen until scrolled into view.\"). Used by mobile devices only.\n    \n    Values for the content of `<meta name=\"viewport\">`\n    \n    Value\n    \n    Possible subvalues\n    \n    Description\n    \n    `width`\n    \n    A positive integer number, or the text `device-width`\n    \n    Defines the pixel width of the viewport that you want the web site to be rendered at.\n    \n    `height`\n    \n    A positive integer, or the text `device-height`\n    \n    Defines the height of the viewport. Not used by any browser.\n    \n    `initial-scale`\n    \n    A positive number between `0.0` and `10.0`\n    \n    Defines the ratio between the device width (`device-width` in portrait mode or `device-height` in landscape mode) and the viewport size.\n    \n    `maximum-scale`\n    \n    A positive number between `0.0` and `10.0`\n    \n    Defines the maximum amount to zoom in. It must be greater or equal to the `minimum-scale` or the behaviour is undefined. Browser settings can ignore this rule and iOS10+ ignores it by default.\n    \n    `minimum-scale`\n    \n    A positive number between `0.0` and `10.0`\n    \n    Defines the minimum zoom level. It must be smaller or equal to the `maximum-scale` or the behaviour is undefined. Browser settings can ignore this rule and iOS10+ ignores it by default.\n    \n    `user-scalable`\n    \n    `yes` or `no`\n    \n    If set to `no`, the user is not able to zoom in the webpage. The default is `yes`. Browser settings can ignore this rule, and iOS10+ ignores it by default.\n    \n    Specification\n    \n    Status\n    \n    Comment\n    \n    [CSS Device Adaptation  \n    The definition of '<meta name=\"viewport\">' in that specification.](https://drafts.csswg.org/css-device-adapt/#viewport-meta)\n    \n    Working Draft\n    \n    Non-normatively describes the Viewport META element\n    \n    See also: [`@viewport`](https://developer.mozilla.org/en-US/docs/Web/CSS/@viewport \"The @viewport CSS at-rule lets you configure the viewport through which the document is viewed. It's primarily used for mobile devices, but is also used by desktop browsers that support features like \"snap to edge\" (such as Microsoft Edge).\")\n    \n    **Notes:**\n    \n    *   Though unstandardized, this declaration is respected by most mobile browsers due to de-facto dominance.\n    *   The default values may vary between devices and browsers.\n    *   To learn about this declaration in Firefox for Mobile, see [this article](https://developer.mozilla.org/en-US/docs/Mobile/Viewport_meta_tag \"Mobile/Viewport meta tag\")."
59716                     }
59717                 },
59718                 {
59719                     "name": "http-equiv",
59720                     "description": {
59721                         "kind": "markdown",
59722                         "value": "Defines a pragma directive. The attribute is named `**http-equiv**(alent)` because all the allowed values are names of particular HTTP headers:\n\n*   `\"content-language\"`  \n    Defines the default language of the page. It can be overridden by the [lang](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang) attribute on any element.\n    \n    **Warning:** Do not use this value, as it is obsolete. Prefer the `lang` attribute on the [`<html>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/html \"The HTML <html> element represents the root (top-level element) of an HTML document, so it is also referred to as the root element. All other elements must be descendants of this element.\") element.\n    \n*   `\"content-security-policy\"`  \n    Allows page authors to define a [content policy](https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives) for the current page. Content policies mostly specify allowed server origins and script endpoints which help guard against cross-site scripting attacks.\n*   `\"content-type\"`  \n    Defines the [MIME type](https://developer.mozilla.org/en-US/docs/Glossary/MIME_type) of the document, followed by its character encoding. It follows the same syntax as the HTTP `content-type` entity-header field, but as it is inside a HTML page, most values other than `text/html` are impossible. Therefore the valid syntax for its `content` is the string '`text/html`' followed by a character set with the following syntax: '`; charset=_IANAcharset_`', where `IANAcharset` is the _preferred MIME name_ for a character set as [defined by the IANA.](https://www.iana.org/assignments/character-sets)\n    \n    **Warning:** Do not use this value, as it is obsolete. Use the [`charset`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-charset) attribute on the [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta \"The HTML <meta> element represents metadata that cannot be represented by other HTML meta-related elements, like <base>, <link>, <script>, <style> or <title>.\") element.\n    \n    **Note:** As [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta \"The HTML <meta> element represents metadata that cannot be represented by other HTML meta-related elements, like <base>, <link>, <script>, <style> or <title>.\") can't change documents' types in XHTML or HTML5's XHTML serialization, never set the MIME type to an XHTML MIME type with `<meta>`.\n    \n*   `\"refresh\"`  \n    This instruction specifies:\n    *   The number of seconds until the page should be reloaded - only if the [`content`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-content) attribute contains a positive integer.\n    *   The number of seconds until the page should redirect to another - only if the [`content`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-content) attribute contains a positive integer followed by the string '`;url=`', and a valid URL.\n*   `\"set-cookie\"`  \n    Defines a [cookie](https://developer.mozilla.org/en-US/docs/cookie) for the page. Its content must follow the syntax defined in the [IETF HTTP Cookie Specification](https://tools.ietf.org/html/draft-ietf-httpstate-cookie-14).\n    \n    **Warning:** Do not use this instruction, as it is obsolete. Use the HTTP header [`Set-Cookie`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie) instead."
59723                     }
59724                 },
59725                 {
59726                     "name": "content",
59727                     "description": {
59728                         "kind": "markdown",
59729                         "value": "This attribute contains the value for the [`http-equiv`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-http-equiv) or [`name`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-name) attribute, depending on which is used."
59730                     }
59731                 },
59732                 {
59733                     "name": "charset",
59734                     "description": {
59735                         "kind": "markdown",
59736                         "value": "This attribute declares the page's character encoding. It must contain a [standard IANA MIME name for character encodings](https://www.iana.org/assignments/character-sets). Although the standard doesn't request a specific encoding, it suggests:\n\n*   Authors are encouraged to use [`UTF-8`](https://developer.mozilla.org/en-US/docs/Glossary/UTF-8).\n*   Authors should not use ASCII-incompatible encodings to avoid security risk: browsers not supporting them may interpret harmful content as HTML. This happens with the `JIS_C6226-1983`, `JIS_X0212-1990`, `HZ-GB-2312`, `JOHAB`, the ISO-2022 family and the EBCDIC family.\n\n**Note:** ASCII-incompatible encodings are those that don't map the 8-bit code points `0x20` to `0x7E` to the `0x0020` to `0x007E` Unicode code points)\n\n*   Authors **must not** use `CESU-8`, `UTF-7`, `BOCU-1` and/or `SCSU` as [cross-site scripting](https://developer.mozilla.org/en-US/docs/Glossary/Cross-site_scripting) attacks with these encodings have been demonstrated.\n*   Authors should not use `UTF-32` because not all HTML5 encoding algorithms can distinguish it from `UTF-16`.\n\n**Notes:**\n\n*   The declared character encoding must match the one the page was saved with to avoid garbled characters and security holes.\n*   The [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta \"The HTML <meta> element represents metadata that cannot be represented by other HTML meta-related elements, like <base>, <link>, <script>, <style> or <title>.\") element declaring the encoding must be inside the [`<head>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head \"The HTML <head> element provides general information (metadata) about the document, including its title and links to its scripts and style sheets.\") element and **within the first 1024 bytes** of the HTML as some browsers only look at those bytes before choosing an encoding.\n*   This [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta \"The HTML <meta> element represents metadata that cannot be represented by other HTML meta-related elements, like <base>, <link>, <script>, <style> or <title>.\") element is only one part of the [algorithm to determine a page's character set](https://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#encoding-sniffing-algorithm \"Algorithm charset page\"). The [`Content-Type` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type) and any [Byte-Order Marks](https://developer.mozilla.org/en-US/docs/Glossary/Byte-Order_Mark \"The definition of that term (Byte-Order Marks) has not been written yet; please consider contributing it!\") override this element.\n*   It is strongly recommended to define the character encoding. If a page's encoding is undefined, cross-scripting techniques are possible, such as the [`UTF-7` fallback cross-scripting technique](https://code.google.com/p/doctype-mirror/wiki/ArticleUtf7).\n*   The [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta \"The HTML <meta> element represents metadata that cannot be represented by other HTML meta-related elements, like <base>, <link>, <script>, <style> or <title>.\") element with a `charset` attribute is a synonym for the pre-HTML5 `<meta http-equiv=\"Content-Type\" content=\"text/html; charset=_IANAcharset_\">`, where _`IANAcharset`_ contains the value of the equivalent [`charset`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-charset) attribute. This syntax is still allowed, although no longer recommended."
59737                     }
59738                 },
59739                 {
59740                     "name": "scheme",
59741                     "description": "This attribute defines the scheme in which metadata is described. A scheme is a context leading to the correct interpretations of the [`content`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-content) value, like a format.\n\n**Warning:** Do not use this value, as it is obsolete. There is no replacement as there was no real usage for it."
59742                 }
59743             ],
59744             "references": [
59745                 {
59746                     "name": "MDN Reference",
59747                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/meta"
59748                 }
59749             ]
59750         },
59751         {
59752             "name": "style",
59753             "description": {
59754                 "kind": "markdown",
59755                 "value": "The style element allows authors to embed style information in their documents. The style element is one of several inputs to the styling processing model. The element does not represent content for the user."
59756             },
59757             "attributes": [
59758                 {
59759                     "name": "media",
59760                     "description": {
59761                         "kind": "markdown",
59762                         "value": "This attribute defines which media the style should be applied to. Its value is a [media query](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries), which defaults to `all` if the attribute is missing."
59763                     }
59764                 },
59765                 {
59766                     "name": "nonce",
59767                     "description": {
59768                         "kind": "markdown",
59769                         "value": "A cryptographic nonce (number used once) used to whitelist inline styles in a [style-src Content-Security-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src). The server must generate a unique nonce value each time it transmits a policy. It is critical to provide a nonce that cannot be guessed as bypassing a resource’s policy is otherwise trivial."
59770                     }
59771                 },
59772                 {
59773                     "name": "type",
59774                     "description": {
59775                         "kind": "markdown",
59776                         "value": "This attribute defines the styling language as a MIME type (charset should not be specified). This attribute is optional and defaults to `text/css` if it is not specified — there is very little reason to include this in modern web documents."
59777                     }
59778                 },
59779                 {
59780                     "name": "scoped",
59781                     "valueSet": "v"
59782                 },
59783                 {
59784                     "name": "title",
59785                     "description": "This attribute specifies [alternative style sheet](https://developer.mozilla.org/en-US/docs/Web/CSS/Alternative_style_sheets) sets."
59786                 }
59787             ],
59788             "references": [
59789                 {
59790                     "name": "MDN Reference",
59791                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/style"
59792                 }
59793             ]
59794         },
59795         {
59796             "name": "body",
59797             "description": {
59798                 "kind": "markdown",
59799                 "value": "The body element represents the content of the document."
59800             },
59801             "attributes": [
59802                 {
59803                     "name": "onafterprint",
59804                     "description": {
59805                         "kind": "markdown",
59806                         "value": "Function to call after the user has printed the document."
59807                     }
59808                 },
59809                 {
59810                     "name": "onbeforeprint",
59811                     "description": {
59812                         "kind": "markdown",
59813                         "value": "Function to call when the user requests printing of the document."
59814                     }
59815                 },
59816                 {
59817                     "name": "onbeforeunload",
59818                     "description": {
59819                         "kind": "markdown",
59820                         "value": "Function to call when the document is about to be unloaded."
59821                     }
59822                 },
59823                 {
59824                     "name": "onhashchange",
59825                     "description": {
59826                         "kind": "markdown",
59827                         "value": "Function to call when the fragment identifier part (starting with the hash (`'#'`) character) of the document's current address has changed."
59828                     }
59829                 },
59830                 {
59831                     "name": "onlanguagechange",
59832                     "description": {
59833                         "kind": "markdown",
59834                         "value": "Function to call when the preferred languages changed."
59835                     }
59836                 },
59837                 {
59838                     "name": "onmessage",
59839                     "description": {
59840                         "kind": "markdown",
59841                         "value": "Function to call when the document has received a message."
59842                     }
59843                 },
59844                 {
59845                     "name": "onoffline",
59846                     "description": {
59847                         "kind": "markdown",
59848                         "value": "Function to call when network communication has failed."
59849                     }
59850                 },
59851                 {
59852                     "name": "ononline",
59853                     "description": {
59854                         "kind": "markdown",
59855                         "value": "Function to call when network communication has been restored."
59856                     }
59857                 },
59858                 {
59859                     "name": "onpagehide"
59860                 },
59861                 {
59862                     "name": "onpageshow"
59863                 },
59864                 {
59865                     "name": "onpopstate",
59866                     "description": {
59867                         "kind": "markdown",
59868                         "value": "Function to call when the user has navigated session history."
59869                     }
59870                 },
59871                 {
59872                     "name": "onstorage",
59873                     "description": {
59874                         "kind": "markdown",
59875                         "value": "Function to call when the storage area has changed."
59876                     }
59877                 },
59878                 {
59879                     "name": "onunload",
59880                     "description": {
59881                         "kind": "markdown",
59882                         "value": "Function to call when the document is going away."
59883                     }
59884                 },
59885                 {
59886                     "name": "alink",
59887                     "description": "Color of text for hyperlinks when selected. _This method is non-conforming, use CSS [`color`](https://developer.mozilla.org/en-US/docs/Web/CSS/color \"The color CSS property sets the foreground color value of an element's text and text decorations, and sets the currentcolor value.\") property in conjunction with the [`:active`](https://developer.mozilla.org/en-US/docs/Web/CSS/:active \"The :active CSS pseudo-class represents an element (such as a button) that is being activated by the user.\") pseudo-class instead._"
59888                 },
59889                 {
59890                     "name": "background",
59891                     "description": "URI of a image to use as a background. _This method is non-conforming, use CSS [`background`](https://developer.mozilla.org/en-US/docs/Web/CSS/background \"The background shorthand CSS property sets all background style properties at once, such as color, image, origin and size, or repeat method.\") property on the element instead._"
59892                 },
59893                 {
59894                     "name": "bgcolor",
59895                     "description": "Background color for the document. _This method is non-conforming, use CSS [`background-color`](https://developer.mozilla.org/en-US/docs/Web/CSS/background-color \"The background-color CSS property sets the background color of an element.\") property on the element instead._"
59896                 },
59897                 {
59898                     "name": "bottommargin",
59899                     "description": "The margin of the bottom of the body. _This method is non-conforming, use CSS [`margin-bottom`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin-bottom \"The margin-bottom CSS property sets the margin area on the bottom of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\") property on the element instead._"
59900                 },
59901                 {
59902                     "name": "leftmargin",
59903                     "description": "The margin of the left of the body. _This method is non-conforming, use CSS [`margin-left`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin-left \"The margin-left CSS property sets the margin area on the left side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\") property on the element instead._"
59904                 },
59905                 {
59906                     "name": "link",
59907                     "description": "Color of text for unvisited hypertext links. _This method is non-conforming, use CSS [`color`](https://developer.mozilla.org/en-US/docs/Web/CSS/color \"The color CSS property sets the foreground color value of an element's text and text decorations, and sets the currentcolor value.\") property in conjunction with the [`:link`](https://developer.mozilla.org/en-US/docs/Web/CSS/:link \"The :link CSS pseudo-class represents an element that has not yet been visited. It matches every unvisited <a>, <area>, or <link> element that has an href attribute.\") pseudo-class instead._"
59908                 },
59909                 {
59910                     "name": "onblur",
59911                     "description": "Function to call when the document loses focus."
59912                 },
59913                 {
59914                     "name": "onerror",
59915                     "description": "Function to call when the document fails to load properly."
59916                 },
59917                 {
59918                     "name": "onfocus",
59919                     "description": "Function to call when the document receives focus."
59920                 },
59921                 {
59922                     "name": "onload",
59923                     "description": "Function to call when the document has finished loading."
59924                 },
59925                 {
59926                     "name": "onredo",
59927                     "description": "Function to call when the user has moved forward in undo transaction history."
59928                 },
59929                 {
59930                     "name": "onresize",
59931                     "description": "Function to call when the document has been resized."
59932                 },
59933                 {
59934                     "name": "onundo",
59935                     "description": "Function to call when the user has moved backward in undo transaction history."
59936                 },
59937                 {
59938                     "name": "rightmargin",
59939                     "description": "The margin of the right of the body. _This method is non-conforming, use CSS [`margin-right`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin-right \"The margin-right CSS property sets the margin area on the right side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\") property on the element instead._"
59940                 },
59941                 {
59942                     "name": "text",
59943                     "description": "Foreground color of text. _This method is non-conforming, use CSS [`color`](https://developer.mozilla.org/en-US/docs/Web/CSS/color \"The color CSS property sets the foreground color value of an element's text and text decorations, and sets the currentcolor value.\") property on the element instead._"
59944                 },
59945                 {
59946                     "name": "topmargin",
59947                     "description": "The margin of the top of the body. _This method is non-conforming, use CSS [`margin-top`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin-top \"The margin-top CSS property sets the margin area on the top of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\") property on the element instead._"
59948                 },
59949                 {
59950                     "name": "vlink",
59951                     "description": "Color of text for visited hypertext links. _This method is non-conforming, use CSS [`color`](https://developer.mozilla.org/en-US/docs/Web/CSS/color \"The color CSS property sets the foreground color value of an element's text and text decorations, and sets the currentcolor value.\") property in conjunction with the [`:visited`](https://developer.mozilla.org/en-US/docs/Web/CSS/:visited \"The :visited CSS pseudo-class represents links that the user has already visited. For privacy reasons, the styles that can be modified using this selector are very limited.\") pseudo-class instead._"
59952                 }
59953             ],
59954             "references": [
59955                 {
59956                     "name": "MDN Reference",
59957                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/body"
59958                 }
59959             ]
59960         },
59961         {
59962             "name": "article",
59963             "description": {
59964                 "kind": "markdown",
59965                 "value": "The article element represents a complete, or self-contained, composition in a document, page, application, or site and that is, in principle, independently distributable or reusable, e.g. in syndication. This could be a forum post, a magazine or newspaper article, a blog entry, a user-submitted comment, an interactive widget or gadget, or any other independent item of content. Each article should be identified, typically by including a heading (h1–h6 element) as a child of the article element."
59966             },
59967             "attributes": [],
59968             "references": [
59969                 {
59970                     "name": "MDN Reference",
59971                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/article"
59972                 }
59973             ]
59974         },
59975         {
59976             "name": "section",
59977             "description": {
59978                 "kind": "markdown",
59979                 "value": "The section element represents a generic section of a document or application. A section, in this context, is a thematic grouping of content. Each section should be identified, typically by including a heading ( h1- h6 element) as a child of the section element."
59980             },
59981             "attributes": [],
59982             "references": [
59983                 {
59984                     "name": "MDN Reference",
59985                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/section"
59986                 }
59987             ]
59988         },
59989         {
59990             "name": "nav",
59991             "description": {
59992                 "kind": "markdown",
59993                 "value": "The nav element represents a section of a page that links to other pages or to parts within the page: a section with navigation links."
59994             },
59995             "attributes": [],
59996             "references": [
59997                 {
59998                     "name": "MDN Reference",
59999                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/nav"
60000                 }
60001             ]
60002         },
60003         {
60004             "name": "aside",
60005             "description": {
60006                 "kind": "markdown",
60007                 "value": "The aside element represents a section of a page that consists of content that is tangentially related to the content around the aside element, and which could be considered separate from that content. Such sections are often represented as sidebars in printed typography."
60008             },
60009             "attributes": [],
60010             "references": [
60011                 {
60012                     "name": "MDN Reference",
60013                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/aside"
60014                 }
60015             ]
60016         },
60017         {
60018             "name": "h1",
60019             "description": {
60020                 "kind": "markdown",
60021                 "value": "The h1 element represents a section heading."
60022             },
60023             "attributes": [],
60024             "references": [
60025                 {
60026                     "name": "MDN Reference",
60027                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/Heading_Elements"
60028                 }
60029             ]
60030         },
60031         {
60032             "name": "h2",
60033             "description": {
60034                 "kind": "markdown",
60035                 "value": "The h2 element represents a section heading."
60036             },
60037             "attributes": [],
60038             "references": [
60039                 {
60040                     "name": "MDN Reference",
60041                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/Heading_Elements"
60042                 }
60043             ]
60044         },
60045         {
60046             "name": "h3",
60047             "description": {
60048                 "kind": "markdown",
60049                 "value": "The h3 element represents a section heading."
60050             },
60051             "attributes": [],
60052             "references": [
60053                 {
60054                     "name": "MDN Reference",
60055                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/Heading_Elements"
60056                 }
60057             ]
60058         },
60059         {
60060             "name": "h4",
60061             "description": {
60062                 "kind": "markdown",
60063                 "value": "The h4 element represents a section heading."
60064             },
60065             "attributes": [],
60066             "references": [
60067                 {
60068                     "name": "MDN Reference",
60069                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/Heading_Elements"
60070                 }
60071             ]
60072         },
60073         {
60074             "name": "h5",
60075             "description": {
60076                 "kind": "markdown",
60077                 "value": "The h5 element represents a section heading."
60078             },
60079             "attributes": [],
60080             "references": [
60081                 {
60082                     "name": "MDN Reference",
60083                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/Heading_Elements"
60084                 }
60085             ]
60086         },
60087         {
60088             "name": "h6",
60089             "description": {
60090                 "kind": "markdown",
60091                 "value": "The h6 element represents a section heading."
60092             },
60093             "attributes": [],
60094             "references": [
60095                 {
60096                     "name": "MDN Reference",
60097                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/Heading_Elements"
60098                 }
60099             ]
60100         },
60101         {
60102             "name": "header",
60103             "description": {
60104                 "kind": "markdown",
60105                 "value": "The header element represents introductory content for its nearest ancestor sectioning content or sectioning root element. A header typically contains a group of introductory or navigational aids. When the nearest ancestor sectioning content or sectioning root element is the body element, then it applies to the whole page."
60106             },
60107             "attributes": [],
60108             "references": [
60109                 {
60110                     "name": "MDN Reference",
60111                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/header"
60112                 }
60113             ]
60114         },
60115         {
60116             "name": "footer",
60117             "description": {
60118                 "kind": "markdown",
60119                 "value": "The footer element represents a footer for its nearest ancestor sectioning content or sectioning root element. A footer typically contains information about its section such as who wrote it, links to related documents, copyright data, and the like."
60120             },
60121             "attributes": [],
60122             "references": [
60123                 {
60124                     "name": "MDN Reference",
60125                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/footer"
60126                 }
60127             ]
60128         },
60129         {
60130             "name": "address",
60131             "description": {
60132                 "kind": "markdown",
60133                 "value": "The address element represents the contact information for its nearest article or body element ancestor. If that is the body element, then the contact information applies to the document as a whole."
60134             },
60135             "attributes": [],
60136             "references": [
60137                 {
60138                     "name": "MDN Reference",
60139                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/address"
60140                 }
60141             ]
60142         },
60143         {
60144             "name": "p",
60145             "description": {
60146                 "kind": "markdown",
60147                 "value": "The p element represents a paragraph."
60148             },
60149             "attributes": [],
60150             "references": [
60151                 {
60152                     "name": "MDN Reference",
60153                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/p"
60154                 }
60155             ]
60156         },
60157         {
60158             "name": "hr",
60159             "description": {
60160                 "kind": "markdown",
60161                 "value": "The hr element represents a paragraph-level thematic break, e.g. a scene change in a story, or a transition to another topic within a section of a reference book."
60162             },
60163             "attributes": [
60164                 {
60165                     "name": "align",
60166                     "description": "Sets the alignment of the rule on the page. If no value is specified, the default value is `left`."
60167                 },
60168                 {
60169                     "name": "color",
60170                     "description": "Sets the color of the rule through color name or hexadecimal value."
60171                 },
60172                 {
60173                     "name": "noshade",
60174                     "description": "Sets the rule to have no shading."
60175                 },
60176                 {
60177                     "name": "size",
60178                     "description": "Sets the height, in pixels, of the rule."
60179                 },
60180                 {
60181                     "name": "width",
60182                     "description": "Sets the length of the rule on the page through a pixel or percentage value."
60183                 }
60184             ],
60185             "references": [
60186                 {
60187                     "name": "MDN Reference",
60188                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/hr"
60189                 }
60190             ]
60191         },
60192         {
60193             "name": "pre",
60194             "description": {
60195                 "kind": "markdown",
60196                 "value": "The pre element represents a block of preformatted text, in which structure is represented by typographic conventions rather than by elements."
60197             },
60198             "attributes": [
60199                 {
60200                     "name": "cols",
60201                     "description": "Contains the _preferred_ count of characters that a line should have. It was a non-standard synonym of [`width`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre#attr-width). To achieve such an effect, use CSS [`width`](https://developer.mozilla.org/en-US/docs/Web/CSS/width \"The width CSS property sets an element's width. By default it sets the width of the content area, but if box-sizing is set to border-box, it sets the width of the border area.\") instead."
60202                 },
60203                 {
60204                     "name": "width",
60205                     "description": "Contains the _preferred_ count of characters that a line should have. Though technically still implemented, this attribute has no visual effect; to achieve such an effect, use CSS [`width`](https://developer.mozilla.org/en-US/docs/Web/CSS/width \"The width CSS property sets an element's width. By default it sets the width of the content area, but if box-sizing is set to border-box, it sets the width of the border area.\") instead."
60206                 },
60207                 {
60208                     "name": "wrap",
60209                     "description": "Is a _hint_ indicating how the overflow must happen. In modern browser this hint is ignored and no visual effect results in its present; to achieve such an effect, use CSS [`white-space`](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space \"The white-space CSS property sets how white space inside an element is handled.\") instead."
60210                 }
60211             ],
60212             "references": [
60213                 {
60214                     "name": "MDN Reference",
60215                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/pre"
60216                 }
60217             ]
60218         },
60219         {
60220             "name": "blockquote",
60221             "description": {
60222                 "kind": "markdown",
60223                 "value": "The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a footer or cite element, and optionally with in-line changes such as annotations and abbreviations."
60224             },
60225             "attributes": [
60226                 {
60227                     "name": "cite",
60228                     "description": {
60229                         "kind": "markdown",
60230                         "value": "A URL that designates a source document or message for the information quoted. This attribute is intended to point to information explaining the context or the reference for the quote."
60231                     }
60232                 }
60233             ],
60234             "references": [
60235                 {
60236                     "name": "MDN Reference",
60237                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/blockquote"
60238                 }
60239             ]
60240         },
60241         {
60242             "name": "ol",
60243             "description": {
60244                 "kind": "markdown",
60245                 "value": "The ol element represents a list of items, where the items have been intentionally ordered, such that changing the order would change the meaning of the document."
60246             },
60247             "attributes": [
60248                 {
60249                     "name": "reversed",
60250                     "valueSet": "v",
60251                     "description": {
60252                         "kind": "markdown",
60253                         "value": "This Boolean attribute specifies that the items of the list are specified in reversed order."
60254                     }
60255                 },
60256                 {
60257                     "name": "start",
60258                     "description": {
60259                         "kind": "markdown",
60260                         "value": "This integer attribute specifies the start value for numbering the individual list items. Although the ordering type of list elements might be Roman numerals, such as XXXI, or letters, the value of start is always represented as a number. To start numbering elements from the letter \"C\", use `<ol start=\"3\">`.\n\n**Note**: This attribute was deprecated in HTML4, but reintroduced in HTML5."
60261                     }
60262                 },
60263                 {
60264                     "name": "type",
60265                     "valueSet": "lt",
60266                     "description": {
60267                         "kind": "markdown",
60268                         "value": "Indicates the numbering type:\n\n*   `'a'` indicates lowercase letters,\n*   `'A'` indicates uppercase letters,\n*   `'i'` indicates lowercase Roman numerals,\n*   `'I'` indicates uppercase Roman numerals,\n*   and `'1'` indicates numbers (default).\n\nThe type set is used for the entire list unless a different [`type`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li#attr-type) attribute is used within an enclosed [`<li>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li \"The HTML <li> element is used to represent an item in a list. It must be contained in a parent element: an ordered list (<ol>), an unordered list (<ul>), or a menu (<menu>). In menus and unordered lists, list items are usually displayed using bullet points. In ordered lists, they are usually displayed with an ascending counter on the left, such as a number or letter.\") element.\n\n**Note:** This attribute was deprecated in HTML4, but reintroduced in HTML5.\n\nUnless the value of the list number matters (e.g. in legal or technical documents where items are to be referenced by their number/letter), the CSS [`list-style-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type \"The list-style-type CSS property sets the marker (such as a disc, character, or custom counter style) of a list item element.\") property should be used instead."
60269                     }
60270                 },
60271                 {
60272                     "name": "compact",
60273                     "description": "This Boolean attribute hints that the list should be rendered in a compact style. The interpretation of this attribute depends on the user agent and it doesn't work in all browsers.\n\n**Warning:** Do not use this attribute, as it has been deprecated: the [`<ol>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol \"The HTML <ol> element represents an ordered list of items, typically rendered as a numbered list.\") element should be styled using [CSS](https://developer.mozilla.org/en-US/docs/CSS). To give an effect similar to the `compact` attribute, the [CSS](https://developer.mozilla.org/en-US/docs/CSS) property [`line-height`](https://developer.mozilla.org/en-US/docs/Web/CSS/line-height \"The line-height CSS property sets the amount of space used for lines, such as in text. On block-level elements, it specifies the minimum height of line boxes within the element. On non-replaced inline elements, it specifies the height that is used to calculate line box height.\") can be used with a value of `80%`."
60274                 }
60275             ],
60276             "references": [
60277                 {
60278                     "name": "MDN Reference",
60279                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/ol"
60280                 }
60281             ]
60282         },
60283         {
60284             "name": "ul",
60285             "description": {
60286                 "kind": "markdown",
60287                 "value": "The ul element represents a list of items, where the order of the items is not important — that is, where changing the order would not materially change the meaning of the document."
60288             },
60289             "attributes": [
60290                 {
60291                     "name": "compact",
60292                     "description": "This Boolean attribute hints that the list should be rendered in a compact style. The interpretation of this attribute depends on the user agent and it doesn't work in all browsers.\n\n**Usage note: **Do not use this attribute, as it has been deprecated: the [`<ul>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul \"The HTML <ul> element represents an unordered list of items, typically rendered as a bulleted list.\") element should be styled using [CSS](https://developer.mozilla.org/en-US/docs/CSS). To give a similar effect as the `compact` attribute, the [CSS](https://developer.mozilla.org/en-US/docs/CSS) property [line-height](https://developer.mozilla.org/en-US/docs/CSS/line-height) can be used with a value of `80%`."
60293                 }
60294             ],
60295             "references": [
60296                 {
60297                     "name": "MDN Reference",
60298                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/ul"
60299                 }
60300             ]
60301         },
60302         {
60303             "name": "li",
60304             "description": {
60305                 "kind": "markdown",
60306                 "value": "The li element represents a list item. If its parent element is an ol, ul, or menu element, then the element is an item of the parent element's list, as defined for those elements. Otherwise, the list item has no defined list-related relationship to any other li element."
60307             },
60308             "attributes": [
60309                 {
60310                     "name": "value",
60311                     "description": {
60312                         "kind": "markdown",
60313                         "value": "This integer attribute indicates the current ordinal value of the list item as defined by the [`<ol>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol \"The HTML <ol> element represents an ordered list of items, typically rendered as a numbered list.\") element. The only allowed value for this attribute is a number, even if the list is displayed with Roman numerals or letters. List items that follow this one continue numbering from the value set. The **value** attribute has no meaning for unordered lists ([`<ul>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul \"The HTML <ul> element represents an unordered list of items, typically rendered as a bulleted list.\")) or for menus ([`<menu>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menu \"The HTML <menu> element represents a group of commands that a user can perform or activate. This includes both list menus, which might appear across the top of a screen, as well as context menus, such as those that might appear underneath a button after it has been clicked.\")).\n\n**Note**: This attribute was deprecated in HTML4, but reintroduced in HTML5.\n\n**Note:** Prior to Gecko 9.0, negative values were incorrectly converted to 0. Starting in Gecko 9.0 all integer values are correctly parsed."
60314                     }
60315                 },
60316                 {
60317                     "name": "type",
60318                     "description": "This character attribute indicates the numbering type:\n\n*   `a`: lowercase letters\n*   `A`: uppercase letters\n*   `i`: lowercase Roman numerals\n*   `I`: uppercase Roman numerals\n*   `1`: numbers\n\nThis type overrides the one used by its parent [`<ol>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol \"The HTML <ol> element represents an ordered list of items, typically rendered as a numbered list.\") element, if any.\n\n**Usage note:** This attribute has been deprecated: use the CSS [`list-style-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type \"The list-style-type CSS property sets the marker (such as a disc, character, or custom counter style) of a list item element.\") property instead."
60319                 }
60320             ],
60321             "references": [
60322                 {
60323                     "name": "MDN Reference",
60324                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/li"
60325                 }
60326             ]
60327         },
60328         {
60329             "name": "dl",
60330             "description": {
60331                 "kind": "markdown",
60332                 "value": "The dl element represents an association list consisting of zero or more name-value groups (a description list). A name-value group consists of one or more names (dt elements) followed by one or more values (dd elements), ignoring any nodes other than dt and dd elements. Within a single dl element, there should not be more than one dt element for each name."
60333             },
60334             "attributes": [],
60335             "references": [
60336                 {
60337                     "name": "MDN Reference",
60338                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/dl"
60339                 }
60340             ]
60341         },
60342         {
60343             "name": "dt",
60344             "description": {
60345                 "kind": "markdown",
60346                 "value": "The dt element represents the term, or name, part of a term-description group in a description list (dl element)."
60347             },
60348             "attributes": [],
60349             "references": [
60350                 {
60351                     "name": "MDN Reference",
60352                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/dt"
60353                 }
60354             ]
60355         },
60356         {
60357             "name": "dd",
60358             "description": {
60359                 "kind": "markdown",
60360                 "value": "The dd element represents the description, definition, or value, part of a term-description group in a description list (dl element)."
60361             },
60362             "attributes": [
60363                 {
60364                     "name": "nowrap",
60365                     "description": "If the value of this attribute is set to `yes`, the definition text will not wrap. The default value is `no`."
60366                 }
60367             ],
60368             "references": [
60369                 {
60370                     "name": "MDN Reference",
60371                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/dd"
60372                 }
60373             ]
60374         },
60375         {
60376             "name": "figure",
60377             "description": {
60378                 "kind": "markdown",
60379                 "value": "The figure element represents some flow content, optionally with a caption, that is self-contained (like a complete sentence) and is typically referenced as a single unit from the main flow of the document."
60380             },
60381             "attributes": [],
60382             "references": [
60383                 {
60384                     "name": "MDN Reference",
60385                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/figure"
60386                 }
60387             ]
60388         },
60389         {
60390             "name": "figcaption",
60391             "description": {
60392                 "kind": "markdown",
60393                 "value": "The figcaption element represents a caption or legend for the rest of the contents of the figcaption element's parent figure element, if any."
60394             },
60395             "attributes": [],
60396             "references": [
60397                 {
60398                     "name": "MDN Reference",
60399                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/figcaption"
60400                 }
60401             ]
60402         },
60403         {
60404             "name": "main",
60405             "description": {
60406                 "kind": "markdown",
60407                 "value": "The main element represents the main content of the body of a document or application. The main content area consists of content that is directly related to or expands upon the central topic of a document or central functionality of an application."
60408             },
60409             "attributes": [],
60410             "references": [
60411                 {
60412                     "name": "MDN Reference",
60413                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/main"
60414                 }
60415             ]
60416         },
60417         {
60418             "name": "div",
60419             "description": {
60420                 "kind": "markdown",
60421                 "value": "The div element has no special meaning at all. It represents its children. It can be used with the class, lang, and title attributes to mark up semantics common to a group of consecutive elements."
60422             },
60423             "attributes": [],
60424             "references": [
60425                 {
60426                     "name": "MDN Reference",
60427                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/div"
60428                 }
60429             ]
60430         },
60431         {
60432             "name": "a",
60433             "description": {
60434                 "kind": "markdown",
60435                 "value": "If the a element has an href attribute, then it represents a hyperlink (a hypertext anchor) labeled by its contents."
60436             },
60437             "attributes": [
60438                 {
60439                     "name": "href",
60440                     "description": {
60441                         "kind": "markdown",
60442                         "value": "Contains a URL or a URL fragment that the hyperlink points to."
60443                     }
60444                 },
60445                 {
60446                     "name": "target",
60447                     "description": {
60448                         "kind": "markdown",
60449                         "value": "Specifies where to display the linked URL. It is a name of, or keyword for, a _browsing context_: a tab, window, or `<iframe>`. The following keywords have special meanings:\n\n*   `_self`: Load the URL into the same browsing context as the current one. This is the default behavior.\n*   `_blank`: Load the URL into a new browsing context. This is usually a tab, but users can configure browsers to use new windows instead.\n*   `_parent`: Load the URL into the parent browsing context of the current one. If there is no parent, this behaves the same way as `_self`.\n*   `_top`: Load the URL into the top-level browsing context (that is, the \"highest\" browsing context that is an ancestor of the current one, and has no parent). If there is no parent, this behaves the same way as `_self`.\n\n**Note:** When using `target`, consider adding `rel=\"noreferrer\"` to avoid exploitation of the `window.opener` API.\n\n**Note:** Linking to another page using `target=\"_blank\"` will run the new page on the same process as your page. If the new page is executing expensive JS, your page's performance may suffer. To avoid this use `rel=\"noopener\"`."
60450                     }
60451                 },
60452                 {
60453                     "name": "download",
60454                     "description": {
60455                         "kind": "markdown",
60456                         "value": "This attribute instructs browsers to download a URL instead of navigating to it, so the user will be prompted to save it as a local file. If the attribute has a value, it is used as the pre-filled file name in the Save prompt (the user can still change the file name if they want). There are no restrictions on allowed values, though `/` and `\\` are converted to underscores. Most file systems limit some punctuation in file names, and browsers will adjust the suggested name accordingly.\n\n**Notes:**\n\n*   This attribute only works for [same-origin URLs](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy).\n*   Although HTTP(s) URLs need to be in the same-origin, [`blob:` URLs](https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL) and [`data:` URLs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) are allowed so that content generated by JavaScript, such as pictures created in an image-editor Web app, can be downloaded.\n*   If the HTTP header [`Content-Disposition:`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition) gives a different filename than this attribute, the HTTP header takes priority over this attribute.\n*   If `Content-Disposition:` is set to `inline`, Firefox prioritizes `Content-Disposition`, like the filename case, while Chrome prioritizes the `download` attribute."
60457                     }
60458                 },
60459                 {
60460                     "name": "ping",
60461                     "description": {
60462                         "kind": "markdown",
60463                         "value": "Contains a space-separated list of URLs to which, when the hyperlink is followed, [`POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST \"The HTTP POST method sends data to the server. The type of the body of the request is indicated by the Content-Type header.\") requests with the body `PING` will be sent by the browser (in the background). Typically used for tracking."
60464                     }
60465                 },
60466                 {
60467                     "name": "rel",
60468                     "description": {
60469                         "kind": "markdown",
60470                         "value": "Specifies the relationship of the target object to the link object. The value is a space-separated list of [link types](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types)."
60471                     }
60472                 },
60473                 {
60474                     "name": "hreflang",
60475                     "description": {
60476                         "kind": "markdown",
60477                         "value": "This attribute indicates the human language of the linked resource. It is purely advisory, with no built-in functionality. Allowed values are determined by [BCP47](https://www.ietf.org/rfc/bcp/bcp47.txt \"Tags for Identifying Languages\")."
60478                     }
60479                 },
60480                 {
60481                     "name": "type",
60482                     "description": {
60483                         "kind": "markdown",
60484                         "value": "Specifies the media type in the form of a [MIME type](https://developer.mozilla.org/en-US/docs/Glossary/MIME_type \"MIME type: A MIME type (now properly called \"media type\", but also sometimes \"content type\") is a string sent along with a file indicating the type of the file (describing the content format, for example, a sound file might be labeled audio/ogg, or an image file image/png).\") for the linked URL. It is purely advisory, with no built-in functionality."
60485                     }
60486                 },
60487                 {
60488                     "name": "referrerpolicy",
60489                     "description": "Indicates which [referrer](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer) to send when fetching the URL:\n\n*   `'no-referrer'` means the `Referer:` header will not be sent.\n*   `'no-referrer-when-downgrade'` means no `Referer:` header will be sent when navigating to an origin without HTTPS. This is the default behavior.\n*   `'origin'` means the referrer will be the [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin) of the page, not including information after the domain.\n*   `'origin-when-cross-origin'` meaning that navigations to other origins will be limited to the scheme, the host and the port, while navigations on the same origin will include the referrer's path.\n*   `'strict-origin-when-cross-origin'`\n*   `'unsafe-url'` means the referrer will include the origin and path, but not the fragment, password, or username. This is unsafe because it can leak data from secure URLs to insecure ones."
60490                 }
60491             ],
60492             "references": [
60493                 {
60494                     "name": "MDN Reference",
60495                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/a"
60496                 }
60497             ]
60498         },
60499         {
60500             "name": "em",
60501             "description": {
60502                 "kind": "markdown",
60503                 "value": "The em element represents stress emphasis of its contents."
60504             },
60505             "attributes": [],
60506             "references": [
60507                 {
60508                     "name": "MDN Reference",
60509                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/em"
60510                 }
60511             ]
60512         },
60513         {
60514             "name": "strong",
60515             "description": {
60516                 "kind": "markdown",
60517                 "value": "The strong element represents strong importance, seriousness, or urgency for its contents."
60518             },
60519             "attributes": [],
60520             "references": [
60521                 {
60522                     "name": "MDN Reference",
60523                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/strong"
60524                 }
60525             ]
60526         },
60527         {
60528             "name": "small",
60529             "description": {
60530                 "kind": "markdown",
60531                 "value": "The small element represents side comments such as small print."
60532             },
60533             "attributes": [],
60534             "references": [
60535                 {
60536                     "name": "MDN Reference",
60537                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/small"
60538                 }
60539             ]
60540         },
60541         {
60542             "name": "s",
60543             "description": {
60544                 "kind": "markdown",
60545                 "value": "The s element represents contents that are no longer accurate or no longer relevant."
60546             },
60547             "attributes": [],
60548             "references": [
60549                 {
60550                     "name": "MDN Reference",
60551                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/s"
60552                 }
60553             ]
60554         },
60555         {
60556             "name": "cite",
60557             "description": {
60558                 "kind": "markdown",
60559                 "value": "The cite element represents a reference to a creative work. It must include the title of the work or the name of the author(person, people or organization) or an URL reference, or a reference in abbreviated form as per the conventions used for the addition of citation metadata."
60560             },
60561             "attributes": [],
60562             "references": [
60563                 {
60564                     "name": "MDN Reference",
60565                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/cite"
60566                 }
60567             ]
60568         },
60569         {
60570             "name": "q",
60571             "description": {
60572                 "kind": "markdown",
60573                 "value": "The q element represents some phrasing content quoted from another source."
60574             },
60575             "attributes": [
60576                 {
60577                     "name": "cite",
60578                     "description": {
60579                         "kind": "markdown",
60580                         "value": "The value of this attribute is a URL that designates a source document or message for the information quoted. This attribute is intended to point to information explaining the context or the reference for the quote."
60581                     }
60582                 }
60583             ],
60584             "references": [
60585                 {
60586                     "name": "MDN Reference",
60587                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/q"
60588                 }
60589             ]
60590         },
60591         {
60592             "name": "dfn",
60593             "description": {
60594                 "kind": "markdown",
60595                 "value": "The dfn element represents the defining instance of a term. The paragraph, description list group, or section that is the nearest ancestor of the dfn element must also contain the definition(s) for the term given by the dfn element."
60596             },
60597             "attributes": [],
60598             "references": [
60599                 {
60600                     "name": "MDN Reference",
60601                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/dfn"
60602                 }
60603             ]
60604         },
60605         {
60606             "name": "abbr",
60607             "description": {
60608                 "kind": "markdown",
60609                 "value": "The abbr element represents an abbreviation or acronym, optionally with its expansion. The title attribute may be used to provide an expansion of the abbreviation. The attribute, if specified, must contain an expansion of the abbreviation, and nothing else."
60610             },
60611             "attributes": [],
60612             "references": [
60613                 {
60614                     "name": "MDN Reference",
60615                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/abbr"
60616                 }
60617             ]
60618         },
60619         {
60620             "name": "ruby",
60621             "description": {
60622                 "kind": "markdown",
60623                 "value": "The ruby element allows one or more spans of phrasing content to be marked with ruby annotations. Ruby annotations are short runs of text presented alongside base text, primarily used in East Asian typography as a guide for pronunciation or to include other annotations. In Japanese, this form of typography is also known as furigana. Ruby text can appear on either side, and sometimes both sides, of the base text, and it is possible to control its position using CSS. A more complete introduction to ruby can be found in the Use Cases & Exploratory Approaches for Ruby Markup document as well as in CSS Ruby Module Level 1. [RUBY-UC] [CSSRUBY]"
60624             },
60625             "attributes": [],
60626             "references": [
60627                 {
60628                     "name": "MDN Reference",
60629                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/ruby"
60630                 }
60631             ]
60632         },
60633         {
60634             "name": "rb",
60635             "description": {
60636                 "kind": "markdown",
60637                 "value": "The rb element marks the base text component of a ruby annotation. When it is the child of a ruby element, it doesn't represent anything itself, but its parent ruby element uses it as part of determining what it represents."
60638             },
60639             "attributes": [],
60640             "references": [
60641                 {
60642                     "name": "MDN Reference",
60643                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/rb"
60644                 }
60645             ]
60646         },
60647         {
60648             "name": "rt",
60649             "description": {
60650                 "kind": "markdown",
60651                 "value": "The rt element marks the ruby text component of a ruby annotation. When it is the child of a ruby element or of an rtc element that is itself the child of a ruby element, it doesn't represent anything itself, but its ancestor ruby element uses it as part of determining what it represents."
60652             },
60653             "attributes": [],
60654             "references": [
60655                 {
60656                     "name": "MDN Reference",
60657                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/rt"
60658                 }
60659             ]
60660         },
60661         {
60662             "name": "rp",
60663             "description": {
60664                 "kind": "markdown",
60665                 "value": "The rp element is used to provide fallback text to be shown by user agents that don't support ruby annotations. One widespread convention is to provide parentheses around the ruby text component of a ruby annotation."
60666             },
60667             "attributes": [],
60668             "references": [
60669                 {
60670                     "name": "MDN Reference",
60671                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/rp"
60672                 }
60673             ]
60674         },
60675         {
60676             "name": "time",
60677             "description": {
60678                 "kind": "markdown",
60679                 "value": "The time element represents its contents, along with a machine-readable form of those contents in the datetime attribute. The kind of content is limited to various kinds of dates, times, time-zone offsets, and durations, as described below."
60680             },
60681             "attributes": [
60682                 {
60683                     "name": "datetime",
60684                     "description": {
60685                         "kind": "markdown",
60686                         "value": "This attribute indicates the time and/or date of the element and must be in one of the formats described below."
60687                     }
60688                 }
60689             ],
60690             "references": [
60691                 {
60692                     "name": "MDN Reference",
60693                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/time"
60694                 }
60695             ]
60696         },
60697         {
60698             "name": "code",
60699             "description": {
60700                 "kind": "markdown",
60701                 "value": "The code element represents a fragment of computer code. This could be an XML element name, a file name, a computer program, or any other string that a computer would recognize."
60702             },
60703             "attributes": [],
60704             "references": [
60705                 {
60706                     "name": "MDN Reference",
60707                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/code"
60708                 }
60709             ]
60710         },
60711         {
60712             "name": "var",
60713             "description": {
60714                 "kind": "markdown",
60715                 "value": "The var element represents a variable. This could be an actual variable in a mathematical expression or programming context, an identifier representing a constant, a symbol identifying a physical quantity, a function parameter, or just be a term used as a placeholder in prose."
60716             },
60717             "attributes": [],
60718             "references": [
60719                 {
60720                     "name": "MDN Reference",
60721                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/var"
60722                 }
60723             ]
60724         },
60725         {
60726             "name": "samp",
60727             "description": {
60728                 "kind": "markdown",
60729                 "value": "The samp element represents sample or quoted output from another program or computing system."
60730             },
60731             "attributes": [],
60732             "references": [
60733                 {
60734                     "name": "MDN Reference",
60735                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/samp"
60736                 }
60737             ]
60738         },
60739         {
60740             "name": "kbd",
60741             "description": {
60742                 "kind": "markdown",
60743                 "value": "The kbd element represents user input (typically keyboard input, although it may also be used to represent other input, such as voice commands)."
60744             },
60745             "attributes": [],
60746             "references": [
60747                 {
60748                     "name": "MDN Reference",
60749                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/kbd"
60750                 }
60751             ]
60752         },
60753         {
60754             "name": "sub",
60755             "description": {
60756                 "kind": "markdown",
60757                 "value": "The sub element represents a subscript."
60758             },
60759             "attributes": [],
60760             "references": [
60761                 {
60762                     "name": "MDN Reference",
60763                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/sub"
60764                 }
60765             ]
60766         },
60767         {
60768             "name": "sup",
60769             "description": {
60770                 "kind": "markdown",
60771                 "value": "The sup element represents a superscript."
60772             },
60773             "attributes": [],
60774             "references": [
60775                 {
60776                     "name": "MDN Reference",
60777                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/sup"
60778                 }
60779             ]
60780         },
60781         {
60782             "name": "i",
60783             "description": {
60784                 "kind": "markdown",
60785                 "value": "The i element represents a span of text in an alternate voice or mood, or otherwise offset from the normal prose in a manner indicating a different quality of text, such as a taxonomic designation, a technical term, an idiomatic phrase from another language, transliteration, a thought, or a ship name in Western texts."
60786             },
60787             "attributes": [],
60788             "references": [
60789                 {
60790                     "name": "MDN Reference",
60791                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/i"
60792                 }
60793             ]
60794         },
60795         {
60796             "name": "b",
60797             "description": {
60798                 "kind": "markdown",
60799                 "value": "The b element represents a span of text to which attention is being drawn for utilitarian purposes without conveying any extra importance and with no implication of an alternate voice or mood, such as key words in a document abstract, product names in a review, actionable words in interactive text-driven software, or an article lede."
60800             },
60801             "attributes": [],
60802             "references": [
60803                 {
60804                     "name": "MDN Reference",
60805                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/b"
60806                 }
60807             ]
60808         },
60809         {
60810             "name": "u",
60811             "description": {
60812                 "kind": "markdown",
60813                 "value": "The u element represents a span of text with an unarticulated, though explicitly rendered, non-textual annotation, such as labeling the text as being a proper name in Chinese text (a Chinese proper name mark), or labeling the text as being misspelt."
60814             },
60815             "attributes": [],
60816             "references": [
60817                 {
60818                     "name": "MDN Reference",
60819                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/u"
60820                 }
60821             ]
60822         },
60823         {
60824             "name": "mark",
60825             "description": {
60826                 "kind": "markdown",
60827                 "value": "The mark element represents a run of text in one document marked or highlighted for reference purposes, due to its relevance in another context. When used in a quotation or other block of text referred to from the prose, it indicates a highlight that was not originally present but which has been added to bring the reader's attention to a part of the text that might not have been considered important by the original author when the block was originally written, but which is now under previously unexpected scrutiny. When used in the main prose of a document, it indicates a part of the document that has been highlighted due to its likely relevance to the user's current activity."
60828             },
60829             "attributes": [],
60830             "references": [
60831                 {
60832                     "name": "MDN Reference",
60833                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/mark"
60834                 }
60835             ]
60836         },
60837         {
60838             "name": "bdi",
60839             "description": {
60840                 "kind": "markdown",
60841                 "value": "The bdi element represents a span of text that is to be isolated from its surroundings for the purposes of bidirectional text formatting. [BIDI]"
60842             },
60843             "attributes": [],
60844             "references": [
60845                 {
60846                     "name": "MDN Reference",
60847                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/bdi"
60848                 }
60849             ]
60850         },
60851         {
60852             "name": "bdo",
60853             "description": {
60854                 "kind": "markdown",
60855                 "value": "The bdo element represents explicit text directionality formatting control for its children. It allows authors to override the Unicode bidirectional algorithm by explicitly specifying a direction override. [BIDI]"
60856             },
60857             "attributes": [
60858                 {
60859                     "name": "dir",
60860                     "description": "The direction in which text should be rendered in this element's contents. Possible values are:\n\n*   `ltr`: Indicates that the text should go in a left-to-right direction.\n*   `rtl`: Indicates that the text should go in a right-to-left direction."
60861                 }
60862             ],
60863             "references": [
60864                 {
60865                     "name": "MDN Reference",
60866                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/bdo"
60867                 }
60868             ]
60869         },
60870         {
60871             "name": "span",
60872             "description": {
60873                 "kind": "markdown",
60874                 "value": "The span element doesn't mean anything on its own, but can be useful when used together with the global attributes, e.g. class, lang, or dir. It represents its children."
60875             },
60876             "attributes": [],
60877             "references": [
60878                 {
60879                     "name": "MDN Reference",
60880                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/span"
60881                 }
60882             ]
60883         },
60884         {
60885             "name": "br",
60886             "description": {
60887                 "kind": "markdown",
60888                 "value": "The br element represents a line break."
60889             },
60890             "attributes": [
60891                 {
60892                     "name": "clear",
60893                     "description": "Indicates where to begin the next line after the break."
60894                 }
60895             ],
60896             "references": [
60897                 {
60898                     "name": "MDN Reference",
60899                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/br"
60900                 }
60901             ]
60902         },
60903         {
60904             "name": "wbr",
60905             "description": {
60906                 "kind": "markdown",
60907                 "value": "The wbr element represents a line break opportunity."
60908             },
60909             "attributes": [],
60910             "references": [
60911                 {
60912                     "name": "MDN Reference",
60913                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/wbr"
60914                 }
60915             ]
60916         },
60917         {
60918             "name": "ins",
60919             "description": {
60920                 "kind": "markdown",
60921                 "value": "The ins element represents an addition to the document."
60922             },
60923             "attributes": [
60924                 {
60925                     "name": "cite",
60926                     "description": "This attribute defines the URI of a resource that explains the change, such as a link to meeting minutes or a ticket in a troubleshooting system."
60927                 },
60928                 {
60929                     "name": "datetime",
60930                     "description": "This attribute indicates the time and date of the change and must be a valid date with an optional time string. If the value cannot be parsed as a date with an optional time string, the element does not have an associated time stamp. For the format of the string without a time, see [Format of a valid date string](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats#Format_of_a_valid_date_string \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\") in [Date and time formats used in HTML](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\"). The format of the string if it includes both date and time is covered in [Format of a valid local date and time string](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats#Format_of_a_valid_local_date_and_time_string \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\") in [Date and time formats used in HTML](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\")."
60931                 }
60932             ],
60933             "references": [
60934                 {
60935                     "name": "MDN Reference",
60936                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/ins"
60937                 }
60938             ]
60939         },
60940         {
60941             "name": "del",
60942             "description": {
60943                 "kind": "markdown",
60944                 "value": "The del element represents a removal from the document."
60945             },
60946             "attributes": [
60947                 {
60948                     "name": "cite",
60949                     "description": {
60950                         "kind": "markdown",
60951                         "value": "A URI for a resource that explains the change (for example, meeting minutes)."
60952                     }
60953                 },
60954                 {
60955                     "name": "datetime",
60956                     "description": {
60957                         "kind": "markdown",
60958                         "value": "This attribute indicates the time and date of the change and must be a valid date string with an optional time. If the value cannot be parsed as a date with an optional time string, the element does not have an associated time stamp. For the format of the string without a time, see [Format of a valid date string](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats#Format_of_a_valid_date_string \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\") in [Date and time formats used in HTML](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\"). The format of the string if it includes both date and time is covered in [Format of a valid local date and time string](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats#Format_of_a_valid_local_date_and_time_string \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\") in [Date and time formats used in HTML](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\")."
60959                     }
60960                 }
60961             ],
60962             "references": [
60963                 {
60964                     "name": "MDN Reference",
60965                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/del"
60966                 }
60967             ]
60968         },
60969         {
60970             "name": "picture",
60971             "description": {
60972                 "kind": "markdown",
60973                 "value": "The picture element is a container which provides multiple sources to its contained img element to allow authors to declaratively control or give hints to the user agent about which image resource to use, based on the screen pixel density, viewport size, image format, and other factors. It represents its children."
60974             },
60975             "attributes": [],
60976             "references": [
60977                 {
60978                     "name": "MDN Reference",
60979                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/picture"
60980                 }
60981             ]
60982         },
60983         {
60984             "name": "img",
60985             "description": {
60986                 "kind": "markdown",
60987                 "value": "An img element represents an image."
60988             },
60989             "attributes": [
60990                 {
60991                     "name": "alt",
60992                     "description": {
60993                         "kind": "markdown",
60994                         "value": "This attribute defines an alternative text description of the image.\n\n**Note:** Browsers do not always display the image referenced by the element. This is the case for non-graphical browsers (including those used by people with visual impairments), if the user chooses not to display images, or if the browser cannot display the image because it is invalid or an [unsupported type](#Supported_image_formats). In these cases, the browser may replace the image with the text defined in this element's `alt` attribute. You should, for these reasons and others, provide a useful value for `alt` whenever possible.\n\n**Note:** Omitting this attribute altogether indicates that the image is a key part of the content, and no textual equivalent is available. Setting this attribute to an empty string (`alt=\"\"`) indicates that this image is _not_ a key part of the content (decorative), and that non-visual browsers may omit it from rendering."
60995                     }
60996                 },
60997                 {
60998                     "name": "src",
60999                     "description": {
61000                         "kind": "markdown",
61001                         "value": "The image URL. This attribute is mandatory for the `<img>` element. On browsers supporting `srcset`, `src` is treated like a candidate image with a pixel density descriptor `1x` unless an image with this pixel density descriptor is already defined in `srcset,` or unless `srcset` contains '`w`' descriptors."
61002                     }
61003                 },
61004                 {
61005                     "name": "srcset",
61006                     "description": {
61007                         "kind": "markdown",
61008                         "value": "A list of one or more strings separated by commas indicating a set of possible image sources for the user agent to use. Each string is composed of:\n\n1.  a URL to an image,\n2.  optionally, whitespace followed by one of:\n    *   A width descriptor, or a positive integer directly followed by '`w`'. The width descriptor is divided by the source size given in the `sizes` attribute to calculate the effective pixel density.\n    *   A pixel density descriptor, which is a positive floating point number directly followed by '`x`'.\n\nIf no descriptor is specified, the source is assigned the default descriptor: `1x`.\n\nIt is incorrect to mix width descriptors and pixel density descriptors in the same `srcset` attribute. Duplicate descriptors (for instance, two sources in the same `srcset` which are both described with '`2x`') are also invalid.\n\nThe user agent selects any one of the available sources at its discretion. This provides them with significant leeway to tailor their selection based on things like user preferences or bandwidth conditions. See our [Responsive images](https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images) tutorial for an example."
61009                     }
61010                 },
61011                 {
61012                     "name": "crossorigin",
61013                     "valueSet": "xo",
61014                     "description": {
61015                         "kind": "markdown",
61016                         "value": "This enumerated attribute indicates if the fetching of the related image must be done using CORS or not. [CORS-enabled images](https://developer.mozilla.org/en-US/docs/CORS_Enabled_Image) can be reused in the [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas \"Use the HTML <canvas> element with either the canvas scripting API or the WebGL API to draw graphics and animations.\") element without being \"[tainted](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image#What_is_a_tainted_canvas).\" The allowed values are:"
61017                     }
61018                 },
61019                 {
61020                     "name": "usemap",
61021                     "description": {
61022                         "kind": "markdown",
61023                         "value": "The partial URL (starting with '#') of an [image map](https://developer.mozilla.org/en-US/docs/HTML/Element/map) associated with the element.\n\n**Note:** You cannot use this attribute if the `<img>` element is a descendant of an [`<a>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a \"The HTML <a> element (or anchor element) creates a hyperlink to other web pages, files, locations within the same page, email addresses, or any other URL.\") or [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") element."
61024                     }
61025                 },
61026                 {
61027                     "name": "ismap",
61028                     "valueSet": "v",
61029                     "description": {
61030                         "kind": "markdown",
61031                         "value": "This Boolean attribute indicates that the image is part of a server-side map. If so, the precise coordinates of a click are sent to the server.\n\n**Note:** This attribute is allowed only if the `<img>` element is a descendant of an [`<a>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a \"The HTML <a> element (or anchor element) creates a hyperlink to other web pages, files, locations within the same page, email addresses, or any other URL.\") element with a valid [`href`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-href) attribute."
61032                     }
61033                 },
61034                 {
61035                     "name": "width",
61036                     "description": {
61037                         "kind": "markdown",
61038                         "value": "The intrinsic width of the image in pixels."
61039                     }
61040                 },
61041                 {
61042                     "name": "height",
61043                     "description": {
61044                         "kind": "markdown",
61045                         "value": "The intrinsic height of the image in pixels."
61046                     }
61047                 },
61048                 {
61049                     "name": "decoding",
61050                     "description": "Provides an image decoding hint to the browser. The allowed values are:"
61051                 },
61052                 {
61053                     "name": "decoding",
61054                     "description": "`sync`\n\nDecode the image synchronously for atomic presentation with other content.\n\n`async`\n\nDecode the image asynchronously to reduce delay in presenting other content.\n\n`auto`\n\nDefault mode, which indicates no preference for the decoding mode. The browser decides what is best for the user."
61055                 },
61056                 {
61057                     "name": "importance",
61058                     "description": "Indicates the relative importance of the resource. Priority hints are delegated using the values:"
61059                 },
61060                 {
61061                     "name": "importance",
61062                     "description": "`auto`: Indicates **no preference**. The browser may use its own heuristics to decide the priority of the image.\n\n`high`: Indicates to the browser that the image is of **high** priority.\n\n`low`: Indicates to the browser that the image is of **low** priority."
61063                 },
61064                 {
61065                     "name": "intrinsicsize",
61066                     "description": "This attribute tells the browser to ignore the actual intrinsic size of the image and pretend it’s the size specified in the attribute. Specifically, the image would raster at these dimensions and `naturalWidth`/`naturalHeight` on images would return the values specified in this attribute. [Explainer](https://github.com/ojanvafai/intrinsicsize-attribute), [examples](https://googlechrome.github.io/samples/intrinsic-size/index.html)"
61067                 },
61068                 {
61069                     "name": "referrerpolicy",
61070                     "description": "A string indicating which referrer to use when fetching the resource:\n\n*   `no-referrer:` The [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will not be sent.\n*   `no-referrer-when-downgrade:` No `Referer` header will be sent when navigating to an origin without TLS (HTTPS). This is a user agent’s default behavior if no policy is otherwise specified.\n*   `origin:` The `Referer` header will include the page of origin's scheme, the host, and the port.\n*   `origin-when-cross-origin:` Navigating to other origins will limit the included referral data to the scheme, the host and the port, while navigating from the same origin will include the referrer's full path.\n*   `unsafe-url:` The `Referer` header will include the origin and the path, but not the fragment, password, or username. This case is unsafe because it can leak origins and paths from TLS-protected resources to insecure origins."
61071                 },
61072                 {
61073                     "name": "sizes",
61074                     "description": "A list of one or more strings separated by commas indicating a set of source sizes. Each source size consists of:\n\n1.  a media condition. This must be omitted for the last item.\n2.  a source size value.\n\nSource size values specify the intended display size of the image. User agents use the current source size to select one of the sources supplied by the `srcset` attribute, when those sources are described using width ('`w`') descriptors. The selected source size affects the intrinsic size of the image (the image’s display size if no CSS styling is applied). If the `srcset` attribute is absent, or contains no values with a width (`w`) descriptor, then the `sizes` attribute has no effect."
61075                 }
61076             ],
61077             "references": [
61078                 {
61079                     "name": "MDN Reference",
61080                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/img"
61081                 }
61082             ]
61083         },
61084         {
61085             "name": "iframe",
61086             "description": {
61087                 "kind": "markdown",
61088                 "value": "The iframe element represents a nested browsing context."
61089             },
61090             "attributes": [
61091                 {
61092                     "name": "src",
61093                     "description": {
61094                         "kind": "markdown",
61095                         "value": "The URL of the page to embed. Use a value of `about:blank` to embed an empty page that conforms to the [same-origin policy](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy#Inherited_origins). Also note that programatically removing an `<iframe>`'s src attribute (e.g. via [`Element.removeAttribute()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttribute \"The Element method removeAttribute() removes the attribute with the specified name from the element.\")) causes `about:blank` to be loaded in the frame in Firefox (from version 65), Chromium-based browsers, and Safari/iOS."
61096                     }
61097                 },
61098                 {
61099                     "name": "srcdoc",
61100                     "description": {
61101                         "kind": "markdown",
61102                         "value": "Inline HTML to embed, overriding the `src` attribute. If a browser does not support the `srcdoc` attribute, it will fall back to the URL in the `src` attribute."
61103                     }
61104                 },
61105                 {
61106                     "name": "name",
61107                     "description": {
61108                         "kind": "markdown",
61109                         "value": "A targetable name for the embedded browsing context. This can be used in the `target` attribute of the [`<a>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a \"The HTML <a> element (or anchor element) creates a hyperlink to other web pages, files, locations within the same page, email addresses, or any other URL.\"), [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\"), or [`<base>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base \"The HTML <base> element specifies the base URL to use for all relative URLs contained within a document. There can be only one <base> element in a document.\") elements; the `formtarget` attribute of the [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") or [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") elements; or the `windowName` parameter in the [`window.open()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/open \"The Window interface's open() method loads the specified resource into the browsing context (window, <iframe> or tab) with the specified name. If the name doesn't exist, then a new window is opened and the specified resource is loaded into its browsing context.\") method."
61110                     }
61111                 },
61112                 {
61113                     "name": "sandbox",
61114                     "valueSet": "sb",
61115                     "description": {
61116                         "kind": "markdown",
61117                         "value": "Applies extra restrictions to the content in the frame. The value of the attribute can either be empty to apply all restrictions, or space-separated tokens to lift particular restrictions:\n\n*   `allow-forms`: Allows the resource to submit forms. If this keyword is not used, form submission is blocked.\n*   `allow-modals`: Lets the resource [open modal windows](https://html.spec.whatwg.org/multipage/origin.html#sandboxed-modals-flag).\n*   `allow-orientation-lock`: Lets the resource [lock the screen orientation](https://developer.mozilla.org/en-US/docs/Web/API/Screen/lockOrientation).\n*   `allow-pointer-lock`: Lets the resource use the [Pointer Lock API](https://developer.mozilla.org/en-US/docs/WebAPI/Pointer_Lock).\n*   `allow-popups`: Allows popups (such as `window.open()`, `target=\"_blank\"`, or `showModalDialog()`). If this keyword is not used, the popup will silently fail to open.\n*   `allow-popups-to-escape-sandbox`: Lets the sandboxed document open new windows without those windows inheriting the sandboxing. For example, this can safely sandbox an advertisement without forcing the same restrictions upon the page the ad links to.\n*   `allow-presentation`: Lets the resource start a [presentation session](https://developer.mozilla.org/en-US/docs/Web/API/PresentationRequest).\n*   `allow-same-origin`: If this token is not used, the resource is treated as being from a special origin that always fails the [same-origin policy](https://developer.mozilla.org/en-US/docs/Glossary/same-origin_policy \"same-origin policy: The same-origin policy is a critical security mechanism that restricts how a document or script loaded from one origin can interact with a resource from another origin.\").\n*   `allow-scripts`: Lets the resource run scripts (but not create popup windows).\n*   `allow-storage-access-by-user-activation` : Lets the resource request access to the parent's storage capabilities with the [Storage Access API](https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API).\n*   `allow-top-navigation`: Lets the resource navigate the top-level browsing context (the one named `_top`).\n*   `allow-top-navigation-by-user-activation`: Lets the resource navigate the top-level browsing context, but only if initiated by a user gesture.\n\n**Notes about sandboxing:**\n\n*   When the embedded document has the same origin as the embedding page, it is **strongly discouraged** to use both `allow-scripts` and `allow-same-origin`, as that lets the embedded document remove the `sandbox` attribute — making it no more secure than not using the `sandbox` attribute at all.\n*   Sandboxing is useless if the attacker can display content outside a sandboxed `iframe` — such as if the viewer opens the frame in a new tab. Such content should be also served from a _separate origin_ to limit potential damage.\n*   The `sandbox` attribute is unsupported in Internet Explorer 9 and earlier."
61118                     }
61119                 },
61120                 {
61121                     "name": "seamless",
61122                     "valueSet": "v"
61123                 },
61124                 {
61125                     "name": "allowfullscreen",
61126                     "valueSet": "v",
61127                     "description": {
61128                         "kind": "markdown",
61129                         "value": "Set to `true` if the `<iframe>` can activate fullscreen mode by calling the [`requestFullscreen()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullscreen \"The Element.requestFullscreen() method issues an asynchronous request to make the element be displayed in full-screen mode.\") method."
61130                     }
61131                 },
61132                 {
61133                     "name": "width",
61134                     "description": {
61135                         "kind": "markdown",
61136                         "value": "The width of the frame in CSS pixels. Default is `300`."
61137                     }
61138                 },
61139                 {
61140                     "name": "height",
61141                     "description": {
61142                         "kind": "markdown",
61143                         "value": "The height of the frame in CSS pixels. Default is `150`."
61144                     }
61145                 },
61146                 {
61147                     "name": "allow",
61148                     "description": "Specifies a [feature policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Feature_Policy) for the `<iframe>`."
61149                 },
61150                 {
61151                     "name": "allowpaymentrequest",
61152                     "description": "Set to `true` if a cross-origin `<iframe>` should be allowed to invoke the [Payment Request API](https://developer.mozilla.org/en-US/docs/Web/API/Payment_Request_API)."
61153                 },
61154                 {
61155                     "name": "allowpaymentrequest",
61156                     "description": "This attribute is considered a legacy attribute and redefined as `allow=\"payment\"`."
61157                 },
61158                 {
61159                     "name": "csp",
61160                     "description": "A [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) enforced for the embedded resource. See [`HTMLIFrameElement.csp`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/csp \"The csp property of the HTMLIFrameElement interface specifies the Content Security Policy that an embedded document must agree to enforce upon itself.\") for details."
61161                 },
61162                 {
61163                     "name": "importance",
61164                     "description": "The download priority of the resource in the `<iframe>`'s `src` attribute. Allowed values:\n\n`auto` (default)\n\nNo preference. The browser uses its own heuristics to decide the priority of the resource.\n\n`high`\n\nThe resource should be downloaded before other lower-priority page resources.\n\n`low`\n\nThe resource should be downloaded after other higher-priority page resources."
61165                 },
61166                 {
61167                     "name": "referrerpolicy",
61168                     "description": "Indicates which [referrer](https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer) to send when fetching the frame's resource:\n\n*   `no-referrer`: The [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will not be sent.\n*   `no-referrer-when-downgrade` (default): The [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will not be sent to [origin](https://developer.mozilla.org/en-US/docs/Glossary/origin \"origin: Web content's origin is defined by the scheme (protocol), host (domain), and port of the URL used to access it. Two objects have the same origin only when the scheme, host, and port all match.\")s without [TLS](https://developer.mozilla.org/en-US/docs/Glossary/TLS \"TLS: Transport Layer Security (TLS), previously known as Secure Sockets Layer (SSL), is a protocol used by applications to communicate securely across a network, preventing tampering with and eavesdropping on email, web browsing, messaging, and other protocols.\") ([HTTPS](https://developer.mozilla.org/en-US/docs/Glossary/HTTPS \"HTTPS: HTTPS (HTTP Secure) is an encrypted version of the HTTP protocol. It usually uses SSL or TLS to encrypt all communication between a client and a server. This secure connection allows clients to safely exchange sensitive data with a server, for example for banking activities or online shopping.\")).\n*   `origin`: The sent referrer will be limited to the origin of the referring page: its [scheme](https://developer.mozilla.org/en-US/docs/Archive/Mozilla/URIScheme), [host](https://developer.mozilla.org/en-US/docs/Glossary/host \"host: A host is a device connected to the Internet (or a local network). Some hosts called servers offer additional services like serving webpages or storing files and emails.\"), and [port](https://developer.mozilla.org/en-US/docs/Glossary/port \"port: For a computer connected to a network with an IP address, a port is a communication endpoint. Ports are designated by numbers, and below 1024 each port is associated by default with a specific protocol.\").\n*   `origin-when-cross-origin`: The referrer sent to other origins will be limited to the scheme, the host, and the port. Navigations on the same origin will still include the path.\n*   `same-origin`: A referrer will be sent for [same origin](https://developer.mozilla.org/en-US/docs/Glossary/Same-origin_policy \"same origin: The same-origin policy is a critical security mechanism that restricts how a document or script loaded from one origin can interact with a resource from another origin.\"), but cross-origin requests will contain no referrer information.\n*   `strict-origin`: Only send the origin of the document as the referrer when the protocol security level stays the same (HTTPS→HTTPS), but don't send it to a less secure destination (HTTPS→HTTP).\n*   `strict-origin-when-cross-origin`: Send a full URL when performing a same-origin request, only send the origin when the protocol security level stays the same (HTTPS→HTTPS), and send no header to a less secure destination (HTTPS→HTTP).\n*   `unsafe-url`: The referrer will include the origin _and_ the path (but not the [fragment](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/hash), [password](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/password), or [username](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/username)). **This value is unsafe**, because it leaks origins and paths from TLS-protected resources to insecure origins."
61169                 }
61170             ],
61171             "references": [
61172                 {
61173                     "name": "MDN Reference",
61174                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/iframe"
61175                 }
61176             ]
61177         },
61178         {
61179             "name": "embed",
61180             "description": {
61181                 "kind": "markdown",
61182                 "value": "The embed element provides an integration point for an external (typically non-HTML) application or interactive content."
61183             },
61184             "attributes": [
61185                 {
61186                     "name": "src",
61187                     "description": {
61188                         "kind": "markdown",
61189                         "value": "The URL of the resource being embedded."
61190                     }
61191                 },
61192                 {
61193                     "name": "type",
61194                     "description": {
61195                         "kind": "markdown",
61196                         "value": "The MIME type to use to select the plug-in to instantiate."
61197                     }
61198                 },
61199                 {
61200                     "name": "width",
61201                     "description": {
61202                         "kind": "markdown",
61203                         "value": "The displayed width of the resource, in [CSS pixels](https://drafts.csswg.org/css-values/#px). This must be an absolute value; percentages are _not_ allowed."
61204                     }
61205                 },
61206                 {
61207                     "name": "height",
61208                     "description": {
61209                         "kind": "markdown",
61210                         "value": "The displayed height of the resource, in [CSS pixels](https://drafts.csswg.org/css-values/#px). This must be an absolute value; percentages are _not_ allowed."
61211                     }
61212                 }
61213             ],
61214             "references": [
61215                 {
61216                     "name": "MDN Reference",
61217                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/embed"
61218                 }
61219             ]
61220         },
61221         {
61222             "name": "object",
61223             "description": {
61224                 "kind": "markdown",
61225                 "value": "The object element can represent an external resource, which, depending on the type of the resource, will either be treated as an image, as a nested browsing context, or as an external resource to be processed by a plugin."
61226             },
61227             "attributes": [
61228                 {
61229                     "name": "data",
61230                     "description": {
61231                         "kind": "markdown",
61232                         "value": "The address of the resource as a valid URL. At least one of **data** and **type** must be defined."
61233                     }
61234                 },
61235                 {
61236                     "name": "type",
61237                     "description": {
61238                         "kind": "markdown",
61239                         "value": "The [content type](https://developer.mozilla.org/en-US/docs/Glossary/Content_type) of the resource specified by **data**. At least one of **data** and **type** must be defined."
61240                     }
61241                 },
61242                 {
61243                     "name": "typemustmatch",
61244                     "valueSet": "v",
61245                     "description": {
61246                         "kind": "markdown",
61247                         "value": "This Boolean attribute indicates if the **type** attribute and the actual [content type](https://developer.mozilla.org/en-US/docs/Glossary/Content_type) of the resource must match to be used."
61248                     }
61249                 },
61250                 {
61251                     "name": "name",
61252                     "description": {
61253                         "kind": "markdown",
61254                         "value": "The name of valid browsing context (HTML5), or the name of the control (HTML 4)."
61255                     }
61256                 },
61257                 {
61258                     "name": "usemap",
61259                     "description": {
61260                         "kind": "markdown",
61261                         "value": "A hash-name reference to a [`<map>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map \"The HTML <map> element is used with <area> elements to define an image map (a clickable link area).\") element; that is a '#' followed by the value of a [`name`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map#attr-name) of a map element."
61262                     }
61263                 },
61264                 {
61265                     "name": "form",
61266                     "description": {
61267                         "kind": "markdown",
61268                         "value": "The form element, if any, that the object element is associated with (its _form owner_). The value of the attribute must be an ID of a [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element in the same document."
61269                     }
61270                 },
61271                 {
61272                     "name": "width",
61273                     "description": {
61274                         "kind": "markdown",
61275                         "value": "The width of the display resource, in [CSS pixels](https://drafts.csswg.org/css-values/#px). -- (Absolute values only. [NO percentages](https://html.spec.whatwg.org/multipage/embedded-content.html#dimension-attributes))"
61276                     }
61277                 },
61278                 {
61279                     "name": "height",
61280                     "description": {
61281                         "kind": "markdown",
61282                         "value": "The height of the displayed resource, in [CSS pixels](https://drafts.csswg.org/css-values/#px). -- (Absolute values only. [NO percentages](https://html.spec.whatwg.org/multipage/embedded-content.html#dimension-attributes))"
61283                     }
61284                 },
61285                 {
61286                     "name": "archive",
61287                     "description": "A space-separated list of URIs for archives of resources for the object."
61288                 },
61289                 {
61290                     "name": "border",
61291                     "description": "The width of a border around the control, in pixels."
61292                 },
61293                 {
61294                     "name": "classid",
61295                     "description": "The URI of the object's implementation. It can be used together with, or in place of, the **data** attribute."
61296                 },
61297                 {
61298                     "name": "codebase",
61299                     "description": "The base path used to resolve relative URIs specified by **classid**, **data**, or **archive**. If not specified, the default is the base URI of the current document."
61300                 },
61301                 {
61302                     "name": "codetype",
61303                     "description": "The content type of the data specified by **classid**."
61304                 },
61305                 {
61306                     "name": "declare",
61307                     "description": "The presence of this Boolean attribute makes this element a declaration only. The object must be instantiated by a subsequent `<object>` element. In HTML5, repeat the <object> element completely each that that the resource is reused."
61308                 },
61309                 {
61310                     "name": "standby",
61311                     "description": "A message that the browser can show while loading the object's implementation and data."
61312                 },
61313                 {
61314                     "name": "tabindex",
61315                     "description": "The position of the element in the tabbing navigation order for the current document."
61316                 }
61317             ],
61318             "references": [
61319                 {
61320                     "name": "MDN Reference",
61321                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/object"
61322                 }
61323             ]
61324         },
61325         {
61326             "name": "param",
61327             "description": {
61328                 "kind": "markdown",
61329                 "value": "The param element defines parameters for plugins invoked by object elements. It does not represent anything on its own."
61330             },
61331             "attributes": [
61332                 {
61333                     "name": "name",
61334                     "description": {
61335                         "kind": "markdown",
61336                         "value": "Name of the parameter."
61337                     }
61338                 },
61339                 {
61340                     "name": "value",
61341                     "description": {
61342                         "kind": "markdown",
61343                         "value": "Specifies the value of the parameter."
61344                     }
61345                 },
61346                 {
61347                     "name": "type",
61348                     "description": "Only used if the `valuetype` is set to \"ref\". Specifies the MIME type of values found at the URI specified by value."
61349                 },
61350                 {
61351                     "name": "valuetype",
61352                     "description": "Specifies the type of the `value` attribute. Possible values are:\n\n*   data: Default value. The value is passed to the object's implementation as a string.\n*   ref: The value is a URI to a resource where run-time values are stored.\n*   object: An ID of another [`<object>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object \"The HTML <object> element represents an external resource, which can be treated as an image, a nested browsing context, or a resource to be handled by a plugin.\") in the same document."
61353                 }
61354             ],
61355             "references": [
61356                 {
61357                     "name": "MDN Reference",
61358                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/param"
61359                 }
61360             ]
61361         },
61362         {
61363             "name": "video",
61364             "description": {
61365                 "kind": "markdown",
61366                 "value": "A video element is used for playing videos or movies, and audio files with captions."
61367             },
61368             "attributes": [
61369                 {
61370                     "name": "src"
61371                 },
61372                 {
61373                     "name": "crossorigin",
61374                     "valueSet": "xo"
61375                 },
61376                 {
61377                     "name": "poster"
61378                 },
61379                 {
61380                     "name": "preload",
61381                     "valueSet": "pl"
61382                 },
61383                 {
61384                     "name": "autoplay",
61385                     "valueSet": "v",
61386                     "description": {
61387                         "kind": "markdown",
61388                         "value": "A Boolean attribute; if specified, the video automatically begins to play back as soon as it can do so without stopping to finish loading the data."
61389                     }
61390                 },
61391                 {
61392                     "name": "mediagroup"
61393                 },
61394                 {
61395                     "name": "loop",
61396                     "valueSet": "v"
61397                 },
61398                 {
61399                     "name": "muted",
61400                     "valueSet": "v"
61401                 },
61402                 {
61403                     "name": "controls",
61404                     "valueSet": "v"
61405                 },
61406                 {
61407                     "name": "width"
61408                 },
61409                 {
61410                     "name": "height"
61411                 }
61412             ],
61413             "references": [
61414                 {
61415                     "name": "MDN Reference",
61416                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/video"
61417                 }
61418             ]
61419         },
61420         {
61421             "name": "audio",
61422             "description": {
61423                 "kind": "markdown",
61424                 "value": "An audio element represents a sound or audio stream."
61425             },
61426             "attributes": [
61427                 {
61428                     "name": "src",
61429                     "description": {
61430                         "kind": "markdown",
61431                         "value": "The URL of the audio to embed. This is subject to [HTTP access controls](https://developer.mozilla.org/en-US/docs/HTTP_access_control). This is optional; you may instead use the [`<source>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source \"The HTML <source> element specifies multiple media resources for the <picture>, the <audio> element, or the <video> element.\") element within the audio block to specify the audio to embed."
61432                     }
61433                 },
61434                 {
61435                     "name": "crossorigin",
61436                     "valueSet": "xo",
61437                     "description": {
61438                         "kind": "markdown",
61439                         "value": "This enumerated attribute indicates whether to use CORS to fetch the related image. [CORS-enabled resources](https://developer.mozilla.org/en-US/docs/CORS_Enabled_Image) can be reused in the [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas \"Use the HTML <canvas> element with either the canvas scripting API or the WebGL API to draw graphics and animations.\") element without being _tainted_. The allowed values are:\n\nanonymous\n\nSends a cross-origin request without a credential. In other words, it sends the `Origin:` HTTP header without a cookie, X.509 certificate, or performing HTTP Basic authentication. If the server does not give credentials to the origin site (by not setting the `Access-Control-Allow-Origin:` HTTP header), the image will be _tainted_, and its usage restricted.\n\nuse-credentials\n\nSends a cross-origin request with a credential. In other words, it sends the `Origin:` HTTP header with a cookie, a certificate, or performing HTTP Basic authentication. If the server does not give credentials to the origin site (through `Access-Control-Allow-Credentials:` HTTP header), the image will be _tainted_ and its usage restricted.\n\nWhen not present, the resource is fetched without a CORS request (i.e. without sending the `Origin:` HTTP header), preventing its non-tainted used in [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas \"Use the HTML <canvas> element with either the canvas scripting API or the WebGL API to draw graphics and animations.\") elements. If invalid, it is handled as if the enumerated keyword **anonymous** was used. See [CORS settings attributes](https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes) for additional information."
61440                     }
61441                 },
61442                 {
61443                     "name": "preload",
61444                     "valueSet": "pl",
61445                     "description": {
61446                         "kind": "markdown",
61447                         "value": "This enumerated attribute is intended to provide a hint to the browser about what the author thinks will lead to the best user experience. It may have one of the following values:\n\n*   `none`: Indicates that the audio should not be preloaded.\n*   `metadata`: Indicates that only audio metadata (e.g. length) is fetched.\n*   `auto`: Indicates that the whole audio file can be downloaded, even if the user is not expected to use it.\n*   _empty string_: A synonym of the `auto` value.\n\nIf not set, `preload`'s default value is browser-defined (i.e. each browser may have its own default value). The spec advises it to be set to `metadata`.\n\n**Usage notes:**\n\n*   The `autoplay` attribute has precedence over `preload`. If `autoplay` is specified, the browser would obviously need to start downloading the audio for playback.\n*   The browser is not forced by the specification to follow the value of this attribute; it is a mere hint."
61448                     }
61449                 },
61450                 {
61451                     "name": "autoplay",
61452                     "valueSet": "v",
61453                     "description": {
61454                         "kind": "markdown",
61455                         "value": "A Boolean attribute: if specified, the audio will automatically begin playback as soon as it can do so, without waiting for the entire audio file to finish downloading.\n\n**Note**: Sites that automatically play audio (or videos with an audio track) can be an unpleasant experience for users, so should be avoided when possible. If you must offer autoplay functionality, you should make it opt-in (requiring a user to specifically enable it). However, this can be useful when creating media elements whose source will be set at a later time, under user control."
61456                     }
61457                 },
61458                 {
61459                     "name": "mediagroup"
61460                 },
61461                 {
61462                     "name": "loop",
61463                     "valueSet": "v",
61464                     "description": {
61465                         "kind": "markdown",
61466                         "value": "A Boolean attribute: if specified, the audio player will automatically seek back to the start upon reaching the end of the audio."
61467                     }
61468                 },
61469                 {
61470                     "name": "muted",
61471                     "valueSet": "v",
61472                     "description": {
61473                         "kind": "markdown",
61474                         "value": "A Boolean attribute that indicates whether the audio will be initially silenced. Its default value is `false`."
61475                     }
61476                 },
61477                 {
61478                     "name": "controls",
61479                     "valueSet": "v",
61480                     "description": {
61481                         "kind": "markdown",
61482                         "value": "If this attribute is present, the browser will offer controls to allow the user to control audio playback, including volume, seeking, and pause/resume playback."
61483                     }
61484                 }
61485             ],
61486             "references": [
61487                 {
61488                     "name": "MDN Reference",
61489                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/audio"
61490                 }
61491             ]
61492         },
61493         {
61494             "name": "source",
61495             "description": {
61496                 "kind": "markdown",
61497                 "value": "The source element allows authors to specify multiple alternative media resources for media elements. It does not represent anything on its own."
61498             },
61499             "attributes": [
61500                 {
61501                     "name": "src",
61502                     "description": {
61503                         "kind": "markdown",
61504                         "value": "Required for [`<audio>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio \"The HTML <audio> element is used to embed sound content in documents. It may contain one or more audio sources, represented using the src attribute or the <source> element: the browser will choose the most suitable one. It can also be the destination for streamed media, using a MediaStream.\") and [`<video>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video \"The HTML Video element (<video>) embeds a media player which supports video playback into the document.\"), address of the media resource. The value of this attribute is ignored when the `<source>` element is placed inside a [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture \"The HTML <picture> element contains zero or more <source> elements and one <img> element to provide versions of an image for different display/device scenarios.\") element."
61505                     }
61506                 },
61507                 {
61508                     "name": "type",
61509                     "description": {
61510                         "kind": "markdown",
61511                         "value": "The MIME-type of the resource, optionally with a `codecs` parameter. See [RFC 4281](https://tools.ietf.org/html/rfc4281) for information about how to specify codecs."
61512                     }
61513                 },
61514                 {
61515                     "name": "sizes",
61516                     "description": "Is a list of source sizes that describes the final rendered width of the image represented by the source. Each source size consists of a comma-separated list of media condition-length pairs. This information is used by the browser to determine, before laying the page out, which image defined in [`srcset`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source#attr-srcset) to use.  \nThe `sizes` attribute has an effect only when the [`<source>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source \"The HTML <source> element specifies multiple media resources for the <picture>, the <audio> element, or the <video> element.\") element is the direct child of a [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture \"The HTML <picture> element contains zero or more <source> elements and one <img> element to provide versions of an image for different display/device scenarios.\") element."
61517                 },
61518                 {
61519                     "name": "srcset",
61520                     "description": "A list of one or more strings separated by commas indicating a set of possible images represented by the source for the browser to use. Each string is composed of:\n\n1.  one URL to an image,\n2.  a width descriptor, that is a positive integer directly followed by `'w'`. The default value, if missing, is the infinity.\n3.  a pixel density descriptor, that is a positive floating number directly followed by `'x'`. The default value, if missing, is `1x`.\n\nEach string in the list must have at least a width descriptor or a pixel density descriptor to be valid. Among the list, there must be only one string containing the same tuple of width descriptor and pixel density descriptor.  \nThe browser chooses the most adequate image to display at a given point of time.  \nThe `srcset` attribute has an effect only when the [`<source>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source \"The HTML <source> element specifies multiple media resources for the <picture>, the <audio> element, or the <video> element.\") element is the direct child of a [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture \"The HTML <picture> element contains zero or more <source> elements and one <img> element to provide versions of an image for different display/device scenarios.\") element."
61521                 },
61522                 {
61523                     "name": "media",
61524                     "description": "[Media query](https://developer.mozilla.org/en-US/docs/CSS/Media_queries) of the resource's intended media; this should be used only in a [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture \"The HTML <picture> element contains zero or more <source> elements and one <img> element to provide versions of an image for different display/device scenarios.\") element."
61525                 }
61526             ],
61527             "references": [
61528                 {
61529                     "name": "MDN Reference",
61530                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/source"
61531                 }
61532             ]
61533         },
61534         {
61535             "name": "track",
61536             "description": {
61537                 "kind": "markdown",
61538                 "value": "The track element allows authors to specify explicit external timed text tracks for media elements. It does not represent anything on its own."
61539             },
61540             "attributes": [
61541                 {
61542                     "name": "default",
61543                     "valueSet": "v",
61544                     "description": {
61545                         "kind": "markdown",
61546                         "value": "This attribute indicates that the track should be enabled unless the user's preferences indicate that another track is more appropriate. This may only be used on one `track` element per media element."
61547                     }
61548                 },
61549                 {
61550                     "name": "kind",
61551                     "valueSet": "tk",
61552                     "description": {
61553                         "kind": "markdown",
61554                         "value": "How the text track is meant to be used. If omitted the default kind is `subtitles`. If the attribute is not present, it will use the `subtitles`. If the attribute contains an invalid value, it will use `metadata`. (Versions of Chrome earlier than 52 treated an invalid value as `subtitles`.) The following keywords are allowed:\n\n*   `subtitles`\n    *   Subtitles provide translation of content that cannot be understood by the viewer. For example dialogue or text that is not English in an English language film.\n    *   Subtitles may contain additional content, usually extra background information. For example the text at the beginning of the Star Wars films, or the date, time, and location of a scene.\n*   `captions`\n    *   Closed captions provide a transcription and possibly a translation of audio.\n    *   It may include important non-verbal information such as music cues or sound effects. It may indicate the cue's source (e.g. music, text, character).\n    *   Suitable for users who are deaf or when the sound is muted.\n*   `descriptions`\n    *   Textual description of the video content.\n    *   Suitable for users who are blind or where the video cannot be seen.\n*   `chapters`\n    *   Chapter titles are intended to be used when the user is navigating the media resource.\n*   `metadata`\n    *   Tracks used by scripts. Not visible to the user."
61555                     }
61556                 },
61557                 {
61558                     "name": "label",
61559                     "description": {
61560                         "kind": "markdown",
61561                         "value": "A user-readable title of the text track which is used by the browser when listing available text tracks."
61562                     }
61563                 },
61564                 {
61565                     "name": "src",
61566                     "description": {
61567                         "kind": "markdown",
61568                         "value": "Address of the track (`.vtt` file). Must be a valid URL. This attribute must be specified and its URL value must have the same origin as the document — unless the [`<audio>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio \"The HTML <audio> element is used to embed sound content in documents. It may contain one or more audio sources, represented using the src attribute or the <source> element: the browser will choose the most suitable one. It can also be the destination for streamed media, using a MediaStream.\") or [`<video>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video \"The HTML Video element (<video>) embeds a media player which supports video playback into the document.\") parent element of the `track` element has a [`crossorigin`](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) attribute."
61569                     }
61570                 },
61571                 {
61572                     "name": "srclang",
61573                     "description": {
61574                         "kind": "markdown",
61575                         "value": "Language of the track text data. It must be a valid [BCP 47](https://r12a.github.io/app-subtags/) language tag. If the `kind` attribute is set to `subtitles,` then `srclang` must be defined."
61576                     }
61577                 }
61578             ],
61579             "references": [
61580                 {
61581                     "name": "MDN Reference",
61582                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/track"
61583                 }
61584             ]
61585         },
61586         {
61587             "name": "map",
61588             "description": {
61589                 "kind": "markdown",
61590                 "value": "The map element, in conjunction with an img element and any area element descendants, defines an image map. The element represents its children."
61591             },
61592             "attributes": [
61593                 {
61594                     "name": "name",
61595                     "description": {
61596                         "kind": "markdown",
61597                         "value": "The name attribute gives the map a name so that it can be referenced. The attribute must be present and must have a non-empty value with no space characters. The value of the name attribute must not be a compatibility-caseless match for the value of the name attribute of another map element in the same document. If the id attribute is also specified, both attributes must have the same value."
61598                     }
61599                 }
61600             ],
61601             "references": [
61602                 {
61603                     "name": "MDN Reference",
61604                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/map"
61605                 }
61606             ]
61607         },
61608         {
61609             "name": "area",
61610             "description": {
61611                 "kind": "markdown",
61612                 "value": "The area element represents either a hyperlink with some text and a corresponding area on an image map, or a dead area on an image map."
61613             },
61614             "attributes": [
61615                 {
61616                     "name": "alt"
61617                 },
61618                 {
61619                     "name": "coords"
61620                 },
61621                 {
61622                     "name": "shape",
61623                     "valueSet": "sh"
61624                 },
61625                 {
61626                     "name": "href"
61627                 },
61628                 {
61629                     "name": "target"
61630                 },
61631                 {
61632                     "name": "download"
61633                 },
61634                 {
61635                     "name": "ping"
61636                 },
61637                 {
61638                     "name": "rel"
61639                 },
61640                 {
61641                     "name": "hreflang"
61642                 },
61643                 {
61644                     "name": "type"
61645                 },
61646                 {
61647                     "name": "accesskey",
61648                     "description": "Specifies a keyboard navigation accelerator for the element. Pressing ALT or a similar key in association with the specified character selects the form control correlated with that key sequence. Page designers are forewarned to avoid key sequences already bound to browsers. This attribute is global since HTML5."
61649                 }
61650             ],
61651             "references": [
61652                 {
61653                     "name": "MDN Reference",
61654                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/area"
61655                 }
61656             ]
61657         },
61658         {
61659             "name": "table",
61660             "description": {
61661                 "kind": "markdown",
61662                 "value": "The table element represents data with more than one dimension, in the form of a table."
61663             },
61664             "attributes": [
61665                 {
61666                     "name": "border"
61667                 },
61668                 {
61669                     "name": "align",
61670                     "description": "This enumerated attribute indicates how the table must be aligned inside the containing document. It may have the following values:\n\n*   left: the table is displayed on the left side of the document;\n*   center: the table is displayed in the center of the document;\n*   right: the table is displayed on the right side of the document.\n\n**Usage Note**\n\n*   **Do not use this attribute**, as it has been deprecated. The [`<table>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table \"The HTML <table> element represents tabular data — that is, information presented in a two-dimensional table comprised of rows and columns of cells containing data.\") element should be styled using [CSS](https://developer.mozilla.org/en-US/docs/CSS). Set [`margin-left`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin-left \"The margin-left CSS property sets the margin area on the left side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\") and [`margin-right`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin-right \"The margin-right CSS property sets the margin area on the right side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\") to `auto` or [`margin`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin \"The margin CSS property sets the margin area on all four sides of an element. It is a shorthand for margin-top, margin-right, margin-bottom, and margin-left.\") to `0 auto` to achieve an effect that is similar to the align attribute.\n*   Prior to Firefox 4, Firefox also supported the `middle`, `absmiddle`, and `abscenter` values as synonyms of `center`, in quirks mode only."
61671                 }
61672             ],
61673             "references": [
61674                 {
61675                     "name": "MDN Reference",
61676                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/table"
61677                 }
61678             ]
61679         },
61680         {
61681             "name": "caption",
61682             "description": {
61683                 "kind": "markdown",
61684                 "value": "The caption element represents the title of the table that is its parent, if it has a parent and that is a table element."
61685             },
61686             "attributes": [
61687                 {
61688                     "name": "align",
61689                     "description": "This enumerated attribute indicates how the caption must be aligned with respect to the table. It may have one of the following values:\n\n`left`\n\nThe caption is displayed to the left of the table.\n\n`top`\n\nThe caption is displayed above the table.\n\n`right`\n\nThe caption is displayed to the right of the table.\n\n`bottom`\n\nThe caption is displayed below the table.\n\n**Usage note:** Do not use this attribute, as it has been deprecated. The [`<caption>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption \"The HTML Table Caption element (<caption>) specifies the caption (or title) of a table, and if used is always the first child of a <table>.\") element should be styled using the [CSS](https://developer.mozilla.org/en-US/docs/CSS) properties [`caption-side`](https://developer.mozilla.org/en-US/docs/Web/CSS/caption-side \"The caption-side CSS property puts the content of a table's <caption> on the specified side. The values are relative to the writing-mode of the table.\") and [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\")."
61690                 }
61691             ],
61692             "references": [
61693                 {
61694                     "name": "MDN Reference",
61695                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/caption"
61696                 }
61697             ]
61698         },
61699         {
61700             "name": "colgroup",
61701             "description": {
61702                 "kind": "markdown",
61703                 "value": "The colgroup element represents a group of one or more columns in the table that is its parent, if it has a parent and that is a table element."
61704             },
61705             "attributes": [
61706                 {
61707                     "name": "span"
61708                 },
61709                 {
61710                     "name": "align",
61711                     "description": "This enumerated attribute specifies how horizontal alignment of each column cell content will be handled. Possible values are:\n\n*   `left`, aligning the content to the left of the cell\n*   `center`, centering the content in the cell\n*   `right`, aligning the content to the right of the cell\n*   `justify`, inserting spaces into the textual content so that the content is justified in the cell\n*   `char`, aligning the textual content on a special character with a minimal offset, defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col#attr-charoff) attributes Unimplemented (see [bug 2212](https://bugzilla.mozilla.org/show_bug.cgi?id=2212 \"character alignment not implemented (align=char, charoff=, text-align:<string>)\")).\n\nIf this attribute is not set, the `left` value is assumed. The descendant [`<col>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col \"The HTML <col> element defines a column within a table and is used for defining common semantics on all common cells. It is generally found within a <colgroup> element.\") elements may override this value using their own [`align`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col#attr-align) attribute.\n\n**Note:** Do not use this attribute as it is obsolete (not supported) in the latest standard.\n\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values:\n    *   Do not try to set the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property on a selector giving a [`<colgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup \"The HTML <colgroup> element defines a group of columns within a table.\") element. Because [`<td>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td \"The HTML <td> element defines a cell of a table that contains data. It participates in the table model.\") elements are not descendant of the [`<colgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup \"The HTML <colgroup> element defines a group of columns within a table.\") element, they won't inherit it.\n    *   If the table doesn't use a [`colspan`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-colspan) attribute, use one `td:nth-child(an+b)` CSS selector per column, where a is the total number of the columns in the table and b is the ordinal position of this column in the table. Only after this selector the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property can be used.\n    *   If the table does use a [`colspan`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-colspan) attribute, the effect can be achieved by combining adequate CSS attribute selectors like `[colspan=n]`, though this is not trivial.\n*   To achieve the same effect as the `char` value, in CSS3, you can use the value of the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup#attr-char) as the value of the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property Unimplemented."
61712                 }
61713             ],
61714             "references": [
61715                 {
61716                     "name": "MDN Reference",
61717                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/colgroup"
61718                 }
61719             ]
61720         },
61721         {
61722             "name": "col",
61723             "description": {
61724                 "kind": "markdown",
61725                 "value": "If a col element has a parent and that is a colgroup element that itself has a parent that is a table element, then the col element represents one or more columns in the column group represented by that colgroup."
61726             },
61727             "attributes": [
61728                 {
61729                     "name": "span"
61730                 },
61731                 {
61732                     "name": "align",
61733                     "description": "This enumerated attribute specifies how horizontal alignment of each column cell content will be handled. Possible values are:\n\n*   `left`, aligning the content to the left of the cell\n*   `center`, centering the content in the cell\n*   `right`, aligning the content to the right of the cell\n*   `justify`, inserting spaces into the textual content so that the content is justified in the cell\n*   `char`, aligning the textual content on a special character with a minimal offset, defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col#attr-charoff) attributes Unimplemented (see [bug 2212](https://bugzilla.mozilla.org/show_bug.cgi?id=2212 \"character alignment not implemented (align=char, charoff=, text-align:<string>)\")).\n\nIf this attribute is not set, its value is inherited from the [`align`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup#attr-align) of the [`<colgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup \"The HTML <colgroup> element defines a group of columns within a table.\") element this `<col>` element belongs too. If there are none, the `left` value is assumed.\n\n**Note:** Do not use this attribute as it is obsolete (not supported) in the latest standard.\n\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values:\n    *   Do not try to set the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property on a selector giving a [`<col>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col \"The HTML <col> element defines a column within a table and is used for defining common semantics on all common cells. It is generally found within a <colgroup> element.\") element. Because [`<td>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td \"The HTML <td> element defines a cell of a table that contains data. It participates in the table model.\") elements are not descendant of the [`<col>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col \"The HTML <col> element defines a column within a table and is used for defining common semantics on all common cells. It is generally found within a <colgroup> element.\") element, they won't inherit it.\n    *   If the table doesn't use a [`colspan`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-colspan) attribute, use the `td:nth-child(an+b)` CSS selector. Set `a` to zero and `b` to the position of the column in the table, e.g. `td:nth-child(2) { text-align: right; }` to right-align the second column.\n    *   If the table does use a [`colspan`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-colspan) attribute, the effect can be achieved by combining adequate CSS attribute selectors like `[colspan=n]`, though this is not trivial.\n*   To achieve the same effect as the `char` value, in CSS3, you can use the value of the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col#attr-char) as the value of the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property Unimplemented."
61734                 }
61735             ],
61736             "references": [
61737                 {
61738                     "name": "MDN Reference",
61739                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/col"
61740                 }
61741             ]
61742         },
61743         {
61744             "name": "tbody",
61745             "description": {
61746                 "kind": "markdown",
61747                 "value": "The tbody element represents a block of rows that consist of a body of data for the parent table element, if the tbody element has a parent and it is a table."
61748             },
61749             "attributes": [
61750                 {
61751                     "name": "align",
61752                     "description": "This enumerated attribute specifies how horizontal alignment of each cell content will be handled. Possible values are:\n\n*   `left`, aligning the content to the left of the cell\n*   `center`, centering the content in the cell\n*   `right`, aligning the content to the right of the cell\n*   `justify`, inserting spaces into the textual content so that the content is justified in the cell\n*   `char`, aligning the textual content on a special character with a minimal offset, defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody#attr-charoff) attributes.\n\nIf this attribute is not set, the `left` value is assumed.\n\n**Note:** Do not use this attribute as it is obsolete (not supported) in the latest standard.\n\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values, use the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property on it.\n*   To achieve the same effect as the `char` value, in CSS3, you can use the value of the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody#attr-char) as the value of the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property Unimplemented."
61753                 }
61754             ],
61755             "references": [
61756                 {
61757                     "name": "MDN Reference",
61758                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/tbody"
61759                 }
61760             ]
61761         },
61762         {
61763             "name": "thead",
61764             "description": {
61765                 "kind": "markdown",
61766                 "value": "The thead element represents the block of rows that consist of the column labels (headers) for the parent table element, if the thead element has a parent and it is a table."
61767             },
61768             "attributes": [
61769                 {
61770                     "name": "align",
61771                     "description": "This enumerated attribute specifies how horizontal alignment of each cell content will be handled. Possible values are:\n\n*   `left`, aligning the content to the left of the cell\n*   `center`, centering the content in the cell\n*   `right`, aligning the content to the right of the cell\n*   `justify`, inserting spaces into the textual content so that the content is justified in the cell\n*   `char`, aligning the textual content on a special character with a minimal offset, defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead#attr-charoff) attributes Unimplemented (see [bug 2212](https://bugzilla.mozilla.org/show_bug.cgi?id=2212 \"character alignment not implemented (align=char, charoff=, text-align:<string>)\")).\n\nIf this attribute is not set, the `left` value is assumed.\n\n**Note:** Do not use this attribute as it is obsolete (not supported) in the latest standard.\n\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values, use the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property on it.\n*   To achieve the same effect as the `char` value, in CSS3, you can use the value of the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead#attr-char) as the value of the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property Unimplemented."
61772                 }
61773             ],
61774             "references": [
61775                 {
61776                     "name": "MDN Reference",
61777                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/thead"
61778                 }
61779             ]
61780         },
61781         {
61782             "name": "tfoot",
61783             "description": {
61784                 "kind": "markdown",
61785                 "value": "The tfoot element represents the block of rows that consist of the column summaries (footers) for the parent table element, if the tfoot element has a parent and it is a table."
61786             },
61787             "attributes": [
61788                 {
61789                     "name": "align",
61790                     "description": "This enumerated attribute specifies how horizontal alignment of each cell content will be handled. Possible values are:\n\n*   `left`, aligning the content to the left of the cell\n*   `center`, centering the content in the cell\n*   `right`, aligning the content to the right of the cell\n*   `justify`, inserting spaces into the textual content so that the content is justified in the cell\n*   `char`, aligning the textual content on a special character with a minimal offset, defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody#attr-charoff) attributes Unimplemented (see [bug 2212](https://bugzilla.mozilla.org/show_bug.cgi?id=2212 \"character alignment not implemented (align=char, charoff=, text-align:<string>)\")).\n\nIf this attribute is not set, the `left` value is assumed.\n\n**Note:** Do not use this attribute as it is obsolete (not supported) in the latest standard.\n\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values, use the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property on it.\n*   To achieve the same effect as the `char` value, in CSS3, you can use the value of the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tfoot#attr-char) as the value of the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property Unimplemented."
61791                 }
61792             ],
61793             "references": [
61794                 {
61795                     "name": "MDN Reference",
61796                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/tfoot"
61797                 }
61798             ]
61799         },
61800         {
61801             "name": "tr",
61802             "description": {
61803                 "kind": "markdown",
61804                 "value": "The tr element represents a row of cells in a table."
61805             },
61806             "attributes": [
61807                 {
61808                     "name": "align",
61809                     "description": "A [`DOMString`](https://developer.mozilla.org/en-US/docs/Web/API/DOMString \"DOMString is a UTF-16 String. As JavaScript already uses such strings, DOMString is mapped directly to a String.\") which specifies how the cell's context should be aligned horizontally within the cells in the row; this is shorthand for using `align` on every cell in the row individually. Possible values are:\n\n`left`\n\nAlign the content of each cell at its left edge.\n\n`center`\n\nCenter the contents of each cell between their left and right edges.\n\n`right`\n\nAlign the content of each cell at its right edge.\n\n`justify`\n\nWiden whitespaces within the text of each cell so that the text fills the full width of each cell (full justification).\n\n`char`\n\nAlign each cell in the row on a specific character (such that each row in the column that is configured this way will horizontally align its cells on that character). This uses the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr#attr-charoff) to establish the alignment character (typically \".\" or \",\" when aligning numerical data) and the number of characters that should follow the alignment character. This alignment type was never widely supported.\n\nIf no value is expressly set for `align`, the parent node's value is inherited.\n\nInstead of using the obsolete `align` attribute, you should instead use the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property to establish `left`, `center`, `right`, or `justify` alignment for the row's cells. To apply character-based alignment, set the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property to the alignment character (such as `\".\"` or `\",\"`)."
61810                 }
61811             ],
61812             "references": [
61813                 {
61814                     "name": "MDN Reference",
61815                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/tr"
61816                 }
61817             ]
61818         },
61819         {
61820             "name": "td",
61821             "description": {
61822                 "kind": "markdown",
61823                 "value": "The td element represents a data cell in a table."
61824             },
61825             "attributes": [
61826                 {
61827                     "name": "colspan"
61828                 },
61829                 {
61830                     "name": "rowspan"
61831                 },
61832                 {
61833                     "name": "headers"
61834                 },
61835                 {
61836                     "name": "abbr",
61837                     "description": "This attribute contains a short abbreviated description of the cell's content. Some user-agents, such as speech readers, may present this description before the content itself.\n\n**Note:** Do not use this attribute as it is obsolete in the latest standard. Alternatively, you can put the abbreviated description inside the cell and place the long content in the **title** attribute."
61838                 },
61839                 {
61840                     "name": "align",
61841                     "description": "This enumerated attribute specifies how the cell content's horizontal alignment will be handled. Possible values are:\n\n*   `left`: The content is aligned to the left of the cell.\n*   `center`: The content is centered in the cell.\n*   `right`: The content is aligned to the right of the cell.\n*   `justify` (with text only): The content is stretched out inside the cell so that it covers its entire width.\n*   `char` (with text only): The content is aligned to a character inside the `<th>` element with minimal offset. This character is defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-charoff) attributes Unimplemented (see [bug 2212](https://bugzilla.mozilla.org/show_bug.cgi?id=2212 \"character alignment not implemented (align=char, charoff=, text-align:<string>)\")).\n\nThe default value when this attribute is not specified is `left`.\n\n**Note:** Do not use this attribute as it is obsolete in the latest standard.\n\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values, apply the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property to the element.\n*   To achieve the same effect as the `char` value, give the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property the same value you would use for the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-char). Unimplemented in CSS3."
61842                 },
61843                 {
61844                     "name": "axis",
61845                     "description": "This attribute contains a list of space-separated strings. Each string is the `id` of a group of cells that this header applies to.\n\n**Note:** Do not use this attribute as it is obsolete in the latest standard."
61846                 },
61847                 {
61848                     "name": "bgcolor",
61849                     "description": "This attribute defines the background color of each cell in a column. It consists of a 6-digit hexadecimal code as defined in [sRGB](https://www.w3.org/Graphics/Color/sRGB) and is prefixed by '#'. This attribute may be used with one of sixteen predefined color strings:\n\n \n\n`black` = \"#000000\"\n\n \n\n`green` = \"#008000\"\n\n \n\n`silver` = \"#C0C0C0\"\n\n \n\n`lime` = \"#00FF00\"\n\n \n\n`gray` = \"#808080\"\n\n \n\n`olive` = \"#808000\"\n\n \n\n`white` = \"#FFFFFF\"\n\n \n\n`yellow` = \"#FFFF00\"\n\n \n\n`maroon` = \"#800000\"\n\n \n\n`navy` = \"#000080\"\n\n \n\n`red` = \"#FF0000\"\n\n \n\n`blue` = \"#0000FF\"\n\n \n\n`purple` = \"#800080\"\n\n \n\n`teal` = \"#008080\"\n\n \n\n`fuchsia` = \"#FF00FF\"\n\n \n\n`aqua` = \"#00FFFF\"\n\n**Note:** Do not use this attribute, as it is non-standard and only implemented in some versions of Microsoft Internet Explorer: The [`<td>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td \"The HTML <td> element defines a cell of a table that contains data. It participates in the table model.\") element should be styled using [CSS](https://developer.mozilla.org/en-US/docs/CSS). To create a similar effect use the [`background-color`](https://developer.mozilla.org/en-US/docs/Web/CSS/background-color \"The background-color CSS property sets the background color of an element.\") property in [CSS](https://developer.mozilla.org/en-US/docs/CSS) instead."
61850                 }
61851             ],
61852             "references": [
61853                 {
61854                     "name": "MDN Reference",
61855                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/td"
61856                 }
61857             ]
61858         },
61859         {
61860             "name": "th",
61861             "description": {
61862                 "kind": "markdown",
61863                 "value": "The th element represents a header cell in a table."
61864             },
61865             "attributes": [
61866                 {
61867                     "name": "colspan"
61868                 },
61869                 {
61870                     "name": "rowspan"
61871                 },
61872                 {
61873                     "name": "headers"
61874                 },
61875                 {
61876                     "name": "scope",
61877                     "valueSet": "s"
61878                 },
61879                 {
61880                     "name": "sorted"
61881                 },
61882                 {
61883                     "name": "abbr",
61884                     "description": {
61885                         "kind": "markdown",
61886                         "value": "This attribute contains a short abbreviated description of the cell's content. Some user-agents, such as speech readers, may present this description before the content itself."
61887                     }
61888                 },
61889                 {
61890                     "name": "align",
61891                     "description": "This enumerated attribute specifies how the cell content's horizontal alignment will be handled. Possible values are:\n\n*   `left`: The content is aligned to the left of the cell.\n*   `center`: The content is centered in the cell.\n*   `right`: The content is aligned to the right of the cell.\n*   `justify` (with text only): The content is stretched out inside the cell so that it covers its entire width.\n*   `char` (with text only): The content is aligned to a character inside the `<th>` element with minimal offset. This character is defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#attr-charoff) attributes.\n\nThe default value when this attribute is not specified is `left`.\n\n**Note:** Do not use this attribute as it is obsolete in the latest standard.\n\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values, apply the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property to the element.\n*   To achieve the same effect as the `char` value, give the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property the same value you would use for the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#attr-char). Unimplemented in CSS3."
61892                 },
61893                 {
61894                     "name": "axis",
61895                     "description": "This attribute contains a list of space-separated strings. Each string is the `id` of a group of cells that this header applies to.\n\n**Note:** Do not use this attribute as it is obsolete in the latest standard: use the [`scope`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#attr-scope) attribute instead."
61896                 },
61897                 {
61898                     "name": "bgcolor",
61899                     "description": "This attribute defines the background color of each cell in a column. It consists of a 6-digit hexadecimal code as defined in [sRGB](https://www.w3.org/Graphics/Color/sRGB) and is prefixed by '#'. This attribute may be used with one of sixteen predefined color strings:\n\n \n\n`black` = \"#000000\"\n\n \n\n`green` = \"#008000\"\n\n \n\n`silver` = \"#C0C0C0\"\n\n \n\n`lime` = \"#00FF00\"\n\n \n\n`gray` = \"#808080\"\n\n \n\n`olive` = \"#808000\"\n\n \n\n`white` = \"#FFFFFF\"\n\n \n\n`yellow` = \"#FFFF00\"\n\n \n\n`maroon` = \"#800000\"\n\n \n\n`navy` = \"#000080\"\n\n \n\n`red` = \"#FF0000\"\n\n \n\n`blue` = \"#0000FF\"\n\n \n\n`purple` = \"#800080\"\n\n \n\n`teal` = \"#008080\"\n\n \n\n`fuchsia` = \"#FF00FF\"\n\n \n\n`aqua` = \"#00FFFF\"\n\n**Note:** Do not use this attribute, as it is non-standard and only implemented in some versions of Microsoft Internet Explorer: The [`<th>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th \"The HTML <th> element defines a cell as header of a group of table cells. The exact nature of this group is defined by the scope and headers attributes.\") element should be styled using [CSS](https://developer.mozilla.org/en-US/docs/Web/CSS). To create a similar effect use the [`background-color`](https://developer.mozilla.org/en-US/docs/Web/CSS/background-color \"The background-color CSS property sets the background color of an element.\") property in [CSS](https://developer.mozilla.org/en-US/docs/Web/CSS) instead."
61900                 }
61901             ],
61902             "references": [
61903                 {
61904                     "name": "MDN Reference",
61905                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/th"
61906                 }
61907             ]
61908         },
61909         {
61910             "name": "form",
61911             "description": {
61912                 "kind": "markdown",
61913                 "value": "The form element represents a collection of form-associated elements, some of which can represent editable values that can be submitted to a server for processing."
61914             },
61915             "attributes": [
61916                 {
61917                     "name": "accept-charset",
61918                     "description": {
61919                         "kind": "markdown",
61920                         "value": "A space- or comma-delimited list of character encodings that the server accepts. The browser uses them in the order in which they are listed. The default value, the reserved string `\"UNKNOWN\"`, indicates the same encoding as that of the document containing the form element.  \nIn previous versions of HTML, the different character encodings could be delimited by spaces or commas. In HTML5, only spaces are allowed as delimiters."
61921                     }
61922                 },
61923                 {
61924                     "name": "action",
61925                     "description": {
61926                         "kind": "markdown",
61927                         "value": "The URI of a program that processes the form information. This value can be overridden by a [`formaction`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formaction) attribute on a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") or [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element."
61928                     }
61929                 },
61930                 {
61931                     "name": "autocomplete",
61932                     "valueSet": "o",
61933                     "description": {
61934                         "kind": "markdown",
61935                         "value": "Indicates whether input elements can by default have their values automatically completed by the browser. This setting can be overridden by an `autocomplete` attribute on an element belonging to the form. Possible values are:\n\n*   `off`: The user must explicitly enter a value into each field for every use, or the document provides its own auto-completion method; the browser does not automatically complete entries.\n*   `on`: The browser can automatically complete values based on values that the user has previously entered in the form.\n\nFor most modern browsers (including Firefox 38+, Google Chrome 34+, IE 11+) setting the autocomplete attribute will not prevent a browser's password manager from asking the user if they want to store login fields (username and password), if the user permits the storage the browser will autofill the login the next time the user visits the page. See [The autocomplete attribute and login fields](https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion#The_autocomplete_attribute_and_login_fields)."
61936                     }
61937                 },
61938                 {
61939                     "name": "enctype",
61940                     "valueSet": "et",
61941                     "description": {
61942                         "kind": "markdown",
61943                         "value": "When the value of the `method` attribute is `post`, enctype is the [MIME type](https://en.wikipedia.org/wiki/Mime_type) of content that is used to submit the form to the server. Possible values are:\n\n*   `application/x-www-form-urlencoded`: The default value if the attribute is not specified.\n*   `multipart/form-data`: The value used for an [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element with the `type` attribute set to \"file\".\n*   `text/plain`: (HTML5)\n\nThis value can be overridden by a [`formenctype`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formenctype) attribute on a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") or [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element."
61944                     }
61945                 },
61946                 {
61947                     "name": "method",
61948                     "valueSet": "m",
61949                     "description": {
61950                         "kind": "markdown",
61951                         "value": "The [HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP) method that the browser uses to submit the form. Possible values are:\n\n*   `post`: Corresponds to the HTTP [POST method](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5) ; form data are included in the body of the form and sent to the server.\n*   `get`: Corresponds to the HTTP [GET method](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3); form data are appended to the `action` attribute URI with a '?' as separator, and the resulting URI is sent to the server. Use this method when the form has no side-effects and contains only ASCII characters.\n*   `dialog`: Use when the form is inside a [`<dialog>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog \"The HTML <dialog> element represents a dialog box or other interactive component, such as an inspector or window.\") element to close the dialog when submitted.\n\nThis value can be overridden by a [`formmethod`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formmethod) attribute on a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") or [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element."
61952                     }
61953                 },
61954                 {
61955                     "name": "name",
61956                     "description": {
61957                         "kind": "markdown",
61958                         "value": "The name of the form. In HTML 4, its use is deprecated (`id` should be used instead). It must be unique among the forms in a document and not just an empty string in HTML 5."
61959                     }
61960                 },
61961                 {
61962                     "name": "novalidate",
61963                     "valueSet": "v",
61964                     "description": {
61965                         "kind": "markdown",
61966                         "value": "This Boolean attribute indicates that the form is not to be validated when submitted. If this attribute is not specified (and therefore the form is validated), this default setting can be overridden by a [`formnovalidate`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formnovalidate) attribute on a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") or [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element belonging to the form."
61967                     }
61968                 },
61969                 {
61970                     "name": "target",
61971                     "description": {
61972                         "kind": "markdown",
61973                         "value": "A name or keyword indicating where to display the response that is received after submitting the form. In HTML 4, this is the name/keyword for a frame. In HTML5, it is a name/keyword for a _browsing context_ (for example, tab, window, or inline frame). The following keywords have special meanings:\n\n*   `_self`: Load the response into the same HTML 4 frame (or HTML5 browsing context) as the current one. This value is the default if the attribute is not specified.\n*   `_blank`: Load the response into a new unnamed HTML 4 window or HTML5 browsing context.\n*   `_parent`: Load the response into the HTML 4 frameset parent of the current frame, or HTML5 parent browsing context of the current one. If there is no parent, this option behaves the same way as `_self`.\n*   `_top`: HTML 4: Load the response into the full original window, and cancel all other frames. HTML5: Load the response into the top-level browsing context (i.e., the browsing context that is an ancestor of the current one, and has no parent). If there is no parent, this option behaves the same way as `_self`.\n*   _iframename_: The response is displayed in a named [`<iframe>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe \"The HTML Inline Frame element (<iframe>) represents a nested browsing context, embedding another HTML page into the current one.\").\n\nHTML5: This value can be overridden by a [`formtarget`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formtarget) attribute on a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") or [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element."
61974                     }
61975                 },
61976                 {
61977                     "name": "accept",
61978                     "description": "A comma-separated list of content types that the server accepts.\n\n**Usage note:** This attribute has been removed in HTML5 and should no longer be used. Instead, use the [`accept`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-accept) attribute of the specific [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element."
61979                 },
61980                 {
61981                     "name": "autocapitalize",
61982                     "description": "This is a nonstandard attribute used by iOS Safari Mobile which controls whether and how the text value for textual form control descendants should be automatically capitalized as it is entered/edited by the user. If the `autocapitalize` attribute is specified on an individual form control descendant, it trumps the form-wide `autocapitalize` setting. The non-deprecated values are available in iOS 5 and later. The default value is `sentences`. Possible values are:\n\n*   `none`: Completely disables automatic capitalization\n*   `sentences`: Automatically capitalize the first letter of sentences.\n*   `words`: Automatically capitalize the first letter of words.\n*   `characters`: Automatically capitalize all characters.\n*   `on`: Deprecated since iOS 5.\n*   `off`: Deprecated since iOS 5."
61983                 }
61984             ],
61985             "references": [
61986                 {
61987                     "name": "MDN Reference",
61988                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/form"
61989                 }
61990             ]
61991         },
61992         {
61993             "name": "label",
61994             "description": {
61995                 "kind": "markdown",
61996                 "value": "The label element represents a caption in a user interface. The caption can be associated with a specific form control, known as the label element's labeled control, either using the for attribute, or by putting the form control inside the label element itself."
61997             },
61998             "attributes": [
61999                 {
62000                     "name": "form",
62001                     "description": {
62002                         "kind": "markdown",
62003                         "value": "The [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element with which the label is associated (its _form owner_). If specified, the value of the attribute is the `id` of a [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element in the same document. This lets you place label elements anywhere within a document, not just as descendants of their form elements."
62004                     }
62005                 },
62006                 {
62007                     "name": "for",
62008                     "description": {
62009                         "kind": "markdown",
62010                         "value": "The [`id`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-id) of a [labelable](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Form_labelable) form-related element in the same document as the `<label>` element. The first element in the document with an `id` matching the value of the `for` attribute is the _labeled control_ for this label element, if it is a labelable element. If it is not labelable then the `for` attribute has no effect. If there are other elements which also match the `id` value, later in the document, they are not considered.\n\n**Note**: A `<label>` element can have both a `for` attribute and a contained control element, as long as the `for` attribute points to the contained control element."
62011                     }
62012                 }
62013             ],
62014             "references": [
62015                 {
62016                     "name": "MDN Reference",
62017                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/label"
62018                 }
62019             ]
62020         },
62021         {
62022             "name": "input",
62023             "description": {
62024                 "kind": "markdown",
62025                 "value": "The input element represents a typed data field, usually with a form control to allow the user to edit the data."
62026             },
62027             "attributes": [
62028                 {
62029                     "name": "accept"
62030                 },
62031                 {
62032                     "name": "alt"
62033                 },
62034                 {
62035                     "name": "autocomplete",
62036                     "valueSet": "inputautocomplete"
62037                 },
62038                 {
62039                     "name": "autofocus",
62040                     "valueSet": "v"
62041                 },
62042                 {
62043                     "name": "checked",
62044                     "valueSet": "v"
62045                 },
62046                 {
62047                     "name": "dirname"
62048                 },
62049                 {
62050                     "name": "disabled",
62051                     "valueSet": "v"
62052                 },
62053                 {
62054                     "name": "form"
62055                 },
62056                 {
62057                     "name": "formaction"
62058                 },
62059                 {
62060                     "name": "formenctype",
62061                     "valueSet": "et"
62062                 },
62063                 {
62064                     "name": "formmethod",
62065                     "valueSet": "fm"
62066                 },
62067                 {
62068                     "name": "formnovalidate",
62069                     "valueSet": "v"
62070                 },
62071                 {
62072                     "name": "formtarget"
62073                 },
62074                 {
62075                     "name": "height"
62076                 },
62077                 {
62078                     "name": "inputmode",
62079                     "valueSet": "im"
62080                 },
62081                 {
62082                     "name": "list"
62083                 },
62084                 {
62085                     "name": "max"
62086                 },
62087                 {
62088                     "name": "maxlength"
62089                 },
62090                 {
62091                     "name": "min"
62092                 },
62093                 {
62094                     "name": "minlength"
62095                 },
62096                 {
62097                     "name": "multiple",
62098                     "valueSet": "v"
62099                 },
62100                 {
62101                     "name": "name"
62102                 },
62103                 {
62104                     "name": "pattern"
62105                 },
62106                 {
62107                     "name": "placeholder"
62108                 },
62109                 {
62110                     "name": "readonly",
62111                     "valueSet": "v"
62112                 },
62113                 {
62114                     "name": "required",
62115                     "valueSet": "v"
62116                 },
62117                 {
62118                     "name": "size"
62119                 },
62120                 {
62121                     "name": "src"
62122                 },
62123                 {
62124                     "name": "step"
62125                 },
62126                 {
62127                     "name": "type",
62128                     "valueSet": "t"
62129                 },
62130                 {
62131                     "name": "value"
62132                 },
62133                 {
62134                     "name": "width"
62135                 }
62136             ],
62137             "references": [
62138                 {
62139                     "name": "MDN Reference",
62140                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/input"
62141                 }
62142             ]
62143         },
62144         {
62145             "name": "button",
62146             "description": {
62147                 "kind": "markdown",
62148                 "value": "The button element represents a button labeled by its contents."
62149             },
62150             "attributes": [
62151                 {
62152                     "name": "autofocus",
62153                     "valueSet": "v",
62154                     "description": {
62155                         "kind": "markdown",
62156                         "value": "This Boolean attribute lets you specify that the button should have input focus when the page loads, unless the user overrides it, for example by typing in a different control. Only one form-associated element in a document can have this attribute specified."
62157                     }
62158                 },
62159                 {
62160                     "name": "disabled",
62161                     "valueSet": "v",
62162                     "description": {
62163                         "kind": "markdown",
62164                         "value": "This Boolean attribute indicates that the user cannot interact with the button. If this attribute is not specified, the button inherits its setting from the containing element, for example [`<fieldset>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset \"The HTML <fieldset> element is used to group several controls as well as labels (<label>) within a web form.\"); if there is no containing element with the **disabled** attribute set, then the button is enabled.\n\nFirefox will, unlike other browsers, by default, [persist the dynamic disabled state](https://stackoverflow.com/questions/5985839/bug-with-firefox-disabled-attribute-of-input-not-resetting-when-refreshing) of a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") across page loads. Use the [`autocomplete`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-autocomplete) attribute to control this feature."
62165                     }
62166                 },
62167                 {
62168                     "name": "form",
62169                     "description": {
62170                         "kind": "markdown",
62171                         "value": "The form element that the button is associated with (its _form owner_). The value of the attribute must be the **id** attribute of a [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element in the same document. If this attribute is not specified, the `<button>` element will be associated to an ancestor [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element, if one exists. This attribute enables you to associate `<button>` elements to [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") elements anywhere within a document, not just as descendants of [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") elements."
62172                     }
62173                 },
62174                 {
62175                     "name": "formaction",
62176                     "description": {
62177                         "kind": "markdown",
62178                         "value": "The URI of a program that processes the information submitted by the button. If specified, it overrides the [`action`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-action) attribute of the button's form owner."
62179                     }
62180                 },
62181                 {
62182                     "name": "formenctype",
62183                     "valueSet": "et",
62184                     "description": {
62185                         "kind": "markdown",
62186                         "value": "If the button is a submit button, this attribute specifies the type of content that is used to submit the form to the server. Possible values are:\n\n*   `application/x-www-form-urlencoded`: The default value if the attribute is not specified.\n*   `multipart/form-data`: Use this value if you are using an [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element with the [`type`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-type) attribute set to `file`.\n*   `text/plain`\n\nIf this attribute is specified, it overrides the [`enctype`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-enctype) attribute of the button's form owner."
62187                     }
62188                 },
62189                 {
62190                     "name": "formmethod",
62191                     "valueSet": "fm",
62192                     "description": {
62193                         "kind": "markdown",
62194                         "value": "If the button is a submit button, this attribute specifies the HTTP method that the browser uses to submit the form. Possible values are:\n\n*   `post`: The data from the form are included in the body of the form and sent to the server.\n*   `get`: The data from the form are appended to the **form** attribute URI, with a '?' as a separator, and the resulting URI is sent to the server. Use this method when the form has no side-effects and contains only ASCII characters.\n\nIf specified, this attribute overrides the [`method`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-method) attribute of the button's form owner."
62195                     }
62196                 },
62197                 {
62198                     "name": "formnovalidate",
62199                     "valueSet": "v",
62200                     "description": {
62201                         "kind": "markdown",
62202                         "value": "If the button is a submit button, this Boolean attribute specifies that the form is not to be validated when it is submitted. If this attribute is specified, it overrides the [`novalidate`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-novalidate) attribute of the button's form owner."
62203                     }
62204                 },
62205                 {
62206                     "name": "formtarget",
62207                     "description": {
62208                         "kind": "markdown",
62209                         "value": "If the button is a submit button, this attribute is a name or keyword indicating where to display the response that is received after submitting the form. This is a name of, or keyword for, a _browsing context_ (for example, tab, window, or inline frame). If this attribute is specified, it overrides the [`target`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-target) attribute of the button's form owner. The following keywords have special meanings:\n\n*   `_self`: Load the response into the same browsing context as the current one. This value is the default if the attribute is not specified.\n*   `_blank`: Load the response into a new unnamed browsing context.\n*   `_parent`: Load the response into the parent browsing context of the current one. If there is no parent, this option behaves the same way as `_self`.\n*   `_top`: Load the response into the top-level browsing context (that is, the browsing context that is an ancestor of the current one, and has no parent). If there is no parent, this option behaves the same way as `_self`."
62210                     }
62211                 },
62212                 {
62213                     "name": "name",
62214                     "description": {
62215                         "kind": "markdown",
62216                         "value": "The name of the button, which is submitted with the form data."
62217                     }
62218                 },
62219                 {
62220                     "name": "type",
62221                     "valueSet": "bt",
62222                     "description": {
62223                         "kind": "markdown",
62224                         "value": "The type of the button. Possible values are:\n\n*   `submit`: The button submits the form data to the server. This is the default if the attribute is not specified, or if the attribute is dynamically changed to an empty or invalid value.\n*   `reset`: The button resets all the controls to their initial values.\n*   `button`: The button has no default behavior. It can have client-side scripts associated with the element's events, which are triggered when the events occur."
62225                     }
62226                 },
62227                 {
62228                     "name": "value",
62229                     "description": {
62230                         "kind": "markdown",
62231                         "value": "The initial value of the button. It defines the value associated with the button which is submitted with the form data. This value is passed to the server in params when the form is submitted."
62232                     }
62233                 },
62234                 {
62235                     "name": "autocomplete",
62236                     "description": "The use of this attribute on a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") is nonstandard and Firefox-specific. By default, unlike other browsers, [Firefox persists the dynamic disabled state](https://stackoverflow.com/questions/5985839/bug-with-firefox-disabled-attribute-of-input-not-resetting-when-refreshing) of a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") across page loads. Setting the value of this attribute to `off` (i.e. `autocomplete=\"off\"`) disables this feature. See [bug 654072](https://bugzilla.mozilla.org/show_bug.cgi?id=654072 \"if disabled state is changed with javascript, the normal state doesn't return after refreshing the page\")."
62237                 }
62238             ],
62239             "references": [
62240                 {
62241                     "name": "MDN Reference",
62242                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/button"
62243                 }
62244             ]
62245         },
62246         {
62247             "name": "select",
62248             "description": {
62249                 "kind": "markdown",
62250                 "value": "The select element represents a control for selecting amongst a set of options."
62251             },
62252             "attributes": [
62253                 {
62254                     "name": "autocomplete",
62255                     "valueSet": "inputautocomplete",
62256                     "description": {
62257                         "kind": "markdown",
62258                         "value": "A [`DOMString`](https://developer.mozilla.org/en-US/docs/Web/API/DOMString \"DOMString is a UTF-16 String. As JavaScript already uses such strings, DOMString is mapped directly to a String.\") providing a hint for a [user agent's](https://developer.mozilla.org/en-US/docs/Glossary/user_agent \"user agent's: A user agent is a computer program representing a person, for example, a browser in a Web context.\") autocomplete feature. See [The HTML autocomplete attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete) for a complete list of values and details on how to use autocomplete."
62259                     }
62260                 },
62261                 {
62262                     "name": "autofocus",
62263                     "valueSet": "v",
62264                     "description": {
62265                         "kind": "markdown",
62266                         "value": "This Boolean attribute lets you specify that a form control should have input focus when the page loads. Only one form element in a document can have the `autofocus` attribute."
62267                     }
62268                 },
62269                 {
62270                     "name": "disabled",
62271                     "valueSet": "v",
62272                     "description": {
62273                         "kind": "markdown",
62274                         "value": "This Boolean attribute indicates that the user cannot interact with the control. If this attribute is not specified, the control inherits its setting from the containing element, for example `fieldset`; if there is no containing element with the `disabled` attribute set, then the control is enabled."
62275                     }
62276                 },
62277                 {
62278                     "name": "form",
62279                     "description": {
62280                         "kind": "markdown",
62281                         "value": "This attribute lets you specify the form element to which the select element is associated (that is, its \"form owner\"). If this attribute is specified, its value must be the same as the `id` of a form element in the same document. This enables you to place select elements anywhere within a document, not just as descendants of their form elements."
62282                     }
62283                 },
62284                 {
62285                     "name": "multiple",
62286                     "valueSet": "v",
62287                     "description": {
62288                         "kind": "markdown",
62289                         "value": "This Boolean attribute indicates that multiple options can be selected in the list. If it is not specified, then only one option can be selected at a time. When `multiple` is specified, most browsers will show a scrolling list box instead of a single line dropdown."
62290                     }
62291                 },
62292                 {
62293                     "name": "name",
62294                     "description": {
62295                         "kind": "markdown",
62296                         "value": "This attribute is used to specify the name of the control."
62297                     }
62298                 },
62299                 {
62300                     "name": "required",
62301                     "valueSet": "v",
62302                     "description": {
62303                         "kind": "markdown",
62304                         "value": "A Boolean attribute indicating that an option with a non-empty string value must be selected."
62305                     }
62306                 },
62307                 {
62308                     "name": "size",
62309                     "description": {
62310                         "kind": "markdown",
62311                         "value": "If the control is presented as a scrolling list box (e.g. when `multiple` is specified), this attribute represents the number of rows in the list that should be visible at one time. Browsers are not required to present a select element as a scrolled list box. The default value is 0.\n\n**Note:** According to the HTML5 specification, the default value for size should be 1; however, in practice, this has been found to break some web sites, and no other browser currently does that, so Mozilla has opted to continue to return 0 for the time being with Firefox."
62312                     }
62313                 }
62314             ],
62315             "references": [
62316                 {
62317                     "name": "MDN Reference",
62318                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/select"
62319                 }
62320             ]
62321         },
62322         {
62323             "name": "datalist",
62324             "description": {
62325                 "kind": "markdown",
62326                 "value": "The datalist element represents a set of option elements that represent predefined options for other controls. In the rendering, the datalist element represents nothing and it, along with its children, should be hidden."
62327             },
62328             "attributes": [],
62329             "references": [
62330                 {
62331                     "name": "MDN Reference",
62332                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/datalist"
62333                 }
62334             ]
62335         },
62336         {
62337             "name": "optgroup",
62338             "description": {
62339                 "kind": "markdown",
62340                 "value": "The optgroup element represents a group of option elements with a common label."
62341             },
62342             "attributes": [
62343                 {
62344                     "name": "disabled",
62345                     "valueSet": "v",
62346                     "description": {
62347                         "kind": "markdown",
62348                         "value": "If this Boolean attribute is set, none of the items in this option group is selectable. Often browsers grey out such control and it won't receive any browsing events, like mouse clicks or focus-related ones."
62349                     }
62350                 },
62351                 {
62352                     "name": "label",
62353                     "description": {
62354                         "kind": "markdown",
62355                         "value": "The name of the group of options, which the browser can use when labeling the options in the user interface. This attribute is mandatory if this element is used."
62356                     }
62357                 }
62358             ],
62359             "references": [
62360                 {
62361                     "name": "MDN Reference",
62362                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/optgroup"
62363                 }
62364             ]
62365         },
62366         {
62367             "name": "option",
62368             "description": {
62369                 "kind": "markdown",
62370                 "value": "The option element represents an option in a select element or as part of a list of suggestions in a datalist element."
62371             },
62372             "attributes": [
62373                 {
62374                     "name": "disabled",
62375                     "valueSet": "v",
62376                     "description": {
62377                         "kind": "markdown",
62378                         "value": "If this Boolean attribute is set, this option is not checkable. Often browsers grey out such control and it won't receive any browsing event, like mouse clicks or focus-related ones. If this attribute is not set, the element can still be disabled if one of its ancestors is a disabled [`<optgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup \"The HTML <optgroup> element creates a grouping of options within a <select> element.\") element."
62379                     }
62380                 },
62381                 {
62382                     "name": "label",
62383                     "description": {
62384                         "kind": "markdown",
62385                         "value": "This attribute is text for the label indicating the meaning of the option. If the `label` attribute isn't defined, its value is that of the element text content."
62386                     }
62387                 },
62388                 {
62389                     "name": "selected",
62390                     "valueSet": "v",
62391                     "description": {
62392                         "kind": "markdown",
62393                         "value": "If present, this Boolean attribute indicates that the option is initially selected. If the `<option>` element is the descendant of a [`<select>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select \"The HTML <select> element represents a control that provides a menu of options\") element whose [`multiple`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#attr-multiple) attribute is not set, only one single `<option>` of this [`<select>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select \"The HTML <select> element represents a control that provides a menu of options\") element may have the `selected` attribute."
62394                     }
62395                 },
62396                 {
62397                     "name": "value",
62398                     "description": {
62399                         "kind": "markdown",
62400                         "value": "The content of this attribute represents the value to be submitted with the form, should this option be selected. If this attribute is omitted, the value is taken from the text content of the option element."
62401                     }
62402                 }
62403             ],
62404             "references": [
62405                 {
62406                     "name": "MDN Reference",
62407                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/option"
62408                 }
62409             ]
62410         },
62411         {
62412             "name": "textarea",
62413             "description": {
62414                 "kind": "markdown",
62415                 "value": "The textarea element represents a multiline plain text edit control for the element's raw value. The contents of the control represent the control's default value."
62416             },
62417             "attributes": [
62418                 {
62419                     "name": "autocomplete",
62420                     "valueSet": "inputautocomplete",
62421                     "description": {
62422                         "kind": "markdown",
62423                         "value": "This attribute indicates whether the value of the control can be automatically completed by the browser. Possible values are:\n\n*   `off`: The user must explicitly enter a value into this field for every use, or the document provides its own auto-completion method; the browser does not automatically complete the entry.\n*   `on`: The browser can automatically complete the value based on values that the user has entered during previous uses.\n\nIf the `autocomplete` attribute is not specified on a `<textarea>` element, then the browser uses the `autocomplete` attribute value of the `<textarea>` element's form owner. The form owner is either the [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element that this `<textarea>` element is a descendant of or the form element whose `id` is specified by the `form` attribute of the input element. For more information, see the [`autocomplete`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-autocomplete) attribute in [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\")."
62424                     }
62425                 },
62426                 {
62427                     "name": "autofocus",
62428                     "valueSet": "v",
62429                     "description": {
62430                         "kind": "markdown",
62431                         "value": "This Boolean attribute lets you specify that a form control should have input focus when the page loads. Only one form-associated element in a document can have this attribute specified."
62432                     }
62433                 },
62434                 {
62435                     "name": "cols",
62436                     "description": {
62437                         "kind": "markdown",
62438                         "value": "The visible width of the text control, in average character widths. If it is specified, it must be a positive integer. If it is not specified, the default value is `20`."
62439                     }
62440                 },
62441                 {
62442                     "name": "dirname"
62443                 },
62444                 {
62445                     "name": "disabled",
62446                     "valueSet": "v",
62447                     "description": {
62448                         "kind": "markdown",
62449                         "value": "This Boolean attribute indicates that the user cannot interact with the control. If this attribute is not specified, the control inherits its setting from the containing element, for example [`<fieldset>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset \"The HTML <fieldset> element is used to group several controls as well as labels (<label>) within a web form.\"); if there is no containing element when the `disabled` attribute is set, the control is enabled."
62450                     }
62451                 },
62452                 {
62453                     "name": "form",
62454                     "description": {
62455                         "kind": "markdown",
62456                         "value": "The form element that the `<textarea>` element is associated with (its \"form owner\"). The value of the attribute must be the `id` of a form element in the same document. If this attribute is not specified, the `<textarea>` element must be a descendant of a form element. This attribute enables you to place `<textarea>` elements anywhere within a document, not just as descendants of form elements."
62457                     }
62458                 },
62459                 {
62460                     "name": "inputmode",
62461                     "valueSet": "im"
62462                 },
62463                 {
62464                     "name": "maxlength",
62465                     "description": {
62466                         "kind": "markdown",
62467                         "value": "The maximum number of characters (unicode code points) that the user can enter. If this value isn't specified, the user can enter an unlimited number of characters."
62468                     }
62469                 },
62470                 {
62471                     "name": "minlength",
62472                     "description": {
62473                         "kind": "markdown",
62474                         "value": "The minimum number of characters (unicode code points) required that the user should enter."
62475                     }
62476                 },
62477                 {
62478                     "name": "name",
62479                     "description": {
62480                         "kind": "markdown",
62481                         "value": "The name of the control."
62482                     }
62483                 },
62484                 {
62485                     "name": "placeholder",
62486                     "description": {
62487                         "kind": "markdown",
62488                         "value": "A hint to the user of what can be entered in the control. Carriage returns or line-feeds within the placeholder text must be treated as line breaks when rendering the hint.\n\n**Note:** Placeholders should only be used to show an example of the type of data that should be entered into a form; they are _not_ a substitute for a proper [`<label>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label \"The HTML <label> element represents a caption for an item in a user interface.\") element tied to the input. See [Labels and placeholders](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Labels_and_placeholders \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") in [<input>: The Input (Form Input) element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") for a full explanation."
62489                     }
62490                 },
62491                 {
62492                     "name": "readonly",
62493                     "valueSet": "v",
62494                     "description": {
62495                         "kind": "markdown",
62496                         "value": "This Boolean attribute indicates that the user cannot modify the value of the control. Unlike the `disabled` attribute, the `readonly` attribute does not prevent the user from clicking or selecting in the control. The value of a read-only control is still submitted with the form."
62497                     }
62498                 },
62499                 {
62500                     "name": "required",
62501                     "valueSet": "v",
62502                     "description": {
62503                         "kind": "markdown",
62504                         "value": "This attribute specifies that the user must fill in a value before submitting a form."
62505                     }
62506                 },
62507                 {
62508                     "name": "rows",
62509                     "description": {
62510                         "kind": "markdown",
62511                         "value": "The number of visible text lines for the control."
62512                     }
62513                 },
62514                 {
62515                     "name": "wrap",
62516                     "valueSet": "w",
62517                     "description": {
62518                         "kind": "markdown",
62519                         "value": "Indicates how the control wraps text. Possible values are:\n\n*   `hard`: The browser automatically inserts line breaks (CR+LF) so that each line has no more than the width of the control; the `cols` attribute must also be specified for this to take effect.\n*   `soft`: The browser ensures that all line breaks in the value consist of a CR+LF pair, but does not insert any additional line breaks.\n*   `off` : Like `soft` but changes appearance to `white-space: pre` so line segments exceeding `cols` are not wrapped and the `<textarea>` becomes horizontally scrollable.\n\nIf this attribute is not specified, `soft` is its default value."
62520                     }
62521                 },
62522                 {
62523                     "name": "autocapitalize",
62524                     "description": "This is a non-standard attribute supported by WebKit on iOS (therefore nearly all browsers running on iOS, including Safari, Firefox, and Chrome), which controls whether and how the text value should be automatically capitalized as it is entered/edited by the user. The non-deprecated values are available in iOS 5 and later. Possible values are:\n\n*   `none`: Completely disables automatic capitalization.\n*   `sentences`: Automatically capitalize the first letter of sentences.\n*   `words`: Automatically capitalize the first letter of words.\n*   `characters`: Automatically capitalize all characters.\n*   `on`: Deprecated since iOS 5.\n*   `off`: Deprecated since iOS 5."
62525                 },
62526                 {
62527                     "name": "spellcheck",
62528                     "description": "Specifies whether the `<textarea>` is subject to spell checking by the underlying browser/OS. the value can be:\n\n*   `true`: Indicates that the element needs to have its spelling and grammar checked.\n*   `default` : Indicates that the element is to act according to a default behavior, possibly based on the parent element's own `spellcheck` value.\n*   `false` : Indicates that the element should not be spell checked."
62529                 }
62530             ],
62531             "references": [
62532                 {
62533                     "name": "MDN Reference",
62534                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/textarea"
62535                 }
62536             ]
62537         },
62538         {
62539             "name": "output",
62540             "description": {
62541                 "kind": "markdown",
62542                 "value": "The output element represents the result of a calculation performed by the application, or the result of a user action."
62543             },
62544             "attributes": [
62545                 {
62546                     "name": "for",
62547                     "description": {
62548                         "kind": "markdown",
62549                         "value": "A space-separated list of other elements’ [`id`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id)s, indicating that those elements contributed input values to (or otherwise affected) the calculation."
62550                     }
62551                 },
62552                 {
62553                     "name": "form",
62554                     "description": {
62555                         "kind": "markdown",
62556                         "value": "The [form element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form) that this element is associated with (its \"form owner\"). The value of the attribute must be an `id` of a form element in the same document. If this attribute is not specified, the output element must be a descendant of a form element. This attribute enables you to place output elements anywhere within a document, not just as descendants of their form elements."
62557                     }
62558                 },
62559                 {
62560                     "name": "name",
62561                     "description": {
62562                         "kind": "markdown",
62563                         "value": "The name of the element, exposed in the [`HTMLFormElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement \"The HTMLFormElement interface represents a <form> element in the DOM; it allows access to and in some cases modification of aspects of the form, as well as access to its component elements.\") API."
62564                     }
62565                 }
62566             ],
62567             "references": [
62568                 {
62569                     "name": "MDN Reference",
62570                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/output"
62571                 }
62572             ]
62573         },
62574         {
62575             "name": "progress",
62576             "description": {
62577                 "kind": "markdown",
62578                 "value": "The progress element represents the completion progress of a task. The progress is either indeterminate, indicating that progress is being made but that it is not clear how much more work remains to be done before the task is complete (e.g. because the task is waiting for a remote host to respond), or the progress is a number in the range zero to a maximum, giving the fraction of work that has so far been completed."
62579             },
62580             "attributes": [
62581                 {
62582                     "name": "value",
62583                     "description": {
62584                         "kind": "markdown",
62585                         "value": "This attribute specifies how much of the task that has been completed. It must be a valid floating point number between 0 and `max`, or between 0 and 1 if `max` is omitted. If there is no `value` attribute, the progress bar is indeterminate; this indicates that an activity is ongoing with no indication of how long it is expected to take."
62586                     }
62587                 },
62588                 {
62589                     "name": "max",
62590                     "description": {
62591                         "kind": "markdown",
62592                         "value": "This attribute describes how much work the task indicated by the `progress` element requires. The `max` attribute, if present, must have a value greater than zero and be a valid floating point number. The default value is 1."
62593                     }
62594                 }
62595             ],
62596             "references": [
62597                 {
62598                     "name": "MDN Reference",
62599                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/progress"
62600                 }
62601             ]
62602         },
62603         {
62604             "name": "meter",
62605             "description": {
62606                 "kind": "markdown",
62607                 "value": "The meter element represents a scalar measurement within a known range, or a fractional value; for example disk usage, the relevance of a query result, or the fraction of a voting population to have selected a particular candidate."
62608             },
62609             "attributes": [
62610                 {
62611                     "name": "value",
62612                     "description": {
62613                         "kind": "markdown",
62614                         "value": "The current numeric value. This must be between the minimum and maximum values (`min` attribute and `max` attribute) if they are specified. If unspecified or malformed, the value is 0. If specified, but not within the range given by the `min` attribute and `max` attribute, the value is equal to the nearest end of the range.\n\n**Usage note:** Unless the `value` attribute is between `0` and `1` (inclusive), the `min` and `max` attributes should define the range so that the `value` attribute's value is within it."
62615                     }
62616                 },
62617                 {
62618                     "name": "min",
62619                     "description": {
62620                         "kind": "markdown",
62621                         "value": "The lower numeric bound of the measured range. This must be less than the maximum value (`max` attribute), if specified. If unspecified, the minimum value is 0."
62622                     }
62623                 },
62624                 {
62625                     "name": "max",
62626                     "description": {
62627                         "kind": "markdown",
62628                         "value": "The upper numeric bound of the measured range. This must be greater than the minimum value (`min` attribute), if specified. If unspecified, the maximum value is 1."
62629                     }
62630                 },
62631                 {
62632                     "name": "low",
62633                     "description": {
62634                         "kind": "markdown",
62635                         "value": "The upper numeric bound of the low end of the measured range. This must be greater than the minimum value (`min` attribute), and it also must be less than the high value and maximum value (`high` attribute and `max` attribute, respectively), if any are specified. If unspecified, or if less than the minimum value, the `low` value is equal to the minimum value."
62636                     }
62637                 },
62638                 {
62639                     "name": "high",
62640                     "description": {
62641                         "kind": "markdown",
62642                         "value": "The lower numeric bound of the high end of the measured range. This must be less than the maximum value (`max` attribute), and it also must be greater than the low value and minimum value (`low` attribute and **min** attribute, respectively), if any are specified. If unspecified, or if greater than the maximum value, the `high` value is equal to the maximum value."
62643                     }
62644                 },
62645                 {
62646                     "name": "optimum",
62647                     "description": {
62648                         "kind": "markdown",
62649                         "value": "This attribute indicates the optimal numeric value. It must be within the range (as defined by the `min` attribute and `max` attribute). When used with the `low` attribute and `high` attribute, it gives an indication where along the range is considered preferable. For example, if it is between the `min` attribute and the `low` attribute, then the lower range is considered preferred."
62650                     }
62651                 },
62652                 {
62653                     "name": "form",
62654                     "description": "This attribute associates the element with a `form` element that has ownership of the `meter` element. For example, a `meter` might be displaying a range corresponding to an `input` element of `type` _number_. This attribute is only used if the `meter` element is being used as a form-associated element; even then, it may be omitted if the element appears as a descendant of a `form` element."
62655                 }
62656             ],
62657             "references": [
62658                 {
62659                     "name": "MDN Reference",
62660                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/meter"
62661                 }
62662             ]
62663         },
62664         {
62665             "name": "fieldset",
62666             "description": {
62667                 "kind": "markdown",
62668                 "value": "The fieldset element represents a set of form controls optionally grouped under a common name."
62669             },
62670             "attributes": [
62671                 {
62672                     "name": "disabled",
62673                     "valueSet": "v",
62674                     "description": {
62675                         "kind": "markdown",
62676                         "value": "If this Boolean attribute is set, all form controls that are descendants of the `<fieldset>`, are disabled, meaning they are not editable and won't be submitted along with the `<form>`. They won't receive any browsing events, like mouse clicks or focus-related events. By default browsers display such controls grayed out. Note that form elements inside the [`<legend>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend \"The HTML <legend> element represents a caption for the content of its parent <fieldset>.\") element won't be disabled."
62677                     }
62678                 },
62679                 {
62680                     "name": "form",
62681                     "description": {
62682                         "kind": "markdown",
62683                         "value": "This attribute takes the value of the `id` attribute of a [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element you want the `<fieldset>` to be part of, even if it is not inside the form."
62684                     }
62685                 },
62686                 {
62687                     "name": "name",
62688                     "description": {
62689                         "kind": "markdown",
62690                         "value": "The name associated with the group.\n\n**Note**: The caption for the fieldset is given by the first [`<legend>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend \"The HTML <legend> element represents a caption for the content of its parent <fieldset>.\") element nested inside it."
62691                     }
62692                 }
62693             ],
62694             "references": [
62695                 {
62696                     "name": "MDN Reference",
62697                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/fieldset"
62698                 }
62699             ]
62700         },
62701         {
62702             "name": "legend",
62703             "description": {
62704                 "kind": "markdown",
62705                 "value": "The legend element represents a caption for the rest of the contents of the legend element's parent fieldset element, if any."
62706             },
62707             "attributes": [],
62708             "references": [
62709                 {
62710                     "name": "MDN Reference",
62711                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/legend"
62712                 }
62713             ]
62714         },
62715         {
62716             "name": "details",
62717             "description": {
62718                 "kind": "markdown",
62719                 "value": "The details element represents a disclosure widget from which the user can obtain additional information or controls."
62720             },
62721             "attributes": [
62722                 {
62723                     "name": "open",
62724                     "valueSet": "v",
62725                     "description": {
62726                         "kind": "markdown",
62727                         "value": "This Boolean attribute indicates whether or not the details — that is, the contents of the `<details>` element — are currently visible. The default, `false`, means the details are not visible."
62728                     }
62729                 }
62730             ],
62731             "references": [
62732                 {
62733                     "name": "MDN Reference",
62734                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/details"
62735                 }
62736             ]
62737         },
62738         {
62739             "name": "summary",
62740             "description": {
62741                 "kind": "markdown",
62742                 "value": "The summary element represents a summary, caption, or legend for the rest of the contents of the summary element's parent details element, if any."
62743             },
62744             "attributes": [],
62745             "references": [
62746                 {
62747                     "name": "MDN Reference",
62748                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/summary"
62749                 }
62750             ]
62751         },
62752         {
62753             "name": "dialog",
62754             "description": {
62755                 "kind": "markdown",
62756                 "value": "The dialog element represents a part of an application that a user interacts with to perform a task, for example a dialog box, inspector, or window."
62757             },
62758             "attributes": [
62759                 {
62760                     "name": "open",
62761                     "description": "Indicates that the dialog is active and available for interaction. When the `open` attribute is not set, the dialog shouldn't be shown to the user."
62762                 }
62763             ],
62764             "references": [
62765                 {
62766                     "name": "MDN Reference",
62767                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/dialog"
62768                 }
62769             ]
62770         },
62771         {
62772             "name": "script",
62773             "description": {
62774                 "kind": "markdown",
62775                 "value": "The script element allows authors to include dynamic script and data blocks in their documents. The element does not represent content for the user."
62776             },
62777             "attributes": [
62778                 {
62779                     "name": "src",
62780                     "description": {
62781                         "kind": "markdown",
62782                         "value": "This attribute specifies the URI of an external script; this can be used as an alternative to embedding a script directly within a document.\n\nIf a `script` element has a `src` attribute specified, it should not have a script embedded inside its tags."
62783                     }
62784                 },
62785                 {
62786                     "name": "type",
62787                     "description": {
62788                         "kind": "markdown",
62789                         "value": "This attribute indicates the type of script represented. The value of this attribute will be in one of the following categories:\n\n*   **Omitted or a JavaScript MIME type:** For HTML5-compliant browsers this indicates the script is JavaScript. HTML5 specification urges authors to omit the attribute rather than provide a redundant MIME type. In earlier browsers, this identified the scripting language of the embedded or imported (via the `src` attribute) code. JavaScript MIME types are [listed in the specification](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#JavaScript_types).\n*   **`module`:** For HTML5-compliant browsers the code is treated as a JavaScript module. The processing of the script contents is not affected by the `charset` and `defer` attributes. For information on using `module`, see [ES6 in Depth: Modules](https://hacks.mozilla.org/2015/08/es6-in-depth-modules/). Code may behave differently when the `module` keyword is used.\n*   **Any other value:** The embedded content is treated as a data block which won't be processed by the browser. Developers must use a valid MIME type that is not a JavaScript MIME type to denote data blocks. The `src` attribute will be ignored.\n\n**Note:** in Firefox you could specify the version of JavaScript contained in a `<script>` element by including a non-standard `version` parameter inside the `type` attribute — for example `type=\"text/javascript;version=1.8\"`. This has been removed in Firefox 59 (see [bug 1428745](https://bugzilla.mozilla.org/show_bug.cgi?id=1428745 \"FIXED: Remove support for version parameter from script loader\"))."
62790                     }
62791                 },
62792                 {
62793                     "name": "charset"
62794                 },
62795                 {
62796                     "name": "async",
62797                     "valueSet": "v",
62798                     "description": {
62799                         "kind": "markdown",
62800                         "value": "This is a Boolean attribute indicating that the browser should, if possible, load the script asynchronously.\n\nThis attribute must not be used if the `src` attribute is absent (i.e. for inline scripts). If it is included in this case it will have no effect.\n\nBrowsers usually assume the worst case scenario and load scripts synchronously, (i.e. `async=\"false\"`) during HTML parsing.\n\nDynamically inserted scripts (using [`document.createElement()`](https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement \"In an HTML document, the document.createElement() method creates the HTML element specified by tagName, or an HTMLUnknownElement if tagName isn't recognized.\")) load asynchronously by default, so to turn on synchronous loading (i.e. scripts load in the order they were inserted) set `async=\"false\"`.\n\nSee [Browser compatibility](#Browser_compatibility) for notes on browser support. See also [Async scripts for asm.js](https://developer.mozilla.org/en-US/docs/Games/Techniques/Async_scripts)."
62801                     }
62802                 },
62803                 {
62804                     "name": "defer",
62805                     "valueSet": "v",
62806                     "description": {
62807                         "kind": "markdown",
62808                         "value": "This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the document has been parsed, but before firing [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded \"/en-US/docs/Web/Events/DOMContentLoaded\").\n\nScripts with the `defer` attribute will prevent the `DOMContentLoaded` event from firing until the script has loaded and finished evaluating.\n\nThis attribute must not be used if the `src` attribute is absent (i.e. for inline scripts), in this case it would have no effect.\n\nTo achieve a similar effect for dynamically inserted scripts use `async=\"false\"` instead. Scripts with the `defer` attribute will execute in the order in which they appear in the document."
62809                     }
62810                 },
62811                 {
62812                     "name": "crossorigin",
62813                     "valueSet": "xo",
62814                     "description": {
62815                         "kind": "markdown",
62816                         "value": "Normal `script` elements pass minimal information to the [`window.onerror`](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror \"The onerror property of the GlobalEventHandlers mixin is an EventHandler that processes error events.\") for scripts which do not pass the standard [CORS](https://developer.mozilla.org/en-US/docs/Glossary/CORS \"CORS: CORS (Cross-Origin Resource Sharing) is a system, consisting of transmitting HTTP headers, that determines whether browsers block frontend JavaScript code from accessing responses for cross-origin requests.\") checks. To allow error logging for sites which use a separate domain for static media, use this attribute. See [CORS settings attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for a more descriptive explanation of its valid arguments."
62817                     }
62818                 },
62819                 {
62820                     "name": "nonce",
62821                     "description": {
62822                         "kind": "markdown",
62823                         "value": "A cryptographic nonce (number used once) to whitelist inline scripts in a [script-src Content-Security-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src). The server must generate a unique nonce value each time it transmits a policy. It is critical to provide a nonce that cannot be guessed as bypassing a resource's policy is otherwise trivial."
62824                     }
62825                 },
62826                 {
62827                     "name": "integrity",
62828                     "description": "This attribute contains inline metadata that a user agent can use to verify that a fetched resource has been delivered free of unexpected manipulation. See [Subresource Integrity](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity)."
62829                 },
62830                 {
62831                     "name": "nomodule",
62832                     "description": "This Boolean attribute is set to indicate that the script should not be executed in browsers that support [ES2015 modules](https://hacks.mozilla.org/2015/08/es6-in-depth-modules/) — in effect, this can be used to serve fallback scripts to older browsers that do not support modular JavaScript code."
62833                 },
62834                 {
62835                     "name": "referrerpolicy",
62836                     "description": "Indicates which [referrer](https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer) to send when fetching the script, or resources fetched by the script:\n\n*   `no-referrer`: The [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will not be sent.\n*   `no-referrer-when-downgrade` (default): The [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will not be sent to [origin](https://developer.mozilla.org/en-US/docs/Glossary/origin \"origin: Web content's origin is defined by the scheme (protocol), host (domain), and port of the URL used to access it. Two objects have the same origin only when the scheme, host, and port all match.\")s without [TLS](https://developer.mozilla.org/en-US/docs/Glossary/TLS \"TLS: Transport Layer Security (TLS), previously known as Secure Sockets Layer (SSL), is a protocol used by applications to communicate securely across a network, preventing tampering with and eavesdropping on email, web browsing, messaging, and other protocols.\") ([HTTPS](https://developer.mozilla.org/en-US/docs/Glossary/HTTPS \"HTTPS: HTTPS (HTTP Secure) is an encrypted version of the HTTP protocol. It usually uses SSL or TLS to encrypt all communication between a client and a server. This secure connection allows clients to safely exchange sensitive data with a server, for example for banking activities or online shopping.\")).\n*   `origin`: The sent referrer will be limited to the origin of the referring page: its [scheme](https://developer.mozilla.org/en-US/docs/Archive/Mozilla/URIScheme), [host](https://developer.mozilla.org/en-US/docs/Glossary/host \"host: A host is a device connected to the Internet (or a local network). Some hosts called servers offer additional services like serving webpages or storing files and emails.\"), and [port](https://developer.mozilla.org/en-US/docs/Glossary/port \"port: For a computer connected to a network with an IP address, a port is a communication endpoint. Ports are designated by numbers, and below 1024 each port is associated by default with a specific protocol.\").\n*   `origin-when-cross-origin`: The referrer sent to other origins will be limited to the scheme, the host, and the port. Navigations on the same origin will still include the path.\n*   `same-origin`: A referrer will be sent for [same origin](https://developer.mozilla.org/en-US/docs/Glossary/Same-origin_policy \"same origin: The same-origin policy is a critical security mechanism that restricts how a document or script loaded from one origin can interact with a resource from another origin.\"), but cross-origin requests will contain no referrer information.\n*   `strict-origin`: Only send the origin of the document as the referrer when the protocol security level stays the same (e.g. HTTPS→HTTPS), but don't send it to a less secure destination (e.g. HTTPS→HTTP).\n*   `strict-origin-when-cross-origin`: Send a full URL when performing a same-origin request, but only send the origin when the protocol security level stays the same (e.g.HTTPS→HTTPS), and send no header to a less secure destination (e.g. HTTPS→HTTP).\n*   `unsafe-url`: The referrer will include the origin _and_ the path (but not the [fragment](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/hash), [password](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/password), or [username](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/username)). **This value is unsafe**, because it leaks origins and paths from TLS-protected resources to insecure origins.\n\n**Note**: An empty string value (`\"\"`) is both the default value, and a fallback value if `referrerpolicy` is not supported. If `referrerpolicy` is not explicitly specified on the `<script>` element, it will adopt a higher-level referrer policy, i.e. one set on the whole document or domain. If a higher-level policy is not available, the empty string is treated as being equivalent to `no-referrer-when-downgrade`."
62837                 },
62838                 {
62839                     "name": "text",
62840                     "description": "Like the `textContent` attribute, this attribute sets the text content of the element. Unlike the `textContent` attribute, however, this attribute is evaluated as executable code after the node is inserted into the DOM."
62841                 }
62842             ],
62843             "references": [
62844                 {
62845                     "name": "MDN Reference",
62846                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/script"
62847                 }
62848             ]
62849         },
62850         {
62851             "name": "noscript",
62852             "description": {
62853                 "kind": "markdown",
62854                 "value": "The noscript element represents nothing if scripting is enabled, and represents its children if scripting is disabled. It is used to present different markup to user agents that support scripting and those that don't support scripting, by affecting how the document is parsed."
62855             },
62856             "attributes": [],
62857             "references": [
62858                 {
62859                     "name": "MDN Reference",
62860                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/noscript"
62861                 }
62862             ]
62863         },
62864         {
62865             "name": "template",
62866             "description": {
62867                 "kind": "markdown",
62868                 "value": "The template element is used to declare fragments of HTML that can be cloned and inserted in the document by script."
62869             },
62870             "attributes": [],
62871             "references": [
62872                 {
62873                     "name": "MDN Reference",
62874                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/template"
62875                 }
62876             ]
62877         },
62878         {
62879             "name": "canvas",
62880             "description": {
62881                 "kind": "markdown",
62882                 "value": "The canvas element provides scripts with a resolution-dependent bitmap canvas, which can be used for rendering graphs, game graphics, art, or other visual images on the fly."
62883             },
62884             "attributes": [
62885                 {
62886                     "name": "width",
62887                     "description": {
62888                         "kind": "markdown",
62889                         "value": "The width of the coordinate space in CSS pixels. Defaults to 300."
62890                     }
62891                 },
62892                 {
62893                     "name": "height",
62894                     "description": {
62895                         "kind": "markdown",
62896                         "value": "The height of the coordinate space in CSS pixels. Defaults to 150."
62897                     }
62898                 },
62899                 {
62900                     "name": "moz-opaque",
62901                     "description": "Lets the canvas know whether or not translucency will be a factor. If the canvas knows there's no translucency, painting performance can be optimized. This is only supported by Mozilla-based browsers; use the standardized [`canvas.getContext('2d', { alpha: false })`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext \"The HTMLCanvasElement.getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported.\") instead."
62902                 }
62903             ],
62904             "references": [
62905                 {
62906                     "name": "MDN Reference",
62907                     "url": "https://developer.mozilla.org/docs/Web/HTML/Element/canvas"
62908                 }
62909             ]
62910         }
62911     ],
62912     "globalAttributes": [
62913         {
62914             "name": "accesskey",
62915             "description": {
62916                 "kind": "markdown",
62917                 "value": "Provides a hint for generating a keyboard shortcut for the current element. This attribute consists of a space-separated list of characters. The browser should use the first one that exists on the computer keyboard layout."
62918             },
62919             "references": [
62920                 {
62921                     "name": "MDN Reference",
62922                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/accesskey"
62923                 }
62924             ]
62925         },
62926         {
62927             "name": "autocapitalize",
62928             "description": {
62929                 "kind": "markdown",
62930                 "value": "Controls whether and how text input is automatically capitalized as it is entered/edited by the user. It can have the following values:\n\n*   `off` or `none`, no autocapitalization is applied (all letters default to lowercase)\n*   `on` or `sentences`, the first letter of each sentence defaults to a capital letter; all other letters default to lowercase\n*   `words`, the first letter of each word defaults to a capital letter; all other letters default to lowercase\n*   `characters`, all letters should default to uppercase"
62931             },
62932             "references": [
62933                 {
62934                     "name": "MDN Reference",
62935                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/autocapitalize"
62936                 }
62937             ]
62938         },
62939         {
62940             "name": "class",
62941             "description": {
62942                 "kind": "markdown",
62943                 "value": "A space-separated list of the classes of the element. Classes allows CSS and JavaScript to select and access specific elements via the [class selectors](/en-US/docs/Web/CSS/Class_selectors) or functions like the method [`Document.getElementsByClassName()`](/en-US/docs/Web/API/Document/getElementsByClassName \"returns an array-like object of all child elements which have all of the given class names.\")."
62944             },
62945             "references": [
62946                 {
62947                     "name": "MDN Reference",
62948                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/class"
62949                 }
62950             ]
62951         },
62952         {
62953             "name": "contenteditable",
62954             "description": {
62955                 "kind": "markdown",
62956                 "value": "An enumerated attribute indicating if the element should be editable by the user. If so, the browser modifies its widget to allow editing. The attribute must take one of the following values:\n\n*   `true` or the _empty string_, which indicates that the element must be editable;\n*   `false`, which indicates that the element must not be editable."
62957             },
62958             "references": [
62959                 {
62960                     "name": "MDN Reference",
62961                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/contenteditable"
62962                 }
62963             ]
62964         },
62965         {
62966             "name": "contextmenu",
62967             "description": {
62968                 "kind": "markdown",
62969                 "value": "The `[**id**](#attr-id)` of a [`<menu>`](/en-US/docs/Web/HTML/Element/menu \"The HTML <menu> element represents a group of commands that a user can perform or activate. This includes both list menus, which might appear across the top of a screen, as well as context menus, such as those that might appear underneath a button after it has been clicked.\") to use as the contextual menu for this element."
62970             },
62971             "references": [
62972                 {
62973                     "name": "MDN Reference",
62974                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/contextmenu"
62975                 }
62976             ]
62977         },
62978         {
62979             "name": "dir",
62980             "description": {
62981                 "kind": "markdown",
62982                 "value": "An enumerated attribute indicating the directionality of the element's text. It can have the following values:\n\n*   `ltr`, which means _left to right_ and is to be used for languages that are written from the left to the right (like English);\n*   `rtl`, which means _right to left_ and is to be used for languages that are written from the right to the left (like Arabic);\n*   `auto`, which lets the user agent decide. It uses a basic algorithm as it parses the characters inside the element until it finds a character with a strong directionality, then it applies that directionality to the whole element."
62983             },
62984             "valueSet": "d",
62985             "references": [
62986                 {
62987                     "name": "MDN Reference",
62988                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/dir"
62989                 }
62990             ]
62991         },
62992         {
62993             "name": "draggable",
62994             "description": {
62995                 "kind": "markdown",
62996                 "value": "An enumerated attribute indicating whether the element can be dragged, using the [Drag and Drop API](/en-us/docs/DragDrop/Drag_and_Drop). It can have the following values:\n\n*   `true`, which indicates that the element may be dragged\n*   `false`, which indicates that the element may not be dragged."
62997             },
62998             "valueSet": "b",
62999             "references": [
63000                 {
63001                     "name": "MDN Reference",
63002                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/draggable"
63003                 }
63004             ]
63005         },
63006         {
63007             "name": "dropzone",
63008             "description": {
63009                 "kind": "markdown",
63010                 "value": "An enumerated attribute indicating what types of content can be dropped on an element, using the [Drag and Drop API](/en-US/docs/DragDrop/Drag_and_Drop). It can have the following values:\n\n*   `copy`, which indicates that dropping will create a copy of the element that was dragged\n*   `move`, which indicates that the element that was dragged will be moved to this new location.\n*   `link`, will create a link to the dragged data."
63011             },
63012             "references": [
63013                 {
63014                     "name": "MDN Reference",
63015                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/dropzone"
63016                 }
63017             ]
63018         },
63019         {
63020             "name": "exportparts",
63021             "description": {
63022                 "kind": "markdown",
63023                 "value": "Used to transitively export shadow parts from a nested shadow tree into a containing light tree."
63024             },
63025             "references": [
63026                 {
63027                     "name": "MDN Reference",
63028                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/exportparts"
63029                 }
63030             ]
63031         },
63032         {
63033             "name": "hidden",
63034             "description": {
63035                 "kind": "markdown",
63036                 "value": "A Boolean attribute indicates that the element is not yet, or is no longer, _relevant_. For example, it can be used to hide elements of the page that can't be used until the login process has been completed. The browser won't render such elements. This attribute must not be used to hide content that could legitimately be shown."
63037             },
63038             "valueSet": "v",
63039             "references": [
63040                 {
63041                     "name": "MDN Reference",
63042                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/hidden"
63043                 }
63044             ]
63045         },
63046         {
63047             "name": "id",
63048             "description": {
63049                 "kind": "markdown",
63050                 "value": "Defines a unique identifier (ID) which must be unique in the whole document. Its purpose is to identify the element when linking (using a fragment identifier), scripting, or styling (with CSS)."
63051             },
63052             "references": [
63053                 {
63054                     "name": "MDN Reference",
63055                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/id"
63056                 }
63057             ]
63058         },
63059         {
63060             "name": "inputmode",
63061             "description": {
63062                 "kind": "markdown",
63063                 "value": "Provides a hint to browsers as to the type of virtual keyboard configuration to use when editing this element or its contents. Used primarily on [`<input>`](/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") elements, but is usable on any element while in `[contenteditable](/en-US/docs/Web/HTML/Global_attributes#attr-contenteditable)` mode."
63064             },
63065             "references": [
63066                 {
63067                     "name": "MDN Reference",
63068                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/inputmode"
63069                 }
63070             ]
63071         },
63072         {
63073             "name": "is",
63074             "description": {
63075                 "kind": "markdown",
63076                 "value": "Allows you to specify that a standard HTML element should behave like a registered custom built-in element (see [Using custom elements](/en-US/docs/Web/Web_Components/Using_custom_elements) for more details)."
63077             },
63078             "references": [
63079                 {
63080                     "name": "MDN Reference",
63081                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/is"
63082                 }
63083             ]
63084         },
63085         {
63086             "name": "itemid",
63087             "description": {
63088                 "kind": "markdown",
63089                 "value": "The unique, global identifier of an item."
63090             },
63091             "references": [
63092                 {
63093                     "name": "MDN Reference",
63094                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/itemid"
63095                 }
63096             ]
63097         },
63098         {
63099             "name": "itemprop",
63100             "description": {
63101                 "kind": "markdown",
63102                 "value": "Used to add properties to an item. Every HTML element may have an `itemprop` attribute specified, where an `itemprop` consists of a name and value pair."
63103             },
63104             "references": [
63105                 {
63106                     "name": "MDN Reference",
63107                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/itemprop"
63108                 }
63109             ]
63110         },
63111         {
63112             "name": "itemref",
63113             "description": {
63114                 "kind": "markdown",
63115                 "value": "Properties that are not descendants of an element with the `itemscope` attribute can be associated with the item using an `itemref`. It provides a list of element ids (not `itemid`s) with additional properties elsewhere in the document."
63116             },
63117             "references": [
63118                 {
63119                     "name": "MDN Reference",
63120                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/itemref"
63121                 }
63122             ]
63123         },
63124         {
63125             "name": "itemscope",
63126             "description": {
63127                 "kind": "markdown",
63128                 "value": "`itemscope` (usually) works along with `[itemtype](/en-US/docs/Web/HTML/Global_attributes#attr-itemtype)` to specify that the HTML contained in a block is about a particular item. `itemscope` creates the Item and defines the scope of the `itemtype` associated with it. `itemtype` is a valid URL of a vocabulary (such as [schema.org](https://schema.org/)) that describes the item and its properties context."
63129             },
63130             "valueSet": "v",
63131             "references": [
63132                 {
63133                     "name": "MDN Reference",
63134                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/itemscope"
63135                 }
63136             ]
63137         },
63138         {
63139             "name": "itemtype",
63140             "description": {
63141                 "kind": "markdown",
63142                 "value": "Specifies the URL of the vocabulary that will be used to define `itemprop`s (item properties) in the data structure. `[itemscope](/en-US/docs/Web/HTML/Global_attributes#attr-itemscope)` is used to set the scope of where in the data structure the vocabulary set by `itemtype` will be active."
63143             },
63144             "references": [
63145                 {
63146                     "name": "MDN Reference",
63147                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/itemtype"
63148                 }
63149             ]
63150         },
63151         {
63152             "name": "lang",
63153             "description": {
63154                 "kind": "markdown",
63155                 "value": "Helps define the language of an element: the language that non-editable elements are in, or the language that editable elements should be written in by the user. The attribute contains one “language tag” (made of hyphen-separated “language subtags”) in the format defined in [_Tags for Identifying Languages (BCP47)_](https://www.ietf.org/rfc/bcp/bcp47.txt). [**xml:lang**](#attr-xml:lang) has priority over it."
63156             },
63157             "references": [
63158                 {
63159                     "name": "MDN Reference",
63160                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/lang"
63161                 }
63162             ]
63163         },
63164         {
63165             "name": "part",
63166             "description": {
63167                 "kind": "markdown",
63168                 "value": "A space-separated list of the part names of the element. Part names allows CSS to select and style specific elements in a shadow tree via the [`::part`](/en-US/docs/Web/CSS/::part \"The ::part CSS pseudo-element represents any element within a shadow tree that has a matching part attribute.\") pseudo-element."
63169             },
63170             "references": [
63171                 {
63172                     "name": "MDN Reference",
63173                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/part"
63174                 }
63175             ]
63176         },
63177         {
63178             "name": "role",
63179             "valueSet": "roles"
63180         },
63181         {
63182             "name": "slot",
63183             "description": {
63184                 "kind": "markdown",
63185                 "value": "Assigns a slot in a [shadow DOM](/en-US/docs/Web/Web_Components/Shadow_DOM) shadow tree to an element: An element with a `slot` attribute is assigned to the slot created by the [`<slot>`](/en-US/docs/Web/HTML/Element/slot \"The HTML <slot> element—part of the Web Components technology suite—is a placeholder inside a web component that you can fill with your own markup, which lets you create separate DOM trees and present them together.\") element whose `[name](/en-US/docs/Web/HTML/Element/slot#attr-name)` attribute's value matches that `slot` attribute's value."
63186             },
63187             "references": [
63188                 {
63189                     "name": "MDN Reference",
63190                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/slot"
63191                 }
63192             ]
63193         },
63194         {
63195             "name": "spellcheck",
63196             "description": {
63197                 "kind": "markdown",
63198                 "value": "An enumerated attribute defines whether the element may be checked for spelling errors. It may have the following values:\n\n*   `true`, which indicates that the element should be, if possible, checked for spelling errors;\n*   `false`, which indicates that the element should not be checked for spelling errors."
63199             },
63200             "valueSet": "b",
63201             "references": [
63202                 {
63203                     "name": "MDN Reference",
63204                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/spellcheck"
63205                 }
63206             ]
63207         },
63208         {
63209             "name": "style",
63210             "description": {
63211                 "kind": "markdown",
63212                 "value": "Contains [CSS](/en-US/docs/Web/CSS) styling declarations to be applied to the element. Note that it is recommended for styles to be defined in a separate file or files. This attribute and the [`<style>`](/en-US/docs/Web/HTML/Element/style \"The HTML <style> element contains style information for a document, or part of a document.\") element have mainly the purpose of allowing for quick styling, for example for testing purposes."
63213             },
63214             "references": [
63215                 {
63216                     "name": "MDN Reference",
63217                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/style"
63218                 }
63219             ]
63220         },
63221         {
63222             "name": "tabindex",
63223             "description": {
63224                 "kind": "markdown",
63225                 "value": "An integer attribute indicating if the element can take input focus (is _focusable_), if it should participate to sequential keyboard navigation, and if so, at what position. It can take several values:\n\n*   a _negative value_ means that the element should be focusable, but should not be reachable via sequential keyboard navigation;\n*   `0` means that the element should be focusable and reachable via sequential keyboard navigation, but its relative order is defined by the platform convention;\n*   a _positive value_ means that the element should be focusable and reachable via sequential keyboard navigation; the order in which the elements are focused is the increasing value of the [**tabindex**](#attr-tabindex). If several elements share the same tabindex, their relative order follows their relative positions in the document."
63226             },
63227             "references": [
63228                 {
63229                     "name": "MDN Reference",
63230                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/tabindex"
63231                 }
63232             ]
63233         },
63234         {
63235             "name": "title",
63236             "description": {
63237                 "kind": "markdown",
63238                 "value": "Contains a text representing advisory information related to the element it belongs to. Such information can typically, but not necessarily, be presented to the user as a tooltip."
63239             },
63240             "references": [
63241                 {
63242                     "name": "MDN Reference",
63243                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/title"
63244                 }
63245             ]
63246         },
63247         {
63248             "name": "translate",
63249             "description": {
63250                 "kind": "markdown",
63251                 "value": "An enumerated attribute that is used to specify whether an element's attribute values and the values of its [`Text`](/en-US/docs/Web/API/Text \"The Text interface represents the textual content of Element or Attr. If an element has no markup within its content, it has a single child implementing Text that contains the element's text. However, if the element contains markup, it is parsed into information items and Text nodes that form its children.\") node children are to be translated when the page is localized, or whether to leave them unchanged. It can have the following values:\n\n*   empty string and `yes`, which indicates that the element will be translated.\n*   `no`, which indicates that the element will not be translated."
63252             },
63253             "valueSet": "y",
63254             "references": [
63255                 {
63256                     "name": "MDN Reference",
63257                     "url": "https://developer.mozilla.org/docs/Web/HTML/Global_attributes/translate"
63258                 }
63259             ]
63260         },
63261         {
63262             "name": "onabort",
63263             "description": {
63264                 "kind": "markdown",
63265                 "value": "The loading of a resource has been aborted."
63266             }
63267         },
63268         {
63269             "name": "onblur",
63270             "description": {
63271                 "kind": "markdown",
63272                 "value": "An element has lost focus (does not bubble)."
63273             }
63274         },
63275         {
63276             "name": "oncanplay",
63277             "description": {
63278                 "kind": "markdown",
63279                 "value": "The user agent can play the media, but estimates that not enough data has been loaded to play the media up to its end without having to stop for further buffering of content."
63280             }
63281         },
63282         {
63283             "name": "oncanplaythrough",
63284             "description": {
63285                 "kind": "markdown",
63286                 "value": "The user agent can play the media up to its end without having to stop for further buffering of content."
63287             }
63288         },
63289         {
63290             "name": "onchange",
63291             "description": {
63292                 "kind": "markdown",
63293                 "value": "The change event is fired for <input>, <select>, and <textarea> elements when a change to the element's value is committed by the user."
63294             }
63295         },
63296         {
63297             "name": "onclick",
63298             "description": {
63299                 "kind": "markdown",
63300                 "value": "A pointing device button has been pressed and released on an element."
63301             }
63302         },
63303         {
63304             "name": "oncontextmenu",
63305             "description": {
63306                 "kind": "markdown",
63307                 "value": "The right button of the mouse is clicked (before the context menu is displayed)."
63308             }
63309         },
63310         {
63311             "name": "ondblclick",
63312             "description": {
63313                 "kind": "markdown",
63314                 "value": "A pointing device button is clicked twice on an element."
63315             }
63316         },
63317         {
63318             "name": "ondrag",
63319             "description": {
63320                 "kind": "markdown",
63321                 "value": "An element or text selection is being dragged (every 350ms)."
63322             }
63323         },
63324         {
63325             "name": "ondragend",
63326             "description": {
63327                 "kind": "markdown",
63328                 "value": "A drag operation is being ended (by releasing a mouse button or hitting the escape key)."
63329             }
63330         },
63331         {
63332             "name": "ondragenter",
63333             "description": {
63334                 "kind": "markdown",
63335                 "value": "A dragged element or text selection enters a valid drop target."
63336             }
63337         },
63338         {
63339             "name": "ondragleave",
63340             "description": {
63341                 "kind": "markdown",
63342                 "value": "A dragged element or text selection leaves a valid drop target."
63343             }
63344         },
63345         {
63346             "name": "ondragover",
63347             "description": {
63348                 "kind": "markdown",
63349                 "value": "An element or text selection is being dragged over a valid drop target (every 350ms)."
63350             }
63351         },
63352         {
63353             "name": "ondragstart",
63354             "description": {
63355                 "kind": "markdown",
63356                 "value": "The user starts dragging an element or text selection."
63357             }
63358         },
63359         {
63360             "name": "ondrop",
63361             "description": {
63362                 "kind": "markdown",
63363                 "value": "An element is dropped on a valid drop target."
63364             }
63365         },
63366         {
63367             "name": "ondurationchange",
63368             "description": {
63369                 "kind": "markdown",
63370                 "value": "The duration attribute has been updated."
63371             }
63372         },
63373         {
63374             "name": "onemptied",
63375             "description": {
63376                 "kind": "markdown",
63377                 "value": "The media has become empty; for example, this event is sent if the media has already been loaded (or partially loaded), and the load() method is called to reload it."
63378             }
63379         },
63380         {
63381             "name": "onended",
63382             "description": {
63383                 "kind": "markdown",
63384                 "value": "Playback has stopped because the end of the media was reached."
63385             }
63386         },
63387         {
63388             "name": "onerror",
63389             "description": {
63390                 "kind": "markdown",
63391                 "value": "A resource failed to load."
63392             }
63393         },
63394         {
63395             "name": "onfocus",
63396             "description": {
63397                 "kind": "markdown",
63398                 "value": "An element has received focus (does not bubble)."
63399             }
63400         },
63401         {
63402             "name": "onformchange"
63403         },
63404         {
63405             "name": "onforminput"
63406         },
63407         {
63408             "name": "oninput",
63409             "description": {
63410                 "kind": "markdown",
63411                 "value": "The value of an element changes or the content of an element with the attribute contenteditable is modified."
63412             }
63413         },
63414         {
63415             "name": "oninvalid",
63416             "description": {
63417                 "kind": "markdown",
63418                 "value": "A submittable element has been checked and doesn't satisfy its constraints."
63419             }
63420         },
63421         {
63422             "name": "onkeydown",
63423             "description": {
63424                 "kind": "markdown",
63425                 "value": "A key is pressed down."
63426             }
63427         },
63428         {
63429             "name": "onkeypress",
63430             "description": {
63431                 "kind": "markdown",
63432                 "value": "A key is pressed down and that key normally produces a character value (use input instead)."
63433             }
63434         },
63435         {
63436             "name": "onkeyup",
63437             "description": {
63438                 "kind": "markdown",
63439                 "value": "A key is released."
63440             }
63441         },
63442         {
63443             "name": "onload",
63444             "description": {
63445                 "kind": "markdown",
63446                 "value": "A resource and its dependent resources have finished loading."
63447             }
63448         },
63449         {
63450             "name": "onloadeddata",
63451             "description": {
63452                 "kind": "markdown",
63453                 "value": "The first frame of the media has finished loading."
63454             }
63455         },
63456         {
63457             "name": "onloadedmetadata",
63458             "description": {
63459                 "kind": "markdown",
63460                 "value": "The metadata has been loaded."
63461             }
63462         },
63463         {
63464             "name": "onloadstart",
63465             "description": {
63466                 "kind": "markdown",
63467                 "value": "Progress has begun."
63468             }
63469         },
63470         {
63471             "name": "onmousedown",
63472             "description": {
63473                 "kind": "markdown",
63474                 "value": "A pointing device button (usually a mouse) is pressed on an element."
63475             }
63476         },
63477         {
63478             "name": "onmousemove",
63479             "description": {
63480                 "kind": "markdown",
63481                 "value": "A pointing device is moved over an element."
63482             }
63483         },
63484         {
63485             "name": "onmouseout",
63486             "description": {
63487                 "kind": "markdown",
63488                 "value": "A pointing device is moved off the element that has the listener attached or off one of its children."
63489             }
63490         },
63491         {
63492             "name": "onmouseover",
63493             "description": {
63494                 "kind": "markdown",
63495                 "value": "A pointing device is moved onto the element that has the listener attached or onto one of its children."
63496             }
63497         },
63498         {
63499             "name": "onmouseup",
63500             "description": {
63501                 "kind": "markdown",
63502                 "value": "A pointing device button is released over an element."
63503             }
63504         },
63505         {
63506             "name": "onmousewheel"
63507         },
63508         {
63509             "name": "onpause",
63510             "description": {
63511                 "kind": "markdown",
63512                 "value": "Playback has been paused."
63513             }
63514         },
63515         {
63516             "name": "onplay",
63517             "description": {
63518                 "kind": "markdown",
63519                 "value": "Playback has begun."
63520             }
63521         },
63522         {
63523             "name": "onplaying",
63524             "description": {
63525                 "kind": "markdown",
63526                 "value": "Playback is ready to start after having been paused or delayed due to lack of data."
63527             }
63528         },
63529         {
63530             "name": "onprogress",
63531             "description": {
63532                 "kind": "markdown",
63533                 "value": "In progress."
63534             }
63535         },
63536         {
63537             "name": "onratechange",
63538             "description": {
63539                 "kind": "markdown",
63540                 "value": "The playback rate has changed."
63541             }
63542         },
63543         {
63544             "name": "onreset",
63545             "description": {
63546                 "kind": "markdown",
63547                 "value": "A form is reset."
63548             }
63549         },
63550         {
63551             "name": "onresize",
63552             "description": {
63553                 "kind": "markdown",
63554                 "value": "The document view has been resized."
63555             }
63556         },
63557         {
63558             "name": "onreadystatechange",
63559             "description": {
63560                 "kind": "markdown",
63561                 "value": "The readyState attribute of a document has changed."
63562             }
63563         },
63564         {
63565             "name": "onscroll",
63566             "description": {
63567                 "kind": "markdown",
63568                 "value": "The document view or an element has been scrolled."
63569             }
63570         },
63571         {
63572             "name": "onseeked",
63573             "description": {
63574                 "kind": "markdown",
63575                 "value": "A seek operation completed."
63576             }
63577         },
63578         {
63579             "name": "onseeking",
63580             "description": {
63581                 "kind": "markdown",
63582                 "value": "A seek operation began."
63583             }
63584         },
63585         {
63586             "name": "onselect",
63587             "description": {
63588                 "kind": "markdown",
63589                 "value": "Some text is being selected."
63590             }
63591         },
63592         {
63593             "name": "onshow",
63594             "description": {
63595                 "kind": "markdown",
63596                 "value": "A contextmenu event was fired on/bubbled to an element that has a contextmenu attribute"
63597             }
63598         },
63599         {
63600             "name": "onstalled",
63601             "description": {
63602                 "kind": "markdown",
63603                 "value": "The user agent is trying to fetch media data, but data is unexpectedly not forthcoming."
63604             }
63605         },
63606         {
63607             "name": "onsubmit",
63608             "description": {
63609                 "kind": "markdown",
63610                 "value": "A form is submitted."
63611             }
63612         },
63613         {
63614             "name": "onsuspend",
63615             "description": {
63616                 "kind": "markdown",
63617                 "value": "Media data loading has been suspended."
63618             }
63619         },
63620         {
63621             "name": "ontimeupdate",
63622             "description": {
63623                 "kind": "markdown",
63624                 "value": "The time indicated by the currentTime attribute has been updated."
63625             }
63626         },
63627         {
63628             "name": "onvolumechange",
63629             "description": {
63630                 "kind": "markdown",
63631                 "value": "The volume has changed."
63632             }
63633         },
63634         {
63635             "name": "onwaiting",
63636             "description": {
63637                 "kind": "markdown",
63638                 "value": "Playback has stopped because of a temporary lack of data."
63639             }
63640         },
63641         {
63642             "name": "aria-activedescendant",
63643             "references": [
63644                 {
63645                     "name": "WAI-ARIA Reference",
63646                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-activedescendant"
63647                 }
63648             ],
63649             "description": {
63650                 "kind": "markdown",
63651                 "value": "Identifies the currently active element when DOM focus is on a [`composite`](https://www.w3.org/TR/wai-aria-1.1/#composite) widget, [`textbox`](https://www.w3.org/TR/wai-aria-1.1/#textbox), [`group`](https://www.w3.org/TR/wai-aria-1.1/#group), or [`application`](https://www.w3.org/TR/wai-aria-1.1/#application)."
63652             }
63653         },
63654         {
63655             "name": "aria-atomic",
63656             "valueSet": "b",
63657             "references": [
63658                 {
63659                     "name": "WAI-ARIA Reference",
63660                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-atomic"
63661                 }
63662             ],
63663             "description": {
63664                 "kind": "markdown",
63665                 "value": "Indicates whether [assistive technologies](https://www.w3.org/TR/wai-aria-1.1/#dfn-assistive-technology) will present all, or only parts of, the changed region based on the change notifications defined by the [`aria-relevant`](https://www.w3.org/TR/wai-aria-1.1/#aria-relevant) attribute."
63666             }
63667         },
63668         {
63669             "name": "aria-autocomplete",
63670             "valueSet": "autocomplete",
63671             "references": [
63672                 {
63673                     "name": "WAI-ARIA Reference",
63674                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-autocomplete"
63675                 }
63676             ],
63677             "description": {
63678                 "kind": "markdown",
63679                 "value": "Indicates whether inputting text could trigger display of one or more predictions of the user's intended value for an input and specifies how predictions would be presented if they are made."
63680             }
63681         },
63682         {
63683             "name": "aria-busy",
63684             "valueSet": "b",
63685             "references": [
63686                 {
63687                     "name": "WAI-ARIA Reference",
63688                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-busy"
63689                 }
63690             ],
63691             "description": {
63692                 "kind": "markdown",
63693                 "value": "Indicates an element is being modified and that assistive technologies _MAY_ want to wait until the modifications are complete before exposing them to the user."
63694             }
63695         },
63696         {
63697             "name": "aria-checked",
63698             "valueSet": "tristate",
63699             "references": [
63700                 {
63701                     "name": "WAI-ARIA Reference",
63702                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-checked"
63703                 }
63704             ],
63705             "description": {
63706                 "kind": "markdown",
63707                 "value": "Indicates the current \"checked\" [state](https://www.w3.org/TR/wai-aria-1.1/#dfn-state) of checkboxes, radio buttons, and other [widgets](https://www.w3.org/TR/wai-aria-1.1/#dfn-widget). See related [`aria-pressed`](https://www.w3.org/TR/wai-aria-1.1/#aria-pressed) and [`aria-selected`](https://www.w3.org/TR/wai-aria-1.1/#aria-selected)."
63708             }
63709         },
63710         {
63711             "name": "aria-colcount",
63712             "references": [
63713                 {
63714                     "name": "WAI-ARIA Reference",
63715                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-colcount"
63716                 }
63717             ],
63718             "description": {
63719                 "kind": "markdown",
63720                 "value": "Defines the total number of columns in a [`table`](https://www.w3.org/TR/wai-aria-1.1/#table), [`grid`](https://www.w3.org/TR/wai-aria-1.1/#grid), or [`treegrid`](https://www.w3.org/TR/wai-aria-1.1/#treegrid). See related [`aria-colindex`](https://www.w3.org/TR/wai-aria-1.1/#aria-colindex)."
63721             }
63722         },
63723         {
63724             "name": "aria-colindex",
63725             "references": [
63726                 {
63727                     "name": "WAI-ARIA Reference",
63728                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-colindex"
63729                 }
63730             ],
63731             "description": {
63732                 "kind": "markdown",
63733                 "value": "Defines an [element's](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) column index or position with respect to the total number of columns within a [`table`](https://www.w3.org/TR/wai-aria-1.1/#table), [`grid`](https://www.w3.org/TR/wai-aria-1.1/#grid), or [`treegrid`](https://www.w3.org/TR/wai-aria-1.1/#treegrid). See related [`aria-colcount`](https://www.w3.org/TR/wai-aria-1.1/#aria-colcount) and [`aria-colspan`](https://www.w3.org/TR/wai-aria-1.1/#aria-colspan)."
63734             }
63735         },
63736         {
63737             "name": "aria-colspan",
63738             "references": [
63739                 {
63740                     "name": "WAI-ARIA Reference",
63741                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-colspan"
63742                 }
63743             ],
63744             "description": {
63745                 "kind": "markdown",
63746                 "value": "Defines the number of columns spanned by a cell or gridcell within a [`table`](https://www.w3.org/TR/wai-aria-1.1/#table), [`grid`](https://www.w3.org/TR/wai-aria-1.1/#grid), or [`treegrid`](https://www.w3.org/TR/wai-aria-1.1/#treegrid). See related [`aria-colindex`](https://www.w3.org/TR/wai-aria-1.1/#aria-colindex) and [`aria-rowspan`](https://www.w3.org/TR/wai-aria-1.1/#aria-rowspan)."
63747             }
63748         },
63749         {
63750             "name": "aria-controls",
63751             "references": [
63752                 {
63753                     "name": "WAI-ARIA Reference",
63754                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-controls"
63755                 }
63756             ],
63757             "description": {
63758                 "kind": "markdown",
63759                 "value": "Identifies the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) (or elements) whose contents or presence are controlled by the current element. See related [`aria-owns`](https://www.w3.org/TR/wai-aria-1.1/#aria-owns)."
63760             }
63761         },
63762         {
63763             "name": "aria-current",
63764             "valueSet": "current",
63765             "references": [
63766                 {
63767                     "name": "WAI-ARIA Reference",
63768                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-current"
63769                 }
63770             ],
63771             "description": {
63772                 "kind": "markdown",
63773                 "value": "Indicates the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) that represents the current item within a container or set of related elements."
63774             }
63775         },
63776         {
63777             "name": "aria-describedat",
63778             "references": [
63779                 {
63780                     "name": "WAI-ARIA Reference",
63781                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-describedat"
63782                 }
63783             ]
63784         },
63785         {
63786             "name": "aria-describedby",
63787             "references": [
63788                 {
63789                     "name": "WAI-ARIA Reference",
63790                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-describedby"
63791                 }
63792             ],
63793             "description": {
63794                 "kind": "markdown",
63795                 "value": "Identifies the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) (or elements) that describes the [object](https://www.w3.org/TR/wai-aria-1.1/#dfn-object). See related [`aria-labelledby`](https://www.w3.org/TR/wai-aria-1.1/#aria-labelledby)."
63796             }
63797         },
63798         {
63799             "name": "aria-disabled",
63800             "valueSet": "b",
63801             "references": [
63802                 {
63803                     "name": "WAI-ARIA Reference",
63804                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-disabled"
63805                 }
63806             ],
63807             "description": {
63808                 "kind": "markdown",
63809                 "value": "Indicates that the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) is [perceivable](https://www.w3.org/TR/wai-aria-1.1/#dfn-perceivable) but disabled, so it is not editable or otherwise [operable](https://www.w3.org/TR/wai-aria-1.1/#dfn-operable). See related [`aria-hidden`](https://www.w3.org/TR/wai-aria-1.1/#aria-hidden) and [`aria-readonly`](https://www.w3.org/TR/wai-aria-1.1/#aria-readonly)."
63810             }
63811         },
63812         {
63813             "name": "aria-dropeffect",
63814             "valueSet": "dropeffect",
63815             "references": [
63816                 {
63817                     "name": "WAI-ARIA Reference",
63818                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-dropeffect"
63819                 }
63820             ],
63821             "description": {
63822                 "kind": "markdown",
63823                 "value": "\\[Deprecated in ARIA 1.1\\] Indicates what functions can be performed when a dragged object is released on the drop target."
63824             }
63825         },
63826         {
63827             "name": "aria-errormessage",
63828             "references": [
63829                 {
63830                     "name": "WAI-ARIA Reference",
63831                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-errormessage"
63832                 }
63833             ],
63834             "description": {
63835                 "kind": "markdown",
63836                 "value": "Identifies the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) that provides an error message for the [object](https://www.w3.org/TR/wai-aria-1.1/#dfn-object). See related [`aria-invalid`](https://www.w3.org/TR/wai-aria-1.1/#aria-invalid) and [`aria-describedby`](https://www.w3.org/TR/wai-aria-1.1/#aria-describedby)."
63837             }
63838         },
63839         {
63840             "name": "aria-expanded",
63841             "valueSet": "u",
63842             "references": [
63843                 {
63844                     "name": "WAI-ARIA Reference",
63845                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-expanded"
63846                 }
63847             ],
63848             "description": {
63849                 "kind": "markdown",
63850                 "value": "Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed."
63851             }
63852         },
63853         {
63854             "name": "aria-flowto",
63855             "references": [
63856                 {
63857                     "name": "WAI-ARIA Reference",
63858                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-flowto"
63859                 }
63860             ],
63861             "description": {
63862                 "kind": "markdown",
63863                 "value": "Identifies the next [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) (or elements) in an alternate reading order of content which, at the user's discretion, allows assistive technology to override the general default of reading in document source order."
63864             }
63865         },
63866         {
63867             "name": "aria-grabbed",
63868             "valueSet": "u",
63869             "references": [
63870                 {
63871                     "name": "WAI-ARIA Reference",
63872                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-grabbed"
63873                 }
63874             ],
63875             "description": {
63876                 "kind": "markdown",
63877                 "value": "\\[Deprecated in ARIA 1.1\\] Indicates an element's \"grabbed\" [state](https://www.w3.org/TR/wai-aria-1.1/#dfn-state) in a drag-and-drop operation."
63878             }
63879         },
63880         {
63881             "name": "aria-haspopup",
63882             "valueSet": "b",
63883             "references": [
63884                 {
63885                     "name": "WAI-ARIA Reference",
63886                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-haspopup"
63887                 }
63888             ],
63889             "description": {
63890                 "kind": "markdown",
63891                 "value": "Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element)."
63892             }
63893         },
63894         {
63895             "name": "aria-hidden",
63896             "valueSet": "b",
63897             "references": [
63898                 {
63899                     "name": "WAI-ARIA Reference",
63900                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-hidden"
63901                 }
63902             ],
63903             "description": {
63904                 "kind": "markdown",
63905                 "value": "Indicates whether the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) is exposed to an accessibility API. See related [`aria-disabled`](https://www.w3.org/TR/wai-aria-1.1/#aria-disabled)."
63906             }
63907         },
63908         {
63909             "name": "aria-invalid",
63910             "valueSet": "invalid",
63911             "references": [
63912                 {
63913                     "name": "WAI-ARIA Reference",
63914                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-invalid"
63915                 }
63916             ],
63917             "description": {
63918                 "kind": "markdown",
63919                 "value": "Indicates the entered value does not conform to the format expected by the application. See related [`aria-errormessage`](https://www.w3.org/TR/wai-aria-1.1/#aria-errormessage)."
63920             }
63921         },
63922         {
63923             "name": "aria-kbdshortcuts",
63924             "references": [
63925                 {
63926                     "name": "WAI-ARIA Reference",
63927                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-kbdshortcuts"
63928                 }
63929             ]
63930         },
63931         {
63932             "name": "aria-label",
63933             "references": [
63934                 {
63935                     "name": "WAI-ARIA Reference",
63936                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-label"
63937                 }
63938             ],
63939             "description": {
63940                 "kind": "markdown",
63941                 "value": "Defines a string value that labels the current element. See related [`aria-labelledby`](https://www.w3.org/TR/wai-aria-1.1/#aria-labelledby)."
63942             }
63943         },
63944         {
63945             "name": "aria-labelledby",
63946             "references": [
63947                 {
63948                     "name": "WAI-ARIA Reference",
63949                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-labelledby"
63950                 }
63951             ],
63952             "description": {
63953                 "kind": "markdown",
63954                 "value": "Identifies the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) (or elements) that labels the current element. See related [`aria-describedby`](https://www.w3.org/TR/wai-aria-1.1/#aria-describedby)."
63955             }
63956         },
63957         {
63958             "name": "aria-level",
63959             "references": [
63960                 {
63961                     "name": "WAI-ARIA Reference",
63962                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-level"
63963                 }
63964             ],
63965             "description": {
63966                 "kind": "markdown",
63967                 "value": "Defines the hierarchical level of an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) within a structure."
63968             }
63969         },
63970         {
63971             "name": "aria-live",
63972             "valueSet": "live",
63973             "references": [
63974                 {
63975                     "name": "WAI-ARIA Reference",
63976                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-live"
63977                 }
63978             ],
63979             "description": {
63980                 "kind": "markdown",
63981                 "value": "Indicates that an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) will be updated, and describes the types of updates the [user agents](https://www.w3.org/TR/wai-aria-1.1/#dfn-user-agent), [assistive technologies](https://www.w3.org/TR/wai-aria-1.1/#dfn-assistive-technology), and user can expect from the [live region](https://www.w3.org/TR/wai-aria-1.1/#dfn-live-region)."
63982             }
63983         },
63984         {
63985             "name": "aria-modal",
63986             "valueSet": "b",
63987             "references": [
63988                 {
63989                     "name": "WAI-ARIA Reference",
63990                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-modal"
63991                 }
63992             ],
63993             "description": {
63994                 "kind": "markdown",
63995                 "value": "Indicates whether an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) is modal when displayed."
63996             }
63997         },
63998         {
63999             "name": "aria-multiline",
64000             "valueSet": "b",
64001             "references": [
64002                 {
64003                     "name": "WAI-ARIA Reference",
64004                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-multiline"
64005                 }
64006             ],
64007             "description": {
64008                 "kind": "markdown",
64009                 "value": "Indicates whether a text box accepts multiple lines of input or only a single line."
64010             }
64011         },
64012         {
64013             "name": "aria-multiselectable",
64014             "valueSet": "b",
64015             "references": [
64016                 {
64017                     "name": "WAI-ARIA Reference",
64018                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-multiselectable"
64019                 }
64020             ],
64021             "description": {
64022                 "kind": "markdown",
64023                 "value": "Indicates that the user may select more than one item from the current selectable descendants."
64024             }
64025         },
64026         {
64027             "name": "aria-orientation",
64028             "valueSet": "orientation",
64029             "references": [
64030                 {
64031                     "name": "WAI-ARIA Reference",
64032                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-orientation"
64033                 }
64034             ],
64035             "description": {
64036                 "kind": "markdown",
64037                 "value": "Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous."
64038             }
64039         },
64040         {
64041             "name": "aria-owns",
64042             "references": [
64043                 {
64044                     "name": "WAI-ARIA Reference",
64045                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-owns"
64046                 }
64047             ],
64048             "description": {
64049                 "kind": "markdown",
64050                 "value": "Identifies an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) (or elements) in order to define a visual, functional, or contextual parent/child [relationship](https://www.w3.org/TR/wai-aria-1.1/#dfn-relationship) between DOM elements where the DOM hierarchy cannot be used to represent the relationship. See related [`aria-controls`](https://www.w3.org/TR/wai-aria-1.1/#aria-controls)."
64051             }
64052         },
64053         {
64054             "name": "aria-placeholder",
64055             "references": [
64056                 {
64057                     "name": "WAI-ARIA Reference",
64058                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-placeholder"
64059                 }
64060             ],
64061             "description": {
64062                 "kind": "markdown",
64063                 "value": "Defines a short hint (a word or short phrase) intended to aid the user with data entry when the control has no value. A hint could be a sample value or a brief description of the expected format."
64064             }
64065         },
64066         {
64067             "name": "aria-posinset",
64068             "references": [
64069                 {
64070                     "name": "WAI-ARIA Reference",
64071                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-posinset"
64072                 }
64073             ],
64074             "description": {
64075                 "kind": "markdown",
64076                 "value": "Defines an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element)'s number or position in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM. See related [`aria-setsize`](https://www.w3.org/TR/wai-aria-1.1/#aria-setsize)."
64077             }
64078         },
64079         {
64080             "name": "aria-pressed",
64081             "valueSet": "tristate",
64082             "references": [
64083                 {
64084                     "name": "WAI-ARIA Reference",
64085                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-pressed"
64086                 }
64087             ],
64088             "description": {
64089                 "kind": "markdown",
64090                 "value": "Indicates the current \"pressed\" [state](https://www.w3.org/TR/wai-aria-1.1/#dfn-state) of toggle buttons. See related [`aria-checked`](https://www.w3.org/TR/wai-aria-1.1/#aria-checked) and [`aria-selected`](https://www.w3.org/TR/wai-aria-1.1/#aria-selected)."
64091             }
64092         },
64093         {
64094             "name": "aria-readonly",
64095             "valueSet": "b",
64096             "references": [
64097                 {
64098                     "name": "WAI-ARIA Reference",
64099                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-readonly"
64100                 }
64101             ],
64102             "description": {
64103                 "kind": "markdown",
64104                 "value": "Indicates that the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) is not editable, but is otherwise [operable](https://www.w3.org/TR/wai-aria-1.1/#dfn-operable). See related [`aria-disabled`](https://www.w3.org/TR/wai-aria-1.1/#aria-disabled)."
64105             }
64106         },
64107         {
64108             "name": "aria-relevant",
64109             "valueSet": "relevant",
64110             "references": [
64111                 {
64112                     "name": "WAI-ARIA Reference",
64113                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-relevant"
64114                 }
64115             ],
64116             "description": {
64117                 "kind": "markdown",
64118                 "value": "Indicates what notifications the user agent will trigger when the accessibility tree within a live region is modified. See related [`aria-atomic`](https://www.w3.org/TR/wai-aria-1.1/#aria-atomic)."
64119             }
64120         },
64121         {
64122             "name": "aria-required",
64123             "valueSet": "b",
64124             "references": [
64125                 {
64126                     "name": "WAI-ARIA Reference",
64127                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-required"
64128                 }
64129             ],
64130             "description": {
64131                 "kind": "markdown",
64132                 "value": "Indicates that user input is required on the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) before a form may be submitted."
64133             }
64134         },
64135         {
64136             "name": "aria-roledescription",
64137             "references": [
64138                 {
64139                     "name": "WAI-ARIA Reference",
64140                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-roledescription"
64141                 }
64142             ],
64143             "description": {
64144                 "kind": "markdown",
64145                 "value": "Defines a human-readable, author-localized description for the [role](https://www.w3.org/TR/wai-aria-1.1/#dfn-role) of an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element)."
64146             }
64147         },
64148         {
64149             "name": "aria-rowcount",
64150             "references": [
64151                 {
64152                     "name": "WAI-ARIA Reference",
64153                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-rowcount"
64154                 }
64155             ],
64156             "description": {
64157                 "kind": "markdown",
64158                 "value": "Defines the total number of rows in a [`table`](https://www.w3.org/TR/wai-aria-1.1/#table), [`grid`](https://www.w3.org/TR/wai-aria-1.1/#grid), or [`treegrid`](https://www.w3.org/TR/wai-aria-1.1/#treegrid). See related [`aria-rowindex`](https://www.w3.org/TR/wai-aria-1.1/#aria-rowindex)."
64159             }
64160         },
64161         {
64162             "name": "aria-rowindex",
64163             "references": [
64164                 {
64165                     "name": "WAI-ARIA Reference",
64166                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-rowindex"
64167                 }
64168             ],
64169             "description": {
64170                 "kind": "markdown",
64171                 "value": "Defines an [element's](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) row index or position with respect to the total number of rows within a [`table`](https://www.w3.org/TR/wai-aria-1.1/#table), [`grid`](https://www.w3.org/TR/wai-aria-1.1/#grid), or [`treegrid`](https://www.w3.org/TR/wai-aria-1.1/#treegrid). See related [`aria-rowcount`](https://www.w3.org/TR/wai-aria-1.1/#aria-rowcount) and [`aria-rowspan`](https://www.w3.org/TR/wai-aria-1.1/#aria-rowspan)."
64172             }
64173         },
64174         {
64175             "name": "aria-rowspan",
64176             "references": [
64177                 {
64178                     "name": "WAI-ARIA Reference",
64179                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-rowspan"
64180                 }
64181             ],
64182             "description": {
64183                 "kind": "markdown",
64184                 "value": "Defines the number of rows spanned by a cell or gridcell within a [`table`](https://www.w3.org/TR/wai-aria-1.1/#table), [`grid`](https://www.w3.org/TR/wai-aria-1.1/#grid), or [`treegrid`](https://www.w3.org/TR/wai-aria-1.1/#treegrid). See related [`aria-rowindex`](https://www.w3.org/TR/wai-aria-1.1/#aria-rowindex) and [`aria-colspan`](https://www.w3.org/TR/wai-aria-1.1/#aria-colspan)."
64185             }
64186         },
64187         {
64188             "name": "aria-selected",
64189             "valueSet": "u",
64190             "references": [
64191                 {
64192                     "name": "WAI-ARIA Reference",
64193                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-selected"
64194                 }
64195             ],
64196             "description": {
64197                 "kind": "markdown",
64198                 "value": "Indicates the current \"selected\" [state](https://www.w3.org/TR/wai-aria-1.1/#dfn-state) of various [widgets](https://www.w3.org/TR/wai-aria-1.1/#dfn-widget). See related [`aria-checked`](https://www.w3.org/TR/wai-aria-1.1/#aria-checked) and [`aria-pressed`](https://www.w3.org/TR/wai-aria-1.1/#aria-pressed)."
64199             }
64200         },
64201         {
64202             "name": "aria-setsize",
64203             "references": [
64204                 {
64205                     "name": "WAI-ARIA Reference",
64206                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-setsize"
64207                 }
64208             ],
64209             "description": {
64210                 "kind": "markdown",
64211                 "value": "Defines the number of items in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM. See related [`aria-posinset`](https://www.w3.org/TR/wai-aria-1.1/#aria-posinset)."
64212             }
64213         },
64214         {
64215             "name": "aria-sort",
64216             "valueSet": "sort",
64217             "references": [
64218                 {
64219                     "name": "WAI-ARIA Reference",
64220                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-sort"
64221                 }
64222             ],
64223             "description": {
64224                 "kind": "markdown",
64225                 "value": "Indicates if items in a table or grid are sorted in ascending or descending order."
64226             }
64227         },
64228         {
64229             "name": "aria-valuemax",
64230             "references": [
64231                 {
64232                     "name": "WAI-ARIA Reference",
64233                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-valuemax"
64234                 }
64235             ],
64236             "description": {
64237                 "kind": "markdown",
64238                 "value": "Defines the maximum allowed value for a range [widget](https://www.w3.org/TR/wai-aria-1.1/#dfn-widget)."
64239             }
64240         },
64241         {
64242             "name": "aria-valuemin",
64243             "references": [
64244                 {
64245                     "name": "WAI-ARIA Reference",
64246                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-valuemin"
64247                 }
64248             ],
64249             "description": {
64250                 "kind": "markdown",
64251                 "value": "Defines the minimum allowed value for a range [widget](https://www.w3.org/TR/wai-aria-1.1/#dfn-widget)."
64252             }
64253         },
64254         {
64255             "name": "aria-valuenow",
64256             "references": [
64257                 {
64258                     "name": "WAI-ARIA Reference",
64259                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-valuenow"
64260                 }
64261             ],
64262             "description": {
64263                 "kind": "markdown",
64264                 "value": "Defines the current value for a range [widget](https://www.w3.org/TR/wai-aria-1.1/#dfn-widget). See related [`aria-valuetext`](https://www.w3.org/TR/wai-aria-1.1/#aria-valuetext)."
64265             }
64266         },
64267         {
64268             "name": "aria-valuetext",
64269             "references": [
64270                 {
64271                     "name": "WAI-ARIA Reference",
64272                     "url": "https://www.w3.org/TR/wai-aria-1.1/#aria-valuetext"
64273                 }
64274             ],
64275             "description": {
64276                 "kind": "markdown",
64277                 "value": "Defines the human readable text alternative of [`aria-valuenow`](https://www.w3.org/TR/wai-aria-1.1/#aria-valuenow) for a range [widget](https://www.w3.org/TR/wai-aria-1.1/#dfn-widget)."
64278             }
64279         },
64280         {
64281             "name": "aria-details",
64282             "description": {
64283                 "kind": "markdown",
64284                 "value": "Identifies the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) that provides a detailed, extended description for the [object](https://www.w3.org/TR/wai-aria-1.1/#dfn-object). See related [`aria-describedby`](https://www.w3.org/TR/wai-aria-1.1/#aria-describedby)."
64285             }
64286         },
64287         {
64288             "name": "aria-keyshortcuts",
64289             "description": {
64290                 "kind": "markdown",
64291                 "value": "Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element."
64292             }
64293         }
64294     ],
64295     "valueSets": [
64296         {
64297             "name": "b",
64298             "values": [
64299                 {
64300                     "name": "true"
64301                 },
64302                 {
64303                     "name": "false"
64304                 }
64305             ]
64306         },
64307         {
64308             "name": "u",
64309             "values": [
64310                 {
64311                     "name": "true"
64312                 },
64313                 {
64314                     "name": "false"
64315                 },
64316                 {
64317                     "name": "undefined"
64318                 }
64319             ]
64320         },
64321         {
64322             "name": "o",
64323             "values": [
64324                 {
64325                     "name": "on"
64326                 },
64327                 {
64328                     "name": "off"
64329                 }
64330             ]
64331         },
64332         {
64333             "name": "y",
64334             "values": [
64335                 {
64336                     "name": "yes"
64337                 },
64338                 {
64339                     "name": "no"
64340                 }
64341             ]
64342         },
64343         {
64344             "name": "w",
64345             "values": [
64346                 {
64347                     "name": "soft"
64348                 },
64349                 {
64350                     "name": "hard"
64351                 }
64352             ]
64353         },
64354         {
64355             "name": "d",
64356             "values": [
64357                 {
64358                     "name": "ltr"
64359                 },
64360                 {
64361                     "name": "rtl"
64362                 },
64363                 {
64364                     "name": "auto"
64365                 }
64366             ]
64367         },
64368         {
64369             "name": "m",
64370             "values": [
64371                 {
64372                     "name": "GET",
64373                     "description": {
64374                         "kind": "markdown",
64375                         "value": "Corresponds to the HTTP [GET method](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3); form data are appended to the `action` attribute URI with a '?' as separator, and the resulting URI is sent to the server. Use this method when the form has no side-effects and contains only ASCII characters."
64376                     }
64377                 },
64378                 {
64379                     "name": "POST",
64380                     "description": {
64381                         "kind": "markdown",
64382                         "value": "Corresponds to the HTTP [POST method](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5); form data are included in the body of the form and sent to the server."
64383                     }
64384                 },
64385                 {
64386                     "name": "dialog",
64387                     "description": {
64388                         "kind": "markdown",
64389                         "value": "Use when the form is inside a [`<dialog>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog) element to close the dialog when submitted."
64390                     }
64391                 }
64392             ]
64393         },
64394         {
64395             "name": "fm",
64396             "values": [
64397                 {
64398                     "name": "GET"
64399                 },
64400                 {
64401                     "name": "POST"
64402                 }
64403             ]
64404         },
64405         {
64406             "name": "s",
64407             "values": [
64408                 {
64409                     "name": "row"
64410                 },
64411                 {
64412                     "name": "col"
64413                 },
64414                 {
64415                     "name": "rowgroup"
64416                 },
64417                 {
64418                     "name": "colgroup"
64419                 }
64420             ]
64421         },
64422         {
64423             "name": "t",
64424             "values": [
64425                 {
64426                     "name": "hidden"
64427                 },
64428                 {
64429                     "name": "text"
64430                 },
64431                 {
64432                     "name": "search"
64433                 },
64434                 {
64435                     "name": "tel"
64436                 },
64437                 {
64438                     "name": "url"
64439                 },
64440                 {
64441                     "name": "email"
64442                 },
64443                 {
64444                     "name": "password"
64445                 },
64446                 {
64447                     "name": "datetime"
64448                 },
64449                 {
64450                     "name": "date"
64451                 },
64452                 {
64453                     "name": "month"
64454                 },
64455                 {
64456                     "name": "week"
64457                 },
64458                 {
64459                     "name": "time"
64460                 },
64461                 {
64462                     "name": "datetime-local"
64463                 },
64464                 {
64465                     "name": "number"
64466                 },
64467                 {
64468                     "name": "range"
64469                 },
64470                 {
64471                     "name": "color"
64472                 },
64473                 {
64474                     "name": "checkbox"
64475                 },
64476                 {
64477                     "name": "radio"
64478                 },
64479                 {
64480                     "name": "file"
64481                 },
64482                 {
64483                     "name": "submit"
64484                 },
64485                 {
64486                     "name": "image"
64487                 },
64488                 {
64489                     "name": "reset"
64490                 },
64491                 {
64492                     "name": "button"
64493                 }
64494             ]
64495         },
64496         {
64497             "name": "im",
64498             "values": [
64499                 {
64500                     "name": "verbatim"
64501                 },
64502                 {
64503                     "name": "latin"
64504                 },
64505                 {
64506                     "name": "latin-name"
64507                 },
64508                 {
64509                     "name": "latin-prose"
64510                 },
64511                 {
64512                     "name": "full-width-latin"
64513                 },
64514                 {
64515                     "name": "kana"
64516                 },
64517                 {
64518                     "name": "kana-name"
64519                 },
64520                 {
64521                     "name": "katakana"
64522                 },
64523                 {
64524                     "name": "numeric"
64525                 },
64526                 {
64527                     "name": "tel"
64528                 },
64529                 {
64530                     "name": "email"
64531                 },
64532                 {
64533                     "name": "url"
64534                 }
64535             ]
64536         },
64537         {
64538             "name": "bt",
64539             "values": [
64540                 {
64541                     "name": "button"
64542                 },
64543                 {
64544                     "name": "submit"
64545                 },
64546                 {
64547                     "name": "reset"
64548                 },
64549                 {
64550                     "name": "menu"
64551                 }
64552             ]
64553         },
64554         {
64555             "name": "lt",
64556             "values": [
64557                 {
64558                     "name": "1"
64559                 },
64560                 {
64561                     "name": "a"
64562                 },
64563                 {
64564                     "name": "A"
64565                 },
64566                 {
64567                     "name": "i"
64568                 },
64569                 {
64570                     "name": "I"
64571                 }
64572             ]
64573         },
64574         {
64575             "name": "mt",
64576             "values": [
64577                 {
64578                     "name": "context"
64579                 },
64580                 {
64581                     "name": "toolbar"
64582                 }
64583             ]
64584         },
64585         {
64586             "name": "mit",
64587             "values": [
64588                 {
64589                     "name": "command"
64590                 },
64591                 {
64592                     "name": "checkbox"
64593                 },
64594                 {
64595                     "name": "radio"
64596                 }
64597             ]
64598         },
64599         {
64600             "name": "et",
64601             "values": [
64602                 {
64603                     "name": "application/x-www-form-urlencoded"
64604                 },
64605                 {
64606                     "name": "multipart/form-data"
64607                 },
64608                 {
64609                     "name": "text/plain"
64610                 }
64611             ]
64612         },
64613         {
64614             "name": "tk",
64615             "values": [
64616                 {
64617                     "name": "subtitles"
64618                 },
64619                 {
64620                     "name": "captions"
64621                 },
64622                 {
64623                     "name": "descriptions"
64624                 },
64625                 {
64626                     "name": "chapters"
64627                 },
64628                 {
64629                     "name": "metadata"
64630                 }
64631             ]
64632         },
64633         {
64634             "name": "pl",
64635             "values": [
64636                 {
64637                     "name": "none"
64638                 },
64639                 {
64640                     "name": "metadata"
64641                 },
64642                 {
64643                     "name": "auto"
64644                 }
64645             ]
64646         },
64647         {
64648             "name": "sh",
64649             "values": [
64650                 {
64651                     "name": "circle"
64652                 },
64653                 {
64654                     "name": "default"
64655                 },
64656                 {
64657                     "name": "poly"
64658                 },
64659                 {
64660                     "name": "rect"
64661                 }
64662             ]
64663         },
64664         {
64665             "name": "xo",
64666             "values": [
64667                 {
64668                     "name": "anonymous"
64669                 },
64670                 {
64671                     "name": "use-credentials"
64672                 }
64673             ]
64674         },
64675         {
64676             "name": "sb",
64677             "values": [
64678                 {
64679                     "name": "allow-forms"
64680                 },
64681                 {
64682                     "name": "allow-modals"
64683                 },
64684                 {
64685                     "name": "allow-pointer-lock"
64686                 },
64687                 {
64688                     "name": "allow-popups"
64689                 },
64690                 {
64691                     "name": "allow-popups-to-escape-sandbox"
64692                 },
64693                 {
64694                     "name": "allow-same-origin"
64695                 },
64696                 {
64697                     "name": "allow-scripts"
64698                 },
64699                 {
64700                     "name": "allow-top-navigation"
64701                 }
64702             ]
64703         },
64704         {
64705             "name": "tristate",
64706             "values": [
64707                 {
64708                     "name": "true"
64709                 },
64710                 {
64711                     "name": "false"
64712                 },
64713                 {
64714                     "name": "mixed"
64715                 },
64716                 {
64717                     "name": "undefined"
64718                 }
64719             ]
64720         },
64721         {
64722             "name": "inputautocomplete",
64723             "values": [
64724                 {
64725                     "name": "additional-name"
64726                 },
64727                 {
64728                     "name": "address-level1"
64729                 },
64730                 {
64731                     "name": "address-level2"
64732                 },
64733                 {
64734                     "name": "address-level3"
64735                 },
64736                 {
64737                     "name": "address-level4"
64738                 },
64739                 {
64740                     "name": "address-line1"
64741                 },
64742                 {
64743                     "name": "address-line2"
64744                 },
64745                 {
64746                     "name": "address-line3"
64747                 },
64748                 {
64749                     "name": "bday"
64750                 },
64751                 {
64752                     "name": "bday-year"
64753                 },
64754                 {
64755                     "name": "bday-day"
64756                 },
64757                 {
64758                     "name": "bday-month"
64759                 },
64760                 {
64761                     "name": "billing"
64762                 },
64763                 {
64764                     "name": "cc-additional-name"
64765                 },
64766                 {
64767                     "name": "cc-csc"
64768                 },
64769                 {
64770                     "name": "cc-exp"
64771                 },
64772                 {
64773                     "name": "cc-exp-month"
64774                 },
64775                 {
64776                     "name": "cc-exp-year"
64777                 },
64778                 {
64779                     "name": "cc-family-name"
64780                 },
64781                 {
64782                     "name": "cc-given-name"
64783                 },
64784                 {
64785                     "name": "cc-name"
64786                 },
64787                 {
64788                     "name": "cc-number"
64789                 },
64790                 {
64791                     "name": "cc-type"
64792                 },
64793                 {
64794                     "name": "country"
64795                 },
64796                 {
64797                     "name": "country-name"
64798                 },
64799                 {
64800                     "name": "current-password"
64801                 },
64802                 {
64803                     "name": "email"
64804                 },
64805                 {
64806                     "name": "family-name"
64807                 },
64808                 {
64809                     "name": "fax"
64810                 },
64811                 {
64812                     "name": "given-name"
64813                 },
64814                 {
64815                     "name": "home"
64816                 },
64817                 {
64818                     "name": "honorific-prefix"
64819                 },
64820                 {
64821                     "name": "honorific-suffix"
64822                 },
64823                 {
64824                     "name": "impp"
64825                 },
64826                 {
64827                     "name": "language"
64828                 },
64829                 {
64830                     "name": "mobile"
64831                 },
64832                 {
64833                     "name": "name"
64834                 },
64835                 {
64836                     "name": "new-password"
64837                 },
64838                 {
64839                     "name": "nickname"
64840                 },
64841                 {
64842                     "name": "organization"
64843                 },
64844                 {
64845                     "name": "organization-title"
64846                 },
64847                 {
64848                     "name": "pager"
64849                 },
64850                 {
64851                     "name": "photo"
64852                 },
64853                 {
64854                     "name": "postal-code"
64855                 },
64856                 {
64857                     "name": "sex"
64858                 },
64859                 {
64860                     "name": "shipping"
64861                 },
64862                 {
64863                     "name": "street-address"
64864                 },
64865                 {
64866                     "name": "tel-area-code"
64867                 },
64868                 {
64869                     "name": "tel"
64870                 },
64871                 {
64872                     "name": "tel-country-code"
64873                 },
64874                 {
64875                     "name": "tel-extension"
64876                 },
64877                 {
64878                     "name": "tel-local"
64879                 },
64880                 {
64881                     "name": "tel-local-prefix"
64882                 },
64883                 {
64884                     "name": "tel-local-suffix"
64885                 },
64886                 {
64887                     "name": "tel-national"
64888                 },
64889                 {
64890                     "name": "transaction-amount"
64891                 },
64892                 {
64893                     "name": "transaction-currency"
64894                 },
64895                 {
64896                     "name": "url"
64897                 },
64898                 {
64899                     "name": "username"
64900                 },
64901                 {
64902                     "name": "work"
64903                 }
64904             ]
64905         },
64906         {
64907             "name": "autocomplete",
64908             "values": [
64909                 {
64910                     "name": "inline"
64911                 },
64912                 {
64913                     "name": "list"
64914                 },
64915                 {
64916                     "name": "both"
64917                 },
64918                 {
64919                     "name": "none"
64920                 }
64921             ]
64922         },
64923         {
64924             "name": "current",
64925             "values": [
64926                 {
64927                     "name": "page"
64928                 },
64929                 {
64930                     "name": "step"
64931                 },
64932                 {
64933                     "name": "location"
64934                 },
64935                 {
64936                     "name": "date"
64937                 },
64938                 {
64939                     "name": "time"
64940                 },
64941                 {
64942                     "name": "true"
64943                 },
64944                 {
64945                     "name": "false"
64946                 }
64947             ]
64948         },
64949         {
64950             "name": "dropeffect",
64951             "values": [
64952                 {
64953                     "name": "copy"
64954                 },
64955                 {
64956                     "name": "move"
64957                 },
64958                 {
64959                     "name": "link"
64960                 },
64961                 {
64962                     "name": "execute"
64963                 },
64964                 {
64965                     "name": "popup"
64966                 },
64967                 {
64968                     "name": "none"
64969                 }
64970             ]
64971         },
64972         {
64973             "name": "invalid",
64974             "values": [
64975                 {
64976                     "name": "grammar"
64977                 },
64978                 {
64979                     "name": "false"
64980                 },
64981                 {
64982                     "name": "spelling"
64983                 },
64984                 {
64985                     "name": "true"
64986                 }
64987             ]
64988         },
64989         {
64990             "name": "live",
64991             "values": [
64992                 {
64993                     "name": "off"
64994                 },
64995                 {
64996                     "name": "polite"
64997                 },
64998                 {
64999                     "name": "assertive"
65000                 }
65001             ]
65002         },
65003         {
65004             "name": "orientation",
65005             "values": [
65006                 {
65007                     "name": "vertical"
65008                 },
65009                 {
65010                     "name": "horizontal"
65011                 },
65012                 {
65013                     "name": "undefined"
65014                 }
65015             ]
65016         },
65017         {
65018             "name": "relevant",
65019             "values": [
65020                 {
65021                     "name": "additions"
65022                 },
65023                 {
65024                     "name": "removals"
65025                 },
65026                 {
65027                     "name": "text"
65028                 },
65029                 {
65030                     "name": "all"
65031                 },
65032                 {
65033                     "name": "additions text"
65034                 }
65035             ]
65036         },
65037         {
65038             "name": "sort",
65039             "values": [
65040                 {
65041                     "name": "ascending"
65042                 },
65043                 {
65044                     "name": "descending"
65045                 },
65046                 {
65047                     "name": "none"
65048                 },
65049                 {
65050                     "name": "other"
65051                 }
65052             ]
65053         },
65054         {
65055             "name": "roles",
65056             "values": [
65057                 {
65058                     "name": "alert"
65059                 },
65060                 {
65061                     "name": "alertdialog"
65062                 },
65063                 {
65064                     "name": "button"
65065                 },
65066                 {
65067                     "name": "checkbox"
65068                 },
65069                 {
65070                     "name": "dialog"
65071                 },
65072                 {
65073                     "name": "gridcell"
65074                 },
65075                 {
65076                     "name": "link"
65077                 },
65078                 {
65079                     "name": "log"
65080                 },
65081                 {
65082                     "name": "marquee"
65083                 },
65084                 {
65085                     "name": "menuitem"
65086                 },
65087                 {
65088                     "name": "menuitemcheckbox"
65089                 },
65090                 {
65091                     "name": "menuitemradio"
65092                 },
65093                 {
65094                     "name": "option"
65095                 },
65096                 {
65097                     "name": "progressbar"
65098                 },
65099                 {
65100                     "name": "radio"
65101                 },
65102                 {
65103                     "name": "scrollbar"
65104                 },
65105                 {
65106                     "name": "searchbox"
65107                 },
65108                 {
65109                     "name": "slider"
65110                 },
65111                 {
65112                     "name": "spinbutton"
65113                 },
65114                 {
65115                     "name": "status"
65116                 },
65117                 {
65118                     "name": "switch"
65119                 },
65120                 {
65121                     "name": "tab"
65122                 },
65123                 {
65124                     "name": "tabpanel"
65125                 },
65126                 {
65127                     "name": "textbox"
65128                 },
65129                 {
65130                     "name": "timer"
65131                 },
65132                 {
65133                     "name": "tooltip"
65134                 },
65135                 {
65136                     "name": "treeitem"
65137                 },
65138                 {
65139                     "name": "combobox"
65140                 },
65141                 {
65142                     "name": "grid"
65143                 },
65144                 {
65145                     "name": "listbox"
65146                 },
65147                 {
65148                     "name": "menu"
65149                 },
65150                 {
65151                     "name": "menubar"
65152                 },
65153                 {
65154                     "name": "radiogroup"
65155                 },
65156                 {
65157                     "name": "tablist"
65158                 },
65159                 {
65160                     "name": "tree"
65161                 },
65162                 {
65163                     "name": "treegrid"
65164                 },
65165                 {
65166                     "name": "application"
65167                 },
65168                 {
65169                     "name": "article"
65170                 },
65171                 {
65172                     "name": "cell"
65173                 },
65174                 {
65175                     "name": "columnheader"
65176                 },
65177                 {
65178                     "name": "definition"
65179                 },
65180                 {
65181                     "name": "directory"
65182                 },
65183                 {
65184                     "name": "document"
65185                 },
65186                 {
65187                     "name": "feed"
65188                 },
65189                 {
65190                     "name": "figure"
65191                 },
65192                 {
65193                     "name": "group"
65194                 },
65195                 {
65196                     "name": "heading"
65197                 },
65198                 {
65199                     "name": "img"
65200                 },
65201                 {
65202                     "name": "list"
65203                 },
65204                 {
65205                     "name": "listitem"
65206                 },
65207                 {
65208                     "name": "math"
65209                 },
65210                 {
65211                     "name": "none"
65212                 },
65213                 {
65214                     "name": "note"
65215                 },
65216                 {
65217                     "name": "presentation"
65218                 },
65219                 {
65220                     "name": "region"
65221                 },
65222                 {
65223                     "name": "row"
65224                 },
65225                 {
65226                     "name": "rowgroup"
65227                 },
65228                 {
65229                     "name": "rowheader"
65230                 },
65231                 {
65232                     "name": "separator"
65233                 },
65234                 {
65235                     "name": "table"
65236                 },
65237                 {
65238                     "name": "term"
65239                 },
65240                 {
65241                     "name": "text"
65242                 },
65243                 {
65244                     "name": "toolbar"
65245                 },
65246                 {
65247                     "name": "banner"
65248                 },
65249                 {
65250                     "name": "complementary"
65251                 },
65252                 {
65253                     "name": "contentinfo"
65254                 },
65255                 {
65256                     "name": "form"
65257                 },
65258                 {
65259                     "name": "main"
65260                 },
65261                 {
65262                     "name": "navigation"
65263                 },
65264                 {
65265                     "name": "region"
65266                 },
65267                 {
65268                     "name": "search"
65269                 },
65270                 {
65271                     "name": "doc-abstract"
65272                 },
65273                 {
65274                     "name": "doc-acknowledgments"
65275                 },
65276                 {
65277                     "name": "doc-afterword"
65278                 },
65279                 {
65280                     "name": "doc-appendix"
65281                 },
65282                 {
65283                     "name": "doc-backlink"
65284                 },
65285                 {
65286                     "name": "doc-biblioentry"
65287                 },
65288                 {
65289                     "name": "doc-bibliography"
65290                 },
65291                 {
65292                     "name": "doc-biblioref"
65293                 },
65294                 {
65295                     "name": "doc-chapter"
65296                 },
65297                 {
65298                     "name": "doc-colophon"
65299                 },
65300                 {
65301                     "name": "doc-conclusion"
65302                 },
65303                 {
65304                     "name": "doc-cover"
65305                 },
65306                 {
65307                     "name": "doc-credit"
65308                 },
65309                 {
65310                     "name": "doc-credits"
65311                 },
65312                 {
65313                     "name": "doc-dedication"
65314                 },
65315                 {
65316                     "name": "doc-endnote"
65317                 },
65318                 {
65319                     "name": "doc-endnotes"
65320                 },
65321                 {
65322                     "name": "doc-epigraph"
65323                 },
65324                 {
65325                     "name": "doc-epilogue"
65326                 },
65327                 {
65328                     "name": "doc-errata"
65329                 },
65330                 {
65331                     "name": "doc-example"
65332                 },
65333                 {
65334                     "name": "doc-footnote"
65335                 },
65336                 {
65337                     "name": "doc-foreword"
65338                 },
65339                 {
65340                     "name": "doc-glossary"
65341                 },
65342                 {
65343                     "name": "doc-glossref"
65344                 },
65345                 {
65346                     "name": "doc-index"
65347                 },
65348                 {
65349                     "name": "doc-introduction"
65350                 },
65351                 {
65352                     "name": "doc-noteref"
65353                 },
65354                 {
65355                     "name": "doc-notice"
65356                 },
65357                 {
65358                     "name": "doc-pagebreak"
65359                 },
65360                 {
65361                     "name": "doc-pagelist"
65362                 },
65363                 {
65364                     "name": "doc-part"
65365                 },
65366                 {
65367                     "name": "doc-preface"
65368                 },
65369                 {
65370                     "name": "doc-prologue"
65371                 },
65372                 {
65373                     "name": "doc-pullquote"
65374                 },
65375                 {
65376                     "name": "doc-qna"
65377                 },
65378                 {
65379                     "name": "doc-subtitle"
65380                 },
65381                 {
65382                     "name": "doc-tip"
65383                 },
65384                 {
65385                     "name": "doc-toc"
65386                 }
65387             ]
65388         },
65389         {
65390             "name": "metanames",
65391             "values": [
65392                 {
65393                     "name": "application-name"
65394                 },
65395                 {
65396                     "name": "author"
65397                 },
65398                 {
65399                     "name": "description"
65400                 },
65401                 {
65402                     "name": "format-detection"
65403                 },
65404                 {
65405                     "name": "generator"
65406                 },
65407                 {
65408                     "name": "keywords"
65409                 },
65410                 {
65411                     "name": "publisher"
65412                 },
65413                 {
65414                     "name": "referrer"
65415                 },
65416                 {
65417                     "name": "robots"
65418                 },
65419                 {
65420                     "name": "theme-color"
65421                 },
65422                 {
65423                     "name": "viewport"
65424                 }
65425             ]
65426         }
65427     ]
65428 };
65429
65430
65431 /***/ }),
65432 /* 145 */
65433 /***/ ((__unused_webpack_module, exports) => {
65434
65435
65436 /*---------------------------------------------------------------------------------------------
65437  *  Copyright (c) Microsoft Corporation. All rights reserved.
65438  *  Licensed under the MIT License. See License.txt in the project root for license information.
65439  *--------------------------------------------------------------------------------------------*/
65440 Object.defineProperty(exports, "__esModule", ({ value: true }));
65441 exports.getLanguageModelCache = void 0;
65442 function getLanguageModelCache(maxEntries, cleanupIntervalTimeInSec, parse) {
65443     let languageModels = {};
65444     let nModels = 0;
65445     let cleanupInterval = undefined;
65446     if (cleanupIntervalTimeInSec > 0) {
65447         cleanupInterval = setInterval(() => {
65448             const cutoffTime = Date.now() - cleanupIntervalTimeInSec * 1000;
65449             const uris = Object.keys(languageModels);
65450             for (const uri of uris) {
65451                 const languageModelInfo = languageModels[uri];
65452                 if (languageModelInfo.cTime < cutoffTime) {
65453                     delete languageModels[uri];
65454                     nModels--;
65455                 }
65456             }
65457         }, cleanupIntervalTimeInSec * 1000);
65458     }
65459     return {
65460         get(document) {
65461             const version = document.version;
65462             const languageId = document.languageId;
65463             const languageModelInfo = languageModels[document.uri];
65464             if (languageModelInfo && languageModelInfo.version === version && languageModelInfo.languageId === languageId) {
65465                 languageModelInfo.cTime = Date.now();
65466                 return languageModelInfo.languageModel;
65467             }
65468             const languageModel = parse(document);
65469             languageModels[document.uri] = { languageModel, version, languageId, cTime: Date.now() };
65470             if (!languageModelInfo) {
65471                 nModels++;
65472             }
65473             if (nModels === maxEntries) {
65474                 let oldestTime = Number.MAX_VALUE;
65475                 let oldestUri = null;
65476                 for (const uri in languageModels) {
65477                     const languageModelInfo = languageModels[uri];
65478                     if (languageModelInfo.cTime < oldestTime) {
65479                         oldestUri = uri;
65480                         oldestTime = languageModelInfo.cTime;
65481                     }
65482                 }
65483                 if (oldestUri) {
65484                     delete languageModels[oldestUri];
65485                     nModels--;
65486                 }
65487             }
65488             return languageModel;
65489         },
65490         onDocumentRemoved(document) {
65491             const uri = document.uri;
65492             if (languageModels[uri]) {
65493                 delete languageModels[uri];
65494                 nModels--;
65495             }
65496         },
65497         dispose() {
65498             if (typeof cleanupInterval !== 'undefined') {
65499                 clearInterval(cleanupInterval);
65500                 cleanupInterval = undefined;
65501                 languageModels = {};
65502                 nModels = 0;
65503             }
65504         }
65505     };
65506 }
65507 exports.getLanguageModelCache = getLanguageModelCache;
65508
65509
65510 /***/ }),
65511 /* 146 */
65512 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
65513
65514
65515 /*---------------------------------------------------------------------------------------------
65516  *  Copyright (c) Microsoft Corporation. All rights reserved.
65517  *  Licensed under the MIT License. See License.txt in the project root for license information.
65518  *--------------------------------------------------------------------------------------------*/
65519 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
65520     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
65521     return new (P || (P = Promise))(function (resolve, reject) {
65522         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
65523         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
65524         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
65525         step((generator = generator.apply(thisArg, _arguments || [])).next());
65526     });
65527 };
65528 Object.defineProperty(exports, "__esModule", ({ value: true }));
65529 exports.getCSSMode = void 0;
65530 const languageModelCache_1 = __webpack_require__(145);
65531 const languageModes_1 = __webpack_require__(70);
65532 const embeddedSupport_1 = __webpack_require__(147);
65533 function getCSSMode(cssLanguageService, documentRegions, workspace) {
65534     let embeddedCSSDocuments = languageModelCache_1.getLanguageModelCache(10, 60, document => documentRegions.get(document).getEmbeddedDocument('css'));
65535     let cssStylesheets = languageModelCache_1.getLanguageModelCache(10, 60, document => cssLanguageService.parseStylesheet(document));
65536     return {
65537         getId() {
65538             return 'css';
65539         },
65540         doValidation(document, settings = workspace.settings) {
65541             return __awaiter(this, void 0, void 0, function* () {
65542                 let embedded = embeddedCSSDocuments.get(document);
65543                 return cssLanguageService.doValidation(embedded, cssStylesheets.get(embedded), settings && settings.css);
65544             });
65545         },
65546         doComplete(document, position, documentContext, _settings = workspace.settings) {
65547             return __awaiter(this, void 0, void 0, function* () {
65548                 let embedded = embeddedCSSDocuments.get(document);
65549                 const stylesheet = cssStylesheets.get(embedded);
65550                 return cssLanguageService.doComplete2(embedded, position, stylesheet, documentContext) || languageModes_1.CompletionList.create();
65551             });
65552         },
65553         doHover(document, position, settings) {
65554             var _a;
65555             return __awaiter(this, void 0, void 0, function* () {
65556                 let embedded = embeddedCSSDocuments.get(document);
65557                 return cssLanguageService.doHover(embedded, position, cssStylesheets.get(embedded), (_a = settings === null || settings === void 0 ? void 0 : settings.html) === null || _a === void 0 ? void 0 : _a.hover);
65558             });
65559         },
65560         findDocumentHighlight(document, position) {
65561             return __awaiter(this, void 0, void 0, function* () {
65562                 let embedded = embeddedCSSDocuments.get(document);
65563                 return cssLanguageService.findDocumentHighlights(embedded, position, cssStylesheets.get(embedded));
65564             });
65565         },
65566         findDocumentSymbols(document) {
65567             return __awaiter(this, void 0, void 0, function* () {
65568                 let embedded = embeddedCSSDocuments.get(document);
65569                 return cssLanguageService.findDocumentSymbols(embedded, cssStylesheets.get(embedded)).filter(s => s.name !== embeddedSupport_1.CSS_STYLE_RULE);
65570             });
65571         },
65572         findDefinition(document, position) {
65573             return __awaiter(this, void 0, void 0, function* () {
65574                 let embedded = embeddedCSSDocuments.get(document);
65575                 return cssLanguageService.findDefinition(embedded, position, cssStylesheets.get(embedded));
65576             });
65577         },
65578         findReferences(document, position) {
65579             return __awaiter(this, void 0, void 0, function* () {
65580                 let embedded = embeddedCSSDocuments.get(document);
65581                 return cssLanguageService.findReferences(embedded, position, cssStylesheets.get(embedded));
65582             });
65583         },
65584         findDocumentColors(document) {
65585             return __awaiter(this, void 0, void 0, function* () {
65586                 let embedded = embeddedCSSDocuments.get(document);
65587                 return cssLanguageService.findDocumentColors(embedded, cssStylesheets.get(embedded));
65588             });
65589         },
65590         getColorPresentations(document, color, range) {
65591             return __awaiter(this, void 0, void 0, function* () {
65592                 let embedded = embeddedCSSDocuments.get(document);
65593                 return cssLanguageService.getColorPresentations(embedded, cssStylesheets.get(embedded), color, range);
65594             });
65595         },
65596         getFoldingRanges(document) {
65597             return __awaiter(this, void 0, void 0, function* () {
65598                 let embedded = embeddedCSSDocuments.get(document);
65599                 return cssLanguageService.getFoldingRanges(embedded, {});
65600             });
65601         },
65602         getSelectionRange(document, position) {
65603             return __awaiter(this, void 0, void 0, function* () {
65604                 let embedded = embeddedCSSDocuments.get(document);
65605                 return cssLanguageService.getSelectionRanges(embedded, [position], cssStylesheets.get(embedded))[0];
65606             });
65607         },
65608         onDocumentRemoved(document) {
65609             embeddedCSSDocuments.onDocumentRemoved(document);
65610             cssStylesheets.onDocumentRemoved(document);
65611         },
65612         dispose() {
65613             embeddedCSSDocuments.dispose();
65614             cssStylesheets.dispose();
65615         }
65616     };
65617 }
65618 exports.getCSSMode = getCSSMode;
65619
65620
65621 /***/ }),
65622 /* 147 */
65623 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
65624
65625
65626 /*---------------------------------------------------------------------------------------------
65627  *  Copyright (c) Microsoft Corporation. All rights reserved.
65628  *  Licensed under the MIT License. See License.txt in the project root for license information.
65629  *--------------------------------------------------------------------------------------------*/
65630 Object.defineProperty(exports, "__esModule", ({ value: true }));
65631 exports.getDocumentRegions = exports.CSS_STYLE_RULE = void 0;
65632 const languageModes_1 = __webpack_require__(70);
65633 const vscode_languageserver_1 = __webpack_require__(49);
65634 exports.CSS_STYLE_RULE = '__';
65635 function getDocumentRegions(languageService, document) {
65636     let regions = [];
65637     let scanner = languageService.createScanner(document.getText());
65638     let lastTagName = '';
65639     let lastAttributeName = null;
65640     let languageIdFromType = undefined;
65641     let importedScripts = [];
65642     let token = scanner.scan();
65643     while (token !== languageModes_1.TokenType.EOS) {
65644         switch (token) {
65645             case languageModes_1.TokenType.StartTag:
65646                 lastTagName = scanner.getTokenText();
65647                 lastAttributeName = null;
65648                 languageIdFromType = 'javascript';
65649                 break;
65650             case languageModes_1.TokenType.Styles:
65651                 regions.push({ languageId: 'css', start: scanner.getTokenOffset(), end: scanner.getTokenEnd() });
65652                 break;
65653             case languageModes_1.TokenType.Script:
65654                 regions.push({ languageId: languageIdFromType, start: scanner.getTokenOffset(), end: scanner.getTokenEnd() });
65655                 break;
65656             case languageModes_1.TokenType.AttributeName:
65657                 lastAttributeName = scanner.getTokenText();
65658                 break;
65659             case languageModes_1.TokenType.AttributeValue:
65660                 if (lastAttributeName === 'src' && lastTagName.toLowerCase() === 'script') {
65661                     let value = scanner.getTokenText();
65662                     if (value[0] === '\'' || value[0] === '"') {
65663                         value = value.substr(1, value.length - 1);
65664                     }
65665                     importedScripts.push(value);
65666                 }
65667                 else if (lastAttributeName === 'type' && lastTagName.toLowerCase() === 'script') {
65668                     if (/["'](module|(text|application)\/(java|ecma)script|text\/babel)["']/.test(scanner.getTokenText())) {
65669                         languageIdFromType = 'javascript';
65670                     }
65671                     else if (/["']text\/typescript["']/.test(scanner.getTokenText())) {
65672                         languageIdFromType = 'typescript';
65673                     }
65674                     else {
65675                         languageIdFromType = undefined;
65676                     }
65677                 }
65678                 else {
65679                     let attributeLanguageId = getAttributeLanguage(lastAttributeName);
65680                     if (attributeLanguageId) {
65681                         let start = scanner.getTokenOffset();
65682                         let end = scanner.getTokenEnd();
65683                         let firstChar = document.getText()[start];
65684                         if (firstChar === '\'' || firstChar === '"') {
65685                             start++;
65686                             end--;
65687                         }
65688                         regions.push({ languageId: attributeLanguageId, start, end, attributeValue: true });
65689                     }
65690                 }
65691                 lastAttributeName = null;
65692                 break;
65693         }
65694         token = scanner.scan();
65695     }
65696     return {
65697         getLanguageRanges: (range) => getLanguageRanges(document, regions, range),
65698         getEmbeddedDocument: (languageId, ignoreAttributeValues) => getEmbeddedDocument(document, regions, languageId, ignoreAttributeValues),
65699         getLanguageAtPosition: (position) => getLanguageAtPosition(document, regions, position),
65700         getLanguagesInDocument: () => getLanguagesInDocument(document, regions),
65701         getImportedScripts: () => importedScripts
65702     };
65703 }
65704 exports.getDocumentRegions = getDocumentRegions;
65705 function getLanguageRanges(document, regions, range) {
65706     let result = [];
65707     let currentPos = range ? range.start : vscode_languageserver_1.Position.create(0, 0);
65708     let currentOffset = range ? document.offsetAt(range.start) : 0;
65709     let endOffset = range ? document.offsetAt(range.end) : document.getText().length;
65710     for (let region of regions) {
65711         if (region.end > currentOffset && region.start < endOffset) {
65712             let start = Math.max(region.start, currentOffset);
65713             let startPos = document.positionAt(start);
65714             if (currentOffset < region.start) {
65715                 result.push({
65716                     start: currentPos,
65717                     end: startPos,
65718                     languageId: 'html'
65719                 });
65720             }
65721             let end = Math.min(region.end, endOffset);
65722             let endPos = document.positionAt(end);
65723             if (end > region.start) {
65724                 result.push({
65725                     start: startPos,
65726                     end: endPos,
65727                     languageId: region.languageId,
65728                     attributeValue: region.attributeValue
65729                 });
65730             }
65731             currentOffset = end;
65732             currentPos = endPos;
65733         }
65734     }
65735     if (currentOffset < endOffset) {
65736         let endPos = range ? range.end : document.positionAt(endOffset);
65737         result.push({
65738             start: currentPos,
65739             end: endPos,
65740             languageId: 'html'
65741         });
65742     }
65743     return result;
65744 }
65745 function getLanguagesInDocument(_document, regions) {
65746     let result = [];
65747     for (let region of regions) {
65748         if (region.languageId && result.indexOf(region.languageId) === -1) {
65749             result.push(region.languageId);
65750             if (result.length === 3) {
65751                 return result;
65752             }
65753         }
65754     }
65755     result.push('html');
65756     return result;
65757 }
65758 function getLanguageAtPosition(document, regions, position) {
65759     let offset = document.offsetAt(position);
65760     for (let region of regions) {
65761         if (region.start <= offset) {
65762             if (offset <= region.end) {
65763                 return region.languageId;
65764             }
65765         }
65766         else {
65767             break;
65768         }
65769     }
65770     return 'html';
65771 }
65772 function getEmbeddedDocument(document, contents, languageId, ignoreAttributeValues) {
65773     let currentPos = 0;
65774     let oldContent = document.getText();
65775     let result = '';
65776     let lastSuffix = '';
65777     for (let c of contents) {
65778         if (c.languageId === languageId && (!ignoreAttributeValues || !c.attributeValue)) {
65779             result = substituteWithWhitespace(result, currentPos, c.start, oldContent, lastSuffix, getPrefix(c));
65780             result += oldContent.substring(c.start, c.end);
65781             currentPos = c.end;
65782             lastSuffix = getSuffix(c);
65783         }
65784     }
65785     result = substituteWithWhitespace(result, currentPos, oldContent.length, oldContent, lastSuffix, '');
65786     return languageModes_1.TextDocument.create(document.uri, languageId, document.version, result);
65787 }
65788 function getPrefix(c) {
65789     if (c.attributeValue) {
65790         switch (c.languageId) {
65791             case 'css': return exports.CSS_STYLE_RULE + '{';
65792         }
65793     }
65794     return '';
65795 }
65796 function getSuffix(c) {
65797     if (c.attributeValue) {
65798         switch (c.languageId) {
65799             case 'css': return '}';
65800             case 'javascript': return ';';
65801         }
65802     }
65803     return '';
65804 }
65805 function substituteWithWhitespace(result, start, end, oldContent, before, after) {
65806     let accumulatedWS = 0;
65807     result += before;
65808     for (let i = start + before.length; i < end; i++) {
65809         let ch = oldContent[i];
65810         if (ch === '\n' || ch === '\r') {
65811             // only write new lines, skip the whitespace
65812             accumulatedWS = 0;
65813             result += ch;
65814         }
65815         else {
65816             accumulatedWS++;
65817         }
65818     }
65819     result = append(result, ' ', accumulatedWS - after.length);
65820     result += after;
65821     return result;
65822 }
65823 function append(result, str, n) {
65824     while (n > 0) {
65825         if (n & 1) {
65826             result += str;
65827         }
65828         n >>= 1;
65829         str += str;
65830     }
65831     return result;
65832 }
65833 function getAttributeLanguage(attributeName) {
65834     let match = attributeName.match(/^(style)$|^(on\w+)$/i);
65835     if (!match) {
65836         return null;
65837     }
65838     return match[1] ? 'css' : 'javascript';
65839 }
65840
65841
65842 /***/ }),
65843 /* 148 */
65844 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
65845
65846
65847 /*---------------------------------------------------------------------------------------------
65848  *  Copyright (c) Microsoft Corporation. All rights reserved.
65849  *  Licensed under the MIT License. See License.txt in the project root for license information.
65850  *--------------------------------------------------------------------------------------------*/
65851 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
65852     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
65853     return new (P || (P = Promise))(function (resolve, reject) {
65854         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
65855         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
65856         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
65857         step((generator = generator.apply(thisArg, _arguments || [])).next());
65858     });
65859 };
65860 Object.defineProperty(exports, "__esModule", ({ value: true }));
65861 exports.getHTMLMode = void 0;
65862 const languageModelCache_1 = __webpack_require__(145);
65863 function getHTMLMode(htmlLanguageService, workspace) {
65864     let htmlDocuments = languageModelCache_1.getLanguageModelCache(10, 60, document => htmlLanguageService.parseHTMLDocument(document));
65865     return {
65866         getId() {
65867             return 'html';
65868         },
65869         getSelectionRange(document, position) {
65870             return __awaiter(this, void 0, void 0, function* () {
65871                 return htmlLanguageService.getSelectionRanges(document, [position])[0];
65872             });
65873         },
65874         doComplete(document, position, documentContext, settings = workspace.settings) {
65875             let options = settings && settings.html && settings.html.suggest;
65876             let doAutoComplete = settings && settings.html && settings.html.autoClosingTags;
65877             if (doAutoComplete) {
65878                 options.hideAutoCompleteProposals = true;
65879             }
65880             const htmlDocument = htmlDocuments.get(document);
65881             let completionList = htmlLanguageService.doComplete2(document, position, htmlDocument, documentContext, options);
65882             return completionList;
65883         },
65884         doHover(document, position, settings) {
65885             var _a;
65886             return __awaiter(this, void 0, void 0, function* () {
65887                 return htmlLanguageService.doHover(document, position, htmlDocuments.get(document), (_a = settings === null || settings === void 0 ? void 0 : settings.html) === null || _a === void 0 ? void 0 : _a.hover);
65888             });
65889         },
65890         findDocumentHighlight(document, position) {
65891             return __awaiter(this, void 0, void 0, function* () {
65892                 return htmlLanguageService.findDocumentHighlights(document, position, htmlDocuments.get(document));
65893             });
65894         },
65895         findDocumentLinks(document, documentContext) {
65896             return __awaiter(this, void 0, void 0, function* () {
65897                 return htmlLanguageService.findDocumentLinks(document, documentContext);
65898             });
65899         },
65900         findDocumentSymbols(document) {
65901             return __awaiter(this, void 0, void 0, function* () {
65902                 return htmlLanguageService.findDocumentSymbols(document, htmlDocuments.get(document));
65903             });
65904         },
65905         format(document, range, formatParams, settings = workspace.settings) {
65906             return __awaiter(this, void 0, void 0, function* () {
65907                 let formatSettings = settings && settings.html && settings.html.format;
65908                 if (formatSettings) {
65909                     formatSettings = merge(formatSettings, {});
65910                 }
65911                 else {
65912                     formatSettings = {};
65913                 }
65914                 if (formatSettings.contentUnformatted) {
65915                     formatSettings.contentUnformatted = formatSettings.contentUnformatted + ',script';
65916                 }
65917                 else {
65918                     formatSettings.contentUnformatted = 'script';
65919                 }
65920                 formatSettings = merge(formatParams, formatSettings);
65921                 return htmlLanguageService.format(document, range, formatSettings);
65922             });
65923         },
65924         getFoldingRanges(document) {
65925             return __awaiter(this, void 0, void 0, function* () {
65926                 return htmlLanguageService.getFoldingRanges(document);
65927             });
65928         },
65929         doAutoClose(document, position) {
65930             return __awaiter(this, void 0, void 0, function* () {
65931                 let offset = document.offsetAt(position);
65932                 let text = document.getText();
65933                 if (offset > 0 && text.charAt(offset - 1).match(/[>\/]/g)) {
65934                     return htmlLanguageService.doTagComplete(document, position, htmlDocuments.get(document));
65935                 }
65936                 return null;
65937             });
65938         },
65939         doRename(document, position, newName) {
65940             return __awaiter(this, void 0, void 0, function* () {
65941                 const htmlDocument = htmlDocuments.get(document);
65942                 return htmlLanguageService.doRename(document, position, newName, htmlDocument);
65943             });
65944         },
65945         onDocumentRemoved(document) {
65946             return __awaiter(this, void 0, void 0, function* () {
65947                 htmlDocuments.onDocumentRemoved(document);
65948             });
65949         },
65950         findMatchingTagPosition(document, position) {
65951             return __awaiter(this, void 0, void 0, function* () {
65952                 const htmlDocument = htmlDocuments.get(document);
65953                 return htmlLanguageService.findMatchingTagPosition(document, position, htmlDocument);
65954             });
65955         },
65956         doLinkedEditing(document, position) {
65957             return __awaiter(this, void 0, void 0, function* () {
65958                 const htmlDocument = htmlDocuments.get(document);
65959                 return htmlLanguageService.findLinkedEditingRanges(document, position, htmlDocument);
65960             });
65961         },
65962         dispose() {
65963             htmlDocuments.dispose();
65964         }
65965     };
65966 }
65967 exports.getHTMLMode = getHTMLMode;
65968 function merge(src, dst) {
65969     for (const key in src) {
65970         if (src.hasOwnProperty(key)) {
65971             dst[key] = src[key];
65972         }
65973     }
65974     return dst;
65975 }
65976
65977
65978 /***/ }),
65979 /* 149 */
65980 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
65981
65982
65983 /*---------------------------------------------------------------------------------------------
65984  *  Copyright (c) Microsoft Corporation. All rights reserved.
65985  *  Licensed under the MIT License. See License.txt in the project root for license information.
65986  *--------------------------------------------------------------------------------------------*/
65987 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
65988     if (k2 === undefined) k2 = k;
65989     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
65990 }) : (function(o, m, k, k2) {
65991     if (k2 === undefined) k2 = k;
65992     o[k2] = m[k];
65993 }));
65994 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
65995     Object.defineProperty(o, "default", { enumerable: true, value: v });
65996 }) : function(o, v) {
65997     o["default"] = v;
65998 });
65999 var __importStar = (this && this.__importStar) || function (mod) {
66000     if (mod && mod.__esModule) return mod;
66001     var result = {};
66002     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
66003     __setModuleDefault(result, mod);
66004     return result;
66005 };
66006 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
66007     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
66008     return new (P || (P = Promise))(function (resolve, reject) {
66009         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
66010         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
66011         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
66012         step((generator = generator.apply(thisArg, _arguments || [])).next());
66013     });
66014 };
66015 Object.defineProperty(exports, "__esModule", ({ value: true }));
66016 exports.getJavaScriptMode = void 0;
66017 const languageModelCache_1 = __webpack_require__(145);
66018 const languageModes_1 = __webpack_require__(70);
66019 const strings_1 = __webpack_require__(150);
66020 const ts = __importStar(__webpack_require__(151));
66021 const javascriptSemanticTokens_1 = __webpack_require__(152);
66022 const JS_WORD_REGEX = /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g;
66023 function getLanguageServiceHost(scriptKind) {
66024     const compilerOptions = { allowNonTsExtensions: true, allowJs: true, lib: ['lib.es6.d.ts'], target: ts.ScriptTarget.Latest, moduleResolution: ts.ModuleResolutionKind.Classic, experimentalDecorators: false };
66025     let currentTextDocument = languageModes_1.TextDocument.create('init', 'javascript', 1, '');
66026     const jsLanguageService = Promise.resolve().then(() => __importStar(__webpack_require__(/* webpackChunkName: "javascriptLibs" */ 153))).then(libs => {
66027         const host = {
66028             getCompilationSettings: () => compilerOptions,
66029             getScriptFileNames: () => [currentTextDocument.uri, 'jquery'],
66030             getScriptKind: (fileName) => {
66031                 if (fileName === currentTextDocument.uri) {
66032                     return scriptKind;
66033                 }
66034                 return fileName.substr(fileName.length - 2) === 'ts' ? ts.ScriptKind.TS : ts.ScriptKind.JS;
66035             },
66036             getScriptVersion: (fileName) => {
66037                 if (fileName === currentTextDocument.uri) {
66038                     return String(currentTextDocument.version);
66039                 }
66040                 return '1'; // default lib an jquery.d.ts are static
66041             },
66042             getScriptSnapshot: (fileName) => {
66043                 let text = '';
66044                 if (fileName === currentTextDocument.uri) {
66045                     text = currentTextDocument.getText();
66046                 }
66047                 else {
66048                     text = libs.loadLibrary(fileName);
66049                 }
66050                 return {
66051                     getText: (start, end) => text.substring(start, end),
66052                     getLength: () => text.length,
66053                     getChangeRange: () => undefined
66054                 };
66055             },
66056             getCurrentDirectory: () => '',
66057             getDefaultLibFileName: (_options) => 'es6'
66058         };
66059         return ts.createLanguageService(host);
66060     });
66061     return {
66062         getLanguageService(jsDocument) {
66063             return __awaiter(this, void 0, void 0, function* () {
66064                 currentTextDocument = jsDocument;
66065                 return jsLanguageService;
66066             });
66067         },
66068         getCompilationSettings() {
66069             return compilerOptions;
66070         },
66071         dispose() {
66072             if (jsLanguageService) {
66073                 jsLanguageService.then(s => s.dispose());
66074             }
66075         }
66076     };
66077 }
66078 function getJavaScriptMode(documentRegions, languageId, workspace) {
66079     let jsDocuments = languageModelCache_1.getLanguageModelCache(10, 60, document => documentRegions.get(document).getEmbeddedDocument(languageId));
66080     const host = getLanguageServiceHost(languageId === 'javascript' ? ts.ScriptKind.JS : ts.ScriptKind.TS);
66081     let globalSettings = {};
66082     return {
66083         getId() {
66084             return languageId;
66085         },
66086         doValidation(document, settings = workspace.settings) {
66087             return __awaiter(this, void 0, void 0, function* () {
66088                 host.getCompilationSettings()['experimentalDecorators'] = settings && settings.javascript && settings.javascript.implicitProjectConfig.experimentalDecorators;
66089                 const jsDocument = jsDocuments.get(document);
66090                 const languageService = yield host.getLanguageService(jsDocument);
66091                 const syntaxDiagnostics = languageService.getSyntacticDiagnostics(jsDocument.uri);
66092                 const semanticDiagnostics = languageService.getSemanticDiagnostics(jsDocument.uri);
66093                 return syntaxDiagnostics.concat(semanticDiagnostics).map((diag) => {
66094                     return {
66095                         range: convertRange(jsDocument, diag),
66096                         severity: languageModes_1.DiagnosticSeverity.Error,
66097                         source: languageId,
66098                         message: ts.flattenDiagnosticMessageText(diag.messageText, '\n')
66099                     };
66100                 });
66101             });
66102         },
66103         doComplete(document, position, _documentContext) {
66104             return __awaiter(this, void 0, void 0, function* () {
66105                 const jsDocument = jsDocuments.get(document);
66106                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66107                 let offset = jsDocument.offsetAt(position);
66108                 let completions = jsLanguageService.getCompletionsAtPosition(jsDocument.uri, offset, { includeExternalModuleExports: false, includeInsertTextCompletions: false });
66109                 if (!completions) {
66110                     return { isIncomplete: false, items: [] };
66111                 }
66112                 let replaceRange = convertRange(jsDocument, strings_1.getWordAtText(jsDocument.getText(), offset, JS_WORD_REGEX));
66113                 return {
66114                     isIncomplete: false,
66115                     items: completions.entries.map(entry => {
66116                         return {
66117                             uri: document.uri,
66118                             position: position,
66119                             label: entry.name,
66120                             sortText: entry.sortText,
66121                             kind: convertKind(entry.kind),
66122                             textEdit: languageModes_1.TextEdit.replace(replaceRange, entry.name),
66123                             data: {
66124                                 languageId,
66125                                 uri: document.uri,
66126                                 offset: offset
66127                             }
66128                         };
66129                     })
66130                 };
66131             });
66132         },
66133         doResolve(document, item) {
66134             return __awaiter(this, void 0, void 0, function* () {
66135                 const jsDocument = jsDocuments.get(document);
66136                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66137                 let details = jsLanguageService.getCompletionEntryDetails(jsDocument.uri, item.data.offset, item.label, undefined, undefined, undefined);
66138                 if (details) {
66139                     item.detail = ts.displayPartsToString(details.displayParts);
66140                     item.documentation = ts.displayPartsToString(details.documentation);
66141                     delete item.data;
66142                 }
66143                 return item;
66144             });
66145         },
66146         doHover(document, position) {
66147             return __awaiter(this, void 0, void 0, function* () {
66148                 const jsDocument = jsDocuments.get(document);
66149                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66150                 let info = jsLanguageService.getQuickInfoAtPosition(jsDocument.uri, jsDocument.offsetAt(position));
66151                 if (info) {
66152                     const contents = ts.displayPartsToString(info.displayParts);
66153                     return {
66154                         range: convertRange(jsDocument, info.textSpan),
66155                         contents: ['```typescript', contents, '```'].join('\n')
66156                     };
66157                 }
66158                 return null;
66159             });
66160         },
66161         doSignatureHelp(document, position) {
66162             return __awaiter(this, void 0, void 0, function* () {
66163                 const jsDocument = jsDocuments.get(document);
66164                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66165                 let signHelp = jsLanguageService.getSignatureHelpItems(jsDocument.uri, jsDocument.offsetAt(position), undefined);
66166                 if (signHelp) {
66167                     let ret = {
66168                         activeSignature: signHelp.selectedItemIndex,
66169                         activeParameter: signHelp.argumentIndex,
66170                         signatures: []
66171                     };
66172                     signHelp.items.forEach(item => {
66173                         let signature = {
66174                             label: '',
66175                             documentation: undefined,
66176                             parameters: []
66177                         };
66178                         signature.label += ts.displayPartsToString(item.prefixDisplayParts);
66179                         item.parameters.forEach((p, i, a) => {
66180                             let label = ts.displayPartsToString(p.displayParts);
66181                             let parameter = {
66182                                 label: label,
66183                                 documentation: ts.displayPartsToString(p.documentation)
66184                             };
66185                             signature.label += label;
66186                             signature.parameters.push(parameter);
66187                             if (i < a.length - 1) {
66188                                 signature.label += ts.displayPartsToString(item.separatorDisplayParts);
66189                             }
66190                         });
66191                         signature.label += ts.displayPartsToString(item.suffixDisplayParts);
66192                         ret.signatures.push(signature);
66193                     });
66194                     return ret;
66195                 }
66196                 return null;
66197             });
66198         },
66199         doRename(document, position, newName) {
66200             return __awaiter(this, void 0, void 0, function* () {
66201                 const jsDocument = jsDocuments.get(document);
66202                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66203                 const jsDocumentPosition = jsDocument.offsetAt(position);
66204                 const { canRename } = jsLanguageService.getRenameInfo(jsDocument.uri, jsDocumentPosition);
66205                 if (!canRename) {
66206                     return null;
66207                 }
66208                 const renameInfos = jsLanguageService.findRenameLocations(jsDocument.uri, jsDocumentPosition, false, false);
66209                 const edits = [];
66210                 renameInfos === null || renameInfos === void 0 ? void 0 : renameInfos.map(renameInfo => {
66211                     edits.push({
66212                         range: convertRange(jsDocument, renameInfo.textSpan),
66213                         newText: newName,
66214                     });
66215                 });
66216                 return {
66217                     changes: { [document.uri]: edits },
66218                 };
66219             });
66220         },
66221         findDocumentHighlight(document, position) {
66222             return __awaiter(this, void 0, void 0, function* () {
66223                 const jsDocument = jsDocuments.get(document);
66224                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66225                 const highlights = jsLanguageService.getDocumentHighlights(jsDocument.uri, jsDocument.offsetAt(position), [jsDocument.uri]);
66226                 const out = [];
66227                 for (const entry of highlights || []) {
66228                     for (const highlight of entry.highlightSpans) {
66229                         out.push({
66230                             range: convertRange(jsDocument, highlight.textSpan),
66231                             kind: highlight.kind === 'writtenReference' ? languageModes_1.DocumentHighlightKind.Write : languageModes_1.DocumentHighlightKind.Text
66232                         });
66233                     }
66234                 }
66235                 return out;
66236             });
66237         },
66238         findDocumentSymbols(document) {
66239             return __awaiter(this, void 0, void 0, function* () {
66240                 const jsDocument = jsDocuments.get(document);
66241                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66242                 let items = jsLanguageService.getNavigationBarItems(jsDocument.uri);
66243                 if (items) {
66244                     let result = [];
66245                     let existing = Object.create(null);
66246                     let collectSymbols = (item, containerLabel) => {
66247                         let sig = item.text + item.kind + item.spans[0].start;
66248                         if (item.kind !== 'script' && !existing[sig]) {
66249                             let symbol = {
66250                                 name: item.text,
66251                                 kind: convertSymbolKind(item.kind),
66252                                 location: {
66253                                     uri: document.uri,
66254                                     range: convertRange(jsDocument, item.spans[0])
66255                                 },
66256                                 containerName: containerLabel
66257                             };
66258                             existing[sig] = true;
66259                             result.push(symbol);
66260                             containerLabel = item.text;
66261                         }
66262                         if (item.childItems && item.childItems.length > 0) {
66263                             for (let child of item.childItems) {
66264                                 collectSymbols(child, containerLabel);
66265                             }
66266                         }
66267                     };
66268                     items.forEach(item => collectSymbols(item));
66269                     return result;
66270                 }
66271                 return [];
66272             });
66273         },
66274         findDefinition(document, position) {
66275             return __awaiter(this, void 0, void 0, function* () {
66276                 const jsDocument = jsDocuments.get(document);
66277                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66278                 let definition = jsLanguageService.getDefinitionAtPosition(jsDocument.uri, jsDocument.offsetAt(position));
66279                 if (definition) {
66280                     return definition.filter(d => d.fileName === jsDocument.uri).map(d => {
66281                         return {
66282                             uri: document.uri,
66283                             range: convertRange(jsDocument, d.textSpan)
66284                         };
66285                     });
66286                 }
66287                 return null;
66288             });
66289         },
66290         findReferences(document, position) {
66291             return __awaiter(this, void 0, void 0, function* () {
66292                 const jsDocument = jsDocuments.get(document);
66293                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66294                 let references = jsLanguageService.getReferencesAtPosition(jsDocument.uri, jsDocument.offsetAt(position));
66295                 if (references) {
66296                     return references.filter(d => d.fileName === jsDocument.uri).map(d => {
66297                         return {
66298                             uri: document.uri,
66299                             range: convertRange(jsDocument, d.textSpan)
66300                         };
66301                     });
66302                 }
66303                 return [];
66304             });
66305         },
66306         getSelectionRange(document, position) {
66307             return __awaiter(this, void 0, void 0, function* () {
66308                 const jsDocument = jsDocuments.get(document);
66309                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66310                 function convertSelectionRange(selectionRange) {
66311                     const parent = selectionRange.parent ? convertSelectionRange(selectionRange.parent) : undefined;
66312                     return languageModes_1.SelectionRange.create(convertRange(jsDocument, selectionRange.textSpan), parent);
66313                 }
66314                 const range = jsLanguageService.getSmartSelectionRange(jsDocument.uri, jsDocument.offsetAt(position));
66315                 return convertSelectionRange(range);
66316             });
66317         },
66318         format(document, range, formatParams, settings = globalSettings) {
66319             return __awaiter(this, void 0, void 0, function* () {
66320                 const jsDocument = documentRegions.get(document).getEmbeddedDocument('javascript', true);
66321                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66322                 let formatterSettings = settings && settings.javascript && settings.javascript.format;
66323                 let initialIndentLevel = computeInitialIndent(document, range, formatParams);
66324                 let formatSettings = convertOptions(formatParams, formatterSettings, initialIndentLevel + 1);
66325                 let start = jsDocument.offsetAt(range.start);
66326                 let end = jsDocument.offsetAt(range.end);
66327                 let lastLineRange = null;
66328                 if (range.end.line > range.start.line && (range.end.character === 0 || strings_1.isWhitespaceOnly(jsDocument.getText().substr(end - range.end.character, range.end.character)))) {
66329                     end -= range.end.character;
66330                     lastLineRange = languageModes_1.Range.create(languageModes_1.Position.create(range.end.line, 0), range.end);
66331                 }
66332                 let edits = jsLanguageService.getFormattingEditsForRange(jsDocument.uri, start, end, formatSettings);
66333                 if (edits) {
66334                     let result = [];
66335                     for (let edit of edits) {
66336                         if (edit.span.start >= start && edit.span.start + edit.span.length <= end) {
66337                             result.push({
66338                                 range: convertRange(jsDocument, edit.span),
66339                                 newText: edit.newText
66340                             });
66341                         }
66342                     }
66343                     if (lastLineRange) {
66344                         result.push({
66345                             range: lastLineRange,
66346                             newText: generateIndent(initialIndentLevel, formatParams)
66347                         });
66348                     }
66349                     return result;
66350                 }
66351                 return [];
66352             });
66353         },
66354         getFoldingRanges(document) {
66355             return __awaiter(this, void 0, void 0, function* () {
66356                 const jsDocument = jsDocuments.get(document);
66357                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66358                 let spans = jsLanguageService.getOutliningSpans(jsDocument.uri);
66359                 let ranges = [];
66360                 for (let span of spans) {
66361                     let curr = convertRange(jsDocument, span.textSpan);
66362                     let startLine = curr.start.line;
66363                     let endLine = curr.end.line;
66364                     if (startLine < endLine) {
66365                         let foldingRange = { startLine, endLine };
66366                         let match = document.getText(curr).match(/^\s*\/(?:(\/\s*#(?:end)?region\b)|(\*|\/))/);
66367                         if (match) {
66368                             foldingRange.kind = match[1] ? languageModes_1.FoldingRangeKind.Region : languageModes_1.FoldingRangeKind.Comment;
66369                         }
66370                         ranges.push(foldingRange);
66371                     }
66372                 }
66373                 return ranges;
66374             });
66375         },
66376         onDocumentRemoved(document) {
66377             jsDocuments.onDocumentRemoved(document);
66378         },
66379         getSemanticTokens(document) {
66380             return __awaiter(this, void 0, void 0, function* () {
66381                 const jsDocument = jsDocuments.get(document);
66382                 const jsLanguageService = yield host.getLanguageService(jsDocument);
66383                 return javascriptSemanticTokens_1.getSemanticTokens(jsLanguageService, jsDocument, jsDocument.uri);
66384             });
66385         },
66386         getSemanticTokenLegend() {
66387             return javascriptSemanticTokens_1.getSemanticTokenLegend();
66388         },
66389         dispose() {
66390             host.dispose();
66391             jsDocuments.dispose();
66392         }
66393     };
66394 }
66395 exports.getJavaScriptMode = getJavaScriptMode;
66396 function convertRange(document, span) {
66397     if (typeof span.start === 'undefined') {
66398         const pos = document.positionAt(0);
66399         return languageModes_1.Range.create(pos, pos);
66400     }
66401     const startPosition = document.positionAt(span.start);
66402     const endPosition = document.positionAt(span.start + (span.length || 0));
66403     return languageModes_1.Range.create(startPosition, endPosition);
66404 }
66405 function convertKind(kind) {
66406     switch (kind) {
66407         case 'primitive type':
66408         case 'keyword':
66409             return languageModes_1.CompletionItemKind.Keyword;
66410         case 'var':
66411         case 'local var':
66412             return languageModes_1.CompletionItemKind.Variable;
66413         case 'property':
66414         case 'getter':
66415         case 'setter':
66416             return languageModes_1.CompletionItemKind.Field;
66417         case 'function':
66418         case 'method':
66419         case 'construct':
66420         case 'call':
66421         case 'index':
66422             return languageModes_1.CompletionItemKind.Function;
66423         case 'enum':
66424             return languageModes_1.CompletionItemKind.Enum;
66425         case 'module':
66426             return languageModes_1.CompletionItemKind.Module;
66427         case 'class':
66428             return languageModes_1.CompletionItemKind.Class;
66429         case 'interface':
66430             return languageModes_1.CompletionItemKind.Interface;
66431         case 'warning':
66432             return languageModes_1.CompletionItemKind.File;
66433     }
66434     return languageModes_1.CompletionItemKind.Property;
66435 }
66436 function convertSymbolKind(kind) {
66437     switch (kind) {
66438         case 'var':
66439         case 'local var':
66440         case 'const':
66441             return languageModes_1.SymbolKind.Variable;
66442         case 'function':
66443         case 'local function':
66444             return languageModes_1.SymbolKind.Function;
66445         case 'enum':
66446             return languageModes_1.SymbolKind.Enum;
66447         case 'module':
66448             return languageModes_1.SymbolKind.Module;
66449         case 'class':
66450             return languageModes_1.SymbolKind.Class;
66451         case 'interface':
66452             return languageModes_1.SymbolKind.Interface;
66453         case 'method':
66454             return languageModes_1.SymbolKind.Method;
66455         case 'property':
66456         case 'getter':
66457         case 'setter':
66458             return languageModes_1.SymbolKind.Property;
66459     }
66460     return languageModes_1.SymbolKind.Variable;
66461 }
66462 function convertOptions(options, formatSettings, initialIndentLevel) {
66463     return {
66464         ConvertTabsToSpaces: options.insertSpaces,
66465         TabSize: options.tabSize,
66466         IndentSize: options.tabSize,
66467         IndentStyle: ts.IndentStyle.Smart,
66468         NewLineCharacter: '\n',
66469         BaseIndentSize: options.tabSize * initialIndentLevel,
66470         InsertSpaceAfterCommaDelimiter: Boolean(!formatSettings || formatSettings.insertSpaceAfterCommaDelimiter),
66471         InsertSpaceAfterSemicolonInForStatements: Boolean(!formatSettings || formatSettings.insertSpaceAfterSemicolonInForStatements),
66472         InsertSpaceBeforeAndAfterBinaryOperators: Boolean(!formatSettings || formatSettings.insertSpaceBeforeAndAfterBinaryOperators),
66473         InsertSpaceAfterKeywordsInControlFlowStatements: Boolean(!formatSettings || formatSettings.insertSpaceAfterKeywordsInControlFlowStatements),
66474         InsertSpaceAfterFunctionKeywordForAnonymousFunctions: Boolean(!formatSettings || formatSettings.insertSpaceAfterFunctionKeywordForAnonymousFunctions),
66475         InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: Boolean(formatSettings && formatSettings.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis),
66476         InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: Boolean(formatSettings && formatSettings.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets),
66477         InsertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: Boolean(formatSettings && formatSettings.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces),
66478         InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: Boolean(formatSettings && formatSettings.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces),
66479         PlaceOpenBraceOnNewLineForControlBlocks: Boolean(formatSettings && formatSettings.placeOpenBraceOnNewLineForFunctions),
66480         PlaceOpenBraceOnNewLineForFunctions: Boolean(formatSettings && formatSettings.placeOpenBraceOnNewLineForControlBlocks)
66481     };
66482 }
66483 function computeInitialIndent(document, range, options) {
66484     let lineStart = document.offsetAt(languageModes_1.Position.create(range.start.line, 0));
66485     let content = document.getText();
66486     let i = lineStart;
66487     let nChars = 0;
66488     let tabSize = options.tabSize || 4;
66489     while (i < content.length) {
66490         let ch = content.charAt(i);
66491         if (ch === ' ') {
66492             nChars++;
66493         }
66494         else if (ch === '\t') {
66495             nChars += tabSize;
66496         }
66497         else {
66498             break;
66499         }
66500         i++;
66501     }
66502     return Math.floor(nChars / tabSize);
66503 }
66504 function generateIndent(level, options) {
66505     if (options.insertSpaces) {
66506         return strings_1.repeat(' ', level * options.tabSize);
66507     }
66508     else {
66509         return strings_1.repeat('\t', level);
66510     }
66511 }
66512
66513
66514 /***/ }),
66515 /* 150 */
66516 /***/ ((__unused_webpack_module, exports) => {
66517
66518
66519 /*---------------------------------------------------------------------------------------------
66520  *  Copyright (c) Microsoft Corporation. All rights reserved.
66521  *  Licensed under the MIT License. See License.txt in the project root for license information.
66522  *--------------------------------------------------------------------------------------------*/
66523 Object.defineProperty(exports, "__esModule", ({ value: true }));
66524 exports.isNewlineCharacter = exports.isEOL = exports.isWhitespaceOnly = exports.repeat = exports.endsWith = exports.startsWith = exports.getWordAtText = void 0;
66525 function getWordAtText(text, offset, wordDefinition) {
66526     let lineStart = offset;
66527     while (lineStart > 0 && !isNewlineCharacter(text.charCodeAt(lineStart - 1))) {
66528         lineStart--;
66529     }
66530     let offsetInLine = offset - lineStart;
66531     let lineText = text.substr(lineStart);
66532     // make a copy of the regex as to not keep the state
66533     let flags = wordDefinition.ignoreCase ? 'gi' : 'g';
66534     wordDefinition = new RegExp(wordDefinition.source, flags);
66535     let match = wordDefinition.exec(lineText);
66536     while (match && match.index + match[0].length < offsetInLine) {
66537         match = wordDefinition.exec(lineText);
66538     }
66539     if (match && match.index <= offsetInLine) {
66540         return { start: match.index + lineStart, length: match[0].length };
66541     }
66542     return { start: offset, length: 0 };
66543 }
66544 exports.getWordAtText = getWordAtText;
66545 function startsWith(haystack, needle) {
66546     if (haystack.length < needle.length) {
66547         return false;
66548     }
66549     for (let i = 0; i < needle.length; i++) {
66550         if (haystack[i] !== needle[i]) {
66551             return false;
66552         }
66553     }
66554     return true;
66555 }
66556 exports.startsWith = startsWith;
66557 function endsWith(haystack, needle) {
66558     let diff = haystack.length - needle.length;
66559     if (diff > 0) {
66560         return haystack.indexOf(needle, diff) === diff;
66561     }
66562     else if (diff === 0) {
66563         return haystack === needle;
66564     }
66565     else {
66566         return false;
66567     }
66568 }
66569 exports.endsWith = endsWith;
66570 function repeat(value, count) {
66571     let s = '';
66572     while (count > 0) {
66573         if ((count & 1) === 1) {
66574             s += value;
66575         }
66576         value += value;
66577         count = count >>> 1;
66578     }
66579     return s;
66580 }
66581 exports.repeat = repeat;
66582 function isWhitespaceOnly(str) {
66583     return /^\s*$/.test(str);
66584 }
66585 exports.isWhitespaceOnly = isWhitespaceOnly;
66586 function isEOL(content, offset) {
66587     return isNewlineCharacter(content.charCodeAt(offset));
66588 }
66589 exports.isEOL = isEOL;
66590 const CR = '\r'.charCodeAt(0);
66591 const NL = '\n'.charCodeAt(0);
66592 function isNewlineCharacter(charCode) {
66593     return charCode === CR || charCode === NL;
66594 }
66595 exports.isNewlineCharacter = isNewlineCharacter;
66596
66597
66598 /***/ }),
66599 /* 151 */
66600 /***/ ((module) => {
66601
66602 module.exports = require("typescript");;
66603
66604 /***/ }),
66605 /* 152 */
66606 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
66607
66608
66609 /*---------------------------------------------------------------------------------------------
66610  *  Copyright (c) Microsoft Corporation. All rights reserved.
66611  *  Licensed under the MIT License. See License.txt in the project root for license information.
66612  *--------------------------------------------------------------------------------------------*/
66613 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
66614     if (k2 === undefined) k2 = k;
66615     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
66616 }) : (function(o, m, k, k2) {
66617     if (k2 === undefined) k2 = k;
66618     o[k2] = m[k];
66619 }));
66620 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
66621     Object.defineProperty(o, "default", { enumerable: true, value: v });
66622 }) : function(o, v) {
66623     o["default"] = v;
66624 });
66625 var __importStar = (this && this.__importStar) || function (mod) {
66626     if (mod && mod.__esModule) return mod;
66627     var result = {};
66628     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
66629     __setModuleDefault(result, mod);
66630     return result;
66631 };
66632 Object.defineProperty(exports, "__esModule", ({ value: true }));
66633 exports.getSemanticTokens = exports.getSemanticTokenLegend = void 0;
66634 const ts = __importStar(__webpack_require__(151));
66635 function getSemanticTokenLegend() {
66636     if (tokenTypes.length !== 11 /* _ */) {
66637         console.warn('TokenType has added new entries.');
66638     }
66639     if (tokenModifiers.length !== 4 /* _ */) {
66640         console.warn('TokenModifier has added new entries.');
66641     }
66642     return { types: tokenTypes, modifiers: tokenModifiers };
66643 }
66644 exports.getSemanticTokenLegend = getSemanticTokenLegend;
66645 function getSemanticTokens(jsLanguageService, currentTextDocument, fileName) {
66646     //https://ts-ast-viewer.com/#code/AQ0g2CmAuwGbALzAJwG4BQZQGNwEMBnQ4AQQEYBmYAb2C22zgEtJwATJVTRxgcwD27AQAp8AGmAAjAJS0A9POB8+7NQ168oscAJz5wANXwAnLug2bsJmAFcTAO2XAA1MHyvgu-UdOeWbOw8ViAAvpagocBAA
66647     let resultTokens = [];
66648     const collector = (node, typeIdx, modifierSet) => {
66649         resultTokens.push({ start: currentTextDocument.positionAt(node.getStart()), length: node.getWidth(), typeIdx, modifierSet });
66650     };
66651     collectTokens(jsLanguageService, fileName, { start: 0, length: currentTextDocument.getText().length }, collector);
66652     return resultTokens;
66653 }
66654 exports.getSemanticTokens = getSemanticTokens;
66655 function collectTokens(jsLanguageService, fileName, span, collector) {
66656     const program = jsLanguageService.getProgram();
66657     if (program) {
66658         const typeChecker = program.getTypeChecker();
66659         function visit(node) {
66660             if (!node || !ts.textSpanIntersectsWith(span, node.pos, node.getFullWidth())) {
66661                 return;
66662             }
66663             if (ts.isIdentifier(node)) {
66664                 let symbol = typeChecker.getSymbolAtLocation(node);
66665                 if (symbol) {
66666                     if (symbol.flags & ts.SymbolFlags.Alias) {
66667                         symbol = typeChecker.getAliasedSymbol(symbol);
66668                     }
66669                     let typeIdx = classifySymbol(symbol);
66670                     if (typeIdx !== undefined) {
66671                         let modifierSet = 0;
66672                         if (node.parent) {
66673                             const parentTypeIdx = tokenFromDeclarationMapping[node.parent.kind];
66674                             if (parentTypeIdx === typeIdx && node.parent.name === node) {
66675                                 modifierSet = 1 << 0 /* declaration */;
66676                             }
66677                         }
66678                         const decl = symbol.valueDeclaration;
66679                         const modifiers = decl ? ts.getCombinedModifierFlags(decl) : 0;
66680                         const nodeFlags = decl ? ts.getCombinedNodeFlags(decl) : 0;
66681                         if (modifiers & ts.ModifierFlags.Static) {
66682                             modifierSet |= 1 << 1 /* static */;
66683                         }
66684                         if (modifiers & ts.ModifierFlags.Async) {
66685                             modifierSet |= 1 << 2 /* async */;
66686                         }
66687                         if ((modifiers & ts.ModifierFlags.Readonly) || (nodeFlags & ts.NodeFlags.Const) || (symbol.getFlags() & ts.SymbolFlags.EnumMember)) {
66688                             modifierSet |= 1 << 3 /* readonly */;
66689                         }
66690                         collector(node, typeIdx, modifierSet);
66691                     }
66692                 }
66693             }
66694             ts.forEachChild(node, visit);
66695         }
66696         const sourceFile = program.getSourceFile(fileName);
66697         if (sourceFile) {
66698             visit(sourceFile);
66699         }
66700     }
66701 }
66702 function classifySymbol(symbol) {
66703     const flags = symbol.getFlags();
66704     if (flags & ts.SymbolFlags.Class) {
66705         return 0 /* class */;
66706     }
66707     else if (flags & ts.SymbolFlags.Enum) {
66708         return 1 /* enum */;
66709     }
66710     else if (flags & ts.SymbolFlags.TypeAlias) {
66711         return 5 /* type */;
66712     }
66713     else if (flags & ts.SymbolFlags.Type) {
66714         if (flags & ts.SymbolFlags.Interface) {
66715             return 2 /* interface */;
66716         }
66717         if (flags & ts.SymbolFlags.TypeParameter) {
66718             return 4 /* typeParameter */;
66719         }
66720     }
66721     const decl = symbol.valueDeclaration || symbol.declarations && symbol.declarations[0];
66722     return decl && tokenFromDeclarationMapping[decl.kind];
66723 }
66724 const tokenTypes = [];
66725 tokenTypes[0 /* class */] = 'class';
66726 tokenTypes[1 /* enum */] = 'enum';
66727 tokenTypes[2 /* interface */] = 'interface';
66728 tokenTypes[3 /* namespace */] = 'namespace';
66729 tokenTypes[4 /* typeParameter */] = 'typeParameter';
66730 tokenTypes[5 /* type */] = 'type';
66731 tokenTypes[6 /* parameter */] = 'parameter';
66732 tokenTypes[7 /* variable */] = 'variable';
66733 tokenTypes[8 /* property */] = 'property';
66734 tokenTypes[9 /* function */] = 'function';
66735 tokenTypes[10 /* method */] = 'method';
66736 const tokenModifiers = [];
66737 tokenModifiers[2 /* async */] = 'async';
66738 tokenModifiers[0 /* declaration */] = 'declaration';
66739 tokenModifiers[3 /* readonly */] = 'readonly';
66740 tokenModifiers[1 /* static */] = 'static';
66741 const tokenFromDeclarationMapping = {
66742     [ts.SyntaxKind.VariableDeclaration]: 7 /* variable */,
66743     [ts.SyntaxKind.Parameter]: 6 /* parameter */,
66744     [ts.SyntaxKind.PropertyDeclaration]: 8 /* property */,
66745     [ts.SyntaxKind.ModuleDeclaration]: 3 /* namespace */,
66746     [ts.SyntaxKind.EnumDeclaration]: 1 /* enum */,
66747     [ts.SyntaxKind.EnumMember]: 8 /* property */,
66748     [ts.SyntaxKind.ClassDeclaration]: 0 /* class */,
66749     [ts.SyntaxKind.MethodDeclaration]: 10 /* method */,
66750     [ts.SyntaxKind.FunctionDeclaration]: 9 /* function */,
66751     [ts.SyntaxKind.MethodSignature]: 10 /* method */,
66752     [ts.SyntaxKind.GetAccessor]: 8 /* property */,
66753     [ts.SyntaxKind.PropertySignature]: 8 /* property */,
66754     [ts.SyntaxKind.InterfaceDeclaration]: 2 /* interface */,
66755     [ts.SyntaxKind.TypeAliasDeclaration]: 5 /* type */,
66756     [ts.SyntaxKind.TypeParameter]: 4 /* typeParameter */
66757 };
66758
66759
66760 /***/ }),
66761 /* 153 */
66762 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
66763
66764
66765 /*---------------------------------------------------------------------------------------------
66766  *  Copyright (c) Microsoft Corporation. All rights reserved.
66767  *  Licensed under the MIT License. See License.txt in the project root for license information.
66768  *--------------------------------------------------------------------------------------------*/
66769 Object.defineProperty(exports, "__esModule", ({ value: true }));
66770 exports.loadLibrary = void 0;
66771 const path_1 = __webpack_require__(3);
66772 const fs_1 = __webpack_require__(64);
66773 const contents = {};
66774 const extensionFolder = path_1.dirname(__dirname);
66775 const TYPESCRIPT_LIB_SOURCE = path_1.join(extensionFolder, 'node_modules/typescript/lib');
66776 const JQUERY_PATH = path_1.join(extensionFolder, 'jquery.d.ts');
66777 function loadLibrary(name) {
66778     let content = contents[name];
66779     if (typeof content !== 'string') {
66780         let libPath;
66781         if (name === 'jquery') {
66782             libPath = JQUERY_PATH;
66783         }
66784         else {
66785             libPath = path_1.join(TYPESCRIPT_LIB_SOURCE, name); // from source
66786         }
66787         try {
66788             content = fs_1.readFileSync(libPath).toString();
66789         }
66790         catch (e) {
66791             console.log(`Unable to load library ${name} at ${libPath}: ${e.message}`);
66792             content = '';
66793         }
66794         contents[name] = content;
66795     }
66796     return content;
66797 }
66798 exports.loadLibrary = loadLibrary;
66799
66800
66801 /***/ }),
66802 /* 154 */
66803 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
66804
66805
66806 /*---------------------------------------------------------------------------------------------
66807  *  Copyright (c) Microsoft Corporation. All rights reserved.
66808  *  Licensed under the MIT License. See License.txt in the project root for license information.
66809  *--------------------------------------------------------------------------------------------*/
66810 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
66811     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
66812     return new (P || (P = Promise))(function (resolve, reject) {
66813         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
66814         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
66815         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
66816         step((generator = generator.apply(thisArg, _arguments || [])).next());
66817     });
66818 };
66819 Object.defineProperty(exports, "__esModule", ({ value: true }));
66820 exports.format = void 0;
66821 const languageModes_1 = __webpack_require__(70);
66822 const arrays_1 = __webpack_require__(155);
66823 const strings_1 = __webpack_require__(150);
66824 function format(languageModes, document, formatRange, formattingOptions, settings, enabledModes) {
66825     return __awaiter(this, void 0, void 0, function* () {
66826         let result = [];
66827         let endPos = formatRange.end;
66828         let endOffset = document.offsetAt(endPos);
66829         let content = document.getText();
66830         if (endPos.character === 0 && endPos.line > 0 && endOffset !== content.length) {
66831             // if selection ends after a new line, exclude that new line
66832             let prevLineStart = document.offsetAt(languageModes_1.Position.create(endPos.line - 1, 0));
66833             while (strings_1.isEOL(content, endOffset - 1) && endOffset > prevLineStart) {
66834                 endOffset--;
66835             }
66836             formatRange = languageModes_1.Range.create(formatRange.start, document.positionAt(endOffset));
66837         }
66838         // run the html formatter on the full range and pass the result content to the embedded formatters.
66839         // from the final content create a single edit
66840         // advantages of this approach are
66841         //  - correct indents in the html document
66842         //  - correct initial indent for embedded formatters
66843         //  - no worrying of overlapping edits
66844         // make sure we start in html
66845         let allRanges = languageModes.getModesInRange(document, formatRange);
66846         let i = 0;
66847         let startPos = formatRange.start;
66848         let isHTML = (range) => range.mode && range.mode.getId() === 'html';
66849         while (i < allRanges.length && !isHTML(allRanges[i])) {
66850             let range = allRanges[i];
66851             if (!range.attributeValue && range.mode && range.mode.format) {
66852                 let edits = yield range.mode.format(document, languageModes_1.Range.create(startPos, range.end), formattingOptions, settings);
66853                 arrays_1.pushAll(result, edits);
66854             }
66855             startPos = range.end;
66856             i++;
66857         }
66858         if (i === allRanges.length) {
66859             return result;
66860         }
66861         // modify the range
66862         formatRange = languageModes_1.Range.create(startPos, formatRange.end);
66863         // perform a html format and apply changes to a new document
66864         let htmlMode = languageModes.getMode('html');
66865         let htmlEdits = yield htmlMode.format(document, formatRange, formattingOptions, settings);
66866         let htmlFormattedContent = languageModes_1.TextDocument.applyEdits(document, htmlEdits);
66867         let newDocument = languageModes_1.TextDocument.create(document.uri + '.tmp', document.languageId, document.version, htmlFormattedContent);
66868         try {
66869             // run embedded formatters on html formatted content: - formatters see correct initial indent
66870             let afterFormatRangeLength = document.getText().length - document.offsetAt(formatRange.end); // length of unchanged content after replace range
66871             let newFormatRange = languageModes_1.Range.create(formatRange.start, newDocument.positionAt(htmlFormattedContent.length - afterFormatRangeLength));
66872             let embeddedRanges = languageModes.getModesInRange(newDocument, newFormatRange);
66873             let embeddedEdits = [];
66874             for (let r of embeddedRanges) {
66875                 let mode = r.mode;
66876                 if (mode && mode.format && enabledModes[mode.getId()] && !r.attributeValue) {
66877                     let edits = yield mode.format(newDocument, r, formattingOptions, settings);
66878                     for (let edit of edits) {
66879                         embeddedEdits.push(edit);
66880                     }
66881                 }
66882             }
66883             if (embeddedEdits.length === 0) {
66884                 arrays_1.pushAll(result, htmlEdits);
66885                 return result;
66886             }
66887             // apply all embedded format edits and create a single edit for all changes
66888             let resultContent = languageModes_1.TextDocument.applyEdits(newDocument, embeddedEdits);
66889             let resultReplaceText = resultContent.substring(document.offsetAt(formatRange.start), resultContent.length - afterFormatRangeLength);
66890             result.push(languageModes_1.TextEdit.replace(formatRange, resultReplaceText));
66891             return result;
66892         }
66893         finally {
66894             languageModes.onDocumentRemoved(newDocument);
66895         }
66896     });
66897 }
66898 exports.format = format;
66899
66900
66901 /***/ }),
66902 /* 155 */
66903 /***/ ((__unused_webpack_module, exports) => {
66904
66905
66906 /*---------------------------------------------------------------------------------------------
66907  *  Copyright (c) Microsoft Corporation. All rights reserved.
66908  *  Licensed under the MIT License. See License.txt in the project root for license information.
66909  *--------------------------------------------------------------------------------------------*/
66910 Object.defineProperty(exports, "__esModule", ({ value: true }));
66911 exports.binarySearch = exports.mergeSort = exports.contains = exports.pushAll = void 0;
66912 function pushAll(to, from) {
66913     if (from) {
66914         for (const e of from) {
66915             to.push(e);
66916         }
66917     }
66918 }
66919 exports.pushAll = pushAll;
66920 function contains(arr, val) {
66921     return arr.indexOf(val) !== -1;
66922 }
66923 exports.contains = contains;
66924 /**
66925  * Like `Array#sort` but always stable. Usually runs a little slower `than Array#sort`
66926  * so only use this when actually needing stable sort.
66927  */
66928 function mergeSort(data, compare) {
66929     _divideAndMerge(data, compare);
66930     return data;
66931 }
66932 exports.mergeSort = mergeSort;
66933 function _divideAndMerge(data, compare) {
66934     if (data.length <= 1) {
66935         // sorted
66936         return;
66937     }
66938     const p = (data.length / 2) | 0;
66939     const left = data.slice(0, p);
66940     const right = data.slice(p);
66941     _divideAndMerge(left, compare);
66942     _divideAndMerge(right, compare);
66943     let leftIdx = 0;
66944     let rightIdx = 0;
66945     let i = 0;
66946     while (leftIdx < left.length && rightIdx < right.length) {
66947         let ret = compare(left[leftIdx], right[rightIdx]);
66948         if (ret <= 0) {
66949             // smaller_equal -> take left to preserve order
66950             data[i++] = left[leftIdx++];
66951         }
66952         else {
66953             // greater -> take right
66954             data[i++] = right[rightIdx++];
66955         }
66956     }
66957     while (leftIdx < left.length) {
66958         data[i++] = left[leftIdx++];
66959     }
66960     while (rightIdx < right.length) {
66961         data[i++] = right[rightIdx++];
66962     }
66963 }
66964 function binarySearch(array, key, comparator) {
66965     let low = 0, high = array.length - 1;
66966     while (low <= high) {
66967         let mid = ((low + high) / 2) | 0;
66968         let comp = comparator(array[mid], key);
66969         if (comp < 0) {
66970             low = mid + 1;
66971         }
66972         else if (comp > 0) {
66973             high = mid - 1;
66974         }
66975         else {
66976             return mid;
66977         }
66978     }
66979     return -(low + 1);
66980 }
66981 exports.binarySearch = binarySearch;
66982
66983
66984 /***/ }),
66985 /* 156 */
66986 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
66987
66988
66989 /*---------------------------------------------------------------------------------------------
66990  *  Copyright (c) Microsoft Corporation. All rights reserved.
66991  *  Licensed under the MIT License. See License.txt in the project root for license information.
66992  *--------------------------------------------------------------------------------------------*/
66993 Object.defineProperty(exports, "__esModule", ({ value: true }));
66994 exports.getDocumentContext = void 0;
66995 const strings_1 = __webpack_require__(150);
66996 const requests_1 = __webpack_require__(157);
66997 function getDocumentContext(documentUri, workspaceFolders) {
66998     function getRootFolder() {
66999         for (let folder of workspaceFolders) {
67000             let folderURI = folder.uri;
67001             if (!strings_1.endsWith(folderURI, '/')) {
67002                 folderURI = folderURI + '/';
67003             }
67004             if (strings_1.startsWith(documentUri, folderURI)) {
67005                 return folderURI;
67006             }
67007         }
67008         return undefined;
67009     }
67010     return {
67011         resolveReference: (ref, base = documentUri) => {
67012             if (ref[0] === '/') { // resolve absolute path against the current workspace folder
67013                 let folderUri = getRootFolder();
67014                 if (folderUri) {
67015                     return folderUri + ref.substr(1);
67016                 }
67017             }
67018             base = base.substr(0, base.lastIndexOf('/') + 1);
67019             return requests_1.resolvePath(base, ref);
67020         },
67021     };
67022 }
67023 exports.getDocumentContext = getDocumentContext;
67024
67025
67026 /***/ }),
67027 /* 157 */
67028 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
67029
67030
67031 /*---------------------------------------------------------------------------------------------
67032  *  Copyright (c) Microsoft Corporation. All rights reserved.
67033  *  Licensed under the MIT License. See License.txt in the project root for license information.
67034  *--------------------------------------------------------------------------------------------*/
67035 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
67036     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
67037     return new (P || (P = Promise))(function (resolve, reject) {
67038         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
67039         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
67040         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
67041         step((generator = generator.apply(thisArg, _arguments || [])).next());
67042     });
67043 };
67044 Object.defineProperty(exports, "__esModule", ({ value: true }));
67045 exports.joinPath = exports.normalizePath = exports.resolvePath = exports.isAbsolutePath = exports.extname = exports.basename = exports.dirname = exports.getScheme = exports.getRequestService = exports.FileType = exports.FsReadDirRequest = exports.FsStatRequest = exports.FsContentRequest = void 0;
67046 const vscode_uri_1 = __webpack_require__(135);
67047 const vscode_languageserver_1 = __webpack_require__(49);
67048 var FsContentRequest;
67049 (function (FsContentRequest) {
67050     FsContentRequest.type = new vscode_languageserver_1.RequestType('fs/content');
67051 })(FsContentRequest = exports.FsContentRequest || (exports.FsContentRequest = {}));
67052 var FsStatRequest;
67053 (function (FsStatRequest) {
67054     FsStatRequest.type = new vscode_languageserver_1.RequestType('fs/stat');
67055 })(FsStatRequest = exports.FsStatRequest || (exports.FsStatRequest = {}));
67056 var FsReadDirRequest;
67057 (function (FsReadDirRequest) {
67058     FsReadDirRequest.type = new vscode_languageserver_1.RequestType('fs/readDir');
67059 })(FsReadDirRequest = exports.FsReadDirRequest || (exports.FsReadDirRequest = {}));
67060 var FileType;
67061 (function (FileType) {
67062     /**
67063      * The file type is unknown.
67064      */
67065     FileType[FileType["Unknown"] = 0] = "Unknown";
67066     /**
67067      * A regular file.
67068      */
67069     FileType[FileType["File"] = 1] = "File";
67070     /**
67071      * A directory.
67072      */
67073     FileType[FileType["Directory"] = 2] = "Directory";
67074     /**
67075      * A symbolic link to a file.
67076      */
67077     FileType[FileType["SymbolicLink"] = 64] = "SymbolicLink";
67078 })(FileType = exports.FileType || (exports.FileType = {}));
67079 function getRequestService(handledSchemas, connection, runtime) {
67080     const builtInHandlers = {};
67081     for (let protocol of handledSchemas) {
67082         if (protocol === 'file') {
67083             builtInHandlers[protocol] = runtime.file;
67084         }
67085         else if (protocol === 'http' || protocol === 'https') {
67086             builtInHandlers[protocol] = runtime.http;
67087         }
67088     }
67089     return {
67090         stat(uri) {
67091             return __awaiter(this, void 0, void 0, function* () {
67092                 const handler = builtInHandlers[getScheme(uri)];
67093                 if (handler) {
67094                     return handler.stat(uri);
67095                 }
67096                 const res = yield connection.sendRequest(FsStatRequest.type, uri.toString());
67097                 return res;
67098             });
67099         },
67100         readDirectory(uri) {
67101             const handler = builtInHandlers[getScheme(uri)];
67102             if (handler) {
67103                 return handler.readDirectory(uri);
67104             }
67105             return connection.sendRequest(FsReadDirRequest.type, uri.toString());
67106         },
67107         getContent(uri, encoding) {
67108             const handler = builtInHandlers[getScheme(uri)];
67109             if (handler) {
67110                 return handler.getContent(uri, encoding);
67111             }
67112             return connection.sendRequest(FsContentRequest.type, { uri: uri.toString(), encoding });
67113         }
67114     };
67115 }
67116 exports.getRequestService = getRequestService;
67117 function getScheme(uri) {
67118     return uri.substr(0, uri.indexOf(':'));
67119 }
67120 exports.getScheme = getScheme;
67121 function dirname(uri) {
67122     const lastIndexOfSlash = uri.lastIndexOf('/');
67123     return lastIndexOfSlash !== -1 ? uri.substr(0, lastIndexOfSlash) : '';
67124 }
67125 exports.dirname = dirname;
67126 function basename(uri) {
67127     const lastIndexOfSlash = uri.lastIndexOf('/');
67128     return uri.substr(lastIndexOfSlash + 1);
67129 }
67130 exports.basename = basename;
67131 const Slash = '/'.charCodeAt(0);
67132 const Dot = '.'.charCodeAt(0);
67133 function extname(uri) {
67134     for (let i = uri.length - 1; i >= 0; i--) {
67135         const ch = uri.charCodeAt(i);
67136         if (ch === Dot) {
67137             if (i > 0 && uri.charCodeAt(i - 1) !== Slash) {
67138                 return uri.substr(i);
67139             }
67140             else {
67141                 break;
67142             }
67143         }
67144         else if (ch === Slash) {
67145             break;
67146         }
67147     }
67148     return '';
67149 }
67150 exports.extname = extname;
67151 function isAbsolutePath(path) {
67152     return path.charCodeAt(0) === Slash;
67153 }
67154 exports.isAbsolutePath = isAbsolutePath;
67155 function resolvePath(uriString, path) {
67156     if (isAbsolutePath(path)) {
67157         const uri = vscode_uri_1.URI.parse(uriString);
67158         const parts = path.split('/');
67159         return uri.with({ path: normalizePath(parts) }).toString();
67160     }
67161     return joinPath(uriString, path);
67162 }
67163 exports.resolvePath = resolvePath;
67164 function normalizePath(parts) {
67165     const newParts = [];
67166     for (const part of parts) {
67167         if (part.length === 0 || part.length === 1 && part.charCodeAt(0) === Dot) {
67168             // ignore
67169         }
67170         else if (part.length === 2 && part.charCodeAt(0) === Dot && part.charCodeAt(1) === Dot) {
67171             newParts.pop();
67172         }
67173         else {
67174             newParts.push(part);
67175         }
67176     }
67177     if (parts.length > 1 && parts[parts.length - 1].length === 0) {
67178         newParts.push('');
67179     }
67180     let res = newParts.join('/');
67181     if (parts[0].length === 0) {
67182         res = '/' + res;
67183     }
67184     return res;
67185 }
67186 exports.normalizePath = normalizePath;
67187 function joinPath(uriString, ...paths) {
67188     const uri = vscode_uri_1.URI.parse(uriString);
67189     const parts = uri.path.split('/');
67190     for (let path of paths) {
67191         parts.push(...path.split('/'));
67192     }
67193     return uri.with({ path: normalizePath(parts) }).toString();
67194 }
67195 exports.joinPath = joinPath;
67196
67197
67198 /***/ }),
67199 /* 158 */
67200 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
67201
67202
67203 /*---------------------------------------------------------------------------------------------
67204  *  Copyright (c) Microsoft Corporation. All rights reserved.
67205  *  Licensed under the MIT License. See License.txt in the project root for license information.
67206  *--------------------------------------------------------------------------------------------*/
67207 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
67208     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
67209     return new (P || (P = Promise))(function (resolve, reject) {
67210         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
67211         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
67212         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
67213         step((generator = generator.apply(thisArg, _arguments || [])).next());
67214     });
67215 };
67216 Object.defineProperty(exports, "__esModule", ({ value: true }));
67217 exports.getFoldingRanges = void 0;
67218 const languageModes_1 = __webpack_require__(70);
67219 function getFoldingRanges(languageModes, document, maxRanges, _cancellationToken) {
67220     return __awaiter(this, void 0, void 0, function* () {
67221         let htmlMode = languageModes.getMode('html');
67222         let range = languageModes_1.Range.create(languageModes_1.Position.create(0, 0), languageModes_1.Position.create(document.lineCount, 0));
67223         let result = [];
67224         if (htmlMode && htmlMode.getFoldingRanges) {
67225             result.push(...yield htmlMode.getFoldingRanges(document));
67226         }
67227         // cache folding ranges per mode
67228         let rangesPerMode = Object.create(null);
67229         let getRangesForMode = (mode) => __awaiter(this, void 0, void 0, function* () {
67230             if (mode.getFoldingRanges) {
67231                 let ranges = rangesPerMode[mode.getId()];
67232                 if (!Array.isArray(ranges)) {
67233                     ranges = (yield mode.getFoldingRanges(document)) || [];
67234                     rangesPerMode[mode.getId()] = ranges;
67235                 }
67236                 return ranges;
67237             }
67238             return [];
67239         });
67240         let modeRanges = languageModes.getModesInRange(document, range);
67241         for (let modeRange of modeRanges) {
67242             let mode = modeRange.mode;
67243             if (mode && mode !== htmlMode && !modeRange.attributeValue) {
67244                 const ranges = yield getRangesForMode(mode);
67245                 result.push(...ranges.filter(r => r.startLine >= modeRange.start.line && r.endLine < modeRange.end.line));
67246             }
67247         }
67248         if (maxRanges && result.length > maxRanges) {
67249             result = limitRanges(result, maxRanges);
67250         }
67251         return result;
67252     });
67253 }
67254 exports.getFoldingRanges = getFoldingRanges;
67255 function limitRanges(ranges, maxRanges) {
67256     ranges = ranges.sort((r1, r2) => {
67257         let diff = r1.startLine - r2.startLine;
67258         if (diff === 0) {
67259             diff = r1.endLine - r2.endLine;
67260         }
67261         return diff;
67262     });
67263     // compute each range's nesting level in 'nestingLevels'.
67264     // count the number of ranges for each level in 'nestingLevelCounts'
67265     let top = undefined;
67266     let previous = [];
67267     let nestingLevels = [];
67268     let nestingLevelCounts = [];
67269     let setNestingLevel = (index, level) => {
67270         nestingLevels[index] = level;
67271         if (level < 30) {
67272             nestingLevelCounts[level] = (nestingLevelCounts[level] || 0) + 1;
67273         }
67274     };
67275     // compute nesting levels and sanitize
67276     for (let i = 0; i < ranges.length; i++) {
67277         let entry = ranges[i];
67278         if (!top) {
67279             top = entry;
67280             setNestingLevel(i, 0);
67281         }
67282         else {
67283             if (entry.startLine > top.startLine) {
67284                 if (entry.endLine <= top.endLine) {
67285                     previous.push(top);
67286                     top = entry;
67287                     setNestingLevel(i, previous.length);
67288                 }
67289                 else if (entry.startLine > top.endLine) {
67290                     do {
67291                         top = previous.pop();
67292                     } while (top && entry.startLine > top.endLine);
67293                     if (top) {
67294                         previous.push(top);
67295                     }
67296                     top = entry;
67297                     setNestingLevel(i, previous.length);
67298                 }
67299             }
67300         }
67301     }
67302     let entries = 0;
67303     let maxLevel = 0;
67304     for (let i = 0; i < nestingLevelCounts.length; i++) {
67305         let n = nestingLevelCounts[i];
67306         if (n) {
67307             if (n + entries > maxRanges) {
67308                 maxLevel = i;
67309                 break;
67310             }
67311             entries += n;
67312         }
67313     }
67314     let result = [];
67315     for (let i = 0; i < ranges.length; i++) {
67316         let level = nestingLevels[i];
67317         if (typeof level === 'number') {
67318             if (level < maxLevel || (level === maxLevel && entries++ < maxRanges)) {
67319                 result.push(ranges[i]);
67320             }
67321         }
67322     }
67323     return result;
67324 }
67325
67326
67327 /***/ }),
67328 /* 159 */
67329 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
67330
67331
67332 /*---------------------------------------------------------------------------------------------
67333  *  Copyright (c) Microsoft Corporation. All rights reserved.
67334  *  Licensed under the MIT License. See License.txt in the project root for license information.
67335  *--------------------------------------------------------------------------------------------*/
67336 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
67337     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
67338     return new (P || (P = Promise))(function (resolve, reject) {
67339         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
67340         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
67341         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
67342         step((generator = generator.apply(thisArg, _arguments || [])).next());
67343     });
67344 };
67345 Object.defineProperty(exports, "__esModule", ({ value: true }));
67346 exports.fetchHTMLDataProviders = void 0;
67347 const vscode_html_languageservice_1 = __webpack_require__(115);
67348 function fetchHTMLDataProviders(dataPaths, requestService) {
67349     const providers = dataPaths.map((p) => __awaiter(this, void 0, void 0, function* () {
67350         try {
67351             const content = yield requestService.getContent(p);
67352             return parseHTMLData(p, content);
67353         }
67354         catch (e) {
67355             return vscode_html_languageservice_1.newHTMLDataProvider(p, { version: 1 });
67356         }
67357     }));
67358     return Promise.all(providers);
67359 }
67360 exports.fetchHTMLDataProviders = fetchHTMLDataProviders;
67361 function parseHTMLData(id, source) {
67362     let rawData;
67363     try {
67364         rawData = JSON.parse(source);
67365     }
67366     catch (err) {
67367         return vscode_html_languageservice_1.newHTMLDataProvider(id, { version: 1 });
67368     }
67369     return vscode_html_languageservice_1.newHTMLDataProvider(id, {
67370         version: rawData.version || 1,
67371         tags: rawData.tags || [],
67372         globalAttributes: rawData.globalAttributes || [],
67373         valueSets: rawData.valueSets || []
67374     });
67375 }
67376
67377
67378 /***/ }),
67379 /* 160 */
67380 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
67381
67382
67383 /*---------------------------------------------------------------------------------------------
67384  *  Copyright (c) Microsoft Corporation. All rights reserved.
67385  *  Licensed under the MIT License. See License.txt in the project root for license information.
67386  *--------------------------------------------------------------------------------------------*/
67387 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
67388     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
67389     return new (P || (P = Promise))(function (resolve, reject) {
67390         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
67391         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
67392         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
67393         step((generator = generator.apply(thisArg, _arguments || [])).next());
67394     });
67395 };
67396 Object.defineProperty(exports, "__esModule", ({ value: true }));
67397 exports.getSelectionRanges = void 0;
67398 const languageModes_1 = __webpack_require__(70);
67399 const positions_1 = __webpack_require__(161);
67400 function getSelectionRanges(languageModes, document, positions) {
67401     return __awaiter(this, void 0, void 0, function* () {
67402         const htmlMode = languageModes.getMode('html');
67403         return Promise.all(positions.map((position) => __awaiter(this, void 0, void 0, function* () {
67404             const htmlRange = yield htmlMode.getSelectionRange(document, position);
67405             const mode = languageModes.getModeAtPosition(document, position);
67406             if (mode && mode.getSelectionRange) {
67407                 let range = yield mode.getSelectionRange(document, position);
67408                 let top = range;
67409                 while (top.parent && positions_1.insideRangeButNotSame(htmlRange.range, top.parent.range)) {
67410                     top = top.parent;
67411                 }
67412                 top.parent = htmlRange;
67413                 return range;
67414             }
67415             return htmlRange || languageModes_1.SelectionRange.create(languageModes_1.Range.create(position, position));
67416         })));
67417     });
67418 }
67419 exports.getSelectionRanges = getSelectionRanges;
67420
67421
67422 /***/ }),
67423 /* 161 */
67424 /***/ ((__unused_webpack_module, exports) => {
67425
67426
67427 /*---------------------------------------------------------------------------------------------
67428  *  Copyright (c) Microsoft Corporation. All rights reserved.
67429  *  Licensed under the MIT License. See License.txt in the project root for license information.
67430  *--------------------------------------------------------------------------------------------*/
67431 Object.defineProperty(exports, "__esModule", ({ value: true }));
67432 exports.equalRange = exports.insideRangeButNotSame = exports.beforeOrSame = void 0;
67433 function beforeOrSame(p1, p2) {
67434     return p1.line < p2.line || p1.line === p2.line && p1.character <= p2.character;
67435 }
67436 exports.beforeOrSame = beforeOrSame;
67437 function insideRangeButNotSame(r1, r2) {
67438     return beforeOrSame(r1.start, r2.start) && beforeOrSame(r2.end, r1.end) && !equalRange(r1, r2);
67439 }
67440 exports.insideRangeButNotSame = insideRangeButNotSame;
67441 function equalRange(r1, r2) {
67442     return r1.start.line === r2.start.line && r1.start.character === r2.start.character && r1.end.line === r2.end.line && r1.end.character === r2.end.character;
67443 }
67444 exports.equalRange = equalRange;
67445
67446
67447 /***/ }),
67448 /* 162 */
67449 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
67450
67451
67452 /*---------------------------------------------------------------------------------------------
67453  *  Copyright (c) Microsoft Corporation. All rights reserved.
67454  *  Licensed under the MIT License. See License.txt in the project root for license information.
67455  *--------------------------------------------------------------------------------------------*/
67456 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
67457     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
67458     return new (P || (P = Promise))(function (resolve, reject) {
67459         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
67460         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
67461         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
67462         step((generator = generator.apply(thisArg, _arguments || [])).next());
67463     });
67464 };
67465 Object.defineProperty(exports, "__esModule", ({ value: true }));
67466 exports.newSemanticTokenProvider = void 0;
67467 const languageModes_1 = __webpack_require__(70);
67468 const positions_1 = __webpack_require__(161);
67469 function newSemanticTokenProvider(languageModes) {
67470     // combined legend across modes
67471     const legend = { types: [], modifiers: [] };
67472     const legendMappings = {};
67473     for (let mode of languageModes.getAllModes()) {
67474         if (mode.getSemanticTokenLegend && mode.getSemanticTokens) {
67475             const modeLegend = mode.getSemanticTokenLegend();
67476             legendMappings[mode.getId()] = { types: createMapping(modeLegend.types, legend.types), modifiers: createMapping(modeLegend.modifiers, legend.modifiers) };
67477         }
67478     }
67479     return {
67480         legend,
67481         getSemanticTokens(document, ranges) {
67482             return __awaiter(this, void 0, void 0, function* () {
67483                 const allTokens = [];
67484                 for (let mode of languageModes.getAllModesInDocument(document)) {
67485                     if (mode.getSemanticTokens) {
67486                         const mapping = legendMappings[mode.getId()];
67487                         const tokens = yield mode.getSemanticTokens(document);
67488                         applyTypesMapping(tokens, mapping.types);
67489                         applyModifiersMapping(tokens, mapping.modifiers);
67490                         for (let token of tokens) {
67491                             allTokens.push(token);
67492                         }
67493                     }
67494                 }
67495                 return encodeTokens(allTokens, ranges, document);
67496             });
67497         }
67498     };
67499 }
67500 exports.newSemanticTokenProvider = newSemanticTokenProvider;
67501 function createMapping(origLegend, newLegend) {
67502     const mapping = [];
67503     let needsMapping = false;
67504     for (let origIndex = 0; origIndex < origLegend.length; origIndex++) {
67505         const entry = origLegend[origIndex];
67506         let newIndex = newLegend.indexOf(entry);
67507         if (newIndex === -1) {
67508             newIndex = newLegend.length;
67509             newLegend.push(entry);
67510         }
67511         mapping.push(newIndex);
67512         needsMapping = needsMapping || (newIndex !== origIndex);
67513     }
67514     return needsMapping ? mapping : undefined;
67515 }
67516 function applyTypesMapping(tokens, typesMapping) {
67517     if (typesMapping) {
67518         for (let token of tokens) {
67519             token.typeIdx = typesMapping[token.typeIdx];
67520         }
67521     }
67522 }
67523 function applyModifiersMapping(tokens, modifiersMapping) {
67524     if (modifiersMapping) {
67525         for (let token of tokens) {
67526             let modifierSet = token.modifierSet;
67527             if (modifierSet) {
67528                 let index = 0;
67529                 let result = 0;
67530                 while (modifierSet > 0) {
67531                     if ((modifierSet & 1) !== 0) {
67532                         result = result + (1 << modifiersMapping[index]);
67533                     }
67534                     index++;
67535                     modifierSet = modifierSet >> 1;
67536                 }
67537                 token.modifierSet = result;
67538             }
67539         }
67540     }
67541 }
67542 function encodeTokens(tokens, ranges, document) {
67543     const resultTokens = tokens.sort((d1, d2) => d1.start.line - d2.start.line || d1.start.character - d2.start.character);
67544     if (ranges) {
67545         ranges = ranges.sort((d1, d2) => d1.start.line - d2.start.line || d1.start.character - d2.start.character);
67546     }
67547     else {
67548         ranges = [languageModes_1.Range.create(languageModes_1.Position.create(0, 0), languageModes_1.Position.create(document.lineCount, 0))];
67549     }
67550     let rangeIndex = 0;
67551     let currRange = ranges[rangeIndex++];
67552     let prefLine = 0;
67553     let prevChar = 0;
67554     let encodedResult = [];
67555     for (let k = 0; k < resultTokens.length && currRange; k++) {
67556         const curr = resultTokens[k];
67557         const start = curr.start;
67558         while (currRange && positions_1.beforeOrSame(currRange.end, start)) {
67559             currRange = ranges[rangeIndex++];
67560         }
67561         if (currRange && positions_1.beforeOrSame(currRange.start, start) && positions_1.beforeOrSame({ line: start.line, character: start.character + curr.length }, currRange.end)) {
67562             // token inside a range
67563             if (prefLine !== start.line) {
67564                 prevChar = 0;
67565             }
67566             encodedResult.push(start.line - prefLine); // line delta
67567             encodedResult.push(start.character - prevChar); // line delta
67568             encodedResult.push(curr.length); // length
67569             encodedResult.push(curr.typeIdx); // tokenType
67570             encodedResult.push(curr.modifierSet); // tokenModifier
67571             prefLine = start.line;
67572             prevChar = start.character;
67573         }
67574     }
67575     return encodedResult;
67576 }
67577
67578
67579 /***/ }),
67580 /* 163 */
67581 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
67582
67583
67584 /*---------------------------------------------------------------------------------------------
67585  *  Copyright (c) Microsoft Corporation. All rights reserved.
67586  *  Licensed under the MIT License. See License.txt in the project root for license information.
67587  *--------------------------------------------------------------------------------------------*/
67588 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
67589     if (k2 === undefined) k2 = k;
67590     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
67591 }) : (function(o, m, k, k2) {
67592     if (k2 === undefined) k2 = k;
67593     o[k2] = m[k];
67594 }));
67595 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
67596     Object.defineProperty(o, "default", { enumerable: true, value: v });
67597 }) : function(o, v) {
67598     o["default"] = v;
67599 });
67600 var __importStar = (this && this.__importStar) || function (mod) {
67601     if (mod && mod.__esModule) return mod;
67602     var result = {};
67603     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
67604     __setModuleDefault(result, mod);
67605     return result;
67606 };
67607 Object.defineProperty(exports, "__esModule", ({ value: true }));
67608 exports.getNodeFSRequestService = void 0;
67609 const requests_1 = __webpack_require__(157);
67610 const vscode_uri_1 = __webpack_require__(135);
67611 const fs = __importStar(__webpack_require__(64));
67612 const vscode_css_languageservice_1 = __webpack_require__(71);
67613 function getNodeFSRequestService() {
67614     function ensureFileUri(location) {
67615         if (requests_1.getScheme(location) !== 'file') {
67616             throw new Error('fileRequestService can only handle file URLs');
67617         }
67618     }
67619     return {
67620         getContent(location, encoding) {
67621             ensureFileUri(location);
67622             return new Promise((c, e) => {
67623                 const uri = vscode_uri_1.URI.parse(location);
67624                 fs.readFile(uri.fsPath, encoding, (err, buf) => {
67625                     if (err) {
67626                         return e(err);
67627                     }
67628                     c(buf.toString());
67629                 });
67630             });
67631         },
67632         stat(location) {
67633             ensureFileUri(location);
67634             return new Promise((c, e) => {
67635                 const uri = vscode_uri_1.URI.parse(location);
67636                 fs.stat(uri.fsPath, (err, stats) => {
67637                     if (err) {
67638                         if (err.code === 'ENOENT') {
67639                             return c({ type: vscode_css_languageservice_1.FileType.Unknown, ctime: -1, mtime: -1, size: -1 });
67640                         }
67641                         else {
67642                             return e(err);
67643                         }
67644                     }
67645                     let type = vscode_css_languageservice_1.FileType.Unknown;
67646                     if (stats.isFile()) {
67647                         type = vscode_css_languageservice_1.FileType.File;
67648                     }
67649                     else if (stats.isDirectory()) {
67650                         type = vscode_css_languageservice_1.FileType.Directory;
67651                     }
67652                     else if (stats.isSymbolicLink()) {
67653                         type = vscode_css_languageservice_1.FileType.SymbolicLink;
67654                     }
67655                     c({
67656                         type,
67657                         ctime: stats.ctime.getTime(),
67658                         mtime: stats.mtime.getTime(),
67659                         size: stats.size
67660                     });
67661                 });
67662             });
67663         },
67664         readDirectory(location) {
67665             ensureFileUri(location);
67666             return new Promise((c, e) => {
67667                 const path = vscode_uri_1.URI.parse(location).fsPath;
67668                 fs.readdir(path, { withFileTypes: true }, (err, children) => {
67669                     if (err) {
67670                         return e(err);
67671                     }
67672                     c(children.map(stat => {
67673                         if (stat.isSymbolicLink()) {
67674                             return [stat.name, vscode_css_languageservice_1.FileType.SymbolicLink];
67675                         }
67676                         else if (stat.isDirectory()) {
67677                             return [stat.name, vscode_css_languageservice_1.FileType.Directory];
67678                         }
67679                         else if (stat.isFile()) {
67680                             return [stat.name, vscode_css_languageservice_1.FileType.File];
67681                         }
67682                         else {
67683                             return [stat.name, vscode_css_languageservice_1.FileType.Unknown];
67684                         }
67685                     }));
67686                 });
67687             });
67688         }
67689     };
67690 }
67691 exports.getNodeFSRequestService = getNodeFSRequestService;
67692
67693
67694 /***/ })
67695 /******/        ]);
67696 /************************************************************************/
67697 /******/        // The module cache
67698 /******/        var __webpack_module_cache__ = {};
67699 /******/        
67700 /******/        // The require function
67701 /******/        function __webpack_require__(moduleId) {
67702 /******/                // Check if module is in cache
67703 /******/                if(__webpack_module_cache__[moduleId]) {
67704 /******/                        return __webpack_module_cache__[moduleId].exports;
67705 /******/                }
67706 /******/                // Create a new module (and put it into the cache)
67707 /******/                var module = __webpack_module_cache__[moduleId] = {
67708 /******/                        // no module.id needed
67709 /******/                        // no module.loaded needed
67710 /******/                        exports: {}
67711 /******/                };
67712 /******/        
67713 /******/                // Execute the module function
67714 /******/                __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
67715 /******/        
67716 /******/                // Return the exports of the module
67717 /******/                return module.exports;
67718 /******/        }
67719 /******/        
67720 /************************************************************************/
67721 /******/        /* webpack/runtime/define property getters */
67722 /******/        (() => {
67723 /******/                // define getter functions for harmony exports
67724 /******/                __webpack_require__.d = (exports, definition) => {
67725 /******/                        for(var key in definition) {
67726 /******/                                if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
67727 /******/                                        Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
67728 /******/                                }
67729 /******/                        }
67730 /******/                };
67731 /******/        })();
67732 /******/        
67733 /******/        /* webpack/runtime/hasOwnProperty shorthand */
67734 /******/        (() => {
67735 /******/                __webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)
67736 /******/        })();
67737 /******/        
67738 /******/        /* webpack/runtime/make namespace object */
67739 /******/        (() => {
67740 /******/                // define __esModule on exports
67741 /******/                __webpack_require__.r = (exports) => {
67742 /******/                        if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
67743 /******/                                Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
67744 /******/                        }
67745 /******/                        Object.defineProperty(exports, '__esModule', { value: true });
67746 /******/                };
67747 /******/        })();
67748 /******/        
67749 /************************************************************************/
67750 /******/        // module exports must be returned from runtime so entry inlining is disabled
67751 /******/        // startup
67752 /******/        // Load entry module and return exports
67753 /******/        return __webpack_require__(47);
67754 /******/ })()
67755
67756 ));