@mantou/gem 1.7.8 → 1.7.9

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.
Files changed (63) hide show
  1. package/dist/gem.es.js +234 -102
  2. package/dist/gem.umd.js +24 -24
  3. package/elements/base/dialog.d.ts.map +1 -1
  4. package/elements/base/dialog.js +1 -1
  5. package/elements/base/dialog.js.map +1 -1
  6. package/elements/base/link.d.ts.map +1 -1
  7. package/elements/base/link.js +8 -4
  8. package/elements/base/link.js.map +1 -1
  9. package/elements/base/modal-factory.d.ts +28 -6
  10. package/elements/base/modal-factory.d.ts.map +1 -1
  11. package/elements/base/reflect.d.ts +8 -0
  12. package/elements/base/reflect.d.ts.map +1 -1
  13. package/elements/base/reflect.js +36 -9
  14. package/elements/base/reflect.js.map +1 -1
  15. package/elements/base/route.d.ts +25 -10
  16. package/elements/base/route.d.ts.map +1 -1
  17. package/elements/base/route.js +90 -56
  18. package/elements/base/route.js.map +1 -1
  19. package/elements/base/title.d.ts.map +1 -1
  20. package/elements/base/title.js +8 -2
  21. package/elements/base/title.js.map +1 -1
  22. package/helper/i18n.d.ts +8 -1
  23. package/helper/i18n.d.ts.map +1 -1
  24. package/helper/i18n.js +6 -2
  25. package/helper/i18n.js.map +1 -1
  26. package/helper/logger.d.ts +9 -0
  27. package/helper/logger.d.ts.map +1 -0
  28. package/helper/logger.js +16 -0
  29. package/helper/logger.js.map +1 -0
  30. package/helper/ssr-shim.d.ts.map +1 -1
  31. package/helper/ssr-shim.js +12 -4
  32. package/helper/ssr-shim.js.map +1 -1
  33. package/lib/element.d.ts +5 -5
  34. package/lib/element.d.ts.map +1 -1
  35. package/lib/element.js +40 -14
  36. package/lib/element.js.map +1 -1
  37. package/lib/history.d.ts +3 -2
  38. package/lib/history.d.ts.map +1 -1
  39. package/lib/history.js +22 -9
  40. package/lib/history.js.map +1 -1
  41. package/lib/utils.d.ts +2 -1
  42. package/lib/utils.d.ts.map +1 -1
  43. package/lib/utils.js +10 -8
  44. package/lib/utils.js.map +1 -1
  45. package/lib/version.d.ts +1 -1
  46. package/lib/version.js +1 -1
  47. package/package.json +1 -1
  48. package/src/elements/base/dialog.ts +4 -1
  49. package/src/elements/base/link.ts +8 -4
  50. package/src/elements/base/reflect.ts +43 -9
  51. package/src/elements/base/route.ts +102 -51
  52. package/src/elements/base/title.ts +9 -2
  53. package/src/helper/i18n.ts +11 -3
  54. package/src/helper/logger.ts +21 -0
  55. package/src/helper/ssr-shim.ts +14 -4
  56. package/src/lib/element.ts +46 -17
  57. package/src/lib/history.ts +30 -12
  58. package/src/lib/utils.ts +16 -9
  59. package/src/lib/version.ts +1 -1
  60. package/src/test/elements/link.test.ts +15 -0
  61. package/src/test/elements/reflect.test.ts +27 -0
  62. package/src/test/elements/title.test.ts +25 -0
  63. package/src/test/utils.test.ts +14 -0
package/lib/utils.js CHANGED
@@ -41,11 +41,15 @@ export function addMicrotaskToStack(func) {
41
41
  }
42
42
  microtaskStack.push(func);
43
43
  }
44
+ // 不编码 hash 用于比较
44
45
  export function absoluteLocation(currentPath = '', relativePath = '') {
45
46
  const { pathname, search, hash } = new URL(relativePath, location.origin + currentPath);
46
- return pathname + search + hash;
47
+ return pathname + search + decodeURIComponent(hash);
48
+ }
49
+ export function addListener(target, type, listener, options) {
50
+ target.addEventListener(type, listener, options);
51
+ return () => target.removeEventListener(type, listener, options);
47
52
  }
48
- // work on nodejs
49
53
  export class LinkedList extends EventTarget {
50
54
  constructor() {
51
55
  super(...arguments);
@@ -237,12 +241,10 @@ export function createCSSSheet(rules, mediaQuery = '') {
237
241
  sheet[SheetToken] = styleSheet;
238
242
  return sheet;
239
243
  }
240
- export function randomStr(number = 5, origin = '0123456789abcdefghijklmnopqrstuvwxyz') {
241
- const len = origin.length;
242
- let str = '';
243
- for (let i = 0; i < number; i++) {
244
- str += origin[Math.floor(Math.random() * len)];
245
- }
244
+ export function randomStr(len = 5) {
245
+ const str = Math.random().toString(36).slice(2).slice(0, len);
246
+ if (str.length < len)
247
+ return str + randomStr(len - str.length);
246
248
  return str;
247
249
  }
248
250
  const nestingRuleRegExp = new RegExp('&.*{((.|\n)*)}', 'g');
package/lib/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/lib/utils.ts"],"names":[],"mappings":"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"}
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "1.7.8";
1
+ export declare const version = "1.7.9";
2
2
  //# sourceMappingURL=version.d.ts.map
package/lib/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '1.7.8';
1
+ export const version = '1.7.9';
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantou/gem",
3
- "version": "1.7.8",
3
+ "version": "1.7.9",
4
4
  "description": "💎 使用自定义元素的轻量级 WebApp 开发框架",
5
5
  "keywords": [
6
6
  "frontend",
@@ -23,7 +23,10 @@ export abstract class GemDialogBaseElement extends GemElement {
23
23
 
24
24
  constructor() {
25
25
  super();
26
- this.inert = true;
26
+ this.effect(
27
+ () => (this.inert = true),
28
+ () => [],
29
+ );
27
30
  this.internals.role = 'dialog';
28
31
  this.internals.ariaModal = 'true';
29
32
  }
@@ -50,8 +50,7 @@ export class GemLinkElement extends GemElement {
50
50
  }
51
51
 
52
52
  constructor() {
53
- super();
54
- this.tabIndex = 0;
53
+ super({ focusable: true });
55
54
  this.addEventListener('click', this.#onClick);
56
55
  }
57
56
 
@@ -96,11 +95,16 @@ export class GemLinkElement extends GemElement {
96
95
  history.pushIgnoreCloseHandle({
97
96
  path: pathname,
98
97
  query: search,
99
- hash: hash,
98
+ hash,
100
99
  title: this.docTitle,
101
100
  });
102
101
  } else {
103
- history.pushIgnoreCloseHandle({ path: this.path, query: this.query, hash: this.hash, title: this.docTitle });
102
+ history.pushIgnoreCloseHandle({
103
+ path: this.path,
104
+ query: this.query,
105
+ hash: this.hash,
106
+ title: this.docTitle,
107
+ });
104
108
  }
105
109
  };
106
110
 
@@ -1,23 +1,57 @@
1
+ /**
2
+ * - ref 读取时需要用到 `target` `dataset`
3
+ * - 预渲染可能造成重复的元素,在序列化时可以用正则移除 GemReflectElement 渲染的从开始到结束连续的元素
4
+ * - `replaceAll(/<!--gem-reflect-start-->.*?<!--gem-reflect-end-->/gs, '')`
5
+ *
6
+ * 不能在在顶级代码块中清除这些元素,因为重复加载该代码时会把正常 reflect 元素清除,
7
+ * 比如 duoyun-ui 文档站加载示例元素时把 GemReflectElement 渲染的元素清除
8
+ */
1
9
  import { GemElement } from '../../lib/element';
2
10
  import { property } from '../../lib/decorators';
3
11
 
12
+ const START = 'gem-reflect-start';
13
+ const END = 'gem-reflect-end';
14
+
15
+ const createReflectFragmentTag = (tag: string) => new Comment(tag);
16
+
17
+ const getReflectFragment = (startNode: Comment) => {
18
+ const result: ChildNode[] = [];
19
+ let node: ChildNode | null = startNode;
20
+ while (node) {
21
+ result.push(node);
22
+ if (node.nodeValue === END) break;
23
+ node = node.nextSibling;
24
+ }
25
+ return result;
26
+ };
27
+
4
28
  export class GemReflectElement extends GemElement {
5
29
  @property target: HTMLElement = document.head;
6
30
 
7
31
  constructor() {
8
32
  super({ isLight: true });
9
- this.hidden = true;
10
- this.dataset.gemReflect = '';
33
+
34
+ this.effect(
35
+ () => {
36
+ this.hidden = true;
37
+ this.dataset.gemReflect = '';
38
+ },
39
+ () => [],
40
+ );
41
+
42
+ const startNode = createReflectFragmentTag(START);
43
+ const endNode = createReflectFragmentTag(END);
44
+ let childNodes: undefined | ChildNode[];
45
+
11
46
  this.effect(
12
47
  () => {
13
- const childNodes = [...this.childNodes];
14
- childNodes.forEach((node) => {
15
- if (node instanceof HTMLElement) {
16
- node.dataset.reflect = '';
17
- }
18
- this.target.append(node);
19
- });
48
+ if (!childNodes) {
49
+ [startNode, ...this.childNodes, endNode].forEach((node) => this.target.append(node));
50
+ } else {
51
+ childNodes.forEach((node) => this.target.append(node));
52
+ }
20
53
  return () => {
54
+ childNodes = getReflectFragment(startNode);
21
55
  childNodes.forEach((node) => node.remove());
22
56
  };
23
57
  },
@@ -1,8 +1,8 @@
1
1
  import { GemElement, html, TemplateResult } from '../../lib/element';
2
- import { property, connectStore, emitter, Emitter, boolattribute } from '../../lib/decorators';
3
- import { createStore, updateStore, Store } from '../../lib/store';
2
+ import { property, emitter, Emitter, boolattribute } from '../../lib/decorators';
3
+ import { createStore, updateStore, Store, connect } from '../../lib/store';
4
4
  import { titleStore, history, UpdateHistoryParams } from '../../lib/history';
5
- import { QueryString } from '../../lib/utils';
5
+ import { addListener, QueryString } from '../../lib/utils';
6
6
 
7
7
  interface NamePosition {
8
8
  [index: string]: number;
@@ -111,29 +111,44 @@ type State = {
111
111
  content?: TemplateResult;
112
112
  };
113
113
 
114
+ export type RouteTrigger = {
115
+ store: Store<any>;
116
+ replace: (arg: { path: string }) => void;
117
+ getParams: () => { path: string; query?: string | QueryString; hash?: string };
118
+ };
119
+
120
+ const scrollPositionMap = new Map<string, number>();
121
+
114
122
  /**
115
123
  * @attr inert 暂停路由更新
116
124
  * @fires routechange
117
125
  * @fires error
118
126
  * @fires loading
119
127
  */
120
- @connectStore(history.store)
121
128
  export class GemRouteElement extends GemElement<State> {
122
129
  @boolattribute transition: boolean;
123
130
  @property routes?: RouteItem[] | RoutesObject;
124
131
  /**
125
- * 不要多个 `<gem-route>` 共享,因为那样会导致后面的元素卸载前触发更新
132
+ * 路由更新后更新的 store,能从中读取到安全的路由数据
126
133
  *
127
134
  * @example
128
135
  * const locationStore = GemRouteElement.createLocationStore()
129
136
  * html`<gem-route .locationStore=${locationStore}>`
130
137
  */
131
- @property locationStore?: Store<{ path: string; params: Params; query: QueryString; data?: any }>;
138
+ @property locationStore?: ReturnType<(typeof GemRouteElement)['createLocationStore']>;
132
139
  @property key?: any; // 除了 href 提供另外一种方式来更新,比如语言更新也需要刷新 <gem-route>
140
+ @emitter loading: Emitter<RouteItem | null>;
141
+ @emitter beforeroutechange: Emitter<RouteItem | null>;
133
142
  @emitter routechange: Emitter<RouteItem | null>; // path 改变或者 key 改变,包含初始渲染
134
- @emitter loading: Emitter<RouteItem>;
135
143
  @emitter error: Emitter<any>;
136
144
 
145
+ /**自动让滚动容器恢复滚动位置 */
146
+ @property scrollContainer?: HTMLElement | (() => HTMLElement);
147
+ /**默认当有 `hash` 时不进行滚动 */
148
+ @property scrollIgnoreHash?: boolean;
149
+
150
+ @property trigger: RouteTrigger = history;
151
+
137
152
  /**当前使用的路由对象 */
138
153
  currentRoute: RouteItem | null;
139
154
  /**当前匹配的路由的 params */
@@ -141,9 +156,10 @@ export class GemRouteElement extends GemElement<State> {
141
156
 
142
157
  #lastLoader?: Promise<TemplateResult>;
143
158
 
159
+ /**不要多个 `<gem-route>` 共享,因为那样会导致后面的元素卸载前触发更新 */
144
160
  static createLocationStore = () => {
145
- const { path, query, data } = history.getParams();
146
- return createStore({ path, query, data, params: {} as Record<string, string> });
161
+ const { path, query, hash, data } = history.getParams();
162
+ return createStore({ path, query, hash, data, params: {} as Params });
147
163
  };
148
164
 
149
165
  static findRoute = (target: RouteItem[] | RoutesObject = [], path: string) => {
@@ -167,6 +183,10 @@ export class GemRouteElement extends GemElement<State> {
167
183
  return { route: defaultRoute };
168
184
  };
169
185
 
186
+ get #scrollContainer() {
187
+ return typeof this.scrollContainer === 'function' ? this.scrollContainer() : this.scrollContainer;
188
+ }
189
+
170
190
  constructor({ isLight, routes }: ConstructorOptions = {}) {
171
191
  super({ isLight });
172
192
  this.routes = routes;
@@ -177,38 +197,65 @@ export class GemRouteElement extends GemElement<State> {
177
197
  };
178
198
 
179
199
  #updateLocationStore = () => {
180
- if (this.locationStore) {
181
- const { path, query, data } = history.getParams();
182
- updateStore(this.locationStore, {
183
- path,
184
- params: this.currentParams,
185
- query,
186
- data,
187
- });
200
+ if (!this.locationStore) return;
201
+ const { path, query, hash, data } = history.getParams();
202
+ updateStore(this.locationStore, {
203
+ path,
204
+ params: this.currentParams,
205
+ query,
206
+ hash,
207
+ data,
208
+ });
209
+ };
210
+
211
+ #updateScrollContainerPosition = () => {
212
+ if (!this.#scrollContainer) return;
213
+ const scrollTop = scrollPositionMap.get(history.currentKey);
214
+ if (scrollTop) {
215
+ this.#scrollContainer.scroll(0, scrollTop);
216
+ } else if (this.scrollIgnoreHash || !history.getParams().hash) {
217
+ this.#scrollContainer.scroll(0, 0);
188
218
  }
189
219
  };
190
220
 
191
221
  #setContent = (route: RouteItem | null, params: Params, content?: TemplateResult) => {
222
+ this.beforeroutechange(route);
192
223
  this.#lastLoader = undefined;
193
224
  this.currentRoute = route;
194
225
  this.currentParams = params;
195
- const changeContent = () => {
226
+ const changeContent = async () => {
196
227
  this.setState({ content });
197
- this.routechange(this.currentRoute);
228
+ // 要确保新页面能读取到新路由数据
198
229
  this.#updateLocationStore();
230
+ // 等待页面渲染完成
231
+ await Promise.resolve();
232
+ this.#updateScrollContainerPosition();
233
+ this.routechange(this.currentRoute);
199
234
  };
200
235
  if (this.transition && 'startViewTransition' in document) {
201
- (document as any).startViewTransition(() => {
202
- changeContent();
203
- // 等待路由渲染
204
- return Promise.resolve();
205
- });
236
+ (document as any).startViewTransition(() => changeContent());
206
237
  } else {
207
238
  changeContent();
208
239
  }
209
240
  };
210
241
 
211
242
  mounted() {
243
+ this.effect(
244
+ () => {
245
+ if (!this.#scrollContainer) return;
246
+ return addListener(history, 'beforechange', () =>
247
+ scrollPositionMap.set(history.currentKey, this.#scrollContainer!.scrollTop),
248
+ );
249
+ },
250
+ () => [this.scrollContainer],
251
+ );
252
+
253
+ this.effect(
254
+ // 触发 this.#update
255
+ () => connect(this.trigger.store, () => this.setState({})),
256
+ () => [this.trigger],
257
+ );
258
+
212
259
  this.effect(
213
260
  ([key, path], old) => {
214
261
  // 只有查询参数改变
@@ -216,40 +263,17 @@ export class GemRouteElement extends GemElement<State> {
216
263
  this.#updateLocationStore();
217
264
  return;
218
265
  }
219
- const { route, params = {} } = GemRouteElement.findRoute(this.routes, path);
220
- const { redirect, content, getContent } = route || {};
221
- if (redirect) {
222
- history.replace({ path: redirect });
223
- return;
224
- }
225
- const title = route?.title;
226
- if (title) updateStore(titleStore, { title });
227
- const contentOrLoader = content || getContent?.(params);
228
- if (contentOrLoader instanceof Promise) {
229
- this.loading(route!);
230
- this.#lastLoader = contentOrLoader;
231
- const isSomeLoader = () => this.#lastLoader === contentOrLoader;
232
- contentOrLoader
233
- .then((content) => {
234
- if (isSomeLoader()) this.#setContent(route, params, content);
235
- })
236
- .catch((err) => {
237
- if (isSomeLoader()) this.error(err);
238
- });
239
- return;
240
- }
241
- this.#setContent(route, params, contentOrLoader);
266
+ this.update();
242
267
  },
243
268
  () => {
244
- const { path } = history.getParams();
245
- return [this.key, path, location.search];
269
+ const { path, query, hash } = this.trigger.getParams();
270
+ return [this.key, path, query, hash] as const;
246
271
  },
247
272
  );
248
273
  }
249
274
 
250
275
  shouldUpdate() {
251
- if (this.inert) return false;
252
- return true;
276
+ return this.inert ? false : true;
253
277
  }
254
278
 
255
279
  render() {
@@ -266,6 +290,33 @@ export class GemRouteElement extends GemElement<State> {
266
290
  ${content ?? html`<slot></slot>`}
267
291
  `;
268
292
  }
293
+
294
+ update = () => {
295
+ const { route, params = {} } = GemRouteElement.findRoute(this.routes, this.trigger.getParams().path);
296
+ const { redirect, content, getContent } = route || {};
297
+ if (redirect) {
298
+ this.trigger.replace({ path: redirect });
299
+ return;
300
+ }
301
+ if (this.trigger === history) {
302
+ updateStore(titleStore, { title: route?.title });
303
+ }
304
+ const contentOrLoader = content || getContent?.(params);
305
+ this.loading(route);
306
+ if (contentOrLoader instanceof Promise) {
307
+ this.#lastLoader = contentOrLoader;
308
+ const isSomeLoader = () => this.#lastLoader === contentOrLoader;
309
+ contentOrLoader
310
+ .then((content) => {
311
+ if (isSomeLoader()) this.#setContent(route, params, content);
312
+ })
313
+ .catch((err) => {
314
+ if (isSomeLoader()) this.error(err);
315
+ });
316
+ return;
317
+ }
318
+ this.#setContent(route, params, contentOrLoader);
319
+ };
269
320
  }
270
321
 
271
322
  export class GemLightRouteElement extends GemRouteElement {
@@ -17,18 +17,24 @@ import { GemElement, html } from '../../lib/element';
17
17
  import { attribute, boolattribute } from '../../lib/decorators';
18
18
  import { updateStore, connect } from '../../lib/store';
19
19
  import { titleStore } from '../../lib/history';
20
+ import { addMicrotask } from '../../lib/utils';
20
21
 
21
22
  const defaultTitle = document.title;
22
23
 
24
+ let documentTitle = '';
25
+ const setTitle = () => (document.title = documentTitle);
26
+
23
27
  function setDocumentTitle(str?: string | null, prefix = '', suffix = '') {
24
28
  const title = titleStore.title || str;
25
29
  if (title && title !== defaultTitle) {
26
30
  GemTitleElement.title = title;
27
- document.title = prefix + GemTitleElement.title + suffix;
31
+ documentTitle = prefix + GemTitleElement.title + suffix;
28
32
  } else {
29
33
  GemTitleElement.title = defaultTitle;
30
- document.title = GemTitleElement.title;
34
+ documentTitle = GemTitleElement.title;
31
35
  }
36
+ // 避免重定向时的中间状态
37
+ addMicrotask(setTitle);
32
38
  }
33
39
 
34
40
  connect(titleStore, setDocumentTitle);
@@ -62,6 +68,7 @@ export class GemTitleElement extends GemElement {
62
68
  super();
63
69
  new MutationObserver(() => this.update()).observe(this, {
64
70
  characterData: true,
71
+ childList: true,
65
72
  subtree: true,
66
73
  });
67
74
  }
@@ -1,6 +1,9 @@
1
1
  import { createStore, updateStore, Store } from '../lib/store';
2
2
  import { html, TemplateResult } from '../lib/element';
3
3
  import { GemError } from '../lib/utils';
4
+ import type { RouteTrigger } from '../elements/base/route';
5
+
6
+ import { logger } from './logger';
4
7
 
5
8
  // Hello, $1
6
9
  // See $1<detail>
@@ -59,7 +62,7 @@ interface I18nOptions<T> {
59
62
  onChange?: (currentLanguage: string) => void;
60
63
  }
61
64
 
62
- export class I18n<T = Record<string, Msg>> {
65
+ export class I18n<T = Record<string, Msg>> implements RouteTrigger {
63
66
  resources: Resources<T>;
64
67
  fallbackLanguage: string;
65
68
  currentLanguage: string;
@@ -71,6 +74,12 @@ export class I18n<T = Record<string, Msg>> {
71
74
 
72
75
  store: Store<any>;
73
76
 
77
+ replace = ({ path }: { path: string }) => {
78
+ this.setLanguage(path);
79
+ };
80
+
81
+ getParams = () => ({ path: this.currentLanguage });
82
+
74
83
  get #cacheCurrentKey() {
75
84
  return `${this.cachePrefix}:current`;
76
85
  }
@@ -164,8 +173,7 @@ export class I18n<T = Record<string, Msg>> {
164
173
  let pack: Partial<T>;
165
174
  const data = this.resources[lang];
166
175
  if (!data) {
167
- // eslint-disable-next-line no-console
168
- console.warn(`${this.cachePrefix}: not found \`${lang}\``);
176
+ logger.warn(`${this.cachePrefix}: not found \`${lang}\``);
169
177
  return this.resetLanguage();
170
178
  }
171
179
 
@@ -0,0 +1,21 @@
1
+ export class Logger {
2
+ _type: string;
3
+
4
+ constructor(type: string) {
5
+ this._type = type;
6
+ }
7
+
8
+ info = (...args: any[]) => {
9
+ console.log(`[${this._type}]:`, ...args);
10
+ };
11
+
12
+ warn = (...args: any[]) => {
13
+ console.warn(`[${this._type}]:`, ...args);
14
+ };
15
+
16
+ error = (...args: any[]) => {
17
+ console.error(`[${this._type}]:`, ...args);
18
+ };
19
+ }
20
+
21
+ export const logger = new Logger('GEM');
@@ -2,7 +2,10 @@
2
2
  // @ts-nocheck
3
3
  if (typeof window === 'undefined') {
4
4
  const getAny = () => {
5
- const anonymous = () => getAny();
5
+ // constructable
6
+ function anonymous() {
7
+ return getAny();
8
+ }
6
9
  Object.defineProperties(anonymous, {
7
10
  length: { writable: true },
8
11
  name: { writable: true },
@@ -16,14 +19,21 @@ if (typeof window === 'undefined') {
16
19
  };
17
20
  const any = getAny();
18
21
 
22
+ globalThis.window = globalThis;
23
+ globalThis.location = new URL('about:blank');
24
+ globalThis.HTMLElement = null;
25
+
19
26
  globalThis.document = any;
20
27
  globalThis.addEventListener = any;
21
28
  globalThis.history = any;
22
29
  globalThis.navigator = any;
23
30
  globalThis.customElements = any;
24
- globalThis.HTMLElement = null;
25
- globalThis.location = new URL('about:blank');
26
- globalThis.window = globalThis;
31
+
32
+ // duoyun-ui
33
+ globalThis.CSSStyleSheet = any;
34
+ globalThis.Document = any;
35
+ globalThis.Element = any;
36
+ globalThis.MutationObserver = any;
27
37
  }
28
38
 
29
39
  export {};