@arbidocs/blocks 0.5.125 → 0.5.127
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -0
- package/dist/{ClippingMediaViewer-ZFEX5A3U.cjs → ClippingMediaViewer-47BAXNLO.cjs} +10 -11
- package/dist/ClippingMediaViewer-47BAXNLO.cjs.map +1 -0
- package/dist/{ClippingPdfViewer-3LRTEPHV.cjs → ClippingPdfViewer-D5BYHEAH.cjs} +16 -14
- package/dist/ClippingPdfViewer-D5BYHEAH.cjs.map +1 -0
- package/dist/ConnectedCallDock-XJOYVVAH.cjs +6 -6
- package/dist/ConnectedCallRoom-CUDYAPQK.cjs +6 -6
- package/dist/{ConnectedNativeDocxComparison-7QQ55JIO.cjs → ConnectedNativeDocxComparison-JUF2TI2P.cjs} +12 -12
- package/dist/{ConnectedNativeDocxComparison-7QQ55JIO.cjs.map → ConnectedNativeDocxComparison-JUF2TI2P.cjs.map} +1 -1
- package/dist/{ConnectedPresentation-L32JPRFI.cjs → ConnectedPresentation-SI3L77J4.cjs} +35 -36
- package/dist/ConnectedPresentation-SI3L77J4.cjs.map +1 -0
- package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs → ConnectedProductionSetDialog-LHB4VQWC.cjs} +3 -3
- package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs.map → ConnectedProductionSetDialog-LHB4VQWC.cjs.map} +1 -1
- package/dist/{ConnectedSlidesTab-P7GGNUTO.cjs → ConnectedSlidesTab-E76OVY34.cjs} +38 -44
- package/dist/ConnectedSlidesTab-E76OVY34.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-7NJ3N52V.cjs → ConnectedStreamedWordArtifact-Q64DRRQD.cjs} +12 -12
- package/dist/{ConnectedStreamedWordArtifact-7NJ3N52V.cjs.map → ConnectedStreamedWordArtifact-Q64DRRQD.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-BFPOFQXI.cjs → DocumentReviewCard-M53XFLI2.cjs} +16 -16
- package/dist/{DocumentReviewCard-BFPOFQXI.cjs.map → DocumentReviewCard-M53XFLI2.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-MHUVEZ7M.cjs → FilesViewerDialog-V6FSRQTP.cjs} +33 -34
- package/dist/FilesViewerDialog-V6FSRQTP.cjs.map +1 -0
- package/dist/{NativeDocxEditor-SIRYPMBN.cjs → NativeDocxEditor-2PTEK6ND.cjs} +6 -6
- package/dist/{NativeDocxEditor-SIRYPMBN.cjs.map → NativeDocxEditor-2PTEK6ND.cjs.map} +1 -1
- package/dist/{SpotlightStrip-ED22UYTM.cjs → SpotlightStrip-QQ2WUI32.cjs} +28 -29
- package/dist/SpotlightStrip-QQ2WUI32.cjs.map +1 -0
- package/dist/{WorkspaceTableView-MIFYXV3G.cjs → WorkspaceTableView-3XYAV4BV.cjs} +8 -8
- package/dist/{WorkspaceTableView-MIFYXV3G.cjs.map → WorkspaceTableView-3XYAV4BV.cjs.map} +1 -1
- package/dist/agents/index.cjs +215 -215
- package/dist/ai-IEIR7SC2.cjs +3 -3
- package/dist/auth/index.cjs +1 -1
- package/dist/calls/index.cjs +2 -2
- package/dist/chat/index.cjs +6 -6
- package/dist/{chunk-GAMRVB3I.cjs → chunk-23I5EUZA.cjs} +65 -10
- package/dist/chunk-23I5EUZA.cjs.map +1 -0
- package/dist/{chunk-ZZZITHGK.cjs → chunk-26SFI2BH.cjs} +16 -3
- package/dist/chunk-26SFI2BH.cjs.map +1 -0
- package/dist/{chunk-OGK377NL.cjs → chunk-2SU37RZA.cjs} +409 -42
- package/dist/chunk-2SU37RZA.cjs.map +1 -0
- package/dist/{chunk-CQ2RJYE2.cjs → chunk-3IH55CDE.cjs} +3 -3
- package/dist/{chunk-CQ2RJYE2.cjs.map → chunk-3IH55CDE.cjs.map} +1 -1
- package/dist/{chunk-AS6QZETU.cjs → chunk-5QERK4PK.cjs} +35 -35
- package/dist/{chunk-AS6QZETU.cjs.map → chunk-5QERK4PK.cjs.map} +1 -1
- package/dist/{chunk-AISYXX4M.cjs → chunk-7NLO7ASW.cjs} +4 -4
- package/dist/{chunk-AISYXX4M.cjs.map → chunk-7NLO7ASW.cjs.map} +1 -1
- package/dist/{chunk-QIK7E6VF.cjs → chunk-7PN3YENO.cjs} +4 -4
- package/dist/{chunk-QIK7E6VF.cjs.map → chunk-7PN3YENO.cjs.map} +1 -1
- package/dist/{chunk-JY7UUZQG.cjs → chunk-7Q46YAX4.cjs} +74 -71
- package/dist/chunk-7Q46YAX4.cjs.map +1 -0
- package/dist/{chunk-J3FFSEKO.cjs → chunk-ADDQKZ5I.cjs} +4 -4
- package/dist/{chunk-J3FFSEKO.cjs.map → chunk-ADDQKZ5I.cjs.map} +1 -1
- package/dist/{chunk-L6HTZIBD.cjs → chunk-ALK3PUUB.cjs} +3 -3
- package/dist/{chunk-L6HTZIBD.cjs.map → chunk-ALK3PUUB.cjs.map} +1 -1
- package/dist/{chunk-3ZZZO4F7.cjs → chunk-BY3QA3S5.cjs} +9 -9
- package/dist/{chunk-3ZZZO4F7.cjs.map → chunk-BY3QA3S5.cjs.map} +1 -1
- package/dist/{chunk-3UP32FM3.cjs → chunk-CQQQIZU4.cjs} +5 -5
- package/dist/{chunk-3UP32FM3.cjs.map → chunk-CQQQIZU4.cjs.map} +1 -1
- package/dist/{chunk-YOEP3I4V.cjs → chunk-E3L5DB5F.cjs} +5 -5
- package/dist/{chunk-YOEP3I4V.cjs.map → chunk-E3L5DB5F.cjs.map} +1 -1
- package/dist/{chunk-UA7HOLAZ.cjs → chunk-ESVRVZ53.cjs} +5 -5
- package/dist/{chunk-UA7HOLAZ.cjs.map → chunk-ESVRVZ53.cjs.map} +1 -1
- package/dist/{chunk-2K6IMIVL.cjs → chunk-GNZAH6UI.cjs} +3 -3
- package/dist/{chunk-2K6IMIVL.cjs.map → chunk-GNZAH6UI.cjs.map} +1 -1
- package/dist/{chunk-KA3F6TIH.cjs → chunk-IWHP7FAB.cjs} +12 -5
- package/dist/chunk-IWHP7FAB.cjs.map +1 -0
- package/dist/{chunk-ORNLCBNE.cjs → chunk-JVEDKKNO.cjs} +43 -4
- package/dist/chunk-JVEDKKNO.cjs.map +1 -0
- package/dist/{chunk-6JMW3IJ2.cjs → chunk-JVLOIIA7.cjs} +103 -100
- package/dist/chunk-JVLOIIA7.cjs.map +1 -0
- package/dist/{chunk-UUENH4BJ.cjs → chunk-KXIRVKCJ.cjs} +3 -3
- package/dist/{chunk-UUENH4BJ.cjs.map → chunk-KXIRVKCJ.cjs.map} +1 -1
- package/dist/{chunk-YVO6Z5BS.cjs → chunk-M6WVIGYP.cjs} +10 -10
- package/dist/{chunk-YVO6Z5BS.cjs.map → chunk-M6WVIGYP.cjs.map} +1 -1
- package/dist/{chunk-PSB64T43.cjs → chunk-MLA2BJ2Y.cjs} +28 -28
- package/dist/{chunk-PSB64T43.cjs.map → chunk-MLA2BJ2Y.cjs.map} +1 -1
- package/dist/{chunk-B3R62764.cjs → chunk-MMSHIIKG.cjs} +6 -6
- package/dist/{chunk-B3R62764.cjs.map → chunk-MMSHIIKG.cjs.map} +1 -1
- package/dist/{chunk-ENOPKX7E.cjs → chunk-MXBXZXXQ.cjs} +3 -3
- package/dist/{chunk-ENOPKX7E.cjs.map → chunk-MXBXZXXQ.cjs.map} +1 -1
- package/dist/chunk-NTDQQLDD.cjs +18 -0
- package/dist/{chunk-IRGRMJPP.cjs.map → chunk-NTDQQLDD.cjs.map} +1 -1
- package/dist/{chunk-PVJ5ODDB.cjs → chunk-Q6IKXWPG.cjs} +4 -4
- package/dist/{chunk-PVJ5ODDB.cjs.map → chunk-Q6IKXWPG.cjs.map} +1 -1
- package/dist/{chunk-4LP5MJGQ.cjs → chunk-QG2U2JGX.cjs} +4 -4
- package/dist/{chunk-4LP5MJGQ.cjs.map → chunk-QG2U2JGX.cjs.map} +1 -1
- package/dist/{chunk-MVXHTAJ4.cjs → chunk-QWVUBTW3.cjs} +9 -9
- package/dist/{chunk-MVXHTAJ4.cjs.map → chunk-QWVUBTW3.cjs.map} +1 -1
- package/dist/{chunk-OHWHYVKG.cjs → chunk-T73BHNQX.cjs} +3 -3
- package/dist/{chunk-OHWHYVKG.cjs.map → chunk-T73BHNQX.cjs.map} +1 -1
- package/dist/{chunk-PWBRE7JA.cjs → chunk-VLQCLQAS.cjs} +23 -10
- package/dist/chunk-VLQCLQAS.cjs.map +1 -0
- package/dist/{chunk-ADPRIBSH.cjs → chunk-X7ALF4MP.cjs} +7 -7
- package/dist/{chunk-ADPRIBSH.cjs.map → chunk-X7ALF4MP.cjs.map} +1 -1
- package/dist/{chunk-7RJZIPLE.cjs → chunk-YP5EBGLU.cjs} +33 -33
- package/dist/{chunk-7RJZIPLE.cjs.map → chunk-YP5EBGLU.cjs.map} +1 -1
- package/dist/{chunk-TSFNLY3K.cjs → chunk-ZCU72Q76.cjs} +192 -166
- package/dist/chunk-ZCU72Q76.cjs.map +1 -0
- package/dist/{chunk-BLIO3B7Z.cjs → chunk-ZYGAXD3N.cjs} +3 -3
- package/dist/{chunk-BLIO3B7Z.cjs.map → chunk-ZYGAXD3N.cjs.map} +1 -1
- package/dist/connect/docx.cjs +16 -16
- package/dist/connect/index.cjs +1095 -1114
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/viewer.cjs +26 -27
- package/dist/connection/ai.d.ts +1 -0
- package/dist/connection/docx/ConnectedNativeDocxEditor.js +4 -5
- package/dist/connection/docx/ConnectedNativeDocxEditor.js.map +2 -2
- package/dist/connection/docx/save-native-version.d.ts +3 -0
- package/dist/connection/docx/save-native-version.js +19 -0
- package/dist/connection/docx/save-native-version.js.map +7 -0
- package/dist/connection/presentation/ClippingPdfViewer.js +8 -5
- package/dist/connection/presentation/ClippingPdfViewer.js.map +2 -2
- package/dist/connection/presentation/ConnectedSlidesTab.js +8 -13
- package/dist/connection/presentation/ConnectedSlidesTab.js.map +2 -2
- package/dist/connection/presentation/usePresentationController.js +24 -15
- package/dist/connection/presentation/usePresentationController.js.map +2 -2
- package/dist/connection/presentation/usePresentationFiles.d.ts +2 -1
- package/dist/connection/presentation/usePresentationFiles.js +15 -6
- package/dist/connection/presentation/usePresentationFiles.js.map +2 -2
- package/dist/connection/remote-control/ConnectedRemoteControlConsent.js +6 -3
- package/dist/connection/remote-control/ConnectedRemoteControlConsent.js.map +2 -2
- package/dist/connection/remote-control/ConnectedRemoteControlIndicator.js +12 -2
- package/dist/connection/remote-control/ConnectedRemoteControlIndicator.js.map +2 -2
- package/dist/connection/remote-control/ConnectedRemoteControlSwitch.js +1 -1
- package/dist/connection/remote-control/ConnectedRemoteControlSwitch.js.map +1 -1
- package/dist/connection/remote-control/browser-diagnostics.d.ts +7 -0
- package/dist/connection/remote-control/browser-diagnostics.js +109 -0
- package/dist/connection/remote-control/browser-diagnostics.js.map +7 -0
- package/dist/connection/remote-control/remoteControl.d.ts +9 -1
- package/dist/connection/remote-control/remoteControl.js +130 -10
- package/dist/connection/remote-control/remoteControl.js.map +2 -2
- package/dist/connection/remote-control/screen-sharing.d.ts +11 -0
- package/dist/connection/remote-control/screen-sharing.js +78 -0
- package/dist/connection/remote-control/screen-sharing.js.map +7 -0
- package/dist/connection/report-problem/screen-capture.d.ts +1 -0
- package/dist/connection/report-problem/screen-capture.js +2 -1
- package/dist/connection/report-problem/screen-capture.js.map +2 -2
- package/dist/connection/search/ConnectedSearchPage.d.ts +0 -11
- package/dist/connection/search/ConnectedSearchPage.js +3 -0
- package/dist/connection/search/ConnectedSearchPage.js.map +2 -2
- package/dist/connection/search/SearchResultRows.js +75 -43
- package/dist/connection/search/SearchResultRows.js.map +2 -2
- package/dist/connection/viewer/CleanViewControl.d.ts +3 -1
- package/dist/connection/viewer/CleanViewControl.js +5 -1
- package/dist/connection/viewer/CleanViewControl.js.map +2 -2
- package/dist/connection/viewer/ConnectedDocumentViewer.js +1 -1
- package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
- package/dist/connection/viewer/useCleanView.d.ts +1 -1
- package/dist/connection/viewer/useCleanView.js +2 -2
- package/dist/connection/viewer/useCleanView.js.map +2 -2
- package/dist/connection/viewer/useViewedDocument.d.ts +1 -0
- package/dist/document-tools/index.cjs +20 -20
- package/dist/docx/NativeDocxEditor.d.ts +2 -1
- package/dist/docx/NativeDocxEditor.js +34 -7
- package/dist/docx/NativeDocxEditor.js.map +2 -2
- package/dist/docx/index.cjs +38 -38
- package/dist/docx/useVersionAutosave.d.ts +10 -0
- package/dist/docx/useVersionAutosave.js +36 -0
- package/dist/docx/useVersionAutosave.js.map +7 -0
- package/dist/embed/index.cjs +19 -19
- package/dist/facts/index.cjs +64 -64
- package/dist/files/index.cjs +223 -223
- package/dist/index.cjs +542 -542
- package/dist/presentation/ClipCaptureOverlay.js +14 -1
- package/dist/presentation/ClipCaptureOverlay.js.map +2 -2
- package/dist/presentation/ClipImage.js +7 -4
- package/dist/presentation/ClipImage.js.map +2 -2
- package/dist/presentation/ClipTray.js +11 -7
- package/dist/presentation/ClipTray.js.map +2 -2
- package/dist/presentation/SlidesEditor.js +6 -2
- package/dist/presentation/SlidesEditor.js.map +2 -2
- package/dist/presentation/store.d.ts +2 -0
- package/dist/presentation/store.js +15 -0
- package/dist/presentation/store.js.map +3 -3
- package/dist/settings/index.cjs +146 -146
- package/dist/shell/RemoteControlPill.d.ts +2 -1
- package/dist/shell/RemoteControlPill.js +10 -3
- package/dist/shell/RemoteControlPill.js.map +2 -2
- package/dist/shell/index.cjs +21 -21
- package/dist/site/index.cjs +6 -6
- package/dist/studio/index.cjs +9 -9
- package/dist/workflow-canvas/index.cjs +34 -34
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ClippingMediaViewer-ZFEX5A3U.cjs.map +0 -1
- package/dist/ClippingPdfViewer-3LRTEPHV.cjs.map +0 -1
- package/dist/ConnectedPresentation-L32JPRFI.cjs.map +0 -1
- package/dist/ConnectedSlidesTab-P7GGNUTO.cjs.map +0 -1
- package/dist/FilesViewerDialog-MHUVEZ7M.cjs.map +0 -1
- package/dist/SpotlightStrip-ED22UYTM.cjs.map +0 -1
- package/dist/chunk-6JMW3IJ2.cjs.map +0 -1
- package/dist/chunk-GAMRVB3I.cjs.map +0 -1
- package/dist/chunk-GFUOCGY6.cjs +0 -32
- package/dist/chunk-GFUOCGY6.cjs.map +0 -1
- package/dist/chunk-IRGRMJPP.cjs +0 -18
- package/dist/chunk-JY7UUZQG.cjs.map +0 -1
- package/dist/chunk-KA3F6TIH.cjs.map +0 -1
- package/dist/chunk-OGK377NL.cjs.map +0 -1
- package/dist/chunk-ORNLCBNE.cjs.map +0 -1
- package/dist/chunk-PWBRE7JA.cjs.map +0 -1
- package/dist/chunk-TSFNLY3K.cjs.map +0 -1
- package/dist/chunk-ZZZITHGK.cjs.map +0 -1
|
@@ -10,6 +10,7 @@ export interface RemoteControlPillProps {
|
|
|
10
10
|
label: string;
|
|
11
11
|
onDisable: () => void;
|
|
12
12
|
disableLabel?: string;
|
|
13
|
+
showDisableLabel?: boolean;
|
|
13
14
|
labels?: Partial<RemoteControlPillLabels>;
|
|
14
15
|
/** Root id (default `remote-control-indicator`). */
|
|
15
16
|
'data-testid'?: string;
|
|
@@ -20,4 +21,4 @@ export interface RemoteControlPillProps {
|
|
|
20
21
|
* Persistent, unobtrusive status pill shown while remote control is on or a run is executing,
|
|
21
22
|
* with a one-click disable. The app decides when to mount it.
|
|
22
23
|
*/
|
|
23
|
-
export declare function RemoteControlPill({ isActive, label, onDisable, disableLabel: disableLabelProp, labels, 'data-testid': testId, disableTestId, }: RemoteControlPillProps): import("react").JSX.Element;
|
|
24
|
+
export declare function RemoteControlPill({ isActive, label, onDisable, disableLabel: disableLabelProp, showDisableLabel, labels, 'data-testid': testId, disableTestId, }: RemoteControlPillProps): import("react").JSX.Element;
|
|
@@ -11,6 +11,7 @@ function RemoteControlPill({
|
|
|
11
11
|
label,
|
|
12
12
|
onDisable,
|
|
13
13
|
disableLabel: disableLabelProp,
|
|
14
|
+
showDisableLabel = false,
|
|
14
15
|
labels,
|
|
15
16
|
"data-testid": testId,
|
|
16
17
|
disableTestId
|
|
@@ -29,7 +30,7 @@ function RemoteControlPill({
|
|
|
29
30
|
children: [
|
|
30
31
|
/* @__PURE__ */ jsx(MousePointerClick, { className: cn("size-3.5 shrink-0", isActive && "animate-pulse") }),
|
|
31
32
|
/* @__PURE__ */ jsx("span", { className: "min-w-0 max-w-[16rem] truncate", children: label }),
|
|
32
|
-
/* @__PURE__ */
|
|
33
|
+
/* @__PURE__ */ jsxs(
|
|
33
34
|
"button",
|
|
34
35
|
{
|
|
35
36
|
type: "button",
|
|
@@ -37,8 +38,14 @@ function RemoteControlPill({
|
|
|
37
38
|
title: disableLabel,
|
|
38
39
|
"aria-label": disableLabel,
|
|
39
40
|
"data-testid": testIdOr(disableTestId, { testId: "remote-control-indicator-disable" }),
|
|
40
|
-
className:
|
|
41
|
-
|
|
41
|
+
className: cn(
|
|
42
|
+
"flex shrink-0 items-center justify-center rounded-full transition-colors hover:bg-foreground/10 hover:text-foreground",
|
|
43
|
+
showDisableLabel ? "gap-1 px-2 py-1" : "size-5 pointer-coarse:size-8"
|
|
44
|
+
),
|
|
45
|
+
children: [
|
|
46
|
+
showDisableLabel && /* @__PURE__ */ jsx("span", { children: disableLabel }),
|
|
47
|
+
/* @__PURE__ */ jsx(X, { className: "size-3.5" })
|
|
48
|
+
]
|
|
42
49
|
}
|
|
43
50
|
)
|
|
44
51
|
]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/shell/RemoteControlPill.tsx"],
|
|
4
|
-
"sourcesContent": ["import { MousePointerClick, X } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\n/** Fixed strings of the remote-control pill. */\nexport interface RemoteControlPillLabels {\n /** The disable button (the `disableLabel` prop wins). */\n turnOffRemoteControl: string\n}\n\nexport const DEFAULT_REMOTE_CONTROL_PILL_LABELS: RemoteControlPillLabels = {\n turnOffRemoteControl: 'Turn off remote control',\n}\n\nexport interface RemoteControlPillProps {\n /** A run is actively driving the screen (tinted + pulsing). */\n isActive: boolean\n label: string\n onDisable: () => void\n disableLabel?: string\n labels?: Partial<RemoteControlPillLabels>\n /** Root id (default `remote-control-indicator`). */\n 'data-testid'?: string\n /** Disable button id (default `remote-control-indicator-disable`). */\n disableTestId?: string\n}\n\n/**\n * Persistent, unobtrusive status pill shown while remote control is on or a run is executing,\n * with a one-click disable. The app decides when to mount it.\n */\nexport function RemoteControlPill({\n isActive,\n label,\n onDisable,\n disableLabel: disableLabelProp,\n labels,\n 'data-testid': testId,\n disableTestId,\n}: RemoteControlPillProps) {\n const disableLabel =\n disableLabelProp ??\n labels?.turnOffRemoteControl ??\n DEFAULT_REMOTE_CONTROL_PILL_LABELS.turnOffRemoteControl\n return (\n <div\n data-slot=\"remote-control-pill\"\n // Remote control's own control: a remote run never acts inside it.\n data-remote-control-surface=\"\"\n data-testid={testIdOr(testId, { testId: 'remote-control-indicator' })}\n className={cn(\n 'flex min-w-0 max-w-full items-center gap-1.5 rounded-full py-1 pl-2.5 pr-1 text-xs font-medium',\n isActive ? 'bg-accent text-accent-foreground' : 'bg-muted text-muted-foreground'\n )}\n >\n <MousePointerClick className={cn('size-3.5 shrink-0', isActive && 'animate-pulse')} />\n <span className=\"min-w-0 max-w-[16rem] truncate\">{label}</span>\n <button\n type=\"button\"\n onClick={onDisable}\n title={disableLabel}\n aria-label={disableLabel}\n data-testid={testIdOr(disableTestId, { testId: 'remote-control-indicator-disable' })}\n className
|
|
5
|
-
"mappings": ";
|
|
4
|
+
"sourcesContent": ["import { MousePointerClick, X } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\n/** Fixed strings of the remote-control pill. */\nexport interface RemoteControlPillLabels {\n /** The disable button (the `disableLabel` prop wins). */\n turnOffRemoteControl: string\n}\n\nexport const DEFAULT_REMOTE_CONTROL_PILL_LABELS: RemoteControlPillLabels = {\n turnOffRemoteControl: 'Turn off remote control',\n}\n\nexport interface RemoteControlPillProps {\n /** A run is actively driving the screen (tinted + pulsing). */\n isActive: boolean\n label: string\n onDisable: () => void\n disableLabel?: string\n showDisableLabel?: boolean\n labels?: Partial<RemoteControlPillLabels>\n /** Root id (default `remote-control-indicator`). */\n 'data-testid'?: string\n /** Disable button id (default `remote-control-indicator-disable`). */\n disableTestId?: string\n}\n\n/**\n * Persistent, unobtrusive status pill shown while remote control is on or a run is executing,\n * with a one-click disable. The app decides when to mount it.\n */\nexport function RemoteControlPill({\n isActive,\n label,\n onDisable,\n disableLabel: disableLabelProp,\n showDisableLabel = false,\n labels,\n 'data-testid': testId,\n disableTestId,\n}: RemoteControlPillProps) {\n const disableLabel =\n disableLabelProp ??\n labels?.turnOffRemoteControl ??\n DEFAULT_REMOTE_CONTROL_PILL_LABELS.turnOffRemoteControl\n return (\n <div\n data-slot=\"remote-control-pill\"\n // Remote control's own control: a remote run never acts inside it.\n data-remote-control-surface=\"\"\n data-testid={testIdOr(testId, { testId: 'remote-control-indicator' })}\n className={cn(\n 'flex min-w-0 max-w-full items-center gap-1.5 rounded-full py-1 pl-2.5 pr-1 text-xs font-medium',\n isActive ? 'bg-accent text-accent-foreground' : 'bg-muted text-muted-foreground'\n )}\n >\n <MousePointerClick className={cn('size-3.5 shrink-0', isActive && 'animate-pulse')} />\n <span className=\"min-w-0 max-w-[16rem] truncate\">{label}</span>\n <button\n type=\"button\"\n onClick={onDisable}\n title={disableLabel}\n aria-label={disableLabel}\n data-testid={testIdOr(disableTestId, { testId: 'remote-control-indicator-disable' })}\n className={cn(\n 'flex shrink-0 items-center justify-center rounded-full transition-colors hover:bg-foreground/10 hover:text-foreground',\n showDisableLabel ? 'gap-1 px-2 py-1' : 'size-5 pointer-coarse:size-8'\n )}\n >\n {showDisableLabel && <span>{disableLabel}</span>}\n <X className=\"size-3.5\" />\n </button>\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": ";AAyDM,cAEA,YAFA;AAzDN,SAAS,mBAAmB,SAAS;AACrC,SAAS,UAAU;AACnB,SAAS,gBAAgB;AAQlB,MAAM,qCAA8D;AAAA,EACzE,sBAAsB;AACxB;AAoBO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB;AAAA,EACA,eAAe;AAAA,EACf;AACF,GAA2B;AACzB,QAAM,eACJ,oBACA,QAAQ,wBACR,mCAAmC;AACrC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MAEV,+BAA4B;AAAA,MAC5B,eAAa,SAAS,QAAQ,EAAE,QAAQ,2BAA2B,CAAC;AAAA,MACpE,WAAW;AAAA,QACT;AAAA,QACA,WAAW,qCAAqC;AAAA,MAClD;AAAA,MAEA;AAAA,4BAAC,qBAAkB,WAAW,GAAG,qBAAqB,YAAY,eAAe,GAAG;AAAA,QACpF,oBAAC,UAAK,WAAU,kCAAkC,iBAAM;AAAA,QACxD;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,YACT,OAAO;AAAA,YACP,cAAY;AAAA,YACZ,eAAa,SAAS,eAAe,EAAE,QAAQ,mCAAmC,CAAC;AAAA,YACnF,WAAW;AAAA,cACT;AAAA,cACA,mBAAmB,oBAAoB;AAAA,YACzC;AAAA,YAEC;AAAA,kCAAoB,oBAAC,UAAM,wBAAa;AAAA,cACzC,oBAAC,KAAE,WAAU,YAAW;AAAA;AAAA;AAAA,QAC1B;AAAA;AAAA;AAAA,EACF;AAEJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/shell/index.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
var chunkVCEX7COE_cjs = require('../chunk-VCEX7COE.cjs');
|
|
5
5
|
require('../chunk-34HQO4ZQ.cjs');
|
|
6
|
-
var
|
|
6
|
+
var chunkIWHP7FAB_cjs = require('../chunk-IWHP7FAB.cjs');
|
|
7
7
|
var chunkK4763GD5_cjs = require('../chunk-K4763GD5.cjs');
|
|
8
8
|
var chunk2RLA6QO2_cjs = require('../chunk-2RLA6QO2.cjs');
|
|
9
9
|
var chunkNY3YUCOW_cjs = require('../chunk-NY3YUCOW.cjs');
|
|
@@ -83,83 +83,83 @@ Object.defineProperty(exports, "useInstallPrompt", {
|
|
|
83
83
|
});
|
|
84
84
|
Object.defineProperty(exports, "ActionCluster", {
|
|
85
85
|
enumerable: true,
|
|
86
|
-
get: function () { return
|
|
86
|
+
get: function () { return chunkIWHP7FAB_cjs.ActionCluster; }
|
|
87
87
|
});
|
|
88
88
|
Object.defineProperty(exports, "AskField", {
|
|
89
89
|
enumerable: true,
|
|
90
|
-
get: function () { return
|
|
90
|
+
get: function () { return chunkIWHP7FAB_cjs.AskField; }
|
|
91
91
|
});
|
|
92
92
|
Object.defineProperty(exports, "AskRow", {
|
|
93
93
|
enumerable: true,
|
|
94
|
-
get: function () { return
|
|
94
|
+
get: function () { return chunkIWHP7FAB_cjs.AskRow; }
|
|
95
95
|
});
|
|
96
96
|
Object.defineProperty(exports, "AskTrigger", {
|
|
97
97
|
enumerable: true,
|
|
98
|
-
get: function () { return
|
|
98
|
+
get: function () { return chunkIWHP7FAB_cjs.AskTrigger; }
|
|
99
99
|
});
|
|
100
100
|
Object.defineProperty(exports, "DEFAULT_ASK_FIELD_LABELS", {
|
|
101
101
|
enumerable: true,
|
|
102
|
-
get: function () { return
|
|
102
|
+
get: function () { return chunkIWHP7FAB_cjs.DEFAULT_ASK_FIELD_LABELS; }
|
|
103
103
|
});
|
|
104
104
|
Object.defineProperty(exports, "DEFAULT_OFFLINE_PILL_LABELS", {
|
|
105
105
|
enumerable: true,
|
|
106
|
-
get: function () { return
|
|
106
|
+
get: function () { return chunkIWHP7FAB_cjs.DEFAULT_OFFLINE_PILL_LABELS; }
|
|
107
107
|
});
|
|
108
108
|
Object.defineProperty(exports, "DEFAULT_REMOTE_CONTROL_PILL_LABELS", {
|
|
109
109
|
enumerable: true,
|
|
110
|
-
get: function () { return
|
|
110
|
+
get: function () { return chunkIWHP7FAB_cjs.DEFAULT_REMOTE_CONTROL_PILL_LABELS; }
|
|
111
111
|
});
|
|
112
112
|
Object.defineProperty(exports, "DEFAULT_TIP_CARD_LABELS", {
|
|
113
113
|
enumerable: true,
|
|
114
|
-
get: function () { return
|
|
114
|
+
get: function () { return chunkIWHP7FAB_cjs.DEFAULT_TIP_CARD_LABELS; }
|
|
115
115
|
});
|
|
116
116
|
Object.defineProperty(exports, "DockZone", {
|
|
117
117
|
enumerable: true,
|
|
118
|
-
get: function () { return
|
|
118
|
+
get: function () { return chunkIWHP7FAB_cjs.DockZone; }
|
|
119
119
|
});
|
|
120
120
|
Object.defineProperty(exports, "OfflinePill", {
|
|
121
121
|
enumerable: true,
|
|
122
|
-
get: function () { return
|
|
122
|
+
get: function () { return chunkIWHP7FAB_cjs.OfflinePill; }
|
|
123
123
|
});
|
|
124
124
|
Object.defineProperty(exports, "RemoteControlPill", {
|
|
125
125
|
enumerable: true,
|
|
126
|
-
get: function () { return
|
|
126
|
+
get: function () { return chunkIWHP7FAB_cjs.RemoteControlPill; }
|
|
127
127
|
});
|
|
128
128
|
Object.defineProperty(exports, "ShellSidebar", {
|
|
129
129
|
enumerable: true,
|
|
130
|
-
get: function () { return
|
|
130
|
+
get: function () { return chunkIWHP7FAB_cjs.ShellSidebar; }
|
|
131
131
|
});
|
|
132
132
|
Object.defineProperty(exports, "SidebarRowAction", {
|
|
133
133
|
enumerable: true,
|
|
134
|
-
get: function () { return
|
|
134
|
+
get: function () { return chunkIWHP7FAB_cjs.SidebarRowAction; }
|
|
135
135
|
});
|
|
136
136
|
Object.defineProperty(exports, "StatusBadge", {
|
|
137
137
|
enumerable: true,
|
|
138
|
-
get: function () { return
|
|
138
|
+
get: function () { return chunkIWHP7FAB_cjs.StatusBadge; }
|
|
139
139
|
});
|
|
140
140
|
Object.defineProperty(exports, "StatusRow", {
|
|
141
141
|
enumerable: true,
|
|
142
|
-
get: function () { return
|
|
142
|
+
get: function () { return chunkIWHP7FAB_cjs.StatusRow; }
|
|
143
143
|
});
|
|
144
144
|
Object.defineProperty(exports, "TipCard", {
|
|
145
145
|
enumerable: true,
|
|
146
|
-
get: function () { return
|
|
146
|
+
get: function () { return chunkIWHP7FAB_cjs.TipCard; }
|
|
147
147
|
});
|
|
148
148
|
Object.defineProperty(exports, "resolveSidebarLayout", {
|
|
149
149
|
enumerable: true,
|
|
150
|
-
get: function () { return
|
|
150
|
+
get: function () { return chunkIWHP7FAB_cjs.resolveSidebarLayout; }
|
|
151
151
|
});
|
|
152
152
|
Object.defineProperty(exports, "useCloseOnEscape", {
|
|
153
153
|
enumerable: true,
|
|
154
|
-
get: function () { return
|
|
154
|
+
get: function () { return chunkIWHP7FAB_cjs.useCloseOnEscape; }
|
|
155
155
|
});
|
|
156
156
|
Object.defineProperty(exports, "useSidebarController", {
|
|
157
157
|
enumerable: true,
|
|
158
|
-
get: function () { return
|
|
158
|
+
get: function () { return chunkIWHP7FAB_cjs.useSidebarController; }
|
|
159
159
|
});
|
|
160
160
|
Object.defineProperty(exports, "useSidebarSettle", {
|
|
161
161
|
enumerable: true,
|
|
162
|
-
get: function () { return
|
|
162
|
+
get: function () { return chunkIWHP7FAB_cjs.useSidebarSettle; }
|
|
163
163
|
});
|
|
164
164
|
Object.defineProperty(exports, "PanelModeSwitcher", {
|
|
165
165
|
enumerable: true,
|
package/dist/site/index.cjs
CHANGED
|
@@ -7,13 +7,13 @@ var chunkICZSVCDT_cjs = require('../chunk-ICZSVCDT.cjs');
|
|
|
7
7
|
var chunkNEGFHF3V_cjs = require('../chunk-NEGFHF3V.cjs');
|
|
8
8
|
var chunkADMNU2CR_cjs = require('../chunk-ADMNU2CR.cjs');
|
|
9
9
|
var chunkPCB2BPN3_cjs = require('../chunk-PCB2BPN3.cjs');
|
|
10
|
-
var chunkZU2B2RZK_cjs = require('../chunk-ZU2B2RZK.cjs');
|
|
11
10
|
var chunk34HQO4ZQ_cjs = require('../chunk-34HQO4ZQ.cjs');
|
|
12
11
|
var chunkNWNVWO6L_cjs = require('../chunk-NWNVWO6L.cjs');
|
|
12
|
+
var chunkZU2B2RZK_cjs = require('../chunk-ZU2B2RZK.cjs');
|
|
13
13
|
var chunkOEJQFPWO_cjs = require('../chunk-OEJQFPWO.cjs');
|
|
14
14
|
var chunkII2OEXHW_cjs = require('../chunk-II2OEXHW.cjs');
|
|
15
|
-
var chunkIPSHAMO2_cjs = require('../chunk-IPSHAMO2.cjs');
|
|
16
15
|
require('../chunk-UDSHVNU3.cjs');
|
|
16
|
+
var chunkIPSHAMO2_cjs = require('../chunk-IPSHAMO2.cjs');
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
|
|
@@ -301,10 +301,6 @@ Object.defineProperty(exports, "Callout", {
|
|
|
301
301
|
enumerable: true,
|
|
302
302
|
get: function () { return chunkPCB2BPN3_cjs.Callout; }
|
|
303
303
|
});
|
|
304
|
-
Object.defineProperty(exports, "tid", {
|
|
305
|
-
enumerable: true,
|
|
306
|
-
get: function () { return chunkZU2B2RZK_cjs.tid; }
|
|
307
|
-
});
|
|
308
304
|
Object.defineProperty(exports, "Banner", {
|
|
309
305
|
enumerable: true,
|
|
310
306
|
get: function () { return chunk34HQO4ZQ_cjs.Banner; }
|
|
@@ -325,6 +321,10 @@ Object.defineProperty(exports, "matchFontPairing", {
|
|
|
325
321
|
enumerable: true,
|
|
326
322
|
get: function () { return chunkNWNVWO6L_cjs.matchFontPairing; }
|
|
327
323
|
});
|
|
324
|
+
Object.defineProperty(exports, "tid", {
|
|
325
|
+
enumerable: true,
|
|
326
|
+
get: function () { return chunkZU2B2RZK_cjs.tid; }
|
|
327
|
+
});
|
|
328
328
|
Object.defineProperty(exports, "Chart", {
|
|
329
329
|
enumerable: true,
|
|
330
330
|
get: function () { return chunkOEJQFPWO_cjs.Chart; }
|
package/dist/studio/index.cjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var chunk4EK7TAP7_cjs = require('../chunk-4EK7TAP7.cjs');
|
|
5
4
|
var chunk7L4X6QN2_cjs = require('../chunk-7L4X6QN2.cjs');
|
|
6
|
-
var chunkUZHWXKS6_cjs = require('../chunk-UZHWXKS6.cjs');
|
|
7
|
-
var chunkPBPO54KZ_cjs = require('../chunk-PBPO54KZ.cjs');
|
|
8
5
|
require('../chunk-XF355M7O.cjs');
|
|
9
6
|
require('../chunk-2F57IO7S.cjs');
|
|
10
7
|
require('../chunk-UFT22LAB.cjs');
|
|
11
8
|
require('../chunk-WAV762GP.cjs');
|
|
9
|
+
var chunk4EK7TAP7_cjs = require('../chunk-4EK7TAP7.cjs');
|
|
10
|
+
var chunkUZHWXKS6_cjs = require('../chunk-UZHWXKS6.cjs');
|
|
11
|
+
var chunkPBPO54KZ_cjs = require('../chunk-PBPO54KZ.cjs');
|
|
12
12
|
var chunkVRK3IQAP_cjs = require('../chunk-VRK3IQAP.cjs');
|
|
13
13
|
var chunkANWJG4A4_cjs = require('../chunk-ANWJG4A4.cjs');
|
|
14
14
|
var chunkICZSVCDT_cjs = require('../chunk-ICZSVCDT.cjs');
|
|
@@ -16,12 +16,12 @@ var chunkSGYSDABK_cjs = require('../chunk-SGYSDABK.cjs');
|
|
|
16
16
|
var chunkNEGFHF3V_cjs = require('../chunk-NEGFHF3V.cjs');
|
|
17
17
|
require('../chunk-ADMNU2CR.cjs');
|
|
18
18
|
var chunkPCB2BPN3_cjs = require('../chunk-PCB2BPN3.cjs');
|
|
19
|
-
var chunkULPTSXXO_cjs = require('../chunk-ULPTSXXO.cjs');
|
|
20
|
-
var chunkZU2B2RZK_cjs = require('../chunk-ZU2B2RZK.cjs');
|
|
21
|
-
var chunkNSD37OF5_cjs = require('../chunk-NSD37OF5.cjs');
|
|
22
19
|
var chunk34HQO4ZQ_cjs = require('../chunk-34HQO4ZQ.cjs');
|
|
23
20
|
require('../chunk-325GVZE6.cjs');
|
|
24
21
|
require('../chunk-NWNVWO6L.cjs');
|
|
22
|
+
var chunkULPTSXXO_cjs = require('../chunk-ULPTSXXO.cjs');
|
|
23
|
+
var chunkZU2B2RZK_cjs = require('../chunk-ZU2B2RZK.cjs');
|
|
24
|
+
var chunkNSD37OF5_cjs = require('../chunk-NSD37OF5.cjs');
|
|
25
25
|
require('../chunk-OEJQFPWO.cjs');
|
|
26
26
|
require('../chunk-I4IS6ST6.cjs');
|
|
27
27
|
require('../chunk-7JLJH5CW.cjs');
|
|
@@ -38,10 +38,10 @@ require('../chunk-3YZKDCWY.cjs');
|
|
|
38
38
|
var chunkZW6FPIFC_cjs = require('../chunk-ZW6FPIFC.cjs');
|
|
39
39
|
require('../chunk-KNGZZC4O.cjs');
|
|
40
40
|
require('../chunk-IDCD5TEZ.cjs');
|
|
41
|
-
require('../chunk-AFQTQC7A.cjs');
|
|
42
|
-
require('../chunk-XJEXFEWG.cjs');
|
|
43
41
|
require('../chunk-M2FOXGJU.cjs');
|
|
44
42
|
require('../chunk-5F4DCIHS.cjs');
|
|
43
|
+
require('../chunk-AFQTQC7A.cjs');
|
|
44
|
+
require('../chunk-XJEXFEWG.cjs');
|
|
45
45
|
require('../chunk-YZSQ7F5K.cjs');
|
|
46
46
|
require('../chunk-MCXS6X37.cjs');
|
|
47
47
|
require('../chunk-KQF7POTG.cjs');
|
|
@@ -49,9 +49,9 @@ require('../chunk-75BNMCUX.cjs');
|
|
|
49
49
|
require('../chunk-IN6ILI5A.cjs');
|
|
50
50
|
require('../chunk-HSLPFBK2.cjs');
|
|
51
51
|
require('../chunk-QGVOT7E4.cjs');
|
|
52
|
-
var chunkIPSHAMO2_cjs = require('../chunk-IPSHAMO2.cjs');
|
|
53
52
|
require('../chunk-QRAQZTJE.cjs');
|
|
54
53
|
require('../chunk-UDSHVNU3.cjs');
|
|
54
|
+
var chunkIPSHAMO2_cjs = require('../chunk-IPSHAMO2.cjs');
|
|
55
55
|
require('../chunk-PPCATBOY.cjs');
|
|
56
56
|
var chunkTKHCIHE2_cjs = require('../chunk-TKHCIHE2.cjs');
|
|
57
57
|
require('../chunk-JDFBEGQO.cjs');
|
|
@@ -1,42 +1,40 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkYP5EBGLU_cjs = require('../chunk-YP5EBGLU.cjs');
|
|
5
5
|
require('../chunk-YZ6YOOTF.cjs');
|
|
6
6
|
require('../chunk-KWJW5TMH.cjs');
|
|
7
|
-
require('../chunk-
|
|
8
|
-
|
|
9
|
-
var chunkPWBRE7JA_cjs = require('../chunk-PWBRE7JA.cjs');
|
|
10
|
-
require('../chunk-4ONPEVTP.cjs');
|
|
11
|
-
require('../chunk-V3KLUWQQ.cjs');
|
|
12
|
-
require('../chunk-JH6JTI76.cjs');
|
|
13
|
-
require('../chunk-AISYXX4M.cjs');
|
|
14
|
-
require('../chunk-QIK7E6VF.cjs');
|
|
7
|
+
require('../chunk-7NLO7ASW.cjs');
|
|
8
|
+
require('../chunk-7PN3YENO.cjs');
|
|
15
9
|
var chunkUFT22LAB_cjs = require('../chunk-UFT22LAB.cjs');
|
|
16
|
-
require('../chunk-
|
|
17
|
-
require('../chunk-
|
|
18
|
-
require('../chunk-
|
|
10
|
+
require('../chunk-AEQT2QQX.cjs');
|
|
11
|
+
var chunkADDQKZ5I_cjs = require('../chunk-ADDQKZ5I.cjs');
|
|
12
|
+
require('../chunk-5QERK4PK.cjs');
|
|
13
|
+
require('../chunk-T73BHNQX.cjs');
|
|
19
14
|
require('../chunk-HYUKPHCT.cjs');
|
|
20
|
-
require('../chunk-
|
|
15
|
+
require('../chunk-ALK3PUUB.cjs');
|
|
21
16
|
require('../chunk-223D4727.cjs');
|
|
22
17
|
require('../chunk-SNUBQMIS.cjs');
|
|
18
|
+
var chunkVLQCLQAS_cjs = require('../chunk-VLQCLQAS.cjs');
|
|
19
|
+
require('../chunk-4ONPEVTP.cjs');
|
|
20
|
+
require('../chunk-V3KLUWQQ.cjs');
|
|
23
21
|
var chunkP5AQYC4D_cjs = require('../chunk-P5AQYC4D.cjs');
|
|
24
22
|
require('../chunk-WAV762GP.cjs');
|
|
23
|
+
require('../chunk-JH6JTI76.cjs');
|
|
25
24
|
require('../chunk-QQMMCXBP.cjs');
|
|
26
25
|
require('../chunk-DTMBAFIL.cjs');
|
|
27
26
|
require('../chunk-Z3LFF3YT.cjs');
|
|
28
|
-
var chunkNSD37OF5_cjs = require('../chunk-NSD37OF5.cjs');
|
|
29
|
-
require('../chunk-BLIO3B7Z.cjs');
|
|
30
27
|
require('../chunk-WQMR3O2D.cjs');
|
|
31
28
|
require('../chunk-ORELHENJ.cjs');
|
|
32
29
|
require('../chunk-NWNVWO6L.cjs');
|
|
33
30
|
require('../chunk-SK6HQ46Q.cjs');
|
|
34
|
-
require('../chunk-OEJQFPWO.cjs');
|
|
35
31
|
require('../chunk-TG2GM7WJ.cjs');
|
|
36
|
-
|
|
37
|
-
var
|
|
32
|
+
require('../chunk-ZYGAXD3N.cjs');
|
|
33
|
+
var chunkNSD37OF5_cjs = require('../chunk-NSD37OF5.cjs');
|
|
34
|
+
require('../chunk-OEJQFPWO.cjs');
|
|
35
|
+
var chunkQG2U2JGX_cjs = require('../chunk-QG2U2JGX.cjs');
|
|
36
|
+
var chunkCQQQIZU4_cjs = require('../chunk-CQQQIZU4.cjs');
|
|
38
37
|
require('../chunk-QECKDZ47.cjs');
|
|
39
|
-
require('../chunk-JJZOL5MG.cjs');
|
|
40
38
|
var chunkTP5PGWIO_cjs = require('../chunk-TP5PGWIO.cjs');
|
|
41
39
|
var chunkI4IS6ST6_cjs = require('../chunk-I4IS6ST6.cjs');
|
|
42
40
|
var chunk7JLJH5CW_cjs = require('../chunk-7JLJH5CW.cjs');
|
|
@@ -44,6 +42,7 @@ require('../chunk-EVZH6Z5O.cjs');
|
|
|
44
42
|
require('../chunk-OYXWQTHF.cjs');
|
|
45
43
|
require('../chunk-S237ORM3.cjs');
|
|
46
44
|
require('../chunk-II2OEXHW.cjs');
|
|
45
|
+
require('../chunk-JJZOL5MG.cjs');
|
|
47
46
|
require('../chunk-3YEXZX4H.cjs');
|
|
48
47
|
require('../chunk-4PA6VCCR.cjs');
|
|
49
48
|
var chunkWXUU3COI_cjs = require('../chunk-WXUU3COI.cjs');
|
|
@@ -52,9 +51,10 @@ require('../chunk-RL2HI6NP.cjs');
|
|
|
52
51
|
require('../chunk-6UZC4XVV.cjs');
|
|
53
52
|
require('../chunk-YVCOQHCE.cjs');
|
|
54
53
|
require('../chunk-JV5TVUOU.cjs');
|
|
55
|
-
require('../chunk-VZOOGA47.cjs');
|
|
56
54
|
require('../chunk-ZVEW3JBT.cjs');
|
|
57
55
|
require('../chunk-M74FWYNL.cjs');
|
|
56
|
+
require('../chunk-QUMUAJ2P.cjs');
|
|
57
|
+
require('../chunk-VZOOGA47.cjs');
|
|
58
58
|
require('../chunk-SBWIA4PL.cjs');
|
|
59
59
|
require('../chunk-QMIHLJMH.cjs');
|
|
60
60
|
var chunkHQDR43JC_cjs = require('../chunk-HQDR43JC.cjs');
|
|
@@ -72,17 +72,17 @@ require('../chunk-MCXS6X37.cjs');
|
|
|
72
72
|
require('../chunk-KQF7POTG.cjs');
|
|
73
73
|
require('../chunk-75BNMCUX.cjs');
|
|
74
74
|
require('../chunk-IN6ILI5A.cjs');
|
|
75
|
-
require('../chunk-FX3K6LNZ.cjs');
|
|
76
75
|
var chunkHSLPFBK2_cjs = require('../chunk-HSLPFBK2.cjs');
|
|
76
|
+
require('../chunk-FX3K6LNZ.cjs');
|
|
77
77
|
var chunkQGVOT7E4_cjs = require('../chunk-QGVOT7E4.cjs');
|
|
78
|
-
require('../chunk-IPSHAMO2.cjs');
|
|
79
78
|
var chunkQRAQZTJE_cjs = require('../chunk-QRAQZTJE.cjs');
|
|
80
79
|
var chunkUDSHVNU3_cjs = require('../chunk-UDSHVNU3.cjs');
|
|
80
|
+
require('../chunk-IPSHAMO2.cjs');
|
|
81
81
|
require('../chunk-PPCATBOY.cjs');
|
|
82
|
-
require('../chunk-LJJJ6CYH.cjs');
|
|
83
82
|
var chunkTKHCIHE2_cjs = require('../chunk-TKHCIHE2.cjs');
|
|
84
83
|
require('../chunk-JDFBEGQO.cjs');
|
|
85
84
|
require('../chunk-ULWRNGGE.cjs');
|
|
85
|
+
require('../chunk-LJJJ6CYH.cjs');
|
|
86
86
|
require('../chunk-PLIF5CUV.cjs');
|
|
87
87
|
var react = require('react');
|
|
88
88
|
var react$2 = require('@arbidocs/react');
|
|
@@ -1852,7 +1852,7 @@ function TriggerInspector({
|
|
|
1852
1852
|
}
|
|
1853
1853
|
)
|
|
1854
1854
|
] }),
|
|
1855
|
-
trigger.start === "repeat" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1855
|
+
trigger.start === "repeat" && /* @__PURE__ */ jsxRuntime.jsx(chunkCQQQIZU4_cjs.RecurrenceBuilder, { rrule: trigger.rrule, onChange: (rrule) => set({ rrule }) }),
|
|
1856
1856
|
trigger.start === "event" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
|
|
1857
1857
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { className: "text-xs", children: l.event }),
|
|
1858
1858
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -2743,13 +2743,13 @@ function WorkflowPreview({
|
|
|
2743
2743
|
renderIcon,
|
|
2744
2744
|
testId
|
|
2745
2745
|
}) {
|
|
2746
|
-
const run =
|
|
2746
|
+
const run = chunkQG2U2JGX_cjs.useWorkflowPreview(workflow, {
|
|
2747
2747
|
resolveWorkflow: (id) => workflows.find((w) => w.id === id),
|
|
2748
2748
|
compose,
|
|
2749
2749
|
answer
|
|
2750
2750
|
});
|
|
2751
2751
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2752
|
-
|
|
2752
|
+
chunkCQQQIZU4_cjs.WorkflowRunner,
|
|
2753
2753
|
{
|
|
2754
2754
|
workflow,
|
|
2755
2755
|
run,
|
|
@@ -3045,7 +3045,7 @@ function ConnectedWorkflowsPage({
|
|
|
3045
3045
|
const config = host.workflows;
|
|
3046
3046
|
const { openConversation, openFiles } = chunkTKHCIHE2_cjs.useBlocksEnvironment();
|
|
3047
3047
|
const openWorkflow = chunkP5AQYC4D_cjs.useOpenWorkflow();
|
|
3048
|
-
const renderPerson =
|
|
3048
|
+
const renderPerson = chunkYP5EBGLU_cjs.useRenderTaskPerson();
|
|
3049
3049
|
const refreshDocuments = react$2.useRefreshDocuments();
|
|
3050
3050
|
const invalidateTags = react$2.useInvalidateTagData();
|
|
3051
3051
|
const { data: tags = [] } = react$2.useTags();
|
|
@@ -3076,7 +3076,7 @@ function ConnectedWorkflowsPage({
|
|
|
3076
3076
|
openHistory,
|
|
3077
3077
|
closeHistoryTab,
|
|
3078
3078
|
selectHistoryTab
|
|
3079
|
-
} =
|
|
3079
|
+
} = chunkYP5EBGLU_cjs.useWorkflowsPageState({
|
|
3080
3080
|
historyWorkflowId: requestedHistoryId ?? historyWorkflowId,
|
|
3081
3081
|
onHistoryWorkflowConsumed: consumeHistory
|
|
3082
3082
|
});
|
|
@@ -3125,14 +3125,14 @@ function ConnectedWorkflowsPage({
|
|
|
3125
3125
|
await refreshDocuments(execution.document_ext_ids);
|
|
3126
3126
|
await invalidateTags();
|
|
3127
3127
|
const fieldIds = execution.result?.tag_ext_ids ?? runsFor?.action?.tag_ext_ids ?? [];
|
|
3128
|
-
|
|
3128
|
+
chunkADDQKZ5I_cjs.useAiReviewStore.getState().setRun({
|
|
3129
3129
|
docIds: execution.document_ext_ids,
|
|
3130
3130
|
tags: fieldIds.map((fieldId) => ({
|
|
3131
3131
|
id: fieldId,
|
|
3132
3132
|
name: tags.find((tag) => tag.external_id === fieldId)?.name ?? "Review"
|
|
3133
3133
|
}))
|
|
3134
3134
|
});
|
|
3135
|
-
|
|
3135
|
+
chunkADDQKZ5I_cjs.useAiReviewStore.getState().setOpen(true);
|
|
3136
3136
|
openFiles(
|
|
3137
3137
|
execution.label_ext_id ? { filters: { [execution.label_ext_id]: "include" } } : void 0
|
|
3138
3138
|
);
|
|
@@ -3144,7 +3144,7 @@ function ConnectedWorkflowsPage({
|
|
|
3144
3144
|
return (
|
|
3145
3145
|
// The page in the Workflows page's frame: padded, scrolling.
|
|
3146
3146
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full min-h-0 w-full overflow-auto p-4 sm:p-6", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3147
|
-
|
|
3147
|
+
chunkYP5EBGLU_cjs.ConnectedWorkflowRunPage,
|
|
3148
3148
|
{
|
|
3149
3149
|
workflow: running.workflow,
|
|
3150
3150
|
projectFrom: running.projectFrom,
|
|
@@ -3232,7 +3232,7 @@ function ConnectedWorkflowsPage({
|
|
|
3232
3232
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-0 flex-col", "data-testid": testId, children: [
|
|
3233
3233
|
pageHeader && /* @__PURE__ */ jsxRuntime.jsx(chunkNSD37OF5_cjs.PageHeader, { ...pageHeader }),
|
|
3234
3234
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3235
|
-
|
|
3235
|
+
chunkVLQCLQAS_cjs.ConnectedWorkflowsTable,
|
|
3236
3236
|
{
|
|
3237
3237
|
onOpenTemplate: (id) => openBuilder({ kind: "template", id }),
|
|
3238
3238
|
tabs: [
|
|
@@ -3262,7 +3262,7 @@ function ConnectedWorkflowsPage({
|
|
|
3262
3262
|
}
|
|
3263
3263
|
},
|
|
3264
3264
|
content: hostTab ? hostTab.content : runsFor ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
3265
|
-
|
|
3265
|
+
chunkYP5EBGLU_cjs.ConnectedWorkflowHistory,
|
|
3266
3266
|
{
|
|
3267
3267
|
inline: true,
|
|
3268
3268
|
hideHeader: true,
|
|
@@ -3326,7 +3326,7 @@ function ConnectedWorkflowsPage({
|
|
|
3326
3326
|
}
|
|
3327
3327
|
),
|
|
3328
3328
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3329
|
-
|
|
3329
|
+
chunkYP5EBGLU_cjs.ConnectedTaskComposer,
|
|
3330
3330
|
{
|
|
3331
3331
|
kind: "workflow",
|
|
3332
3332
|
saveOnly: true,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arbidocs/coedit",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.127",
|
|
4
4
|
"description": "Real-time collaboration for the ARBI native DOCX editor: a Yjs mirror of the canonical OOXML package, session, and server runtime",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arbidocs/blocks",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.127",
|
|
4
4
|
"description": "Composable, domain-neutral UI blocks for ARBI apps, organised by capability (retrieval, facts, agents, workspaces, citations, collaboration) plus shell, theme and site primitives, on top of @arbidocs/react.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -344,9 +344,9 @@
|
|
|
344
344
|
"custom-site:test:e2e": "playwright test -c examples/custom-site/playwright.config.ts"
|
|
345
345
|
},
|
|
346
346
|
"dependencies": {
|
|
347
|
-
"@arbidocs/client": "0.5.
|
|
348
|
-
"@arbidocs/coedit": "0.5.
|
|
349
|
-
"@arbidocs/sdk": "0.5.
|
|
347
|
+
"@arbidocs/client": "0.5.127",
|
|
348
|
+
"@arbidocs/coedit": "0.5.127",
|
|
349
|
+
"@arbidocs/sdk": "0.5.127",
|
|
350
350
|
"@auth0/auth0-react": "^2.19.0",
|
|
351
351
|
"@dnd-kit/core": "^6.3.1",
|
|
352
352
|
"@dnd-kit/sortable": "^10.0.0",
|
|
@@ -397,7 +397,7 @@
|
|
|
397
397
|
"y-protocols": "^1.0.6"
|
|
398
398
|
},
|
|
399
399
|
"peerDependencies": {
|
|
400
|
-
"@arbidocs/react": "0.5.
|
|
400
|
+
"@arbidocs/react": "0.5.127",
|
|
401
401
|
"@lexical/html": "0.35.0",
|
|
402
402
|
"@lexical/link": "0.35.0",
|
|
403
403
|
"@lexical/list": "0.35.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/presentation/ClippingMediaViewer.tsx"],"names":["useObjectUrl","useRef","useState","useEffect","useCallback","useSpotlight","mediaCaption","jsxs","jsx","ClipCaptureOverlay","Button","Pause","Play","formatTime","Plus"],"mappings":"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","file":"ClippingMediaViewer-ZFEX5A3U.cjs","sourcesContent":["/**\n * An image or a video while clipping for a presentation: drag over it and that area becomes a clip\n * (of a video: from the moment on screen). A video has its own small bar (play / pause, scrub, and\n * \"Add whole frame\"), since the drag area covers the picture.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { Pause, Play, Plus } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { ClipCaptureOverlay } from '../../presentation/ClipCaptureOverlay'\nimport { formatTime, mediaCaption, type Rect } from '../../presentation/model'\nimport { useSpotlight } from '../../presentation/spotlight'\nimport { useObjectUrl } from '../../presentation/useObjectUrl'\n\nexport interface ClippingMediaViewerProps {\n file: Blob\n kind: 'image' | 'video'\n documentId: string\n fileName: string\n}\n\nconst WHOLE: Rect = { x: 0, y: 0, w: 1, h: 1 }\n\nexport function ClippingMediaViewer({\n file,\n kind,\n documentId,\n fileName,\n}: ClippingMediaViewerProps) {\n const url = useObjectUrl(file)\n const videoRef = useRef<HTMLVideoElement>(null)\n const imageRef = useRef<HTMLImageElement>(null)\n // The picture's own width / height, once known.\n const [natural, setNatural] = useState<number | null>(null)\n const [time, setTime] = useState(0)\n const [duration, setDuration] = useState(0)\n const [playing, setPlaying] = useState(false)\n\n // Its size, read as soon as it is known: at once if it already loaded (a cached file can load\n // before any handler is attached), else when it does.\n useEffect(() => {\n const media = videoRef.current ?? imageRef.current\n if (!media || !url) return\n const read = () => {\n const width = media instanceof HTMLVideoElement ? media.videoWidth : media.naturalWidth\n const height = media instanceof HTMLVideoElement ? media.videoHeight : media.naturalHeight\n if (width && height) setNatural(width / height)\n if (media instanceof HTMLVideoElement) setDuration(media.duration || 0)\n }\n read()\n const event = media instanceof HTMLVideoElement ? 'loadedmetadata' : 'load'\n media.addEventListener(event, read)\n return () => media.removeEventListener(event, read)\n }, [url])\n\n const capture = useCallback(\n ({ rect, aspect }: { rect: Rect; aspect: number }) => {\n const start = kind === 'video' ? (videoRef.current?.currentTime ?? 0) : undefined\n useSpotlight.getState().gather({\n kind,\n documentId,\n fileName,\n page: 1,\n rect,\n aspect,\n masks: [],\n source: file,\n start,\n caption: mediaCaption(fileName, start),\n })\n },\n [kind, documentId, fileName, file]\n )\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-testid=\"clipping-media-viewer\">\n <div className=\"border-b border-border bg-muted px-3 py-1.5 text-xs text-muted-foreground\">\n {kind === 'video'\n ? 'Drag over the video to clip that area from this moment, or add the whole frame.'\n : 'Drag over the part of the image to clip it.'}\n </div>\n <div className=\"relative min-h-0 flex-1 bg-black\" style={{ containerType: 'size' }}>\n {/* The picture as large as fits, aspect kept; the drag area covers exactly it. */}\n <div\n className=\"absolute inset-0 m-auto\"\n style={\n natural\n ? {\n width: `min(100cqw, calc(100cqh * ${natural}))`,\n height: `min(100cqh, calc(100cqw / ${natural}))`,\n }\n : { width: '100%', height: '100%' }\n }\n >\n {kind === 'video' ? (\n <video\n ref={videoRef}\n src={url}\n playsInline\n preload=\"auto\"\n className=\"block h-full w-full\"\n onTimeUpdate={(event) => setTime(event.currentTarget.currentTime)}\n onPlay={() => setPlaying(true)}\n onPause={() => setPlaying(false)}\n />\n ) : (\n <img\n ref={imageRef}\n src={url}\n alt={fileName}\n draggable={false}\n className=\"block h-full w-full select-none\"\n />\n )}\n {natural && <ClipCaptureOverlay page={1} onCapture={capture} />}\n </div>\n </div>\n {kind === 'video' && (\n <div className=\"flex items-center gap-2 border-t border-border px-3 py-1.5\">\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8\"\n onClick={() => {\n const v = videoRef.current\n if (!v) return\n if (v.paused) void v.play()\n else v.pause()\n }}\n aria-label={playing ? 'Pause' : 'Play'}\n >\n {playing ? <Pause className=\"size-4\" /> : <Play className=\"size-4\" />}\n </Button>\n <input\n type=\"range\"\n min={0}\n max={duration || 0}\n step={0.1}\n value={time}\n onChange={(event) => {\n const v = videoRef.current\n if (v) v.currentTime = Number(event.target.value)\n }}\n className=\"min-w-0 flex-1\"\n aria-label=\"Position in the video\"\n />\n <span className=\"text-xs tabular-nums text-muted-foreground\">\n {formatTime(time)} / {formatTime(duration)}\n </span>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n disabled={!natural}\n onClick={() => natural && capture({ rect: WHOLE, aspect: natural })}\n data-testid=\"clip-whole-frame\"\n >\n <Plus className=\"mr-1 size-4\" />\n Add whole frame\n </Button>\n </div>\n )}\n </div>\n )\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/presentation/ClippingPdfViewer.tsx"],"names":["useDocumentTools","useState","useEffect","createMarkupStore","useParsedDocument","useProcessedChunks","useMemo","placedPassagesByPage","passageClipRect","jsx","useCallback","useSpotlight","ClipCaptureOverlay","jsxs"],"mappings":"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","file":"ClippingPdfViewer-3LRTEPHV.cjs","sourcesContent":["/**\n * The PDF while clipping: a click on a passage clips that passage (outlined under the pointer), a\n * drag over a page clips that area. Clips are gathered in the viewer's spotlight strip\n * (`SpotlightStrip`), to show over the document or keep as a slide.\n *\n * Redactions are honoured: when the version has markup, its redaction marks (all but rejected\n * ones) are read first and every clip carries those over its area as black masks, so a redacted\n * passage never reaches a shared screen. Clipping waits for them, and stays off if they cannot be\n * read.\n */\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ComponentType,\n type ReactNode,\n} from 'react'\nimport { useParsedDocument } from '@arbidocs/react'\nimport { createMarkupStore, useDocumentTools } from '@arbidocs/react/document-tools'\nimport { useProcessedChunks, type PdfViewerProps } from '@arbidocs/react/viewers'\nimport { ClipCaptureOverlay } from '../../presentation/ClipCaptureOverlay'\nimport type { Rect } from '../../presentation/model'\nimport { passageClipRect } from '../../presentation/passage-clip'\nimport { useSpotlight } from '../../presentation/spotlight'\nimport { placedPassagesByPage } from '../viewer/pdf/passageHighlights'\n\ntype MaskState =\n | { status: 'loading' }\n | { status: 'error' }\n | { status: 'ready'; masks: ReadonlyMap<number, Rect[]> }\n\nconst NO_MASKS: MaskState = { status: 'ready', masks: new Map() }\n\n/** The version's redaction rectangles by page; none to read when it has no markup. */\nfunction useRedactionMasks(documentId: string, version: number | undefined, hasMarkup: boolean) {\n const { client } = useDocumentTools()\n const [state, setState] = useState<MaskState>(hasMarkup ? { status: 'loading' } : NO_MASKS)\n useEffect(() => {\n if (!hasMarkup) {\n setState(NO_MASKS)\n return\n }\n let cancelled = false\n setState({ status: 'loading' })\n createMarkupStore({ version, client })\n .load(documentId)\n .then((layer) => {\n if (cancelled) return\n const masks = new Map<number, Rect[]>()\n for (const mark of layer.annotations) {\n if (mark.kind !== 'redaction' || mark.status === 'rejected') continue\n masks.set(mark.page, [...(masks.get(mark.page) ?? []), ...mark.rects])\n }\n setState({ status: 'ready', masks })\n })\n .catch(() => !cancelled && setState({ status: 'error' }))\n return () => {\n cancelled = true\n }\n }, [client, documentId, version, hasMarkup])\n return state\n}\n\nconst NO_FOOTNOTES: Record<string, string> = {}\nconst NO_PASSAGES: ReadonlyMap<number, Rect[]> = new Map()\n\n/**\n * The areas a click clips, by page: each passage the parser placed, with its margin. Only for the\n * current version (the passages are its own); an older one is clipped by dragging.\n */\nfunction usePassageAreas(documentId: string, current: boolean): ReadonlyMap<number, Rect[]> {\n const { data: parsed } = useParsedDocument(documentId, 'final', { enabled: current })\n const { processedChunks } = useProcessedChunks(parsed?.chunks, NO_FOOTNOTES)\n return useMemo(() => {\n if (!current || !processedChunks.length) return NO_PASSAGES\n const areas = new Map<number, Rect[]>()\n for (const [page, boxes] of placedPassagesByPage(processedChunks)) {\n areas.set(page, boxes.map(passageClipRect))\n }\n return areas\n }, [current, processedChunks])\n}\n\nexport interface ClippingPdfViewerProps extends Omit<PdfViewerProps, 'renderPageOverlay'> {\n file: Blob\n documentId: string\n /** The version on screen when it is an older one. */\n version?: number\n fileName: string\n /** The version has markup, which may hold redactions. */\n hasMarkup: boolean\n viewer: ComponentType<PdfViewerProps>\n}\n\nfunction Notice({ children }: { children: ReactNode }) {\n return (\n <div className=\"border-b border-border bg-muted px-3 py-1.5 text-xs text-muted-foreground\">\n {children}\n </div>\n )\n}\n\nexport function ClippingPdfViewer({\n documentId,\n version,\n fileName,\n hasMarkup,\n viewer: Viewer,\n ...viewerProps\n}: ClippingPdfViewerProps) {\n const masks = useRedactionMasks(documentId, version, hasMarkup)\n const passages = usePassageAreas(documentId, version === undefined)\n const file = viewerProps.file\n\n const capture = useCallback(\n ({ page, rect, aspect }: { page: number; rect: Rect; aspect: number }) => {\n if (masks.status !== 'ready') return\n useSpotlight.getState().gather({\n kind: 'pdf',\n documentId,\n version,\n fileName,\n page,\n rect,\n aspect,\n masks: masks.masks.get(page) ?? [],\n source: file,\n })\n // It joins the viewer's spotlight strip.\n },\n [masks, documentId, version, fileName, file]\n )\n\n const renderPageOverlay = useCallback(\n ({ pageNumber }: { pageNumber: number }) =>\n masks.status === 'ready' ? (\n <ClipCaptureOverlay\n page={pageNumber}\n passages={passages.get(pageNumber)}\n onCapture={capture}\n />\n ) : null,\n [masks.status, capture, passages]\n )\n\n return (\n <div\n className=\"flex h-full min-h-0 flex-col\"\n // The spotlight finds a clip's page here, to fly it from there.\n data-clip-document={documentId}\n data-testid=\"clipping-pdf-viewer\"\n >\n <Notice>\n {masks.status === 'loading'\n ? 'Reading the redactions before clipping…'\n : masks.status === 'error'\n ? \"Couldn't read this document's redactions, so it can't be clipped.\"\n : passages.size\n ? 'Click a passage to clip it, or drag over any area.'\n : 'Drag over the part of a page to clip it.'}\n </Notice>\n <div className=\"min-h-0 flex-1\">\n <Viewer {...viewerProps} renderPageOverlay={renderPageOverlay} />\n </div>\n </div>\n )\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/presentation/PresenterView.tsx","../src/connection/presentation/ConnectedPresentation.tsx"],"names":["useEffect","STAGE_ASPECT","usePresentation","useState","useCallback","usePresenterKeys","usePointerActive","jsxs","toggleFullscreen","jsx","PresentationStage","PresentControls","SlidesEditor","ConnectedDocumentToolsProvider","useArbiSessionStore","useArbiSessionState","isPanelOpen","PRESENTATION_PANEL","useArbiSession","useRef","usePresentationFiles","usePresentationController","presentationWindowOnlyPresents","ConnectedPanelHost","Fragment","Button","PanelLeftClose"],"mappings":"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","file":"ConnectedPresentation-L32JPRFI.cjs","sourcesContent":["/**\n * The presentation in a window of its own, in one of two modes.\n *\n * Present: nothing but the stage on black, no controls and no pointer: what is shared in a call or\n * shown on a projector. Keys drive it (arrows / Page Up / Page Down change slide, B blanks, F or\n * double-click toggles full screen, Space plays videos, Escape stops presenting).\n *\n * Edit: the slides editor (`SlidesEditor`), the same as in the viewer's tab, when the presentation\n * is edited in its own window (beside the document its clips come from).\n */\n\nimport { useCallback, useEffect, useState } from 'react'\nimport { PresentationStage } from './PresentationStage'\nimport { SlidesEditor, type SlidesEditorProps } from './SlidesEditor'\nimport { STAGE_ASPECT } from './model'\nimport { usePresentation } from './store'\nimport { toggleFullscreen, usePresenterKeys } from './usePresenterKeys'\nimport { PresentControls } from './PresentControls'\nimport { usePointerActive } from './usePointerActive'\n\n/** The presenting window's page width, at most (smaller on a small screen). */\nconst PRESENT_WIDTH = 1280\n\n/**\n * While presenting in a pop-out, its page is made 16:9 and wide enough to share sharply, so a\n * shared window is all stage with no bars; editing again gives the window back its size. Only a\n * pop-out (a window this app opened) can be resized; the app's own window is left alone.\n */\nfunction useStageShapedWindow(view: Window | null, presenting: boolean) {\n useEffect(() => {\n if (!view || !presenting || !view.opener) return\n const before = { width: view.outerWidth, height: view.outerHeight }\n const chromeWidth = view.outerWidth - view.innerWidth\n const chromeHeight = view.outerHeight - view.innerHeight\n // Wide enough for a sharp share (a call receives about what the window shows), and 16:9.\n const width = Math.max(\n view.innerWidth,\n Math.min(PRESENT_WIDTH, Math.round((view.screen.availWidth - chromeWidth) * 0.6))\n )\n const height = Math.min(\n Math.round(width / STAGE_ASPECT),\n view.screen.availHeight - chromeHeight\n )\n try {\n view.resizeTo(Math.round(height * STAGE_ASPECT) + chromeWidth, height + chromeHeight)\n } catch {\n return // not resizable: the stage letterboxes in black\n }\n return () => {\n try {\n if (!view.closed) view.resizeTo(before.width, before.height)\n } catch {\n // gone or not resizable\n }\n }\n }, [view, presenting])\n}\n\nexport type PresenterViewProps = Omit<SlidesEditorProps, 'onPresent'> & {\n /** Present (default: here, in this window). */\n onPresent?: () => void\n}\n\nexport function PresenterView({ onPresent, ...editor }: PresenterViewProps) {\n const presenting = usePresentation((s) => s.presenting)\n const [view, setView] = useState<Window | null>(null)\n // The keys work in whichever window the presenter is in.\n const rootRef = useCallback((node: HTMLDivElement | null) => {\n if (node) setView(node.ownerDocument.defaultView)\n }, [])\n usePresenterKeys(presenting ? view : null, true)\n useStageShapedWindow(view, presenting)\n\n const active = usePointerActive(presenting ? view : null)\n\n if (presenting) {\n return (\n <div\n ref={rootRef}\n className=\"relative h-full w-full select-none bg-black\"\n // The pointer shows while it moves, with the controls; idle, nothing but the slide.\n style={{ cursor: active ? 'default' : 'none' }}\n // A click on the slide goes to the next one, as in a slideshow.\n onClick={() => {\n const state = usePresentation.getState()\n state.goTo(state.current + 1)\n }}\n onDoubleClick={() => view && toggleFullscreen(view)}\n data-testid=\"presentation-present\"\n >\n <PresentationStage />\n <PresentControls view={view} shown={active} />\n </div>\n )\n }\n return (\n <div ref={rootRef} className=\"h-full min-h-0\" data-testid=\"presenter-view\">\n <SlidesEditor\n {...editor}\n onPresent={onPresent ?? (() => usePresentation.getState().setPresenting(true))}\n />\n </div>\n )\n}\n","/**\n * The presentation's own window, mounted once by the app shell (the session's `PRESENTATION_PANEL`,\n * a pop-out). It presents: the slides alone, what is shared in a call or put full screen; or, when\n * the editor is popped out of the viewer's slides tab, it edits there, beside the documents its\n * clips come from. A window opened only to present closes when presenting ends.\n *\n * It also keeps what the presentation needs wherever it is edited: the theme's logo image, read\n * when the logo changes; and a clean slate when the session signs out or another user signs in\n * (the presentation holds decrypted files in memory).\n */\n\nimport { useCallback, useEffect, useRef } from 'react'\nimport { PanelLeftClose } from 'lucide-react'\nimport {\n isPanelOpen,\n useArbiSession,\n useArbiSessionState,\n useArbiSessionStore,\n} from '@arbidocs/react'\nimport { Button } from '@arbidocs/react/ui'\nimport { ConnectedPanelHost } from '../panels/ConnectedPanelHost'\nimport { ConnectedDocumentToolsProvider } from '../viewer/ConnectedDocumentToolsProvider'\nimport { PRESENTATION_PANEL, presentationWindowOnlyPresents } from '../../presentation/panel-id'\nimport { PresenterView } from '../../presentation/PresenterView'\nimport { usePresentation } from '../../presentation/store'\nimport { usePresentationController } from './usePresentationController'\nimport { usePresentationFiles } from './usePresentationFiles'\n\n/** The presentation's window, with the document tools it needs (sources, redactions). */\nexport function ConnectedPresentation() {\n return (\n <ConnectedDocumentToolsProvider>\n <PresentationWindow />\n </ConnectedDocumentToolsProvider>\n )\n}\n\nfunction PresentationWindow() {\n const session = useArbiSessionStore()\n const notify = usePresentation((s) => s.notify)\n const presenting = usePresentation((s) => s.presenting)\n const isOpen = useArbiSessionState((state) => isPanelOpen(state, PRESENTATION_PANEL))\n const { user } = useArbiSession()\n const userId = user?.external_id ?? null\n const shownFor = useRef(userId)\n const { downloadFile } = usePresentationFiles()\n const logoId = usePresentation((s) => s.theme.logo?.documentId ?? null)\n const controller = usePresentationController(isOpen && !presenting)\n\n useEffect(() => {\n if (shownFor.current === userId) return\n shownFor.current = userId\n usePresentation.getState().reset()\n session.closePanel(PRESENTATION_PANEL)\n }, [userId, session])\n\n // The theme's logo image, fetched whenever the logo changes (the theme keeps a reference only).\n useEffect(() => {\n if (!logoId) return\n let current = true\n downloadFile(logoId)\n .then((image) => current && usePresentation.getState().setLogoImage(image))\n .catch(() => current && notify('The logo could not be read', 'error'))\n return () => {\n current = false\n }\n }, [logoId, downloadFile, notify])\n\n // A closed window is not presenting.\n useEffect(() => {\n if (!isOpen) usePresentation.getState().setPresenting(false)\n }, [isOpen])\n\n // Opened only to present: closed when presenting ends (Escape).\n const wasPresenting = useRef(presenting)\n useEffect(() => {\n if (wasPresenting.current && !presenting && isOpen && presentationWindowOnlyPresents()) {\n session.closePanel(PRESENTATION_PANEL)\n }\n wasPresenting.current = presenting\n }, [presenting, isOpen, session])\n\n const onClose = useCallback(() => session.closePanel(PRESENTATION_PANEL), [session])\n\n return (\n <ConnectedPanelHost\n panelId={PRESENTATION_PANEL}\n isOpen={isOpen}\n onClose={onClose}\n title=\"Presentation\"\n defaultMode=\"popout\"\n defaultWidth={960}\n closeTestId=\"presentation-panel-close\"\n >\n {/* Inside the panel, so its dialogs open in its window. */}\n {() => (\n <>\n {!presenting && controller.dialogs}\n <PresenterView\n {...controller.editor}\n actions={\n <>\n {controller.editor.actions}\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8 text-muted-foreground hover:text-foreground pointer-coarse:size-11\"\n title=\"Back into the app's viewer\"\n aria-label=\"Back to the viewer\"\n onClick={onClose}\n data-testid=\"presentation-pop-in\"\n >\n <PanelLeftClose className=\"size-4\" />\n </Button>\n </>\n }\n />\n </>\n )}\n </ConnectedPanelHost>\n )\n}\n"]}
|