From 7affe313f0cda77b7a11d80f3fff70c5586935c3 Mon Sep 17 00:00:00 2001 From: Josh Perez <60019601+josh-signal@users.noreply.github.com> Date: Tue, 30 Nov 2021 21:14:25 -0500 Subject: [PATCH] Add image editor --- ACKNOWLEDGMENTS.md | 43 + _locales/en/messages.json | 84 ++ fixtures/snow.jpg | Bin 0 -> 248357 bytes images/icons/v2/crop-24.svg | 1 + images/icons/v2/crop-lock-24.svg | 1 + images/icons/v2/crop-unlock-24.svg | 1 + images/icons/v2/draw-24.svg | 1 + images/icons/v2/flip-outline-24.svg | 1 + images/icons/v2/pen-20.svg | 1 + images/icons/v2/pen-heavy-20.svg | 1 + images/icons/v2/pen-highlighter-20.svg | 1 + images/icons/v2/pen-light-20.svg | 1 + images/icons/v2/pen-medium-20.svg | 1 + images/icons/v2/pen-regular-20.svg | 1 + images/icons/v2/redo-24.svg | 1 + images/icons/v2/rotate-outline-24.svg | 1 + images/icons/v2/sticker-smiley-24.svg | 1 + images/icons/v2/text-24.svg | 2 +- images/icons/v2/text-highlight-20.svg | 1 + images/icons/v2/text-outline-20.svg | 1 + images/icons/v2/text-regular-20.svg | 1 + images/icons/v2/undo-24.svg | 2 +- package.json | 2 + patches/@types+fabric+4.5.3.patch | 129 +++ patches/fabric+4.6.0.patch | 22 + stylesheets/_modules.scss | 38 +- stylesheets/components/ContextMenu.scss | 116 +++ stylesheets/components/MediaEditor.scss | 340 +++++++ stylesheets/manifest.scss | 2 + ts/components/Button.tsx | 12 +- ts/components/CompositionArea.tsx | 42 + ts/components/ContextMenu.stories.tsx | 39 + ts/components/ContextMenu.tsx | 186 ++++ ts/components/LeftPane.stories.tsx | 8 +- ts/components/MediaEditor.stories.tsx | 46 + ts/components/MediaEditor.tsx | 934 ++++++++++++++++++ .../conversation/AttachmentList.stories.tsx | 2 +- ts/components/conversation/AttachmentList.tsx | 15 +- .../leftPane/LeftPaneSearchHelper.tsx | 2 + ts/components/stickers/StickerButton.tsx | 215 ++-- ts/components/stickers/StickerPicker.tsx | 40 +- ts/hooks/usePortal.ts | 21 + ts/hooks/useUniqueId.ts | 9 + ts/mediaEditor/ImageStateType.ts | 12 + ts/mediaEditor/MediaEditorFabricCropRect.ts | 196 ++++ ts/mediaEditor/MediaEditorFabricIText.ts | 35 + ts/mediaEditor/MediaEditorFabricPath.ts | 29 + .../MediaEditorFabricPencilBrush.ts | 23 + ts/mediaEditor/MediaEditorFabricSticker.ts | 36 + ts/mediaEditor/useFabricHistory.ts | 152 +++ ts/mediaEditor/util/color.ts | 47 + .../util/customFabricObjectControls.ts | 134 +++ ts/mediaEditor/util/getTextStyleAttributes.ts | 44 + ts/state/ducks/composer.ts | 5 +- ts/test-both/helpers/getStickerPacks.ts | 96 ++ ts/util/canEditImages.ts | 17 + ts/util/lint/exceptions.json | 916 ++++++++++++++++- yarn.lock | 324 +++++- 58 files changed, 4261 insertions(+), 173 deletions(-) create mode 100644 fixtures/snow.jpg create mode 100644 images/icons/v2/crop-24.svg create mode 100644 images/icons/v2/crop-lock-24.svg create mode 100644 images/icons/v2/crop-unlock-24.svg create mode 100644 images/icons/v2/draw-24.svg create mode 100644 images/icons/v2/flip-outline-24.svg create mode 100644 images/icons/v2/pen-20.svg create mode 100644 images/icons/v2/pen-heavy-20.svg create mode 100644 images/icons/v2/pen-highlighter-20.svg create mode 100644 images/icons/v2/pen-light-20.svg create mode 100644 images/icons/v2/pen-medium-20.svg create mode 100644 images/icons/v2/pen-regular-20.svg create mode 100644 images/icons/v2/redo-24.svg create mode 100644 images/icons/v2/rotate-outline-24.svg create mode 100644 images/icons/v2/sticker-smiley-24.svg create mode 100644 images/icons/v2/text-highlight-20.svg create mode 100644 images/icons/v2/text-outline-20.svg create mode 100644 images/icons/v2/text-regular-20.svg create mode 100644 patches/@types+fabric+4.5.3.patch create mode 100644 patches/fabric+4.6.0.patch create mode 100644 stylesheets/components/ContextMenu.scss create mode 100644 stylesheets/components/MediaEditor.scss create mode 100644 ts/components/ContextMenu.stories.tsx create mode 100644 ts/components/ContextMenu.tsx create mode 100644 ts/components/MediaEditor.stories.tsx create mode 100644 ts/components/MediaEditor.tsx create mode 100644 ts/hooks/usePortal.ts create mode 100644 ts/hooks/useUniqueId.ts create mode 100644 ts/mediaEditor/ImageStateType.ts create mode 100644 ts/mediaEditor/MediaEditorFabricCropRect.ts create mode 100644 ts/mediaEditor/MediaEditorFabricIText.ts create mode 100644 ts/mediaEditor/MediaEditorFabricPath.ts create mode 100644 ts/mediaEditor/MediaEditorFabricPencilBrush.ts create mode 100644 ts/mediaEditor/MediaEditorFabricSticker.ts create mode 100644 ts/mediaEditor/useFabricHistory.ts create mode 100644 ts/mediaEditor/util/color.ts create mode 100644 ts/mediaEditor/util/customFabricObjectControls.ts create mode 100644 ts/mediaEditor/util/getTextStyleAttributes.ts create mode 100644 ts/test-both/helpers/getStickerPacks.ts create mode 100644 ts/util/canEditImages.ts diff --git a/ACKNOWLEDGMENTS.md b/ACKNOWLEDGMENTS.md index a8f3a13df897..1090140212ed 100644 --- a/ACKNOWLEDGMENTS.md +++ b/ACKNOWLEDGMENTS.md @@ -45,6 +45,30 @@ Signal Desktop makes use of the following open source projects. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +## @types/fabric + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + ## abort-controller MIT License @@ -925,6 +949,25 @@ Signal Desktop makes use of the following open source projects. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +## fabric + + Copyright (c) 2008-2015 Printio (Juriy Zaytsev, Maxim Chernyak) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + ## fast-glob The MIT License (MIT) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 69e42e0aa498..0a9cc428e570 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -6566,6 +6566,90 @@ "message": "There was an error when saving your settings. Please try again.", "description": "Shown if there is an error when saving your preferred reaction settings. Should be very rare to see this message." }, + "MediaEditor__control--draw": { + "message": "Draw", + "description": "Label for the draw button in the media editor" + }, + "MediaEditor__control--text": { + "message": "Add text", + "description": "Label for the text button in the media editor" + }, + "MediaEditor__control--sticker": { + "message": "Stickers", + "description": "Label for the sticker button in the media editor" + }, + "MediaEditor__control--crop": { + "message": "Crop and rotate", + "description": "Label for the crop & rotate button in the media editor" + }, + "MediaEditor__control--undo": { + "message": "Undo", + "description": "Label for the undo button in the media editor" + }, + "MediaEditor__control--redo": { + "message": "Redo", + "description": "Label for the redo button in the media editor" + }, + "MediaEditor__text--regular": { + "message": "Regular", + "description": "Describes what attribute the color picker will change on the text" + }, + "MediaEditor__text--highlight": { + "message": "Highlight", + "description": "Describes what attribute the color picker will change on the text" + }, + "MediaEditor__text--outline": { + "message": "Outline", + "description": "Describes what attribute the color picker will change on the text" + }, + "MediaEditor__text--underline": { + "message": "Underline", + "description": "Describes what attribute the color picker will change on the text" + }, + "MediaEditor__draw--pen": { + "message": "Pen", + "description": "Type of brush to free draw" + }, + "MediaEditor__draw--highlighter": { + "message": "Highlighter", + "description": "Type of brush to free draw" + }, + "MediaEditor__draw--thin": { + "message": "Thin", + "description": "Tip width of the brush" + }, + "MediaEditor__draw--regular": { + "message": "Regular", + "description": "Tip width of the brush" + }, + "MediaEditor__draw--medium": { + "message": "Medium", + "description": "Tip width of the brush" + }, + "MediaEditor__draw--heavy": { + "message": "Heavy", + "description": "Tip width of the brush" + }, + "MediaEditor__crop--reset": { + "message": "Reset", + "description": "Reset the crop state" + }, + "MediaEditor__crop--rotate": { + "message": "Rotate", + "description": "Rotate the canvas" + }, + "MediaEditor__crop--flip": { + "message": "Flip", + "description": "Flip/mirror the canvas" + }, + "MediaEditor__crop--lock": { + "message": "Lock", + "description": "Lock the aspect ratio" + }, + "MediaEditor__crop--crop": { + "message": "Crop", + "description": "Performs the crop" + }, "WhatsNew__modal-title": { "message": "What's New", "description": "Title for the whats new modal" diff --git a/fixtures/snow.jpg b/fixtures/snow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe959acba37b17ea8b65b1494b3d555a79422c6f GIT binary patch literal 248357 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

MIM1h6 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 iN4qUa8A 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ⅆ@CsLGU0pkoA6B;wtx1$>Us~5^iKXpm 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�pB$ynYEe(bi!@BYQ#lJpOVasA>_ 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

u`Z*-wm8|JHVV9Trpg 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 bt?)Insr;k^7f*lIG3pOX*!iFTH}(GkfaAvX literal 0 HcmV?d00001 diff --git a/images/icons/v2/crop-24.svg b/images/icons/v2/crop-24.svg new file mode 100644 index 000000000000..ecf4a007cd08 --- /dev/null +++ b/images/icons/v2/crop-24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/crop-lock-24.svg b/images/icons/v2/crop-lock-24.svg new file mode 100644 index 000000000000..b0502a1050c4 --- /dev/null +++ b/images/icons/v2/crop-lock-24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/crop-unlock-24.svg b/images/icons/v2/crop-unlock-24.svg new file mode 100644 index 000000000000..6c08707f5343 --- /dev/null +++ b/images/icons/v2/crop-unlock-24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/draw-24.svg b/images/icons/v2/draw-24.svg new file mode 100644 index 000000000000..a6e79b10b42e --- /dev/null +++ b/images/icons/v2/draw-24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/flip-outline-24.svg b/images/icons/v2/flip-outline-24.svg new file mode 100644 index 000000000000..d8b7f2bcd776 --- /dev/null +++ b/images/icons/v2/flip-outline-24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/pen-20.svg b/images/icons/v2/pen-20.svg new file mode 100644 index 000000000000..0a184fd4a15d --- /dev/null +++ b/images/icons/v2/pen-20.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/pen-heavy-20.svg b/images/icons/v2/pen-heavy-20.svg new file mode 100644 index 000000000000..f1bb57ddaa43 --- /dev/null +++ b/images/icons/v2/pen-heavy-20.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/pen-highlighter-20.svg b/images/icons/v2/pen-highlighter-20.svg new file mode 100644 index 000000000000..646605821245 --- /dev/null +++ b/images/icons/v2/pen-highlighter-20.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/pen-light-20.svg b/images/icons/v2/pen-light-20.svg new file mode 100644 index 000000000000..e103b3c2592c --- /dev/null +++ b/images/icons/v2/pen-light-20.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/pen-medium-20.svg b/images/icons/v2/pen-medium-20.svg new file mode 100644 index 000000000000..ab289df4c73b --- /dev/null +++ b/images/icons/v2/pen-medium-20.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/pen-regular-20.svg b/images/icons/v2/pen-regular-20.svg new file mode 100644 index 000000000000..e75ed158399a --- /dev/null +++ b/images/icons/v2/pen-regular-20.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/redo-24.svg b/images/icons/v2/redo-24.svg new file mode 100644 index 000000000000..fd0cc572ea1b --- /dev/null +++ b/images/icons/v2/redo-24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/rotate-outline-24.svg b/images/icons/v2/rotate-outline-24.svg new file mode 100644 index 000000000000..e455cc0ce78c --- /dev/null +++ b/images/icons/v2/rotate-outline-24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/sticker-smiley-24.svg b/images/icons/v2/sticker-smiley-24.svg new file mode 100644 index 000000000000..5186bee37878 --- /dev/null +++ b/images/icons/v2/sticker-smiley-24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/text-24.svg b/images/icons/v2/text-24.svg index 0e5e09922230..25900fdae6d9 100644 --- a/images/icons/v2/text-24.svg +++ b/images/icons/v2/text-24.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/images/icons/v2/text-highlight-20.svg b/images/icons/v2/text-highlight-20.svg new file mode 100644 index 000000000000..b1012a1146b6 --- /dev/null +++ b/images/icons/v2/text-highlight-20.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/text-outline-20.svg b/images/icons/v2/text-outline-20.svg new file mode 100644 index 000000000000..4ab50f8ce027 --- /dev/null +++ b/images/icons/v2/text-outline-20.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/text-regular-20.svg b/images/icons/v2/text-regular-20.svg new file mode 100644 index 000000000000..dfc8f9ba1232 --- /dev/null +++ b/images/icons/v2/text-regular-20.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/v2/undo-24.svg b/images/icons/v2/undo-24.svg index 2369b9d41aa3..0deca433da25 100644 --- a/images/icons/v2/undo-24.svg +++ b/images/icons/v2/undo-24.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/package.json b/package.json index 4eaedaa048d9..1701ad770aaf 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "@react-spring/web": "9.2.6", "@signalapp/signal-client": "0.11.0", "@sindresorhus/is": "0.8.0", + "@types/fabric": "4.5.3", "abort-controller": "3.0.0", "array-move": "2.1.0", "axe-core": "4.1.4", @@ -94,6 +95,7 @@ "emoji-datasource-apple": "7.0.2", "emoji-regex": "9.2.2", "encoding": "0.1.13", + "fabric": "4.6.0", "fast-glob": "3.2.1", "filesize": "3.6.1", "firstline": "1.2.1", diff --git a/patches/@types+fabric+4.5.3.patch b/patches/@types+fabric+4.5.3.patch new file mode 100644 index 000000000000..a5cb755dbe42 --- /dev/null +++ b/patches/@types+fabric+4.5.3.patch @@ -0,0 +1,129 @@ +diff --git a/node_modules/@types/fabric/fabric-impl.d.ts b/node_modules/@types/fabric/fabric-impl.d.ts +index 9b2e307..6da58c3 100755 +--- a/node_modules/@types/fabric/fabric-impl.d.ts ++++ b/node_modules/@types/fabric/fabric-impl.d.ts +@@ -1194,18 +1194,6 @@ interface IStaticCanvasOptions { + svgViewportTransformation?: boolean | undefined; + } + +-export interface FreeDrawingBrush { +- /** +- * Can be any regular color value. +- */ +- color: string; +- +- /** +- * Brush width measured in pixels. +- */ +- width: number; +-} +- + export interface StaticCanvas + extends IObservable, + IStaticCanvasOptions, +@@ -1222,7 +1210,7 @@ export class StaticCanvas { + + _activeObject?: Object | Group | undefined; + +- freeDrawingBrush: FreeDrawingBrush; ++ freeDrawingBrush: BaseBrush; + + /** + * Calculates canvas element offset relative to the document +@@ -1931,6 +1919,8 @@ interface ICanvasOptions extends IStaticCanvasOptions { + export interface Canvas extends StaticCanvas {} + export interface Canvas extends ICanvasOptions {} + export class Canvas { ++ toCanvasElement(options?: IDataURLOptions): HTMLCanvasElement; ++ + /** + * Constructor + * @param element element to initialize instance on +@@ -2043,9 +2033,8 @@ export class Canvas { + getSelectionElement(): HTMLCanvasElement; + /** + * Returns currently active object +- * @return {fabric.Object} active object + */ +- getActiveObject(): Object; ++ getActiveObject(): null | Object; + /** + * Returns an array with the current selected objects + * @return {fabric.Object} active object +@@ -3997,7 +3986,7 @@ interface IPathOptions extends IObjectOptions { + */ + path?: Point[] | undefined; + } +-export interface Path extends Object, IPathOptions {} ++export interface Path extends Object {} + export class Path { + /** + * Constructor +@@ -4006,6 +3995,8 @@ export class Path { + */ + constructor(path?: string | Point[], options?: IPathOptions); + ++ path: Array; ++ + pathOffset: Point; + + /** +@@ -5865,6 +5856,12 @@ export class PatternBrush extends PencilBrush { + createPath(pathData: string): Path; + } + export class PencilBrush extends BaseBrush { ++ /** ++ * PencilBrush class ++ * @param fabric.Canvas canvas ++ */ ++ constructor(canvas: fabric.Canvas); ++ + /** + * Converts points to SVG path + * @param points Array of points +@@ -5878,6 +5875,32 @@ export class PencilBrush extends BaseBrush { + createPath(pathData: string): Path; + } + ++/////////////////////////////////////////////////////////////////////////////// ++// Fabric controlsUtils Interface ++////////////////////////////////////////////////////////////////////////////// ++interface IControlsUtils { ++ scaleCursorStyleHandler(eventData: Event, control: fabric.Control, fabricObject: fabric.Object): string; ++ skewCursorStyleHandler(eventData: Event, control: fabric.Control, fabricObject: fabric.Object): string; ++ scaleSkewCursorStyleHandler(eventData: Event, control: fabric.Control, fabricObject: fabric.Object): string; ++ rotationWithSnapping(eventData: Event, transform: Transform, x: number, y: number): boolean; ++ scalingEqually(eventData: Event, transform: Transform, x: number, y: number): boolean; ++ scalingX(eventData: Event, transform: Transform, x: number, y: number): boolean; ++ scalingY(eventData: Event, transform: Transform, x: number, y: number): boolean; ++ scalingYOrSkewingX(eventData: Event, transform: Transform, x: number, y: number): boolean; ++ scalingXOrSkewingY(eventData: Event, transform: Transform, x: number, y: number): boolean; ++ changeWidth(eventData: Event, transform: Transform, x: number, y: number): boolean; ++ skewHandlerX(eventData: Event, transform: Transform, x: number, y: number): boolean; ++ skewHandlerY(eventData: Event, transform: Transform, x: number, y: number): boolean; ++ dragHandler(eventData: Event, transform: Transform, x: number, y: number): boolean; ++ scaleOrSkewActionName(eventData: Event, control: fabric.Control, fabricObject: fabric.Object): string; ++ rotationStyleHandler(eventData: Event, control: fabric.Control, fabricObject: fabric.Object): string; ++ wrapWithFixedAnchor(actionHandler: ((eventData: Event, transform: Transform, x: number, y: number) => T)): ((eventData: Event, transform: Transform, x: number, y: number) => T); ++ wrapWithFireEvent(actionHandler: ((eventData: Event, transform: Transform, x: number, y: number) => T)): ((eventData: Event, transform: Transform, x: number, y: number) => T); ++ getLocalPoint(transform: Transform, originX: string, originY: string, x: number, y: number): fabric.Point; ++} ++ ++export const controlsUtils: IControlsUtils; ++ + /////////////////////////////////////////////////////////////////////////////// + // Fabric util Interface + ////////////////////////////////////////////////////////////////////////////// +@@ -6452,6 +6475,12 @@ interface IUtilMisc { + */ + isTransparent(ctx: CanvasRenderingContext2D, x: number, y: number, tolerance: number): boolean; + ++ /** ++ * Join path commands to go back to svg format ++ * @param pathData fabricJS parsed path commands ++ */ ++ joinPath(pathData: Array): string; ++ + /** + * reset an object transform state to neutral. Top and left are not accounted for + * @static diff --git a/patches/fabric+4.6.0.patch b/patches/fabric+4.6.0.patch new file mode 100644 index 000000000000..5418a45cfe46 --- /dev/null +++ b/patches/fabric+4.6.0.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/fabric/dist/fabric.js b/node_modules/fabric/dist/fabric.js +index 86536ce..487151b 100644 +--- a/node_modules/fabric/dist/fabric.js ++++ b/node_modules/fabric/dist/fabric.js +@@ -3306,16 +3306,7 @@ fabric.CommonMethods = { + } + + (function () { +- var style = fabric.document.documentElement.style, +- selectProp = 'userSelect' in style +- ? 'userSelect' +- : 'MozUserSelect' in style +- ? 'MozUserSelect' +- : 'WebkitUserSelect' in style +- ? 'WebkitUserSelect' +- : 'KhtmlUserSelect' in style +- ? 'KhtmlUserSelect' +- : ''; ++ var selectProp = 'userSelect'; + + /** + * Makes element unselectable diff --git a/stylesheets/_modules.scss b/stylesheets/_modules.scss index 4a76d08cd5b8..4df7e116409a 100644 --- a/stylesheets/_modules.scss +++ b/stylesheets/_modules.scss @@ -3188,6 +3188,40 @@ button.module-image__border-overlay:focus { position: relative; } +.module-attachments__edit-icon { + align-items: center; + background: $color-black-alpha-60; + border-radius: 100%; + display: flex; + height: 36px; + justify-content: center; + left: 50%; + margin-left: -20px; + margin-top: -18px; + position: absolute; + top: 50%; + visibility: hidden; + width: 36px; + + &::after { + @include color-svg('../images/icons/v2/edit-solid-16.svg', $color-white); + content: ''; + height: 20px; + width: 20px; + } +} + +.module-attachments--editable { + display: inline-block; + position: relative; + + &:hover { + .module-attachments__edit-icon { + visibility: visible; + } + } +} + .module-attachments__close-button { @include button-reset; @@ -5623,9 +5657,9 @@ button.module-image__border-overlay:focus { } @include dark-theme { - background: $color-gray-75; + background: $color-gray-80; ::-webkit-scrollbar-thumb { - border: 2px solid $color-gray-75; + border: 2px solid $color-gray-80; } } } diff --git a/stylesheets/components/ContextMenu.scss b/stylesheets/components/ContextMenu.scss new file mode 100644 index 000000000000..a94bbefd7039 --- /dev/null +++ b/stylesheets/components/ContextMenu.scss @@ -0,0 +1,116 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +.ContextMenu { + &__popper { + @extend %module-composition-popper; + margin: 0; + padding: 6px 0; + width: auto; + } + + &__title { + @include font-body-1-bold; + margin-bottom: 12px; + } + + &__button { + @include button-reset(); + align-items: center; + border-radius: 16px; + display: flex; + height: 32px; + justify-content: center; + opacity: 0.5; + width: 32px; + + &:focus, + &:hover { + opacity: 1; + } + + &::after { + content: ''; + display: block; + flex-shrink: 0; + height: 24px; + width: 24px; + } + + &--active { + opacity: 1; + + @include light-theme() { + background-color: $color-gray-05; + } + + @include dark-theme() { + background-color: $color-gray-75; + } + } + } + + &__option { + @include button-reset(); + @include font-body-2; + @include dark-theme { + color: $color-gray-05; + } + + align-items: center; + border-radius: 6px; + display: flex; + justify-content: space-between; + padding: 6px 8px; + min-width: 150px; + + &--container { + display: flex; + } + + &--icon { + height: 16px; + margin-right: 8px; + width: 16px; + } + + &--selected { + height: 12px; + margin: 0 6px; + width: 16px; + + @include light-theme { + @include color-svg('../images/icons/v2/check-24.svg', $color-black); + } + @include dark-theme { + @include color-svg('../images/icons/v2/check-24.svg', $color-white); + } + } + + &--title { + @include font-body-2; + } + + &--description { + @include font-subtitle; + } + + &:hover { + @include light-theme() { + background-color: $color-gray-05; + } + + @include dark-theme() { + background-color: $color-gray-65; + } + } + + &--focused, + &:focus, + &:active { + border-radius: 6px; + box-shadow: 0 0 1px 1px $color-ultramarine; + outline: none; + } + } +} diff --git a/stylesheets/components/MediaEditor.scss b/stylesheets/components/MediaEditor.scss new file mode 100644 index 000000000000..71510df3fffd --- /dev/null +++ b/stylesheets/components/MediaEditor.scss @@ -0,0 +1,340 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +.MediaEditor { + background: $color-gray-95; + display: flex; + flex-direction: column; + height: 100vh; + left: 0; + position: absolute; + top: 0; + user-select: none; + width: 100vw; + z-index: 2; + + &__container { + display: flex; + flex: 1; + padding: 22px 60px; + padding-bottom: 0; + overflow: hidden; + } + + &__media { + align-items: center; + display: flex; + height: 100%; + justify-content: center; + position: relative; + width: 100%; + + &--canvas { + border-radius: 12px; + transition: border-radius 200ms ease-out; + + &--cropping { + border-radius: 0; + } + } + } + + &__control { + @include button-reset; + align-items: center; + border-radius: 32px; + display: inline-flex; + height: 32px; + justify-content: center; + margin: 0 15px; + opacity: 1; + width: 32px; + + &::after { + content: ' '; + height: 24px; + width: 24px; + } + + &--crop::after { + @include color-svg('../images/icons/v2/crop-24.svg', $color-white); + } + + &--pen::after { + @include color-svg('../images/icons/v2/draw-24.svg', $color-white); + } + + &--redo { + &::after { + @include color-svg('../images/icons/v2/redo-24.svg', $color-white); + } + &:disabled::after { + @include color-svg('../images/icons/v2/redo-24.svg', $color-gray-45); + } + } + + &--sticker.module-sticker-button__button::after { + @include color-svg( + '../images/icons/v2/sticker-smiley-24.svg', + $color-white + ); + } + + &--text::after { + @include color-svg('../images/icons/v2/text-24.svg', $color-white); + } + + &--undo { + &::after { + @include color-svg('../images/icons/v2/undo-24.svg', $color-white); + } + &:disabled::after { + @include color-svg('../images/icons/v2/undo-24.svg', $color-gray-45); + } + } + + &--selected { + background-color: $color-white; + + &::after { + background-color: $color-black; + } + } + + &:hover { + background-color: $color-gray-80; + + &::after { + background-color: $color-white; + } + } + } + + &__toolbar { + align-items: center; + display: flex; + flex-direction: column; + justify-content: center; + padding: 22px; + width: 100%; + + &--buttons { + align-items: center; + display: flex; + justify-content: center; + width: 100%; + } + + &--space { + height: 36px; + margin-bottom: 22px; + } + } + + &__controls { + display: flex; + flex-grow: 1; + flex-wrap: wrap; + justify-content: center; + max-width: 596px; + } + + &__tools { + align-items: center; + display: flex; + height: 36px; + justify-content: center; + margin-bottom: 22px; + } + + &__crop-toolbar { + align-items: center; + background-color: $color-gray-90; + border-radius: 10px; + color: $color-white; + display: flex; + + &--button { + @include button-reset; + margin: 0 8px; + padding: 8px; + } + + &--rotate { + @include color-svg( + '../images/icons/v2/rotate-outline-24.svg', + $color-white + ); + height: 20px; + width: 20px; + } + + &--flip { + @include color-svg( + '../images/icons/v2/flip-outline-24.svg', + $color-white + ); + height: 20px; + width: 20px; + } + + &--locked { + @include color-svg('../images/icons/v2/crop-lock-24.svg', $color-white); + height: 20px; + width: 20px; + } + + &--unlocked { + @include color-svg('../images/icons/v2/crop-unlock-24.svg', $color-white); + height: 20px; + width: 20px; + } + + &--reset { + padding-left: 24px; + } + + &--crop { + padding-right: 24px; + } + } + + &__hue-slider.Slider { + background-image: linear-gradient( + 90deg, + hsl(0, 0%, 100%), + hsl(0, 0%, 0%), + hsl(0, 100%, 50%), + hsl(45, 100%, 50%), + hsl(90, 100%, 50%), + hsl(135, 100%, 50%), + hsl(180, 100%, 50%), + hsl(225, 100%, 50%), + hsl(270, 100%, 50%), + hsl(315, 100%, 50%), + hsl(360, 100%, 50%) + ); + border-radius: 4px; + height: 8px; + margin-right: 7px; + width: 280px; + } + + &__hue-slider__handle.Slider__handle { + background-color: transparent; + border: 7px solid $color-white; + margin-top: -7px; + margin-left: -11px; + height: 22px; + width: 22px; + } + + &__button { + @mixin button($svg) { + height: 20px; + margin: 0 7px; + opacity: 1; + width: 20px; + + &::after { + @include color-svg($svg, $color-white); + width: 20px; + height: 20px; + } + + &:hover { + background-color: $color-gray-80; + } + } + + &__text { + @include button('../images/icons/v2/edit-solid-16.svg'); + } + + &--draw-pen { + @include button('../images/icons/v2/pen-20.svg'); + } + + &--draw-highlighter { + @include button('../images/icons/v2/pen-highlighter-20.svg'); + } + + &--text-regular { + @include button('../images/icons/v2/text-regular-20.svg'); + } + + &--text-highlight { + @include button('../images/icons/v2/text-highlight-20.svg'); + } + + &--text-outline { + @include button('../images/icons/v2/text-outline-20.svg'); + } + + &--width-thin { + @include button('../images/icons/v2/pen-light-20.svg'); + } + + &--width-regular { + @include button('../images/icons/v2/pen-regular-20.svg'); + } + + &--width-medium { + @include button('../images/icons/v2/pen-medium-20.svg'); + } + + &--width-heavy { + @include button('../images/icons/v2/pen-heavy-20.svg'); + } + } + + &__icon { + &--draw-pen { + @include color-svg('../images/icons/v2/pen-20.svg', $color-white); + } + + &--draw-highlighter { + @include color-svg( + '../images/icons/v2/pen-highlighter-20.svg', + $color-white + ); + } + + &--text-regular { + @include color-svg( + '../images/icons/v2/text-regular-20.svg', + $color-white + ); + } + + &--text-highlight { + @include color-svg( + '../images/icons/v2/text-highlight-20.svg', + $color-white + ); + } + + &--text-outline { + @include color-svg( + '../images/icons/v2/text-outline-20.svg', + $color-white + ); + } + + &--width-thin { + @include color-svg('../images/icons/v2/pen-light-20.svg', $color-white); + } + + &--width-regular { + @include color-svg('../images/icons/v2/pen-regular-20.svg', $color-white); + } + + &--width-medium { + @include color-svg('../images/icons/v2/pen-medium-20.svg', $color-white); + } + + &--width-heavy { + @include color-svg('../images/icons/v2/pen-heavy-20.svg', $color-white); + } + } +} diff --git a/stylesheets/manifest.scss b/stylesheets/manifest.scss index 148b593027f2..32411a387307 100644 --- a/stylesheets/manifest.scss +++ b/stylesheets/manifest.scss @@ -51,6 +51,7 @@ @import './components/ContactPills.scss'; @import './components/ContactSpoofingReviewDialog.scss'; @import './components/ContactSpoofingReviewDialogPerson.scss'; +@import './components/ContextMenu.scss'; @import './components/ConversationDetails.scss'; @import './components/ConversationHeader.scss'; @import './components/ConversationView.scss'; @@ -71,6 +72,7 @@ @import './components/LeftPaneDialog.scss'; @import './components/LeftPaneSearchInput.scss'; @import './components/Lightbox.scss'; +@import './components/MediaEditor.scss'; @import './components/MediaQualitySelector.scss'; @import './components/MessageAudio.scss'; @import './components/MessageBody.scss'; diff --git a/ts/components/Button.tsx b/ts/components/Button.tsx index adf77a0fc6c0..4281964c9f57 100644 --- a/ts/components/Button.tsx +++ b/ts/components/Button.tsx @@ -5,7 +5,9 @@ import type { CSSProperties, MouseEventHandler, ReactNode } from 'react'; import React from 'react'; import classNames from 'classnames'; +import type { Theme } from '../util/theme'; import { assert } from '../util/assert'; +import { themeClassName } from '../util/theme'; export enum ButtonSize { Large, @@ -41,6 +43,7 @@ type PropsType = { size?: ButtonSize; style?: CSSProperties; tabIndex?: number; + theme?: Theme; variant?: ButtonVariant; } & ( | { @@ -97,6 +100,7 @@ export const Button = React.forwardRef( icon, style, tabIndex, + theme, variant = ButtonVariant.Primary, size = variant === ButtonVariant.Details ? ButtonSize.Small @@ -120,7 +124,7 @@ export const Button = React.forwardRef( const variantClassName = VARIANT_CLASS_NAMES.get(variant); assert(variantClassName, ' ); + + if (theme) { + return

; + } + + return buttonElement; } ); diff --git a/ts/components/CompositionArea.tsx b/ts/components/CompositionArea.tsx index 5baa1679f925..f7c7d62ac5be 100644 --- a/ts/components/CompositionArea.tsx +++ b/ts/components/CompositionArea.tsx @@ -55,6 +55,10 @@ import { useAttachFileShortcut, useKeyboardShortcuts, } from '../hooks/useKeyboardShortcuts'; +import { MediaEditor } from './MediaEditor'; +import { IMAGE_PNG } from '../types/MIME'; +import { isImageTypeSupported } from '../util/GoogleChrome'; +import { canEditImages } from '../util/canEditImages'; export type CompositionAPIType = | { @@ -253,6 +257,9 @@ export const CompositionArea = ({ const [disabled, setDisabled] = useState(false); const [dirty, setDirty] = useState(false); const [large, setLarge] = useState(false); + const [attachmentToEdit, setAttachmentToEdit] = useState< + AttachmentDraftType | undefined + >(); const inputApiRef = useRef(); const fileInputRef = useRef(null); @@ -286,6 +293,19 @@ export const CompositionArea = ({ } }, []); + const hasImageEditingEnabled = canEditImages(); + + function maybeEditAttachment(attachment: AttachmentDraftType) { + if ( + !hasImageEditingEnabled || + !isImageTypeSupported(attachment.contentType) + ) { + return; + } + + setAttachmentToEdit(attachment); + } + const attachFileShortcut = useAttachFileShortcut(launchAttachmentPicker); useKeyboardShortcuts(attachFileShortcut); @@ -560,6 +580,26 @@ export const CompositionArea = ({ return (
+ {attachmentToEdit && 'url' in attachmentToEdit && attachmentToEdit.url && ( + setAttachmentToEdit(undefined)} + onDone={data => { + const newAttachment = { + ...attachmentToEdit, + contentType: IMAGE_PNG, + data, + size: data.byteLength, + }; + + addAttachment(conversationId, newAttachment); + setAttachmentToEdit(undefined); + }} + installedPacks={installedPacks} + recentStickers={recentStickers} + /> + )}
+ ))} +
+ )} +
+ ); +}; diff --git a/ts/components/LeftPane.stories.tsx b/ts/components/LeftPane.stories.tsx index b6ce37cb46da..f7e59875d17f 100644 --- a/ts/components/LeftPane.stories.tsx +++ b/ts/components/LeftPane.stories.tsx @@ -430,12 +430,8 @@ story.add('Archive: searching a conversation', () => ( modeSpecificProps: { mode: LeftPaneMode.Archive, archivedConversations: defaultConversations, - searchConversation: defaultConversations[0], - searchTerm: 'foo bar', - conversationResults: { isLoading: true }, - contactResults: { isLoading: true }, - messageResults: { isLoading: true }, - primarySendsSms: false, + searchConversation: undefined, + searchTerm: '', }, })} /> diff --git a/ts/components/MediaEditor.stories.tsx b/ts/components/MediaEditor.stories.tsx new file mode 100644 index 000000000000..3f80759f3e61 --- /dev/null +++ b/ts/components/MediaEditor.stories.tsx @@ -0,0 +1,46 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import React from 'react'; +import { storiesOf } from '@storybook/react'; +import { action } from '@storybook/addon-actions'; + +import type { PropsType } from './MediaEditor'; +import { MediaEditor } from './MediaEditor'; +import enMessages from '../../_locales/en/messages.json'; +import { setupI18n } from '../util/setupI18n'; +import { Stickers, installedPacks } from '../test-both/helpers/getStickerPacks'; + +const i18n = setupI18n('en', enMessages); + +const story = storiesOf('Components/MediaEditor', module); + +const IMAGE_1 = '/fixtures/nathan-anderson-316188-unsplash.jpg'; +const IMAGE_2 = '/fixtures/tina-rolf-269345-unsplash.jpg'; +const IMAGE_3 = '/fixtures/kitten-4-112-112.jpg'; +const IMAGE_4 = '/fixtures/snow.jpg'; + +const getDefaultProps = (): PropsType => ({ + i18n, + imageSrc: IMAGE_2, + onClose: action('onClose'), + onDone: action('onDone'), + + // StickerButtonProps + installedPacks, + recentStickers: [Stickers.wide, Stickers.tall, Stickers.abe], +}); + +story.add('Extra Large', () => ); + +story.add('Large', () => ( + +)); + +story.add('Smol', () => ( + +)); + +story.add('Portrait', () => ( + +)); diff --git a/ts/components/MediaEditor.tsx b/ts/components/MediaEditor.tsx new file mode 100644 index 000000000000..df285be23bee --- /dev/null +++ b/ts/components/MediaEditor.tsx @@ -0,0 +1,934 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import Measure from 'react-measure'; +import React, { useEffect, useRef, useState } from 'react'; +import classNames from 'classnames'; +import { createPortal } from 'react-dom'; +import { fabric } from 'fabric'; +import { get, has, noop } from 'lodash'; + +import type { LocalizerType } from '../types/Util'; +import type { Props as StickerButtonProps } from './stickers/StickerButton'; +import type { ImageStateType } from '../mediaEditor/ImageStateType'; + +import * as log from '../logging/log'; +import { Button, ButtonVariant } from './Button'; +import { ContextMenu } from './ContextMenu'; +import { Slider } from './Slider'; +import { StickerButton } from './stickers/StickerButton'; +import { Theme } from '../util/theme'; +import { canvasToBytes } from '../util/canvasToBytes'; +import { useFabricHistory } from '../mediaEditor/useFabricHistory'; +import { usePortal } from '../hooks/usePortal'; +import { useUniqueId } from '../hooks/useUniqueId'; + +import { MediaEditorFabricPencilBrush } from '../mediaEditor/MediaEditorFabricPencilBrush'; +import { MediaEditorFabricCropRect } from '../mediaEditor/MediaEditorFabricCropRect'; +import { MediaEditorFabricIText } from '../mediaEditor/MediaEditorFabricIText'; +import { MediaEditorFabricSticker } from '../mediaEditor/MediaEditorFabricSticker'; +import { getRGBA, getHSL } from '../mediaEditor/util/color'; +import { + TextStyle, + getTextStyleAttributes, +} from '../mediaEditor/util/getTextStyleAttributes'; + +export type PropsType = { + i18n: LocalizerType; + imageSrc: string; + onClose: () => unknown; + onDone: (data: Uint8Array) => unknown; +} & Pick; + +enum EditMode { + Crop = 'Crop', + Draw = 'Draw', + Text = 'Text', +} + +enum DrawWidth { + Thin = 2, + Regular = 4, + Medium = 12, + Heavy = 24, +} + +enum DrawTool { + Pen = 'Pen', + Highlighter = 'Highlighter', +} + +export const MediaEditor = ({ + i18n, + imageSrc, + onClose, + onDone, + + // StickerButtonProps + installedPacks, + recentStickers, +}: PropsType): JSX.Element | null => { + const [fabricCanvas, setFabricCanvas] = useState(); + const [image, setImage] = useState(new Image()); + + const isRestoringImageState = useRef(false); + + const canvasId = useUniqueId(); + + const [imageState, setImageState] = useState({ + angle: 0, + cropX: 0, + cropY: 0, + flipX: false, + flipY: false, + height: image.height, + width: image.width, + }); + + // Initial image load and Fabric canvas setup + useEffect(() => { + const img = new Image(); + img.onload = () => { + setImage(img); + + const canvas = new fabric.Canvas(canvasId); + canvas.selection = false; + setFabricCanvas(canvas); + setImageState(curr => ({ + ...curr, + height: img.height, + width: img.width, + })); + }; + img.onerror = () => { + // This is a bad experience, but it should be impossible. + log.error(': image failed to load. Closing'); + onClose(); + }; + img.src = imageSrc; + return () => { + img.onload = noop; + img.onerror = noop; + }; + }, [canvasId, imageSrc, onClose]); + + // Keyboard support + useEffect(() => { + function handleKeydown(ev: KeyboardEvent) { + if (!fabricCanvas) { + return; + } + + const obj = fabricCanvas.getActiveObject(); + + if (!obj) { + return; + } + + if (ev.key === 'Delete') { + if (!obj.excludeFromExport) { + fabricCanvas.remove(obj); + } + ev.preventDefault(); + ev.stopPropagation(); + } + + if (ev.key === 'Escape') { + fabricCanvas.discardActiveObject(); + fabricCanvas.requestRenderAll(); + ev.preventDefault(); + ev.stopPropagation(); + } + } + + document.addEventListener('keydown', handleKeydown); + + return () => { + document.removeEventListener('keydown', handleKeydown); + }; + }, [fabricCanvas]); + + const history = useFabricHistory(fabricCanvas); + + // Take a snapshot of history whenever imageState changes + useEffect(() => { + if ( + !imageState.height || + !imageState.width || + isRestoringImageState.current + ) { + isRestoringImageState.current = false; + return; + } + history?.takeSnapshot(imageState); + }, [history, imageState]); + + const [containerWidth, setContainerWidth] = useState(0); + const [containerHeight, setContainerHeight] = useState(0); + + const zoom = + Math.min( + containerWidth / imageState.width, + containerHeight / imageState.height + ) || 1; + + // Update the canvas dimensions (and therefore zoom) + useEffect(() => { + if (!fabricCanvas || !imageState.width || !imageState.height) { + return; + } + fabricCanvas.setDimensions({ + width: imageState.width * zoom, + height: imageState.height * zoom, + }); + fabricCanvas.setZoom(zoom); + }, [ + containerHeight, + containerWidth, + fabricCanvas, + imageState.height, + imageState.width, + zoom, + ]); + + // Refresh the background image according to imageState changes + useEffect(() => { + const backgroundImage = new fabric.Image(image, { + canvas: fabricCanvas, + height: imageState.height || image.height, + width: imageState.width || image.width, + }); + + let left: number; + let top: number; + switch (imageState.angle) { + case 0: + left = 0; + top = 0; + break; + case 90: + left = imageState.width; + top = 0; + break; + case 180: + left = imageState.width; + top = imageState.height; + break; + case 270: + left = 0; + top = imageState.height; + break; + default: + throw new Error('Unexpected angle'); + } + + let { height, width } = imageState; + if (imageState.angle % 180) { + [width, height] = [height, width]; + } + + fabricCanvas?.setBackgroundImage( + backgroundImage, + fabricCanvas.requestRenderAll.bind(fabricCanvas), + { + angle: imageState.angle, + cropX: imageState.cropX, + cropY: imageState.cropY, + flipX: imageState.flipX, + flipY: imageState.flipY, + left, + top, + originX: 'left', + originY: 'top', + width, + height, + } + ); + }, [fabricCanvas, image, imageState]); + + const [canRedo, setCanRedo] = useState(false); + const [canUndo, setCanUndo] = useState(false); + const [cropAspectRatioLock, setcropAspectRatioLock] = useState(false); + const [drawTool, setDrawTool] = useState(DrawTool.Pen); + const [drawWidth, setDrawWidth] = useState(DrawWidth.Regular); + const [editMode, setEditMode] = useState(); + const [sliderValue, setSliderValue] = useState(0); + const [textStyle, setTextStyle] = useState(TextStyle.Regular); + + // Check if we can undo/redo & restore the image state on undo/undo + useEffect(() => { + if (!history) { + return; + } + + function refreshUndoState() { + if (!history) { + return; + } + + setCanUndo(history.canUndo()); + setCanRedo(history.canRedo()); + } + + function restoreImageState(prevImageState?: ImageStateType) { + if (prevImageState) { + isRestoringImageState.current = true; + setImageState(prevImageState); + } + } + + history.on('historyChanged', refreshUndoState); + history.on('appliedState', restoreImageState); + + return () => { + history.off('historyChanged', refreshUndoState); + history.off('appliedState', restoreImageState); + }; + }, [history]); + + // If you select a text path auto enter edit mode + useEffect(() => { + if (!fabricCanvas) { + return; + } + + function updateEditMode(ev: fabric.IEvent) { + if (ev.target?.get('type') === 'MediaEditorFabricIText') { + setEditMode(EditMode.Text); + } else if (editMode === EditMode.Text) { + setEditMode(undefined); + } + } + + fabricCanvas.on('selection:created', updateEditMode); + fabricCanvas.on('selection:updated', updateEditMode); + fabricCanvas.on('selection:cleared', updateEditMode); + + return () => { + fabricCanvas.off('selection:created', updateEditMode); + fabricCanvas.off('selection:updated', updateEditMode); + fabricCanvas.off('selection:cleared', updateEditMode); + }; + }, [editMode, fabricCanvas]); + + // Ensure scaling is in locked|unlocked state only when cropping + useEffect(() => { + if (!fabricCanvas) { + return; + } + + if (editMode === EditMode.Crop) { + fabricCanvas.uniformScaling = cropAspectRatioLock; + } else { + fabricCanvas.uniformScaling = true; + } + }, [cropAspectRatioLock, editMode, fabricCanvas]); + + // Remove any blank text when edit mode changes off of text + useEffect(() => { + if (!fabricCanvas) { + return; + } + + if (editMode !== EditMode.Text) { + const obj = fabricCanvas.getActiveObject(); + if (obj && has(obj, 'text') && get(obj, 'text') === '') { + fabricCanvas.remove(obj); + } + } + }, [editMode, fabricCanvas]); + + // Toggle draw mode + useEffect(() => { + if (!fabricCanvas) { + return; + } + + if (editMode !== EditMode.Draw) { + fabricCanvas.isDrawingMode = false; + return; + } + + fabricCanvas.discardActiveObject(); + fabricCanvas.isDrawingMode = true; + + const freeDrawingBrush = new MediaEditorFabricPencilBrush(fabricCanvas); + if (drawTool === DrawTool.Highlighter) { + freeDrawingBrush.color = getRGBA(sliderValue, 0.5); + freeDrawingBrush.strokeLineCap = 'square'; + freeDrawingBrush.strokeLineJoin = 'miter'; + freeDrawingBrush.width = (drawWidth / zoom) * 2; + } else { + freeDrawingBrush.color = getHSL(sliderValue); + freeDrawingBrush.strokeLineCap = 'round'; + freeDrawingBrush.strokeLineJoin = 'bevel'; + freeDrawingBrush.width = drawWidth / zoom; + } + fabricCanvas.freeDrawingBrush = freeDrawingBrush; + + fabricCanvas.requestRenderAll(); + }, [drawTool, drawWidth, editMode, fabricCanvas, sliderValue, zoom]); + + // Change text style + useEffect(() => { + if (!fabricCanvas) { + return; + } + + if (editMode !== EditMode.Text) { + return; + } + + const obj = fabricCanvas.getActiveObject(); + + if (!obj || !(obj instanceof MediaEditorFabricIText)) { + return; + } + + obj.set(getTextStyleAttributes(textStyle, sliderValue)); + fabricCanvas.requestRenderAll(); + }, [editMode, fabricCanvas, sliderValue, textStyle]); + + // Create the CroppingRect + useEffect(() => { + if (!fabricCanvas) { + return; + } + + if (editMode === EditMode.Crop) { + const PADDING = MediaEditorFabricCropRect.PADDING / zoom; + // For reasons we don't understand, height and width on small images doesn't work + // right (it bleeds out) so we decrease them for small images. + const height = + imageState.height - PADDING * Math.max(440 / imageState.height, 2); + const width = + imageState.width - PADDING * Math.max(440 / imageState.width, 2); + + let rect: MediaEditorFabricCropRect; + const obj = fabricCanvas.getActiveObject(); + + if (obj instanceof MediaEditorFabricCropRect) { + rect = obj; + rect.set({ height, width, scaleX: 1, scaleY: 1 }); + } else { + rect = new MediaEditorFabricCropRect({ + height, + width, + }); + + rect.on('deselected', () => { + setEditMode(undefined); + }); + + fabricCanvas.add(rect); + fabricCanvas.setActiveObject(rect); + } + + fabricCanvas.viewportCenterObject(rect); + rect.setCoords(); + } else { + fabricCanvas.getObjects().forEach(obj => { + if (obj instanceof MediaEditorFabricCropRect) { + fabricCanvas.remove(obj); + } + }); + } + }, [editMode, fabricCanvas, imageState.height, imageState.width, zoom]); + + // In an ideal world we'd use to get the nice animation benefits + // but because of the way IText is implemented -- with a hidden textarea -- to + // capture keyboard events, we can't use ModalHost since that traps focus, and + // focus trapping doesn't play nice with fabric's IText. + const portal = usePortal(); + + if (!portal) { + return null; + } + + let tooling: JSX.Element | undefined; + if (editMode === EditMode.Text) { + tooling = ( + <> + + setTextStyle(value)} + theme={Theme.Dark} + value={textStyle} + /> + + ); + } else if (editMode === EditMode.Draw) { + tooling = ( + <> + + setDrawTool(value)} + theme={Theme.Dark} + value={drawTool} + /> + setDrawWidth(value)} + theme={Theme.Dark} + value={drawWidth} + /> + + ); + } else if (editMode === EditMode.Crop) { + const canReset = + imageState.cropX !== 0 || + imageState.cropY !== 0 || + imageState.flipX || + imageState.flipY || + imageState.angle !== 0; + + tooling = ( +
+ + +
+ ); + } + + return createPortal( +
+
+ { + if (!bounds) { + log.error('We should be measuring the bounds'); + return; + } + setContainerWidth(bounds.width); + setContainerHeight(bounds.height); + }} + > + {({ measureRef }) => ( +
+ {image && ( +
+ +
+ )} +
+ )} +
+
+
+ {tooling ? ( +
{tooling}
+ ) : ( +
+ )} +
+ +
+
+ +
+
+
, + portal + ); +}; diff --git a/ts/components/conversation/AttachmentList.stories.tsx b/ts/components/conversation/AttachmentList.stories.tsx index 30c81bd07835..ef4692969ef6 100644 --- a/ts/components/conversation/AttachmentList.stories.tsx +++ b/ts/components/conversation/AttachmentList.stories.tsx @@ -43,7 +43,7 @@ story.add('One File', () => { }), ], }); - return ; + return ; }); story.add('Multiple Visual Attachments', () => { diff --git a/ts/components/conversation/AttachmentList.tsx b/ts/components/conversation/AttachmentList.tsx index dc790615debb..ac6006b97f8d 100644 --- a/ts/components/conversation/AttachmentList.tsx +++ b/ts/components/conversation/AttachmentList.tsx @@ -17,6 +17,7 @@ import { export type Props = Readonly<{ attachments: ReadonlyArray; + canEditImages?: boolean; i18n: LocalizerType; onAddAttachment?: () => void; onClickAttachment?: (attachment: AttachmentDraftType) => void; @@ -41,6 +42,7 @@ function getUrl(attachment: AttachmentDraftType): string | undefined { export const AttachmentList = ({ attachments, + canEditImages, i18n, onAddAttachment, onClickAttachment, @@ -88,7 +90,7 @@ export const AttachmentList = ({ ? () => onClickAttachment(attachment) : undefined; - return ( + const imgElement = ( {i18n('stagedImageAttachment', ); + + if (isImage && canEditImages) { + return ( +
+ {imgElement} +
+
+ ); + } + + return imgElement; } return ( diff --git a/ts/components/leftPane/LeftPaneSearchHelper.tsx b/ts/components/leftPane/LeftPaneSearchHelper.tsx index ee88c9cc9980..affa8afd1655 100644 --- a/ts/components/leftPane/LeftPaneSearchHelper.tsx +++ b/ts/components/leftPane/LeftPaneSearchHelper.tsx @@ -43,6 +43,8 @@ const searchResultKeys: Array< 'conversationResults' | 'contactResults' | 'messageResults' > = ['conversationResults', 'contactResults', 'messageResults']; +/* eslint-disable class-methods-use-this */ + export class LeftPaneSearchHelper extends LeftPaneHelper { private readonly conversationResults: MaybeLoadedSearchResultsType; diff --git a/ts/components/stickers/StickerButton.tsx b/ts/components/stickers/StickerButton.tsx index b8879cca7a40..d3938d28ae57 100644 --- a/ts/components/stickers/StickerButton.tsx +++ b/ts/components/stickers/StickerButton.tsx @@ -6,13 +6,17 @@ import classNames from 'classnames'; import { get, noop } from 'lodash'; import { Manager, Popper, Reference } from 'react-popper'; import { createPortal } from 'react-dom'; -import { StickerPicker } from './StickerPicker'; -import { countStickers } from './lib'; + import type { StickerPackType, StickerType } from '../../state/ducks/stickers'; import type { LocalizerType } from '../../types/Util'; +import type { Theme } from '../../util/theme'; +import { StickerPicker } from './StickerPicker'; +import { countStickers } from './lib'; import { offsetDistanceModifier } from '../../util/popperUtil'; +import { themeClassName } from '../../util/theme'; export type OwnProps = { + readonly className?: string; readonly i18n: LocalizerType; readonly receivedPacks: ReadonlyArray; readonly installedPacks: ReadonlyArray; @@ -21,19 +25,25 @@ export type OwnProps = { readonly installedPack?: StickerPackType | null; readonly recentStickers: ReadonlyArray; readonly clearInstalledStickerPack: () => unknown; - readonly onClickAddPack: () => unknown; - readonly onPickSticker: (packId: string, stickerId: number) => unknown; + readonly onClickAddPack?: () => unknown; + readonly onPickSticker: ( + packId: string, + stickerId: number, + url: string + ) => unknown; readonly showIntroduction?: boolean; readonly clearShowIntroduction: () => unknown; readonly showPickerHint: boolean; readonly clearShowPickerHint: () => unknown; readonly position?: 'top-end' | 'top-start'; + readonly theme?: Theme; }; export type Props = OwnProps; export const StickerButton = React.memo( ({ + className, i18n, clearInstalledStickerPack, onClickAddPack, @@ -49,6 +59,7 @@ export const StickerButton = React.memo( showPickerHint, clearShowPickerHint, position = 'top-end', + theme, }: Props) => { const [open, setOpen] = React.useState(false); const [popperRoot, setPopperRoot] = React.useState( @@ -62,7 +73,7 @@ export const StickerButton = React.memo( // Handle button click if (installedPacks.length === 0) { - onClickAddPack(); + onClickAddPack?.(); } else if (popperRoot) { setOpen(false); } else { @@ -78,9 +89,9 @@ export const StickerButton = React.memo( ]); const handlePickSticker = React.useCallback( - (packId: string, stickerId: number) => { + (packId: string, stickerId: number, url: string) => { setOpen(false); - onPickSticker(packId, stickerId); + onPickSticker(packId, stickerId, url); }, [setOpen, onPickSticker] ); @@ -94,7 +105,7 @@ export const StickerButton = React.memo( if (showPickerHint) { clearShowPickerHint(); } - onClickAddPack(); + onClickAddPack?.(); }, [onClickAddPack, showPickerHint, clearShowPickerHint]); const handleClearIntroduction = React.useCallback(() => { @@ -110,13 +121,16 @@ export const StickerButton = React.memo( document.body.appendChild(root); const handleOutsideClick = ({ target }: MouseEvent) => { const targetElement = target as HTMLElement; - const className = targetElement ? targetElement.className || '' : ''; + const targetClassName = targetElement + ? targetElement.className || '' + : ''; // We need to special-case sticker picker header buttons, because they can // disappear after being clicked, which breaks the .contains() check below. const isMissingButtonClass = - !className || - className.indexOf('module-sticker-picker__header__button') < 0; + !targetClassName || + targetClassName.indexOf('module-sticker-picker__header__button') < + 0; if (!root.contains(targetElement) && isMissingButtonClass) { setOpen(false); @@ -194,10 +208,13 @@ export const StickerButton = React.memo( type="button" ref={ref} onClick={handleClickButton} - className={classNames({ - 'module-sticker-button__button': true, - 'module-sticker-button__button--active': open, - })} + className={classNames( + { + 'module-sticker-button__button': true, + 'module-sticker-button__button--active': open, + }, + className + )} aria-label={i18n('stickers--StickerPicker--Open')} /> )} @@ -209,84 +226,88 @@ export const StickerButton = React.memo( modifiers={[offsetDistanceModifier(6)]} > {({ ref, style, placement, arrowProps }) => ( - + + + {installedPack.title} + {' '} + installed + +
+ +
)} ) : null} {!open && showIntroduction ? ( {({ ref, style, placement, arrowProps }) => ( -
-
+ + onClick={handleClearIntroduction} + > + {i18n('stickers--StickerManager--Introduction--Image')} +
+
+ {i18n('stickers--StickerManager--Introduction--Title')} +
+
+ {i18n('stickers--StickerManager--Introduction--Body')} +
+
+
+
+
+ +
)} ) : null} @@ -294,17 +315,21 @@ export const StickerButton = React.memo( ? createPortal( {({ ref, style }) => ( - +
+ +
)}
, popperRoot diff --git a/ts/components/stickers/StickerPicker.tsx b/ts/components/stickers/StickerPicker.tsx index 9c978cf0f323..f0407ff518fb 100644 --- a/ts/components/stickers/StickerPicker.tsx +++ b/ts/components/stickers/StickerPicker.tsx @@ -12,8 +12,12 @@ import type { LocalizerType } from '../../types/Util'; export type OwnProps = { readonly i18n: LocalizerType; readonly onClose: () => unknown; - readonly onClickAddPack: () => unknown; - readonly onPickSticker: (packId: string, stickerId: number) => unknown; + readonly onClickAddPack?: () => unknown; + readonly onPickSticker: ( + packId: string, + stickerId: number, + url: string + ) => unknown; readonly packs: ReadonlyArray; readonly recentStickers: ReadonlyArray; readonly showPickerHint?: boolean; @@ -230,20 +234,22 @@ export const StickerPicker = React.memo( /> ) : null}
-
onPickSticker(packId, id)} + onClick={() => onPickSticker(packId, id, url)} > (null); + + useEffect(() => { + const div = document.createElement('div'); + document.body.appendChild(div); + setRoot(div); + + return () => { + document.body.removeChild(div); + setRoot(null); + }; + }, []); + + return root; +} diff --git a/ts/hooks/useUniqueId.ts b/ts/hooks/useUniqueId.ts new file mode 100644 index 000000000000..c6b099edc5e0 --- /dev/null +++ b/ts/hooks/useUniqueId.ts @@ -0,0 +1,9 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { useMemo } from 'react'; +import { v4 as uuid } from 'uuid'; + +export function useUniqueId(): string { + return useMemo(() => uuid(), []); +} diff --git a/ts/mediaEditor/ImageStateType.ts b/ts/mediaEditor/ImageStateType.ts new file mode 100644 index 000000000000..0cf5fc2fcfeb --- /dev/null +++ b/ts/mediaEditor/ImageStateType.ts @@ -0,0 +1,12 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +export type ImageStateType = { + angle: number; + cropX: number; + cropY: number; + flipX: boolean; + flipY: boolean; + height: number; + width: number; +}; diff --git a/ts/mediaEditor/MediaEditorFabricCropRect.ts b/ts/mediaEditor/MediaEditorFabricCropRect.ts new file mode 100644 index 000000000000..4776c8041626 --- /dev/null +++ b/ts/mediaEditor/MediaEditorFabricCropRect.ts @@ -0,0 +1,196 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { fabric } from 'fabric'; +import { clamp } from 'lodash'; + +export class MediaEditorFabricCropRect extends fabric.Rect { + static PADDING = 4; + + constructor(options?: fabric.IRectOptions) { + super({ + fill: undefined, + lockScalingFlip: true, + ...(options || {}), + }); + + this.on('modified', this.containBounds.bind(this)); + } + + private containBounds() { + if (!this.canvas) { + return; + } + + const zoom = this.canvas.getZoom() || 1; + + const { left, top, height, width } = this.getBoundingRect(); + + const canvasHeight = this.canvas.getHeight(); + const canvasWidth = this.canvas.getWidth(); + + if (height > canvasHeight || width > canvasWidth) { + this.canvas.discardActiveObject(); + } else { + this.set( + 'left', + clamp( + left / zoom, + MediaEditorFabricCropRect.PADDING / zoom, + (canvasWidth - width - MediaEditorFabricCropRect.PADDING) / zoom + ) + ); + this.set( + 'top', + clamp( + top / zoom, + MediaEditorFabricCropRect.PADDING / zoom, + (canvasHeight - height - MediaEditorFabricCropRect.PADDING) / zoom + ) + ); + } + + this.setCoords(); + } + + override render(ctx: CanvasRenderingContext2D): void { + super.render(ctx); + + const bounds = this.getBoundingRect(); + + const zoom = this.canvas?.getZoom() || 1; + const canvasWidth = (this.canvas?.getWidth() || 0) / zoom; + const canvasHeight = (this.canvas?.getHeight() || 0) / zoom; + const height = bounds.height / zoom; + const left = bounds.left / zoom; + const top = bounds.top / zoom; + const width = bounds.width / zoom; + + ctx.save(); + ctx.fillStyle = 'rgba(0, 0, 0, 0.4)'; + // top + ctx.fillRect(0, 0, canvasWidth, top); + // left + ctx.fillRect(0, top, left, height); + // bottom + ctx.fillRect(0, height + top, canvasWidth, canvasHeight - top); + // right + ctx.fillRect(left + width, top, canvasWidth - left, height); + ctx.restore(); + } +} + +MediaEditorFabricCropRect.prototype.controls = { + tl: new fabric.Control({ + x: -0.5, + y: -0.5, + actionHandler: fabric.controlsUtils.scalingEqually, + render: ( + ctx: CanvasRenderingContext2D, + left: number, + top: number, + _, + rect: fabric.Object + ) => { + const WIDTH = getMinSize(rect.width); + + ctx.save(); + ctx.fillStyle = '#fff'; + ctx.strokeStyle = '#fff'; + ctx.lineWidth = 3; + ctx.beginPath(); + ctx.moveTo(left - 2, top + WIDTH); + ctx.lineTo(left - 2, top - 2); + ctx.lineTo(left + WIDTH, top - 2); + ctx.stroke(); + + ctx.restore(); + }, + }), + tr: new fabric.Control({ + x: 0.5, + y: -0.5, + actionHandler: fabric.controlsUtils.scalingEqually, + render: ( + ctx: CanvasRenderingContext2D, + left: number, + top: number, + _, + rect: fabric.Object + ) => { + const WIDTH = getMinSize(rect.width); + + ctx.save(); + ctx.fillStyle = '#fff'; + ctx.strokeStyle = '#fff'; + ctx.lineWidth = 3; + ctx.beginPath(); + ctx.moveTo(left + 2, top + WIDTH); + ctx.lineTo(left + 2, top - 2); + ctx.lineTo(left - WIDTH, top - 2); + ctx.stroke(); + + ctx.restore(); + }, + }), + bl: new fabric.Control({ + x: -0.5, + y: 0.5, + actionHandler: fabric.controlsUtils.scalingEqually, + render: ( + ctx: CanvasRenderingContext2D, + left: number, + top: number, + _, + rect: fabric.Object + ) => { + const WIDTH = getMinSize(rect.width); + + ctx.save(); + ctx.fillStyle = '#fff'; + ctx.strokeStyle = '#fff'; + ctx.lineWidth = 3; + ctx.beginPath(); + ctx.moveTo(left - 2, top - WIDTH); + ctx.lineTo(left - 2, top + 2); + ctx.lineTo(left + WIDTH, top + 2); + ctx.stroke(); + + ctx.restore(); + }, + }), + br: new fabric.Control({ + x: 0.5, + y: 0.5, + actionHandler: fabric.controlsUtils.scalingEqually, + render: ( + ctx: CanvasRenderingContext2D, + left: number, + top: number, + _, + rect: fabric.Object + ) => { + const WIDTH = getMinSize(rect.width); + + ctx.save(); + ctx.fillStyle = '#fff'; + ctx.strokeStyle = '#fff'; + ctx.lineWidth = 3; + ctx.beginPath(); + ctx.moveTo(left + 2, top - WIDTH); + ctx.lineTo(left + 2, top + 2); + ctx.lineTo(left - WIDTH, top + 2); + ctx.stroke(); + + ctx.restore(); + }, + }), +}; + +MediaEditorFabricCropRect.prototype.excludeFromExport = true; +MediaEditorFabricCropRect.prototype.borderColor = '#ffffff'; +MediaEditorFabricCropRect.prototype.cornerColor = '#ffffff'; + +function getMinSize(width: number | undefined): number { + return Math.min(width || 24, 24); +} diff --git a/ts/mediaEditor/MediaEditorFabricIText.ts b/ts/mediaEditor/MediaEditorFabricIText.ts new file mode 100644 index 000000000000..a9db7f286f73 --- /dev/null +++ b/ts/mediaEditor/MediaEditorFabricIText.ts @@ -0,0 +1,35 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { fabric } from 'fabric'; +import { customFabricObjectControls } from './util/customFabricObjectControls'; + +export class MediaEditorFabricIText extends fabric.IText { + constructor(text: string, options: fabric.ITextOptions) { + super(text, { + fontFamily: 'Inter', + fontWeight: 'bold', + lockScalingFlip: true, + originX: 'center', + originY: 'center', + textAlign: 'center', + ...options, + }); + } + + static override fromObject( + // eslint-disable-next-line max-len + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types + options: any, + callback: (_: MediaEditorFabricIText) => unknown + ): MediaEditorFabricIText { + const result = new MediaEditorFabricIText(options.text, options); + callback(result); + return result; + } +} + +MediaEditorFabricIText.prototype.type = 'MediaEditorFabricIText'; +MediaEditorFabricIText.prototype.lockScalingFlip = true; +MediaEditorFabricIText.prototype.borderColor = '#ffffff'; +MediaEditorFabricIText.prototype.controls = customFabricObjectControls; diff --git a/ts/mediaEditor/MediaEditorFabricPath.ts b/ts/mediaEditor/MediaEditorFabricPath.ts new file mode 100644 index 000000000000..239239a20354 --- /dev/null +++ b/ts/mediaEditor/MediaEditorFabricPath.ts @@ -0,0 +1,29 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { fabric } from 'fabric'; +import { customFabricObjectControls } from './util/customFabricObjectControls'; + +export class MediaEditorFabricPath extends fabric.Path { + constructor( + path?: string | Array, + options?: fabric.IPathOptions + ) { + super(path, { fill: undefined, lockScalingFlip: true, ...(options || {}) }); + } + + static override fromObject( + // eslint-disable-next-line max-len + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types + options: any, + callback: (_: MediaEditorFabricPath) => unknown + ): MediaEditorFabricPath { + const result = new MediaEditorFabricPath(options.path, options); + callback(result); + return result; + } +} + +MediaEditorFabricPath.prototype.type = 'MediaEditorFabricPath'; +MediaEditorFabricPath.prototype.borderColor = '#ffffff'; +MediaEditorFabricPath.prototype.controls = customFabricObjectControls; diff --git a/ts/mediaEditor/MediaEditorFabricPencilBrush.ts b/ts/mediaEditor/MediaEditorFabricPencilBrush.ts new file mode 100644 index 000000000000..7caa5f7ed9be --- /dev/null +++ b/ts/mediaEditor/MediaEditorFabricPencilBrush.ts @@ -0,0 +1,23 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { fabric } from 'fabric'; +import { MediaEditorFabricPath } from './MediaEditorFabricPath'; + +export class MediaEditorFabricPencilBrush extends fabric.PencilBrush { + public strokeMiterLimit: undefined | number; + + override createPath( + pathData?: string | Array + ): MediaEditorFabricPath { + return new MediaEditorFabricPath(pathData, { + fill: undefined, + stroke: this.color, + strokeWidth: this.width, + strokeLineCap: this.strokeLineCap, + strokeMiterLimit: this.strokeMiterLimit, + strokeLineJoin: this.strokeLineJoin, + strokeDashArray: this.strokeDashArray, + }); + } +} diff --git a/ts/mediaEditor/MediaEditorFabricSticker.ts b/ts/mediaEditor/MediaEditorFabricSticker.ts new file mode 100644 index 000000000000..b5b4423064f8 --- /dev/null +++ b/ts/mediaEditor/MediaEditorFabricSticker.ts @@ -0,0 +1,36 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { fabric } from 'fabric'; +import { customFabricObjectControls } from './util/customFabricObjectControls'; + +export class MediaEditorFabricSticker extends fabric.Image { + constructor( + element: string | HTMLImageElement | HTMLVideoElement, + options: fabric.IImageOptions = {} + ) { + // Fabric seems to have issues when passed a string, but not an Image. + let normalizedElement: undefined | HTMLImageElement | HTMLVideoElement; + if (typeof element === 'string') { + normalizedElement = new Image(); + normalizedElement.src = element; + } else { + normalizedElement = element; + } + + super(normalizedElement, options); + } + + static fromObject( + // eslint-disable-next-line max-len + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types + options: any, + callback: (_: MediaEditorFabricSticker) => unknown + ): void { + callback(new MediaEditorFabricSticker(options.src, options)); + } +} + +MediaEditorFabricSticker.prototype.type = 'MediaEditorFabricSticker'; +MediaEditorFabricSticker.prototype.borderColor = '#ffffff'; +MediaEditorFabricSticker.prototype.controls = customFabricObjectControls; diff --git a/ts/mediaEditor/useFabricHistory.ts b/ts/mediaEditor/useFabricHistory.ts new file mode 100644 index 000000000000..65380c6dce0e --- /dev/null +++ b/ts/mediaEditor/useFabricHistory.ts @@ -0,0 +1,152 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { useEffect, useState } from 'react'; +import { fabric } from 'fabric'; +import EventEmitter from 'events'; + +import type { ImageStateType } from './ImageStateType'; +import { MediaEditorFabricIText } from './MediaEditorFabricIText'; +import { MediaEditorFabricPath } from './MediaEditorFabricPath'; +import { MediaEditorFabricSticker } from './MediaEditorFabricSticker'; + +export function useFabricHistory( + canvas: fabric.Canvas | undefined +): FabricHistory | undefined { + const [history, setHistory] = useState(); + + // We need this type of precision so that when serializing/deserializing + // the floats don't get rounded off and we maintain proper image state. + // http://fabricjs.com/fabric-gotchas + fabric.Object.NUM_FRACTION_DIGITS = 16; + + // Attach our custom classes to the global Fabric instance. Unfortunately, Fabric + // doesn't make it easy to deserialize into a custom class without polluting the + // global namespace. See . + Object.assign(fabric, { + MediaEditorFabricIText, + MediaEditorFabricPath, + MediaEditorFabricSticker, + }); + + useEffect(() => { + if (canvas) { + const fabricHistory = new FabricHistory(canvas); + setHistory(fabricHistory); + } + }, [canvas]); + + return history; +} + +const LIMIT = 1000; + +type SnapshotStateType = { + canvasState: string; + imageState?: ImageStateType; +}; + +export class FabricHistory extends EventEmitter { + private readonly canvas: fabric.Canvas; + + private highWatermark: number; + private isTimeTraveling: boolean; + private snapshots: Array; + + constructor(canvas: fabric.Canvas) { + super(); + + this.canvas = canvas; + this.highWatermark = 0; + this.isTimeTraveling = false; + this.snapshots = []; + + this.canvas.on('object:added', this.onObjectModified.bind(this)); + this.canvas.on('object:modified', this.onObjectModified.bind(this)); + this.canvas.on('object:removed', this.onObjectModified.bind(this)); + } + + private applyState({ canvasState, imageState }: SnapshotStateType): void { + this.canvas.loadFromJSON(canvasState, () => { + this.emit('appliedState', imageState); + this.emit('historyChanged'); + this.isTimeTraveling = false; + }); + } + + private getState(): string { + return JSON.stringify(this.canvas.toDatalessJSON()); + } + + private onObjectModified({ target }: fabric.IEvent): void { + if (target?.excludeFromExport) { + return; + } + + this.takeSnapshot(); + } + + private getUndoState(): SnapshotStateType | undefined { + if (!this.canUndo()) { + return; + } + + this.highWatermark -= 1; + return this.snapshots[this.highWatermark]; + } + + private getRedoState(): SnapshotStateType | undefined { + if (this.canRedo()) { + this.highWatermark += 1; + } + + return this.snapshots[this.highWatermark]; + } + + public takeSnapshot(imageState?: ImageStateType): void { + if (this.isTimeTraveling) { + return; + } + + if (this.canRedo()) { + this.snapshots.splice(this.highWatermark, this.snapshots.length); + } + + this.snapshots.push({ canvasState: this.getState(), imageState }); + if (this.snapshots.length > LIMIT) { + this.snapshots.shift(); + } + this.highWatermark = this.snapshots.length - 1; + this.emit('historyChanged'); + } + + public undo(): void { + const undoState = this.getUndoState(); + + if (!undoState) { + return; + } + + this.isTimeTraveling = true; + this.applyState(undoState); + } + + public redo(): void { + const redoState = this.getRedoState(); + + if (!redoState) { + return; + } + + this.isTimeTraveling = true; + this.applyState(redoState); + } + + public canUndo(): boolean { + return this.highWatermark > 0; + } + + public canRedo(): boolean { + return this.highWatermark < this.snapshots.length - 1; + } +} diff --git a/ts/mediaEditor/util/color.ts b/ts/mediaEditor/util/color.ts new file mode 100644 index 000000000000..87b75a2bc065 --- /dev/null +++ b/ts/mediaEditor/util/color.ts @@ -0,0 +1,47 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +function getRatio(min: number, max: number, value: number) { + return (value - min) / (max - min); +} + +function getHSLValues(percentage: number): [number, number, number] { + if (percentage <= 10) { + return [0, 0, 1 - getRatio(0, 10, percentage)]; + } + + if (percentage < 20) { + return [0, 0.5, 0.5 * getRatio(10, 20, percentage)]; + } + + const ratio = getRatio(20, 100, percentage); + + return [360 * ratio, 1, 0.5]; +} + +export function getHSL(percentage: number): string { + const [h, s, l] = getHSLValues(percentage); + return `hsl(${h}, ${s * 100}%, ${l * 100}%)`; +} + +// https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB_alternative +export function getRGBA(percentage: number, alpha = 1): string { + const [h, s, l] = getHSLValues(percentage); + + const a = s * Math.min(l, 1 - l); + + function f(n: number): number { + const k = (n + h / 30) % 12; + return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); + } + + const rgbValue = [ + Math.round(255 * f(0)), + Math.round(255 * f(8)), + Math.round(255 * f(4)), + ] + .map(String) + .join(','); + + return `rgba(${rgbValue},${alpha})`; +} diff --git a/ts/mediaEditor/util/customFabricObjectControls.ts b/ts/mediaEditor/util/customFabricObjectControls.ts new file mode 100644 index 000000000000..cdfa10e676bc --- /dev/null +++ b/ts/mediaEditor/util/customFabricObjectControls.ts @@ -0,0 +1,134 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { fabric } from 'fabric'; + +const resizeControl = new fabric.Control({ + actionHandler: fabric.controlsUtils.scalingEqually, + cursorStyleHandler: () => 'se-resize', + render: (ctx: CanvasRenderingContext2D, left: number, top: number) => { + // circle + const size = 9; + ctx.save(); + ctx.fillStyle = '#fff'; + ctx.strokeStyle = '#fff'; + ctx.lineWidth = 1; + ctx.beginPath(); + ctx.arc(left, top, size, 0, 2 * Math.PI, false); + ctx.fill(); + + // arrows NW & SE + const arrowSize = 4; + ctx.fillStyle = '#3b3b3b'; + ctx.strokeStyle = '#3b3b3b'; + ctx.beginPath(); + + // SE + ctx.moveTo(left + 0.5, top + 0.5); + ctx.lineTo(left + arrowSize, top + arrowSize); + ctx.moveTo(left + arrowSize, top + 1); + ctx.lineTo(left + arrowSize, top + arrowSize); + ctx.lineTo(left + 1, top + arrowSize); + + // NW + ctx.moveTo(left - 0.5, top - 0.5); + ctx.lineTo(left - arrowSize, top - arrowSize); + ctx.moveTo(left - arrowSize, top - 1); + ctx.lineTo(left - arrowSize, top - arrowSize); + ctx.lineTo(left - 1, top - arrowSize); + + ctx.stroke(); + ctx.restore(); + }, + x: 0.5, + y: 0.5, +}); + +const rotateControl = new fabric.Control({ + actionHandler: fabric.controlsUtils.rotationWithSnapping, + actionName: 'rotate', + cursorStyleHandler: fabric.controlsUtils.rotationStyleHandler, + offsetY: -40, + render( + ctx: CanvasRenderingContext2D, + left: number, + top: number, + _, + target: fabric.Object + ) { + const size = 5; + ctx.save(); + + ctx.fillStyle = '#fff'; + ctx.strokeStyle = '#fff'; + + // connecting line + ctx.beginPath(); + ctx.moveTo(left, top); + const radians = 0 - ((target.angle || 0) * Math.PI) / 180; + const targetLeft = 40 * Math.sin(radians); + const targetTop = 40 * Math.cos(radians); + ctx.lineTo(left + targetLeft, top + targetTop); + ctx.stroke(); + + // circle + ctx.beginPath(); + ctx.moveTo(left, top); + ctx.arc(left, top, size, 0, 2 * Math.PI, false); + ctx.fill(); + + ctx.restore(); + }, + withConnection: false, + x: 0, + y: -0.5, +}); + +const deleteControl = new fabric.Control({ + cursorStyleHandler: () => 'pointer', + // This is lifted from . + mouseUpHandler: (_eventData, { target }) => { + if (!target.canvas) { + return false; + } + target.canvas.remove(target); + return true; + }, + render: (ctx: CanvasRenderingContext2D, left: number, top: number) => { + // circle + const size = 9; + ctx.save(); + ctx.fillStyle = '#000'; + ctx.strokeStyle = '#000'; + ctx.lineWidth = 1; + ctx.beginPath(); + ctx.arc(left, top, size, 0, 2 * Math.PI, false); + ctx.fill(); + + // x + const xSize = 3; + ctx.fillStyle = '#fff'; + ctx.strokeStyle = '#fff'; + ctx.beginPath(); + const topLeft = new fabric.Point(left - xSize, top - xSize); + const topRight = new fabric.Point(left + xSize, top - xSize); + const bottomRight = new fabric.Point(left + xSize, top + xSize); + const bottomLeft = new fabric.Point(left - xSize, top + xSize); + + ctx.moveTo(topLeft.x, topLeft.y); + ctx.lineTo(bottomRight.x, bottomRight.y); + ctx.moveTo(topRight.x, topRight.y); + ctx.lineTo(bottomLeft.x, bottomLeft.y); + ctx.stroke(); + + ctx.restore(); + }, + x: -0.5, + y: -0.5, +}); + +export const customFabricObjectControls = { + br: resizeControl, + mtr: rotateControl, + tl: deleteControl, +}; diff --git a/ts/mediaEditor/util/getTextStyleAttributes.ts b/ts/mediaEditor/util/getTextStyleAttributes.ts new file mode 100644 index 000000000000..e33859b4d261 --- /dev/null +++ b/ts/mediaEditor/util/getTextStyleAttributes.ts @@ -0,0 +1,44 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import * as log from '../../logging/log'; +import { getHSL } from './color'; +import { missingCaseError } from '../../util/missingCaseError'; + +export enum TextStyle { + Regular = 'Regular', + Highlight = 'Highlight', + Outline = 'Outline', +} + +export function getTextStyleAttributes( + textStyle: TextStyle, + hueSliderValue: number +): { + fill: string; + stroke?: string; + strokeWidth: number; + textBackgroundColor: string; +} { + const color = getHSL(hueSliderValue); + switch (textStyle) { + case TextStyle.Regular: + return { fill: color, strokeWidth: 0, textBackgroundColor: '' }; + case TextStyle.Highlight: + return { + fill: hueSliderValue <= 5 ? '#000' : '#fff', + strokeWidth: 0, + textBackgroundColor: color, + }; + case TextStyle.Outline: + return { + fill: hueSliderValue <= 5 ? '#000' : '#fff', + stroke: color, + strokeWidth: 2, + textBackgroundColor: '', + }; + default: + log.error(missingCaseError(textStyle)); + return getTextStyleAttributes(TextStyle.Regular, hueSliderValue); + } +} diff --git a/ts/state/ducks/composer.ts b/ts/state/ducks/composer.ts index cecab51e00a6..b9907c320a42 100644 --- a/ts/state/ducks/composer.ts +++ b/ts/state/ducks/composer.ts @@ -123,9 +123,10 @@ function addAttachment( ? getState().composer.attachments : getAttachmentsFromConversationModel(conversationId); + // We expect there to either be a pending draft attachment or an existing + // attachment that we'll be replacing. const hasDraftAttachmentPending = draftAttachments.some( - draftAttachment => - draftAttachment.pending && draftAttachment.path === attachment.path + draftAttachment => draftAttachment.path === attachment.path ); // User has canceled the draft so we don't need to continue processing diff --git a/ts/test-both/helpers/getStickerPacks.ts b/ts/test-both/helpers/getStickerPacks.ts new file mode 100644 index 000000000000..01bfa6302b86 --- /dev/null +++ b/ts/test-both/helpers/getStickerPacks.ts @@ -0,0 +1,96 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import type { StickerPackType, StickerType } from '../../state/ducks/stickers'; + +export const createPack = ( + props: Partial, + sticker?: StickerType +): StickerPackType => ({ + id: '', + title: props.id ? `${props.id} title` : 'title', + key: '', + author: '', + isBlessed: false, + lastUsed: 0, + status: 'known', + cover: sticker, + stickerCount: 101, + stickers: sticker + ? Array(101) + .fill(0) + .map((_, id) => ({ ...sticker, id })) + : [], + ...props, +}); + +export const Stickers: Record = { + kitten1: { + id: 1, + url: '/fixtures/kitten-1-64-64.jpg', + packId: 'kitten1', + emoji: '', + }, + + kitten2: { + id: 2, + url: '/fixtures/kitten-2-64-64.jpg', + packId: 'kitten2', + emoji: '', + }, + + kitten3: { + id: 3, + url: '/fixtures/kitten-3-64-64.jpg', + packId: 'kitten3', + emoji: '', + }, + + abe: { + id: 4, + url: '/fixtures/512x515-thumbs-up-lincoln.webp', + packId: 'abe', + emoji: '', + }, + + wide: { + id: 5, + url: '/fixtures/1000x50-green.jpeg', + packId: 'wide', + emoji: '', + }, + + tall: { + id: 6, + url: '/fixtures/50x1000-teal.jpeg', + packId: 'tall', + emoji: '', + }, +}; + +export const receivedPacks = [ + createPack({ id: 'abe', status: 'downloaded' }, Stickers.abe), + createPack({ id: 'kitten3', status: 'downloaded' }, Stickers.kitten3), +]; + +export const installedPacks = [ + createPack({ id: 'kitten1', status: 'installed' }, Stickers.kitten1), + createPack({ id: 'kitten2', status: 'installed' }, Stickers.kitten2), + createPack({ id: 'kitten3', status: 'installed' }, Stickers.kitten3), +]; + +export const blessedPacks = [ + createPack( + { id: 'wide', status: 'downloaded', isBlessed: true }, + Stickers.wide + ), + createPack( + { id: 'tall', status: 'downloaded', isBlessed: true }, + Stickers.tall + ), +]; + +export const knownPacks = [ + createPack({ id: 'kitten1', status: 'known' }, Stickers.kitten1), + createPack({ id: 'kitten2', status: 'known' }, Stickers.kitten2), +]; diff --git a/ts/util/canEditImages.ts b/ts/util/canEditImages.ts new file mode 100644 index 000000000000..142afa0478e4 --- /dev/null +++ b/ts/util/canEditImages.ts @@ -0,0 +1,17 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only + +import { isEnabled } from '../RemoteConfig'; +import { getEnvironment, Environment } from '../environment'; +import { isBeta } from './version'; + +export function canEditImages(): boolean { + return ( + isEnabled('desktop.internalUser') || + getEnvironment() === Environment.Staging || + getEnvironment() === Environment.Development || + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Boolean((window as any).STORYBOOK_ENV) || + isBeta(window.getVersion()) + ); +} diff --git a/ts/util/lint/exceptions.json b/ts/util/lint/exceptions.json index 4c53537ac5da..83b11841711b 100644 --- a/ts/util/lint/exceptions.json +++ b/ts/util/lint/exceptions.json @@ -162,6 +162,104 @@ "reasonCategory": "falseMatch", "updated": "2021-04-05T20:48:36.065Z" }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.es.js", + "line": "\t\t\t\t\tthis.append(headerName, value);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.es.js", + "line": "\t\t// We don't worry about converting prop to ByteString here as append()", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.es.js", + "line": "\t\t\t\t\tthis.append(pair[0], pair[1]);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.es.js", + "line": "\t\t\t\t\tthis.append(key, value);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.es.js", + "line": "\tappend(name, value) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.es.js", + "line": "\t\t\t\theaders.append('Content-Type', contentType);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.es.js", + "line": "\t\t\t\theaders.append('Content-Type', contentType);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.js", + "line": "\t\t\t\t\tthis.append(headerName, value);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.js", + "line": "\t\t// We don't worry about converting prop to ByteString here as append()", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.js", + "line": "\t\t\t\t\tthis.append(pair[0], pair[1]);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.js", + "line": "\t\t\t\t\tthis.append(key, value);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.js", + "line": "\tappend(name, value) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.js", + "line": "\t\t\t\theaders.append('Content-Type', contentType);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch/lib/index.js", + "line": "\t\t\t\theaders.append('Content-Type', contentType);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, { "rule": "eval", "path": "node_modules/@protobufjs/inquire/index.js", @@ -540,6 +638,13 @@ "reasonCategory": "falseMatch", "updated": "2019-07-31T00:19:18.696Z" }, + { + "rule": "jQuery-$(", + "path": "node_modules/acorn-globals/node_modules/acorn/dist/acorn.js", + "line": " // $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, { "rule": "jQuery-$(", "path": "node_modules/acorn/dist/acorn.js", @@ -1449,6 +1554,12 @@ "reasonCategory": "falseMatch|", "updated": "2020-04-30T22:35:27.860Z" }, + { + "rule": "jQuery-$(", + "path": "node_modules/fabric/dist/fabric.min.js", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, { "rule": "jQuery-load(", "path": "node_modules/file-entry-cache/cache.js", @@ -1743,94 +1854,94 @@ "path": "node_modules/intl-tel-input/build/js/intlTelInput-jquery.js", "line": " this.selectedDialCode.innerHTML = dialCode;", "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "jQuery-insertBefore(", "path": "node_modules/intl-tel-input/build/js/intlTelInput-jquery.js", "line": " this.telInput.parentNode.insertBefore(wrapper, this.telInput);", - "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "jQuery-insertBefore(", "path": "node_modules/intl-tel-input/build/js/intlTelInput-jquery.js", "line": " wrapper.parentNode.insertBefore(this.telInput, wrapper);", - "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "DOM-innerHTML", "path": "node_modules/intl-tel-input/build/js/intlTelInput-jquery.min.js", "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "jQuery-insertBefore(", "path": "node_modules/intl-tel-input/build/js/intlTelInput-jquery.min.js", - "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "DOM-innerHTML", "path": "node_modules/intl-tel-input/build/js/intlTelInput.js", "line": " this.selectedDialCode.innerHTML = dialCode;", "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "jQuery-insertBefore(", "path": "node_modules/intl-tel-input/build/js/intlTelInput.js", "line": " this.telInput.parentNode.insertBefore(wrapper, this.telInput);", - "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "jQuery-insertBefore(", "path": "node_modules/intl-tel-input/build/js/intlTelInput.js", "line": " wrapper.parentNode.insertBefore(this.telInput, wrapper);", - "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "DOM-innerHTML", "path": "node_modules/intl-tel-input/build/js/intlTelInput.min.js", "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "jQuery-insertBefore(", "path": "node_modules/intl-tel-input/build/js/intlTelInput.min.js", - "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "DOM-innerHTML", "path": "node_modules/intl-tel-input/src/js/intlTelInput.js", "line": " this.selectedDialCode.innerHTML = dialCode;", "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "jQuery-insertBefore(", "path": "node_modules/intl-tel-input/src/js/intlTelInput.js", "line": " this.telInput.parentNode.insertBefore(wrapper, this.telInput);", - "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "jQuery-insertBefore(", "path": "node_modules/intl-tel-input/src/js/intlTelInput.js", "line": " wrapper.parentNode.insertBefore(this.telInput, wrapper);", - "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "jQuery-$(", "path": "node_modules/intl-tel-input/src/spec/helpers/helpers.js", "line": " $(\"script.iti-load-utils\").remove();", - "reasonCategory": "usageTrusted", - "updated": "2021-11-24T20:55:14.943Z" + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "DOM-document.write(", @@ -1985,6 +2096,643 @@ "reasonCategory": "falseMatch", "updated": "2019-06-19T20:42:32.133Z" }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/api.js", + "line": " template.innerHTML = string;", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/browser/Window.js", + "line": " this._document.body.innerHTML = \"\";", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/jsdom/lib/jsdom/browser/parser/html.js", + "line": " insertBefore(parentNode, newNode, referenceNode) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-outerHTML", + "path": "node_modules/jsdom/lib/jsdom/level3/xpath.js", + "line": " if (null != ctx.outerHTML) return ctx.outerHTML;", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/fetch/Headers-impl.js", + "line": " this.append(header[0], header[1]);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/fetch/Headers-impl.js", + "line": " this.append(key, init[key]);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/fetch/Headers-impl.js", + "line": " append(name, value) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/fetch/Headers-impl.js", + "line": " this.headersList.append(name, value);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/fetch/header-list.js", + "line": " append(name, value) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-after(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/CharacterData.js", + "line": " after() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-after(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/CharacterData.js", + "line": " return this[impl].after(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-before(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/CharacterData.js", + "line": " before() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-before(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/CharacterData.js", + "line": " return this[impl].before(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Document.js", + "line": " append() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Document.js", + "line": " return this[impl].append(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-prepend(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Document.js", + "line": " prepend() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-prepend(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Document.js", + "line": " return this[impl].prepend(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/DocumentFragment.js", + "line": " append() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/DocumentFragment.js", + "line": " return this[impl].append(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-prepend(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/DocumentFragment.js", + "line": " prepend() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-prepend(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/DocumentFragment.js", + "line": " return this[impl].prepend(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-after(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/DocumentType.js", + "line": " after() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-after(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/DocumentType.js", + "line": " return this[impl].after(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-before(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/DocumentType.js", + "line": " before() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-before(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/DocumentType.js", + "line": " return this[impl].before(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " get innerHTML() {", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " return this[impl][\"innerHTML\"];", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " set innerHTML(V) {", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " context: \"Failed to set the 'innerHTML' property on 'Element': The provided value\",", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " this[impl][\"innerHTML\"] = V;", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " innerHTML: { enumerable: true },", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-outerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " get outerHTML() {", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-outerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " return this[impl][\"outerHTML\"];", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-outerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " set outerHTML(V) {", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-outerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " context: \"Failed to set the 'outerHTML' property on 'Element': The provided value\",", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-outerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " this[impl][\"outerHTML\"] = V;", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-outerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " outerHTML: { enumerable: true },", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-after(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " after() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-after(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " return this[impl].after(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " append() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " return this[impl].append(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-before(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " before() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-before(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " return this[impl].before(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-prepend(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " prepend() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-prepend(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Element.js", + "line": " return this[impl].prepend(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/FormData.js", + "line": " append(name, value) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/FormData.js", + "line": " return this[impl].append(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-load(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/HTMLMediaElement.js", + "line": " load() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-load(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/HTMLMediaElement.js", + "line": " return this[impl].load();", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-wrap(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/HTMLTextAreaElement.js", + "line": " get wrap() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-wrap(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/HTMLTextAreaElement.js", + "line": " set wrap(V) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Headers.js", + "line": " append(name, value) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Headers.js", + "line": " return this[impl].append(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Node.js", + "line": " insertBefore(node, child) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/jsdom/lib/jsdom/living/generated/Node.js", + "line": " return utils.tryWrapperForImpl(this[impl].insertBefore(...args));", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/ShadowRoot.js", + "line": " get innerHTML() {", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/ShadowRoot.js", + "line": " return this[impl][\"innerHTML\"];", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/ShadowRoot.js", + "line": " set innerHTML(V) {", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/ShadowRoot.js", + "line": " context: \"Failed to set the 'innerHTML' property on 'ShadowRoot': The provided value\",", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/ShadowRoot.js", + "line": " this[impl][\"innerHTML\"] = V;", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/generated/ShadowRoot.js", + "line": " innerHTML: { enumerable: true },", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/helpers/ordered-set.js", + "line": " append(item) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/helpers/ordered-set.js", + "line": " tokens.append(token);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-prepend(", + "path": "node_modules/jsdom/lib/jsdom/living/helpers/ordered-set.js", + "line": " prepend(item) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-after(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/ChildNode-impl.js", + "line": " after(...nodes) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-before(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/ChildNode-impl.js", + "line": " before(...nodes) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/DOMTokenList-impl.js", + "line": " this._tokenSet.append(token);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/DOMTokenList-impl.js", + "line": " this._tokenSet.append(token);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/Document-impl.js", + "line": " tempDiv.innerHTML = text;", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/Document-impl.js", + "line": " node.innerHTML = text;", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/Document-impl.js", + "line": " parent.insertBefore(node, previous.nextSibling);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/Element-impl.js", + "line": " get innerHTML() {", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/Element-impl.js", + "line": " set innerHTML(markup) {", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-outerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/Element-impl.js", + "line": " get outerHTML() {", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-outerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/Element-impl.js", + "line": " set outerHTML(markup) {", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-load(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/HTMLMediaElement-impl.js", + "line": " load() {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-document.write(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/HTMLScriptElement-impl.js", + "line": " // In our current terribly-hacky document.write() implementation, we parse in a div them move elements into the main", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableElement-impl.js", + "line": " this.insertBefore(value, insertionPoint);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableElement-impl.js", + "line": " this.insertBefore(value, insertionPoint);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableElement-impl.js", + "line": " this.insertBefore(el, insertionPoint.nextSibling);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableElement-impl.js", + "line": " tSection.insertBefore(tr, beforeTR);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js", + "line": " insertBefore(nodeImpl, childImpl) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js", + "line": " domSymbolTree.insertBefore(childImpl, node);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/ParentNode-impl.js", + "line": " append(...nodes) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-prepend(", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/ParentNode-impl.js", + "line": " prepend(...nodes) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/ShadowRoot-impl.js", + "line": " get innerHTML() {", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/jsdom/lib/jsdom/living/nodes/ShadowRoot-impl.js", + "line": " set innerHTML(markup) {", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "eval", + "path": "node_modules/jsdom/lib/jsdom/living/window/navigation.js", + "line": " return window.eval(scriptSource);", + "reasonCategory": "notExercisedByOurApp", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/xhr-utils.js", + "line": " form.append(entry.name, entry.value, entry.options);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/jsdom/lib/jsdom/living/xhr/FormData-impl.js", + "line": " append(name, value, filename) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-$(", + "path": "node_modules/jsdom/node_modules/acorn/dist/acorn.js", + "line": " // $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, { "rule": "jQuery-$(", "path": "node_modules/lazy-universal-dotenv/node_modules/core-js/internals/collection.js", @@ -4739,6 +5487,13 @@ "reasonCategory": "falseMatch", "updated": "2019-07-19T17:16:02.404Z" }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/nwsapi/src/nwsapi.js", + "line": " r = d.documentElement; r.removeChild(r.insertBefore(s, r.firstChild));", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, { "rule": "DOM-innerHTML", "path": "node_modules/package-json/node_modules/@sindresorhus/is/dist/index.js", @@ -5089,6 +5844,34 @@ "reasonCategory": "falseMatch", "updated": "2018-09-19T18:13:29.628Z" }, + { + "rule": "jQuery-insertAfter(", + "path": "node_modules/parse5/lib/parser/index.js", + "line": " p.openElements.insertAfter(furthestBlock, newElement);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/parse5/lib/parser/index.js", + "line": " this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertAfter(", + "path": "node_modules/parse5/lib/parser/open-element-stack.js", + "line": " insertAfter(referenceElement, newElement) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/parse5/lib/tree-adapters/default.js", + "line": " insertBefore(parentNode, createTextNode(text), referenceNode);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, { "rule": "jQuery-append(", "path": "node_modules/picomatch/lib/parse.js", @@ -5101,21 +5884,21 @@ "path": "node_modules/picomatch/lib/parse.js", "line": " append({ value });", "reasonCategory": "falseMatch", - "updated": "2020-02-21T14:09:28.005Z" + "updated": "2021-04-06T04:01:59.934Z" }, { "rule": "jQuery-append(", "path": "node_modules/picomatch/lib/parse.js", "line": " append({ value });", "reasonCategory": "falseMatch", - "updated": "2020-02-21T14:09:28.005Z" + "updated": "2021-12-01T01:35:52.592Z" }, { "rule": "jQuery-append(", "path": "node_modules/picomatch/lib/parse.js", "line": " append({ value });", "reasonCategory": "falseMatch", - "updated": "2020-02-21T14:09:28.005Z" + "updated": "2021-12-01T01:35:52.592Z" }, { "rule": "thenify-multiArgs", @@ -5552,13 +6335,6 @@ "reasonCategory": "falseMatch", "updated": "2021-04-06T04:01:59.934Z" }, - { - "rule": "DOM-innerHTML", - "path": "node_modules/playwright/lib/third_party/highlightjs/highlightjs/core.js", - "line": " domProps: { innerHTML: this.highlighted }", - "reasonCategory": "falseMatch", - "updated": "2021-04-06T04:01:59.934Z" - }, { "rule": "DOM-innerHTML", "path": "node_modules/playwright/lib/third_party/highlightjs/highlightjs/core.js", @@ -5580,6 +6356,13 @@ "reasonCategory": "falseMatch", "updated": "2021-04-06T04:01:59.934Z" }, + { + "rule": "DOM-innerHTML", + "path": "node_modules/playwright/lib/third_party/highlightjs/highlightjs/core.js", + "line": " domProps: { innerHTML: this.highlighted }", + "reasonCategory": "usageTrusted", + "updated": "2021-12-01T01:31:12.757Z" + }, { "rule": "jQuery-$(", "path": "node_modules/playwright/lib/third_party/highlightjs/highlightjs/languages/javascript.js", @@ -7570,7 +8353,7 @@ { "rule": "DOM-innerHTML", "path": "node_modules/quill/modules/clipboard.js", - "line": " debug.log('convert', this.container.innerHTML, delta);", + "line": " this.container.innerHTML = '';", "reasonCategory": "usageTrusted", "updated": "2020-10-13T18:36:57.012Z", "reasonDetail": "necessary for quill" @@ -7578,10 +8361,9 @@ { "rule": "DOM-innerHTML", "path": "node_modules/quill/modules/clipboard.js", - "line": " this.container.innerHTML = '';", + "line": " debug.log('convert', this.container.innerHTML, delta);", "reasonCategory": "usageTrusted", - "updated": "2020-10-13T18:36:57.012Z", - "reasonDetail": "necessary for quill" + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "DOM-innerHTML", @@ -7941,7 +8723,7 @@ "rule": "jQuery-prepend(", "path": "node_modules/source-map/dist/source-map.min.js", "reasonCategory": "falseMatch", - "updated": "2018-09-19T18:13:29.628Z" + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "jQuery-prepend(", @@ -7978,6 +8760,34 @@ "reasonCategory": "falseMatch", "updated": "2020-04-25T01:47:02.583Z" }, + { + "rule": "jQuery-insertAfter(", + "path": "node_modules/symbol-tree/lib/SymbolTree.js", + "line": " insertAfter(referenceObject, newObject) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertAfter(", + "path": "node_modules/symbol-tree/lib/SymbolTree.js", + "line": " this.insertAfter(referenceNode.lastChild, newObject);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/symbol-tree/lib/SymbolTree.js", + "line": " insertBefore(referenceObject, newObject) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-insertBefore(", + "path": "node_modules/symbol-tree/lib/SymbolTree.js", + "line": " this.insertBefore(referenceNode.firstChild, newObject);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, { "rule": "jQuery-append(", "path": "node_modules/table/dist/createStream.js", @@ -8319,6 +9129,27 @@ "reasonCategory": "falseMatch", "updated": "2018-09-19T18:13:29.628Z" }, + { + "rule": "jQuery-append(", + "path": "node_modules/whatwg-url/lib/URLSearchParams-impl.js", + "line": " append(name, value) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/whatwg-url/lib/URLSearchParams.js", + "line": " append(name, value) {", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, + { + "rule": "jQuery-append(", + "path": "node_modules/whatwg-url/lib/URLSearchParams.js", + "line": " return this[impl].append(...args);", + "reasonCategory": "falseMatch", + "updated": "2021-12-01T01:13:59.892Z" + }, { "rule": "eval", "path": "node_modules/workerpool/dist/worker.js", @@ -8560,7 +9391,7 @@ "path": "ts/components/CallScreen.tsx", "line": " const localVideoRef = useRef(null);", "reasonCategory": "usageTrusted", - "updated": "2021-07-30T16:57:33.618Z" + "updated": "2021-12-01T01:31:12.757Z" }, { "rule": "React-useRef", @@ -8941,6 +9772,13 @@ "updated": "2020-02-14T20:02:37.507Z", "reasonDetail": "Used only to set focus" }, + { + "rule": "React-useRef", + "path": "ts/components/MediaEditor.tsx", + "line": " const isRestoringImageState = useRef(false);", + "reasonCategory": "usageTrusted", + "updated": "2021-12-01T01:13:59.892Z" + }, { "rule": "React-useRef", "path": "ts/components/Modal.tsx", diff --git a/yarn.lock b/yarn.lock index 5b7a2d3a98a3..059b76a30334 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1705,6 +1705,21 @@ lodash "^4.17.15" tmp-promise "^3.0.2" +"@mapbox/node-pre-gyp@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz#2a0b32fcb416fb3f2250fd24cb2a81421a4f5950" + integrity sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA== + dependencies: + detect-libc "^1.0.3" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.1" + nopt "^5.0.0" + npmlog "^4.1.2" + rimraf "^3.0.2" + semver "^7.3.4" + tar "^6.1.0" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -2499,6 +2514,11 @@ "@types/express-serve-static-core" "*" "@types/serve-static" "*" +"@types/fabric@4.5.3": + version "4.5.3" + resolved "https://registry.yarnpkg.com/@types/fabric/-/fabric-4.5.3.tgz#f4f2e1168d086a7ffe12e5cea4193d0cd6a526f7" + integrity sha512-DCneYSkuVdGYpFbDQ2j5zT7DDdAiOlAPfSjS3PsVWHFt6f/DapCdV0ansPq3Ai5oe+j6BgFhdkh+DWne1yQMdw== + "@types/filesize@3.6.0": version "3.6.0" resolved "https://registry.yarnpkg.com/@types/filesize/-/filesize-3.6.0.tgz#5f1a25c7b4e3d5ee2bc63133d374d096b7008c8d" @@ -3471,6 +3491,11 @@ resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== +abab@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + abbrev@1: version "1.1.0" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" @@ -3497,16 +3522,39 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +acorn-globals@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + acorn-jsx@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn@^6.0.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + acorn@^6.2.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== +acorn@^7.1.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + acorn@^7.4.0: version "7.4.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" @@ -3871,6 +3919,11 @@ array-each@^1.0.1: resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + array-filter@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" @@ -4870,6 +4923,11 @@ brorand@^1.0.1, brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" @@ -5228,6 +5286,15 @@ caniuse-lite@^1.0.30001181: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz#364d47d35a3007e528f69adb6fecb07c2bb2cc50" integrity sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw== +canvas@^2.6.1: + version "2.8.0" + resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.8.0.tgz#f99ca7f25e6e26686661ffa4fec1239bbef74461" + integrity sha512-gLTi17X8WY9Cf5GZ2Yns8T5lfBOcGgFehDFb+JQwDqdOoBOcECS9ZWMEAqMSVcMYwXD659J8NyzjRY/2aE+C2Q== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.0" + nan "^2.14.0" + simple-get "^3.0.3" + case-sensitive-paths-webpack-plugin@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz#3371ef6365ef9c25fa4b81c16ace0e9c7dc58c3e" @@ -6307,6 +6374,23 @@ csso@^3.5.1: dependencies: css-tree "1.0.0-alpha.29" +cssom@^0.4.1: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + csstype@^2.2.0: version "2.6.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.2.tgz#3043d5e065454579afc7478a18de41909c8a2f01" @@ -6351,6 +6435,15 @@ data-uri-to-buffer@3: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== +data-urls@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -6805,6 +6898,13 @@ domelementtype@^2.0.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + domhandler@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" @@ -7386,7 +7486,7 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^1.8.1: +escodegen@^1.11.1, escodegen@^1.8.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== @@ -7972,6 +8072,14 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= +fabric@4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/fabric/-/fabric-4.6.0.tgz#bd11c2baf165db2c97e4d05740d931586cb26bbb" + integrity sha512-MhJXCD/ZugOGV5aPHIG0MY1q2EfrlzC2sasrAHj0HHXN50JTe1bHFrlRdkXBijCJ0dG81fGu/A/Pct9DyuwCzQ== + optionalDependencies: + canvas "^2.6.1" + jsdom "^15.2.1" + fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" @@ -9569,6 +9677,13 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + html-entities@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" @@ -10767,6 +10882,38 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsdom@^15.2.1: + version "15.2.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" + integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== + dependencies: + abab "^2.0.0" + acorn "^7.1.0" + acorn-globals "^4.3.2" + array-equal "^1.0.0" + cssom "^0.4.1" + cssstyle "^2.0.0" + data-urls "^1.1.0" + domexception "^1.0.1" + escodegen "^1.11.1" + html-encoding-sniffer "^1.0.2" + nwsapi "^2.2.0" + parse5 "5.1.0" + pn "^1.1.0" + request "^2.88.0" + request-promise-native "^1.0.7" + saxes "^3.1.9" + symbol-tree "^3.2.2" + tough-cookie "^3.0.1" + w3c-hr-time "^1.0.1" + w3c-xmlserializer "^1.1.2" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^7.0.0" + ws "^7.0.0" + xml-name-validator "^3.0.0" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -11206,6 +11353,11 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" @@ -11359,6 +11511,13 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + make-error@^1.1.1: version "1.3.5" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" @@ -12050,6 +12209,11 @@ nan@^2.12.1, nan@^2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== +nan@^2.14.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + nanoid@3.1.20: version "3.1.20" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" @@ -12186,6 +12350,13 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" +node-fetch@^2.6.1: + version "2.6.5" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.5.tgz#42735537d7f080a7e5f78b6c549b7146be1742fd" + integrity sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ== + dependencies: + whatwg-url "^5.0.0" + node-forge@0.10.0, node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" @@ -12496,6 +12667,11 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + nyc@11.4.1: version "11.4.1" resolved "https://registry.yarnpkg.com/nyc/-/nyc-11.4.1.tgz#13fdf7e7ef22d027c61d174758f6978a68f4f5e5" @@ -13099,6 +13275,11 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== + parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -13392,6 +13573,11 @@ plist@^3.0.1: xmlbuilder "^9.0.7" xmldom "^0.5.0" +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + pngjs@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" @@ -14957,6 +15143,22 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + request@^2.45.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" @@ -15368,6 +15570,13 @@ sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" +saxes@^3.1.9: + version "3.1.11" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" + integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== + dependencies: + xmlchars "^2.1.1" + scheduler@^0.13.3: version "0.13.3" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.3.tgz#bed3c5850f62ea9c716a4d781f9daeb9b2a58896" @@ -16149,6 +16358,11 @@ stdout-stream@^1.4.0: dependencies: readable-stream "^2.0.1" +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + store2@^2.7.1: version "2.8.0" resolved "https://registry.yarnpkg.com/store2/-/store2-2.8.0.tgz#032d5dcbd185a5d74049d67a1765ff1e75faa04b" @@ -16513,6 +16727,11 @@ symbol-observable@^1.0.3, symbol-observable@^1.0.4, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + symbol.prototype.description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.0.tgz#6e355660eb1e44ca8ad53a68fdb72ef131ca4b12" @@ -16877,6 +17096,23 @@ touch@^2.0.1: dependencies: nopt "~1.0.10" +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + tough-cookie@~2.3.0: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" @@ -16891,13 +17127,17 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= dependencies: - psl "^1.1.28" - punycode "^2.1.1" + punycode "^2.1.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= trim-newlines@^1.0.0: version "1.0.0" @@ -17450,6 +17690,22 @@ vm2@^3.9.3: resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.5.tgz#5288044860b4bbace443101fcd3bddb2a0aa2496" integrity sha512-LuCAHZN75H9tdrAiLFf030oW7nJV5xwNMuk1ymOZwopmuK3d2H4L1Kv4+GFHgarKiLfXXLFU+7LDABHnwOkWng== +w3c-hr-time@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" + integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== + dependencies: + domexception "^1.0.1" + webidl-conversions "^4.0.2" + xml-name-validator "^3.0.0" + warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" @@ -17518,6 +17774,16 @@ webdriverio@^4.13.0: wdio-dot-reporter "~0.0.8" wgxpath "~1.0.0" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + webpack-cli@4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.6.0.tgz#27ae86bfaec0cf393fcfd58abdc5a229ad32fd16" @@ -17742,10 +18008,39 @@ wgxpath@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wgxpath/-/wgxpath-1.0.0.tgz#eef8a4b9d558cc495ad3a9a2b751597ecd9af690" +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" +whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -17905,6 +18200,11 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" +ws@^7.0.0: + version "7.5.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" + integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== + ws@^7.3.1: version "7.4.4" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" @@ -17915,6 +18215,11 @@ xdg-basedir@^4.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + xmlbuilder@>=11.0.1: version "15.1.1" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" @@ -17925,6 +18230,11 @@ xmlbuilder@^9.0.7: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= +xmlchars@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xmldom@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.5.0.tgz#193cb96b84aa3486127ea6272c4596354cb4962e"