@hotwired/turbo 7.1.0 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/turbo.es2017-esm.js +1284 -655
- package/dist/turbo.es2017-umd.js +1298 -662
- package/dist/types/core/bardo.d.ts +7 -2
- package/dist/types/core/cache.d.ts +10 -0
- package/dist/types/core/drive/error_renderer.d.ts +2 -1
- package/dist/types/core/drive/form_submission.d.ts +20 -9
- package/dist/types/core/drive/head_snapshot.d.ts +6 -6
- package/dist/types/core/drive/history.d.ts +4 -4
- package/dist/types/core/drive/navigator.d.ts +2 -2
- package/dist/types/core/drive/page_renderer.d.ts +12 -7
- package/dist/types/core/drive/page_view.d.ts +10 -8
- package/dist/types/core/drive/preloader.d.ts +14 -0
- package/dist/types/core/drive/progress_bar.d.ts +1 -0
- package/dist/types/core/drive/visit.d.ts +17 -6
- package/dist/types/core/errors.d.ts +2 -0
- package/dist/types/core/frames/frame_controller.d.ts +56 -26
- package/dist/types/core/frames/frame_redirector.d.ts +10 -8
- package/dist/types/core/frames/frame_renderer.d.ts +8 -1
- package/dist/types/core/frames/frame_view.d.ts +3 -2
- package/dist/types/core/frames/link_interceptor.d.ts +3 -3
- package/dist/types/core/index.d.ts +12 -3
- package/dist/types/core/native/adapter.d.ts +2 -1
- package/dist/types/core/native/browser_adapter.d.ts +17 -8
- package/dist/types/core/renderer.d.ts +12 -6
- package/dist/types/core/session.d.ts +72 -17
- package/dist/types/core/snapshot.d.ts +6 -3
- package/dist/types/core/streams/stream_actions.d.ts +4 -2
- package/dist/types/core/streams/stream_message.d.ts +2 -6
- package/dist/types/core/streams/stream_message_renderer.d.ts +7 -0
- package/dist/types/core/types.d.ts +3 -4
- package/dist/types/core/url.d.ts +1 -1
- package/dist/types/core/view.d.ts +13 -7
- package/dist/types/elements/frame_element.d.ts +12 -6
- package/dist/types/elements/index.d.ts +1 -0
- package/dist/types/elements/stream_element.d.ts +8 -1
- package/dist/types/elements/stream_source_element.d.ts +7 -0
- package/dist/types/http/fetch_request.d.ts +18 -4
- package/dist/types/http/index.d.ts +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/observers/appearance_observer.d.ts +6 -6
- package/dist/types/observers/cache_observer.d.ts +5 -1
- package/dist/types/observers/form_link_click_observer.d.ts +14 -0
- package/dist/types/observers/form_submit_observer.d.ts +2 -1
- package/dist/types/observers/link_click_observer.d.ts +5 -4
- package/dist/types/polyfills/custom-elements-native-shim.d.ts +1 -0
- package/dist/types/polyfills/submit-event.d.ts +1 -7
- package/dist/types/tests/functional/async_script_tests.d.ts +1 -6
- package/dist/types/tests/functional/autofocus_tests.d.ts +1 -9
- package/dist/types/tests/functional/cache_observer_tests.d.ts +1 -5
- package/dist/types/tests/functional/drive_disabled_tests.d.ts +1 -9
- package/dist/types/tests/functional/drive_tests.d.ts +1 -8
- package/dist/types/tests/functional/form_mode_tests.d.ts +1 -0
- package/dist/types/tests/functional/form_submission_tests.d.ts +1 -84
- package/dist/types/tests/functional/frame_navigation_tests.d.ts +1 -7
- package/dist/types/tests/functional/frame_tests.d.ts +7 -51
- package/dist/types/tests/functional/import_tests.d.ts +1 -4
- package/dist/types/tests/functional/loading_tests.d.ts +1 -13
- package/dist/types/tests/functional/navigation_tests.d.ts +1 -38
- package/dist/types/tests/functional/pausable_rendering_tests.d.ts +1 -6
- package/dist/types/tests/functional/pausable_requests_tests.d.ts +1 -6
- package/dist/types/tests/functional/preloader_tests.d.ts +1 -0
- package/dist/types/tests/functional/rendering_tests.d.ts +1 -35
- package/dist/types/tests/functional/scroll_restoration_tests.d.ts +1 -6
- package/dist/types/tests/functional/stream_tests.d.ts +1 -6
- package/dist/types/tests/functional/visit_tests.d.ts +1 -15
- package/dist/types/tests/helpers/dom_test_case.d.ts +1 -2
- package/dist/types/tests/helpers/page.d.ts +60 -0
- package/dist/types/tests/integration/ujs_tests.d.ts +1 -0
- package/dist/types/tests/unit/deprecated_adapter_support_tests.d.ts +1 -0
- package/dist/types/tests/unit/export_tests.d.ts +1 -0
- package/dist/types/tests/unit/stream_element_tests.d.ts +0 -10
- package/dist/types/util.d.ts +15 -3
- package/package.json +32 -13
- package/CHANGELOG.md +0 -3
- package/dist/types/core/frames/form_interceptor.d.ts +0 -12
- package/dist/types/tests/functional/index.d.ts +0 -17
- package/dist/types/tests/helpers/functional_test_case.d.ts +0 -44
- package/dist/types/tests/helpers/intern_test_case.d.ts +0 -20
- package/dist/types/tests/helpers/remote_channel.d.ts +0 -10
- package/dist/types/tests/helpers/turbo_drive_test_case.d.ts +0 -21
- package/dist/types/tests/unit/deprecated_adapter_support_test.d.ts +0 -24
- package/dist/types/tests/unit/index.d.ts +0 -2
|
@@ -3,29 +3,38 @@ import { ProgressBar } from "../drive/progress_bar";
|
|
|
3
3
|
import { Visit, VisitOptions } from "../drive/visit";
|
|
4
4
|
import { FormSubmission } from "../drive/form_submission";
|
|
5
5
|
import { Session } from "../session";
|
|
6
|
+
export type ReloadReason = StructuredReason | undefined;
|
|
7
|
+
interface StructuredReason {
|
|
8
|
+
reason: string;
|
|
9
|
+
context?: {
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
6
13
|
export declare class BrowserAdapter implements Adapter {
|
|
7
14
|
readonly session: Session;
|
|
8
15
|
readonly progressBar: ProgressBar;
|
|
9
16
|
visitProgressBarTimeout?: number;
|
|
10
17
|
formProgressBarTimeout?: number;
|
|
18
|
+
location?: URL;
|
|
11
19
|
constructor(session: Session);
|
|
12
20
|
visitProposedToLocation(location: URL, options?: Partial<VisitOptions>): void;
|
|
13
21
|
visitStarted(visit: Visit): void;
|
|
14
22
|
visitRequestStarted(visit: Visit): void;
|
|
15
23
|
visitRequestCompleted(visit: Visit): void;
|
|
16
24
|
visitRequestFailedWithStatusCode(visit: Visit, statusCode: number): void;
|
|
17
|
-
visitRequestFinished(
|
|
18
|
-
visitCompleted(
|
|
19
|
-
pageInvalidated(): void;
|
|
20
|
-
visitFailed(
|
|
21
|
-
visitRendered(
|
|
22
|
-
formSubmissionStarted(
|
|
23
|
-
formSubmissionFinished(
|
|
25
|
+
visitRequestFinished(_visit: Visit): void;
|
|
26
|
+
visitCompleted(_visit: Visit): void;
|
|
27
|
+
pageInvalidated(reason: ReloadReason): void;
|
|
28
|
+
visitFailed(_visit: Visit): void;
|
|
29
|
+
visitRendered(_visit: Visit): void;
|
|
30
|
+
formSubmissionStarted(_formSubmission: FormSubmission): void;
|
|
31
|
+
formSubmissionFinished(_formSubmission: FormSubmission): void;
|
|
24
32
|
showVisitProgressBarAfterDelay(): void;
|
|
25
33
|
hideVisitProgressBar(): void;
|
|
26
34
|
showFormProgressBarAfterDelay(): void;
|
|
27
35
|
hideFormProgressBar(): void;
|
|
28
36
|
showProgressBar: () => void;
|
|
29
|
-
reload(): void;
|
|
37
|
+
reload(reason: ReloadReason): void;
|
|
30
38
|
get navigator(): import("../drive/navigator").Navigator;
|
|
31
39
|
}
|
|
40
|
+
export {};
|
|
@@ -1,22 +1,28 @@
|
|
|
1
|
+
import { BardoDelegate } from "./bardo";
|
|
1
2
|
import { Snapshot } from "./snapshot";
|
|
2
|
-
|
|
3
|
+
import { ReloadReason } from "./native/browser_adapter";
|
|
4
|
+
export type Render<E> = (currentElement: E, newElement: E) => void;
|
|
5
|
+
export declare abstract class Renderer<E extends Element, S extends Snapshot<E> = Snapshot<E>> implements BardoDelegate {
|
|
3
6
|
readonly currentSnapshot: S;
|
|
4
7
|
readonly newSnapshot: S;
|
|
5
8
|
readonly isPreview: boolean;
|
|
6
9
|
readonly willRender: boolean;
|
|
7
10
|
readonly promise: Promise<void>;
|
|
11
|
+
renderElement: Render<E>;
|
|
8
12
|
private resolvingFunctions?;
|
|
9
|
-
|
|
13
|
+
private activeElement;
|
|
14
|
+
constructor(currentSnapshot: S, newSnapshot: S, renderElement: Render<E>, isPreview: boolean, willRender?: boolean);
|
|
10
15
|
get shouldRender(): boolean;
|
|
16
|
+
get reloadReason(): ReloadReason;
|
|
11
17
|
prepareToRender(): void;
|
|
12
18
|
abstract render(): Promise<void>;
|
|
13
19
|
finishRendering(): void;
|
|
14
|
-
|
|
15
|
-
preservingPermanentElements(callback: () => void): void;
|
|
20
|
+
preservingPermanentElements(callback: () => void): Promise<void>;
|
|
16
21
|
focusFirstAutofocusableElement(): void;
|
|
22
|
+
enteringBardo(currentPermanentElement: Element): void;
|
|
23
|
+
leavingBardo(currentPermanentElement: Element): void;
|
|
17
24
|
get connectedSnapshot(): S;
|
|
18
25
|
get currentElement(): E;
|
|
19
26
|
get newElement(): E;
|
|
20
|
-
get permanentElementMap():
|
|
21
|
-
get cspNonce(): string | null | undefined;
|
|
27
|
+
get permanentElementMap(): import("./snapshot").PermanentElementMap;
|
|
22
28
|
}
|
|
@@ -1,25 +1,59 @@
|
|
|
1
1
|
import { Adapter } from "./native/adapter";
|
|
2
|
+
import { ReloadReason } from "./native/browser_adapter";
|
|
2
3
|
import { CacheObserver } from "../observers/cache_observer";
|
|
3
4
|
import { FormSubmitObserver, FormSubmitObserverDelegate } from "../observers/form_submit_observer";
|
|
4
5
|
import { FrameRedirector } from "./frames/frame_redirector";
|
|
5
6
|
import { History, HistoryDelegate } from "./drive/history";
|
|
6
7
|
import { LinkClickObserver, LinkClickObserverDelegate } from "../observers/link_click_observer";
|
|
8
|
+
import { FormLinkClickObserver, FormLinkClickObserverDelegate } from "../observers/form_link_click_observer";
|
|
7
9
|
import { Locatable } from "./url";
|
|
8
10
|
import { Navigator, NavigatorDelegate } from "./drive/navigator";
|
|
9
11
|
import { PageObserver, PageObserverDelegate } from "../observers/page_observer";
|
|
10
12
|
import { ScrollObserver } from "../observers/scroll_observer";
|
|
11
13
|
import { StreamMessage } from "./streams/stream_message";
|
|
14
|
+
import { StreamMessageRenderer } from "./streams/stream_message_renderer";
|
|
12
15
|
import { StreamObserver } from "../observers/stream_observer";
|
|
13
16
|
import { Action, Position, StreamSource } from "./types";
|
|
14
|
-
import { PageView, PageViewDelegate } from "./drive/page_view";
|
|
17
|
+
import { PageView, PageViewDelegate, PageViewRenderOptions } from "./drive/page_view";
|
|
15
18
|
import { Visit, VisitOptions } from "./drive/visit";
|
|
16
19
|
import { PageSnapshot } from "./drive/page_snapshot";
|
|
17
20
|
import { FrameElement } from "../elements/frame_element";
|
|
21
|
+
import { FrameViewRenderOptions } from "./frames/frame_view";
|
|
18
22
|
import { FetchResponse } from "../http/fetch_response";
|
|
19
|
-
|
|
20
|
-
export
|
|
23
|
+
import { Preloader, PreloaderDelegate } from "./drive/preloader";
|
|
24
|
+
export type FormMode = "on" | "off" | "optin";
|
|
25
|
+
export type TimingData = unknown;
|
|
26
|
+
export type TurboBeforeCacheEvent = CustomEvent;
|
|
27
|
+
export type TurboBeforeRenderEvent = CustomEvent<{
|
|
28
|
+
newBody: HTMLBodyElement;
|
|
29
|
+
} & PageViewRenderOptions>;
|
|
30
|
+
export type TurboBeforeVisitEvent = CustomEvent<{
|
|
31
|
+
url: string;
|
|
32
|
+
}>;
|
|
33
|
+
export type TurboClickEvent = CustomEvent<{
|
|
34
|
+
url: string;
|
|
35
|
+
originalEvent: MouseEvent;
|
|
36
|
+
}>;
|
|
37
|
+
export type TurboFrameLoadEvent = CustomEvent;
|
|
38
|
+
export type TurboBeforeFrameRenderEvent = CustomEvent<{
|
|
39
|
+
newFrame: FrameElement;
|
|
40
|
+
} & FrameViewRenderOptions>;
|
|
41
|
+
export type TurboFrameRenderEvent = CustomEvent<{
|
|
42
|
+
fetchResponse: FetchResponse;
|
|
43
|
+
}>;
|
|
44
|
+
export type TurboLoadEvent = CustomEvent<{
|
|
45
|
+
url: string;
|
|
46
|
+
timing: TimingData;
|
|
47
|
+
}>;
|
|
48
|
+
export type TurboRenderEvent = CustomEvent;
|
|
49
|
+
export type TurboVisitEvent = CustomEvent<{
|
|
50
|
+
url: string;
|
|
51
|
+
action: Action;
|
|
52
|
+
}>;
|
|
53
|
+
export declare class Session implements FormSubmitObserverDelegate, HistoryDelegate, FormLinkClickObserverDelegate, LinkClickObserverDelegate, NavigatorDelegate, PageObserverDelegate, PageViewDelegate, PreloaderDelegate {
|
|
21
54
|
readonly navigator: Navigator;
|
|
22
55
|
readonly history: History;
|
|
56
|
+
readonly preloader: Preloader;
|
|
23
57
|
readonly view: PageView;
|
|
24
58
|
adapter: Adapter;
|
|
25
59
|
readonly pageObserver: PageObserver;
|
|
@@ -28,11 +62,14 @@ export declare class Session implements FormSubmitObserverDelegate, HistoryDeleg
|
|
|
28
62
|
readonly formSubmitObserver: FormSubmitObserver;
|
|
29
63
|
readonly scrollObserver: ScrollObserver;
|
|
30
64
|
readonly streamObserver: StreamObserver;
|
|
65
|
+
readonly formLinkClickObserver: FormLinkClickObserver;
|
|
31
66
|
readonly frameRedirector: FrameRedirector;
|
|
67
|
+
readonly streamMessageRenderer: StreamMessageRenderer;
|
|
32
68
|
drive: boolean;
|
|
33
69
|
enabled: boolean;
|
|
34
70
|
progressBarDelay: number;
|
|
35
71
|
started: boolean;
|
|
72
|
+
formMode: FormMode;
|
|
36
73
|
start(): void;
|
|
37
74
|
disable(): void;
|
|
38
75
|
stop(): void;
|
|
@@ -43,13 +80,15 @@ export declare class Session implements FormSubmitObserverDelegate, HistoryDeleg
|
|
|
43
80
|
renderStreamMessage(message: StreamMessage | string): void;
|
|
44
81
|
clearCache(): void;
|
|
45
82
|
setProgressBarDelay(delay: number): void;
|
|
83
|
+
setFormMode(mode: FormMode): void;
|
|
46
84
|
get location(): URL;
|
|
47
85
|
get restorationIdentifier(): string;
|
|
48
86
|
historyPoppedToLocationWithRestorationIdentifier(location: URL, restorationIdentifier: string): void;
|
|
49
87
|
scrollPositionChanged(position: Position): void;
|
|
50
|
-
|
|
88
|
+
willSubmitFormLinkToLocation(link: Element, location: URL): boolean;
|
|
89
|
+
submittedFormLinkToLocation(): void;
|
|
90
|
+
willFollowLinkToLocation(link: Element, location: URL, event: MouseEvent): boolean;
|
|
51
91
|
followedLinkToLocation(link: Element, location: URL): void;
|
|
52
|
-
convertLinkWithMethodClickToFormSubmission(link: Element): false | CustomEvent<any>;
|
|
53
92
|
allowsVisitingLocationWithAction(location: URL, action?: Action): boolean;
|
|
54
93
|
visitProposedToLocation(location: URL, options: Partial<VisitOptions>): void;
|
|
55
94
|
visitStarted(visit: Visit): void;
|
|
@@ -63,25 +102,41 @@ export declare class Session implements FormSubmitObserverDelegate, HistoryDeleg
|
|
|
63
102
|
pageWillUnload(): void;
|
|
64
103
|
receivedMessageFromStream(message: StreamMessage): void;
|
|
65
104
|
viewWillCacheSnapshot(): void;
|
|
66
|
-
allowsImmediateRender({ element }: PageSnapshot,
|
|
67
|
-
viewRenderedSnapshot(
|
|
68
|
-
|
|
105
|
+
allowsImmediateRender({ element }: PageSnapshot, options: PageViewRenderOptions): boolean;
|
|
106
|
+
viewRenderedSnapshot(_snapshot: PageSnapshot, _isPreview: boolean): void;
|
|
107
|
+
preloadOnLoadLinksForView(element: Element): void;
|
|
108
|
+
viewInvalidated(reason: ReloadReason): void;
|
|
69
109
|
frameLoaded(frame: FrameElement): void;
|
|
70
110
|
frameRendered(fetchResponse: FetchResponse, frame: FrameElement): void;
|
|
71
|
-
applicationAllowsFollowingLinkToLocation(link: Element, location: URL): boolean;
|
|
111
|
+
applicationAllowsFollowingLinkToLocation(link: Element, location: URL, ev: MouseEvent): boolean;
|
|
72
112
|
applicationAllowsVisitingLocation(location: URL): boolean;
|
|
73
|
-
notifyApplicationAfterClickingLinkToLocation(link: Element, location: URL): CustomEvent<
|
|
74
|
-
|
|
75
|
-
|
|
113
|
+
notifyApplicationAfterClickingLinkToLocation(link: Element, location: URL, event: MouseEvent): CustomEvent<{
|
|
114
|
+
url: string;
|
|
115
|
+
originalEvent: MouseEvent;
|
|
116
|
+
}>;
|
|
117
|
+
notifyApplicationBeforeVisitingLocation(location: URL): CustomEvent<{
|
|
118
|
+
url: string;
|
|
119
|
+
}>;
|
|
120
|
+
notifyApplicationAfterVisitingLocation(location: URL, action: Action): CustomEvent<{
|
|
121
|
+
url: string;
|
|
122
|
+
action: Action;
|
|
123
|
+
}>;
|
|
76
124
|
notifyApplicationBeforeCachingSnapshot(): CustomEvent<any>;
|
|
77
|
-
notifyApplicationBeforeRender(newBody: HTMLBodyElement,
|
|
125
|
+
notifyApplicationBeforeRender(newBody: HTMLBodyElement, options: PageViewRenderOptions): CustomEvent<{
|
|
126
|
+
newBody: HTMLBodyElement;
|
|
127
|
+
} & PageViewRenderOptions>;
|
|
78
128
|
notifyApplicationAfterRender(): CustomEvent<any>;
|
|
79
|
-
notifyApplicationAfterPageLoad(timing?: TimingData): CustomEvent<
|
|
129
|
+
notifyApplicationAfterPageLoad(timing?: TimingData): CustomEvent<{
|
|
130
|
+
url: string;
|
|
131
|
+
timing: unknown;
|
|
132
|
+
}>;
|
|
80
133
|
notifyApplicationAfterVisitingSamePageLocation(oldURL: URL, newURL: URL): void;
|
|
81
134
|
notifyApplicationAfterFrameLoad(frame: FrameElement): CustomEvent<any>;
|
|
82
|
-
notifyApplicationAfterFrameRender(fetchResponse: FetchResponse, frame: FrameElement): CustomEvent<
|
|
83
|
-
|
|
135
|
+
notifyApplicationAfterFrameRender(fetchResponse: FetchResponse, frame: FrameElement): CustomEvent<{
|
|
136
|
+
fetchResponse: FetchResponse;
|
|
137
|
+
}>;
|
|
138
|
+
submissionIsNavigatable(form: HTMLFormElement, submitter?: HTMLElement): boolean;
|
|
139
|
+
elementIsNavigatable(element: Element): boolean;
|
|
84
140
|
getActionForLink(link: Element): Action;
|
|
85
|
-
getTargetFrameForLink(link: Element): string | undefined;
|
|
86
141
|
get snapshot(): PageSnapshot;
|
|
87
142
|
}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
export declare class Snapshot<E extends Element = Element> {
|
|
2
2
|
readonly element: E;
|
|
3
3
|
constructor(element: E);
|
|
4
|
+
get activeElement(): Element | null;
|
|
4
5
|
get children(): Element[];
|
|
5
6
|
hasAnchor(anchor: string | undefined): boolean;
|
|
6
7
|
getElementForAnchor(anchor: string | undefined): Element | null;
|
|
7
8
|
get isConnected(): boolean;
|
|
8
9
|
get firstAutofocusableElement(): Element | null;
|
|
9
|
-
get permanentElements(): Element
|
|
10
|
+
get permanentElements(): NodeListOf<Element>;
|
|
10
11
|
getPermanentElementById(id: string): Element | null;
|
|
11
|
-
getPermanentElementMapForSnapshot(snapshot: Snapshot):
|
|
12
|
+
getPermanentElementMapForSnapshot(snapshot: Snapshot): PermanentElementMap;
|
|
12
13
|
}
|
|
13
|
-
export declare
|
|
14
|
+
export declare function getPermanentElementById(node: ParentNode, id: string): Element | null;
|
|
15
|
+
export declare function queryPermanentElementsAll(node: ParentNode): NodeListOf<Element>;
|
|
16
|
+
export type PermanentElementMap = Record<string, [Element, Element]>;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { StreamElement } from "../../elements/stream_element";
|
|
2
|
-
export
|
|
3
|
-
|
|
2
|
+
export type TurboStreamAction = (this: StreamElement) => void;
|
|
3
|
+
export type TurboStreamActions = {
|
|
4
|
+
[action: string]: TurboStreamAction;
|
|
4
5
|
};
|
|
6
|
+
export declare const StreamActions: TurboStreamActions;
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import { StreamElement } from "../../elements/stream_element";
|
|
2
1
|
export declare class StreamMessage {
|
|
3
2
|
static readonly contentType = "text/vnd.turbo-stream.html";
|
|
4
|
-
readonly
|
|
3
|
+
readonly fragment: DocumentFragment;
|
|
5
4
|
static wrap(message: StreamMessage | string): StreamMessage;
|
|
6
|
-
constructor(
|
|
7
|
-
get fragment(): DocumentFragment;
|
|
8
|
-
get foreignElements(): StreamElement[];
|
|
9
|
-
get templateChildren(): Element[];
|
|
5
|
+
constructor(fragment: DocumentFragment);
|
|
10
6
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { StreamMessage } from "./stream_message";
|
|
2
|
+
import { BardoDelegate } from "../bardo";
|
|
3
|
+
export declare class StreamMessageRenderer implements BardoDelegate {
|
|
4
|
+
render({ fragment }: StreamMessage): void;
|
|
5
|
+
enteringBardo(currentPermanentElement: Element, newPermanentElement: Element): void;
|
|
6
|
+
leavingBardo(): void;
|
|
7
|
+
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export declare type Position = {
|
|
1
|
+
export type Action = "advance" | "replace" | "restore";
|
|
2
|
+
export type Position = {
|
|
4
3
|
x: number;
|
|
5
4
|
y: number;
|
|
6
5
|
};
|
|
7
|
-
export
|
|
6
|
+
export type StreamSource = {
|
|
8
7
|
addEventListener(type: "message", listener: (event: MessageEvent) => void, options?: boolean | AddEventListenerOptions): void;
|
|
9
8
|
removeEventListener(type: "message", listener: (event: MessageEvent) => void, options?: boolean | EventListenerOptions): void;
|
|
10
9
|
};
|
package/dist/types/core/url.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type Locatable = URL | string;
|
|
2
2
|
export declare function expandURL(locatable: Locatable): URL;
|
|
3
3
|
export declare function getAnchor(url: URL): string | undefined;
|
|
4
4
|
export declare function getAction(form: HTMLFormElement, submitter?: HTMLElement): URL;
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ReloadReason } from "./native/browser_adapter";
|
|
2
|
+
import { Renderer, Render } from "./renderer";
|
|
2
3
|
import { Snapshot } from "./snapshot";
|
|
3
4
|
import { Position } from "./types";
|
|
4
|
-
export interface
|
|
5
|
-
|
|
5
|
+
export interface ViewRenderOptions<E> {
|
|
6
|
+
resume: (value?: any) => void;
|
|
7
|
+
render: Render<E>;
|
|
8
|
+
}
|
|
9
|
+
export interface ViewDelegate<E extends Element, S extends Snapshot<E>> {
|
|
10
|
+
allowsImmediateRender(snapshot: S, options: ViewRenderOptions<E>): boolean;
|
|
11
|
+
preloadOnLoadLinksForView(element: Element): void;
|
|
6
12
|
viewRenderedSnapshot(snapshot: S, isPreview: boolean): void;
|
|
7
|
-
viewInvalidated(): void;
|
|
13
|
+
viewInvalidated(reason: ReloadReason): void;
|
|
8
14
|
}
|
|
9
|
-
export declare abstract class View<E extends Element, S extends Snapshot<E> = Snapshot<E>, R extends Renderer<E, S> = Renderer<E, S>, D extends ViewDelegate<S> = ViewDelegate<S>> {
|
|
15
|
+
export declare abstract class View<E extends Element, S extends Snapshot<E> = Snapshot<E>, R extends Renderer<E, S> = Renderer<E, S>, D extends ViewDelegate<E, S> = ViewDelegate<E, S>> {
|
|
10
16
|
readonly delegate: D;
|
|
11
17
|
readonly element: E;
|
|
12
18
|
renderer?: R;
|
|
@@ -25,8 +31,8 @@ export declare abstract class View<E extends Element, S extends Snapshot<E> = Sn
|
|
|
25
31
|
scrollTo(x: number, y: number): void;
|
|
26
32
|
};
|
|
27
33
|
render(renderer: R): Promise<void>;
|
|
28
|
-
invalidate(): void;
|
|
29
|
-
prepareToRenderSnapshot(renderer: R): void
|
|
34
|
+
invalidate(reason: ReloadReason): void;
|
|
35
|
+
prepareToRenderSnapshot(renderer: R): Promise<void>;
|
|
30
36
|
markAsPreview(isPreview: boolean): void;
|
|
31
37
|
renderSnapshot(renderer: R): Promise<void>;
|
|
32
38
|
finishRenderingSnapshot(renderer: R): void;
|
|
@@ -1,29 +1,35 @@
|
|
|
1
1
|
import { FetchResponse } from "../http/fetch_response";
|
|
2
|
+
import { Snapshot } from "../core/snapshot";
|
|
3
|
+
import { LinkInterceptorDelegate } from "../core/frames/link_interceptor";
|
|
4
|
+
import { FormSubmitObserverDelegate } from "../observers/form_submit_observer";
|
|
2
5
|
export declare enum FrameLoadingStyle {
|
|
3
6
|
eager = "eager",
|
|
4
7
|
lazy = "lazy"
|
|
5
8
|
}
|
|
6
|
-
export
|
|
9
|
+
export type FrameElementObservedAttribute = keyof FrameElement & ("disabled" | "complete" | "loading" | "src");
|
|
10
|
+
export interface FrameElementDelegate extends LinkInterceptorDelegate, FormSubmitObserverDelegate {
|
|
7
11
|
connect(): void;
|
|
8
12
|
disconnect(): void;
|
|
13
|
+
completeChanged(): void;
|
|
9
14
|
loadingStyleChanged(): void;
|
|
10
15
|
sourceURLChanged(): void;
|
|
16
|
+
sourceURLReloaded(): Promise<void>;
|
|
11
17
|
disabledChanged(): void;
|
|
12
|
-
formSubmissionIntercepted(element: HTMLFormElement, submitter?: HTMLElement): void;
|
|
13
|
-
linkClickIntercepted(element: Element, url: string): void;
|
|
14
18
|
loadResponse(response: FetchResponse): void;
|
|
19
|
+
proposeVisitIfNavigatedWithAction(frame: FrameElement, element: Element, submitter?: HTMLElement): void;
|
|
15
20
|
fetchResponseLoaded: (fetchResponse: FetchResponse) => void;
|
|
21
|
+
visitCachedSnapshot: (snapshot: Snapshot) => void;
|
|
16
22
|
isLoading: boolean;
|
|
17
23
|
}
|
|
18
24
|
export declare class FrameElement extends HTMLElement {
|
|
19
25
|
static delegateConstructor: new (element: FrameElement) => FrameElementDelegate;
|
|
20
|
-
loaded: Promise<
|
|
26
|
+
loaded: Promise<void>;
|
|
21
27
|
readonly delegate: FrameElementDelegate;
|
|
22
|
-
static get observedAttributes():
|
|
28
|
+
static get observedAttributes(): FrameElementObservedAttribute[];
|
|
23
29
|
constructor();
|
|
24
30
|
connectedCallback(): void;
|
|
25
31
|
disconnectedCallback(): void;
|
|
26
|
-
reload(): void
|
|
32
|
+
reload(): Promise<void>;
|
|
27
33
|
attributeChangedCallback(name: string): void;
|
|
28
34
|
get src(): string | null;
|
|
29
35
|
set src(value: string | null);
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
+
type Render = (currentElement: StreamElement) => Promise<void>;
|
|
2
|
+
export type TurboBeforeStreamRenderEvent = CustomEvent<{
|
|
3
|
+
newStream: StreamElement;
|
|
4
|
+
render: Render;
|
|
5
|
+
}>;
|
|
1
6
|
export declare class StreamElement extends HTMLElement {
|
|
7
|
+
static renderElement(newElement: StreamElement): Promise<void>;
|
|
2
8
|
connectedCallback(): Promise<void>;
|
|
3
9
|
private renderPromise?;
|
|
4
10
|
render(): Promise<void>;
|
|
5
11
|
disconnect(): void;
|
|
6
12
|
removeDuplicateTargetChildren(): void;
|
|
7
13
|
get duplicateChildren(): any[];
|
|
8
|
-
get performAction(): (
|
|
14
|
+
get performAction(): import("../core/streams/stream_actions").TurboStreamAction;
|
|
9
15
|
get targetElements(): any[];
|
|
10
16
|
get templateContent(): DocumentFragment;
|
|
11
17
|
get templateElement(): HTMLTemplateElement;
|
|
@@ -18,3 +24,4 @@ export declare class StreamElement extends HTMLElement {
|
|
|
18
24
|
private get targetElementsById();
|
|
19
25
|
private get targetElementsByQuery();
|
|
20
26
|
}
|
|
27
|
+
export {};
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import { FetchResponse } from "./fetch_response";
|
|
2
2
|
import { FrameElement } from "../elements/frame_element";
|
|
3
|
+
export type TurboBeforeFetchRequestEvent = CustomEvent<{
|
|
4
|
+
fetchOptions: RequestInit;
|
|
5
|
+
url: URL;
|
|
6
|
+
resume: (value?: any) => void;
|
|
7
|
+
}>;
|
|
8
|
+
export type TurboBeforeFetchResponseEvent = CustomEvent<{
|
|
9
|
+
fetchResponse: FetchResponse;
|
|
10
|
+
}>;
|
|
11
|
+
export type TurboFetchRequestErrorEvent = CustomEvent<{
|
|
12
|
+
request: FetchRequest;
|
|
13
|
+
error: Error;
|
|
14
|
+
}>;
|
|
3
15
|
export interface FetchRequestDelegate {
|
|
4
16
|
referrer?: URL;
|
|
5
|
-
|
|
17
|
+
prepareRequest(request: FetchRequest): void;
|
|
6
18
|
requestStarted(request: FetchRequest): void;
|
|
7
19
|
requestPreventedHandlingResponse(request: FetchRequest, response: FetchResponse): void;
|
|
8
20
|
requestSucceededWithResponse(request: FetchRequest, response: FetchResponse): void;
|
|
@@ -18,8 +30,8 @@ export declare enum FetchMethod {
|
|
|
18
30
|
delete = 4
|
|
19
31
|
}
|
|
20
32
|
export declare function fetchMethodFromString(method: string): FetchMethod | undefined;
|
|
21
|
-
export
|
|
22
|
-
export
|
|
33
|
+
export type FetchRequestBody = FormData | URLSearchParams;
|
|
34
|
+
export type FetchRequestHeaders = {
|
|
23
35
|
[header: string]: string;
|
|
24
36
|
};
|
|
25
37
|
export interface FetchRequestOptions {
|
|
@@ -47,7 +59,9 @@ export declare class FetchRequest {
|
|
|
47
59
|
get defaultHeaders(): {
|
|
48
60
|
Accept: string;
|
|
49
61
|
};
|
|
50
|
-
get
|
|
62
|
+
get isSafe(): boolean;
|
|
51
63
|
get abortSignal(): AbortSignal;
|
|
64
|
+
acceptResponseType(mimeType: string): void;
|
|
52
65
|
private allowRequestToBeIntercepted;
|
|
66
|
+
private willDelegateErrorHandling;
|
|
53
67
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { TurboBeforeFetchRequestEvent, TurboBeforeFetchResponseEvent, TurboFetchRequestErrorEvent, } from "./fetch_request";
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export interface AppearanceObserverDelegate {
|
|
2
|
-
elementAppearedInViewport(element:
|
|
1
|
+
export interface AppearanceObserverDelegate<T extends Element> {
|
|
2
|
+
elementAppearedInViewport(element: T): void;
|
|
3
3
|
}
|
|
4
|
-
export declare class AppearanceObserver {
|
|
5
|
-
readonly delegate: AppearanceObserverDelegate
|
|
6
|
-
readonly element:
|
|
4
|
+
export declare class AppearanceObserver<T extends Element> {
|
|
5
|
+
readonly delegate: AppearanceObserverDelegate<T>;
|
|
6
|
+
readonly element: T;
|
|
7
7
|
readonly intersectionObserver: IntersectionObserver;
|
|
8
8
|
started: boolean;
|
|
9
|
-
constructor(delegate: AppearanceObserverDelegate
|
|
9
|
+
constructor(delegate: AppearanceObserverDelegate<T>, element: T);
|
|
10
10
|
start(): void;
|
|
11
11
|
stop(): void;
|
|
12
12
|
intersect: IntersectionObserverCallback;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export declare class CacheObserver {
|
|
2
|
+
readonly selector: string;
|
|
3
|
+
readonly deprecatedSelector: string;
|
|
2
4
|
started: boolean;
|
|
3
5
|
start(): void;
|
|
4
6
|
stop(): void;
|
|
5
|
-
|
|
7
|
+
removeTemporaryElements: EventListener;
|
|
8
|
+
get temporaryElements(): Element[];
|
|
9
|
+
get temporaryElementsWithDeprecation(): Element[];
|
|
6
10
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { LinkClickObserver, LinkClickObserverDelegate } from "./link_click_observer";
|
|
2
|
+
export type FormLinkClickObserverDelegate = {
|
|
3
|
+
willSubmitFormLinkToLocation(link: Element, location: URL, event: MouseEvent): boolean;
|
|
4
|
+
submittedFormLinkToLocation(link: Element, location: URL, form: HTMLFormElement): void;
|
|
5
|
+
};
|
|
6
|
+
export declare class FormLinkClickObserver implements LinkClickObserverDelegate {
|
|
7
|
+
readonly linkInterceptor: LinkClickObserver;
|
|
8
|
+
readonly delegate: FormLinkClickObserverDelegate;
|
|
9
|
+
constructor(delegate: FormLinkClickObserverDelegate, element: HTMLElement);
|
|
10
|
+
start(): void;
|
|
11
|
+
stop(): void;
|
|
12
|
+
willFollowLinkToLocation(link: Element, location: URL, originalEvent: MouseEvent): boolean;
|
|
13
|
+
followedLinkToLocation(link: Element, location: URL): void;
|
|
14
|
+
}
|
|
@@ -4,8 +4,9 @@ export interface FormSubmitObserverDelegate {
|
|
|
4
4
|
}
|
|
5
5
|
export declare class FormSubmitObserver {
|
|
6
6
|
readonly delegate: FormSubmitObserverDelegate;
|
|
7
|
+
readonly eventTarget: EventTarget;
|
|
7
8
|
started: boolean;
|
|
8
|
-
constructor(delegate: FormSubmitObserverDelegate);
|
|
9
|
+
constructor(delegate: FormSubmitObserverDelegate, eventTarget: EventTarget);
|
|
9
10
|
start(): void;
|
|
10
11
|
stop(): void;
|
|
11
12
|
submitCaptured: () => void;
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
export interface LinkClickObserverDelegate {
|
|
2
|
-
willFollowLinkToLocation(link: Element, location: URL): boolean;
|
|
2
|
+
willFollowLinkToLocation(link: Element, location: URL, event: MouseEvent): boolean;
|
|
3
3
|
followedLinkToLocation(link: Element, location: URL): void;
|
|
4
4
|
}
|
|
5
5
|
export declare class LinkClickObserver {
|
|
6
6
|
readonly delegate: LinkClickObserverDelegate;
|
|
7
|
+
readonly eventTarget: EventTarget;
|
|
7
8
|
started: boolean;
|
|
8
|
-
constructor(delegate: LinkClickObserverDelegate);
|
|
9
|
+
constructor(delegate: LinkClickObserverDelegate, eventTarget: EventTarget);
|
|
9
10
|
start(): void;
|
|
10
11
|
stop(): void;
|
|
11
12
|
clickCaptured: () => void;
|
|
12
|
-
clickBubbled: (event:
|
|
13
|
+
clickBubbled: (event: Event) => void;
|
|
13
14
|
clickEventIsSignificant(event: MouseEvent): boolean;
|
|
14
|
-
findLinkFromClickTarget(target: EventTarget | null):
|
|
15
|
+
findLinkFromClickTarget(target: EventTarget | null): HTMLAnchorElement | undefined;
|
|
15
16
|
getLocationForLink(link: Element): URL;
|
|
16
17
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
|
|
2
|
-
form?: HTMLFormElement;
|
|
3
|
-
type?: string;
|
|
4
|
-
};
|
|
5
|
-
declare const submittersByForm: WeakMap<HTMLFormElement, HTMLElement>;
|
|
6
|
-
declare function findSubmitterFromClickTarget(target: EventTarget | null): FormSubmitter | null;
|
|
7
|
-
declare function clickCaptured(event: Event): void;
|
|
1
|
+
export {};
|
|
@@ -1,6 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare class AsyncScriptTests extends TurboDriveTestCase {
|
|
3
|
-
setup(): Promise<void>;
|
|
4
|
-
"test does not emit turbo:load when loaded asynchronously after DOMContentLoaded"(): Promise<void>;
|
|
5
|
-
"test following a link when loaded asynchronously after DOMContentLoaded"(): Promise<void>;
|
|
6
|
-
}
|
|
1
|
+
export {};
|
|
@@ -1,9 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare class AutofocusTests extends TurboDriveTestCase {
|
|
3
|
-
setup(): Promise<void>;
|
|
4
|
-
"test autofocus first autofocus element on load"(): Promise<void>;
|
|
5
|
-
"test autofocus first [autofocus] element on visit"(): Promise<void>;
|
|
6
|
-
"test navigating a frame with a descendant link autofocuses [autofocus]:first-of-type"(): Promise<void>;
|
|
7
|
-
"test navigating a frame with a link targeting the frame autofocuses [autofocus]:first-of-type"(): Promise<void>;
|
|
8
|
-
"test navigating a frame with a turbo-frame targeting the frame autofocuses [autofocus]:first-of-type"(): Promise<void>;
|
|
9
|
-
}
|
|
1
|
+
export {};
|
|
@@ -1,9 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare class DriveDisabledTests extends TurboDriveTestCase {
|
|
3
|
-
path: string;
|
|
4
|
-
setup(): Promise<void>;
|
|
5
|
-
"test drive disabled by default; click normal link"(): Promise<void>;
|
|
6
|
-
"test drive disabled by default; click link inside data-turbo='true'"(): Promise<void>;
|
|
7
|
-
"test drive disabled by default; submit form inside data-turbo='true'"(): Promise<void>;
|
|
8
|
-
get formSubmitted(): Promise<boolean>;
|
|
9
|
-
}
|
|
1
|
+
export {};
|
|
@@ -1,8 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare class DriveTests extends TurboDriveTestCase {
|
|
3
|
-
path: string;
|
|
4
|
-
setup(): Promise<void>;
|
|
5
|
-
"test drive enabled by default; click normal link"(): Promise<void>;
|
|
6
|
-
"test drive to external link"(): Promise<void>;
|
|
7
|
-
"test drive enabled by default; click link inside data-turbo='false'"(): Promise<void>;
|
|
8
|
-
}
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|