@mantou/gem 1.6.5 → 1.6.11
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 +6 -38
- package/dist/gem.es.js +3261 -0
- package/dist/gem.umd.js +229 -0
- package/elements/{dialog-base.d.ts → base/dialog.d.ts} +4 -4
- package/elements/base/dialog.d.ts.map +1 -0
- package/elements/{dialog-base.js → base/dialog.js} +26 -28
- package/elements/base/dialog.js.map +1 -0
- package/elements/base/gesture.d.ts +66 -0
- package/elements/base/gesture.d.ts.map +1 -0
- package/elements/base/gesture.js +214 -0
- package/elements/base/gesture.js.map +1 -0
- package/elements/base/link.d.ts +44 -0
- package/elements/base/link.d.ts.map +1 -0
- package/elements/base/link.js +206 -0
- package/elements/base/link.js.map +1 -0
- package/elements/{modal-base.d.ts → base/modal-factory.d.ts} +20 -20
- package/elements/base/modal-factory.d.ts.map +1 -0
- package/elements/{modal-base.js → base/modal-factory.js} +10 -7
- package/elements/base/modal-factory.js.map +1 -0
- package/elements/base/reflect.d.ts +6 -0
- package/elements/base/reflect.d.ts.map +1 -0
- package/elements/base/reflect.js +34 -0
- package/elements/base/reflect.js.map +1 -0
- package/elements/base/route.d.ts +78 -0
- package/elements/base/route.d.ts.map +1 -0
- package/elements/base/route.js +220 -0
- package/elements/base/route.js.map +1 -0
- package/elements/base/title.d.ts +30 -0
- package/elements/base/title.d.ts.map +1 -0
- package/elements/base/title.js +74 -0
- package/elements/base/title.js.map +1 -0
- package/elements/base/unsafe.d.ts +14 -0
- package/elements/base/unsafe.d.ts.map +1 -0
- package/elements/base/unsafe.js +42 -0
- package/elements/base/unsafe.js.map +1 -0
- package/elements/base/use.d.ts +19 -0
- package/elements/base/use.d.ts.map +1 -0
- package/elements/base/use.js +70 -0
- package/elements/base/use.js.map +1 -0
- package/elements/gesture.d.ts +1 -67
- package/elements/gesture.d.ts.map +1 -1
- package/elements/gesture.js +3 -219
- package/elements/gesture.js.map +1 -1
- package/elements/link.d.ts +1 -45
- package/elements/link.d.ts.map +1 -1
- package/elements/link.js +4 -215
- package/elements/link.js.map +1 -1
- package/elements/reflect.d.ts +1 -8
- package/elements/reflect.d.ts.map +1 -1
- package/elements/reflect.js +3 -39
- package/elements/reflect.js.map +1 -1
- package/elements/route.d.ts +1 -81
- package/elements/route.d.ts.map +1 -1
- package/elements/route.js +4 -225
- package/elements/route.js.map +1 -1
- package/elements/title.d.ts +1 -30
- package/elements/title.d.ts.map +1 -1
- package/elements/title.js +3 -75
- package/elements/title.js.map +1 -1
- package/elements/unsafe.d.ts +1 -14
- package/elements/unsafe.d.ts.map +1 -1
- package/elements/unsafe.js +3 -46
- package/elements/unsafe.js.map +1 -1
- package/elements/use.d.ts +1 -19
- package/elements/use.d.ts.map +1 -1
- package/elements/use.js +3 -74
- package/elements/use.js.map +1 -1
- package/helper/i18n.js +47 -58
- package/helper/i18n.js.map +1 -1
- package/helper/request.js +11 -19
- package/helper/request.js.map +1 -1
- package/index.d.ts +5 -4
- package/index.d.ts.map +1 -1
- package/index.js +4 -2
- package/index.js.map +1 -1
- package/lib/element.d.ts.map +1 -1
- package/lib/element.js +2 -2
- package/lib/element.js.map +1 -1
- package/lib/history.d.ts +28 -16
- package/lib/history.d.ts.map +1 -1
- package/lib/history.js +179 -169
- package/lib/history.js.map +1 -1
- package/lib/utils.d.ts +3 -1
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +7 -5
- package/lib/utils.js.map +1 -1
- package/package.json +25 -53
- package/src/{umd.ts → dist.ts} +4 -5
- package/src/elements/{dialog-base.ts → base/dialog.ts} +6 -7
- package/src/elements/base/gesture.ts +256 -0
- package/src/elements/base/link.ts +178 -0
- package/src/elements/{modal-base.ts → base/modal-factory.ts} +3 -3
- package/src/elements/base/reflect.ts +30 -0
- package/src/elements/base/route.ts +244 -0
- package/src/elements/base/title.ts +68 -0
- package/src/elements/base/unsafe.ts +37 -0
- package/src/elements/base/use.ts +57 -0
- package/src/elements/gesture.ts +3 -257
- package/src/elements/link.ts +4 -179
- package/src/elements/reflect.ts +3 -31
- package/src/elements/route.ts +4 -248
- package/src/elements/title.ts +3 -68
- package/src/elements/unsafe.ts +3 -37
- package/src/elements/use.ts +3 -57
- package/src/index.ts +4 -6
- package/src/lib/element.ts +5 -2
- package/src/lib/history.ts +183 -195
- package/src/lib/utils.ts +11 -5
- package/src/test/gem-element/advance.test.ts +1 -0
- package/src/test/gem-element/basic.test.ts +1 -0
- package/src/test/gem-element/decorators.test.ts +1 -0
- package/src/test/gem-element/multi.test.ts +1 -0
- package/src/test/history.test.ts +16 -10
- package/src/test/store.test.ts +1 -0
- package/src/test/utils.test.ts +1 -0
- package/elements/dialog-base.d.ts.map +0 -1
- package/elements/dialog-base.js.map +0 -1
- package/elements/modal-base.d.ts.map +0 -1
- package/elements/modal-base.js.map +0 -1
- package/src/examples/base-path/index.ts +0 -44
- package/src/examples/controlled/index.ts +0 -75
- package/src/examples/decorator/chidren.ts +0 -77
- package/src/examples/decorator/index.ts +0 -110
- package/src/examples/dialog/index.ts +0 -148
- package/src/examples/effect/index.ts +0 -45
- package/src/examples/elements/env.ts +0 -7
- package/src/examples/elements/layout.ts +0 -53
- package/src/examples/elements/nav.ts +0 -71
- package/src/examples/elements/source.ts +0 -68
- package/src/examples/gesture/canvas.ts +0 -69
- package/src/examples/gesture/index.ts +0 -97
- package/src/examples/gesture/manifest.json +0 -3
- package/src/examples/hash/index.ts +0 -55
- package/src/examples/i18n/index.ts +0 -63
- package/src/examples/index/index.ts +0 -33
- package/src/examples/index/manifest.json +0 -5
- package/src/examples/light-dom/index.ts +0 -31
- package/src/examples/multi-page/api.ts +0 -9
- package/src/examples/multi-page/index.ts +0 -78
- package/src/examples/multi-page/page-a.ts +0 -16
- package/src/examples/multi-page/page-b.ts +0 -12
- package/src/examples/multi-page/page-c.ts +0 -40
- package/src/examples/multi-page/store.ts +0 -10
- package/src/examples/perf-demo/index.ts +0 -136
- package/src/examples/ref-route/index.ts +0 -109
- package/src/examples/reflect/index.ts +0 -61
- package/src/examples/styled/index.ts +0 -39
- package/src/examples/svg-icon/index.ts +0 -31
- package/src/examples/theme/index.ts +0 -56
- package/src/examples/unsafe/index.ts +0 -29
- package/umd.d.ts +0 -18
- package/umd.d.ts.map +0 -1
- package/umd.js +0 -54
- package/umd.js.LICENSE.txt +0 -13
- package/umd.js.map +0 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { GemElement } from '../../lib/element';
|
|
8
|
+
import { property } from '../../lib/decorators';
|
|
9
|
+
// support prerender
|
|
10
|
+
document.querySelectorAll('[data-reflect]').forEach((e) => e.remove());
|
|
11
|
+
export class GemReflectElement extends GemElement {
|
|
12
|
+
constructor() {
|
|
13
|
+
super({ isLight: true });
|
|
14
|
+
this.target = document.head;
|
|
15
|
+
this.hidden = true;
|
|
16
|
+
this.dataset.gemreflect = '';
|
|
17
|
+
this.effect(() => {
|
|
18
|
+
const childNodes = [...this.childNodes];
|
|
19
|
+
childNodes.forEach((node) => {
|
|
20
|
+
if (node instanceof HTMLElement) {
|
|
21
|
+
node.dataset.reflect = '';
|
|
22
|
+
}
|
|
23
|
+
this.target.append(node);
|
|
24
|
+
});
|
|
25
|
+
return () => {
|
|
26
|
+
childNodes.forEach((node) => node.remove());
|
|
27
|
+
};
|
|
28
|
+
}, () => [this.target]);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
__decorate([
|
|
32
|
+
property
|
|
33
|
+
], GemReflectElement.prototype, "target", void 0);
|
|
34
|
+
//# sourceMappingURL=reflect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../src/elements/base/reflect.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,oBAAoB;AACpB,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAEvE,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAG/C;QACE,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAHjB,WAAM,GAAgB,QAAQ,CAAC,IAAI,CAAC;QAI5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CACT,GAAG,EAAE;YACH,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YACxC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC1B,IAAI,IAAI,YAAY,WAAW,EAAE;oBAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;iBAC3B;gBACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,EAAE;gBACV,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9C,CAAC,CAAC;QACJ,CAAC,EACD,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CACpB,CAAC;IACJ,CAAC;CACF;AAtBW;IAAT,QAAQ;iDAAqC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { GemElement, TemplateResult } from '../../lib/element';
|
|
2
|
+
import { Emitter } from '../../lib/decorators';
|
|
3
|
+
import { Store } from '../../lib/store';
|
|
4
|
+
import { UpdateHistoryParams } from '../../lib/history';
|
|
5
|
+
import { QueryString } from '../../lib/utils';
|
|
6
|
+
declare type Params = Record<string, string>;
|
|
7
|
+
export declare function matchPath(pattern: string, path: string): Params | null;
|
|
8
|
+
export interface RouteItem<T = unknown> {
|
|
9
|
+
pattern: string;
|
|
10
|
+
redirect?: string;
|
|
11
|
+
content?: TemplateResult;
|
|
12
|
+
getContent?: (params: Params) => TemplateResult | Promise<TemplateResult>;
|
|
13
|
+
title?: string;
|
|
14
|
+
data?: T;
|
|
15
|
+
}
|
|
16
|
+
declare type RoutesObject = Record<string, RouteItem>;
|
|
17
|
+
export interface RouteOptions extends Omit<UpdateHistoryParams, 'path'> {
|
|
18
|
+
params?: Params;
|
|
19
|
+
}
|
|
20
|
+
export declare function createPath(route: RouteItem, options?: RouteOptions): string;
|
|
21
|
+
export declare function createHistoryParams(route: RouteItem, options?: RouteOptions): UpdateHistoryParams;
|
|
22
|
+
interface ConstructorOptions {
|
|
23
|
+
isLight?: boolean;
|
|
24
|
+
routes?: RouteItem[] | RoutesObject;
|
|
25
|
+
}
|
|
26
|
+
declare type State = {
|
|
27
|
+
content?: TemplateResult;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* @attr inert 暂停路由更新
|
|
31
|
+
* @fires routechange
|
|
32
|
+
* @fires error
|
|
33
|
+
* @fires loading
|
|
34
|
+
*/
|
|
35
|
+
export declare class GemRouteElement extends GemElement<State> {
|
|
36
|
+
#private;
|
|
37
|
+
routes?: RouteItem[] | RoutesObject;
|
|
38
|
+
/**
|
|
39
|
+
* @example
|
|
40
|
+
* const locationStore = GemRouteElement.createLocationStore()
|
|
41
|
+
* html`<gem-route .locationStore=${locationStore}>`
|
|
42
|
+
*/
|
|
43
|
+
locationStore?: Store<{
|
|
44
|
+
path: string;
|
|
45
|
+
params: Params;
|
|
46
|
+
query: QueryString;
|
|
47
|
+
data?: any;
|
|
48
|
+
}>;
|
|
49
|
+
key: any;
|
|
50
|
+
routechange: Emitter<RouteItem | null>;
|
|
51
|
+
loading: Emitter<RouteItem>;
|
|
52
|
+
error: Emitter<any>;
|
|
53
|
+
currentRoute: RouteItem | null;
|
|
54
|
+
currentParams: Params;
|
|
55
|
+
static createLocationStore: () => Store<{
|
|
56
|
+
path: string;
|
|
57
|
+
query: (string | QueryString | undefined) & QueryString;
|
|
58
|
+
data: any;
|
|
59
|
+
params: Record<string, string>;
|
|
60
|
+
}>;
|
|
61
|
+
static findRoute: (target: RoutesObject | RouteItem<unknown>[] | undefined, path: string) => {
|
|
62
|
+
route: RouteItem<unknown>;
|
|
63
|
+
params: Params;
|
|
64
|
+
} | {
|
|
65
|
+
route: RouteItem<unknown> | null;
|
|
66
|
+
params?: undefined;
|
|
67
|
+
};
|
|
68
|
+
constructor({ isLight, routes }?: ConstructorOptions);
|
|
69
|
+
state: State;
|
|
70
|
+
mounted(): void;
|
|
71
|
+
shouldUpdate(): boolean;
|
|
72
|
+
render(): TemplateResult;
|
|
73
|
+
}
|
|
74
|
+
export declare class GemLightRouteElement extends GemRouteElement {
|
|
75
|
+
constructor(options?: ConstructorOptions);
|
|
76
|
+
}
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/elements/base/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAmC,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAA4B,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAuB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAyB9C,aAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAIrC,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAWtD;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO;IAKpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,IAAI,CAAC,EAAE,CAAC,CAAC;CACV;AAED,aAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAG9C,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,UASlE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,mBAAmB,CAMjG;AAED,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;CACrC;AAED,aAAK,KAAK,GAAG;IACX,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF;;;;;GAKG;AACH,qBACa,eAAgB,SAAQ,UAAU,CAAC,KAAK,CAAC;;IAC1C,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;IAC9C;;;;OAIG;IACO,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IACxF,GAAG,EAAE,GAAG,CAAC;IACV,WAAW,EAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAE7B,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IAE/B,aAAa,EAAE,MAAM,CAAM;IAI3B,MAAM,CAAC,mBAAmB;;;;;OAGxB;IAEF,MAAM,CAAC,SAAS,kEAAmD,MAAM;;;;;;MAmBvE;gBAEU,EAAE,OAAO,EAAE,MAAM,EAAE,GAAE,kBAAuB;IAKxD,KAAK,EAAE,KAAK,CAEV;IAuBF,OAAO;IAuCP,YAAY;IAKZ,MAAM;CAcP;AAED,qBAAa,oBAAqB,SAAQ,eAAe;gBAC3C,OAAO,GAAE,kBAAuB;CAG7C"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
8
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
|
+
};
|
|
13
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
14
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
15
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
16
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
17
|
+
};
|
|
18
|
+
var _GemRouteElement_lastLoader, _GemRouteElement_updateLocationStore, _GemRouteElement_setContent;
|
|
19
|
+
var GemRouteElement_1;
|
|
20
|
+
import { GemElement, html } from '../../lib/element';
|
|
21
|
+
import { property, connectStore, emitter } from '../../lib/decorators';
|
|
22
|
+
import { createStore, updateStore } from '../../lib/store';
|
|
23
|
+
import { titleStore, history } from '../../lib/history';
|
|
24
|
+
// TODO: use `URLPattern`
|
|
25
|
+
class ParamsRegExp extends RegExp {
|
|
26
|
+
constructor(pattern) {
|
|
27
|
+
const namePosition = {};
|
|
28
|
+
let i = 0;
|
|
29
|
+
super(`^${pattern
|
|
30
|
+
.replace(/:([^/$]+)/g, (_m, name) => {
|
|
31
|
+
namePosition[name] = i++;
|
|
32
|
+
return `([^/]+)`;
|
|
33
|
+
})
|
|
34
|
+
.replace('*', '.*')}$`, 'i');
|
|
35
|
+
this.namePosition = namePosition;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// `/a/b/:c/:d` `/a/b/1/2`
|
|
39
|
+
// 匹配成功时返回 params
|
|
40
|
+
export function matchPath(pattern, path) {
|
|
41
|
+
const reg = new ParamsRegExp(pattern);
|
|
42
|
+
const matchResult = path.match(reg) || `${path}/`.match(reg);
|
|
43
|
+
if (!matchResult)
|
|
44
|
+
return null;
|
|
45
|
+
const params = {};
|
|
46
|
+
if (matchResult) {
|
|
47
|
+
Object.keys(reg.namePosition).forEach((name) => {
|
|
48
|
+
params[name] = matchResult[reg.namePosition[name] + 1];
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return params;
|
|
52
|
+
}
|
|
53
|
+
// 从路由创建路径
|
|
54
|
+
// 不包含 basePath
|
|
55
|
+
export function createPath(route, options) {
|
|
56
|
+
let path = route.pattern;
|
|
57
|
+
const params = options === null || options === void 0 ? void 0 : options.params;
|
|
58
|
+
if (params) {
|
|
59
|
+
Object.keys(params).forEach((key) => {
|
|
60
|
+
path = path.replace(new RegExp(`:${key}`, 'g'), params[key]);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return path;
|
|
64
|
+
}
|
|
65
|
+
export function createHistoryParams(route, options) {
|
|
66
|
+
const path = createPath(route, options);
|
|
67
|
+
return {
|
|
68
|
+
path,
|
|
69
|
+
...options,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* @attr inert 暂停路由更新
|
|
74
|
+
* @fires routechange
|
|
75
|
+
* @fires error
|
|
76
|
+
* @fires loading
|
|
77
|
+
*/
|
|
78
|
+
let GemRouteElement = GemRouteElement_1 = class GemRouteElement extends GemElement {
|
|
79
|
+
constructor({ isLight, routes } = {}) {
|
|
80
|
+
super({ isLight });
|
|
81
|
+
// 当前匹配的路由的 params
|
|
82
|
+
this.currentParams = {};
|
|
83
|
+
_GemRouteElement_lastLoader.set(this, void 0);
|
|
84
|
+
this.state = {
|
|
85
|
+
content: undefined,
|
|
86
|
+
};
|
|
87
|
+
_GemRouteElement_updateLocationStore.set(this, () => {
|
|
88
|
+
if (this.locationStore) {
|
|
89
|
+
const { path, query, data } = history.getParams();
|
|
90
|
+
updateStore(this.locationStore, {
|
|
91
|
+
path,
|
|
92
|
+
params: this.currentParams,
|
|
93
|
+
query,
|
|
94
|
+
data,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
_GemRouteElement_setContent.set(this, (route, params, content) => {
|
|
99
|
+
__classPrivateFieldSet(this, _GemRouteElement_lastLoader, undefined, "f");
|
|
100
|
+
this.currentRoute = route;
|
|
101
|
+
this.currentParams = params;
|
|
102
|
+
this.setState({ content });
|
|
103
|
+
this.routechange(this.currentRoute);
|
|
104
|
+
__classPrivateFieldGet(this, _GemRouteElement_updateLocationStore, "f").call(this);
|
|
105
|
+
});
|
|
106
|
+
this.routes = routes;
|
|
107
|
+
}
|
|
108
|
+
mounted() {
|
|
109
|
+
this.effect(([key, path], old) => {
|
|
110
|
+
// 只有查询参数改变
|
|
111
|
+
if (old && key === old[0] && path === old[1]) {
|
|
112
|
+
__classPrivateFieldGet(this, _GemRouteElement_updateLocationStore, "f").call(this);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const { route, params = {} } = GemRouteElement_1.findRoute(this.routes, path);
|
|
116
|
+
const { redirect, content, getContent } = route || {};
|
|
117
|
+
if (redirect) {
|
|
118
|
+
history.replace({ path: redirect });
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const title = route === null || route === void 0 ? void 0 : route.title;
|
|
122
|
+
if (title)
|
|
123
|
+
updateStore(titleStore, { title });
|
|
124
|
+
const contentOrLoader = content || (getContent === null || getContent === void 0 ? void 0 : getContent(params));
|
|
125
|
+
if (contentOrLoader instanceof Promise) {
|
|
126
|
+
this.loading(route);
|
|
127
|
+
__classPrivateFieldSet(this, _GemRouteElement_lastLoader, contentOrLoader, "f");
|
|
128
|
+
const isSomeLoader = () => __classPrivateFieldGet(this, _GemRouteElement_lastLoader, "f") === contentOrLoader;
|
|
129
|
+
contentOrLoader
|
|
130
|
+
.then((content) => {
|
|
131
|
+
if (isSomeLoader())
|
|
132
|
+
__classPrivateFieldGet(this, _GemRouteElement_setContent, "f").call(this, route, params, content);
|
|
133
|
+
})
|
|
134
|
+
.catch((err) => {
|
|
135
|
+
if (isSomeLoader())
|
|
136
|
+
this.error(err);
|
|
137
|
+
});
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
__classPrivateFieldGet(this, _GemRouteElement_setContent, "f").call(this, route, params, contentOrLoader);
|
|
141
|
+
}, () => {
|
|
142
|
+
const { path } = history.getParams();
|
|
143
|
+
return [this.key, path, location.search];
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
shouldUpdate() {
|
|
147
|
+
if (this.inert)
|
|
148
|
+
return false;
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
render() {
|
|
152
|
+
const { content } = this.state;
|
|
153
|
+
if (!this.shadowRoot)
|
|
154
|
+
return html `${content}`;
|
|
155
|
+
return html `
|
|
156
|
+
<style>
|
|
157
|
+
:host,
|
|
158
|
+
:not(:defined) {
|
|
159
|
+
display: contents;
|
|
160
|
+
}
|
|
161
|
+
</style>
|
|
162
|
+
${content !== null && content !== void 0 ? content : html `<slot></slot>`}
|
|
163
|
+
`;
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
_GemRouteElement_lastLoader = new WeakMap(), _GemRouteElement_updateLocationStore = new WeakMap(), _GemRouteElement_setContent = new WeakMap();
|
|
167
|
+
GemRouteElement.createLocationStore = () => {
|
|
168
|
+
const { path, query, data } = history.getParams();
|
|
169
|
+
return createStore({ path, query, data, params: {} });
|
|
170
|
+
};
|
|
171
|
+
GemRouteElement.findRoute = (target = [], path) => {
|
|
172
|
+
let defaultRoute = null;
|
|
173
|
+
let routes;
|
|
174
|
+
if (target instanceof Array) {
|
|
175
|
+
routes = target;
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
routes = Object.values(target);
|
|
179
|
+
}
|
|
180
|
+
for (const route of routes) {
|
|
181
|
+
if ('*' === route.pattern) {
|
|
182
|
+
defaultRoute = route;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
const params = matchPath(route.pattern, path);
|
|
186
|
+
if (params) {
|
|
187
|
+
return { route, params };
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return { route: defaultRoute };
|
|
192
|
+
};
|
|
193
|
+
__decorate([
|
|
194
|
+
property
|
|
195
|
+
], GemRouteElement.prototype, "routes", void 0);
|
|
196
|
+
__decorate([
|
|
197
|
+
property
|
|
198
|
+
], GemRouteElement.prototype, "locationStore", void 0);
|
|
199
|
+
__decorate([
|
|
200
|
+
property
|
|
201
|
+
], GemRouteElement.prototype, "key", void 0);
|
|
202
|
+
__decorate([
|
|
203
|
+
emitter
|
|
204
|
+
], GemRouteElement.prototype, "routechange", void 0);
|
|
205
|
+
__decorate([
|
|
206
|
+
emitter
|
|
207
|
+
], GemRouteElement.prototype, "loading", void 0);
|
|
208
|
+
__decorate([
|
|
209
|
+
emitter
|
|
210
|
+
], GemRouteElement.prototype, "error", void 0);
|
|
211
|
+
GemRouteElement = GemRouteElement_1 = __decorate([
|
|
212
|
+
connectStore(history.store)
|
|
213
|
+
], GemRouteElement);
|
|
214
|
+
export { GemRouteElement };
|
|
215
|
+
export class GemLightRouteElement extends GemRouteElement {
|
|
216
|
+
constructor(options = {}) {
|
|
217
|
+
super({ ...options, isLight: true });
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/elements/base/route.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 标题显示在:
|
|
3
|
+
*
|
|
4
|
+
* - 桌面端 Tab 的 title
|
|
5
|
+
* - 移动端 Appbar 的 title
|
|
6
|
+
*
|
|
7
|
+
* 修改标题:
|
|
8
|
+
*
|
|
9
|
+
* - `<gem-route>` 匹配路由时自动设置 `route.title`
|
|
10
|
+
* - `<gem-link>` 的 `doc-title` 属性和 `route.title`
|
|
11
|
+
* - 修改路径时,`history` 默认设置 `title` 为空
|
|
12
|
+
* - 数据获取后,手动调用 `Title.setTitle`
|
|
13
|
+
* - `<gem-title>` 作为默认值设置
|
|
14
|
+
*/
|
|
15
|
+
import { GemElement } from '../../lib/element';
|
|
16
|
+
/**
|
|
17
|
+
* 允许声明式设置 `document.title`
|
|
18
|
+
* @attr suffix
|
|
19
|
+
*/
|
|
20
|
+
export declare class GemTitleElement extends GemElement {
|
|
21
|
+
static title: string;
|
|
22
|
+
static defaultTitle: string;
|
|
23
|
+
static defaultSuffix: string;
|
|
24
|
+
static setTitle(title: string): void;
|
|
25
|
+
static updateTitle(str?: string, suffix?: string): void;
|
|
26
|
+
suffix: string;
|
|
27
|
+
constructor();
|
|
28
|
+
render(): import("lit-html/lib/template-result").TemplateResult;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=title.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"title.d.ts","sourceRoot":"","sources":["../../src/elements/base/title.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAQ,MAAM,mBAAmB,CAAC;AAKrD;;;GAGG;AACH,qBACa,eAAgB,SAAQ,UAAU;IAE7C,MAAM,CAAC,KAAK,SAAkB;IAC9B,MAAM,CAAC,YAAY,SAAkB;IACrC,MAAM,CAAC,aAAa,SAA0B;IAE9C,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAI7B,MAAM,CAAC,WAAW,CAAC,GAAG,SAAK,EAAE,MAAM,SAAK;IAc7B,MAAM,EAAE,MAAM,CAAC;;IAO1B,MAAM;CASP"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 标题显示在:
|
|
3
|
+
*
|
|
4
|
+
* - 桌面端 Tab 的 title
|
|
5
|
+
* - 移动端 Appbar 的 title
|
|
6
|
+
*
|
|
7
|
+
* 修改标题:
|
|
8
|
+
*
|
|
9
|
+
* - `<gem-route>` 匹配路由时自动设置 `route.title`
|
|
10
|
+
* - `<gem-link>` 的 `doc-title` 属性和 `route.title`
|
|
11
|
+
* - 修改路径时,`history` 默认设置 `title` 为空
|
|
12
|
+
* - 数据获取后,手动调用 `Title.setTitle`
|
|
13
|
+
* - `<gem-title>` 作为默认值设置
|
|
14
|
+
*/
|
|
15
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
16
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
17
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
18
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
19
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
20
|
+
};
|
|
21
|
+
var GemTitleElement_1;
|
|
22
|
+
import { GemElement, html } from '../../lib/element';
|
|
23
|
+
import { attribute, connectStore } from '../../lib/decorators';
|
|
24
|
+
import { updateStore, connect } from '../../lib/store';
|
|
25
|
+
import { titleStore } from '../../lib/history';
|
|
26
|
+
/**
|
|
27
|
+
* 允许声明式设置 `document.title`
|
|
28
|
+
* @attr suffix
|
|
29
|
+
*/
|
|
30
|
+
let GemTitleElement = GemTitleElement_1 = class GemTitleElement extends GemElement {
|
|
31
|
+
constructor() {
|
|
32
|
+
super();
|
|
33
|
+
new MutationObserver(() => this.update()).observe(this, { childList: true, characterData: true, subtree: true });
|
|
34
|
+
}
|
|
35
|
+
static setTitle(title) {
|
|
36
|
+
updateStore(titleStore, { title });
|
|
37
|
+
}
|
|
38
|
+
static updateTitle(str = '', suffix = '') {
|
|
39
|
+
const { title } = titleStore;
|
|
40
|
+
if (title && title !== GemTitleElement_1.defaultTitle) {
|
|
41
|
+
GemTitleElement_1.title = title;
|
|
42
|
+
document.title = GemTitleElement_1.title + suffix;
|
|
43
|
+
}
|
|
44
|
+
else if (str) {
|
|
45
|
+
GemTitleElement_1.title = str;
|
|
46
|
+
document.title = GemTitleElement_1.title + suffix;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
GemTitleElement_1.title = GemTitleElement_1.defaultTitle;
|
|
50
|
+
document.title = GemTitleElement_1.title;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
render() {
|
|
54
|
+
// 多个 <gem-title> 时,最终 document.title 按执行顺序决定
|
|
55
|
+
GemTitleElement_1.updateTitle(this.textContent || '', this.suffix);
|
|
56
|
+
if (this.hidden) {
|
|
57
|
+
return html ``;
|
|
58
|
+
}
|
|
59
|
+
return html `${GemTitleElement_1.title}`;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
// 没有后缀的标题
|
|
63
|
+
GemTitleElement.title = document.title;
|
|
64
|
+
GemTitleElement.defaultTitle = document.title;
|
|
65
|
+
GemTitleElement.defaultSuffix = ` - ${document.title}`;
|
|
66
|
+
__decorate([
|
|
67
|
+
attribute
|
|
68
|
+
], GemTitleElement.prototype, "suffix", void 0);
|
|
69
|
+
GemTitleElement = GemTitleElement_1 = __decorate([
|
|
70
|
+
connectStore(titleStore)
|
|
71
|
+
], GemTitleElement);
|
|
72
|
+
export { GemTitleElement };
|
|
73
|
+
connect(titleStore, GemTitleElement.updateTitle);
|
|
74
|
+
//# sourceMappingURL=title.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"title.js","sourceRoot":"","sources":["../../src/elements/base/title.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;;;;;;;;AAEH,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;GAGG;AAEH,IAAa,eAAe,uBAA5B,MAAa,eAAgB,SAAQ,UAAU;IA0B7C;QACE,KAAK,EAAE,CAAC;QACR,IAAI,gBAAgB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnH,CAAC;IAvBD,MAAM,CAAC,QAAQ,CAAC,KAAa;QAC3B,WAAW,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE;QACtC,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;QAC7B,IAAI,KAAK,IAAI,KAAK,KAAK,iBAAe,CAAC,YAAY,EAAE;YACnD,iBAAe,CAAC,KAAK,GAAG,KAAK,CAAC;YAC9B,QAAQ,CAAC,KAAK,GAAG,iBAAe,CAAC,KAAK,GAAG,MAAM,CAAC;SACjD;aAAM,IAAI,GAAG,EAAE;YACd,iBAAe,CAAC,KAAK,GAAG,GAAG,CAAC;YAC5B,QAAQ,CAAC,KAAK,GAAG,iBAAe,CAAC,KAAK,GAAG,MAAM,CAAC;SACjD;aAAM;YACL,iBAAe,CAAC,KAAK,GAAG,iBAAe,CAAC,YAAY,CAAC;YACrD,QAAQ,CAAC,KAAK,GAAG,iBAAe,CAAC,KAAK,CAAC;SACxC;IACH,CAAC;IASD,MAAM;QACJ,6CAA6C;QAC7C,iBAAe,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjE,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO,IAAI,CAAA,EAAE,CAAC;SACf;QACD,OAAO,IAAI,CAAA,GAAG,iBAAe,CAAC,KAAK,EAAE,CAAC;IACxC,CAAC;CACF,CAAA;AAvCC,UAAU;AACH,qBAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;AACvB,4BAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC9B,6BAAa,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;AAoBnC;IAAV,SAAS;+CAAgB;AAxBf,eAAe;IAD3B,YAAY,CAAC,UAAU,CAAC;GACZ,eAAe,CAwC3B;SAxCY,eAAe;AA0C5B,OAAO,CAAC,UAAU,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { GemElement } from '../../lib/element';
|
|
2
|
+
/**
|
|
3
|
+
* 直接写会被解释成固定属性,需要使用变量赋值
|
|
4
|
+
*
|
|
5
|
+
* @attr content
|
|
6
|
+
* @attr contentcss
|
|
7
|
+
*/
|
|
8
|
+
export declare class GemUnsafeElement extends GemElement {
|
|
9
|
+
content: string;
|
|
10
|
+
contentcss: string;
|
|
11
|
+
constructor();
|
|
12
|
+
render(): undefined;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=unsafe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsafe.d.ts","sourceRoot":"","sources":["../../src/elements/base/unsafe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;;IAsB9B,MAAM;CAGP"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { GemElement } from '../../lib/element';
|
|
8
|
+
import { attribute } from '../../lib/decorators';
|
|
9
|
+
/**
|
|
10
|
+
* 直接写会被解释成固定属性,需要使用变量赋值
|
|
11
|
+
*
|
|
12
|
+
* @attr content
|
|
13
|
+
* @attr contentcss
|
|
14
|
+
*/
|
|
15
|
+
export class GemUnsafeElement extends GemElement {
|
|
16
|
+
constructor() {
|
|
17
|
+
super();
|
|
18
|
+
this.effect(() => {
|
|
19
|
+
if (this.shadowRoot) {
|
|
20
|
+
this.shadowRoot.innerHTML = `
|
|
21
|
+
<style>
|
|
22
|
+
:host {
|
|
23
|
+
display: contents;
|
|
24
|
+
}
|
|
25
|
+
${this.contentcss}
|
|
26
|
+
</style>
|
|
27
|
+
${this.content}
|
|
28
|
+
`;
|
|
29
|
+
}
|
|
30
|
+
}, () => [this.content, this.contentcss]);
|
|
31
|
+
}
|
|
32
|
+
render() {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
__decorate([
|
|
37
|
+
attribute
|
|
38
|
+
], GemUnsafeElement.prototype, "content", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
attribute
|
|
41
|
+
], GemUnsafeElement.prototype, "contentcss", void 0);
|
|
42
|
+
//# sourceMappingURL=unsafe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsafe.js","sourceRoot":"","sources":["../../src/elements/base/unsafe.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAI9C;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,CACT,GAAG,EAAE;YACH,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG;;;;;gBAKtB,IAAI,CAAC,UAAU;;cAEjB,IAAI,CAAC,OAAO;WACf,CAAC;aACH;QACH,CAAC,EACD,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CACtC,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AA1BY;IAAV,SAAS;iDAAiB;AAChB;IAAV,SAAS;oDAAoB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { GemElement } from '../../lib/element';
|
|
2
|
+
/**
|
|
3
|
+
* svg 中的 `<use>` 不能穿透 ShadowDOM,
|
|
4
|
+
* 此元素用来模拟 `<use>`,
|
|
5
|
+
* 由于是复制元素,所以不能像 `<use>` 一样自动更新
|
|
6
|
+
*
|
|
7
|
+
* slot 支持为 icon 添加效果,如涟漪,徽章
|
|
8
|
+
*
|
|
9
|
+
* @attr selector
|
|
10
|
+
*/
|
|
11
|
+
export declare class GemUseElement extends GemElement {
|
|
12
|
+
selector: string;
|
|
13
|
+
root?: HTMLElement | Document | ShadowRoot;
|
|
14
|
+
element?: string | DocumentFragment | Element;
|
|
15
|
+
active: boolean;
|
|
16
|
+
private getContent;
|
|
17
|
+
render(): import("lit-html/lib/template-result").TemplateResult;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=use.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../src/elements/base/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,mBAAmB,CAAC;AAIrD;;;;;;;;GAQG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAChC,QAAQ,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,OAAO,CAAC;IAEjD,MAAM,EAAE,OAAO,CAAC;IAEvB,OAAO,CAAC,UAAU;IAiBlB,MAAM;CAmBP"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { GemElement, html } from '../../lib/element';
|
|
8
|
+
import { attribute, property, state } from '../../lib/decorators';
|
|
9
|
+
const eleCache = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* svg 中的 `<use>` 不能穿透 ShadowDOM,
|
|
12
|
+
* 此元素用来模拟 `<use>`,
|
|
13
|
+
* 由于是复制元素,所以不能像 `<use>` 一样自动更新
|
|
14
|
+
*
|
|
15
|
+
* slot 支持为 icon 添加效果,如涟漪,徽章
|
|
16
|
+
*
|
|
17
|
+
* @attr selector
|
|
18
|
+
*/
|
|
19
|
+
export class GemUseElement extends GemElement {
|
|
20
|
+
getContent() {
|
|
21
|
+
const ele = this.element || (this.selector ? (this.root || document).querySelector(this.selector) : null);
|
|
22
|
+
if (typeof ele === 'string') {
|
|
23
|
+
let temp = eleCache.get(ele);
|
|
24
|
+
if (!temp) {
|
|
25
|
+
temp = document.createElement('template');
|
|
26
|
+
temp.innerHTML = ele;
|
|
27
|
+
eleCache.set(ele, temp);
|
|
28
|
+
}
|
|
29
|
+
return temp.content.cloneNode(true);
|
|
30
|
+
}
|
|
31
|
+
else if (ele instanceof HTMLTemplateElement) {
|
|
32
|
+
return ele.content.cloneNode(true);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return ele === null || ele === void 0 ? void 0 : ele.cloneNode(true);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
render() {
|
|
39
|
+
return html `
|
|
40
|
+
<style>
|
|
41
|
+
:host {
|
|
42
|
+
position: relative;
|
|
43
|
+
}
|
|
44
|
+
:host(:not([hidden])) {
|
|
45
|
+
display: inline-flex;
|
|
46
|
+
align-items: center;
|
|
47
|
+
}
|
|
48
|
+
svg {
|
|
49
|
+
width: 100%;
|
|
50
|
+
height: 100%;
|
|
51
|
+
}
|
|
52
|
+
</style>
|
|
53
|
+
${this.getContent()}
|
|
54
|
+
<slot></slot>
|
|
55
|
+
`;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
__decorate([
|
|
59
|
+
attribute
|
|
60
|
+
], GemUseElement.prototype, "selector", void 0);
|
|
61
|
+
__decorate([
|
|
62
|
+
property
|
|
63
|
+
], GemUseElement.prototype, "root", void 0);
|
|
64
|
+
__decorate([
|
|
65
|
+
property
|
|
66
|
+
], GemUseElement.prototype, "element", void 0);
|
|
67
|
+
__decorate([
|
|
68
|
+
state
|
|
69
|
+
], GemUseElement.prototype, "active", void 0);
|
|
70
|
+
//# sourceMappingURL=use.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use.js","sourceRoot":"","sources":["../../src/elements/base/use.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;AACxD;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAc,SAAQ,UAAU;IAOnC,UAAU;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1G,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,EAAE;gBACT,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBAC1C,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;gBACrB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;aACzB;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACrC;aAAM,IAAI,GAAG,YAAY,mBAAmB,EAAE;YAC7C,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACpC;aAAM;YACL,OAAO,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,CAAC,IAAI,CAAC,CAAC;SAC7B;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;QAcP,IAAI,CAAC,UAAU,EAAE;;KAEpB,CAAC;IACJ,CAAC;CACF;AA1CY;IAAV,SAAS;+CAAkB;AAClB;IAAT,QAAQ;2CAA4C;AAC3C;IAAT,QAAQ;8CAA+C;AAEjD;IAAN,KAAK;6CAAiB"}
|