@arbidocs/blocks 0.5.123 → 0.5.125

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 (192) hide show
  1. package/dist/{ClippingMediaViewer-IEIBT74X.cjs → ClippingMediaViewer-ZFEX5A3U.cjs} +11 -10
  2. package/dist/ClippingMediaViewer-ZFEX5A3U.cjs.map +1 -0
  3. package/dist/{ClippingPdfViewer-OGYLMVCE.cjs → ClippingPdfViewer-3LRTEPHV.cjs} +45 -11
  4. package/dist/ClippingPdfViewer-3LRTEPHV.cjs.map +1 -0
  5. package/dist/ConnectedCallDock-XJOYVVAH.cjs +6 -6
  6. package/dist/ConnectedCallRoom-CUDYAPQK.cjs +6 -6
  7. package/dist/{ConnectedNativeDocxComparison-QKHCYD6W.cjs → ConnectedNativeDocxComparison-7QQ55JIO.cjs} +13 -13
  8. package/dist/{ConnectedNativeDocxComparison-QKHCYD6W.cjs.map → ConnectedNativeDocxComparison-7QQ55JIO.cjs.map} +1 -1
  9. package/dist/{ConnectedPresentation-5DOJ35XL.cjs → ConnectedPresentation-L32JPRFI.cjs} +30 -156
  10. package/dist/ConnectedPresentation-L32JPRFI.cjs.map +1 -0
  11. package/dist/{ConnectedProductionSetDialog-LHB4VQWC.cjs → ConnectedProductionSetDialog-4EAY6KAZ.cjs} +3 -3
  12. package/dist/{ConnectedProductionSetDialog-LHB4VQWC.cjs.map → ConnectedProductionSetDialog-4EAY6KAZ.cjs.map} +1 -1
  13. package/dist/{ConnectedSlidesTab-7YMEDGUU.cjs → ConnectedSlidesTab-P7GGNUTO.cjs} +31 -29
  14. package/dist/ConnectedSlidesTab-P7GGNUTO.cjs.map +1 -0
  15. package/dist/{ConnectedStreamedWordArtifact-AG62232A.cjs → ConnectedStreamedWordArtifact-7NJ3N52V.cjs} +13 -13
  16. package/dist/{ConnectedStreamedWordArtifact-AG62232A.cjs.map → ConnectedStreamedWordArtifact-7NJ3N52V.cjs.map} +1 -1
  17. package/dist/{DocumentReviewCard-M53XFLI2.cjs → DocumentReviewCard-BFPOFQXI.cjs} +16 -16
  18. package/dist/{DocumentReviewCard-M53XFLI2.cjs.map → DocumentReviewCard-BFPOFQXI.cjs.map} +1 -1
  19. package/dist/{FilesViewerDialog-2QCCRWF2.cjs → FilesViewerDialog-MHUVEZ7M.cjs} +35 -32
  20. package/dist/FilesViewerDialog-MHUVEZ7M.cjs.map +1 -0
  21. package/dist/{NativeDocxEditor-2LQY2CTV.cjs → NativeDocxEditor-SIRYPMBN.cjs} +6 -6
  22. package/dist/{NativeDocxEditor-2LQY2CTV.cjs.map → NativeDocxEditor-SIRYPMBN.cjs.map} +1 -1
  23. package/dist/SpotlightStrip-ED22UYTM.cjs +398 -0
  24. package/dist/SpotlightStrip-ED22UYTM.cjs.map +1 -0
  25. package/dist/{WorkspaceTableView-3XYAV4BV.cjs → WorkspaceTableView-MIFYXV3G.cjs} +8 -8
  26. package/dist/{WorkspaceTableView-3XYAV4BV.cjs.map → WorkspaceTableView-MIFYXV3G.cjs.map} +1 -1
  27. package/dist/agents/index.cjs +216 -216
  28. package/dist/ai-IEIR7SC2.cjs +3 -3
  29. package/dist/auth/index.cjs +1 -1
  30. package/dist/calls/index.cjs +2 -2
  31. package/dist/chat/index.cjs +6 -6
  32. package/dist/{chunk-GNZAH6UI.cjs → chunk-2K6IMIVL.cjs} +3 -3
  33. package/dist/{chunk-GNZAH6UI.cjs.map → chunk-2K6IMIVL.cjs.map} +1 -1
  34. package/dist/{chunk-NQML7IUC.cjs → chunk-3UP32FM3.cjs} +6 -6
  35. package/dist/{chunk-NQML7IUC.cjs.map → chunk-3UP32FM3.cjs.map} +1 -1
  36. package/dist/chunk-3ZZZO4F7.cjs +145 -0
  37. package/dist/chunk-3ZZZO4F7.cjs.map +1 -0
  38. package/dist/{chunk-L4CIFLCU.cjs → chunk-4LP5MJGQ.cjs} +4 -4
  39. package/dist/{chunk-L4CIFLCU.cjs.map → chunk-4LP5MJGQ.cjs.map} +1 -1
  40. package/dist/{chunk-JD2HX2BR.cjs → chunk-6JMW3IJ2.cjs} +152 -155
  41. package/dist/chunk-6JMW3IJ2.cjs.map +1 -0
  42. package/dist/{chunk-WV7BCGCK.cjs → chunk-7RJZIPLE.cjs} +33 -33
  43. package/dist/{chunk-WV7BCGCK.cjs.map → chunk-7RJZIPLE.cjs.map} +1 -1
  44. package/dist/{chunk-WFMWKPGY.cjs → chunk-ADPRIBSH.cjs} +9 -33
  45. package/dist/chunk-ADPRIBSH.cjs.map +1 -0
  46. package/dist/{chunk-7NLO7ASW.cjs → chunk-AISYXX4M.cjs} +4 -4
  47. package/dist/{chunk-7NLO7ASW.cjs.map → chunk-AISYXX4M.cjs.map} +1 -1
  48. package/dist/{chunk-5QERK4PK.cjs → chunk-AS6QZETU.cjs} +35 -35
  49. package/dist/{chunk-5QERK4PK.cjs.map → chunk-AS6QZETU.cjs.map} +1 -1
  50. package/dist/{chunk-V6MW7B4B.cjs → chunk-B3R62764.cjs} +6 -6
  51. package/dist/{chunk-V6MW7B4B.cjs.map → chunk-B3R62764.cjs.map} +1 -1
  52. package/dist/{chunk-VKH3BEZE.cjs → chunk-BLIO3B7Z.cjs} +3 -3
  53. package/dist/{chunk-VKH3BEZE.cjs.map → chunk-BLIO3B7Z.cjs.map} +1 -1
  54. package/dist/{chunk-46P7IDBX.cjs → chunk-CQ2RJYE2.cjs} +4 -4
  55. package/dist/chunk-CQ2RJYE2.cjs.map +1 -0
  56. package/dist/{chunk-MXBXZXXQ.cjs → chunk-ENOPKX7E.cjs} +3 -3
  57. package/dist/{chunk-MXBXZXXQ.cjs.map → chunk-ENOPKX7E.cjs.map} +1 -1
  58. package/dist/{chunk-2CSLFAGF.cjs → chunk-GAMRVB3I.cjs} +4 -3
  59. package/dist/chunk-GAMRVB3I.cjs.map +1 -0
  60. package/dist/chunk-IRGRMJPP.cjs +18 -0
  61. package/dist/{chunk-SDRYSLOX.cjs.map → chunk-IRGRMJPP.cjs.map} +1 -1
  62. package/dist/{chunk-ADDQKZ5I.cjs → chunk-J3FFSEKO.cjs} +4 -4
  63. package/dist/{chunk-ADDQKZ5I.cjs.map → chunk-J3FFSEKO.cjs.map} +1 -1
  64. package/dist/chunk-JITYC4OS.cjs +66 -0
  65. package/dist/chunk-JITYC4OS.cjs.map +1 -0
  66. package/dist/chunk-JY7UUZQG.cjs +1513 -0
  67. package/dist/chunk-JY7UUZQG.cjs.map +1 -0
  68. package/dist/{chunk-ALK3PUUB.cjs → chunk-L6HTZIBD.cjs} +3 -3
  69. package/dist/{chunk-ALK3PUUB.cjs.map → chunk-L6HTZIBD.cjs.map} +1 -1
  70. package/dist/chunk-MVXHTAJ4.cjs +111 -0
  71. package/dist/chunk-MVXHTAJ4.cjs.map +1 -0
  72. package/dist/{chunk-OHHKBURG.cjs → chunk-OGK377NL.cjs} +33 -33
  73. package/dist/{chunk-OHHKBURG.cjs.map → chunk-OGK377NL.cjs.map} +1 -1
  74. package/dist/{chunk-T73BHNQX.cjs → chunk-OHWHYVKG.cjs} +3 -3
  75. package/dist/{chunk-T73BHNQX.cjs.map → chunk-OHWHYVKG.cjs.map} +1 -1
  76. package/dist/{chunk-4TTX6ZNS.cjs → chunk-ORNLCBNE.cjs} +24 -2
  77. package/dist/chunk-ORNLCBNE.cjs.map +1 -0
  78. package/dist/{chunk-MLA2BJ2Y.cjs → chunk-PSB64T43.cjs} +28 -28
  79. package/dist/{chunk-MLA2BJ2Y.cjs.map → chunk-PSB64T43.cjs.map} +1 -1
  80. package/dist/{chunk-COD5ENHK.cjs → chunk-PVJ5ODDB.cjs} +4 -4
  81. package/dist/{chunk-COD5ENHK.cjs.map → chunk-PVJ5ODDB.cjs.map} +1 -1
  82. package/dist/{chunk-7557LDAN.cjs → chunk-PWBRE7JA.cjs} +5 -5
  83. package/dist/{chunk-7557LDAN.cjs.map → chunk-PWBRE7JA.cjs.map} +1 -1
  84. package/dist/{chunk-7PN3YENO.cjs → chunk-QIK7E6VF.cjs} +4 -4
  85. package/dist/{chunk-7PN3YENO.cjs.map → chunk-QIK7E6VF.cjs.map} +1 -1
  86. package/dist/{chunk-DWMWEALB.cjs → chunk-TSFNLY3K.cjs} +143 -1634
  87. package/dist/chunk-TSFNLY3K.cjs.map +1 -0
  88. package/dist/{chunk-YGBHY67W.cjs → chunk-UA7HOLAZ.cjs} +5 -5
  89. package/dist/{chunk-YGBHY67W.cjs.map → chunk-UA7HOLAZ.cjs.map} +1 -1
  90. package/dist/{chunk-KXIRVKCJ.cjs → chunk-UUENH4BJ.cjs} +3 -3
  91. package/dist/{chunk-KXIRVKCJ.cjs.map → chunk-UUENH4BJ.cjs.map} +1 -1
  92. package/dist/chunk-WVZLAAIZ.cjs +31 -0
  93. package/dist/chunk-WVZLAAIZ.cjs.map +1 -0
  94. package/dist/{chunk-E3L5DB5F.cjs → chunk-YOEP3I4V.cjs} +5 -5
  95. package/dist/{chunk-E3L5DB5F.cjs.map → chunk-YOEP3I4V.cjs.map} +1 -1
  96. package/dist/{chunk-SNPK3R3O.cjs → chunk-YVO6Z5BS.cjs} +10 -10
  97. package/dist/{chunk-SNPK3R3O.cjs.map → chunk-YVO6Z5BS.cjs.map} +1 -1
  98. package/dist/chunk-ZZZITHGK.cjs +119 -0
  99. package/dist/chunk-ZZZITHGK.cjs.map +1 -0
  100. package/dist/connect/docx.cjs +17 -17
  101. package/dist/connect/index.cjs +994 -994
  102. package/dist/connect/viewer.cjs +28 -25
  103. package/dist/connection/presentation/ClippingMediaViewer.js +3 -3
  104. package/dist/connection/presentation/ClippingMediaViewer.js.map +2 -2
  105. package/dist/connection/presentation/ClippingPdfViewer.d.ts +4 -3
  106. package/dist/connection/presentation/ClippingPdfViewer.js +48 -9
  107. package/dist/connection/presentation/ClippingPdfViewer.js.map +2 -2
  108. package/dist/connection/presentation/SpotlightLayer.d.ts +5 -0
  109. package/dist/connection/presentation/SpotlightLayer.js +19 -0
  110. package/dist/connection/presentation/SpotlightLayer.js.map +7 -0
  111. package/dist/connection/presentation/SpotlightStrip.d.ts +10 -0
  112. package/dist/connection/presentation/SpotlightStrip.js +237 -0
  113. package/dist/connection/presentation/SpotlightStrip.js.map +7 -0
  114. package/dist/connection/presentation/useViewerClipping.d.ts +4 -3
  115. package/dist/connection/presentation/useViewerClipping.js +8 -4
  116. package/dist/connection/presentation/useViewerClipping.js.map +2 -2
  117. package/dist/connection/viewer/ConnectedDocumentViewer.js +1 -1
  118. package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
  119. package/dist/connection/viewer/VersionDropdown.js +1 -1
  120. package/dist/connection/viewer/VersionDropdown.js.map +1 -1
  121. package/dist/connection/viewer/ViewerPdfPane.js +2 -0
  122. package/dist/connection/viewer/ViewerPdfPane.js.map +2 -2
  123. package/dist/connection/viewer/pdf/passageHighlights.d.ts +5 -0
  124. package/dist/connection/viewer/pdf/passageHighlights.js +14 -1
  125. package/dist/connection/viewer/pdf/passageHighlights.js.map +2 -2
  126. package/dist/connection/viewer/pdf/usePassageTextFallback.d.ts +12 -0
  127. package/dist/connection/viewer/pdf/usePassageTextFallback.js +30 -0
  128. package/dist/connection/viewer/pdf/usePassageTextFallback.js.map +7 -0
  129. package/dist/connection/viewer/pdf/usePdfPassageHighlights.js +2 -11
  130. package/dist/connection/viewer/pdf/usePdfPassageHighlights.js.map +2 -2
  131. package/dist/connection/viewer/useCleanView.d.ts +3 -1
  132. package/dist/connection/viewer/useCleanView.js +6 -3
  133. package/dist/connection/viewer/useCleanView.js.map +2 -2
  134. package/dist/connection/viewer/useViewerTabs.js +13 -1
  135. package/dist/connection/viewer/useViewerTabs.js.map +2 -2
  136. package/dist/document-tools/DocumentToolButtons.js +1 -1
  137. package/dist/document-tools/DocumentToolButtons.js.map +1 -1
  138. package/dist/document-tools/index.cjs +20 -20
  139. package/dist/docx/DocxCommandMenu.js +2 -1
  140. package/dist/docx/DocxCommandMenu.js.map +2 -2
  141. package/dist/docx/index.cjs +38 -38
  142. package/dist/embed/index.cjs +20 -20
  143. package/dist/facts/index.cjs +64 -64
  144. package/dist/files/index.cjs +223 -223
  145. package/dist/index.cjs +521 -521
  146. package/dist/presentation/ClipCaptureOverlay.d.ts +7 -3
  147. package/dist/presentation/ClipCaptureOverlay.js +43 -14
  148. package/dist/presentation/ClipCaptureOverlay.js.map +2 -2
  149. package/dist/presentation/PresentControls.d.ts +8 -0
  150. package/dist/presentation/PresentControls.js +1 -0
  151. package/dist/presentation/PresentControls.js.map +2 -2
  152. package/dist/presentation/PresentationStage.d.ts +10 -2
  153. package/dist/presentation/PresentationStage.js +6 -3
  154. package/dist/presentation/PresentationStage.js.map +2 -2
  155. package/dist/presentation/PresenterView.js +1 -22
  156. package/dist/presentation/PresenterView.js.map +2 -2
  157. package/dist/presentation/SpotlightView.d.ts +19 -0
  158. package/dist/presentation/SpotlightView.js +180 -0
  159. package/dist/presentation/SpotlightView.js.map +7 -0
  160. package/dist/presentation/passage-clip.d.ts +17 -0
  161. package/dist/presentation/passage-clip.js +25 -0
  162. package/dist/presentation/passage-clip.js.map +7 -0
  163. package/dist/presentation/spotlight.d.ts +58 -0
  164. package/dist/presentation/spotlight.js +110 -0
  165. package/dist/presentation/spotlight.js.map +7 -0
  166. package/dist/presentation/store.d.ts +5 -0
  167. package/dist/presentation/store.js +19 -0
  168. package/dist/presentation/store.js.map +2 -2
  169. package/dist/presentation/usePointerActive.d.ts +2 -0
  170. package/dist/presentation/usePointerActive.js +28 -0
  171. package/dist/presentation/usePointerActive.js.map +7 -0
  172. package/dist/settings/index.cjs +146 -146
  173. package/dist/site/index.cjs +6 -6
  174. package/dist/studio/index.cjs +9 -9
  175. package/dist/styles.css +1 -1
  176. package/dist/workflow-canvas/index.cjs +35 -35
  177. package/node_modules/@arbidocs/coedit/package.json +1 -1
  178. package/package.json +5 -5
  179. package/dist/ClippingMediaViewer-IEIBT74X.cjs.map +0 -1
  180. package/dist/ClippingPdfViewer-OGYLMVCE.cjs.map +0 -1
  181. package/dist/ConnectedPresentation-5DOJ35XL.cjs.map +0 -1
  182. package/dist/ConnectedSlidesTab-7YMEDGUU.cjs.map +0 -1
  183. package/dist/FilesViewerDialog-2QCCRWF2.cjs.map +0 -1
  184. package/dist/chunk-2CSLFAGF.cjs.map +0 -1
  185. package/dist/chunk-46P7IDBX.cjs.map +0 -1
  186. package/dist/chunk-4TTX6ZNS.cjs.map +0 -1
  187. package/dist/chunk-DWMWEALB.cjs.map +0 -1
  188. package/dist/chunk-JD2HX2BR.cjs.map +0 -1
  189. package/dist/chunk-SDRYSLOX.cjs +0 -18
  190. package/dist/chunk-WFMWKPGY.cjs.map +0 -1
  191. package/dist/chunk-XK4TVJKD.cjs +0 -73
  192. package/dist/chunk-XK4TVJKD.cjs.map +0 -1
@@ -1,9 +1,10 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
+ var chunkZZZITHGK_cjs = require('./chunk-ZZZITHGK.cjs');
4
5
  var chunkWOOOMTTA_cjs = require('./chunk-WOOOMTTA.cjs');
5
- var chunkXK4TVJKD_cjs = require('./chunk-XK4TVJKD.cjs');
6
- var chunk4TTX6ZNS_cjs = require('./chunk-4TTX6ZNS.cjs');
6
+ var chunkMVXHTAJ4_cjs = require('./chunk-MVXHTAJ4.cjs');
7
+ var chunkORNLCBNE_cjs = require('./chunk-ORNLCBNE.cjs');
7
8
  require('./chunk-GFUOCGY6.cjs');
8
9
  var react = require('react');
9
10
  var lucideReact = require('lucide-react');
@@ -41,7 +42,7 @@ function ClippingMediaViewer({
41
42
  const capture = react.useCallback(
42
43
  ({ rect, aspect }) => {
43
44
  const start = kind === "video" ? videoRef.current?.currentTime ?? 0 : void 0;
44
- chunk4TTX6ZNS_cjs.usePresentation.getState().addClip({
45
+ chunkMVXHTAJ4_cjs.useSpotlight.getState().gather({
45
46
  kind,
46
47
  documentId,
47
48
  fileName,
@@ -51,13 +52,13 @@ function ClippingMediaViewer({
51
52
  masks: [],
52
53
  source: file,
53
54
  start,
54
- caption: chunk4TTX6ZNS_cjs.mediaCaption(fileName, start)
55
+ caption: chunkORNLCBNE_cjs.mediaCaption(fileName, start)
55
56
  });
56
57
  },
57
58
  [kind, documentId, fileName, file]
58
59
  );
59
60
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-0 flex-col", "data-testid": "clipping-media-viewer", children: [
60
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b border-border bg-muted px-3 py-1.5 text-xs text-muted-foreground", children: kind === "video" ? "Drag over the video to clip that area from this moment, or add the whole frame." : "Drag over the part of the image to show it in the presentation." }),
61
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b border-border bg-muted px-3 py-1.5 text-xs text-muted-foreground", children: kind === "video" ? "Drag over the video to clip that area from this moment, or add the whole frame." : "Drag over the part of the image to clip it." }),
61
62
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative min-h-0 flex-1 bg-black", style: { containerType: "size" }, children: /* @__PURE__ */ jsxRuntime.jsxs(
62
63
  "div",
63
64
  {
@@ -89,7 +90,7 @@ function ClippingMediaViewer({
89
90
  className: "block h-full w-full select-none"
90
91
  }
91
92
  ),
92
- natural && /* @__PURE__ */ jsxRuntime.jsx(chunkXK4TVJKD_cjs.ClipCaptureOverlay, { page: 1, onCapture: capture })
93
+ natural && /* @__PURE__ */ jsxRuntime.jsx(chunkZZZITHGK_cjs.ClipCaptureOverlay, { page: 1, onCapture: capture })
93
94
  ]
94
95
  }
95
96
  ) }),
@@ -128,9 +129,9 @@ function ClippingMediaViewer({
128
129
  }
129
130
  ),
130
131
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs tabular-nums text-muted-foreground", children: [
131
- chunk4TTX6ZNS_cjs.formatTime(time),
132
+ chunkORNLCBNE_cjs.formatTime(time),
132
133
  " / ",
133
- chunk4TTX6ZNS_cjs.formatTime(duration)
134
+ chunkORNLCBNE_cjs.formatTime(duration)
134
135
  ] }),
135
136
  /* @__PURE__ */ jsxRuntime.jsxs(
136
137
  ui.Button,
@@ -152,5 +153,5 @@ function ClippingMediaViewer({
152
153
  }
153
154
 
154
155
  exports.ClippingMediaViewer = ClippingMediaViewer;
155
- //# sourceMappingURL=ClippingMediaViewer-IEIBT74X.cjs.map
156
- //# sourceMappingURL=ClippingMediaViewer-IEIBT74X.cjs.map
156
+ //# sourceMappingURL=ClippingMediaViewer-ZFEX5A3U.cjs.map
157
+ //# sourceMappingURL=ClippingMediaViewer-ZFEX5A3U.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/connection/presentation/ClippingMediaViewer.tsx"],"names":["useObjectUrl","useRef","useState","useEffect","useCallback","useSpotlight","mediaCaption","jsxs","jsx","ClipCaptureOverlay","Button","Pause","Play","formatTime","Plus"],"mappings":"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","file":"ClippingMediaViewer-ZFEX5A3U.cjs","sourcesContent":["/**\n * An image or a video while clipping for a presentation: drag over it and that area becomes a clip\n * (of a video: from the moment on screen). A video has its own small bar (play / pause, scrub, and\n * \"Add whole frame\"), since the drag area covers the picture.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { Pause, Play, Plus } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { ClipCaptureOverlay } from '../../presentation/ClipCaptureOverlay'\nimport { formatTime, mediaCaption, type Rect } from '../../presentation/model'\nimport { useSpotlight } from '../../presentation/spotlight'\nimport { useObjectUrl } from '../../presentation/useObjectUrl'\n\nexport interface ClippingMediaViewerProps {\n file: Blob\n kind: 'image' | 'video'\n documentId: string\n fileName: string\n}\n\nconst WHOLE: Rect = { x: 0, y: 0, w: 1, h: 1 }\n\nexport function ClippingMediaViewer({\n file,\n kind,\n documentId,\n fileName,\n}: ClippingMediaViewerProps) {\n const url = useObjectUrl(file)\n const videoRef = useRef<HTMLVideoElement>(null)\n const imageRef = useRef<HTMLImageElement>(null)\n // The picture's own width / height, once known.\n const [natural, setNatural] = useState<number | null>(null)\n const [time, setTime] = useState(0)\n const [duration, setDuration] = useState(0)\n const [playing, setPlaying] = useState(false)\n\n // Its size, read as soon as it is known: at once if it already loaded (a cached file can load\n // before any handler is attached), else when it does.\n useEffect(() => {\n const media = videoRef.current ?? imageRef.current\n if (!media || !url) return\n const read = () => {\n const width = media instanceof HTMLVideoElement ? media.videoWidth : media.naturalWidth\n const height = media instanceof HTMLVideoElement ? media.videoHeight : media.naturalHeight\n if (width && height) setNatural(width / height)\n if (media instanceof HTMLVideoElement) setDuration(media.duration || 0)\n }\n read()\n const event = media instanceof HTMLVideoElement ? 'loadedmetadata' : 'load'\n media.addEventListener(event, read)\n return () => media.removeEventListener(event, read)\n }, [url])\n\n const capture = useCallback(\n ({ rect, aspect }: { rect: Rect; aspect: number }) => {\n const start = kind === 'video' ? (videoRef.current?.currentTime ?? 0) : undefined\n useSpotlight.getState().gather({\n kind,\n documentId,\n fileName,\n page: 1,\n rect,\n aspect,\n masks: [],\n source: file,\n start,\n caption: mediaCaption(fileName, start),\n })\n },\n [kind, documentId, fileName, file]\n )\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-testid=\"clipping-media-viewer\">\n <div className=\"border-b border-border bg-muted px-3 py-1.5 text-xs text-muted-foreground\">\n {kind === 'video'\n ? 'Drag over the video to clip that area from this moment, or add the whole frame.'\n : 'Drag over the part of the image to clip it.'}\n </div>\n <div className=\"relative min-h-0 flex-1 bg-black\" style={{ containerType: 'size' }}>\n {/* The picture as large as fits, aspect kept; the drag area covers exactly it. */}\n <div\n className=\"absolute inset-0 m-auto\"\n style={\n natural\n ? {\n width: `min(100cqw, calc(100cqh * ${natural}))`,\n height: `min(100cqh, calc(100cqw / ${natural}))`,\n }\n : { width: '100%', height: '100%' }\n }\n >\n {kind === 'video' ? (\n <video\n ref={videoRef}\n src={url}\n playsInline\n preload=\"auto\"\n className=\"block h-full w-full\"\n onTimeUpdate={(event) => setTime(event.currentTarget.currentTime)}\n onPlay={() => setPlaying(true)}\n onPause={() => setPlaying(false)}\n />\n ) : (\n <img\n ref={imageRef}\n src={url}\n alt={fileName}\n draggable={false}\n className=\"block h-full w-full select-none\"\n />\n )}\n {natural && <ClipCaptureOverlay page={1} onCapture={capture} />}\n </div>\n </div>\n {kind === 'video' && (\n <div className=\"flex items-center gap-2 border-t border-border px-3 py-1.5\">\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8\"\n onClick={() => {\n const v = videoRef.current\n if (!v) return\n if (v.paused) void v.play()\n else v.pause()\n }}\n aria-label={playing ? 'Pause' : 'Play'}\n >\n {playing ? <Pause className=\"size-4\" /> : <Play className=\"size-4\" />}\n </Button>\n <input\n type=\"range\"\n min={0}\n max={duration || 0}\n step={0.1}\n value={time}\n onChange={(event) => {\n const v = videoRef.current\n if (v) v.currentTime = Number(event.target.value)\n }}\n className=\"min-w-0 flex-1\"\n aria-label=\"Position in the video\"\n />\n <span className=\"text-xs tabular-nums text-muted-foreground\">\n {formatTime(time)} / {formatTime(duration)}\n </span>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n disabled={!natural}\n onClick={() => natural && capture({ rect: WHOLE, aspect: natural })}\n data-testid=\"clip-whole-frame\"\n >\n <Plus className=\"mr-1 size-4\" />\n Add whole frame\n </Button>\n </div>\n )}\n </div>\n )\n}\n"]}
@@ -1,11 +1,15 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkXK4TVJKD_cjs = require('./chunk-XK4TVJKD.cjs');
5
- var chunk4TTX6ZNS_cjs = require('./chunk-4TTX6ZNS.cjs');
4
+ var chunkZZZITHGK_cjs = require('./chunk-ZZZITHGK.cjs');
5
+ var chunkJITYC4OS_cjs = require('./chunk-JITYC4OS.cjs');
6
+ var chunkMVXHTAJ4_cjs = require('./chunk-MVXHTAJ4.cjs');
7
+ require('./chunk-ORNLCBNE.cjs');
6
8
  require('./chunk-GFUOCGY6.cjs');
7
9
  var react = require('react');
10
+ var react$1 = require('@arbidocs/react');
8
11
  var documentTools = require('@arbidocs/react/document-tools');
12
+ var viewers = require('@arbidocs/react/viewers');
9
13
  var jsxRuntime = require('react/jsx-runtime');
10
14
 
11
15
  var NO_MASKS = { status: "ready", masks: /* @__PURE__ */ new Map() };
@@ -34,6 +38,20 @@ function useRedactionMasks(documentId, version, hasMarkup) {
34
38
  }, [client, documentId, version, hasMarkup]);
35
39
  return state;
36
40
  }
41
+ var NO_FOOTNOTES = {};
42
+ var NO_PASSAGES = /* @__PURE__ */ new Map();
43
+ function usePassageAreas(documentId, current) {
44
+ const { data: parsed } = react$1.useParsedDocument(documentId, "final", { enabled: current });
45
+ const { processedChunks } = viewers.useProcessedChunks(parsed?.chunks, NO_FOOTNOTES);
46
+ return react.useMemo(() => {
47
+ if (!current || !processedChunks.length) return NO_PASSAGES;
48
+ const areas = /* @__PURE__ */ new Map();
49
+ for (const [page, boxes] of chunkJITYC4OS_cjs.placedPassagesByPage(processedChunks)) {
50
+ areas.set(page, boxes.map(chunkZZZITHGK_cjs.passageClipRect));
51
+ }
52
+ return areas;
53
+ }, [current, processedChunks]);
54
+ }
37
55
  function Notice({ children }) {
38
56
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b border-border bg-muted px-3 py-1.5 text-xs text-muted-foreground", children });
39
57
  }
@@ -46,11 +64,12 @@ function ClippingPdfViewer({
46
64
  ...viewerProps
47
65
  }) {
48
66
  const masks = useRedactionMasks(documentId, version, hasMarkup);
67
+ const passages = usePassageAreas(documentId, version === void 0);
49
68
  const file = viewerProps.file;
50
69
  const capture = react.useCallback(
51
70
  ({ page, rect, aspect }) => {
52
71
  if (masks.status !== "ready") return;
53
- chunk4TTX6ZNS_cjs.usePresentation.getState().addClip({
72
+ chunkMVXHTAJ4_cjs.useSpotlight.getState().gather({
54
73
  kind: "pdf",
55
74
  documentId,
56
75
  version,
@@ -65,15 +84,30 @@ function ClippingPdfViewer({
65
84
  [masks, documentId, version, fileName, file]
66
85
  );
67
86
  const renderPageOverlay = react.useCallback(
68
- ({ pageNumber }) => masks.status === "ready" ? /* @__PURE__ */ jsxRuntime.jsx(chunkXK4TVJKD_cjs.ClipCaptureOverlay, { page: pageNumber, onCapture: capture }) : null,
69
- [masks.status, capture]
87
+ ({ pageNumber }) => masks.status === "ready" ? /* @__PURE__ */ jsxRuntime.jsx(
88
+ chunkZZZITHGK_cjs.ClipCaptureOverlay,
89
+ {
90
+ page: pageNumber,
91
+ passages: passages.get(pageNumber),
92
+ onCapture: capture
93
+ }
94
+ ) : null,
95
+ [masks.status, capture, passages]
96
+ );
97
+ return /* @__PURE__ */ jsxRuntime.jsxs(
98
+ "div",
99
+ {
100
+ className: "flex h-full min-h-0 flex-col",
101
+ "data-clip-document": documentId,
102
+ "data-testid": "clipping-pdf-viewer",
103
+ children: [
104
+ /* @__PURE__ */ jsxRuntime.jsx(Notice, { children: masks.status === "loading" ? "Reading the redactions before clipping\u2026" : masks.status === "error" ? "Couldn't read this document's redactions, so it can't be clipped." : passages.size ? "Click a passage to clip it, or drag over any area." : "Drag over the part of a page to clip it." }),
105
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(Viewer, { ...viewerProps, renderPageOverlay }) })
106
+ ]
107
+ }
70
108
  );
71
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-0 flex-col", "data-testid": "clipping-pdf-viewer", children: [
72
- /* @__PURE__ */ jsxRuntime.jsx(Notice, { children: masks.status === "loading" ? "Reading the redactions before clipping\u2026" : masks.status === "error" ? "Couldn't read this document's redactions, so it can't be clipped." : "Drag over the part of a page to show it in the presentation." }),
73
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(Viewer, { ...viewerProps, renderPageOverlay }) })
74
- ] });
75
109
  }
76
110
 
77
111
  exports.ClippingPdfViewer = ClippingPdfViewer;
78
- //# sourceMappingURL=ClippingPdfViewer-OGYLMVCE.cjs.map
79
- //# sourceMappingURL=ClippingPdfViewer-OGYLMVCE.cjs.map
112
+ //# sourceMappingURL=ClippingPdfViewer-3LRTEPHV.cjs.map
113
+ //# sourceMappingURL=ClippingPdfViewer-3LRTEPHV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/connection/presentation/ClippingPdfViewer.tsx"],"names":["useDocumentTools","useState","useEffect","createMarkupStore","useParsedDocument","useProcessedChunks","useMemo","placedPassagesByPage","passageClipRect","jsx","useCallback","useSpotlight","ClipCaptureOverlay","jsxs"],"mappings":"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","file":"ClippingPdfViewer-3LRTEPHV.cjs","sourcesContent":["/**\n * The PDF while clipping: a click on a passage clips that passage (outlined under the pointer), a\n * drag over a page clips that area. Clips are gathered in the viewer's spotlight strip\n * (`SpotlightStrip`), to show over the document or keep as a slide.\n *\n * Redactions are honoured: when the version has markup, its redaction marks (all but rejected\n * ones) are read first and every clip carries those over its area as black masks, so a redacted\n * passage never reaches a shared screen. Clipping waits for them, and stays off if they cannot be\n * read.\n */\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ComponentType,\n type ReactNode,\n} from 'react'\nimport { useParsedDocument } from '@arbidocs/react'\nimport { createMarkupStore, useDocumentTools } from '@arbidocs/react/document-tools'\nimport { useProcessedChunks, type PdfViewerProps } from '@arbidocs/react/viewers'\nimport { ClipCaptureOverlay } from '../../presentation/ClipCaptureOverlay'\nimport type { Rect } from '../../presentation/model'\nimport { passageClipRect } from '../../presentation/passage-clip'\nimport { useSpotlight } from '../../presentation/spotlight'\nimport { placedPassagesByPage } from '../viewer/pdf/passageHighlights'\n\ntype MaskState =\n | { status: 'loading' }\n | { status: 'error' }\n | { status: 'ready'; masks: ReadonlyMap<number, Rect[]> }\n\nconst NO_MASKS: MaskState = { status: 'ready', masks: new Map() }\n\n/** The version's redaction rectangles by page; none to read when it has no markup. */\nfunction useRedactionMasks(documentId: string, version: number | undefined, hasMarkup: boolean) {\n const { client } = useDocumentTools()\n const [state, setState] = useState<MaskState>(hasMarkup ? { status: 'loading' } : NO_MASKS)\n useEffect(() => {\n if (!hasMarkup) {\n setState(NO_MASKS)\n return\n }\n let cancelled = false\n setState({ status: 'loading' })\n createMarkupStore({ version, client })\n .load(documentId)\n .then((layer) => {\n if (cancelled) return\n const masks = new Map<number, Rect[]>()\n for (const mark of layer.annotations) {\n if (mark.kind !== 'redaction' || mark.status === 'rejected') continue\n masks.set(mark.page, [...(masks.get(mark.page) ?? []), ...mark.rects])\n }\n setState({ status: 'ready', masks })\n })\n .catch(() => !cancelled && setState({ status: 'error' }))\n return () => {\n cancelled = true\n }\n }, [client, documentId, version, hasMarkup])\n return state\n}\n\nconst NO_FOOTNOTES: Record<string, string> = {}\nconst NO_PASSAGES: ReadonlyMap<number, Rect[]> = new Map()\n\n/**\n * The areas a click clips, by page: each passage the parser placed, with its margin. Only for the\n * current version (the passages are its own); an older one is clipped by dragging.\n */\nfunction usePassageAreas(documentId: string, current: boolean): ReadonlyMap<number, Rect[]> {\n const { data: parsed } = useParsedDocument(documentId, 'final', { enabled: current })\n const { processedChunks } = useProcessedChunks(parsed?.chunks, NO_FOOTNOTES)\n return useMemo(() => {\n if (!current || !processedChunks.length) return NO_PASSAGES\n const areas = new Map<number, Rect[]>()\n for (const [page, boxes] of placedPassagesByPage(processedChunks)) {\n areas.set(page, boxes.map(passageClipRect))\n }\n return areas\n }, [current, processedChunks])\n}\n\nexport interface ClippingPdfViewerProps extends Omit<PdfViewerProps, 'renderPageOverlay'> {\n file: Blob\n documentId: string\n /** The version on screen when it is an older one. */\n version?: number\n fileName: string\n /** The version has markup, which may hold redactions. */\n hasMarkup: boolean\n viewer: ComponentType<PdfViewerProps>\n}\n\nfunction Notice({ children }: { children: ReactNode }) {\n return (\n <div className=\"border-b border-border bg-muted px-3 py-1.5 text-xs text-muted-foreground\">\n {children}\n </div>\n )\n}\n\nexport function ClippingPdfViewer({\n documentId,\n version,\n fileName,\n hasMarkup,\n viewer: Viewer,\n ...viewerProps\n}: ClippingPdfViewerProps) {\n const masks = useRedactionMasks(documentId, version, hasMarkup)\n const passages = usePassageAreas(documentId, version === undefined)\n const file = viewerProps.file\n\n const capture = useCallback(\n ({ page, rect, aspect }: { page: number; rect: Rect; aspect: number }) => {\n if (masks.status !== 'ready') return\n useSpotlight.getState().gather({\n kind: 'pdf',\n documentId,\n version,\n fileName,\n page,\n rect,\n aspect,\n masks: masks.masks.get(page) ?? [],\n source: file,\n })\n // It joins the viewer's spotlight strip.\n },\n [masks, documentId, version, fileName, file]\n )\n\n const renderPageOverlay = useCallback(\n ({ pageNumber }: { pageNumber: number }) =>\n masks.status === 'ready' ? (\n <ClipCaptureOverlay\n page={pageNumber}\n passages={passages.get(pageNumber)}\n onCapture={capture}\n />\n ) : null,\n [masks.status, capture, passages]\n )\n\n return (\n <div\n className=\"flex h-full min-h-0 flex-col\"\n // The spotlight finds a clip's page here, to fly it from there.\n data-clip-document={documentId}\n data-testid=\"clipping-pdf-viewer\"\n >\n <Notice>\n {masks.status === 'loading'\n ? 'Reading the redactions before clipping…'\n : masks.status === 'error'\n ? \"Couldn't read this document's redactions, so it can't be clipped.\"\n : passages.size\n ? 'Click a passage to clip it, or drag over any area.'\n : 'Drag over the part of a page to clip it.'}\n </Notice>\n <div className=\"min-h-0 flex-1\">\n <Viewer {...viewerProps} renderPageOverlay={renderPageOverlay} />\n </div>\n </div>\n )\n}\n"]}
@@ -16,31 +16,31 @@ require('./chunk-KLMNCBLY.cjs');
16
16
  require('./chunk-KNGZZC4O.cjs');
17
17
  require('./chunk-5SKHK3BG.cjs');
18
18
  require('./chunk-IDCD5TEZ.cjs');
19
- require('./chunk-JHDCDEXY.cjs');
20
- require('./chunk-M2FOXGJU.cjs');
21
- require('./chunk-5F4DCIHS.cjs');
22
19
  require('./chunk-CT3SLXB7.cjs');
23
20
  require('./chunk-DEXUL3T6.cjs');
24
21
  require('./chunk-AFQTQC7A.cjs');
25
22
  require('./chunk-XJEXFEWG.cjs');
23
+ require('./chunk-JHDCDEXY.cjs');
24
+ require('./chunk-M2FOXGJU.cjs');
25
+ require('./chunk-5F4DCIHS.cjs');
26
26
  require('./chunk-Z2XZ2D4N.cjs');
27
27
  require('./chunk-YZSQ7F5K.cjs');
28
28
  require('./chunk-MCXS6X37.cjs');
29
29
  require('./chunk-KQF7POTG.cjs');
30
30
  require('./chunk-75BNMCUX.cjs');
31
31
  require('./chunk-IN6ILI5A.cjs');
32
- require('./chunk-HSLPFBK2.cjs');
33
32
  require('./chunk-FX3K6LNZ.cjs');
33
+ require('./chunk-HSLPFBK2.cjs');
34
34
  require('./chunk-QGVOT7E4.cjs');
35
+ require('./chunk-IPSHAMO2.cjs');
35
36
  require('./chunk-QRAQZTJE.cjs');
36
37
  require('./chunk-UDSHVNU3.cjs');
37
- require('./chunk-IPSHAMO2.cjs');
38
38
  var chunkZBP4ZSAJ_cjs = require('./chunk-ZBP4ZSAJ.cjs');
39
39
  require('./chunk-PPCATBOY.cjs');
40
+ require('./chunk-LJJJ6CYH.cjs');
40
41
  require('./chunk-TKHCIHE2.cjs');
41
42
  require('./chunk-JDFBEGQO.cjs');
42
43
  require('./chunk-ULWRNGGE.cjs');
43
- require('./chunk-LJJJ6CYH.cjs');
44
44
  require('./chunk-PLIF5CUV.cjs');
45
45
  var react = require('@arbidocs/react');
46
46
  var react$1 = require('react');
@@ -16,31 +16,31 @@ require('./chunk-KLMNCBLY.cjs');
16
16
  require('./chunk-KNGZZC4O.cjs');
17
17
  require('./chunk-5SKHK3BG.cjs');
18
18
  require('./chunk-IDCD5TEZ.cjs');
19
- require('./chunk-JHDCDEXY.cjs');
20
- require('./chunk-M2FOXGJU.cjs');
21
- require('./chunk-5F4DCIHS.cjs');
22
19
  require('./chunk-CT3SLXB7.cjs');
23
20
  require('./chunk-DEXUL3T6.cjs');
24
21
  require('./chunk-AFQTQC7A.cjs');
25
22
  require('./chunk-XJEXFEWG.cjs');
23
+ require('./chunk-JHDCDEXY.cjs');
24
+ require('./chunk-M2FOXGJU.cjs');
25
+ require('./chunk-5F4DCIHS.cjs');
26
26
  require('./chunk-Z2XZ2D4N.cjs');
27
27
  require('./chunk-YZSQ7F5K.cjs');
28
28
  require('./chunk-MCXS6X37.cjs');
29
29
  require('./chunk-KQF7POTG.cjs');
30
30
  require('./chunk-75BNMCUX.cjs');
31
31
  require('./chunk-IN6ILI5A.cjs');
32
- require('./chunk-HSLPFBK2.cjs');
33
32
  require('./chunk-FX3K6LNZ.cjs');
33
+ require('./chunk-HSLPFBK2.cjs');
34
34
  require('./chunk-QGVOT7E4.cjs');
35
+ require('./chunk-IPSHAMO2.cjs');
35
36
  require('./chunk-QRAQZTJE.cjs');
36
37
  require('./chunk-UDSHVNU3.cjs');
37
- require('./chunk-IPSHAMO2.cjs');
38
38
  require('./chunk-ZBP4ZSAJ.cjs');
39
39
  require('./chunk-PPCATBOY.cjs');
40
+ require('./chunk-LJJJ6CYH.cjs');
40
41
  require('./chunk-TKHCIHE2.cjs');
41
42
  require('./chunk-JDFBEGQO.cjs');
42
43
  require('./chunk-ULWRNGGE.cjs');
43
- require('./chunk-LJJJ6CYH.cjs');
44
44
  require('./chunk-PLIF5CUV.cjs');
45
45
 
46
46
 
@@ -1,32 +1,32 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkV6MW7B4B_cjs = require('./chunk-V6MW7B4B.cjs');
5
- require('./chunk-COD5ENHK.cjs');
6
- require('./chunk-2CSLFAGF.cjs');
4
+ var chunkB3R62764_cjs = require('./chunk-B3R62764.cjs');
5
+ require('./chunk-PVJ5ODDB.cjs');
6
+ require('./chunk-GAMRVB3I.cjs');
7
7
  require('./chunk-GA5ZO4YA.cjs');
8
8
  require('./chunk-VG5XNE4H.cjs');
9
9
  require('./chunk-DDWLMYRO.cjs');
10
- require('./chunk-7557LDAN.cjs');
10
+ require('./chunk-PWBRE7JA.cjs');
11
11
  require('./chunk-4ONPEVTP.cjs');
12
12
  require('./chunk-V3KLUWQQ.cjs');
13
+ require('./chunk-ZESMRGDV.cjs');
13
14
  require('./chunk-P5AQYC4D.cjs');
14
15
  require('./chunk-WAV762GP.cjs');
15
- require('./chunk-ZESMRGDV.cjs');
16
16
  require('./chunk-UKOYN2WD.cjs');
17
17
  require('./chunk-RC25WMVB.cjs');
18
- require('./chunk-VKH3BEZE.cjs');
18
+ require('./chunk-BLIO3B7Z.cjs');
19
19
  require('./chunk-JJZOL5MG.cjs');
20
20
  require('./chunk-3YEXZX4H.cjs');
21
21
  require('./chunk-4PA6VCCR.cjs');
22
22
  require('./chunk-WXUU3COI.cjs');
23
23
  require('./chunk-AHDJXIUB.cjs');
24
- require('./chunk-YVCOQHCE.cjs');
25
24
  require('./chunk-RL2HI6NP.cjs');
26
25
  require('./chunk-6UZC4XVV.cjs');
26
+ require('./chunk-YVCOQHCE.cjs');
27
27
  require('./chunk-JV5TVUOU.cjs');
28
- require('./chunk-ZVEW3JBT.cjs');
29
28
  require('./chunk-VZOOGA47.cjs');
29
+ require('./chunk-ZVEW3JBT.cjs');
30
30
  require('./chunk-HQDR43JC.cjs');
31
31
  require('./chunk-JR2YSBD5.cjs');
32
32
  require('./chunk-3YZKDCWY.cjs');
@@ -34,21 +34,21 @@ require('./chunk-SJSGSHIT.cjs');
34
34
  require('./chunk-ZW6FPIFC.cjs');
35
35
  require('./chunk-75BNMCUX.cjs');
36
36
  require('./chunk-QGVOT7E4.cjs');
37
+ require('./chunk-IPSHAMO2.cjs');
37
38
  require('./chunk-QRAQZTJE.cjs');
38
39
  require('./chunk-UDSHVNU3.cjs');
39
- require('./chunk-IPSHAMO2.cjs');
40
40
  require('./chunk-PPCATBOY.cjs');
41
+ require('./chunk-LJJJ6CYH.cjs');
41
42
  require('./chunk-TKHCIHE2.cjs');
42
43
  require('./chunk-JDFBEGQO.cjs');
43
44
  require('./chunk-ULWRNGGE.cjs');
44
- require('./chunk-LJJJ6CYH.cjs');
45
45
  require('./chunk-PLIF5CUV.cjs');
46
46
 
47
47
 
48
48
 
49
49
  Object.defineProperty(exports, "ConnectedNativeDocxComparison", {
50
50
  enumerable: true,
51
- get: function () { return chunkV6MW7B4B_cjs.ConnectedNativeDocxComparison; }
51
+ get: function () { return chunkB3R62764_cjs.ConnectedNativeDocxComparison; }
52
52
  });
53
- //# sourceMappingURL=ConnectedNativeDocxComparison-QKHCYD6W.cjs.map
54
- //# sourceMappingURL=ConnectedNativeDocxComparison-QKHCYD6W.cjs.map
53
+ //# sourceMappingURL=ConnectedNativeDocxComparison-7QQ55JIO.cjs.map
54
+ //# sourceMappingURL=ConnectedNativeDocxComparison-7QQ55JIO.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedNativeDocxComparison-QKHCYD6W.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedNativeDocxComparison-7QQ55JIO.cjs"}
@@ -1,16 +1,19 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkDWMWEALB_cjs = require('./chunk-DWMWEALB.cjs');
4
+ var chunkTSFNLY3K_cjs = require('./chunk-TSFNLY3K.cjs');
5
+ var chunk3ZZZO4F7_cjs = require('./chunk-3ZZZO4F7.cjs');
6
+ var chunkJY7UUZQG_cjs = require('./chunk-JY7UUZQG.cjs');
5
7
  require('./chunk-WOOOMTTA.cjs');
6
8
  var chunk6OK7ESTL_cjs = require('./chunk-6OK7ESTL.cjs');
7
9
  require('./chunk-5GCCUXMT.cjs');
8
- require('./chunk-2F57IO7S.cjs');
9
- require('./chunk-UFT22LAB.cjs');
10
- var chunkWFMWKPGY_cjs = require('./chunk-WFMWKPGY.cjs');
11
- var chunk4TTX6ZNS_cjs = require('./chunk-4TTX6ZNS.cjs');
10
+ require('./chunk-WVZLAAIZ.cjs');
11
+ var chunkADPRIBSH_cjs = require('./chunk-ADPRIBSH.cjs');
12
+ var chunkORNLCBNE_cjs = require('./chunk-ORNLCBNE.cjs');
12
13
  var chunkPL7HUTM3_cjs = require('./chunk-PL7HUTM3.cjs');
13
14
  var chunkGFUOCGY6_cjs = require('./chunk-GFUOCGY6.cjs');
15
+ require('./chunk-2F57IO7S.cjs');
16
+ require('./chunk-UFT22LAB.cjs');
14
17
  require('./chunk-HYUKPHCT.cjs');
15
18
  require('./chunk-WAV762GP.cjs');
16
19
  require('./chunk-K4763GD5.cjs');
@@ -29,9 +32,9 @@ require('./chunk-SJSGSHIT.cjs');
29
32
  require('./chunk-XJEXFEWG.cjs');
30
33
  require('./chunk-YZSQ7F5K.cjs');
31
34
  require('./chunk-FX3K6LNZ.cjs');
35
+ require('./chunk-IPSHAMO2.cjs');
32
36
  require('./chunk-QRAQZTJE.cjs');
33
37
  require('./chunk-UDSHVNU3.cjs');
34
- require('./chunk-IPSHAMO2.cjs');
35
38
  require('./chunk-PPCATBOY.cjs');
36
39
  require('./chunk-TKHCIHE2.cjs');
37
40
  require('./chunk-JDFBEGQO.cjs');
@@ -43,113 +46,6 @@ var react = require('@arbidocs/react');
43
46
  var ui = require('@arbidocs/react/ui');
44
47
  var jsxRuntime = require('react/jsx-runtime');
45
48
 
46
- var CONTROL = "inline-flex size-8 items-center justify-center rounded-full text-white/85 hover:bg-white/15 hover:text-white disabled:opacity-30 disabled:hover:bg-transparent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60 pointer-coarse:size-11";
47
- function Control({
48
- label,
49
- onClick,
50
- disabled,
51
- children,
52
- testId
53
- }) {
54
- return /* @__PURE__ */ jsxRuntime.jsx(
55
- "button",
56
- {
57
- type: "button",
58
- className: CONTROL,
59
- title: label,
60
- "aria-label": label,
61
- disabled,
62
- onClick: (event) => {
63
- event.stopPropagation();
64
- onClick();
65
- },
66
- "data-testid": testId,
67
- children
68
- }
69
- );
70
- }
71
- function PresentControls({ view, shown }) {
72
- const current = chunk4TTX6ZNS_cjs.usePresentation((s) => s.current);
73
- const count = chunk4TTX6ZNS_cjs.usePresentation((s) => s.slides.length);
74
- const blank = chunk4TTX6ZNS_cjs.usePresentation((s) => s.blank);
75
- const actions = chunk4TTX6ZNS_cjs.usePresentation.getState();
76
- return /* @__PURE__ */ jsxRuntime.jsxs(
77
- "div",
78
- {
79
- className: ui.cn(
80
- "absolute bottom-4 left-4 z-30 flex items-center gap-0.5 rounded-full bg-black/60 p-1 text-white shadow-lg backdrop-blur transition-opacity duration-300",
81
- shown ? "opacity-100" : "pointer-events-none opacity-0"
82
- ),
83
- onPointerDown: (event) => event.stopPropagation(),
84
- onDoubleClick: (event) => event.stopPropagation(),
85
- role: "toolbar",
86
- "aria-label": "Slideshow",
87
- "data-testid": "present-controls",
88
- children: [
89
- /* @__PURE__ */ jsxRuntime.jsx(
90
- Control,
91
- {
92
- label: "Previous slide (\u2190)",
93
- onClick: () => actions.goTo(current - 1),
94
- disabled: current === 0,
95
- testId: "present-previous",
96
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "size-4" })
97
- }
98
- ),
99
- /* @__PURE__ */ jsxRuntime.jsxs(
100
- "span",
101
- {
102
- className: "min-w-12 text-center text-xs tabular-nums text-white/85",
103
- "data-testid": "present-position",
104
- children: [
105
- current + 1,
106
- " / ",
107
- count
108
- ]
109
- }
110
- ),
111
- /* @__PURE__ */ jsxRuntime.jsx(
112
- Control,
113
- {
114
- label: "Next slide (\u2192, or click the slide)",
115
- onClick: () => actions.goTo(current + 1),
116
- disabled: current >= count - 1,
117
- testId: "present-next",
118
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-4" })
119
- }
120
- ),
121
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-1 h-4 w-px bg-white/25" }),
122
- /* @__PURE__ */ jsxRuntime.jsx(
123
- Control,
124
- {
125
- label: blank ? "Show the slide (B)" : "Blank the screen (B)",
126
- onClick: () => actions.setBlank(!blank),
127
- testId: "present-blank",
128
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.EyeOff, { className: ui.cn("size-4", blank && "text-amber-300") })
129
- }
130
- ),
131
- /* @__PURE__ */ jsxRuntime.jsx(
132
- Control,
133
- {
134
- label: "Full screen (F)",
135
- onClick: () => view && chunkWFMWKPGY_cjs.toggleFullscreen(view),
136
- testId: "present-fullscreen",
137
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Maximize, { className: "size-4" })
138
- }
139
- ),
140
- /* @__PURE__ */ jsxRuntime.jsx(
141
- Control,
142
- {
143
- label: "Stop presenting (Esc)",
144
- onClick: () => actions.setPresenting(false),
145
- testId: "present-stop",
146
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "size-3.5 fill-current" })
147
- }
148
- )
149
- ]
150
- }
151
- );
152
- }
153
49
  var PRESENT_WIDTH = 1280;
154
50
  function useStageShapedWindow(view, presenting) {
155
51
  react$1.useEffect(() => {
@@ -162,11 +58,11 @@ function useStageShapedWindow(view, presenting) {
162
58
  Math.min(PRESENT_WIDTH, Math.round((view.screen.availWidth - chromeWidth) * 0.6))
163
59
  );
164
60
  const height = Math.min(
165
- Math.round(width / chunk4TTX6ZNS_cjs.STAGE_ASPECT),
61
+ Math.round(width / chunkORNLCBNE_cjs.STAGE_ASPECT),
166
62
  view.screen.availHeight - chromeHeight
167
63
  );
168
64
  try {
169
- view.resizeTo(Math.round(height * chunk4TTX6ZNS_cjs.STAGE_ASPECT) + chromeWidth, height + chromeHeight);
65
+ view.resizeTo(Math.round(height * chunkORNLCBNE_cjs.STAGE_ASPECT) + chromeWidth, height + chromeHeight);
170
66
  } catch {
171
67
  return;
172
68
  }
@@ -178,37 +74,15 @@ function useStageShapedWindow(view, presenting) {
178
74
  };
179
75
  }, [view, presenting]);
180
76
  }
181
- var IDLE_MS = 2200;
182
- function usePointerActive(view) {
183
- const [active, setActive] = react$1.useState(true);
184
- react$1.useEffect(() => {
185
- if (!view) return;
186
- setActive(true);
187
- let timer = view.setTimeout(() => setActive(false), IDLE_MS);
188
- const wake = () => {
189
- setActive(true);
190
- view.clearTimeout(timer);
191
- timer = view.setTimeout(() => setActive(false), IDLE_MS);
192
- };
193
- view.addEventListener("pointermove", wake);
194
- view.addEventListener("keydown", wake);
195
- return () => {
196
- view.clearTimeout(timer);
197
- view.removeEventListener("pointermove", wake);
198
- view.removeEventListener("keydown", wake);
199
- };
200
- }, [view]);
201
- return active;
202
- }
203
77
  function PresenterView({ onPresent, ...editor }) {
204
- const presenting = chunk4TTX6ZNS_cjs.usePresentation((s) => s.presenting);
78
+ const presenting = chunkORNLCBNE_cjs.usePresentation((s) => s.presenting);
205
79
  const [view, setView] = react$1.useState(null);
206
80
  const rootRef = react$1.useCallback((node) => {
207
81
  if (node) setView(node.ownerDocument.defaultView);
208
82
  }, []);
209
- chunkWFMWKPGY_cjs.usePresenterKeys(presenting ? view : null, true);
83
+ chunkADPRIBSH_cjs.usePresenterKeys(presenting ? view : null, true);
210
84
  useStageShapedWindow(view, presenting);
211
- const active = usePointerActive(presenting ? view : null);
85
+ const active = chunk3ZZZO4F7_cjs.usePointerActive(presenting ? view : null);
212
86
  if (presenting) {
213
87
  return /* @__PURE__ */ jsxRuntime.jsxs(
214
88
  "div",
@@ -217,23 +91,23 @@ function PresenterView({ onPresent, ...editor }) {
217
91
  className: "relative h-full w-full select-none bg-black",
218
92
  style: { cursor: active ? "default" : "none" },
219
93
  onClick: () => {
220
- const state = chunk4TTX6ZNS_cjs.usePresentation.getState();
94
+ const state = chunkORNLCBNE_cjs.usePresentation.getState();
221
95
  state.goTo(state.current + 1);
222
96
  },
223
- onDoubleClick: () => view && chunkWFMWKPGY_cjs.toggleFullscreen(view),
97
+ onDoubleClick: () => view && chunkADPRIBSH_cjs.toggleFullscreen(view),
224
98
  "data-testid": "presentation-present",
225
99
  children: [
226
- /* @__PURE__ */ jsxRuntime.jsx(chunkDWMWEALB_cjs.PresentationStage, {}),
227
- /* @__PURE__ */ jsxRuntime.jsx(PresentControls, { view, shown: active })
100
+ /* @__PURE__ */ jsxRuntime.jsx(chunkJY7UUZQG_cjs.PresentationStage, {}),
101
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3ZZZO4F7_cjs.PresentControls, { view, shown: active })
228
102
  ]
229
103
  }
230
104
  );
231
105
  }
232
106
  return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: rootRef, className: "h-full min-h-0", "data-testid": "presenter-view", children: /* @__PURE__ */ jsxRuntime.jsx(
233
- chunkDWMWEALB_cjs.SlidesEditor,
107
+ chunkTSFNLY3K_cjs.SlidesEditor,
234
108
  {
235
109
  ...editor,
236
- onPresent: onPresent ?? (() => chunk4TTX6ZNS_cjs.usePresentation.getState().setPresenting(true))
110
+ onPresent: onPresent ?? (() => chunkORNLCBNE_cjs.usePresentation.getState().setPresenting(true))
237
111
  }
238
112
  ) });
239
113
  }
@@ -242,31 +116,31 @@ function ConnectedPresentation() {
242
116
  }
243
117
  function PresentationWindow() {
244
118
  const session = react.useArbiSessionStore();
245
- const notify = chunk4TTX6ZNS_cjs.usePresentation((s) => s.notify);
246
- const presenting = chunk4TTX6ZNS_cjs.usePresentation((s) => s.presenting);
119
+ const notify = chunkORNLCBNE_cjs.usePresentation((s) => s.notify);
120
+ const presenting = chunkORNLCBNE_cjs.usePresentation((s) => s.presenting);
247
121
  const isOpen = react.useArbiSessionState((state) => react.isPanelOpen(state, chunkGFUOCGY6_cjs.PRESENTATION_PANEL));
248
122
  const { user } = react.useArbiSession();
249
123
  const userId = user?.external_id ?? null;
250
124
  const shownFor = react$1.useRef(userId);
251
- const { downloadFile } = chunkDWMWEALB_cjs.usePresentationFiles();
252
- const logoId = chunk4TTX6ZNS_cjs.usePresentation((s) => s.theme.logo?.documentId ?? null);
253
- const controller = chunkDWMWEALB_cjs.usePresentationController(isOpen && !presenting);
125
+ const { downloadFile } = chunkTSFNLY3K_cjs.usePresentationFiles();
126
+ const logoId = chunkORNLCBNE_cjs.usePresentation((s) => s.theme.logo?.documentId ?? null);
127
+ const controller = chunkTSFNLY3K_cjs.usePresentationController(isOpen && !presenting);
254
128
  react$1.useEffect(() => {
255
129
  if (shownFor.current === userId) return;
256
130
  shownFor.current = userId;
257
- chunk4TTX6ZNS_cjs.usePresentation.getState().reset();
131
+ chunkORNLCBNE_cjs.usePresentation.getState().reset();
258
132
  session.closePanel(chunkGFUOCGY6_cjs.PRESENTATION_PANEL);
259
133
  }, [userId, session]);
260
134
  react$1.useEffect(() => {
261
135
  if (!logoId) return;
262
136
  let current = true;
263
- downloadFile(logoId).then((image) => current && chunk4TTX6ZNS_cjs.usePresentation.getState().setLogoImage(image)).catch(() => current && notify("The logo could not be read", "error"));
137
+ downloadFile(logoId).then((image) => current && chunkORNLCBNE_cjs.usePresentation.getState().setLogoImage(image)).catch(() => current && notify("The logo could not be read", "error"));
264
138
  return () => {
265
139
  current = false;
266
140
  };
267
141
  }, [logoId, downloadFile, notify]);
268
142
  react$1.useEffect(() => {
269
- if (!isOpen) chunk4TTX6ZNS_cjs.usePresentation.getState().setPresenting(false);
143
+ if (!isOpen) chunkORNLCBNE_cjs.usePresentation.getState().setPresenting(false);
270
144
  }, [isOpen]);
271
145
  const wasPresenting = react$1.useRef(presenting);
272
146
  react$1.useEffect(() => {
@@ -317,5 +191,5 @@ function PresentationWindow() {
317
191
  }
318
192
 
319
193
  exports.ConnectedPresentation = ConnectedPresentation;
320
- //# sourceMappingURL=ConnectedPresentation-5DOJ35XL.cjs.map
321
- //# sourceMappingURL=ConnectedPresentation-5DOJ35XL.cjs.map
194
+ //# sourceMappingURL=ConnectedPresentation-L32JPRFI.cjs.map
195
+ //# sourceMappingURL=ConnectedPresentation-L32JPRFI.cjs.map