@arbidocs/blocks 0.5.125 → 0.5.126

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 (174) hide show
  1. package/dist/{ClippingMediaViewer-ZFEX5A3U.cjs → ClippingMediaViewer-47BAXNLO.cjs} +10 -11
  2. package/dist/ClippingMediaViewer-47BAXNLO.cjs.map +1 -0
  3. package/dist/{ClippingPdfViewer-3LRTEPHV.cjs → ClippingPdfViewer-D5BYHEAH.cjs} +16 -14
  4. package/dist/ClippingPdfViewer-D5BYHEAH.cjs.map +1 -0
  5. package/dist/{ConnectedCallDock-XJOYVVAH.cjs → ConnectedCallDock-733O5M36.cjs} +11 -11
  6. package/dist/{ConnectedCallDock-XJOYVVAH.cjs.map → ConnectedCallDock-733O5M36.cjs.map} +1 -1
  7. package/dist/{ConnectedCallRoom-CUDYAPQK.cjs → ConnectedCallRoom-TAUGSRGV.cjs} +11 -11
  8. package/dist/{ConnectedCallRoom-CUDYAPQK.cjs.map → ConnectedCallRoom-TAUGSRGV.cjs.map} +1 -1
  9. package/dist/{ConnectedNativeDocxComparison-7QQ55JIO.cjs → ConnectedNativeDocxComparison-HDE522YC.cjs} +12 -12
  10. package/dist/{ConnectedNativeDocxComparison-7QQ55JIO.cjs.map → ConnectedNativeDocxComparison-HDE522YC.cjs.map} +1 -1
  11. package/dist/{ConnectedPresentation-L32JPRFI.cjs → ConnectedPresentation-SI3L77J4.cjs} +36 -37
  12. package/dist/ConnectedPresentation-SI3L77J4.cjs.map +1 -0
  13. package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs → ConnectedProductionSetDialog-LHB4VQWC.cjs} +3 -3
  14. package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs.map → ConnectedProductionSetDialog-LHB4VQWC.cjs.map} +1 -1
  15. package/dist/{ConnectedSlidesTab-P7GGNUTO.cjs → ConnectedSlidesTab-JSPU6EY5.cjs} +39 -45
  16. package/dist/ConnectedSlidesTab-JSPU6EY5.cjs.map +1 -0
  17. package/dist/{ConnectedStreamedWordArtifact-7NJ3N52V.cjs → ConnectedStreamedWordArtifact-4FHPOAFZ.cjs} +12 -12
  18. package/dist/{ConnectedStreamedWordArtifact-7NJ3N52V.cjs.map → ConnectedStreamedWordArtifact-4FHPOAFZ.cjs.map} +1 -1
  19. package/dist/{DocumentReviewCard-BFPOFQXI.cjs → DocumentReviewCard-BDNXP3D4.cjs} +16 -16
  20. package/dist/{DocumentReviewCard-BFPOFQXI.cjs.map → DocumentReviewCard-BDNXP3D4.cjs.map} +1 -1
  21. package/dist/{FilesViewerDialog-MHUVEZ7M.cjs → FilesViewerDialog-WQRNSKWM.cjs} +32 -33
  22. package/dist/FilesViewerDialog-WQRNSKWM.cjs.map +1 -0
  23. package/dist/{NativeDocxEditor-SIRYPMBN.cjs → NativeDocxEditor-SUDULUN3.cjs} +6 -6
  24. package/dist/{NativeDocxEditor-SIRYPMBN.cjs.map → NativeDocxEditor-SUDULUN3.cjs.map} +1 -1
  25. package/dist/{SpotlightStrip-ED22UYTM.cjs → SpotlightStrip-QQ2WUI32.cjs} +28 -29
  26. package/dist/SpotlightStrip-QQ2WUI32.cjs.map +1 -0
  27. package/dist/{WorkspaceTableView-MIFYXV3G.cjs → WorkspaceTableView-3XYAV4BV.cjs} +8 -8
  28. package/dist/{WorkspaceTableView-MIFYXV3G.cjs.map → WorkspaceTableView-3XYAV4BV.cjs.map} +1 -1
  29. package/dist/agents/index.cjs +215 -215
  30. package/dist/ai-IEIR7SC2.cjs +4 -4
  31. package/dist/auth/index.cjs +1 -1
  32. package/dist/calls/index.cjs +4 -4
  33. package/dist/chat/index.cjs +6 -6
  34. package/dist/{chunk-ZZZITHGK.cjs → chunk-26SFI2BH.cjs} +16 -3
  35. package/dist/chunk-26SFI2BH.cjs.map +1 -0
  36. package/dist/{chunk-CQ2RJYE2.cjs → chunk-3IH55CDE.cjs} +3 -3
  37. package/dist/{chunk-CQ2RJYE2.cjs.map → chunk-3IH55CDE.cjs.map} +1 -1
  38. package/dist/{chunk-NG2EE7HR.cjs → chunk-463QM764.cjs} +3 -3
  39. package/dist/{chunk-NG2EE7HR.cjs.map → chunk-463QM764.cjs.map} +1 -1
  40. package/dist/{chunk-7RJZIPLE.cjs → chunk-4KEQ62SL.cjs} +33 -33
  41. package/dist/{chunk-7RJZIPLE.cjs.map → chunk-4KEQ62SL.cjs.map} +1 -1
  42. package/dist/{chunk-AS6QZETU.cjs → chunk-5QERK4PK.cjs} +35 -35
  43. package/dist/{chunk-AS6QZETU.cjs.map → chunk-5QERK4PK.cjs.map} +1 -1
  44. package/dist/{chunk-UA7HOLAZ.cjs → chunk-6B4CCDDB.cjs} +5 -5
  45. package/dist/{chunk-UA7HOLAZ.cjs.map → chunk-6B4CCDDB.cjs.map} +1 -1
  46. package/dist/{chunk-AISYXX4M.cjs → chunk-7NLO7ASW.cjs} +4 -4
  47. package/dist/{chunk-AISYXX4M.cjs.map → chunk-7NLO7ASW.cjs.map} +1 -1
  48. package/dist/{chunk-QIK7E6VF.cjs → chunk-7PN3YENO.cjs} +4 -4
  49. package/dist/{chunk-QIK7E6VF.cjs.map → chunk-7PN3YENO.cjs.map} +1 -1
  50. package/dist/{chunk-JY7UUZQG.cjs → chunk-7Q46YAX4.cjs} +74 -71
  51. package/dist/chunk-7Q46YAX4.cjs.map +1 -0
  52. package/dist/{chunk-J3FFSEKO.cjs → chunk-ADDQKZ5I.cjs} +4 -4
  53. package/dist/{chunk-J3FFSEKO.cjs.map → chunk-ADDQKZ5I.cjs.map} +1 -1
  54. package/dist/{chunk-L6HTZIBD.cjs → chunk-ALK3PUUB.cjs} +3 -3
  55. package/dist/{chunk-L6HTZIBD.cjs.map → chunk-ALK3PUUB.cjs.map} +1 -1
  56. package/dist/{chunk-3ZZZO4F7.cjs → chunk-BY3QA3S5.cjs} +9 -9
  57. package/dist/{chunk-3ZZZO4F7.cjs.map → chunk-BY3QA3S5.cjs.map} +1 -1
  58. package/dist/{chunk-BLIO3B7Z.cjs → chunk-CMPHJRVV.cjs} +3 -3
  59. package/dist/{chunk-BLIO3B7Z.cjs.map → chunk-CMPHJRVV.cjs.map} +1 -1
  60. package/dist/{chunk-3UP32FM3.cjs → chunk-CQQQIZU4.cjs} +5 -5
  61. package/dist/{chunk-3UP32FM3.cjs.map → chunk-CQQQIZU4.cjs.map} +1 -1
  62. package/dist/{chunk-YOEP3I4V.cjs → chunk-E3L5DB5F.cjs} +5 -5
  63. package/dist/{chunk-YOEP3I4V.cjs.map → chunk-E3L5DB5F.cjs.map} +1 -1
  64. package/dist/{chunk-6JMW3IJ2.cjs → chunk-FB3JXSQT.cjs} +103 -100
  65. package/dist/chunk-FB3JXSQT.cjs.map +1 -0
  66. package/dist/{chunk-YVO6Z5BS.cjs → chunk-FGOJBOZX.cjs} +10 -10
  67. package/dist/{chunk-YVO6Z5BS.cjs.map → chunk-FGOJBOZX.cjs.map} +1 -1
  68. package/dist/{chunk-2K6IMIVL.cjs → chunk-GNZAH6UI.cjs} +3 -3
  69. package/dist/{chunk-2K6IMIVL.cjs.map → chunk-GNZAH6UI.cjs.map} +1 -1
  70. package/dist/{chunk-B3R62764.cjs → chunk-I4X72WUT.cjs} +6 -6
  71. package/dist/{chunk-B3R62764.cjs.map → chunk-I4X72WUT.cjs.map} +1 -1
  72. package/dist/{chunk-ORNLCBNE.cjs → chunk-JVEDKKNO.cjs} +43 -4
  73. package/dist/chunk-JVEDKKNO.cjs.map +1 -0
  74. package/dist/{chunk-UUENH4BJ.cjs → chunk-KXIRVKCJ.cjs} +3 -3
  75. package/dist/{chunk-UUENH4BJ.cjs.map → chunk-KXIRVKCJ.cjs.map} +1 -1
  76. package/dist/{chunk-PWBRE7JA.cjs → chunk-LOB2ATS5.cjs} +24 -11
  77. package/dist/chunk-LOB2ATS5.cjs.map +1 -0
  78. package/dist/{chunk-ENOPKX7E.cjs → chunk-LXM5QXII.cjs} +3 -3
  79. package/dist/{chunk-ENOPKX7E.cjs.map → chunk-LXM5QXII.cjs.map} +1 -1
  80. package/dist/{chunk-PSB64T43.cjs → chunk-MLA2BJ2Y.cjs} +28 -28
  81. package/dist/{chunk-PSB64T43.cjs.map → chunk-MLA2BJ2Y.cjs.map} +1 -1
  82. package/dist/chunk-OALQGO5C.cjs +18 -0
  83. package/dist/{chunk-IRGRMJPP.cjs.map → chunk-OALQGO5C.cjs.map} +1 -1
  84. package/dist/{chunk-OGK377NL.cjs → chunk-OHHKBURG.cjs} +33 -33
  85. package/dist/{chunk-OGK377NL.cjs.map → chunk-OHHKBURG.cjs.map} +1 -1
  86. package/dist/{chunk-GAMRVB3I.cjs → chunk-Q6N5D3R5.cjs} +32 -7
  87. package/dist/chunk-Q6N5D3R5.cjs.map +1 -0
  88. package/dist/{chunk-4LP5MJGQ.cjs → chunk-QG2U2JGX.cjs} +4 -4
  89. package/dist/{chunk-4LP5MJGQ.cjs.map → chunk-QG2U2JGX.cjs.map} +1 -1
  90. package/dist/{chunk-MVXHTAJ4.cjs → chunk-QWVUBTW3.cjs} +9 -9
  91. package/dist/{chunk-MVXHTAJ4.cjs.map → chunk-QWVUBTW3.cjs.map} +1 -1
  92. package/dist/{chunk-OHWHYVKG.cjs → chunk-T73BHNQX.cjs} +3 -3
  93. package/dist/{chunk-OHWHYVKG.cjs.map → chunk-T73BHNQX.cjs.map} +1 -1
  94. package/dist/{chunk-ADPRIBSH.cjs → chunk-X7ALF4MP.cjs} +7 -7
  95. package/dist/{chunk-ADPRIBSH.cjs.map → chunk-X7ALF4MP.cjs.map} +1 -1
  96. package/dist/{chunk-PVJ5ODDB.cjs → chunk-XNB27POJ.cjs} +4 -4
  97. package/dist/{chunk-PVJ5ODDB.cjs.map → chunk-XNB27POJ.cjs.map} +1 -1
  98. package/dist/{chunk-TSFNLY3K.cjs → chunk-ZCU72Q76.cjs} +192 -166
  99. package/dist/chunk-ZCU72Q76.cjs.map +1 -0
  100. package/dist/connect/docx.cjs +16 -16
  101. package/dist/connect/index.cjs +1062 -1027
  102. package/dist/connect/index.cjs.map +1 -1
  103. package/dist/connect/viewer.cjs +25 -26
  104. package/dist/connection/ai.d.ts +1 -0
  105. package/dist/connection/docx/ConnectedNativeDocxEditor.js +4 -5
  106. package/dist/connection/docx/ConnectedNativeDocxEditor.js.map +2 -2
  107. package/dist/connection/docx/save-native-version.d.ts +3 -0
  108. package/dist/connection/docx/save-native-version.js +19 -0
  109. package/dist/connection/docx/save-native-version.js.map +7 -0
  110. package/dist/connection/presentation/ClippingPdfViewer.js +8 -5
  111. package/dist/connection/presentation/ClippingPdfViewer.js.map +2 -2
  112. package/dist/connection/presentation/ConnectedSlidesTab.js +8 -13
  113. package/dist/connection/presentation/ConnectedSlidesTab.js.map +2 -2
  114. package/dist/connection/presentation/usePresentationController.js +24 -15
  115. package/dist/connection/presentation/usePresentationController.js.map +2 -2
  116. package/dist/connection/presentation/usePresentationFiles.d.ts +2 -1
  117. package/dist/connection/presentation/usePresentationFiles.js +15 -6
  118. package/dist/connection/presentation/usePresentationFiles.js.map +2 -2
  119. package/dist/connection/search/ConnectedSearchPage.d.ts +0 -11
  120. package/dist/connection/search/ConnectedSearchPage.js +3 -0
  121. package/dist/connection/search/ConnectedSearchPage.js.map +2 -2
  122. package/dist/connection/search/SearchResultRows.js +75 -43
  123. package/dist/connection/search/SearchResultRows.js.map +2 -2
  124. package/dist/connection/viewer/CleanViewControl.d.ts +3 -1
  125. package/dist/connection/viewer/CleanViewControl.js +5 -1
  126. package/dist/connection/viewer/CleanViewControl.js.map +2 -2
  127. package/dist/connection/viewer/ConnectedDocumentViewer.js +1 -1
  128. package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
  129. package/dist/connection/viewer/useCleanView.d.ts +1 -1
  130. package/dist/connection/viewer/useCleanView.js +2 -2
  131. package/dist/connection/viewer/useCleanView.js.map +2 -2
  132. package/dist/connection/viewer/useViewedDocument.d.ts +1 -0
  133. package/dist/document-tools/index.cjs +20 -20
  134. package/dist/docx/NativeDocxEditor.d.ts +2 -1
  135. package/dist/docx/NativeDocxEditor.js +30 -5
  136. package/dist/docx/NativeDocxEditor.js.map +2 -2
  137. package/dist/docx/index.cjs +38 -38
  138. package/dist/embed/index.cjs +19 -19
  139. package/dist/facts/index.cjs +64 -64
  140. package/dist/files/index.cjs +223 -223
  141. package/dist/index.cjs +523 -523
  142. package/dist/presentation/ClipCaptureOverlay.js +14 -1
  143. package/dist/presentation/ClipCaptureOverlay.js.map +2 -2
  144. package/dist/presentation/ClipImage.js +7 -4
  145. package/dist/presentation/ClipImage.js.map +2 -2
  146. package/dist/presentation/ClipTray.js +11 -7
  147. package/dist/presentation/ClipTray.js.map +2 -2
  148. package/dist/presentation/SlidesEditor.js +6 -2
  149. package/dist/presentation/SlidesEditor.js.map +2 -2
  150. package/dist/presentation/store.d.ts +2 -0
  151. package/dist/presentation/store.js +15 -0
  152. package/dist/presentation/store.js.map +3 -3
  153. package/dist/settings/index.cjs +146 -146
  154. package/dist/site/index.cjs +6 -6
  155. package/dist/studio/index.cjs +10 -10
  156. package/dist/workflow-canvas/index.cjs +33 -33
  157. package/node_modules/@arbidocs/coedit/package.json +1 -1
  158. package/package.json +5 -5
  159. package/dist/ClippingMediaViewer-ZFEX5A3U.cjs.map +0 -1
  160. package/dist/ClippingPdfViewer-3LRTEPHV.cjs.map +0 -1
  161. package/dist/ConnectedPresentation-L32JPRFI.cjs.map +0 -1
  162. package/dist/ConnectedSlidesTab-P7GGNUTO.cjs.map +0 -1
  163. package/dist/FilesViewerDialog-MHUVEZ7M.cjs.map +0 -1
  164. package/dist/SpotlightStrip-ED22UYTM.cjs.map +0 -1
  165. package/dist/chunk-6JMW3IJ2.cjs.map +0 -1
  166. package/dist/chunk-GAMRVB3I.cjs.map +0 -1
  167. package/dist/chunk-GFUOCGY6.cjs +0 -32
  168. package/dist/chunk-GFUOCGY6.cjs.map +0 -1
  169. package/dist/chunk-IRGRMJPP.cjs +0 -18
  170. package/dist/chunk-JY7UUZQG.cjs.map +0 -1
  171. package/dist/chunk-ORNLCBNE.cjs.map +0 -1
  172. package/dist/chunk-PWBRE7JA.cjs.map +0 -1
  173. package/dist/chunk-TSFNLY3K.cjs.map +0 -1
  174. package/dist/chunk-ZZZITHGK.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/presentation/MediaClip.tsx","../src/presentation/ClipImage.tsx","../src/presentation/ClipViewControls.tsx","../src/presentation/ClipActionBar.tsx","../src/presentation/SlideDecor.tsx","../src/presentation/StageItem.tsx","../src/presentation/box-style.ts","../src/presentation/StageBox.tsx","../src/presentation/BoxActionBar.tsx","../src/presentation/useClipDrag.ts","../src/presentation/PresentationStage.tsx"],"names":["useObjectUrl","useRef","useEffect","jsx","cn","STAGE_VIDEO_ATTRIBUTE","memo","ClipImage","useState","useLayoutEffect","renderPdfRegion","closePdfRegionImage","jsxs","usePresentation","ChevronUp","ChevronLeft","ChevronRight","ChevronDown","ZoomSlider","Maximize2","MoveHorizontal","MoveVertical","AlignStartVertical","AlignCenterVertical","AlignEndVertical","AlignStartHorizontal","AlignCenterHorizontal","AlignEndHorizontal","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuItem","Popover","PopoverTrigger","ZoomIn","PopoverContent","MoreHorizontal","Crop","Sparkles","DropdownMenuSeparator","BringToFront","SendToBack","Trash2","TEXT_COLORS","SlideDecor","slideGeometry","LAYOUT_INFO","accentColor","textLines","clipEdgeCss","StageItem","reshapeFrame","moveFrame","resizeFrame","frameHeight","pointsToStage","DEFAULT_TEXT_SIZE","STAGE_ASPECT","Fragment","StageBox","moveBox","stretchBox","DEFAULT_INSET","firstRun","boxText","AlignLeft","AlignCenter","AlignRight","styleRuns","AArrowDown","AArrowUp","Bold","Baseline","PaintBucket","DropdownMenuCheckboxItem","Italic","index","forwardRef","GuideLayer","useImperativeHandle","useMemo","FONTS","slideBackgroundCss","backgroundCss","clipLabel"],"mappings":"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","file":"chunk-7Q46YAX4.cjs","sourcesContent":["/**\n * An image or video clip: the original file, cropped to the clipped area with CSS (the element is\n * scaled so the area fills the box), so the browser draws it from the file's own pixels: its\n * native resolution, nothing re-encoded.\n *\n * A video clip waits at its start, muted, in the editor and the tray. On the presented stage\n * (`live`) it has its sound and is played and paused with Space (`toggleStageVideos`); no\n * controls are ever drawn, since the stage is what the audience sees.\n */\n\nimport { useEffect, useRef, type CSSProperties } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport type { Clip } from './model'\nimport { STAGE_VIDEO_ATTRIBUTE } from './stage-videos'\nimport { useObjectUrl } from './useObjectUrl'\n\n/** The element scaled and shifted so the clipped area fills its box. */\nfunction cropStyle(rect: Clip['rect']): CSSProperties {\n return {\n position: 'absolute',\n width: `${100 / rect.w}%`,\n height: `${100 / rect.h}%`,\n left: `${(-rect.x / rect.w) * 100}%`,\n top: `${(-rect.y / rect.h) * 100}%`,\n maxWidth: 'none',\n }\n}\n\nexport function MediaClip({\n clip,\n className,\n live,\n}: {\n clip: Clip\n className?: string\n live: boolean\n}) {\n const url = useObjectUrl(clip.source)\n const videoRef = useRef<HTMLVideoElement>(null)\n\n // A video shows its first frame at the clip's start.\n useEffect(() => {\n const video = videoRef.current\n if (!video) return\n const toStart = () => {\n video.currentTime = clip.start ?? 0\n }\n if (video.readyState >= 1) toStart()\n else video.addEventListener('loadedmetadata', toStart, { once: true })\n return () => video.removeEventListener('loadedmetadata', toStart)\n }, [clip.start, url])\n\n return (\n <div\n className={cn('relative h-full w-full overflow-hidden bg-black', className)}\n data-testid={`clip-image-${clip.id}`}\n >\n {clip.kind === 'video' ? (\n <video\n ref={videoRef}\n src={url}\n muted={!live}\n playsInline\n preload=\"auto\"\n className=\"pointer-events-none block select-none\"\n style={cropStyle(clip.rect)}\n {...(live ? { [STAGE_VIDEO_ATTRIBUTE]: '' } : {})}\n />\n ) : (\n <img\n src={url}\n alt={clip.caption}\n draggable={false}\n className=\"pointer-events-none block select-none\"\n style={cropStyle(clip.rect)}\n />\n )}\n </div>\n )\n}\n","/**\n * A clip as shown on a slide or in the tray.\n *\n * A PDF clip is drawn into a canvas the size of its box in device pixels (measured in whichever\n * window it is in), from a bitmap of its region rendered for that size: as sharp as the screen\n * allows. The canvas remembers what area its bitmap covers, so when the clip is scrolled or\n * resized it is redrawn at once from the bitmap it has (shifted or scaled: cheap), and the sharp\n * rendering follows once the change settles. An older render still running is cancelled; renders\n * across clips are queued a few at a time (`renderPdfRegion`), so the page stays smooth.\n *\n * An image or video clip is its own file, cropped (`MediaClip`).\n */\n\nimport { memo, useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport { closePdfRegionImage, renderPdfRegion, type PdfRegionImage } from '@arbidocs/react/viewers'\nimport { cn } from '@arbidocs/react/ui'\nimport { MediaClip } from './MediaClip'\nimport type { Clip, Rect } from './model'\n\n/** Rendered widths are rounded up to this step, so small size changes reuse the rendering. */\nconst WIDTH_STEP = 160\n/** A new rendering is asked for once the clip has stopped changing for this long. */\nconst SETTLE_MS = 150\n\nexport interface ClipImageProps {\n clip: Clip\n className?: string\n /** On the presented stage: a video clip plays with its sound (the editor's copy is muted). */\n live?: boolean\n}\n\n/** An image or video clip is its own file, cropped; a PDF clip is drawn for its size. */\nexport const ClipImage = memo(function ClipImage({\n clip,\n className,\n live = false,\n}: ClipImageProps) {\n return clip.kind === 'pdf' ? (\n <PdfClip clip={clip} className={className} />\n ) : (\n <MediaClip clip={clip} className={className} live={live} />\n )\n})\n\ninterface Rendered {\n image: PdfRegionImage\n /** The page area the image shows. */\n rect: Rect\n /** Its width in device pixels. */\n width: number\n}\n\nconst sameRect = (a: Rect, b: Rect) => a.x === b.x && a.y === b.y && a.w === b.w && a.h === b.h\n\nfunction PdfClip({ clip, className }: Omit<ClipImageProps, 'live'>) {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n // The canvas's size in device pixels.\n const [size, setSize] = useState({ width: 0, height: 0 })\n const [rendered, setRendered] = useState<Rendered | null>(null)\n const [failed, setFailed] = useState(false)\n\n // Layout dimensions exclude the spotlight's temporary fly-in transform. A transformed\n // bounding box can be thumbnail-sized, and transforms never trigger ResizeObserver again.\n // Render from the PDF at the final layout size in this window's device pixels.\n useEffect(() => {\n const canvas = canvasRef.current\n const view = canvas?.ownerDocument.defaultView\n if (!canvas || !view) return\n const measure = () => {\n const dpr = view.devicePixelRatio || 1\n const width = Math.max(1, Math.round(canvas.clientWidth * dpr))\n const height = Math.max(1, Math.round(canvas.clientHeight * dpr))\n setSize((s) => (s.width === width && s.height === height ? s : { width, height }))\n }\n measure()\n const Observer = (view as typeof window).ResizeObserver ?? ResizeObserver\n const observer = new Observer(measure)\n observer.observe(canvas)\n view.addEventListener('resize', measure)\n return () => {\n observer.disconnect()\n view.removeEventListener('resize', measure)\n }\n }, [])\n\n // Draw what there is now: the last rendering placed where its area falls in the clip's area.\n useLayoutEffect(() => {\n const canvas = canvasRef.current\n const context = canvas?.getContext('2d')\n if (!canvas || !context || !size.width) return\n if (canvas.width !== size.width) canvas.width = size.width\n if (canvas.height !== size.height) canvas.height = size.height\n context.fillStyle = '#fff'\n context.fillRect(0, 0, size.width, size.height)\n if (!rendered) return\n const { rect } = clip\n const sx = size.width / rect.w\n const sy = size.height / rect.h\n try {\n context.drawImage(\n rendered.image,\n (rendered.rect.x - rect.x) * sx,\n (rendered.rect.y - rect.y) * sy,\n rendered.rect.w * sx,\n rendered.rect.h * sy\n )\n } catch {\n // A rendering already freed: draw it again rather than fail.\n setRendered(null)\n }\n }, [size, rendered, clip])\n\n // Render the region again once the clip has settled, if what is drawn is not sharp or not it.\n const wanted = Math.ceil(size.width / WIDTH_STEP) * WIDTH_STEP\n const stale =\n wanted > 0 &&\n (!rendered ||\n !sameRect(rendered.rect, clip.rect) ||\n wanted > rendered.width ||\n wanted < rendered.width / 2)\n useEffect(() => {\n if (!stale) return\n const controller = new AbortController()\n const rect = clip.rect\n const timer = setTimeout(() => {\n renderPdfRegion({\n file: clip.source,\n page: clip.page,\n rect,\n masks: clip.masks,\n width: wanted,\n signal: controller.signal,\n })\n .then((image) => {\n if (controller.signal.aborted) return closePdfRegionImage(image)\n setFailed(false)\n setRendered({ image, rect, width: wanted })\n })\n .catch(() => !controller.signal.aborted && setFailed(true))\n }, SETTLE_MS)\n return () => {\n clearTimeout(timer)\n controller.abort()\n }\n }, [stale, wanted, clip.source, clip.page, clip.rect, clip.masks])\n\n // A rendering's memory is freed once the next has replaced it on screen. Never in a cleanup: a\n // remount (React's StrictMode replays mount effects) would free the one still in use. One left\n // when the clip goes is reclaimed by the browser with it.\n const previous = useRef<Rendered | null>(null)\n useEffect(() => {\n if (previous.current && previous.current !== rendered) {\n closePdfRegionImage(previous.current.image)\n }\n previous.current = rendered\n }, [rendered])\n\n return (\n <div\n className={cn('relative h-full w-full overflow-hidden bg-white', className)}\n data-testid={`clip-image-${clip.id}`}\n >\n <canvas\n ref={canvasRef}\n className=\"pointer-events-none block h-full w-full\"\n role=\"img\"\n aria-label={clip.caption}\n aria-busy={!rendered}\n />\n {failed && !rendered && (\n <div className=\"absolute inset-0 flex items-center justify-center p-2 text-center text-xs text-neutral-500\">\n {\"Couldn't draw this clip\"}\n </div>\n )}\n </div>\n )\n}\n","/**\n * A clip's view controls (in its action bar's View popover, so nothing covers what it shows):\n * arrows scroll what the clip shows over its source (a press steps, holding keeps scrolling; an\n * arrow at the source's edge is off), and a zoom slider zooms about the clip's centre.\n * The clip's frame on the slide does not change; only the part of the source it shows. Presses\n * here never start moving the clip.\n */\n\nimport { useEffect, useRef, type PointerEvent as ReactPointerEvent, type ReactNode } from 'react'\nimport { ChevronDown, ChevronLeft, ChevronRight, ChevronUp } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ZoomSlider } from '../components/ZoomSlider'\nimport type { Clip } from './model'\nimport { usePresentation } from './store'\n\n/** One step scrolls this much of what the clip shows. */\nconst PAN_STEP = 0.1\n/** The closest a clip zooms, in percent of how close it was cut. */\nconst MAX_ZOOM = 800\n/** Holding a button repeats it after this long, this often. */\nconst HOLD_DELAY = 350\nconst HOLD_EVERY = 90\n\nconst BUTTON =\n 'flex size-7 items-center justify-center rounded-full border border-border bg-background text-foreground hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-30 pointer-coarse:size-11'\n\n/** A button that acts on press and keeps acting while held. */\nfunction HoldButton({\n label,\n disabled,\n onStep,\n className,\n children,\n}: {\n label: string\n disabled?: boolean\n onStep: () => void\n className?: string\n children: ReactNode\n}) {\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null)\n const stop = () => {\n if (timer.current) clearTimeout(timer.current)\n timer.current = null\n }\n useEffect(() => stop, [])\n useEffect(() => {\n if (disabled) stop()\n }, [disabled])\n const start = (event: ReactPointerEvent) => {\n event.stopPropagation()\n if (disabled || event.button !== 0) return\n onStep()\n const repeat = () => {\n onStep()\n timer.current = setTimeout(repeat, HOLD_EVERY)\n }\n timer.current = setTimeout(repeat, HOLD_DELAY)\n }\n return (\n <button\n type=\"button\"\n className={cn(BUTTON, className)}\n title={label}\n aria-label={label}\n disabled={disabled}\n onPointerDown={start}\n onPointerUp={stop}\n onPointerLeave={stop}\n onPointerCancel={stop}\n // Keyboard: Enter / Space step once.\n onClick={(event) => event.detail === 0 && onStep()}\n >\n {children}\n </button>\n )\n}\n\nexport function ClipViewControls({ clip }: { clip: Clip }) {\n const { panClip, setClipZoom } = usePresentation.getState()\n const { rect } = clip\n const zoomBase = clip.zoomBase ?? rect.w\n // As far out as it goes: the widest area of this shape the source holds.\n const minZoom = Math.min(100, Math.floor((zoomBase / Math.min(1, rect.w / rect.h)) * 100))\n const pan = (dx: number, dy: number) => () => panClip(clip.id, dx * rect.w, dy * rect.h)\n const zoom = Math.round((zoomBase / rect.w) * 100)\n const edge = 1e-6\n return (\n <div\n className=\"flex flex-col items-center gap-2 p-1\"\n // A press here is not a press on the clip (which would start moving it).\n onPointerDown={(event) => event.stopPropagation()}\n data-testid=\"clip-view-controls\"\n >\n {/* Move the view: what the clip shows, over its source (the wheel does the same). */}\n <div className=\"grid grid-cols-3 grid-rows-3 place-items-center gap-0.5\">\n <HoldButton\n label=\"Show more above\"\n disabled={rect.y <= edge}\n onStep={pan(0, -PAN_STEP)}\n className=\"col-start-2 row-start-1\"\n >\n <ChevronUp className=\"size-4\" />\n </HoldButton>\n <HoldButton\n label=\"Show more on the left\"\n disabled={rect.x <= edge}\n onStep={pan(-PAN_STEP, 0)}\n className=\"col-start-1 row-start-2\"\n >\n <ChevronLeft className=\"size-4\" />\n </HoldButton>\n <HoldButton\n label=\"Show more on the right\"\n disabled={rect.x + rect.w >= 1 - edge}\n onStep={pan(PAN_STEP, 0)}\n className=\"col-start-3 row-start-2\"\n >\n <ChevronRight className=\"size-4\" />\n </HoldButton>\n <HoldButton\n label=\"Show more below\"\n disabled={rect.y + rect.h >= 1 - edge}\n onStep={pan(0, PAN_STEP)}\n className=\"col-start-2 row-start-3\"\n >\n <ChevronDown className=\"size-4\" />\n </HoldButton>\n </div>\n {/* Zoom: a slider, from as far out as the source allows to MAX_ZOOM. */}\n <div data-testid=\"clip-zoom-control\">\n <ZoomSlider\n value={zoom}\n min={minZoom}\n max={Math.max(MAX_ZOOM, zoom)}\n zoomOutStep={25}\n onChange={(value) => setClipZoom(clip.id, value)}\n label=\"Zoom\"\n valueLabel={<span data-testid=\"clip-zoom\">{zoom}%</span>}\n className=\"pointer-coarse:h-11\"\n sliderClassName=\"w-28\"\n />\n </div>\n </div>\n )\n}\n","/**\n * The floating action bar over the selected clip (the markup overlay's pattern): size it to the\n * stage, align it, put it in front or behind, take it off the slide. Icons with labels on hover\n * (`title`: portalled tooltips misplace in a popped-out window).\n */\n\nimport type { ReactNode } from 'react'\nimport {\n AlignCenterHorizontal,\n AlignCenterVertical,\n AlignEndHorizontal,\n AlignEndVertical,\n AlignStartHorizontal,\n AlignStartVertical,\n BringToFront,\n Crop,\n Maximize2,\n MoreHorizontal,\n MoveHorizontal,\n MoveVertical,\n SendToBack,\n Sparkles,\n Trash2,\n ZoomIn,\n} from 'lucide-react'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Popover,\n PopoverContent,\n PopoverTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { ClipViewControls } from './ClipViewControls'\nimport type { Alignment } from './model'\nimport { usePresentation, type FrameCommand } from './store'\n\nexport const ACTION =\n 'inline-flex size-7 items-center justify-center rounded text-foreground hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:size-11'\n\nconst SIZES: { command: FrameCommand; label: string; icon: ReactNode }[] = [\n { command: 'fit', label: 'Fit the slide', icon: <Maximize2 className=\"size-4\" /> },\n { command: 'fullWidth', label: 'Full width', icon: <MoveHorizontal className=\"size-4\" /> },\n { command: 'fullHeight', label: 'Full height', icon: <MoveVertical className=\"size-4\" /> },\n]\n\nconst ALIGNMENTS: { alignment: Alignment; label: string; icon: ReactNode }[] = [\n { alignment: 'left', label: 'Left', icon: <AlignStartVertical className=\"size-4\" /> },\n { alignment: 'centre', label: 'Centre', icon: <AlignCenterVertical className=\"size-4\" /> },\n { alignment: 'right', label: 'Right', icon: <AlignEndVertical className=\"size-4\" /> },\n { alignment: 'top', label: 'Top', icon: <AlignStartHorizontal className=\"size-4\" /> },\n { alignment: 'middle', label: 'Middle', icon: <AlignCenterHorizontal className=\"size-4\" /> },\n { alignment: 'bottom', label: 'Bottom', icon: <AlignEndHorizontal className=\"size-4\" /> },\n]\n\nexport function Action({\n label,\n onClick,\n children,\n}: {\n label: string\n onClick: () => void\n children: ReactNode\n}) {\n return (\n <button type=\"button\" className={ACTION} title={label} aria-label={label} onClick={onClick}>\n {children}\n </button>\n )\n}\n\nexport interface ClipActionBarProps {\n clipId: string\n /** The clip's top-left, as fractions of the stage. */\n at: { x: number; y: number }\n onRemoved: () => void\n /** An image clip: make a new version of the image (Generate image with it as the reference). */\n onEditImage?: () => void\n /** An image clip: choose the part of the image it shows. */\n onCropImage?: () => void\n}\n\nexport function ClipActionBar({\n clipId,\n at,\n onRemoved,\n onEditImage,\n onCropImage,\n}: ClipActionBarProps) {\n const actions = usePresentation.getState()\n const clip = usePresentation((state) => state.clips.find((entry) => entry.id === clipId))\n return (\n <div\n role=\"toolbar\"\n aria-label=\"Clip\"\n className=\"absolute z-20 flex items-center gap-0.5 rounded-md border border-border bg-background p-0.5 shadow-md\"\n style={{ left: `${at.x * 100}%`, top: `calc(${at.y * 100}% - 40px)` }}\n // Its clicks are not a click on the stage (which would deselect the clip).\n onPointerDown={(event) => event.stopPropagation()}\n data-testid=\"clip-action-bar\"\n >\n {/* The commonest: fit it to the slide, line it up, adjust what it shows. */}\n <Action label=\"Fit the slide\" onClick={() => actions.applyFrame(clipId, 'fit')}>\n <Maximize2 className=\"size-4\" />\n </Action>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button type=\"button\" className={ACTION} title=\"Align\" aria-label=\"Align\">\n <AlignCenterHorizontal className=\"size-4\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {ALIGNMENTS.map(({ alignment, label, icon }) => (\n <DropdownMenuItem key={alignment} onSelect={() => actions.align(clipId, alignment)}>\n {icon}\n <span className=\"ml-2\">{label}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n {clip && (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className={ACTION}\n title=\"View: scroll or zoom what the clip shows (or scroll over it)\"\n aria-label=\"View\"\n data-testid=\"clip-view-button\"\n >\n <ZoomIn className=\"size-4\" />\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-auto p-2\">\n <ClipViewControls clip={clip} />\n </PopoverContent>\n </Popover>\n )}\n {/* The rest, behind \"…\". */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className={ACTION}\n title=\"More\"\n aria-label=\"More\"\n data-testid=\"clip-more-menu\"\n >\n <MoreHorizontal className=\"size-4\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {SIZES.filter(({ command }) => command !== 'fit').map(({ command, label, icon }) => (\n <DropdownMenuItem key={command} onSelect={() => actions.applyFrame(clipId, command)}>\n {icon}\n <span className=\"ml-2\">{label}</span>\n </DropdownMenuItem>\n ))}\n {onCropImage && (\n <DropdownMenuItem onSelect={onCropImage}>\n <Crop className=\"size-4\" />\n <span className=\"ml-2\">Crop</span>\n </DropdownMenuItem>\n )}\n {onEditImage && (\n <DropdownMenuItem onSelect={onEditImage}>\n <Sparkles className=\"size-4\" />\n <span className=\"ml-2\">Edit image</span>\n </DropdownMenuItem>\n )}\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => actions.bringToFront(clipId)}>\n <BringToFront className=\"size-4\" />\n <span className=\"ml-2\">Bring to front</span>\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => actions.sendToBack(clipId)}>\n <SendToBack className=\"size-4\" />\n <span className=\"ml-2\">Send to back</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n <div className=\"mx-0.5 h-5 w-px bg-border\" />\n <button\n type=\"button\"\n className={cn(ACTION, 'text-destructive hover:bg-destructive/10')}\n title=\"Remove from slide (Delete)\"\n aria-label=\"Remove from slide\"\n onClick={() => {\n actions.unplace(clipId)\n onRemoved()\n }}\n >\n <Trash2 className=\"size-4\" />\n </button>\n </div>\n )\n}\n","/**\n * What a slide shows besides its clips, by its layout and the theme: its title with the accent\n * rule, its points (accent bullets) or subtitle, and the logo in the footer. Positioned on the\n * stage from `slideGeometry`, sized in container units (`cqw`) so it scales with the stage. The\n * saved PDF and the PowerPoint export draw the same geometry.\n *\n * In the editor (`editing`), the title and text are typed on the slide itself: a click swaps the\n * text for a field with the same type, size and place, so nothing moves while it is edited.\n */\n\nimport { memo, useState, type CSSProperties } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport type { Slide } from './model'\nimport { LAYOUT_INFO, slideGeometry, textLines, type Box, type TextBox } from './slide-layout'\nimport { TEXT_COLORS, accentColor, type Theme } from './theme'\nimport { useObjectUrl } from './useObjectUrl'\n\n/** Typing a slide's title and text on the slide. */\nexport interface SlideTextEditing {\n onTitle(title: string): void\n onPoints(points: string): void\n}\n\nconst boxStyle = (box: Box) => ({\n left: `${box.x * 100}%`,\n top: `${box.y * 100}%`,\n width: `${box.w * 100}%`,\n height: `${box.h * 100}%`,\n})\n\nconst textStyle = (box: TextBox, color: string): CSSProperties => ({\n ...boxStyle(box),\n fontSize: `${box.size * 100}cqw`,\n fontWeight: box.weight,\n lineHeight: box.leading,\n color,\n letterSpacing: box.tone === 'title' ? '-0.01em' : undefined,\n})\n\nconst PLACEHOLDER_COLOR = 'rgba(255,255,255,0.32)'\n\nfunction Text({\n box,\n lines,\n accent,\n placeholder,\n onEdit,\n testId,\n}: {\n box: TextBox\n lines: string[]\n accent: string\n /** Shown faintly in the editor while the text is empty. */\n placeholder?: string\n /** A click starts typing (the editor). */\n onEdit?: () => void\n testId: string\n}) {\n const empty = lines.length === 0\n if (empty && !placeholder) return null\n return (\n <div\n className={cn(\n 'absolute flex flex-col overflow-hidden',\n onEdit\n ? 'pointer-events-auto cursor-text rounded-[0.3cqw] hover:outline hover:outline-1 hover:outline-white/25'\n : 'pointer-events-none',\n box.align === 'center' && 'text-center',\n box.bullets && 'gap-[0.6cqw]',\n box.anchor === 'middle' && 'justify-center',\n box.anchor === 'bottom' && 'justify-end'\n )}\n style={textStyle(box, empty ? PLACEHOLDER_COLOR : TEXT_COLORS[box.tone])}\n onPointerDown={onEdit ? (event) => event.stopPropagation() : undefined}\n onClick={onEdit}\n data-testid={testId}\n >\n {(empty ? [placeholder!] : lines).map((line, index) =>\n box.bullets ? (\n <div key={index} className=\"flex items-baseline gap-[0.8em]\">\n <span\n aria-hidden\n className=\"inline-block size-[0.42em] shrink-0 -translate-y-[0.12em]\"\n style={{ background: empty ? 'currentColor' : accent }}\n />\n <span>{line}</span>\n </div>\n ) : (\n <div key={index}>{line}</div>\n )\n )}\n </div>\n )\n}\n\n/** The field a title or text is typed in: the text's own type, size and place. */\nfunction TextField({\n box,\n value,\n placeholder,\n multiline,\n onChange,\n onDone,\n testId,\n}: {\n box: TextBox\n value: string\n placeholder: string\n multiline: boolean\n onChange: (value: string) => void\n onDone: () => void\n testId: string\n}) {\n return (\n <textarea\n autoFocus\n value={value}\n placeholder={placeholder}\n onChange={(event) =>\n onChange(multiline ? event.target.value : event.target.value.replace(/\\n/g, ' '))\n }\n onBlur={onDone}\n onPointerDown={(event) => event.stopPropagation()}\n onKeyDown={(event) => {\n if (event.key === 'Escape' || (!multiline && event.key === 'Enter')) {\n event.preventDefault()\n event.currentTarget.blur()\n }\n }}\n className={cn(\n 'pointer-events-auto absolute resize-none overflow-hidden rounded-[0.3cqw] bg-white/5 p-0 outline outline-1 outline-white/40 placeholder:text-white/30 focus:outline-white/60',\n box.align === 'center' && 'text-center'\n )}\n style={{\n ...textStyle(box, TEXT_COLORS[box.tone]),\n fontFamily: 'inherit',\n // Bulleted lines keep their indent while typed.\n paddingLeft: box.bullets ? '1.22em' : undefined,\n }}\n aria-label={placeholder}\n data-testid={testId}\n />\n )\n}\n\nfunction Logo({ image, box }: { image: Blob; box: Box }) {\n const url = useObjectUrl(image)\n if (!url) return null\n return (\n <img\n src={url}\n alt=\"\"\n className=\"pointer-events-none absolute object-contain opacity-90\"\n style={{ ...boxStyle(box), objectPosition: box.x < 0.5 ? 'left bottom' : 'right bottom' }}\n data-testid=\"stage-logo\"\n />\n )\n}\n\nexport const SlideDecor = memo(function SlideDecor({\n slide,\n theme,\n labels,\n logoImage,\n editable,\n editing,\n dim,\n}: {\n slide: Pick<Slide, 'layout' | 'caption' | 'points'>\n theme: Theme\n labels: boolean\n logoImage: Blob | null\n editable: boolean\n editing?: SlideTextEditing\n dim?: boolean\n}) {\n const [typing, setTyping] = useState<'title' | 'text' | null>(null)\n const geometry = slideGeometry(slide, { labels, logo: theme.logo?.corner ?? null })\n const title = slide.caption.trim()\n const titled = slide.layout === 'title' || slide.layout === 'section'\n const info = LAYOUT_INFO[slide.layout]\n return (\n <div className={cn('pointer-events-none absolute inset-0', dim && 'opacity-30')}>\n {!geometry.title ? null : editing && typing === 'title' ? (\n <TextField\n box={geometry.title}\n value={slide.caption}\n placeholder=\"Title\"\n multiline={false}\n onChange={editing.onTitle}\n onDone={() => setTyping(null)}\n testId=\"stage-slide-caption-input\"\n />\n ) : (\n <Text\n box={geometry.title}\n lines={title ? [title] : []}\n accent={accentColor(theme.accent)}\n placeholder={editable && (titled || editing) ? 'Click to add a title' : undefined}\n onEdit={editing ? () => setTyping('title') : undefined}\n testId=\"stage-slide-caption\"\n />\n )}\n {geometry.rule && (title || (editable && titled)) && (\n <div\n className=\"absolute\"\n style={{ ...boxStyle(geometry.rule), background: accentColor(theme.accent) }}\n />\n )}\n {geometry.text &&\n (editing && typing === 'text' ? (\n <TextField\n box={geometry.text}\n value={slide.points}\n placeholder={info.text ?? ''}\n multiline\n onChange={editing.onPoints}\n onDone={() => setTyping(null)}\n testId=\"stage-slide-points-input\"\n />\n ) : (\n <Text\n box={geometry.text}\n lines={textLines(slide.points)}\n accent={accentColor(theme.accent)}\n placeholder={editable ? info.text : undefined}\n onEdit={editing ? () => setTyping('text') : undefined}\n testId=\"stage-slide-points\"\n />\n ))}\n {geometry.logo && logoImage && <Logo image={logoImage} box={geometry.logo} />}\n </div>\n )\n})\n","/**\n * One clip on the stage, and its own gestures: moved by dragging it, resized from a corner (its\n * shape kept), reshaped from a side's middle (more or less of the page that way), snapping to the\n * stage and to the other clips.\n *\n * Built for smooth dragging: while a clip is moved or resized nothing re-renders and nothing is\n * laid out again. Its element is moved by a GPU transform (translate, scale) once per animation\n * frame, and the new frame reaches the presentation once, when the drag ends. Only reshaping, which\n * changes what the clip shows, re-renders the clip itself (and nothing else). The component is\n * memoised: other clips, the slide's text and the other slides are untouched by its drags.\n */\n\nimport { memo, useRef, useState, type PointerEvent as ReactPointerEvent } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ClipImage } from './ClipImage'\nimport {\n frameHeight,\n moveFrame,\n reshapeFrame,\n resizeFrame,\n type Clip,\n type Corner,\n type Edge,\n type Frame,\n type Guide,\n type Placed,\n} from './model'\nimport { TEXT_COLORS, clipEdgeCss } from './theme'\n\ntype Kind = 'move' | Corner | Edge\n\nconst isEdge = (kind: Kind): kind is Edge =>\n kind === 'n' || kind === 'e' || kind === 's' || kind === 'w'\n\n/** The handle on each side's middle: drag it to show more (or less) of the page that way. */\nconst EDGES: { edge: Edge; left: string; top: string; cursor: string; label: string }[] = [\n { edge: 'n', left: '50%', top: '0%', cursor: 'ns-resize', label: 'top' },\n { edge: 'e', left: '100%', top: '50%', cursor: 'ew-resize', label: 'right' },\n { edge: 's', left: '50%', top: '100%', cursor: 'ns-resize', label: 'bottom' },\n { edge: 'w', left: '0%', top: '50%', cursor: 'ew-resize', label: 'left' },\n]\n\nconst CORNERS: { corner: Corner; left: string; top: string; cursor: string }[] = [\n { corner: 'nw', left: '0%', top: '0%', cursor: 'nwse-resize' },\n { corner: 'ne', left: '100%', top: '0%', cursor: 'nesw-resize' },\n { corner: 'sw', left: '0%', top: '100%', cursor: 'nesw-resize' },\n { corner: 'se', left: '100%', top: '100%', cursor: 'nwse-resize' },\n]\n\nconst EDGE_CSS = clipEdgeCss()\n\n/** What a stage gives its clips (stable across renders: the clips are memoised). */\nexport interface StageItemHost {\n /** The stage's box on screen, as a gesture begins. */\n stageBox(): DOMRect | null\n /** The other clips of the slide, as a gesture begins: what this one snaps to. */\n others(clipId: string): Placed[]\n select(clipId: string): void\n /** The snap lines to draw while a clip is dragged (empty: none). */\n guides(guides: Guide[]): void\n /** A drag is on (the stage hides the selected clip's floating actions meanwhile). */\n dragging(on: boolean): void\n /** The drag's result, once it ends. */\n commit(clipId: string, frame: Frame, shape?: Pick<Clip, 'rect' | 'aspect'>): void\n}\n\nexport interface StageItemProps {\n clip: Clip\n frame: Frame\n editable: boolean\n selected: boolean\n dim: boolean\n /** Its source label, under it (empty: none). */\n label: string\n host: StageItemHost\n}\n\ninterface Gesture {\n kind: Kind\n pointer: { x: number; y: number }\n frame: Frame\n shape: Pick<Clip, 'rect' | 'aspect'>\n stage: DOMRect\n others: Placed[]\n /** The latest result, applied at the next animation frame and committed at the end. */\n next: { frame: Frame; shape?: Pick<Clip, 'rect' | 'aspect'>; guides: Guide[] } | null\n request: number | null\n guidesKey: string\n}\n\nexport const StageItem = memo(function StageItem({\n clip,\n frame,\n editable,\n selected,\n dim,\n label,\n host,\n}: StageItemProps) {\n const element = useRef<HTMLDivElement>(null)\n const gesture = useRef<Gesture | null>(null)\n // Being reshaped: drawn as it will be (the one case that re-renders while dragging).\n const [reshape, setReshape] = useState<{\n frame: Frame\n shape: Pick<Clip, 'rect' | 'aspect'>\n } | null>(null)\n\n const shown = reshape ? { ...clip, ...reshape.shape } : clip\n const box = reshape?.frame ?? frame\n\n const view = () => element.current?.ownerDocument.defaultView ?? window\n\n const apply = () => {\n const g = gesture.current\n const el = element.current\n if (!g) return\n g.request = null\n const next = g.next\n if (!next || !el) return\n if (next.shape) {\n setReshape({ frame: next.frame, shape: next.shape })\n } else {\n // Moved or resized: a transform from where the drag began (top left fixed as the origin).\n const dx = (next.frame.x - g.frame.x) * g.stage.width\n const dy = (next.frame.y - g.frame.y) * g.stage.height\n const scale = next.frame.w / g.frame.w\n el.style.transform = `translate3d(${dx}px, ${dy}px, 0) scale(${scale})`\n }\n const key = next.guides.map((guide) => `${guide.axis}${guide.at}`).join()\n if (key !== g.guidesKey) {\n g.guidesKey = key\n host.guides(next.guides)\n }\n }\n\n const start = (event: ReactPointerEvent, kind: Kind) => {\n if (!editable || event.button !== 0) return\n const stage = host.stageBox()\n if (!stage) return\n event.preventDefault()\n event.stopPropagation()\n host.select(clip.id)\n event.currentTarget.setPointerCapture(event.pointerId)\n gesture.current = {\n kind,\n pointer: { x: event.clientX, y: event.clientY },\n frame,\n shape: { rect: clip.rect, aspect: clip.aspect },\n stage,\n others: host.others(clip.id),\n next: null,\n request: null,\n guidesKey: '',\n }\n }\n\n const move = (event: ReactPointerEvent) => {\n const g = gesture.current\n if (!g) return\n if (!g.next) {\n // The first move: the drag is on (handles and actions hide; the layer is promoted).\n host.dragging(true)\n if (element.current) element.current.style.willChange = 'transform'\n }\n const dx = (event.clientX - g.pointer.x) / g.stage.width\n const dy = (event.clientY - g.pointer.y) / g.stage.height\n // Alt (Option) places freely, without snapping.\n const free = event.altKey\n if (isEdge(g.kind)) {\n const result = reshapeFrame(g.frame, g.shape, g.kind, dx, dy, g.others, free)\n g.next = {\n frame: result.frame,\n shape: { rect: result.rect, aspect: result.aspect },\n guides: result.guides,\n }\n } else {\n g.next =\n g.kind === 'move'\n ? moveFrame(g.frame, g.shape.aspect, dx, dy, g.others, free)\n : resizeFrame(g.frame, g.shape.aspect, g.kind, dx, dy, g.others, free)\n }\n g.request ??= view().requestAnimationFrame(apply)\n }\n\n const end = () => {\n const g = gesture.current\n gesture.current = null\n if (!g) return\n if (g.request !== null) view().cancelAnimationFrame(g.request)\n const el = element.current\n if (el) {\n el.style.transform = ''\n el.style.willChange = ''\n }\n if (!g.next) return // a click: the clip is selected, nothing moved\n setReshape(null)\n host.dragging(false)\n host.guides([])\n host.commit(clip.id, g.next.frame, g.next.shape)\n }\n\n return (\n <div\n ref={element}\n className={cn(\n 'absolute origin-top-left',\n // Lifted off the background (a picture that is part of the slide's design is not).\n !clip.plain && 'rounded-[0.6cqw] shadow-[0_0.5cqw_1.6cqw_rgba(0,0,0,0.5)]',\n editable && 'cursor-move touch-none',\n selected && 'outline outline-2 outline-offset-2 outline-primary',\n dim && 'opacity-30'\n )}\n style={{\n left: `${box.x * 100}%`,\n top: `${box.y * 100}%`,\n width: `${box.w * 100}%`,\n height: `${frameHeight(box, shown.aspect) * 100}%`,\n }}\n onPointerDown={(event) => start(event, 'move')}\n onPointerMove={move}\n onPointerUp={end}\n onPointerCancel={end}\n data-testid={`stage-item-${clip.id}`}\n >\n {/* Softly rounded, with a faint light edge: crisp on any background. */}\n <div className={cn('absolute inset-0 overflow-hidden', !clip.plain && 'rounded-[0.6cqw]')}>\n <ClipImage clip={shown} live={!editable} />\n {/* A page's text fades out at the clip's edge rather than being sliced. */}\n {clip.kind === 'pdf' && !clip.plain && (\n <div\n className=\"pointer-events-none absolute inset-0\"\n style={{ background: EDGE_CSS }}\n data-testid=\"stage-clip-edge\"\n />\n )}\n {!clip.plain && (\n <div className=\"pointer-events-none absolute inset-0 rounded-[0.6cqw] ring-1 ring-inset ring-white/15\" />\n )}\n </div>\n {label && !clip.plain && (\n // Under the clip, in the room the layout keeps (CAPTION_SPACE): never over it.\n <div\n className=\"pointer-events-none absolute left-0 top-full mt-[0.5cqw] max-w-full truncate text-[1.7cqw] leading-tight\"\n style={{ color: TEXT_COLORS.muted }}\n >\n {label}\n </div>\n )}\n {/* A handle on each corner (a small dot in a finger-sized target), and a bar on each side's\n middle; their moves bubble to the clip's handlers while the gesture lasts. */}\n {selected &&\n CORNERS.map(({ corner, left, top, cursor }) => (\n <div\n key={corner}\n className=\"absolute flex size-6 -translate-x-1/2 -translate-y-1/2 items-center justify-center pointer-coarse:size-11\"\n style={{ left, top, cursor, touchAction: 'none' }}\n onPointerDown={(event) => start(event, corner)}\n aria-label={`Resize from the ${corner} corner`}\n data-testid={`stage-item-resize-${corner}`}\n >\n <span className=\"pointer-events-none size-3 rounded-full border-2 border-primary bg-background\" />\n </div>\n ))}\n {selected &&\n EDGES.map(({ edge, left, top, cursor, label: side }) => (\n <div\n key={edge}\n className=\"absolute flex size-6 -translate-x-1/2 -translate-y-1/2 items-center justify-center pointer-coarse:size-11\"\n style={{ left, top, cursor, touchAction: 'none' }}\n onPointerDown={(event) => start(event, edge)}\n aria-label={`Show more or less at the ${side}`}\n title=\"Drag to show more or less of the page\"\n data-testid={`stage-item-reshape-${edge}`}\n >\n <span\n className={cn(\n 'pointer-events-none rounded-full border-2 border-primary bg-background',\n edge === 'n' || edge === 's' ? 'h-2 w-4' : 'h-4 w-2'\n )}\n />\n </div>\n ))}\n </div>\n )\n})\n","/** Text boxes' type as CSS (container units: it scales with the stage). */\n\nimport type { CSSProperties } from 'react'\nimport { DEFAULT_TEXT_SIZE, pointsToStage, type TextRun } from './boxes'\nimport { TEXT_COLORS } from './theme'\n\n/** A size in points as CSS (container units). */\nexport const cqw = (points: number) => `${pointsToStage(points) * 100}cqw`\n\nexport function runStyle(run: TextRun, font: string): CSSProperties {\n return {\n fontSize: cqw(run.size ?? DEFAULT_TEXT_SIZE),\n fontWeight: run.bold ? 700 : 400,\n fontStyle: run.italic ? 'italic' : undefined,\n textDecoration: run.underline ? 'underline' : undefined,\n color: run.color ?? TEXT_COLORS.body,\n fontFamily: run.font ? `\"${run.font}\", ${font}` : font,\n }\n}\n","/**\n * A text box or shape on the stage (`boxes`), drawn in CSS sized in container units so it scales\n * with the stage. In the editor it is selected with a click, moved by dragging it, resized from\n * its eight handles (its shape free), and typed in after a second click (a double click, or\n * Enter): the text is edited in place, in its own type.\n *\n * Like a clip, it moves on the GPU while dragged: a transform (or, resizing, its box) is set once\n * per animation frame and the new frame reaches the presentation when the drag ends.\n */\n\nimport {\n memo,\n useRef,\n useState,\n type CSSProperties,\n type PointerEvent as ReactPointerEvent,\n} from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport {\n DEFAULT_INSET,\n DEFAULT_TEXT_SIZE,\n boxText,\n firstRun,\n moveBox,\n stretchBox,\n type BoxFrame,\n type BoxHandle,\n type Paragraph,\n type SlideBox,\n} from './boxes'\nimport { STAGE_ASPECT } from './model'\nimport { TEXT_COLORS } from './theme'\nimport { cqw, runStyle } from './box-style'\n\nconst HANDLES: { handle: BoxHandle; left: string; top: string; cursor: string }[] = [\n { handle: 'nw', left: '0%', top: '0%', cursor: 'nwse-resize' },\n { handle: 'n', left: '50%', top: '0%', cursor: 'ns-resize' },\n { handle: 'ne', left: '100%', top: '0%', cursor: 'nesw-resize' },\n { handle: 'e', left: '100%', top: '50%', cursor: 'ew-resize' },\n { handle: 'se', left: '100%', top: '100%', cursor: 'nwse-resize' },\n { handle: 's', left: '50%', top: '100%', cursor: 'ns-resize' },\n { handle: 'sw', left: '0%', top: '100%', cursor: 'nesw-resize' },\n { handle: 'w', left: '0%', top: '50%', cursor: 'ew-resize' },\n]\n\nconst withAlpha = (hex: string, alpha = 1) => {\n if (alpha >= 1) return hex\n const n = parseInt(hex.slice(1), 16)\n return `rgba(${(n >> 16) & 255}, ${(n >> 8) & 255}, ${n & 255}, ${alpha})`\n}\n\n/** A box's shape and outline, as CSS. */\nfunction shapeStyle(box: SlideBox): CSSProperties {\n const { frame } = box\n const line = box.line\n // A rounded rectangle's corners: a sixth of its shorter side, as PowerPoint's default.\n const shorter = Math.min(frame.w, (frame.h * 1) / STAGE_ASPECT)\n return {\n background: box.fill && box.shape !== 'line' ? withAlpha(box.fill, box.fillAlpha) : undefined,\n border:\n line && box.shape !== 'line'\n ? `${cqw(line.width)} ${line.dash ? 'dashed' : 'solid'} ${line.color}`\n : undefined,\n borderRadius:\n box.shape === 'ellipse'\n ? '50%'\n : box.shape === 'roundRect'\n ? `${shorter * 16.67}cqw`\n : undefined,\n }\n}\n\nexport function Paragraphs({\n paragraphs,\n font,\n}: {\n paragraphs: readonly Paragraph[]\n font: string\n}) {\n return (\n <>\n {paragraphs.map((paragraph, index) => {\n const first = paragraph.runs[0]\n const size = first?.size ?? DEFAULT_TEXT_SIZE\n const indent = (paragraph.level ?? 0) * 0.5 * size\n const empty = !paragraph.runs.some((run) => run.text)\n return (\n <div\n key={index}\n className=\"whitespace-pre-wrap break-words\"\n style={{\n textAlign: paragraph.align ?? 'left',\n lineHeight: 1.2,\n paddingLeft: cqw(indent + (paragraph.bullet ? size * 0.9 : 0)),\n textIndent: paragraph.bullet ? cqw(-size * 0.9) : undefined,\n // An empty line keeps its height.\n fontSize: cqw(size),\n }}\n >\n {paragraph.bullet && (\n <span\n style={{\n ...runStyle(first ?? { text: '' }, font),\n display: 'inline-block',\n width: cqw(size * 0.9),\n textIndent: 0,\n }}\n >\n •\n </span>\n )}\n {empty\n ? '​'\n : paragraph.runs.map((run, i) => (\n <span key={i} style={runStyle(run, font)}>\n {run.text}\n </span>\n ))}\n </div>\n )\n })}\n </>\n )\n}\n\n/** What a stage gives its boxes (stable: the boxes are memoised). */\nexport interface StageBoxHost {\n stageBox(): DOMRect | null\n select(boxId: string): void\n commit(boxId: string, frame: BoxFrame): void\n setText(boxId: string, text: string): void\n}\n\nexport interface StageBoxProps {\n box: SlideBox\n /** The theme's typeface (CSS), for runs without one of their own. */\n font: string\n editable: boolean\n selected: boolean\n host: StageBoxHost\n}\n\ninterface Gesture {\n handle: BoxHandle | 'move'\n pointer: { x: number; y: number }\n frame: BoxFrame\n stage: DOMRect\n next: BoxFrame | null\n request: number | null\n /** The box was already selected: a click on it (no move) starts typing. */\n wasSelected: boolean\n}\n\nexport const StageBox = memo(function StageBox({\n box,\n font,\n editable,\n selected,\n host,\n}: StageBoxProps) {\n const element = useRef<HTMLDivElement>(null)\n const gesture = useRef<Gesture | null>(null)\n const [typing, setTyping] = useState(false)\n const [dragging, setDragging] = useState(false)\n const { frame } = box\n const view = () => element.current?.ownerDocument.defaultView ?? window\n\n const apply = () => {\n const g = gesture.current\n const el = element.current\n if (!g || !el) return\n g.request = null\n if (!g.next) return\n if (g.handle === 'move') {\n el.style.translate = `${(g.next.x - g.frame.x) * g.stage.width}px ${(g.next.y - g.frame.y) * g.stage.height}px`\n } else {\n el.style.left = `${g.next.x * 100}%`\n el.style.top = `${g.next.y * 100}%`\n el.style.width = `${g.next.w * 100}%`\n el.style.height = `${g.next.h * 100}%`\n }\n }\n\n const start = (event: ReactPointerEvent, handle: Gesture['handle']) => {\n if (!editable || typing || event.button !== 0) return\n const stage = host.stageBox()\n if (!stage) return\n event.preventDefault()\n event.stopPropagation()\n host.select(box.id)\n event.currentTarget.setPointerCapture(event.pointerId)\n gesture.current = {\n handle,\n pointer: { x: event.clientX, y: event.clientY },\n frame,\n stage,\n next: null,\n request: null,\n wasSelected: selected,\n }\n }\n\n const move = (event: ReactPointerEvent) => {\n const g = gesture.current\n if (!g) return\n const dx = (event.clientX - g.pointer.x) / g.stage.width\n const dy = (event.clientY - g.pointer.y) / g.stage.height\n if (!g.next) setDragging(true)\n g.next = g.handle === 'move' ? moveBox(g.frame, dx, dy) : stretchBox(g.frame, g.handle, dx, dy)\n g.request ??= view().requestAnimationFrame(apply)\n }\n\n const end = () => {\n const g = gesture.current\n gesture.current = null\n if (!g) return\n if (g.request !== null) view().cancelAnimationFrame(g.request)\n if (!g.next) {\n // A click: selected; on a box already selected, typing starts (as in PowerPoint).\n if (g.wasSelected && g.handle === 'move' && hasText) setTyping(true)\n return\n }\n const el = element.current\n if (el) {\n // Back to the frame React set (the committed one replaces it on the next render).\n el.style.translate = ''\n el.style.left = `${g.frame.x * 100}%`\n el.style.top = `${g.frame.y * 100}%`\n el.style.width = `${g.frame.w * 100}%`\n el.style.height = `${g.frame.h * 100}%`\n }\n setDragging(false)\n host.commit(box.id, g.next)\n }\n\n const hasText = box.shape !== 'line'\n const inset = cqw(box.inset ?? DEFAULT_INSET)\n const run = firstRun(box)\n const transform = box.rotation ? `rotate(${box.rotation}deg)` : undefined\n\n return (\n <div\n ref={element}\n className={cn(\n 'absolute',\n editable ? 'pointer-events-auto' : 'pointer-events-none',\n editable && !typing && 'cursor-move touch-none',\n editable && !selected && 'hover:outline hover:outline-1 hover:outline-white/30',\n selected && 'outline outline-2 outline-offset-1 outline-primary'\n )}\n style={{\n left: `${frame.x * 100}%`,\n top: `${frame.y * 100}%`,\n width: `${frame.w * 100}%`,\n height: `${frame.h * 100}%`,\n transform,\n willChange: dragging ? 'translate' : undefined,\n }}\n onPointerDown={(event) => start(event, 'move')}\n onPointerMove={move}\n onPointerUp={end}\n onPointerCancel={end}\n onDoubleClick={() => editable && hasText && setTyping(true)}\n onKeyDown={(event) => {\n if (selected && !typing && event.key === 'Enter' && hasText) {\n event.preventDefault()\n setTyping(true)\n }\n }}\n tabIndex={editable ? 0 : undefined}\n data-testid={`stage-box-${box.id}`}\n >\n {box.shape === 'line' ? (\n <svg\n className=\"absolute inset-0 size-full overflow-visible\"\n preserveAspectRatio=\"none\"\n aria-hidden\n >\n <line\n x1=\"0%\"\n y1={box.flipV ? '100%' : '0%'}\n x2=\"100%\"\n y2={box.flipV ? '0%' : '100%'}\n stroke={box.line?.color ?? TEXT_COLORS.body}\n style={{ strokeWidth: cqw(box.line?.width ?? 1) }}\n strokeDasharray={box.line?.dash ? '6 4' : undefined}\n />\n </svg>\n ) : (\n <div\n className={cn(\n 'absolute inset-0 box-border flex flex-col overflow-hidden',\n box.anchor === 'middle' && 'justify-center',\n box.anchor === 'bottom' && 'justify-end'\n )}\n style={{ ...shapeStyle(box), padding: inset }}\n >\n {typing ? (\n <textarea\n autoFocus\n defaultValue={boxText(box)}\n className=\"pointer-events-auto w-full flex-1 resize-none bg-transparent p-0 outline-none\"\n style={{\n ...runStyle(run ?? { text: '' }, font),\n lineHeight: 1.2,\n textAlign: box.paragraphs[0]?.align ?? 'left',\n }}\n onPointerDown={(event) => event.stopPropagation()}\n onBlur={(event) => {\n host.setText(box.id, event.currentTarget.value)\n setTyping(false)\n }}\n onKeyDown={(event) => {\n event.stopPropagation()\n if (event.key === 'Escape') event.currentTarget.blur()\n }}\n aria-label=\"Text\"\n data-testid=\"stage-box-text-input\"\n />\n ) : boxText(box) || !editable ? (\n <Paragraphs paragraphs={box.paragraphs} font={font} />\n ) : (\n box.shape === 'text' && (\n <span\n className=\"text-white/40\"\n style={{ fontSize: cqw(run?.size ?? DEFAULT_TEXT_SIZE) }}\n >\n Double-click to type\n </span>\n )\n )}\n </div>\n )}\n {selected &&\n !typing &&\n !dragging &&\n HANDLES.filter(\n ({ handle }) =>\n box.shape !== 'line' ||\n handle === 'e' ||\n handle === 'w' ||\n handle === 'n' ||\n handle === 's'\n ).map(({ handle, left, top, cursor }) => (\n <div\n key={handle}\n className=\"absolute flex size-5 -translate-x-1/2 -translate-y-1/2 items-center justify-center pointer-coarse:size-11\"\n style={{ left, top, cursor, touchAction: 'none' }}\n onPointerDown={(event) => start(event, handle)}\n aria-label={`Resize from ${handle}`}\n data-testid={`stage-box-resize-${handle}`}\n >\n <span className=\"pointer-events-none size-2.5 rounded-full border-2 border-primary bg-background\" />\n </div>\n ))}\n </div>\n )\n})\n","/**\n * The floating bar over a selected text box or shape: its type (smaller, larger, bold, its\n * colour), its fill and delete; italic, alignment and stacking in its \"…\". Colours are picked with\n * the system's colour picker.\n */\n\nimport type { ReactNode } from 'react'\nimport {\n AlignCenter,\n AlignLeft,\n AlignRight,\n AArrowDown,\n AArrowUp,\n Baseline,\n Bold,\n BringToFront,\n Italic,\n MoreHorizontal,\n PaintBucket,\n SendToBack,\n Trash2,\n} from 'lucide-react'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { ACTION, Action } from './ClipActionBar'\nimport { DEFAULT_TEXT_SIZE, firstRun, styleRuns, type SlideBox, type TextAlign } from './boxes'\nimport { usePresentation } from './store'\nimport { TEXT_COLORS } from './theme'\n\nconst SIZE_STEPS = [8, 10, 12, 14, 16, 18, 20, 24, 28, 32, 36, 44, 54, 66, 80, 96]\n\nconst nextSize = (size: number, up: boolean) =>\n up\n ? (SIZE_STEPS.find((step) => step > size + 0.5) ?? size)\n : ([...SIZE_STEPS].reverse().find((step) => step < size - 0.5) ?? size)\n\nconst ALIGN_ICON: Record<TextAlign, ReactNode> = {\n left: <AlignLeft className=\"size-4\" />,\n center: <AlignCenter className=\"size-4\" />,\n right: <AlignRight className=\"size-4\" />,\n justify: <AlignLeft className=\"size-4\" />,\n}\n\n/** A button that opens the system colour picker. */\nfunction ColorAction({\n label,\n value,\n onChange,\n children,\n}: {\n label: string\n value: string\n onChange: (color: string) => void\n children: ReactNode\n}) {\n return (\n <label className={cn(ACTION, 'relative cursor-pointer')} title={label} aria-label={label}>\n {children}\n <span\n className=\"pointer-events-none absolute inset-x-1.5 bottom-0.5 h-0.5 rounded-full\"\n style={{ background: value }}\n />\n <input\n type=\"color\"\n value={value}\n onChange={(event) => onChange(event.target.value)}\n className=\"absolute inset-0 size-full cursor-pointer opacity-0\"\n aria-label={label}\n />\n </label>\n )\n}\n\nexport interface BoxActionBarProps {\n box: SlideBox\n onRemoved: () => void\n}\n\nexport function BoxActionBar({ box, onRemoved }: BoxActionBarProps) {\n const actions = usePresentation.getState()\n const run = firstRun(box)\n const size = run?.size ?? DEFAULT_TEXT_SIZE\n const align = box.paragraphs[0]?.align ?? 'left'\n const update = (change: (b: SlideBox) => SlideBox) => actions.updateBox(box.id, change)\n const text = box.shape !== 'line'\n const top = Math.max(0, box.frame.y)\n return (\n <div\n role=\"toolbar\"\n aria-label=\"Text box\"\n className=\"absolute z-20 flex items-center gap-0.5 rounded-md border border-border bg-background p-0.5 shadow-md\"\n style={{\n left: `${Math.min(Math.max(0, box.frame.x), 0.6) * 100}%`,\n top: `calc(${top * 100}% - 40px)`,\n }}\n onPointerDown={(event) => event.stopPropagation()}\n data-testid=\"box-action-bar\"\n >\n {text && (\n <>\n <Action\n label=\"Smaller\"\n onClick={() =>\n update((b) => styleRuns(b, (r) => ({ ...r, size: nextSize(r.size ?? size, false) })))\n }\n >\n <AArrowDown className=\"size-4\" />\n </Action>\n <span\n className=\"w-7 text-center text-xs tabular-nums text-muted-foreground\"\n data-testid=\"box-text-size\"\n >\n {Math.round(size)}\n </span>\n <Action\n label=\"Larger\"\n onClick={() =>\n update((b) => styleRuns(b, (r) => ({ ...r, size: nextSize(r.size ?? size, true) })))\n }\n >\n <AArrowUp className=\"size-4\" />\n </Action>\n <Action\n label=\"Bold\"\n onClick={() => update((b) => styleRuns(b, (r) => ({ ...r, bold: !run?.bold })))}\n >\n <Bold className={cn('size-4', run?.bold && 'text-primary')} />\n </Action>\n <ColorAction\n label=\"Text colour\"\n value={run?.color ?? TEXT_COLORS.body}\n onChange={(color) => update((b) => styleRuns(b, (r) => ({ ...r, color })))}\n >\n <Baseline className=\"size-4\" />\n </ColorAction>\n </>\n )}\n <ColorAction\n label={box.shape === 'line' ? 'Line colour' : 'Fill'}\n value={(box.shape === 'line' ? box.line?.color : box.fill) ?? '#ffffff'}\n onChange={(color) =>\n update((b) =>\n b.shape === 'line'\n ? { ...b, line: { width: b.line?.width ?? 2, ...b.line, color } }\n : { ...b, fill: color, shape: b.shape === 'text' ? 'rect' : b.shape }\n )\n }\n >\n <PaintBucket className=\"size-4\" />\n </ColorAction>\n {/* The rest, behind \"…\": italic, alignment, in front of or behind the clips. */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className={ACTION}\n title=\"More\"\n aria-label=\"More\"\n data-testid=\"box-more-menu\"\n >\n <MoreHorizontal className=\"size-4\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {text && (\n <>\n <DropdownMenuCheckboxItem\n checked={!!run?.italic}\n onCheckedChange={() =>\n update((b) => styleRuns(b, (r) => ({ ...r, italic: !run?.italic })))\n }\n >\n <Italic className=\"size-4\" />\n <span className=\"ml-2\">Italic</span>\n </DropdownMenuCheckboxItem>\n {(['left', 'center', 'right'] as const).map((value) => (\n <DropdownMenuCheckboxItem\n key={value}\n checked={align === value}\n onCheckedChange={() =>\n update((b) => ({\n ...b,\n paragraphs: b.paragraphs.map((p) => ({ ...p, align: value })),\n }))\n }\n >\n {ALIGN_ICON[value]}\n <span className=\"ml-2\">\n {value === 'left'\n ? 'Align left'\n : value === 'center'\n ? 'Centre'\n : 'Align right'}\n </span>\n </DropdownMenuCheckboxItem>\n ))}\n <DropdownMenuSeparator />\n </>\n )}\n <DropdownMenuItem onSelect={() => actions.restackBox(box.id, 'front')}>\n <BringToFront className=\"size-4\" />\n <span className=\"ml-2\">In front of the clips</span>\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => actions.restackBox(box.id, 'back')}>\n <SendToBack className=\"size-4\" />\n <span className=\"ml-2\">Behind the clips</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n <button\n type=\"button\"\n className={cn(ACTION, 'text-destructive hover:bg-destructive/10')}\n title=\"Delete (Delete)\"\n aria-label=\"Delete\"\n onClick={() => {\n actions.removeBox(box.id)\n onRemoved()\n }}\n >\n <Trash2 className=\"size-4\" />\n </button>\n </div>\n )\n}\n","/**\n * Dragging a clip from the tray onto a slide, with pointer events: the same for a mouse, a pen and\n * a finger (HTML drag and drop does not work on touch screens). A drag starts once the pointer has\n * moved a little; a thumbnail follows it; on release, what is under it decides: the stage (the\n * clip goes on the current slide where it was dropped) or a slide chip (on that slide). A press\n * that does not move is a tap.\n *\n * Drop targets are marked with `data-presentation-drop` (\"stage\", or \"slide\" with\n * `data-slide-index`), so they are found under the pointer in whichever window the tray is in.\n */\n\nimport { useRef, useState, type PointerEvent as ReactPointerEvent } from 'react'\nimport { usePresentation } from './store'\n\n/** How far (px) the pointer moves before a press becomes a drag. */\nconst DRAG_THRESHOLD = 6\n\nexport const DROP_ATTRIBUTE = 'data-presentation-drop'\n\nexport interface ClipDrag {\n /** Where the dragged thumbnail is (client px), while dragging. */\n ghost: { x: number; y: number } | null\n handlers: {\n onPointerDown: (event: ReactPointerEvent<HTMLElement>) => void\n onPointerMove: (event: ReactPointerEvent<HTMLElement>) => void\n onPointerUp: (event: ReactPointerEvent<HTMLElement>) => void\n onPointerCancel: () => void\n }\n}\n\n/** Drop a clip at a point of the window: on the stage there, or on a slide chip. */\nfunction dropAt(doc: Document, clipId: string, x: number, y: number): boolean {\n const target = doc.elementFromPoint(x, y)?.closest(`[${DROP_ATTRIBUTE}]`)\n if (!target) return false\n const state = usePresentation.getState()\n if (target.getAttribute(DROP_ATTRIBUTE) === 'slide') {\n const index = Number(target.getAttribute('data-slide-index'))\n if (!Number.isInteger(index)) return false\n state.goTo(index)\n state.place(clipId)\n return true\n }\n // A slide's stage (the editor shows them all): that slide, at the point.\n const index = Number(target.getAttribute('data-slide-index'))\n if (target.hasAttribute('data-slide-index') && Number.isInteger(index)) state.goTo(index)\n const box = target.getBoundingClientRect()\n state.place(clipId, { x: (x - box.left) / box.width, y: (y - box.top) / box.height })\n return true\n}\n\nexport function useClipDrag(clipId: string, onTap: () => void): ClipDrag {\n const press = useRef<{ x: number; y: number; dragging: boolean } | null>(null)\n const [ghost, setGhost] = useState<{ x: number; y: number } | null>(null)\n\n const end = () => {\n press.current = null\n setGhost(null)\n usePresentation.getState().setDragging(null)\n }\n\n return {\n ghost,\n handlers: {\n onPointerDown: (event) => {\n if (event.button !== 0) return\n press.current = { x: event.clientX, y: event.clientY, dragging: false }\n },\n onPointerMove: (event) => {\n const p = press.current\n if (!p) return\n if (!p.dragging) {\n if (Math.hypot(event.clientX - p.x, event.clientY - p.y) < DRAG_THRESHOLD) return\n p.dragging = true\n // Keep receiving the pointer wherever it goes, and stop the browser scrolling for it.\n event.currentTarget.setPointerCapture(event.pointerId)\n usePresentation.getState().setDragging(clipId)\n }\n event.preventDefault()\n setGhost({ x: event.clientX, y: event.clientY })\n },\n onPointerUp: (event) => {\n const p = press.current\n if (p?.dragging)\n dropAt(event.currentTarget.ownerDocument, clipId, event.clientX, event.clientY)\n else if (p) onTap()\n end()\n },\n onPointerCancel: end,\n },\n }\n}\n","/**\n * The 16:9 stage: a slide's clips in their frames, its title, points and logo, as large as the\n * container allows. Presenting shows it bare; the editor's copy is `editable`: each clip\n * (`StageItem`) is moved, resized and reshaped by dragging, snapping with guide lines; clips are\n * selected for their floating actions, and clips dragged from the tray are dropped onto it.\n *\n * A slide's stage re-renders only when its slide (or the clips, theme or labels) change; a clip's\n * drag re-renders nothing here but the guides and, at its start and end, the floating actions.\n */\n\nimport {\n forwardRef,\n memo,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ClipActionBar } from './ClipActionBar'\nimport { SlideDecor, type SlideTextEditing } from './SlideDecor'\nimport { StageItem, type StageItemHost } from './StageItem'\nimport { StageBox, type StageBoxHost } from './StageBox'\nimport { BoxActionBar } from './BoxActionBar'\nimport { FONTS, backgroundCss, slideBackgroundCss } from './theme'\nimport { clipLabel, type Clip, type Frame, type Guide, type Slide } from './model'\nimport { usePresentation } from './store'\nimport { DROP_ATTRIBUTE } from './useClipDrag'\n\nexport interface PresentationStageProps {\n editable?: boolean\n /** The slide shown (default: the current one). */\n slideIndex?: number\n /**\n * A slide that is not one of the presentation's, shown with its own clips (the viewer's\n * spotlight); the presentation's look still applies.\n */\n show?: { slide: Slide; clips: readonly Clip[] }\n selected?: string | null\n onSelect?: (clipId: string | null) => void\n /** Offered on a selected image clip: make a new version of it. */\n onEditImage?: (clipId: string) => void\n /** Offered on a selected image clip: choose the part of the image it shows. */\n onCropImage?: (clipId: string) => void\n /** Typing the slide's title and points on the slide itself (the editor's stages). */\n textEditing?: SlideTextEditing\n /** Over the slide (e.g. the editor's hover actions). */\n overlay?: ReactNode\n className?: string\n}\n\nexport interface GuideLayerHandle {\n set(guides: Guide[]): void\n}\n\n/** The snap lines of a dragged clip: its own state, so drawing them re-renders nothing else. */\nconst GuideLayer = memo(\n forwardRef<GuideLayerHandle>(function GuideLayer(_, ref) {\n const [guides, setGuides] = useState<Guide[]>([])\n useImperativeHandle(ref, () => ({ set: setGuides }), [])\n return (\n <>\n {guides.map((guide) => (\n <div\n key={`${guide.axis}-${guide.at}`}\n className=\"pointer-events-none absolute z-10 bg-primary\"\n style={\n guide.axis === 'x'\n ? { left: `${guide.at * 100}%`, top: 0, bottom: 0, width: 1 }\n : { top: `${guide.at * 100}%`, left: 0, right: 0, height: 1 }\n }\n data-testid={`stage-guide-${guide.axis}`}\n />\n ))}\n </>\n )\n })\n)\n\nexport function PresentationStage({\n editable = false,\n slideIndex,\n show,\n selected = null,\n onSelect,\n onEditImage,\n onCropImage,\n textEditing,\n overlay,\n className,\n}: PresentationStageProps) {\n const index = usePresentation((s) => slideIndex ?? s.current)\n const deckSlide = usePresentation((s) => s.slides[index])\n const deckClips = usePresentation((s) => s.clips)\n const slide = show?.slide ?? deckSlide\n const clips = show?.clips ?? deckClips\n const blank = usePresentation((s) => s.blank && !editable && !show)\n const captions = usePresentation((s) => s.captions)\n const columnValues = usePresentation((s) => s.columnValues)\n const theme = usePresentation((s) => s.theme)\n const logoImage = usePresentation((s) => s.logoImage)\n const media = usePresentation((s) => s.media)\n const stageRef = useRef<HTMLDivElement>(null)\n const guideLayer = useRef<GuideLayerHandle>(null)\n // A clip dragged from the tray: the stage shows it can take it.\n const dropping = usePresentation((s) => editable && s.dragging !== null)\n // A clip being dragged on the stage: its floating actions hide meanwhile.\n const [dragging, setDragging] = useState(false)\n\n // The latest values the clips' gestures read as they begin (the host itself never changes).\n const latest = useRef({ slide, clips, index, onSelect })\n latest.current = { slide, clips, index, onSelect }\n const host = useMemo<StageItemHost>(\n () => ({\n stageBox: () => stageRef.current?.getBoundingClientRect() ?? null,\n others: (clipId) => {\n const { slide: current, clips: all } = latest.current\n return (current?.items ?? [])\n .filter((item) => item.clipId !== clipId)\n .map((item) => ({\n frame: item.frame,\n aspect: all.find((clip) => clip.id === item.clipId)?.aspect ?? 1,\n }))\n },\n select: (clipId) => {\n usePresentation.getState().goTo(latest.current.index)\n latest.current.onSelect?.(clipId)\n },\n guides: (guides) => guideLayer.current?.set(guides),\n dragging: setDragging,\n commit: (clipId: string, frame: Frame, shape?: Pick<Clip, 'rect' | 'aspect'>) => {\n const state = usePresentation.getState()\n state.goTo(latest.current.index)\n if (shape) state.reshapeClip(clipId, frame, shape.rect, shape.aspect)\n else state.setFrame(clipId, frame)\n },\n }),\n []\n )\n\n const boxHost = useMemo<StageBoxHost>(\n () => ({\n stageBox: () => stageRef.current?.getBoundingClientRect() ?? null,\n select: (boxId) => {\n usePresentation.getState().goTo(latest.current.index)\n latest.current.onSelect?.(boxId)\n },\n commit: (boxId, frame) =>\n usePresentation.getState().updateBox(boxId, (box) => ({ ...box, frame })),\n setText: (boxId, text) => usePresentation.getState().setBoxText(boxId, text),\n }),\n []\n )\n const font = FONTS[theme.font].css\n const boxes = slide?.boxes ?? []\n const selectedBox = selected ? boxes.find((box) => box.id === selected) : undefined\n const renderBoxes = (front: boolean) =>\n boxes\n .filter((box) => !!box.front === front)\n .map((box) => (\n <StageBox\n key={box.id}\n box={box}\n font={font}\n editable={editable}\n selected={editable && selected === box.id}\n host={boxHost}\n />\n ))\n\n const clipOf = (id: string): Clip | undefined => clips.find((clip) => clip.id === id)\n const selectedFrame = selected\n ? slide?.items.find((item) => item.clipId === selected)?.frame\n : undefined\n\n // Scrolling over the selected clip (wheel or trackpad; Shift for sideways) scrolls what it shows\n // over its source: the lines above or below, say. A native listener, so the editor itself does\n // not scroll; steps are gathered and applied once per animation frame.\n useEffect(() => {\n const stage = stageRef.current\n const view = stage?.ownerDocument.defaultView\n if (!editable || !selected || !stage || !view) return\n let sum = { x: 0, y: 0 }\n let request: number | null = null\n const onWheel = (event: WheelEvent) => {\n const item = (event.target as Element | null)?.closest?.(\n `[data-testid=\"stage-item-${selected}\"]`\n )\n const clip = usePresentation.getState().clips.find((entry) => entry.id === selected)\n if (!item || !clip) return\n event.preventDefault()\n const box = item.getBoundingClientRect()\n const horizontal = event.shiftKey && !event.deltaX\n const deltaX = horizontal ? event.deltaY : event.deltaX\n const deltaY = horizontal ? 0 : event.deltaY\n // Screen pixels to fractions of the source: the clip's area spans the clip's box.\n sum = {\n x: sum.x + (deltaX / box.width) * clip.rect.w,\n y: sum.y + (deltaY / box.height) * clip.rect.h,\n }\n request ??= view.requestAnimationFrame(() => {\n request = null\n usePresentation.getState().panClip(selected, sum.x, sum.y)\n sum = { x: 0, y: 0 }\n })\n }\n stage.addEventListener('wheel', onWheel, { passive: false })\n return () => {\n stage.removeEventListener('wheel', onWheel)\n if (request !== null) view.cancelAnimationFrame(request)\n }\n }, [editable, selected])\n\n return (\n <div\n className={cn('relative h-full w-full', !editable && 'overflow-hidden bg-black', className)}\n // The stage's size comes from this box's (container query units): 16:9, as large as fits.\n style={{ containerType: 'size' }}\n data-testid={editable ? 'presentation-stage-editor' : 'presentation-stage'}\n >\n <div\n ref={stageRef}\n className={cn(\n 'absolute inset-0 m-auto',\n editable ? 'shadow-md' : 'overflow-hidden',\n dropping && 'outline outline-2 outline-offset-2 outline-primary'\n )}\n style={{\n width: 'min(100cqw, calc(100cqh * 16 / 9))',\n height: 'min(100cqh, calc(100cqw * 9 / 16))',\n containerType: 'inline-size',\n background: slide?.background\n ? slideBackgroundCss(slide.background, media)\n : backgroundCss(theme.background),\n fontFamily: FONTS[theme.font].css,\n }}\n onPointerDown={() => {\n if (!editable) return\n usePresentation.getState().goTo(index)\n onSelect?.(null)\n }}\n {...(editable ? { [DROP_ATTRIBUTE]: 'stage', 'data-slide-index': index } : {})}\n aria-label={`Slide ${index + 1}`}\n >\n {/* Blanked: the shared stage is black. */}\n {blank && <div className=\"absolute inset-0 z-20 bg-black\" />}\n {/* The title, points and logo, by the slide's layout. */}\n {slide && (\n <SlideDecor\n slide={slide}\n theme={theme}\n labels={captions}\n logoImage={logoImage}\n editable={editable}\n editing={textEditing}\n />\n )}\n {renderBoxes(false)}\n {slide?.items.map((item) => {\n const clip = clipOf(item.clipId)\n if (!clip) return null\n return (\n <StageItem\n key={clip.id}\n clip={clip}\n frame={item.frame}\n editable={editable}\n selected={editable && selected === clip.id}\n dim={false}\n label={captions ? clipLabel(clip, columnValues) : ''}\n host={host}\n />\n )\n })}\n {renderBoxes(true)}\n {/* Smart guides: the lines the dragged clip snapped to (editor only). */}\n {editable && <GuideLayer ref={guideLayer} />}\n {/* The selected clip's floating actions, above it (the stage leaves room). */}\n {editable && selectedFrame && selected && !dragging && (\n <ClipActionBar\n clipId={selected}\n at={selectedFrame}\n onRemoved={() => onSelect?.(null)}\n onEditImage={\n onEditImage && clipOf(selected)?.kind === 'image'\n ? () => onEditImage(selected)\n : undefined\n }\n onCropImage={\n onCropImage && clipOf(selected)?.kind === 'image'\n ? () => onCropImage(selected)\n : undefined\n }\n />\n )}\n {editable && selectedBox && (\n <BoxActionBar box={selectedBox} onRemoved={() => onSelect?.(null)} />\n )}\n {overlay}\n </div>\n </div>\n )\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkL6HTZIBD_cjs = require('./chunk-L6HTZIBD.cjs');
4
+ var chunkALK3PUUB_cjs = require('./chunk-ALK3PUUB.cjs');
5
5
  var zustand = require('zustand');
6
6
  var middleware = require('zustand/middleware');
7
7
 
@@ -50,7 +50,7 @@ var useFilesPrefs = zustand.create()(
50
50
  (state) => state.viewModes[prefsKey] === viewMode ? state : { viewModes: { ...state.viewModes, [prefsKey]: viewMode } }
51
51
  ),
52
52
  // New users start at the compact minimum (more rows at once).
53
- rowHeight: chunkL6HTZIBD_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
53
+ rowHeight: chunkALK3PUUB_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
54
54
  setRowHeight: (rowHeight) => set({ rowHeight })
55
55
  }),
56
56
  {
@@ -121,5 +121,5 @@ exports.useFilesGridStates = useFilesGridStates;
121
121
  exports.useFilesPrefs = useFilesPrefs;
122
122
  exports.useFilesStore = useFilesStore;
123
123
  exports.usePendingFolders = usePendingFolders;
124
- //# sourceMappingURL=chunk-J3FFSEKO.cjs.map
125
- //# sourceMappingURL=chunk-J3FFSEKO.cjs.map
124
+ //# sourceMappingURL=chunk-ADDQKZ5I.cjs.map
125
+ //# sourceMappingURL=chunk-ADDQKZ5I.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/files/store.ts"],"names":["create","persist","createJSONStorage","DOCUMENTS_ROW_HEIGHT_INITIAL"],"mappings":"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","file":"chunk-J3FFSEKO.cjs","sourcesContent":["/**\n * The Files kits' own state: empty folders the user created (a folder exists only through its\n * documents, so a new one is a placeholder until something is moved into it), per workspace, for\n * the session (kept in `sessionStorage`, so a reload keeps them).\n */\n\nimport type { GridState } from 'ag-grid-community'\nimport { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\nimport { DOCUMENTS_ROW_HEIGHT_INITIAL } from '../../files/documentColumns'\nimport type { ExplorerFolder } from '../../files/folders/folderPaths'\n\ninterface FilesState {\n /** Placeholder folder paths per workspace. */\n pendingFolders: Readonly<Record<string, readonly string[]>>\n addPendingFolder: (workspaceId: string, path: string) => void\n removePendingFolder: (workspaceId: string, path: string) => void\n}\n\nexport const useFilesStore = create<FilesState>()(\n persist(\n (set) => ({\n pendingFolders: {},\n addPendingFolder: (workspaceId, path) =>\n set((state) => {\n const current = state.pendingFolders[workspaceId] ?? []\n if (current.includes(path)) return state\n return { pendingFolders: { ...state.pendingFolders, [workspaceId]: [...current, path] } }\n }),\n removePendingFolder: (workspaceId, path) =>\n set((state) => {\n const current = state.pendingFolders[workspaceId] ?? []\n if (!current.includes(path)) return state\n return {\n pendingFolders: {\n ...state.pendingFolders,\n [workspaceId]: current.filter((p) => p !== path),\n },\n }\n }),\n }),\n {\n name: 'arbi_explorer_pending_folders',\n storage: createJSONStorage(() => sessionStorage),\n partialize: (state) => ({ pendingFolders: state.pendingFolders }),\n }\n )\n)\n\nconst NONE: readonly string[] = []\n\n/** A workspace's placeholder folders. */\nexport function usePendingFolders(workspaceId: string | null | undefined): readonly string[] {\n return useFilesStore(\n (state) => (workspaceId ? state.pendingFolders[workspaceId] : undefined) ?? NONE\n )\n}\n\n/** How the files page shows the documents: a table, the explorer, review one by one, or search. */\nexport type FilesViewMode = 'grid' | 'explorer' | 'navigator' | 'search'\n\n/** The files page's own preferences key (`ConnectedFilesPage` `prefsKey`). */\nexport const FILES_PREFS_KEY = 'files'\nconst DEFAULT_VIEW_MODE: FilesViewMode = 'explorer'\n\ninterface FilesPrefsState {\n /** The documents list's tri-state filters (filter id → include / exclude / off). */\n documentFilters: Readonly<Record<string, 'include' | 'exclude' | null>>\n setDocumentFilters: (filters: Record<string, 'include' | 'exclude' | null>) => void\n /**\n * Each files page's view, by its `prefsKey` (a page that is the same kit in another role, e.g.\n * a tabular review in the table view, keeps its own). Absent: that page's default.\n */\n viewModes: Readonly<Record<string, FilesViewMode>>\n /** Set a page's view (default: the files page's). */\n setViewMode: (mode: FilesViewMode, prefsKey?: string) => void\n /** The table's row height (density). */\n rowHeight: number\n setRowHeight: (height: number) => void\n}\n\n/** The Files kits' preferences, kept on this device (`localStorage`) across sessions. */\nexport const useFilesPrefs = create<FilesPrefsState>()(\n persist(\n (set) => ({\n documentFilters: {},\n setDocumentFilters: (documentFilters) => set({ documentFilters }),\n viewModes: {},\n setViewMode: (viewMode, prefsKey = FILES_PREFS_KEY) =>\n set((state) =>\n state.viewModes[prefsKey] === viewMode\n ? state\n : { viewModes: { ...state.viewModes, [prefsKey]: viewMode } }\n ),\n // New users start at the compact minimum (more rows at once).\n rowHeight: DOCUMENTS_ROW_HEIGHT_INITIAL,\n setRowHeight: (rowHeight) => set({ rowHeight }),\n }),\n {\n name: 'arbi_files_prefs',\n storage: createJSONStorage(() => localStorage),\n version: 1,\n // Version 0 kept one view for every files page: it becomes the files page's own.\n migrate: (persisted, version) => {\n const state = (persisted ?? {}) as Record<string, unknown>\n if (version >= 1) return state as Partial<FilesPrefsState>\n const { viewMode, ...rest } = state\n return {\n ...rest,\n viewModes: viewMode ? { [FILES_PREFS_KEY]: viewMode as FilesViewMode } : {},\n } as Partial<FilesPrefsState>\n },\n partialize: (state) => ({\n documentFilters: state.documentFilters,\n viewModes: state.viewModes,\n rowHeight: state.rowHeight,\n }),\n }\n )\n)\n\n/** A files page's view (`prefsKey`, default the files page's), else its `defaultViewMode`. */\nexport function filesViewMode(\n state: Pick<FilesPrefsState, 'viewModes'>,\n prefsKey: string = FILES_PREFS_KEY,\n defaultViewMode: FilesViewMode = DEFAULT_VIEW_MODE\n): FilesViewMode {\n return state.viewModes[prefsKey] ?? defaultViewMode\n}\n\n/** An AI review run: the fields, the documents, and which of them the server finished. */\nexport interface AiReviewRun {\n tags: { id: string; name: string }[]\n docIds: string[]\n /** The documents the server finished (a finished cell with no value will not fill). */\n finishedDocIds?: string[]\n /** It replaces values already there: a cell shows its new value only once finished. */\n replacing?: boolean\n}\n\ninterface AiReviewState {\n /** The AI review dialog is open. */\n open: boolean\n /** The run on screen, kept after closing so \"View results\" can bring the answers back. */\n run: AiReviewRun | null\n setOpen: (open: boolean) => void\n setRun: (run: AiReviewRun | null) => void\n /** The server finished these documents of the run (with or without a value). */\n markFinished: (docIds: string[]) => void\n}\n\n/** The AI review dialog and its run, reachable from outside React (a finished-run notice). */\nexport const useAiReviewStore = create<AiReviewState>()((set) => ({\n open: false,\n run: null,\n setOpen: (open) => set({ open }),\n setRun: (run) => set({ run }),\n markFinished: (docIds) =>\n set((state) => {\n const run = state.run\n if (!run) return state\n const finished = new Set(run.finishedDocIds ?? [])\n const added = docIds.filter((id) => run.docIds.includes(id) && !finished.has(id))\n if (added.length === 0) return state\n return { run: { ...run, finishedDocIds: [...finished, ...added] } }\n }),\n}))\n\ninterface GridStatesState {\n /** AG Grid's saved state (columns, widths, sort) per grid id. */\n gridStates: Readonly<Record<string, GridState>>\n setGridState: (gridId: string, state: GridState) => void\n}\n\n/** The Files grids' saved state, kept on this device, for hosts that keep none of their own. */\nexport const useFilesGridStates = create<GridStatesState>()(\n persist(\n (set) => ({\n gridStates: {},\n setGridState: (gridId, state) =>\n set((current) => ({ gridStates: { ...current.gridStates, [gridId]: state } })),\n }),\n { name: 'arbi_files_grids', storage: createJSONStorage(() => localStorage) }\n )\n)\n\n/** A document the Delete confirmation asks about. */\nexport interface DeleteRequestDocument {\n external_id: string\n file_name?: string | null\n doc_metadata?: { title?: string | null } | null\n}\n\ninterface FilesDialogsState {\n /** Move the selection (or `folder`) to a folder. */\n move: { folder: ExplorerFolder | null } | null\n openMove: (folder?: ExplorerFolder | null) => void\n closeMove: () => void\n /** Edit the selection's labels and fields. */\n bulkTagsOpen: boolean\n setBulkTagsOpen: (open: boolean) => void\n /** Confirm deleting one document. */\n deleteRequest: DeleteRequestDocument | null\n requestDelete: (doc: DeleteRequestDocument | null) => void\n /** Export, copy or move the selection (the page's own dialog, when the host has none). */\n exportOpen: boolean\n setExportOpen: (open: boolean) => void\n}\n\n/** The files page's dialogs, also opened from outside it (commands, the viewer's related files). */\nexport const useFilesDialogs = create<FilesDialogsState>()((set) => ({\n move: null,\n openMove: (folder = null) => set({ move: { folder } }),\n closeMove: () => set({ move: null }),\n bulkTagsOpen: false,\n setBulkTagsOpen: (bulkTagsOpen) => set({ bulkTagsOpen }),\n deleteRequest: null,\n requestDelete: (deleteRequest) => set({ deleteRequest }),\n exportOpen: false,\n setExportOpen: (exportOpen) => set({ exportOpen }),\n}))\n"]}
1
+ {"version":3,"sources":["../src/connection/files/store.ts"],"names":["create","persist","createJSONStorage","DOCUMENTS_ROW_HEIGHT_INITIAL"],"mappings":"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","file":"chunk-ADDQKZ5I.cjs","sourcesContent":["/**\n * The Files kits' own state: empty folders the user created (a folder exists only through its\n * documents, so a new one is a placeholder until something is moved into it), per workspace, for\n * the session (kept in `sessionStorage`, so a reload keeps them).\n */\n\nimport type { GridState } from 'ag-grid-community'\nimport { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\nimport { DOCUMENTS_ROW_HEIGHT_INITIAL } from '../../files/documentColumns'\nimport type { ExplorerFolder } from '../../files/folders/folderPaths'\n\ninterface FilesState {\n /** Placeholder folder paths per workspace. */\n pendingFolders: Readonly<Record<string, readonly string[]>>\n addPendingFolder: (workspaceId: string, path: string) => void\n removePendingFolder: (workspaceId: string, path: string) => void\n}\n\nexport const useFilesStore = create<FilesState>()(\n persist(\n (set) => ({\n pendingFolders: {},\n addPendingFolder: (workspaceId, path) =>\n set((state) => {\n const current = state.pendingFolders[workspaceId] ?? []\n if (current.includes(path)) return state\n return { pendingFolders: { ...state.pendingFolders, [workspaceId]: [...current, path] } }\n }),\n removePendingFolder: (workspaceId, path) =>\n set((state) => {\n const current = state.pendingFolders[workspaceId] ?? []\n if (!current.includes(path)) return state\n return {\n pendingFolders: {\n ...state.pendingFolders,\n [workspaceId]: current.filter((p) => p !== path),\n },\n }\n }),\n }),\n {\n name: 'arbi_explorer_pending_folders',\n storage: createJSONStorage(() => sessionStorage),\n partialize: (state) => ({ pendingFolders: state.pendingFolders }),\n }\n )\n)\n\nconst NONE: readonly string[] = []\n\n/** A workspace's placeholder folders. */\nexport function usePendingFolders(workspaceId: string | null | undefined): readonly string[] {\n return useFilesStore(\n (state) => (workspaceId ? state.pendingFolders[workspaceId] : undefined) ?? NONE\n )\n}\n\n/** How the files page shows the documents: a table, the explorer, review one by one, or search. */\nexport type FilesViewMode = 'grid' | 'explorer' | 'navigator' | 'search'\n\n/** The files page's own preferences key (`ConnectedFilesPage` `prefsKey`). */\nexport const FILES_PREFS_KEY = 'files'\nconst DEFAULT_VIEW_MODE: FilesViewMode = 'explorer'\n\ninterface FilesPrefsState {\n /** The documents list's tri-state filters (filter id → include / exclude / off). */\n documentFilters: Readonly<Record<string, 'include' | 'exclude' | null>>\n setDocumentFilters: (filters: Record<string, 'include' | 'exclude' | null>) => void\n /**\n * Each files page's view, by its `prefsKey` (a page that is the same kit in another role, e.g.\n * a tabular review in the table view, keeps its own). Absent: that page's default.\n */\n viewModes: Readonly<Record<string, FilesViewMode>>\n /** Set a page's view (default: the files page's). */\n setViewMode: (mode: FilesViewMode, prefsKey?: string) => void\n /** The table's row height (density). */\n rowHeight: number\n setRowHeight: (height: number) => void\n}\n\n/** The Files kits' preferences, kept on this device (`localStorage`) across sessions. */\nexport const useFilesPrefs = create<FilesPrefsState>()(\n persist(\n (set) => ({\n documentFilters: {},\n setDocumentFilters: (documentFilters) => set({ documentFilters }),\n viewModes: {},\n setViewMode: (viewMode, prefsKey = FILES_PREFS_KEY) =>\n set((state) =>\n state.viewModes[prefsKey] === viewMode\n ? state\n : { viewModes: { ...state.viewModes, [prefsKey]: viewMode } }\n ),\n // New users start at the compact minimum (more rows at once).\n rowHeight: DOCUMENTS_ROW_HEIGHT_INITIAL,\n setRowHeight: (rowHeight) => set({ rowHeight }),\n }),\n {\n name: 'arbi_files_prefs',\n storage: createJSONStorage(() => localStorage),\n version: 1,\n // Version 0 kept one view for every files page: it becomes the files page's own.\n migrate: (persisted, version) => {\n const state = (persisted ?? {}) as Record<string, unknown>\n if (version >= 1) return state as Partial<FilesPrefsState>\n const { viewMode, ...rest } = state\n return {\n ...rest,\n viewModes: viewMode ? { [FILES_PREFS_KEY]: viewMode as FilesViewMode } : {},\n } as Partial<FilesPrefsState>\n },\n partialize: (state) => ({\n documentFilters: state.documentFilters,\n viewModes: state.viewModes,\n rowHeight: state.rowHeight,\n }),\n }\n )\n)\n\n/** A files page's view (`prefsKey`, default the files page's), else its `defaultViewMode`. */\nexport function filesViewMode(\n state: Pick<FilesPrefsState, 'viewModes'>,\n prefsKey: string = FILES_PREFS_KEY,\n defaultViewMode: FilesViewMode = DEFAULT_VIEW_MODE\n): FilesViewMode {\n return state.viewModes[prefsKey] ?? defaultViewMode\n}\n\n/** An AI review run: the fields, the documents, and which of them the server finished. */\nexport interface AiReviewRun {\n tags: { id: string; name: string }[]\n docIds: string[]\n /** The documents the server finished (a finished cell with no value will not fill). */\n finishedDocIds?: string[]\n /** It replaces values already there: a cell shows its new value only once finished. */\n replacing?: boolean\n}\n\ninterface AiReviewState {\n /** The AI review dialog is open. */\n open: boolean\n /** The run on screen, kept after closing so \"View results\" can bring the answers back. */\n run: AiReviewRun | null\n setOpen: (open: boolean) => void\n setRun: (run: AiReviewRun | null) => void\n /** The server finished these documents of the run (with or without a value). */\n markFinished: (docIds: string[]) => void\n}\n\n/** The AI review dialog and its run, reachable from outside React (a finished-run notice). */\nexport const useAiReviewStore = create<AiReviewState>()((set) => ({\n open: false,\n run: null,\n setOpen: (open) => set({ open }),\n setRun: (run) => set({ run }),\n markFinished: (docIds) =>\n set((state) => {\n const run = state.run\n if (!run) return state\n const finished = new Set(run.finishedDocIds ?? [])\n const added = docIds.filter((id) => run.docIds.includes(id) && !finished.has(id))\n if (added.length === 0) return state\n return { run: { ...run, finishedDocIds: [...finished, ...added] } }\n }),\n}))\n\ninterface GridStatesState {\n /** AG Grid's saved state (columns, widths, sort) per grid id. */\n gridStates: Readonly<Record<string, GridState>>\n setGridState: (gridId: string, state: GridState) => void\n}\n\n/** The Files grids' saved state, kept on this device, for hosts that keep none of their own. */\nexport const useFilesGridStates = create<GridStatesState>()(\n persist(\n (set) => ({\n gridStates: {},\n setGridState: (gridId, state) =>\n set((current) => ({ gridStates: { ...current.gridStates, [gridId]: state } })),\n }),\n { name: 'arbi_files_grids', storage: createJSONStorage(() => localStorage) }\n )\n)\n\n/** A document the Delete confirmation asks about. */\nexport interface DeleteRequestDocument {\n external_id: string\n file_name?: string | null\n doc_metadata?: { title?: string | null } | null\n}\n\ninterface FilesDialogsState {\n /** Move the selection (or `folder`) to a folder. */\n move: { folder: ExplorerFolder | null } | null\n openMove: (folder?: ExplorerFolder | null) => void\n closeMove: () => void\n /** Edit the selection's labels and fields. */\n bulkTagsOpen: boolean\n setBulkTagsOpen: (open: boolean) => void\n /** Confirm deleting one document. */\n deleteRequest: DeleteRequestDocument | null\n requestDelete: (doc: DeleteRequestDocument | null) => void\n /** Export, copy or move the selection (the page's own dialog, when the host has none). */\n exportOpen: boolean\n setExportOpen: (open: boolean) => void\n}\n\n/** The files page's dialogs, also opened from outside it (commands, the viewer's related files). */\nexport const useFilesDialogs = create<FilesDialogsState>()((set) => ({\n move: null,\n openMove: (folder = null) => set({ move: { folder } }),\n closeMove: () => set({ move: null }),\n bulkTagsOpen: false,\n setBulkTagsOpen: (bulkTagsOpen) => set({ bulkTagsOpen }),\n deleteRequest: null,\n requestDelete: (deleteRequest) => set({ deleteRequest }),\n exportOpen: false,\n setExportOpen: (exportOpen) => set({ exportOpen }),\n}))\n"]}
@@ -10,8 +10,8 @@ var chunkRL2HI6NP_cjs = require('./chunk-RL2HI6NP.cjs');
10
10
  var chunk6UZC4XVV_cjs = require('./chunk-6UZC4XVV.cjs');
11
11
  var chunkJV5TVUOU_cjs = require('./chunk-JV5TVUOU.cjs');
12
12
  var chunkZVEW3JBT_cjs = require('./chunk-ZVEW3JBT.cjs');
13
- var chunkIPSHAMO2_cjs = require('./chunk-IPSHAMO2.cjs');
14
13
  var chunkUDSHVNU3_cjs = require('./chunk-UDSHVNU3.cjs');
14
+ var chunkIPSHAMO2_cjs = require('./chunk-IPSHAMO2.cjs');
15
15
  var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
16
16
  var chunkPLIF5CUV_cjs = require('./chunk-PLIF5CUV.cjs');
17
17
  var classVarianceAuthority = require('class-variance-authority');
@@ -8254,5 +8254,5 @@ exports.visibilityAudience = visibilityAudience;
8254
8254
  exports.visibilityToggleTooltip = visibilityToggleTooltip;
8255
8255
  exports.visibleColumns = visibleColumns;
8256
8256
  exports.widthsMatch = widthsMatch;
8257
- //# sourceMappingURL=chunk-L6HTZIBD.cjs.map
8258
- //# sourceMappingURL=chunk-L6HTZIBD.cjs.map
8257
+ //# sourceMappingURL=chunk-ALK3PUUB.cjs.map
8258
+ //# sourceMappingURL=chunk-ALK3PUUB.cjs.map