babylonjs-node-editor 7.26.0 → 7.26.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -317,8 +317,11 @@ import { PrePassTextureBlock } from "babylonjs/Materials/Node/Blocks/Input/prePa
317
317
  import { NodeMaterialTeleportInBlock } from "babylonjs/Materials/Node/Blocks/Teleport/teleportInBlock";
318
318
  import { NodeMaterialTeleportOutBlock } from "babylonjs/Materials/Node/Blocks/Teleport/teleportOutBlock";
319
319
  import { ColorConverterBlock } from "babylonjs/Materials/Node/Blocks/colorConverterBlock";
320
+ import { LoopBlock } from "babylonjs/Materials/Node/Blocks/loopBlock";
321
+ import { StorageReadBlock } from "babylonjs/Materials/Node/Blocks/storageReadBlock";
322
+ import { StorageWriteBlock } from "babylonjs/Materials/Node/Blocks/storageWriteBlock";
320
323
  export class BlockTools {
321
- static GetBlockFromString(data: string, scene: Scene, nodeMaterial: NodeMaterial): ColorConverterBlock | NodeMaterialTeleportInBlock | NodeMaterialTeleportOutBlock | HeightToNormalBlock | ElbowBlock | TwirlBlock | VoronoiNoiseBlock | ScreenSpaceBlock | CloudBlock | MatrixBuilderBlock | DesaturateBlock | RefractBlock | ReflectBlock | DerivativeBlock | Rotate2dBlock | NormalBlendBlock | WorleyNoise3DBlock | SimplexPerlin3DBlock | BonesBlock | InstancesBlock | MorphTargetsBlock | DiscardBlock | PrePassTextureBlock | ImageProcessingBlock | ColorMergerBlock | VectorMergerBlock | ColorSplitterBlock | VectorSplitterBlock | TextureBlock | ReflectionTextureBlock | LightBlock | FogBlock | VertexOutputBlock | FragmentOutputBlock | PrePassOutputBlock | AddBlock | ClampBlock | ScaleBlock | CrossBlock | DotBlock | PowBlock | MultiplyBlock | TransformBlock | TrigonometryBlock | RemapBlock | NormalizeBlock | FresnelBlock | LerpBlock | NLerpBlock | DivideBlock | SubtractBlock | ModBlock | StepBlock | SmoothStepBlock | OneMinusBlock | ReciprocalBlock | ViewDirectionBlock | LightInformationBlock | MaxBlock | MinBlock | LengthBlock | DistanceBlock | NegateBlock | PerturbNormalBlock | TBNBlock | RandomNumberBlock | ReplaceColorBlock | PosterizeBlock | ArcTan2Block | GradientBlock | FrontFacingBlock | MeshAttributeExistsBlock | WaveBlock | InputBlock | PBRMetallicRoughnessBlock | SheenBlock | AnisotropyBlock | ReflectionBlock | ClearCoatBlock | RefractionBlock | SubSurfaceBlock | CurrentScreenBlock | ParticleTextureBlock | ParticleRampGradientBlock | ParticleBlendMultiplyBlock | FragCoordBlock | ScreenSizeBlock | SceneDepthBlock | ConditionalBlock | ImageSourceBlock | ClipPlanesBlock | FragDepthBlock | ShadowMapBlock | TriPlanarBlock | MatrixTransposeBlock | MatrixDeterminantBlock | CurveBlock | null;
324
+ static GetBlockFromString(data: string, scene: Scene, nodeMaterial: NodeMaterial): StorageWriteBlock | StorageReadBlock | LoopBlock | ColorConverterBlock | NodeMaterialTeleportInBlock | NodeMaterialTeleportOutBlock | HeightToNormalBlock | ElbowBlock | TwirlBlock | VoronoiNoiseBlock | ScreenSpaceBlock | CloudBlock | MatrixBuilderBlock | DesaturateBlock | RefractBlock | ReflectBlock | DerivativeBlock | Rotate2dBlock | NormalBlendBlock | WorleyNoise3DBlock | SimplexPerlin3DBlock | BonesBlock | InstancesBlock | MorphTargetsBlock | DiscardBlock | PrePassTextureBlock | ImageProcessingBlock | ColorMergerBlock | VectorMergerBlock | ColorSplitterBlock | VectorSplitterBlock | TextureBlock | ReflectionTextureBlock | LightBlock | FogBlock | VertexOutputBlock | FragmentOutputBlock | PrePassOutputBlock | AddBlock | ClampBlock | ScaleBlock | CrossBlock | DotBlock | PowBlock | MultiplyBlock | TransformBlock | TrigonometryBlock | RemapBlock | NormalizeBlock | FresnelBlock | LerpBlock | NLerpBlock | DivideBlock | SubtractBlock | ModBlock | StepBlock | SmoothStepBlock | OneMinusBlock | ReciprocalBlock | ViewDirectionBlock | LightInformationBlock | MaxBlock | MinBlock | LengthBlock | DistanceBlock | NegateBlock | PerturbNormalBlock | TBNBlock | RandomNumberBlock | ReplaceColorBlock | PosterizeBlock | ArcTan2Block | GradientBlock | FrontFacingBlock | MeshAttributeExistsBlock | WaveBlock | InputBlock | PBRMetallicRoughnessBlock | SheenBlock | AnisotropyBlock | ReflectionBlock | ClearCoatBlock | RefractionBlock | SubSurfaceBlock | CurrentScreenBlock | ParticleTextureBlock | ParticleRampGradientBlock | ParticleBlendMultiplyBlock | FragCoordBlock | ScreenSizeBlock | SceneDepthBlock | ConditionalBlock | ImageSourceBlock | ClipPlanesBlock | FragDepthBlock | ShadowMapBlock | TriPlanarBlock | MatrixTransposeBlock | MatrixDeterminantBlock | CurveBlock | null;
322
325
  static GetColorFromConnectionNodeType(type: NodeMaterialBlockConnectionPointTypes): string;
323
326
  static GetConnectionNodeTypeFromString(type: string): NodeMaterialBlockConnectionPointTypes.Float | NodeMaterialBlockConnectionPointTypes.Vector2 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4 | NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Color4 | NodeMaterialBlockConnectionPointTypes.Matrix | NodeMaterialBlockConnectionPointTypes.AutoDetect;
324
327
  static GetStringFromConnectionNodeType(type: NodeMaterialBlockConnectionPointTypes): "" | "Float" | "Vector2" | "Vector3" | "Vector4" | "Matrix" | "Color3" | "Color4";
@@ -975,6 +978,18 @@ export class MeshAttributeExistsDisplayManager implements IDisplayManager {
975
978
  updatePreviewContent(): void;
976
979
  }
977
980
 
981
+ }
982
+ declare module "babylonjs-node-editor/graphSystem/display/loopDisplayManager" {
983
+ import { IDisplayManager } from "babylonjs-node-editor/nodeGraphSystem/interfaces/displayManager";
984
+ import { INodeData } from "babylonjs-node-editor/nodeGraphSystem/interfaces/nodeData";
985
+ export class LoopDisplayManager implements IDisplayManager {
986
+ getHeaderClass(): string;
987
+ shouldDisplayPortLabels(): boolean;
988
+ getHeaderText(nodeData: INodeData): string;
989
+ getBackgroundColor(): string;
990
+ updatePreviewContent(nodeData: INodeData, contentArea: HTMLDivElement): void;
991
+ }
992
+
978
993
  }
979
994
  declare module "babylonjs-node-editor/graphSystem/display/inputDisplayManager" {
980
995
  import { NodeMaterialBlockConnectionPointTypes } from "babylonjs/Materials/Node/Enums/nodeMaterialBlockConnectionPointTypes";
@@ -2003,6 +2018,8 @@ export class NodeLink {
2003
2018
  get nodeB(): GraphNode | undefined;
2004
2019
  intersectsWith(rect: DOMRect): boolean;
2005
2020
  update(endX?: number, endY?: number, straight?: boolean): void;
2021
+ get path(): SVGPathElement;
2022
+ get selectionPath(): SVGPathElement;
2006
2023
  constructor(graphCanvas: GraphCanvasComponent, portA: NodePort, nodeA: GraphNode, portB?: NodePort, nodeB?: GraphNode);
2007
2024
  onClick(evt: MouseEvent): void;
2008
2025
  dispose(notify?: boolean): void;
@@ -2083,6 +2100,7 @@ export class GraphNode {
2083
2100
  set enclosingFrameId(value: number);
2084
2101
  set isSelected(value: boolean);
2085
2102
  setIsSelected(value: boolean, marqueeSelection: boolean): void;
2103
+ get rootElement(): HTMLDivElement;
2086
2104
  constructor(content: INodeData, stateManager: StateManager);
2087
2105
  isOverlappingFrame(frame: GraphFrame): boolean;
2088
2106
  getPortForPortData(portData: IPortData): NodePort | null;
@@ -2133,6 +2151,7 @@ export class GraphFrame {
2133
2151
  private _headerTextElement;
2134
2152
  private _headerCollapseElement;
2135
2153
  private _headerCloseElement;
2154
+ private _headerFocusElement;
2136
2155
  private _commentsElement;
2137
2156
  private _portContainer;
2138
2157
  private _outputPortContainer;
@@ -2162,6 +2181,7 @@ export class GraphFrame {
2162
2181
  private readonly _closeSVG;
2163
2182
  private readonly _expandSVG;
2164
2183
  private readonly _collapseSVG;
2184
+ private readonly _focusSVG;
2165
2185
  get id(): number;
2166
2186
  get isCollapsed(): boolean;
2167
2187
  private _createInputPort;
@@ -2190,6 +2210,11 @@ export class GraphFrame {
2190
2210
  get comments(): string;
2191
2211
  set comments(comments: string);
2192
2212
  constructor(candidate: Nullable<HTMLDivElement>, canvas: GraphCanvasComponent, doNotCaptureNodes?: boolean);
2213
+ private _isFocused;
2214
+ /**
2215
+ * Enter/leave focus mode
2216
+ */
2217
+ switchFocusMode(): void;
2193
2218
  refresh(): void;
2194
2219
  addNode(node: GraphNode): void;
2195
2220
  removeNode(node: GraphNode): void;
@@ -4740,7 +4765,7 @@ declare module BABYLON.NodeEditor {
4740
4765
 
4741
4766
 
4742
4767
  export class BlockTools {
4743
- static GetBlockFromString(data: string, scene: BABYLON.Scene, nodeMaterial: BABYLON.NodeMaterial): BABYLON.ColorConverterBlock | BABYLON.NodeMaterialTeleportInBlock | BABYLON.NodeMaterialTeleportOutBlock | BABYLON.HeightToNormalBlock | BABYLON.ElbowBlock | BABYLON.TwirlBlock | BABYLON.VoronoiNoiseBlock | BABYLON.ScreenSpaceBlock | BABYLON.CloudBlock | BABYLON.MatrixBuilderBlock | BABYLON.DesaturateBlock | BABYLON.RefractBlock | BABYLON.ReflectBlock | BABYLON.DerivativeBlock | BABYLON.Rotate2dBlock | BABYLON.NormalBlendBlock | BABYLON.WorleyNoise3DBlock | BABYLON.SimplexPerlin3DBlock | BABYLON.BonesBlock | BABYLON.InstancesBlock | BABYLON.MorphTargetsBlock | BABYLON.DiscardBlock | BABYLON.PrePassTextureBlock | BABYLON.ImageProcessingBlock | BABYLON.ColorMergerBlock | BABYLON.VectorMergerBlock | BABYLON.ColorSplitterBlock | BABYLON.VectorSplitterBlock | BABYLON.TextureBlock | BABYLON.ReflectionTextureBlock | BABYLON.LightBlock | BABYLON.FogBlock | BABYLON.VertexOutputBlock | BABYLON.FragmentOutputBlock | BABYLON.PrePassOutputBlock | BABYLON.AddBlock | BABYLON.ClampBlock | BABYLON.ScaleBlock | BABYLON.CrossBlock | BABYLON.DotBlock | BABYLON.PowBlock | BABYLON.MultiplyBlock | BABYLON.TransformBlock | BABYLON.TrigonometryBlock | BABYLON.RemapBlock | BABYLON.NormalizeBlock | BABYLON.FresnelBlock | BABYLON.LerpBlock | BABYLON.NLerpBlock | BABYLON.DivideBlock | BABYLON.SubtractBlock | BABYLON.ModBlock | BABYLON.StepBlock | BABYLON.SmoothStepBlock | BABYLON.OneMinusBlock | BABYLON.ReciprocalBlock | BABYLON.ViewDirectionBlock | BABYLON.LightInformationBlock | BABYLON.MaxBlock | BABYLON.MinBlock | BABYLON.LengthBlock | BABYLON.DistanceBlock | BABYLON.NegateBlock | BABYLON.PerturbNormalBlock | BABYLON.TBNBlock | BABYLON.RandomNumberBlock | BABYLON.ReplaceColorBlock | BABYLON.PosterizeBlock | BABYLON.ArcTan2Block | BABYLON.GradientBlock | BABYLON.FrontFacingBlock | BABYLON.MeshAttributeExistsBlock | BABYLON.WaveBlock | BABYLON.InputBlock | BABYLON.PBRMetallicRoughnessBlock | BABYLON.SheenBlock | BABYLON.AnisotropyBlock | BABYLON.ReflectionBlock | BABYLON.ClearCoatBlock | BABYLON.RefractionBlock | BABYLON.SubSurfaceBlock | BABYLON.CurrentScreenBlock | BABYLON.ParticleTextureBlock | BABYLON.ParticleRampGradientBlock | BABYLON.ParticleBlendMultiplyBlock | BABYLON.FragCoordBlock | BABYLON.ScreenSizeBlock | BABYLON.SceneDepthBlock | BABYLON.ConditionalBlock | BABYLON.ImageSourceBlock | BABYLON.ClipPlanesBlock | BABYLON.FragDepthBlock | BABYLON.ShadowMapBlock | BABYLON.TriPlanarBlock | BABYLON.MatrixTransposeBlock | BABYLON.MatrixDeterminantBlock | BABYLON.CurveBlock | null;
4768
+ static GetBlockFromString(data: string, scene: BABYLON.Scene, nodeMaterial: BABYLON.NodeMaterial): BABYLON.StorageWriteBlock | BABYLON.StorageReadBlock | BABYLON.LoopBlock | BABYLON.ColorConverterBlock | BABYLON.NodeMaterialTeleportInBlock | BABYLON.NodeMaterialTeleportOutBlock | BABYLON.HeightToNormalBlock | BABYLON.ElbowBlock | BABYLON.TwirlBlock | BABYLON.VoronoiNoiseBlock | BABYLON.ScreenSpaceBlock | BABYLON.CloudBlock | BABYLON.MatrixBuilderBlock | BABYLON.DesaturateBlock | BABYLON.RefractBlock | BABYLON.ReflectBlock | BABYLON.DerivativeBlock | BABYLON.Rotate2dBlock | BABYLON.NormalBlendBlock | BABYLON.WorleyNoise3DBlock | BABYLON.SimplexPerlin3DBlock | BABYLON.BonesBlock | BABYLON.InstancesBlock | BABYLON.MorphTargetsBlock | BABYLON.DiscardBlock | BABYLON.PrePassTextureBlock | BABYLON.ImageProcessingBlock | BABYLON.ColorMergerBlock | BABYLON.VectorMergerBlock | BABYLON.ColorSplitterBlock | BABYLON.VectorSplitterBlock | BABYLON.TextureBlock | BABYLON.ReflectionTextureBlock | BABYLON.LightBlock | BABYLON.FogBlock | BABYLON.VertexOutputBlock | BABYLON.FragmentOutputBlock | BABYLON.PrePassOutputBlock | BABYLON.AddBlock | BABYLON.ClampBlock | BABYLON.ScaleBlock | BABYLON.CrossBlock | BABYLON.DotBlock | BABYLON.PowBlock | BABYLON.MultiplyBlock | BABYLON.TransformBlock | BABYLON.TrigonometryBlock | BABYLON.RemapBlock | BABYLON.NormalizeBlock | BABYLON.FresnelBlock | BABYLON.LerpBlock | BABYLON.NLerpBlock | BABYLON.DivideBlock | BABYLON.SubtractBlock | BABYLON.ModBlock | BABYLON.StepBlock | BABYLON.SmoothStepBlock | BABYLON.OneMinusBlock | BABYLON.ReciprocalBlock | BABYLON.ViewDirectionBlock | BABYLON.LightInformationBlock | BABYLON.MaxBlock | BABYLON.MinBlock | BABYLON.LengthBlock | BABYLON.DistanceBlock | BABYLON.NegateBlock | BABYLON.PerturbNormalBlock | BABYLON.TBNBlock | BABYLON.RandomNumberBlock | BABYLON.ReplaceColorBlock | BABYLON.PosterizeBlock | BABYLON.ArcTan2Block | BABYLON.GradientBlock | BABYLON.FrontFacingBlock | BABYLON.MeshAttributeExistsBlock | BABYLON.WaveBlock | BABYLON.InputBlock | BABYLON.PBRMetallicRoughnessBlock | BABYLON.SheenBlock | BABYLON.AnisotropyBlock | BABYLON.ReflectionBlock | BABYLON.ClearCoatBlock | BABYLON.RefractionBlock | BABYLON.SubSurfaceBlock | BABYLON.CurrentScreenBlock | BABYLON.ParticleTextureBlock | BABYLON.ParticleRampGradientBlock | BABYLON.ParticleBlendMultiplyBlock | BABYLON.FragCoordBlock | BABYLON.ScreenSizeBlock | BABYLON.SceneDepthBlock | BABYLON.ConditionalBlock | BABYLON.ImageSourceBlock | BABYLON.ClipPlanesBlock | BABYLON.FragDepthBlock | BABYLON.ShadowMapBlock | BABYLON.TriPlanarBlock | BABYLON.MatrixTransposeBlock | BABYLON.MatrixDeterminantBlock | BABYLON.CurveBlock | null;
4744
4769
  static GetColorFromConnectionNodeType(type: BABYLON.NodeMaterialBlockConnectionPointTypes): string;
4745
4770
  static GetConnectionNodeTypeFromString(type: string): BABYLON.NodeMaterialBlockConnectionPointTypes.Float | BABYLON.NodeMaterialBlockConnectionPointTypes.Vector2 | BABYLON.NodeMaterialBlockConnectionPointTypes.Vector3 | BABYLON.NodeMaterialBlockConnectionPointTypes.Vector4 | BABYLON.NodeMaterialBlockConnectionPointTypes.Color3 | BABYLON.NodeMaterialBlockConnectionPointTypes.Color4 | BABYLON.NodeMaterialBlockConnectionPointTypes.Matrix | BABYLON.NodeMaterialBlockConnectionPointTypes.AutoDetect;
4746
4771
  static GetStringFromConnectionNodeType(type: BABYLON.NodeMaterialBlockConnectionPointTypes): "" | "Float" | "Vector2" | "Vector3" | "Vector4" | "Matrix" | "Color3" | "Color4";
@@ -5243,6 +5268,15 @@ declare module BABYLON.NodeEditor {
5243
5268
  }
5244
5269
 
5245
5270
 
5271
+ export class LoopDisplayManager implements BABYLON.NodeEditor.SharedUIComponents.IDisplayManager {
5272
+ getHeaderClass(): string;
5273
+ shouldDisplayPortLabels(): boolean;
5274
+ getHeaderText(nodeData: BABYLON.NodeEditor.SharedUIComponents.INodeData): string;
5275
+ getBackgroundColor(): string;
5276
+ updatePreviewContent(nodeData: BABYLON.NodeEditor.SharedUIComponents.INodeData, contentArea: HTMLDivElement): void;
5277
+ }
5278
+
5279
+
5246
5280
  export class InputDisplayManager implements BABYLON.NodeEditor.SharedUIComponents.IDisplayManager {
5247
5281
  getHeaderClass(nodeData: BABYLON.NodeEditor.SharedUIComponents.INodeData): string;
5248
5282
  shouldDisplayPortLabels(): boolean;
@@ -6190,6 +6224,8 @@ declare module BABYLON.NodeEditor.SharedUIComponents {
6190
6224
  get nodeB(): BABYLON.NodeEditor.SharedUIComponents.GraphNode | undefined;
6191
6225
  intersectsWith(rect: DOMRect): boolean;
6192
6226
  update(endX?: number, endY?: number, straight?: boolean): void;
6227
+ get path(): SVGPathElement;
6228
+ get selectionPath(): SVGPathElement;
6193
6229
  constructor(graphCanvas: BABYLON.NodeEditor.SharedUIComponents.GraphCanvasComponent, portA: BABYLON.NodeEditor.SharedUIComponents.NodePort, nodeA: BABYLON.NodeEditor.SharedUIComponents.GraphNode, portB?: BABYLON.NodeEditor.SharedUIComponents.NodePort, nodeB?: BABYLON.NodeEditor.SharedUIComponents.GraphNode);
6194
6230
  onClick(evt: MouseEvent): void;
6195
6231
  dispose(notify?: boolean): void;
@@ -6274,6 +6310,7 @@ declare module BABYLON.NodeEditor.SharedUIComponents {
6274
6310
  set enclosingFrameId(value: number);
6275
6311
  set isSelected(value: boolean);
6276
6312
  setIsSelected(value: boolean, marqueeSelection: boolean): void;
6313
+ get rootElement(): HTMLDivElement;
6277
6314
  constructor(content: BABYLON.NodeEditor.SharedUIComponents.INodeData, stateManager: BABYLON.NodeEditor.SharedUIComponents.StateManager);
6278
6315
  isOverlappingFrame(frame: BABYLON.NodeEditor.SharedUIComponents.GraphFrame): boolean;
6279
6316
  getPortForPortData(portData: BABYLON.NodeEditor.SharedUIComponents.IPortData): BABYLON.NodeEditor.SharedUIComponents.NodePort | null;
@@ -6323,6 +6360,7 @@ declare module BABYLON.NodeEditor.SharedUIComponents {
6323
6360
  private _headerTextElement;
6324
6361
  private _headerCollapseElement;
6325
6362
  private _headerCloseElement;
6363
+ private _headerFocusElement;
6326
6364
  private _commentsElement;
6327
6365
  private _portContainer;
6328
6366
  private _outputPortContainer;
@@ -6352,6 +6390,7 @@ declare module BABYLON.NodeEditor.SharedUIComponents {
6352
6390
  private readonly _closeSVG;
6353
6391
  private readonly _expandSVG;
6354
6392
  private readonly _collapseSVG;
6393
+ private readonly _focusSVG;
6355
6394
  get id(): number;
6356
6395
  get isCollapsed(): boolean;
6357
6396
  private _createInputPort;
@@ -6380,6 +6419,11 @@ declare module BABYLON.NodeEditor.SharedUIComponents {
6380
6419
  get comments(): string;
6381
6420
  set comments(comments: string);
6382
6421
  constructor(candidate: BABYLON.Nullable<HTMLDivElement>, canvas: BABYLON.NodeEditor.SharedUIComponents.GraphCanvasComponent, doNotCaptureNodes?: boolean);
6422
+ private _isFocused;
6423
+ /**
6424
+ * Enter/leave focus mode
6425
+ */
6426
+ switchFocusMode(): void;
6383
6427
  refresh(): void;
6384
6428
  addNode(node: BABYLON.NodeEditor.SharedUIComponents.GraphNode): void;
6385
6429
  removeNode(node: BABYLON.NodeEditor.SharedUIComponents.GraphNode): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "babylonjs-node-editor",
3
- "version": "7.26.0",
3
+ "version": "7.26.1",
4
4
  "main": "babylon.nodeEditor.js",
5
5
  "types": "babylon.nodeEditor.module.d.ts",
6
6
  "files": [
@@ -14,7 +14,7 @@
14
14
  "clean": "rimraf dist && rimraf babylon*.* -g"
15
15
  },
16
16
  "dependencies": {
17
- "babylonjs": "^7.26.0"
17
+ "babylonjs": "^7.26.1"
18
18
  },
19
19
  "devDependencies": {
20
20
  "@dev/build-tools": "1.0.0",
@@ -26,7 +26,7 @@
26
26
  "react": "^17.0.2",
27
27
  "react-contextmenu": "RaananW/react-contextmenu",
28
28
  "react-dom": "^17.0.2",
29
- "sass-loader": "^13.0.0",
29
+ "sass-loader": "^16.0.0",
30
30
  "source-map-loader": "^4.0.0",
31
31
  "ts-loader": "^9.2.6",
32
32
  "webpack": "^5.73.0",