@bquery/bquery 1.5.0 → 1.6.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 +586 -546
- package/dist/component/component.d.ts +13 -5
- package/dist/component/component.d.ts.map +1 -1
- package/dist/component/html.d.ts +40 -3
- package/dist/component/html.d.ts.map +1 -1
- package/dist/component/index.d.ts +2 -2
- package/dist/component/index.d.ts.map +1 -1
- package/dist/component/library.d.ts.map +1 -1
- package/dist/component/types.d.ts +131 -16
- package/dist/component/types.d.ts.map +1 -1
- package/dist/component-BEQgt5hl.js +600 -0
- package/dist/component-BEQgt5hl.js.map +1 -0
- package/dist/component.es.mjs +7 -6
- package/dist/config-DRmZZno3.js.map +1 -1
- package/dist/core-BGQJVw0-.js +35 -0
- package/dist/core-BGQJVw0-.js.map +1 -0
- package/dist/{core-CK2Mfpf4.js → core-CCEabVHl.js} +2 -2
- package/dist/{core-CK2Mfpf4.js.map → core-CCEabVHl.js.map} +1 -1
- package/dist/core.es.mjs +1 -1
- package/dist/effect-AFRW_Plg.js +84 -0
- package/dist/effect-AFRW_Plg.js.map +1 -0
- package/dist/full.d.ts +4 -4
- package/dist/full.d.ts.map +1 -1
- package/dist/full.es.mjs +98 -94
- package/dist/full.iife.js +14 -14
- package/dist/full.iife.js.map +1 -1
- package/dist/full.umd.js +14 -14
- package/dist/full.umd.js.map +1 -1
- package/dist/index.es.mjs +143 -139
- package/dist/{motion-C5DRdPnO.js → motion-D9TcHxOF.js} +1 -1
- package/dist/{motion-C5DRdPnO.js.map → motion-D9TcHxOF.js.map} +1 -1
- package/dist/motion.es.mjs +1 -1
- package/dist/{platform-B7JhGBc7.js → platform-Dr9b6fsq.js} +21 -20
- package/dist/platform-Dr9b6fsq.js.map +1 -0
- package/dist/platform.es.mjs +1 -1
- package/dist/{reactive-BDya-ia8.js → reactive-DSkct0dO.js} +51 -50
- package/dist/reactive-DSkct0dO.js.map +1 -0
- package/dist/reactive.es.mjs +19 -17
- package/dist/{router-CijiICxt.js → router-CbDhl8rS.js} +3 -3
- package/dist/{router-CijiICxt.js.map → router-CbDhl8rS.js.map} +1 -1
- package/dist/router.es.mjs +1 -1
- package/dist/{sanitize-jyJ2ryE2.js → sanitize-Bs2dkMby.js} +94 -83
- package/dist/sanitize-Bs2dkMby.js.map +1 -0
- package/dist/security/index.d.ts +4 -2
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/sanitize.d.ts +4 -1
- package/dist/security/sanitize.d.ts.map +1 -1
- package/dist/security/trusted-html.d.ts +53 -0
- package/dist/security/trusted-html.d.ts.map +1 -0
- package/dist/security.es.mjs +10 -9
- package/dist/store/define-store.d.ts +1 -1
- package/dist/store/define-store.d.ts.map +1 -1
- package/dist/store/mapping.d.ts +1 -1
- package/dist/store/mapping.d.ts.map +1 -1
- package/dist/store/persisted.d.ts +1 -1
- package/dist/store/persisted.d.ts.map +1 -1
- package/dist/store/types.d.ts +2 -2
- package/dist/store/types.d.ts.map +1 -1
- package/dist/store/watch.d.ts +1 -1
- package/dist/store/watch.d.ts.map +1 -1
- package/dist/{store-CPK9E62U.js → store-BwDvI45q.js} +49 -48
- package/dist/{store-CPK9E62U.js.map → store-BwDvI45q.js.map} +1 -1
- package/dist/store.es.mjs +1 -1
- package/dist/storybook/index.d.ts +37 -0
- package/dist/storybook/index.d.ts.map +1 -0
- package/dist/storybook.es.mjs +151 -0
- package/dist/storybook.es.mjs.map +1 -0
- package/dist/untrack-B0rVscTc.js +7 -0
- package/dist/untrack-B0rVscTc.js.map +1 -0
- package/dist/{view-Cdi0g-qo.js → view-C70lA3vf.js} +29 -28
- package/dist/{view-Cdi0g-qo.js.map → view-C70lA3vf.js.map} +1 -1
- package/dist/view.es.mjs +9 -8
- package/package.json +141 -136
- package/src/component/component.ts +259 -54
- package/src/component/html.ts +153 -53
- package/src/component/index.ts +10 -2
- package/src/component/library.ts +42 -28
- package/src/component/types.ts +184 -19
- package/src/full.ts +8 -2
- package/src/motion/transition.ts +97 -97
- package/src/motion/types.ts +208 -208
- package/src/platform/announcer.ts +208 -208
- package/src/platform/config.ts +163 -163
- package/src/platform/cookies.ts +165 -165
- package/src/platform/index.ts +39 -39
- package/src/platform/meta.ts +168 -168
- package/src/reactive/async-data.ts +486 -486
- package/src/reactive/index.ts +37 -37
- package/src/reactive/signal.ts +29 -29
- package/src/security/constants.ts +211 -211
- package/src/security/index.ts +17 -10
- package/src/security/sanitize.ts +70 -66
- package/src/security/trusted-html.ts +71 -0
- package/src/store/define-store.ts +49 -48
- package/src/store/mapping.ts +74 -73
- package/src/store/persisted.ts +62 -61
- package/src/store/types.ts +92 -94
- package/src/store/watch.ts +53 -52
- package/src/storybook/index.ts +479 -0
- package/dist/component-CY5MVoYN.js +0 -531
- package/dist/component-CY5MVoYN.js.map +0 -1
- package/dist/core-DPdbItcq.js +0 -112
- package/dist/core-DPdbItcq.js.map +0 -1
- package/dist/platform-B7JhGBc7.js.map +0 -1
- package/dist/reactive-BDya-ia8.js.map +0 -1
- package/dist/sanitize-jyJ2ryE2.js.map +0 -1
package/src/platform/index.ts
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Platform module providing unified endpoints for web platform APIs.
|
|
3
|
-
* Offers consistent, promise-based interfaces with predictable errors.
|
|
4
|
-
*
|
|
5
|
-
* @module bquery/platform
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export { buckets } from './buckets';
|
|
9
|
-
export type { Bucket } from './buckets';
|
|
10
|
-
|
|
11
|
-
export { cache } from './cache';
|
|
12
|
-
export type { CacheHandle } from './cache';
|
|
13
|
-
|
|
14
|
-
export { useCookie } from './cookies';
|
|
15
|
-
export type { UseCookieOptions } from './cookies';
|
|
16
|
-
|
|
17
|
-
export { defineBqueryConfig, getBqueryConfig } from './config';
|
|
18
|
-
export type {
|
|
19
|
-
BqueryAnnouncerConfig,
|
|
20
|
-
BqueryComponentLibraryConfig,
|
|
21
|
-
BqueryConfig,
|
|
22
|
-
BqueryCookieConfig,
|
|
23
|
-
BqueryFetchConfig,
|
|
24
|
-
BqueryFetchParseAs,
|
|
25
|
-
BqueryPageMetaConfig,
|
|
26
|
-
BqueryTransitionConfig,
|
|
27
|
-
} from './config';
|
|
28
|
-
|
|
29
|
-
export { notifications } from './notifications';
|
|
30
|
-
export type { NotificationOptions } from './notifications';
|
|
31
|
-
|
|
32
|
-
export { useAnnouncer } from './announcer';
|
|
33
|
-
export type { AnnounceOptions, AnnouncerHandle, UseAnnouncerOptions } from './announcer';
|
|
34
|
-
|
|
35
|
-
export { definePageMeta } from './meta';
|
|
36
|
-
export type { PageLinkTag, PageMetaCleanup, PageMetaDefinition, PageMetaTag } from './meta';
|
|
37
|
-
|
|
38
|
-
export { storage } from './storage';
|
|
39
|
-
export type { IndexedDBOptions, StorageAdapter } from './storage';
|
|
1
|
+
/**
|
|
2
|
+
* Platform module providing unified endpoints for web platform APIs.
|
|
3
|
+
* Offers consistent, promise-based interfaces with predictable errors.
|
|
4
|
+
*
|
|
5
|
+
* @module bquery/platform
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export { buckets } from './buckets';
|
|
9
|
+
export type { Bucket } from './buckets';
|
|
10
|
+
|
|
11
|
+
export { cache } from './cache';
|
|
12
|
+
export type { CacheHandle } from './cache';
|
|
13
|
+
|
|
14
|
+
export { useCookie } from './cookies';
|
|
15
|
+
export type { UseCookieOptions } from './cookies';
|
|
16
|
+
|
|
17
|
+
export { defineBqueryConfig, getBqueryConfig } from './config';
|
|
18
|
+
export type {
|
|
19
|
+
BqueryAnnouncerConfig,
|
|
20
|
+
BqueryComponentLibraryConfig,
|
|
21
|
+
BqueryConfig,
|
|
22
|
+
BqueryCookieConfig,
|
|
23
|
+
BqueryFetchConfig,
|
|
24
|
+
BqueryFetchParseAs,
|
|
25
|
+
BqueryPageMetaConfig,
|
|
26
|
+
BqueryTransitionConfig,
|
|
27
|
+
} from './config';
|
|
28
|
+
|
|
29
|
+
export { notifications } from './notifications';
|
|
30
|
+
export type { NotificationOptions } from './notifications';
|
|
31
|
+
|
|
32
|
+
export { useAnnouncer } from './announcer';
|
|
33
|
+
export type { AnnounceOptions, AnnouncerHandle, UseAnnouncerOptions } from './announcer';
|
|
34
|
+
|
|
35
|
+
export { definePageMeta } from './meta';
|
|
36
|
+
export type { PageLinkTag, PageMetaCleanup, PageMetaDefinition, PageMetaTag } from './meta';
|
|
37
|
+
|
|
38
|
+
export { storage } from './storage';
|
|
39
|
+
export type { IndexedDBOptions, StorageAdapter } from './storage';
|
package/src/platform/meta.ts
CHANGED
|
@@ -1,168 +1,168 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Document title and meta helpers.
|
|
3
|
-
*
|
|
4
|
-
* @module bquery/platform
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { getBqueryConfig } from './config';
|
|
8
|
-
|
|
9
|
-
/** Meta tag definition. */
|
|
10
|
-
export interface PageMetaTag {
|
|
11
|
-
/** Standard meta name attribute. */
|
|
12
|
-
name?: string;
|
|
13
|
-
/** Open Graph / custom property attribute. */
|
|
14
|
-
property?: string;
|
|
15
|
-
/** http-equiv attribute. */
|
|
16
|
-
httpEquiv?: string;
|
|
17
|
-
/** Meta tag content. */
|
|
18
|
-
content: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/** Link tag definition. */
|
|
22
|
-
export interface PageLinkTag {
|
|
23
|
-
/** Link relation. */
|
|
24
|
-
rel: string;
|
|
25
|
-
/** Link URL. */
|
|
26
|
-
href: string;
|
|
27
|
-
/** Optional type attribute. */
|
|
28
|
-
type?: string;
|
|
29
|
-
/** Optional media query. */
|
|
30
|
-
media?: string;
|
|
31
|
-
/** Optional crossOrigin attribute. */
|
|
32
|
-
crossOrigin?: 'anonymous' | 'use-credentials';
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/** Page metadata definition. */
|
|
36
|
-
export interface PageMetaDefinition {
|
|
37
|
-
/** Document title. */
|
|
38
|
-
title?: string;
|
|
39
|
-
/** Convenience shortcut for the description meta tag. */
|
|
40
|
-
description?: string;
|
|
41
|
-
/** Additional meta tags. */
|
|
42
|
-
meta?: PageMetaTag[];
|
|
43
|
-
/** Additional link tags. */
|
|
44
|
-
link?: PageLinkTag[];
|
|
45
|
-
/** Attributes applied to the html element. */
|
|
46
|
-
htmlAttributes?: Record<string, string>;
|
|
47
|
-
/** Attributes applied to the body element. */
|
|
48
|
-
bodyAttributes?: Record<string, string>;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/** Cleanup function returned by definePageMeta(). */
|
|
52
|
-
export type PageMetaCleanup = () => void;
|
|
53
|
-
|
|
54
|
-
const setAttributes = (target: HTMLElement, attributes: Record<string, string>): (() => void) => {
|
|
55
|
-
const previousValues = new Map<string, string | null>();
|
|
56
|
-
|
|
57
|
-
for (const [name, value] of Object.entries(attributes)) {
|
|
58
|
-
previousValues.set(name, target.getAttribute(name));
|
|
59
|
-
target.setAttribute(name, value);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return () => {
|
|
63
|
-
for (const [name, value] of previousValues.entries()) {
|
|
64
|
-
if (value == null) {
|
|
65
|
-
target.removeAttribute(name);
|
|
66
|
-
} else {
|
|
67
|
-
target.setAttribute(name, value);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
const createElement = <T extends 'meta' | 'link'>(
|
|
74
|
-
tagName: T,
|
|
75
|
-
attributes: Record<string, string | undefined>
|
|
76
|
-
): HTMLElementTagNameMap[T] => {
|
|
77
|
-
const element = document.createElement(tagName);
|
|
78
|
-
element.setAttribute('data-bquery-page-meta', 'true');
|
|
79
|
-
|
|
80
|
-
for (const [name, value] of Object.entries(attributes)) {
|
|
81
|
-
if (value !== undefined) {
|
|
82
|
-
element.setAttribute(name, value);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return element;
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Apply document metadata for the current page.
|
|
91
|
-
*
|
|
92
|
-
* @param definition - Title, meta tags, link tags, and document attributes
|
|
93
|
-
* @returns Cleanup function that restores the previous document state
|
|
94
|
-
*
|
|
95
|
-
* @example
|
|
96
|
-
* ```ts
|
|
97
|
-
* const cleanup = definePageMeta({
|
|
98
|
-
* title: 'Dashboard',
|
|
99
|
-
* description: 'Overview of your account',
|
|
100
|
-
* });
|
|
101
|
-
* ```
|
|
102
|
-
*/
|
|
103
|
-
export const definePageMeta = (definition: PageMetaDefinition): PageMetaCleanup => {
|
|
104
|
-
if (typeof document === 'undefined') {
|
|
105
|
-
return () => {};
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
const config = getBqueryConfig().pageMeta;
|
|
109
|
-
const title = definition.title
|
|
110
|
-
? config?.titleTemplate
|
|
111
|
-
? config.titleTemplate(definition.title)
|
|
112
|
-
: definition.title
|
|
113
|
-
: undefined;
|
|
114
|
-
|
|
115
|
-
const inserted: HTMLElement[] = [];
|
|
116
|
-
const restoreFns: Array<() => void> = [];
|
|
117
|
-
const previousTitle = document.title;
|
|
118
|
-
|
|
119
|
-
if (title !== undefined) {
|
|
120
|
-
document.title = title;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
const metaEntries = [...(definition.meta ?? [])];
|
|
124
|
-
if (definition.description) {
|
|
125
|
-
metaEntries.unshift({ name: 'description', content: definition.description });
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
for (const entry of metaEntries) {
|
|
129
|
-
const meta = createElement('meta', {
|
|
130
|
-
name: entry.name,
|
|
131
|
-
property: entry.property,
|
|
132
|
-
'http-equiv': entry.httpEquiv,
|
|
133
|
-
content: entry.content,
|
|
134
|
-
});
|
|
135
|
-
document.head.appendChild(meta);
|
|
136
|
-
inserted.push(meta);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
for (const entry of definition.link ?? []) {
|
|
140
|
-
const link = createElement('link', {
|
|
141
|
-
rel: entry.rel,
|
|
142
|
-
href: entry.href,
|
|
143
|
-
type: entry.type,
|
|
144
|
-
media: entry.media,
|
|
145
|
-
crossorigin: entry.crossOrigin,
|
|
146
|
-
});
|
|
147
|
-
document.head.appendChild(link);
|
|
148
|
-
inserted.push(link);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
if (definition.htmlAttributes) {
|
|
152
|
-
restoreFns.push(setAttributes(document.documentElement, definition.htmlAttributes));
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
if (definition.bodyAttributes && document.body) {
|
|
156
|
-
restoreFns.push(setAttributes(document.body, definition.bodyAttributes));
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
return () => {
|
|
160
|
-
document.title = previousTitle;
|
|
161
|
-
for (const restore of restoreFns.reverse()) {
|
|
162
|
-
restore();
|
|
163
|
-
}
|
|
164
|
-
for (const element of inserted) {
|
|
165
|
-
element.remove();
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Document title and meta helpers.
|
|
3
|
+
*
|
|
4
|
+
* @module bquery/platform
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { getBqueryConfig } from './config';
|
|
8
|
+
|
|
9
|
+
/** Meta tag definition. */
|
|
10
|
+
export interface PageMetaTag {
|
|
11
|
+
/** Standard meta name attribute. */
|
|
12
|
+
name?: string;
|
|
13
|
+
/** Open Graph / custom property attribute. */
|
|
14
|
+
property?: string;
|
|
15
|
+
/** http-equiv attribute. */
|
|
16
|
+
httpEquiv?: string;
|
|
17
|
+
/** Meta tag content. */
|
|
18
|
+
content: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Link tag definition. */
|
|
22
|
+
export interface PageLinkTag {
|
|
23
|
+
/** Link relation. */
|
|
24
|
+
rel: string;
|
|
25
|
+
/** Link URL. */
|
|
26
|
+
href: string;
|
|
27
|
+
/** Optional type attribute. */
|
|
28
|
+
type?: string;
|
|
29
|
+
/** Optional media query. */
|
|
30
|
+
media?: string;
|
|
31
|
+
/** Optional crossOrigin attribute. */
|
|
32
|
+
crossOrigin?: 'anonymous' | 'use-credentials';
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Page metadata definition. */
|
|
36
|
+
export interface PageMetaDefinition {
|
|
37
|
+
/** Document title. */
|
|
38
|
+
title?: string;
|
|
39
|
+
/** Convenience shortcut for the description meta tag. */
|
|
40
|
+
description?: string;
|
|
41
|
+
/** Additional meta tags. */
|
|
42
|
+
meta?: PageMetaTag[];
|
|
43
|
+
/** Additional link tags. */
|
|
44
|
+
link?: PageLinkTag[];
|
|
45
|
+
/** Attributes applied to the html element. */
|
|
46
|
+
htmlAttributes?: Record<string, string>;
|
|
47
|
+
/** Attributes applied to the body element. */
|
|
48
|
+
bodyAttributes?: Record<string, string>;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Cleanup function returned by definePageMeta(). */
|
|
52
|
+
export type PageMetaCleanup = () => void;
|
|
53
|
+
|
|
54
|
+
const setAttributes = (target: HTMLElement, attributes: Record<string, string>): (() => void) => {
|
|
55
|
+
const previousValues = new Map<string, string | null>();
|
|
56
|
+
|
|
57
|
+
for (const [name, value] of Object.entries(attributes)) {
|
|
58
|
+
previousValues.set(name, target.getAttribute(name));
|
|
59
|
+
target.setAttribute(name, value);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return () => {
|
|
63
|
+
for (const [name, value] of previousValues.entries()) {
|
|
64
|
+
if (value == null) {
|
|
65
|
+
target.removeAttribute(name);
|
|
66
|
+
} else {
|
|
67
|
+
target.setAttribute(name, value);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const createElement = <T extends 'meta' | 'link'>(
|
|
74
|
+
tagName: T,
|
|
75
|
+
attributes: Record<string, string | undefined>
|
|
76
|
+
): HTMLElementTagNameMap[T] => {
|
|
77
|
+
const element = document.createElement(tagName);
|
|
78
|
+
element.setAttribute('data-bquery-page-meta', 'true');
|
|
79
|
+
|
|
80
|
+
for (const [name, value] of Object.entries(attributes)) {
|
|
81
|
+
if (value !== undefined) {
|
|
82
|
+
element.setAttribute(name, value);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return element;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Apply document metadata for the current page.
|
|
91
|
+
*
|
|
92
|
+
* @param definition - Title, meta tags, link tags, and document attributes
|
|
93
|
+
* @returns Cleanup function that restores the previous document state
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* const cleanup = definePageMeta({
|
|
98
|
+
* title: 'Dashboard',
|
|
99
|
+
* description: 'Overview of your account',
|
|
100
|
+
* });
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
export const definePageMeta = (definition: PageMetaDefinition): PageMetaCleanup => {
|
|
104
|
+
if (typeof document === 'undefined') {
|
|
105
|
+
return () => {};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const config = getBqueryConfig().pageMeta;
|
|
109
|
+
const title = definition.title
|
|
110
|
+
? config?.titleTemplate
|
|
111
|
+
? config.titleTemplate(definition.title)
|
|
112
|
+
: definition.title
|
|
113
|
+
: undefined;
|
|
114
|
+
|
|
115
|
+
const inserted: HTMLElement[] = [];
|
|
116
|
+
const restoreFns: Array<() => void> = [];
|
|
117
|
+
const previousTitle = document.title;
|
|
118
|
+
|
|
119
|
+
if (title !== undefined) {
|
|
120
|
+
document.title = title;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const metaEntries = [...(definition.meta ?? [])];
|
|
124
|
+
if (definition.description) {
|
|
125
|
+
metaEntries.unshift({ name: 'description', content: definition.description });
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
for (const entry of metaEntries) {
|
|
129
|
+
const meta = createElement('meta', {
|
|
130
|
+
name: entry.name,
|
|
131
|
+
property: entry.property,
|
|
132
|
+
'http-equiv': entry.httpEquiv,
|
|
133
|
+
content: entry.content,
|
|
134
|
+
});
|
|
135
|
+
document.head.appendChild(meta);
|
|
136
|
+
inserted.push(meta);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
for (const entry of definition.link ?? []) {
|
|
140
|
+
const link = createElement('link', {
|
|
141
|
+
rel: entry.rel,
|
|
142
|
+
href: entry.href,
|
|
143
|
+
type: entry.type,
|
|
144
|
+
media: entry.media,
|
|
145
|
+
crossorigin: entry.crossOrigin,
|
|
146
|
+
});
|
|
147
|
+
document.head.appendChild(link);
|
|
148
|
+
inserted.push(link);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (definition.htmlAttributes) {
|
|
152
|
+
restoreFns.push(setAttributes(document.documentElement, definition.htmlAttributes));
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (definition.bodyAttributes && document.body) {
|
|
156
|
+
restoreFns.push(setAttributes(document.body, definition.bodyAttributes));
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return () => {
|
|
160
|
+
document.title = previousTitle;
|
|
161
|
+
for (const restore of restoreFns.reverse()) {
|
|
162
|
+
restore();
|
|
163
|
+
}
|
|
164
|
+
for (const element of inserted) {
|
|
165
|
+
element.remove();
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
};
|