vim-web 0.3.44-dev.2 → 0.3.44-dev.3

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.
Files changed (35) hide show
  1. package/dist/style.css +38 -1
  2. package/dist/types/core-viewers/ultra/index.d.ts +1 -0
  3. package/dist/types/core-viewers/ultra/viewer/marshal.d.ts +0 -1
  4. package/dist/types/core-viewers/ultra/viewer/rpcClient.d.ts +1 -0
  5. package/dist/types/core-viewers/ultra/viewer/rpcSafeClient.d.ts +1 -0
  6. package/dist/types/core-viewers/ultra/viewer/sectionBox.d.ts +2 -5
  7. package/dist/types/core-viewers/ultra/viewer/selection.d.ts +2 -0
  8. package/dist/types/core-viewers/ultra/viewer/viewer.d.ts +2 -0
  9. package/dist/types/core-viewers/ultra/viewer/vimCollection.d.ts +4 -0
  10. package/dist/types/core-viewers/webgl/utils/threeUtils.d.ts +3 -0
  11. package/dist/types/core-viewers/webgl/viewer/gizmos/gizmos.d.ts +1 -1
  12. package/dist/types/core-viewers/webgl/viewer/gizmos/sectionBox/sectionBox.d.ts +1 -1
  13. package/dist/types/react-viewers/controlbar/controlBar.d.ts +5 -44
  14. package/dist/types/react-viewers/controlbar/controlBarButton.d.ts +3 -1
  15. package/dist/types/react-viewers/controlbar/controlBarSection.d.ts +2 -1
  16. package/dist/types/react-viewers/panels/icons.d.ts +6 -0
  17. package/dist/types/react-viewers/panels/sectionBoxPanel.d.ts +4 -0
  18. package/dist/types/react-viewers/state/controlBarState.d.ts +66 -0
  19. package/dist/types/react-viewers/state/sectionBoxState.d.ts +33 -0
  20. package/dist/types/react-viewers/ultra/ultraControlBarState.d.ts +6 -0
  21. package/dist/types/react-viewers/ultra/ultraModal.d.ts +4 -0
  22. package/dist/types/react-viewers/ultra/ultraSectionBoxState.d.ts +3 -0
  23. package/dist/types/react-viewers/webgl/index.d.ts +0 -1
  24. package/dist/types/react-viewers/webgl/webglSectionBoxState.d.ts +3 -0
  25. package/dist/vim-web.iife.js +679 -282
  26. package/dist/vim-web.iife.js.map +1 -1
  27. package/dist/vim-web.js +680 -283
  28. package/dist/vim-web.js.map +1 -1
  29. package/package.json +1 -1
  30. package/dist/types/react-viewers/controlbar/controlBarCommands.d.ts +0 -4
  31. package/dist/types/react-viewers/controlbar/sectionBoxState.d.ts +0 -15
  32. /package/dist/types/react-viewers/{controlbar → panels}/restOfScreen.d.ts +0 -0
  33. /package/dist/types/react-viewers/{controlbar → state}/fullScreenState.d.ts +0 -0
  34. /package/dist/types/react-viewers/{controlbar → state}/measureState.d.ts +0 -0
  35. /package/dist/types/react-viewers/{controlbar → state}/pointerState.d.ts +0 -0
@@ -52253,7 +52253,7 @@ void main() {
52253
52253
  }
52254
52254
  }
52255
52255
  onIdleAction(hit) {
52256
- if (!this._viewer.gizmos.section.interactive) {
52256
+ if (!this._viewer.gizmos.sectionBox.interactive) {
52257
52257
  this._viewer.selection.focus(hit == null ? void 0 : hit.object);
52258
52258
  }
52259
52259
  }
@@ -54811,12 +54811,12 @@ void main() {
54811
54811
  const xz = this.screenDist(this._lineX.position, this._lineZ.position);
54812
54812
  const yz = this.screenDist(this._lineY.position, this._lineZ.position);
54813
54813
  let conflicts = 0;
54814
- if (lx !== void 0 && lx < 0.1) conflicts++;
54815
- if (ly !== void 0 && ly < 0.1) conflicts++;
54816
- if (lz !== void 0 && lz < 0.1) conflicts++;
54817
- if (xy !== void 0 && xy < 0.1) conflicts++;
54818
- if (xz !== void 0 && xz < 0.1) conflicts++;
54819
- if (yz !== void 0 && yz < 0.1) conflicts++;
54814
+ if (lx !== void 0 && lx < 0.3) conflicts++;
54815
+ if (ly !== void 0 && ly < 0.3) conflicts++;
54816
+ if (lz !== void 0 && lz < 0.3) conflicts++;
54817
+ if (xy !== void 0 && xy < 0.3) conflicts++;
54818
+ if (xz !== void 0 && xz < 0.3) conflicts++;
54819
+ if (yz !== void 0 && yz < 0.3) conflicts++;
54820
54820
  const collapse2 = conflicts > 1;
54821
54821
  this._label.visible = collapse2;
54822
54822
  this._line.label.visible = !collapse2;
@@ -54846,6 +54846,7 @@ void main() {
54846
54846
  this._line.mesh.visible = false;
54847
54847
  this._line.label.visible = false;
54848
54848
  }
54849
+ this._label.visible = false;
54849
54850
  this._viewer.renderer.needsUpdate = true;
54850
54851
  }
54851
54852
  /**
@@ -54895,7 +54896,9 @@ void main() {
54895
54896
  * Disposes all resources.
54896
54897
  */
54897
54898
  dispose() {
54899
+ console.log("dispose");
54898
54900
  if (this._animId !== void 0) cancelAnimationFrame(this._animId);
54901
+ this._html.div.remove();
54899
54902
  this._viewer.renderer.remove(this._group);
54900
54903
  this._startMarker.dispose();
54901
54904
  this._endMarker.dispose();
@@ -55480,7 +55483,7 @@ void main() {
55480
55483
  trackCamera(camera2) {
55481
55484
  const rescale = () => {
55482
55485
  const size = camera2.frustrumSizeAt(this.position);
55483
- this.scale.set(size.x * 5e-3, size.x * 5e-3, size.x * 5e-3);
55486
+ this.scale.set(size.x * 3e-3, size.x * 3e-3, size.x * 3e-3);
55484
55487
  };
55485
55488
  this._camSub = camera2.onMoved.subscribe(() => rescale());
55486
55489
  rescale();
@@ -55644,6 +55647,9 @@ void main() {
55644
55647
  this.update();
55645
55648
  };
55646
55649
  this._inputs.onBoxConfirm = (box) => this._onBoxConfirm.dispatch(box);
55650
+ viewer.renderer.onBoxUpdated.subscribe(() => {
55651
+ this.fitBox(viewer.renderer.getBoundingBox());
55652
+ });
55647
55653
  this.clip = false;
55648
55654
  this.visible = false;
55649
55655
  this.interactive = false;
@@ -55744,6 +55750,7 @@ void main() {
55744
55750
  set visible(value) {
55745
55751
  if (value === this._visible) return;
55746
55752
  this._gizmos.visible = value;
55753
+ this._visible = value;
55747
55754
  if (value) {
55748
55755
  this.update();
55749
55756
  }
@@ -55760,11 +55767,10 @@ void main() {
55760
55767
  * @param box - The bounding box to match (required).
55761
55768
  * @param padding - The scalar amount by which to expand the bounding box. Default is `1`.
55762
55769
  */
55763
- fitBox(box, padding = 1) {
55770
+ fitBox(box) {
55764
55771
  if (!box) return;
55765
- const b = box.expandByScalar(padding);
55766
- this._gizmos.fitBox(b);
55767
- this.renderer.section.fitBox(b);
55772
+ this._gizmos.fitBox(box);
55773
+ this.renderer.section.fitBox(box);
55768
55774
  this._onBoxConfirm.dispatch(this.box);
55769
55775
  this.renderer.needsUpdate = true;
55770
55776
  }
@@ -55774,7 +55780,7 @@ void main() {
55774
55780
  * Call this if the renderer's section box is changed by code outside this class.
55775
55781
  */
55776
55782
  update() {
55777
- this.fitBox(this.section.box, 0);
55783
+ this.fitBox(this.section.box);
55778
55784
  this.renderer.needsUpdate = true;
55779
55785
  }
55780
55786
  /**
@@ -55796,7 +55802,7 @@ void main() {
55796
55802
  /**
55797
55803
  * The section box gizmo.
55798
55804
  */
55799
- __publicField(this, "section");
55805
+ __publicField(this, "sectionBox");
55800
55806
  /**
55801
55807
  * The loading indicator gizmo.
55802
55808
  */
@@ -55820,7 +55826,7 @@ void main() {
55820
55826
  var _a2;
55821
55827
  this.viewer = viewer;
55822
55828
  this._measure = new Measure(viewer);
55823
- this.section = new SectionBox$1(viewer);
55829
+ this.sectionBox = new SectionBox$1(viewer);
55824
55830
  this.loading = new GizmoLoading(viewer);
55825
55831
  this.orbit = new GizmoOrbit(
55826
55832
  viewer.renderer,
@@ -55849,7 +55855,7 @@ void main() {
55849
55855
  var _a2;
55850
55856
  (_a2 = this.viewer.viewport.canvas.parentElement) == null ? void 0 : _a2.removeChild(this.axes.canvas);
55851
55857
  this._measure.clear();
55852
- this.section.dispose();
55858
+ this.sectionBox.dispose();
55853
55859
  this.loading.dispose();
55854
55860
  this.orbit.dispose();
55855
55861
  this.rectangle.dispose();
@@ -58009,7 +58015,6 @@ void main() {
58009
58015
  }
58010
58016
  // -------------------- SectionBox -------------------
58011
58017
  writeSectionBoxState(data2) {
58012
- this.writeBoolean(data2.enabled);
58013
58018
  this.writeBoolean(data2.visible);
58014
58019
  this.writeBoolean(data2.interactible);
58015
58020
  this.writeBoolean(data2.clip);
@@ -58165,13 +58170,11 @@ void main() {
58165
58170
  return new Segment(position, target);
58166
58171
  }
58167
58172
  readSectionBoxState() {
58168
- const enabled = this.readBoolean();
58169
58173
  const visible2 = this.readBoolean();
58170
58174
  const interactible = this.readBoolean();
58171
58175
  const clip = this.readBoolean();
58172
58176
  const box = this.readBox3();
58173
58177
  return {
58174
- enabled,
58175
58178
  visible: visible2,
58176
58179
  interactible,
58177
58180
  clip,
@@ -58290,6 +58293,12 @@ void main() {
58290
58293
  marshal.writeUInt(componentHandle);
58291
58294
  this._socket.sendRPC(marshal);
58292
58295
  }
58296
+ RPCEnableSectionBox(value) {
58297
+ const marshal = new Marshal();
58298
+ marshal.writeString("RPCEnableSectionBox");
58299
+ marshal.writeBoolean(value);
58300
+ this._socket.sendRPC(marshal);
58301
+ }
58293
58302
  async RPCFrameAll(blendTime) {
58294
58303
  const marshal = new Marshal();
58295
58304
  marshal.writeString("RPCFrameAll");
@@ -59133,6 +59142,9 @@ void main() {
59133
59142
  * SECTION BOX METHODS
59134
59143
  * Methods for controlling section box visibility and position.
59135
59144
  ******************************************************************************/
59145
+ RPCEnableSectionBox(enable) {
59146
+ this.rpc.RPCEnableSectionBox(enable);
59147
+ }
59136
59148
  RPCSetSectionBox(state) {
59137
59149
  this.rpc.RPCSetSectionBox(state);
59138
59150
  }
@@ -61283,10 +61295,14 @@ Averrage Date/Second ${avgDataRatePS} kb
61283
61295
  __publicField(this, "_rpc");
61284
61296
  __publicField(this, "_vims");
61285
61297
  __publicField(this, "_selectedNodes");
61298
+ __publicField(this, "_onValueChanged", new distExports$1.SignalDispatcher());
61286
61299
  this._rpc = rpc;
61287
61300
  this._vims = vims;
61288
61301
  this._selectedNodes = /* @__PURE__ */ new Map();
61289
61302
  }
61303
+ get onValueChanged() {
61304
+ return this._onValueChanged.asEvent();
61305
+ }
61290
61306
  /**
61291
61307
  * Gets the total number of selected nodes across all VIMs.
61292
61308
  * @returns The total count of selected nodes.
@@ -61355,12 +61371,17 @@ Averrage Date/Second ${avgDataRatePS} kb
61355
61371
  nodeSet = /* @__PURE__ */ new Set();
61356
61372
  this._selectedNodes.set(vim, nodeSet);
61357
61373
  }
61374
+ let changed = false;
61358
61375
  nodes.forEach((n) => {
61359
61376
  if (!nodeSet.has(n)) {
61360
61377
  nodeSet.add(n);
61361
61378
  vim.highlight([n]);
61379
+ changed = true;
61362
61380
  }
61363
61381
  });
61382
+ if (changed) {
61383
+ this._onValueChanged.dispatch();
61384
+ }
61364
61385
  }
61365
61386
  /**
61366
61387
  * Removes the specified node(s) from the current selection.
@@ -61372,27 +61393,37 @@ Averrage Date/Second ${avgDataRatePS} kb
61372
61393
  const nodeSet = this._selectedNodes.get(vim);
61373
61394
  if (!nodeSet) return;
61374
61395
  const nodes = Array.isArray(node) ? node : [node];
61396
+ let changed = false;
61375
61397
  nodes.forEach((n) => {
61376
61398
  if (nodeSet.has(n)) {
61377
61399
  nodeSet.delete(n);
61378
61400
  vim.removeHighlight([n], "visible");
61401
+ changed = true;
61379
61402
  }
61380
61403
  });
61381
61404
  if (nodeSet.size === 0) {
61382
61405
  this._selectedNodes.delete(vim);
61383
61406
  }
61407
+ if (changed) {
61408
+ this._onValueChanged.dispatch();
61409
+ }
61384
61410
  }
61385
61411
  /**
61386
61412
  * Clears all selections across all VIMs or for a specific VIM.
61387
61413
  * @param vim - Optional. If provided, only clears selections for the specified VIM.
61388
61414
  */
61389
61415
  clear(vim) {
61416
+ let changed = false;
61390
61417
  this._selectedNodes.forEach((nodes, v) => {
61391
61418
  if (vim === void 0 || v === vim) {
61392
61419
  v.removeHighlight(Array.from(nodes), "visible");
61420
+ changed = true;
61393
61421
  }
61394
61422
  });
61395
61423
  this._selectedNodes.clear();
61424
+ if (changed) {
61425
+ this._onValueChanged.dispatch();
61426
+ }
61396
61427
  }
61397
61428
  /**
61398
61429
  * Calculates the bounding box encompassing all selected nodes.
@@ -61421,8 +61452,12 @@ Averrage Date/Second ${avgDataRatePS} kb
61421
61452
  class VimCollection {
61422
61453
  constructor() {
61423
61454
  __publicField(this, "_vims");
61455
+ __publicField(this, "_onChanged", new distExports$1.SignalDispatcher());
61424
61456
  this._vims = [];
61425
61457
  }
61458
+ get onChanged() {
61459
+ return this._onChanged.asEvent();
61460
+ }
61426
61461
  get count() {
61427
61462
  return this._vims.length;
61428
61463
  }
@@ -61433,6 +61468,7 @@ Averrage Date/Second ${avgDataRatePS} kb
61433
61468
  add(vim) {
61434
61469
  if (!this._vims.some((v) => v.handle === vim.handle)) {
61435
61470
  this._vims.push(vim);
61471
+ this._onChanged.dispatch();
61436
61472
  }
61437
61473
  }
61438
61474
  /**
@@ -61440,7 +61476,11 @@ Averrage Date/Second ${avgDataRatePS} kb
61440
61476
  * @param vim - The Vim instance to remove.
61441
61477
  */
61442
61478
  remove(vim) {
61479
+ const count = this._vims.length;
61443
61480
  this._vims = this._vims.filter((v) => v.handle !== vim.handle);
61481
+ if (this._vims.length !== count) {
61482
+ this._onChanged.dispatch();
61483
+ }
61444
61484
  }
61445
61485
  /**
61446
61486
  * Gets a Vim instance by its handle.
@@ -61703,7 +61743,6 @@ Averrage Date/Second ${avgDataRatePS} kb
61703
61743
  }
61704
61744
  class SectionBox {
61705
61745
  constructor(rpc) {
61706
- __publicField(this, "_enabled", false);
61707
61746
  __publicField(this, "_visible", true);
61708
61747
  __publicField(this, "_interactible", true);
61709
61748
  __publicField(this, "_clip", true);
@@ -61722,6 +61761,7 @@ Averrage Date/Second ${avgDataRatePS} kb
61722
61761
  return this._animationFrame > 0;
61723
61762
  }
61724
61763
  async onConnect() {
61764
+ this._rpc.RPCEnableSectionBox(true);
61725
61765
  this.push();
61726
61766
  this._interval = setInterval(() => this.pull(), 1e3);
61727
61767
  }
@@ -61736,10 +61776,9 @@ Averrage Date/Second ${avgDataRatePS} kb
61736
61776
  if (this.needUpdate) return;
61737
61777
  const state = await this._rpc.RPCGetSectionBox();
61738
61778
  let changed = false;
61739
- if (state.enabled !== this._enabled || state.visible !== this._visible || state.interactible !== this._interactible || state.clip !== this._clip || state.box !== this._box) {
61779
+ if (state.visible !== this._visible || state.interactible !== this._interactible || state.clip !== this._clip || state.box !== this._box) {
61740
61780
  changed = true;
61741
61781
  }
61742
- this._enabled = state.enabled;
61743
61782
  this._visible = state.visible;
61744
61783
  this._interactible = state.interactible;
61745
61784
  this._clip = state.clip;
@@ -61750,20 +61789,12 @@ Averrage Date/Second ${avgDataRatePS} kb
61750
61789
  }
61751
61790
  async push() {
61752
61791
  await this._rpc.RPCSetSectionBox({
61753
- enabled: this._enabled,
61754
61792
  visible: this._visible,
61755
61793
  interactible: this._interactible,
61756
61794
  clip: this._clip,
61757
61795
  box: this._box
61758
61796
  });
61759
61797
  }
61760
- get enabled() {
61761
- return this._enabled;
61762
- }
61763
- set enabled(value) {
61764
- this._enabled = value;
61765
- this.scheduleUpdate();
61766
- }
61767
61798
  get visible() {
61768
61799
  return this._visible;
61769
61800
  }
@@ -61771,10 +61802,10 @@ Averrage Date/Second ${avgDataRatePS} kb
61771
61802
  this._visible = value;
61772
61803
  this.scheduleUpdate();
61773
61804
  }
61774
- get interactible() {
61805
+ get interactive() {
61775
61806
  return this._interactible;
61776
61807
  }
61777
- set interactible(value) {
61808
+ set interactive(value) {
61778
61809
  this._interactible = value;
61779
61810
  this.scheduleUpdate();
61780
61811
  }
@@ -61884,6 +61915,9 @@ Averrage Date/Second ${avgDataRatePS} kb
61884
61915
  get decoder() {
61885
61916
  return this._decoder;
61886
61917
  }
61918
+ get selection() {
61919
+ return this._selection;
61920
+ }
61887
61921
  /**
61888
61922
  * Gets the current URL to which the viewer is connected.
61889
61923
  * @returns The URL as a string, or undefined if not connected.
@@ -66514,6 +66548,31 @@ Averrage Date/Second ${avgDataRatePS} kb
66514
66548
  wrapper: "div",
66515
66549
  clickable: false
66516
66550
  }), _defineProperty(_class2, "supportedWrappers", ["div", "span"]), _defineProperty(_class2, "displayName", "ReactTooltip"), _class2)) || _class) || _class) || _class) || _class) || _class) || _class) || _class;
66551
+ function slidersHoriz({ height, width, fill: fill2, className }) {
66552
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className, height, width, viewBox: "0 0 256 256", children: [
66553
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
66554
+ "path",
66555
+ {
66556
+ fill: fill2,
66557
+ d: "M24,74h111.163c6.293,15.258,21.308,26,38.837,26s32.543-10.742,38.837-26h19.163c8.836,0,16-7.164,16-16s-7.164-16-16-16h-19.163c-6.293-15.258-21.308-26-38.837-26s-32.543,10.742-38.837,26H24c-8.836,0-16,7.164-16,16s7.164,16,16,16Zm132.083-17.637c.014-.151,.031-.301,.048-.451,.05-.435,.116-.864,.197-1.289,.021-.11,.037-.222,.06-.331,.106-.503,.236-.998,.383-1.484,.046-.153,.1-.303,.15-.455,.116-.35,.242-.694,.379-1.033,.067-.167,.132-.336,.204-.5,.189-.433,.393-.859,.615-1.273,.092-.173,.196-.339,.294-.508,.15-.26,.305-.517,.467-.768,.133-.205,.268-.409,.409-.608,.147-.208,.302-.41,.458-.611,.28-.362,.572-.713,.878-1.053,.13-.146,.259-.293,.395-.435,.212-.221,.432-.435,.656-.645,.116-.109,.234-.215,.354-.321,.787-.703,1.634-1.338,2.535-1.896,.1-.062,.199-.123,.3-.182,.304-.181,.612-.356,.928-.519,2.464-1.27,5.25-2,8.208-2s5.744,.73,8.208,2c.315,.163,.624,.338,.928,.519,.101,.06,.201,.121,.3,.182,.901,.558,1.749,1.193,2.535,1.896,.119,.106,.238,.212,.354,.321,.224,.21,.443,.424,.656,.645,.135,.142,.264,.289,.395,.435,.306,.34,.599,.691,.878,1.053,.155,.202,.311,.403,.458,.611,.141,.199,.276,.403,.409,.608,.163,.251,.317,.508,.467,.768,.098,.169,.202,.335,.294,.508,.222,.415,.425,.84,.615,1.273,.072,.165,.137,.333,.204,.5,.137,.339,.263,.684,.379,1.033,.05,.151,.104,.301,.15,.455,.147,.487,.277,.981,.383,1.484,.023,.109,.039,.221,.06,.331,.081,.425,.147,.854,.197,1.289,.018,.15,.035,.3,.048,.451,.049,.54,.083,1.084,.083,1.637s-.034,1.097-.083,1.637c-.014,.151-.031,.301-.048,.451-.05,.435-.116,.864-.197,1.289-.021,.11-.037,.222-.06,.331-.106,.503-.236,.998-.383,1.484-.046,.153-.1,.303-.15,.455-.116,.35-.242,.694-.379,1.033-.067,.167-.132,.336-.204,.5-.189,.433-.393,.859-.615,1.273-.092,.173-.196,.339-.294,.508-.15,.26-.305,.517-.467,.768-.133,.205-.268,.409-.409,.608-.147,.208-.302,.41-.458,.611-.28,.362-.572,.713-.878,1.053-.13,.146-.259,.293-.395,.435-.212,.221-.432,.435-.656,.645-.116,.109-.234,.215-.354,.321-.787,.703-1.634,1.338-2.535,1.896-.1,.062-.199,.123-.3,.182-.304,.181-.612,.356-.928,.519-2.464,1.27-5.25,2-8.208,2s-5.744-.73-8.208-2c-.315-.163-.624-.338-.928-.519-.101-.06-.201-.121-.3-.182-.901-.558-1.749-1.193-2.535-1.896-.119-.106-.238-.212-.354-.321-.224-.21-.443-.424-.656-.645-.135-.142-.264-.289-.395-.435-.306-.34-.599-.691-.878-1.053-.155-.202-.311-.403-.458-.611-.141-.199-.276-.403-.409-.608-.163-.251-.317-.508-.467-.768-.098-.169-.202-.335-.294-.508-.222-.415-.425-.84-.615-1.273-.072-.165-.137-.333-.204-.5-.137-.339-.263-.684-.379-1.033-.05-.151-.104-.301-.15-.455-.147-.487-.277-.981-.383-1.484-.023-.109-.039-.221-.06-.331-.081-.425-.147-.854-.197-1.289-.018-.15-.035-.3-.048-.451-.049-.54-.083-1.084-.083-1.637s.034-1.097,.083-1.637Z"
66558
+ }
66559
+ ),
66560
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
66561
+ "path",
66562
+ {
66563
+ fill: fill2,
66564
+ d: "M232,112H120.837c-6.293-15.258-21.308-26-38.837-26s-32.543,10.742-38.837,26H24c-8.836,0-16,7.164-16,16s7.164,16,16,16h19.163c6.293,15.258,21.308,26,38.837,26s32.543-10.742,38.837-26h111.163c8.836,0,16-7.164,16-16s-7.164-16-16-16Zm-132.083,17.637c-.014,.151-.031,.301-.048,.451-.05,.435-.116,.864-.197,1.289-.021,.11-.037,.222-.06,.331-.106,.503-.236,.998-.383,1.484-.046,.153-.1,.303-.15,.455-.116,.35-.242,.694-.379,1.033-.067,.167-.132,.336-.204,.5-.189,.433-.393,.859-.615,1.273-.092,.173-.196,.339-.294,.508-.15,.26-.305,.517-.467,.768-.133,.205-.268,.409-.409,.608-.147,.208-.302,.41-.458,.611-.28,.362-.572,.713-.878,1.053-.13,.146-.259,.293-.395,.435-.212,.221-.432,.435-.656,.645-.116,.109-.234,.215-.354,.321-.787,.703-1.634,1.338-2.535,1.896-.1,.062-.199,.123-.3,.182-.304,.181-.612,.356-.928,.519-2.464,1.27-5.25,2-8.208,2s-5.744-.73-8.208-2c-.315-.163-.624-.338-.928-.519-.101-.06-.201-.121-.3-.182-.901-.558-1.749-1.193-2.535-1.896-.119-.106-.238-.212-.354-.321-.224-.21-.443-.424-.656-.645-.135-.142-.264-.289-.395-.435-.306-.34-.599-.691-.878-1.053-.155-.202-.311-.403-.458-.611-.141-.199-.276-.403-.409-.608-.163-.251-.317-.508-.467-.768-.098-.169-.202-.335-.294-.508-.222-.415-.425-.84-.615-1.273-.072-.165-.137-.333-.204-.5-.137-.339-.263-.684-.379-1.033-.05-.151-.104-.301-.15-.455-.147-.487-.277-.981-.383-1.484-.023-.109-.039-.221-.06-.331-.081-.425-.147-.854-.197-1.289-.018-.15-.035-.3-.048-.451-.049-.54-.083-1.084-.083-1.637s.034-1.097,.083-1.637c.014-.151,.031-.301,.048-.451,.05-.435,.116-.864,.197-1.289,.021-.11,.037-.222,.06-.331,.106-.503,.236-.998,.383-1.484,.046-.153,.1-.303,.15-.455,.116-.35,.242-.694,.379-1.033,.067-.167,.132-.336,.204-.5,.189-.433,.393-.859,.615-1.273,.092-.173,.196-.339,.294-.508,.15-.26,.305-.517,.467-.768,.133-.205,.268-.409,.409-.608,.147-.208,.302-.41,.458-.611,.28-.362,.572-.713,.878-1.053,.13-.146,.259-.293,.395-.435,.212-.221,.432-.435,.656-.645,.116-.109,.234-.215,.354-.321,.787-.703,1.634-1.338,2.535-1.896,.1-.062,.199-.123,.3-.182,.304-.181,.612-.356,.928-.519,2.464-1.27,5.25-2,8.208-2s5.744,.73,8.208,2c.315,.163,.624,.338,.928,.519,.101,.06,.201,.121,.3,.182,.901,.558,1.749,1.193,2.535,1.896,.119,.106,.238,.212,.354,.321,.224,.21,.443,.424,.656,.645,.135,.142,.264,.289,.395,.435,.306,.34,.599,.691,.878,1.053,.155,.202,.311,.403,.458,.611,.141,.199,.276,.403,.409,.608,.163,.251,.317,.508,.467,.768,.098,.169,.202,.335,.294,.508,.222,.415,.425,.84,.615,1.273,.072,.165,.137,.333,.204,.5,.137,.339,.263,.684,.379,1.033,.05,.151,.104,.301,.15,.455,.147,.487,.277,.981,.383,1.484,.023,.109,.039,.221,.06,.331,.081,.425,.147,.854,.197,1.289,.018,.15,.035,.3,.048,.451,.049,.54,.083,1.084,.083,1.637s-.034,1.097-.083,1.637Z"
66565
+ }
66566
+ ),
66567
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
66568
+ "path",
66569
+ {
66570
+ fill: fill2,
66571
+ d: "M232,182h-19.163c-6.293-15.258-21.308-26-38.837-26s-32.543,10.742-38.837,26H24c-8.836,0-16,7.164-16,16s7.164,16,16,16h111.163c6.293,15.258,21.308,26,38.837,26s32.543-10.742,38.837-26h19.163c8.836,0,16-7.164,16-16s-7.164-16-16-16Zm-40.083,17.637c-.014,.151-.031,.301-.048,.451-.05,.435-.116,.864-.197,1.289-.021,.11-.037,.222-.06,.331-.106,.503-.236,.998-.383,1.484-.046,.153-.1,.303-.15,.455-.116,.35-.242,.694-.379,1.033-.067,.167-.132,.336-.204,.5-.189,.433-.393,.859-.615,1.273-.092,.173-.196,.339-.294,.508-.15,.26-.305,.517-.467,.768-.133,.205-.268,.409-.409,.608-.147,.208-.302,.41-.458,.611-.28,.362-.572,.713-.878,1.053-.13,.146-.259,.293-.395,.435-.212,.221-.432,.435-.656,.645-.116,.109-.234,.215-.354,.321-.787,.703-1.634,1.338-2.535,1.896-.1,.062-.199,.123-.3,.182-.304,.181-.612,.356-.928,.519-2.464,1.27-5.25,2-8.208,2s-5.744-.73-8.208-2c-.315-.163-.624-.338-.928-.519-.101-.06-.201-.121-.3-.182-.901-.558-1.749-1.193-2.535-1.896-.119-.106-.238-.212-.354-.321-.224-.21-.443-.424-.656-.645-.135-.142-.264-.289-.395-.435-.306-.34-.599-.691-.878-1.053-.155-.202-.311-.403-.458-.611-.141-.199-.276-.403-.409-.608-.163-.251-.317-.508-.467-.768-.098-.169-.202-.335-.294-.508-.222-.415-.425-.84-.615-1.273-.072-.165-.137-.333-.204-.5-.137-.339-.263-.684-.379-1.033-.05-.151-.104-.301-.15-.455-.147-.487-.277-.981-.383-1.484-.023-.109-.039-.221-.06-.331-.081-.425-.147-.854-.197-1.289-.018-.15-.035-.3-.048-.451-.049-.54-.083-1.084-.083-1.637s.034-1.097,.083-1.637c.014-.151,.031-.301,.048-.451,.05-.435,.116-.864,.197-1.289,.021-.11,.037-.222,.06-.331,.106-.503,.236-.998,.383-1.484,.046-.153,.1-.303,.15-.455,.116-.35,.242-.694,.379-1.033,.067-.167,.132-.336,.204-.5,.189-.433,.393-.859,.615-1.273,.092-.173,.196-.339,.294-.508,.15-.26,.305-.517,.467-.768,.133-.205,.268-.409,.409-.608,.147-.208,.302-.41,.458-.611,.28-.362,.572-.713,.878-1.053,.13-.146,.259-.293,.395-.435,.212-.221,.432-.435,.656-.645,.116-.109,.234-.215,.354-.321,.787-.703,1.634-1.338,2.535-1.896,.1-.062,.199-.123,.3-.182,.304-.181,.612-.356,.928-.519,2.464-1.27,5.25-2,8.208-2s5.744,.73,8.208,2c.315,.163,.624,.338,.928,.519,.101,.06,.201,.121,.3,.182,.901,.558,1.749,1.193,2.535,1.896,.119,.106,.238,.212,.354,.321,.224,.21,.443,.424,.656,.645,.135,.142,.264,.289,.395,.435,.306,.34,.599,.691,.878,1.053,.155,.202,.311,.403,.458,.611,.141,.199,.276,.403,.409,.608,.163,.251,.317,.508,.467,.768,.098,.169,.202,.335,.294,.508,.222,.415,.425,.84,.615,1.273,.072,.165,.137,.333,.204,.5,.137,.339,.263,.684,.379,1.033,.05,.151,.104,.301,.15,.455,.147,.487,.277,.981,.383,1.484,.023,.109,.039,.221,.06,.331,.081,.425,.147,.854,.197,1.289,.018,.15,.035,.3,.048,.451,.049,.54,.083,1.084,.083,1.637s-.034,1.097-.083,1.637Z"
66572
+ }
66573
+ )
66574
+ ] });
66575
+ }
66517
66576
  function settings({ height, width, fill: fill2, className }) {
66518
66577
  return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className, height, width, viewBox: "0 0 256 256", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
66519
66578
  "path",
@@ -67048,6 +67107,60 @@ Averrage Date/Second ${avgDataRatePS} kb
67048
67107
  )
67049
67108
  ] });
67050
67109
  }
67110
+ function sectionBoxSettings({ height, width, fill: fill2, className }) {
67111
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className, height, width, viewBox: "0 0 256 256", children: [
67112
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
67113
+ "path",
67114
+ {
67115
+ fill: fill2,
67116
+ d: "M 109.70368,2.190587 17.447731,55.710016 A 16.213,16.213 0 0 0 9.3632977,69.780402 L 9.6706253,176.28696 a 16.215,16.215 0 0 0 8.1654987,14.0235 l 95.269706,54.51732 c 1.35625,0.77609 3.04643,-0.20379 3.04192,-1.76478 L 115.79652,121.3395 221.23346,60.173007 c 1.35174,-0.783903 1.34611,-2.734895 -0.0101,-3.511985 L 125.95362,2.1436974 a 16.278,16.278 0 0 0 -16.24994,0.04689 z M 95.74464,211.51674 29.976783,173.88635 29.714025,82.825734 l 65.768857,37.630376 0.262761,91.06162 z m 9.95507,-107.77018 -65.766855,-37.629382 77.949835,-45.221114 65.76886,37.62938 -77.95084,45.221116 z"
67117
+ }
67118
+ ),
67119
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
67120
+ "path",
67121
+ {
67122
+ fill: fill2,
67123
+ d: "m 175.57713,226.38215 c -1.28316,3.98514 -5.40414,6.14971 -9.13315,4.86244 l -3.60809,-1.24739 c -3.76004,-1.29737 -5.86799,-5.60846 -4.70379,-9.64145 l 0.42438,-1.46966 c 0.96925,-3.3572 -0.3989,-7.74539 -3.07521,-9.81798 l -0.73032,-0.56682 c -2.66882,-2.0641 -7.02118,-2.10184 -9.7235,-0.0863 l -1.1842,0.8837 c -3.23919,2.42089 -7.76901,1.59565 -10.07644,-1.77642 l -2.23242,-3.26259 c -2.3254,-3.40131 -1.6226,-8.22657 1.51812,-10.73784 l 1.15669,-0.92571 c 2.63933,-2.1082 3.9555,-6.51288 2.93126,-9.86426 l -0.27844,-0.91558 c -1.01877,-3.33861 -4.52035,-6.09072 -7.821,-6.14815 l -1.44661,-0.0253 c -3.95551,-0.0693 -7.1652,-3.56724 -7.1652,-7.7374 v -4.03725 c 0,-4.20531 3.2372,-7.66991 7.1652,-7.73745 l 1.44661,-0.0251 c 3.30016,-0.0568 6.79826,-2.79894 7.821,-6.14974 l 0.27844,-0.91348 c 1.02023,-3.33859 -0.29193,-7.75605 -2.93126,-9.86586 l -1.15669,-0.9241 c -3.16419,-2.52987 -3.82354,-7.3652 -1.51812,-10.73784 l 2.23242,-3.2647 c 2.32739,-3.39921 6.86326,-4.17603 10.07644,-1.77645 l 1.1842,0.88372 c 2.70232,2.01782 7.04471,1.98645 9.7235,-0.086 l 0.73032,-0.56467 c 2.66683,-2.06414 4.04446,-6.46083 3.07521,-9.81803 l -0.42438,-1.47176 c -1.1627,-4.02504 0.97525,-8.35208 4.70379,-9.63935 l 3.60809,-1.24738 c 3.76004,-1.299493 7.84798,0.87146 9.13315,4.86086 l 0.46987,1.4569 c 1.07175,3.32157 4.60331,6.0152 7.91546,6.0152 h 0.90232 c 3.30011,0 6.84321,-2.69363 7.91345,-6.0152 l 0.46988,-1.4569 c 1.28517,-3.98301 5.40663,-6.148123 9.13516,-4.86033 l 3.60808,1.24739 c 3.76006,1.29738 5.86803,5.60632 4.70383,9.63932 l -0.42441,1.47179 c -0.96925,3.35722 0.39893,7.7454 3.07522,9.81798 l 0.73029,0.56467 c 2.66883,2.06622 7.02122,2.10401 9.72154,0.0862 l 1.1842,-0.88369 c 3.23916,-2.41874 7.77099,-1.59353 10.0764,1.77644 l 2.23444,3.26469 c 2.32542,3.40132 1.62261,8.22656 -1.51812,10.73784 l -1.15667,0.92409 c -2.63936,2.11036 -3.95552,6.51504 -2.93328,9.86586 l 0.28043,0.91346 c 1.01873,3.34022 4.52035,6.09284 7.82101,6.14975 l 1.44514,0.0251 c 3.95749,0.0671 7.16516,3.56725 7.16516,7.73741 v 4.03729 c 0,4.20314 -3.23717,7.66987 -7.16516,7.73739 l -1.44514,0.0254 c -3.30016,0.0568 -6.79828,2.79678 -7.82101,6.14812 l -0.28043,0.91562 c -1.01872,3.33856 0.29392,7.75601 2.93328,9.86424 l 1.15667,0.92571 c 3.16422,2.52985 3.82355,7.36522 1.51812,10.73786 l -2.23444,3.26254 c -2.32537,3.40135 -6.86123,4.17815 -10.0764,1.77645 l -1.1842,-0.88373 c -2.70032,-2.01569 -7.04322,-1.98646 -9.72154,0.086 l -0.73029,0.56681 c -2.66683,2.06412 -4.04447,6.46079 -3.07522,9.81801 l 0.42441,1.46964 c 1.1627,4.02717 -0.97526,8.3542 -4.70383,9.64146 l -3.60808,1.24739 c -3.76002,1.29736 -7.84798,-0.87146 -9.13516,-4.86248 l -0.46988,-1.45474 c -1.06973,-3.32157 -4.60133,-6.01523 -7.91345,-6.01523 h -0.90232 c -3.30013,0 -6.84323,2.69366 -7.91546,6.01523 l -0.46987,1.45474 z m 8.83473,-24.33631 c 18.77473,0 33.99232,-16.18681 33.99232,-36.15723 0,-19.97043 -15.21759,-36.1551 -33.99232,-36.1551 -18.77467,0 -33.9903,16.18681 -33.9903,36.1551 0,19.96828 15.21761,36.15723 33.9903,36.15723 z"
67124
+ }
67125
+ )
67126
+ ] });
67127
+ }
67128
+ function sectionBoxAuto({ height, width, fill: fill2, className }) {
67129
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className, height, width, viewBox: "0 0 256 256", children: [
67130
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
67131
+ "path",
67132
+ {
67133
+ fill: fill2,
67134
+ d: "M 109.70368,2.190587 17.447731,55.710016 A 16.213,16.213 0 0 0 9.3632977,69.780402 L 9.6706253,176.28696 a 16.215,16.215 0 0 0 8.1654987,14.0235 l 95.269706,54.51732 c 1.35625,0.77609 3.04643,-0.20379 3.04192,-1.76478 L 115.79652,121.3395 221.23346,60.173007 c 1.35174,-0.783903 1.34611,-2.734895 -0.0101,-3.511985 L 125.95362,2.1436974 a 16.278,16.278 0 0 0 -16.24994,0.04689 z M 95.74464,211.51674 29.976783,173.88635 29.714025,82.825734 l 65.768857,37.630376 0.262761,91.06162 z m 9.95507,-107.77018 -65.766855,-37.629382 77.949835,-45.221114 65.76886,37.62938 -77.95084,45.221116 z"
67135
+ }
67136
+ ),
67137
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
67138
+ "path",
67139
+ {
67140
+ fill: fill2,
67141
+ d: "M 221.207314 217.240532 L 214.827314 200.469532 L 160.504314 200.469532 L 154.124314 217.604532 C 151.632314 224.288532 149.506314 228.815532 147.744314 231.186532 C 145.981314 233.494532 143.095314 234.649532 139.085314 234.649532 C 135.682314 234.649532 132.674314 233.403532 130.061314 230.912532 C 127.448314 228.420532 126.142314 225.595532 126.142314 222.435532 C 126.142314 220.612532 126.446314 218.729532 127.053314 216.784532 C 127.661314 214.840532 128.664314 212.137532 130.061314 208.672532 L 164.241314 121.901532 C 165.213314 119.410532 166.368314 116.432532 167.704314 112.969532 C 169.102314 109.444532 170.560314 106.528532 172.079314 104.219532 C 173.659314 101.911532 175.695314 100.057532 178.186314 98.660532 C 180.738314 97.201532 183.868314 96.471532 187.574314 96.471532 C 191.342314 96.471532 194.471314 97.201532 196.962314 98.660532 C 199.514314 100.057532 201.550314 101.879532 203.069314 104.128532 C 204.649314 106.376532 205.955314 108.807532 206.988314 111.419532 C 208.082314 113.971532 209.449314 117.405532 211.090314 121.719532 L 245.999314 207.943532 C 248.733314 214.505532 250.100314 219.275532 250.100314 222.253532 C 250.100314 225.352532 248.794314 228.209532 246.181314 230.822532 C 243.629314 233.373532 240.530314 234.649532 236.884314 234.649532 C 234.758314 234.649532 232.935314 234.254532 231.416314 233.464532 C 229.896314 232.735532 228.620314 231.732532 227.587314 230.456532 C 226.554314 229.119532 225.430314 227.115532 224.215314 224.440532 C 223.060314 221.706532 222.058314 219.306532 221.207314 217.240532 Z M 167.613314 180.143532 L 207.535314 180.143532 L 187.392314 125.000532 Z"
67142
+ }
67143
+ )
67144
+ ] });
67145
+ }
67146
+ function sectionBoxVisible({ height, width, fill: fill2, className }) {
67147
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className, height, width, viewBox: "0 0 256 256", children: [
67148
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
67149
+ "path",
67150
+ {
67151
+ fill: fill2,
67152
+ d: "M 109.70368,2.190587 17.447731,55.710016 A 16.213,16.213 0 0 0 9.3632977,69.780402 L 9.6706253,176.28696 a 16.215,16.215 0 0 0 8.1654987,14.0235 l 95.269706,54.51732 c 1.35625,0.77609 3.04643,-0.20379 3.04192,-1.76478 L 115.79652,121.3395 221.23346,60.173007 c 1.35174,-0.783903 1.34611,-2.734895 -0.0101,-3.511985 L 125.95362,2.1436974 a 16.278,16.278 0 0 0 -16.24994,0.04689 z M 95.74464,211.51674 29.976783,173.88635 29.714025,82.825734 l 65.768857,37.630376 0.262761,91.06162 z m 9.95507,-107.77018 -65.766855,-37.629382 77.949835,-45.221114 65.76886,37.62938 -77.95084,45.221116 z"
67153
+ }
67154
+ ),
67155
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
67156
+ "path",
67157
+ {
67158
+ fill: fill2,
67159
+ d: "m 186.05204,115.30607 c -37.93016,0 -68.67906,39.581 -68.67906,59.64313 0,21.35677 30.7489,59.64312 68.67906,59.64312 37.93016,0 68.67906,-38.28635 68.67906,-59.64312 0,-20.06213 -30.7489,-59.64313 -68.67906,-59.64313 z m 40.42729,85.41349 c -6.9441,6.83951 -21.43002,18.31368 -40.42729,18.31368 -18.99727,0 -33.48265,-11.47417 -40.42728,-18.31368 -11.61642,-11.4411 -15.37445,-22.30263 -15.37445,-25.77036 0,-0.0305 0.0381,-3.14164 3.35186,-9.36916 2.8652,-5.38603 7.15818,-11.06056 12.08697,-15.97917 3.66628,-3.65833 9.40099,-8.61065 16.72067,-12.50626 -6.58514,7.55977 -10.6973,18.2333 -10.6973,30.07505 0,22.91463 15.37445,41.49087 34.33953,41.49087 18.96508,0 34.33953,-18.57624 34.33953,-41.49087 0,-5.71277 -0.95614,-11.15521 -2.68492,-16.10818 -0.0445,9.9792 -6.75148,18.05306 -15.0214,18.05306 -8.26992,0 -15.02354,-8.12702 -15.02354,-18.15225 0,-8.97953 5.39774,-16.43168 12.48617,-17.88905 11.9346,3.73548 21.13062,11.40091 26.2676,16.52763 4.92879,4.91861 9.22177,10.59379 12.08697,15.97917 3.31377,6.22752 3.35186,9.33869 3.35186,9.36916 0,3.46773 -3.75803,14.32926 -15.37445,25.77036 z"
67160
+ }
67161
+ )
67162
+ ] });
67163
+ }
67051
67164
  function sectionBox({ height, width, fill: fill2, className }) {
67052
67165
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className, height, width, viewBox: "0 0 256 256", children: [
67053
67166
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -67066,6 +67179,31 @@ Averrage Date/Second ${avgDataRatePS} kb
67066
67179
  )
67067
67180
  ] });
67068
67181
  }
67182
+ function sectionBoxDisable({ height, width, fill: fill2, className }) {
67183
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className, height, width, viewBox: "0 0 256 256", children: [
67184
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
67185
+ "path",
67186
+ {
67187
+ fill: fill2,
67188
+ d: "M 109.70368,2.190587 17.447731,55.710016 A 16.213,16.213 0 0 0 9.3632977,69.780402 L 9.6706253,176.28696 a 16.215,16.215 0 0 0 8.1654987,14.0235 l 95.269706,54.51732 c 1.35625,0.77609 3.04643,-0.20379 3.04192,-1.76478 L 115.79652,121.3395 221.23346,60.173007 c 1.35174,-0.783903 1.34611,-2.734895 -0.0101,-3.511985 L 125.95362,2.1436974 a 16.278,16.278 0 0 0 -16.24994,0.04689 z M 95.74464,211.51674 29.976783,173.88635 29.714025,82.825734 l 65.768857,37.630376 0.262761,91.06162 z m 9.95507,-107.77018 -65.766855,-37.629382 77.949835,-45.221114 65.76886,37.62938 -77.95084,45.221116 z"
67189
+ }
67190
+ ),
67191
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
67192
+ "path",
67193
+ {
67194
+ fill: fill2,
67195
+ d: "m 185.61601,192.28388 v -44.0883 c 0,-2.52838 -1.97182,-4.91709 -4.84542,-5.26996 -3.49833,-0.42965 -6.4956,1.9253 -6.4956,4.89027 v 44.08783 c 0,2.52885 1.97182,4.91756 4.84542,5.27043 3.49833,0.42965 6.4956,-1.92531 6.4956,-4.89027 z m 22.68149,0 v -44.0883 c 0,-2.52838 -1.97182,-4.91709 -4.84542,-5.26996 -3.49832,-0.42965 -6.49559,1.9253 -6.49559,4.89027 v 44.08783 c 0,2.52885 1.97182,4.91756 4.84542,5.27043 3.49832,0.42965 6.49559,-1.92531 6.49559,-4.89027 z m 38.18908,-71.6429 H 225.42553 V 105.9623 c 0,-2.80818 -2.61299,-5.08498 -5.83584,-5.08498 h -56.43703 c -3.22285,0 -5.83585,2.2768 -5.83585,5.08498 v 14.67868 h -21.23089 c -4.69044,0 -8.49236,3.31275 -8.49236,7.39969 v 0.0231 c 0,4.08694 3.80192,7.39969 8.49236,7.39969 h 110.40066 c 4.69044,0 8.49236,-3.31275 8.49236,-7.39969 v -0.0231 c 0,-4.08694 -3.80192,-7.39969 -8.49236,-7.39969 z m -35.23745,-6.4863 v 6.4863 h -39.75592 v -6.4863 a 1.0615448,0.92496161 0 0 1 1.06155,-0.92496 h 37.63282 a 1.0615448,0.92496161 0 0 1 1.06155,0.92496 z"
67196
+ }
67197
+ ),
67198
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
67199
+ "path",
67200
+ {
67201
+ fill: fill2,
67202
+ d: "m 227.42894,215.76405 c 0,5.6549 -4.47215,10.23953 -9.98832,10.23953 h -49.76957 c -5.51617,0 -9.98832,-4.58463 -9.98832,-10.23953 v -69.72083 a 4.9863693,5.1117785 0 0 0 -4.98637,-5.11178 h -10.00391 a 4.9863693,5.1117785 0 0 0 -4.98637,5.11178 v 73.13422 c 0,15.08038 11.92553,27.30584 26.63594,27.30584 h 56.42825 c 14.71041,0 26.63594,-12.22546 26.63594,-27.30584 v -73.13422 a 4.9863693,5.1117785 0 0 0 -4.98637,-5.11178 h -10.0039 a 4.9863693,5.1117785 0 0 0 -4.98637,5.11178 v 69.72147 z"
67203
+ }
67204
+ )
67205
+ ] });
67206
+ }
67069
67207
  function sectionBoxClip({ height, width, fill: fill2, className }) {
67070
67208
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className, height, width, viewBox: "0 0 256 256", children: [
67071
67209
  /* @__PURE__ */ jsxRuntimeExports.jsx("path", { fill: "none", d: "M0 0h256v256H0z" }),
@@ -67147,6 +67285,24 @@ Averrage Date/Second ${avgDataRatePS} kb
67147
67285
  ) })
67148
67286
  ] });
67149
67287
  }
67288
+ function sectionBoxShrink2({ height, width, fill: fill2, className }) {
67289
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className, height, width, viewBox: "0 0 256 256", children: [
67290
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
67291
+ "path",
67292
+ {
67293
+ fill: fill2,
67294
+ d: "M 109.70368,2.190587 17.447731,55.710016 A 16.213,16.213 0 0 0 9.3632977,69.780402 L 9.6706253,176.28696 a 16.215,16.215 0 0 0 8.1654987,14.0235 l 95.269706,54.51732 c 1.35625,0.77609 3.04643,-0.20379 3.04192,-1.76478 L 115.79652,121.3395 221.23346,60.173007 c 1.35174,-0.783903 1.34611,-2.734895 -0.0101,-3.511985 L 125.95362,2.1436974 a 16.278,16.278 0 0 0 -16.24994,0.04689 z M 95.74464,211.51674 29.976783,173.88635 29.714025,82.825734 l 65.768857,37.630376 0.262761,91.06162 z m 9.95507,-107.77018 -65.766855,-37.629382 77.949835,-45.221114 65.76886,37.62938 -77.95084,45.221116 z"
67295
+ }
67296
+ ),
67297
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
67298
+ "path",
67299
+ {
67300
+ fill: fill2,
67301
+ d: "m 223.41166,231.92815 -50.05,-51.82677 -21.39562,22.15515 -21.52251,-81.36695 78.57748,22.28655 -21.39561,22.15516 50.05002,51.82676 z"
67302
+ }
67303
+ )
67304
+ ] });
67305
+ }
67150
67306
  function ghost({ height, width, fill: fill2, className }) {
67151
67307
  return /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className, width: height, height: width, viewBox: "0 0 20 20", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("g", { "data-name": "ICONS", children: [
67152
67308
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -67206,11 +67362,17 @@ Averrage Date/Second ${avgDataRatePS} kb
67206
67362
  pan,
67207
67363
  perspective,
67208
67364
  sectionBox,
67365
+ sectionBoxAuto,
67209
67366
  sectionBoxClip,
67367
+ sectionBoxDisable,
67210
67368
  sectionBoxIgnore,
67211
67369
  sectionBoxReset,
67370
+ sectionBoxSettings,
67212
67371
  sectionBoxShrink,
67372
+ sectionBoxShrink2,
67373
+ sectionBoxVisible,
67213
67374
  settings,
67375
+ slidersHoriz,
67214
67376
  toggleIsolation,
67215
67377
  trash,
67216
67378
  treeView,
@@ -67230,9 +67392,6 @@ Averrage Date/Second ${avgDataRatePS} kb
67230
67392
  function anyUiCursorButton(settings2) {
67231
67393
  return isTrue(settings2.ui.orbit) || isTrue(settings2.ui.lookAround) || isTrue(settings2.ui.pan) || isTrue(settings2.ui.zoom) || isTrue(settings2.ui.zoomWindow) || isTrue(settings2.ui.zoomToFit);
67232
67394
  }
67233
- function anyUiToolButton(settings2) {
67234
- return isTrue(settings2.ui.sectioningMode) || isTrue(settings2.ui.measuringMode) || isTrue(settings2.ui.toggleIsolation);
67235
- }
67236
67395
  function anyUiSettingButton(settings2) {
67237
67396
  return isTrue(settings2.ui.projectInspector) || isTrue(settings2.ui.settings) || isTrue(settings2.ui.help) || isTrue(settings2.ui.maximise);
67238
67397
  }
@@ -67364,7 +67523,7 @@ Averrage Date/Second ${avgDataRatePS} kb
67364
67523
  }
67365
67524
  );
67366
67525
  const hidden2 = isTrue(props.settings.value.ui.axesPanel) ? "" : " vc-hidden";
67367
- const createBar2 = () => {
67526
+ const createBar = () => {
67368
67527
  if (!anyUiAxesButton(props.settings.value)) {
67369
67528
  return (
67370
67529
  // Keeps layout when all buttons are disabled.
@@ -67386,7 +67545,7 @@ Averrage Date/Second ${avgDataRatePS} kb
67386
67545
  className: "vim-axes-panel vc-pointer-events-none vc-absolute vc-overflow-hidden vc-z-20 vc-flex vc-flex-col vc-border vc-border-white vc-opacity-50 vc-shadow-lg vc-saturate-0 vc-transition-all hover:vc-opacity-100 hover:vc-saturate-100" + hidden2,
67387
67546
  children: [
67388
67547
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: gizmoDiv, className: "vim-axes-panel-gizmo vc-absolute vc-pointer-events-auto" }),
67389
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "vim-axes-panel-bar vc-absolute vc-top-[75%] vc-bottom-0 vc-right-0 vc-left-0", children: createBar2() })
67548
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "vim-axes-panel-bar vc-absolute vc-top-[75%] vc-bottom-0 vc-right-0 vc-left-0", children: createBar() })
67390
67549
  ]
67391
67550
  }
67392
67551
  );
@@ -67395,22 +67554,62 @@ Averrage Date/Second ${avgDataRatePS} kb
67395
67554
  function buttonDefaultStyle(on) {
67396
67555
  return on ? btnStyle + " vc-text-primary" : btnStyle + " vc-text-gray-medium";
67397
67556
  }
67557
+ function buttonExpandStyle(on) {
67558
+ return on ? btnStyle + " vc-text-white vc-bg-primary" : btnStyle + " vc-text-gray-medium";
67559
+ }
67560
+ function buttonDisableStyle(on) {
67561
+ return on ? btnStyle + " vc-text-gray-medium" : btnStyle + " vc-text-gray vc-pointer-events-none";
67562
+ }
67398
67563
  function buttonBlueStyle(on) {
67399
67564
  return btnStyle + " vc-text-white";
67400
67565
  }
67401
67566
  function createButton(button) {
67402
67567
  var _a2;
67403
67568
  if (button.enabled !== void 0 && !button.enabled()) return null;
67404
- const style = button.style((_a2 = button.isOn) == null ? void 0 : _a2.call(button));
67405
- return /* @__PURE__ */ jsxRuntimeExports.jsx("button", { "data-tip": button.tip, onClick: button.action, className: style, type: "button", children: button.icon({ height: "20", width: "20", fill: "currentColor", className: "vc-max-h-[80%]" }) }, button.id);
67569
+ const style = (button.style ?? buttonDefaultStyle)((_a2 = button.isOn) == null ? void 0 : _a2.call(button));
67570
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("button", { id: button.id, "data-tip": button.tip, onClick: button.action, className: style, type: "button", children: button.icon({ height: "20", width: "20", fill: "currentColor", className: "vc-max-h-[80%]" }) }, button.id);
67406
67571
  }
67407
- const sectionStyle = "vc-flex vc-items-center vc-rounded-full vc-mb-2 vc-px-2 vc-shadow-md";
67572
+ const sectionStyle = "vc-flex vc-items-center vc-rounded-full vc-mb-2 vc-shadow-md";
67408
67573
  const sectionDefaultStyle = sectionStyle + " vc-bg-white";
67409
67574
  const sectionBlueStyle = sectionStyle + " vc-bg-primary";
67575
+ const sectionNoPadStyle = sectionStyle.replace("vc-px-2", "") + " vc-bg-white";
67410
67576
  function createSection$1(section) {
67411
67577
  if (section.enable !== void 0 && !section.enable()) return null;
67412
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `vim-control-bar-section ${section.style}`, children: section.buttons.map((b) => createButton(b)) }, section.id);
67578
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `vim-control-bar-section ${section.style ?? sectionDefaultStyle}`, children: section.buttons.map((b) => createButton(b)) }, section.id);
67579
+ }
67580
+ function ControlBar(props) {
67581
+ React2.useEffect(() => {
67582
+ ReactTooltip.rebuild();
67583
+ });
67584
+ if (!props.show) {
67585
+ return null;
67586
+ }
67587
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
67588
+ "div",
67589
+ {
67590
+ style: {
67591
+ gap: "min(10px, 2%)",
67592
+ bottom: "min(36px, 10%)"
67593
+ },
67594
+ id: "vim-control-bar",
67595
+ className: "vim-control-bar vc-pointer-events-auto vc-flex-wrap vc-mx-2 vc-min-w-0 vc-absolute vc-left-0 vc-right-0 vc-z-20 vc-flex vc-items-center vc-justify-center transition-all",
67596
+ children: props.content.map(createSection$1)
67597
+ }
67598
+ );
67413
67599
  }
67600
+ const controlBar = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
67601
+ __proto__: null,
67602
+ ControlBar,
67603
+ buttonBlueStyle,
67604
+ buttonDefaultStyle,
67605
+ buttonDisableStyle,
67606
+ buttonExpandStyle,
67607
+ createButton,
67608
+ createSection: createSection$1,
67609
+ sectionBlueStyle,
67610
+ sectionDefaultStyle,
67611
+ sectionNoPadStyle
67612
+ }, Symbol.toStringTag, { value: "Module" }));
67414
67613
  function getPointerState(viewer) {
67415
67614
  const [mode, setMode] = React2.useState(viewer.inputs.pointerActive);
67416
67615
  React2.useEffect(() => {
@@ -67472,52 +67671,6 @@ Averrage Date/Second ${avgDataRatePS} kb
67472
67671
  }
67473
67672
  };
67474
67673
  }
67475
- function getSectionBoxState(viewer) {
67476
- const sectionGizmo = viewer.gizmos.section;
67477
- const first = React2.useRef(true);
67478
- const [section, setSection] = React2.useState({
67479
- clip: sectionGizmo.clip,
67480
- active: sectionGizmo.visible && sectionGizmo.interactive
67481
- });
67482
- React2.useEffect(() => {
67483
- const subSection = sectionGizmo.onStateChanged.subscribe(
67484
- () => setSection({
67485
- clip: sectionGizmo.clip,
67486
- active: sectionGizmo.visible && sectionGizmo.interactive
67487
- })
67488
- );
67489
- return () => subSection();
67490
- }, []);
67491
- const toggle = () => {
67492
- ReactTooltip.hide();
67493
- if (viewer.inputs.pointerActive === "rect") {
67494
- viewer.inputs.pointerActive = viewer.inputs.pointerFallback;
67495
- }
67496
- const next = !(sectionGizmo.visible && sectionGizmo.interactive);
67497
- sectionGizmo.interactive = next;
67498
- sectionGizmo.visible = next;
67499
- if (next && first.current) {
67500
- sectionGizmo.clip = true;
67501
- sectionGizmo.fitBox(viewer.renderer.getBoundingBox());
67502
- first.current = false;
67503
- }
67504
- };
67505
- return {
67506
- clip: section.clip,
67507
- active: section.active,
67508
- set: setSection,
67509
- toggle,
67510
- hide: () => {
67511
- sectionGizmo.visible = false;
67512
- sectionGizmo.interactive = false;
67513
- },
67514
- reset: () => sectionGizmo.fitBox(viewer.renderer.getBoundingBox()),
67515
- shrinkToSelection: () => sectionGizmo.fitBox(viewer.selection.getBoundingBox()),
67516
- toggleClip: () => {
67517
- sectionGizmo.clip = !section.clip;
67518
- }
67519
- };
67520
- }
67521
67674
  function pointerToCursor(pointer) {
67522
67675
  switch (pointer) {
67523
67676
  case "orbit":
@@ -67569,13 +67722,13 @@ Averrage Date/Second ${avgDataRatePS} kb
67569
67722
  const sub2 = this._viewer.inputs.onPointerOverrideChanged.subscribe(
67570
67723
  () => this._updateCursor()
67571
67724
  );
67572
- const sub3 = this._viewer.gizmos.section.onStateChanged.subscribe(() => {
67573
- if (!this._viewer.gizmos.section.visible) {
67725
+ const sub3 = this._viewer.gizmos.sectionBox.onStateChanged.subscribe(() => {
67726
+ if (!this._viewer.gizmos.sectionBox.visible) {
67574
67727
  this._boxHover = false;
67575
67728
  this._updateCursor();
67576
67729
  }
67577
67730
  });
67578
- const sub4 = this._viewer.gizmos.section.onHover.subscribe((hover) => {
67731
+ const sub4 = this._viewer.gizmos.sectionBox.onHover.subscribe((hover) => {
67579
67732
  this._boxHover = hover;
67580
67733
  this._updateCursor();
67581
67734
  });
@@ -67641,6 +67794,7 @@ Averrage Date/Second ${avgDataRatePS} kb
67641
67794
  const elementIds = {
67642
67795
  // Sections
67643
67796
  sectionCamera: "controlBar.sectionCamera",
67797
+ sectionActions: "controlBar.sectionActions",
67644
67798
  sectionTools: "controlBar.sectionTools",
67645
67799
  sectionSettings: "controlBar.sectionSettings",
67646
67800
  sectionMeasure: "controlBar.sectionMeasure",
@@ -67651,46 +67805,96 @@ Averrage Date/Second ${avgDataRatePS} kb
67651
67805
  buttonCameraPan: "controlBar.camera.pan",
67652
67806
  buttonCameraZoom: "controlBar.camera.zoom",
67653
67807
  buttonCameraZoomWindow: "controlBar.camera.zoomWindow",
67654
- buttonCameraZoomToFit: "controlBar.camera.zoomToFit",
67655
67808
  // Settings buttons
67656
67809
  buttonProjectInspector: "controlBar.projectInspector",
67657
67810
  buttonSettings: "controlBar.settings",
67658
67811
  buttonHelp: "controlBar.help",
67659
67812
  buttonMaximize: "controlBar.maximize",
67813
+ // Action Buttons
67814
+ buttonToggleIsolation: "controlBar.action.toggleIsolation",
67815
+ buttonZoomToFit: "controlBar.action.zoomToFit",
67660
67816
  // Tools buttons
67661
67817
  buttonSectionBox: "controlBar.sectionBox",
67662
67818
  buttonMeasure: "controlBar.measure",
67663
- buttonToggleIsolation: "controlBar.toggleIsolation",
67664
- // Measure buttons
67665
- buttonMeasureDelete: "controlBar.measure.delete",
67666
- buttonMeasureDone: "controlBar.measure.done",
67667
67819
  // Section box buttons
67668
- buttonSectionBoxReset: "controlBar.sectionBox.reset",
67820
+ buttonSectionBoxEnable: "controlBar.sectionBox.enable",
67821
+ buttonSectionBoxVisible: "controlBar.sectionBox.visible",
67669
67822
  buttonSectionBoxShrinkToSelection: "controlBar.sectionBox.shrinkToSelection",
67823
+ buttonSectionBoxAuto: "controlBar.sectionBox.auto",
67670
67824
  buttonSectionBoxClip: "controlBar.sectionBox.clip",
67671
- buttonSectionBoxIgnore: "controlBar.sectionBox.ignore",
67672
- buttonSectionBoxDone: "controlBar.sectionBox.done"
67825
+ buttonSectionBoxSettings: "controlBar.sectionBox.settings"
67673
67826
  };
67674
- function ControlBar(props) {
67675
- var _a2;
67676
- const pointer = getPointerState(props.viewer);
67677
- const fullScreen = getFullScreenState();
67678
- const section = getSectionBoxState(props.viewer);
67679
- const measure$1 = getMeasureState(props.viewer, props.cursor);
67680
- React2.useEffect(() => {
67681
- ReactTooltip.rebuild();
67682
- });
67683
- if (isFalse(props.settings.ui.controlBar)) {
67684
- return null;
67685
- }
67686
- const cameraSection = {
67827
+ function controlBarSectionBox(section, hasSelection) {
67828
+ return {
67829
+ id: elementIds.sectionSectionBox,
67830
+ style: section.getEnable() ? sectionNoPadStyle : sectionDefaultStyle,
67831
+ //enable: () => section.getEnable(),
67832
+ buttons: [
67833
+ {
67834
+ id: elementIds.buttonSectionBoxEnable,
67835
+ tip: "Enable Section Box",
67836
+ isOn: () => section.getEnable(),
67837
+ style: (on) => buttonExpandStyle(on),
67838
+ action: () => section.setEnable(!section.getEnable()),
67839
+ icon: sectionBox
67840
+ },
67841
+ {
67842
+ id: elementIds.buttonSectionBoxShrinkToSelection,
67843
+ tip: "Fit Section",
67844
+ enabled: () => section.getEnable(),
67845
+ isOn: () => hasSelection,
67846
+ style: (on) => buttonDisableStyle(on),
67847
+ action: () => section.sectionSelection(),
67848
+ icon: sectionBoxShrink
67849
+ },
67850
+ {
67851
+ id: elementIds.buttonSectionBoxClip,
67852
+ tip: "Reset Section",
67853
+ enabled: () => section.getEnable(),
67854
+ style: (on) => buttonDefaultStyle(on),
67855
+ action: () => section.sectionReset(),
67856
+ icon: sectionBoxReset
67857
+ },
67858
+ {
67859
+ id: elementIds.buttonSectionBoxVisible,
67860
+ tip: "Show Section Box",
67861
+ enabled: () => section.getEnable(),
67862
+ isOn: () => section.getVisible(),
67863
+ style: (on) => buttonDefaultStyle(on),
67864
+ action: () => section.setVisible(!section.getVisible()),
67865
+ icon: visible
67866
+ },
67867
+ {
67868
+ id: elementIds.buttonSectionBoxAuto,
67869
+ tip: "Auto Section",
67870
+ enabled: () => section.getEnable(),
67871
+ isOn: () => section.getAuto(),
67872
+ style: (on) => buttonDefaultStyle(on),
67873
+ action: () => section.setAuto(!section.getAuto()),
67874
+ icon: sectionBoxAuto
67875
+ },
67876
+ {
67877
+ id: elementIds.buttonSectionBoxSettings,
67878
+ tip: "Section Settings",
67879
+ enabled: () => section.getEnable(),
67880
+ isOn: () => section.getOffsetVisible(),
67881
+ style: (on) => buttonDefaultStyle(on),
67882
+ action: () => section.setOffsetsVisible(!section.getOffsetVisible()),
67883
+ icon: slidersHoriz
67884
+ }
67885
+ ]
67886
+ };
67887
+ }
67888
+ function controlBarPointer(viewer, camera2, settings2, section) {
67889
+ const pointer = getPointerState(viewer);
67890
+ return {
67687
67891
  id: elementIds.sectionCamera,
67688
- enable: () => anyUiCursorButton(props.settings),
67892
+ enable: () => anyUiCursorButton(settings2),
67689
67893
  style: sectionDefaultStyle,
67690
67894
  buttons: [
67691
67895
  {
67692
67896
  id: elementIds.buttonCameraOrbit,
67693
- enabled: () => isTrue(props.settings.ui.orbit),
67897
+ enabled: () => isTrue(settings2.ui.orbit),
67694
67898
  tip: "Orbit",
67695
67899
  action: () => pointer.onButton("orbit"),
67696
67900
  icon: orbit,
@@ -67699,7 +67903,7 @@ Averrage Date/Second ${avgDataRatePS} kb
67699
67903
  },
67700
67904
  {
67701
67905
  id: elementIds.buttonCameraLook,
67702
- enabled: () => isTrue(props.settings.ui.lookAround),
67906
+ enabled: () => isTrue(settings2.ui.lookAround),
67703
67907
  tip: "Look Around",
67704
67908
  action: () => pointer.onButton("look"),
67705
67909
  icon: look,
@@ -67708,7 +67912,7 @@ Averrage Date/Second ${avgDataRatePS} kb
67708
67912
  },
67709
67913
  {
67710
67914
  id: elementIds.buttonCameraPan,
67711
- enabled: () => isTrue(props.settings.ui.pan),
67915
+ enabled: () => isTrue(settings2.ui.pan),
67712
67916
  tip: "Pan",
67713
67917
  action: () => pointer.onButton("pan"),
67714
67918
  icon: pan,
@@ -67717,7 +67921,7 @@ Averrage Date/Second ${avgDataRatePS} kb
67717
67921
  },
67718
67922
  {
67719
67923
  id: elementIds.buttonCameraZoom,
67720
- enabled: () => isTrue(props.settings.ui.zoom),
67924
+ enabled: () => isTrue(settings2.ui.zoom),
67721
67925
  tip: "Zoom",
67722
67926
  action: () => pointer.onButton("zoom"),
67723
67927
  icon: zoom,
@@ -67726,59 +67930,87 @@ Averrage Date/Second ${avgDataRatePS} kb
67726
67930
  },
67727
67931
  {
67728
67932
  id: elementIds.buttonCameraZoomWindow,
67729
- enabled: () => isTrue(props.settings.ui.zoomWindow),
67933
+ enabled: () => isTrue(settings2.ui.zoomWindow),
67730
67934
  tip: "Zoom Window",
67731
67935
  action: () => {
67732
67936
  pointer.onButton("rect");
67733
- section.hide();
67734
67937
  },
67735
67938
  icon: frameRect,
67736
67939
  isOn: () => pointer.mode === "rect",
67737
67940
  style: buttonDefaultStyle
67738
- },
67941
+ }
67942
+ ]
67943
+ };
67944
+ }
67945
+ function controlBarActions(camera2, settings2, isolation, measure$1) {
67946
+ return {
67947
+ id: elementIds.sectionActions,
67948
+ enable: () => true,
67949
+ style: sectionDefaultStyle,
67950
+ buttons: [
67739
67951
  {
67740
- id: elementIds.buttonCameraZoomToFit,
67741
- enabled: () => isTrue(props.settings.ui.zoomToFit),
67952
+ id: elementIds.buttonZoomToFit,
67953
+ enabled: () => isTrue(settings2.ui.zoomToFit),
67742
67954
  tip: "Zoom to Fit",
67743
- action: () => props.camera.frameContext(),
67955
+ action: () => camera2.frameContext(),
67744
67956
  icon: frameSelection,
67745
67957
  isOn: () => false,
67746
67958
  style: buttonDefaultStyle
67959
+ },
67960
+ {
67961
+ id: elementIds.buttonToggleIsolation,
67962
+ enabled: () => isTrue(settings2.ui.toggleIsolation),
67963
+ tip: "Toggle Isolation",
67964
+ action: () => isolation.toggle("controlBar"),
67965
+ icon: toggleIsolation,
67966
+ style: buttonDefaultStyle
67967
+ },
67968
+ {
67969
+ id: elementIds.buttonMeasure,
67970
+ enabled: () => isTrue(settings2.ui.measuringMode),
67971
+ isOn: () => measure$1.active,
67972
+ tip: "Measuring Mode",
67973
+ action: () => measure$1.toggle(),
67974
+ icon: measure,
67975
+ style: buttonDefaultStyle
67747
67976
  }
67748
67977
  ]
67749
67978
  };
67750
- const settingsSection = {
67979
+ }
67980
+ function controlBarSettings(modal, side, settings$1) {
67981
+ const fullScreen = getFullScreenState();
67982
+ return {
67751
67983
  id: elementIds.sectionSettings,
67752
- enable: () => anyUiSettingButton(props.settings),
67984
+ enable: () => anyUiSettingButton(settings$1),
67753
67985
  style: sectionDefaultStyle,
67754
67986
  buttons: [
67755
67987
  {
67756
67988
  id: elementIds.buttonProjectInspector,
67757
- enabled: () => isTrue(props.settings.ui.projectInspector) && (isTrue(props.settings.ui.bimTreePanel) || isTrue(props.settings.ui.bimInfoPanel)),
67989
+ enabled: () => isTrue(settings$1.ui.projectInspector) && (isTrue(settings$1.ui.bimTreePanel) || isTrue(settings$1.ui.bimInfoPanel)),
67758
67990
  tip: "Project Inspector",
67759
- action: () => props.side.toggleContent("bim"),
67991
+ action: () => side.toggleContent("bim"),
67760
67992
  icon: treeView,
67761
67993
  style: buttonDefaultStyle
67762
67994
  },
67763
67995
  {
67764
67996
  id: elementIds.buttonSettings,
67765
- enabled: () => isTrue(props.settings.ui.settings),
67997
+ enabled: () => isTrue(settings$1.ui.settings),
67766
67998
  tip: "Settings",
67767
- action: () => props.side.toggleContent("settings"),
67999
+ action: () => side.toggleContent("settings"),
67768
68000
  icon: settings,
67769
68001
  style: buttonDefaultStyle
67770
68002
  },
67771
68003
  {
67772
68004
  id: elementIds.buttonHelp,
67773
- enabled: () => isTrue(props.settings.ui.help),
68005
+ enabled: () => isTrue(settings$1.ui.help),
67774
68006
  tip: "Help",
67775
- action: () => props.modal.help(true),
68007
+ action: () => modal.help(true),
67776
68008
  icon: help,
67777
68009
  style: buttonDefaultStyle
67778
68010
  },
67779
68011
  {
67780
68012
  id: elementIds.buttonMaximize,
67781
- enabled: () => isTrue(props.settings.ui.maximise) && props.settings.capacity.canGoFullScreen,
68013
+ enabled: () => isTrue(settings$1.ui.maximise) && settings$1.capacity.canGoFullScreen,
67782
68014
  tip: fullScreen.get() ? "Minimize" : "Fullscreen",
67783
68015
  action: () => fullScreen.toggle(),
67784
68016
  icon: fullScreen.get() ? minimize : fullsScreen,
@@ -67786,112 +68018,23 @@ Averrage Date/Second ${avgDataRatePS} kb
67786
68018
  }
67787
68019
  ]
67788
68020
  };
67789
- const sectionBoxSection = {
67790
- id: elementIds.sectionSectionBox,
67791
- enable: () => !measure$1.active && section.active,
67792
- style: sectionBlueStyle,
67793
- buttons: [
67794
- {
67795
- id: elementIds.buttonSectionBoxReset,
67796
- tip: "Reset Section Box",
67797
- action: () => section.reset(),
67798
- icon: sectionBoxReset,
67799
- style: buttonBlueStyle
67800
- },
67801
- {
67802
- id: elementIds.buttonSectionBoxShrinkToSelection,
67803
- tip: "Shrink to Selection",
67804
- action: () => section.shrinkToSelection(),
67805
- icon: sectionBoxShrink,
67806
- style: buttonBlueStyle
67807
- },
67808
- {
67809
- id: elementIds.buttonSectionBoxClip,
67810
- tip: section.clip ? "Ignore Section Box" : "Clip Section Box",
67811
- action: () => section.toggleClip(),
67812
- icon: section.clip ? sectionBoxIgnore : sectionBoxClip,
67813
- style: buttonBlueStyle
67814
- },
67815
- {
67816
- id: elementIds.buttonSectionBoxDone,
67817
- tip: "Done",
67818
- action: () => section.toggle(),
67819
- icon: checkmark,
67820
- style: buttonBlueStyle
67821
- }
67822
- ]
67823
- };
67824
- const measureSection = {
67825
- id: elementIds.sectionMeasure,
67826
- enable: () => measure$1.active && !section.active,
67827
- style: sectionBlueStyle,
67828
- buttons: [
67829
- {
67830
- id: elementIds.buttonMeasureDelete,
67831
- tip: "Delete",
67832
- action: () => measure$1.clear(),
67833
- icon: trash,
67834
- style: buttonBlueStyle
67835
- },
67836
- {
67837
- id: elementIds.buttonMeasureDone,
67838
- tip: "Done",
67839
- action: () => measure$1.toggle(),
67840
- icon: checkmark,
67841
- style: buttonBlueStyle
67842
- }
67843
- ]
67844
- };
67845
- const toolSections = {
67846
- id: elementIds.sectionTools,
67847
- enable: () => anyUiToolButton(props.settings) && !measure$1.active && !section.active,
67848
- style: measure$1.active || section.active ? sectionBlueStyle : sectionDefaultStyle,
67849
- buttons: [
67850
- {
67851
- id: elementIds.buttonSectionBox,
67852
- enabled: () => isTrue(props.settings.ui.sectioningMode),
67853
- tip: "Sectioning Mode",
67854
- action: () => section.toggle(),
67855
- icon: sectionBox,
67856
- style: buttonDefaultStyle
67857
- },
67858
- {
67859
- id: elementIds.buttonMeasure,
67860
- enabled: () => isTrue(props.settings.ui.measuringMode),
67861
- tip: "Measuring Mode",
67862
- action: () => measure$1.toggle(),
67863
- icon: measure,
67864
- style: buttonDefaultStyle
67865
- },
67866
- {
67867
- id: elementIds.buttonToggleIsolation,
67868
- enabled: () => isTrue(props.settings.ui.toggleIsolation),
67869
- tip: "Toggle Isolation",
67870
- action: () => props.isolation.toggle("controlBar"),
67871
- icon: toggleIsolation,
67872
- style: buttonDefaultStyle
67873
- }
67874
- ]
67875
- };
67876
- let controlBar2 = [cameraSection, toolSections, measureSection, sectionBoxSection, settingsSection];
67877
- controlBar2 = ((_a2 = props.customization) == null ? void 0 : _a2.call(props, controlBar2)) ?? controlBar2;
67878
- return createBar(controlBar2);
67879
68021
  }
67880
- function createBar(sections) {
67881
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
67882
- gap: "min(10px, 2%)",
67883
- bottom: "min(36px, 10%)"
67884
- }, className: "vim-control-bar vc-pointer-events-auto vc-flex-wrap vc-mx-2 vc-min-w-0 vc-absolute vc-left-0 vc-right-0 vc-z-20 vc-flex vc-items-center vc-justify-center transition-all", children: sections.map(createSection$1) });
68022
+ function useControlBar(viewer, camera2, modal, side, isolation, cursor, settings2, section, customization) {
68023
+ const measure2 = getMeasureState(viewer, cursor);
68024
+ const pointerSection = controlBarPointer(viewer, camera2, settings2);
68025
+ const actionSection = controlBarActions(camera2, settings2, isolation, measure2);
68026
+ const sectionBoxSection = controlBarSectionBox(section, viewer.selection.count > 0);
68027
+ const settingsSection = controlBarSettings(modal, side, settings2);
68028
+ let controlBarSections = [
68029
+ pointerSection,
68030
+ actionSection,
68031
+ sectionBoxSection,
68032
+ // Optional section
68033
+ settingsSection
68034
+ ];
68035
+ controlBarSections = (customization == null ? void 0 : customization(controlBarSections)) ?? controlBarSections;
68036
+ return controlBarSections;
67885
68037
  }
67886
- const controlBar = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
67887
- __proto__: null,
67888
- ControlBar,
67889
- buttonBlueStyle,
67890
- buttonDefaultStyle,
67891
- elementIds,
67892
- sectionBlueStyle,
67893
- sectionDefaultStyle
67894
- }, Symbol.toStringTag, { value: "Module" }));
67895
68038
  function RestOfScreen(props) {
67896
68039
  const [, setVersion] = React2.useState(0);
67897
68040
  const resizeObserver = React2.useRef();
@@ -71880,23 +72023,23 @@ Averrage Date/Second ${avgDataRatePS} kb
71880
72023
  const viewer = props.viewer;
71881
72024
  const camera2 = props.camera;
71882
72025
  const [section, setSection] = React2.useState({
71883
- visible: viewer.gizmos.section.visible,
71884
- clip: viewer.gizmos.section.clip
72026
+ visible: viewer.gizmos.sectionBox.visible,
72027
+ clip: viewer.gizmos.sectionBox.clip
71885
72028
  });
71886
72029
  const isClipping = () => {
71887
- return !viewer.gizmos.section.box.containsBox(viewer.renderer.getBoundingBox());
72030
+ return !viewer.gizmos.sectionBox.box.containsBox(viewer.renderer.getBoundingBox());
71888
72031
  };
71889
72032
  const [clipping, setClipping] = React2.useState(isClipping());
71890
72033
  const [, setVersion] = React2.useState(0);
71891
72034
  const hidden2 = props.isolation.isActive();
71892
72035
  React2.useEffect(() => {
71893
- const subState = viewer.gizmos.section.onStateChanged.subscribe(() => {
72036
+ const subState = viewer.gizmos.sectionBox.onStateChanged.subscribe(() => {
71894
72037
  setSection({
71895
- visible: viewer.gizmos.section.visible,
71896
- clip: viewer.gizmos.section.clip
72038
+ visible: viewer.gizmos.sectionBox.visible,
72039
+ clip: viewer.gizmos.sectionBox.clip
71897
72040
  });
71898
72041
  });
71899
- const subConfirm = viewer.gizmos.section.onBoxConfirm.subscribe(
72042
+ const subConfirm = viewer.gizmos.sectionBox.onBoxConfirm.subscribe(
71900
72043
  () => setClipping(isClipping())
71901
72044
  );
71902
72045
  props.isolation.onChanged.subscribe(() => setVersion((v) => v + 1));
@@ -71948,10 +72091,10 @@ Averrage Date/Second ${avgDataRatePS} kb
71948
72091
  e.stopPropagation();
71949
72092
  };
71950
72093
  const onSectionToggleBtn = (e) => {
71951
- viewer.gizmos.section.clip = !viewer.gizmos.section.clip;
72094
+ viewer.gizmos.sectionBox.clip = !viewer.gizmos.sectionBox.clip;
71952
72095
  };
71953
72096
  const onSectionResetBtn = (e) => {
71954
- viewer.gizmos.section.fitBox(viewer.renderer.getBoundingBox());
72097
+ viewer.gizmos.sectionBox.fitBox(viewer.renderer.getBoundingBox());
71955
72098
  e.stopPropagation();
71956
72099
  };
71957
72100
  const onMeasureDeleteBtn = (e) => {
@@ -71960,7 +72103,7 @@ Averrage Date/Second ${avgDataRatePS} kb
71960
72103
  const onFitSectionToSelectionBtn = (e) => {
71961
72104
  const box = viewer.selection.getBoundingBox();
71962
72105
  if (box) {
71963
- viewer.gizmos.section.fitBox(box);
72106
+ viewer.gizmos.sectionBox.fitBox(box);
71964
72107
  }
71965
72108
  };
71966
72109
  const createButton2 = (button) => {
@@ -74918,7 +75061,7 @@ Averrage Date/Second ${avgDataRatePS} kb
74918
75061
  frameSelection(duration = 1) {
74919
75062
  if (this._viewer.selection.count === 0) return;
74920
75063
  const box = this._viewer.selection.getBoundingBox();
74921
- if (box && this._viewer.gizmos.section.box.intersectsBox(box)) {
75064
+ if (box && this._viewer.gizmos.sectionBox.box.intersectsBox(box)) {
74922
75065
  const movement = duration === 0 ? this._viewer.camera.snap() : this._viewer.camera.lerp(duration);
74923
75066
  movement.frame(box);
74924
75067
  }
@@ -75567,6 +75710,223 @@ Averrage Date/Second ${avgDataRatePS} kb
75567
75710
  component.classList.remove("behind");
75568
75711
  }
75569
75712
  }
75713
+ function SectionBoxPanel(props) {
75714
+ const [panelPosition, setPanelPosition] = React2.useState({
75715
+ top: 0,
75716
+ left: 0
75717
+ });
75718
+ const panelRef = React2.useRef(null);
75719
+ React2.useLayoutEffect(() => {
75720
+ const updatePosition = () => {
75721
+ const { top, left } = computePosition(panelRef);
75722
+ setPanelPosition({ top, left });
75723
+ };
75724
+ updatePosition();
75725
+ let resizeObserver = null;
75726
+ if (panelRef.current) {
75727
+ resizeObserver = new ResizeObserver(updatePosition);
75728
+ resizeObserver.observe(panelRef.current.parentElement);
75729
+ }
75730
+ return () => {
75731
+ if (resizeObserver) {
75732
+ resizeObserver.disconnect();
75733
+ }
75734
+ };
75735
+ }, [props.state.getOffsetVisible()]);
75736
+ if (!props.state.getOffsetVisible()) return null;
75737
+ const renderField = (id2, label, field) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "vim-sectionbox-offsets-entry vc-text-xs vc-flex vc-items-center vc-justify-center vc-justify-between vc-my-2", children: [
75738
+ /* @__PURE__ */ jsxRuntimeExports.jsx("dt", { className: "vc-w-1/2 vc-inline", children: label }),
75739
+ /* @__PURE__ */ jsxRuntimeExports.jsx("dd", { className: "vc-w-1/3 vc-inline", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
75740
+ "input",
75741
+ {
75742
+ id: id2,
75743
+ type: "text",
75744
+ value: props.state.getText(field),
75745
+ onChange: (e) => props.state.setText(field, e.target.value),
75746
+ className: "vc-border vc-inline vc-border-gray-300 vc-py-1 vc-w-full vc-px-1",
75747
+ onBlur: () => props.state.validate(field)
75748
+ }
75749
+ ) })
75750
+ ] });
75751
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
75752
+ "div",
75753
+ {
75754
+ className: "vc-fixed vc-inset-0 vc-flex vc-pointer-events-none",
75755
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
75756
+ "div",
75757
+ {
75758
+ ref: panelRef,
75759
+ style: { position: "absolute", top: panelPosition.top, left: panelPosition.left, width: "min(200px, 60%)" },
75760
+ className: "vim-sectionbox-offsets vc-pointer-events-auto vc-bg-white vc-relative",
75761
+ onClick: (e) => e.stopPropagation(),
75762
+ children: [
75763
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "vim-sectionbox-header vc-px-2 vc-bg-gray-light vc-flex vc-items-center vc-justify-between ", children: [
75764
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "vc-flex vim-sectionbox-offsets-title vc-title vc-block", children: "Section Box Offsets" }),
75765
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
75766
+ "button",
75767
+ {
75768
+ className: "vc-flex vc-border-none vc-bg-transparent vc-text-sm vc-cursor-pointer",
75769
+ onClick: () => props.state.setOffsetsVisible(false),
75770
+ children: close({ height: 12, width: 12, fill: "currentColor" })
75771
+ }
75772
+ )
75773
+ ] }),
75774
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("dl", { className: "vc-text-xl vc-text-gray-darker vc-mb-2 vc-mx-2 ", children: [
75775
+ renderField("topOffset", "Top Offset", "topOffset"),
75776
+ renderField("sideOffseet", "Side Offset", "sideOffset"),
75777
+ renderField("bottomOffset", "Bottom Offset", "bottomOffset")
75778
+ ] })
75779
+ ]
75780
+ }
75781
+ )
75782
+ }
75783
+ );
75784
+ }
75785
+ function computePosition(panelRef) {
75786
+ const origin = document.getElementById("vim-control-bar");
75787
+ if (origin && panelRef.current) {
75788
+ const originRect = origin.getBoundingClientRect();
75789
+ const panelRect = panelRef.current.getBoundingClientRect();
75790
+ let left = originRect.left + originRect.width / 2 - panelRect.width / 2;
75791
+ let top = originRect.top - 10 - panelRect.height;
75792
+ if (top < 10) {
75793
+ top = originRect.bottom + 10;
75794
+ }
75795
+ if (left < 10) {
75796
+ left = 10;
75797
+ }
75798
+ if (left + panelRect.width > window.innerWidth - 10) {
75799
+ left = window.innerWidth - panelRect.width - 10;
75800
+ }
75801
+ return { top, left };
75802
+ }
75803
+ return { top: 0, left: 0 };
75804
+ }
75805
+ function addBox(b1, b2) {
75806
+ const r = b1.clone();
75807
+ r.min.x += b2.min.x;
75808
+ r.min.y += b2.min.y;
75809
+ r.min.z += b2.min.z;
75810
+ r.max.x += b2.max.x;
75811
+ r.max.y += b2.max.y;
75812
+ r.max.z += b2.max.z;
75813
+ return r;
75814
+ }
75815
+ function useSectionBox(adapter) {
75816
+ const [enable, setEnable] = React2.useState(false);
75817
+ const [visible2, setVisible] = React2.useState(false);
75818
+ const [offsetsVisible, setOffsetsVisible] = React2.useState(false);
75819
+ const [auto, setAuto] = React2.useState(false);
75820
+ const [offsets, setOffsets] = React2.useState({
75821
+ topOffset: "1",
75822
+ sideOffset: "1",
75823
+ bottomOffset: "1"
75824
+ });
75825
+ const boxRef = React2.useRef(adapter.getBox());
75826
+ const offsetBox = React2.useMemo(() => offsetsToBox3(offsets), [offsets]);
75827
+ React2.useEffect(() => {
75828
+ setVisible(enable);
75829
+ setAuto(false);
75830
+ setOffsetsVisible(false);
75831
+ setOffsets({
75832
+ topOffset: "1",
75833
+ sideOffset: "1",
75834
+ bottomOffset: "1"
75835
+ });
75836
+ void resetBox();
75837
+ }, [enable]);
75838
+ React2.useEffect(() => {
75839
+ if (auto) sectionSelection();
75840
+ return auto ? adapter.onSelectionChanged.sub(sectionSelection) : () => {
75841
+ };
75842
+ }, [auto]);
75843
+ React2.useEffect(() => {
75844
+ setBox(boxRef.current);
75845
+ }, [offsets]);
75846
+ React2.useEffect(() => {
75847
+ adapter.setVisible(visible2);
75848
+ }, [visible2]);
75849
+ const setText = (field, value) => {
75850
+ const result = sanitize(value, false);
75851
+ if (result !== void 0) {
75852
+ setOffsets((prev) => ({ ...prev, [field]: result }));
75853
+ }
75854
+ };
75855
+ const validate = (field) => {
75856
+ const result = sanitize(offsets[field], true);
75857
+ if (result !== void 0) {
75858
+ setOffsets((prev) => ({ ...prev, [field]: result }));
75859
+ }
75860
+ };
75861
+ const setBox = (baseBox) => {
75862
+ boxRef.current = baseBox;
75863
+ const newBox = addBox(baseBox, offsetBox);
75864
+ adapter.fitBox(newBox);
75865
+ };
75866
+ const sectionSelection = async () => {
75867
+ try {
75868
+ const box = await adapter.getSelectionBox() ?? await adapter.getRendererBox();
75869
+ setBox(box);
75870
+ } catch (e) {
75871
+ console.error(e);
75872
+ }
75873
+ };
75874
+ const resetBox = async () => {
75875
+ const box = await adapter.getRendererBox();
75876
+ setBox(box);
75877
+ };
75878
+ return {
75879
+ setEnable,
75880
+ getEnable: () => enable,
75881
+ getVisible: () => visible2,
75882
+ setVisible,
75883
+ sectionSelection,
75884
+ sectionReset: resetBox,
75885
+ getOffsetVisible: () => offsetsVisible,
75886
+ setOffsetsVisible,
75887
+ getText: (field) => offsets[field],
75888
+ setText,
75889
+ getAuto: () => auto,
75890
+ setAuto,
75891
+ validate
75892
+ };
75893
+ }
75894
+ const sanitize = (value, strict) => {
75895
+ if (!strict) {
75896
+ if (value === "" || value === "-") return value;
75897
+ }
75898
+ const num = parseFloat(value);
75899
+ if (isNaN(num)) {
75900
+ return strict ? "1" : void 0;
75901
+ }
75902
+ return String(num);
75903
+ };
75904
+ function offsetsToBox3(offsets) {
75905
+ const getNumber = (field) => {
75906
+ const num = parseFloat(offsets[field]);
75907
+ return isNaN(num) ? 0 : num;
75908
+ };
75909
+ return new Box3(
75910
+ new Vector3(-getNumber("sideOffset"), -getNumber("sideOffset"), -getNumber("bottomOffset")),
75911
+ new Vector3(getNumber("sideOffset"), getNumber("sideOffset"), getNumber("topOffset"))
75912
+ );
75913
+ }
75914
+ function useWebglSectionBox(viewer) {
75915
+ const vimAdapter = {
75916
+ setVisible: (b) => {
75917
+ viewer.gizmos.sectionBox.visible = b;
75918
+ viewer.gizmos.sectionBox.interactive = b;
75919
+ },
75920
+ getBox: () => viewer.gizmos.sectionBox.box.clone(),
75921
+ fitBox: (box) => viewer.gizmos.sectionBox.fitBox(box),
75922
+ getSelectionBox: () => Promise.resolve(viewer.selection.getBoundingBox()),
75923
+ getRendererBox: () => Promise.resolve(viewer.renderer.getBoundingBox()),
75924
+ onSceneChanged: viewer.renderer.onBoxUpdated,
75925
+ onSelectionChanged: viewer.selection.onValueChanged
75926
+ };
75927
+ viewer.gizmos.sectionBox.clip = true;
75928
+ return useSectionBox(vimAdapter);
75929
+ }
75570
75930
  function createWebglComponent(container, componentSettings = {}, viewerSettings = {}) {
75571
75931
  const promise2 = new DeferredPromise();
75572
75932
  const cmpContainer = container instanceof HTMLElement ? createContainer(container) : container ?? createContainer();
@@ -75608,11 +75968,13 @@ Averrage Date/Second ${avgDataRatePS} kb
75608
75968
  Math.min(props.container.root.clientWidth * 0.25, 340)
75609
75969
  );
75610
75970
  const [contextMenu2, setcontextMenu] = React2.useState();
75611
- const [controlBar2, setControlBar] = React2.useState();
75971
+ const [controlBarCustom, setControlBarCustom] = React2.useState();
75612
75972
  const bimInfoRef = useBimInfo();
75613
75973
  const viewerState = useViewerState(props.viewer);
75614
75974
  const treeRef = React2.useRef();
75615
75975
  const performanceRef = React2.useRef(null);
75976
+ const sectionBox2 = useWebglSectionBox(props.viewer);
75977
+ const controlBar2 = useControlBar(props.viewer, camera2, modal, side, isolation, cursor, settings2.value, sectionBox2, controlBarCustom);
75616
75978
  React2.useEffect(() => {
75617
75979
  var _a3;
75618
75980
  side.setHasBim(((_a3 = viewerState.vim) == null ? void 0 : _a3.bim) !== void 0);
@@ -75641,7 +76003,7 @@ Averrage Date/Second ${avgDataRatePS} kb
75641
76003
  customize: (v) => setcontextMenu(() => v)
75642
76004
  },
75643
76005
  controlBar: {
75644
- customize: (v) => setControlBar(() => v)
76006
+ customize: (v) => setControlBarCustom(() => v)
75645
76007
  },
75646
76008
  modal,
75647
76009
  bimInfo: bimInfoRef,
@@ -75695,16 +76057,11 @@ Averrage Date/Second ${avgDataRatePS} kb
75695
76057
  /* @__PURE__ */ jsxRuntimeExports.jsx(
75696
76058
  ControlBar,
75697
76059
  {
75698
- viewer: props.viewer,
75699
- camera: camera2,
75700
- modal,
75701
- side,
75702
- isolation,
75703
- cursor,
75704
- settings: settings2.value,
75705
- customization: controlBar2
76060
+ content: controlBar2,
76061
+ show: isTrue(settings2.value.ui.controlBar)
75706
76062
  }
75707
76063
  ),
76064
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SectionBoxPanel, { state: sectionBox2 }),
75708
76065
  /* @__PURE__ */ jsxRuntimeExports.jsx(
75709
76066
  AxesPanelMemo,
75710
76067
  {
@@ -76030,12 +76387,53 @@ Averrage Date/Second ${avgDataRatePS} kb
76030
76387
  return serverConnectionError(source.url);
76031
76388
  }
76032
76389
  }
76390
+ function updateModal(modal, state) {
76391
+ if (state.status === "connected") {
76392
+ modal.loading(void 0);
76393
+ modal.message(void 0);
76394
+ }
76395
+ if (state.status === "connecting") {
76396
+ if (modal.current === void 0 || modal.current.type === "loading") {
76397
+ modal.loading({ message: "Connecting to VIM Ultra server..." });
76398
+ }
76399
+ }
76400
+ if (state.status === "error") {
76401
+ console.log("Error loading vim", state);
76402
+ modal.message(getErrorMessage(state));
76403
+ }
76404
+ }
76405
+ async function updateProgress(request2, modal) {
76406
+ for await (const progress of request2.getProgress()) {
76407
+ if (request2.isCompleted) break;
76408
+ modal.loading({ message: "Loading File in VIM Ultra mode", progress });
76409
+ }
76410
+ }
76411
+ function useUltraSectionBox(viewer) {
76412
+ const ultraAdapter = {
76413
+ setVisible: (b) => {
76414
+ viewer.sectionBox.visible = b;
76415
+ viewer.sectionBox.interactive = b;
76416
+ },
76417
+ getBox: () => viewer.sectionBox.getBox().clone(),
76418
+ fitBox: (box) => viewer.sectionBox.fitBox(box),
76419
+ getSelectionBox: () => viewer.selection.getBoundingBox(),
76420
+ getRendererBox: () => viewer.renderer.getBoundingBox(),
76421
+ onSelectionChanged: viewer.selection.onValueChanged,
76422
+ onSceneChanged: viewer.vims.onChanged
76423
+ };
76424
+ return useSectionBox(ultraAdapter);
76425
+ }
76426
+ function useUltraControlBar(viewer, section, customization) {
76427
+ let controlBar2 = [controlBarSectionBox(section, viewer.selection.count > 0)];
76428
+ controlBar2 = (customization == null ? void 0 : customization(controlBar2)) ?? controlBar2;
76429
+ return controlBar2;
76430
+ }
76033
76431
  function createUltraComponent(container) {
76034
76432
  const promise2 = new DeferredPromise();
76035
76433
  const cmpContainer = container instanceof HTMLElement ? createContainer(container) : container ?? createContainer();
76036
76434
  const viewer = Viewer.createWithCanvas(cmpContainer.gfx);
76037
76435
  const reactRoot = clientExports.createRoot(cmpContainer.ui);
76038
- const patchRef = (cmp) => {
76436
+ const attachDispose = (cmp) => {
76039
76437
  cmp.dispose = () => {
76040
76438
  viewer.dispose();
76041
76439
  cmpContainer.dispose();
@@ -76049,7 +76447,7 @@ Averrage Date/Second ${avgDataRatePS} kb
76049
76447
  {
76050
76448
  container: cmpContainer,
76051
76449
  viewer,
76052
- onMount: (cmp) => promise2.resolve(patchRef(cmp))
76450
+ onMount: (cmp) => promise2.resolve(attachDispose(cmp))
76053
76451
  }
76054
76452
  )
76055
76453
  );
@@ -76057,31 +76455,36 @@ Averrage Date/Second ${avgDataRatePS} kb
76057
76455
  }
76058
76456
  function UltraComponent(props) {
76059
76457
  const modal = useModal(true);
76458
+ const sectionBox2 = useUltraSectionBox(props.viewer);
76459
+ const controlBar2 = useUltraControlBar(props.viewer, sectionBox2, (_2) => _2);
76460
+ const side = useSideState(true, 400);
76461
+ const [_, setSelectState] = React2.useState(0);
76060
76462
  React2.useEffect(() => {
76061
76463
  props.viewer.onStateChanged.subscribe((state) => updateModal(modal, state));
76062
- props.onMount(ToRef(props.viewer, modal));
76464
+ props.viewer.selection.onValueChanged.subscribe(() => {
76465
+ setSelectState((i2) => (i2 + 1) % 2);
76466
+ });
76467
+ props.onMount(createComponentRef(props.viewer, modal));
76063
76468
  }, []);
76064
76469
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
76065
- /* @__PURE__ */ jsxRuntimeExports.jsx(Overlay, { canvas: props.viewer.viewport.canvas }),
76470
+ /* @__PURE__ */ jsxRuntimeExports.jsx(RestOfScreen, { side, content: () => {
76471
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
76472
+ whenTrue(true, /* @__PURE__ */ jsxRuntimeExports.jsx(LogoMemo, {})),
76473
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Overlay, { canvas: props.viewer.viewport.canvas }),
76474
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
76475
+ ControlBar,
76476
+ {
76477
+ content: controlBar2,
76478
+ show: true
76479
+ }
76480
+ ),
76481
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SectionBoxPanel, { state: sectionBox2 })
76482
+ ] });
76483
+ } }),
76066
76484
  /* @__PURE__ */ jsxRuntimeExports.jsx(Modal, { state: modal })
76067
76485
  ] });
76068
76486
  }
76069
- function updateModal(modal, state) {
76070
- if (state.status === "connected") {
76071
- modal.loading(void 0);
76072
- modal.message(void 0);
76073
- }
76074
- if (state.status === "connecting") {
76075
- if (modal.current === void 0 || modal.current.type === "loading") {
76076
- modal.loading({ message: "Connecting to VIM Ultra server..." });
76077
- }
76078
- }
76079
- if (state.status === "error") {
76080
- console.log("Error loading vim", state);
76081
- modal.message(getErrorMessage(state));
76082
- }
76083
- }
76084
- function ToRef(viewer, modal) {
76487
+ function createComponentRef(viewer, modal) {
76085
76488
  function load(source) {
76086
76489
  const request2 = viewer.loadVim(source);
76087
76490
  void updateProgress(request2, modal);
@@ -76106,12 +76509,6 @@ Averrage Date/Second ${avgDataRatePS} kb
76106
76509
  load
76107
76510
  };
76108
76511
  }
76109
- async function updateProgress(request2, modal) {
76110
- for await (const progress of request2.getProgress()) {
76111
- if (request2.isCompleted) break;
76112
- modal.loading({ message: "Loading File in VIM Ultra mode", progress });
76113
- }
76114
- }
76115
76512
  const index = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
76116
76513
  __proto__: null,
76117
76514
  UltraComponent,