@dtducas/wh-forge-viewer 3.0.0-beta.2 → 3.0.0-beta.4

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/dist/index.d.ts CHANGED
@@ -582,8 +582,7 @@ declare module '@dtducas/wh-forge-viewer' {
582
582
  */
583
583
  export type OnLocalCursorMoveCallback = (payload: {
584
584
  position: { x: number; y: number };
585
- screenPosition: { x: number; y: number };
586
- timestamp: number;
585
+ coordSystem: 'markup' | 'percent';
587
586
  }) => void;
588
587
 
589
588
  /**
package/dist/index.esm.js CHANGED
@@ -94818,7 +94818,9 @@ function MinimapPanel(_ref) {
94818
94818
  totalPages = _ref$totalPages === void 0 ? 1 : _ref$totalPages,
94819
94819
  viewableGuid = _ref.viewableGuid,
94820
94820
  filePath = _ref.filePath,
94821
- onClose = _ref.onClose;
94821
+ onClose = _ref.onClose,
94822
+ _ref$sidebarOffset = _ref.sidebarOffset,
94823
+ sidebarOffset = _ref$sidebarOffset === void 0 ? 56 : _ref$sidebarOffset;
94822
94824
  var _useMinimapThumbnail = useMinimapThumbnail({
94823
94825
  filePath: filePath,
94824
94826
  viewableGuid: viewableGuid,
@@ -95039,7 +95041,9 @@ function MinimapPanel(_ref) {
95039
95041
  var panelStyle = position ? {
95040
95042
  left: position.x,
95041
95043
  top: position.y
95042
- } : {};
95044
+ } : {
95045
+ left: sidebarOffset
95046
+ };
95043
95047
  return jsxs("div", {
95044
95048
  ref: panelRef,
95045
95049
  className: "wh-minimap-panel".concat(shouldShow ? ' wh-minimap-panel--visible' : ''),
@@ -95696,7 +95700,9 @@ function ViewerSidebar(_ref3) {
95696
95700
  _ref3$hidePanels = _ref3.hidePanels,
95697
95701
  hidePanels = _ref3$hidePanels === void 0 ? [] : _ref3$hidePanels,
95698
95702
  _ref3$className = _ref3.className,
95699
- className = _ref3$className === void 0 ? '' : _ref3$className;
95703
+ className = _ref3$className === void 0 ? '' : _ref3$className,
95704
+ isDraftShared = _ref3.isDraftShared,
95705
+ onToggleDraftShared = _ref3.onToggleDraftShared;
95700
95706
  var handleClick = function handleClick(panel) {
95701
95707
  // Toggle off if already active
95702
95708
  onPanelChange === null || onPanelChange === void 0 || onPanelChange(activePanel === panel ? null : panel);
@@ -95741,6 +95747,62 @@ function ViewerSidebar(_ref3) {
95741
95747
  children: jsx(IconSubmit, {})
95742
95748
  }), jsx("div", {
95743
95749
  className: 'wh-sidebar-spacer'
95750
+ }), onToggleDraftShared !== undefined && jsxs(Fragment, {
95751
+ children: [jsx("hr", {
95752
+ className: 'wh-sidebar-divider'
95753
+ }), jsx("button", {
95754
+ type: 'button',
95755
+ className: 'wh-sidebar-btn',
95756
+ "data-tooltip": isDraftShared ? 'Stop sharing draft' : 'Share draft',
95757
+ "aria-pressed": isDraftShared,
95758
+ onClick: function onClick() {
95759
+ return onToggleDraftShared(!isDraftShared);
95760
+ },
95761
+ style: {
95762
+ width: 36,
95763
+ height: 36,
95764
+ borderRadius: 6,
95765
+ border: isDraftShared ? '1.5px solid #6366f1' : '1.5px solid transparent',
95766
+ background: isDraftShared ? '#ede9fe' : undefined,
95767
+ color: isDraftShared ? '#6366f1' : '#6b7280',
95768
+ flexShrink: 0,
95769
+ transition: 'border-color 0.15s, background 0.15s, color 0.15s'
95770
+ },
95771
+ children: jsxs("svg", {
95772
+ width: '18',
95773
+ height: '18',
95774
+ viewBox: '0 0 24 24',
95775
+ fill: 'none',
95776
+ stroke: 'currentColor',
95777
+ strokeWidth: '2',
95778
+ strokeLinecap: 'round',
95779
+ strokeLinejoin: 'round',
95780
+ "aria-hidden": 'true',
95781
+ children: [jsx("circle", {
95782
+ cx: '18',
95783
+ cy: '5',
95784
+ r: '3'
95785
+ }), jsx("circle", {
95786
+ cx: '6',
95787
+ cy: '12',
95788
+ r: '3'
95789
+ }), jsx("circle", {
95790
+ cx: '18',
95791
+ cy: '19',
95792
+ r: '3'
95793
+ }), jsx("line", {
95794
+ x1: '8.59',
95795
+ y1: '13.51',
95796
+ x2: '15.42',
95797
+ y2: '17.49'
95798
+ }), jsx("line", {
95799
+ x1: '15.41',
95800
+ y1: '6.51',
95801
+ x2: '8.59',
95802
+ y2: '10.49'
95803
+ })]
95804
+ })
95805
+ })]
95744
95806
  }), jsx("hr", {
95745
95807
  className: 'wh-sidebar-divider'
95746
95808
  }), jsx(PresenceIndicator, {
@@ -95813,6 +95875,9 @@ var ViewerForgePDF = function ViewerForgePDF(_ref) {
95813
95875
  checkSubmitHasMarkup = _ref.checkSubmitHasMarkup,
95814
95876
  _ref$defaultActiveSid = _ref.defaultActiveSidebarPanel,
95815
95877
  defaultActiveSidebarPanel = _ref$defaultActiveSid === void 0 ? null : _ref$defaultActiveSid,
95878
+ onSidebarWidthChange = _ref.onSidebarWidthChange,
95879
+ isDraftShared = _ref.isDraftShared,
95880
+ onToggleDraftShared = _ref.onToggleDraftShared,
95816
95881
  collabAdapter = _ref.collabAdapter,
95817
95882
  collabActorId = _ref.collabActorId,
95818
95883
  collabDrawingId = _ref.collabDrawingId,
@@ -95927,6 +95992,7 @@ var ViewerForgePDF = function ViewerForgePDF(_ref) {
95927
95992
  }, [onPublish]);
95928
95993
  var collabSessionRef = useRef(null);
95929
95994
  var canvasExportServiceRef = useRef(null);
95995
+ var cursorCleanupRef = useRef(null);
95930
95996
  var getExportViewablePagesRef = useRef(getExportViewablePages);
95931
95997
  useEffect(function () {
95932
95998
  getExportViewablePagesRef.current = getExportViewablePages;
@@ -96039,7 +96105,7 @@ var ViewerForgePDF = function ViewerForgePDF(_ref) {
96039
96105
  onSuccess: function () {
96040
96106
  var _onSuccess = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
96041
96107
  var _sceneBuilderService$, _sceneBuilderService;
96042
- var engine, _engine$stamps, _engine$stamps2, _engine$stamps3, capabilities, enhancedViewer, _engine$markup;
96108
+ var engine, _engine$stamps, _engine$stamps2, _engine$stamps3, capabilities, enhancedViewer, _engine$markup, _cursorCallbacks, _cursorContainer, _onPointerMove;
96043
96109
  return _regenerator().w(function (_context) {
96044
96110
  while (1) switch (_context.n) {
96045
96111
  case 0:
@@ -96111,6 +96177,41 @@ var ViewerForgePDF = function ViewerForgePDF(_ref) {
96111
96177
 
96112
96178
  // Viewer presets
96113
96179
  enhancedViewer.presetManager = presetManager;
96180
+
96181
+ // ─── World-space cursor tracking ──────────────────────────
96182
+ // Emit pointer-move events in Forge world space so remote cursors
96183
+ // are zoom-invariant and screen-size-invariant on all receivers.
96184
+ _cursorCallbacks = new Set();
96185
+ enhancedViewer.onLocalCursorMove = function (cb) {
96186
+ _cursorCallbacks.add(cb);
96187
+ return function () {
96188
+ return _cursorCallbacks["delete"](cb);
96189
+ };
96190
+ };
96191
+ _cursorContainer = viewer.container;
96192
+ _onPointerMove = function _onPointerMove(e) {
96193
+ if (!_cursorCallbacks.size) return;
96194
+ var rect = _cursorContainer.getBoundingClientRect();
96195
+ var hit = viewer.clientToWorld(e.clientX - rect.left, e.clientY - rect.top, true);
96196
+ if (!(hit !== null && hit !== void 0 && hit.point)) return;
96197
+ var payload = {
96198
+ position: {
96199
+ x: hit.point.x,
96200
+ y: hit.point.y
96201
+ },
96202
+ coordSystem: 'markup'
96203
+ };
96204
+ _cursorCallbacks.forEach(function (cb) {
96205
+ return cb(payload);
96206
+ });
96207
+ };
96208
+ _cursorContainer.addEventListener('pointermove', _onPointerMove, {
96209
+ passive: true
96210
+ });
96211
+ cursorCleanupRef.current = function () {
96212
+ _cursorContainer.removeEventListener('pointermove', _onPointerMove);
96213
+ delete enhancedViewer.onLocalCursorMove;
96214
+ };
96114
96215
  setViewer(enhancedViewer);
96115
96216
  }
96116
96217
  case 4:
@@ -96151,7 +96252,9 @@ var ViewerForgePDF = function ViewerForgePDF(_ref) {
96151
96252
  }();
96152
96253
  initializeViewer();
96153
96254
  return function () {
96154
- var _canvasExportServiceR, _markupMgrRef$current, _overlayManagerRef$cu, _sceneBuilderRef$curr;
96255
+ var _cursorCleanupRef$cur, _canvasExportServiceR, _markupMgrRef$current, _overlayManagerRef$cu, _sceneBuilderRef$curr;
96256
+ (_cursorCleanupRef$cur = cursorCleanupRef.current) === null || _cursorCleanupRef$cur === void 0 || _cursorCleanupRef$cur.call(cursorCleanupRef);
96257
+ cursorCleanupRef.current = null;
96155
96258
  (_canvasExportServiceR = canvasExportServiceRef.current) === null || _canvasExportServiceR === void 0 || _canvasExportServiceR.destroy();
96156
96259
  canvasExportServiceRef.current = null;
96157
96260
  (_markupMgrRef$current = markupMgrRef.current) === null || _markupMgrRef$current === void 0 || _markupMgrRef$current.destroy();
@@ -96577,6 +96680,11 @@ var ViewerForgePDF = function ViewerForgePDF(_ref) {
96577
96680
  viewerInstance === null || viewerInstance === void 0 || (_viewerInstance$resiz = viewerInstance.resize) === null || _viewerInstance$resiz === void 0 || _viewerInstance$resiz.call(viewerInstance);
96578
96681
  }, [viewerInstance, activeSidebarPanel, panelWidth, showDrawer, drawerWidth]);
96579
96682
 
96683
+ // Notify host app of total sidebar width so it can adjust external layout.
96684
+ useEffect(function () {
96685
+ onSidebarWidthChange === null || onSidebarWidthChange === void 0 || onSidebarWidthChange(activeSidebarPanel ? 44 + panelWidth : 0);
96686
+ }, [activeSidebarPanel, panelWidth, onSidebarWidthChange]);
96687
+
96580
96688
  // ─── Callbacks ────────────────────────────────────────────────────────────
96581
96689
  var handleDrawerPropertyChange = useCallback(function (key, value) {
96582
96690
  var _markupMgrRef$current4;
@@ -96678,7 +96786,9 @@ var ViewerForgePDF = function ViewerForgePDF(_ref) {
96678
96786
  onPanelChange: setActiveSidebarPanel,
96679
96787
  onlineUsers: onlineUsers,
96680
96788
  showSubmitPanel: !!submitConfig,
96681
- hidePanels: hidePanels
96789
+ hidePanels: hidePanels,
96790
+ isDraftShared: onToggleDraftShared !== undefined ? isDraftShared !== null && isDraftShared !== void 0 ? isDraftShared : false : undefined,
96791
+ onToggleDraftShared: onToggleDraftShared
96682
96792
  }), activeSidebarPanel === 'sheets' && /*#__PURE__*/jsx(SheetsPanel, {
96683
96793
  viewables: viewables,
96684
96794
  currentIndex: currentPageIndex,
@@ -96745,7 +96855,8 @@ var ViewerForgePDF = function ViewerForgePDF(_ref) {
96745
96855
  filePath: filePath,
96746
96856
  onClose: function onClose() {
96747
96857
  return setShowMinimap(false);
96748
- }
96858
+ },
96859
+ sidebarOffset: activeSidebarPanel ? 44 + panelWidth + 8 : 52
96749
96860
  }), showMarkupToolbar && markupEngineInstance && /*#__PURE__*/jsx(SelectionActionToolbar, {
96750
96861
  engine: markupEngineInstance,
96751
96862
  viewerContainer: viewerContainerRef.current,