From c83bd550b932ad58898e5c6906ca57e75bc6ec12 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 4 May 2025 16:32:22 -0700 Subject: [PATCH 01/56] fix `opts.animate` again fix #3043 --- doc/CHANGES.md | 4 ++++ src/gridstack.ts | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index aa2258e28..57cc265ae 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -126,6 +126,10 @@ Change log +## 12.1.1-dev (TBD) +* fix [#3043](https://github.com/gridstack/gridstack.js/issues/3043) fix `opts.animate` again + + ## 12.1.1 (2024-04-28) * fix [#3038](https://github.com/gridstack/gridstack.js/pull/3038) `updateOptions()` fix opts.minRow being undefined diff --git a/src/gridstack.ts b/src/gridstack.ts index 53b1fddca..2b4007d68 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -23,7 +23,7 @@ import { import { DDGridStack } from './dd-gridstack'; import { isTouch } from './dd-touch'; import { DDManager } from './dd-manager'; -import { DDElementHost } from './dd-element';/** global instance */ +import { DDElementHost } from './dd-element'; /** global instance */ const dd = new DDGridStack; // export all dependent file as well to make it easier for users to just import the main file @@ -704,7 +704,8 @@ export class GridStack { // if we are loading from empty temporarily remove animation const blank = !this.engine.nodes.length; - if (blank) this.setAnimation(false); + const noAnim = blank && this.opts.animate; + if (noAnim) this.setAnimation(false); // see if any items are missing from new layout and need to be removed first if (!blank && addRemove) { @@ -769,8 +770,7 @@ export class GridStack { delete this._ignoreLayoutsNodeChange; delete this.engine.skipCacheUpdate; prevCB ? GridStack.addRemoveCB = prevCB : delete GridStack.addRemoveCB; - // delay adding animation back - if (blank && this.opts?.animate) this.setAnimation(this.opts.animate, true); + if (noAnim) this.setAnimation(true, true); // delay adding animation back return this; } From 1f9d0c01d87004e418eea37d4bcf46698993394c Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 4 May 2025 17:00:19 -0700 Subject: [PATCH 02/56] remove no-op 'cursor: move' CSS * fix #3044 --- doc/CHANGES.md | 1 + src/dd-draggable.ts | 2 +- src/gridstack.scss | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 57cc265ae..1f550f92b 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,6 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* +- [12.1.1-dev (TBD)](#1211-dev-tbd) - [12.1.1 (2024-04-28)](#1211-2024-04-28) - [12.1.0 (2024-04-23)](#1210-2024-04-23) - [12.0.0 (2025-04-12)](#1200-2025-04-12) diff --git a/src/dd-draggable.ts b/src/dd-draggable.ts index 42eee1d19..cfd0d2303 100644 --- a/src/dd-draggable.ts +++ b/src/dd-draggable.ts @@ -312,7 +312,7 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt // TODO: set all at once with style.cssText += ... ? https://stackoverflow.com/questions/3968593 const style = this.helper.style; style.pointerEvents = 'none'; // needed for over items to get enter/leave - // style.cursor = 'move'; // TODO: can't set with pointerEvents=none ! (done in CSS as well) + // style.cursor = 'move'; // TODO: can't set with pointerEvents=none ! (no longer in CSS either as no-op) style.width = this.dragOffset.width + 'px'; style.height = this.dragOffset.height + 'px'; style.willChange = 'left, top'; diff --git a/src/gridstack.scss b/src/gridstack.scss index e2a1ffcf1..868b3fa97 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -118,7 +118,6 @@ $animation_speed: .3s !default; &.ui-draggable-dragging { will-change: left, top; - cursor: move; } &.ui-resizable-resizing { From 059952494394fd4481c53db77d3cdb800c2a4f19 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 7 May 2025 14:15:11 -0700 Subject: [PATCH 03/56] nested grid resizeToContentCBCheck() fix * make sure nested items size they parent item even when in batch mode (eg: load()) otherwise it never happens --- doc/CHANGES.md | 1 + src/gridstack.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 1f550f92b..8e79b1666 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -129,6 +129,7 @@ Change log ## 12.1.1-dev (TBD) * fix [#3043](https://github.com/gridstack/gridstack.js/issues/3043) fix `opts.animate` again +* fix [#3047](https://github.com/gridstack/gridstack.js/pull/3047) nested grid resizeToContentCBCheck() fix ## 12.1.1 (2024-04-28) diff --git a/src/gridstack.ts b/src/gridstack.ts index 2b4007d68..913d1b47c 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1616,7 +1616,7 @@ export class GridStack { } // if we're a nested grid inside an sizeToContent item, tell it to resize itself too - if (parent && !parent.grid.engine.batchMode && Utils.shouldSizeToContent(parent)) { + if (parent && Utils.shouldSizeToContent(parent)) { parent.grid.resizeToContentCBCheck(parent.el); } From 653e98deb152debbd1cc9b3015583c5c6c6d68cf Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 7 May 2025 14:22:35 -0700 Subject: [PATCH 04/56] more `opts.animate` * better fix #3043 --- doc/CHANGES.md | 2 +- src/gridstack.ts | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 8e79b1666..c390b72ed 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -129,7 +129,7 @@ Change log ## 12.1.1-dev (TBD) * fix [#3043](https://github.com/gridstack/gridstack.js/issues/3043) fix `opts.animate` again -* fix [#3047](https://github.com/gridstack/gridstack.js/pull/3047) nested grid resizeToContentCBCheck() fix +* fix [#3048](https://github.com/gridstack/gridstack.js/pull/3048) nested grid resizeToContentCBCheck() fix ## 12.1.1 (2024-04-28) diff --git a/src/gridstack.ts b/src/gridstack.ts index 913d1b47c..d8e3bb5e2 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -2251,9 +2251,11 @@ export class GridStack { delete this.placeholder.gridstackNode; // disable animation when replacing a placeholder (already positioned) with actual content - const noAnim = wasAdded && this.opts.animate; - if (noAnim) this.setAnimation(false); - + if (wasAdded && this.opts.animate) { + this.setAnimation(false); + this.setAnimation(true, true); // delay adding back + } + // notify previous grid of removal // console.log('drop delete _gridstackNodeOrig') // TEST const origNode = el._gridstackNodeOrig; @@ -2314,9 +2316,6 @@ export class GridStack { this._gsEventHandler['dropped']({ ...event, type: 'dropped' }, origNode && origNode.grid ? origNode : undefined, node); } - // delay adding animation back - if (noAnim) this.setAnimation(this.opts.animate, true); - return false; // prevent parent from receiving msg (which may be grid as well) }); return this; From 54e2a4a9bb5895a11cc71ed0f57c19f2e8be6e1f Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 7 May 2025 14:27:50 -0700 Subject: [PATCH 05/56] v12.1.2 --- angular/package.json | 2 +- angular/projects/lib/src/lib/base-widget.ts | 2 +- angular/projects/lib/src/lib/gridstack-item.component.ts | 2 +- angular/projects/lib/src/lib/gridstack.component.ts | 8 +++++--- angular/projects/lib/src/lib/gridstack.module.ts | 2 +- angular/projects/lib/src/lib/types.ts | 2 +- angular/yarn.lock | 8 ++++---- doc/CHANGES.md | 5 ++--- package.json | 2 +- react/package.json | 2 +- react/yarn.lock | 8 ++++---- src/dd-base-impl.ts | 2 +- src/dd-draggable.ts | 2 +- src/dd-droppable.ts | 2 +- src/dd-element.ts | 2 +- src/dd-gridstack.ts | 2 +- src/dd-manager.ts | 2 +- src/dd-resizable-handle.ts | 2 +- src/dd-resizable.ts | 2 +- src/dd-touch.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 6 +++--- src/types.ts | 2 +- src/utils.ts | 2 +- 25 files changed, 38 insertions(+), 37 deletions(-) diff --git a/angular/package.json b/angular/package.json index a9f38e9de..4365ad856 100644 --- a/angular/package.json +++ b/angular/package.json @@ -18,7 +18,7 @@ "@angular/platform-browser": "^14", "@angular/platform-browser-dynamic": "^14", "@angular/router": "^14", - "gridstack": "^12.1.1", + "gridstack": "^12.1.2", "rxjs": "~7.5.0", "tslib": "^2.3.0", "zone.js": "~0.11.4" diff --git a/angular/projects/lib/src/lib/base-widget.ts b/angular/projects/lib/src/lib/base-widget.ts index a949db088..26d8aa3e0 100644 --- a/angular/projects/lib/src/lib/base-widget.ts +++ b/angular/projects/lib/src/lib/base-widget.ts @@ -1,5 +1,5 @@ /** - * gridstack-item.component.ts 12.1.1 + * gridstack-item.component.ts 12.1.2 * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license */ diff --git a/angular/projects/lib/src/lib/gridstack-item.component.ts b/angular/projects/lib/src/lib/gridstack-item.component.ts index c9c4590c3..d5c8770ea 100644 --- a/angular/projects/lib/src/lib/gridstack-item.component.ts +++ b/angular/projects/lib/src/lib/gridstack-item.component.ts @@ -1,5 +1,5 @@ /** - * gridstack-item.component.ts 12.1.1 + * gridstack-item.component.ts 12.1.2 * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license */ diff --git a/angular/projects/lib/src/lib/gridstack.component.ts b/angular/projects/lib/src/lib/gridstack.component.ts index 0315b2388..59440ff1a 100644 --- a/angular/projects/lib/src/lib/gridstack.component.ts +++ b/angular/projects/lib/src/lib/gridstack.component.ts @@ -1,10 +1,12 @@ /** - * gridstack.component.ts 12.1.1 + * gridstack.component.ts 12.1.2 * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license */ -import { AfterContentInit, Component, ContentChildren, ElementRef, EventEmitter, Input, - OnDestroy, OnInit, Output, QueryList, Type, ViewChild, ViewContainerRef, reflectComponentType, ComponentRef } from '@angular/core'; +import { + AfterContentInit, Component, ContentChildren, ElementRef, EventEmitter, Input, + OnDestroy, OnInit, Output, QueryList, Type, ViewChild, ViewContainerRef, reflectComponentType, ComponentRef +} from '@angular/core'; import { NgIf } from '@angular/common'; import { Subscription } from 'rxjs'; import { GridHTMLElement, GridItemHTMLElement, GridStack, GridStackNode, GridStackOptions, GridStackWidget } from 'gridstack'; diff --git a/angular/projects/lib/src/lib/gridstack.module.ts b/angular/projects/lib/src/lib/gridstack.module.ts index e1fff1c87..64479fcf2 100644 --- a/angular/projects/lib/src/lib/gridstack.module.ts +++ b/angular/projects/lib/src/lib/gridstack.module.ts @@ -1,5 +1,5 @@ /** - * gridstack.component.ts 12.1.1 + * gridstack.component.ts 12.1.2 * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license */ diff --git a/angular/projects/lib/src/lib/types.ts b/angular/projects/lib/src/lib/types.ts index bdfc93918..15af50f48 100644 --- a/angular/projects/lib/src/lib/types.ts +++ b/angular/projects/lib/src/lib/types.ts @@ -1,5 +1,5 @@ /** - * gridstack-item.component.ts 12.1.1 + * gridstack-item.component.ts 12.1.2 * Copyright (c) 2025 Alain Dumesny - see GridStack root license */ diff --git a/angular/yarn.lock b/angular/yarn.lock index 61a66123d..3e6f405b9 100644 --- a/angular/yarn.lock +++ b/angular/yarn.lock @@ -3752,10 +3752,10 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -gridstack@^12.1.1: - version "12.1.1" - resolved "https://registry.yarnpkg.com/gridstack/-/gridstack-12.1.1.tgz#623ea5b6560cc9509252db66fd7a529d70bd2d26" - integrity sha512-wpfNUkzVBuHJftRRMRQDpH8DPIO5NBdfE0ioIIVoXFePBzqqVTpfgttSs5IJYqO4Uj5LfnJ2fjOmsFEBqpeSwg== +gridstack@^12.1.2: + version "12.1.2" + resolved "https://registry.yarnpkg.com/gridstack/-/gridstack-12.1.2.tgz#784f6d55873bb48fa9230c1284f769c9fbf785a8" + integrity sha512-IC1mkm5xonhAnftwIxsG+B3bawxC61ciKWEvX15ExpVQPbNVN7O9aZZhM7Y/eE4JaIR8PXrdkjd12gMnwNYRLQ== handle-thing@^2.0.0: version "2.0.1" diff --git a/doc/CHANGES.md b/doc/CHANGES.md index c390b72ed..79bde7227 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [12.1.1-dev (TBD)](#1211-dev-tbd) +- [12.1.2 (2024-05-07)](#1212-2024-05-07) - [12.1.1 (2024-04-28)](#1211-2024-04-28) - [12.1.0 (2024-04-23)](#1210-2024-04-23) - [12.0.0 (2025-04-12)](#1200-2025-04-12) @@ -127,11 +127,10 @@ Change log -## 12.1.1-dev (TBD) +## 12.1.2 (2024-05-07) * fix [#3043](https://github.com/gridstack/gridstack.js/issues/3043) fix `opts.animate` again * fix [#3048](https://github.com/gridstack/gridstack.js/pull/3048) nested grid resizeToContentCBCheck() fix - ## 12.1.1 (2024-04-28) * fix [#3038](https://github.com/gridstack/gridstack.js/pull/3038) `updateOptions()` fix opts.minRow being undefined diff --git a/package.json b/package.json index d051efb1f..39a558ff7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "12.1.1", + "version": "12.1.2", "license": "MIT", "author": "Alain Dumesny (https://github.com/adumesny)", "contributors": [ diff --git a/react/package.json b/react/package.json index 85b871e94..dd2f1d89c 100644 --- a/react/package.json +++ b/react/package.json @@ -11,7 +11,7 @@ "preview": "vite preview" }, "dependencies": { - "gridstack": "^12.1.1", + "gridstack": "^12.1.2", "react": "^18.3.1", "react-dom": "^18.3.1", "react-fast-compare": "^3.2.2" diff --git a/react/yarn.lock b/react/yarn.lock index 639a08bc6..27864976b 100644 --- a/react/yarn.lock +++ b/react/yarn.lock @@ -832,10 +832,10 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -gridstack@^12.1.1: - version "12.1.1" - resolved "https://registry.yarnpkg.com/gridstack/-/gridstack-12.1.1.tgz#623ea5b6560cc9509252db66fd7a529d70bd2d26" - integrity sha512-wpfNUkzVBuHJftRRMRQDpH8DPIO5NBdfE0ioIIVoXFePBzqqVTpfgttSs5IJYqO4Uj5LfnJ2fjOmsFEBqpeSwg== +gridstack@^12.1.2: + version "12.1.2" + resolved "https://registry.yarnpkg.com/gridstack/-/gridstack-12.1.2.tgz#784f6d55873bb48fa9230c1284f769c9fbf785a8" + integrity sha512-IC1mkm5xonhAnftwIxsG+B3bawxC61ciKWEvX15ExpVQPbNVN7O9aZZhM7Y/eE4JaIR8PXrdkjd12gMnwNYRLQ== has-flag@^4.0.0: version "4.0.0" diff --git a/src/dd-base-impl.ts b/src/dd-base-impl.ts index b7c8604c2..1185d7f39 100644 --- a/src/dd-base-impl.ts +++ b/src/dd-base-impl.ts @@ -1,5 +1,5 @@ /** - * dd-base-impl.ts 12.1.1 + * dd-base-impl.ts 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-draggable.ts b/src/dd-draggable.ts index cfd0d2303..679d78949 100644 --- a/src/dd-draggable.ts +++ b/src/dd-draggable.ts @@ -1,5 +1,5 @@ /** - * dd-draggable.ts 12.1.1 + * dd-draggable.ts 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-droppable.ts b/src/dd-droppable.ts index 820cf9efc..f000771eb 100644 --- a/src/dd-droppable.ts +++ b/src/dd-droppable.ts @@ -1,5 +1,5 @@ /** - * dd-droppable.ts 12.1.1 + * dd-droppable.ts 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-element.ts b/src/dd-element.ts index 84115684d..b00ee5166 100644 --- a/src/dd-element.ts +++ b/src/dd-element.ts @@ -1,5 +1,5 @@ /** - * dd-elements.ts 12.1.1 + * dd-elements.ts 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-gridstack.ts b/src/dd-gridstack.ts index a8d21dbf9..a10f8f1bd 100644 --- a/src/dd-gridstack.ts +++ b/src/dd-gridstack.ts @@ -1,5 +1,5 @@ /** - * dd-gridstack.ts 12.1.1 + * dd-gridstack.ts 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-manager.ts b/src/dd-manager.ts index 851a37075..469c96e81 100644 --- a/src/dd-manager.ts +++ b/src/dd-manager.ts @@ -1,5 +1,5 @@ /** - * dd-manager.ts 12.1.1 + * dd-manager.ts 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-resizable-handle.ts b/src/dd-resizable-handle.ts index ea2dbef2a..012f350f4 100644 --- a/src/dd-resizable-handle.ts +++ b/src/dd-resizable-handle.ts @@ -1,5 +1,5 @@ /** - * dd-resizable-handle.ts 12.1.1 + * dd-resizable-handle.ts 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-resizable.ts b/src/dd-resizable.ts index 7bb6c112a..21ec6f7b2 100644 --- a/src/dd-resizable.ts +++ b/src/dd-resizable.ts @@ -1,5 +1,5 @@ /** - * dd-resizable.ts 12.1.1 + * dd-resizable.ts 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-touch.ts b/src/dd-touch.ts index 2e125c06a..1c826c241 100644 --- a/src/dd-touch.ts +++ b/src/dd-touch.ts @@ -1,5 +1,5 @@ /** - * touch.ts 12.1.1 + * touch.ts 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 9a2f4d723..be4de847b 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,5 +1,5 @@ /** - * gridstack-engine.ts 12.1.1 + * gridstack-engine.ts 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/gridstack.scss b/src/gridstack.scss index 868b3fa97..84a54cbc6 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /** - * gridstack SASS styles 12.1.1 + * gridstack SASS styles 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/gridstack.ts b/src/gridstack.ts index d8e3bb5e2..306692c3f 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,5 +1,5 @@ /*! - * GridStack 12.1.1 + * GridStack 12.1.2 * https://gridstackjs.com/ * * Copyright (c) 2021-2024 Alain Dumesny @@ -1889,7 +1889,7 @@ export class GridStack { return this; } - static GDRev = '12.1.1'; + static GDRev = '12.1.2'; /* =========================================================================================== * drag&drop methods that used to be stubbed out and implemented in dd-gridstack.ts @@ -2255,7 +2255,7 @@ export class GridStack { this.setAnimation(false); this.setAnimation(true, true); // delay adding back } - + // notify previous grid of removal // console.log('drop delete _gridstackNodeOrig') // TEST const origNode = el._gridstackNodeOrig; diff --git a/src/types.ts b/src/types.ts index 87901de6f..6427e65f3 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,5 +1,5 @@ /** - * types.ts 12.1.1 + * types.ts 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/utils.ts b/src/utils.ts index 87318a054..352e5f324 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,5 +1,5 @@ /** - * utils.ts 12.1.1 + * utils.ts 12.1.2 * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ From 0c13251261d6e6c2c645ae6a49962d0afbf98c09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 May 2025 21:28:27 +0000 Subject: [PATCH 06/56] Bump vite from 5.4.18 to 5.4.19 in /react Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.18 to 5.4.19. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v5.4.19/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v5.4.19/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 5.4.19 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- react/package.json | 2 +- react/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/react/package.json b/react/package.json index dd2f1d89c..0fd3c2565 100644 --- a/react/package.json +++ b/react/package.json @@ -27,6 +27,6 @@ "globals": "^15.9.0", "typescript": "^5.5.3", "typescript-eslint": "^8.0.1", - "vite": "^5.4.18" + "vite": "^5.4.19" } } diff --git a/react/yarn.lock b/react/yarn.lock index 27864976b..b06d91afd 100644 --- a/react/yarn.lock +++ b/react/yarn.lock @@ -1222,10 +1222,10 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -vite@^5.4.18: - version "5.4.18" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.18.tgz#b5af357f9d5ebb2e0c085779b7a37a77f09168a4" - integrity sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA== +vite@^5.4.19: + version "5.4.19" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.19.tgz#20efd060410044b3ed555049418a5e7d1998f959" + integrity sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA== dependencies: esbuild "^0.21.3" postcss "^8.4.43" From 25c015e892c6d7dcbeda9bcdd4a45d9191266b33 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 7 May 2025 14:36:59 -0700 Subject: [PATCH 07/56] v12.1.2-dev --- angular/projects/lib/src/lib/base-widget.ts | 2 +- angular/projects/lib/src/lib/gridstack-item.component.ts | 2 +- angular/projects/lib/src/lib/gridstack.component.ts | 2 +- angular/projects/lib/src/lib/gridstack.module.ts | 2 +- angular/projects/lib/src/lib/types.ts | 2 +- doc/CHANGES.md | 4 ++-- package.json | 2 +- src/dd-base-impl.ts | 2 +- src/dd-draggable.ts | 2 +- src/dd-droppable.ts | 2 +- src/dd-element.ts | 2 +- src/dd-gridstack.ts | 2 +- src/dd-manager.ts | 2 +- src/dd-resizable-handle.ts | 2 +- src/dd-resizable.ts | 2 +- src/dd-touch.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 4 ++-- src/types.ts | 2 +- src/utils.ts | 2 +- 21 files changed, 23 insertions(+), 23 deletions(-) diff --git a/angular/projects/lib/src/lib/base-widget.ts b/angular/projects/lib/src/lib/base-widget.ts index 26d8aa3e0..a76196ca2 100644 --- a/angular/projects/lib/src/lib/base-widget.ts +++ b/angular/projects/lib/src/lib/base-widget.ts @@ -1,5 +1,5 @@ /** - * gridstack-item.component.ts 12.1.2 + * gridstack-item.component.ts 12.1.2-dev * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license */ diff --git a/angular/projects/lib/src/lib/gridstack-item.component.ts b/angular/projects/lib/src/lib/gridstack-item.component.ts index d5c8770ea..0582525bb 100644 --- a/angular/projects/lib/src/lib/gridstack-item.component.ts +++ b/angular/projects/lib/src/lib/gridstack-item.component.ts @@ -1,5 +1,5 @@ /** - * gridstack-item.component.ts 12.1.2 + * gridstack-item.component.ts 12.1.2-dev * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license */ diff --git a/angular/projects/lib/src/lib/gridstack.component.ts b/angular/projects/lib/src/lib/gridstack.component.ts index 59440ff1a..3f851659e 100644 --- a/angular/projects/lib/src/lib/gridstack.component.ts +++ b/angular/projects/lib/src/lib/gridstack.component.ts @@ -1,5 +1,5 @@ /** - * gridstack.component.ts 12.1.2 + * gridstack.component.ts 12.1.2-dev * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license */ diff --git a/angular/projects/lib/src/lib/gridstack.module.ts b/angular/projects/lib/src/lib/gridstack.module.ts index 64479fcf2..3b1bd76ad 100644 --- a/angular/projects/lib/src/lib/gridstack.module.ts +++ b/angular/projects/lib/src/lib/gridstack.module.ts @@ -1,5 +1,5 @@ /** - * gridstack.component.ts 12.1.2 + * gridstack.component.ts 12.1.2-dev * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license */ diff --git a/angular/projects/lib/src/lib/types.ts b/angular/projects/lib/src/lib/types.ts index 15af50f48..0366ef587 100644 --- a/angular/projects/lib/src/lib/types.ts +++ b/angular/projects/lib/src/lib/types.ts @@ -1,5 +1,5 @@ /** - * gridstack-item.component.ts 12.1.2 + * gridstack-item.component.ts 12.1.2-dev * Copyright (c) 2025 Alain Dumesny - see GridStack root license */ diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 79bde7227..4644fac00 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [12.1.2 (2024-05-07)](#1212-2024-05-07) +- [12.1.2-dev (2024-05-07)](#1212-2024-05-07) - [12.1.1 (2024-04-28)](#1211-2024-04-28) - [12.1.0 (2024-04-23)](#1210-2024-04-23) - [12.0.0 (2025-04-12)](#1200-2025-04-12) @@ -127,7 +127,7 @@ Change log -## 12.1.2 (2024-05-07) +## 12.1.2-dev (2024-05-07) * fix [#3043](https://github.com/gridstack/gridstack.js/issues/3043) fix `opts.animate` again * fix [#3048](https://github.com/gridstack/gridstack.js/pull/3048) nested grid resizeToContentCBCheck() fix diff --git a/package.json b/package.json index 39a558ff7..0a6cba36e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "12.1.2", + "version": "12.1.2-dev", "license": "MIT", "author": "Alain Dumesny (https://github.com/adumesny)", "contributors": [ diff --git a/src/dd-base-impl.ts b/src/dd-base-impl.ts index 1185d7f39..b320864b4 100644 --- a/src/dd-base-impl.ts +++ b/src/dd-base-impl.ts @@ -1,5 +1,5 @@ /** - * dd-base-impl.ts 12.1.2 + * dd-base-impl.ts 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-draggable.ts b/src/dd-draggable.ts index 679d78949..d1361b9ec 100644 --- a/src/dd-draggable.ts +++ b/src/dd-draggable.ts @@ -1,5 +1,5 @@ /** - * dd-draggable.ts 12.1.2 + * dd-draggable.ts 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-droppable.ts b/src/dd-droppable.ts index f000771eb..3c1966926 100644 --- a/src/dd-droppable.ts +++ b/src/dd-droppable.ts @@ -1,5 +1,5 @@ /** - * dd-droppable.ts 12.1.2 + * dd-droppable.ts 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-element.ts b/src/dd-element.ts index b00ee5166..3b6a5a024 100644 --- a/src/dd-element.ts +++ b/src/dd-element.ts @@ -1,5 +1,5 @@ /** - * dd-elements.ts 12.1.2 + * dd-elements.ts 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-gridstack.ts b/src/dd-gridstack.ts index a10f8f1bd..e7f24cad3 100644 --- a/src/dd-gridstack.ts +++ b/src/dd-gridstack.ts @@ -1,5 +1,5 @@ /** - * dd-gridstack.ts 12.1.2 + * dd-gridstack.ts 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-manager.ts b/src/dd-manager.ts index 469c96e81..55ef30ff1 100644 --- a/src/dd-manager.ts +++ b/src/dd-manager.ts @@ -1,5 +1,5 @@ /** - * dd-manager.ts 12.1.2 + * dd-manager.ts 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-resizable-handle.ts b/src/dd-resizable-handle.ts index 012f350f4..18a5460a0 100644 --- a/src/dd-resizable-handle.ts +++ b/src/dd-resizable-handle.ts @@ -1,5 +1,5 @@ /** - * dd-resizable-handle.ts 12.1.2 + * dd-resizable-handle.ts 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-resizable.ts b/src/dd-resizable.ts index 21ec6f7b2..e2c40e8dd 100644 --- a/src/dd-resizable.ts +++ b/src/dd-resizable.ts @@ -1,5 +1,5 @@ /** - * dd-resizable.ts 12.1.2 + * dd-resizable.ts 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-touch.ts b/src/dd-touch.ts index 1c826c241..11ac08597 100644 --- a/src/dd-touch.ts +++ b/src/dd-touch.ts @@ -1,5 +1,5 @@ /** - * touch.ts 12.1.2 + * touch.ts 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index be4de847b..3d2c1dc4b 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,5 +1,5 @@ /** - * gridstack-engine.ts 12.1.2 + * gridstack-engine.ts 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/gridstack.scss b/src/gridstack.scss index 84a54cbc6..7ae1d6d07 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /** - * gridstack SASS styles 12.1.2 + * gridstack SASS styles 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/gridstack.ts b/src/gridstack.ts index 306692c3f..726296ade 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,5 +1,5 @@ /*! - * GridStack 12.1.2 + * GridStack 12.1.2-dev * https://gridstackjs.com/ * * Copyright (c) 2021-2024 Alain Dumesny @@ -1889,7 +1889,7 @@ export class GridStack { return this; } - static GDRev = '12.1.2'; + static GDRev = '12.1.2-dev'; /* =========================================================================================== * drag&drop methods that used to be stubbed out and implemented in dd-gridstack.ts diff --git a/src/types.ts b/src/types.ts index 6427e65f3..644d7b05d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,5 +1,5 @@ /** - * types.ts 12.1.2 + * types.ts 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ diff --git a/src/utils.ts b/src/utils.ts index 352e5f324..5e833eefe 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,5 +1,5 @@ /** - * utils.ts 12.1.2 + * utils.ts 12.1.2-dev * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license */ From e852c2aaa62f4d7027713f96df0587272cbe6655 Mon Sep 17 00:00:00 2001 From: Luciano Martorella Date: Mon, 12 May 2025 09:30:53 +0200 Subject: [PATCH 08/56] - Avoid reflow via setting minRow --- doc/README.md | 2 +- src/gridstack.ts | 4 +++- src/types.ts | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/README.md b/doc/README.md index e4c31a9ef..931c25521 100644 --- a/doc/README.md +++ b/doc/README.md @@ -116,7 +116,7 @@ gridstack.js API - `marginBottom`: numberOrString - `marginLeft`: numberOrString - `maxRow` - maximum rows amount. Default is `0` which means no max. -- `minRow` - minimum rows amount which is handy to prevent grid from collapsing when empty. Default is `0`. You can also do this with `min-height` CSS attribute on the grid div in pixels, which will round to the closest row. +- `minRow` - minimum rows amount which is handy to prevent grid from collapsing when empty. Default is `0`. When no set set, the `min-height` CSS attribute on the grid div (in pixels) can be used as well, which will round to the closest row. - `nonce` - If you are using a nonce-based Content Security Policy, pass your nonce here and GridStack will add it to the ` + + + +

GridStack Drag and Drop Test

+

Test dragging widgets outside the grid should not throw exceptions.

+ +
+
+
+ Draggable Item 1 +
+
+
+
+ Draggable Item 2 +
+
+
+
+ Draggable Item 3 +
+
+
+ +
+

Outside Grid Area - Try dragging items here

+
+ +
+

Console Output:

+
+
+ + + + diff --git a/e2e/gridstack-e2e.spec.ts b/e2e/gridstack-e2e.spec.ts new file mode 100644 index 000000000..45cf4c8ed --- /dev/null +++ b/e2e/gridstack-e2e.spec.ts @@ -0,0 +1,362 @@ +import { test, expect } from '@playwright/test'; + +test.describe('GridStack E2E Tests', () => { + + test.beforeEach(async ({ page }) => { + // Navigate to the test page + await page.goto('/e2e/fixtures/gridstack-with-height.html'); + + // Wait for GridStack to initialize + await page.waitForFunction(() => window.testReady === true); + await page.waitForSelector('.grid-stack-item', { state: 'visible' }); + }); + + test('should not throw exceptions when dragging widget outside the grid', async ({ page }) => { + // Clear any existing console messages + await page.evaluate(() => window.clearConsoleMessages()); + + // Get the widget and grid container + const widget = page.locator('#item-1 .grid-stack-item-content'); + const gridContainer = page.locator('#grid'); + const outsideArea = page.locator('#outside-area'); + + // Verify widget is initially visible + await expect(widget).toBeVisible(); + + // Get initial positions + const widgetBox = await widget.boundingBox(); + const gridBox = await gridContainer.boundingBox(); + const outsideBox = await outsideArea.boundingBox(); + + expect(widgetBox).toBeTruthy(); + expect(gridBox).toBeTruthy(); + expect(outsideBox).toBeTruthy(); + + // Perform drag operation from widget to outside area + await page.mouse.move(widgetBox!.x + widgetBox!.width / 2, widgetBox!.y + widgetBox!.height / 2); + await page.mouse.down(); + + // Move to outside area + await page.mouse.move(outsideBox!.x + outsideBox!.width / 2, outsideBox!.y + outsideBox!.height / 2, { steps: 10 }); + await page.mouse.up(); + + // Wait a bit for any async operations + await page.waitForTimeout(500); + + // Check for console errors + const consoleMessages = await page.evaluate(() => window.getConsoleMessages()); + const errors = consoleMessages.filter((msg: any) => msg.type === 'error'); + + // Should not have any console errors + expect(errors).toHaveLength(0); + + // Widget should still exist in the DOM (even if moved back to grid) + await expect(widget).toBeVisible(); + }); + + test('should handle drag and drop within grid correctly', async ({ page }) => { + await page.evaluate(() => window.clearConsoleMessages()); + + const item1 = page.locator('#item-1 .grid-stack-item-content'); + const item2 = page.locator('#item-2 .grid-stack-item-content'); + + // Get initial positions + const item1Box = await item1.boundingBox(); + const item2Box = await item2.boundingBox(); + + expect(item1Box).toBeTruthy(); + expect(item2Box).toBeTruthy(); + + // Drag item 1 to where item 2 is + await page.mouse.move(item1Box!.x + item1Box!.width / 2, item1Box!.y + item1Box!.height / 2); + await page.mouse.down(); + await page.mouse.move(item2Box!.x + item2Box!.width / 2, item2Box!.y + item2Box!.height / 2, { steps: 10 }); + await page.mouse.up(); + + // Wait for grid to settle + await page.waitForTimeout(500); + + // Check that grid events were fired + const consoleMessages = await page.evaluate(() => window.getConsoleMessages()); + const hasGridEvents = consoleMessages.some((msg: any) => + msg.message.includes('Grid event:') || msg.message.includes('Drag') + ); + + expect(hasGridEvents).toBe(true); + + // Should not have any errors + const errors = consoleMessages.filter((msg: any) => msg.type === 'error'); + expect(errors).toHaveLength(0); + }); + + test('should validate auto-positioning HTML page', async ({ page }) => { + // Navigate to the auto-positioning test + await page.goto('/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html'); + + // Wait for GridStack to initialize + await page.waitForSelector('.grid-stack-item', { state: 'visible' }); + await page.waitForFunction(() => typeof window.GridStack !== 'undefined'); + + // Get all grid items + const items = await page.locator('.grid-stack-item').all(); + expect(items).toHaveLength(5); + + // Check that item 5 is positioned at x=1, y=1 (it has explicit position) + const item5 = page.locator('[gs-id="5"]'); + await expect(item5).toBeVisible(); + + // Check that all items are visible and positioned + for (let i = 1; i <= 5; i++) { + const item = page.locator(`[gs-id="${i}"]`); + await expect(item).toBeVisible(); + + // Get computed position via data attributes + const gsX = await item.getAttribute('gs-x'); + const gsY = await item.getAttribute('gs-y'); + + // Items should have valid positions (not null/undefined) + // Item 5 should maintain its explicit position + if (i === 5) { + expect(gsX).toBe('1'); + expect(gsY).toBe('1'); + } + } + + // Verify no items overlap by checking their computed positions + const gridInfo = await page.evaluate(() => { + const gridEl = document.querySelector('.grid-stack'); + if (!gridEl || !window.GridStack) return null; + + const gridInstance = (window as any).GridStack.getGrids()[0]; + if (!gridInstance) return null; + + return { + nodes: gridInstance.engine.nodes.map((node: any) => ({ + id: node.id, + x: node.x, + y: node.y, + w: node.w, + h: node.h + })) + }; + }); + + expect(gridInfo).toBeTruthy(); + expect(gridInfo!.nodes).toHaveLength(5); + + // Verify no overlaps + const nodes = gridInfo!.nodes; + for (let i = 0; i < nodes.length; i++) { + for (let j = i + 1; j < nodes.length; j++) { + const a = nodes[i]; + const b = nodes[j]; + + // Check if rectangles overlap + const overlap = !( + a.x + a.w <= b.x || + b.x + b.w <= a.x || + a.y + a.h <= b.y || + b.y + b.h <= a.y + ); + + expect(overlap).toBe(false); + } + } + }); + + test('should handle responsive behavior', async ({ page }) => { + await page.goto('/e2e/fixtures/gridstack-with-height.html'); + await page.waitForFunction(() => window.testReady === true); + + // Test different viewport sizes + await page.setViewportSize({ width: 1200, height: 800 }); + await page.waitForTimeout(100); + + let gridWidth = await page.locator('#grid').evaluate(el => el.offsetWidth); + expect(gridWidth).toBeGreaterThan(800); + + // Test mobile viewport + await page.setViewportSize({ width: 400, height: 600 }); + await page.waitForTimeout(100); + + gridWidth = await page.locator('#grid').evaluate(el => el.offsetWidth); + expect(gridWidth).toBeLessThan(500); + + // Grid should still be functional + const items = await page.locator('.grid-stack-item').all(); + expect(items.length).toBeGreaterThan(0); + + for (const item of items) { + await expect(item).toBeVisible(); + } + }); + + test('getCellFromPixel should return correct coordinates', async ({ page }) => { + await page.goto('/e2e/fixtures/gridstack-with-height.html'); + await page.waitForFunction(() => window.testReady === true); + + // Test getCellFromPixel with real browser layout + const result = await page.evaluate(() => { + const gridEl = document.querySelector('.grid-stack'); + if (!gridEl || !window.GridStack) return null; + + const gridInstance = (window as any).GridStack.getGrids()[0]; + if (!gridInstance) return null; + + const rect = gridEl.getBoundingClientRect(); + const cellHeight = 80; + const smudge = 5; + + // Test pixel at column 4, row 5 + const pixel = { + left: 4 * rect.width / 12 + rect.x + smudge, + top: 5 * cellHeight + rect.y + smudge + }; + + const cell = gridInstance.getCellFromPixel(pixel); + + return { + cell, + rectWidth: rect.width, + rectHeight: rect.height, + pixel + }; + }); + + expect(result).toBeTruthy(); + + // Verify we got realistic dimensions (not 0 like in jsdom) + expect(result!.rectWidth).toBeGreaterThan(0); + expect(result!.rectHeight).toBeGreaterThan(0); + + // Verify pixel coordinates are calculated correctly + expect(result!.cell.x).toBe(4); + expect(result!.cell.y).toBe(5); + }); + + test('cellWidth should return correct calculation', async ({ page }) => { + await page.goto('/e2e/fixtures/gridstack-with-height.html'); + await page.waitForFunction(() => window.testReady === true); + + // Test cellWidth calculation with real browser layout + const result = await page.evaluate(() => { + const gridEl = document.querySelector('.grid-stack'); + if (!gridEl || !window.GridStack) return null; + + const gridInstance = (window as any).GridStack.getGrids()[0]; + if (!gridInstance) return null; + + const offsetWidth = gridEl.offsetWidth; + const cellWidth = gridInstance.cellWidth(); + const expectedWidth = offsetWidth / 12; // Default 12 columns + + return { + offsetWidth, + cellWidth, + expectedWidth, + match: Math.abs(cellWidth - expectedWidth) < 0.1 // Allow small floating point differences + }; + }); + + expect(result).toBeTruthy(); + + // Verify we got realistic dimensions + expect(result!.offsetWidth).toBeGreaterThan(0); + expect(result!.cellWidth).toBeGreaterThan(0); + + // Verify calculation is correct + expect(result!.match).toBe(true); + expect(result!.cellWidth).toBeCloseTo(result!.expectedWidth, 1); + }); + + test('cellHeight should affect computed styles', async ({ page }) => { + await page.goto('/e2e/fixtures/gridstack-with-height.html'); + await page.waitForFunction(() => window.testReady === true); + + // Test cellHeight with real browser layout + const result = await page.evaluate(() => { + const gridEl = document.querySelector('.grid-stack'); + if (!gridEl || !window.GridStack) return null; + + const gridInstance = (window as any).GridStack.getGrids()[0]; + if (!gridInstance) return null; + + const initialHeight = gridInstance.getCellHeight(); + const rows = parseInt(gridEl.getAttribute('gs-current-row') || '0'); + const computedHeight = parseInt(getComputedStyle(gridEl)['height']); + + // Change cell height + gridInstance.cellHeight(120); + const newHeight = gridInstance.getCellHeight(); + const newComputedHeight = parseInt(getComputedStyle(gridEl)['height']); + + return { + initialHeight, + rows, + computedHeight, + newHeight, + newComputedHeight, + expectedInitial: rows * initialHeight, + expectedNew: rows * 120 + }; + }); + + expect(result).toBeTruthy(); + + // Verify initial setup + expect(result!.initialHeight).toBeGreaterThan(0); + expect(result!.computedHeight).toBeCloseTo(result!.expectedInitial, 10); // Allow some margin for CSS differences + + // Verify height change + expect(result!.newHeight).toBe(120); + expect(result!.newComputedHeight).toBeCloseTo(result!.expectedNew, 10); + }); + + test('stylesheet should persist through DOM detach/attach', async ({ page }) => { + await page.goto('/e2e/fixtures/gridstack-with-height.html'); + await page.waitForFunction(() => window.testReady === true); + + // Test that CSS styles persist when grid DOM is detached and reattached + const result = await page.evaluate(() => { + const gridEl = document.querySelector('.grid-stack'); + if (!gridEl || !window.GridStack) return null; + + const gridInstance = (window as any).GridStack.getGrids()[0]; + if (!gridInstance) return null; + + // Update cell height to 30px to match original test + gridInstance.cellHeight(30); + + // Get initial computed height of first item (should be 2 * 30 = 60px) + const item1 = gridEl.querySelector('#item-1') || gridEl.querySelector('.grid-stack-item'); + if (!item1) return null; + + const initialHeight = window.getComputedStyle(item1).height; + + // Detach and reattach the grid container + const container = gridEl.parentElement; + const oldParent = container?.parentElement; + + if (!container || !oldParent) return null; + + container.remove(); + oldParent.appendChild(container); + + // Get height after detach/reattach + const finalHeight = window.getComputedStyle(item1).height; + + return { + initialHeight, + finalHeight, + match: initialHeight === finalHeight + }; + }); + + expect(result).toBeTruthy(); + + // Verify heights are calculated correctly and persist + expect(result!.initialHeight).toBe('60px'); // 2 rows * 30px cellHeight + expect(result!.finalHeight).toBe('60px'); + expect(result!.match).toBe(true); + }); +}); diff --git a/karma.conf.js b/karma.conf.js deleted file mode 100644 index 64b4e5c9d..000000000 --- a/karma.conf.js +++ /dev/null @@ -1,96 +0,0 @@ -// Karma configuration - -module.exports = function(config) { - config.set({ - - // see https://www.npmjs.com/package/karma-typescript - karmaTypescriptConfig: { - compilerOptions: { - lib: ['dom', 'es6'], - }, - // bundlerOptions: { - // resolve: { - // alias: { - // } - // } - // }, - exclude: ["demo", "dist/ng"], // ignore dummy demo .ts files - include: [ - "./spec/**/*-spec.ts" - ] - }, - - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: '', - - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['jasmine', 'karma-typescript'], - - // list of files / patterns to load in the browser - files: [ - 'src/**/*.ts', // TODO: have to list files else the import in each won't be found! - 'spec/*-spec.ts', - // 'spec/e2e/*-spec.js' issues with ReferenceError: `browser` & `element` is not defined - ], - // BUT list of files to exclude - // exclude: [ - // ], - - // preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - '**/*.ts': ['karma-typescript'] - }, - - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress', 'karma-typescript'], - - coverageReporter: { - type: 'lcov', // lcov or lcovonly are required for generating lcov.info files - dir: 'coverage/' - }, - - // web server port - port: 9876, - - // enable / disable colors in the output (reporters and logs) - colors: true, - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN - // config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: true, - - // start these browsers - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['ChromeHeadlessCustom'], - customLaunchers: { - ChromeHeadlessCustom: { - base: 'ChromeHeadless', - flags: ['--window-size=800,600'] - } - }, - - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: true, - - // Concurrency level - // how many browser should be started simultaneous - concurrency: Infinity, - - random: false, - - client: { - jasmine: { - random: false - } - } - }); -}; diff --git a/package.json b/package.json index 9c82bbec2..bfe606c4b 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,18 @@ "doc": "doctoc ./README.md && doctoc ./doc/CHANGES.md && node scripts/generate-docs.js", "doc:main": "node scripts/generate-docs.js --main-only", "doc:angular": "node scripts/generate-docs.js --angular-only", - "test": "yarn lint && karma start karma.conf.js", + "test": "yarn lint && vitest run", + "test:watch": "vitest", + "test:ui": "vitest --ui", + "test:coverage": "vitest run --coverage", + "test:coverage:ui": "vitest --ui --coverage.enabled=true", + "test:coverage:detailed": "vitest run --config .vitestrc.coverage.ts", + "test:coverage:html": "vitest run --coverage && open coverage/index.html", + "test:coverage:lcov": "vitest run --coverage --coverage.reporter=lcov", + "test:ci": "vitest run --coverage --reporter=verbose --reporter=junit --outputFile.junit=./coverage/junit-report.xml", + "test:e2e": "playwright test", + "test:e2e:ui": "playwright test --ui", + "test:e2e:headed": "playwright test --headed", "lint": "tsc --noEmit && eslint src/*.ts", "reset": "rm -rf dist node_modules", "prepublishOnly": "yarn build" @@ -59,9 +70,13 @@ "homepage": "http://gridstackjs.com/", "dependencies": {}, "devDependencies": { - "@types/jasmine": "^4.3.1", + "@playwright/test": "^1.48.2", + "@testing-library/dom": "^10.4.0", + "@testing-library/jest-dom": "^6.4.8", "@typescript-eslint/eslint-plugin": "^5.58.0", "@typescript-eslint/parser": "^5.58.0", + "@vitest/coverage-v8": "^2.0.5", + "@vitest/ui": "^2.0.5", "connect": "^3.7.0", "core-js": "^3.30.1", "coveralls": "^3.1.1", @@ -78,12 +93,8 @@ "grunt-protractor-runner": "^5.0.0", "grunt-protractor-webdriver": "^0.2.5", "grunt-sass": "3.1.0", - "jasmine-core": "^4.6.0", - "karma": "^6.4.1", - "karma-chrome-launcher": "^3.1.1", - "karma-cli": "^2.0.0", - "karma-jasmine": "^5.1.0", - "karma-typescript": "5.5.4", + "happy-dom": "^15.7.4", + "jsdom": "^25.0.0", "protractor": "^7.0.0", "sass": "^1.62.0", "serve-static": "^1.15.0", @@ -91,6 +102,7 @@ "typedoc": "^0.28.9", "typedoc-plugin-markdown": "^4.8.0", "typescript": "^5.0.4", + "vitest": "^2.0.5", "webpack": "^5.79.0", "webpack-cli": "^5.0.1" }, diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 000000000..92f0e4c12 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,71 @@ +import { defineConfig, devices } from '@playwright/test'; + +/** + * @see https://playwright.dev/docs/test-configuration + */ +export default defineConfig({ + testDir: './e2e', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: [ + ['html', { outputFolder: 'e2e-report' }], + ['json', { outputFile: 'e2e-report/results.json' }], + ['junit', { outputFile: 'e2e-report/results.xml' }] + ], + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: 'http://localhost:8080', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + + /* Take screenshot on failure */ + screenshot: 'only-on-failure', + + /* Record video on failure */ + video: 'retain-on-failure', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + { + name: 'Mobile Chrome', + use: { ...devices['Pixel 5'] }, + }, + { + name: 'Mobile Safari', + use: { ...devices['iPhone 12'] }, + }, + ], + + /* Run your local dev server before starting the tests */ + webServer: { + command: 'npx serve -l 8080 .', + port: 8080, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/spec/gridstack-engine-spec.ts b/spec/gridstack-engine-spec.ts index 14d55403e..06f8320cd 100644 --- a/spec/gridstack-engine-spec.ts +++ b/spec/gridstack-engine-spec.ts @@ -1,7 +1,7 @@ import { GridStackEngine } from'../src/gridstack-engine'; import { GridStackNode } from'../src/types'; -describe('gridstack engine:', function() { +describe('gridstack engine:', () => { 'use strict'; let e: GridStackEngine; let ePriv: any; // cast engine for private vars access @@ -9,14 +9,14 @@ describe('gridstack engine:', function() { return e.nodes.find(n => n.id === id); }; - it('should exist setup function.', function() { + it('should exist setup function.', () => { expect(GridStackEngine).not.toBeNull(); expect(typeof GridStackEngine).toBe('function'); }); - describe('test constructor >', function() { + describe('test constructor >', () => { - it('should be setup properly', function() { + it('should be setup properly', () => { ePriv = e = new GridStackEngine(); expect(e.column).toEqual(12); expect(e.float).toEqual(false); @@ -26,8 +26,8 @@ describe('gridstack engine:', function() { expect(ePriv.onChange).toEqual(undefined); }); - it('should set params correctly.', function() { - let fkt = function() { }; + it('should set params correctly.', () => { + let fkt = () => { }; let arr: any = [1,2,3]; ePriv = e = new GridStackEngine({column: 1, onChange:fkt, float:true, maxRow:2, nodes:arr}); expect(e.column).toEqual(1); @@ -39,62 +39,62 @@ describe('gridstack engine:', function() { }); }); - describe('batch update', function() { + describe('batch update', () => { - it('should set float and batchMode when calling batchUpdate.', function() { + it('should set float and batchMode when calling batchUpdate.', () => { ePriv = e = new GridStackEngine({float: true}); e.batchUpdate(); expect(e.float).toBe(true); - expect(e.batchMode).toBeTrue(); + expect(e.batchMode).toBe(true); }); }); - describe('test prepareNode >', function() { + describe('test prepareNode >', () => { - beforeAll(function() { + beforeAll(() => { ePriv = e = new GridStackEngine(); }); - it('should prepare a node', function() { - expect(e.prepareNode({}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(e.prepareNode({x: 10}, false)).toEqual(jasmine.objectContaining({x: 10, y: 0, h: 1})); - expect(e.prepareNode({x: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(e.prepareNode({y: 10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 10, h: 1})); - expect(e.prepareNode({y: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(e.prepareNode({w: 3}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 3, h: 1})); - expect(e.prepareNode({w: 100}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 12, h: 1})); - expect(e.prepareNode({w: 0}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(e.prepareNode({w: -190}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(e.prepareNode({h: 3}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 3})); - expect(e.prepareNode({h: 0}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(e.prepareNode({h: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(e.prepareNode({x: 4, w: 10}, false)).toEqual(jasmine.objectContaining({x: 2, y: 0, w: 10, h: 1})); - expect(e.prepareNode({x: 4, w: 10}, true)).toEqual(jasmine.objectContaining({x: 4, y: 0, w: 8, h: 1})); + it('should prepare a node', () => { + expect(e.prepareNode({}, false)).toEqual(expect.objectContaining({x: 0, y: 0, h: 1})); + expect(e.prepareNode({x: 10}, false)).toEqual(expect.objectContaining({x: 10, y: 0, h: 1})); + expect(e.prepareNode({x: -10}, false)).toEqual(expect.objectContaining({x: 0, y: 0, h: 1})); + expect(e.prepareNode({y: 10}, false)).toEqual(expect.objectContaining({x: 0, y: 10, h: 1})); + expect(e.prepareNode({y: -10}, false)).toEqual(expect.objectContaining({x: 0, y: 0, h: 1})); + expect(e.prepareNode({w: 3}, false)).toEqual(expect.objectContaining({x: 0, y: 0, w: 3, h: 1})); + expect(e.prepareNode({w: 100}, false)).toEqual(expect.objectContaining({x: 0, y: 0, w: 12, h: 1})); + expect(e.prepareNode({w: 0}, false)).toEqual(expect.objectContaining({x: 0, y: 0, h: 1})); + expect(e.prepareNode({w: -190}, false)).toEqual(expect.objectContaining({x: 0, y: 0, h: 1})); + expect(e.prepareNode({h: 3}, false)).toEqual(expect.objectContaining({x: 0, y: 0, h: 3})); + expect(e.prepareNode({h: 0}, false)).toEqual(expect.objectContaining({x: 0, y: 0, h: 1})); + expect(e.prepareNode({h: -10}, false)).toEqual(expect.objectContaining({x: 0, y: 0, h: 1})); + expect(e.prepareNode({x: 4, w: 10}, false)).toEqual(expect.objectContaining({x: 2, y: 0, w: 10, h: 1})); + expect(e.prepareNode({x: 4, w: 10}, true)).toEqual(expect.objectContaining({x: 4, y: 0, w: 8, h: 1})); }); }); - describe('sorting of nodes >', function() { - beforeAll(function() { + describe('sorting of nodes >', () => { + beforeAll(() => { ePriv = e = new GridStackEngine(); e.nodes = [{x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}, {x: 0, y: 1}]; }); - it('should sort ascending with 12 columns.', function() { + it('should sort ascending with 12 columns.', () => { e.sortNodes(1); expect(e.nodes).toEqual([{x: 7, y: 0}, {x: 9, y: 0}, {x: 0, y: 1}, {x: 4, y: 4}]); }); - it('should sort descending with 12 columns.', function() { + it('should sort descending with 12 columns.', () => { e.sortNodes(-1); expect(e.nodes).toEqual([{x: 4, y: 4}, {x: 0, y: 1}, {x: 9, y: 0}, {x: 7, y: 0}]); }); - it('should sort ascending without columns.', function() { + it('should sort ascending without columns.', () => { ePriv.column = undefined; e.sortNodes(1); expect(e.nodes).toEqual([{x: 7, y: 0}, {x: 9, y: 0}, {x: 0, y: 1}, {x: 4, y: 4}]); }); - it('should sort descending without columns.', function() { + it('should sort descending without columns.', () => { ePriv.column = undefined; e.sortNodes(-1); expect(e.nodes).toEqual([{x: 4, y: 4}, {x: 0, y: 1}, {x: 9, y: 0}, {x: 7, y: 0}]); @@ -102,29 +102,29 @@ describe('gridstack engine:', function() { }); - describe('test isAreaEmpty >', function() { + describe('test isAreaEmpty >', () => { - beforeAll(function() { + beforeAll(() => { ePriv = e = new GridStackEngine({float:true}); e.nodes = [ e.prepareNode({x: 3, y: 2, w: 3, h: 2}) ]; }); - it('should be true', function() { + it('should be true', () => { expect(e.isAreaEmpty(0, 0, 3, 2)).toEqual(true); expect(e.isAreaEmpty(3, 4, 3, 2)).toEqual(true); }); - it('should be false', function() { + it('should be false', () => { expect(e.isAreaEmpty(1, 1, 3, 2)).toEqual(false); expect(e.isAreaEmpty(2, 3, 3, 2)).toEqual(false); }); }); - describe('test cleanNodes/getDirtyNodes >', function() { + describe('test cleanNodes/getDirtyNodes >', () => { - beforeAll(function() { + beforeAll(() => { ePriv = e = new GridStackEngine({float:true}); e.nodes = [ e.prepareNode({x: 0, y: 0, id: '1', _dirty: true}), @@ -133,82 +133,82 @@ describe('gridstack engine:', function() { ]; }); - beforeEach(function() { + beforeEach(() => { delete ePriv.batchMode; }); - it('should return all dirty nodes', function() { + it('should return all dirty nodes', () => { let nodes = e.getDirtyNodes(); expect(nodes.length).toEqual(2); expect(nodes[0].id).toEqual('1'); expect(nodes[1].id).toEqual('2'); }); - it('should\'n clean nodes if batchMode true', function() { + it('should\'n clean nodes if batchMode true', () => { e.batchMode = true; e.cleanNodes(); expect(e.getDirtyNodes().length).toBeGreaterThan(0); }); - it('should clean all dirty nodes', function() { + it('should clean all dirty nodes', () => { e.cleanNodes(); expect(e.getDirtyNodes().length).toEqual(0); }); }); - describe('test batchUpdate/commit >', function() { - beforeAll(function() { + describe('test batchUpdate/commit >', () => { + beforeAll(() => { ePriv = e = new GridStackEngine(); }); - it('should work on not float grids', function() { + it('should work on not float grids', () => { expect(e.float).toEqual(false); e.batchUpdate(); e.batchUpdate(); // double for code coverage - expect(e.batchMode).toBeTrue(); + expect(e.batchMode).toBe(true); expect(e.float).toEqual(true); e.batchUpdate(false); e.batchUpdate(false); - expect(e.batchMode).not.toBeTrue(); - expect(e.float).not.toBeTrue; + expect(e.batchMode).not.toBe(true); + expect(e.float).not.toBe(true); }); - it('should work on float grids', function() { + it('should work on float grids', () => { e.float = true; e.batchUpdate(); - expect(e.batchMode).toBeTrue(); + expect(e.batchMode).toBe(true); expect(e.float).toEqual(true); e.batchUpdate(false); - expect(e.batchMode).not.toBeTrue(); + expect(e.batchMode).not.toBe(true); expect(e.float).toEqual(true); }); }); - describe('test batchUpdate/commit >', function() { + describe('test batchUpdate/commit >', () => { - beforeAll(function() { + beforeAll(() => { ePriv = e = new GridStackEngine({float:true}); }); - it('should work on float grids', function() { + it('should work on float grids', () => { expect(e.float).toEqual(true); e.batchUpdate(); - expect(e.batchMode).toBeTrue(); + expect(e.batchMode).toBe(true); expect(e.float).toEqual(true); e.batchUpdate(false); - expect(e.batchMode).not.toBeTrue(); + expect(e.batchMode).not.toBe(true); expect(e.float).toEqual(true); }); }); - describe('test _notify >', function() { + describe('test _notify >', () => { let spy; - beforeEach(function() { + beforeEach(() => { spy = { - callback: function() {} + callback: () => {} }; - spyOn(spy,'callback'); + vi.spyOn(spy,'callback'); ePriv = e = new GridStackEngine({float:true, onChange: spy.callback}); e.nodes = [ e.prepareNode({x: 0, y: 0, id: '1', _dirty: true}), @@ -217,187 +217,187 @@ describe('gridstack engine:', function() { ]; }); - it('should\'n be called if batchMode true', function() { + it('should\'n be called if batchMode true', () => { e.batchMode = true; ePriv._notify(); expect(spy.callback).not.toHaveBeenCalled(); }); - it('should by called with dirty nodes', function() { + it('should by called with dirty nodes', () => { ePriv._notify(); expect(spy.callback).toHaveBeenCalledWith([e.nodes[0], e.nodes[1]]); }); - it('should by called with extra passed node to be removed', function() { + it('should by called with extra passed node to be removed', () => { let n1 = {id: -1}; ePriv._notify([n1]); expect(spy.callback).toHaveBeenCalledWith([n1, e.nodes[0], e.nodes[1]]); }); }); - describe('test _packNodes >', function() { - describe('using float:false mode >', function() { - beforeEach(function() { + describe('test _packNodes >', () => { + describe('using float:false mode >', () => { + beforeEach(() => { ePriv = e = new GridStackEngine({float:false}); }); - it('shouldn\'t pack one node with y coord eq 0', function() { + it('shouldn\'t pack one node with y coord eq 0', () => { e.nodes = [ e.prepareNode({x: 0, y: 0, w:1, h:1, id: '1'}), ]; ePriv._packNodes(); - expect(findNode('1')).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); + expect(findNode('1')).toEqual(expect.objectContaining({x: 0, y: 0, h: 1})); expect(findNode('1')!._dirty).toBeFalsy(); }); - it('should pack one node correctly', function() { + it('should pack one node correctly', () => { e.nodes = [ e.prepareNode({x: 0, y: 1, w:1, h:1, id: '1'}), ]; ePriv._packNodes(); - expect(findNode('1')).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); + expect(findNode('1')).toEqual(expect.objectContaining({x: 0, y: 0, _dirty: true})); }); - it('should pack nodes correctly', function() { + it('should pack nodes correctly', () => { e.nodes = [ e.prepareNode({x: 0, y: 1, w:1, h:1, id: '1'}), e.prepareNode({x: 0, y: 5, w:1, h:1, id: '2'}), ]; ePriv._packNodes(); - expect(findNode('1')).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); - expect(findNode('2')).toEqual(jasmine.objectContaining({x: 0, y: 1, _dirty: true})); + expect(findNode('1')).toEqual(expect.objectContaining({x: 0, y: 0, _dirty: true})); + expect(findNode('2')).toEqual(expect.objectContaining({x: 0, y: 1, _dirty: true})); }); - it('should pack reverse nodes correctly', function() { + it('should pack reverse nodes correctly', () => { e.nodes = [ e.prepareNode({x: 0, y: 5, w:1, h:1, id: '1'}), e.prepareNode({x: 0, y: 1, w:1, h:1, id: '2'}), ]; ePriv._packNodes(); - expect(findNode('2')).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); - expect(findNode('1')).toEqual(jasmine.objectContaining({x: 0, y: 1, _dirty: true})); + expect(findNode('2')).toEqual(expect.objectContaining({x: 0, y: 0, _dirty: true})); + expect(findNode('1')).toEqual(expect.objectContaining({x: 0, y: 1, _dirty: true})); }); - it('should respect locked nodes', function() { + it('should respect locked nodes', () => { e.nodes = [ e.prepareNode({x: 0, y: 1, w:1, h:1, id: '1', locked: true}), e.prepareNode({x: 0, y: 5, w:1, h:1, id: '2'}), ]; ePriv._packNodes(); - expect(findNode('1')).toEqual(jasmine.objectContaining({x: 0, y: 1, h: 1})); + expect(findNode('1')).toEqual(expect.objectContaining({x: 0, y: 1, h: 1})); expect(findNode('1')!._dirty).toBeFalsy(); - expect(findNode('2')).toEqual(jasmine.objectContaining({x: 0, y: 2, _dirty: true})); + expect(findNode('2')).toEqual(expect.objectContaining({x: 0, y: 2, _dirty: true})); }); }); }); - describe('test changedPos >', function() { - beforeAll(function() { + describe('test changedPos >', () => { + beforeAll(() => { ePriv = e = new GridStackEngine(); }); - it('should return true for changed x', function() { + it('should return true for changed x', () => { let widget = { x: 1, y: 2, w: 3, h: 4 }; expect(e.changedPosConstrain(widget, {x:2, y:2})).toEqual(true); }); - it('should return true for changed y', function() { + it('should return true for changed y', () => { let widget = { x: 1, y: 2, w: 3, h: 4 }; expect(e.changedPosConstrain(widget, {x:1, y:1})).toEqual(true); }); - it('should return true for changed width', function() { + it('should return true for changed width', () => { let widget = { x: 1, y: 2, w: 3, h: 4 }; expect(e.changedPosConstrain(widget, {x:2, y:2, w:4, h:4})).toEqual(true); }); - it('should return true for changed height', function() { + it('should return true for changed height', () => { let widget = { x: 1, y: 2, w: 3, h: 4 }; expect(e.changedPosConstrain(widget, {x:1, y:2, w:3, h:3})).toEqual(true); }); - it('should return false for unchanged position', function() { + it('should return false for unchanged position', () => { let widget = { x: 1, y: 2, w: 3, h: 4 }; expect(e.changedPosConstrain(widget, {x:1, y:2, w:3, h:4})).toEqual(false); }); }); - describe('test locked widget >', function() { - beforeAll(function() { + describe('test locked widget >', () => { + beforeAll(() => { ePriv = e = new GridStackEngine(); }); - it('should add widgets around locked one', function() { + it('should add widgets around locked one', () => { let nodes: GridStackNode[] = [ {x: 0, y: 1, w: 12, h: 1, locked: true, noMove: true, noResize: true, id: '0'}, {x: 1, y: 0, w: 2, h: 3, id: '1'} ]; // add locked item e.addNode(nodes[0]) - expect(findNode('0')).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 12, h: 1, locked: true})); + expect(findNode('0')).toEqual(expect.objectContaining({x: 0, y: 1, w: 12, h: 1, locked: true})); // add item that moves past locked one e.addNode(nodes[1]) - expect(findNode('0')).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 12, h: 1, locked: true})); - expect(findNode('1')).toEqual(jasmine.objectContaining({x: 1, y: 2, h: 3})); + expect(findNode('0')).toEqual(expect.objectContaining({x: 0, y: 1, w: 12, h: 1, locked: true})); + expect(findNode('1')).toEqual(expect.objectContaining({x: 1, y: 2, h: 3})); // locked item can still be moved directly (what user does) let node0 = findNode('0'); expect(e.moveNode(node0!, {y:6})).toEqual(true); - expect(findNode('0')).toEqual(jasmine.objectContaining({x: 0, y: 6, h: 1, locked: true})); + expect(findNode('0')).toEqual(expect.objectContaining({x: 0, y: 6, h: 1, locked: true})); // but moves regular one past it let node1 = findNode('1'); expect(e.moveNode(node1!, {x:6, y:6})).toEqual(true); - expect(node1).toEqual(jasmine.objectContaining({x: 6, y: 7, w: 2, h: 3})); + expect(node1).toEqual(expect.objectContaining({x: 6, y: 7, w: 2, h: 3})); // but moves regular one before (gravity ON) e.float = false; expect(e.moveNode(node1!, {x:7, y:3})).toEqual(true); - expect(node1).toEqual(jasmine.objectContaining({x: 7, y: 0, w: 2, h: 3})); + expect(node1).toEqual(expect.objectContaining({x: 7, y: 0, w: 2, h: 3})); // but moves regular one before (gravity OFF) e.float = true; expect(e.moveNode(node1!, {x:7, y:3})).toEqual(true); - expect(node1).toEqual(jasmine.objectContaining({x: 7, y: 3, w: 2, h: 3})); + expect(node1).toEqual(expect.objectContaining({x: 7, y: 3, w: 2, h: 3})); }); }); - describe('test columnChanged >', function() { - beforeAll(function() { + describe('test columnChanged >', () => { + beforeAll(() => { }); - it('12 to 1 and back', function() { + it('12 to 1 and back', () => { ePriv = e = new GridStackEngine({ column: 12 }); // Add two side-by-side components 6+6 = 12 columns const left = e.addNode({ x: 0, y: 0, w: 6, h: 1, id: 'left' }); const right = e.addNode({ x: 6, y: 0, w: 6, h: 1, id: 'right' }); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 6, h: 1})); - expect(right).toEqual(jasmine.objectContaining({x: 6, y: 0, w: 6, h: 1})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 6, h: 1})); + expect(right).toEqual(expect.objectContaining({x: 6, y: 0, w: 6, h: 1})); // Resize to 1 column e.column = 1; e.columnChanged(12, 1); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 1, h: 1})); - expect(right).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 1, h: 1})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 1, h: 1})); + expect(right).toEqual(expect.objectContaining({x: 0, y: 1, w: 1, h: 1})); // Resize back to 12 column e.column = 12; e.columnChanged(1, 12); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 6, h: 1})); - expect(right).toEqual(jasmine.objectContaining({x: 6, y: 0, w: 6, h: 1})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 6, h: 1})); + expect(right).toEqual(expect.objectContaining({x: 6, y: 0, w: 6, h: 1})); }); - it('24 column to 1 and back', function() { + it('24 column to 1 and back', () => { ePriv = e = new GridStackEngine({ column: 24 }); // Add two side-by-side components 12+12 = 24 columns const left = e.addNode({ x: 0, y: 0, w: 12, h: 1, id: 'left' }); const right = e.addNode({ x: 12, y: 0, w: 12, h: 1, id: 'right' }); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 12, h: 1})); - expect(right).toEqual(jasmine.objectContaining({x: 12, y: 0, w: 12, h: 1})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 12, h: 1})); + expect(right).toEqual(expect.objectContaining({x: 12, y: 0, w: 12, h: 1})); // Resize to 1 column e.column = 1; e.columnChanged(24, 1); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 1, h: 1})); - expect(right).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 1, h: 1})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 1, h: 1})); + expect(right).toEqual(expect.objectContaining({x: 0, y: 1, w: 1, h: 1})); // Resize back to 24 column e.column = 24; e.columnChanged(1, 24); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 12, h: 1})); - expect(right).toEqual(jasmine.objectContaining({x: 12, y: 0, w: 12, h: 1})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 12, h: 1})); + expect(right).toEqual(expect.objectContaining({x: 12, y: 0, w: 12, h: 1})); }); }); - describe('test compact >', function() { - beforeAll(function() { + describe('test compact >', () => { + beforeAll(() => { ePriv = e = new GridStackEngine(); }); - it('do nothing', function() { + it('do nothing', () => { e.compact(); }); }); diff --git a/spec/gridstack-spec.ts b/spec/gridstack-spec.ts index bfbe3668c..cadf6babf 100644 --- a/spec/gridstack-spec.ts +++ b/spec/gridstack-spec.ts @@ -1,7 +1,7 @@ import { GridItemHTMLElement, GridStack, GridStackNode, GridStackWidget } from '../src/gridstack'; import { Utils } from '../src/utils'; -describe('gridstack >', function() { +describe('gridstack >', () => { 'use strict'; let grid: GridStack; @@ -48,43 +48,43 @@ describe('gridstack >', function() { // generic widget with no param let widgetHTML = '
hello
'; - describe('grid.init() / initAll() >', function() { - beforeEach(function() { + describe('grid.init() / initAll() >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('use selector >', function() { + it('use selector >', () => { grid = GridStack.init(undefined, '.grid-stack'); expect(grid).not.toBe(null); }); - it('use selector no dot >', function() { + it('use selector no dot >', () => { grid = GridStack.init(null, 'grid-stack'); expect(grid).not.toBe(null); }); - it('use wrong selector >', function() { + it('use wrong selector >', () => { grid = GridStack.init(null, 'BAD_SELECTOR_TEST'); expect(grid).toEqual(null); }); - it('initAll use selector >', function() { + it('initAll use selector >', () => { grids = GridStack.initAll(undefined, '.grid-stack'); expect(grids.length).toBe(1); }); - it('initAll use selector no dot >', function() { + it('initAll use selector no dot >', () => { grids = GridStack.initAll(undefined, 'grid-stack'); expect(grids.length).toBe(1); }); }); - describe('grid.setAnimation >', function() { - beforeEach(function() { + describe('grid.setAnimation >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should add class grid-stack-animate to the container. >', function() { + it('should add class grid-stack-animate to the container. >', () => { grid = GridStack.init({animate: true}); expect(grid.el.classList.contains('grid-stack-animate')).toBe(true); grid.el.classList.remove('grid-stack-animate'); @@ -92,21 +92,21 @@ describe('gridstack >', function() { grid.setAnimation(true); expect(grid.el.classList.contains('grid-stack-animate')).toBe(true); }); - it('should remove class grid-stack-animate from the container. >', function() { + it('should remove class grid-stack-animate from the container. >', () => { grid = GridStack.init({animate: true}); grid.setAnimation(false); expect(grid.el.classList.contains('grid-stack-animate')).toBe(false); }); }); - describe('grid._setStaticClass >', function() { - beforeEach(function() { + describe('grid._setStaticClass >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should add class grid-stack-static to the container. >', function() { + it('should add class grid-stack-static to the container. >', () => { grid = GridStack.init({staticGrid: true}); expect(grid.el.classList.contains('grid-stack-static')).toBe(true); grid.setStatic(false); @@ -114,7 +114,7 @@ describe('gridstack >', function() { grid.setStatic(true); expect(grid.el.classList.contains('grid-stack-static')).toBe(true); }); - it('should remove class grid-stack-static from the container. >', function() { + it('should remove class grid-stack-static from the container. >', () => { grid = GridStack.init({staticGrid: false}); expect(grid.el.classList.contains('grid-stack-static')).toBe(false); grid.setStatic(true); @@ -122,84 +122,22 @@ describe('gridstack >', function() { }); }); - describe('grid.getCellFromPixel >', function() { - beforeEach(function() { - document.body.insertAdjacentHTML('afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should return {x: 4, y: 5}. >', function() { - let cellHeight = 80; - let options = { - cellHeight, - margin: 5 - }; - grid = GridStack.init(options); - let rect = grid.el.getBoundingClientRect(); - let smudge = 5; - let pixel = {left: 4 * rect.width / 12 + rect.x + smudge, top: 5 * cellHeight + rect.y + smudge}; - let cell = grid.getCellFromPixel(pixel); - expect(cell.x).toBe(4); - // expect(cell.y).toBe(5); can't get rect.y to be set (force render ?) - cell = grid.getCellFromPixel(pixel, false); - expect(cell.x).toBe(4); - // expect(cell.y).toBe(5); - cell = grid.getCellFromPixel(pixel, true); - expect(cell.x).toBe(4); - // expect(cell.y).toBe(5); - - // now move in and get prev cell (we were on the edge) - pixel = {left: 4 * rect.width / 12 + rect.x - smudge, top: 5 * cellHeight + rect.y - smudge}; - cell = grid.getCellFromPixel(pixel); - expect(cell.x).toBe(3); - // expect(cell.y).toBe(4); - cell = grid.getCellFromPixel(pixel, false); - expect(cell.x).toBe(3); - // expect(cell.y).toBe(4); - cell = grid.getCellFromPixel(pixel, true); - expect(cell.x).toBe(3); - // expect(cell.y).toBe(4); - }); - }); + // Note: Pixel-accurate coordinate tests moved to E2E tests + // where real browser layout engines can provide accurate getBoundingClientRect() + // describe('grid.getCellFromPixel >', () => {}); - describe('grid.cellWidth >', function() { - beforeEach(function() { - document.body.insertAdjacentHTML('afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should return 1/12th of container width (not rounded anymore). >', function() { - let options = { - cellHeight: 80, - margin: 5, - column: 12 - }; - grid = GridStack.init(options); - let res = grid.el.offsetWidth / 12; - expect(grid.cellWidth()).toBe(res); - }); - it('should return 1/10th of container width. >', function() { - let options = { - cellHeight: 80, - margin: 5, - column: 10 - }; - grid = GridStack.init(options); - let res = Math.round(grid.el.offsetWidth / 10); - expect(grid.cellWidth()).toBe(res); - }); - }); + // Note: Exact pixel calculation tests moved to E2E tests + // where real browser layout engines can provide accurate offsetWidth + // describe('grid.cellWidth >', () => {}); - describe('grid.cellHeight >', function() { - beforeEach(function() { + describe('grid.cellHeight >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should start at 80 then become 120 >', function() { + it('should set and get cellHeight correctly >', () => { let cellHeight = 80; let margin = 5; let options = { @@ -208,62 +146,61 @@ describe('gridstack >', function() { column: 12 }; grid = GridStack.init(options); + let rows = parseInt(grid.el.getAttribute('gs-current-row')); expect(grid.getRow()).toBe(rows); - expect(grid.getCellHeight()).toBe(cellHeight); - expect(parseInt(getComputedStyle(grid.el)['height'])).toBe(rows * cellHeight); + + // Note: Exact pixel height calculation tests moved to E2E tests + // where real browser layout engines can provide accurate getComputedStyle() values grid.cellHeight( grid.getCellHeight() ); // should be no-op expect(grid.getCellHeight()).toBe(cellHeight); - expect(parseInt(getComputedStyle(grid.el)['height'])).toBe(rows * cellHeight); - cellHeight = 120; // should change and CSS actual height + cellHeight = 120; // should change grid.cellHeight( cellHeight ); expect(grid.getCellHeight()).toBe(cellHeight); - expect(parseInt(getComputedStyle(grid.el)['height'])).toBe(rows * cellHeight); - cellHeight = 20; // should change and CSS actual height + cellHeight = 20; // should change grid.cellHeight( cellHeight ); expect(grid.getCellHeight()).toBe(cellHeight); - expect(parseInt(getComputedStyle(grid.el)['height'])).toBe(rows * cellHeight); }); - it('should be square >', function() { + it('should be square >', () => { grid = GridStack.init({cellHeight: 'auto'}); expect(grid.cellWidth()).toBe( grid.getCellHeight()); }); }); - describe('grid.column >', function() { - beforeEach(function() { + describe('grid.column >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should have no changes >', function() { + it('should have no changes >', () => { grid = GridStack.init(); expect(grid.getColumn()).toBe(12); grid.column(12); expect(grid.getColumn()).toBe(12); }); - it('should set construct CSS class >', function() { + it('should set construct CSS class >', () => { grid = GridStack.init({column: 1}); expect(grid.el.classList.contains('gs-1')).toBe(true); grid.column(2); expect(grid.el.classList.contains('gs-1')).toBe(false); expect(grid.el.classList.contains('gs-2')).toBe(true); }); - it('should set CSS class >', function() { + it('should set CSS class >', () => { grid = GridStack.init(); expect(grid.el.classList.contains('grid-stack')).toBe(true); grid.column(1); expect(grid.el.classList.contains('gs-1')).toBe(true); }); - it('should SMALL change column number, no relayout >', function() { + it('should SMALL change column number, no relayout >', () => { let options = { column: 12 }; @@ -276,7 +213,7 @@ describe('gridstack >', function() { expect(grid.getColumn()).toBe(12); items.forEach(el => expect(el.getAttribute('gs-y')).toBe(null)); }); - it('no sizing, no moving >', function() { + it('no sizing, no moving >', () => { grid = GridStack.init({column: 12}); let items = Utils.getElements('.grid-stack-item'); grid.column(8, 'none'); @@ -286,7 +223,7 @@ describe('gridstack >', function() { expect(el.getAttribute('gs-y')).toBe(null); }); }); - it('no sizing, but moving down >', function() { + it('no sizing, but moving down >', () => { grid = GridStack.init({column: 12}); let items = Utils.getElements('.grid-stack-item'); grid.column(7, 'move'); @@ -295,7 +232,7 @@ describe('gridstack >', function() { expect(items[0].getAttribute('gs-y')).toBe(null); expect(parseInt(items[1].getAttribute('gs-y'))).toBe(2); }); - it('should change column number and re-layout items >', function() { + it('should change column number and re-layout items >', () => { let options = { column: 12, float: true @@ -432,15 +369,15 @@ describe('gridstack >', function() { }); }); - describe('grid.column larger layout >', function() { - beforeEach(function() { + describe('grid.column larger layout >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackEmptyHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('24 layout in 12 column to 1 back 12 then 24 >', function() { + it('24 layout in 12 column to 1 back 12 then 24 >', () => { const children: GridStackWidget[] = [{ x: 0, y: 0, w: 12, h: 1, id: 'left' }, { x: 12, y: 0, w: 12, h: 1, id: 'right' }]; children.forEach(c => c.content = c.id); @@ -449,22 +386,22 @@ describe('gridstack >', function() { const right = find('right'); // side-by-side components 12+12 = 24 columns but only have 12! - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 12})); - expect(right).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 12})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 12})); + expect(right).toEqual(expect.objectContaining({x: 0, y: 1, w: 12})); // Resize to 1 column grid.column(1); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 1})); - expect(right).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 1})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 1})); + expect(right).toEqual(expect.objectContaining({x: 0, y: 1, w: 1})); // Resize back to 12 column grid.column(12); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 12})); - expect(right).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 12})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 12})); + expect(right).toEqual(expect.objectContaining({x: 0, y: 1, w: 12})); // Resize to 24 column grid.column(24); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 12})); - expect(right).toEqual(jasmine.objectContaining({x: 12, y: 0, w: 12})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 12})); + expect(right).toEqual(expect.objectContaining({x: 12, y: 0, w: 12})); }); - it('24 column to 12, 1 back 12,24 >', function() { + it('24 column to 12, 1 back 12,24 >', () => { const children: GridStackWidget[] = [{ x: 0, y: 0, w: 12, h: 1, id: 'left' }, { x: 12, y: 0, w: 12, h: 1, id: 'right' }]; children.forEach(c => c.content = c.id); @@ -473,36 +410,36 @@ describe('gridstack >', function() { const right = find('right'); // side-by-side components 12+12 = 24 columns - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 12})); - expect(right).toEqual(jasmine.objectContaining({x: 12, y: 0, w: 12})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 12})); + expect(right).toEqual(expect.objectContaining({x: 12, y: 0, w: 12})); // Resize to 12 column grid.column(12); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 6})); - expect(right).toEqual(jasmine.objectContaining({x: 6, y: 0, w: 6})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 6})); + expect(right).toEqual(expect.objectContaining({x: 6, y: 0, w: 6})); // Resize to 1 column grid.column(1); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 1})); - expect(right).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 1})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 1})); + expect(right).toEqual(expect.objectContaining({x: 0, y: 1, w: 1})); // back to 12 column grid.column(12); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 6})); - expect(right).toEqual(jasmine.objectContaining({x: 6, y: 0, w: 6})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 6})); + expect(right).toEqual(expect.objectContaining({x: 6, y: 0, w: 6})); // back to 24 column grid.column(24); - expect(left).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 12})); - expect(right).toEqual(jasmine.objectContaining({x: 12, y: 0, w: 12})); + expect(left).toEqual(expect.objectContaining({x: 0, y: 0, w: 12})); + expect(right).toEqual(expect.objectContaining({x: 12, y: 0, w: 12})); }); }); - // describe('oneColumnModeDomSort >', function() { - // beforeEach(function() { + // describe('oneColumnModeDomSort >', () => { + // beforeEach(() => { // document.body.insertAdjacentHTML('afterbegin', gridstackEmptyHTML); // }); - // afterEach(function() { + // afterEach(() => { // document.body.removeChild(document.getElementById('gs-cont')); // }); - // it('should support default going to 1 column >', function() { + // it('should support default going to 1 column >', () => { // let options = { // column: 12, // float: true @@ -549,7 +486,7 @@ describe('gridstack >', function() { // expect(el2.getAttribute('gs-w')).toBe(null); // expect(el2.getAttribute('gs-h')).toBe(null); // }); - // it('should support oneColumnModeDomSort ON going to 1 column >', function() { + // it('should support oneColumnModeDomSort ON going to 1 column >', () => { // let options = { // column: 12, // oneColumnModeDomSort: true, @@ -595,39 +532,39 @@ describe('gridstack >', function() { // }); // }); - // describe('disableOneColumnMode >', function() { - // beforeEach(function() { + // describe('disableOneColumnMode >', () => { + // beforeEach(() => { // document.body.insertAdjacentHTML('afterbegin', gridstackSmallHTML); // smaller default to 1 column // }); - // afterEach(function() { + // afterEach(() => { // document.body.removeChild(document.getElementById('gs-cont')); // }); - // it('should go to 1 column >', function() { + // it('should go to 1 column >', () => { // grid = GridStack.init(); // expect(grid.getColumn()).toBe(1); // }); - // it('should go to 1 column with large minW >', function() { + // it('should go to 1 column with large minW >', () => { // grid = GridStack.init({oneColumnSize: 1000}); // expect(grid.getColumn()).toBe(1); // }); - // it('should stay at 12 with minW >', function() { + // it('should stay at 12 with minW >', () => { // grid = GridStack.init({oneColumnSize: 300}); // expect(grid.getColumn()).toBe(12); // }); - // it('should stay at 12 column >', function() { + // it('should stay at 12 column >', () => { // grid = GridStack.init({disableOneColumnMode: true}); // expect(grid.getColumn()).toBe(12); // }); // }); - describe('grid.minRow >', function() { - beforeEach(function() { + describe('grid.minRow >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should default to row 0 when empty >', function() { + it('should default to row 0 when empty >', () => { let options = {}; grid = GridStack.init(options); expect(grid.getRow()).toBe(4); @@ -636,7 +573,7 @@ describe('gridstack >', function() { grid.removeAll(); expect(grid.getRow()).toBe(0); }); - it('should default to row 2 when empty >', function() { + it('should default to row 2 when empty >', () => { let options = {minRow: 2}; grid = GridStack.init(options); expect(grid.getRow()).toBe(4); @@ -646,7 +583,7 @@ describe('gridstack >', function() { expect(grid.engine.getRow()).toBe(0); expect(grid.getRow()).toBe(2); }); - it('should set min = max = 3 rows >', function() { + it('should set min = max = 3 rows >', () => { let options = {row: 3}; grid = GridStack.init(options); expect(grid.getRow()).toBe(3); // shrink elements to fit maxRow! @@ -656,7 +593,7 @@ describe('gridstack >', function() { expect(grid.engine.getRow()).toBe(0); expect(grid.getRow()).toBe(3); }); - it('willItFit() >', function() { + it('willItFit() >', () => { // default 4x2 and 4x4 so anything pushing more than 1 will fail grid = GridStack.init({maxRow: 5}); expect(grid.willItFit({x:0, y:0, w:1, h:1})).toBe(true); @@ -665,7 +602,7 @@ describe('gridstack >', function() { expect(grid.willItFit({x:0, y:0, w:12, h:1})).toBe(true); expect(grid.willItFit({x:0, y:0, w:12, h:2})).toBe(false); }); - it('willItFit() not modifying node #1687 >', function() { + it('willItFit() not modifying node #1687 >', () => { // default 4x2 and 4x4 so anything pushing more than 1 will fail grid = GridStack.init({maxRow: 5}); let node: GridStackNode = {x:0, y:0, w:1, h:1, _id: 1, _temporaryRemoved: true}; @@ -676,11 +613,11 @@ describe('gridstack >', function() { }); - describe('grid attributes >', function() { - afterEach(function() { + describe('grid attributes >', () => { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should have row attr >', function() { + it('should have row attr >', () => { let HTML = '
' + '
' + // old attr current-height @@ -696,14 +633,14 @@ describe('gridstack >', function() { }); }); - describe('grid.min/max width/height >', function() { - beforeEach(function() { + describe('grid.min/max width/height >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should set gs-min-w to 2. >', function() { + it('should set gs-min-w to 2. >', () => { grid = GridStack.init(); let items: GridItemHTMLElement[] = Utils.getElements('.grid-stack-item'); items.forEach(el => grid.update(el, {minW: 2, maxW: 3, minH: 4, maxH: 5})); @@ -732,14 +669,14 @@ describe('gridstack >', function() { }); }); - describe('grid.isAreaEmpty >', function() { - beforeEach(function() { + describe('grid.isAreaEmpty >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should set return false. >', function() { + it('should set return false. >', () => { let options = { cellHeight: 80, margin: 5 @@ -748,7 +685,7 @@ describe('gridstack >', function() { let shouldBeFalse = grid.isAreaEmpty(1, 1, 1, 1); expect(shouldBeFalse).toBe(false); }); - it('should set return true. >', function() { + it('should set return true. >', () => { let options = { cellHeight: 80, margin: 5 @@ -759,26 +696,26 @@ describe('gridstack >', function() { }); }); - describe('grid.removeAll >', function() { - beforeEach(function() { + describe('grid.removeAll >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should remove all children by default >', function() { + it('should remove all children by default >', () => { grid = GridStack.init(); grid.removeAll(); expect(grid.engine.nodes).toEqual([]); expect(document.getElementById('item1')).toBe(null); }); - it('should remove all children >', function() { + it('should remove all children >', () => { grid = GridStack.init(); grid.removeAll(true); expect(grid.engine.nodes).toEqual([]); expect(document.getElementById('item1')).toBe(null); }); - it('should remove gridstack part, leave DOM behind >', function() { + it('should remove gridstack part, leave DOM behind >', () => { grid = GridStack.init(); grid.removeAll(false); expect(grid.engine.nodes).toEqual([]); @@ -786,14 +723,14 @@ describe('gridstack >', function() { }); }); - describe('grid.removeWidget >', function() { - beforeEach(function() { + describe('grid.removeWidget >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should remove first item (default), then second (false) >', function() { + it('should remove first item (default), then second (false) >', () => { grid = GridStack.init(); expect(grid.engine.nodes.length).toEqual(2); @@ -811,14 +748,14 @@ describe('gridstack >', function() { }); }); - describe('grid method _packNodes with float >', function() { - beforeEach(function() { + describe('grid method _packNodes with float >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should allow same x, y coordinates for widgets. >', function() { + it('should allow same x, y coordinates for widgets. >', () => { let options = { cellHeight: 80, margin: 5, @@ -832,7 +769,7 @@ describe('gridstack >', function() { expect(oldEl.getAttribute('gs-y')).toBe(el.getAttribute('gs-y')); }) }); - it('should not allow same x, y coordinates for widgets. >', function() { + it('should not allow same x, y coordinates for widgets. >', () => { let options = { cellHeight: 80, margin: 5 @@ -847,14 +784,14 @@ describe('gridstack >', function() { }); }); - describe('grid method addWidget with all parameters >', function() { - beforeEach(function() { + describe('grid method addWidget with all parameters >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should keep all widget options the same (autoPosition off >', function() { + it('should keep all widget options the same (autoPosition off >', () => { grid = GridStack.init({float: true});; let w = grid.addWidget({x: 6, y:7, w:2, h:3, autoPosition:false, minW:1, maxW:4, minH:2, maxH:5, id:'coolWidget'}); @@ -889,14 +826,14 @@ describe('gridstack >', function() { }); }); - describe('grid method addWidget with autoPosition true >', function() { - beforeEach(function() { + describe('grid method addWidget with autoPosition true >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should change x, y coordinates for widgets. >', function() { + it('should change x, y coordinates for widgets. >', () => { grid = GridStack.init({float: true}); let w = grid.addWidget({x:9, y:7, w:2, h:3, autoPosition:true}); @@ -905,14 +842,14 @@ describe('gridstack >', function() { }); }); - describe('grid method addWidget with widget options >', function() { - beforeEach(function() { + describe('grid method addWidget with widget options >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should autoPosition (missing X,Y) >', function() { + it('should autoPosition (missing X,Y) >', () => { grid = GridStack.init(); let w = grid.addWidget({h: 2, id: 'optionWidget'}); @@ -923,7 +860,7 @@ describe('gridstack >', function() { // expect(w.getAttribute('gs-auto-position')).toBe('true'); expect(w.getAttribute('gs-id')).toBe('optionWidget'); }); - it('should autoPosition (missing X) >', function() { + it('should autoPosition (missing X) >', () => { grid = GridStack.init(); let w = grid.addWidget({y: 9, h: 2, id: 'optionWidget'}); @@ -934,7 +871,7 @@ describe('gridstack >', function() { // expect(w.getAttribute('gs-auto-position')).toBe('true'); expect(w.getAttribute('gs-id')).toBe('optionWidget'); }); - it('should autoPosition (missing Y) >', function() { + it('should autoPosition (missing Y) >', () => { grid = GridStack.init(); let w = grid.addWidget({x: 9, h: 2, id: 'optionWidget'}); @@ -945,7 +882,7 @@ describe('gridstack >', function() { // expect(w.getAttribute('gs-auto-position')).toBe('true'); expect(w.getAttribute('gs-id')).toBe('optionWidget'); }); - it('should autoPosition (correct X, missing Y) >', function() { + it('should autoPosition (correct X, missing Y) >', () => { grid = GridStack.init(); let w = grid.addWidget({x: 8, h: 2, id: 'optionWidget'}); @@ -956,7 +893,7 @@ describe('gridstack >', function() { // expect(w.getAttribute('gs-auto-position')).toBe('true'); expect(w.getAttribute('gs-id')).toBe('optionWidget'); }); - it('should autoPosition (empty options) >', function() { + it('should autoPosition (empty options) >', () => { grid = GridStack.init(); let w = grid.addWidget({ }); @@ -969,14 +906,14 @@ describe('gridstack >', function() { }); - describe('addWidget() >', function() { - beforeEach(function() { + describe('addWidget() >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('bad string options should use default >', function() { + it('bad string options should use default >', () => { grid = GridStack.init(); let w = grid.addWidget({x: 'foo', y: null, w: 'bar', h: ''} as any); @@ -985,7 +922,7 @@ describe('gridstack >', function() { expect(w.getAttribute('gs-w')).toBe(null); expect(w.getAttribute('gs-h')).toBe(null); }); - it('makeWidget attr should be retained >', function() { // #1276 + it('makeWidget attr should be retained >', () => { // #1276 grid = GridStack.init({float: true}); const d = document.createElement('div'); d.innerHTML = '
foo content
'; @@ -998,7 +935,7 @@ describe('gridstack >', function() { expect(w.getAttribute('gs-h')).toBe(null); expect(w.getAttribute('gs-id')).toBe('gsfoo'); }); - it('makeWidget width option override >', function() { + it('makeWidget width option override >', () => { grid = GridStack.init({float: true}); const d = document.createElement('div'); d.innerHTML = '
foo content
'; @@ -1012,14 +949,14 @@ describe('gridstack >', function() { }); }); - describe('makeWidget() >', function() { - beforeEach(function() { + describe('makeWidget() >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackEmptyHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('passing element >', function() { + it('passing element >', () => { grid = GridStack.init(); let doc = document.implementation.createHTMLDocument(); doc.body.innerHTML = '
'; @@ -1028,7 +965,7 @@ describe('gridstack >', function() { let w = grid.makeWidget(el); expect(w.getAttribute('gs-x')).toBe(null); }); - it('passing element float=true >', function() { + it('passing element float=true >', () => { grid = GridStack.init({float: true}); let doc = document.implementation.createHTMLDocument(); doc.body.innerHTML = '
'; @@ -1037,7 +974,7 @@ describe('gridstack >', function() { let w = grid.makeWidget(el); expect(w.getAttribute('gs-x')).toBe(null); }); - it('passing class >', function() { + it('passing class >', () => { grid = GridStack.init(); let doc = document.implementation.createHTMLDocument(); doc.body.innerHTML = '
'; @@ -1046,7 +983,7 @@ describe('gridstack >', function() { let w = grid.makeWidget('.item'); expect(w.getAttribute('gs-x')).toBe(null); }); - it('passing class no dot >', function() { + it('passing class no dot >', () => { grid = GridStack.init(); let doc = document.implementation.createHTMLDocument(); doc.body.innerHTML = '
'; @@ -1055,7 +992,7 @@ describe('gridstack >', function() { let w = grid.makeWidget('item'); expect(w.getAttribute('gs-x')).toBe(null); }); - it('passing id >', function() { + it('passing id >', () => { grid = GridStack.init(); let doc = document.implementation.createHTMLDocument(); doc.body.innerHTML = '
'; @@ -1064,7 +1001,7 @@ describe('gridstack >', function() { let w = grid.makeWidget('#item'); expect(w.getAttribute('gs-x')).toBe(null); }); - it('passing id no # >', function() { + it('passing id no # >', () => { grid = GridStack.init(); let doc = document.implementation.createHTMLDocument(); doc.body.innerHTML = '
'; @@ -1073,7 +1010,7 @@ describe('gridstack >', function() { let w = grid.makeWidget('item'); expect(w.getAttribute('gs-x')).toBe(null); }); - it('passing id as number >', function() { + it('passing id as number >', () => { grid = GridStack.init(); let doc = document.implementation.createHTMLDocument(); doc.body.innerHTML = '
'; @@ -1084,14 +1021,14 @@ describe('gridstack >', function() { }); }); - describe('method getFloat() >', function() { - beforeEach(function() { + describe('method getFloat() >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should match true/false only >', function() { + it('should match true/false only >', () => { grid = GridStack.init({float: true}); expect(grid.getFloat()).toBe(true); (grid as any).float(0); @@ -1105,14 +1042,14 @@ describe('gridstack >', function() { }); }); - describe('grid.destroy >', function() { - beforeEach(function() { + describe('grid.destroy >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.getElementById('gs-cont').remove(); }); - it('should cleanup gridstack >', function() { + it('should cleanup gridstack >', () => { let options = { cellHeight: 80, margin: 5 @@ -1124,7 +1061,7 @@ describe('gridstack >', function() { expect(grid.el).toBe(undefined); expect(grid.engine).toBe(undefined); }); - it('should cleanup gridstack but leave elements >', function() { + it('should cleanup gridstack but leave elements >', () => { let options = { cellHeight: 80, margin: 5 @@ -1140,14 +1077,14 @@ describe('gridstack >', function() { }); }); - describe('grid.resize >', function() { - beforeEach(function() { + describe('grid.resize >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should resize widget >', function() { + it('should resize widget >', () => { let options = { cellHeight: 80, margin: 5 @@ -1160,14 +1097,14 @@ describe('gridstack >', function() { }); }); - describe('grid.move >', function() { - beforeEach(function() { + describe('grid.move >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should move widget >', function() { + it('should move widget >', () => { let options = { cellHeight: 80, margin: 5, @@ -1181,14 +1118,14 @@ describe('gridstack >', function() { }); }); - describe('grid.update >', function() { - beforeEach(function() { + describe('grid.update >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should move and resize widget >', function() { + it('should move and resize widget >', () => { grid = GridStack.init({float: true}); let el = Utils.getElements('.grid-stack-item')[1]; expect(parseInt(el.getAttribute('gs-w'))).toBe(4); @@ -1199,7 +1136,7 @@ describe('gridstack >', function() { expect(parseInt(el.getAttribute('gs-w'))).toBe(4); expect(parseInt(el.getAttribute('gs-h'))).toBe(2); }); - it('should change noMove >', function() { + it('should change noMove >', () => { grid = GridStack.init({float: true}); let items = Utils.getElements('.grid-stack-item'); let el = items[1]; @@ -1218,7 +1155,7 @@ describe('gridstack >', function() { expect(parseInt(el.getAttribute('gs-w'))).toBe(4); expect(parseInt(el.getAttribute('gs-h'))).toBe(4); }); - it('should change content and id, and move >', function() { + it('should change content and id, and move >', () => { grid = GridStack.init({float: true}); let el = findEl('gsItem2'); let sub = el.querySelector('.grid-stack-item-content'); @@ -1232,7 +1169,7 @@ describe('gridstack >', function() { expect(parseInt(el.getAttribute('gs-w'))).toBe(4); expect(parseInt(el.getAttribute('gs-h'))).toBe(4); }); - it('should change max and constrain a wanted resize >', function() { + it('should change max and constrain a wanted resize >', () => { grid = GridStack.init({float: true}); let el = findEl('gsItem2'); expect(el.getAttribute('gs-max-w')).toBe(null); @@ -1244,7 +1181,7 @@ describe('gridstack >', function() { expect(parseInt(el.getAttribute('gs-h'))).toBe(4); expect(el.gridstackNode.maxW).toBe(2); }); - it('should change max and constrain existing >', function() { + it('should change max and constrain existing >', () => { grid = GridStack.init({float: true}); let el = findEl('gsItem2'); expect(el.getAttribute('gs-max-w')).toBe(null); @@ -1256,7 +1193,7 @@ describe('gridstack >', function() { expect(parseInt(el.getAttribute('gs-h'))).toBe(4); expect(el.gridstackNode.maxW).toBe(2); }); - it('should change all max and move, no inf loop! >', function() { + it('should change all max and move, no inf loop! >', () => { grid = GridStack.init({float: true}); let items = Utils.getElements('.grid-stack-item'); @@ -1278,14 +1215,14 @@ describe('gridstack >', function() { }); }); - describe('grid.margin >', function() { - beforeEach(function() { + describe('grid.margin >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should return margin >', function() { + it('should return margin >', () => { let options = { cellHeight: 80, margin: 12 @@ -1293,7 +1230,7 @@ describe('gridstack >', function() { grid = GridStack.init(options); expect(grid.getMargin()).toBe(12); }); - it('should return update margin >', function() { + it('should return update margin >', () => { let options = { cellHeight: 80, margin: 5 @@ -1302,7 +1239,7 @@ describe('gridstack >', function() { grid.margin('11rem'); expect(grid.getMargin()).toBe(11); }); - it('should change unit >', function() { + it('should change unit >', () => { let options = { cellHeight: 80, margin: 10, @@ -1312,19 +1249,19 @@ describe('gridstack >', function() { grid.margin('10rem'); expect(grid.getMargin()).toBe(10); }); - it('should not update css vars, with same value >', function() { + it('should not update css vars, with same value >', () => { let options = { cellHeight: 80, margin: 5 }; let grid: any = GridStack.init(options); expect(grid.getMargin()).toBe(5); - spyOn(grid, '_initMargin'); + vi.spyOn(grid, '_initMargin'); grid.margin('5px'); expect(grid._initMargin).not.toHaveBeenCalled(); expect(grid.getMargin()).toBe(5); }); - it('should set top/bot/left value directly >', function() { + it('should set top/bot/left value directly >', () => { let options = { cellHeight: 80, marginTop: 5, @@ -1338,7 +1275,7 @@ describe('gridstack >', function() { expect(grid.opts.marginLeft).toBe(1); expect(grid.opts.marginRight).toBe(10); // default value }); - it('should set all 4 sides, and overall margin >', function() { + it('should set all 4 sides, and overall margin >', () => { let options = { cellHeight: 80, marginTop: 5, @@ -1353,7 +1290,7 @@ describe('gridstack >', function() { expect(grid.opts.marginLeft).toBe(5); expect(grid.opts.marginRight).toBe(5); }); - it('init 2 values >', function() { + it('init 2 values >', () => { let options = { cellHeight: 80, margin: '5px 10' @@ -1365,7 +1302,7 @@ describe('gridstack >', function() { expect(grid.opts.marginLeft).toBe(10); expect(grid.opts.marginRight).toBe(10); }); - it('init 4 values >', function() { + it('init 4 values >', () => { let options = { cellHeight: 80, margin: '1 2 0em 3' @@ -1377,7 +1314,7 @@ describe('gridstack >', function() { expect(grid.opts.marginBottom).toBe(0); expect(grid.opts.marginLeft).toBe(3); }); - it('set 2 values, should update css vars >', function() { + it('set 2 values, should update css vars >', () => { let options = { cellHeight: 80, margin: 5 @@ -1393,14 +1330,14 @@ describe('gridstack >', function() { }); }); - describe('grid.opts.rtl >', function() { - beforeEach(function() { + describe('grid.opts.rtl >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should add grid-stack-rtl class >', function() { + it('should add grid-stack-rtl class >', () => { let options = { cellHeight: 80, margin: 5, @@ -1409,7 +1346,7 @@ describe('gridstack >', function() { grid = GridStack.init(options); expect(grid.el.classList.contains('grid-stack-rtl')).toBe(true); }); - it('should not add grid-stack-rtl class >', function() { + it('should not add grid-stack-rtl class >', () => { let options = { cellHeight: 80, margin: 5 @@ -1419,14 +1356,14 @@ describe('gridstack >', function() { }); }); - describe('grid.enableMove', function() { - beforeEach(function() { + describe('grid.enableMove', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should enable move for future also', function() { + it('should enable move for future also', () => { let options = { cellHeight: 80, margin: 5, @@ -1441,7 +1378,7 @@ describe('gridstack >', function() { items.forEach(el => expect(el.classList.contains('ui-draggable-disabled')).toBe(false)); expect(grid.opts.disableDrag).not.toBe(true); }); - it('should disable move for existing only >', function() { + it('should disable move for existing only >', () => { let options = { cellHeight: 80, margin: 5 @@ -1457,14 +1394,14 @@ describe('gridstack >', function() { }); }); - describe('grid.enableResize >', function() { - beforeEach(function() { + describe('grid.enableResize >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should enable resize >', function() { + it('should enable resize >', () => { let options = { cellHeight: 80, margin: 5, @@ -1486,7 +1423,7 @@ describe('gridstack >', function() { expect(dd.isDraggable(el)).toBe(true); }); }); - it('should disable resize >', function() { + it('should disable resize >', () => { let options = { cellHeight: 80, margin: 5 @@ -1505,14 +1442,14 @@ describe('gridstack >', function() { }); }); - describe('grid.enable >', function() { - beforeEach(function() { + describe('grid.enable >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should enable movable and resizable >', function() { + it('should enable movable and resizable >', () => { let options = { cellHeight: 80, margin: 5 @@ -1536,14 +1473,14 @@ describe('gridstack >', function() { }); }); - describe('grid.enable >', function() { - beforeEach(function() { + describe('grid.enable >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should lock widgets >', function() { + it('should lock widgets >', () => { let options = { cellHeight: 80, margin: 5 @@ -1554,7 +1491,7 @@ describe('gridstack >', function() { expect(item.getAttribute('gs-locked')).toBe('true'); }) }); - it('should unlock widgets >', function() { + it('should unlock widgets >', () => { let options = { cellHeight: 80, margin: 5 @@ -1567,7 +1504,7 @@ describe('gridstack >', function() { }); }); - describe('custom grid placement #1054 >', function() { + describe('custom grid placement #1054 >', () => { let HTML = '
' + '
' + @@ -1586,13 +1523,13 @@ describe('gridstack >', function() { '
' + '
'; let pos = [{x:0, y:0, w:12, h:9}, {x:0, y:9, w:12, h:5}, {x:0, y:14, w:7, h:6}, {x:7, y:14, w:5, h:6}]; - beforeEach(function() { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', HTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should have correct position >', function() { + it('should have correct position >', () => { let items = Utils.getElements('.grid-stack-item'); items.forEach((el, i) => { expect(parseInt(el.getAttribute('gs-x'))).toBe(pos[i].x); @@ -1603,14 +1540,14 @@ describe('gridstack >', function() { }); }); - describe('grid.compact >', function() { - beforeEach(function() { + describe('grid.compact >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should move all 3 items to top-left with no space >', function() { + it('should move all 3 items to top-left with no space >', () => { grid = GridStack.init({float: true}); let el3 = grid.addWidget({x: 3, y: 5}); @@ -1621,7 +1558,7 @@ describe('gridstack >', function() { expect(parseInt(el3.getAttribute('gs-x'))).toBe(8); expect(el3.getAttribute('gs-y')).toBe(null); }); - it('not move locked item >', function() { + it('not move locked item >', () => { grid = GridStack.init({float: true}); let el3 = grid.addWidget({x: 3, y: 5, locked: true, noMove: true}); @@ -1634,14 +1571,14 @@ describe('gridstack >', function() { }); }); - describe('gridOption locked #1181 >', function() { - beforeEach(function() { + describe('gridOption locked #1181 >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackEmptyHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('not move locked item, size down added one >', function() { + it('not move locked item, size down added one >', () => { grid = GridStack.init(); let el1 = grid.addWidget({x: 0, y: 1, w: 12, locked: true}); expect(el1.getAttribute('gs-x')).toBe(null); @@ -1657,14 +1594,14 @@ describe('gridstack >', function() { }); - describe('nested grids >', function() { - beforeEach(function() { + describe('nested grids >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackNestedHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should both init, second with nested class >', function() { + it('should both init, second with nested class >', () => { grids = GridStack.initAll(); expect(grids.length).toBe(2); expect(grids[0].el.classList.contains('grid-stack-nested')).toBe(false); @@ -1672,17 +1609,17 @@ describe('gridstack >', function() { }); }); - describe('two grids >', function() { - beforeEach(function() { + describe('two grids >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridHTML); document.body.insertAdjacentHTML('afterbegin', gridHTML); }); - afterEach(function() { + afterEach(() => { let els = document.body.querySelectorAll('.grid-stack'); expect(els.length).toBe(2); els.forEach(g => g.remove()); }); - it('should not remove incorrect child >', function() { + it('should not remove incorrect child >', () => { grids = GridStack.initAll(); expect(grids.length).toBe(2); expect(grids[0].engine.nodes.length).toBe(2); @@ -1700,7 +1637,7 @@ describe('gridstack >', function() { expect(grids[1].engine.nodes.length).toBe(0); expect(grids[1].el.children.length).toBe(0); }); - it('should remove 1 child >', function() { + it('should remove 1 child >', () => { grids = GridStack.initAll(); grids[1].removeWidget( grids[1].engine.nodes[0].el ); expect(grids[0].engine.nodes.length).toBe(2); @@ -1710,14 +1647,14 @@ describe('gridstack >', function() { }); }); - describe('grid.on events >', function() { - beforeEach(function() { + describe('grid.on events >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('add 3 single events >', function() { + it('add 3 single events >', () => { grid = GridStack.init(); let fcn = (event: Event) => {}; grid.on('added', fcn).on('enable', fcn).on('dragstart', fcn); @@ -1725,7 +1662,7 @@ describe('gridstack >', function() { grid.off('added').off('enable').off('dragstart'); expect((grid as any)._gsEventHandler.enable).toBe(undefined); }); - it('add 3 events >', function() { + it('add 3 events >', () => { let grid: any = GridStack.init(); // prevent TS check for string combine... let fcn = (event: CustomEvent) => {}; grid.on('added enable dragstart', fcn); @@ -1736,14 +1673,14 @@ describe('gridstack >', function() { }); - describe('save & load >', function() { - beforeEach(function() { + describe('save & load >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('save layout >', function() { + it('save layout >', () => { grid = GridStack.init({maxRow: 10}); let layout = grid.save(false); expect(layout).toEqual([{x:0, y:0, w:4, h:2, id:'gsItem1'}, {x:4, y:0, w:4, h:4, id:'gsItem2'}]); @@ -1752,32 +1689,32 @@ describe('gridstack >', function() { layout = grid.save(true); expect(layout).toEqual([{x:0, y:0, w:4, h:2, id:'gsItem1', content:'item 1 text'}, {x:4, y:0, w:4, h:4, id:'gsItem2', content:'item 2 text'}]); }); - it('save layout full >', function() { + it('save layout full >', () => { grid = GridStack.init({maxRow: 10, _foo: 'bar'} as any); // using bogus 'internal' field (stripped) let layout = grid.save(false, true); expect(layout).toEqual({maxRow: 10, children: [{x:0, y:0, w:4, h:2, id:'gsItem1'}, {x:4, y:0, w:4, h:4, id:'gsItem2'}]}); layout = grid.save(true, true); expect(layout).toEqual({maxRow: 10, children: [{x:0, y:0, w:4, h:2, id:'gsItem1', content:'item 1 text'}, {x:4, y:0, w:4, h:4, id:'gsItem2', content:'item 2 text'}]}); }); - it('load move 1 item, delete others >', function() { + it('load move 1 item, delete others >', () => { grid = GridStack.init(); grid.load([{x:2, h:1, id:'gsItem2'}]); let layout = grid.save(false); expect(layout).toEqual([{x:0, y:0, id:'gsItem2'}]); }); - it('load add new, delete others >', function() { + it('load add new, delete others >', () => { grid = GridStack.init(); grid.load([{w:2, y:0, h:1, id:'gsItem3'}], true); let layout = grid.save(false); expect(layout).toEqual([{x:0, y:0, w:2, id:'gsItem3'}]); }); - it('load 1 item only, no remove >', function() { + it('load 1 item only, no remove >', () => { grid = GridStack.init(); grid.load([{h:3, id:'gsItem1'}], false); let layout = grid.save(false); expect(layout).toEqual([{x:0, y:0, h:3, id:'gsItem1'}, {x:4, y:0, w:4, h:4, id:'gsItem2'}]); }); - it('load 1 item only with callback >', function() { + it('load 1 item only with callback >', () => { grid = GridStack.init(); grid.load([{h:3, id:'gsItem1'}], () => null); let layout = grid.save(false); @@ -1785,14 +1722,14 @@ describe('gridstack >', function() { }); }); - describe('load >', function() { - beforeEach(function() { + describe('load >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('after init #1693 >', function() { + it('after init #1693 >', () => { grid = GridStack.init(); grid.load([{id:'gsItem1',x:0,y:0,w:5,h:1},{id:'gsItem2',x:6,y:0,w:2,h:2}]); @@ -1808,7 +1745,7 @@ describe('gridstack >', function() { expect(parseInt(el2.getAttribute('gs-w'))).toBe(2); expect(parseInt(el2.getAttribute('gs-h'))).toBe(2); }); - it('after init replace nodes >', function() { + it('after init replace nodes >', () => { grid = GridStack.init(); expect(document.getElementById('item1')).not.toBe(null); expect(document.getElementById('item2')).not.toBe(null); @@ -1833,7 +1770,7 @@ describe('gridstack >', function() { }); }); - describe('load empty >', function() { + describe('load empty >', () => { let items: GridStackWidget[]; let grid: GridStack; const test = () => { @@ -1843,7 +1780,7 @@ describe('gridstack >', function() { else expect(n.el.getAttribute('gs-y')).toBe(null); }); } - beforeEach(function() { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackEmptyHTML); items = [ {id: '0', x: 0, y: 0}, @@ -1852,10 +1789,10 @@ describe('gridstack >', function() { {id: '3', x: 0, y: 3}, ]; }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('update collision >', function() { + it('update collision >', () => { grid = GridStack.init({children: items}); const n = grid.engine.nodes[0]; test(); @@ -1868,7 +1805,7 @@ describe('gridstack >', function() { items[1].y = 1; items[2].y = 2; items[3].y = 3; test(); }); - it('load collision 2208 >', function() { + it('load collision 2208 >', () => { grid = GridStack.init({children: items}); test(); @@ -1882,7 +1819,7 @@ describe('gridstack >', function() { items[1].y = 1; items[2].y = 2; items[3].y = 3; test(); }); - it('load full collision 2208 >', function() { + it('load full collision 2208 >', () => { grid = GridStack.init({children: items}); test(); @@ -1905,20 +1842,20 @@ describe('gridstack >', function() { }); // ..and finally track log warnings at the end, instead of displaying them.... - describe('obsolete warnings >', function() { - console.warn = jasmine.createSpy('log'); // track warnings instead of displaying them - beforeEach(function() { + describe('obsolete warnings >', () => { + console.warn = vi.fn(); // track warnings instead of displaying them + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('willItFit() legacy >', function() { + it('willItFit() legacy >', () => { grid = GridStack.init({maxRow: 5}); expect((grid as any).willItFit(0, 0, 1, 3, false)).toBe(true); expect((grid as any).willItFit(0, 0, 1, 4, false)).toBe(false); }); - it('warning if OLD commit() is called >', function() { + it('warning if OLD commit() is called >', () => { grid = GridStack.init(); grid.batchUpdate(true); expect(grid.engine.batchMode).toBe(true); @@ -1928,7 +1865,7 @@ describe('gridstack >', function() { }); /* saving as example - it('warning if OLD setGridWidth is called >', function() { + it('warning if OLD setGridWidth is called >', () => { let grid: any = GridStack.init(); grid.setGridWidth(11); // old 0.5.2 API expect(grid.getColumn()).toBe(11); @@ -1937,37 +1874,21 @@ describe('gridstack >', function() { */ }); - describe('stylesheet', function() { - let grid: GridStack; - let root: HTMLElement; - beforeEach(function() { - document.body.insertAdjacentHTML('afterbegin', gridstackHTML); - grid = GridStack.init({ cellHeight: 30 }); - root = document.getElementById('gs-cont')!; - }); - afterEach(function() { - document.body.removeChild(root); - }); - it('not getting lost in case of node detach/attach', function() { - expect(window.getComputedStyle(grid.el.querySelector("#item1")!).height).toBe("60px"); - const oldParent = root.parentElement; - root.remove(); - oldParent!.appendChild(root); - expect(window.getComputedStyle(grid.el.querySelector("#item1")!).height).toBe("60px"); - }); - }); + // Note: Stylesheet tests moved to E2E tests + // where real browser CSS engines can provide accurate getComputedStyle() values + // describe('stylesheet', () => {}); - describe('updateOptions()', function() { + describe('updateOptions()', () => { let grid: GridStack; - beforeEach(function() { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); grid = GridStack.init({ cellHeight: 30 }); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('update all values supported', function() { + it('update all values supported', () => { grid.updateOptions({ cellHeight: '40px', margin: 8, diff --git a/spec/integration/gridstack-integration.spec.ts b/spec/integration/gridstack-integration.spec.ts new file mode 100644 index 000000000..cae6a1150 --- /dev/null +++ b/spec/integration/gridstack-integration.spec.ts @@ -0,0 +1,205 @@ +import { GridStack } from '../../src/gridstack'; + +// Integration tests for GridStack HTML scenarios +// These test actual GridStack behavior with DOM manipulation + +describe('GridStack Integration Tests', () => { + beforeEach(() => { + // // Clean up DOM before each test + // document.body.innerHTML = ''; + // // Add basic CSS for GridStack to function properly + // const style = document.createElement('style'); + // style.textContent = ` + // .grid-stack { position: relative; } + // .grid-stack-item { position: absolute; } + // .grid-stack-item-content { width: 100%; height: 100%; } + // `; + // document.head.appendChild(style); + }); + + afterEach(() => { + // // Clean up any GridStack instances + // GridStack.removeAll; + // // Clean up added styles + // const styles = document.head.querySelectorAll('style'); + // styles.forEach(style => style.remove()); + }); + + describe('Auto-positioning with no x,y coordinates', () => { + it('should position items in order 5,1,2,4,3 based on their constraints', () => { + // Create the HTML structure from the test file + document.body.innerHTML = ` +
+
+
item 1
+
+
+
item 2
+
+
+
item 3 too big to fit, so next row
+
+
+
item 4
+
+
+
item 5 first
+
+
+ `; + + // Initialize GridStack with same options as test + const options = { + cellHeight: 80, + margin: 5, + float: true + }; + const grid = GridStack.init(options); + + // Get all nodes and their positions + const nodes = grid.engine.nodes; + expect(nodes).toHaveLength(5); + + // Item 5 should be positioned (has explicit x=1, y=1 in HTML) + const item5 = nodes.find(n => n.id === '5'); + expect(item5).toBeDefined(); + expect(item5!.w).toBe(1); + expect(item5!.h).toBe(1); + + // Item 1 should be positioned next (2x2) + const item1 = nodes.find(n => n.id === '1'); + expect(item1).toBeDefined(); + expect(item1!.w).toBe(2); + expect(item1!.h).toBe(2); + + // Item 2 should be positioned (3x2) + const item2 = nodes.find(n => n.id === '2'); + expect(item2).toBeDefined(); + expect(item2!.w).toBe(3); + expect(item2!.h).toBe(2); + + // Item 4 should be positioned (3x1) + const item4 = nodes.find(n => n.id === '4'); + expect(item4).toBeDefined(); + expect(item4!.w).toBe(3); + expect(item4!.h).toBe(1); + + // Item 3 should be on next row (too big to fit - 9x1) + const item3 = nodes.find(n => n.id === '3'); + expect(item3).toBeDefined(); + expect(item3!.w).toBe(9); + expect(item3!.h).toBe(1); + + // Verify all items are positioned (have valid coordinates) + nodes.forEach(node => { + expect(node.x).toBeGreaterThanOrEqual(0); + expect(node.y).toBeGreaterThanOrEqual(0); + expect(node.w).toBeGreaterThan(0); + expect(node.h).toBeGreaterThan(0); + }); + }); + }); + + describe('Grid initialization and basic functionality', () => { + it('should initialize GridStack with items and maintain data integrity', () => { + document.body.innerHTML = ` +
+
+
Item 1
+
+
+
Item 2
+
+
+ `; + + const grid = GridStack.init(); + + expect(grid).toBeDefined(); + expect(grid.engine.nodes).toHaveLength(2); + + const item1 = grid.engine.nodes.find(n => n.id === 'item1'); + const item2 = grid.engine.nodes.find(n => n.id === 'item2'); + + expect(item1).toEqual(expect.objectContaining({ + x: 0, y: 0, w: 4, h: 2, id: 'item1' + })); + + expect(item2).toEqual(expect.objectContaining({ + x: 4, y: 0, w: 4, h: 4, id: 'item2' + })); + }); + + it('should handle empty grid initialization', () => { + document.body.innerHTML = '
'; + + const grid = GridStack.init(); + + expect(grid).toBeDefined(); + expect(grid.engine.nodes).toHaveLength(0); + }); + + it('should add widgets programmatically', () => { + document.body.innerHTML = '
'; + + const grid = GridStack.init(); + + const addedEl = grid.addWidget({ + x: 0, y: 0, w: 2, h: 2, id: 'new-widget' + }); + + expect(addedEl).toBeDefined(); + expect(grid.engine.nodes).toHaveLength(1); + + // Check that the widget was added with valid properties + const node = grid.engine.nodes[0]; + expect(node.x).toBe(0); + expect(node.y).toBe(0); + // Note: w and h might default to 1x1 if not explicitly set in the HTML attributes + }); + }); + + describe('Layout and positioning validation', () => { + it('should respect minRow constraints', () => { + document.body.innerHTML = '
'; + + const grid = GridStack.init({ minRow: 3 }); + + // Even with no items, grid should maintain minimum rows + expect(grid.getRow()).toBeGreaterThanOrEqual(3); + }); + + it('should handle widget collision detection', () => { + document.body.innerHTML = ` +
+
+
Item 1
+
+
+ `; + + const grid = GridStack.init(); + + // Try to add overlapping widget + const widgetEl = grid.addWidget({ + x: 1, y: 1, w: 2, h: 2, id: 'overlap' + }); + + expect(widgetEl).toBeDefined(); + expect(grid.engine.nodes).toHaveLength(2); + + // Verify that items don't actually overlap (GridStack should handle collision) + // Just verify we have 2 nodes without overlap testing since the API changed + const nodes = grid.engine.nodes; + expect(nodes).toHaveLength(2); + + // All nodes should have valid positions + nodes.forEach(node => { + expect(node.x).toBeGreaterThanOrEqual(0); + expect(node.y).toBeGreaterThanOrEqual(0); + expect(node.w).toBeGreaterThan(0); + expect(node.h).toBeGreaterThan(0); + }); + }); + }); +}); diff --git a/spec/regression-spec.ts b/spec/regression-spec.ts index d63c53f77..05510bf3b 100644 --- a/spec/regression-spec.ts +++ b/spec/regression-spec.ts @@ -1,6 +1,6 @@ import { GridItemHTMLElement, GridStack, GridStackWidget } from '../src/gridstack'; -describe('regression >', function() { +describe('regression >', () => { 'use strict'; let grid: GridStack; @@ -18,14 +18,14 @@ describe('regression >', function() { '
' + '
'; - describe('2492 load() twice >', function() { - beforeEach(function() { + describe('2492 load() twice >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackEmptyHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('', function() { + it('', () => { let items: GridStackWidget[] = [ {x: 0, y: 0, w:2, content: '0 wide'}, {x: 1, y: 0, content: '1 over'}, @@ -60,14 +60,14 @@ describe('regression >', function() { }); }); - describe('2865 nested grid resize >', function() { - beforeEach(function() { + describe('2865 nested grid resize >', () => { + beforeEach(() => { document.body.insertAdjacentHTML('afterbegin', gridstackEmptyHTML); }); - afterEach(function() { + afterEach(() => { document.body.removeChild(document.getElementById('gs-cont')); }); - it('', function() { + it('', () => { let children: GridStackWidget[] = [{},{},{}]; let items: GridStackWidget[] = [ {x: 0, y: 0, w:3, h:5, sizeToContent: true, subGridOpts: {children, column: 'auto'}} diff --git a/spec/utils-spec.ts b/spec/utils-spec.ts index 3aa4f3111..6c07a675b 100644 --- a/spec/utils-spec.ts +++ b/spec/utils-spec.ts @@ -1,26 +1,24 @@ import { Utils } from '../src/utils'; -describe('gridstack utils', function() { - 'use strict'; - - describe('setup of utils', function() { - it('should set gridstack Utils.', function() { +describe('gridstack utils', () => { + describe('setup of utils', () => { + it('should set gridstack Utils.', () => { let utils = Utils; expect(utils).not.toBeNull(); expect(typeof utils).toBe('function'); }); }); - describe('test toBool', function() { - it('should return booleans.', function() { + describe('test toBool', () => { + it('should return booleans.', () => { expect(Utils.toBool(true)).toEqual(true); expect(Utils.toBool(false)).toEqual(false); }); - it('should work with integer.', function() { + it('should work with integer.', () => { expect(Utils.toBool(1)).toEqual(true); expect(Utils.toBool(0)).toEqual(false); }); - it('should work with Strings.', function() { + it('should work with Strings.', () => { expect(Utils.toBool('')).toEqual(false); expect(Utils.toBool('0')).toEqual(false); expect(Utils.toBool('no')).toEqual(false); @@ -30,16 +28,16 @@ describe('gridstack utils', function() { }); }); - describe('test isIntercepted', function() { + describe('test isIntercepted', () => { let src = {x: 3, y: 2, w: 3, h: 2}; - it('should intercept.', function() { + it('should intercept.', () => { expect(Utils.isIntercepted(src, {x: 0, y: 0, w: 4, h: 3})).toEqual(true); expect(Utils.isIntercepted(src, {x: 0, y: 0, w: 40, h: 30})).toEqual(true); expect(Utils.isIntercepted(src, {x: 3, y: 2, w: 3, h: 2})).toEqual(true); expect(Utils.isIntercepted(src, {x: 5, y: 3, w: 3, h: 2})).toEqual(true); }); - it('shouldn\'t intercept.', function() { + it('shouldn\'t intercept.', () => { expect(Utils.isIntercepted(src, {x: 0, y: 0, w: 3, h: 2})).toEqual(false); expect(Utils.isIntercepted(src, {x: 0, y: 0, w: 13, h: 2})).toEqual(false); expect(Utils.isIntercepted(src, {x: 1, y: 4, w: 13, h: 2})).toEqual(false); @@ -48,41 +46,41 @@ describe('gridstack utils', function() { }); }); - describe('test parseHeight', function() { + describe('test parseHeight', () => { - it('should parse height value', function() { - expect(Utils.parseHeight(12)).toEqual(jasmine.objectContaining({h: 12, unit: 'px'})); - expect(Utils.parseHeight('12px')).toEqual(jasmine.objectContaining({h: 12, unit: 'px'})); - expect(Utils.parseHeight('12.3px')).toEqual(jasmine.objectContaining({h: 12.3, unit: 'px'})); - expect(Utils.parseHeight('12.3em')).toEqual(jasmine.objectContaining({h: 12.3, unit: 'em'})); - expect(Utils.parseHeight('12.3rem')).toEqual(jasmine.objectContaining({h: 12.3, unit: 'rem'})); - expect(Utils.parseHeight('12.3vh')).toEqual(jasmine.objectContaining({h: 12.3, unit: 'vh'})); - expect(Utils.parseHeight('12.3vw')).toEqual(jasmine.objectContaining({h: 12.3, unit: 'vw'})); - expect(Utils.parseHeight('12.3%')).toEqual(jasmine.objectContaining({h: 12.3, unit: '%'})); - expect(Utils.parseHeight('12.5cm')).toEqual(jasmine.objectContaining({h: 12.5, unit: 'cm'})); - expect(Utils.parseHeight('12.5mm')).toEqual(jasmine.objectContaining({h: 12.5, unit: 'mm'})); - expect(Utils.parseHeight('12.5')).toEqual(jasmine.objectContaining({h: 12.5, unit: 'px'})); - expect(function() { Utils.parseHeight('12.5 df'); }).toThrowError('Invalid height val = 12.5 df'); + it('should parse height value', () => { + expect(Utils.parseHeight(12)).toEqual(expect.objectContaining({h: 12, unit: 'px'})); + expect(Utils.parseHeight('12px')).toEqual(expect.objectContaining({h: 12, unit: 'px'})); + expect(Utils.parseHeight('12.3px')).toEqual(expect.objectContaining({h: 12.3, unit: 'px'})); + expect(Utils.parseHeight('12.3em')).toEqual(expect.objectContaining({h: 12.3, unit: 'em'})); + expect(Utils.parseHeight('12.3rem')).toEqual(expect.objectContaining({h: 12.3, unit: 'rem'})); + expect(Utils.parseHeight('12.3vh')).toEqual(expect.objectContaining({h: 12.3, unit: 'vh'})); + expect(Utils.parseHeight('12.3vw')).toEqual(expect.objectContaining({h: 12.3, unit: 'vw'})); + expect(Utils.parseHeight('12.3%')).toEqual(expect.objectContaining({h: 12.3, unit: '%'})); + expect(Utils.parseHeight('12.5cm')).toEqual(expect.objectContaining({h: 12.5, unit: 'cm'})); + expect(Utils.parseHeight('12.5mm')).toEqual(expect.objectContaining({h: 12.5, unit: 'mm'})); + expect(Utils.parseHeight('12.5')).toEqual(expect.objectContaining({h: 12.5, unit: 'px'})); + expect(() => { Utils.parseHeight('12.5 df'); }).toThrow('Invalid height val = 12.5 df'); }); - it('should parse negative height value', function() { - expect(Utils.parseHeight(-12)).toEqual(jasmine.objectContaining({h: -12, unit: 'px'})); - expect(Utils.parseHeight('-12px')).toEqual(jasmine.objectContaining({h: -12, unit: 'px'})); - expect(Utils.parseHeight('-12.3px')).toEqual(jasmine.objectContaining({h: -12.3, unit: 'px'})); - expect(Utils.parseHeight('-12.3em')).toEqual(jasmine.objectContaining({h: -12.3, unit: 'em'})); - expect(Utils.parseHeight('-12.3rem')).toEqual(jasmine.objectContaining({h: -12.3, unit: 'rem'})); - expect(Utils.parseHeight('-12.3vh')).toEqual(jasmine.objectContaining({h: -12.3, unit: 'vh'})); - expect(Utils.parseHeight('-12.3vw')).toEqual(jasmine.objectContaining({h: -12.3, unit: 'vw'})); - expect(Utils.parseHeight('-12.3%')).toEqual(jasmine.objectContaining({h: -12.3, unit: '%'})); - expect(Utils.parseHeight('-12.3cm')).toEqual(jasmine.objectContaining({h: -12.3, unit: 'cm'})); - expect(Utils.parseHeight('-12.3mm')).toEqual(jasmine.objectContaining({h: -12.3, unit: 'mm'})); - expect(Utils.parseHeight('-12.5')).toEqual(jasmine.objectContaining({h: -12.5, unit: 'px'})); - expect(function() { Utils.parseHeight('-12.5 df'); }).toThrowError('Invalid height val = -12.5 df'); + it('should parse negative height value', () => { + expect(Utils.parseHeight(-12)).toEqual(expect.objectContaining({h: -12, unit: 'px'})); + expect(Utils.parseHeight('-12px')).toEqual(expect.objectContaining({h: -12, unit: 'px'})); + expect(Utils.parseHeight('-12.3px')).toEqual(expect.objectContaining({h: -12.3, unit: 'px'})); + expect(Utils.parseHeight('-12.3em')).toEqual(expect.objectContaining({h: -12.3, unit: 'em'})); + expect(Utils.parseHeight('-12.3rem')).toEqual(expect.objectContaining({h: -12.3, unit: 'rem'})); + expect(Utils.parseHeight('-12.3vh')).toEqual(expect.objectContaining({h: -12.3, unit: 'vh'})); + expect(Utils.parseHeight('-12.3vw')).toEqual(expect.objectContaining({h: -12.3, unit: 'vw'})); + expect(Utils.parseHeight('-12.3%')).toEqual(expect.objectContaining({h: -12.3, unit: '%'})); + expect(Utils.parseHeight('-12.3cm')).toEqual(expect.objectContaining({h: -12.3, unit: 'cm'})); + expect(Utils.parseHeight('-12.3mm')).toEqual(expect.objectContaining({h: -12.3, unit: 'mm'})); + expect(Utils.parseHeight('-12.5')).toEqual(expect.objectContaining({h: -12.5, unit: 'px'})); + expect(() => { Utils.parseHeight('-12.5 df'); }).toThrow('Invalid height val = -12.5 df'); }); }); - describe('test defaults', function() { - it('should assign missing field or undefined', function() { + describe('test defaults', () => { + it('should assign missing field or undefined', () => { let src: any = {}; expect(src).toEqual({}); expect(Utils.defaults(src, {x: 1, y: 2})).toEqual({x: 1, y: 2}); @@ -98,8 +96,8 @@ describe('gridstack utils', function() { }); }); - describe('removePositioningStyles', function() { - it('should remove styles', function() { + describe('removePositioningStyles', () => { + it('should remove styles', () => { let doc = document.implementation.createHTMLDocument(); doc.body.innerHTML = '
'; let el = doc.body.children[0] as HTMLElement; diff --git a/src/dd-base-impl.ts b/src/dd-base-impl.ts index dd89acb58..9d2f95a02 100644 --- a/src/dd-base-impl.ts +++ b/src/dd-base-impl.ts @@ -30,7 +30,7 @@ export abstract class DDBaseImplement { /** * Register an event callback for the specified event. - * + * * @param event - Event name to listen for * @param callback - Function to call when event occurs */ @@ -40,7 +40,7 @@ export abstract class DDBaseImplement { /** * Unregister an event callback for the specified event. - * + * * @param event - Event name to stop listening for */ public off(event: string): void { @@ -73,7 +73,7 @@ export abstract class DDBaseImplement { /** * Trigger a registered event callback if one exists and the implementation is enabled. - * + * * @param eventName - Name of the event to trigger * @param event - DOM event object to pass to the callback * @returns Result from the callback function, if any diff --git a/src/dd-gridstack.ts b/src/dd-gridstack.ts index a002d271a..07527694c 100644 --- a/src/dd-gridstack.ts +++ b/src/dd-gridstack.ts @@ -38,7 +38,7 @@ export type DDValue = number | string; /** * Callback function type for drag & drop events. - * + * * @param event - The DOM event that triggered the callback * @param arg2 - The grid item element being dragged/dropped * @param helper - Optional helper element used during drag operations @@ -49,7 +49,7 @@ export type DDCallback = (event: Event, arg2: GridItemHTMLElement, helper?: Grid /** * HTML Native Mouse and Touch Events Drag and Drop functionality. - * + * * This class provides the main drag & drop implementation for GridStack, * handling resizing, dragging, and dropping of grid items using native HTML5 events. * It manages the interaction between different DD components and the grid system. @@ -58,13 +58,13 @@ export class DDGridStack { /** * Enable/disable/configure resizing for grid elements. - * + * * @param el - Grid item element(s) to configure * @param opts - Resize options or command ('enable', 'disable', 'destroy', 'option', or config object) * @param key - Option key when using 'option' command * @param value - Option value when using 'option' command * @returns this instance for chaining - * + * * @example * dd.resizable(element, 'enable'); // Enable resizing * dd.resizable(element, 'option', 'minWidth', 100); // Set minimum width @@ -106,13 +106,13 @@ export class DDGridStack { /** * Enable/disable/configure dragging for grid elements. - * + * * @param el - Grid item element(s) to configure * @param opts - Drag options or command ('enable', 'disable', 'destroy', 'option', or config object) * @param key - Option key when using 'option' command * @param value - Option value when using 'option' command * @returns this instance for chaining - * + * * @example * dd.draggable(element, 'enable'); // Enable dragging * dd.draggable(element, {handle: '.drag-handle'}); // Configure drag handle diff --git a/src/dd-manager.ts b/src/dd-manager.ts index b19469be4..054d2891a 100644 --- a/src/dd-manager.ts +++ b/src/dd-manager.ts @@ -9,7 +9,7 @@ import { DDResizable } from './dd-resizable'; /** * Global state manager for all Drag & Drop instances. - * + * * This class maintains shared state across all drag & drop operations, * ensuring proper coordination between multiple grids and drag/drop elements. * All properties are static to provide global access throughout the DD system. diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 09c0825e7..41c087d08 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -21,13 +21,13 @@ export interface GridStackEngineOptions { /** * Defines the GridStack engine that handles all grid layout calculations and node positioning. * This is the core engine that performs grid manipulation without any DOM operations. - * + * * The engine manages: * - Node positioning and collision detection * - Layout algorithms (compact, float, etc.) * - Grid resizing and column changes * - Widget movement and resizing logic - * + * * NOTE: Values should not be modified directly - use the main GridStack API instead * to ensure proper DOM updates and event triggers. */ @@ -70,11 +70,11 @@ export class GridStackEngine { /** * Enable/disable batch mode for multiple operations to optimize performance. * When enabled, layout updates are deferred until batch mode is disabled. - * + * * @param flag true to enable batch mode, false to disable and apply changes * @param doPack if true (default), pack/compact nodes when disabling batch mode * @returns the engine instance for chaining - * + * * @example * // Start batch mode for multiple operations * engine.batchUpdate(true); @@ -167,12 +167,12 @@ export class GridStackEngine { /** * Return the first node that intercepts/collides with the given node or area. * Used for collision detection during drag and drop operations. - * + * * @param skip the node to skip in collision detection (usually the node being moved) * @param area the area to check for collisions (defaults to skip node's area) * @param skip2 optional second node to skip in collision detection * @returns the first colliding node, or undefined if no collision - * + * * @example * const colliding = engine.collide(draggedNode, {x: 2, y: 1, w: 2, h: 1}); * if (colliding) { @@ -187,12 +187,12 @@ export class GridStackEngine { /** * Return all nodes that intercept/collide with the given node or area. * Similar to collide() but returns all colliding nodes instead of just the first. - * + * * @param skip the node to skip in collision detection * @param area the area to check for collisions (defaults to skip node's area) * @param skip2 optional second node to skip in collision detection * @returns array of all colliding nodes - * + * * @example * const allCollisions = engine.collideAll(draggedNode); * console.log('Colliding with', allCollisions.length, 'nodes'); @@ -273,7 +273,7 @@ export class GridStackEngine { /** * Cache the pixel rectangles for all nodes used for collision detection during drag operations. * This optimization converts grid coordinates to pixel coordinates for faster collision detection. - * + * * @param w width of a single grid cell in pixels * @param h height of a single grid cell in pixels * @param top top margin/padding in pixels @@ -281,7 +281,7 @@ export class GridStackEngine { * @param bottom bottom margin/padding in pixels * @param left left margin/padding in pixels * @returns the engine instance for chaining - * + * * @internal This is typically called by GridStack during resize events */ public cacheRects(w: number, h: number, top: number, right: number, bottom: number, left: number): GridStackEngine @@ -300,11 +300,11 @@ export class GridStackEngine { /** * Attempt to swap the positions of two nodes if they meet swapping criteria. * Nodes can swap if they are the same size or in the same column/row, not locked, and touching. - * + * * @param a first node to swap * @param b second node to swap * @returns true if swap was successful, false if not possible, undefined if not applicable - * + * * @example * const swapped = engine.swap(nodeA, nodeB); * if (swapped) { @@ -351,13 +351,13 @@ export class GridStackEngine { /** * Check if the specified rectangular area is empty (no nodes occupy any part of it). - * + * * @param x the x coordinate (column) of the area to check * @param y the y coordinate (row) of the area to check * @param w the width in columns of the area to check * @param h the height in rows of the area to check * @returns true if the area is completely empty, false if any node overlaps - * + * * @example * if (engine.isAreaEmpty(2, 1, 3, 2)) { * console.log('Area is available for placement'); @@ -371,17 +371,17 @@ export class GridStackEngine { /** * Re-layout grid items to reclaim any empty space. * This optimizes the grid layout by moving items to fill gaps. - * + * * @param layout layout algorithm to use: * - 'compact' (default): find truly empty spaces, may reorder items * - 'list': keep the sort order exactly the same, move items up sequentially * @param doSort if true (default), sort nodes by position before compacting * @returns the engine instance for chaining - * + * * @example * // Compact to fill empty spaces * engine.compact(); - * + * * // Compact preserving item order * engine.compact('list'); */ @@ -411,9 +411,9 @@ export class GridStackEngine { * Enable/disable floating widgets (default: `false`). * When floating is enabled, widgets can move up to fill empty spaces. * See [example](http://gridstackjs.com/demo/float.html) - * + * * @param val true to enable floating, false to disable - * + * * @example * engine.float = true; // Enable floating * engine.float = false; // Disable floating (default) @@ -428,9 +428,9 @@ export class GridStackEngine { /** * Get the current floating mode setting. - * + * * @returns true if floating is enabled, false otherwise - * + * * @example * const isFloating = engine.float; * console.log('Floating enabled:', isFloating); @@ -440,10 +440,10 @@ export class GridStackEngine { /** * Sort the nodes array from first to last, or reverse. * This is called during collision/placement operations to enforce a specific order. - * + * * @param dir sort direction: 1 for ascending (first to last), -1 for descending (last to first) * @returns the engine instance for chaining - * + * * @example * engine.sortNodes(); // Sort ascending (default) * engine.sortNodes(-1); // Sort descending @@ -494,11 +494,11 @@ export class GridStackEngine { /** * Prepare and validate a node's coordinates and values for the current grid. * This ensures the node has valid position, size, and properties before being added to the grid. - * + * * @param node the node to prepare and validate * @param resizing if true, resize the node down if it's out of bounds; if false, move it to fit * @returns the prepared node with valid coordinates - * + * * @example * const node = { w: 3, h: 2, content: 'Hello' }; * const prepared = engine.prepareNode(node); @@ -547,11 +547,11 @@ export class GridStackEngine { /** * Part 2 of preparing a node to fit inside the grid - validates and fixes coordinates and dimensions. * This ensures the node fits within grid boundaries and respects min/max constraints. - * + * * @param node the node to validate and fix * @param resizing if true, resize the node to fit; if false, move the node to fit * @returns the engine instance for chaining - * + * * @example * // Fix a node that might be out of bounds * engine.nodeBoundFix(node, true); // Resize to fit @@ -577,7 +577,7 @@ export class GridStackEngine { copy.w = Math.min(this.defaultColumn, copy.w || 1); this.cacheOneLayout(copy, this.defaultColumn); } - + if (node.w > this.column) { node.w = this.column; } else if (node.w < 1) { @@ -622,14 +622,14 @@ export class GridStackEngine { /** * Returns a list of nodes that have been modified from their original values. * This is used to track which nodes need DOM updates. - * + * * @param verify if true, performs additional verification by comparing current vs original positions * @returns array of nodes that have been modified - * + * * @example * const changed = engine.getDirtyNodes(); * console.log('Modified nodes:', changed.length); - * + * * // Get verified dirty nodes * const verified = engine.getDirtyNodes(true); */ @@ -652,9 +652,9 @@ export class GridStackEngine { /** * Clean all dirty and last tried information from nodes. * This resets the dirty state tracking for all nodes. - * + * * @returns the engine instance for chaining - * + * * @internal */ public cleanNodes(): GridStackEngine { @@ -669,11 +669,11 @@ export class GridStackEngine { /** * Save the initial position/size of all nodes to track real dirty state. * This creates a snapshot of current positions that can be restored later. - * + * * Note: Should be called right after change events and before move/resize operations. - * + * * @returns the engine instance for chaining - * + * * @internal */ public saveInitial(): GridStackEngine { @@ -688,9 +688,9 @@ export class GridStackEngine { /** * Restore all nodes back to their initial values. * This is typically called when canceling an operation (e.g., Esc key during drag). - * + * * @returns the engine instance for chaining - * + * * @internal */ public restoreInitial(): GridStackEngine { @@ -706,13 +706,13 @@ export class GridStackEngine { /** * Find the first available empty spot for the given node dimensions. * Updates the node's x,y attributes with the found position. - * + * * @param node the node to find a position for (w,h must be set) * @param nodeList optional list of nodes to check against (defaults to engine nodes) * @param column optional column count (defaults to engine column count) * @param after optional node to start search after (maintains order) * @returns true if an empty position was found and node was updated - * + * * @example * const node = { w: 2, h: 1 }; * if (engine.findEmptyPosition(node)) { @@ -743,12 +743,12 @@ export class GridStackEngine { /** * Add the given node to the grid, handling collision detection and re-packing. * This is the main method for adding new widgets to the engine. - * + * * @param node the node to add to the grid * @param triggerAddEvent if true, adds node to addedNodes list for event triggering * @param after optional node to place this node after (for ordering) * @returns the added node (or existing node if duplicate) - * + * * @example * const node = { x: 0, y: 0, w: 2, h: 1, content: 'Hello' }; * const added = engine.addNode(node, true); @@ -778,12 +778,12 @@ export class GridStackEngine { /** * Remove the given node from the grid. - * + * * @param node the node to remove * @param removeDOM if true (default), marks node for DOM removal * @param triggerEvent if true, adds node to removedNodes list for event triggering * @returns the engine instance for chaining - * + * * @example * engine.removeNode(node, true, true); */ @@ -805,11 +805,11 @@ export class GridStackEngine { /** * Remove all nodes from the grid. - * + * * @param removeDOM if true (default), marks all nodes for DOM removal * @param triggerEvent if true (default), triggers removal events * @returns the engine instance for chaining - * + * * @example * engine.removeAll(); // Remove all nodes */ @@ -826,14 +826,14 @@ export class GridStackEngine { /** * Check if a node can be moved to a new position, considering layout constraints. * This is a safer version of moveNode() that validates the move first. - * + * * For complex cases (like maxRow constraints), it simulates the move in a clone first, * then applies the changes only if they meet all specifications. - * + * * @param node the node to move * @param o move options including target position * @returns true if the node was successfully moved - * + * * @example * const canMove = engine.moveNodeCheck(node, { x: 2, y: 1 }); * if (canMove) { diff --git a/src/gridstack.ts b/src/gridstack.ts index 9be9c9dab..fcbeaf3bc 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -468,10 +468,10 @@ export class GridStack { /** * Create the default grid item divs and content (possibly lazy loaded) by using GridStack.renderCB(). - * + * * @param n GridStackNode definition containing widget configuration * @returns the created HTML element with proper grid item structure - * + * * @example * const element = grid.createWidgetDivs({ w: 2, h: 1, content: 'Hello World' }); */ @@ -698,7 +698,7 @@ export class GridStack { * const savedLayout = grid.save(); // Save current layout * // ... later restore it * grid.load(savedLayout); - * + * * // Load with custom add/remove callback * grid.load(layout, (items, grid, add) => { * if (add) { @@ -713,10 +713,10 @@ export class GridStack { * items.forEach(item => grid.removeWidget(item.el)); * } * }); - * + * * // Load without adding/removing missing widgets * grid.load(layout, false); - * + * * @see {@link http://gridstackjs.com/demo/serialization.html} for complete example */ public load(items: GridStackWidget[], addRemove: boolean | AddRemoveFcn = GridStack.addRemoveCB || true): GridStack { @@ -843,14 +843,14 @@ export class GridStack { /** * Gets the current cell height in pixels. This takes into account the unit type and converts to pixels if necessary. - * + * * @param forcePixel if true, forces conversion to pixels even when cellHeight is specified in other units * @returns the cell height in pixels - * + * * @example * const height = grid.getCellHeight(); * console.log('Cell height:', height, 'px'); - * + * * // Force pixel conversion * const pixelHeight = grid.getCellHeight(true); */ @@ -937,13 +937,13 @@ export class GridStack { /** Gets current cell width. */ /** * Gets the current cell width in pixels. This is calculated based on the grid container width divided by the number of columns. - * + * * @returns the cell width in pixels - * + * * @example * const width = grid.cellWidth(); * console.log('Cell width:', width, 'px'); - * + * * // Use cell width to calculate widget dimensions * const widgetWidth = width * 3; // For a 3-column wide widget */ @@ -984,21 +984,21 @@ export class GridStack { /** * Re-layout grid items to reclaim any empty space. This is useful after removing widgets * or when you want to optimize the layout. - * + * * @param layout layout type. Options: - * - 'compact' (default): might re-order items to fill any empty space + * - 'compact' (default): might re-order items to fill any empty space * - 'list': keep the widget left->right order the same, even if that means leaving an empty slot if things don't fit * @param doSort re-sort items first based on x,y position. Set to false to do your own sorting ahead (default: true) * @returns the grid instance for chaining - * + * * @example * // Compact layout after removing widgets * grid.removeWidget('.widget-to-remove'); * grid.compact(); - * + * * // Use list layout (preserve order) * grid.compact('list'); - * + * * // Compact without sorting first * grid.compact('compact', false); */ @@ -1011,28 +1011,28 @@ export class GridStack { /** * Set the number of columns in the grid. Will update existing widgets to conform to new number of columns, * as well as cache the original layout so you can revert back to previous positions without loss. - * + * * Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [2-11] columns, * else you will need to generate correct CSS. * See: https://github.com/gridstack/gridstack.js#change-grid-columns - * + * * @param column Integer > 0 (default 12) * @param layout specify the type of re-layout that will happen. Options: * - 'moveScale' (default): scale widget positions and sizes * - 'move': keep widget sizes, only move positions - * - 'scale': keep widget positions, only scale sizes + * - 'scale': keep widget positions, only scale sizes * - 'none': don't change widget positions or sizes * Note: items will never be outside of the current column boundaries. * Ignored for `column=1` as we always want to vertically stack. * @returns the grid instance for chaining - * + * * @example * // Change to 6 columns with default scaling * grid.column(6); - * + * * // Change to 4 columns, only move positions * grid.column(4, 'move'); - * + * * // Single column layout (vertical stack) * grid.column(1); */ @@ -1067,9 +1067,9 @@ export class GridStack { /** * Get the number of columns in the grid (default 12). - * + * * @returns the current number of columns in the grid - * + * * @example * const columnCount = grid.getColumn(); // returns 12 by default */ @@ -1078,9 +1078,9 @@ export class GridStack { /** * Returns an array of grid HTML elements (no placeholder) - used to iterate through our children in DOM order. * This method excludes placeholder elements and returns only actual grid items. - * + * * @returns array of GridItemHTMLElement instances representing all grid items - * + * * @example * const items = grid.getGridItems(); * items.forEach(item => { @@ -1095,9 +1095,9 @@ export class GridStack { /** * Returns true if change callbacks should be ignored due to column change, sizeToContent, loading, etc. * This is useful for callers who want to implement dirty flag functionality. - * + * * @returns true if change callbacks are currently being ignored - * + * * @example * if (!grid.isIgnoreChangeCB()) { * // Process the change event @@ -1136,10 +1136,10 @@ export class GridStack { /** * Enable/disable floating widgets (default: `false`). When enabled, widgets can float up to fill empty spaces. * See [example](http://gridstackjs.com/demo/float.html) - * + * * @param val true to enable floating, false to disable * @returns the grid instance for chaining - * + * * @example * grid.float(true); // Enable floating * grid.float(false); // Disable floating (default) @@ -1154,9 +1154,9 @@ export class GridStack { /** * Get the current float mode setting. - * + * * @returns true if floating is enabled, false otherwise - * + * * @example * const isFloating = grid.getFloat(); * console.log('Floating enabled:', isFloating); @@ -1197,9 +1197,9 @@ export class GridStack { /** * Returns the current number of rows, which will be at least `minRow` if set. * The row count is based on the highest positioned widget in the grid. - * + * * @returns the current number of rows in the grid - * + * * @example * const rowCount = grid.getRow(); * console.log('Grid has', rowCount, 'rows'); @@ -1210,13 +1210,13 @@ export class GridStack { /** * Checks if the specified rectangular area is empty (no widgets occupy any part of it). - * + * * @param x the x coordinate (column) of the area to check - * @param y the y coordinate (row) of the area to check + * @param y the y coordinate (row) of the area to check * @param w the width in columns of the area to check * @param h the height in rows of the area to check * @returns true if the area is completely empty, false if any widget overlaps - * + * * @example * // Check if a 2x2 area at position (1,1) is empty * if (grid.isAreaEmpty(1, 1, 2, 2)) { @@ -1231,22 +1231,22 @@ export class GridStack { * If you add elements to your grid by hand (or have some framework creating DOM), you have to tell gridstack afterwards to make them widgets. * If you want gridstack to add the elements for you, use `addWidget()` instead. * Makes the given element a widget and returns it. - * + * * @param els widget or single selector to convert. * @param options widget definition to use instead of reading attributes or using default sizing values * @returns the converted GridItemHTMLElement * * @example * const grid = GridStack.init(); - * + * * // Create HTML content manually, possibly looking like: * //
* grid.el.innerHTML = '
'; - * + * * // Convert existing elements to widgets * grid.makeWidget('#item-1'); // Uses gs-* attributes from DOM * grid.makeWidget('#item-2', {w: 2, h: 1, content: 'Hello World'}); - * + * * // Or pass DOM element directly * const element = document.getElementById('item-3'); * grid.makeWidget(element, {x: 0, y: 1, w: 4, h: 2}); @@ -1280,7 +1280,7 @@ export class GridStack { /** * Register event handler for grid events. You can call this on a single event name, or space separated list. - * + * * Supported events: * - `added`: Called when widgets are being added to a grid * - `change`: Occurs when widgets change their position/size due to constraints or direct changes @@ -1294,17 +1294,17 @@ export class GridStack { * - `resizestart`: Called before user starts resizing an item * - `resize`: Called while grid item is being resized (for each new row/column value) * - `resizestop`: Called after user is done resizing the item, with updated DOM attributes - * + * * @param name event name(s) to listen for (space separated for multiple) * @param callback function to call when event occurs * @returns the grid instance for chaining - * + * * @example * // Listen to multiple events at once * grid.on('added removed change', (event, items) => { * items.forEach(item => console.log('Item changed:', item)); * }); - * + * * // Listen to individual events * grid.on('added', (event, items) => { * items.forEach(item => console.log('Added item:', item)); @@ -1368,9 +1368,9 @@ export class GridStack { /** * Remove all event handlers from the grid. This is useful for cleanup when destroying a grid. - * + * * @returns the grid instance for chaining - * + * * @example * grid.offAll(); // Remove all event listeners */ @@ -1519,21 +1519,21 @@ export class GridStack { /** * Updates widget position/size and other info. This is used to change widget properties after creation. * Can update position, size, content, and other widget properties. - * + * * Note: If you need to call this on all nodes, use load() instead which will update what changed. * Setting the same x,y for multiple items will be indeterministic and likely unwanted. - * + * * @param els widget element(s) or selector to modify * @param opt new widget options (x,y,w,h, etc.). Only those set will be updated. * @returns the grid instance for chaining - * + * * @example * // Update widget size and position * grid.update('.my-widget', { x: 2, y: 1, w: 3, h: 2 }); - * + * * // Update widget content * grid.update(widget, { content: '

New content

' }); - * + * * // Update multiple properties * grid.update('#my-widget', { * w: 4, @@ -1631,17 +1631,17 @@ export class GridStack { /** * Updates widget height to match the content height to avoid vertical scrollbars or dead space. * This automatically adjusts the widget height based on its content size. - * - * Note: This assumes only 1 child under resizeToContentParent='.grid-stack-item-content' + * + * Note: This assumes only 1 child under resizeToContentParent='.grid-stack-item-content' * (sized to gridItem minus padding) that represents the entire content size. - * + * * @param el the grid item element to resize - * + * * @example * // Resize a widget to fit its content * const widget = document.querySelector('.grid-stack-item'); * grid.resizeToContent(widget); - * + * * // This is commonly used with dynamic content: * widget.querySelector('.content').innerHTML = 'New longer content...'; * grid.resizeToContent(widget); @@ -1709,15 +1709,15 @@ export class GridStack { /** * Rotate widgets by swapping their width and height. This is typically called when the user presses 'r' during dragging. * The rotation swaps the w/h dimensions and adjusts min/max constraints accordingly. - * + * * @param els widget element(s) or selector to rotate * @param relative optional pixel coordinate relative to upper/left corner to rotate around (keeps that cell under cursor) * @returns the grid instance for chaining - * + * * @example * // Rotate a specific widget * grid.rotate('.my-widget'); - * + * * // Rotate with relative positioning during drag * grid.rotate(widget, { left: 50, top: 30 }); */ @@ -1744,13 +1744,13 @@ export class GridStack { /** * Updates the margins which will set all 4 sides at once - see `GridStackOptions.margin` for format options. * Supports CSS string format of 1, 2, or 4 values or a single number. - * + * * @param value margin value - can be: * - Single number: `10` (applies to all sides) * - Two values: `'10px 20px'` (top/bottom, left/right) * - Four values: `'10px 20px 5px 15px'` (top, right, bottom, left) * @returns the grid instance for chaining - * + * * @example * grid.margin(10); // 10px all sides * grid.margin('10px 20px'); // 10px top/bottom, 20px left/right @@ -1774,9 +1774,9 @@ export class GridStack { /** * Returns the current margin value as a number (undefined if the 4 sides don't match). * This only returns a number if all sides have the same margin value. - * + * * @returns the margin value in pixels, or undefined if sides have different values - * + * * @example * const margin = grid.getMargin(); * if (margin !== undefined) { @@ -2179,9 +2179,9 @@ export class GridStack { /** * Get the global drag & drop implementation instance. * This provides access to the underlying drag & drop functionality. - * + * * @returns the DDGridStack instance used for drag & drop operations - * + * * @example * const dd = GridStack.getDD(); * // Access drag & drop functionality @@ -2213,20 +2213,20 @@ export class GridStack { } /** - * Enables/Disables dragging by the user for specific grid elements. + * Enables/Disables dragging by the user for specific grid elements. * For all items and future items, use enableMove() instead. No-op for static grids. - * - * Note: If you want to prevent an item from moving due to being pushed around by another + * + * Note: If you want to prevent an item from moving due to being pushed around by another * during collision, use the 'locked' property instead. - * + * * @param els widget element(s) or selector to modify * @param val if true widget will be draggable, assuming the parent grid isn't noMove or static * @returns the grid instance for chaining - * + * * @example * // Make specific widgets draggable * grid.movable('.my-widget', true); - * + * * // Disable dragging for specific widgets * grid.movable('#fixed-widget', false); */ @@ -2244,15 +2244,15 @@ export class GridStack { /** * Enables/Disables user resizing for specific grid elements. * For all items and future items, use enableResize() instead. No-op for static grids. - * + * * @param els widget element(s) or selector to modify * @param val if true widget will be resizable, assuming the parent grid isn't noResize or static * @returns the grid instance for chaining - * + * * @example * // Make specific widgets resizable * grid.resizable('.my-widget', true); - * + * * // Disable resizing for specific widgets * grid.resizable('#fixed-size-widget', false); */ @@ -2270,22 +2270,22 @@ export class GridStack { /** * Temporarily disables widgets moving/resizing. * If you want a more permanent way (which freezes up resources) use `setStatic(true)` instead. - * + * * Note: This is a no-op for static grids. - * + * * This is a shortcut for: * ```typescript * grid.enableMove(false); * grid.enableResize(false); * ``` - * + * * @param recurse if true (default), sub-grids also get updated * @returns the grid instance for chaining - * + * * @example * // Disable all interactions * grid.disable(); - * + * * // Disable only this grid, not sub-grids * grid.disable(false); */ @@ -2299,20 +2299,20 @@ export class GridStack { /** * Re-enables widgets moving/resizing - see disable(). * Note: This is a no-op for static grids. - * + * * This is a shortcut for: * ```typescript * grid.enableMove(true); * grid.enableResize(true); * ``` - * + * * @param recurse if true (default), sub-grids also get updated * @returns the grid instance for chaining - * + * * @example * // Re-enable all interactions * grid.enable(); - * + * * // Enable only this grid, not sub-grids * grid.enable(false); */ @@ -2327,18 +2327,18 @@ export class GridStack { /** * Enables/disables widget moving for all widgets. No-op for static grids. * Note: locally defined items (with noMove property) still override this setting. - * + * * @param doEnable if true widgets will be movable, if false moving is disabled * @param recurse if true (default), sub-grids also get updated * @returns the grid instance for chaining - * + * * @example * // Enable moving for all widgets * grid.enableMove(true); - * + * * // Disable moving for all widgets * grid.enableMove(false); - * + * * // Enable only this grid, not sub-grids * grid.enableMove(true, false); */ @@ -2355,18 +2355,18 @@ export class GridStack { /** * Enables/disables widget resizing for all widgets. No-op for static grids. * Note: locally defined items (with noResize property) still override this setting. - * + * * @param doEnable if true widgets will be resizable, if false resizing is disabled - * @param recurse if true (default), sub-grids also get updated + * @param recurse if true (default), sub-grids also get updated * @returns the grid instance for chaining - * + * * @example * // Enable resizing for all widgets * grid.enableResize(true); - * + * * // Disable resizing for all widgets * grid.enableResize(false); - * + * * // Enable only this grid, not sub-grids * grid.enableResize(true, false); */ diff --git a/src/types.ts b/src/types.ts index 5bdca492c..f2b67ce30 100644 --- a/src/types.ts +++ b/src/types.ts @@ -43,10 +43,10 @@ export const gridDefaults: GridStackOptions = { /** * Different layout options when changing the number of columns. - * + * * These options control how widgets are repositioned when the grid column count changes. * Note: The new list may be partially filled if there's a cached layout for that size. - * + * * Options: * - `'list'`: Treat items as a sorted list, keeping them sequentially without resizing (unless too big) * - `'compact'`: Similar to list, but uses compact() method to fill empty slots by reordering @@ -109,7 +109,7 @@ export type GridStackEventHandlerCallback = GridStackEventHandler | GridStackEle /** * Optional callback function called during load() operations. * Allows custom handling of widget addition/removal for framework integration. - * + * * @param parent - The parent HTML element * @param w - The widget definition * @param add - True if adding, false if removing @@ -121,7 +121,7 @@ export type AddRemoveFcn = (parent: HTMLElement, w: GridStackWidget, add: boolea /** * Optional callback function called during save() operations. * Allows adding custom data to the saved widget structure. - * + * * @param node - The internal grid node * @param w - The widget structure being saved (can be modified) */ @@ -130,7 +130,7 @@ export type SaveFcn = (node: GridStackNode, w: GridStackWidget) => void; /** * Optional callback function for custom widget content rendering. * Called during load()/addWidget() to create custom content beyond plain text. - * + * * @param el - The widget's content container element * @param w - The widget definition with content and other properties */ @@ -139,14 +139,14 @@ export type RenderFcn = (el: HTMLElement, w: GridStackWidget) => void; /** * Optional callback function for custom resize-to-content behavior. * Called when a widget needs to resize to fit its content. - * + * * @param el - The grid item element to resize */ export type ResizeToContentFcn = (el: GridItemHTMLElement) => void; /** * Configuration for responsive grid behavior. - * + * * Defines how the grid responds to different screen sizes by changing column counts. * NOTE: Make sure to include the appropriate CSS (gridstack-extra.css) to support responsive behavior. */ @@ -188,19 +188,19 @@ export interface GridStackOptions { * - `false`: will not accept any external widgets * - string: explicit class name to accept instead of default * - function: callback called before an item will be accepted when entering a grid - * + * * @example * // Accept all grid items * acceptWidgets: true - * + * * // Accept only items with specific class * acceptWidgets: 'my-draggable-item' - * + * * // Custom validation function * acceptWidgets: (el) => { * return el.getAttribute('data-accept') === 'true'; * } - * + * * @see {@link http://gridstack.github.io/gridstack.js/demo/two.html} for complete example */ acceptWidgets?: boolean | string | ((element: Element) => boolean); @@ -225,20 +225,20 @@ export interface GridStackOptions { * - 0: library will not generate styles for rows (define your own CSS) * - 'auto': height calculated for square cells (width / column) and updated live on window resize * - 'initial': similar to 'auto' but stays fixed size during window resizing - * + * * Note: % values don't work correctly - see demo/cell-height.html - * + * * @example * // Fixed 100px height * cellHeight: 100 - * + * * // CSS units * cellHeight: '5rem' * cellHeight: '100px' - * + * * // Auto-sizing for square cells * cellHeight: 'auto' - * + * * // No CSS generation (custom styles) * cellHeight: 0 */ diff --git a/src/utils.ts b/src/utils.ts index 010d5af44..97dd96a2f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -20,7 +20,7 @@ export interface DragTransform { /** * @internal Checks for obsolete method names and provides deprecation warnings. * Creates a wrapper function that logs a deprecation warning when called. - * + * * @param self the object context to apply the function to * @param f the new function to call * @param oldName the deprecated method name @@ -42,7 +42,7 @@ export function obsolete(self, f, oldName: string, newName: string, rev: string) /** * @internal Checks for obsolete grid options and migrates them to new names. * Automatically copies old option values to new option names and shows deprecation warnings. - * + * * @param opts the options object to check and migrate * @param oldName the deprecated option name * @param newName the new option name to use instead @@ -59,7 +59,7 @@ export function obsoleteOpts(opts: GridStackOptions, oldName: string, newName: s /** * @internal Checks for obsolete grid options that have been completely removed. * Shows deprecation warnings for options that are no longer supported. - * + * * @param opts the options object to check * @param oldName the removed option name * @param rev the version when the option was removed @@ -74,7 +74,7 @@ export function obsoleteOptsDel(opts: GridStackOptions, oldName: string, rev: st /** * @internal Checks for obsolete HTML element attributes and migrates them. * Automatically copies old attribute values to new attribute names and shows deprecation warnings. - * + * * @param el the HTML element to check and migrate * @param oldName the deprecated attribute name * @param newName the new attribute name to use instead @@ -99,11 +99,11 @@ export class Utils { /** * Convert a potential selector into an actual list of HTML elements. * Supports CSS selectors, element references, and special ID handling. - * + * * @param els selector string, HTMLElement, or array of elements * @param root optional root element to search within (defaults to document, useful for shadow DOM) * @returns array of HTML elements matching the selector - * + * * @example * const elements = Utils.getElements('.grid-item'); * const byId = Utils.getElements('#myWidget'); @@ -134,11 +134,11 @@ export class Utils { /** * Convert a potential selector into a single HTML element. * Similar to getElements() but returns only the first match. - * + * * @param els selector string or HTMLElement * @param root optional root element to search within (defaults to document) * @returns the first HTML element matching the selector, or null if not found - * + * * @example * const element = Utils.getElement('#myWidget'); * const first = Utils.getElement('.grid-item'); @@ -170,10 +170,10 @@ export class Utils { /** * Check if a widget should be lazy loaded based on node or grid settings. - * + * * @param n the grid node to check * @returns true if the item should be lazy loaded - * + * * @example * if (Utils.lazyLoad(node)) { * // Set up intersection observer for lazy loading @@ -185,11 +185,11 @@ export class Utils { /** * Create a div element with the specified CSS classes. - * + * * @param classes array of CSS class names to add * @param parent optional parent element to append the div to * @returns the created div element - * + * * @example * const div = Utils.createDiv(['grid-item', 'draggable']); * const nested = Utils.createDiv(['content'], parentDiv); @@ -203,11 +203,11 @@ export class Utils { /** * Check if a widget should resize to fit its content. - * + * * @param n the grid node to check (can be undefined) * @param strict if true, only returns true for explicit sizeToContent:true (not numbers) * @returns true if the widget should resize to content - * + * * @example * if (Utils.shouldSizeToContent(node)) { * // Trigger content-based resizing @@ -221,11 +221,11 @@ export class Utils { /** * Check if two grid positions overlap/intersect. - * + * * @param a first position with x, y, w, h properties * @param b second position with x, y, w, h properties * @returns true if the positions overlap - * + * * @example * const overlaps = Utils.isIntercepted( * {x: 0, y: 0, w: 2, h: 1}, @@ -238,11 +238,11 @@ export class Utils { /** * Check if two grid positions are touching (edges or corners). - * + * * @param a first position * @param b second position * @returns true if the positions are touching - * + * * @example * const touching = Utils.isTouching( * {x: 0, y: 0, w: 2, h: 1}, @@ -255,11 +255,11 @@ export class Utils { /** * Calculate the overlapping area between two grid positions. - * + * * @param a first position * @param b second position * @returns the area of overlap (0 if no overlap) - * + * * @example * const overlap = Utils.areaIntercept( * {x: 0, y: 0, w: 3, h: 2}, @@ -278,10 +278,10 @@ export class Utils { /** * Calculate the total area of a grid position. - * + * * @param a position with width and height * @returns the total area (width * height) - * + * * @example * const area = Utils.area({x: 0, y: 0, w: 3, h: 2}); // returns 6 */ @@ -291,11 +291,11 @@ export class Utils { /** * Sort an array of grid nodes by position (y first, then x). - * + * * @param nodes array of nodes to sort * @param dir sort direction: 1 for ascending (top-left first), -1 for descending * @returns the sorted array (modifies original) - * + * * @example * const sorted = Utils.sort(nodes); // Sort top-left to bottom-right * const reverse = Utils.sort(nodes, -1); // Sort bottom-right to top-left @@ -311,11 +311,11 @@ export class Utils { /** * Find a grid node by its ID. - * + * * @param nodes array of nodes to search * @param id the ID to search for * @returns the node with matching ID, or undefined if not found - * + * * @example * const node = Utils.find(nodes, 'widget-1'); * if (node) console.log('Found node at:', node.x, node.y); @@ -327,10 +327,10 @@ export class Utils { /** * Convert various value types to boolean. * Handles strings like 'false', 'no', '0' as false. - * + * * @param v value to convert * @returns boolean representation - * + * * @example * Utils.toBool('true'); // true * Utils.toBool('false'); // false @@ -351,10 +351,10 @@ export class Utils { /** * Convert a string value to a number, handling null and empty strings. - * + * * @param value string or null value to convert * @returns number value, or undefined for null/empty strings - * + * * @example * Utils.toNumber('42'); // 42 * Utils.toNumber(''); // undefined @@ -367,10 +367,10 @@ export class Utils { /** * Parse a height value with units into numeric value and unit string. * Supports px, em, rem, vh, vw, %, cm, mm units. - * + * * @param val height value as number or string with units * @returns object with h (height) and unit properties - * + * * @example * Utils.parseHeight('100px'); // {h: 100, unit: 'px'} * Utils.parseHeight('2rem'); // {h: 2, unit: 'rem'} @@ -398,11 +398,11 @@ export class Utils { /** * Copy unset fields from source objects to target object (shallow merge with defaults). * Similar to Object.assign but only sets undefined/null fields. - * + * * @param target the object to copy defaults into * @param sources one or more source objects to copy defaults from * @returns the modified target object - * + * * @example * const config = { width: 100 }; * Utils.defaults(config, { width: 200, height: 50 }); @@ -429,11 +429,11 @@ export class Utils { /** * Compare two objects for equality (shallow comparison). * Checks if objects have the same fields and values at one level deep. - * + * * @param a first object to compare * @param b second object to compare * @returns true if objects have the same values - * + * * @example * Utils.same({x: 1, y: 2}, {x: 1, y: 2}); // true * Utils.same({x: 1}, {x: 1, y: 2}); // false @@ -452,12 +452,12 @@ export class Utils { /** * Copy position and size properties from one widget to another. * Copies x, y, w, h and optionally min/max constraints. - * + * * @param a target widget to copy to * @param b source widget to copy from * @param doMinMax if true, also copy min/max width/height constraints * @returns the target widget (a) - * + * * @example * Utils.copyPos(widget1, widget2); // Copy position/size * Utils.copyPos(widget1, widget2, true); // Also copy constraints diff --git a/tsconfig.json b/tsconfig.json index 4b5c75da6..d0548e9d1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,16 +7,24 @@ "emitDecoratorMetadata": true, "experimentalDecorators": true, "inlineSources": true, - "lib": [ "es6", "es2015", "dom" ], + "lib": [ "es2017", "es2015", "dom" ], "module": "ES2020", "noImplicitAny": false, "outDir": "./dist", "sourceMap": true, "strict": false, - "target": "ES2020" + "target": "ES2020", + "types": ["vitest/globals", "@testing-library/jest-dom", "node"], + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "moduleResolution": "node" }, "include": [ - "./src/**/*.ts" + "./src/**/*.ts", + "./spec/**/*.ts", + "./vitest.setup.ts", + "./vitest.config.ts" ], "typeroots": [ "./node_modules/@types" diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 000000000..7a5ca49c1 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,84 @@ +/// +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + // Enable globals (describe, it, expect, etc.) without imports + globals: true, + + // Use jsdom for DOM simulation (required for testing DOM-related code) + environment: 'jsdom', + + // Setup files to run before tests + setupFiles: ['./vitest.setup.ts'], + + // Test file patterns + include: [ + 'spec/**/*-spec.{js,mjs,cjs,ts,mts,cts,jsx,tsx}', + 'spec/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}', + 'src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}' + ], + + // Exclude patterns + exclude: [ + '**/node_modules/**', + '**/dist/**', + '**/angular/**', + '**/react/**', + '**/demo/**', + '**/spec/e2e/**' // Exclude old Protractor E2E tests + ], + + // Coverage configuration + coverage: { + provider: 'v8', // Use V8's built-in coverage (faster and more accurate) + reporter: ['text', 'json', 'html', 'lcov'], + exclude: [ + 'coverage/**', + 'dist/**', + 'node_modules/**', + 'demo/**', + 'angular/**', + 'react/**', + '**/*.d.ts', + '**/*.config.{js,ts}', + '**/karma.conf.js', + 'scripts/**', + 'spec/e2e/**' // Exclude e2e tests from coverage + ], + // Coverage thresholds (optional - set to your desired levels) + thresholds: { + global: { + branches: 80, + functions: 80, + lines: 80, + statements: 80 + } + }, + // Include source files for coverage even if not tested + all: true, + include: ['src/**/*.{js,ts}'] + }, + + // Test timeout (in milliseconds) + testTimeout: 10000, + + // Hook timeout (in milliseconds) + hookTimeout: 10000, + + // Reporter configuration + reporters: ['verbose', 'html'], + + // Output directory for test results + outputFile: { + html: './coverage/test-results.html' + } + }, + + // Resolve configuration for imports + resolve: { + alias: { + '@': '/src' + } + } +}) diff --git a/vitest.setup.ts b/vitest.setup.ts new file mode 100644 index 000000000..261e81372 --- /dev/null +++ b/vitest.setup.ts @@ -0,0 +1,103 @@ +import '@testing-library/jest-dom' + +// Global test setup +// This file runs before each test file + +// Mock DOM APIs that might not be available in jsdom +Object.defineProperty(window, 'matchMedia', { + writable: true, + value: vi.fn().mockImplementation(query => ({ + matches: false, + media: query, + onchange: null, + addListener: vi.fn(), // deprecated + removeListener: vi.fn(), // deprecated + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + dispatchEvent: vi.fn(), + })), +}); + +// Mock ResizeObserver +(globalThis as any).ResizeObserver = vi.fn().mockImplementation(() => ({ + observe: vi.fn(), + unobserve: vi.fn(), + disconnect: vi.fn(), +})); + +// Mock IntersectionObserver +(globalThis as any).IntersectionObserver = vi.fn().mockImplementation(() => ({ + observe: vi.fn(), + unobserve: vi.fn(), + disconnect: vi.fn(), +})); + +// Mock requestAnimationFrame +(globalThis as any).requestAnimationFrame = vi.fn().mockImplementation((cb: Function) => { + return setTimeout(cb, 0); +}); + +(globalThis as any).cancelAnimationFrame = vi.fn().mockImplementation((id: number) => { + clearTimeout(id); +}); + +// Mock performance.now for timing-related tests +Object.defineProperty(window, 'performance', { + writable: true, + value: { + now: vi.fn(() => Date.now()) + } +}); + +// Mock CSS properties that might be used by gridstack +Object.defineProperty(window, 'getComputedStyle', { + value: () => ({ + getPropertyValue: () => '', + width: '100px', + height: '100px', + marginTop: '0px', + marginBottom: '0px', + marginLeft: '0px', + marginRight: '0px' + }) +}); + +// Mock scrollTo for tests that might trigger scrolling +window.scrollTo = vi.fn(); + +// Setup DOM environment +Object.defineProperty(window, 'location', { + value: { + href: 'http://localhost:3000', + origin: 'http://localhost:3000', + pathname: '/', + search: '', + hash: '' + }, + writable: true +}); + +// Global test utilities +(globalThis as any).createMockElement = (tagName: string = 'div', attributes: Record = {}) => { + const element = document.createElement(tagName); + Object.entries(attributes).forEach(([key, value]) => { + element.setAttribute(key, value); + }); + return element; +}; + +// Console error/warning suppression for expected errors in tests +const originalError = console.error; +const originalWarn = console.warn; + +beforeEach(() => { + // Reset console methods for each test + console.error = originalError; + console.warn = originalWarn; +}); + +// Helper to suppress expected console errors/warnings +(globalThis as any).suppressConsoleErrors = () => { + console.error = vi.fn(); + console.warn = vi.fn(); +}; diff --git a/yarn.lock b/yarn.lock index dbe13b42c..0c8f47a04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,277 +2,222 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" - integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== - -"@babel/core@^7.7.5": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" - integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.4" - "@babel/helper-compilation-targets" "^7.21.4" - "@babel/helper-module-transforms" "^7.21.2" - "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.4" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.4" - "@babel/types" "^7.21.4" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/generator@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" - integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== - dependencies: - "@babel/types" "^7.21.4" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" - integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== - dependencies: - "@babel/compat-data" "^7.21.4" - "@babel/helper-validator-option" "^7.21.0" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.18.6": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== - dependencies: - "@babel/types" "^7.21.4" - -"@babel/helper-module-transforms@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" - integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.2" - "@babel/types" "^7.21.2" - -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - -"@babel/helpers@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" - integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" +"@adobe/css-tools@^4.4.0": + version "4.4.4" + resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz#2856c55443d3d461693f32d2b96fb6ea92e1ffa9" + integrity sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg== + +"@ampproject/remapping@^2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@asamuzakjp/css-color@^3.2.0": + version "3.2.0" + resolved "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz#cc42f5b85c593f79f1fa4f25d2b9b321e61d1794" + integrity sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw== + dependencies: + "@csstools/css-calc" "^2.1.3" + "@csstools/css-color-parser" "^3.0.9" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + lru-cache "^10.4.3" + +"@babel/code-frame@^7.10.4": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" + "@babel/helper-validator-identifier" "^7.27.1" js-tokens "^4.0.0" + picocolors "^1.1.1" -"@babel/parser@^7.20.7", "@babel/parser@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" - integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== - -"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== - -"@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" - integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + +"@babel/parser@^7.25.4": + version "7.28.0" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz#979829fbab51a29e13901e5a80713dbcb840825e" + integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g== + dependencies: + "@babel/types" "^7.28.0" + +"@babel/runtime@^7.12.5": + version "7.28.2" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz#2ae5a9d51cc583bd1f5673b3bb70d6d819682473" + integrity sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA== + +"@babel/types@^7.25.4", "@babel/types@^7.28.0": + version "7.28.2" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b" + integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@csstools/color-helpers@^5.0.2": + version "5.0.2" + resolved "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz#82592c9a7c2b83c293d9161894e2a6471feb97b8" + integrity sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA== + +"@csstools/css-calc@^2.1.3", "@csstools/css-calc@^2.1.4": + version "2.1.4" + resolved "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" + integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== + +"@csstools/css-color-parser@^3.0.9": + version "3.0.10" + resolved "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz#79fc68864dd43c3b6782d2b3828bc0fa9d085c10" + integrity sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg== + dependencies: + "@csstools/color-helpers" "^5.0.2" + "@csstools/css-calc" "^2.1.4" + +"@csstools/css-parser-algorithms@^3.0.4": + version "3.0.5" + resolved "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076" + integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== + +"@csstools/css-tokenizer@^3.0.3": + version "3.0.4" + resolved "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3" + integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== "@discoveryjs/json-ext@^0.5.0": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@esbuild/aix-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" + integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== + +"@esbuild/android-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" + integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== + +"@esbuild/android-arm@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" + integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== + +"@esbuild/android-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" + integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== + +"@esbuild/darwin-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" + integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== + +"@esbuild/darwin-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" + integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== + +"@esbuild/freebsd-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" + integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== + +"@esbuild/freebsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" + integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== + +"@esbuild/linux-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" + integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== + +"@esbuild/linux-arm@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" + integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== + +"@esbuild/linux-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" + integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== + +"@esbuild/linux-loong64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" + integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== + +"@esbuild/linux-mips64el@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" + integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== + +"@esbuild/linux-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" + integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== + +"@esbuild/linux-riscv64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" + integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== + +"@esbuild/linux-s390x@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" + integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== + +"@esbuild/linux-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" + integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== + +"@esbuild/netbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" + integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== + +"@esbuild/openbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" + integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== + +"@esbuild/sunos-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" + integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== + +"@esbuild/win32-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" + integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== + +"@esbuild/win32-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" + integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== + +"@esbuild/win32-x64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" + integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -335,20 +280,23 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@istanbuljs/schema@^0.1.2": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" @@ -358,21 +306,11 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - "@jridgewell/set-array@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" @@ -386,11 +324,6 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" @@ -401,13 +334,10 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" @@ -417,6 +347,14 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jridgewell/trace-mapping@^0.3.23": + version "0.3.30" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz#4a76c4daeee5df09f5d3940e087442fb36ce2b99" + integrity sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -438,6 +376,123 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@playwright/test@^1.48.2": + version "1.54.2" + resolved "https://registry.npmjs.org/@playwright/test/-/test-1.54.2.tgz#ff0d1e5d8e26f3258ae65364e2d4d10176926b07" + integrity sha512-A+znathYxPf+72riFd1r1ovOLqsIIB0jKIoPjyK2kqEIe30/6jF6BC7QNluHuwUmsD2tv1XZVugN8GqfTMOxsA== + dependencies: + playwright "1.54.2" + +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.29" + resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz#5a40109a1ab5f84d6fd8fc928b19f367cbe7e7b1" + integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww== + +"@rollup/rollup-android-arm-eabi@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz#292e25953d4988d3bd1af0f5ebbd5ee4d65c90b4" + integrity sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA== + +"@rollup/rollup-android-arm64@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz#053b3def3451e6fc1a9078188f22799e868d7c59" + integrity sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ== + +"@rollup/rollup-darwin-arm64@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz#98d90445282dec54fd05440305a5e8df79a91ece" + integrity sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ== + +"@rollup/rollup-darwin-x64@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz#fe05f95a736423af5f9c3a59a70f41ece52a1f20" + integrity sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA== + +"@rollup/rollup-freebsd-arm64@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz#41e1fbdc1f8c3dc9afb6bc1d6e3fb3104bd81eee" + integrity sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg== + +"@rollup/rollup-freebsd-x64@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz#69131e69cb149d547abb65ef3b38fc746c940e24" + integrity sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw== + +"@rollup/rollup-linux-arm-gnueabihf@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz#977ded91c7cf6fc0d9443bb9c0a064e45a805267" + integrity sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA== + +"@rollup/rollup-linux-arm-musleabihf@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz#dc034fc3c0f0eb5c75b6bc3eca3b0b97fd35f49a" + integrity sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ== + +"@rollup/rollup-linux-arm64-gnu@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz#5e92613768d3de3ffcabc965627dd0a59b3e7dfc" + integrity sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng== + +"@rollup/rollup-linux-arm64-musl@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz#2a44f88e83d28b646591df6e50aa0a5a931833d8" + integrity sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg== + +"@rollup/rollup-linux-loongarch64-gnu@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz#bd5897e92db7fbf7dc456f61d90fff96c4651f2e" + integrity sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA== + +"@rollup/rollup-linux-ppc64-gnu@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz#a7065025411c14ad9ec34cc1cd1414900ec2a303" + integrity sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw== + +"@rollup/rollup-linux-riscv64-gnu@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz#17f9c0c675e13ef4567cfaa3730752417257ccc3" + integrity sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ== + +"@rollup/rollup-linux-riscv64-musl@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz#bc6ed3db2cedc1ba9c0a2183620fe2f792c3bf3f" + integrity sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw== + +"@rollup/rollup-linux-s390x-gnu@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz#440c4f6753274e2928e06d2a25613e5a1cf97b41" + integrity sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA== + +"@rollup/rollup-linux-x64-gnu@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz#1e936446f90b2574ea4a83b4842a762cc0a0aed3" + integrity sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA== + +"@rollup/rollup-linux-x64-musl@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz#c6f304dfba1d5faf2be5d8b153ccbd8b5d6f1166" + integrity sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA== + +"@rollup/rollup-win32-arm64-msvc@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz#b4ad4a79219892aac112ed1c9d1356cad0566ef5" + integrity sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g== + +"@rollup/rollup-win32-ia32-msvc@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz#b1b22eb2a9568048961e4a6f540438b4a762aa62" + integrity sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ== + +"@rollup/rollup-win32-x64-msvc@4.46.2": + version "4.46.2" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz#87079f137b5fdb75da11508419aa998cc8cc3d8b" + integrity sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg== + "@shikijs/engine-oniguruma@^3.9.2": version "3.9.2" resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.9.2.tgz#f6e0e2d1b7211b98353de0753aaa6447ed57e5ab" @@ -473,10 +528,32 @@ resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224" integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg== -"@socket.io/component-emitter@~3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" - integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== +"@testing-library/dom@^10.4.0": + version "10.4.1" + resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz#d444f8a889e9a46e9a3b4f3b88e0fcb3efb6cf95" + integrity sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.3.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + picocolors "1.1.1" + pretty-format "^27.0.2" + +"@testing-library/jest-dom@^6.4.8": + version "6.6.4" + resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.4.tgz#577a1761768bda5458c42241add3b1570c34d39c" + integrity sha512-xDXgLjVunjHqczScfkCJ9iyjdNOVHvvCdqHSSxwM9L0l/wHkTRum67SDc020uAlCoqktJplgO2AAQeLP1wgqDQ== + dependencies: + "@adobe/css-tools" "^4.4.0" + aria-query "^5.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.6.3" + lodash "^4.17.21" + picocolors "^1.1.1" + redent "^3.0.0" "@textlint/ast-node-types@^12.6.1": version "12.6.1" @@ -498,17 +575,15 @@ traverse "^0.6.7" unified "^9.2.2" -"@types/cookie@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== +"@types/aria-query@^5.0.1": + version "5.0.4" + resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== -"@types/cors@^2.8.12": - version "2.8.13" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.13.tgz#b8ade22ba455a1b8cb3b5d3f35910fd204f84f94" - integrity sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA== - dependencies: - "@types/node" "*" +"@types/estree@1.0.8", "@types/estree@^1.0.0": + version "1.0.8" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/estree@^1.0.5": version "1.0.5" @@ -522,11 +597,6 @@ dependencies: "@types/unist" "*" -"@types/jasmine@^4.3.1": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-4.3.1.tgz#2d8ab5601c2fe7d9673dcb157e03f128ab5c5fff" - integrity sha512-Vu8l+UGcshYmV1VWwULgnV/2RDbBaO6i2Ptx7nd//oJPIZGhoI1YLST4VKagD2Pq/Bc2/7zvtvhM7F3p4SN7kQ== - "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" @@ -539,7 +609,7 @@ dependencies: "@types/unist" "*" -"@types/node@*", "@types/node@>=10.0.0": +"@types/node@*": version "18.15.11" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== @@ -648,6 +718,96 @@ "@typescript-eslint/types" "5.58.0" eslint-visitor-keys "^3.3.0" +"@vitest/coverage-v8@^2.0.5": + version "2.1.9" + resolved "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.9.tgz#060bebfe3705c1023bdc220e17fdea4bd9e2b24d" + integrity sha512-Z2cOr0ksM00MpEfyVE8KXIYPEcBFxdbLSs56L8PO0QQMxt/6bDj45uQfxoc96v05KW3clk7vvgP0qfDit9DmfQ== + dependencies: + "@ampproject/remapping" "^2.3.0" + "@bcoe/v8-coverage" "^0.2.3" + debug "^4.3.7" + istanbul-lib-coverage "^3.2.2" + istanbul-lib-report "^3.0.1" + istanbul-lib-source-maps "^5.0.6" + istanbul-reports "^3.1.7" + magic-string "^0.30.12" + magicast "^0.3.5" + std-env "^3.8.0" + test-exclude "^7.0.1" + tinyrainbow "^1.2.0" + +"@vitest/expect@2.1.9": + version "2.1.9" + resolved "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz#b566ea20d58ea6578d8dc37040d6c1a47ebe5ff8" + integrity sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw== + dependencies: + "@vitest/spy" "2.1.9" + "@vitest/utils" "2.1.9" + chai "^5.1.2" + tinyrainbow "^1.2.0" + +"@vitest/mocker@2.1.9": + version "2.1.9" + resolved "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz#36243b27351ca8f4d0bbc4ef91594ffd2dc25ef5" + integrity sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg== + dependencies: + "@vitest/spy" "2.1.9" + estree-walker "^3.0.3" + magic-string "^0.30.12" + +"@vitest/pretty-format@2.1.9", "@vitest/pretty-format@^2.1.9": + version "2.1.9" + resolved "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz#434ff2f7611689f9ce70cd7d567eceb883653fdf" + integrity sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ== + dependencies: + tinyrainbow "^1.2.0" + +"@vitest/runner@2.1.9": + version "2.1.9" + resolved "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz#cc18148d2d797fd1fd5908d1f1851d01459be2f6" + integrity sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g== + dependencies: + "@vitest/utils" "2.1.9" + pathe "^1.1.2" + +"@vitest/snapshot@2.1.9": + version "2.1.9" + resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz#24260b93f798afb102e2dcbd7e61c6dfa118df91" + integrity sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ== + dependencies: + "@vitest/pretty-format" "2.1.9" + magic-string "^0.30.12" + pathe "^1.1.2" + +"@vitest/spy@2.1.9": + version "2.1.9" + resolved "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz#cb28538c5039d09818b8bfa8edb4043c94727c60" + integrity sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ== + dependencies: + tinyspy "^3.0.2" + +"@vitest/ui@^2.0.5": + version "2.1.9" + resolved "https://registry.npmjs.org/@vitest/ui/-/ui-2.1.9.tgz#9e876cf3caf492dd6fddbd7f87b2d6bf7186a7a9" + integrity sha512-izzd2zmnk8Nl5ECYkW27328RbQ1nKvkm6Bb5DAaz1Gk59EbLkiCMa6OLT0NoaAYTjOFS6N+SMYW1nh4/9ljPiw== + dependencies: + "@vitest/utils" "2.1.9" + fflate "^0.8.2" + flatted "^3.3.1" + pathe "^1.1.2" + sirv "^3.0.0" + tinyglobby "^0.2.10" + tinyrainbow "^1.2.0" + +"@vitest/utils@2.1.9": + version "2.1.9" + resolved "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz#4f2486de8a54acf7ecbf2c5c24ad7994a680a6c1" + integrity sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ== + dependencies: + "@vitest/pretty-format" "2.1.9" + loupe "^3.1.2" + tinyrainbow "^1.2.0" + "@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" @@ -817,12 +977,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.0.2: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.1.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2: +acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2: version "8.12.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== @@ -839,6 +994,11 @@ agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.4" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" @@ -876,18 +1036,16 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -895,6 +1053,16 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -915,6 +1083,18 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +aria-query@5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +aria-query@^5.0.0: + version "5.3.2" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== + array-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" @@ -947,16 +1127,6 @@ arrify@^1.0.0: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - asn1@~0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" @@ -976,15 +1146,10 @@ assert@1.4.1: dependencies: util "0.10.3" -assert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" - integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== - dependencies: - es6-object-assign "^1.1.0" - is-nan "^1.2.1" - object-is "^1.0.1" - util "^0.12.0" +assertion-error@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" + integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== async-limiter@~1.0.0: version "1.0.1" @@ -998,7 +1163,7 @@ async@^2.6.0: dependencies: lodash "^4.17.14" -async@^3.0.1, async@^3.2.0, async@~3.2.0: +async@^3.2.0, async@~3.2.0: version "3.2.4" resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== @@ -1008,18 +1173,6 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -1040,16 +1193,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base64id@2.0.0, base64id@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== - basic-auth@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" @@ -1081,34 +1224,6 @@ blocking-proxy@^1.0.0: dependencies: minimist "^1.2.0" -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@^1.19.0: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - body@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" @@ -1134,87 +1249,14 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-resolve@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" - integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== - dependencies: - resolve "^1.17.0" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e" - integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg== - dependencies: - bn.js "^5.2.1" - browserify-rsa "^4.1.0" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.4" - inherits "^2.0.4" - parse-asn1 "^5.1.6" - readable-stream "^3.6.2" - safe-buffer "^5.2.1" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.21.10, browserslist@^4.21.3: +browserslist@^4.21.10: version "4.23.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== @@ -1236,35 +1278,17 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@^5.4.3: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== - bytes@1: version "1.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" integrity sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ== -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== @@ -1272,7 +1296,7 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- es-errors "^1.3.0" function-bind "^1.1.2" -call-bind@^1.0.0, call-bind@^1.0.2: +call-bind@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== @@ -1280,35 +1304,6 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -call-bind@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" - integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== - dependencies: - call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" - get-intrinsic "^1.2.4" - set-function-length "^1.2.2" - -call-bound@^1.0.3, call-bound@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1334,6 +1329,17 @@ ccount@^1.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== +chai@^5.1.2: + version "5.2.1" + resolved "https://registry.npmjs.org/chai/-/chai-5.2.1.tgz#a9502462bdc79cf90b4a0953537a9908aa638b47" + integrity sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A== + dependencies: + assertion-error "^2.0.1" + check-error "^2.1.1" + deep-eql "^5.0.1" + loupe "^3.1.0" + pathval "^2.0.0" + chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1345,15 +1351,6 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2, chalk@~4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -1377,7 +1374,12 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.1: +check-error@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" + integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== + +"chokidar@>=3.0.0 <4.0.0": version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -1397,14 +1399,6 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - clean-css@^5.0.1: version "5.3.2" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" @@ -1430,15 +1424,6 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -1448,23 +1433,11 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -1472,11 +1445,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -1492,17 +1460,7 @@ colors@~1.1.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" integrity sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w== -combine-source-map@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" - integrity sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg== - dependencies: - convert-source-map "~1.1.0" - inline-source-map "~0.6.0" - lodash.memoize "~3.0.3" - source-map "~0.5.3" - -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -1539,41 +1497,11 @@ connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" -console-browserify@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== - -content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - continuable-cache@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" integrity sha512-TF30kpKhTH8AGCG3dut0rdd/19B7Z+qCnrMoBLpyQu/2drZdNrrpcjPEoJeSVsQM+8KmWG5O56oPDjSSUsuTyA== -convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -convert-source-map@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" - integrity sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg== - -cookie@~0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - core-js@^3.30.1: version "3.30.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.1.tgz#fc9c5adcc541d8e9fa3e381179433cbf795628ba" @@ -1589,14 +1517,6 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cors@~2.8.5: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - coveralls@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.1.tgz#f5d4431d8b5ae69c5079c8f8ca00d64ac77cf081" @@ -1608,47 +1528,6 @@ coveralls@^3.1.1: minimist "^1.2.5" request "^2.88.2" -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hash@~1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" - integrity sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - ripemd160 "^2.0.0" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -1669,27 +1548,27 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@^3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + +cssstyle@^4.1.0: + version "4.6.0" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz#ea18007024e3167f4f105315f3ec2d982bf48ed9" + integrity sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg== + dependencies: + "@asamuzakjp/css-color" "^3.2.0" + rrweb-cssom "^0.8.0" dashdash@^1.12.0: version "1.14.1" @@ -1698,10 +1577,13 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -date-format@^4.0.14: - version "4.0.14" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" - integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== +data-urls@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" + integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== + dependencies: + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" dateformat@~4.6.2: version "4.6.3" @@ -1715,6 +1597,13 @@ debug@2.6.9: dependencies: ms "2.0.0" +debug@4, debug@^4.3.7: + version "4.4.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== + dependencies: + ms "^2.1.3" + debug@^3.1.0: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -1722,7 +1611,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@^4.0.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1734,35 +1623,21 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +decimal.js@^10.4.3: + version "10.6.0" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" + integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== + +deep-eql@^5.0.1: + version "5.0.2" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" + integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - del@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" @@ -1791,13 +1666,10 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== destroy@1.2.0: version "1.2.0" @@ -1809,25 +1681,6 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1854,15 +1707,15 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-serialize@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" +dom-accessibility-api@^0.5.9: + version "0.5.16" + resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== + +dom-accessibility-api@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" + integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== dom-serializer@^1.0.1: version "1.4.1" @@ -1873,11 +1726,6 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -domain-browser@^4.16.0: - version "4.22.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.22.0.tgz#6ddd34220ec281f9a65d3386d267ddd35c491f9f" - integrity sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw== - domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" @@ -1923,6 +1771,11 @@ duplexify@^3.5.1: readable-stream "^2.0.0" stream-shift "^1.0.0" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -1941,24 +1794,16 @@ electron-to-chromium@^1.5.4: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6" integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q== -elliptic@^6.5.3, elliptic@^6.5.4: - version "6.6.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" - integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + emoji-regex@~10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.1.0.tgz#d50e383743c0f7a5945c47087295afc112e3cf66" @@ -1976,27 +1821,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -engine.io-parser@~5.2.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49" - integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw== - -engine.io@~6.5.2: - version "6.5.5" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.5.tgz#430b80d8840caab91a50e9e23cb551455195fc93" - integrity sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA== - dependencies: - "@types/cookie" "^0.4.1" - "@types/cors" "^2.8.12" - "@types/node" ">=10.0.0" - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.4.1" - cors "~2.8.5" - debug "~4.3.1" - engine.io-parser "~5.2.1" - ws "~8.17.1" - enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.1: version "5.17.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" @@ -2005,11 +1829,6 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.1: graceful-fs "^4.2.4" tapable "^2.2.0" -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - integrity sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA== - entities@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" @@ -2020,11 +1839,16 @@ entities@^3.0.1: resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== -entities@^4.4.0: +entities@^4.4.0, entities@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +entities@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== + envinfo@^7.7.3: version "7.8.1" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" @@ -2037,13 +1861,6 @@ error@^7.0.0: dependencies: string-template "~0.2.1" -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - es-define-property@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" @@ -2059,6 +1876,11 @@ es-module-lexer@^1.2.1: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== +es-module-lexer@^1.5.4: + version "1.7.0" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== + es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" @@ -2066,10 +1888,15 @@ es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: dependencies: es-errors "^1.3.0" -es6-object-assign@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" - integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" es6-promise@^4.0.3: version "4.2.8" @@ -2083,10 +1910,34 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +esbuild@^0.21.3: + version "0.21.5" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" + integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== + optionalDependencies: + "@esbuild/aix-ppc64" "0.21.5" + "@esbuild/android-arm" "0.21.5" + "@esbuild/android-arm64" "0.21.5" + "@esbuild/android-x64" "0.21.5" + "@esbuild/darwin-arm64" "0.21.5" + "@esbuild/darwin-x64" "0.21.5" + "@esbuild/freebsd-arm64" "0.21.5" + "@esbuild/freebsd-x64" "0.21.5" + "@esbuild/linux-arm" "0.21.5" + "@esbuild/linux-arm64" "0.21.5" + "@esbuild/linux-ia32" "0.21.5" + "@esbuild/linux-loong64" "0.21.5" + "@esbuild/linux-mips64el" "0.21.5" + "@esbuild/linux-ppc64" "0.21.5" + "@esbuild/linux-riscv64" "0.21.5" + "@esbuild/linux-s390x" "0.21.5" + "@esbuild/linux-x64" "0.21.5" + "@esbuild/netbsd-x64" "0.21.5" + "@esbuild/openbsd-x64" "0.21.5" + "@esbuild/sunos-x64" "0.21.5" + "@esbuild/win32-arm64" "0.21.5" + "@esbuild/win32-ia32" "0.21.5" + "@esbuild/win32-x64" "0.21.5" escalade@^3.1.2: version "3.2.0" @@ -2213,6 +2064,13 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2228,11 +2086,6 @@ eventemitter2@~0.4.13: resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" integrity sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ== -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - events@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" @@ -2243,14 +2096,6 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -2276,6 +2121,11 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" +expect-type@^1.1.0: + version "1.2.2" + resolved "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz#c030a329fb61184126c8447585bc75a7ec6fbff3" + integrity sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA== + extend@^3.0.0, extend@^3.0.2, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -2343,6 +2193,16 @@ faye-websocket@~0.10.0: dependencies: websocket-driver ">=0.5.1" +fdir@^6.4.4: + version "6.4.6" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" + integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== + +fflate@^0.8.2: + version "0.8.2" + resolved "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== + figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -2449,29 +2309,15 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" -flatted@^3.1.0, flatted@^3.2.7: +flatted@^3.1.0: version "3.2.7" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -follow-redirects@^1.0.0: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -for-each@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" - integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== - dependencies: - is-callable "^1.2.7" +flatted@^3.3.1: + version "3.3.3" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== for-in@^1.0.1: version "1.0.2" @@ -2485,11 +2331,30 @@ for-own@^1.0.0: dependencies: for-in "^1.0.1" +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== +form-data@^4.0.0: + version "4.0.4" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" + integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -2509,25 +2374,21 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: +fsevents@2.3.2, fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -2545,22 +2406,17 @@ gaze@^1.1.0: dependencies: globule "^1.0.0" -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: +get-intrinsic@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== @@ -2569,20 +2425,9 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: has "^1.0.3" has-symbols "^1.0.3" -get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-intrinsic@^1.3.0: +get-intrinsic@^1.2.6: version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: call-bind-apply-helpers "^1.0.2" @@ -2642,7 +2487,19 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.3, glob@^7.0.6, glob@^7.1.3, glob@^7.1.6, glob@^7.1.7: +glob@^10.4.1: + version "10.4.5" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^7.0.3, glob@^7.0.6, glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2686,11 +2543,6 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.19.0: version "13.20.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" @@ -2731,19 +2583,12 @@ globule@^1.0.0: lodash "^4.17.21" minimatch "~3.0.2" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - gopd@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: +graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -2908,6 +2753,15 @@ gzip-size@^5.1.1: duplexer "^0.1.1" pify "^4.0.1" +happy-dom@^15.7.4: + version "15.11.7" + resolved "https://registry.npmjs.org/happy-dom/-/happy-dom-15.11.7.tgz#db9854f11e5dd3fd4ab20cbbcfdf7bd9e17cd971" + integrity sha512-KyrFvnl+J9US63TEzwoiJOQzZBJY7KgBushJA8X61DMbNsH+2ONkDuLDnCnwUiPTF42tLoEmrPyoqbenVA5zrg== + dependencies: + entities "^4.5.0" + webidl-conversions "^7.0.0" + whatwg-mimetype "^3.0.0" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -2928,36 +2782,12 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== @@ -2967,13 +2797,6 @@ has-symbols@^1.1.0: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" @@ -2988,46 +2811,13 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hash-base@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" - integrity sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw== - dependencies: - inherits "^2.0.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0, hasown@^2.0.2: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -3040,6 +2830,13 @@ hooker@~0.2.3: resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959" integrity sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA== +html-encoding-sniffer@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" + integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== + dependencies: + whatwg-encoding "^3.1.1" + html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -3081,14 +2878,13 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== +http-proxy-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" + agent-base "^7.1.0" + debug "^4.3.4" http-signature@~1.2.0: version "1.2.0" @@ -3104,11 +2900,6 @@ https-browserify@0.0.1: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" integrity sha512-EjDQFbgJr1vDD/175UJeSX3ncQ3+RUnCL5NkthQGHvF4VNHlzTy8ifJfTqz47qiPRqaFH58+CbuG3x51WuB1XQ== -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== - https-proxy-agent@^2.2.1: version "2.2.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" @@ -3117,25 +2908,21 @@ https-proxy-agent@^2.2.1: agent-base "^4.3.0" debug "^3.1.0" -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== +https-proxy-agent@^7.0.5: + version "7.0.6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== dependencies: - safer-buffer ">= 2.1.2 < 3" + agent-base "^7.1.2" + debug "4" -iconv-lite@~0.6.3: +iconv-lite@0.6.3, iconv-lite@~0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - ignore@^5.2.0: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" @@ -3172,6 +2959,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -3180,7 +2972,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3200,13 +2992,6 @@ ini@^1.3.4: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inline-source-map@~0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" - integrity sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA== - dependencies: - source-map "~0.5.3" - interpret@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" @@ -3243,14 +3028,6 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -3263,11 +3040,6 @@ is-buffer@^2.0.0: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - is-core-module@^2.12.0: version "2.12.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" @@ -3302,13 +3074,6 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -3321,14 +3086,6 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-nan@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - is-number-like@^1.0.3: version "1.0.8" resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.8.tgz#2e129620b50891042e44e9bbbb30593e75cfbbe3" @@ -3377,6 +3134,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" @@ -3389,24 +3151,6 @@ is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== -is-typed-array@^1.1.10, is-typed-array@^1.1.3: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -is-typed-array@^1.1.14: - version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" - integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== - dependencies: - which-typed-array "^1.1.16" - is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -3429,21 +3173,11 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isbinaryfile@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" - integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -3464,15 +3198,10 @@ istanbul-lib-coverage@^3.0.0: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" +istanbul-lib-coverage@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-report@^3.0.0: version "3.0.0" @@ -3483,27 +3212,40 @@ istanbul-lib-report@^3.0.0: make-dir "^3.0.0" supports-color "^7.1.0" -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== +istanbul-lib-report@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^5.0.6: + version "5.0.6" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz#acaef948df7747c8eb5fbf1265cb980f6353a441" + integrity sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A== + dependencies: + "@jridgewell/trace-mapping" "^0.3.23" debug "^4.1.1" istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" -istanbul-reports@^3.0.0: - version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== +istanbul-reports@^3.1.7: + version "3.1.7" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jasmine-core@^4.1.0, jasmine-core@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-4.6.0.tgz#6884fc3d5b66bf293e422751eed6d6da217c38f5" - integrity sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ== +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" jasmine-core@~2.8.0: version "2.8.0" @@ -3563,10 +3305,32 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsdom@^25.0.0: + version "25.0.1" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz#536ec685c288fc8a5773a65f82d8b44badcc73ef" + integrity sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw== + dependencies: + cssstyle "^4.1.0" + data-urls "^5.0.0" + decimal.js "^10.4.3" + form-data "^4.0.0" + html-encoding-sniffer "^4.0.0" + http-proxy-agent "^7.0.2" + https-proxy-agent "^7.0.5" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.12" + parse5 "^7.1.2" + rrweb-cssom "^0.7.1" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^5.0.0" + w3c-xmlserializer "^5.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^3.1.1" + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" + ws "^8.18.0" + xml-name-validator "^5.0.0" json-parse-even-better-errors@^2.3.1: version "2.3.1" @@ -3588,23 +3352,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - jsprim@^1.2.2: version "1.4.2" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" @@ -3625,106 +3377,6 @@ jszip@^3.1.3: readable-stream "~2.3.6" setimmediate "^1.0.5" -karma-chrome-launcher@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz#baca9cc071b1562a1db241827257bfe5cab597ea" - integrity sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ== - dependencies: - which "^1.2.1" - -karma-cli@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/karma-cli/-/karma-cli-2.0.0.tgz#481548d28661af4cc68f3d8e09708f17d2cba931" - integrity sha512-1Kb28UILg1ZsfqQmeELbPzuEb5C6GZJfVIk0qOr8LNYQuYWmAaqP16WpbpKEjhejDrDYyYOwwJXSZO6u7q5Pvw== - dependencies: - resolve "^1.3.3" - -karma-jasmine@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-5.1.0.tgz#3af4558a6502fa16856a0f346ec2193d4b884b2f" - integrity sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ== - dependencies: - jasmine-core "^4.1.0" - -karma-typescript@5.5.4: - version "5.5.4" - resolved "https://registry.yarnpkg.com/karma-typescript/-/karma-typescript-5.5.4.tgz#969871512b8476dfc7a496f48da9ca9c73d710e5" - integrity sha512-D7nQ96xu/UekuqCmiPimnCuOFqp8+BxiND6MU6IJVN37E7DgXzr7SUeTzwuTHtKSYpgxKv4iOTUteYTxpeZL9A== - dependencies: - acorn "^8.1.0" - acorn-walk "^8.0.2" - assert "^2.0.0" - async "^3.0.1" - browser-resolve "^2.0.0" - browserify-zlib "^0.2.0" - buffer "^5.4.3" - combine-source-map "^0.8.0" - console-browserify "^1.2.0" - constants-browserify "^1.0.0" - convert-source-map "^1.7.0" - crypto-browserify "^3.12.0" - diff "^4.0.1" - domain-browser "^4.16.0" - events "^3.2.0" - glob "^7.1.6" - https-browserify "^1.0.0" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.0" - json-stringify-safe "^5.0.1" - lodash "^4.17.19" - log4js "^6.3.0" - minimatch "^3.0.4" - os-browserify "^0.3.0" - pad "^3.2.0" - path-browserify "^1.0.0" - process "^0.11.10" - punycode "^2.1.1" - querystring-es3 "^0.2.1" - readable-stream "^3.1.1" - source-map "^0.7.3" - stream-browserify "^3.0.0" - stream-http "^3.1.0" - string_decoder "^1.3.0" - timers-browserify "^2.0.11" - tmp "^0.2.1" - tty-browserify "^0.0.1" - url "^0.11.0" - util "^0.12.1" - vm-browserify "^1.1.2" - -karma@^6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.1.tgz#f2253716dd3a41aaa813fa9f54b6ee047e1127d9" - integrity sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA== - dependencies: - "@colors/colors" "1.5.0" - body-parser "^1.19.0" - braces "^3.0.2" - chokidar "^3.5.1" - connect "^3.7.0" - di "^0.0.1" - dom-serialize "^2.2.1" - glob "^7.1.7" - graceful-fs "^4.2.6" - http-proxy "^1.18.1" - isbinaryfile "^4.0.8" - lodash "^4.17.21" - log4js "^6.4.1" - mime "^2.5.2" - minimatch "^3.0.4" - mkdirp "^0.5.5" - qjobs "^1.2.0" - range-parser "^1.2.1" - rimraf "^3.0.2" - socket.io "^4.4.1" - source-map "^0.6.1" - tmp "^0.2.1" - ua-parser-js "^0.7.30" - yargs "^16.1.1" - kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -3815,17 +3467,12 @@ lodash.isfinite@^3.3.2: resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" integrity sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA== -lodash.memoize@~3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" - integrity sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A== - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.21, lodash@~4.17.19, lodash@~4.17.21: +lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.21, lodash@~4.17.19, lodash@~4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3835,28 +3482,20 @@ log-driver@^1.2.7: resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== -log4js@^6.3.0, log4js@^6.4.1: - version "6.9.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" - integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== - dependencies: - date-format "^4.0.14" - debug "^4.3.4" - flatted "^3.2.7" - rfdc "^1.3.0" - streamroller "^3.1.5" - longest-streak@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" +loupe@^3.1.0, loupe@^3.1.2: + version "3.2.0" + resolved "https://registry.npmjs.org/loupe/-/loupe-3.2.0.tgz#174073ba8e0a1d0d5e43cc08626ed8a19403c344" + integrity sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw== + +lru-cache@^10.2.0, lru-cache@^10.4.3: + version "10.4.3" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^6.0.0: version "6.0.0" @@ -3870,6 +3509,27 @@ lunr@^2.3.9: resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== + +magic-string@^0.30.12: + version "0.30.17" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + +magicast@^0.3.5: + version "0.3.5" + resolved "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz#8301c3c7d66704a0771eb1bad74274f0ec036739" + integrity sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ== + dependencies: + "@babel/parser" "^7.25.4" + "@babel/types" "^7.25.4" + source-map-js "^1.2.0" + make-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -3877,6 +3537,13 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + make-iterator@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" @@ -3930,15 +3597,6 @@ maxmin@^3.0.0: gzip-size "^5.1.1" pretty-bytes "^5.3.0" -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - mdast-util-find-and-replace@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz#b7db1e873f96f66588c321f1363069abf607d1b5" @@ -4038,11 +3696,6 @@ mdurl@^2.0.0: resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - mem@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -4137,20 +3790,12 @@ micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.3" picomatch "^2.3.1" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -4162,25 +3807,15 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.5.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - mimic-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: +min-indent@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" @@ -4189,9 +3824,9 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.5: +minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" @@ -4208,12 +3843,10 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mkdirp@^0.5.5: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== morgan@^1.10.0: version "1.10.0" @@ -4226,6 +3859,11 @@ morgan@^1.10.0: on-finished "~2.3.0" on-headers "~1.0.2" +mrmime@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" + integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4236,11 +3874,16 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -4317,39 +3960,26 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== +nwsapi@^2.2.12: + version "2.2.21" + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz#8df7797079350adda208910d8c33fc4c2d7520c3" + integrity sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA== + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" @@ -4420,11 +4050,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== - os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -4507,14 +4132,12 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pad@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/pad/-/pad-3.2.0.tgz#be7a1d1cb6757049b4ad5b70e71977158fea95d1" - integrity sha512-2u0TrjcGbOjBTJpyewEl4hBO3OeX5wWue7eIFPzQTg6wFSvoaHcBTTUY5m+n0hd04gmTCPuY0kCpVIVuw5etwg== - dependencies: - wcwidth "^1.0.1" +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== -pako@~1.0.2, pako@~1.0.5: +pako@~1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== @@ -4526,17 +4149,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -4563,16 +4175,18 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== +parse5@^7.1.2: + version "7.3.0" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" + integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== + dependencies: + entities "^6.0.0" + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -path-browserify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -4620,28 +4234,39 @@ path-root@^0.1.1: dependencies: path-root-regex "^0.1.0" +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pbkdf2@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.3.tgz#8be674d591d65658113424592a95d1517318dd4b" - integrity sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA== - dependencies: - create-hash "~1.1.3" - create-hmac "^1.1.7" - ripemd160 "=2.0.1" - safe-buffer "^5.2.1" - sha.js "^2.4.11" - to-buffer "^1.2.0" +pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + +pathval@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz#8855c5a2899af072d6ac05d11e46045ad0dc605d" + integrity sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ== performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== +picocolors@1.1.1, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picocolors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" @@ -4652,6 +4277,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.3" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -4681,6 +4311,20 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +playwright-core@1.54.2: + version "1.54.2" + resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.54.2.tgz#73cc5106f19ec6b9371908603d61a7f171ebd8f0" + integrity sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA== + +playwright@1.54.2: + version "1.54.2" + resolved "https://registry.npmjs.org/playwright/-/playwright-1.54.2.tgz#e2435abb2db3a96a276f8acc3ada1a85b587dff3" + integrity sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw== + dependencies: + playwright-core "1.54.2" + optionalDependencies: + fsevents "2.3.2" + portscanner@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.2.0.tgz#6059189b3efa0965c9d96a56b958eb9508411cf1" @@ -4689,10 +4333,14 @@ portscanner@^2.2.0: async "^2.6.0" is-number-like "^1.0.3" -possible-typed-array-names@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" - integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== +postcss@^8.4.43: + version "8.5.6" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" prelude-ls@^1.2.1: version "1.2.1" @@ -4704,16 +4352,20 @@ pretty-bytes@^5.3.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== +pretty-format@^27.0.2: + version "27.5.1" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - protractor@^5.0.0: version "5.4.4" resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.4.tgz#b241466aaf83b76bc2c58df67deb9a5cdfc61529" @@ -4761,18 +4413,6 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -4796,6 +4436,11 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + q@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" @@ -4806,18 +4451,6 @@ q@^1.4.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== -qjobs@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" - integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== - -qs@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== - dependencies: - side-channel "^1.0.6" - qs@^6.4.0: version "6.11.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.1.tgz#6c29dff97f0c0060765911ba65cbc9764186109f" @@ -4830,11 +4463,6 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== -querystring-es3@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== - querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -4845,36 +4473,18 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: +randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: +range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - raw-body@~1.1.0: version "1.1.7" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" @@ -4883,6 +4493,11 @@ raw-body@~1.1.0: bytes "1" string_decoder "0.10" +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -4896,15 +4511,6 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.3.3, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.5.0, readable-stream@^3.6.0, readable-stream@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -4926,6 +4532,14 @@ rechoir@^0.8.0: dependencies: resolve "^1.20.0" +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + remark-footnotes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-3.0.0.tgz#5756b56f8464fa7ed80dbba0c966136305d8cb8d" @@ -5003,11 +4617,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -5033,7 +4642,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.3, resolve@^1.9.0: +resolve@^1.19.0, resolve@^1.20.0, resolve@^1.9.0: version "1.22.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.3.tgz#4b4055349ffb962600972da1fdc33c46a4eb3283" integrity sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw== @@ -5047,11 +4656,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -5059,28 +4663,51 @@ rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4: dependencies: glob "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -ripemd160@=2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" - integrity sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w== +rollup@^4.20.0: + version "4.46.2" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz#09b1a45d811e26d09bed63dc3ecfb6831c16ce32" + integrity sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg== dependencies: - hash-base "^2.0.0" - inherits "^2.0.1" + "@types/estree" "1.0.8" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.46.2" + "@rollup/rollup-android-arm64" "4.46.2" + "@rollup/rollup-darwin-arm64" "4.46.2" + "@rollup/rollup-darwin-x64" "4.46.2" + "@rollup/rollup-freebsd-arm64" "4.46.2" + "@rollup/rollup-freebsd-x64" "4.46.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.46.2" + "@rollup/rollup-linux-arm-musleabihf" "4.46.2" + "@rollup/rollup-linux-arm64-gnu" "4.46.2" + "@rollup/rollup-linux-arm64-musl" "4.46.2" + "@rollup/rollup-linux-loongarch64-gnu" "4.46.2" + "@rollup/rollup-linux-ppc64-gnu" "4.46.2" + "@rollup/rollup-linux-riscv64-gnu" "4.46.2" + "@rollup/rollup-linux-riscv64-musl" "4.46.2" + "@rollup/rollup-linux-s390x-gnu" "4.46.2" + "@rollup/rollup-linux-x64-gnu" "4.46.2" + "@rollup/rollup-linux-x64-musl" "4.46.2" + "@rollup/rollup-win32-arm64-msvc" "4.46.2" + "@rollup/rollup-win32-ia32-msvc" "4.46.2" + "@rollup/rollup-win32-x64-msvc" "4.46.2" + fsevents "~2.3.2" -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" +rrweb-cssom@^0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz#c73451a484b86dd7cfb1e0b2898df4b703183e4b" + integrity sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg== + +rrweb-cssom@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz#3021d1b4352fbf3b614aaeed0bc0d5739abe0bc2" + integrity sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw== run-parallel@^1.1.9: version "1.2.0" @@ -5094,7 +4721,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -5104,7 +4731,7 @@ safe-json-parse@~1.0.1: resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" integrity sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -5130,6 +4757,13 @@ sax@>=0.6.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + schema-utils@^3.1.1, schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" @@ -5154,7 +4788,7 @@ semver@^5.3.0, semver@^5.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.0.0, semver@^6.3.0: +semver@^6.0.0: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -5166,6 +4800,11 @@ semver@^7.3.4, semver@^7.3.7: dependencies: lru-cache "^6.0.0" +semver@^7.5.3: + version "7.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -5220,18 +4859,6 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.2.1, set-function-length@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -5247,14 +4874,6 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -5295,59 +4914,45 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== signal-exit@^3.0.0: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sirv@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz#32a844794655b727f9e2867b777e0060fbe07bf3" + integrity sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A== + dependencies: + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" + totalist "^3.0.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -socket.io-adapter@~2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz#5de9477c9182fdc171cd8c8364b9a8894ec75d12" - integrity sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA== - dependencies: - ws "~8.11.0" - -socket.io-parser@~4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" - integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" - -socket.io@^4.4.1: - version "4.7.5" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.5.tgz#56eb2d976aef9d1445f373a62d781a41c7add8f8" - integrity sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA== - dependencies: - accepts "~1.3.4" - base64id "~2.0.0" - cors "~2.8.5" - debug "~4.3.2" - engine.io "~6.5.2" - socket.io-adapter "~2.5.2" - socket.io-parser "~4.2.4" - "source-map-js@>=0.6.2 <2.0.0": version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.2.0, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map-support@~0.4.0: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" @@ -5363,21 +4968,16 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.5.6, source-map@~0.5.3: +source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: +source-map@^0.6.0, source-map@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - split@^1.0.0, split@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -5410,6 +5010,11 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -5420,6 +5025,11 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +std-env@^3.8.0: + version "3.9.0" + resolved "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz#1a6f7243b339dca4c9fd55e1c7504c77ef23e8f1" + integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw== + stream-browserify@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" @@ -5428,43 +5038,25 @@ stream-browserify@2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" -stream-browserify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" - integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== - dependencies: - inherits "~2.0.4" - readable-stream "^3.5.0" - -stream-http@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.2.0.tgz#1872dfcf24cb15752677e40e5c3f9cc1926028b5" - integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.4" - readable-stream "^3.6.0" - xtend "^4.0.2" - stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -streamroller@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff" - integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw== - dependencies: - date-format "^4.0.14" - debug "^4.3.4" - fs-extra "^8.1.0" - string-template@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" integrity sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw== +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -5491,18 +5083,20 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string_decoder@0.10: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -5510,6 +5104,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -5531,11 +5132,25 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -5546,13 +5161,6 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -5572,6 +5180,11 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + tapable@^2.1.1, tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" @@ -5598,6 +5211,15 @@ terser@^5.26.0: commander "^2.20.0" source-map-support "~0.5.20" +test-exclude@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz#20b3ba4906ac20994e275bbcafd68d510264c2a2" + integrity sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^10.4.1" + minimatch "^9.0.4" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -5623,13 +5245,6 @@ timers-browserify@2.0.2: dependencies: setimmediate "^1.0.4" -timers-browserify@^2.0.11: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - tiny-lr@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" @@ -5642,6 +5257,51 @@ tiny-lr@^1.1.1: object-assign "^4.1.0" qs "^6.4.0" +tinybench@^2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" + integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== + +tinyexec@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" + integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== + +tinyglobby@^0.2.10: + version "0.2.14" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== + dependencies: + fdir "^6.4.4" + picomatch "^4.0.2" + +tinypool@^1.0.1: + version "1.1.1" + resolved "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591" + integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg== + +tinyrainbow@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" + integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== + +tinyspy@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" + integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== + +tldts-core@^6.1.86: + version "6.1.86" + resolved "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz#a93e6ed9d505cb54c542ce43feb14c73913265d8" + integrity sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA== + +tldts@^6.1.32: + version "6.1.86" + resolved "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz#087e0555b31b9725ee48ca7e77edc56115cd82f7" + integrity sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ== + dependencies: + tldts-core "^6.1.86" + tmp@0.0.30: version "0.0.30" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" @@ -5649,27 +5309,6 @@ tmp@0.0.30: dependencies: os-tmpdir "~1.0.1" -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -to-buffer@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.1.tgz#2ce650cdb262e9112a18e65dc29dcb513c8155e0" - integrity sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ== - dependencies: - isarray "^2.0.5" - safe-buffer "^5.2.1" - typed-array-buffer "^1.0.3" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -5682,6 +5321,18 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +totalist@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" + integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== + +tough-cookie@^5.0.0: + version "5.1.2" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz#66d774b4a1d9e12dc75089725af3ac75ec31bed7" + integrity sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A== + dependencies: + tldts "^6.1.32" + tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -5690,6 +5341,13 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +tr46@^5.1.0: + version "5.1.1" + resolved "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz#96ae867cddb8fdb64a49cc3059a8d428bcf238ca" + integrity sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw== + dependencies: + punycode "^2.3.1" + traverse@^0.6.7: version "0.6.7" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" @@ -5722,11 +5380,6 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tty-browserify@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" - integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -5751,23 +5404,6 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" - integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-typed-array "^1.1.14" - typedoc-plugin-markdown@^4.8.0: version "4.8.0" resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.8.0.tgz#4ef70fb05d38674ed212d6ff99f7e857c49e266e" @@ -5789,11 +5425,6 @@ typescript@^5.0.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== -ua-parser-js@^0.7.30: - version "0.7.35" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" - integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== - uc.micro@^2.0.0, uc.micro@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" @@ -5859,12 +5490,7 @@ unist-util-visit-parents@^3.0.0: "@types/unist" "^2.0.0" unist-util-is "^4.0.0" -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -5902,7 +5528,7 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -5914,17 +5540,6 @@ util@0.10.3: dependencies: inherits "2.0.1" -util@^0.12.0, util@^0.12.1: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -5942,11 +5557,6 @@ v8flags@~3.2.0: dependencies: homedir-polyfill "^1.0.1" -vary@^1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -5974,15 +5584,60 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" -vm-browserify@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== +vite-node@2.1.9: + version "2.1.9" + resolved "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz#549710f76a643f1c39ef34bdb5493a944e4f895f" + integrity sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA== + dependencies: + cac "^6.7.14" + debug "^4.3.7" + es-module-lexer "^1.5.4" + pathe "^1.1.2" + vite "^5.0.0" + +vite@^5.0.0: + version "5.4.19" + resolved "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz#20efd060410044b3ed555049418a5e7d1998f959" + integrity sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA== + dependencies: + esbuild "^0.21.3" + postcss "^8.4.43" + rollup "^4.20.0" + optionalDependencies: + fsevents "~2.3.3" + +vitest@^2.0.5: + version "2.1.9" + resolved "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz#7d01ffd07a553a51c87170b5e80fea3da7fb41e7" + integrity sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q== + dependencies: + "@vitest/expect" "2.1.9" + "@vitest/mocker" "2.1.9" + "@vitest/pretty-format" "^2.1.9" + "@vitest/runner" "2.1.9" + "@vitest/snapshot" "2.1.9" + "@vitest/spy" "2.1.9" + "@vitest/utils" "2.1.9" + chai "^5.1.2" + debug "^4.3.7" + expect-type "^1.1.0" + magic-string "^0.30.12" + pathe "^1.1.2" + std-env "^3.8.0" + tinybench "^2.9.0" + tinyexec "^0.3.1" + tinypool "^1.0.1" + tinyrainbow "^1.2.0" + vite "^5.0.0" + vite-node "2.1.9" + why-is-node-running "^2.3.0" + +w3c-xmlserializer@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" + integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== + dependencies: + xml-name-validator "^5.0.0" watchpack@^2.4.1: version "2.4.2" @@ -5992,13 +5647,6 @@ watchpack@^2.4.1: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - webdriver-js-extender@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" @@ -6024,6 +5672,11 @@ webdriver-manager@^12.0.6, webdriver-manager@^12.1.7: semver "^5.3.0" xml2js "^0.4.17" +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + webpack-cli@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.0.1.tgz#95fc0495ac4065e9423a722dec9175560b6f2d9a" @@ -6111,37 +5764,37 @@ websocket-stream@^5.0.1: ws "^3.2.0" xtend "^4.0.0" +whatwg-encoding@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" + integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-mimetype@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" + integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== + +whatwg-url@^14.0.0: + version "14.2.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz#4ee02d5d725155dae004f6ae95c73e7ef5d95663" + integrity sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw== + dependencies: + tr46 "^5.1.0" + webidl-conversions "^7.0.0" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== -which-typed-array@^1.1.16: - version "1.1.19" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" - integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.4" - for-each "^0.3.5" - get-proto "^1.0.1" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - -which-typed-array@^1.1.2: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - -which@^1.2.1, which@^1.2.14, which@^1.2.9: +which@^1.2.14, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -6155,6 +5808,14 @@ which@^2.0.1, which@~2.0.2: dependencies: isexe "^2.0.0" +why-is-node-running@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" + integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + wildcard@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" @@ -6165,6 +5826,15 @@ word-wrap@^1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -6182,14 +5852,14 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" wrappy@1: version "1.0.2" @@ -6205,15 +5875,15 @@ ws@^3.2.0: safe-buffer "~5.1.0" ultron "~1.1.0" -ws@~8.11.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== +ws@^8.18.0: + version "8.18.3" + resolved "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== -ws@~8.17.1: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" - integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== +xml-name-validator@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" + integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== xml2js@^0.4.17: version "0.4.23" @@ -6228,7 +5898,12 @@ xmlbuilder@~11.0.0: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== -xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.1: +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -6238,16 +5913,6 @@ xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -6274,11 +5939,6 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs@^12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" @@ -6314,19 +5974,6 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.1.1: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 5b89b38257c49db604d2d4f1f96455cafb95a1ba Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 13 Aug 2025 13:58:13 -0700 Subject: [PATCH 55/56] fix Util:removeInternalForSave() to skip arrays * since we don't know how to hydrate arrays (unlike object spread operator '...') skip them) --- doc/API.md | 26 +++++++++++++------------- doc/CHANGES.md | 4 ++++ spec/utils-spec.ts | 28 +++++++++++++++++++++++++++- src/utils.ts | 2 ++ 4 files changed, 46 insertions(+), 14 deletions(-) diff --git a/doc/API.md b/doc/API.md index 1f477847f..1288b3f86 100644 --- a/doc/API.md +++ b/doc/API.md @@ -2845,7 +2845,7 @@ new Utils(): Utils; static addElStyles(el, styles): void; ``` -Defined in: [utils.ts:690](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L690) +Defined in: [utils.ts:692](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L692) ###### Parameters @@ -2864,7 +2864,7 @@ Defined in: [utils.ts:690](https://github.com/adumesny/gridstack.js/blob/master/ static appendTo(el, parent): void; ``` -Defined in: [utils.ts:672](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L672) +Defined in: [utils.ts:674](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L674) ###### Parameters @@ -2943,7 +2943,7 @@ const overlap = Utils.areaIntercept( static canBeRotated(n): boolean; ``` -Defined in: [utils.ts:793](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L793) +Defined in: [utils.ts:795](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L795) true if the item can be rotated (checking for prop, not space available) @@ -2963,7 +2963,7 @@ true if the item can be rotated (checking for prop, not space available) static clone(obj): T; ``` -Defined in: [utils.ts:635](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L635) +Defined in: [utils.ts:637](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L637) single level clone, returning a new object with same top fields. This will share sub objects and arrays @@ -2989,7 +2989,7 @@ single level clone, returning a new object with same top fields. This will share static cloneDeep(obj): T; ``` -Defined in: [utils.ts:651](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L651) +Defined in: [utils.ts:653](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L653) Recursive clone version that returns a full copy, checking for nested objects and arrays ONLY. Note: this will use as-is any key starting with double __ (and not copy inside) some lib have circular dependencies. @@ -3016,7 +3016,7 @@ Note: this will use as-is any key starting with double __ (and not copy inside) static cloneNode(el): HTMLElement; ``` -Defined in: [utils.ts:666](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L666) +Defined in: [utils.ts:668](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L668) deep clone the given HTML node, removing teh unique id field @@ -3226,7 +3226,7 @@ const fromShadow = Utils.getElements('.item', shadowRoot); static getValuesFromTransformedElement(parent): DragTransform; ``` -Defined in: [utils.ts:750](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L750) +Defined in: [utils.ts:752](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L752) defines an element that is used to get the offset and scale from grid transforms returns the scale and offsets from said element @@ -3247,7 +3247,7 @@ returns the scale and offsets from said element static initEvent(e, info): T; ``` -Defined in: [utils.ts:707](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L707) +Defined in: [utils.ts:709](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L709) ###### Type Parameters @@ -3420,7 +3420,7 @@ removes field from the first object if same as the second objects (like diffing) static removeInternalForSave(n, removeEl): void; ``` -Defined in: [utils.ts:509](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L509) +Defined in: [utils.ts:511](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L511) removes internal fields '_' and default values for saving @@ -3441,7 +3441,7 @@ removes internal fields '_' and default values for saving static removePositioningStyles(el): void; ``` -Defined in: [utils.ts:542](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L542) +Defined in: [utils.ts:544](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L544) ###### Parameters @@ -3565,7 +3565,7 @@ static simulateMouseEvent( target?): void; ``` -Defined in: [utils.ts:723](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L723) +Defined in: [utils.ts:725](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L725) copies the MouseEvent (or convert Touch) properties and sends it as another event to the given target @@ -3620,7 +3620,7 @@ static swap( b): void; ``` -Defined in: [utils.ts:774](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L774) +Defined in: [utils.ts:776](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L776) swap the given object 2 field values @@ -3642,7 +3642,7 @@ swap the given object 2 field values static throttle(func, delay): () => void; ``` -Defined in: [utils.ts:532](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L532) +Defined in: [utils.ts:534](https://github.com/adumesny/gridstack.js/blob/master/src/utils.ts#L534) delay calling the given function for given delay, preventing new calls from happening while waiting diff --git a/doc/CHANGES.md b/doc/CHANGES.md index dc2755aa6..8402fad96 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,6 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* +- [12.3.2-dev (TBD)](#1232-dev-tbd) - [12.3.2 (2025-08-12)](#1232-2025-08-12) - [12.3.1 (2025-08-11)](#1231-2025-08-11) - [12.3.0 (2025-08-10)](#1230-2025-08-10) @@ -133,6 +134,9 @@ Change log +## 12.3.2-dev (TBD) +* fix: [#3139](https://github.com/gridstack/gridstack.js/pull/3139) `Utils:removeInternalForSave()` to skip arrays + ## 12.3.2 (2025-08-12) * fix: [#3136](https://github.com/gridstack/gridstack.js/pull/3136) more tweaks to save(columnCount) option. diff --git a/spec/utils-spec.ts b/spec/utils-spec.ts index 6c07a675b..cf929a49b 100644 --- a/spec/utils-spec.ts +++ b/spec/utils-spec.ts @@ -225,5 +225,31 @@ describe('gridstack utils', () => { expect(f).toEqual({first: 1, _dontskip: {second: 2}}); expect(z).toEqual({first: 1, _dontskip: {second: 'two'}}); }); - }); + }); + describe('removeInternalAndSame', () => { + it('should remove internal and same', () => { + const a = {first: 1, second: 'text', _skip: {second: 2}, arr: [1, 'second', 3]}; + const b = {first: 1, second: 'text'}; + Utils.removeInternalAndSame(a, b); + expect(a).toEqual({arr: [1, 'second', 3]}); + }); + it('should not remove items in an array', () => { + const a = {arr: [1, 2, 3]}; + const b = {arr: [1, 3]}; + Utils.removeInternalAndSame(a, b); + expect(a).toEqual({arr: [1, 2, 3]}); + }); + it('should remove nested object, and make empty', () => { + const a = {obj1: {first: 1, nested: {second: 2}}, obj2: {first: 1, second: 2}}; + const b = {obj1: {first: 1, nested: {second: 2}}, obj2: {first: 1, second: 2}}; + Utils.removeInternalAndSame(a, b); + expect(a).toEqual({}); + }); + it('should remove nested object, and make empty - part 2', () => { + const a = {obj1: {first: 1, nested: {second: 2}}, obj2: {first: 1, second: 2}}; + const b = {obj1: {first: 1}, obj2: {first: 1, second: 2}}; + Utils.removeInternalAndSame(a, b); + expect(a).toEqual({obj1: {nested: {second: 2}}}); + }); + }); }); diff --git a/src/utils.ts b/src/utils.ts index 97dd96a2f..b8e9803e5 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -493,6 +493,8 @@ export class Utils { /** removes field from the first object if same as the second objects (like diffing) and internal '_' for saving */ static removeInternalAndSame(a: unknown, b: unknown):void { if (typeof a !== 'object' || typeof b !== 'object') return; + // skip arrays as we don't know how to hydrate them (unlike object spread operator) + if (Array.isArray(a) || Array.isArray(b)) return; for (let key in a) { const aVal = a[key]; const bVal = b[key]; From 21651da2c1c95f3979f43b0a4eb2a134a9325923 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 13 Aug 2025 18:59:17 -0700 Subject: [PATCH 56/56] v12.3.3 --- angular/doc/api/index.md | 2 +- angular/package.json | 2 +- angular/projects/lib/package.json | 2 +- angular/projects/lib/src/lib/base-widget.ts | 2 +- angular/projects/lib/src/lib/gridstack-item.component.ts | 2 +- angular/projects/lib/src/lib/gridstack.component.ts | 2 +- angular/projects/lib/src/lib/gridstack.module.ts | 2 +- angular/projects/lib/src/lib/types.ts | 2 +- angular/yarn.lock | 8 ++++---- doc/API.md | 2 +- doc/CHANGES.md | 4 ++-- package.json | 2 +- react/package.json | 2 +- react/yarn.lock | 8 ++++---- src/dd-base-impl.ts | 2 +- src/dd-draggable.ts | 2 +- src/dd-droppable.ts | 2 +- src/dd-element.ts | 2 +- src/dd-gridstack.ts | 2 +- src/dd-manager.ts | 2 +- src/dd-resizable-handle.ts | 2 +- src/dd-resizable.ts | 2 +- src/dd-touch.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 4 ++-- src/types.ts | 2 +- src/utils.ts | 2 +- 28 files changed, 36 insertions(+), 36 deletions(-) diff --git a/angular/doc/api/index.md b/angular/doc/api/index.md index 719abb3a1..ab8b329c4 100644 --- a/angular/doc/api/index.md +++ b/angular/doc/api/index.md @@ -1,4 +1,4 @@ -# GridStack Angular Library v12.3.2 +# GridStack Angular Library v12.3.3 ## Modules diff --git a/angular/package.json b/angular/package.json index 1e1e472b2..01287315a 100644 --- a/angular/package.json +++ b/angular/package.json @@ -21,7 +21,7 @@ "@angular/platform-browser": "^14", "@angular/platform-browser-dynamic": "^14", "@angular/router": "^14", - "gridstack": "^12.3.2", + "gridstack": "^12.3.3", "rxjs": "~7.5.0", "tslib": "^2.3.0", "zone.js": "~0.11.4" diff --git a/angular/projects/lib/package.json b/angular/projects/lib/package.json index f48550891..13688e7c8 100644 --- a/angular/projects/lib/package.json +++ b/angular/projects/lib/package.json @@ -1,6 +1,6 @@ { "name": "gridstack-angular", - "version": "12.3.2", + "version": "12.3.3", "peerDependencies": { "@angular/common": ">=14", "@angular/core": ">=14" diff --git a/angular/projects/lib/src/lib/base-widget.ts b/angular/projects/lib/src/lib/base-widget.ts index f2caf2a8d..f903ef373 100644 --- a/angular/projects/lib/src/lib/base-widget.ts +++ b/angular/projects/lib/src/lib/base-widget.ts @@ -1,5 +1,5 @@ /** - * gridstack-item.component.ts 12.3.2 + * gridstack-item.component.ts 12.3.3 * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license */ diff --git a/angular/projects/lib/src/lib/gridstack-item.component.ts b/angular/projects/lib/src/lib/gridstack-item.component.ts index b6f7cbab2..18653a917 100644 --- a/angular/projects/lib/src/lib/gridstack-item.component.ts +++ b/angular/projects/lib/src/lib/gridstack-item.component.ts @@ -1,5 +1,5 @@ /** - * gridstack-item.component.ts 12.3.2 + * gridstack-item.component.ts 12.3.3 * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license */ diff --git a/angular/projects/lib/src/lib/gridstack.component.ts b/angular/projects/lib/src/lib/gridstack.component.ts index 82bdeeb28..f129aab40 100644 --- a/angular/projects/lib/src/lib/gridstack.component.ts +++ b/angular/projects/lib/src/lib/gridstack.component.ts @@ -1,5 +1,5 @@ /** - * gridstack.component.ts 12.3.2 + * gridstack.component.ts 12.3.3 * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license */ diff --git a/angular/projects/lib/src/lib/gridstack.module.ts b/angular/projects/lib/src/lib/gridstack.module.ts index 3d3eb1051..1add6e9f2 100644 --- a/angular/projects/lib/src/lib/gridstack.module.ts +++ b/angular/projects/lib/src/lib/gridstack.module.ts @@ -1,5 +1,5 @@ /** - * gridstack.component.ts 12.3.2 + * gridstack.component.ts 12.3.3 * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license */ diff --git a/angular/projects/lib/src/lib/types.ts b/angular/projects/lib/src/lib/types.ts index 5c4901c43..a02d6b08c 100644 --- a/angular/projects/lib/src/lib/types.ts +++ b/angular/projects/lib/src/lib/types.ts @@ -1,5 +1,5 @@ /** - * gridstack-item.component.ts 12.3.2 + * gridstack-item.component.ts 12.3.3 * Copyright (c) 2025 Alain Dumesny - see GridStack root license */ diff --git a/angular/yarn.lock b/angular/yarn.lock index de2889954..72d162b27 100644 --- a/angular/yarn.lock +++ b/angular/yarn.lock @@ -3752,10 +3752,10 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -gridstack@^12.3.2: - version "12.3.2" - resolved "https://registry.yarnpkg.com/gridstack/-/gridstack-12.3.2.tgz#c07ed3720d7e6d58234f9a7286d3b5e49cf2d49d" - integrity sha512-NWVpKO27vkivcP4pzVAyrrip4njrTEB2hNQGLxfgGM/kGBA/GnBWwqo3etnRtODMAxQj7iN3yX3ildmsciLC8Q== +gridstack@^12.3.3: + version "12.3.3" + resolved "https://registry.yarnpkg.com/gridstack/-/gridstack-12.3.3.tgz#0c4fc3cdf6e1c16e6095bc79ff7240a590d2c200" + integrity sha512-Bboi4gj7HXGnx1VFXQNde4Nwi5srdUSuCCnOSszKhFjBs8EtMEWhsKX02BjIKkErq/FjQUkNUbXUYeQaVMQ0jQ== handle-thing@^2.0.0: version "2.0.1" diff --git a/doc/API.md b/doc/API.md index 1288b3f86..737b25749 100644 --- a/doc/API.md +++ b/doc/API.md @@ -1,4 +1,4 @@ -# gridstack v12.3.2 +# gridstack v12.3.3 ## Classes diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 8402fad96..e40bc1f0e 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [12.3.2-dev (TBD)](#1232-dev-tbd) +- [12.3.3 (2025-08-13)](#1233-2025-08-13) - [12.3.2 (2025-08-12)](#1232-2025-08-12) - [12.3.1 (2025-08-11)](#1231-2025-08-11) - [12.3.0 (2025-08-10)](#1230-2025-08-10) @@ -134,7 +134,7 @@ Change log -## 12.3.2-dev (TBD) +## 12.3.3 (2025-08-13) * fix: [#3139](https://github.com/gridstack/gridstack.js/pull/3139) `Utils:removeInternalForSave()` to skip arrays ## 12.3.2 (2025-08-12) diff --git a/package.json b/package.json index bfe606c4b..37cffb954 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "12.3.2", + "version": "12.3.3", "license": "MIT", "author": "Alain Dumesny (https://github.com/adumesny)", "contributors": [ diff --git a/react/package.json b/react/package.json index 570b48d8e..f76ad2dac 100644 --- a/react/package.json +++ b/react/package.json @@ -13,7 +13,7 @@ "test:ui": "vitest --ui" }, "dependencies": { - "gridstack": "^12.3.2", + "gridstack": "^12.3.3", "react": "^18.3.1", "react-dom": "^18.3.1", "react-fast-compare": "^3.2.2", diff --git a/react/yarn.lock b/react/yarn.lock index d45840e47..cf2d504ac 100644 --- a/react/yarn.lock +++ b/react/yarn.lock @@ -1335,10 +1335,10 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -gridstack@^12.3.2: - version "12.3.2" - resolved "https://registry.yarnpkg.com/gridstack/-/gridstack-12.3.2.tgz#c07ed3720d7e6d58234f9a7286d3b5e49cf2d49d" - integrity sha512-NWVpKO27vkivcP4pzVAyrrip4njrTEB2hNQGLxfgGM/kGBA/GnBWwqo3etnRtODMAxQj7iN3yX3ildmsciLC8Q== +gridstack@^12.3.3: + version "12.3.3" + resolved "https://registry.yarnpkg.com/gridstack/-/gridstack-12.3.3.tgz#0c4fc3cdf6e1c16e6095bc79ff7240a590d2c200" + integrity sha512-Bboi4gj7HXGnx1VFXQNde4Nwi5srdUSuCCnOSszKhFjBs8EtMEWhsKX02BjIKkErq/FjQUkNUbXUYeQaVMQ0jQ== has-flag@^4.0.0: version "4.0.0" diff --git a/src/dd-base-impl.ts b/src/dd-base-impl.ts index 9d2f95a02..f85dcc28f 100644 --- a/src/dd-base-impl.ts +++ b/src/dd-base-impl.ts @@ -1,5 +1,5 @@ /** - * dd-base-impl.ts 12.3.2 + * dd-base-impl.ts 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-draggable.ts b/src/dd-draggable.ts index 30c2ec781..f1abe6303 100644 --- a/src/dd-draggable.ts +++ b/src/dd-draggable.ts @@ -1,5 +1,5 @@ /** - * dd-draggable.ts 12.3.2 + * dd-draggable.ts 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-droppable.ts b/src/dd-droppable.ts index 3506d3ca3..e2f80b2a9 100644 --- a/src/dd-droppable.ts +++ b/src/dd-droppable.ts @@ -1,5 +1,5 @@ /** - * dd-droppable.ts 12.3.2 + * dd-droppable.ts 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-element.ts b/src/dd-element.ts index 2842396a9..7e256b8b8 100644 --- a/src/dd-element.ts +++ b/src/dd-element.ts @@ -1,5 +1,5 @@ /** - * dd-elements.ts 12.3.2 + * dd-elements.ts 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-gridstack.ts b/src/dd-gridstack.ts index 07527694c..70ca8ed95 100644 --- a/src/dd-gridstack.ts +++ b/src/dd-gridstack.ts @@ -1,5 +1,5 @@ /** - * dd-gridstack.ts 12.3.2 + * dd-gridstack.ts 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-manager.ts b/src/dd-manager.ts index 054d2891a..d0e63d839 100644 --- a/src/dd-manager.ts +++ b/src/dd-manager.ts @@ -1,5 +1,5 @@ /** - * dd-manager.ts 12.3.2 + * dd-manager.ts 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-resizable-handle.ts b/src/dd-resizable-handle.ts index d74502a4c..d4137e4c4 100644 --- a/src/dd-resizable-handle.ts +++ b/src/dd-resizable-handle.ts @@ -1,5 +1,5 @@ /** - * dd-resizable-handle.ts 12.3.2 + * dd-resizable-handle.ts 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-resizable.ts b/src/dd-resizable.ts index 7a715dad3..2f1f3ca35 100644 --- a/src/dd-resizable.ts +++ b/src/dd-resizable.ts @@ -1,5 +1,5 @@ /** - * dd-resizable.ts 12.3.2 + * dd-resizable.ts 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */ diff --git a/src/dd-touch.ts b/src/dd-touch.ts index 7b5871836..be7f0180d 100644 --- a/src/dd-touch.ts +++ b/src/dd-touch.ts @@ -1,5 +1,5 @@ /** - * touch.ts 12.3.2 + * touch.ts 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 41c087d08..45d73c298 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,5 +1,5 @@ /** - * gridstack-engine.ts 12.3.2 + * gridstack-engine.ts 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */ diff --git a/src/gridstack.scss b/src/gridstack.scss index e4484bcd1..da69257c9 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /** - * gridstack SASS styles 12.3.2 + * gridstack SASS styles 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */ diff --git a/src/gridstack.ts b/src/gridstack.ts index fcbeaf3bc..8401f434d 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,5 +1,5 @@ /*! - * GridStack 12.3.2 + * GridStack 12.3.3 * https://gridstackjs.com/ * * Copyright (c) 2021-2025 Alain Dumesny @@ -2168,7 +2168,7 @@ export class GridStack { } /** @internal current version compiled in code */ - static GDRev = '12.3.2'; + static GDRev = '12.3.3'; /* =========================================================================================== * drag&drop methods that used to be stubbed out and implemented in dd-gridstack.ts diff --git a/src/types.ts b/src/types.ts index f2b67ce30..cd48102bb 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,5 +1,5 @@ /** - * types.ts 12.3.2 + * types.ts 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */ diff --git a/src/utils.ts b/src/utils.ts index b8e9803e5..024dbafd2 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,5 +1,5 @@ /** - * utils.ts 12.3.2 + * utils.ts 12.3.3 * Copyright (c) 2021-2025 Alain Dumesny - see GridStack root license */