@hotwired/turbo 7.2.0-beta.2 → 7.2.0-rc.1

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.
@@ -5,12 +5,16 @@ import { AppearanceObserver, AppearanceObserverDelegate } from "../../observers/
5
5
  import { FormSubmission, FormSubmissionDelegate } from "../drive/form_submission";
6
6
  import { Snapshot } from "../snapshot";
7
7
  import { ViewDelegate, ViewRenderOptions } from "../view";
8
+ import { Locatable } from "../url";
8
9
  import { FormSubmitObserver, FormSubmitObserverDelegate } from "../../observers/form_submit_observer";
9
10
  import { FrameView } from "./frame_view";
10
11
  import { LinkClickObserver, LinkClickObserverDelegate } from "../../observers/link_click_observer";
11
12
  import { FormLinkClickObserver, FormLinkClickObserverDelegate } from "../../observers/form_link_click_observer";
13
+ import { VisitOptions } from "../drive/visit";
14
+ declare type VisitFallback = (location: Response | Locatable, options: Partial<VisitOptions>) => Promise<void>;
12
15
  export declare type TurboFrameMissingEvent = CustomEvent<{
13
- fetchResponse: FetchResponse;
16
+ response: Response;
17
+ visit: VisitFallback;
14
18
  }>;
15
19
  export declare class FrameController implements AppearanceObserverDelegate, FetchRequestDelegate, FormSubmitObserverDelegate, FormSubmissionDelegate, FrameElementDelegate, FormLinkClickObserverDelegate, LinkClickObserverDelegate, ViewDelegate<FrameElement, Snapshot<FrameElement>> {
16
20
  readonly element: FrameElement;
@@ -51,7 +55,7 @@ export declare class FrameController implements AppearanceObserverDelegate, Fetc
51
55
  requestStarted(_request: FetchRequest): void;
52
56
  requestPreventedHandlingResponse(_request: FetchRequest, _response: FetchResponse): void;
53
57
  requestSucceededWithResponse(request: FetchRequest, response: FetchResponse): Promise<void>;
54
- requestFailedWithResponse(request: FetchRequest, response: FetchResponse): void;
58
+ requestFailedWithResponse(request: FetchRequest, response: FetchResponse): Promise<void>;
55
59
  requestErrored(request: FetchRequest, error: Error): void;
56
60
  requestFinished(_request: FetchRequest): void;
57
61
  formSubmissionStarted({ formElement }: FormSubmission): void;
@@ -69,7 +73,8 @@ export declare class FrameController implements AppearanceObserverDelegate, Fetc
69
73
  private navigateFrame;
70
74
  private proposeVisitIfNavigatedWithAction;
71
75
  changeHistory(): void;
72
- private sessionWillHandleMissingFrame;
76
+ private willHandleFrameMissingFromResponse;
77
+ private visitResponse;
73
78
  private findFrameElement;
74
79
  extractForeignFrameElement(container: ParentNode): Promise<FrameElement | null>;
75
80
  private formActionIsVisitable;
@@ -88,3 +93,4 @@ export declare class FrameController implements AppearanceObserverDelegate, Fetc
88
93
  private ignoringChangesToAttribute;
89
94
  private withCurrentNavigationElement;
90
95
  }
96
+ export {};
@@ -15,9 +15,7 @@ export { navigator, session, cache, PageRenderer, PageSnapshot, FrameRenderer };
15
15
  export { TurboBeforeCacheEvent, TurboBeforeRenderEvent, TurboBeforeVisitEvent, TurboClickEvent, TurboFetchRequestErrorEvent, TurboFrameLoadEvent, TurboFrameRenderEvent, TurboLoadEvent, TurboRenderEvent, TurboVisitEvent, } from "./session";
16
16
  export { TurboSubmitStartEvent, TurboSubmitEndEvent } from "./drive/form_submission";
17
17
  export { TurboFrameMissingEvent } from "./frames/frame_controller";
18
- export { TurboBeforeFetchRequestEvent, TurboBeforeFetchResponseEvent } from "../http/fetch_request";
19
- export { TurboBeforeStreamRenderEvent } from "../elements/stream_element";
20
- export { StreamActions } from "./streams/stream_actions";
18
+ export { StreamActions, TurboStreamAction, TurboStreamActions } from "./streams/stream_actions";
21
19
  export declare function start(): void;
22
20
  export declare function registerAdapter(adapter: Adapter): void;
23
21
  export declare function visit(location: Locatable, options?: Partial<VisitOptions>): Promise<void>;
@@ -26,5 +24,5 @@ export declare function disconnectStreamSource(source: StreamSource): void;
26
24
  export declare function renderStreamMessage(message: StreamMessage | string): void;
27
25
  export declare function clearCache(): void;
28
26
  export declare function setProgressBarDelay(delay: number): void;
29
- export declare function setConfirmMethod(confirmMethod: (message: string, element: HTMLFormElement) => Promise<boolean>): void;
27
+ export declare function setConfirmMethod(confirmMethod: (message: string, element: HTMLFormElement, submitter: HTMLElement | undefined) => Promise<boolean>): void;
30
28
  export declare function setFormMode(mode: FormMode): void;
@@ -11,6 +11,7 @@ import { Navigator, NavigatorDelegate } from "./drive/navigator";
11
11
  import { PageObserver, PageObserverDelegate } from "../observers/page_observer";
12
12
  import { ScrollObserver } from "../observers/scroll_observer";
13
13
  import { StreamMessage } from "./streams/stream_message";
14
+ import { StreamMessageRenderer } from "./streams/stream_message_renderer";
14
15
  import { StreamObserver } from "../observers/stream_observer";
15
16
  import { Action, Position, StreamSource } from "./types";
16
17
  import { PageView, PageViewDelegate, PageViewRenderOptions } from "./drive/page_view";
@@ -68,6 +69,7 @@ export declare class Session implements FormSubmitObserverDelegate, HistoryDeleg
68
69
  readonly streamObserver: StreamObserver;
69
70
  readonly formLinkClickObserver: FormLinkClickObserver;
70
71
  readonly frameRedirector: FrameRedirector;
72
+ readonly streamMessageRenderer: StreamMessageRenderer;
71
73
  drive: boolean;
72
74
  enabled: boolean;
73
75
  progressBarDelay: number;
@@ -92,7 +94,7 @@ export declare class Session implements FormSubmitObserverDelegate, HistoryDeleg
92
94
  submittedFormLinkToLocation(): void;
93
95
  willFollowLinkToLocation(link: Element, location: URL, event: MouseEvent): boolean;
94
96
  followedLinkToLocation(link: Element, location: URL): void;
95
- allowsVisitingLocationWithAction(location: URL, action?: Action): boolean;
97
+ allowsVisitingLocation(location: URL, options?: Partial<VisitOptions>): boolean;
96
98
  visitProposedToLocation(location: URL, options: Partial<VisitOptions>): Promise<void>;
97
99
  visitStarted(visit: Visit): void;
98
100
  visitCompleted(visit: Visit): void;
@@ -111,17 +113,16 @@ export declare class Session implements FormSubmitObserverDelegate, HistoryDeleg
111
113
  viewInvalidated(reason: ReloadReason): void;
112
114
  frameLoaded(frame: FrameElement): void;
113
115
  frameRendered(fetchResponse: FetchResponse, frame: FrameElement): void;
114
- frameMissing(frame: FrameElement, fetchResponse: FetchResponse): Promise<void>;
115
116
  applicationAllowsFollowingLinkToLocation(link: Element, location: URL, ev: MouseEvent): boolean;
116
- applicationAllowsVisitingLocation(location: URL): boolean;
117
+ applicationAllowsVisitingLocation(location: URL, options?: Partial<VisitOptions>): boolean;
117
118
  notifyApplicationAfterClickingLinkToLocation(link: Element, location: URL, event: MouseEvent): CustomEvent<{
118
119
  url: string;
119
120
  originalEvent: MouseEvent;
120
121
  }>;
121
- notifyApplicationBeforeVisitingLocation(location: URL): CustomEvent<{
122
+ notifyApplicationBeforeVisitingLocation(location: URL, element?: Element): CustomEvent<{
122
123
  url: string;
123
124
  }>;
124
- notifyApplicationAfterVisitingLocation(location: URL, action: Action): CustomEvent<{
125
+ notifyApplicationAfterVisitingLocation(location: URL, action: Action, element?: Element): CustomEvent<{
125
126
  url: string;
126
127
  action: Action;
127
128
  }>;
@@ -7,8 +7,10 @@ export declare class Snapshot<E extends Element = Element> {
7
7
  getElementForAnchor(anchor: string | undefined): Element | null;
8
8
  get isConnected(): boolean;
9
9
  get firstAutofocusableElement(): Element | null;
10
- get permanentElements(): Element[];
10
+ get permanentElements(): NodeListOf<Element>;
11
11
  getPermanentElementById(id: string): Element | null;
12
12
  getPermanentElementMapForSnapshot(snapshot: Snapshot): PermanentElementMap;
13
13
  }
14
+ export declare function getPermanentElementById(node: ParentNode, id: string): Element | null;
15
+ export declare function queryPermanentElementsAll(node: ParentNode): NodeListOf<Element>;
14
16
  export declare type PermanentElementMap = Record<string, [Element, Element]>;
@@ -1,4 +1,6 @@
1
1
  import { StreamElement } from "../../elements/stream_element";
2
- export declare const StreamActions: {
3
- [action: string]: (this: StreamElement) => void;
2
+ export declare type TurboStreamAction = (this: StreamElement) => void;
3
+ export declare type TurboStreamActions = {
4
+ [action: string]: TurboStreamAction;
4
5
  };
6
+ export declare const StreamActions: TurboStreamActions;
@@ -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,2 +1,3 @@
1
1
  export * from "./frame_element";
2
2
  export * from "./stream_element";
3
+ export * from "./stream_source_element";
@@ -1,14 +1,17 @@
1
+ declare type Render = (currentElement: StreamElement) => Promise<void>;
1
2
  export declare type TurboBeforeStreamRenderEvent = CustomEvent<{
2
3
  newStream: StreamElement;
4
+ render: Render;
3
5
  }>;
4
6
  export declare class StreamElement extends HTMLElement {
7
+ static renderElement(newElement: StreamElement): Promise<void>;
5
8
  connectedCallback(): Promise<void>;
6
9
  private renderPromise?;
7
10
  render(): Promise<void>;
8
11
  disconnect(): void;
9
12
  removeDuplicateTargetChildren(): void;
10
13
  get duplicateChildren(): any[];
11
- get performAction(): (this: StreamElement) => void;
14
+ get performAction(): import("../core/streams/stream_actions").TurboStreamAction;
12
15
  get targetElements(): any[];
13
16
  get templateContent(): DocumentFragment;
14
17
  get templateElement(): HTMLTemplateElement;
@@ -21,3 +24,4 @@ export declare class StreamElement extends HTMLElement {
21
24
  private get targetElementsById();
22
25
  private get targetElementsByQuery();
23
26
  }
27
+ export {};
@@ -1,5 +1,4 @@
1
1
  import { FetchResponse } from "./fetch_response";
2
- import { FrameElement } from "../elements/frame_element";
3
2
  export declare type TurboBeforeFetchRequestEvent = CustomEvent<{
4
3
  fetchOptions: RequestInit;
5
4
  url: URL;
@@ -41,10 +40,10 @@ export declare class FetchRequest {
41
40
  readonly headers: FetchRequestHeaders;
42
41
  readonly url: URL;
43
42
  readonly body?: FetchRequestBody;
44
- readonly target?: FrameElement | HTMLFormElement | null;
43
+ readonly target?: Element | null;
45
44
  readonly abortController: AbortController;
46
45
  private resolveRequestPromise;
47
- constructor(delegate: FetchRequestDelegate, method: FetchMethod, location: URL, body?: FetchRequestBody, target?: FrameElement | HTMLFormElement | null);
46
+ constructor(delegate: FetchRequestDelegate, method: FetchMethod, location: URL, body?: FetchRequestBody, target?: Element | null);
48
47
  get location(): URL;
49
48
  get params(): URLSearchParams;
50
49
  get entries(): [string, FormDataEntryValue][];
@@ -0,0 +1 @@
1
+ export { TurboBeforeFetchRequestEvent, TurboBeforeFetchResponseEvent } from "./fetch_request";
@@ -2,3 +2,5 @@ import "./polyfills";
2
2
  import "./elements";
3
3
  import "./script_warning";
4
4
  export * from "./core";
5
+ export * from "./elements";
6
+ export * from "./http";
@@ -1,6 +1,11 @@
1
1
  import { JSHandle, Locator, Page } from "@playwright/test";
2
- declare type EventLog = [string, any, string | null];
3
- declare type MutationLog = [string, string | null, string | null];
2
+ declare type Target = string | null;
3
+ declare type EventType = string;
4
+ declare type EventDetail = any;
5
+ declare type EventLog = [EventType, EventDetail, Target];
6
+ declare type MutationAttributeName = string;
7
+ declare type MutationAttributeValue = string | null;
8
+ declare type MutationLog = [MutationAttributeName, Target, MutationAttributeValue];
4
9
  export declare function attributeForSelector(page: Page, selector: string, attributeName: string): Promise<string | null>;
5
10
  export declare function clickWithoutScrolling(page: Page, selector: string, options?: {}): Promise<false | void>;
6
11
  export declare function clearLocalStorage(page: Page): Promise<void>;
@@ -16,6 +21,7 @@ export declare function nextBody(_page: Page, timeout?: number): Promise<void>;
16
21
  export declare function nextEventNamed(page: Page, eventName: string): Promise<any>;
17
22
  export declare function nextEventOnTarget(page: Page, elementId: string, eventName: string): Promise<any>;
18
23
  export declare function nextAttributeMutationNamed(page: Page, elementId: string, attributeName: string): Promise<string | null>;
24
+ export declare function noNextAttributeMutationNamed(page: Page, elementId: string, attributeName: string): Promise<boolean>;
19
25
  export declare function noNextEventNamed(page: Page, eventName: string): Promise<boolean>;
20
26
  export declare function noNextEventOnTarget(page: Page, elementId: string, eventName: string): Promise<boolean>;
21
27
  export declare function outerHTMLForSelector(page: Page, selector: string): Promise<string>;
@@ -14,11 +14,13 @@ export declare function parseHTMLDocument(html?: string): Document;
14
14
  export declare function unindent(strings: TemplateStringsArray, ...values: any[]): string;
15
15
  export declare function uuid(): string;
16
16
  export declare function getAttribute(attributeName: string, ...elements: (Element | undefined)[]): string | null;
17
+ export declare function hasAttribute(attributeName: string, ...elements: (Element | undefined)[]): boolean;
17
18
  export declare function markAsBusy(...elements: Element[]): void;
18
19
  export declare function clearBusyState(...elements: Element[]): void;
19
20
  export declare function waitForLoad(element: HTMLLinkElement, timeoutInMilliseconds?: number): Promise<void>;
20
21
  export declare function getHistoryMethodForAction(action: Action): (data: any, unused: string, url?: string | URL | null | undefined) => void;
21
22
  export declare function getVisitAction(...elements: (Element | undefined)[]): Action | null;
23
+ export declare function getBodyElementId(): string | null;
22
24
  export declare function getMetaElement(name: string): HTMLMetaElement | null;
23
25
  export declare function getMetaContent(name: string): string | null;
24
26
  export declare function setMetaContent(name: string, content: string): HTMLMetaElement;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hotwired/turbo",
3
- "version": "7.2.0-beta.2",
3
+ "version": "7.2.0-rc.1",
4
4
  "description": "The speed of a single-page web application without having to write any JavaScript",
5
5
  "module": "dist/turbo.es2017-esm.js",
6
6
  "main": "dist/turbo.es2017-umd.js",
@@ -37,7 +37,7 @@
37
37
  "devDependencies": {
38
38
  "@playwright/test": "^1.22.2",
39
39
  "@rollup/plugin-node-resolve": "13.1.3",
40
- "@rollup/plugin-typescript": "8.3.1",
40
+ "@rollup/plugin-typescript": "^8.5.0",
41
41
  "@types/multer": "^1.4.5",
42
42
  "@typescript-eslint/eslint-plugin": "^5.20.0",
43
43
  "@typescript-eslint/parser": "^5.20.0",
@@ -50,8 +50,8 @@
50
50
  "multer": "^1.4.2",
51
51
  "prettier": "2.6.2",
52
52
  "rollup": "^2.35.1",
53
- "tslib": "^2.0.3",
54
- "typescript": "^4.6.3"
53
+ "tslib": "^2.4.0",
54
+ "typescript": "^4.8.2"
55
55
  },
56
56
  "scripts": {
57
57
  "clean": "rm -fr dist",