@visulima/html 1.0.0-alpha.19 → 1.0.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/LICENSE.md +34 -0
- package/README.md +69 -10
- package/dist/css.d.ts +38 -0
- package/dist/css.js +2 -0
- package/dist/escape.d.ts +20 -0
- package/dist/escape.js +1 -0
- package/dist/html.d.ts +58 -0
- package/dist/html.js +1 -0
- package/dist/index.d.ts +12 -147
- package/dist/index.js +1 -1
- package/dist/packem_shared/_commonjsHelpers-CWAkuNXM.js +1 -0
- package/dist/packem_shared/decode-DPHm0sXO.js +1 -0
- package/dist/packem_shared/escapeCss-BtzOEJZW.js +1 -0
- package/dist/packem_shared/escapeHtml-CiWsYlrs.js +1 -0
- package/dist/packem_shared/escapeJs-C4cWI12i.js +1 -0
- package/dist/packem_shared/htmlTags-BWCBwnc_.js +1 -0
- package/dist/packem_shared/isHtml-B7-ANsKf.js +1 -0
- package/dist/packem_shared/isValidCustomElementName-BGH0NihB.js +1 -0
- package/dist/packem_shared/stripHtml-BJMSstzr.js +53 -0
- package/dist/packem_shared/voidHtmlTags-Cb8VOd4K.js +1 -0
- package/dist/sanitize.d.ts +1 -0
- package/dist/sanitize.js +1 -0
- package/dist/strip.d.ts +67 -0
- package/dist/strip.js +1 -0
- package/package.json +23 -3
- package/dist/packem_shared/_commonjsHelpers-D6W6KoPK.js +0 -1
- package/dist/packem_shared/css-Dln-sxQh.js +0 -1
- package/dist/packem_shared/encode-CXgEtaTS.js +0 -1
- package/dist/packem_shared/escapeCss-oDJXzCKj.js +0 -1
- package/dist/packem_shared/escapeHtml-Bo9qsuic.js +0 -1
- package/dist/packem_shared/escapeJs-BS03wnwB.js +0 -1
- package/dist/packem_shared/html-BLm9CdF5.js +0 -1
- package/dist/packem_shared/htmlTags-Nlm7Pr1p.js +0 -1
- package/dist/packem_shared/isValidCustomElementName-gLEw9R2V.js +0 -1
- package/dist/packem_shared/stripHtmlDefaultOptions-BNHq9dEC.js +0 -54
- package/dist/packem_shared/voidHtmlTags-CRXTgEWG.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
## @visulima/html [1.0.0-alpha.20](https://github.com/visulima/visulima/compare/@visulima/html@1.0.0-alpha.19...@visulima/html@1.0.0-alpha.20) (2026-06-13)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* **html:** add subpaths, html fragment composition, css quote-safe minify ([4e13cc9](https://github.com/visulima/visulima/commit/4e13cc90c79ed9629141d12251b5050bf29946a4))
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
* **html:** escape by default in html overload ([3a3cbe2](https://github.com/visulima/visulima/commit/3a3cbe29f448782a64580d05d81f26b4a5632aad))
|
|
10
|
+
|
|
11
|
+
### Miscellaneous Chores
|
|
12
|
+
|
|
13
|
+
* **html:** apply safe eslint formatting ([f12769c](https://github.com/visulima/visulima/commit/f12769c6ae6328499d933a00dd2a91d882cdb2dd))
|
|
14
|
+
|
|
15
|
+
### Tests
|
|
16
|
+
|
|
17
|
+
* **html:** restore tagged-template inputs mangled by eslint --fix ([430260d](https://github.com/visulima/visulima/commit/430260def28f9dce7d84086f58e7bba2657e098a))
|
|
18
|
+
|
|
19
|
+
### Build System
|
|
20
|
+
|
|
21
|
+
* regenerate bundled-license manifests and types ordering ([af26588](https://github.com/visulima/visulima/commit/af26588d75aaa937fd4862800560bd4070a4878c))
|
|
22
|
+
|
|
1
23
|
## @visulima/html [1.0.0-alpha.19](https://github.com/visulima/visulima/compare/@visulima/html@1.0.0-alpha.18...@visulima/html@1.0.0-alpha.19) (2026-06-04)
|
|
2
24
|
|
|
3
25
|
### Bug Fixes
|
package/LICENSE.md
CHANGED
|
@@ -127,6 +127,23 @@ Repository: sindresorhus/html-tags
|
|
|
127
127
|
|
|
128
128
|
---------------------------------------
|
|
129
129
|
|
|
130
|
+
## is-html
|
|
131
|
+
License: MIT
|
|
132
|
+
By: Sindre Sorhus
|
|
133
|
+
Repository: sindresorhus/is-html
|
|
134
|
+
|
|
135
|
+
> MIT License
|
|
136
|
+
>
|
|
137
|
+
> Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
|
|
138
|
+
>
|
|
139
|
+
> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
140
|
+
>
|
|
141
|
+
> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
142
|
+
>
|
|
143
|
+
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
144
|
+
|
|
145
|
+
---------------------------------------
|
|
146
|
+
|
|
130
147
|
## lodash-es
|
|
131
148
|
License: MIT
|
|
132
149
|
By: John-David Dalton, Mathias Bynens
|
|
@@ -495,6 +512,23 @@ Repository: sindresorhus/html-tags
|
|
|
495
512
|
|
|
496
513
|
---------------------------------------
|
|
497
514
|
|
|
515
|
+
## is-html
|
|
516
|
+
License: MIT
|
|
517
|
+
By: Sindre Sorhus
|
|
518
|
+
Repository: sindresorhus/is-html
|
|
519
|
+
|
|
520
|
+
> MIT License
|
|
521
|
+
>
|
|
522
|
+
> Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
|
|
523
|
+
>
|
|
524
|
+
> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
525
|
+
>
|
|
526
|
+
> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
527
|
+
>
|
|
528
|
+
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
529
|
+
|
|
530
|
+
---------------------------------------
|
|
531
|
+
|
|
498
532
|
## string-strip-html
|
|
499
533
|
License: MIT
|
|
500
534
|
By: Roy Revelt
|
package/README.md
CHANGED
|
@@ -120,6 +120,25 @@ pnpm add @visulima/html
|
|
|
120
120
|
|
|
121
121
|
## Usage
|
|
122
122
|
|
|
123
|
+
### Entry Points
|
|
124
|
+
|
|
125
|
+
`@visulima/html` exposes focused subpath exports so you only pay for what you import. The aggregate `@visulima/html` entry re-exports everything (including `sanitize-html`, which pulls in `htmlparser2`/`parse5`/`postcss`). If you only need escaping, import the lighter, browser-friendly subpaths instead:
|
|
126
|
+
|
|
127
|
+
| Import | Contents |
|
|
128
|
+
| ------------------------- | ---------------------------------------------------------- |
|
|
129
|
+
| `@visulima/html` | Everything (escaping, `html`/`css` tags, sanitize, strip…) |
|
|
130
|
+
| `@visulima/html/escape` | `escapeHtml`, `escapeCss`, `escapeJs` (no `sanitize-html`) |
|
|
131
|
+
| `@visulima/html/html` | `html` tag + `html.raw` / `isRawHtml` |
|
|
132
|
+
| `@visulima/html/css` | `css` tag + `CSSProperties` / `FlexibleCSSProperties` |
|
|
133
|
+
| `@visulima/html/sanitize` | `sanitizeHtml` |
|
|
134
|
+
| `@visulima/html/strip` | `stripHtml` + types |
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
// Lightweight, browser-safe — does not load sanitize-html
|
|
138
|
+
import { escapeHtml, escapeCss, escapeJs } from "@visulima/html/escape";
|
|
139
|
+
import { html } from "@visulima/html/html";
|
|
140
|
+
```
|
|
141
|
+
|
|
123
142
|
### When to Use Escaping vs Sanitization vs Stripping
|
|
124
143
|
|
|
125
144
|
Understanding when to use **escaping**, **sanitization**, or **stripping** is crucial for web security:
|
|
@@ -255,29 +274,54 @@ const safe = html`<div>${userInput}</div>`;
|
|
|
255
274
|
// Result: '<div><script>alert("xss")</script></div>'
|
|
256
275
|
```
|
|
257
276
|
|
|
258
|
-
####
|
|
277
|
+
#### Composing Fragments (arrays and `html.raw`)
|
|
278
|
+
|
|
279
|
+
Interpolated **arrays** are flattened and joined with an empty string (not commas), and each element is escaped. Values wrapped with **`html.raw`** are inlined verbatim, so you can compose already-rendered fragments without double-escaping:
|
|
259
280
|
|
|
260
281
|
```typescript
|
|
261
282
|
import { html } from "@visulima/html";
|
|
262
283
|
|
|
263
|
-
//
|
|
264
|
-
|
|
265
|
-
// Result: '<
|
|
284
|
+
// Arrays are joined with "" and each element is escaped
|
|
285
|
+
html`<p>${["<a>", "<b>"]}</p>`;
|
|
286
|
+
// Result: '<p><a><b></p>'
|
|
266
287
|
|
|
267
|
-
//
|
|
268
|
-
const
|
|
288
|
+
// Build a list: wrap each nested fragment with html.raw so it is not re-escaped
|
|
289
|
+
const items = ["Apples", "<script>"];
|
|
290
|
+
html`<ul>
|
|
291
|
+
${items.map((item) => html.raw(html`<li>${item}</li>`))}
|
|
292
|
+
</ul>`;
|
|
293
|
+
// Result: '<ul><li>Apples</li><li><script></li></ul>'
|
|
294
|
+
|
|
295
|
+
// Inline trusted, pre-sanitized HTML verbatim
|
|
296
|
+
const trusted = html.raw("<em>bold</em>");
|
|
297
|
+
html`<p>${trusted}</p>`;
|
|
298
|
+
// Result: '<p><em>bold</em></p>'
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
> **Security Note:** `html.raw` bypasses escaping entirely. Only ever wrap HTML you fully control or have already sanitized — wrapping untrusted input reintroduces XSS. Use `isRawHtml(value)` to detect a raw marker.
|
|
302
|
+
|
|
303
|
+
#### Function Usage with Escaping Control
|
|
304
|
+
|
|
305
|
+
```typescript
|
|
306
|
+
import { html } from "@visulima/html";
|
|
307
|
+
|
|
308
|
+
// Escapes by default (escapes &, <, and ") — safe for untrusted input
|
|
309
|
+
const escapedHtml = html('<script>alert("xss")</script>');
|
|
269
310
|
// Result: '<script>alert("xss")</script>'
|
|
270
311
|
|
|
271
|
-
//
|
|
272
|
-
const
|
|
273
|
-
// Result: '<div
|
|
312
|
+
// Opt out explicitly for HTML you already trust / have sanitized
|
|
313
|
+
const passthrough = html("<div></div>", false);
|
|
314
|
+
// Result: '<div></div>'
|
|
274
315
|
```
|
|
275
316
|
|
|
317
|
+
> **Security note:** The `html(string)` function-call form **escapes by default**, matching the template-tag form. Pass `false` as the second argument only for HTML you fully control or have already sanitized — that disables XSS protection. For trusted fragments inside the template tag, use `html.raw(...)` instead.
|
|
318
|
+
|
|
276
319
|
#### Use Cases
|
|
277
320
|
|
|
278
321
|
- **Template Literals**: Use the template tag for HTML with automatic escaping of interpolated values
|
|
322
|
+
- **Fragment Composition**: Use arrays and `html.raw` to build lists and compose partials safely
|
|
279
323
|
- **Dynamic Content**: Interpolated values are automatically escaped, making it safe for user-generated content
|
|
280
|
-
- **Trusted HTML**: Use the function with `false` when you need to insert trusted HTML without escaping
|
|
324
|
+
- **Trusted HTML**: Use `html.raw(...)` (or the function form with `false` as the second argument) when you need to insert trusted HTML without escaping
|
|
281
325
|
- **Performance**: Template tag has minimal overhead, perfect for HTML generation with automatic XSS protection
|
|
282
326
|
|
|
283
327
|
### CSS Escaping
|
|
@@ -340,6 +384,8 @@ const result = css`
|
|
|
340
384
|
`;
|
|
341
385
|
```
|
|
342
386
|
|
|
387
|
+
> **Note:** The template tag collapses whitespace into single spaces to produce a one-line string, but it is quote-aware: whitespace inside single- or double-quoted values (e.g. `content: "a b"`) is preserved verbatim.
|
|
388
|
+
|
|
343
389
|
#### Function Usage with String Input
|
|
344
390
|
|
|
345
391
|
```typescript
|
|
@@ -498,6 +544,19 @@ According to the HTML specification, a valid custom element name must:
|
|
|
498
544
|
|
|
499
545
|
> **Note:** Custom element names are case-sensitive and must follow the naming conventions defined in the HTML specification to ensure proper browser support.
|
|
500
546
|
|
|
547
|
+
### HTML Detection
|
|
548
|
+
|
|
549
|
+
The `isHtml` function checks whether a string contains HTML markup. It is a thin re-export of [`is-html`](https://github.com/sindresorhus/is-html).
|
|
550
|
+
|
|
551
|
+
```typescript
|
|
552
|
+
import { isHtml } from "@visulima/html";
|
|
553
|
+
|
|
554
|
+
isHtml("<p>hello</p>"); // true
|
|
555
|
+
isHtml("<br/>"); // true
|
|
556
|
+
isHtml("just plain text"); // false
|
|
557
|
+
isHtml("1 < 2 and 3 > 2"); // false
|
|
558
|
+
```
|
|
559
|
+
|
|
501
560
|
### HTML Entity Encoding & Decoding
|
|
502
561
|
|
|
503
562
|
The package exports all functions from `html-entities` for encoding and decoding HTML entities.
|
package/dist/css.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Properties } from 'csstype';
|
|
2
|
+
/**
|
|
3
|
+
* The standard CSS properties type from `csstype`.
|
|
4
|
+
*/
|
|
5
|
+
type CSSProperties = Properties;
|
|
6
|
+
/**
|
|
7
|
+
* Flexible CSS properties type that allows autocomplete for property names
|
|
8
|
+
* while accepting string, number, null, or undefined values.
|
|
9
|
+
*/
|
|
10
|
+
type FlexibleCSSProperties = { [K in keyof Properties]?: Properties[K] | string | number | null | undefined };
|
|
11
|
+
/**
|
|
12
|
+
* Template tag function for CSS that returns a minified one-line CSS string.
|
|
13
|
+
* Template strings are used as-is, but interpolated values are escaped by default.
|
|
14
|
+
* Whitespace and newlines outside of quoted strings are collapsed into single spaces;
|
|
15
|
+
* whitespace inside single-/double-quoted values (e.g. `content: "a b"`) is preserved.
|
|
16
|
+
* @param strings Template literal strings
|
|
17
|
+
* @param values Template literal values (escaped by default)
|
|
18
|
+
* @returns A minified one-line CSS string
|
|
19
|
+
* @example
|
|
20
|
+
* css`:where(.UnderlineNav-actions ul) { animation: 1ms rgh-selector-observer; }`
|
|
21
|
+
* // Returns: ":where(.UnderlineNav-actions ul) { animation: 1ms rgh-selector-observer; }"
|
|
22
|
+
*/
|
|
23
|
+
declare function css(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
24
|
+
/**
|
|
25
|
+
* Function overload for CSS with escaping control.
|
|
26
|
+
* Supports both string and object inputs.
|
|
27
|
+
* @param value The CSS string or object to process
|
|
28
|
+
* @param shouldEscape If true, escapes CSS. If false, returns CSS as-is.
|
|
29
|
+
* @returns The processed CSS string
|
|
30
|
+
* @example
|
|
31
|
+
* css(':where(.UnderlineNav-actions ul) { animation: 1ms rgh-selector-observer; }', true)
|
|
32
|
+
* @example
|
|
33
|
+
* css({ padding: "1px" }, true)
|
|
34
|
+
* @example
|
|
35
|
+
* css({ margin: 20, padding: 10 }, false)
|
|
36
|
+
*/
|
|
37
|
+
declare function css(value: string | FlexibleCSSProperties | Properties, shouldEscape?: boolean): string;
|
|
38
|
+
export { type CSSProperties, type FlexibleCSSProperties, css as default };
|
package/dist/css.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{escapeCss as f}from"./packem_shared/escapeCss-BtzOEJZW.js";const l=new Map,u=t=>{const e=l.get(t);if(e!==void 0)return e;let r;if(t.startsWith("--"))r=t;else{const n=t.replaceAll(/([A-Z])/g,"-$1").toLowerCase();r=n.startsWith("ms-")?`-ms-${n.slice(3)}`:n}return l.set(t,r),r},g=t=>{const e=[];return Object.entries(t).forEach(([r,n])=>{n!=null&&e.push(`${u(r)}: ${String(n)};`)}),e.join(" ")},p=new Set([" "," ",`
|
|
2
|
+
`,"\r","\f","\v"]),h=t=>{let e="",r,n=!1;for(let i=0;i<t.length;i+=1){const s=t[i];if(r!==void 0){e+=s,s==="\\"&&i+1<t.length?(i+=1,e+=t[i]):s===r&&(r=void 0);continue}if(s==='"'||s==="'")r=s,n=!1;else if(p.has(s)){if(n)continue;n=!0,e+=" ";continue}else n=!1;e+=s}return e.trim()};function m(t,...e){if(Array.isArray(t)&&"raw"in t){const s=t;let o=s[0]??"";for(const[c,a]of e.entries())o+=f(String(a??"")),o+=s[c+1]??"";return h(o)}const r=t,n=e[0],i=typeof r=="string"?r:g(r);return n===!0?f(i):i}export{m as default};
|
package/dist/escape.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export { escapeCss } from '@std/html/unstable-escape-css';
|
|
2
|
+
export { escapeJs } from '@std/html/unstable-escape-js';
|
|
3
|
+
/**
|
|
4
|
+
* Escapes HTML special characters in a string.
|
|
5
|
+
* Optimized for performance with minimal allocations.
|
|
6
|
+
* @param value The value to escape. Will be converted to string.
|
|
7
|
+
* @param isAttribute If true, also escapes double quotes (for HTML attributes).
|
|
8
|
+
* @returns The escaped string.
|
|
9
|
+
* @example
|
|
10
|
+
* escapeHtml('<script>alert("xss")<\/script>');
|
|
11
|
+
* // => '<script>alert("xss")</script>'
|
|
12
|
+
* @example
|
|
13
|
+
* escapeHtml('<div>', true);
|
|
14
|
+
* // => '<div>'
|
|
15
|
+
* @example
|
|
16
|
+
* escapeHtml('value="test"', true);
|
|
17
|
+
* // => 'value="test"'
|
|
18
|
+
*/
|
|
19
|
+
declare const escapeHtml: (value: unknown, isAttribute?: boolean) => string;
|
|
20
|
+
export { escapeHtml };
|
package/dist/escape.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{default as o}from"./packem_shared/escapeHtml-CiWsYlrs.js";import{escapeCss as r}from"./packem_shared/escapeCss-BtzOEJZW.js";import{escapeJs as t}from"./packem_shared/escapeJs-C4cWI12i.js";export{r as escapeCss,o as escapeHtml,t as escapeJs};
|
package/dist/html.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Branded wrapper produced by {@link html.raw}. Values wrapped in this marker are
|
|
3
|
+
* interpolated into the `html` tagged template (or composed via arrays) verbatim,
|
|
4
|
+
* without escaping. Use it only for HTML you already trust.
|
|
5
|
+
*/
|
|
6
|
+
interface RawHtml {
|
|
7
|
+
/** Internal brand used to detect trusted fragments. */
|
|
8
|
+
readonly __isRawHtml: true;
|
|
9
|
+
/** The trusted HTML payload. */
|
|
10
|
+
readonly value: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Type guard that detects a {@link RawHtml} marker (including nested fragments
|
|
14
|
+
* produced by the `html` tag, which are themselves marked as raw).
|
|
15
|
+
* @param value The value to test.
|
|
16
|
+
* @returns `true` when the value is a trusted raw HTML fragment.
|
|
17
|
+
*/
|
|
18
|
+
declare const isRawHtml: (value: unknown) => value is RawHtml;
|
|
19
|
+
/**
|
|
20
|
+
* Template tag function for HTML that escapes interpolated values to prevent XSS.
|
|
21
|
+
* Template strings are used as-is, but all interpolated values are HTML-escaped.
|
|
22
|
+
*
|
|
23
|
+
* Interpolated arrays are flattened and joined with an empty string (no commas), and
|
|
24
|
+
* values wrapped with {@link html.raw} are inlined without escaping, enabling fragment
|
|
25
|
+
* composition. Because the tag returns a plain string, nested fragments must be wrapped
|
|
26
|
+
* with `html.raw` to avoid double-escaping.
|
|
27
|
+
* @param strings Template literal strings
|
|
28
|
+
* @param values Template literal values (escaped unless wrapped with {@link html.raw})
|
|
29
|
+
* @returns The HTML string with interpolated values escaped
|
|
30
|
+
* @example
|
|
31
|
+
* html`<div>Hello</div>`
|
|
32
|
+
* // => '<div>Hello</div>'
|
|
33
|
+
* @example
|
|
34
|
+
* html`<div>${'<script>alert("xss")<\/script>'}</div>`
|
|
35
|
+
* // => '<div><script>alert("xss")</script></div>'
|
|
36
|
+
* @example
|
|
37
|
+
* html`<ul>${items.map((i) => html.raw(html`<li>${i}</li>`))}</ul>`
|
|
38
|
+
* // => '<ul><li>a</li><li>b</li></ul>'
|
|
39
|
+
*/
|
|
40
|
+
declare function html(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
41
|
+
/**
|
|
42
|
+
* Function overload for HTML with explicit escaping control.
|
|
43
|
+
*
|
|
44
|
+
* Escapes by default (attribute-safe), matching the template-tag form. Pass
|
|
45
|
+
* `shouldEscape: false` to opt out and return the input verbatim — only do this
|
|
46
|
+
* for HTML you already trust or have sanitized, since it disables XSS protection.
|
|
47
|
+
* @param value The HTML string to process
|
|
48
|
+
* @param shouldEscape When `true`/omitted, escapes HTML. When `false`, returns the input as-is (unsafe for untrusted input).
|
|
49
|
+
* @returns The processed HTML string
|
|
50
|
+
* @example
|
|
51
|
+
* html('<script>alert("xss")<\/script>')
|
|
52
|
+
* // => '<script>alert("xss")</script>'
|
|
53
|
+
* @example
|
|
54
|
+
* html('<div></div>', false)
|
|
55
|
+
* // => '<div></div>'
|
|
56
|
+
*/
|
|
57
|
+
declare function html(value: string, shouldEscape?: boolean): string;
|
|
58
|
+
export { type RawHtml, html as default, isRawHtml };
|
package/dist/html.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import o from"./packem_shared/escapeHtml-CiWsYlrs.js";const u="__isRawHtml",l=r=>typeof r=="object"&&r!==null&&r[u]===!0,s=r=>{if(l(r))return r.value;if(Array.isArray(r)){let e="";for(const t of r)e+=s(t);return e}return o(r,!0)};function c(r,...e){if(Array.isArray(r)&&"raw"in r){const n=r;let a=n[0]??"";for(const[f,i]of e.entries())a+=s(i),a+=n[f+1]??"";return a}const t=r;return e[0]===!1?t:o(t,!0)}c.raw=r=>({[u]:!0,value:r});export{c as default,l as isRawHtml};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,85 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
1
|
+
export { type CSSProperties, type FlexibleCSSProperties, default as css } from "./css.js";
|
|
2
|
+
export { escapeHtml } from "./escape.js";
|
|
3
|
+
export { type RawHtml, default as html, isRawHtml } from "./html.js";
|
|
3
4
|
export { escapeCss } from '@std/html/unstable-escape-css';
|
|
4
5
|
export { escapeJs } from '@std/html/unstable-escape-js';
|
|
5
6
|
export { isValidCustomElementName } from '@std/html/unstable-is-valid-custom-element-name';
|
|
6
7
|
export { default as sanitizeHtml } from 'sanitize-html';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* while accepting string, number, null, or undefined values.
|
|
11
|
-
*/
|
|
12
|
-
type FlexibleCSSProperties$1 = { [K in keyof Properties]?: Properties[K] | string | number | null | undefined };
|
|
13
|
-
/**
|
|
14
|
-
* Template tag function for CSS that returns a minified one-line CSS string.
|
|
15
|
-
* Template strings are used as-is, but interpolated values are escaped by default.
|
|
16
|
-
* All whitespace and newlines are collapsed into single spaces.
|
|
17
|
-
* @param strings Template literal strings
|
|
18
|
-
* @param values Template literal values (escaped by default)
|
|
19
|
-
* @returns A minified one-line CSS string
|
|
20
|
-
* @example
|
|
21
|
-
* css`:where(.UnderlineNav-actions ul) { animation: 1ms rgh-selector-observer; }`
|
|
22
|
-
* // Returns: ":where(.UnderlineNav-actions ul) { animation: 1ms rgh-selector-observer; }"
|
|
23
|
-
*/
|
|
24
|
-
declare function css(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
25
|
-
/**
|
|
26
|
-
* Function overload for CSS with escaping control.
|
|
27
|
-
* Supports both string and object inputs.
|
|
28
|
-
* @param value The CSS string or object to process
|
|
29
|
-
* @param shouldEscape If true, escapes CSS. If false, returns CSS as-is.
|
|
30
|
-
* @returns The processed CSS string
|
|
31
|
-
* @example
|
|
32
|
-
* css(':where(.UnderlineNav-actions ul) { animation: 1ms rgh-selector-observer; }', true)
|
|
33
|
-
* @example
|
|
34
|
-
* css({ padding: "1px" }, true)
|
|
35
|
-
* @example
|
|
36
|
-
* css({ margin: 20, padding: 10 }, false)
|
|
37
|
-
*/
|
|
38
|
-
declare function css(value: string | FlexibleCSSProperties$1 | Properties, shouldEscape?: boolean): string;
|
|
39
|
-
/**
|
|
40
|
-
* Escapes HTML special characters in a string.
|
|
41
|
-
* Optimized for performance with minimal allocations.
|
|
42
|
-
* @param value The value to escape. Will be converted to string.
|
|
43
|
-
* @param isAttribute If true, also escapes double quotes (for HTML attributes).
|
|
44
|
-
* @returns The escaped string.
|
|
45
|
-
* @example
|
|
46
|
-
* escapeHtml('<script>alert("xss")<\/script>');
|
|
47
|
-
* // => '<script>alert("xss")</script>'
|
|
48
|
-
* @example
|
|
49
|
-
* escapeHtml('<div>', true);
|
|
50
|
-
* // => '<div>'
|
|
51
|
-
* @example
|
|
52
|
-
* escapeHtml('value="test"', true);
|
|
53
|
-
* // => 'value="test"'
|
|
54
|
-
*/
|
|
55
|
-
declare const escapeHtml: (value: unknown, isAttribute?: boolean) => string;
|
|
56
|
-
/**
|
|
57
|
-
* Template tag function for HTML that escapes interpolated values to prevent XSS.
|
|
58
|
-
* Template strings are used as-is, but all interpolated values are HTML-escaped.
|
|
59
|
-
* @param strings Template literal strings
|
|
60
|
-
* @param values Template literal values (will be escaped)
|
|
61
|
-
* @returns The HTML string with interpolated values escaped
|
|
62
|
-
* @example
|
|
63
|
-
* html`<div>Hello</div>`
|
|
64
|
-
* // => '<div>Hello</div>'
|
|
65
|
-
* @example
|
|
66
|
-
* html`<div>${'<script>alert("xss")<\/script>'}</div>`
|
|
67
|
-
* // => '<div><script>alert("xss")</script></div>'
|
|
68
|
-
*/
|
|
69
|
-
declare function html(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
70
|
-
/**
|
|
71
|
-
* Function overload for HTML with escaping control.
|
|
72
|
-
* @param value The HTML string to process
|
|
73
|
-
* @param shouldEscape If false/undefined, returns HTML as-is (unsafe for untrusted input). If true, escapes HTML.
|
|
74
|
-
* @returns The processed HTML string
|
|
75
|
-
* @example
|
|
76
|
-
* html('<div></div>', false)
|
|
77
|
-
* // => '<div></div>'
|
|
78
|
-
* @example
|
|
79
|
-
* html('<script>alert("xss")<\/script>', true)
|
|
80
|
-
* // => '<script>alert("xss")</script>'
|
|
81
|
-
*/
|
|
82
|
-
declare function html(value: string, shouldEscape?: boolean): string;
|
|
8
|
+
export { type StripHtmlAttribute, type StripHtmlCbObj, type StripHtmlOptions, type StripHtmlResult, type StripHtmlTag, stripHtml, stripHtmlDefaultOptions } from "./strip.js";
|
|
9
|
+
import 'csstype';
|
|
10
|
+
import 'ranges-push';
|
|
83
11
|
type Level = 'xml' | 'html4' | 'html5' | 'all';
|
|
84
12
|
interface CommonOptions {
|
|
85
13
|
level?: Level;
|
|
@@ -134,74 +62,11 @@ console.log(voidHtmlTags);
|
|
|
134
62
|
```
|
|
135
63
|
*/
|
|
136
64
|
declare const voidHtmlTags: readonly VoidHtmlTags[];
|
|
137
|
-
type Range = [from: number, to: number] | [from: number, to: number, whatToInsert: string | null | undefined];
|
|
138
|
-
type Ranges = Range[] | null;
|
|
139
|
-
interface Attribute {
|
|
140
|
-
nameStarts: number;
|
|
141
|
-
nameEnds: number;
|
|
142
|
-
equalsAt?: number;
|
|
143
|
-
name: string;
|
|
144
|
-
valueStarts?: number;
|
|
145
|
-
valueEnds?: number;
|
|
146
|
-
value?: string;
|
|
147
|
-
}
|
|
148
|
-
interface Tag {
|
|
149
|
-
attributes: Attribute[];
|
|
150
|
-
lastClosingBracketAt: number;
|
|
151
|
-
lastOpeningBracketAt: number;
|
|
152
|
-
slashPresent: number;
|
|
153
|
-
leftOuterWhitespace: number;
|
|
154
|
-
onlyPlausible: boolean;
|
|
155
|
-
nameStarts: number;
|
|
156
|
-
nameContainsLetters: boolean;
|
|
157
|
-
nameEnds: number;
|
|
158
|
-
name: string;
|
|
159
|
-
}
|
|
160
|
-
interface CbObj {
|
|
161
|
-
tag: Tag;
|
|
162
|
-
deleteFrom: null | number;
|
|
163
|
-
deleteTo: null | number;
|
|
164
|
-
insert: null | undefined | string;
|
|
165
|
-
rangesArr: Ranges$1;
|
|
166
|
-
proposedReturn: Range | null;
|
|
167
|
-
}
|
|
168
|
-
interface Opts {
|
|
169
|
-
ignoreTags: string[];
|
|
170
|
-
ignoreTagsWithTheirContents: string[];
|
|
171
|
-
onlyStripTags: string[];
|
|
172
|
-
stripTogetherWithTheirContents: string[];
|
|
173
|
-
skipHtmlDecoding: boolean;
|
|
174
|
-
trimOnlySpaces: boolean;
|
|
175
|
-
stripRecognisedHTMLOnly: boolean;
|
|
176
|
-
dumpLinkHrefsNearby: {
|
|
177
|
-
enabled?: boolean;
|
|
178
|
-
putOnNewLine?: boolean;
|
|
179
|
-
wrapHeads?: string;
|
|
180
|
-
wrapTails?: string;
|
|
181
|
-
};
|
|
182
|
-
ignoreIndentations: boolean;
|
|
183
|
-
cb: null | ((cbObj: CbObj) => void);
|
|
184
|
-
reportProgressFunc: null | ((percDone: number) => void);
|
|
185
|
-
reportProgressFuncFrom: number;
|
|
186
|
-
reportProgressFuncTo: number;
|
|
187
|
-
}
|
|
188
|
-
declare const defaults: Opts;
|
|
189
|
-
interface Res {
|
|
190
|
-
log: {
|
|
191
|
-
timeTakenInMilliseconds: number;
|
|
192
|
-
};
|
|
193
|
-
result: string;
|
|
194
|
-
ranges: Ranges;
|
|
195
|
-
allTagLocations: [number, number][];
|
|
196
|
-
filteredTagLocations: [number, number][];
|
|
197
|
-
}
|
|
198
65
|
/**
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
* Flexible CSS properties type that allows autocomplete for property names
|
|
204
|
-
* while accepting string, number, null, or undefined values.
|
|
66
|
+
Check if a string is HTML.
|
|
67
|
+
|
|
68
|
+
@param string - The string to check if it is HTML.
|
|
69
|
+
@returns `true` if the string is HTML, `false` otherwise.
|
|
205
70
|
*/
|
|
206
|
-
|
|
207
|
-
export { DecodeOptions, DecodeScope, EncodeMode, EncodeOptions,
|
|
71
|
+
declare function isHtml(string: string): boolean;
|
|
72
|
+
export { DecodeOptions, DecodeScope, EncodeMode, EncodeOptions, Level, decode, decodeEntity, encode, htmlTags, isHtml, voidHtmlTags };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as o}from"./
|
|
1
|
+
import{default as o}from"./css.js";import{default as a}from"./packem_shared/escapeHtml-CiWsYlrs.js";import{default as m,isRawHtml as f}from"./html.js";import{escapeCss as p}from"./packem_shared/escapeCss-BtzOEJZW.js";import{escapeJs as x}from"./packem_shared/escapeJs-C4cWI12i.js";import{isValidCustomElementName as u}from"./packem_shared/isValidCustomElementName-BGH0NihB.js";import{decode as H,decodeEntity as n,encode as g}from"./packem_shared/decode-DPHm0sXO.js";import{default as C}from"./packem_shared/htmlTags-BWCBwnc_.js";import{default as T}from"./packem_shared/voidHtmlTags-Cb8VOd4K.js";import{default as w}from"./packem_shared/isHtml-B7-ANsKf.js";import{default as z}from"sanitize-html";import{stripHtml as J,defaults as N}from"./packem_shared/stripHtml-BJMSstzr.js";export{o as css,H as decode,n as decodeEntity,g as encode,p as escapeCss,a as escapeHtml,x as escapeJs,m as html,C as htmlTags,w as isHtml,f as isRawHtml,u as isValidCustomElementName,z as sanitizeHtml,J as stripHtml,N as stripHtmlDefaultOptions,T as voidHtmlTags};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function o(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}export{o as g};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var g=function(){return g=Object.assign||function(r){for(var e,a=1,o=arguments.length;a<o;a++){e=arguments[a];for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[t]=e[t])}return r},g.apply(this,arguments)},L="~",k="~~";function w(r,e){for(var a={},o={},t=r.split(k),s=!1,i=0;t.length>i;i++){for(var c=t[i].split(L),l=0;l<c.length;l+=2){var u=c[l],n=c[l+1],p="&"+u+";";a[p]=n,s&&(a["&"+u]=n),o[n]=p}s=!0}return e?{entities:g(g({},a),e.entities),characters:g(g({},o),e.characters)}:{entities:a,characters:o}}var b={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/∉|&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/·|℗|⋇|⪧|⩺|⋗|⦕|⩼|⪆|⥸|⋗|⋛|⪌|≷|≳|⪦|⩹|⋖|⋋|⋉|⥶|⩻|⦖|◃|⊴|◂|∉|⋹̸|⋵̸|∉|⋷|⋶|∌|∌|⋾|⋽|∥|⊠|⨱|⨰|&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g},d={};d.xml=w(`lt~<~gt~>~quot~"~apos~'~amp~&`);d.html4=w(`apos~'~OElig~Œ~oelig~œ~Scaron~Š~scaron~š~Yuml~Ÿ~circ~ˆ~tilde~˜~ensp~ ~emsp~ ~thinsp~ ~zwnj~~zwj~~lrm~~rlm~~ndash~–~mdash~—~lsquo~‘~rsquo~’~sbquo~‚~ldquo~“~rdquo~”~bdquo~„~dagger~†~Dagger~‡~permil~‰~lsaquo~‹~rsaquo~›~euro~€~fnof~ƒ~Alpha~Α~Beta~Β~Gamma~Γ~Delta~Δ~Epsilon~Ε~Zeta~Ζ~Eta~Η~Theta~Θ~Iota~Ι~Kappa~Κ~Lambda~Λ~Mu~Μ~Nu~Ν~Xi~Ξ~Omicron~Ο~Pi~Π~Rho~Ρ~Sigma~Σ~Tau~Τ~Upsilon~Υ~Phi~Φ~Chi~Χ~Psi~Ψ~Omega~Ω~alpha~α~beta~β~gamma~γ~delta~δ~epsilon~ε~zeta~ζ~eta~η~theta~θ~iota~ι~kappa~κ~lambda~λ~mu~μ~nu~ν~xi~ξ~omicron~ο~pi~π~rho~ρ~sigmaf~ς~sigma~σ~tau~τ~upsilon~υ~phi~φ~chi~χ~psi~ψ~omega~ω~thetasym~ϑ~upsih~ϒ~piv~ϖ~bull~•~hellip~…~prime~′~Prime~″~oline~‾~frasl~⁄~weierp~℘~image~ℑ~real~ℜ~trade~™~alefsym~ℵ~larr~←~uarr~↑~rarr~→~darr~↓~harr~↔~crarr~↵~lArr~⇐~uArr~⇑~rArr~⇒~dArr~⇓~hArr~⇔~forall~∀~part~∂~exist~∃~empty~∅~nabla~∇~isin~∈~notin~∉~ni~∋~prod~∏~sum~∑~minus~−~lowast~∗~radic~√~prop~∝~infin~∞~ang~∠~and~∧~or~∨~cap~∩~cup~∪~int~∫~there4~∴~sim~∼~cong~≅~asymp~≈~ne~≠~equiv~≡~le~≤~ge~≥~sub~⊂~sup~⊃~nsub~⊄~sube~⊆~supe~⊇~oplus~⊕~otimes~⊗~perp~⊥~sdot~⋅~lceil~⌈~rceil~⌉~lfloor~⌊~rfloor~⌋~lang~〈~rang~〉~loz~◊~spades~♠~clubs~♣~hearts~♥~diams~♦~~nbsp~ ~iexcl~¡~cent~¢~pound~£~curren~¤~yen~¥~brvbar~¦~sect~§~uml~¨~copy~©~ordf~ª~laquo~«~not~¬~shy~~reg~®~macr~¯~deg~°~plusmn~±~sup2~²~sup3~³~acute~´~micro~µ~para~¶~middot~·~cedil~¸~sup1~¹~ordm~º~raquo~»~frac14~¼~frac12~½~frac34~¾~iquest~¿~Agrave~À~Aacute~Á~Acirc~Â~Atilde~Ã~Auml~Ä~Aring~Å~AElig~Æ~Ccedil~Ç~Egrave~È~Eacute~É~Ecirc~Ê~Euml~Ë~Igrave~Ì~Iacute~Í~Icirc~Î~Iuml~Ï~ETH~Ð~Ntilde~Ñ~Ograve~Ò~Oacute~Ó~Ocirc~Ô~Otilde~Õ~Ouml~Ö~times~×~Oslash~Ø~Ugrave~Ù~Uacute~Ú~Ucirc~Û~Uuml~Ü~Yacute~Ý~THORN~Þ~szlig~ß~agrave~à~aacute~á~acirc~â~atilde~ã~auml~ä~aring~å~aelig~æ~ccedil~ç~egrave~è~eacute~é~ecirc~ê~euml~ë~igrave~ì~iacute~í~icirc~î~iuml~ï~eth~ð~ntilde~ñ~ograve~ò~oacute~ó~ocirc~ô~otilde~õ~ouml~ö~divide~÷~oslash~ø~ugrave~ù~uacute~ú~ucirc~û~uuml~ü~yacute~ý~thorn~þ~yuml~ÿ~quot~"~amp~&~lt~<~gt~>`);d.html5=w('Abreve~Ă~Acy~А~Afr~𝔄~Amacr~Ā~And~⩓~Aogon~Ą~Aopf~𝔸~ApplyFunction~~Ascr~𝒜~Assign~≔~Backslash~∖~Barv~⫧~Barwed~⌆~Bcy~Б~Because~∵~Bernoullis~ℬ~Bfr~𝔅~Bopf~𝔹~Breve~˘~Bscr~ℬ~Bumpeq~≎~CHcy~Ч~Cacute~Ć~Cap~⋒~CapitalDifferentialD~ⅅ~Cayleys~ℭ~Ccaron~Č~Ccirc~Ĉ~Cconint~∰~Cdot~Ċ~Cedilla~¸~CenterDot~·~Cfr~ℭ~CircleDot~⊙~CircleMinus~⊖~CirclePlus~⊕~CircleTimes~⊗~ClockwiseContourIntegral~∲~CloseCurlyDoubleQuote~”~CloseCurlyQuote~’~Colon~∷~Colone~⩴~Congruent~≡~Conint~∯~ContourIntegral~∮~Copf~ℂ~Coproduct~∐~CounterClockwiseContourIntegral~∳~Cross~⨯~Cscr~𝒞~Cup~⋓~CupCap~≍~DD~ⅅ~DDotrahd~⤑~DJcy~Ђ~DScy~Ѕ~DZcy~Џ~Darr~↡~Dashv~⫤~Dcaron~Ď~Dcy~Д~Del~∇~Dfr~𝔇~DiacriticalAcute~´~DiacriticalDot~˙~DiacriticalDoubleAcute~˝~DiacriticalGrave~`~DiacriticalTilde~˜~Diamond~⋄~DifferentialD~ⅆ~Dopf~𝔻~Dot~¨~DotDot~⃜~DotEqual~≐~DoubleContourIntegral~∯~DoubleDot~¨~DoubleDownArrow~⇓~DoubleLeftArrow~⇐~DoubleLeftRightArrow~⇔~DoubleLeftTee~⫤~DoubleLongLeftArrow~⟸~DoubleLongLeftRightArrow~⟺~DoubleLongRightArrow~⟹~DoubleRightArrow~⇒~DoubleRightTee~⊨~DoubleUpArrow~⇑~DoubleUpDownArrow~⇕~DoubleVerticalBar~∥~DownArrow~↓~DownArrowBar~⤓~DownArrowUpArrow~⇵~DownBreve~̑~DownLeftRightVector~⥐~DownLeftTeeVector~⥞~DownLeftVector~↽~DownLeftVectorBar~⥖~DownRightTeeVector~⥟~DownRightVector~⇁~DownRightVectorBar~⥗~DownTee~⊤~DownTeeArrow~↧~Downarrow~⇓~Dscr~𝒟~Dstrok~Đ~ENG~Ŋ~Ecaron~Ě~Ecy~Э~Edot~Ė~Efr~𝔈~Element~∈~Emacr~Ē~EmptySmallSquare~◻~EmptyVerySmallSquare~▫~Eogon~Ę~Eopf~𝔼~Equal~⩵~EqualTilde~≂~Equilibrium~⇌~Escr~ℰ~Esim~⩳~Exists~∃~ExponentialE~ⅇ~Fcy~Ф~Ffr~𝔉~FilledSmallSquare~◼~FilledVerySmallSquare~▪~Fopf~𝔽~ForAll~∀~Fouriertrf~ℱ~Fscr~ℱ~GJcy~Ѓ~Gammad~Ϝ~Gbreve~Ğ~Gcedil~Ģ~Gcirc~Ĝ~Gcy~Г~Gdot~Ġ~Gfr~𝔊~Gg~⋙~Gopf~𝔾~GreaterEqual~≥~GreaterEqualLess~⋛~GreaterFullEqual~≧~GreaterGreater~⪢~GreaterLess~≷~GreaterSlantEqual~⩾~GreaterTilde~≳~Gscr~𝒢~Gt~≫~HARDcy~Ъ~Hacek~ˇ~Hat~^~Hcirc~Ĥ~Hfr~ℌ~HilbertSpace~ℋ~Hopf~ℍ~HorizontalLine~─~Hscr~ℋ~Hstrok~Ħ~HumpDownHump~≎~HumpEqual~≏~IEcy~Е~IJlig~IJ~IOcy~Ё~Icy~И~Idot~İ~Ifr~ℑ~Im~ℑ~Imacr~Ī~ImaginaryI~ⅈ~Implies~⇒~Int~∬~Integral~∫~Intersection~⋂~InvisibleComma~~InvisibleTimes~~Iogon~Į~Iopf~𝕀~Iscr~ℐ~Itilde~Ĩ~Iukcy~І~Jcirc~Ĵ~Jcy~Й~Jfr~𝔍~Jopf~𝕁~Jscr~𝒥~Jsercy~Ј~Jukcy~Є~KHcy~Х~KJcy~Ќ~Kcedil~Ķ~Kcy~К~Kfr~𝔎~Kopf~𝕂~Kscr~𝒦~LJcy~Љ~Lacute~Ĺ~Lang~⟪~Laplacetrf~ℒ~Larr~↞~Lcaron~Ľ~Lcedil~Ļ~Lcy~Л~LeftAngleBracket~⟨~LeftArrow~←~LeftArrowBar~⇤~LeftArrowRightArrow~⇆~LeftCeiling~⌈~LeftDoubleBracket~⟦~LeftDownTeeVector~⥡~LeftDownVector~⇃~LeftDownVectorBar~⥙~LeftFloor~⌊~LeftRightArrow~↔~LeftRightVector~⥎~LeftTee~⊣~LeftTeeArrow~↤~LeftTeeVector~⥚~LeftTriangle~⊲~LeftTriangleBar~⧏~LeftTriangleEqual~⊴~LeftUpDownVector~⥑~LeftUpTeeVector~⥠~LeftUpVector~↿~LeftUpVectorBar~⥘~LeftVector~↼~LeftVectorBar~⥒~Leftarrow~⇐~Leftrightarrow~⇔~LessEqualGreater~⋚~LessFullEqual~≦~LessGreater~≶~LessLess~⪡~LessSlantEqual~⩽~LessTilde~≲~Lfr~𝔏~Ll~⋘~Lleftarrow~⇚~Lmidot~Ŀ~LongLeftArrow~⟵~LongLeftRightArrow~⟷~LongRightArrow~⟶~Longleftarrow~⟸~Longleftrightarrow~⟺~Longrightarrow~⟹~Lopf~𝕃~LowerLeftArrow~↙~LowerRightArrow~↘~Lscr~ℒ~Lsh~↰~Lstrok~Ł~Lt~≪~Map~⤅~Mcy~М~MediumSpace~ ~Mellintrf~ℳ~Mfr~𝔐~MinusPlus~∓~Mopf~𝕄~Mscr~ℳ~NJcy~Њ~Nacute~Ń~Ncaron~Ň~Ncedil~Ņ~Ncy~Н~NegativeMediumSpace~~NegativeThickSpace~~NegativeThinSpace~~NegativeVeryThinSpace~~NestedGreaterGreater~≫~NestedLessLess~≪~NewLine~\n~Nfr~𝔑~NoBreak~~NonBreakingSpace~ ~Nopf~ℕ~Not~⫬~NotCongruent~≢~NotCupCap~≭~NotDoubleVerticalBar~∦~NotElement~∉~NotEqual~≠~NotEqualTilde~≂̸~NotExists~∄~NotGreater~≯~NotGreaterEqual~≱~NotGreaterFullEqual~≧̸~NotGreaterGreater~≫̸~NotGreaterLess~≹~NotGreaterSlantEqual~⩾̸~NotGreaterTilde~≵~NotHumpDownHump~≎̸~NotHumpEqual~≏̸~NotLeftTriangle~⋪~NotLeftTriangleBar~⧏̸~NotLeftTriangleEqual~⋬~NotLess~≮~NotLessEqual~≰~NotLessGreater~≸~NotLessLess~≪̸~NotLessSlantEqual~⩽̸~NotLessTilde~≴~NotNestedGreaterGreater~⪢̸~NotNestedLessLess~⪡̸~NotPrecedes~⊀~NotPrecedesEqual~⪯̸~NotPrecedesSlantEqual~⋠~NotReverseElement~∌~NotRightTriangle~⋫~NotRightTriangleBar~⧐̸~NotRightTriangleEqual~⋭~NotSquareSubset~⊏̸~NotSquareSubsetEqual~⋢~NotSquareSuperset~⊐̸~NotSquareSupersetEqual~⋣~NotSubset~⊂⃒~NotSubsetEqual~⊈~NotSucceeds~⊁~NotSucceedsEqual~⪰̸~NotSucceedsSlantEqual~⋡~NotSucceedsTilde~≿̸~NotSuperset~⊃⃒~NotSupersetEqual~⊉~NotTilde~≁~NotTildeEqual~≄~NotTildeFullEqual~≇~NotTildeTilde~≉~NotVerticalBar~∤~Nscr~𝒩~Ocy~О~Odblac~Ő~Ofr~𝔒~Omacr~Ō~Oopf~𝕆~OpenCurlyDoubleQuote~“~OpenCurlyQuote~‘~Or~⩔~Oscr~𝒪~Otimes~⨷~OverBar~‾~OverBrace~⏞~OverBracket~⎴~OverParenthesis~⏜~PartialD~∂~Pcy~П~Pfr~𝔓~PlusMinus~±~Poincareplane~ℌ~Popf~ℙ~Pr~⪻~Precedes~≺~PrecedesEqual~⪯~PrecedesSlantEqual~≼~PrecedesTilde~≾~Product~∏~Proportion~∷~Proportional~∝~Pscr~𝒫~Qfr~𝔔~Qopf~ℚ~Qscr~𝒬~RBarr~⤐~Racute~Ŕ~Rang~⟫~Rarr~↠~Rarrtl~⤖~Rcaron~Ř~Rcedil~Ŗ~Rcy~Р~Re~ℜ~ReverseElement~∋~ReverseEquilibrium~⇋~ReverseUpEquilibrium~⥯~Rfr~ℜ~RightAngleBracket~⟩~RightArrow~→~RightArrowBar~⇥~RightArrowLeftArrow~⇄~RightCeiling~⌉~RightDoubleBracket~⟧~RightDownTeeVector~⥝~RightDownVector~⇂~RightDownVectorBar~⥕~RightFloor~⌋~RightTee~⊢~RightTeeArrow~↦~RightTeeVector~⥛~RightTriangle~⊳~RightTriangleBar~⧐~RightTriangleEqual~⊵~RightUpDownVector~⥏~RightUpTeeVector~⥜~RightUpVector~↾~RightUpVectorBar~⥔~RightVector~⇀~RightVectorBar~⥓~Rightarrow~⇒~Ropf~ℝ~RoundImplies~⥰~Rrightarrow~⇛~Rscr~ℛ~Rsh~↱~RuleDelayed~⧴~SHCHcy~Щ~SHcy~Ш~SOFTcy~Ь~Sacute~Ś~Sc~⪼~Scedil~Ş~Scirc~Ŝ~Scy~С~Sfr~𝔖~ShortDownArrow~↓~ShortLeftArrow~←~ShortRightArrow~→~ShortUpArrow~↑~SmallCircle~∘~Sopf~𝕊~Sqrt~√~Square~□~SquareIntersection~⊓~SquareSubset~⊏~SquareSubsetEqual~⊑~SquareSuperset~⊐~SquareSupersetEqual~⊒~SquareUnion~⊔~Sscr~𝒮~Star~⋆~Sub~⋐~Subset~⋐~SubsetEqual~⊆~Succeeds~≻~SucceedsEqual~⪰~SucceedsSlantEqual~≽~SucceedsTilde~≿~SuchThat~∋~Sum~∑~Sup~⋑~Superset~⊃~SupersetEqual~⊇~Supset~⋑~TRADE~™~TSHcy~Ћ~TScy~Ц~Tab~ ~Tcaron~Ť~Tcedil~Ţ~Tcy~Т~Tfr~𝔗~Therefore~∴~ThickSpace~ ~ThinSpace~ ~Tilde~∼~TildeEqual~≃~TildeFullEqual~≅~TildeTilde~≈~Topf~𝕋~TripleDot~⃛~Tscr~𝒯~Tstrok~Ŧ~Uarr~↟~Uarrocir~⥉~Ubrcy~Ў~Ubreve~Ŭ~Ucy~У~Udblac~Ű~Ufr~𝔘~Umacr~Ū~UnderBar~_~UnderBrace~⏟~UnderBracket~⎵~UnderParenthesis~⏝~Union~⋃~UnionPlus~⊎~Uogon~Ų~Uopf~𝕌~UpArrow~↑~UpArrowBar~⤒~UpArrowDownArrow~⇅~UpDownArrow~↕~UpEquilibrium~⥮~UpTee~⊥~UpTeeArrow~↥~Uparrow~⇑~Updownarrow~⇕~UpperLeftArrow~↖~UpperRightArrow~↗~Upsi~ϒ~Uring~Ů~Uscr~𝒰~Utilde~Ũ~VDash~⊫~Vbar~⫫~Vcy~В~Vdash~⊩~Vdashl~⫦~Vee~⋁~Verbar~‖~Vert~‖~VerticalBar~∣~VerticalLine~|~VerticalSeparator~❘~VerticalTilde~≀~VeryThinSpace~ ~Vfr~𝔙~Vopf~𝕍~Vscr~𝒱~Vvdash~⊪~Wcirc~Ŵ~Wedge~⋀~Wfr~𝔚~Wopf~𝕎~Wscr~𝒲~Xfr~𝔛~Xopf~𝕏~Xscr~𝒳~YAcy~Я~YIcy~Ї~YUcy~Ю~Ycirc~Ŷ~Ycy~Ы~Yfr~𝔜~Yopf~𝕐~Yscr~𝒴~ZHcy~Ж~Zacute~Ź~Zcaron~Ž~Zcy~З~Zdot~Ż~ZeroWidthSpace~~Zfr~ℨ~Zopf~ℤ~Zscr~𝒵~abreve~ă~ac~∾~acE~∾̳~acd~∿~acy~а~af~~afr~𝔞~aleph~ℵ~amacr~ā~amalg~⨿~andand~⩕~andd~⩜~andslope~⩘~andv~⩚~ange~⦤~angle~∠~angmsd~∡~angmsdaa~⦨~angmsdab~⦩~angmsdac~⦪~angmsdad~⦫~angmsdae~⦬~angmsdaf~⦭~angmsdag~⦮~angmsdah~⦯~angrt~∟~angrtvb~⊾~angrtvbd~⦝~angsph~∢~angst~Å~angzarr~⍼~aogon~ą~aopf~𝕒~ap~≈~apE~⩰~apacir~⩯~ape~≊~apid~≋~approx~≈~approxeq~≊~ascr~𝒶~ast~*~asympeq~≍~awconint~∳~awint~⨑~bNot~⫭~backcong~≌~backepsilon~϶~backprime~‵~backsim~∽~backsimeq~⋍~barvee~⊽~barwed~⌅~barwedge~⌅~bbrk~⎵~bbrktbrk~⎶~bcong~≌~bcy~б~becaus~∵~because~∵~bemptyv~⦰~bepsi~϶~bernou~ℬ~beth~ℶ~between~≬~bfr~𝔟~bigcap~⋂~bigcirc~◯~bigcup~⋃~bigodot~⨀~bigoplus~⨁~bigotimes~⨂~bigsqcup~⨆~bigstar~★~bigtriangledown~▽~bigtriangleup~△~biguplus~⨄~bigvee~⋁~bigwedge~⋀~bkarow~⤍~blacklozenge~⧫~blacksquare~▪~blacktriangle~▴~blacktriangledown~▾~blacktriangleleft~◂~blacktriangleright~▸~blank~␣~blk12~▒~blk14~░~blk34~▓~block~█~bne~=⃥~bnequiv~≡⃥~bnot~⌐~bopf~𝕓~bot~⊥~bottom~⊥~bowtie~⋈~boxDL~╗~boxDR~╔~boxDl~╖~boxDr~╓~boxH~═~boxHD~╦~boxHU~╩~boxHd~╤~boxHu~╧~boxUL~╝~boxUR~╚~boxUl~╜~boxUr~╙~boxV~║~boxVH~╬~boxVL~╣~boxVR~╠~boxVh~╫~boxVl~╢~boxVr~╟~boxbox~⧉~boxdL~╕~boxdR~╒~boxdl~┐~boxdr~┌~boxh~─~boxhD~╥~boxhU~╨~boxhd~┬~boxhu~┴~boxminus~⊟~boxplus~⊞~boxtimes~⊠~boxuL~╛~boxuR~╘~boxul~┘~boxur~└~boxv~│~boxvH~╪~boxvL~╡~boxvR~╞~boxvh~┼~boxvl~┤~boxvr~├~bprime~‵~breve~˘~bscr~𝒷~bsemi~⁏~bsim~∽~bsime~⋍~bsol~\\~bsolb~⧅~bsolhsub~⟈~bullet~•~bump~≎~bumpE~⪮~bumpe~≏~bumpeq~≏~cacute~ć~capand~⩄~capbrcup~⩉~capcap~⩋~capcup~⩇~capdot~⩀~caps~∩︀~caret~⁁~caron~ˇ~ccaps~⩍~ccaron~č~ccirc~ĉ~ccups~⩌~ccupssm~⩐~cdot~ċ~cemptyv~⦲~centerdot~·~cfr~𝔠~chcy~ч~check~✓~checkmark~✓~cir~○~cirE~⧃~circeq~≗~circlearrowleft~↺~circlearrowright~↻~circledR~®~circledS~Ⓢ~circledast~⊛~circledcirc~⊚~circleddash~⊝~cire~≗~cirfnint~⨐~cirmid~⫯~cirscir~⧂~clubsuit~♣~colon~:~colone~≔~coloneq~≔~comma~,~commat~@~comp~∁~compfn~∘~complement~∁~complexes~ℂ~congdot~⩭~conint~∮~copf~𝕔~coprod~∐~copysr~℗~cross~✗~cscr~𝒸~csub~⫏~csube~⫑~csup~⫐~csupe~⫒~ctdot~⋯~cudarrl~⤸~cudarrr~⤵~cuepr~⋞~cuesc~⋟~cularr~↶~cularrp~⤽~cupbrcap~⩈~cupcap~⩆~cupcup~⩊~cupdot~⊍~cupor~⩅~cups~∪︀~curarr~↷~curarrm~⤼~curlyeqprec~⋞~curlyeqsucc~⋟~curlyvee~⋎~curlywedge~⋏~curvearrowleft~↶~curvearrowright~↷~cuvee~⋎~cuwed~⋏~cwconint~∲~cwint~∱~cylcty~⌭~dHar~⥥~daleth~ℸ~dash~‐~dashv~⊣~dbkarow~⤏~dblac~˝~dcaron~ď~dcy~д~dd~ⅆ~ddagger~‡~ddarr~⇊~ddotseq~⩷~demptyv~⦱~dfisht~⥿~dfr~𝔡~dharl~⇃~dharr~⇂~diam~⋄~diamond~⋄~diamondsuit~♦~die~¨~digamma~ϝ~disin~⋲~div~÷~divideontimes~⋇~divonx~⋇~djcy~ђ~dlcorn~⌞~dlcrop~⌍~dollar~$~dopf~𝕕~dot~˙~doteq~≐~doteqdot~≑~dotminus~∸~dotplus~∔~dotsquare~⊡~doublebarwedge~⌆~downarrow~↓~downdownarrows~⇊~downharpoonleft~⇃~downharpoonright~⇂~drbkarow~⤐~drcorn~⌟~drcrop~⌌~dscr~𝒹~dscy~ѕ~dsol~⧶~dstrok~đ~dtdot~⋱~dtri~▿~dtrif~▾~duarr~⇵~duhar~⥯~dwangle~⦦~dzcy~џ~dzigrarr~⟿~eDDot~⩷~eDot~≑~easter~⩮~ecaron~ě~ecir~≖~ecolon~≕~ecy~э~edot~ė~ee~ⅇ~efDot~≒~efr~𝔢~eg~⪚~egs~⪖~egsdot~⪘~el~⪙~elinters~⏧~ell~ℓ~els~⪕~elsdot~⪗~emacr~ē~emptyset~∅~emptyv~∅~emsp13~ ~emsp14~ ~eng~ŋ~eogon~ę~eopf~𝕖~epar~⋕~eparsl~⧣~eplus~⩱~epsi~ε~epsiv~ϵ~eqcirc~≖~eqcolon~≕~eqsim~≂~eqslantgtr~⪖~eqslantless~⪕~equals~=~equest~≟~equivDD~⩸~eqvparsl~⧥~erDot~≓~erarr~⥱~escr~ℯ~esdot~≐~esim~≂~excl~!~expectation~ℰ~exponentiale~ⅇ~fallingdotseq~≒~fcy~ф~female~♀~ffilig~ffi~fflig~ff~ffllig~ffl~ffr~𝔣~filig~fi~fjlig~fj~flat~♭~fllig~fl~fltns~▱~fopf~𝕗~fork~⋔~forkv~⫙~fpartint~⨍~frac13~⅓~frac15~⅕~frac16~⅙~frac18~⅛~frac23~⅔~frac25~⅖~frac35~⅗~frac38~⅜~frac45~⅘~frac56~⅚~frac58~⅝~frac78~⅞~frown~⌢~fscr~𝒻~gE~≧~gEl~⪌~gacute~ǵ~gammad~ϝ~gap~⪆~gbreve~ğ~gcirc~ĝ~gcy~г~gdot~ġ~gel~⋛~geq~≥~geqq~≧~geqslant~⩾~ges~⩾~gescc~⪩~gesdot~⪀~gesdoto~⪂~gesdotol~⪄~gesl~⋛︀~gesles~⪔~gfr~𝔤~gg~≫~ggg~⋙~gimel~ℷ~gjcy~ѓ~gl~≷~glE~⪒~gla~⪥~glj~⪤~gnE~≩~gnap~⪊~gnapprox~⪊~gne~⪈~gneq~⪈~gneqq~≩~gnsim~⋧~gopf~𝕘~grave~`~gscr~ℊ~gsim~≳~gsime~⪎~gsiml~⪐~gtcc~⪧~gtcir~⩺~gtdot~⋗~gtlPar~⦕~gtquest~⩼~gtrapprox~⪆~gtrarr~⥸~gtrdot~⋗~gtreqless~⋛~gtreqqless~⪌~gtrless~≷~gtrsim~≳~gvertneqq~≩︀~gvnE~≩︀~hairsp~ ~half~½~hamilt~ℋ~hardcy~ъ~harrcir~⥈~harrw~↭~hbar~ℏ~hcirc~ĥ~heartsuit~♥~hercon~⊹~hfr~𝔥~hksearow~⤥~hkswarow~⤦~hoarr~⇿~homtht~∻~hookleftarrow~↩~hookrightarrow~↪~hopf~𝕙~horbar~―~hscr~𝒽~hslash~ℏ~hstrok~ħ~hybull~⁃~hyphen~‐~ic~~icy~и~iecy~е~iff~⇔~ifr~𝔦~ii~ⅈ~iiiint~⨌~iiint~∭~iinfin~⧜~iiota~℩~ijlig~ij~imacr~ī~imagline~ℐ~imagpart~ℑ~imath~ı~imof~⊷~imped~Ƶ~in~∈~incare~℅~infintie~⧝~inodot~ı~intcal~⊺~integers~ℤ~intercal~⊺~intlarhk~⨗~intprod~⨼~iocy~ё~iogon~į~iopf~𝕚~iprod~⨼~iscr~𝒾~isinE~⋹~isindot~⋵~isins~⋴~isinsv~⋳~isinv~∈~it~~itilde~ĩ~iukcy~і~jcirc~ĵ~jcy~й~jfr~𝔧~jmath~ȷ~jopf~𝕛~jscr~𝒿~jsercy~ј~jukcy~є~kappav~ϰ~kcedil~ķ~kcy~к~kfr~𝔨~kgreen~ĸ~khcy~х~kjcy~ќ~kopf~𝕜~kscr~𝓀~lAarr~⇚~lAtail~⤛~lBarr~⤎~lE~≦~lEg~⪋~lHar~⥢~lacute~ĺ~laemptyv~⦴~lagran~ℒ~langd~⦑~langle~⟨~lap~⪅~larrb~⇤~larrbfs~⤟~larrfs~⤝~larrhk~↩~larrlp~↫~larrpl~⤹~larrsim~⥳~larrtl~↢~lat~⪫~latail~⤙~late~⪭~lates~⪭︀~lbarr~⤌~lbbrk~❲~lbrace~{~lbrack~[~lbrke~⦋~lbrksld~⦏~lbrkslu~⦍~lcaron~ľ~lcedil~ļ~lcub~{~lcy~л~ldca~⤶~ldquor~„~ldrdhar~⥧~ldrushar~⥋~ldsh~↲~leftarrow~←~leftarrowtail~↢~leftharpoondown~↽~leftharpoonup~↼~leftleftarrows~⇇~leftrightarrow~↔~leftrightarrows~⇆~leftrightharpoons~⇋~leftrightsquigarrow~↭~leftthreetimes~⋋~leg~⋚~leq~≤~leqq~≦~leqslant~⩽~les~⩽~lescc~⪨~lesdot~⩿~lesdoto~⪁~lesdotor~⪃~lesg~⋚︀~lesges~⪓~lessapprox~⪅~lessdot~⋖~lesseqgtr~⋚~lesseqqgtr~⪋~lessgtr~≶~lesssim~≲~lfisht~⥼~lfr~𝔩~lg~≶~lgE~⪑~lhard~↽~lharu~↼~lharul~⥪~lhblk~▄~ljcy~љ~ll~≪~llarr~⇇~llcorner~⌞~llhard~⥫~lltri~◺~lmidot~ŀ~lmoust~⎰~lmoustache~⎰~lnE~≨~lnap~⪉~lnapprox~⪉~lne~⪇~lneq~⪇~lneqq~≨~lnsim~⋦~loang~⟬~loarr~⇽~lobrk~⟦~longleftarrow~⟵~longleftrightarrow~⟷~longmapsto~⟼~longrightarrow~⟶~looparrowleft~↫~looparrowright~↬~lopar~⦅~lopf~𝕝~loplus~⨭~lotimes~⨴~lowbar~_~lozenge~◊~lozf~⧫~lpar~(~lparlt~⦓~lrarr~⇆~lrcorner~⌟~lrhar~⇋~lrhard~⥭~lrtri~⊿~lscr~𝓁~lsh~↰~lsim~≲~lsime~⪍~lsimg~⪏~lsqb~[~lsquor~‚~lstrok~ł~ltcc~⪦~ltcir~⩹~ltdot~⋖~lthree~⋋~ltimes~⋉~ltlarr~⥶~ltquest~⩻~ltrPar~⦖~ltri~◃~ltrie~⊴~ltrif~◂~lurdshar~⥊~luruhar~⥦~lvertneqq~≨︀~lvnE~≨︀~mDDot~∺~male~♂~malt~✠~maltese~✠~map~↦~mapsto~↦~mapstodown~↧~mapstoleft~↤~mapstoup~↥~marker~▮~mcomma~⨩~mcy~м~measuredangle~∡~mfr~𝔪~mho~℧~mid~∣~midast~*~midcir~⫰~minusb~⊟~minusd~∸~minusdu~⨪~mlcp~⫛~mldr~…~mnplus~∓~models~⊧~mopf~𝕞~mp~∓~mscr~𝓂~mstpos~∾~multimap~⊸~mumap~⊸~nGg~⋙̸~nGt~≫⃒~nGtv~≫̸~nLeftarrow~⇍~nLeftrightarrow~⇎~nLl~⋘̸~nLt~≪⃒~nLtv~≪̸~nRightarrow~⇏~nVDash~⊯~nVdash~⊮~nacute~ń~nang~∠⃒~nap~≉~napE~⩰̸~napid~≋̸~napos~ʼn~napprox~≉~natur~♮~natural~♮~naturals~ℕ~nbump~≎̸~nbumpe~≏̸~ncap~⩃~ncaron~ň~ncedil~ņ~ncong~≇~ncongdot~⩭̸~ncup~⩂~ncy~н~neArr~⇗~nearhk~⤤~nearr~↗~nearrow~↗~nedot~≐̸~nequiv~≢~nesear~⤨~nesim~≂̸~nexist~∄~nexists~∄~nfr~𝔫~ngE~≧̸~nge~≱~ngeq~≱~ngeqq~≧̸~ngeqslant~⩾̸~nges~⩾̸~ngsim~≵~ngt~≯~ngtr~≯~nhArr~⇎~nharr~↮~nhpar~⫲~nis~⋼~nisd~⋺~niv~∋~njcy~њ~nlArr~⇍~nlE~≦̸~nlarr~↚~nldr~‥~nle~≰~nleftarrow~↚~nleftrightarrow~↮~nleq~≰~nleqq~≦̸~nleqslant~⩽̸~nles~⩽̸~nless~≮~nlsim~≴~nlt~≮~nltri~⋪~nltrie~⋬~nmid~∤~nopf~𝕟~notinE~⋹̸~notindot~⋵̸~notinva~∉~notinvb~⋷~notinvc~⋶~notni~∌~notniva~∌~notnivb~⋾~notnivc~⋽~npar~∦~nparallel~∦~nparsl~⫽⃥~npart~∂̸~npolint~⨔~npr~⊀~nprcue~⋠~npre~⪯̸~nprec~⊀~npreceq~⪯̸~nrArr~⇏~nrarr~↛~nrarrc~⤳̸~nrarrw~↝̸~nrightarrow~↛~nrtri~⋫~nrtrie~⋭~nsc~⊁~nsccue~⋡~nsce~⪰̸~nscr~𝓃~nshortmid~∤~nshortparallel~∦~nsim~≁~nsime~≄~nsimeq~≄~nsmid~∤~nspar~∦~nsqsube~⋢~nsqsupe~⋣~nsubE~⫅̸~nsube~⊈~nsubset~⊂⃒~nsubseteq~⊈~nsubseteqq~⫅̸~nsucc~⊁~nsucceq~⪰̸~nsup~⊅~nsupE~⫆̸~nsupe~⊉~nsupset~⊃⃒~nsupseteq~⊉~nsupseteqq~⫆̸~ntgl~≹~ntlg~≸~ntriangleleft~⋪~ntrianglelefteq~⋬~ntriangleright~⋫~ntrianglerighteq~⋭~num~#~numero~№~numsp~ ~nvDash~⊭~nvHarr~⤄~nvap~≍⃒~nvdash~⊬~nvge~≥⃒~nvgt~>⃒~nvinfin~⧞~nvlArr~⤂~nvle~≤⃒~nvlt~<⃒~nvltrie~⊴⃒~nvrArr~⤃~nvrtrie~⊵⃒~nvsim~∼⃒~nwArr~⇖~nwarhk~⤣~nwarr~↖~nwarrow~↖~nwnear~⤧~oS~Ⓢ~oast~⊛~ocir~⊚~ocy~о~odash~⊝~odblac~ő~odiv~⨸~odot~⊙~odsold~⦼~ofcir~⦿~ofr~𝔬~ogon~˛~ogt~⧁~ohbar~⦵~ohm~Ω~oint~∮~olarr~↺~olcir~⦾~olcross~⦻~olt~⧀~omacr~ō~omid~⦶~ominus~⊖~oopf~𝕠~opar~⦷~operp~⦹~orarr~↻~ord~⩝~order~ℴ~orderof~ℴ~origof~⊶~oror~⩖~orslope~⩗~orv~⩛~oscr~ℴ~osol~⊘~otimesas~⨶~ovbar~⌽~par~∥~parallel~∥~parsim~⫳~parsl~⫽~pcy~п~percnt~%~period~.~pertenk~‱~pfr~𝔭~phiv~ϕ~phmmat~ℳ~phone~☎~pitchfork~⋔~planck~ℏ~planckh~ℎ~plankv~ℏ~plus~+~plusacir~⨣~plusb~⊞~pluscir~⨢~plusdo~∔~plusdu~⨥~pluse~⩲~plussim~⨦~plustwo~⨧~pm~±~pointint~⨕~popf~𝕡~pr~≺~prE~⪳~prap~⪷~prcue~≼~pre~⪯~prec~≺~precapprox~⪷~preccurlyeq~≼~preceq~⪯~precnapprox~⪹~precneqq~⪵~precnsim~⋨~precsim~≾~primes~ℙ~prnE~⪵~prnap~⪹~prnsim~⋨~profalar~⌮~profline~⌒~profsurf~⌓~propto~∝~prsim~≾~prurel~⊰~pscr~𝓅~puncsp~ ~qfr~𝔮~qint~⨌~qopf~𝕢~qprime~⁗~qscr~𝓆~quaternions~ℍ~quatint~⨖~quest~?~questeq~≟~rAarr~⇛~rAtail~⤜~rBarr~⤏~rHar~⥤~race~∽̱~racute~ŕ~raemptyv~⦳~rangd~⦒~range~⦥~rangle~⟩~rarrap~⥵~rarrb~⇥~rarrbfs~⤠~rarrc~⤳~rarrfs~⤞~rarrhk~↪~rarrlp~↬~rarrpl~⥅~rarrsim~⥴~rarrtl~↣~rarrw~↝~ratail~⤚~ratio~∶~rationals~ℚ~rbarr~⤍~rbbrk~❳~rbrace~}~rbrack~]~rbrke~⦌~rbrksld~⦎~rbrkslu~⦐~rcaron~ř~rcedil~ŗ~rcub~}~rcy~р~rdca~⤷~rdldhar~⥩~rdquor~”~rdsh~↳~realine~ℛ~realpart~ℜ~reals~ℝ~rect~▭~rfisht~⥽~rfr~𝔯~rhard~⇁~rharu~⇀~rharul~⥬~rhov~ϱ~rightarrow~→~rightarrowtail~↣~rightharpoondown~⇁~rightharpoonup~⇀~rightleftarrows~⇄~rightleftharpoons~⇌~rightrightarrows~⇉~rightsquigarrow~↝~rightthreetimes~⋌~ring~˚~risingdotseq~≓~rlarr~⇄~rlhar~⇌~rmoust~⎱~rmoustache~⎱~rnmid~⫮~roang~⟭~roarr~⇾~robrk~⟧~ropar~⦆~ropf~𝕣~roplus~⨮~rotimes~⨵~rpar~)~rpargt~⦔~rppolint~⨒~rrarr~⇉~rscr~𝓇~rsh~↱~rsqb~]~rsquor~’~rthree~⋌~rtimes~⋊~rtri~▹~rtrie~⊵~rtrif~▸~rtriltri~⧎~ruluhar~⥨~rx~℞~sacute~ś~sc~≻~scE~⪴~scap~⪸~sccue~≽~sce~⪰~scedil~ş~scirc~ŝ~scnE~⪶~scnap~⪺~scnsim~⋩~scpolint~⨓~scsim~≿~scy~с~sdotb~⊡~sdote~⩦~seArr~⇘~searhk~⤥~searr~↘~searrow~↘~semi~;~seswar~⤩~setminus~∖~setmn~∖~sext~✶~sfr~𝔰~sfrown~⌢~sharp~♯~shchcy~щ~shcy~ш~shortmid~∣~shortparallel~∥~sigmav~ς~simdot~⩪~sime~≃~simeq~≃~simg~⪞~simgE~⪠~siml~⪝~simlE~⪟~simne~≆~simplus~⨤~simrarr~⥲~slarr~←~smallsetminus~∖~smashp~⨳~smeparsl~⧤~smid~∣~smile~⌣~smt~⪪~smte~⪬~smtes~⪬︀~softcy~ь~sol~/~solb~⧄~solbar~⌿~sopf~𝕤~spadesuit~♠~spar~∥~sqcap~⊓~sqcaps~⊓︀~sqcup~⊔~sqcups~⊔︀~sqsub~⊏~sqsube~⊑~sqsubset~⊏~sqsubseteq~⊑~sqsup~⊐~sqsupe~⊒~sqsupset~⊐~sqsupseteq~⊒~squ~□~square~□~squarf~▪~squf~▪~srarr~→~sscr~𝓈~ssetmn~∖~ssmile~⌣~sstarf~⋆~star~☆~starf~★~straightepsilon~ϵ~straightphi~ϕ~strns~¯~subE~⫅~subdot~⪽~subedot~⫃~submult~⫁~subnE~⫋~subne~⊊~subplus~⪿~subrarr~⥹~subset~⊂~subseteq~⊆~subseteqq~⫅~subsetneq~⊊~subsetneqq~⫋~subsim~⫇~subsub~⫕~subsup~⫓~succ~≻~succapprox~⪸~succcurlyeq~≽~succeq~⪰~succnapprox~⪺~succneqq~⪶~succnsim~⋩~succsim~≿~sung~♪~supE~⫆~supdot~⪾~supdsub~⫘~supedot~⫄~suphsol~⟉~suphsub~⫗~suplarr~⥻~supmult~⫂~supnE~⫌~supne~⊋~supplus~⫀~supset~⊃~supseteq~⊇~supseteqq~⫆~supsetneq~⊋~supsetneqq~⫌~supsim~⫈~supsub~⫔~supsup~⫖~swArr~⇙~swarhk~⤦~swarr~↙~swarrow~↙~swnwar~⤪~target~⌖~tbrk~⎴~tcaron~ť~tcedil~ţ~tcy~т~tdot~⃛~telrec~⌕~tfr~𝔱~therefore~∴~thetav~ϑ~thickapprox~≈~thicksim~∼~thkap~≈~thksim~∼~timesb~⊠~timesbar~⨱~timesd~⨰~tint~∭~toea~⤨~top~⊤~topbot~⌶~topcir~⫱~topf~𝕥~topfork~⫚~tosa~⤩~tprime~‴~triangle~▵~triangledown~▿~triangleleft~◃~trianglelefteq~⊴~triangleq~≜~triangleright~▹~trianglerighteq~⊵~tridot~◬~trie~≜~triminus~⨺~triplus~⨹~trisb~⧍~tritime~⨻~trpezium~⏢~tscr~𝓉~tscy~ц~tshcy~ћ~tstrok~ŧ~twixt~≬~twoheadleftarrow~↞~twoheadrightarrow~↠~uHar~⥣~ubrcy~ў~ubreve~ŭ~ucy~у~udarr~⇅~udblac~ű~udhar~⥮~ufisht~⥾~ufr~𝔲~uharl~↿~uharr~↾~uhblk~▀~ulcorn~⌜~ulcorner~⌜~ulcrop~⌏~ultri~◸~umacr~ū~uogon~ų~uopf~𝕦~uparrow~↑~updownarrow~↕~upharpoonleft~↿~upharpoonright~↾~uplus~⊎~upsi~υ~upuparrows~⇈~urcorn~⌝~urcorner~⌝~urcrop~⌎~uring~ů~urtri~◹~uscr~𝓊~utdot~⋰~utilde~ũ~utri~▵~utrif~▴~uuarr~⇈~uwangle~⦧~vArr~⇕~vBar~⫨~vBarv~⫩~vDash~⊨~vangrt~⦜~varepsilon~ϵ~varkappa~ϰ~varnothing~∅~varphi~ϕ~varpi~ϖ~varpropto~∝~varr~↕~varrho~ϱ~varsigma~ς~varsubsetneq~⊊︀~varsubsetneqq~⫋︀~varsupsetneq~⊋︀~varsupsetneqq~⫌︀~vartheta~ϑ~vartriangleleft~⊲~vartriangleright~⊳~vcy~в~vdash~⊢~vee~∨~veebar~⊻~veeeq~≚~vellip~⋮~verbar~|~vert~|~vfr~𝔳~vltri~⊲~vnsub~⊂⃒~vnsup~⊃⃒~vopf~𝕧~vprop~∝~vrtri~⊳~vscr~𝓋~vsubnE~⫋︀~vsubne~⊊︀~vsupnE~⫌︀~vsupne~⊋︀~vzigzag~⦚~wcirc~ŵ~wedbar~⩟~wedge~∧~wedgeq~≙~wfr~𝔴~wopf~𝕨~wp~℘~wr~≀~wreath~≀~wscr~𝓌~xcap~⋂~xcirc~◯~xcup~⋃~xdtri~▽~xfr~𝔵~xhArr~⟺~xharr~⟷~xlArr~⟸~xlarr~⟵~xmap~⟼~xnis~⋻~xodot~⨀~xopf~𝕩~xoplus~⨁~xotime~⨂~xrArr~⟹~xrarr~⟶~xscr~𝓍~xsqcup~⨆~xuplus~⨄~xutri~△~xvee~⋁~xwedge~⋀~yacy~я~ycirc~ŷ~ycy~ы~yfr~𝔶~yicy~ї~yopf~𝕪~yscr~𝓎~yucy~ю~zacute~ź~zcaron~ž~zcy~з~zdot~ż~zeetrf~ℨ~zfr~𝔷~zhcy~ж~zigrarr~⇝~zopf~𝕫~zscr~𝓏~~AMP~&~COPY~©~GT~>~LT~<~QUOT~"~REG~®',d.html4);var S={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376},T=String.fromCodePoint||function(r){return String.fromCharCode(Math.floor((r-65536)/1024)+55296,(r-65536)%1024+56320)},R=String.prototype.codePointAt?function(r,e){return r.codePointAt(e)}:function(r,e){return(r.charCodeAt(e)-55296)*1024+r.charCodeAt(e+1)-56320+65536},m=function(){return m=Object.assign||function(r){for(var e,a=1,o=arguments.length;a<o;a++){e=arguments[a];for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[t]=e[t])}return r},m.apply(this,arguments)},y=m(m({},d),{all:d.html5}),N={specialChars:/[<>'"&]/g,nonAscii:/[<>'"&\u0080-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintable:/[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,nonAsciiPrintableOnly:/[\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g,extensive:/[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF\uDC00-\uDFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]?/g},F={mode:"specialChars",level:"all",numeric:"decimal"};function O(r,e){var a=e===void 0?F:e,o=a.mode,t=o===void 0?"specialChars":o,s=a.numeric,i=s===void 0?"decimal":s,c=a.level,l=c===void 0?"all":c;if(!r)return"";var u=N[t],n=y[l].characters,p=i==="hexadecimal";return String.prototype.replace.call(r,u,function(f){var h=n[f];if(!h){var x=f.length>1?R(f,0):f.charCodeAt(0);h=(p?"&#x"+x.toString(16):"&#"+x)+";"}return h})}var C={scope:"body",level:"all"},q=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g,v=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g,D={xml:{strict:q,attribute:v,body:b.xml},html4:{strict:q,attribute:v,body:b.html4},html5:{strict:q,attribute:v,body:b.html5}},U=m(m({},D),{all:D.html5}),E=String.fromCharCode,V=E(65533),B={level:"all"};function A(r,e,a,o){var t=r,s=r[r.length-1];if(a&&s==="=")t=r;else if(o&&s!==";")t=r;else{var i=e[r];if(i)t=i;else if(r[0]==="&"&&r[1]==="#"){var c=r[2],l=c=="x"||c=="X"?parseInt(r.substr(3),16):parseInt(r.substr(2));t=l>=1114111?V:l>65535?T(l):E(S[l]||l)}}return t}function G(r,e){var a=e===void 0?B:e,o=a.level,t=o===void 0?"all":o;return r?A(r,y[t].entities,!1,!1):""}function P(r,e){var a=e===void 0?C:e,o=a.level,t=o===void 0?"all":o,s=a.scope,i=s===void 0?t==="xml"?"strict":"body":s;if(!r)return"";var c=U[t][i],l=y[t].entities,u=i==="attribute",n=i==="strict";return r.replace(c,function(p){return A(p,l,u,n)})}export{P as decode,G as decodeEntity,O as encode};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function f(n){const e=/(\0)|([\x01-\x1f\x7f]|(?<=^-?)\d)|(^-$|[ -,.\/:-@\[-^`\{-~])/g;return n.replaceAll(e,(c,o,t,r)=>o!=null?"�":t!=null?u(t):l(r))}function u(n){return`\\${n.codePointAt(0).toString(16)} `}function l(n){return"\\"+n}export{f as escapeCss};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const r=/[&"'<]/g,g=/[&<]/g,i=(c,o=!1)=>{const t=String(c??""),e=o?r:g;e.lastIndex=0;let a="",s=0;for(;e.test(t);){const l=e.lastIndex-1,n=t[l];a+=t.slice(s,l)+(n==="&"?"&":n==='"'?""":n==="'"?"'":"<"),s=l+1}return a+t.slice(s)};export{i as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function a(t,r={}){const{space:e}=r;return JSON.stringify(t,null,e).replaceAll(/[\u2028\u2029]|<(?=!--|\/?script)/gi,n=>String.raw`\u${n.charCodeAt(0).toString(16).padStart(4,"0")}`)}export{a as escapeJs};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as a}from"./_commonjsHelpers-CWAkuNXM.js";var t,e;function r(){return e||(e=1,t=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","math","menu","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","script","search","section","select","selectedcontent","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"]),t}var o=r();const i=a(o);export{i as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as i}from"./_commonjsHelpers-CWAkuNXM.js";var e,a;function l(){return a||(a=1,e=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","math","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","search","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"]),e}var r,s;function n(){return s||(s=1,r=l()),r}var d=n();const m=i(d),u=/\s?<!doctype html>|<html\b[^>]*>|<body\b[^>]*>|<x-[^>]+>/i,c=[...m].sort((t,o)=>t.length-o.length),p=new RegExp(c.map(t=>`<${t}\\b[^>]*>`).join("|"),"i");function h(t){return t=t.trim().slice(0,1e3),t.includes("\0")||!t.includes("<")?!1:u.test(t)||p.test(t)}export{h as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const u=["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"],D=/^[a-z](?:[-.0-9_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF]|[\u{10000}-\u{EFFFF}])*-(?:[-.0-9_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF]|[\u{10000}-\u{EFFFF}])*$/u;function n(F){return!u.includes(F)&&D.test(F)}export{n as isValidCustomElementName};
|