From 91b4184162150f77bfe1008d8e17065417fcdeb0 Mon Sep 17 00:00:00 2001 From: Steve Ruiz Date: Thu, 21 Oct 2021 19:28:33 +0100 Subject: [PATCH] filter snappable shapes, give viewport information to sessions --- packages/core/src/types.d.ts | 601 +++++++++--------- packages/core/src/types.d.ts.map | 1 + packages/core/src/utils/index.d.ts | 5 + packages/core/src/utils/index.d.ts.map | 1 + packages/core/src/utils/polyfills.d.ts | 1 + packages/core/src/utils/polyfills.d.ts.map | 1 + packages/core/src/utils/svg.d.ts | 15 + packages/core/src/utils/svg.d.ts.map | 1 + packages/core/src/utils/utils.d.ts | 497 +++++++++++++++ packages/core/src/utils/utils.d.ts.map | 1 + .../duplicate/duplicate.command.spec.ts | 2 +- .../session/sessions/arrow/arrow.session.ts | 16 +- .../session/sessions/brush/brush.session.ts | 11 +- .../session/sessions/draw/draw.session.ts | 7 +- .../session/sessions/grid/grid.session.ts | 7 +- .../session/sessions/handle/handle.session.ts | 16 +- .../session/sessions/rotate/rotate.session.ts | 9 +- .../transform-single.session.ts | 24 +- .../sessions/transform/transform.session.ts | 15 +- .../sessions/translate/translate.session.ts | 25 +- packages/tldraw/src/state/tlstate.ts | 17 +- .../src/state/tool/BaseTool/BaseTool.ts | 6 +- .../src/state/tool/DrawTool/DrawTool.ts | 3 +- packages/tldraw/src/types.ts | 14 +- packages/www/public/sw.js | 2 +- packages/www/public/sw.js.map | 2 +- ...DPd.js => worker-pM2qo7aUQ48uy8XFEvNYI.js} | 0 27 files changed, 929 insertions(+), 371 deletions(-) create mode 100644 packages/core/src/types.d.ts.map create mode 100644 packages/core/src/utils/index.d.ts create mode 100644 packages/core/src/utils/index.d.ts.map create mode 100644 packages/core/src/utils/polyfills.d.ts create mode 100644 packages/core/src/utils/polyfills.d.ts.map create mode 100644 packages/core/src/utils/svg.d.ts create mode 100644 packages/core/src/utils/svg.d.ts.map create mode 100644 packages/core/src/utils/utils.d.ts create mode 100644 packages/core/src/utils/utils.d.ts.map rename packages/www/public/{worker-j4SQSxW4Y5BQ1MYBuhDPd.js => worker-pM2qo7aUQ48uy8XFEvNYI.js} (100%) diff --git a/packages/core/src/types.d.ts b/packages/core/src/types.d.ts index 74e73237e..d9745d34c 100644 --- a/packages/core/src/types.d.ts +++ b/packages/core/src/types.d.ts @@ -1,357 +1,322 @@ -import type React from 'react' -import { MutableRefObject } from 'react-router/node_modules/@types/react' +import type React from 'react'; export declare type Patch = Partial<{ - [P in keyof T]: T | Partial | Patch -}> + [P in keyof T]: T | Partial | Patch; +}>; +declare type ForwardedRef = ((instance: T | null) => void) | React.MutableRefObject | null; export interface TLPage { - id: string - name?: string - childIndex?: number - shapes: Record - bindings: Record + id: string; + name?: string; + childIndex?: number; + shapes: Record; + bindings: Record; } export interface TLPageState { - id: string - selectedIds: string[] - camera: { - point: number[] - zoom: number - } - brush?: TLBounds - pointedId?: string | null - hoveredId?: string | null - editingId?: string | null - bindingId?: string | null - boundsRotation?: number - currentParentId?: string | null + id: string; + selectedIds: string[]; + camera: { + point: number[]; + zoom: number; + }; + brush?: TLBounds | null; + pointedId?: string | null; + hoveredId?: string | null; + editingId?: string | null; + bindingId?: string | null; + boundsRotation?: number; + currentParentId?: string | null; } +export interface TLUser { + id: string; + color: string; + point: number[]; + selectedIds: string[]; + activeShapes: T[]; +} +export declare type TLUsers = TLUser> = Record; +export declare type TLSnapLine = number[][]; export interface TLHandle { - id: string - index: number - point: number[] - canBind?: boolean - bindingId?: string + id: string; + index: number; + point: number[]; + canBind?: boolean; + bindingId?: string; } export interface TLShape { - id: string - type: string - parentId: string - childIndex: number - name: string - point: number[] - rotation?: number - children?: string[] - handles?: Record - isLocked?: boolean - isHidden?: boolean - isEditing?: boolean - isGenerated?: boolean - isAspectRatioLocked?: boolean + id: string; + type: string; + parentId: string; + childIndex: number; + name: string; + point: number[]; + rotation?: number; + children?: string[]; + handles?: Record; + isLocked?: boolean; + isHidden?: boolean; + isEditing?: boolean; + isGenerated?: boolean; + isAspectRatioLocked?: boolean; } -export declare type TLShapeUtils< - T extends TLShape = any, - E extends Element = any, - M = any, - K = any -> = Record> +export declare type TLShapeUtils = Record>; export interface TLRenderInfo { - shape: T - isEditing: boolean - isBinding: boolean - isHovered: boolean - isSelected: boolean - isCurrentParent: boolean - meta: M extends any ? M : never - onShapeChange?: TLCallbacks['onShapeChange'] - onShapeBlur?: TLCallbacks['onShapeBlur'] - events: { - onPointerDown: (e: React.PointerEvent) => void - onPointerUp: (e: React.PointerEvent) => void - onPointerEnter: (e: React.PointerEvent) => void - onPointerMove: (e: React.PointerEvent) => void - onPointerLeave: (e: React.PointerEvent) => void - } + shape: T; + isEditing: boolean; + isBinding: boolean; + isHovered: boolean; + isSelected: boolean; + isCurrentParent: boolean; + meta: M extends any ? M : never; + onShapeChange?: TLCallbacks['onShapeChange']; + onShapeBlur?: TLCallbacks['onShapeBlur']; + events: { + onPointerDown: (e: React.PointerEvent) => void; + onPointerUp: (e: React.PointerEvent) => void; + onPointerEnter: (e: React.PointerEvent) => void; + onPointerMove: (e: React.PointerEvent) => void; + onPointerLeave: (e: React.PointerEvent) => void; + }; } export interface TLShapeProps extends TLRenderInfo { - ref: MutableRefObject - shape: T + ref: ForwardedRef; + shape: T; } export interface TLTool { - id: string - name: string + id: string; + name: string; } export interface TLBinding { - id: string - type: string - toId: string - fromId: string - meta: M + id: string; + type: string; + toId: string; + fromId: string; + meta: M; } export interface TLTheme { - brushFill?: string - brushStroke?: string - selectFill?: string - selectStroke?: string - background?: string - foreground?: string + accent?: string; + brushFill?: string; + brushStroke?: string; + selectFill?: string; + selectStroke?: string; + background?: string; + foreground?: string; } -export declare type TLWheelEventHandler = ( - info: TLPointerInfo, - e: React.WheelEvent | WheelEvent -) => void -export declare type TLPinchEventHandler = ( - info: TLPointerInfo, - e: - | React.WheelEvent - | WheelEvent - | React.TouchEvent - | TouchEvent - | React.PointerEvent - | PointerEventInit -) => void -export declare type TLPointerEventHandler = ( - info: TLPointerInfo, - e: React.PointerEvent -) => void -export declare type TLCanvasEventHandler = ( - info: TLPointerInfo<'canvas'>, - e: React.PointerEvent -) => void -export declare type TLBoundsEventHandler = ( - info: TLPointerInfo<'bounds'>, - e: React.PointerEvent -) => void -export declare type TLBoundsHandleEventHandler = ( - info: TLPointerInfo, - e: React.PointerEvent -) => void +export declare type TLWheelEventHandler = (info: TLPointerInfo, e: React.WheelEvent | WheelEvent) => void; +export declare type TLPinchEventHandler = (info: TLPointerInfo, e: React.WheelEvent | WheelEvent | React.TouchEvent | TouchEvent | React.PointerEvent | PointerEventInit) => void; +export declare type TLShapeChangeHandler = (shape: { + id: string; +} & Partial, info?: K) => void; +export declare type TLShapeBlurHandler = (info?: K) => void; +export declare type TLKeyboardEventHandler = (key: string, info: TLKeyboardInfo, e: KeyboardEvent) => void; +export declare type TLPointerEventHandler = (info: TLPointerInfo, e: React.PointerEvent) => void; +export declare type TLShapeCloneHandler = (info: TLPointerInfo<'top' | 'right' | 'bottom' | 'left' | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'>, e: React.PointerEvent) => void; +export declare type TLShapeLinkHandler = (info: TLPointerInfo<'link'>, e: React.PointerEvent) => void; +export declare type TLCanvasEventHandler = (info: TLPointerInfo<'canvas'>, e: React.PointerEvent) => void; +export declare type TLBoundsEventHandler = (info: TLPointerInfo<'bounds'>, e: React.PointerEvent) => void; +export declare type TLBoundsHandleEventHandler = (info: TLPointerInfo, e: React.PointerEvent) => void; export interface TLCallbacks { - onPinchStart: TLPinchEventHandler - onPinchEnd: TLPinchEventHandler - onPinch: TLPinchEventHandler - onPan: TLWheelEventHandler - onZoom: TLWheelEventHandler - onPointerMove: TLPointerEventHandler - onPointerUp: TLPointerEventHandler - onPointerDown: TLPointerEventHandler - onPointCanvas: TLCanvasEventHandler - onDoubleClickCanvas: TLCanvasEventHandler - onRightPointCanvas: TLCanvasEventHandler - onDragCanvas: TLCanvasEventHandler - onReleaseCanvas: TLCanvasEventHandler - onPointShape: TLPointerEventHandler - onDoubleClickShape: TLPointerEventHandler - onRightPointShape: TLPointerEventHandler - onDragShape: TLPointerEventHandler - onHoverShape: TLPointerEventHandler - onUnhoverShape: TLPointerEventHandler - onReleaseShape: TLPointerEventHandler - onPointBounds: TLBoundsEventHandler - onDoubleClickBounds: TLBoundsEventHandler - onRightPointBounds: TLBoundsEventHandler - onDragBounds: TLBoundsEventHandler - onHoverBounds: TLBoundsEventHandler - onUnhoverBounds: TLBoundsEventHandler - onReleaseBounds: TLBoundsEventHandler - onPointBoundsHandle: TLBoundsHandleEventHandler - onDoubleClickBoundsHandle: TLBoundsHandleEventHandler - onRightPointBoundsHandle: TLBoundsHandleEventHandler - onDragBoundsHandle: TLBoundsHandleEventHandler - onHoverBoundsHandle: TLBoundsHandleEventHandler - onUnhoverBoundsHandle: TLBoundsHandleEventHandler - onReleaseBoundsHandle: TLBoundsHandleEventHandler - onPointHandle: TLPointerEventHandler - onDoubleClickHandle: TLPointerEventHandler - onRightPointHandle: TLPointerEventHandler - onDragHandle: TLPointerEventHandler - onHoverHandle: TLPointerEventHandler - onUnhoverHandle: TLPointerEventHandler - onReleaseHandle: TLPointerEventHandler - onRenderCountChange: (ids: string[]) => void - onShapeChange: ( - shape: { - id: string - } & Partial - ) => void - onShapeBlur: () => void - onError: (error: Error) => void + onPinchStart: TLPinchEventHandler; + onPinchEnd: TLPinchEventHandler; + onPinch: TLPinchEventHandler; + onPan: TLWheelEventHandler; + onZoom: TLWheelEventHandler; + onPointerMove: TLPointerEventHandler; + onPointerUp: TLPointerEventHandler; + onPointerDown: TLPointerEventHandler; + onPointCanvas: TLCanvasEventHandler; + onDoubleClickCanvas: TLCanvasEventHandler; + onRightPointCanvas: TLCanvasEventHandler; + onDragCanvas: TLCanvasEventHandler; + onReleaseCanvas: TLCanvasEventHandler; + onPointShape: TLPointerEventHandler; + onDoubleClickShape: TLPointerEventHandler; + onRightPointShape: TLPointerEventHandler; + onDragShape: TLPointerEventHandler; + onHoverShape: TLPointerEventHandler; + onUnhoverShape: TLPointerEventHandler; + onReleaseShape: TLPointerEventHandler; + onPointBounds: TLBoundsEventHandler; + onDoubleClickBounds: TLBoundsEventHandler; + onRightPointBounds: TLBoundsEventHandler; + onDragBounds: TLBoundsEventHandler; + onHoverBounds: TLBoundsEventHandler; + onUnhoverBounds: TLBoundsEventHandler; + onReleaseBounds: TLBoundsEventHandler; + onPointBoundsHandle: TLBoundsHandleEventHandler; + onDoubleClickBoundsHandle: TLBoundsHandleEventHandler; + onRightPointBoundsHandle: TLBoundsHandleEventHandler; + onDragBoundsHandle: TLBoundsHandleEventHandler; + onHoverBoundsHandle: TLBoundsHandleEventHandler; + onUnhoverBoundsHandle: TLBoundsHandleEventHandler; + onReleaseBoundsHandle: TLBoundsHandleEventHandler; + onPointHandle: TLPointerEventHandler; + onDoubleClickHandle: TLPointerEventHandler; + onRightPointHandle: TLPointerEventHandler; + onDragHandle: TLPointerEventHandler; + onHoverHandle: TLPointerEventHandler; + onUnhoverHandle: TLPointerEventHandler; + onReleaseHandle: TLPointerEventHandler; + onShapeChange: TLShapeChangeHandler; + onShapeBlur: TLShapeBlurHandler; + onShapeClone: TLShapeCloneHandler; + onRenderCountChange: (ids: string[]) => void; + onError: (error: Error) => void; + onBoundsChange: (bounds: TLBounds) => void; + onKeyDown: TLKeyboardEventHandler; + onKeyUp: TLKeyboardEventHandler; } export interface TLBounds { - minX: number - minY: number - maxX: number - maxY: number - width: number - height: number - rotation?: number + minX: number; + minY: number; + maxX: number; + maxY: number; + width: number; + height: number; + rotation?: number; +} +export interface TLBoundsWithCenter extends TLBounds { + midX: number; + midY: number; } export declare type TLIntersection = { - didIntersect: boolean - message: string - points: number[][] -} + didIntersect: boolean; + message: string; + points: number[][]; +}; export declare enum TLBoundsEdge { - Top = 'top_edge', - Right = 'right_edge', - Bottom = 'bottom_edge', - Left = 'left_edge', + Top = "top_edge", + Right = "right_edge", + Bottom = "bottom_edge", + Left = "left_edge" } export declare enum TLBoundsCorner { - TopLeft = 'top_left_corner', - TopRight = 'top_right_corner', - BottomRight = 'bottom_right_corner', - BottomLeft = 'bottom_left_corner', + TopLeft = "top_left_corner", + TopRight = "top_right_corner", + BottomRight = "bottom_right_corner", + BottomLeft = "bottom_left_corner" } export interface TLPointerInfo { - target: T - pointerId: number - origin: number[] - point: number[] - delta: number[] - pressure: number - shiftKey: boolean - ctrlKey: boolean - metaKey: boolean - altKey: boolean + target: T; + pointerId: number; + origin: number[]; + point: number[]; + delta: number[]; + pressure: number; + shiftKey: boolean; + ctrlKey: boolean; + metaKey: boolean; + altKey: boolean; + spaceKey: boolean; } export interface TLKeyboardInfo { - origin: number[] - point: number[] - key: string - keys: string[] - shiftKey: boolean - ctrlKey: boolean - metaKey: boolean - altKey: boolean + origin: number[]; + point: number[]; + key: string; + keys: string[]; + shiftKey: boolean; + ctrlKey: boolean; + metaKey: boolean; + altKey: boolean; } export interface TLTransformInfo { - type: TLBoundsEdge | TLBoundsCorner - initialShape: T - scaleX: number - scaleY: number - transformOrigin: number[] + type: TLBoundsEdge | TLBoundsCorner; + initialShape: T; + scaleX: number; + scaleY: number; + transformOrigin: number[]; } export interface TLBezierCurveSegment { - start: number[] - tangentStart: number[] - normalStart: number[] - pressureStart: number - end: number[] - tangentEnd: number[] - normalEnd: number[] - pressureEnd: number + start: number[]; + tangentStart: number[]; + normalStart: number[]; + pressureStart: number; + end: number[]; + tangentEnd: number[]; + normalEnd: number[]; + pressureEnd: number; } -export declare type TLShapeUtil< - T extends TLShape, - E extends Element, - M = any, - K = { - [key: string]: any - } -> = K & { - type: T['type'] - defaultProps: T - Component( - this: TLShapeUtil, - props: TLRenderInfo, - ref: React.MutableRefObject - ): React.ReactElement, E['tagName']> - Indicator( - this: TLShapeUtil, - props: { - shape: T - } - ): React.ReactElement | null - getBounds(this: TLShapeUtil, shape: T): TLBounds - refMap: Map> - boundsCache: WeakMap - isAspectRatioLocked: boolean - canEdit: boolean - canBind: boolean - getRotatedBounds(this: TLShapeUtil, shape: T): TLBounds - hitTest(this: TLShapeUtil, shape: T, point: number[]): boolean - hitTestBounds(this: TLShapeUtil, shape: T, bounds: TLBounds): boolean - shouldRender(this: TLShapeUtil, prev: T, next: T): boolean - getCenter(this: TLShapeUtil, shape: T): number[] - getRef(this: TLShapeUtil, shape: T): React.RefObject - getBindingPoint( - this: TLShapeUtil, - shape: T, - fromShape: K, - point: number[], - origin: number[], - direction: number[], - padding: number, - bindAnywhere: boolean - ): - | { - point: number[] - distance: number - } - | undefined - create: ( - this: TLShapeUtil, - props: { - id: string - } & Partial - ) => T - mutate: (this: TLShapeUtil, shape: T, props: Partial) => Partial - transform: ( - this: TLShapeUtil, - shape: T, - bounds: TLBounds, - info: TLTransformInfo - ) => Partial | void - transformSingle: ( - this: TLShapeUtil, - shape: T, - bounds: TLBounds, - info: TLTransformInfo - ) => Partial | void - updateChildren: ( - this: TLShapeUtil, - shape: T, - children: K[] - ) => Partial[] | void - onChildrenChange: (this: TLShapeUtil, shape: T, children: TLShape[]) => Partial | void - onBindingChange: ( - this: TLShapeUtil, - shape: T, - binding: TLBinding, - target: TLShape, - targetBounds: TLBounds, - center: number[] - ) => Partial | void - onHandleChange: ( - this: TLShapeUtil, - shape: T, - handle: Partial, - info: Partial - ) => Partial | void - onRightPointHandle: ( - this: TLShapeUtil, - shape: T, - handle: Partial, - info: Partial - ) => Partial | void - onDoubleClickHandle: ( - this: TLShapeUtil, - shape: T, - handle: Partial, - info: Partial - ) => Partial | void - onDoubleClickBoundsHandle: (this: TLShapeUtil, shape: T) => Partial | void - onSessionComplete: (this: TLShapeUtil, shape: T) => Partial | void - onStyleChange: (this: TLShapeUtil, shape: T) => Partial | void - _Component: React.ForwardRefExoticComponent +export declare enum SnapPoints { + minX = "minX", + midX = "midX", + maxX = "maxX", + minY = "minY", + midY = "midY", + maxY = "maxY" } +export declare type Snap = { + id: SnapPoints; + isSnapped: false; +} | { + id: SnapPoints; + isSnapped: true; + to: number; + B: TLBoundsWithCenter; + distance: number; +}; +export declare type TLShapeUtil = K & { + type: T['type']; + defaultProps: T; + Component(this: TLShapeUtil, props: TLRenderInfo, ref: ForwardedRef): React.ReactElement, E['tagName']>; + Indicator(this: TLShapeUtil, props: { + shape: T; + meta: M; + isHovered: boolean; + isSelected: boolean; + }): React.ReactElement | null; + getBounds(this: TLShapeUtil, shape: T): TLBounds; + refMap: Map>; + boundsCache: WeakMap; + isAspectRatioLocked: boolean; + canEdit: boolean; + canClone: boolean; + canBind: boolean; + isStateful: boolean; + showBounds: boolean; + getRotatedBounds(this: TLShapeUtil, shape: T): TLBounds; + hitTest(this: TLShapeUtil, shape: T, point: number[]): boolean; + hitTestBounds(this: TLShapeUtil, shape: T, bounds: TLBounds): boolean; + shouldRender(this: TLShapeUtil, prev: T, next: T): boolean; + getCenter(this: TLShapeUtil, shape: T): number[]; + getRef(this: TLShapeUtil, shape: T): React.RefObject; + getBindingPoint(this: TLShapeUtil, shape: T, fromShape: K, point: number[], origin: number[], direction: number[], padding: number, bindAnywhere: boolean): { + point: number[]; + distance: number; + } | undefined; + create: (this: TLShapeUtil, props: { + id: string; + } & Partial) => T; + mutate: (this: TLShapeUtil, shape: T, props: Partial) => Partial; + transform: (this: TLShapeUtil, shape: T, bounds: TLBounds, info: TLTransformInfo) => Partial | void; + transformSingle: (this: TLShapeUtil, shape: T, bounds: TLBounds, info: TLTransformInfo) => Partial | void; + updateChildren: (this: TLShapeUtil, shape: T, children: K[]) => Partial[] | void; + onChildrenChange: (this: TLShapeUtil, shape: T, children: TLShape[]) => Partial | void; + onBindingChange: (this: TLShapeUtil, shape: T, binding: TLBinding, target: TLShape, targetBounds: TLBounds, center: number[]) => Partial | void; + onHandleChange: (this: TLShapeUtil, shape: T, handle: Partial, info: Partial) => Partial | void; + onRightPointHandle: (this: TLShapeUtil, shape: T, handle: Partial, info: Partial) => Partial | void; + onDoubleClickHandle: (this: TLShapeUtil, shape: T, handle: Partial, info: Partial) => Partial | void; + onDoubleClickBoundsHandle: (this: TLShapeUtil, shape: T) => Partial | void; + onSessionComplete: (this: TLShapeUtil, shape: T) => Partial | void; + onStyleChange: (this: TLShapeUtil, shape: T) => Partial | void; + _Component: React.ForwardRefExoticComponent; +}; export interface IShapeTreeNode { - shape: T - children?: IShapeTreeNode[] - isEditing: boolean - isBinding: boolean - isHovered: boolean - isSelected: boolean - isCurrentParent: boolean - meta?: M extends any ? M : never + shape: T; + children?: IShapeTreeNode[]; + isEditing: boolean; + isBinding: boolean; + isHovered: boolean; + isSelected: boolean; + isCurrentParent: boolean; + meta?: M extends any ? M : never; } +export declare type MappedByType = { + [P in T['type']]: T extends any ? (P extends T['type'] ? T : never) : never; +}; +export declare type RequiredKeys = { + [K in keyof T]-?: Record extends Pick ? never : K; +}[keyof T]; +export {}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/packages/core/src/types.d.ts.map b/packages/core/src/types.d.ts.map new file mode 100644 index 000000000..5f05b9751 --- /dev/null +++ b/packages/core/src/types.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/core/src/utils/index.d.ts b/packages/core/src/utils/index.d.ts new file mode 100644 index 000000000..01aa9fc42 --- /dev/null +++ b/packages/core/src/utils/index.d.ts @@ -0,0 +1,5 @@ +import { Utils } from './utils'; +export { Utils } from './utils'; +export { Svg } from './svg'; +export default Utils; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/core/src/utils/index.d.ts.map b/packages/core/src/utils/index.d.ts.map new file mode 100644 index 000000000..bffadbbed --- /dev/null +++ b/packages/core/src/utils/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAE3B,eAAe,KAAK,CAAA"} \ No newline at end of file diff --git a/packages/core/src/utils/polyfills.d.ts b/packages/core/src/utils/polyfills.d.ts new file mode 100644 index 000000000..4cadf2004 --- /dev/null +++ b/packages/core/src/utils/polyfills.d.ts @@ -0,0 +1 @@ +//# sourceMappingURL=polyfills.d.ts.map \ No newline at end of file diff --git a/packages/core/src/utils/polyfills.d.ts.map b/packages/core/src/utils/polyfills.d.ts.map new file mode 100644 index 000000000..3f87e72ea --- /dev/null +++ b/packages/core/src/utils/polyfills.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"polyfills.d.ts","sourceRoot":"","sources":["polyfills.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/core/src/utils/svg.d.ts b/packages/core/src/utils/svg.d.ts new file mode 100644 index 000000000..5f4b3948f --- /dev/null +++ b/packages/core/src/utils/svg.d.ts @@ -0,0 +1,15 @@ +export declare class Svg { + static ellipse: (A: number[], r: number) => string; + static moveTo: (v: number[]) => string; + static lineTo: (v: number[]) => string; + static line: (a: number[], ...pts: number[][]) => string; + static hLineTo: (v: number[]) => string; + static vLineTo: (v: number[]) => string; + static bezierTo: (A: number[], B: number[], C: number[]) => string; + static arcTo: (C: number[], r: number, A: number[], B: number[]) => string; + static closePath: () => string; + static rectTo: (A: number[]) => string; + static getPointAtLength: (path: SVGPathElement, length: number) => number[]; +} +export default Svg; +//# sourceMappingURL=svg.d.ts.map \ No newline at end of file diff --git a/packages/core/src/utils/svg.d.ts.map b/packages/core/src/utils/svg.d.ts.map new file mode 100644 index 000000000..8fa1dfadb --- /dev/null +++ b/packages/core/src/utils/svg.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["svg.ts"],"names":[],"mappings":"AAIA,qBAAa,GAAG;IACd,MAAM,CAAC,OAAO,MAAO,MAAM,EAAE,KAAK,MAAM,KAAG,MAAM,CAIhD;IAED,MAAM,CAAC,MAAM,MAAO,MAAM,EAAE,KAAG,MAAM,CAEpC;IAED,MAAM,CAAC,MAAM,MAAO,MAAM,EAAE,KAAG,MAAM,CAEpC;IAED,MAAM,CAAC,IAAI,MAAO,MAAM,EAAE,UAAU,MAAM,EAAE,EAAE,KAAG,MAAM,CAEtD;IAED,MAAM,CAAC,OAAO,MAAO,MAAM,EAAE,KAAG,MAAM,CAErC;IAED,MAAM,CAAC,OAAO,MAAO,MAAM,EAAE,KAAG,MAAM,CAErC;IAED,MAAM,CAAC,QAAQ,MAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,KAAG,MAAM,CAEhE;IAED,MAAM,CAAC,KAAK,MAAO,MAAM,EAAE,KAAK,MAAM,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,KAAG,MAAM,CAYxE;IAED,MAAM,CAAC,SAAS,QAAO,MAAM,CAE5B;IAED,MAAM,CAAC,MAAM,MAAO,MAAM,EAAE,KAAG,MAAM,CAEpC;IAED,MAAM,CAAC,gBAAgB,SAAU,cAAc,UAAU,MAAM,KAAG,MAAM,EAAE,CAGzE;CACF;AAED,eAAe,GAAG,CAAA"} \ No newline at end of file diff --git a/packages/core/src/utils/utils.d.ts b/packages/core/src/utils/utils.d.ts new file mode 100644 index 000000000..601f8e7dc --- /dev/null +++ b/packages/core/src/utils/utils.d.ts @@ -0,0 +1,497 @@ +import type React from 'react'; +import { TLBezierCurveSegment, TLBounds, TLBoundsCorner, TLBoundsEdge } from '../types'; +import './polyfills'; +import type { TLBoundsWithCenter } from '+index'; +export declare class Utils { + static filterObject(obj: T, fn: (entry: Entry, i?: number, arr?: Entry[]) => boolean): Partial; + static deepMerge: (target: T, patch: any) => T; + /** + * Linear interpolation betwen two numbers. + * @param y1 + * @param y2 + * @param mu + */ + static lerp(y1: number, y2: number, mu: number): number; + /** + * Linear interpolation between two colors. + * + * ### Example + * + *```ts + * lerpColor("#000000", "#0099FF", .25) + *``` + */ + static lerpColor(color1: string, color2: string, factor?: number): string; + /** + * Modulate a value between two ranges. + * @param value + * @param rangeA from [low, high] + * @param rangeB to [low, high] + * @param clamp + */ + static modulate(value: number, rangeA: number[], rangeB: number[], clamp?: boolean): number; + /** + * Clamp a value into a range. + * @param n + * @param min + */ + static clamp(n: number, min: number): number; + static clamp(n: number, min: number, max: number): number; + static compress(s: string): string; + static decompress(s: string): string; + /** + * Recursively clone an object or array. + * @param obj + */ + static deepClone(obj: T): T; + /** + * Seeded random number generator, using [xorshift](https://en.wikipedia.org/wiki/Xorshift). + * The result will always be betweeen -1 and 1. + * + * Adapted from [seedrandom](https://github.com/davidbau/seedrandom). + */ + static rng(seed?: string): () => number; + static getRectangleSides(point: number[], size: number[], rotation?: number): [string, number[][]][]; + static getBoundsSides(bounds: TLBounds): [string, number[][]][]; + static shallowEqual>(objA: T, objB: T): boolean; + /** + * Get the outer of between a circle and a point. + * @param C The circle's center. + * @param r The circle's radius. + * @param P The point. + * @param side + */ + static getCircleTangentToPoint(C: number[], r: number, P: number[], side: number): number[] | null; + /** + * Get outer tangents of two circles. + * @param x0 + * @param y0 + * @param r0 + * @param x1 + * @param y1 + * @param r1 + * @returns [lx0, ly0, lx1, ly1, rx0, ry0, rx1, ry1] + */ + static getOuterTangentsOfCircles(C0: number[], r0: number, C1: number[], r1: number): number[][] | null; + /** + * Get the closest point on the perimeter of a circle to a given point. + * @param C The circle's center. + * @param r The circle's radius. + * @param P The point. + */ + static getClosestPointOnCircle(C: number[], r: number, P: number[]): number[]; + /** + * Get a circle from three points. + * @param A + * @param B + * @param C + * @returns [x, y, r] + */ + static circleFromThreePoints(A: number[], B: number[], C: number[]): number[]; + /** + * Find the approximate perimeter of an ellipse. + * @param rx + * @param ry + */ + static perimeterOfEllipse(rx: number, ry: number): number; + /** + * Get the short angle distance between two angles. + * @param a0 + * @param a1 + */ + static shortAngleDist(a0: number, a1: number): number; + /** + * Get the long angle distance between two angles. + * @param a0 + * @param a1 + */ + static longAngleDist(a0: number, a1: number): number; + /** + * Interpolate an angle between two angles. + * @param a0 + * @param a1 + * @param t + */ + static lerpAngles(a0: number, a1: number, t: number): number; + /** + * Get the short distance between two angles. + * @param a0 + * @param a1 + */ + static angleDelta(a0: number, a1: number): number; + /** + * Get the "sweep" or short distance between two points on a circle's perimeter. + * @param C + * @param A + * @param B + */ + static getSweep(C: number[], A: number[], B: number[]): number; + /** + * Rotate a point around a center. + * @param x The x-axis coordinate of the point. + * @param y The y-axis coordinate of the point. + * @param cx The x-axis coordinate of the point to rotate round. + * @param cy The y-axis coordinate of the point to rotate round. + * @param angle The distance (in radians) to rotate. + */ + static rotatePoint(A: number[], B: number[], angle: number): number[]; + /** + * Clamp radians within 0 and 2PI + * @param r + */ + static clampRadians(r: number): number; + /** + * Clamp rotation to even segments. + * @param r + * @param segments + */ + static snapAngleToSegments(r: number, segments: number): number; + /** + * Is angle c between angles a and b? + * @param a + * @param b + * @param c + */ + static isAngleBetween(a: number, b: number, c: number): boolean; + /** + * Convert degrees to radians. + * @param d + */ + static degreesToRadians(d: number): number; + /** + * Convert radians to degrees. + * @param r + */ + static radiansToDegrees(r: number): number; + /** + * Get the length of an arc between two points on a circle's perimeter. + * @param C + * @param r + * @param A + * @param B + */ + static getArcLength(C: number[], r: number, A: number[], B: number[]): number; + /** + * Get a dash offset for an arc, based on its length. + * @param C + * @param r + * @param A + * @param B + * @param step + */ + static getArcDashOffset(C: number[], r: number, A: number[], B: number[], step: number): number; + /** + * Get a dash offset for an ellipse, based on its length. + * @param A + * @param step + */ + static getEllipseDashOffset(A: number[], step: number): number; + /** + * Get bezier curve segments that pass through an array of points. + * @param points + * @param tension + */ + static getTLBezierCurveSegments(points: number[][], tension?: number): TLBezierCurveSegment[]; + /** + * Find a point along a curve segment, via pomax. + * @param t + * @param points [cpx1, cpy1, cpx2, cpy2, px, py][] + */ + static computePointOnCurve(t: number, points: number[][]): number[]; + /** + * Evaluate a 2d cubic bezier at a point t on the x axis. + * @param tx + * @param x1 + * @param y1 + * @param x2 + * @param y2 + */ + static cubicBezier(tx: number, x1: number, y1: number, x2: number, y2: number): number; + /** + * Get a bezier curve data for a spline that fits an array of points. + * @param points An array of points formatted as [x, y] + * @param k Tension + */ + static getSpline(pts: number[][], k?: number): { + cp1x: number; + cp1y: number; + cp2x: number; + cp2y: number; + px: number; + py: number; + }[]; + /** + * Get a bezier curve data for a spline that fits an array of points. + * @param pts + * @param tension + * @param isClosed + * @param numOfSegments + */ + static getCurvePoints(pts: number[][], tension?: number, isClosed?: boolean, numOfSegments?: number): number[][]; + /** + * Simplify a line (using Ramer-Douglas-Peucker algorithm). + * @param points An array of points as [x, y, ...][] + * @param tolerance The minimum line distance (also called epsilon). + * @returns Simplified array as [x, y, ...][] + */ + static simplify(points: number[][], tolerance?: number): number[][]; + /** + * Get whether a point is inside of a circle. + * @param A + * @param b + * @returns + */ + static pointInCircle(A: number[], C: number[], r: number): boolean; + /** + * Get whether a point is inside of an ellipse. + * @param point + * @param center + * @param rx + * @param ry + * @param rotation + * @returns + */ + static pointInEllipse(A: number[], C: number[], rx: number, ry: number, rotation?: number): boolean; + /** + * Get whether a point is inside of a rectangle. + * @param point + * @param size + */ + static pointInRect(point: number[], size: number[]): boolean; + static pointInPolygon(p: number[], points: number[][]): boolean; + /** + * Expand a bounding box by a delta. + * + * ### Example + * + *```ts + * expandBounds(myBounds, [100, 100]) + *``` + */ + static expandBounds(bounds: TLBounds, delta: number): TLBounds; + /** + * Get whether a point is inside of a bounds. + * @param A + * @param b + * @returns + */ + static pointInBounds(A: number[], b: TLBounds): boolean; + /** + * Get whether two bounds collide. + * @param a Bounds + * @param b Bounds + * @returns + */ + static boundsCollide(a: TLBounds, b: TLBounds): boolean; + /** + * Get whether the bounds of A contain the bounds of B. A perfect match will return true. + * @param a Bounds + * @param b Bounds + * @returns + */ + static boundsContain(a: TLBounds, b: TLBounds): boolean; + /** + * Get whether the bounds of A are contained by the bounds of B. + * @param a Bounds + * @param b Bounds + * @returns + */ + static boundsContained(a: TLBounds, b: TLBounds): boolean; + /** + * Get whether two bounds are identical. + * @param a Bounds + * @param b Bounds + * @returns + */ + static boundsAreEqual(a: TLBounds, b: TLBounds): boolean; + /** + * Find a bounding box from an array of points. + * @param points + * @param rotation (optional) The bounding box's rotation. + */ + static getBoundsFromPoints(points: number[][], rotation?: number): TLBounds; + /** + * Center a bounding box around a given point. + * @param bounds + * @param center + */ + static centerBounds(bounds: TLBounds, point: number[]): TLBounds; + /** + * Move a bounding box without recalculating it. + * @param bounds + * @param delta + * @returns + */ + static translateBounds(bounds: TLBounds, delta: number[]): TLBounds; + /** + * Rotate a bounding box. + * @param bounds + * @param center + * @param rotation + */ + static rotateBounds(bounds: TLBounds, center: number[], rotation: number): TLBounds; + /** + * Get the rotated bounds of an ellipse. + * @param x + * @param y + * @param rx + * @param ry + * @param rotation + */ + static getRotatedEllipseBounds(x: number, y: number, rx: number, ry: number, rotation?: number): TLBounds; + /** + * Get a bounding box that includes two bounding boxes. + * @param a Bounding box + * @param b Bounding box + * @returns + */ + static getExpandedBounds(a: TLBounds, b: TLBounds): TLBounds; + /** + * Get the common bounds of a group of bounds. + * @returns + */ + static getCommonBounds(bounds: TLBounds[]): TLBounds; + static getRotatedCorners(b: TLBounds, rotation?: number): number[][]; + static getTransformedBoundingBox(bounds: TLBounds, handle: TLBoundsCorner | TLBoundsEdge | 'center', delta: number[], rotation?: number, isAspectRatioLocked?: boolean): TLBounds & { + scaleX: number; + scaleY: number; + }; + static getTransformAnchor(type: TLBoundsEdge | TLBoundsCorner, isFlippedX: boolean, isFlippedY: boolean): TLBoundsCorner | TLBoundsEdge; + /** + * Get the relative bounds (usually a child) within a transformed bounding box. + * @param bounds + * @param initialBounds + * @param initialShapeBounds + * @param isFlippedX + * @param isFlippedY + */ + static getRelativeTransformedBoundingBox(bounds: TLBounds, initialBounds: TLBounds, initialShapeBounds: TLBounds, isFlippedX: boolean, isFlippedY: boolean): TLBounds; + /** + * Get the size of a rotated box. + * @param size : ; + * @param rotation + */ + static getRotatedSize(size: number[], rotation: number): number[]; + /** + * Get the center of a bounding box. + * @param bounds + */ + static getBoundsCenter(bounds: TLBounds): number[]; + /** + * Get a bounding box with a midX and midY. + * @param bounds + */ + static getBoundsWithCenter(bounds: TLBounds): TLBounds & { + midX: number; + midY: number; + }; + static getSnapPoints: (bounds: any, others: TLBoundsWithCenter[], snapDistance: number) => { + offset: number[]; + snapLines: number[][][]; + }; + /** + * + * + * ### Example + * + *```ts + * example + *``` + */ + static removeDuplicatePoints(points: number[][]): number[][]; + /** + // points = + + + /** + * Get a value from a cache (a WeakMap), filling the value if it is not present. + * + * ### Example + * + *```ts + * getFromCache(boundsCache, shape, (cache) => cache.set(shape, "value")) + *``` + */ + static getFromCache(cache: WeakMap, item: I, getNext: () => V): V; + /** + * Get a unique string id. + */ + static uniqueId(a?: string): string; + /** + * Shuffle the contents of an array. + * @param arr + * @param offset + */ + static rotateArray(arr: T[], offset: number): T[]; + /** + * Deep compare two arrays. + * @param a + * @param b + */ + static deepCompareArrays(a: T[], b: T[]): boolean; + /** + * Deep compare any values. + * @param a + * @param b + */ + static deepCompare(a: T, b: T): boolean; + /** + * Find whether two arrays intersect. + * @param a + * @param b + * @param fn An optional function to apply to the items of a; will check if b includes the result. + */ + static arrsIntersect(a: T[], b: K[], fn?: (item: K) => T): boolean; + static arrsIntersect(a: T[], b: T[]): boolean; + /** + * Get the unique values from an array of strings or numbers. + * @param items + */ + static uniqueArray(...items: T[]): T[]; + /** + * Convert a set to an array. + * @param set + */ + static setToArray(set: Set): T[]; + /** + * Debounce a function. + */ + static debounce void>(fn: T, ms?: number): (...args: Parameters) => void; + static TRIM_NUMBERS: RegExp; + /** + * Turn an array of points into a path of quadradic curves. + * @param stroke ; + */ + static getSvgPathFromStroke(points: number[][], closed?: boolean): string; + /** + * Get balanced dash-strokearray and dash-strokeoffset properties for a path of a given length. + * @param length The length of the path. + * @param strokeWidth The shape's stroke-width property. + * @param style The stroke's style: "dashed" or "dotted" (default "dashed"). + * @param snap An interval for dashes (e.g. 4 will produce arrays with 4, 8, 16, etc dashes). + */ + static getPerfectDashProps(length: number, strokeWidth: number, style: 'dashed' | 'dotted' | string, snap?: number, outset?: boolean): { + strokeDasharray: string; + strokeDashoffset: string; + }; + static isMobileSize(): boolean; + static isMobileSafari(): boolean; + static throttle any>(func: T, limit: number): (...args: Parameters) => ReturnType; + /** + * Find whether the current display is a touch display. + */ + /** + * Find whether the current device is a Mac / iOS / iPadOS. + */ + static isDarwin(): boolean; + /** + * Get whether an event is command (mac) or control (pc). + * @param e + */ + static metaKey(e: KeyboardEvent | React.KeyboardEvent): boolean; +} +export default Utils; +declare type Entry = { + [K in keyof T]: [K, T[K]]; +}[keyof T]; +//# sourceMappingURL=utils.d.ts.map \ No newline at end of file diff --git a/packages/core/src/utils/utils.d.ts.map b/packages/core/src/utils/utils.d.ts.map new file mode 100644 index 000000000..f3495b844 --- /dev/null +++ b/packages/core/src/utils/utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EACL,oBAAoB,EACpB,QAAQ,EACR,cAAc,EAGd,YAAY,EACb,MAAM,UAAU,CAAA;AAEjB,OAAO,aAAa,CAAA;AACpB,OAAO,KAAK,EAAS,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAEvD,qBAAa,KAAK;IAKhB,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,MAAM,EAClC,GAAG,EAAE,CAAC,EACN,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO;IAKhE,MAAM,CAAC,SAAS,kCAoCf;IAED;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAKvD;;;;;;;;OAQG;IAEH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,MAAM;IAuBtE;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,UAAQ,GAAG,MAAM;IAYzF;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAC5C,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAMzD,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAKlC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAIpC;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAwB9C;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,IAAI,SAAK,GAAG,MAAM,MAAM;IAyBnC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,SAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE;IAe/F,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE;IAI/D,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO;IAwBjF;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAC5B,CAAC,EAAE,MAAM,EAAE,EACX,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EAAE,EACX,IAAI,EAAE,MAAM,GACX,MAAM,EAAE,GAAG,IAAI;IAmBlB;;;;;;;;;OASG;IACH,MAAM,CAAC,yBAAyB,CAC9B,EAAE,EAAE,MAAM,EAAE,EACZ,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EAAE,EACZ,EAAE,EAAE,MAAM,GACT,MAAM,EAAE,EAAE,GAAG,IAAI;IAqBpB;;;;;OAKG;IACH,MAAM,CAAC,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAK7E;;;;;;OAMG;IACH,MAAM,CAAC,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAwB7E;;;;OAIG;IACH,MAAM,CAAC,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAMzD;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAMrD;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAIpD;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAI5D;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAIjD;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAI9D;;;;;;;OAOG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAarE;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAItC;;;;OAIG;IACH,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK/D;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IAQ/D;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI1C;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI1C;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAK7E;;;;;;;OAOG;IACH,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAO/F;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAO9D;;;;OAIG;IACH,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,SAAM,GAAG,oBAAoB,EAAE;IAiE1F;;;;OAIG;IACH,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE;IAoDnE;;;;;;;OAOG;IACH,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IA6CtF;;;;OAIG;IACH,MAAM,CAAC,SAAS,CACd,GAAG,EAAE,MAAM,EAAE,EAAE,EACf,CAAC,SAAM,GACN;QACD,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,EAAE,EAAE,MAAM,CAAA;QACV,EAAE,EAAE,MAAM,CAAA;KACX,EAAE;IAgCH;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CACnB,GAAG,EAAE,MAAM,EAAE,EAAE,EACf,OAAO,SAAM,EACb,QAAQ,UAAQ,EAChB,aAAa,SAAI,GAChB,MAAM,EAAE,EAAE;IAiEb;;;;;OAKG;IAEH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,SAAI,GAAG,MAAM,EAAE,EAAE;IAgC9D;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IAIlE;;;;;;;;OAQG;IACH,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,OAAO;IAW9F;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO;IAS5D,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO;IAmB/D;;;;;;;;OAQG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ;IAW9D;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIvD;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIvD;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIvD;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIzD;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIxD;;;;OAIG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,SAAI,GAAG,QAAQ;IAoCtE;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ;IAOhE;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ;IAWnE;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAcnF;;;;;;;OAOG;IACH,MAAM,CAAC,uBAAuB,CAC5B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,QAAQ,SAAI,GACX,QAAQ;IAgBX;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,QAAQ;IAW5D;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ;IAYpD,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,SAAI,GAAG,MAAM,EAAE,EAAE;IAW/D,MAAM,CAAC,yBAAyB,CAC9B,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,cAAc,GAAG,YAAY,GAAG,QAAQ,EAChD,KAAK,EAAE,MAAM,EAAE,EACf,QAAQ,SAAI,EACZ,mBAAmB,UAAQ,GAC1B,QAAQ,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IA8NhD,MAAM,CAAC,kBAAkB,CACvB,IAAI,EAAE,YAAY,GAAG,cAAc,EACnC,UAAU,EAAE,OAAO,EACnB,UAAU,EAAE,OAAO,GAClB,cAAc,GAAG,YAAY;IA0DhC;;;;;;;OAOG;IACH,MAAM,CAAC,iCAAiC,CACtC,MAAM,EAAE,QAAQ,EAChB,aAAa,EAAE,QAAQ,EACvB,kBAAkB,EAAE,QAAQ,EAC5B,UAAU,EAAE,OAAO,EACnB,UAAU,EAAE,OAAO,GAClB,QAAQ;IA6BX;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAYjE;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAE;IAIlD;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IASvF,MAAM,CAAC,aAAa,wBAEV,kBAAkB,EAAE,gBACd,MAAM;;;MA8KrB;IAMD;;;;;;;;OAQG;IACH,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;IAS/C;;;;;;;;;;;;KAYC;IAED,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;IAe5F;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAK,GAAG,MAAM;IAO/B;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE;IAIpD;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO;IAKpD;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO;IAI1C;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO;IACxE,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO;IAKhD;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IAIjE;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;IAItC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,SAAI,aAGrC,WAAW,CAAC,CAAC;IAOzC,MAAM,CAAC,YAAY,SAAqD;IAExE;;;OAGG;IACH,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAAO,GAAG,MAAM;IA6BtE;;;;;;OAMG;IACH,MAAM,CAAC,mBAAmB,CACxB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,EACnC,IAAI,SAAI,EACR,MAAM,UAAO,GACZ;QACD,eAAe,EAAE,MAAM,CAAA;QACvB,gBAAgB,EAAE,MAAM,CAAA;KACzB;IAqCD,MAAM,CAAC,YAAY;IAKnB,MAAM,CAAC,cAAc;IASrB,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,EAC7C,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC;IAmB5C;;OAEG;IAOH;;OAEG;IACH,MAAM,CAAC,QAAQ,IAAI,OAAO;IAI1B;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC,aAAa,GAAG,OAAO;CAGhE;AAED,eAAe,KAAK,CAAA;AAIpB,aAAK,KAAK,CAAC,CAAC,IAAI;KACb,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1B,CAAC,MAAM,CAAC,CAAC,CAAA"} \ No newline at end of file diff --git a/packages/tldraw/src/state/command/duplicate/duplicate.command.spec.ts b/packages/tldraw/src/state/command/duplicate/duplicate.command.spec.ts index 6c0327e8f..62e430330 100644 --- a/packages/tldraw/src/state/command/duplicate/duplicate.command.spec.ts +++ b/packages/tldraw/src/state/command/duplicate/duplicate.command.spec.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import Utils from '~../../core/src/utils' +import { Utils } from '@tldraw/core' import { TLDrawState } from '~state' import { TLDR } from '~state/tldr' import { mockDocument } from '~test' diff --git a/packages/tldraw/src/state/session/sessions/arrow/arrow.session.ts b/packages/tldraw/src/state/session/sessions/arrow/arrow.session.ts index 58052d412..66193b42b 100644 --- a/packages/tldraw/src/state/session/sessions/arrow/arrow.session.ts +++ b/packages/tldraw/src/state/session/sessions/arrow/arrow.session.ts @@ -9,10 +9,10 @@ import { SessionType, } from '~types' import { Vec } from '@tldraw/vec' -import { Utils } from '@tldraw/core' +import { Utils, TLBounds } from '@tldraw/core' import { TLDR } from '~state/tldr' -export class ArrowSession implements Session { +export class ArrowSession extends Session { static type = SessionType.Arrow status = TLDrawStatus.TranslatingHandle newStartBindingId = Utils.uniqueId() @@ -29,7 +29,15 @@ export class ArrowSession implements Session { startBindingShapeId?: string isCreate: boolean - constructor(data: Data, point: number[], handleId: 'start' | 'end', isCreate = false) { + constructor( + data: Data, + viewport: TLBounds, + point: number[], + handleId: 'start' | 'end', + isCreate = false + ) { + super(viewport) + this.isCreate = isCreate const { currentPageId } = data.appState @@ -336,7 +344,7 @@ export class ArrowSession implements Session { } } - complete(data: Data) { + complete = (data: Data) => { const { initialShape, initialBinding, newStartBindingId, startBindingShapeId, handleId } = this const page = TLDR.getPage(data, data.appState.currentPageId) diff --git a/packages/tldraw/src/state/session/sessions/brush/brush.session.ts b/packages/tldraw/src/state/session/sessions/brush/brush.session.ts index f2bd4c3e5..58a67c12c 100644 --- a/packages/tldraw/src/state/session/sessions/brush/brush.session.ts +++ b/packages/tldraw/src/state/session/sessions/brush/brush.session.ts @@ -1,15 +1,16 @@ -import { Utils } from '@tldraw/core' +import { Utils, TLBounds } from '@tldraw/core' import { Vec } from '@tldraw/vec' import { Data, Session, SessionType, TLDrawPatch, TLDrawStatus } from '~types' import { TLDR } from '~state/tldr' -export class BrushSession implements Session { +export class BrushSession extends Session { static type = SessionType.Brush status = TLDrawStatus.Brushing origin: number[] snapshot: BrushSnapshot - constructor(data: Data, point: number[]) { + constructor(data: Data, viewport: TLBounds, point: number[]) { + super(viewport) this.origin = Vec.round(point) this.snapshot = getBrushSnapshot(data) } @@ -78,7 +79,7 @@ export class BrushSession implements Session { } } - cancel(data: Data) { + cancel = (data: Data) => { const { currentPageId } = data.appState return { document: { @@ -92,7 +93,7 @@ export class BrushSession implements Session { } } - complete(data: Data) { + complete = (data: Data) => { const { currentPageId } = data.appState const pageState = TLDR.getPageState(data, currentPageId) diff --git a/packages/tldraw/src/state/session/sessions/draw/draw.session.ts b/packages/tldraw/src/state/session/sessions/draw/draw.session.ts index fe5a001bf..973811037 100644 --- a/packages/tldraw/src/state/session/sessions/draw/draw.session.ts +++ b/packages/tldraw/src/state/session/sessions/draw/draw.session.ts @@ -1,9 +1,9 @@ -import { Utils } from '@tldraw/core' +import { Utils, TLBounds } from '@tldraw/core' import { Vec } from '@tldraw/vec' import { Data, Session, SessionType, TLDrawStatus } from '~types' import { TLDR } from '~state/tldr' -export class DrawSession implements Session { +export class DrawSession extends Session { static type = SessionType.Draw status = TLDrawStatus.Creating topLeft: number[] @@ -16,7 +16,8 @@ export class DrawSession implements Session { isLocked?: boolean lockedDirection?: 'horizontal' | 'vertical' - constructor(data: Data, point: number[], id: string) { + constructor(data: Data, viewport: TLBounds, point: number[], id: string) { + super(viewport) this.origin = point this.previous = point this.last = point diff --git a/packages/tldraw/src/state/session/sessions/grid/grid.session.ts b/packages/tldraw/src/state/session/sessions/grid/grid.session.ts index 03871ac4a..bf6918081 100644 --- a/packages/tldraw/src/state/session/sessions/grid/grid.session.ts +++ b/packages/tldraw/src/state/session/sessions/grid/grid.session.ts @@ -16,7 +16,7 @@ import { import { TLDR } from '~state/tldr' import type { Patch } from 'rko' -export class GridSession implements Session { +export class GridSession extends Session { type = SessionType.Grid status = TLDrawStatus.Translating origin: number[] @@ -29,7 +29,8 @@ export class GridSession implements Session { rows = 1 isCopying = false - constructor(data: Data, id: string, pageId: string, point: number[]) { + constructor(data: Data, viewport: TLBounds, id: string, pageId: string, point: number[]) { + super(viewport) this.origin = point this.shape = TLDR.getShape(data, id, pageId) this.grid['0_0'] = this.shape.id @@ -189,7 +190,7 @@ export class GridSession implements Session { } } - complete(data: Data) { + complete = (data: Data) => { const pageId = data.appState.currentPageId const beforeShapes: Patch> = {} diff --git a/packages/tldraw/src/state/session/sessions/handle/handle.session.ts b/packages/tldraw/src/state/session/sessions/handle/handle.session.ts index b2f6f239a..8dc62f3fd 100644 --- a/packages/tldraw/src/state/session/sessions/handle/handle.session.ts +++ b/packages/tldraw/src/state/session/sessions/handle/handle.session.ts @@ -1,10 +1,11 @@ import { Vec } from '@tldraw/vec' +import type { TLBounds } from '@tldraw/core' import { SessionType, ShapesWithProp, TLDrawStatus } from '~types' -import type { Session } from '~types' +import { Session } from '~types' import type { Data } from '~types' import { TLDR } from '~state/tldr' -export class HandleSession implements Session { +export class HandleSession extends Session { static type = SessionType.Handle status = TLDrawStatus.TranslatingHandle commandId: string @@ -15,7 +16,14 @@ export class HandleSession implements Session { initialShape: ShapesWithProp<'handles'> handleId: string - constructor(data: Data, point: number[], handleId: string, commandId = 'move_handle') { + constructor( + data: Data, + viewport: TLBounds, + point: number[], + handleId: string, + commandId = 'move_handle' + ) { + super(viewport) const { currentPageId } = data.appState const shapeId = TLDR.getSelectedIds(data, currentPageId)[0] this.topLeft = point @@ -86,7 +94,7 @@ export class HandleSession implements Session { } } - complete(data: Data) { + complete = (data: Data) => { const { initialShape } = this const pageId = data.appState.currentPageId diff --git a/packages/tldraw/src/state/session/sessions/rotate/rotate.session.ts b/packages/tldraw/src/state/session/sessions/rotate/rotate.session.ts index d25becee1..973e3e3a5 100644 --- a/packages/tldraw/src/state/session/sessions/rotate/rotate.session.ts +++ b/packages/tldraw/src/state/session/sessions/rotate/rotate.session.ts @@ -1,4 +1,4 @@ -import { Utils } from '@tldraw/core' +import { Utils, TLBounds } from '@tldraw/core' import { Vec } from '@tldraw/vec' import { Session, SessionType, TLDrawShape, TLDrawStatus } from '~types' import type { Data } from '~types' @@ -6,7 +6,7 @@ import { TLDR } from '~state/tldr' const centerCache = new WeakMap() -export class RotateSession implements Session { +export class RotateSession extends Session { static type = SessionType.Rotate status = TLDrawStatus.Transforming delta = [0, 0] @@ -15,7 +15,8 @@ export class RotateSession implements Session { initialAngle: number changes: Record> = {} - constructor(data: Data, point: number[]) { + constructor(data: Data, viewport: TLBounds, point: number[]) { + super(viewport) this.origin = point this.snapshot = getRotateSnapshot(data) this.initialAngle = Vec.angle(this.snapshot.commonBoundsCenter, this.origin) @@ -97,7 +98,7 @@ export class RotateSession implements Session { } } - complete(data: Data) { + complete = (data: Data) => { const { initialShapes } = this.snapshot const pageId = data.appState.currentPageId diff --git a/packages/tldraw/src/state/session/sessions/transform-single/transform-single.session.ts b/packages/tldraw/src/state/session/sessions/transform-single/transform-single.session.ts index 47ddeaaff..a465b95ac 100644 --- a/packages/tldraw/src/state/session/sessions/transform-single/transform-single.session.ts +++ b/packages/tldraw/src/state/session/sessions/transform-single/transform-single.session.ts @@ -1,10 +1,17 @@ -import { TLBoundsCorner, TLSnapLine, TLBoundsEdge, Utils, TLBoundsWithCenter } from '@tldraw/core' +import { + TLBounds, + TLBoundsCorner, + TLSnapLine, + TLBoundsEdge, + Utils, + TLBoundsWithCenter, +} from '@tldraw/core' import { Vec } from '@tldraw/vec' import { SessionType, TLDrawShape, TLDrawStatus } from '~types' -import type { Session } from '~types' +import { Session } from '~types' import type { Data } from '~types' import { TLDR } from '~state/tldr' -import { SLOW_SPEED, SNAP_DISTANCE, VERY_SLOW_SPEED } from '~state/constants' +import { SLOW_SPEED, SNAP_DISTANCE } from '~state/constants' type SnapInfo = | { @@ -15,7 +22,7 @@ type SnapInfo = bounds: TLBoundsWithCenter[] } -export class TransformSingleSession implements Session { +export class TransformSingleSession extends Session { type = SessionType.TransformSingle status = TLDrawStatus.Transforming transformType: TLBoundsEdge | TLBoundsCorner @@ -30,10 +37,12 @@ export class TransformSingleSession implements Session { constructor( data: Data, + viewport: TLBounds, point: number[], transformType: TLBoundsEdge | TLBoundsCorner = TLBoundsCorner.BottomRight, isCreate = false ) { + super(viewport) this.origin = point this.transformType = transformType this.snapshot = getTransformSingleSnapshot(data, transformType) @@ -88,7 +97,10 @@ export class TransformSingleSession implements Session { ) { const snapResult = Utils.getSnapPoints( Utils.getBoundsWithCenter(newBounds), - this.snapInfo.bounds, + this.snapInfo.bounds.filter( + (bounds) => + Utils.boundsContain(this.viewport, bounds) || Utils.boundsCollide(this.viewport, bounds) + ), SNAP_DISTANCE / zoom ) @@ -161,7 +173,7 @@ export class TransformSingleSession implements Session { } } - complete(data: Data) { + complete = (data: Data) => { if (!this.snapshot.hasUnlockedShape) return data const { initialShape } = this.snapshot diff --git a/packages/tldraw/src/state/session/sessions/transform/transform.session.ts b/packages/tldraw/src/state/session/sessions/transform/transform.session.ts index 1f9838d7c..2387e516c 100644 --- a/packages/tldraw/src/state/session/sessions/transform/transform.session.ts +++ b/packages/tldraw/src/state/session/sessions/transform/transform.session.ts @@ -1,11 +1,11 @@ -import { TLBoundsCorner, TLBoundsEdge, Utils } from '@tldraw/core' +import { TLBounds, TLBoundsCorner, TLBoundsEdge, Utils } from '@tldraw/core' import { Vec } from '@tldraw/vec' import type { TLSnapLine, TLBoundsWithCenter } from '@tldraw/core' import { Session, SessionType, TLDrawShape, TLDrawStatus } from '~types' import type { Data } from '~types' import { TLDR } from '~state/tldr' import type { Command } from 'rko' -import { SLOW_SPEED, SNAP_DISTANCE, VERY_SLOW_SPEED } from '~state/constants' +import { SLOW_SPEED, SNAP_DISTANCE } from '~state/constants' type SnapInfo = | { @@ -16,7 +16,7 @@ type SnapInfo = bounds: TLBoundsWithCenter[] } -export class TransformSession implements Session { +export class TransformSession extends Session { static type = SessionType.Transform status = TLDrawStatus.Transforming scaleX = 1 @@ -32,10 +32,12 @@ export class TransformSession implements Session { constructor( data: Data, + viewport: TLBounds, point: number[], transformType: TLBoundsEdge | TLBoundsCorner = TLBoundsCorner.BottomRight, isCreate = false ) { + super(viewport) this.origin = point this.transformType = transformType this.snapshot = getTransformSnapshot(data, transformType) @@ -92,7 +94,10 @@ export class TransformSession implements Session { ) { const snapResult = Utils.getSnapPoints( Utils.getBoundsWithCenter(newBounds), - this.snapInfo.bounds, + this.snapInfo.bounds.filter( + (bounds) => + Utils.boundsContain(this.viewport, bounds) || Utils.boundsCollide(this.viewport, bounds) + ), SNAP_DISTANCE / zoom ) @@ -180,7 +185,7 @@ export class TransformSession implements Session { } } - complete(data: Data): Data | Command | undefined { + complete = (data: Data): Data | Command | undefined => { const { hasUnlockedShapes, shapeBounds } = this.snapshot undefined if (!hasUnlockedShapes) return diff --git a/packages/tldraw/src/state/session/sessions/translate/translate.session.ts b/packages/tldraw/src/state/session/sessions/translate/translate.session.ts index a5a4702dd..21694d586 100644 --- a/packages/tldraw/src/state/session/sessions/translate/translate.session.ts +++ b/packages/tldraw/src/state/session/sessions/translate/translate.session.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { TLPageState, Utils, TLBoundsWithCenter, TLSnapLine } from '@tldraw/core' +import { TLPageState, Utils, TLBoundsWithCenter, TLSnapLine, TLBounds } from '@tldraw/core' import { Vec } from '@tldraw/vec' import { TLDrawShape, @@ -12,9 +12,8 @@ import { GroupShape, SessionType, ArrowBinding, - TLDrawShapeType, } from '~types' -import { SLOW_SPEED, SNAP_DISTANCE, VERY_SLOW_SPEED } from '~state/constants' +import { SLOW_SPEED, SNAP_DISTANCE } from '~state/constants' import { TLDR } from '~state/tldr' import type { Patch } from 'rko' @@ -38,7 +37,7 @@ type SnapInfo = bounds: TLBoundsWithCenter[] } -export class TranslateSession implements Session { +export class TranslateSession extends Session { type = SessionType.Translate status = TLDrawStatus.Translating delta = [0, 0] @@ -60,10 +59,12 @@ export class TranslateSession implements Session { constructor( data: Data, + viewport: TLBounds, point: number[], isCreate = false, isLinked: 'left' | 'right' | 'center' | false = false ) { + super(viewport) this.origin = point this.snapshot = getTranslateSnapshot(data, isLinked) this.isCreate = isCreate @@ -92,7 +93,14 @@ export class TranslateSession implements Session { } } - update = (data: Data, point: number[], shiftKey = false, altKey = false, metaKey = false) => { + update = ( + data: Data, + point: number[], + shiftKey = false, + altKey = false, + metaKey = false, + viewPort = {} as TLBounds + ) => { const { selectedIds, initialParentChildren, initialShapes, bindingsToDelete } = this.snapshot const { currentPageId } = data.appState @@ -158,7 +166,10 @@ export class TranslateSession implements Session { const snapResult = Utils.getSnapPoints( bounds, - this.isCloning ? this.snapInfo.bounds : this.snapInfo.others, + (this.isCloning ? this.snapInfo.bounds : this.snapInfo.others).filter( + (bounds) => + Utils.boundsContain(this.viewport, bounds) || Utils.boundsCollide(this.viewport, bounds) + ), SNAP_DISTANCE / zoom ) @@ -370,7 +381,7 @@ export class TranslateSession implements Session { } } - complete(data: Data): TLDrawCommand { + complete = (data: Data): TLDrawCommand => { const pageId = data.appState.currentPageId const { initialShapes, initialParentChildren, bindingsToDelete } = this.snapshot diff --git a/packages/tldraw/src/state/tlstate.ts b/packages/tldraw/src/state/tlstate.ts index 309ffeb33..6913514e8 100644 --- a/packages/tldraw/src/state/tlstate.ts +++ b/packages/tldraw/src/state/tlstate.ts @@ -36,6 +36,7 @@ import { TLDrawUser, SessionType, ExceptFirst, + ExceptFirstTwo, } from '~types' import { TLDR } from './tldr' import { defaultStyle, tldrawShapeUtils } from '~shape' @@ -361,6 +362,10 @@ export class TLDrawState extends StateManager { */ updateBounds = (bounds: TLBounds) => { this.bounds = { ...bounds } + if (this.session) { + this.session.updateViewport(this.viewport) + this.session.update(this.state, this.pointerPoint, false, false, false) + } } /** @@ -1329,7 +1334,7 @@ export class TLDrawState extends StateManager { * @param reason Why did the camera change? */ setCamera = (point: number[], zoom: number, reason: string): this => { - return this.patchState( + this.patchState( { document: { pageStates: { @@ -1339,6 +1344,12 @@ export class TLDrawState extends StateManager { }, reason ) + + if (this.session) { + this.session.updateViewport(this.viewport) + } + + return this } /** @@ -1640,7 +1651,7 @@ export class TLDrawState extends StateManager { * @param session The new session * @param args arguments of the session's start method. */ - startSession = (type: T, ...args: ExceptFirst>): this => { + startSession = (type: T, ...args: ExceptFirstTwo>): this => { if (this.session) { throw Error(`Already in a session! (${this.session.constructor.name})`) } @@ -1648,7 +1659,7 @@ export class TLDrawState extends StateManager { const Session = getSession(type) // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - this.session = new Session(this.state, ...args) + this.session = new Session(this.state, this.viewport, ...args) const result = this.session.start(this.state) diff --git a/packages/tldraw/src/state/tool/BaseTool/BaseTool.ts b/packages/tldraw/src/state/tool/BaseTool/BaseTool.ts index 0a9763198..735d5bab4 100644 --- a/packages/tldraw/src/state/tool/BaseTool/BaseTool.ts +++ b/packages/tldraw/src/state/tool/BaseTool/BaseTool.ts @@ -1,5 +1,5 @@ import Vec from '@tldraw/vec' -import type { +import { TLBoundsEventHandler, TLBoundsHandleEventHandler, TLCanvasEventHandler, @@ -9,8 +9,8 @@ import type { TLShapeBlurHandler, TLShapeCloneHandler, TLWheelEventHandler, -} from '~../../core/src/types' -import Utils from '~../../core/src/utils' + Utils, +} from '@tldraw/core' import type { TLDrawState } from '~state' import type { TLDrawShapeType } from '~types' diff --git a/packages/tldraw/src/state/tool/DrawTool/DrawTool.ts b/packages/tldraw/src/state/tool/DrawTool/DrawTool.ts index fefab76a6..e6a2c95fb 100644 --- a/packages/tldraw/src/state/tool/DrawTool/DrawTool.ts +++ b/packages/tldraw/src/state/tool/DrawTool/DrawTool.ts @@ -1,6 +1,5 @@ import Vec from '@tldraw/vec' -import type { TLPointerEventHandler } from '~../../core/src/types' -import Utils from '~../../core/src/utils' +import { Utils, TLPointerEventHandler } from '@tldraw/core' import { Draw } from '~shape/shapes' import { SessionType, TLDrawShapeType } from '~types' import { BaseTool, Status } from '../BaseTool' diff --git a/packages/tldraw/src/types.ts b/packages/tldraw/src/types.ts index c2fa367c3..61506ec82 100644 --- a/packages/tldraw/src/types.ts +++ b/packages/tldraw/src/types.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/ban-types */ -import type { TLBinding, TLShapeProps, TLSnapLine, TLBoundsWithCenter } from '@tldraw/core' +import type { TLBinding, TLShapeProps, TLBounds, TLSnapLine } from '@tldraw/core' import type { TLShape, TLShapeUtil, TLHandle } from '@tldraw/core' import type { TLPage, TLUser, TLPageState } from '@tldraw/core' import type { StoreApi } from 'zustand' @@ -116,6 +116,16 @@ export abstract class Session { ) => TLDrawPatch | undefined abstract complete: (data: Readonly) => TLDrawPatch | TLDrawCommand | undefined abstract cancel: (data: Readonly) => TLDrawPatch | undefined + + viewport: TLBounds + + constructor(viewport: TLBounds) { + this.viewport = viewport + } + + updateViewport = (viewport: TLBounds) => { + this.viewport = viewport + } } export enum TLDrawStatus { @@ -138,6 +148,8 @@ export type ParametersExceptFirst = F extends (arg0: any, ...rest: infer R) = export type ExceptFirst = T extends [any, ...infer U] ? U : never +export type ExceptFirstTwo = T extends [any, any, ...infer U] ? U : never + export enum MoveType { Backward = 'backward', Forward = 'forward', diff --git a/packages/www/public/sw.js b/packages/www/public/sw.js index 56017d2b7..93e3e9831 100644 --- a/packages/www/public/sw.js +++ b/packages/www/public/sw.js @@ -1,2 +1,2 @@ -if(!self.define){const e=e=>{"require"!==e&&(e+=".js");let s=Promise.resolve();return n[e]||(s=new Promise((async s=>{if("document"in self){const n=document.createElement("script");n.src=e,document.head.appendChild(n),n.onload=s}else importScripts(e),s()}))),s.then((()=>{if(!n[e])throw new Error(`Module ${e} didn’t register its module`);return n[e]}))},s=(s,n)=>{Promise.all(s.map(e)).then((e=>n(1===e.length?e[0]:e)))},n={require:Promise.resolve(s)};self.define=(s,i,a)=>{n[s]||(n[s]=Promise.resolve().then((()=>{let n={};const c={uri:location.origin+s.slice(1)};return Promise.all(i.map((s=>{switch(s){case"exports":return n;case"module":return c;default:return e(s)}}))).then((e=>{const s=a(...e);return n.default||(n.default=s),n}))})))}}define("./sw.js",["./workbox-7288c796"],(function(e){"use strict";importScripts("worker-j4SQSxW4Y5BQ1MYBuhDPd.js"),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/static/chunks/254.f6cd96a81f27f9412bc6.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/254.f6cd96a81f27f9412bc6.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/351.5b8ef6201bbe533c7336.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/351.5b8ef6201bbe533c7336.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/735.0b03369e8efcfb4266ba.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/735.0b03369e8efcfb4266ba.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/877-0b732eab4d2ed323649e.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/877-0b732eab4d2ed323649e.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/933.7eff08edcaba8f928024.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/933.7eff08edcaba8f928024.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/framework-6904c37ecf5b200e4e2e.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/framework-6904c37ecf5b200e4e2e.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/main-1622cb38e93933783343.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/main-1622cb38e93933783343.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/_app-f969d07b144252b4e453.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/_app-f969d07b144252b4e453.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/_error-1cd1e11cd5e9c8211770.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/_error-1cd1e11cd5e9c8211770.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/index-8e8448b898c0d9f22e4d.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/index-8e8448b898c0d9f22e4d.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/k-53de1c8919efff3ddeba.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/k-53de1c8919efff3ddeba.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/k/%5Bid%5D-8cd85905a07a5dddf65d.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/k/%5Bid%5D-8cd85905a07a5dddf65d.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/r-5cd32ab311ef7c240ff8.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/r-5cd32ab311ef7c240ff8.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/r/%5Bid%5D-3fa909f484a15cfc154e.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/r/%5Bid%5D-3fa909f484a15cfc154e.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/shhh-3c469f1a3ffc0b8dd10c.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/shhh-3c469f1a3ffc0b8dd10c.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/shhhmp-118dc6c36903f542a0c3.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/shhhmp-118dc6c36903f542a0c3.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/signout-a8947582f064b3d8c5e6.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/signout-a8947582f064b3d8c5e6.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/sponsorware-e687fb2bd1ed8729e0f3.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/sponsorware-e687fb2bd1ed8729e0f3.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/u-4e2e7f6288f3059347cb.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/u-4e2e7f6288f3059347cb.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/u/%5Bid%5D-22351fd7f99494553332.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/pages/u/%5Bid%5D-22351fd7f99494553332.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/polyfills-a40ef1678bae11e696dba45124eadd70.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/webpack-aeb8ef0e7d4985984bae.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/chunks/webpack-aeb8ef0e7d4985984bae.js.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/css/188c96206215c999865a.css",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/css/188c96206215c999865a.css.map",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/j4SQSxW4Y5BQ1MYBuhDPd/_buildManifest.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/_next/static/j4SQSxW4Y5BQ1MYBuhDPd/_ssgManifest.js",revision:"j4SQSxW4Y5BQ1MYBuhDPd"},{url:"/android-chrome-192x192.png",revision:"57c9c4cd91d24d48b7ffdda0768fd225"},{url:"/android-chrome-512x512.png",revision:"8d2454e6cf551f8ca1e1d5670b13a8d1"},{url:"/android-chrome-maskable-192x192.png",revision:"71c93ce0b34d2fbb4c6654a9131a3d9d"},{url:"/android-chrome-maskable-512x512.png",revision:"4265b8c09997b16ac1493500b43f3755"},{url:"/android-chrome-maskable-beta-512x512.png",revision:"145800cf2381faf1c0f4a61c29a88448"},{url:"/apple-touch-icon.png",revision:"8081d08be3673ec33dbeecab06706b2b"},{url:"/favicon-16x16.png",revision:"ac17d75b1ee007781212853a57b88285"},{url:"/favicon-32x32.png",revision:"360bc7cd4706c0657917f3b78fed6b71"},{url:"/favicon.ico",revision:"b2bf6bb7b4d0234f3e6df44fd7d5707e"},{url:"/flat.png",revision:"e0460141713b5c94104ce19b36c4b462"},{url:"/icons/Redo.svg",revision:"6196f61a2053ff606d5746eb3ab380e3"},{url:"/icons/Trash.svg",revision:"5f2c42a17b7d8459f2e556b6209a61c6"},{url:"/icons/Undo.svg",revision:"24de701870630f51132f9bed3f18ee8f"},{url:"/icons/grab.svg",revision:"a1ca9e5c31d1edd2558ab075f72fde4e"},{url:"/icons/pointer.svg",revision:"dff260f896fe23adb83341639fdf93be"},{url:"/icons/resize.svg",revision:"0a3cb701d15731e25919783801d18f95"},{url:"/images/hello.mp4",revision:"b716f249cc6c781c91b0ac9dc23423b3"},{url:"/manifest.json",revision:"3e4cd02739cceee25488c97ca2ed59da"},{url:"/vercel.svg",revision:"4b4f1876502eb6721764637fe5c41702"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:n,state:i})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")}),new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")}),new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>!(self.origin===e.origin)),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")})); +if(!self.define){const e=e=>{"require"!==e&&(e+=".js");let s=Promise.resolve();return a[e]||(s=new Promise((async s=>{if("document"in self){const a=document.createElement("script");a.src=e,document.head.appendChild(a),a.onload=s}else importScripts(e),s()}))),s.then((()=>{if(!a[e])throw new Error(`Module ${e} didn’t register its module`);return a[e]}))},s=(s,a)=>{Promise.all(s.map(e)).then((e=>a(1===e.length?e[0]:e)))},a={require:Promise.resolve(s)};self.define=(s,n,i)=>{a[s]||(a[s]=Promise.resolve().then((()=>{let a={};const c={uri:location.origin+s.slice(1)};return Promise.all(n.map((s=>{switch(s){case"exports":return a;case"module":return c;default:return e(s)}}))).then((e=>{const s=i(...e);return a.default||(a.default=s),a}))})))}}define("./sw.js",["./workbox-7288c796"],(function(e){"use strict";importScripts("worker-pM2qo7aUQ48uy8XFEvNYI.js"),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/static/chunks/146.dac16a378017a3b908e1.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/146.dac16a378017a3b908e1.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/254.0842e7aa6d62929bbaf3.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/254.0842e7aa6d62929bbaf3.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/351.c394193667656b02e445.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/351.c394193667656b02e445.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/790.843000b02be813787049.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/790.843000b02be813787049.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/877-0b732eab4d2ed323649e.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/877-0b732eab4d2ed323649e.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/framework-6904c37ecf5b200e4e2e.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/framework-6904c37ecf5b200e4e2e.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/main-1622cb38e93933783343.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/main-1622cb38e93933783343.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/_app-6ae16e08a077d60c5eef.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/_app-6ae16e08a077d60c5eef.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/_error-1cd1e11cd5e9c8211770.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/_error-1cd1e11cd5e9c8211770.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/index-c60a1451851b4b489345.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/index-c60a1451851b4b489345.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/k-53de1c8919efff3ddeba.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/k-53de1c8919efff3ddeba.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/k/%5Bid%5D-5ade9f9533ba828633d6.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/k/%5Bid%5D-5ade9f9533ba828633d6.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/r-5cd32ab311ef7c240ff8.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/r-5cd32ab311ef7c240ff8.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/r/%5Bid%5D-bc8004d9c1054570a9b8.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/r/%5Bid%5D-bc8004d9c1054570a9b8.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/shhh-5e23900e30fd14c9f388.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/shhh-5e23900e30fd14c9f388.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/shhhmp-63c0186c3186516bdfba.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/shhhmp-63c0186c3186516bdfba.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/signout-a8947582f064b3d8c5e6.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/signout-a8947582f064b3d8c5e6.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/sponsorware-0ea8113fd25cf64bf199.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/sponsorware-0ea8113fd25cf64bf199.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/u-4e2e7f6288f3059347cb.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/u-4e2e7f6288f3059347cb.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/u/%5Bid%5D-22351fd7f99494553332.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/pages/u/%5Bid%5D-22351fd7f99494553332.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/polyfills-a40ef1678bae11e696dba45124eadd70.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/webpack-b5f7a142c6368c5425de.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/chunks/webpack-b5f7a142c6368c5425de.js.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/css/188c96206215c999865a.css",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/css/188c96206215c999865a.css.map",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/pM2qo7aUQ48uy8XFEvNYI/_buildManifest.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/_next/static/pM2qo7aUQ48uy8XFEvNYI/_ssgManifest.js",revision:"pM2qo7aUQ48uy8XFEvNYI"},{url:"/android-chrome-192x192.png",revision:"57c9c4cd91d24d48b7ffdda0768fd225"},{url:"/android-chrome-512x512.png",revision:"8d2454e6cf551f8ca1e1d5670b13a8d1"},{url:"/android-chrome-maskable-192x192.png",revision:"71c93ce0b34d2fbb4c6654a9131a3d9d"},{url:"/android-chrome-maskable-512x512.png",revision:"4265b8c09997b16ac1493500b43f3755"},{url:"/android-chrome-maskable-beta-512x512.png",revision:"145800cf2381faf1c0f4a61c29a88448"},{url:"/apple-touch-icon.png",revision:"8081d08be3673ec33dbeecab06706b2b"},{url:"/favicon-16x16.png",revision:"ac17d75b1ee007781212853a57b88285"},{url:"/favicon-32x32.png",revision:"360bc7cd4706c0657917f3b78fed6b71"},{url:"/favicon.ico",revision:"b2bf6bb7b4d0234f3e6df44fd7d5707e"},{url:"/flat.png",revision:"e0460141713b5c94104ce19b36c4b462"},{url:"/icons/Redo.svg",revision:"6196f61a2053ff606d5746eb3ab380e3"},{url:"/icons/Trash.svg",revision:"5f2c42a17b7d8459f2e556b6209a61c6"},{url:"/icons/Undo.svg",revision:"24de701870630f51132f9bed3f18ee8f"},{url:"/icons/grab.svg",revision:"a1ca9e5c31d1edd2558ab075f72fde4e"},{url:"/icons/pointer.svg",revision:"dff260f896fe23adb83341639fdf93be"},{url:"/icons/resize.svg",revision:"0a3cb701d15731e25919783801d18f95"},{url:"/images/hello.mp4",revision:"b716f249cc6c781c91b0ac9dc23423b3"},{url:"/manifest.json",revision:"3e4cd02739cceee25488c97ca2ed59da"},{url:"/vercel.svg",revision:"4b4f1876502eb6721764637fe5c41702"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:a,state:n})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")}),new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")}),new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>!(self.origin===e.origin)),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")})); //# sourceMappingURL=sw.js.map diff --git a/packages/www/public/sw.js.map b/packages/www/public/sw.js.map index b040a6e35..8ffe553da 100644 --- a/packages/www/public/sw.js.map +++ b/packages/www/public/sw.js.map @@ -1 +1 @@ -{"version":3,"file":"sw.js","sources":["../../../../../../../private/var/folders/g7/7xq6v0ls5lq_ks1yh3lbgrr00000gn/T/fa5ae3888d4aada597f35a7dd8081aab/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {ExpirationPlugin as workbox_expiration_ExpirationPlugin} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-expiration/ExpirationPlugin.mjs';\nimport {CacheFirst as workbox_strategies_CacheFirst} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-strategies/CacheFirst.mjs';\nimport {StaleWhileRevalidate as workbox_strategies_StaleWhileRevalidate} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-strategies/StaleWhileRevalidate.mjs';\nimport {RangeRequestsPlugin as workbox_range_requests_RangeRequestsPlugin} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-range-requests/RangeRequestsPlugin.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \"worker-j4SQSxW4Y5BQ1MYBuhDPd.js\"\n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/_next/static/chunks/254.f6cd96a81f27f9412bc6.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/254.f6cd96a81f27f9412bc6.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/351.5b8ef6201bbe533c7336.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/351.5b8ef6201bbe533c7336.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/735.0b03369e8efcfb4266ba.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/735.0b03369e8efcfb4266ba.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/877-0b732eab4d2ed323649e.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/877-0b732eab4d2ed323649e.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/933.7eff08edcaba8f928024.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/933.7eff08edcaba8f928024.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/framework-6904c37ecf5b200e4e2e.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/framework-6904c37ecf5b200e4e2e.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/main-1622cb38e93933783343.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/main-1622cb38e93933783343.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/_app-f969d07b144252b4e453.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/_app-f969d07b144252b4e453.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/_error-1cd1e11cd5e9c8211770.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/_error-1cd1e11cd5e9c8211770.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/index-8e8448b898c0d9f22e4d.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/index-8e8448b898c0d9f22e4d.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/k-53de1c8919efff3ddeba.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/k-53de1c8919efff3ddeba.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/k/%5Bid%5D-8cd85905a07a5dddf65d.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/k/%5Bid%5D-8cd85905a07a5dddf65d.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/r-5cd32ab311ef7c240ff8.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/r-5cd32ab311ef7c240ff8.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/r/%5Bid%5D-3fa909f484a15cfc154e.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/r/%5Bid%5D-3fa909f484a15cfc154e.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/shhh-3c469f1a3ffc0b8dd10c.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/shhh-3c469f1a3ffc0b8dd10c.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/shhhmp-118dc6c36903f542a0c3.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/shhhmp-118dc6c36903f542a0c3.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/signout-a8947582f064b3d8c5e6.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/signout-a8947582f064b3d8c5e6.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/sponsorware-e687fb2bd1ed8729e0f3.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/sponsorware-e687fb2bd1ed8729e0f3.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/u-4e2e7f6288f3059347cb.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/u-4e2e7f6288f3059347cb.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/u/%5Bid%5D-22351fd7f99494553332.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/u/%5Bid%5D-22351fd7f99494553332.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/polyfills-a40ef1678bae11e696dba45124eadd70.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/webpack-aeb8ef0e7d4985984bae.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/chunks/webpack-aeb8ef0e7d4985984bae.js.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/css/188c96206215c999865a.css\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/css/188c96206215c999865a.css.map\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/j4SQSxW4Y5BQ1MYBuhDPd/_buildManifest.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/_next/static/j4SQSxW4Y5BQ1MYBuhDPd/_ssgManifest.js\",\n \"revision\": \"j4SQSxW4Y5BQ1MYBuhDPd\"\n },\n {\n \"url\": \"/android-chrome-192x192.png\",\n \"revision\": \"57c9c4cd91d24d48b7ffdda0768fd225\"\n },\n {\n \"url\": \"/android-chrome-512x512.png\",\n \"revision\": \"8d2454e6cf551f8ca1e1d5670b13a8d1\"\n },\n {\n \"url\": \"/android-chrome-maskable-192x192.png\",\n \"revision\": \"71c93ce0b34d2fbb4c6654a9131a3d9d\"\n },\n {\n \"url\": \"/android-chrome-maskable-512x512.png\",\n \"revision\": \"4265b8c09997b16ac1493500b43f3755\"\n },\n {\n \"url\": \"/android-chrome-maskable-beta-512x512.png\",\n \"revision\": \"145800cf2381faf1c0f4a61c29a88448\"\n },\n {\n \"url\": \"/apple-touch-icon.png\",\n \"revision\": \"8081d08be3673ec33dbeecab06706b2b\"\n },\n {\n \"url\": \"/favicon-16x16.png\",\n \"revision\": \"ac17d75b1ee007781212853a57b88285\"\n },\n {\n \"url\": \"/favicon-32x32.png\",\n \"revision\": \"360bc7cd4706c0657917f3b78fed6b71\"\n },\n {\n \"url\": \"/favicon.ico\",\n \"revision\": \"b2bf6bb7b4d0234f3e6df44fd7d5707e\"\n },\n {\n \"url\": \"/flat.png\",\n \"revision\": \"e0460141713b5c94104ce19b36c4b462\"\n },\n {\n \"url\": \"/icons/Redo.svg\",\n \"revision\": \"6196f61a2053ff606d5746eb3ab380e3\"\n },\n {\n \"url\": \"/icons/Trash.svg\",\n \"revision\": \"5f2c42a17b7d8459f2e556b6209a61c6\"\n },\n {\n \"url\": \"/icons/Undo.svg\",\n \"revision\": \"24de701870630f51132f9bed3f18ee8f\"\n },\n {\n \"url\": \"/icons/grab.svg\",\n \"revision\": \"a1ca9e5c31d1edd2558ab075f72fde4e\"\n },\n {\n \"url\": \"/icons/pointer.svg\",\n \"revision\": \"dff260f896fe23adb83341639fdf93be\"\n },\n {\n \"url\": \"/icons/resize.svg\",\n \"revision\": \"0a3cb701d15731e25919783801d18f95\"\n },\n {\n \"url\": \"/images/hello.mp4\",\n \"revision\": \"b716f249cc6c781c91b0ac9dc23423b3\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"3e4cd02739cceee25488c97ca2ed59da\"\n },\n {\n \"url\": \"/vercel.svg\",\n \"revision\": \"4b4f1876502eb6721764637fe5c41702\"\n }\n], {\n \"ignoreURLParametersMatching\": []\n});\nworkbox_precaching_cleanupOutdatedCaches();\n\n\n\nworkbox_routing_registerRoute(\"/\", new workbox_strategies_NetworkFirst({ \"cacheName\":\"start-url\", plugins: [{ cacheWillUpdate: async ({request, response, event, state}) => { if (response && response.type === 'opaqueredirect') { return new Response(response.body, {status: 200, statusText: 'OK', headers: response.headers}); } return response; } }] }), 'GET');\nworkbox_routing_registerRoute(/^https:\\/\\/fonts\\.(?:gstatic)\\.com\\/.*/i, new workbox_strategies_CacheFirst({ \"cacheName\":\"google-fonts-webfonts\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 4, maxAgeSeconds: 31536000 })] }), 'GET');\nworkbox_routing_registerRoute(/^https:\\/\\/fonts\\.(?:googleapis)\\.com\\/.*/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"google-fonts-stylesheets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 4, maxAgeSeconds: 604800 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-font-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 4, maxAgeSeconds: 604800 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-image-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 64, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\/_next\\/image\\?url=.+$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"next-image\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 64, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:mp3|wav|ogg)$/i, new workbox_strategies_CacheFirst({ \"cacheName\":\"static-audio-assets\", plugins: [new workbox_range_requests_RangeRequestsPlugin(), new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:mp4)$/i, new workbox_strategies_CacheFirst({ \"cacheName\":\"static-video-assets\", plugins: [new workbox_range_requests_RangeRequestsPlugin(), new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:js)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-js-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:css|less)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-style-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\/_next\\/data\\/.+\\/.+\\.json$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"next-data\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:json|xml|csv)$/i, new workbox_strategies_NetworkFirst({ \"cacheName\":\"static-data-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(({url}) => {\n const isSameOrigin = self.origin === url.origin\n if (!isSameOrigin) return false\n const pathname = url.pathname\n // Exclude /api/auth/callback/* to fix OAuth workflow in Safari without impact other environment\n // Above route is default for next-auth, you may need to change it if your OAuth workflow has a different callback route\n // Issue: https://github.com/shadowwalker/next-pwa/issues/131#issuecomment-821894809\n if (pathname.startsWith('/api/auth/')) return false\n if (pathname.startsWith('/api/')) return true\n return false\n }, new workbox_strategies_NetworkFirst({ \"cacheName\":\"apis\",\"networkTimeoutSeconds\":10, plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 16, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(({url}) => {\n const isSameOrigin = self.origin === url.origin\n if (!isSameOrigin) return false\n const pathname = url.pathname\n if (pathname.startsWith('/api/')) return false\n return true\n }, new workbox_strategies_NetworkFirst({ \"cacheName\":\"others\",\"networkTimeoutSeconds\":10, plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(({url}) => {\n const isSameOrigin = self.origin === url.origin\n return !isSameOrigin\n }, new workbox_strategies_NetworkFirst({ \"cacheName\":\"cross-origin\",\"networkTimeoutSeconds\":10, plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 3600 })] }), 'GET');\n\n\n\n\n"],"names":["importScripts","self","skipWaiting","workbox_strategies_NetworkFirst","plugins","cacheWillUpdate","async","request","response","event","state","type","Response","body","status","statusText","headers","workbox_strategies_CacheFirst","workbox_expiration_ExpirationPlugin","maxEntries","maxAgeSeconds","workbox_strategies_StaleWhileRevalidate","workbox_range_requests_RangeRequestsPlugin","url","origin","pathname","startsWith"],"mappings":"0yBAqBAA,cACE,mCASFC,KAAKC,kDAU+B,CAClC,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,kEACK,yBAEd,KACS,sEACK,yBAEd,KACS,6DACK,yBAEd,KACS,iEACK,yBAEd,KACS,mEACK,yBAEd,KACS,uEACK,yBAEd,KACS,qEACK,yBAEd,KACS,yEACK,yBAEd,KACS,oEACK,yBAEd,KACS,wEACK,yBAEd,KACS,gEACK,yBAEd,KACS,oEACK,yBAEd,KACS,yEACK,yBAEd,KACS,6EACK,yBAEd,KACS,gEACK,yBAEd,KACS,oEACK,yBAEd,KACS,yEACK,yBAEd,KACS,6EACK,yBAEd,KACS,mEACK,yBAEd,KACS,uEACK,yBAEd,KACS,qEACK,yBAEd,KACS,yEACK,yBAEd,KACS,sEACK,yBAEd,KACS,0EACK,yBAEd,KACS,0EACK,yBAEd,KACS,8EACK,yBAEd,KACS,gEACK,yBAEd,KACS,oEACK,yBAEd,KACS,yEACK,yBAEd,KACS,6EACK,yBAEd,KACS,8EACK,yBAEd,KACS,gEACK,yBAEd,KACS,oEACK,yBAEd,KACS,sDACK,yBAEd,KACS,0DACK,yBAEd,KACS,iEACK,yBAEd,KACS,+DACK,yBAEd,KACS,uCACK,oCAEd,KACS,uCACK,oCAEd,KACS,gDACK,oCAEd,KACS,gDACK,oCAEd,KACS,qDACK,oCAEd,KACS,iCACK,oCAEd,KACS,8BACK,oCAEd,KACS,8BACK,oCAEd,KACS,wBACK,oCAEd,KACS,qBACK,oCAEd,KACS,2BACK,oCAEd,KACS,4BACK,oCAEd,KACS,2BACK,oCAEd,KACS,2BACK,oCAEd,KACS,8BACK,oCAEd,KACS,6BACK,oCAEd,KACS,6BACK,oCAEd,KACS,0BACK,oCAEd,KACS,uBACK,qCAEb,6BAC8B,+CAMH,IAAK,IAAIC,eAAgC,WAAc,YAAaC,QAAS,CAAC,CAAEC,gBAAiBC,OAAQC,QAAAA,EAASC,SAAAA,EAAUC,MAAAA,EAAOC,MAAAA,KAAiBF,GAA8B,mBAAlBA,EAASG,KAAoC,IAAIC,SAASJ,EAASK,KAAM,CAACC,OAAQ,IAAKC,WAAY,KAAMC,QAASR,EAASQ,UAAoBR,MAAmB,uBAClU,0CAA2C,IAAIS,aAA8B,WAAc,wBAAyBb,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,EAAGC,cAAe,aAAiB,uBACvN,6CAA8C,IAAIC,uBAAwC,WAAc,2BAA4BjB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,EAAGC,cAAe,YAAe,uBACrO,8CAA+C,IAAIC,uBAAwC,WAAc,qBAAsBjB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,EAAGC,cAAe,YAAe,uBAChO,wCAAyC,IAAIC,uBAAwC,WAAc,sBAAuBjB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBAC3N,2BAA4B,IAAIC,uBAAwC,WAAc,aAAcjB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBACrM,sBAAuB,IAAIH,aAA8B,WAAc,sBAAuBb,QAAS,CAAC,IAAIkB,sBAA8C,IAAIJ,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBACjP,cAAe,IAAIH,aAA8B,WAAc,sBAAuBb,QAAS,CAAC,IAAIkB,sBAA8C,IAAIJ,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBACzO,aAAc,IAAIC,uBAAwC,WAAc,mBAAoBjB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBAC7L,mBAAoB,IAAIC,uBAAwC,WAAc,sBAAuBjB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBACtM,gCAAiC,IAAIC,uBAAwC,WAAc,YAAajB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBACzM,uBAAwB,IAAIjB,eAAgC,WAAc,qBAAsBC,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,wBACjM,EAAEG,IAAAA,WACLtB,KAAKuB,SAAWD,EAAIC,QACtB,OAAO,QACpBC,EAAWF,EAAIE,gBAIjBA,EAASC,WAAW,iBACpBD,EAASC,WAAW,WAEvB,IAAIvB,eAAgC,WAAc,6BAA+B,GAAIC,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,wBAC/J,EAAEG,IAAAA,WACLtB,KAAKuB,SAAWD,EAAIC,QACtB,OAAO,SACTD,EAAIE,SACRC,WAAW,WAEvB,IAAIvB,eAAgC,WAAc,+BAAiC,GAAIC,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,wBACjK,EAAEG,IAAAA,OACLtB,KAAKuB,SAAWD,EAAIC,SAExC,IAAIrB,eAAgC,WAAc,qCAAuC,GAAIC,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,UAAa"} \ No newline at end of file +{"version":3,"file":"sw.js","sources":["../../../../../../../private/var/folders/g7/7xq6v0ls5lq_ks1yh3lbgrr00000gn/T/5485aae1b70f707bca1bff5c59a11278/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {ExpirationPlugin as workbox_expiration_ExpirationPlugin} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-expiration/ExpirationPlugin.mjs';\nimport {CacheFirst as workbox_strategies_CacheFirst} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-strategies/CacheFirst.mjs';\nimport {StaleWhileRevalidate as workbox_strategies_StaleWhileRevalidate} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-strategies/StaleWhileRevalidate.mjs';\nimport {RangeRequestsPlugin as workbox_range_requests_RangeRequestsPlugin} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-range-requests/RangeRequestsPlugin.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from '/Users/steve/Developer/Github/tldraw/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \"worker-pM2qo7aUQ48uy8XFEvNYI.js\"\n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/_next/static/chunks/146.dac16a378017a3b908e1.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/146.dac16a378017a3b908e1.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/254.0842e7aa6d62929bbaf3.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/254.0842e7aa6d62929bbaf3.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/351.c394193667656b02e445.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/351.c394193667656b02e445.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/790.843000b02be813787049.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/790.843000b02be813787049.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/877-0b732eab4d2ed323649e.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/877-0b732eab4d2ed323649e.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/framework-6904c37ecf5b200e4e2e.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/framework-6904c37ecf5b200e4e2e.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/main-1622cb38e93933783343.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/main-1622cb38e93933783343.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/_app-6ae16e08a077d60c5eef.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/_app-6ae16e08a077d60c5eef.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/_error-1cd1e11cd5e9c8211770.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/_error-1cd1e11cd5e9c8211770.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/index-c60a1451851b4b489345.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/index-c60a1451851b4b489345.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/k-53de1c8919efff3ddeba.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/k-53de1c8919efff3ddeba.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/k/%5Bid%5D-5ade9f9533ba828633d6.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/k/%5Bid%5D-5ade9f9533ba828633d6.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/r-5cd32ab311ef7c240ff8.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/r-5cd32ab311ef7c240ff8.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/r/%5Bid%5D-bc8004d9c1054570a9b8.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/r/%5Bid%5D-bc8004d9c1054570a9b8.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/shhh-5e23900e30fd14c9f388.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/shhh-5e23900e30fd14c9f388.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/shhhmp-63c0186c3186516bdfba.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/shhhmp-63c0186c3186516bdfba.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/signout-a8947582f064b3d8c5e6.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/signout-a8947582f064b3d8c5e6.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/sponsorware-0ea8113fd25cf64bf199.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/sponsorware-0ea8113fd25cf64bf199.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/u-4e2e7f6288f3059347cb.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/u-4e2e7f6288f3059347cb.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/u/%5Bid%5D-22351fd7f99494553332.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/u/%5Bid%5D-22351fd7f99494553332.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/polyfills-a40ef1678bae11e696dba45124eadd70.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/webpack-b5f7a142c6368c5425de.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/chunks/webpack-b5f7a142c6368c5425de.js.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/css/188c96206215c999865a.css\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/css/188c96206215c999865a.css.map\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/pM2qo7aUQ48uy8XFEvNYI/_buildManifest.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/_next/static/pM2qo7aUQ48uy8XFEvNYI/_ssgManifest.js\",\n \"revision\": \"pM2qo7aUQ48uy8XFEvNYI\"\n },\n {\n \"url\": \"/android-chrome-192x192.png\",\n \"revision\": \"57c9c4cd91d24d48b7ffdda0768fd225\"\n },\n {\n \"url\": \"/android-chrome-512x512.png\",\n \"revision\": \"8d2454e6cf551f8ca1e1d5670b13a8d1\"\n },\n {\n \"url\": \"/android-chrome-maskable-192x192.png\",\n \"revision\": \"71c93ce0b34d2fbb4c6654a9131a3d9d\"\n },\n {\n \"url\": \"/android-chrome-maskable-512x512.png\",\n \"revision\": \"4265b8c09997b16ac1493500b43f3755\"\n },\n {\n \"url\": \"/android-chrome-maskable-beta-512x512.png\",\n \"revision\": \"145800cf2381faf1c0f4a61c29a88448\"\n },\n {\n \"url\": \"/apple-touch-icon.png\",\n \"revision\": \"8081d08be3673ec33dbeecab06706b2b\"\n },\n {\n \"url\": \"/favicon-16x16.png\",\n \"revision\": \"ac17d75b1ee007781212853a57b88285\"\n },\n {\n \"url\": \"/favicon-32x32.png\",\n \"revision\": \"360bc7cd4706c0657917f3b78fed6b71\"\n },\n {\n \"url\": \"/favicon.ico\",\n \"revision\": \"b2bf6bb7b4d0234f3e6df44fd7d5707e\"\n },\n {\n \"url\": \"/flat.png\",\n \"revision\": \"e0460141713b5c94104ce19b36c4b462\"\n },\n {\n \"url\": \"/icons/Redo.svg\",\n \"revision\": \"6196f61a2053ff606d5746eb3ab380e3\"\n },\n {\n \"url\": \"/icons/Trash.svg\",\n \"revision\": \"5f2c42a17b7d8459f2e556b6209a61c6\"\n },\n {\n \"url\": \"/icons/Undo.svg\",\n \"revision\": \"24de701870630f51132f9bed3f18ee8f\"\n },\n {\n \"url\": \"/icons/grab.svg\",\n \"revision\": \"a1ca9e5c31d1edd2558ab075f72fde4e\"\n },\n {\n \"url\": \"/icons/pointer.svg\",\n \"revision\": \"dff260f896fe23adb83341639fdf93be\"\n },\n {\n \"url\": \"/icons/resize.svg\",\n \"revision\": \"0a3cb701d15731e25919783801d18f95\"\n },\n {\n \"url\": \"/images/hello.mp4\",\n \"revision\": \"b716f249cc6c781c91b0ac9dc23423b3\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"3e4cd02739cceee25488c97ca2ed59da\"\n },\n {\n \"url\": \"/vercel.svg\",\n \"revision\": \"4b4f1876502eb6721764637fe5c41702\"\n }\n], {\n \"ignoreURLParametersMatching\": []\n});\nworkbox_precaching_cleanupOutdatedCaches();\n\n\n\nworkbox_routing_registerRoute(\"/\", new workbox_strategies_NetworkFirst({ \"cacheName\":\"start-url\", plugins: [{ cacheWillUpdate: async ({request, response, event, state}) => { if (response && response.type === 'opaqueredirect') { return new Response(response.body, {status: 200, statusText: 'OK', headers: response.headers}); } return response; } }] }), 'GET');\nworkbox_routing_registerRoute(/^https:\\/\\/fonts\\.(?:gstatic)\\.com\\/.*/i, new workbox_strategies_CacheFirst({ \"cacheName\":\"google-fonts-webfonts\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 4, maxAgeSeconds: 31536000 })] }), 'GET');\nworkbox_routing_registerRoute(/^https:\\/\\/fonts\\.(?:googleapis)\\.com\\/.*/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"google-fonts-stylesheets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 4, maxAgeSeconds: 604800 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-font-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 4, maxAgeSeconds: 604800 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-image-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 64, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\/_next\\/image\\?url=.+$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"next-image\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 64, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:mp3|wav|ogg)$/i, new workbox_strategies_CacheFirst({ \"cacheName\":\"static-audio-assets\", plugins: [new workbox_range_requests_RangeRequestsPlugin(), new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:mp4)$/i, new workbox_strategies_CacheFirst({ \"cacheName\":\"static-video-assets\", plugins: [new workbox_range_requests_RangeRequestsPlugin(), new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:js)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-js-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:css|less)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-style-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\/_next\\/data\\/.+\\/.+\\.json$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"next-data\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:json|xml|csv)$/i, new workbox_strategies_NetworkFirst({ \"cacheName\":\"static-data-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(({url}) => {\n const isSameOrigin = self.origin === url.origin\n if (!isSameOrigin) return false\n const pathname = url.pathname\n // Exclude /api/auth/callback/* to fix OAuth workflow in Safari without impact other environment\n // Above route is default for next-auth, you may need to change it if your OAuth workflow has a different callback route\n // Issue: https://github.com/shadowwalker/next-pwa/issues/131#issuecomment-821894809\n if (pathname.startsWith('/api/auth/')) return false\n if (pathname.startsWith('/api/')) return true\n return false\n }, new workbox_strategies_NetworkFirst({ \"cacheName\":\"apis\",\"networkTimeoutSeconds\":10, plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 16, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(({url}) => {\n const isSameOrigin = self.origin === url.origin\n if (!isSameOrigin) return false\n const pathname = url.pathname\n if (pathname.startsWith('/api/')) return false\n return true\n }, new workbox_strategies_NetworkFirst({ \"cacheName\":\"others\",\"networkTimeoutSeconds\":10, plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400 })] }), 'GET');\nworkbox_routing_registerRoute(({url}) => {\n const isSameOrigin = self.origin === url.origin\n return !isSameOrigin\n }, new workbox_strategies_NetworkFirst({ \"cacheName\":\"cross-origin\",\"networkTimeoutSeconds\":10, plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 3600 })] }), 'GET');\n\n\n\n\n"],"names":["importScripts","self","skipWaiting","workbox_strategies_NetworkFirst","plugins","cacheWillUpdate","async","request","response","event","state","type","Response","body","status","statusText","headers","workbox_strategies_CacheFirst","workbox_expiration_ExpirationPlugin","maxEntries","maxAgeSeconds","workbox_strategies_StaleWhileRevalidate","workbox_range_requests_RangeRequestsPlugin","url","origin","pathname","startsWith"],"mappings":"0yBAqBAA,cACE,mCASFC,KAAKC,kDAU+B,CAClC,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,kEACK,yBAEd,KACS,sEACK,yBAEd,KACS,6DACK,yBAEd,KACS,iEACK,yBAEd,KACS,mEACK,yBAEd,KACS,uEACK,yBAEd,KACS,qEACK,yBAEd,KACS,yEACK,yBAEd,KACS,oEACK,yBAEd,KACS,wEACK,yBAEd,KACS,gEACK,yBAEd,KACS,oEACK,yBAEd,KACS,yEACK,yBAEd,KACS,6EACK,yBAEd,KACS,gEACK,yBAEd,KACS,oEACK,yBAEd,KACS,yEACK,yBAEd,KACS,6EACK,yBAEd,KACS,mEACK,yBAEd,KACS,uEACK,yBAEd,KACS,qEACK,yBAEd,KACS,yEACK,yBAEd,KACS,sEACK,yBAEd,KACS,0EACK,yBAEd,KACS,0EACK,yBAEd,KACS,8EACK,yBAEd,KACS,gEACK,yBAEd,KACS,oEACK,yBAEd,KACS,yEACK,yBAEd,KACS,6EACK,yBAEd,KACS,8EACK,yBAEd,KACS,gEACK,yBAEd,KACS,oEACK,yBAEd,KACS,sDACK,yBAEd,KACS,0DACK,yBAEd,KACS,iEACK,yBAEd,KACS,+DACK,yBAEd,KACS,uCACK,oCAEd,KACS,uCACK,oCAEd,KACS,gDACK,oCAEd,KACS,gDACK,oCAEd,KACS,qDACK,oCAEd,KACS,iCACK,oCAEd,KACS,8BACK,oCAEd,KACS,8BACK,oCAEd,KACS,wBACK,oCAEd,KACS,qBACK,oCAEd,KACS,2BACK,oCAEd,KACS,4BACK,oCAEd,KACS,2BACK,oCAEd,KACS,2BACK,oCAEd,KACS,8BACK,oCAEd,KACS,6BACK,oCAEd,KACS,6BACK,oCAEd,KACS,0BACK,oCAEd,KACS,uBACK,qCAEb,6BAC8B,+CAMH,IAAK,IAAIC,eAAgC,WAAc,YAAaC,QAAS,CAAC,CAAEC,gBAAiBC,OAAQC,QAAAA,EAASC,SAAAA,EAAUC,MAAAA,EAAOC,MAAAA,KAAiBF,GAA8B,mBAAlBA,EAASG,KAAoC,IAAIC,SAASJ,EAASK,KAAM,CAACC,OAAQ,IAAKC,WAAY,KAAMC,QAASR,EAASQ,UAAoBR,MAAmB,uBAClU,0CAA2C,IAAIS,aAA8B,WAAc,wBAAyBb,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,EAAGC,cAAe,aAAiB,uBACvN,6CAA8C,IAAIC,uBAAwC,WAAc,2BAA4BjB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,EAAGC,cAAe,YAAe,uBACrO,8CAA+C,IAAIC,uBAAwC,WAAc,qBAAsBjB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,EAAGC,cAAe,YAAe,uBAChO,wCAAyC,IAAIC,uBAAwC,WAAc,sBAAuBjB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBAC3N,2BAA4B,IAAIC,uBAAwC,WAAc,aAAcjB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBACrM,sBAAuB,IAAIH,aAA8B,WAAc,sBAAuBb,QAAS,CAAC,IAAIkB,sBAA8C,IAAIJ,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBACjP,cAAe,IAAIH,aAA8B,WAAc,sBAAuBb,QAAS,CAAC,IAAIkB,sBAA8C,IAAIJ,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBACzO,aAAc,IAAIC,uBAAwC,WAAc,mBAAoBjB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBAC7L,mBAAoB,IAAIC,uBAAwC,WAAc,sBAAuBjB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBACtM,gCAAiC,IAAIC,uBAAwC,WAAc,YAAajB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,uBACzM,uBAAwB,IAAIjB,eAAgC,WAAc,qBAAsBC,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,wBACjM,EAAEG,IAAAA,WACLtB,KAAKuB,SAAWD,EAAIC,QACtB,OAAO,QACpBC,EAAWF,EAAIE,gBAIjBA,EAASC,WAAW,iBACpBD,EAASC,WAAW,WAEvB,IAAIvB,eAAgC,WAAc,6BAA+B,GAAIC,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,wBAC/J,EAAEG,IAAAA,WACLtB,KAAKuB,SAAWD,EAAIC,QACtB,OAAO,SACTD,EAAIE,SACRC,WAAW,WAEvB,IAAIvB,eAAgC,WAAc,+BAAiC,GAAIC,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,WAAc,wBACjK,EAAEG,IAAAA,OACLtB,KAAKuB,SAAWD,EAAIC,SAExC,IAAIrB,eAAgC,WAAc,qCAAuC,GAAIC,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,UAAa"} \ No newline at end of file diff --git a/packages/www/public/worker-j4SQSxW4Y5BQ1MYBuhDPd.js b/packages/www/public/worker-pM2qo7aUQ48uy8XFEvNYI.js similarity index 100% rename from packages/www/public/worker-j4SQSxW4Y5BQ1MYBuhDPd.js rename to packages/www/public/worker-pM2qo7aUQ48uy8XFEvNYI.js