@alignable/bifrost 0.0.10 → 0.0.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/dist/types/internal.d.ts +9 -0
- package/dist/types/internal.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/lib/getGlobalObject.d.ts +0 -5
- package/dist/lib/getGlobalObject.d.ts.map +0 -1
- package/dist/lib/getGlobalObject.js +0 -7
- package/dist/lib/turbolinks/adapter.d.ts +0 -17
- package/dist/lib/turbolinks/adapter.d.ts.map +0 -1
- package/dist/lib/turbolinks/adapter.js +0 -1
- package/dist/lib/turbolinks/browser_adapter.d.ts +0 -28
- package/dist/lib/turbolinks/browser_adapter.d.ts.map +0 -1
- package/dist/lib/turbolinks/browser_adapter.js +0 -71
- package/dist/lib/turbolinks/controller.d.ts +0 -101
- package/dist/lib/turbolinks/controller.d.ts.map +0 -1
- package/dist/lib/turbolinks/controller.js +0 -290
- package/dist/lib/turbolinks/head_details.d.ts +0 -23
- package/dist/lib/turbolinks/head_details.d.ts.map +0 -1
- package/dist/lib/turbolinks/head_details.js +0 -92
- package/dist/lib/turbolinks/history.d.ts +0 -22
- package/dist/lib/turbolinks/history.d.ts.map +0 -1
- package/dist/lib/turbolinks/history.js +0 -60
- package/dist/lib/turbolinks/index.d.ts +0 -14
- package/dist/lib/turbolinks/index.d.ts.map +0 -1
- package/dist/lib/turbolinks/index.js +0 -55
- package/dist/lib/turbolinks/location.d.ts +0 -23
- package/dist/lib/turbolinks/location.d.ts.map +0 -1
- package/dist/lib/turbolinks/location.js +0 -75
- package/dist/lib/turbolinks/namespace.d.ts +0 -12
- package/dist/lib/turbolinks/namespace.d.ts.map +0 -1
- package/dist/lib/turbolinks/namespace.js +0 -20
- package/dist/lib/turbolinks/passthrough_renderer.d.ts +0 -32
- package/dist/lib/turbolinks/passthrough_renderer.d.ts.map +0 -1
- package/dist/lib/turbolinks/passthrough_renderer.js +0 -128
- package/dist/lib/turbolinks/progress_bar.d.ts +0 -24
- package/dist/lib/turbolinks/progress_bar.d.ts.map +0 -1
- package/dist/lib/turbolinks/progress_bar.js +0 -99
- package/dist/lib/turbolinks/renderer.d.ts +0 -14
- package/dist/lib/turbolinks/renderer.d.ts.map +0 -1
- package/dist/lib/turbolinks/renderer.js +0 -28
- package/dist/lib/turbolinks/scroll_manager.d.ts +0 -16
- package/dist/lib/turbolinks/scroll_manager.d.ts.map +0 -1
- package/dist/lib/turbolinks/scroll_manager.js +0 -32
- package/dist/lib/turbolinks/snapshot.d.ts +0 -25
- package/dist/lib/turbolinks/snapshot.d.ts.map +0 -1
- package/dist/lib/turbolinks/snapshot.js +0 -77
- package/dist/lib/turbolinks/snapshot_cache.d.ts +0 -18
- package/dist/lib/turbolinks/snapshot_cache.d.ts.map +0 -1
- package/dist/lib/turbolinks/snapshot_cache.js +0 -42
- package/dist/lib/turbolinks/snapshot_renderer copy.d.ts +0 -45
- package/dist/lib/turbolinks/snapshot_renderer copy.d.ts.map +0 -1
- package/dist/lib/turbolinks/snapshot_renderer copy.js +0 -179
- package/dist/lib/turbolinks/snapshot_renderer.d.ts +0 -43
- package/dist/lib/turbolinks/snapshot_renderer.d.ts.map +0 -1
- package/dist/lib/turbolinks/snapshot_renderer.js +0 -139
- package/dist/lib/turbolinks/types.d.ts +0 -7
- package/dist/lib/turbolinks/types.d.ts.map +0 -1
- package/dist/lib/turbolinks/types.js +0 -3
- package/dist/lib/turbolinks/util.d.ts +0 -14
- package/dist/lib/turbolinks/util.d.ts.map +0 -1
- package/dist/lib/turbolinks/util.js +0 -85
- package/dist/lib/turbolinks/view.d.ts +0 -21
- package/dist/lib/turbolinks/view.d.ts.map +0 -1
- package/dist/lib/turbolinks/view.js +0 -42
- package/dist/lib/turbolinks/visit.d.ts +0 -73
- package/dist/lib/turbolinks/visit.d.ts.map +0 -1
- package/dist/lib/turbolinks/visit.js +0 -227
- package/dist/proxy/pages/onPageTransitionStart.d.ts +0 -3
- package/dist/proxy/pages/onPageTransitionStart.d.ts.map +0 -1
- package/dist/proxy/pages/onPageTransitionStart.js +0 -9
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { unindent } from "./util";
|
|
2
|
-
class ProgressBar {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.stylesheetElement = this.createStylesheetElement();
|
|
5
|
-
this.progressElement = this.createProgressElement();
|
|
6
|
-
this.hiding = false;
|
|
7
|
-
this.value = 0;
|
|
8
|
-
this.visible = false;
|
|
9
|
-
this.trickle = () => {
|
|
10
|
-
this.setValue(this.value + Math.random() / 100);
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
static get defaultCSS() {
|
|
14
|
-
return unindent `
|
|
15
|
-
.turbolinks-progress-bar {
|
|
16
|
-
position: fixed;
|
|
17
|
-
display: block;
|
|
18
|
-
top: 0;
|
|
19
|
-
left: 0;
|
|
20
|
-
height: 3px;
|
|
21
|
-
background: #0076ff;
|
|
22
|
-
z-index: 9999;
|
|
23
|
-
transition:
|
|
24
|
-
width ${ProgressBar.animationDuration}ms ease-out,
|
|
25
|
-
opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;
|
|
26
|
-
transform: translate3d(0, 0, 0);
|
|
27
|
-
}
|
|
28
|
-
`;
|
|
29
|
-
}
|
|
30
|
-
show() {
|
|
31
|
-
if (!this.visible) {
|
|
32
|
-
this.visible = true;
|
|
33
|
-
this.installStylesheetElement();
|
|
34
|
-
this.installProgressElement();
|
|
35
|
-
this.startTrickling();
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
hide() {
|
|
39
|
-
if (this.visible && !this.hiding) {
|
|
40
|
-
this.hiding = true;
|
|
41
|
-
this.fadeProgressElement(() => {
|
|
42
|
-
this.uninstallProgressElement();
|
|
43
|
-
this.stopTrickling();
|
|
44
|
-
this.visible = false;
|
|
45
|
-
this.hiding = false;
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
setValue(value) {
|
|
50
|
-
this.value = value;
|
|
51
|
-
this.refresh();
|
|
52
|
-
}
|
|
53
|
-
// Private
|
|
54
|
-
installStylesheetElement() {
|
|
55
|
-
document.head.insertBefore(this.stylesheetElement, document.head.firstChild);
|
|
56
|
-
}
|
|
57
|
-
installProgressElement() {
|
|
58
|
-
this.progressElement.style.width = "0";
|
|
59
|
-
this.progressElement.style.opacity = "1";
|
|
60
|
-
document.documentElement.insertBefore(this.progressElement, document.body);
|
|
61
|
-
this.refresh();
|
|
62
|
-
}
|
|
63
|
-
fadeProgressElement(callback) {
|
|
64
|
-
this.progressElement.style.opacity = "0";
|
|
65
|
-
setTimeout(callback, ProgressBar.animationDuration * 1.5);
|
|
66
|
-
}
|
|
67
|
-
uninstallProgressElement() {
|
|
68
|
-
if (this.progressElement.parentNode) {
|
|
69
|
-
document.documentElement.removeChild(this.progressElement);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
startTrickling() {
|
|
73
|
-
if (!this.trickleInterval) {
|
|
74
|
-
this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
stopTrickling() {
|
|
78
|
-
window.clearInterval(this.trickleInterval);
|
|
79
|
-
delete this.trickleInterval;
|
|
80
|
-
}
|
|
81
|
-
refresh() {
|
|
82
|
-
requestAnimationFrame(() => {
|
|
83
|
-
this.progressElement.style.width = `${10 + this.value * 90}%`;
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
createStylesheetElement() {
|
|
87
|
-
const element = document.createElement("style");
|
|
88
|
-
element.type = "text/css";
|
|
89
|
-
element.textContent = ProgressBar.defaultCSS;
|
|
90
|
-
return element;
|
|
91
|
-
}
|
|
92
|
-
createProgressElement() {
|
|
93
|
-
const element = document.createElement("div");
|
|
94
|
-
element.className = "turbolinks-progress-bar";
|
|
95
|
-
return element;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
ProgressBar.animationDuration = 300; /*ms*/
|
|
99
|
-
export { ProgressBar };
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export type RenderCallback = () => void;
|
|
2
|
-
export interface RenderDelegate {
|
|
3
|
-
viewWillRender(newBody: HTMLBodyElement): void;
|
|
4
|
-
viewRendered(newBody: HTMLBodyElement): void;
|
|
5
|
-
viewInvalidated(): void;
|
|
6
|
-
}
|
|
7
|
-
export declare abstract class Renderer {
|
|
8
|
-
abstract delegate: RenderDelegate;
|
|
9
|
-
abstract newBody: HTMLBodyElement;
|
|
10
|
-
renderView(callback: RenderCallback): void;
|
|
11
|
-
invalidateView(): void;
|
|
12
|
-
createScriptElement(element: Element): Element;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/renderer.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AAExC,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/C,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7C,eAAe,IAAI,IAAI,CAAC;CACzB;AAED,8BAAsB,QAAQ;IAC5B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAElC,UAAU,CAAC,QAAQ,EAAE,cAAc;IAMnC,cAAc;IAId,mBAAmB,CAAC,OAAO,EAAE,OAAO;CAWrC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { array } from "./util";
|
|
2
|
-
export class Renderer {
|
|
3
|
-
renderView(callback) {
|
|
4
|
-
this.delegate.viewWillRender(this.newBody);
|
|
5
|
-
callback();
|
|
6
|
-
this.delegate.viewRendered(this.newBody);
|
|
7
|
-
}
|
|
8
|
-
invalidateView() {
|
|
9
|
-
this.delegate.viewInvalidated();
|
|
10
|
-
}
|
|
11
|
-
createScriptElement(element) {
|
|
12
|
-
if (element.getAttribute("data-turbolinks-eval") == "false") {
|
|
13
|
-
return element;
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
const createdScriptElement = document.createElement("script");
|
|
17
|
-
createdScriptElement.textContent = element.textContent;
|
|
18
|
-
createdScriptElement.async = false;
|
|
19
|
-
copyElementAttributes(createdScriptElement, element);
|
|
20
|
-
return createdScriptElement;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
function copyElementAttributes(destinationElement, sourceElement) {
|
|
25
|
-
for (const { name, value } of array(sourceElement.attributes)) {
|
|
26
|
-
destinationElement.setAttribute(name, value);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Position } from "./types";
|
|
2
|
-
export interface ScrollManagerDelegate {
|
|
3
|
-
scrollPositionChanged(position: Position): void;
|
|
4
|
-
}
|
|
5
|
-
export declare class ScrollManager {
|
|
6
|
-
readonly delegate: ScrollManagerDelegate;
|
|
7
|
-
started: boolean;
|
|
8
|
-
constructor(delegate: ScrollManagerDelegate);
|
|
9
|
-
start(): void;
|
|
10
|
-
stop(): void;
|
|
11
|
-
scrollToElement(element: Element): void;
|
|
12
|
-
scrollToPosition({ x, y }: Position): void;
|
|
13
|
-
onScroll: () => void;
|
|
14
|
-
updatePosition(position: Position): void;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=scroll_manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scroll_manager.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/scroll_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,WAAW,qBAAqB;IACpC,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CACjD;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,OAAO,UAAS;gBAEJ,QAAQ,EAAE,qBAAqB;IAI3C,KAAK;IAQL,IAAI;IAOJ,eAAe,CAAC,OAAO,EAAE,OAAO;IAIhC,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ;IAInC,QAAQ,aAEN;IAIF,cAAc,CAAC,QAAQ,EAAE,QAAQ;CAGlC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
export class ScrollManager {
|
|
2
|
-
constructor(delegate) {
|
|
3
|
-
this.started = false;
|
|
4
|
-
this.onScroll = () => {
|
|
5
|
-
this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });
|
|
6
|
-
};
|
|
7
|
-
this.delegate = delegate;
|
|
8
|
-
}
|
|
9
|
-
start() {
|
|
10
|
-
if (!this.started) {
|
|
11
|
-
addEventListener("scroll", this.onScroll, false);
|
|
12
|
-
this.onScroll();
|
|
13
|
-
this.started = true;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
stop() {
|
|
17
|
-
if (this.started) {
|
|
18
|
-
removeEventListener("scroll", this.onScroll, false);
|
|
19
|
-
this.started = false;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
scrollToElement(element) {
|
|
23
|
-
element.scrollIntoView();
|
|
24
|
-
}
|
|
25
|
-
scrollToPosition({ x, y }) {
|
|
26
|
-
window.scrollTo(x, y);
|
|
27
|
-
}
|
|
28
|
-
// Private
|
|
29
|
-
updatePosition(position) {
|
|
30
|
-
this.delegate.scrollPositionChanged(position);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { HeadDetails } from "./head_details";
|
|
2
|
-
import { Location } from "./location";
|
|
3
|
-
export declare class Snapshot {
|
|
4
|
-
static wrap(value: Snapshot | string | HTMLHtmlElement): Snapshot;
|
|
5
|
-
static fromHTMLString(html: string): Snapshot;
|
|
6
|
-
static fromHTMLElement(htmlElement: HTMLHtmlElement): Snapshot;
|
|
7
|
-
readonly headDetails: HeadDetails;
|
|
8
|
-
readonly bodyElement: HTMLBodyElement;
|
|
9
|
-
constructor(headDetails: HeadDetails, bodyElement: HTMLBodyElement);
|
|
10
|
-
clone(): Snapshot;
|
|
11
|
-
getRootLocation(): Location;
|
|
12
|
-
getCacheControlValue(): string | undefined;
|
|
13
|
-
getElementForAnchor(anchor: string): Element | null;
|
|
14
|
-
getPermanentElements(): Element[];
|
|
15
|
-
getPermanentElementById(id: string): Element | null;
|
|
16
|
-
getPermanentElementsPresentInSnapshot(snapshot: Snapshot): Element[];
|
|
17
|
-
findFirstAutofocusableElement(): Element | null;
|
|
18
|
-
hasAnchor(anchor: string): boolean;
|
|
19
|
-
isPreviewable(): boolean;
|
|
20
|
-
isCacheable(): boolean;
|
|
21
|
-
isVisitable(): boolean;
|
|
22
|
-
getSetting(name: string): string | undefined;
|
|
23
|
-
getSetting(name: string, defaultValue: string): string;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,qBAAa,QAAQ;IACnB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,eAAe;IAUtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM;IAMlC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,eAAe;IAQnD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;gBAE1B,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe;IAKlE,KAAK,IAAI,QAAQ;IAOjB,eAAe;IAKf,oBAAoB;IAIpB,mBAAmB,CAAC,MAAM,EAAE,MAAM;IAUlC,oBAAoB;IAMpB,uBAAuB,CAAC,EAAE,EAAE,MAAM;IAIlC,qCAAqC,CAAC,QAAQ,EAAE,QAAQ;IAMxD,6BAA6B;IAI7B,SAAS,CAAC,MAAM,EAAE,MAAM;IAIxB,aAAa;IAIb,WAAW;IAIX,WAAW;IAMX,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAC5C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;CAKvD"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { HeadDetails } from "./head_details";
|
|
2
|
-
import { Location } from "./location";
|
|
3
|
-
import { array } from "./util";
|
|
4
|
-
export class Snapshot {
|
|
5
|
-
static wrap(value) {
|
|
6
|
-
if (value instanceof this) {
|
|
7
|
-
return value;
|
|
8
|
-
}
|
|
9
|
-
else if (typeof value == "string") {
|
|
10
|
-
return this.fromHTMLString(value);
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
return this.fromHTMLElement(value);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
static fromHTMLString(html) {
|
|
17
|
-
const element = document.createElement("html");
|
|
18
|
-
element.innerHTML = html;
|
|
19
|
-
return this.fromHTMLElement(element);
|
|
20
|
-
}
|
|
21
|
-
static fromHTMLElement(htmlElement) {
|
|
22
|
-
const headElement = htmlElement.querySelector("head");
|
|
23
|
-
const bodyElement = htmlElement.querySelector("body") || document.createElement("body");
|
|
24
|
-
const headDetails = HeadDetails.fromHeadElement(headElement);
|
|
25
|
-
return new this(headDetails, bodyElement);
|
|
26
|
-
}
|
|
27
|
-
constructor(headDetails, bodyElement) {
|
|
28
|
-
this.headDetails = headDetails;
|
|
29
|
-
this.bodyElement = bodyElement;
|
|
30
|
-
}
|
|
31
|
-
clone() {
|
|
32
|
-
return new Snapshot(this.headDetails, this.bodyElement.cloneNode(true));
|
|
33
|
-
}
|
|
34
|
-
getRootLocation() {
|
|
35
|
-
const root = this.getSetting("root", "/");
|
|
36
|
-
return new Location(root);
|
|
37
|
-
}
|
|
38
|
-
getCacheControlValue() {
|
|
39
|
-
return this.getSetting("cache-control");
|
|
40
|
-
}
|
|
41
|
-
getElementForAnchor(anchor) {
|
|
42
|
-
try {
|
|
43
|
-
return this.bodyElement.querySelector(`[id='${anchor}'], a[name='${anchor}']`);
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
getPermanentElements() {
|
|
50
|
-
return array(this.bodyElement.querySelectorAll("[id][data-turbolinks-permanent]"));
|
|
51
|
-
}
|
|
52
|
-
getPermanentElementById(id) {
|
|
53
|
-
return this.bodyElement.querySelector(`#${id}[data-turbolinks-permanent]`);
|
|
54
|
-
}
|
|
55
|
-
getPermanentElementsPresentInSnapshot(snapshot) {
|
|
56
|
-
return this.getPermanentElements().filter(({ id }) => snapshot.getPermanentElementById(id));
|
|
57
|
-
}
|
|
58
|
-
findFirstAutofocusableElement() {
|
|
59
|
-
return this.bodyElement.querySelector("[autofocus]");
|
|
60
|
-
}
|
|
61
|
-
hasAnchor(anchor) {
|
|
62
|
-
return this.getElementForAnchor(anchor) != null;
|
|
63
|
-
}
|
|
64
|
-
isPreviewable() {
|
|
65
|
-
return this.getCacheControlValue() != "no-preview";
|
|
66
|
-
}
|
|
67
|
-
isCacheable() {
|
|
68
|
-
return this.getCacheControlValue() != "no-cache";
|
|
69
|
-
}
|
|
70
|
-
isVisitable() {
|
|
71
|
-
return this.getSetting("visit-control") != "reload";
|
|
72
|
-
}
|
|
73
|
-
getSetting(name, defaultValue) {
|
|
74
|
-
const value = this.headDetails.getMetaValue(`turbolinks-${name}`);
|
|
75
|
-
return value == null ? defaultValue : value;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Location } from "./location";
|
|
2
|
-
import { Snapshot } from "./snapshot";
|
|
3
|
-
export declare class SnapshotCache {
|
|
4
|
-
readonly keys: string[];
|
|
5
|
-
readonly snapshots: {
|
|
6
|
-
[url: string]: Snapshot;
|
|
7
|
-
};
|
|
8
|
-
readonly size: number;
|
|
9
|
-
constructor(size: number);
|
|
10
|
-
has(location: Location): boolean;
|
|
11
|
-
get(location: Location): Snapshot | undefined;
|
|
12
|
-
put(location: Location, snapshot: Snapshot): Snapshot;
|
|
13
|
-
read(location: Location): Snapshot;
|
|
14
|
-
write(location: Location, snapshot: Snapshot): void;
|
|
15
|
-
touch(location: Location): void;
|
|
16
|
-
trim(): void;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=snapshot_cache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot_cache.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/snapshot_cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,aAAa;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAM;IAC7B,QAAQ,CAAC,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,CAAM;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM;IAIxB,GAAG,CAAC,QAAQ,EAAE,QAAQ;IAItB,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;IAQ7C,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAQ1C,IAAI,CAAC,QAAQ,EAAE,QAAQ;IAIvB,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAI5C,KAAK,CAAC,QAAQ,EAAE,QAAQ;IAQxB,IAAI;CAKL"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
export class SnapshotCache {
|
|
2
|
-
constructor(size) {
|
|
3
|
-
this.keys = [];
|
|
4
|
-
this.snapshots = {};
|
|
5
|
-
this.size = size;
|
|
6
|
-
}
|
|
7
|
-
has(location) {
|
|
8
|
-
return location.toCacheKey() in this.snapshots;
|
|
9
|
-
}
|
|
10
|
-
get(location) {
|
|
11
|
-
if (this.has(location)) {
|
|
12
|
-
const snapshot = this.read(location);
|
|
13
|
-
this.touch(location);
|
|
14
|
-
return snapshot;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
put(location, snapshot) {
|
|
18
|
-
this.write(location, snapshot);
|
|
19
|
-
this.touch(location);
|
|
20
|
-
return snapshot;
|
|
21
|
-
}
|
|
22
|
-
// Private
|
|
23
|
-
read(location) {
|
|
24
|
-
return this.snapshots[location.toCacheKey()];
|
|
25
|
-
}
|
|
26
|
-
write(location, snapshot) {
|
|
27
|
-
this.snapshots[location.toCacheKey()] = snapshot;
|
|
28
|
-
}
|
|
29
|
-
touch(location) {
|
|
30
|
-
const key = location.toCacheKey();
|
|
31
|
-
const index = this.keys.indexOf(key);
|
|
32
|
-
if (index > -1)
|
|
33
|
-
this.keys.splice(index, 1);
|
|
34
|
-
this.keys.unshift(key);
|
|
35
|
-
this.trim();
|
|
36
|
-
}
|
|
37
|
-
trim() {
|
|
38
|
-
for (const key of this.keys.splice(this.size)) {
|
|
39
|
-
delete this.snapshots[key];
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { HeadDetails } from "./head_details";
|
|
2
|
-
import { Renderer, RenderDelegate, RenderCallback } from "./renderer";
|
|
3
|
-
import { Snapshot } from "./snapshot";
|
|
4
|
-
export type PermanentElement = Element & {
|
|
5
|
-
id: string;
|
|
6
|
-
};
|
|
7
|
-
export type Placeholder = {
|
|
8
|
-
element: Element;
|
|
9
|
-
permanentElement: PermanentElement;
|
|
10
|
-
};
|
|
11
|
-
type BodyRenderer = (body: string) => void;
|
|
12
|
-
export declare class SnapshotRenderer extends Renderer {
|
|
13
|
-
delegate?: RenderDelegate;
|
|
14
|
-
readonly currentSnapshot: Snapshot;
|
|
15
|
-
readonly currentHeadDetails: HeadDetails;
|
|
16
|
-
readonly newSnapshot: Snapshot;
|
|
17
|
-
readonly newHeadDetails: HeadDetails;
|
|
18
|
-
readonly newBody: HTMLBodyElement;
|
|
19
|
-
readonly isPreview: boolean;
|
|
20
|
-
renderBody: BodyRenderer;
|
|
21
|
-
static render(delegate: RenderDelegate, callback: RenderCallback, currentSnapshot: Snapshot, newSnapshot: Snapshot, isPreview: boolean, renderBody: BodyRenderer): Promise<void>;
|
|
22
|
-
constructor(currentSnapshot: Snapshot, newSnapshot: Snapshot, isPreview: boolean, renderBody: BodyRenderer);
|
|
23
|
-
render(delegate: RenderDelegate, callback: RenderCallback): Promise<void>;
|
|
24
|
-
mergeHead(): Promise<void>;
|
|
25
|
-
replaceBody(): void;
|
|
26
|
-
shouldRender(): boolean;
|
|
27
|
-
trackedElementsAreIdentical(): boolean;
|
|
28
|
-
copyNewHeadStylesheetElements(): void;
|
|
29
|
-
copyNewHeadScriptElements(onScriptsLoaded: () => void): void;
|
|
30
|
-
removeCurrentHeadProvisionalElements(): void;
|
|
31
|
-
copyNewHeadProvisionalElements(): void;
|
|
32
|
-
relocateCurrentBodyPermanentElements(): Placeholder[];
|
|
33
|
-
replacePlaceholderElementsWithClonedPermanentElements(placeholders: Placeholder[]): void;
|
|
34
|
-
activateNewBodyScriptElements(): void;
|
|
35
|
-
assignNewBody(): void;
|
|
36
|
-
focusFirstAutofocusableElement(): void;
|
|
37
|
-
getNewHeadStylesheetElements(): Element[];
|
|
38
|
-
getNewHeadScriptElements(): HTMLScriptElement[];
|
|
39
|
-
getCurrentHeadProvisionalElements(): Element[];
|
|
40
|
-
getNewHeadProvisionalElements(): Element[];
|
|
41
|
-
getCurrentBodyPermanentElements(): PermanentElement[];
|
|
42
|
-
getNewBodyScriptElements(): HTMLScriptElement[];
|
|
43
|
-
}
|
|
44
|
-
export {};
|
|
45
|
-
//# sourceMappingURL=snapshot_renderer%20copy.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot_renderer copy.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/snapshot_renderer copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAEF,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAK3C,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,YAAY,CAAC;IAGzB,MAAM,CAAC,MAAM,CACX,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,cAAc,EACxB,eAAe,EAAE,QAAQ,EACzB,WAAW,EAAE,QAAQ,EACrB,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,YAAY;gBAWxB,eAAe,EAAE,QAAQ,EACzB,WAAW,EAAE,QAAQ,EACrB,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,YAAY;IAYpB,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc;IAczD,SAAS;IAmBf,WAAW;IAOX,YAAY;IAIZ,2BAA2B;IAO3B,6BAA6B;IAM7B,yBAAyB,CAAC,eAAe,EAAE,MAAM,IAAI;IAoCrD,oCAAoC;IAMpC,8BAA8B;IAM9B,oCAAoC;IAoBpC,qDAAqD,CACnD,YAAY,EAAE,WAAW,EAAE;IAQ7B,6BAA6B;IAO7B,aAAa;IAOb,8BAA8B;IAO9B,4BAA4B;IAM5B,wBAAwB;IAMxB,iCAAiC;IAIjC,6BAA6B;IAI7B,+BAA+B,IAAI,gBAAgB,EAAE;IAMrD,wBAAwB;CAGzB"}
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import { Renderer } from "./renderer";
|
|
2
|
-
import { array, createScriptElement } from "./util";
|
|
3
|
-
const allHeadScriptsEverRun = {};
|
|
4
|
-
let firstLoad = true;
|
|
5
|
-
export class SnapshotRenderer extends Renderer {
|
|
6
|
-
// todo: dont need this?
|
|
7
|
-
static render(delegate, callback, currentSnapshot, newSnapshot, isPreview, renderBody) {
|
|
8
|
-
return new this(currentSnapshot, newSnapshot, isPreview, renderBody).render(delegate, callback);
|
|
9
|
-
}
|
|
10
|
-
constructor(currentSnapshot, newSnapshot, isPreview, renderBody) {
|
|
11
|
-
super();
|
|
12
|
-
this.currentSnapshot = currentSnapshot;
|
|
13
|
-
this.currentHeadDetails = currentSnapshot.headDetails;
|
|
14
|
-
this.newSnapshot = newSnapshot;
|
|
15
|
-
this.newHeadDetails = newSnapshot.headDetails;
|
|
16
|
-
this.newBody = newSnapshot.bodyElement;
|
|
17
|
-
this.isPreview = isPreview;
|
|
18
|
-
this.renderBody = renderBody;
|
|
19
|
-
}
|
|
20
|
-
async render(delegate, callback) {
|
|
21
|
-
this.delegate = delegate;
|
|
22
|
-
if (this.shouldRender()) {
|
|
23
|
-
this.replaceBody();
|
|
24
|
-
if (!this.isPreview) {
|
|
25
|
-
this.focusFirstAutofocusableElement();
|
|
26
|
-
}
|
|
27
|
-
await this.mergeHead();
|
|
28
|
-
callback();
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
this.invalidateView();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
async mergeHead() {
|
|
35
|
-
if (firstLoad) {
|
|
36
|
-
// TODO: messy code
|
|
37
|
-
for (const [outerHTML, details] of Object.entries(this.currentHeadDetails.detailsByOuterHTML)) {
|
|
38
|
-
allHeadScriptsEverRun[outerHTML] = true;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
firstLoad = false;
|
|
42
|
-
return new Promise((resolve) => {
|
|
43
|
-
this.copyNewHeadStylesheetElements();
|
|
44
|
-
this.copyNewHeadScriptElements(resolve);
|
|
45
|
-
this.removeCurrentHeadProvisionalElements();
|
|
46
|
-
this.copyNewHeadProvisionalElements();
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
replaceBody() {
|
|
50
|
-
const placeholders = this.relocateCurrentBodyPermanentElements();
|
|
51
|
-
this.activateNewBodyScriptElements();
|
|
52
|
-
this.assignNewBody(); // todo: react.
|
|
53
|
-
this.replacePlaceholderElementsWithClonedPermanentElements(placeholders);
|
|
54
|
-
}
|
|
55
|
-
shouldRender() {
|
|
56
|
-
return this.newSnapshot.isVisitable() && this.trackedElementsAreIdentical();
|
|
57
|
-
}
|
|
58
|
-
trackedElementsAreIdentical() {
|
|
59
|
-
return (this.currentHeadDetails.getTrackedElementSignature() ==
|
|
60
|
-
this.newHeadDetails.getTrackedElementSignature());
|
|
61
|
-
}
|
|
62
|
-
copyNewHeadStylesheetElements() {
|
|
63
|
-
for (const element of this.getNewHeadStylesheetElements()) {
|
|
64
|
-
document.head.appendChild(element);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
copyNewHeadScriptElements(onScriptsLoaded) {
|
|
68
|
-
let blockingLoaded = [];
|
|
69
|
-
const dispatch = () => {
|
|
70
|
-
this.activateNewBodyScriptElements();
|
|
71
|
-
this.focusFirstAutofocusableElement();
|
|
72
|
-
onScriptsLoaded();
|
|
73
|
-
};
|
|
74
|
-
for (const element of this.getNewHeadScriptElements()) {
|
|
75
|
-
const runBefore = element.outerHTML in allHeadScriptsEverRun;
|
|
76
|
-
if (!runBefore) {
|
|
77
|
-
let cb = false;
|
|
78
|
-
if (!element.defer && element.src) {
|
|
79
|
-
const idx = blockingLoaded.length;
|
|
80
|
-
cb = () => {
|
|
81
|
-
blockingLoaded[idx] = true;
|
|
82
|
-
if (blockingLoaded.every((v) => v)) {
|
|
83
|
-
dispatch();
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
blockingLoaded.push(false);
|
|
87
|
-
}
|
|
88
|
-
const script = createScriptElement(element);
|
|
89
|
-
if (cb) {
|
|
90
|
-
script.addEventListener("load", cb);
|
|
91
|
-
}
|
|
92
|
-
document.head.appendChild(script);
|
|
93
|
-
allHeadScriptsEverRun[element.outerHTML] = true;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if (blockingLoaded.length === 0) {
|
|
97
|
-
// //TODO: raf waits for react to finish... not 100% sure of the reliability
|
|
98
|
-
requestAnimationFrame(dispatch);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
removeCurrentHeadProvisionalElements() {
|
|
102
|
-
for (const element of this.getCurrentHeadProvisionalElements()) {
|
|
103
|
-
document.head.removeChild(element);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
copyNewHeadProvisionalElements() {
|
|
107
|
-
for (const element of this.getNewHeadProvisionalElements()) {
|
|
108
|
-
document.head.appendChild(element);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
relocateCurrentBodyPermanentElements() {
|
|
112
|
-
return this.getCurrentBodyPermanentElements().reduce((placeholders, permanentElement) => {
|
|
113
|
-
const newElement = this.newSnapshot.getPermanentElementById(permanentElement.id);
|
|
114
|
-
if (newElement) {
|
|
115
|
-
const placeholder = createPlaceholderForPermanentElement(permanentElement);
|
|
116
|
-
replaceElementWithElement(permanentElement, placeholder.element);
|
|
117
|
-
replaceElementWithElement(newElement, permanentElement);
|
|
118
|
-
return [...placeholders, placeholder];
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
return placeholders;
|
|
122
|
-
}
|
|
123
|
-
}, []);
|
|
124
|
-
}
|
|
125
|
-
replacePlaceholderElementsWithClonedPermanentElements(placeholders) {
|
|
126
|
-
for (const { element, permanentElement } of placeholders) {
|
|
127
|
-
const clonedElement = permanentElement.cloneNode(true);
|
|
128
|
-
replaceElementWithElement(element, clonedElement);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
activateNewBodyScriptElements() {
|
|
132
|
-
for (const inertScriptElement of this.getNewBodyScriptElements()) {
|
|
133
|
-
const activatedScriptElement = createScriptElement(inertScriptElement);
|
|
134
|
-
replaceElementWithElement(inertScriptElement, activatedScriptElement);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
assignNewBody() {
|
|
138
|
-
replaceElementWithElement(document.querySelector("#alignablewebnextjsframe").firstElementChild, this.newBody);
|
|
139
|
-
}
|
|
140
|
-
focusFirstAutofocusableElement() {
|
|
141
|
-
const element = this.newSnapshot.findFirstAutofocusableElement();
|
|
142
|
-
if (elementIsFocusable(element)) {
|
|
143
|
-
element.focus();
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
getNewHeadStylesheetElements() {
|
|
147
|
-
return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails);
|
|
148
|
-
}
|
|
149
|
-
getNewHeadScriptElements() {
|
|
150
|
-
return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails);
|
|
151
|
-
}
|
|
152
|
-
getCurrentHeadProvisionalElements() {
|
|
153
|
-
return this.currentHeadDetails.getProvisionalElements();
|
|
154
|
-
}
|
|
155
|
-
getNewHeadProvisionalElements() {
|
|
156
|
-
return this.newHeadDetails.getProvisionalElements();
|
|
157
|
-
}
|
|
158
|
-
getCurrentBodyPermanentElements() {
|
|
159
|
-
return this.currentSnapshot.getPermanentElementsPresentInSnapshot(this.newSnapshot);
|
|
160
|
-
}
|
|
161
|
-
getNewBodyScriptElements() {
|
|
162
|
-
return array(this.newBody.querySelectorAll("script"));
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
function createPlaceholderForPermanentElement(permanentElement) {
|
|
166
|
-
const element = document.createElement("meta");
|
|
167
|
-
element.setAttribute("name", "turbolinks-permanent-placeholder");
|
|
168
|
-
element.setAttribute("content", permanentElement.id);
|
|
169
|
-
return { element, permanentElement };
|
|
170
|
-
}
|
|
171
|
-
function replaceElementWithElement(fromElement, toElement) {
|
|
172
|
-
const parentElement = fromElement.parentElement;
|
|
173
|
-
if (parentElement) {
|
|
174
|
-
return parentElement.replaceChild(toElement, fromElement);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
function elementIsFocusable(element) {
|
|
178
|
-
return element && typeof element.focus == "function";
|
|
179
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { HeadDetails } from "./head_details";
|
|
2
|
-
import { RenderCallback, RenderDelegate, Renderer } from "./renderer";
|
|
3
|
-
import { Snapshot } from "./snapshot";
|
|
4
|
-
export { RenderCallback, RenderDelegate } from "./renderer";
|
|
5
|
-
export type PermanentElement = Element & {
|
|
6
|
-
id: string;
|
|
7
|
-
};
|
|
8
|
-
export type Placeholder = {
|
|
9
|
-
element: Element;
|
|
10
|
-
permanentElement: PermanentElement;
|
|
11
|
-
};
|
|
12
|
-
export declare class SnapshotRenderer extends Renderer {
|
|
13
|
-
readonly delegate: RenderDelegate;
|
|
14
|
-
readonly currentSnapshot: Snapshot;
|
|
15
|
-
readonly currentHeadDetails: HeadDetails;
|
|
16
|
-
readonly newSnapshot: Snapshot;
|
|
17
|
-
readonly newHeadDetails: HeadDetails;
|
|
18
|
-
readonly newBody: HTMLBodyElement;
|
|
19
|
-
readonly isPreview: boolean;
|
|
20
|
-
static render(delegate: RenderDelegate, callback: RenderCallback, currentSnapshot: Snapshot, newSnapshot: Snapshot, isPreview: boolean): void;
|
|
21
|
-
constructor(delegate: RenderDelegate, currentSnapshot: Snapshot, newSnapshot: Snapshot, isPreview: boolean);
|
|
22
|
-
render(callback: RenderCallback): void;
|
|
23
|
-
mergeHead(): void;
|
|
24
|
-
replaceBody(): void;
|
|
25
|
-
shouldRender(): boolean;
|
|
26
|
-
trackedElementsAreIdentical(): boolean;
|
|
27
|
-
copyNewHeadStylesheetElements(): void;
|
|
28
|
-
copyNewHeadScriptElements(): void;
|
|
29
|
-
removeCurrentHeadProvisionalElements(): void;
|
|
30
|
-
copyNewHeadProvisionalElements(): void;
|
|
31
|
-
relocateCurrentBodyPermanentElements(): Placeholder[];
|
|
32
|
-
replacePlaceholderElementsWithClonedPermanentElements(placeholders: Placeholder[]): void;
|
|
33
|
-
activateNewBodyScriptElements(): void;
|
|
34
|
-
assignNewBody(): void;
|
|
35
|
-
focusFirstAutofocusableElement(): void;
|
|
36
|
-
getNewHeadStylesheetElements(): Element[];
|
|
37
|
-
getNewHeadScriptElements(): Element[];
|
|
38
|
-
getCurrentHeadProvisionalElements(): Element[];
|
|
39
|
-
getNewHeadProvisionalElements(): Element[];
|
|
40
|
-
getCurrentBodyPermanentElements(): PermanentElement[];
|
|
41
|
-
getNewBodyScriptElements(): HTMLScriptElement[];
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=snapshot_renderer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot_renderer.d.ts","sourceRoot":"","sources":["../../../lib/turbolinks/snapshot_renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B,MAAM,CAAC,MAAM,CACX,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,cAAc,EACxB,eAAe,EAAE,QAAQ,EACzB,WAAW,EAAE,QAAQ,EACrB,SAAS,EAAE,OAAO;gBAQlB,QAAQ,EAAE,cAAc,EACxB,eAAe,EAAE,QAAQ,EACzB,WAAW,EAAE,QAAQ,EACrB,SAAS,EAAE,OAAO;IAYpB,MAAM,CAAC,QAAQ,EAAE,cAAc;IAe/B,SAAS;IAOT,WAAW;IAOX,YAAY;IAIZ,2BAA2B;IAO3B,6BAA6B;IAM7B,yBAAyB;IAMzB,oCAAoC;IAMpC,8BAA8B;IAM9B,oCAAoC;IAoBpC,qDAAqD,CACnD,YAAY,EAAE,WAAW,EAAE;IAQ7B,6BAA6B;IAQ7B,aAAa;IAOb,8BAA8B;IAO9B,4BAA4B;IAM5B,wBAAwB;IAMxB,iCAAiC;IAIjC,6BAA6B;IAI7B,+BAA+B,IAAI,gBAAgB,EAAE;IAMrD,wBAAwB;CAGzB"}
|