@mappedin/mappedin-js 4.0.17 → 4.0.18
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.
- package/lib/esm/get-venue/index.d.ts +3 -2
- package/lib/esm/get-venue/index.js +1 -1
- package/lib/esm/renderer/index.css +1 -1
- package/lib/esm/renderer/index.d.ts +94 -52
- package/lib/esm/renderer/index.js +1 -1
- package/lib/mappedin.css +1 -1
- package/lib/mappedin.js +1 -1
- package/lib/node/index.js +1 -1
- package/package.json +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
.mMapviewHoverLabel{background:rgba(255,255,255,.9);color:#333;padding:10px;font-size:14px;font-weight:bold;transition:opacity .3s;font-family:sans-serif}.mappedin__floating-label{position:absolute;top:0px;left:0px;opacity:0;width:200px;height:200px;will-change:transform;transition:opacity .3s linear}.mappedin__floating-label__icon{position:absolute;top:0;left:0;width:16px;height:16px}.mappedin__floating-label__icon>svg{position:absolute;top:-50%;left:-50%}.mappedin__floating-label__text_holder{font-family:"InterUI-Regular",Helvetica,Arial,sans-serif;font-weight:normal;font-weight:500;position:absolute;pointer-events:none;word-break:keep-all}.mappedin__floating-label__text_legacy{text-shadow:1px 1px 0px #ffffff,-1px -1px 0px #ffffff,1px -1px 0px #ffffff,-1px 1px 0px #ffffff}.mappedin__floating-label__text_back{-webkit-text-stroke:4px white;color:#fff}.mappedin__floating-label__text_front{color:#000;position:absolute;display:block;width:100%;height:100%;top:0;left:0}.mappedin__smart-collision-engine__container{position:absolute;left:0px;top:0px;bottom:0px;right:0px;pointer-events:none;font-family:"InterUI-Regular",Helvetica,Arial,sans-serif}.mappedin__smart-collision-engine-debug__container{position:absolute;left:0px;top:0px;bottom:0px;right:0px;pointer-events:none}.mappedin-marker{font-family:"InterUI-Regular",Helvetica,Arial,sans-serif;font-weight:normal;pointer-events:none;top:0;transition:transform .3s linear;position:absolute;font-weight:bold;color:#000;z-index:1;transition:opacity .3s;display:flex;flex-direction:row;will-change:opacity;justify-content:center}.mappedin-tooltip__wrapper{display:flex;width:1px;height:1px;align-items:center;justify-content:center;z-index:1}.mappedin-tooltip{font-family:"InterUI-Regular",Helvetica,Arial,sans-serif;font-weight:normal;pointer-events:all;top:0;transition:transform .3s linear;font-weight:bold;color:#000;position:absolute;z-index:1;transition:opacity .3s;display:flex;flex-direction:row;will-change:transform,opacity;justify-content:center}.mappedin-tooltip>div{z-index:2;flex-shrink:0;max-width:500px;background:white;border-radius:20px;box-shadow:0 2px 11px #0003}.mappedin-tooltip:before{content:"";width:0;height:0;top:calc(50% - 10px);left:-10px;z-index:1;position:absolute;border-bottom:10px solid transparent;border-top:10px solid transparent}.mappedin-tooltip.tooltip--anchor-top{left:0px;top:0px}.mappedin-tooltip.tooltip--anchor-top:before{left:calc(50% - 10px);top:calc(100% - 5px);right:auto;border-bottom:10px solid transparent;border-top:10px solid white;border-left:10px solid transparent;border-right:10px solid transparent}.mappedin-tooltip.tooltip--anchor-bottom{left:0px;top:0px}.mappedin-tooltip.tooltip--anchor-bottom:before{left:calc(50% - 10px);top:-15px;right:auto;border-bottom:10px solid white;border-top:10px solid transparent;border-left:10px solid transparent;border-right:10px solid transparent}.mappedin-tooltip.tooltip--anchor-right{justify-content:flex-start;left:0px;top:0px}.mappedin-tooltip.tooltip--anchor-right:before{left:-5px;right:auto;border-right:10px solid white}.mappedin-tooltip.tooltip--anchor-left{left:0px;top:0px}.mappedin-tooltip.tooltip--anchor-left:before{left:auto;right:-5px;border-left:10px solid white}.mappedin-tooltip.tooltip--anchor-top-left{left:7px;top:7px}.mappedin-tooltip.tooltip--anchor-top-left:before{left:auto;right:-7px;top:calc(100% - 13px);border-bottom:10px solid transparent;border-top:10px solid white;border-left:10px solid transparent;border-right:10px solid transparent;transform:rotate(-45deg)}.mappedin-tooltip.tooltip--anchor-top-right{left:-6px;top:7px}.mappedin-tooltip.tooltip--anchor-top-right:before{left:-7px;right:auto;top:calc(100% - 13px);border-bottom:10px solid transparent;border-top:10px solid white;border-left:10px solid transparent;border-right:10px solid transparent;transform:rotate(45deg)}.mappedin-tooltip.tooltip--anchor-bottom-left{left:7px;top:-6px}.mappedin-tooltip.tooltip--anchor-bottom-left:before{left:auto;right:-7px;top:-7px;border-bottom:10px solid white;border-top:10px solid transparent;border-left:10px solid transparent;border-right:10px solid transparent;transform:rotate(45deg)}.mappedin-tooltip.tooltip--anchor-bottom-right{left:-6px;top:-6px}.mappedin-tooltip.tooltip--anchor-bottom-right:before{left:-7px;right:auto;top:-7px;border-bottom:10px solid white;border-top:10px solid transparent;border-left:10px solid transparent;border-right:10px solid transparent;transform:rotate(-45deg)}.mappedin-tooltip.tooltip--visible{opacity:1}
|
|
1
|
+
.mMapviewHoverLabel{background:rgba(255,255,255,.9);color:#333;padding:10px;font-size:14px;font-weight:bold;transition:opacity .3s;font-family:sans-serif}.mappedin__floating-label{position:absolute;top:0px;left:0px;opacity:0;width:200px;height:200px;will-change:transform;transition:opacity .3s linear}.mappedin__floating-label__icon{position:absolute;top:0;left:0;width:16px;height:16px}.mappedin__floating-label__icon>svg{position:absolute;top:-50%;left:-50%}.mappedin__floating-label__text_holder{font-family:"InterUI-Regular",Helvetica,Arial,sans-serif;font-weight:normal;font-weight:500;position:absolute;pointer-events:none;word-break:keep-all}.mappedin__floating-label__text_legacy{text-shadow:1px 1px 0px #ffffff,-1px -1px 0px #ffffff,1px -1px 0px #ffffff,-1px 1px 0px #ffffff}.mappedin__floating-label__text_back{-webkit-text-stroke:4px white;color:#fff}.mappedin__floating-label__text_front{color:#000;position:absolute;display:block;width:100%;height:100%;top:0;left:0}.mappedin__smart-collision-engine__container{position:absolute;left:0px;top:0px;bottom:0px;right:0px;pointer-events:none;font-family:"InterUI-Regular",Helvetica,Arial,sans-serif}.mappedin__smart-collision-engine-debug__container{position:absolute;left:0px;top:0px;bottom:0px;right:0px;transition:opacity .3s ease-in-out;pointer-events:none;will-change:opacity}.mappedin__smart-collision-engine-debug__container.interacting{opacity:.2}.mappedin-marker{font-family:"InterUI-Regular",Helvetica,Arial,sans-serif;font-weight:normal;pointer-events:none;top:0;transition:transform .3s linear;position:absolute;font-weight:bold;color:#000;z-index:1;transition:opacity .3s;display:flex;flex-direction:row;will-change:opacity;justify-content:center}.mappedin-tooltip__wrapper{display:flex;width:1px;height:1px;align-items:center;justify-content:center;z-index:1}.mappedin-tooltip{font-family:"InterUI-Regular",Helvetica,Arial,sans-serif;font-weight:normal;pointer-events:all;top:0;transition:transform .3s linear;font-weight:bold;color:#000;position:absolute;z-index:1;transition:opacity .3s;display:flex;flex-direction:row;will-change:transform,opacity;justify-content:center}.mappedin-tooltip>div{z-index:2;flex-shrink:0;max-width:500px;background:white;border-radius:20px;box-shadow:0 2px 11px #0003}.mappedin-tooltip:before{content:"";width:0;height:0;top:calc(50% - 10px);left:-10px;z-index:1;position:absolute;border-bottom:10px solid transparent;border-top:10px solid transparent}.mappedin-tooltip.tooltip--anchor-top{left:0px;top:0px}.mappedin-tooltip.tooltip--anchor-top:before{left:calc(50% - 10px);top:calc(100% - 5px);right:auto;border-bottom:10px solid transparent;border-top:10px solid white;border-left:10px solid transparent;border-right:10px solid transparent}.mappedin-tooltip.tooltip--anchor-bottom{left:0px;top:0px}.mappedin-tooltip.tooltip--anchor-bottom:before{left:calc(50% - 10px);top:-15px;right:auto;border-bottom:10px solid white;border-top:10px solid transparent;border-left:10px solid transparent;border-right:10px solid transparent}.mappedin-tooltip.tooltip--anchor-right{justify-content:flex-start;left:0px;top:0px}.mappedin-tooltip.tooltip--anchor-right:before{left:-5px;right:auto;border-right:10px solid white}.mappedin-tooltip.tooltip--anchor-left{left:0px;top:0px}.mappedin-tooltip.tooltip--anchor-left:before{left:auto;right:-5px;border-left:10px solid white}.mappedin-tooltip.tooltip--anchor-top-left{left:7px;top:7px}.mappedin-tooltip.tooltip--anchor-top-left:before{left:auto;right:-7px;top:calc(100% - 13px);border-bottom:10px solid transparent;border-top:10px solid white;border-left:10px solid transparent;border-right:10px solid transparent;transform:rotate(-45deg)}.mappedin-tooltip.tooltip--anchor-top-right{left:-6px;top:7px}.mappedin-tooltip.tooltip--anchor-top-right:before{left:-7px;right:auto;top:calc(100% - 13px);border-bottom:10px solid transparent;border-top:10px solid white;border-left:10px solid transparent;border-right:10px solid transparent;transform:rotate(45deg)}.mappedin-tooltip.tooltip--anchor-bottom-left{left:7px;top:-6px}.mappedin-tooltip.tooltip--anchor-bottom-left:before{left:auto;right:-7px;top:-7px;border-bottom:10px solid white;border-top:10px solid transparent;border-left:10px solid transparent;border-right:10px solid transparent;transform:rotate(45deg)}.mappedin-tooltip.tooltip--anchor-bottom-right{left:-6px;top:-6px}.mappedin-tooltip.tooltip--anchor-bottom-right:before{left:-7px;right:auto;top:-7px;border-bottom:10px solid white;border-top:10px solid transparent;border-left:10px solid transparent;border-right:10px solid transparent;transform:rotate(-45deg)}.mappedin-tooltip.tooltip--visible{opacity:1}
|
|
@@ -1357,6 +1357,7 @@ declare module '@mappedin/mappedin-js/renderer/internal/Mappedin.Marker' {
|
|
|
1357
1357
|
get strategies(): TColliderStrategy[];
|
|
1358
1358
|
colliderDidMount(): void;
|
|
1359
1359
|
setAction(action: any): void;
|
|
1360
|
+
colliderDidNotFindAHome(): void;
|
|
1360
1361
|
colliderDidGoOffscreen(): void;
|
|
1361
1362
|
colliderDidUpdateVisiblity(): void;
|
|
1362
1363
|
}
|
|
@@ -1721,11 +1722,10 @@ declare module '@mappedin/mappedin-js/renderer/internal/Mappedin.FloatingLabel'
|
|
|
1721
1722
|
clearColor: () => void;
|
|
1722
1723
|
zoomProportion: number;
|
|
1723
1724
|
_cache: {};
|
|
1724
|
-
_dirty: boolean;
|
|
1725
1725
|
appearance: TAppearanceFilledIn;
|
|
1726
1726
|
mapView: ICore;
|
|
1727
1727
|
constructor(options: TFloatingLabelOptionsInternal, mapView: ICore);
|
|
1728
|
-
enable(): void;
|
|
1728
|
+
enable(updateEngine?: boolean): void;
|
|
1729
1729
|
get strategies(): TColliderStrategy[];
|
|
1730
1730
|
getCachedSymbol(orientation: any, textAlign: any, xCoordinate: any): any;
|
|
1731
1731
|
colliderDidMount(): void;
|
|
@@ -1734,7 +1734,7 @@ declare module '@mappedin/mappedin-js/renderer/internal/Mappedin.FloatingLabel'
|
|
|
1734
1734
|
colliderDidUpdateVisiblity(): void;
|
|
1735
1735
|
colliderDidGoOutsideGrid(): void;
|
|
1736
1736
|
colliderDidNotFindAHome(): void;
|
|
1737
|
-
disable(): void;
|
|
1737
|
+
disable(updateEngine?: boolean): void;
|
|
1738
1738
|
draw(context: CanvasRenderingContext2D): void;
|
|
1739
1739
|
static original: FloatingLabel;
|
|
1740
1740
|
static clone(options: TFloatingLabelOptionsInternal, mapView: ICore): any;
|
|
@@ -3150,9 +3150,10 @@ declare module '@mappedin/mappedin-js/get-venue/MappedinVenue' {
|
|
|
3150
3150
|
tzidOverride: string;
|
|
3151
3151
|
utcOffset: string;
|
|
3152
3152
|
website: string;
|
|
3153
|
-
constructor(data: any);
|
|
3154
|
-
static hydrate(data: any): MappedinVenue;
|
|
3153
|
+
constructor(mappedin: Mappedin, data: any);
|
|
3154
|
+
static hydrate(data: any, mappedin: Mappedin): MappedinVenue;
|
|
3155
3155
|
static fetch(mappedin: Mappedin): Promise<MappedinVenue>;
|
|
3156
|
+
get isMultiBuilding(): any;
|
|
3156
3157
|
toJSON(): any;
|
|
3157
3158
|
}
|
|
3158
3159
|
}
|
|
@@ -4023,6 +4024,7 @@ declare module '@mappedin/mappedin-js/renderer/internal/Mappedin.HTMLCollider' {
|
|
|
4023
4024
|
declare module '@mappedin/mappedin-js/renderer/internal/Mappedin.SmartCollider' {
|
|
4024
4025
|
import SmartCollisionEngine from '@mappedin/mappedin-js/renderer/internal/Mappedin.SmartCollisionEngine';
|
|
4025
4026
|
import { Vector3 } from 'three';
|
|
4027
|
+
import { Rectangle } from '@mappedin/mappedin-js/renderer/internal/quad-tree';
|
|
4026
4028
|
export type TRange = [number, number, number, number];
|
|
4027
4029
|
type TCustomCollider<T> = ICollider & T;
|
|
4028
4030
|
export type TColliderStrategyProps = {
|
|
@@ -4036,6 +4038,10 @@ declare module '@mappedin/mappedin-js/renderer/internal/Mappedin.SmartCollider'
|
|
|
4036
4038
|
getBoundingBox: (TColliderStrategyProps: any) => TRange;
|
|
4037
4039
|
onStrategySelected: (collider: TCustomCollider<any>) => void;
|
|
4038
4040
|
};
|
|
4041
|
+
type TGetBoundingBox = ({ x, y }: {
|
|
4042
|
+
x: any;
|
|
4043
|
+
y: any;
|
|
4044
|
+
}) => [number, number, number, number];
|
|
4039
4045
|
export type TDimensions = {
|
|
4040
4046
|
width: number;
|
|
4041
4047
|
height: number;
|
|
@@ -4048,13 +4054,19 @@ declare module '@mappedin/mappedin-js/renderer/internal/Mappedin.SmartCollider'
|
|
|
4048
4054
|
export interface ICollider {
|
|
4049
4055
|
dimensions: TDimensions;
|
|
4050
4056
|
screenPosition: [number, number];
|
|
4051
|
-
|
|
4057
|
+
getBoundingBoxForCurrentStrategy?: TGetBoundingBox;
|
|
4052
4058
|
options?: Record<string, unknown>;
|
|
4053
4059
|
mapId: string;
|
|
4054
4060
|
visible: boolean;
|
|
4055
4061
|
rank: number;
|
|
4056
|
-
_dirty?: boolean;
|
|
4057
4062
|
id: string;
|
|
4063
|
+
_bboxes?: [
|
|
4064
|
+
string,
|
|
4065
|
+
Rectangle,
|
|
4066
|
+
(collider: TCustomCollider<any>) => void,
|
|
4067
|
+
TGetBoundingBox
|
|
4068
|
+
][];
|
|
4069
|
+
offscreen?: boolean;
|
|
4058
4070
|
setAction: (action: EColliderAction) => void;
|
|
4059
4071
|
action?: EColliderAction;
|
|
4060
4072
|
position: Vector3;
|
|
@@ -4078,14 +4090,15 @@ declare module '@mappedin/mappedin-js/renderer/internal/Mappedin.SmartCollider'
|
|
|
4078
4090
|
__engine: any;
|
|
4079
4091
|
_initialRank: number;
|
|
4080
4092
|
screenPosition: [number, number];
|
|
4081
|
-
currentStrategyName: null;
|
|
4082
4093
|
enabled: boolean;
|
|
4083
4094
|
options: any;
|
|
4084
4095
|
mapId: string;
|
|
4085
4096
|
id: string;
|
|
4086
4097
|
action: EColliderAction;
|
|
4098
|
+
getBoundingBoxForCurrentStrategy: undefined;
|
|
4087
4099
|
rank: number;
|
|
4088
4100
|
visible: boolean;
|
|
4101
|
+
offscreen: boolean;
|
|
4089
4102
|
position: Vector3;
|
|
4090
4103
|
dimensions: {
|
|
4091
4104
|
width: number;
|
|
@@ -5183,56 +5196,85 @@ declare module '@mappedin/mappedin-js/renderer/internal/Mappedin.SmartCollisionE
|
|
|
5183
5196
|
import './Mappedin.SmartCollisionEngine.scss';
|
|
5184
5197
|
import { ICollider, TRange } from '@mappedin/mappedin-js/renderer/internal/Mappedin.SmartCollider';
|
|
5185
5198
|
import { MappedinMap, MapView } from '@mappedin/mappedin-js/renderer';
|
|
5199
|
+
import { ICore } from '@mappedin/mappedin-js/renderer/Core.interface';
|
|
5200
|
+
import { Rectangle, QuadTree } from '@mappedin/mappedin-js/renderer/internal/quad-tree';
|
|
5186
5201
|
export const COLLIDER_STRATEGY_LOW_PRIORITY = "LOW_PRIORITY";
|
|
5187
5202
|
class SmartCollisionEngine {
|
|
5188
|
-
|
|
5189
|
-
|
|
5190
|
-
|
|
5191
|
-
|
|
5192
|
-
|
|
5193
|
-
|
|
5194
|
-
|
|
5195
|
-
|
|
5196
|
-
|
|
5197
|
-
|
|
5198
|
-
|
|
5199
|
-
|
|
5200
|
-
|
|
5201
|
-
|
|
5202
|
-
|
|
5203
|
-
|
|
5204
|
-
|
|
5205
|
-
|
|
5206
|
-
|
|
5207
|
-
|
|
5208
|
-
|
|
5209
|
-
|
|
5210
|
-
|
|
5211
|
-
|
|
5212
|
-
|
|
5213
|
-
|
|
5214
|
-
|
|
5215
|
-
|
|
5216
|
-
|
|
5217
|
-
|
|
5218
|
-
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
|
|
5222
|
-
|
|
5223
|
-
/**
|
|
5224
|
-
* Allow to throttle making collders dirty. This is useful for things like BlueDot follow mode,
|
|
5225
|
-
* As we follow the BlueDot, colliders will overlap, but constantly updating their visiblity makes
|
|
5226
|
-
* for a bad experience
|
|
5227
|
-
*/
|
|
5228
|
-
makeCollidersDirtyThrottled: (time: any) => void;
|
|
5229
|
-
resize: (container: any) => void;
|
|
5230
|
-
update: () => void;
|
|
5231
|
-
destroy: () => void;
|
|
5203
|
+
#private;
|
|
5204
|
+
colliderCanvas: HTMLCanvasElement;
|
|
5205
|
+
debugCanvas: HTMLCanvasElement;
|
|
5206
|
+
colliderCanvasContext: CanvasRenderingContext2D;
|
|
5207
|
+
debugCanvasContext: CanvasRenderingContext2D;
|
|
5208
|
+
collisionEngineContainerEl: HTMLDivElement;
|
|
5209
|
+
stepsX: any;
|
|
5210
|
+
stepsY: any;
|
|
5211
|
+
totalWidth: any;
|
|
5212
|
+
totalHeight: any;
|
|
5213
|
+
project: any;
|
|
5214
|
+
colliders: Map<string, ICollider>;
|
|
5215
|
+
offscreenRanges: TRange[];
|
|
5216
|
+
get sortedColliders(): ICollider[];
|
|
5217
|
+
initialized: boolean;
|
|
5218
|
+
mapView: MapView;
|
|
5219
|
+
core: ICore;
|
|
5220
|
+
screen: Rectangle;
|
|
5221
|
+
constructor(mapView: any, core: ICore);
|
|
5222
|
+
init: (container: HTMLDivElement, projectFn: ({ position, mapId }: {
|
|
5223
|
+
position: Vector3;
|
|
5224
|
+
mapId: MappedinMap['id'];
|
|
5225
|
+
}) => {
|
|
5226
|
+
x: number;
|
|
5227
|
+
y: number;
|
|
5228
|
+
}) => void;
|
|
5229
|
+
qtree: QuadTree;
|
|
5230
|
+
recompute: () => void;
|
|
5231
|
+
draw: () => void;
|
|
5232
|
+
reposition: () => void;
|
|
5233
|
+
add: (colliderId: string, collider: ICollider) => void;
|
|
5234
|
+
remove: (colliderId: string) => void;
|
|
5235
|
+
update: () => void;
|
|
5236
|
+
resize: (container: any) => void;
|
|
5237
|
+
destroy: () => void;
|
|
5232
5238
|
}
|
|
5233
5239
|
export default SmartCollisionEngine;
|
|
5234
5240
|
}
|
|
5235
5241
|
|
|
5242
|
+
declare module '@mappedin/mappedin-js/renderer/internal/quad-tree' {
|
|
5243
|
+
export function contains(rect1: Rectangle, rect2: Rectangle): boolean;
|
|
5244
|
+
export function intersects(rect1: Rectangle, rect2: Rectangle): boolean;
|
|
5245
|
+
class Rectangle {
|
|
5246
|
+
x: number;
|
|
5247
|
+
y: number;
|
|
5248
|
+
w: number;
|
|
5249
|
+
h: number;
|
|
5250
|
+
userData?: any;
|
|
5251
|
+
constructor(x: number, y: number, w: number, h: number, userData?: any);
|
|
5252
|
+
contains(rectangle: Rectangle): boolean;
|
|
5253
|
+
intersects(rectangle: Rectangle): boolean;
|
|
5254
|
+
draw(context: CanvasRenderingContext2D): void;
|
|
5255
|
+
}
|
|
5256
|
+
class QuadTree {
|
|
5257
|
+
#private;
|
|
5258
|
+
boundary: Rectangle;
|
|
5259
|
+
capacity: number;
|
|
5260
|
+
objects: Rectangle[];
|
|
5261
|
+
topLeft: QuadTree;
|
|
5262
|
+
topRight: QuadTree;
|
|
5263
|
+
bottomLeft: QuadTree;
|
|
5264
|
+
bottomRight: QuadTree;
|
|
5265
|
+
divided: boolean;
|
|
5266
|
+
parent?: QuadTree;
|
|
5267
|
+
getSize(): any;
|
|
5268
|
+
constructor(boundary: Rectangle, parent?: QuadTree);
|
|
5269
|
+
subdivide(): void;
|
|
5270
|
+
query(rectangle: Rectangle): Rectangle[];
|
|
5271
|
+
insert(rectangle: Rectangle): boolean;
|
|
5272
|
+
drawObjects(context: CanvasRenderingContext2D): void;
|
|
5273
|
+
draw(context: CanvasRenderingContext2D): void;
|
|
5274
|
+
}
|
|
5275
|
+
export { QuadTree, Rectangle };
|
|
5276
|
+
}
|
|
5277
|
+
|
|
5236
5278
|
declare module '@mappedin/mappedin-js/navigator/Edge' {
|
|
5237
5279
|
import INode from '@mappedin/mappedin-js/navigator/interfaces/INode';
|
|
5238
5280
|
import IVortex from '@mappedin/mappedin-js/navigator/interfaces/IVortex';
|