@ryupold/vode 1.1.9 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -3
- package/dist/vode.js +233 -112
- package/dist/vode.min.js +1 -1
- package/dist/vode.min.mjs +1 -1
- package/dist/vode.mjs +232 -116
- package/index.ts +5 -1
- package/package.json +4 -4
- package/src/merge-class.ts +62 -0
- package/src/state-context.ts +228 -0
- package/src/vode-tags.ts +204 -203
- package/src/vode.ts +154 -164
- package/tsconfig.json +1 -2
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { AnimatedPatch, DeepPartial, PatchableState, RenderPatch } from "./vode.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Generates dot-notation path strings for all nested properties in an object type.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* type User = { profile: { settings: { theme: string } } };
|
|
8
|
+
* type Paths = KeyPath<User>; // "profile" | "profile.settings" | "profile.settings.theme"
|
|
9
|
+
*/
|
|
10
|
+
export type KeyPath<ObjectType extends object> =
|
|
11
|
+
{ [Key in keyof ObjectType & (string | number)]: ObjectType[Key] extends object
|
|
12
|
+
? `${Key}` | `${Key}.${KeyPath<ObjectType[Key]>}`
|
|
13
|
+
: `${Key}`
|
|
14
|
+
}[keyof ObjectType & (string | number)];
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Extracts the value type at a given dot-notation path in an object type.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* type User = { profile: { settings: { theme: string } } };
|
|
21
|
+
* type Theme = PathValue<User, "profile.settings.theme">; // string
|
|
22
|
+
*/
|
|
23
|
+
export type PathValue<T, P extends string> =
|
|
24
|
+
P extends `${infer Key}.${infer Rest}`
|
|
25
|
+
? Key extends keyof T ? PathValue<T[Key], Rest> : never
|
|
26
|
+
: P extends keyof T ? T[P] : never;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Maps valid paths in an object type to paths that resolve to a specific substate type.
|
|
30
|
+
* Used for type-safe path constraints in StateContext.
|
|
31
|
+
* Ensures exact type matching (not just compatibility).
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* type User = { profile: { name: string, settings: { theme: string } } };
|
|
35
|
+
* type SettingsPaths = KeyToSubState<User, { theme: string }>; // "profile.settings"
|
|
36
|
+
* type InvalidPath = KeyToSubState<User, { theme: string }, "profile">; // never (type mismatch)
|
|
37
|
+
*/
|
|
38
|
+
export type KeyToSubState<S extends object, Sub, K = KeyPath<S>> =
|
|
39
|
+
K extends KeyPath<S> ? [PathValue<S, K>] extends [Sub] ? [Sub] extends [PathValue<S, K>] ? K
|
|
40
|
+
: never : never : never;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* State context for type-safe access and manipulation of nested state paths
|
|
44
|
+
* while still be able to access the parent state.
|
|
45
|
+
*/
|
|
46
|
+
export interface StateContext<S extends PatchableState, SubState> extends SubStateContext<SubState> {
|
|
47
|
+
/**
|
|
48
|
+
* parent state
|
|
49
|
+
* @see PatchableState<S>
|
|
50
|
+
*/
|
|
51
|
+
get state(): S;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* State context for type-safe access and manipulation of nested sub-state values without knowledge of the parent state.
|
|
56
|
+
*/
|
|
57
|
+
export interface SubStateContext<SubState> {
|
|
58
|
+
/**
|
|
59
|
+
* Reads the current value of the substate if it exists.
|
|
60
|
+
*
|
|
61
|
+
* @returns The current value, or undefined if the path doesn't exist
|
|
62
|
+
*/
|
|
63
|
+
get(): SubState | undefined;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Updates the nested sub-state value WITHOUT triggering a render.
|
|
67
|
+
* This performs a silent mutation of the parent state object.
|
|
68
|
+
*
|
|
69
|
+
* @param {DeepPartial<SubState>} value - The new value or partial update to apply
|
|
70
|
+
*/
|
|
71
|
+
put(value: SubState | DeepPartial<SubState> | undefined | null): void;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Updates the nested sub-state value AND triggers a render.
|
|
75
|
+
* This is the recommended way to update nested state in most cases.
|
|
76
|
+
*
|
|
77
|
+
* @param value - The new value or partial update to apply
|
|
78
|
+
*/
|
|
79
|
+
patch(value: SubState | DeepPartial<SubState> | Array<DeepPartial<SubState>> | undefined | null): void;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Provides type-safe access to deeply nested state with path-based operations.
|
|
84
|
+
*
|
|
85
|
+
* **When to use:**
|
|
86
|
+
* - State is deeply nested
|
|
87
|
+
* - Multiple components access the same nested path
|
|
88
|
+
* - You need type safety for nested updates
|
|
89
|
+
*
|
|
90
|
+
* **When to avoid:**
|
|
91
|
+
* - Shallow state structures for main state
|
|
92
|
+
* - State structure changes frequently
|
|
93
|
+
* - Learning vode for the first time (start simpler)
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const state = createState({
|
|
98
|
+
* user: {
|
|
99
|
+
* profile: {
|
|
100
|
+
* settings: { theme: 'dark', lang: 'en' }
|
|
101
|
+
* }
|
|
102
|
+
* }
|
|
103
|
+
* });
|
|
104
|
+
* app(element, state, (s) => [DIV]);
|
|
105
|
+
*
|
|
106
|
+
* // Create a context for the nested settings
|
|
107
|
+
* const settingsCtx = new StateContext(state, 'user.profile.settings');
|
|
108
|
+
*
|
|
109
|
+
* // Read current value
|
|
110
|
+
* const settings = settingsCtx.get(); // { theme: 'dark', lang: 'en' }
|
|
111
|
+
*
|
|
112
|
+
* // Update and trigger render
|
|
113
|
+
* settingsCtx.patch({ theme: 'light' });
|
|
114
|
+
*
|
|
115
|
+
* // Update without render (silent mutation)
|
|
116
|
+
* settingsCtx.put({ lang: 'de' });
|
|
117
|
+
* state.patch({}); // trigger render manually later
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* @template S - The root state type (must extend PatchableState)
|
|
121
|
+
* @template SubState - The type of the nested state being accessed
|
|
122
|
+
*/
|
|
123
|
+
export class KeyStateContext<S extends PatchableState, SubState>
|
|
124
|
+
implements StateContext<S, SubState> {
|
|
125
|
+
private readonly keys: string[];
|
|
126
|
+
|
|
127
|
+
constructor(
|
|
128
|
+
public readonly state: S,
|
|
129
|
+
public readonly path: KeyToSubState<S, SubState>
|
|
130
|
+
) {
|
|
131
|
+
this.keys = path.split('.');
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
get(): SubState | undefined {
|
|
135
|
+
const keys = this.keys;
|
|
136
|
+
let raw = this.state ? (<any>this.state)[keys[0]] : undefined;
|
|
137
|
+
for (let i = 1; i < keys.length && !!raw; i++) {
|
|
138
|
+
raw = raw[keys[i]];
|
|
139
|
+
}
|
|
140
|
+
return raw;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
put(value: SubState | DeepPartial<SubState> | undefined | null) {
|
|
144
|
+
this.putDeep(value, this.state);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
patch(value: SubState | DeepPartial<SubState> | Array<DeepPartial<SubState>> | undefined | null) {
|
|
148
|
+
if (Array.isArray(value)) {
|
|
149
|
+
const animation: AnimatedPatch<S> = [];
|
|
150
|
+
for(const v of value){
|
|
151
|
+
animation.push(this.createPatch(v));
|
|
152
|
+
}
|
|
153
|
+
this.state.patch(animation);
|
|
154
|
+
}
|
|
155
|
+
this.state.patch(this.createPatch(value as DeepPartial<SubState>));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Creates a render-patch for the parent state by setting a nested sub-state value while creating necessary structure.
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```typescript
|
|
163
|
+
* const ctx = new StateContext(state, 'user.profile.settings');
|
|
164
|
+
* const patch = ctx.createPatch({ theme: 'light' });
|
|
165
|
+
* // patch is { user: { profile: { settings: { theme: 'light' } } } }
|
|
166
|
+
* ```
|
|
167
|
+
*
|
|
168
|
+
* @param value
|
|
169
|
+
* @returns {{key-path}:{...: value}} render-patch for the parent state
|
|
170
|
+
*/
|
|
171
|
+
createPatch(value: SubState | DeepPartial<SubState> | undefined | null): RenderPatch<S> {
|
|
172
|
+
const renderPatch: DeepPartial<S> = {};
|
|
173
|
+
this.putDeep(value, renderPatch);
|
|
174
|
+
return renderPatch;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
private putDeep(value: SubState | DeepPartial<SubState> | undefined | null, target: S | DeepPartial<S>) {
|
|
178
|
+
const keys = this.keys;
|
|
179
|
+
if (keys.length > 1) {
|
|
180
|
+
let i = 0;
|
|
181
|
+
let raw = (<any>target)[keys[i]];
|
|
182
|
+
if (typeof raw !== "object" || raw === null) {
|
|
183
|
+
(<any>target)[keys[i]] = raw = {};
|
|
184
|
+
}
|
|
185
|
+
for (i = 1; i < keys.length - 1; i++) {
|
|
186
|
+
const p = raw;
|
|
187
|
+
raw = raw[keys[i]];
|
|
188
|
+
if (typeof raw !== "object" || raw === null) {
|
|
189
|
+
p[keys[i]] = raw = {};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
raw[keys[i]] = value;
|
|
193
|
+
} else {
|
|
194
|
+
if (typeof (<any>target)[keys[0]] === "object" && typeof value === "object")
|
|
195
|
+
Object.assign((<any>target)[keys[0]], value);
|
|
196
|
+
else
|
|
197
|
+
(<any>target)[keys[0]] = value;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Provides type-safe access to sub-state with fetch & store delegate functions.
|
|
204
|
+
* Implementer is responsible for reading/writing the sub-state correctly.
|
|
205
|
+
*
|
|
206
|
+
* **When to use:**
|
|
207
|
+
* - State structure is dynamic or complex
|
|
208
|
+
* - You need custom logic for accessing nested state
|
|
209
|
+
* - You want to encapsulate access logic outside of parent state
|
|
210
|
+
*
|
|
211
|
+
* **When to avoid:**
|
|
212
|
+
* - Simple, static state structures
|
|
213
|
+
* - You want automatic path-based access (use KeyStateContext instead)
|
|
214
|
+
* - Learning vode for the first time (start simpler)
|
|
215
|
+
*/
|
|
216
|
+
export class DelegateStateContext<S extends PatchableState, SubState>
|
|
217
|
+
implements StateContext<S, SubState> {
|
|
218
|
+
constructor(
|
|
219
|
+
public readonly state: S,
|
|
220
|
+
|
|
221
|
+
public readonly get: () => SubState | undefined,
|
|
222
|
+
|
|
223
|
+
public readonly put: (value: SubState | DeepPartial<SubState> | undefined | null) => void,
|
|
224
|
+
|
|
225
|
+
public readonly patch: (value: SubState | DeepPartial<SubState> | Array<DeepPartial<SubState>> | undefined | null) => void,
|
|
226
|
+
) {
|
|
227
|
+
}
|
|
228
|
+
}
|
package/src/vode-tags.ts
CHANGED
|
@@ -1,207 +1,208 @@
|
|
|
1
1
|
import { Tag } from "./vode.js";
|
|
2
2
|
|
|
3
|
-
//=== HTML
|
|
4
|
-
export const A: Tag = "a";
|
|
5
|
-
export const ABBR: Tag = "abbr";
|
|
6
|
-
export const ADDRESS: Tag = "address";
|
|
7
|
-
export const AREA: Tag = "area";
|
|
8
|
-
export const ARTICLE: Tag = "article";
|
|
9
|
-
export const ASIDE: Tag = "aside";
|
|
10
|
-
export const AUDIO: Tag = "audio";
|
|
11
|
-
export const B: Tag = "b";
|
|
12
|
-
export const BASE: Tag = "base";
|
|
13
|
-
export const BDI: Tag = "bdi";
|
|
14
|
-
export const BDO: Tag = "bdo";
|
|
15
|
-
export const BLOCKQUOTE: Tag = "blockquote";
|
|
16
|
-
export const BODY: Tag = "body";
|
|
17
|
-
export const BR: Tag = "br";
|
|
18
|
-
export const BUTTON: Tag = "button";
|
|
19
|
-
export const CANVAS: Tag = "canvas";
|
|
20
|
-
export const CAPTION: Tag = "caption";
|
|
21
|
-
export const CITE: Tag = "cite";
|
|
22
|
-
export const CODE: Tag = "code";
|
|
23
|
-
export const COL: Tag = "col";
|
|
24
|
-
export const COLGROUP: Tag = "colgroup";
|
|
25
|
-
export const DATA: Tag = "data";
|
|
26
|
-
export const DATALIST: Tag = "datalist";
|
|
27
|
-
export const DD: Tag = "dd";
|
|
28
|
-
export const DEL: Tag = "del";
|
|
29
|
-
export const DETAILS: Tag = "details";
|
|
30
|
-
export const DFN: Tag = "dfn";
|
|
31
|
-
export const DIALOG: Tag = "dialog";
|
|
32
|
-
export const DIV: Tag = "div";
|
|
33
|
-
export const DL: Tag = "dl";
|
|
34
|
-
export const DT: Tag = "dt";
|
|
35
|
-
export const EM: Tag = "em";
|
|
36
|
-
export const EMBED: Tag = "embed";
|
|
37
|
-
export const FIELDSET: Tag = "fieldset";
|
|
38
|
-
export const FIGCAPTION: Tag = "figcaption";
|
|
39
|
-
export const FIGURE: Tag = "figure";
|
|
40
|
-
export const FOOTER: Tag = "footer";
|
|
41
|
-
export const FORM: Tag = "form";
|
|
42
|
-
export const H1: Tag = "h1";
|
|
43
|
-
export const H2: Tag = "h2";
|
|
44
|
-
export const H3: Tag = "h3";
|
|
45
|
-
export const H4: Tag = "h4";
|
|
46
|
-
export const H5: Tag = "h5";
|
|
47
|
-
export const H6: Tag = "h6";
|
|
48
|
-
export const HEAD: Tag = "head";
|
|
49
|
-
export const HEADER: Tag = "header";
|
|
50
|
-
export const HGROUP: Tag = "hgroup";
|
|
51
|
-
export const HR: Tag = "hr";
|
|
52
|
-
export const HTML: Tag = "html";
|
|
53
|
-
export const I: Tag = "i";
|
|
54
|
-
export const IFRAME: Tag = "iframe";
|
|
55
|
-
export const IMG: Tag = "img";
|
|
56
|
-
export const INPUT: Tag = "input";
|
|
57
|
-
export const INS: Tag = "ins";
|
|
58
|
-
export const KBD: Tag = "kbd";
|
|
59
|
-
export const LABEL: Tag = "label";
|
|
60
|
-
export const LEGEND: Tag = "legend";
|
|
61
|
-
export const LI: Tag = "li";
|
|
62
|
-
export const LINK: Tag = "link";
|
|
63
|
-
export const MAIN: Tag = "main";
|
|
64
|
-
export const MAP: Tag = "map";
|
|
65
|
-
export const MARK: Tag = "mark";
|
|
66
|
-
export const MENU: Tag = "menu";
|
|
67
|
-
export const META: Tag = "meta";
|
|
68
|
-
export const METER: Tag = "meter";
|
|
69
|
-
export const NAV: Tag = "nav";
|
|
70
|
-
export const NOSCRIPT: Tag = "noscript";
|
|
71
|
-
export const OBJECT: Tag = "object";
|
|
72
|
-
export const OL: Tag = "ol";
|
|
73
|
-
export const OPTGROUP: Tag = "optgroup";
|
|
74
|
-
export const OPTION: Tag = "option";
|
|
75
|
-
export const OUTPUT: Tag = "output";
|
|
76
|
-
export const P: Tag = "p";
|
|
77
|
-
export const PICTURE: Tag = "picture";
|
|
78
|
-
export const PRE: Tag = "pre";
|
|
79
|
-
export const PROGRESS: Tag = "progress";
|
|
80
|
-
export const Q: Tag = "q";
|
|
81
|
-
export const RP: Tag = "rp";
|
|
82
|
-
export const RT: Tag = "rt";
|
|
83
|
-
export const RUBY: Tag = "ruby";
|
|
84
|
-
export const S: Tag = "s";
|
|
85
|
-
export const SAMP: Tag = "samp";
|
|
86
|
-
export const SCRIPT: Tag = "script";
|
|
87
|
-
export const
|
|
88
|
-
export const
|
|
89
|
-
export const
|
|
90
|
-
export const
|
|
91
|
-
export const
|
|
92
|
-
export const
|
|
93
|
-
export const
|
|
94
|
-
export const
|
|
95
|
-
export const
|
|
96
|
-
export const
|
|
97
|
-
export const
|
|
98
|
-
export const
|
|
99
|
-
export const
|
|
100
|
-
export const
|
|
101
|
-
export const
|
|
102
|
-
export const
|
|
103
|
-
export const
|
|
104
|
-
export const
|
|
105
|
-
export const
|
|
106
|
-
export const
|
|
107
|
-
export const
|
|
108
|
-
export const
|
|
109
|
-
export const
|
|
110
|
-
export const
|
|
111
|
-
export const
|
|
112
|
-
export const
|
|
113
|
-
export const
|
|
3
|
+
//=== HTML ====================================================
|
|
4
|
+
export const A: Tag = "a" as const;
|
|
5
|
+
export const ABBR: Tag = "abbr" as const;
|
|
6
|
+
export const ADDRESS: Tag = "address" as const;
|
|
7
|
+
export const AREA: Tag = "area" as const;
|
|
8
|
+
export const ARTICLE: Tag = "article" as const;
|
|
9
|
+
export const ASIDE: Tag = "aside" as const;
|
|
10
|
+
export const AUDIO: Tag = "audio" as const;
|
|
11
|
+
export const B: Tag = "b" as const;
|
|
12
|
+
export const BASE: Tag = "base" as const;
|
|
13
|
+
export const BDI: Tag = "bdi" as const;
|
|
14
|
+
export const BDO: Tag = "bdo" as const;
|
|
15
|
+
export const BLOCKQUOTE: Tag = "blockquote" as const;
|
|
16
|
+
export const BODY: Tag = "body" as const;
|
|
17
|
+
export const BR: Tag = "br" as const;
|
|
18
|
+
export const BUTTON: Tag = "button" as const;
|
|
19
|
+
export const CANVAS: Tag = "canvas" as const;
|
|
20
|
+
export const CAPTION: Tag = "caption" as const;
|
|
21
|
+
export const CITE: Tag = "cite" as const;
|
|
22
|
+
export const CODE: Tag = "code" as const;
|
|
23
|
+
export const COL: Tag = "col" as const;
|
|
24
|
+
export const COLGROUP: Tag = "colgroup" as const;
|
|
25
|
+
export const DATA: Tag = "data" as const;
|
|
26
|
+
export const DATALIST: Tag = "datalist" as const;
|
|
27
|
+
export const DD: Tag = "dd" as const;
|
|
28
|
+
export const DEL: Tag = "del" as const;
|
|
29
|
+
export const DETAILS: Tag = "details" as const;
|
|
30
|
+
export const DFN: Tag = "dfn" as const;
|
|
31
|
+
export const DIALOG: Tag = "dialog" as const;
|
|
32
|
+
export const DIV: Tag = "div" as const;
|
|
33
|
+
export const DL: Tag = "dl" as const;
|
|
34
|
+
export const DT: Tag = "dt" as const;
|
|
35
|
+
export const EM: Tag = "em" as const;
|
|
36
|
+
export const EMBED: Tag = "embed" as const;
|
|
37
|
+
export const FIELDSET: Tag = "fieldset" as const;
|
|
38
|
+
export const FIGCAPTION: Tag = "figcaption" as const;
|
|
39
|
+
export const FIGURE: Tag = "figure" as const;
|
|
40
|
+
export const FOOTER: Tag = "footer" as const;
|
|
41
|
+
export const FORM: Tag = "form" as const;
|
|
42
|
+
export const H1: Tag = "h1" as const;
|
|
43
|
+
export const H2: Tag = "h2" as const;
|
|
44
|
+
export const H3: Tag = "h3" as const;
|
|
45
|
+
export const H4: Tag = "h4" as const;
|
|
46
|
+
export const H5: Tag = "h5" as const;
|
|
47
|
+
export const H6: Tag = "h6" as const;
|
|
48
|
+
export const HEAD: Tag = "head" as const;
|
|
49
|
+
export const HEADER: Tag = "header" as const;
|
|
50
|
+
export const HGROUP: Tag = "hgroup" as const;
|
|
51
|
+
export const HR: Tag = "hr" as const;
|
|
52
|
+
export const HTML: Tag = "html" as const;
|
|
53
|
+
export const I: Tag = "i" as const;
|
|
54
|
+
export const IFRAME: Tag = "iframe" as const;
|
|
55
|
+
export const IMG: Tag = "img" as const;
|
|
56
|
+
export const INPUT: Tag = "input" as const;
|
|
57
|
+
export const INS: Tag = "ins" as const;
|
|
58
|
+
export const KBD: Tag = "kbd" as const;
|
|
59
|
+
export const LABEL: Tag = "label" as const;
|
|
60
|
+
export const LEGEND: Tag = "legend" as const;
|
|
61
|
+
export const LI: Tag = "li" as const;
|
|
62
|
+
export const LINK: Tag = "link" as const;
|
|
63
|
+
export const MAIN: Tag = "main" as const;
|
|
64
|
+
export const MAP: Tag = "map" as const;
|
|
65
|
+
export const MARK: Tag = "mark" as const;
|
|
66
|
+
export const MENU: Tag = "menu" as const;
|
|
67
|
+
export const META: Tag = "meta" as const;
|
|
68
|
+
export const METER: Tag = "meter" as const;
|
|
69
|
+
export const NAV: Tag = "nav" as const;
|
|
70
|
+
export const NOSCRIPT: Tag = "noscript" as const;
|
|
71
|
+
export const OBJECT: Tag = "object" as const;
|
|
72
|
+
export const OL: Tag = "ol" as const;
|
|
73
|
+
export const OPTGROUP: Tag = "optgroup" as const;
|
|
74
|
+
export const OPTION: Tag = "option" as const;
|
|
75
|
+
export const OUTPUT: Tag = "output" as const;
|
|
76
|
+
export const P: Tag = "p" as const;
|
|
77
|
+
export const PICTURE: Tag = "picture" as const;
|
|
78
|
+
export const PRE: Tag = "pre" as const;
|
|
79
|
+
export const PROGRESS: Tag = "progress" as const;
|
|
80
|
+
export const Q: Tag = "q" as const;
|
|
81
|
+
export const RP: Tag = "rp" as const;
|
|
82
|
+
export const RT: Tag = "rt" as const;
|
|
83
|
+
export const RUBY: Tag = "ruby" as const;
|
|
84
|
+
export const S: Tag = "s" as const;
|
|
85
|
+
export const SAMP: Tag = "samp" as const;
|
|
86
|
+
export const SCRIPT: Tag = "script" as const;
|
|
87
|
+
export const SEARCH: Tag = "search" as const;
|
|
88
|
+
export const SECTION: Tag = "section" as const;
|
|
89
|
+
export const SELECT: Tag = "select" as const;
|
|
90
|
+
export const SLOT: Tag = "slot" as const;
|
|
91
|
+
export const SMALL: Tag = "small" as const;
|
|
92
|
+
export const SOURCE: Tag = "source" as const;
|
|
93
|
+
export const SPAN: Tag = "span" as const;
|
|
94
|
+
export const STRONG: Tag = "strong" as const;
|
|
95
|
+
export const STYLE: Tag = "style" as const;
|
|
96
|
+
export const SUB: Tag = "sub" as const;
|
|
97
|
+
export const SUMMARY: Tag = "summary" as const;
|
|
98
|
+
export const SUP: Tag = "sup" as const;
|
|
99
|
+
export const TABLE: Tag = "table" as const;
|
|
100
|
+
export const TBODY: Tag = "tbody" as const;
|
|
101
|
+
export const TD: Tag = "td" as const;
|
|
102
|
+
export const TEMPLATE: Tag = "template" as const;
|
|
103
|
+
export const TEXTAREA: Tag = "textarea" as const;
|
|
104
|
+
export const TFOOT: Tag = "tfoot" as const;
|
|
105
|
+
export const TH: Tag = "th" as const;
|
|
106
|
+
export const THEAD: Tag = "thead" as const;
|
|
107
|
+
export const TIME: Tag = "time" as const;
|
|
108
|
+
export const TITLE: Tag = "title" as const;
|
|
109
|
+
export const TR: Tag = "tr" as const;
|
|
110
|
+
export const TRACK: Tag = "track" as const;
|
|
111
|
+
export const U: Tag = "u" as const;
|
|
112
|
+
export const UL: Tag = "ul" as const;
|
|
113
|
+
export const VAR: Tag = "var" as const;
|
|
114
|
+
export const VIDEO: Tag = "video" as const;
|
|
115
|
+
export const WBR: Tag = "wbr" as const;
|
|
114
116
|
|
|
115
|
-
//=== SVG
|
|
116
|
-
export const ANIMATE: Tag = "animate";
|
|
117
|
-
export const ANIMATEMOTION: Tag = "animateMotion";
|
|
118
|
-
export const ANIMATETRANSFORM: Tag = "animateTransform";
|
|
119
|
-
export const CIRCLE: Tag = "circle";
|
|
120
|
-
export const CLIPPATH: Tag = "clipPath";
|
|
121
|
-
export const DEFS: Tag = "defs";
|
|
122
|
-
export const DESC: Tag = "desc";
|
|
123
|
-
export const ELLIPSE: Tag = "ellipse";
|
|
124
|
-
export const FEBLEND: Tag = "feBlend";
|
|
125
|
-
export const FECOLORMATRIX: Tag = "feColorMatrix";
|
|
126
|
-
export const FECOMPONENTTRANSFER: Tag = "feComponentTransfer";
|
|
127
|
-
export const FECOMPOSITE: Tag = "feComposite";
|
|
128
|
-
export const FECONVOLVEMATRIX: Tag = "feConvolveMatrix";
|
|
129
|
-
export const FEDIFFUSELIGHTING: Tag = "feDiffuseLighting";
|
|
130
|
-
export const FEDISPLACEMENTMAP: Tag = "feDisplacementMap";
|
|
131
|
-
export const FEDISTANTLIGHT: Tag = "feDistantLight";
|
|
132
|
-
export const FEDROPSHADOW: Tag = "feDropShadow";
|
|
133
|
-
export const FEFLOOD: Tag = "feFlood";
|
|
134
|
-
export const FEFUNCA: Tag = "feFuncA";
|
|
135
|
-
export const FEFUNCB: Tag = "feFuncB";
|
|
136
|
-
export const FEFUNCG: Tag = "feFuncG";
|
|
137
|
-
export const FEFUNCR: Tag = "feFuncR";
|
|
138
|
-
export const FEGAUSSIANBLUR: Tag = "feGaussianBlur";
|
|
139
|
-
export const FEIMAGE: Tag = "feImage";
|
|
140
|
-
export const FEMERGE: Tag = "feMerge";
|
|
141
|
-
export const FEMERGENODE: Tag = "feMergeNode";
|
|
142
|
-
export const FEMORPHOLOGY: Tag = "feMorphology";
|
|
143
|
-
export const FEOFFSET: Tag = "feOffset";
|
|
144
|
-
export const FEPOINTLIGHT: Tag = "fePointLight";
|
|
145
|
-
export const FESPECULARLIGHTING: Tag = "feSpecularLighting";
|
|
146
|
-
export const FESPOTLIGHT: Tag = "feSpotLight";
|
|
147
|
-
export const FETILE: Tag = "feTile";
|
|
148
|
-
export const FETURBULENCE: Tag = "feTurbulence";
|
|
149
|
-
export const FILTER: Tag = "filter";
|
|
150
|
-
export const FOREIGNOBJECT: Tag = "foreignObject";
|
|
151
|
-
export const G: Tag = "g";
|
|
152
|
-
export const IMAGE: Tag = "image";
|
|
153
|
-
export const LINE: Tag = "line";
|
|
154
|
-
export const LINEARGRADIENT: Tag = "linearGradient";
|
|
155
|
-
export const MARKER: Tag = "marker";
|
|
156
|
-
export const MASK: Tag = "mask";
|
|
157
|
-
export const METADATA: Tag = "metadata";
|
|
158
|
-
export const MPATH: Tag = "mpath";
|
|
159
|
-
export const PATH: Tag = "path";
|
|
160
|
-
export const PATTERN: Tag = "pattern";
|
|
161
|
-
export const POLYGON: Tag = "polygon";
|
|
162
|
-
export const POLYLINE: Tag = "polyline";
|
|
163
|
-
export const RADIALGRADIENT: Tag = "radialGradient";
|
|
164
|
-
export const RECT: Tag = "rect";
|
|
165
|
-
export const SET: Tag = "set";
|
|
166
|
-
export const STOP: Tag = "stop";
|
|
167
|
-
export const SVG: Tag = "svg";
|
|
168
|
-
export const SWITCH: Tag = "switch";
|
|
169
|
-
export const SYMBOL: Tag = "symbol";
|
|
170
|
-
export const TEXT: Tag = "text";
|
|
171
|
-
export const TEXTPATH: Tag = "textPath";
|
|
172
|
-
export const TSPAN: Tag = "tspan";
|
|
173
|
-
export const USE: Tag = "use";
|
|
174
|
-
export const VIEW: Tag = "view";
|
|
117
|
+
//=== SVG =====================================================
|
|
118
|
+
export const ANIMATE: Tag = "animate" as const;
|
|
119
|
+
export const ANIMATEMOTION: Tag = "animateMotion" as const;
|
|
120
|
+
export const ANIMATETRANSFORM: Tag = "animateTransform" as const;
|
|
121
|
+
export const CIRCLE: Tag = "circle" as const;
|
|
122
|
+
export const CLIPPATH: Tag = "clipPath" as const;
|
|
123
|
+
export const DEFS: Tag = "defs" as const;
|
|
124
|
+
export const DESC: Tag = "desc" as const;
|
|
125
|
+
export const ELLIPSE: Tag = "ellipse" as const;
|
|
126
|
+
export const FEBLEND: Tag = "feBlend" as const;
|
|
127
|
+
export const FECOLORMATRIX: Tag = "feColorMatrix" as const;
|
|
128
|
+
export const FECOMPONENTTRANSFER: Tag = "feComponentTransfer" as const;
|
|
129
|
+
export const FECOMPOSITE: Tag = "feComposite" as const;
|
|
130
|
+
export const FECONVOLVEMATRIX: Tag = "feConvolveMatrix" as const;
|
|
131
|
+
export const FEDIFFUSELIGHTING: Tag = "feDiffuseLighting" as const;
|
|
132
|
+
export const FEDISPLACEMENTMAP: Tag = "feDisplacementMap" as const;
|
|
133
|
+
export const FEDISTANTLIGHT: Tag = "feDistantLight" as const;
|
|
134
|
+
export const FEDROPSHADOW: Tag = "feDropShadow" as const;
|
|
135
|
+
export const FEFLOOD: Tag = "feFlood" as const;
|
|
136
|
+
export const FEFUNCA: Tag = "feFuncA" as const;
|
|
137
|
+
export const FEFUNCB: Tag = "feFuncB" as const;
|
|
138
|
+
export const FEFUNCG: Tag = "feFuncG" as const;
|
|
139
|
+
export const FEFUNCR: Tag = "feFuncR" as const;
|
|
140
|
+
export const FEGAUSSIANBLUR: Tag = "feGaussianBlur" as const;
|
|
141
|
+
export const FEIMAGE: Tag = "feImage" as const;
|
|
142
|
+
export const FEMERGE: Tag = "feMerge" as const;
|
|
143
|
+
export const FEMERGENODE: Tag = "feMergeNode" as const;
|
|
144
|
+
export const FEMORPHOLOGY: Tag = "feMorphology" as const;
|
|
145
|
+
export const FEOFFSET: Tag = "feOffset" as const;
|
|
146
|
+
export const FEPOINTLIGHT: Tag = "fePointLight" as const;
|
|
147
|
+
export const FESPECULARLIGHTING: Tag = "feSpecularLighting" as const;
|
|
148
|
+
export const FESPOTLIGHT: Tag = "feSpotLight" as const;
|
|
149
|
+
export const FETILE: Tag = "feTile" as const;
|
|
150
|
+
export const FETURBULENCE: Tag = "feTurbulence" as const;
|
|
151
|
+
export const FILTER: Tag = "filter" as const;
|
|
152
|
+
export const FOREIGNOBJECT: Tag = "foreignObject" as const;
|
|
153
|
+
export const G: Tag = "g" as const;
|
|
154
|
+
export const IMAGE: Tag = "image" as const;
|
|
155
|
+
export const LINE: Tag = "line" as const;
|
|
156
|
+
export const LINEARGRADIENT: Tag = "linearGradient" as const;
|
|
157
|
+
export const MARKER: Tag = "marker" as const;
|
|
158
|
+
export const MASK: Tag = "mask" as const;
|
|
159
|
+
export const METADATA: Tag = "metadata" as const;
|
|
160
|
+
export const MPATH: Tag = "mpath" as const;
|
|
161
|
+
export const PATH: Tag = "path" as const;
|
|
162
|
+
export const PATTERN: Tag = "pattern" as const;
|
|
163
|
+
export const POLYGON: Tag = "polygon" as const;
|
|
164
|
+
export const POLYLINE: Tag = "polyline" as const;
|
|
165
|
+
export const RADIALGRADIENT: Tag = "radialGradient" as const;
|
|
166
|
+
export const RECT: Tag = "rect" as const;
|
|
167
|
+
export const SET: Tag = "set" as const;
|
|
168
|
+
export const STOP: Tag = "stop" as const;
|
|
169
|
+
export const SVG: Tag = "svg" as const;
|
|
170
|
+
export const SWITCH: Tag = "switch" as const;
|
|
171
|
+
export const SYMBOL: Tag = "symbol" as const;
|
|
172
|
+
export const TEXT: Tag = "text" as const;
|
|
173
|
+
export const TEXTPATH: Tag = "textPath" as const;
|
|
174
|
+
export const TSPAN: Tag = "tspan" as const;
|
|
175
|
+
export const USE: Tag = "use" as const;
|
|
176
|
+
export const VIEW: Tag = "view" as const;
|
|
175
177
|
|
|
176
|
-
//=== MathML
|
|
177
|
-
|
|
178
|
-
export const
|
|
179
|
-
export const
|
|
180
|
-
export const
|
|
181
|
-
export const
|
|
182
|
-
export const
|
|
183
|
-
export const
|
|
184
|
-
export const
|
|
185
|
-
export const
|
|
186
|
-
export const
|
|
187
|
-
export const
|
|
188
|
-
export const
|
|
189
|
-
export const
|
|
190
|
-
export const
|
|
191
|
-
export const
|
|
192
|
-
export const
|
|
193
|
-
export const
|
|
194
|
-
export const
|
|
195
|
-
export const
|
|
196
|
-
export const
|
|
197
|
-
export const
|
|
198
|
-
export const
|
|
199
|
-
export const
|
|
200
|
-
export const
|
|
201
|
-
export const
|
|
202
|
-
export const
|
|
203
|
-
export const
|
|
204
|
-
export const
|
|
205
|
-
export const
|
|
206
|
-
export const
|
|
207
|
-
export const SEMANTICS: Tag = "semantics";
|
|
178
|
+
//=== MathML ==================================================
|
|
179
|
+
export const ANNOTATION: Tag = "annotation" as const;
|
|
180
|
+
export const ANNOTATION_XML: Tag = "annotation-xml" as const;
|
|
181
|
+
export const MACTION: Tag = "maction" as const;
|
|
182
|
+
export const MATH: Tag = "math" as const;
|
|
183
|
+
export const MERROR: Tag = "merror" as const;
|
|
184
|
+
export const MFRAC: Tag = "mfrac" as const;
|
|
185
|
+
export const MI: Tag = "mi" as const;
|
|
186
|
+
export const MMULTISCRIPTS: Tag = "mmultiscripts" as const;
|
|
187
|
+
export const MN: Tag = "mn" as const;
|
|
188
|
+
export const MO: Tag = "mo" as const;
|
|
189
|
+
export const MOVER: Tag = "mover" as const;
|
|
190
|
+
export const MPADDED: Tag = "mpadded" as const;
|
|
191
|
+
export const MPHANTOM: Tag = "mphantom" as const;
|
|
192
|
+
export const MPRESCRIPTS: Tag = "mprescripts" as const;
|
|
193
|
+
export const MROOT: Tag = "mroot" as const;
|
|
194
|
+
export const MROW: Tag = "mrow" as const;
|
|
195
|
+
export const MS: Tag = "ms" as const;
|
|
196
|
+
export const MSPACE: Tag = "mspace" as const;
|
|
197
|
+
export const MSQRT: Tag = "msqrt" as const;
|
|
198
|
+
export const MSTYLE: Tag = "mstyle" as const;
|
|
199
|
+
export const MSUB: Tag = "msub" as const;
|
|
200
|
+
export const MSUBSUP: Tag = "msubsup" as const;
|
|
201
|
+
export const MSUP: Tag = "msup" as const;
|
|
202
|
+
export const MTABLE: Tag = "mtable" as const;
|
|
203
|
+
export const MTD: Tag = "mtd" as const;
|
|
204
|
+
export const MTEXT: Tag = "mtext" as const;
|
|
205
|
+
export const MTR: Tag = "mtr" as const;
|
|
206
|
+
export const MUNDER: Tag = "munder" as const;
|
|
207
|
+
export const MUNDEROVER: Tag = "munderover" as const;
|
|
208
|
+
export const SEMANTICS: Tag = "semantics" as const;
|