@opengeni/react 3.3.2 → 3.4.1-canary.38960406141001
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 +769 -22
- package/dist/accounts.js +2 -0
- package/dist/accounts.js.map +1 -1
- package/dist/approvals.d.ts +2 -1
- package/dist/artifacts-document.js +5 -3
- package/dist/artifacts-presentation.js +5 -3
- package/dist/artifacts-spreadsheet.d.ts +1 -1
- package/dist/artifacts-spreadsheet.js +5 -3
- package/dist/artifacts.d.ts +5 -1
- package/dist/artifacts.js +536 -42
- package/dist/artifacts.js.map +1 -1
- package/dist/browser-viewer-ZWR6MWJ7.js +19 -0
- package/dist/capability-catalog-row.d.ts +20 -0
- package/dist/capability-logo-fallback.d.ts +3 -0
- package/dist/chat-interactive-block-4EUKJXUO.js +14 -0
- package/dist/chunk-2DDJ6YH6.js +41 -0
- package/dist/chunk-2DDJ6YH6.js.map +1 -0
- package/dist/chunk-2HVLQ26H.js +183 -0
- package/dist/chunk-2HVLQ26H.js.map +1 -0
- package/dist/{chunk-XYRDDSXF.js → chunk-2I6R3GCZ.js} +4285 -3980
- package/dist/chunk-2I6R3GCZ.js.map +1 -0
- package/dist/{chunk-JAQ5K7W6.js → chunk-2SFFYIH3.js} +1178 -166
- package/dist/chunk-2SFFYIH3.js.map +1 -0
- package/dist/chunk-3PVDYTTB.js +24 -0
- package/dist/chunk-3PVDYTTB.js.map +1 -0
- package/dist/chunk-3RJKUVCA.js +14068 -0
- package/dist/chunk-3RJKUVCA.js.map +1 -0
- package/dist/chunk-3UZCWK46.js +298 -0
- package/dist/chunk-3UZCWK46.js.map +1 -0
- package/dist/chunk-47CKUXTW.js +293 -0
- package/dist/chunk-47CKUXTW.js.map +1 -0
- package/dist/chunk-4QYP6QUI.js +109 -0
- package/dist/chunk-4QYP6QUI.js.map +1 -0
- package/dist/chunk-5EY26VZ7.js +1053 -0
- package/dist/chunk-5EY26VZ7.js.map +1 -0
- package/dist/chunk-5I4VRWBB.js +56 -0
- package/dist/chunk-5I4VRWBB.js.map +1 -0
- package/dist/chunk-5WOR7UCL.js +191 -0
- package/dist/chunk-5WOR7UCL.js.map +1 -0
- package/dist/chunk-5YJLGOM5.js +51 -0
- package/dist/chunk-5YJLGOM5.js.map +1 -0
- package/dist/chunk-6JFN3OWG.js +386 -0
- package/dist/chunk-6JFN3OWG.js.map +1 -0
- package/dist/chunk-7QJT5O4S.js +35 -0
- package/dist/chunk-7QJT5O4S.js.map +1 -0
- package/dist/chunk-A55KV72M.js +402 -0
- package/dist/chunk-A55KV72M.js.map +1 -0
- package/dist/chunk-ADWCLI4G.js +2028 -0
- package/dist/chunk-ADWCLI4G.js.map +1 -0
- package/dist/chunk-B27E3V37.js +29 -0
- package/dist/chunk-B27E3V37.js.map +1 -0
- package/dist/chunk-B7TC2A33.js +83 -0
- package/dist/chunk-B7TC2A33.js.map +1 -0
- package/dist/chunk-BLL56F7R.js +385 -0
- package/dist/chunk-BLL56F7R.js.map +1 -0
- package/dist/chunk-BOFEQC6K.js +162 -0
- package/dist/chunk-BOFEQC6K.js.map +1 -0
- package/dist/chunk-CM7LVUKC.js +35 -0
- package/dist/chunk-CM7LVUKC.js.map +1 -0
- package/dist/chunk-CORUP6JB.js +122 -0
- package/dist/chunk-CORUP6JB.js.map +1 -0
- package/dist/chunk-CSX5FFKZ.js +35 -0
- package/dist/chunk-CSX5FFKZ.js.map +1 -0
- package/dist/chunk-EGVHJKGJ.js +3125 -0
- package/dist/chunk-EGVHJKGJ.js.map +1 -0
- package/dist/{chunk-NEXLLTP4.js → chunk-G76LSA76.js} +6 -5
- package/dist/chunk-G76LSA76.js.map +1 -0
- package/dist/{chunk-PEI6RANI.js → chunk-GQMRL52F.js} +311 -75
- package/dist/chunk-GQMRL52F.js.map +1 -0
- package/dist/{chunk-ELIYWBZR.js → chunk-GUUXOISA.js} +1113 -457
- package/dist/chunk-GUUXOISA.js.map +1 -0
- package/dist/{chunk-HUIKIDM5.js → chunk-I7X2P4FU.js} +225 -116
- package/dist/chunk-I7X2P4FU.js.map +1 -0
- package/dist/chunk-IGFZFLI2.js +1390 -0
- package/dist/chunk-IGFZFLI2.js.map +1 -0
- package/dist/{chunk-4MDLEHXL.js → chunk-IMSUVYQB.js} +26 -13
- package/dist/chunk-IMSUVYQB.js.map +1 -0
- package/dist/chunk-IOYHDEP3.js +38 -0
- package/dist/chunk-IOYHDEP3.js.map +1 -0
- package/dist/chunk-IZV5FTJC.js +55 -0
- package/dist/chunk-IZV5FTJC.js.map +1 -0
- package/dist/chunk-KF33GTWN.js +343 -0
- package/dist/chunk-KF33GTWN.js.map +1 -0
- package/dist/chunk-KSGQ5ODA.js +457 -0
- package/dist/chunk-KSGQ5ODA.js.map +1 -0
- package/dist/{chunk-ZPBTI3TE.js → chunk-KZC6QRNR.js} +1513 -697
- package/dist/chunk-KZC6QRNR.js.map +1 -0
- package/dist/chunk-LJUMYUBO.js +218 -0
- package/dist/chunk-LJUMYUBO.js.map +1 -0
- package/dist/chunk-LSW2OJVV.js +380 -0
- package/dist/chunk-LSW2OJVV.js.map +1 -0
- package/dist/chunk-M357MHH3.js +2 -0
- package/dist/chunk-M357MHH3.js.map +1 -0
- package/dist/chunk-MK2TQO4Y.js +24 -0
- package/dist/chunk-MK2TQO4Y.js.map +1 -0
- package/dist/chunk-N7S72EXK.js +25 -0
- package/dist/chunk-N7S72EXK.js.map +1 -0
- package/dist/{chunk-YVCHAQZY.js → chunk-NKMYZFHA.js} +616 -621
- package/dist/chunk-NKMYZFHA.js.map +1 -0
- package/dist/chunk-NX4ADH73.js +14 -0
- package/dist/chunk-NX4ADH73.js.map +1 -0
- package/dist/chunk-O7F6UJO4.js +71 -0
- package/dist/chunk-O7F6UJO4.js.map +1 -0
- package/dist/chunk-OYQQJL3J.js +16 -0
- package/dist/chunk-OYQQJL3J.js.map +1 -0
- package/dist/{chunk-H5YGYNXS.js → chunk-P4BNUO57.js} +60 -17
- package/dist/chunk-P4BNUO57.js.map +1 -0
- package/dist/{chunk-JVYQRRC4.js → chunk-PEHTX3V7.js} +21 -1
- package/dist/chunk-PEHTX3V7.js.map +1 -0
- package/dist/chunk-PMV53IMM.js +26 -0
- package/dist/chunk-PMV53IMM.js.map +1 -0
- package/dist/{chunk-KCGXPP5V.js → chunk-PYEOPA4M.js} +13 -7
- package/dist/chunk-PYEOPA4M.js.map +1 -0
- package/dist/{chunk-KZ73RL76.js → chunk-QHUE7E4N.js} +8 -3
- package/dist/chunk-QHUE7E4N.js.map +1 -0
- package/dist/chunk-QV3DJVRZ.js +11 -0
- package/dist/chunk-QV3DJVRZ.js.map +1 -0
- package/dist/chunk-R5SBNG7S.js +810 -0
- package/dist/chunk-R5SBNG7S.js.map +1 -0
- package/dist/chunk-RI42H5IU.js +326 -0
- package/dist/chunk-RI42H5IU.js.map +1 -0
- package/dist/chunk-S2QH6EZ5.js +211 -0
- package/dist/chunk-S2QH6EZ5.js.map +1 -0
- package/dist/chunk-SHLZMAJN.js +304 -0
- package/dist/chunk-SHLZMAJN.js.map +1 -0
- package/dist/chunk-TGXK4BAZ.js +293 -0
- package/dist/chunk-TGXK4BAZ.js.map +1 -0
- package/dist/{chunk-5YK2ZDIG.js → chunk-TNEZNMSN.js} +4 -10
- package/dist/chunk-TNEZNMSN.js.map +1 -0
- package/dist/{chunk-22KP6LR5.js → chunk-TXS65BB2.js} +3 -1
- package/dist/{chunk-22KP6LR5.js.map → chunk-TXS65BB2.js.map} +1 -1
- package/dist/chunk-UNJPZGNK.js +63 -0
- package/dist/chunk-UNJPZGNK.js.map +1 -0
- package/dist/{chunk-IOLVN74D.js → chunk-V5ZUJT2T.js} +175 -42
- package/dist/chunk-V5ZUJT2T.js.map +1 -0
- package/dist/chunk-WBJY57A3.js +402 -0
- package/dist/chunk-WBJY57A3.js.map +1 -0
- package/dist/chunk-WIUKB3LD.js +1911 -0
- package/dist/chunk-WIUKB3LD.js.map +1 -0
- package/dist/{chunk-ICA6R6TW.js → chunk-WNN7NO2N.js} +1451 -355
- package/dist/chunk-WNN7NO2N.js.map +1 -0
- package/dist/{chunk-3AGBGTRT.js → chunk-X5UVUIMF.js} +1712 -1174
- package/dist/chunk-X5UVUIMF.js.map +1 -0
- package/dist/chunk-XDA5QJE7.js +402 -0
- package/dist/chunk-XDA5QJE7.js.map +1 -0
- package/dist/{chunk-VZTQ73XT.js → chunk-XEA5BCMA.js} +3 -1
- package/dist/{chunk-VZTQ73XT.js.map → chunk-XEA5BCMA.js.map} +1 -1
- package/dist/chunk-XHF7OYAN.js +1150 -0
- package/dist/chunk-XHF7OYAN.js.map +1 -0
- package/dist/chunk-YSRBFJMQ.js +43 -0
- package/dist/chunk-YSRBFJMQ.js.map +1 -0
- package/dist/chunk-ZOZAPAUO.js +174 -0
- package/dist/chunk-ZOZAPAUO.js.map +1 -0
- package/dist/chunk-ZQV5W7YC.js +809 -0
- package/dist/chunk-ZQV5W7YC.js.map +1 -0
- package/dist/chunk-ZUWF4NF7.js +13 -0
- package/dist/chunk-ZUWF4NF7.js.map +1 -0
- package/dist/client.d.ts +16 -7
- package/dist/clipboard.js +3 -1
- package/dist/commands/types.d.ts +2 -0
- package/dist/components/anthropic-mark.d.ts +3 -0
- package/dist/components/approval-surface.d.ts +19 -6
- package/dist/components/artifacts/artifact-chrome.d.ts +120 -0
- package/dist/components/artifacts/artifact-sandbox.d.ts +30 -0
- package/dist/components/artifacts/artifact-surface.d.ts +4 -2
- package/dist/components/artifacts/chat-interactive-block.d.ts +29 -0
- package/dist/components/artifacts/deferred-chat-media.d.ts +15 -0
- package/dist/components/artifacts/document-editor.d.ts +4 -2
- package/dist/components/artifacts/editable-artifact-ui.d.ts +2 -1
- package/dist/components/artifacts/editable-artifact-view.d.ts +48 -0
- package/dist/components/artifacts/editable-document.d.ts +1 -1
- package/dist/components/artifacts/editable-presentation.d.ts +2 -2
- package/dist/components/artifacts/editable-spreadsheet.d.ts +8 -3
- package/dist/components/artifacts/index.d.ts +9 -2
- package/dist/components/artifacts/inline-html-document.d.ts +2 -0
- package/dist/components/artifacts/latest-task-runner.d.ts +15 -0
- package/dist/components/artifacts/presentation-editor.d.ts +6 -2
- package/dist/components/artifacts/published-html-artifact-frame.d.ts +23 -3
- package/dist/components/artifacts/session-artifact-viewer.d.ts +39 -0
- package/dist/components/artifacts/site-view.d.ts +26 -0
- package/dist/components/artifacts/spreadsheet-command-queue.d.ts +20 -0
- package/dist/components/artifacts/spreadsheet-download.d.ts +7 -0
- package/dist/components/artifacts/spreadsheet-general-display.d.ts +24 -0
- package/dist/components/artifacts/spreadsheet-grid.d.ts +10 -3
- package/dist/components/artifacts/spreadsheet-resize.d.ts +50 -0
- package/dist/components/artifacts/spreadsheet-submissions.d.ts +9 -0
- package/dist/components/artifacts/visualization-assets.gen.d.ts +2 -0
- package/dist/components/browser-select-control.d.ts +16 -0
- package/dist/components/browser-viewer.d.ts +11 -2
- package/dist/components/chat-composer.d.ts +21 -3
- package/dist/components/child-session-link.d.ts +9 -0
- package/dist/components/claude-mark.d.ts +3 -0
- package/dist/components/code-editor.d.ts +1 -4
- package/dist/components/composer-transcription-control.d.ts +7 -0
- package/dist/components/composer.d.ts +34 -67
- package/dist/components/computer-viewer.d.ts +1 -1
- package/dist/components/copy-button.d.ts +3 -1
- package/dist/components/desktop-viewer.d.ts +1 -1
- package/dist/components/grok-mark.d.ts +26 -0
- package/dist/components/human-input-form.d.ts +28 -32
- package/dist/components/human-input-surface.d.ts +7 -2
- package/dist/components/linkified-text.d.ts +18 -0
- package/dist/components/machine-input-display.d.ts +22 -1
- package/dist/components/machines/agent-status-icon.d.ts +6 -0
- package/dist/components/machines/machine-detail.d.ts +7 -1
- package/dist/components/machines/machine-status.d.ts +48 -0
- package/dist/components/markdown-table-layout.d.ts +18 -0
- package/dist/components/markdown.d.ts +37 -4
- package/dist/components/message-timeline.d.ts +86 -7
- package/dist/components/model-mark.d.ts +29 -0
- package/dist/components/model-policy-picker-menu.d.ts +9 -0
- package/dist/components/model-policy-picker.d.ts +35 -28
- package/dist/components/new-conversation.d.ts +32 -0
- package/dist/components/open-geni-chat.d.ts +73 -0
- package/dist/components/open-geni-links.d.ts +68 -0
- package/dist/components/openrouter-mark.d.ts +6 -0
- package/dist/components/opper-mark.d.ts +7 -0
- package/dist/components/preview-loading.d.ts +2 -0
- package/dist/components/provider-recovery-notice.d.ts +16 -0
- package/dist/components/queue-item-content.d.ts +9 -0
- package/dist/components/rehype-secret-refs.d.ts +23 -0
- package/dist/components/remark-soft-line-breaks.d.ts +38 -0
- package/dist/components/sandbox-files.d.ts +3 -1
- package/dist/components/sandbox-workspace.d.ts +18 -0
- package/dist/components/secret-question-field.d.ts +31 -0
- package/dist/components/secret-ref-chip.d.ts +35 -0
- package/dist/components/session-capability-frame.d.ts +37 -0
- package/dist/components/session-chrome.d.ts +57 -8
- package/dist/components/session-commands-panel.d.ts +6 -0
- package/dist/components/session-commands.d.ts +6 -0
- package/dist/components/session-connection-request.d.ts +8 -0
- package/dist/components/session-conversation.d.ts +157 -0
- package/dist/components/session-list.d.ts +39 -0
- package/dist/components/session-mcp-capability-card.d.ts +41 -0
- package/dist/components/session-proxy-scope.d.ts +35 -0
- package/dist/components/session-status.d.ts +4 -1
- package/dist/components/session-usage-limit-notice.d.ts +39 -0
- package/dist/components/timeline-anchor.d.ts +24 -0
- package/dist/components/timeline-annotation-chrome.d.ts +25 -0
- package/dist/components/timeline-annotation-layout.d.ts +42 -0
- package/dist/components/timeline-annotation-markers.d.ts +8 -0
- package/dist/components/timeline-annotation-reveal-context.d.ts +4 -0
- package/dist/components/timeline-annotation-shared.d.ts +31 -0
- package/dist/components/timeline-annotations-dialog.d.ts +3 -2
- package/dist/components/timeline-annotations.d.ts +13 -3
- package/dist/components/timeline-reading-progress.d.ts +11 -0
- package/dist/components/timeline-search.d.ts +34 -0
- package/dist/components/timeline-settlement.d.ts +16 -0
- package/dist/components/tool-action-review.d.ts +47 -0
- package/dist/components/tool-review-history.d.ts +25 -0
- package/dist/components/usage-limit-notice.d.ts +49 -0
- package/dist/components/usage-member-list.d.ts +91 -0
- package/dist/components/usage-meter.d.ts +73 -0
- package/dist/components/use-viewer-menu-dismiss.d.ts +2 -0
- package/dist/components/user-message-body.d.ts +10 -1
- package/dist/composer-messages.d.ts +74 -0
- package/dist/composer-messages.js +9 -0
- package/dist/composer-messages.js.map +1 -0
- package/dist/composer-voice-events.d.ts +8 -0
- package/dist/composer.d.ts +5 -4
- package/dist/composer.js +26 -13
- package/dist/computer-viewer-GMLDXPON.js +20 -0
- package/dist/computer-viewer-GMLDXPON.js.map +1 -0
- package/dist/connect-account-identity.d.ts +8 -0
- package/dist/connect-accounts.d.ts +15 -0
- package/dist/connect-chooser.d.ts +18 -0
- package/dist/connect-panel.d.ts +18 -0
- package/dist/connect-setup.d.ts +18 -0
- package/dist/connect.d.ts +21 -0
- package/dist/connect.js +2149 -0
- package/dist/connect.js.map +1 -0
- package/dist/connection-catalog.d.ts +38 -0
- package/dist/connection-discovery.d.ts +12 -0
- package/dist/connection-installed.d.ts +17 -0
- package/dist/connection-logo.d.ts +9 -0
- package/dist/connection-service-logo.d.ts +8 -0
- package/dist/connection-service-presentation.d.ts +13 -0
- package/dist/connection-skeleton.d.ts +5 -0
- package/dist/connection-type-picker.d.ts +6 -0
- package/dist/conversation-timeline.d.ts +5 -0
- package/dist/desktop.d.ts +7 -0
- package/dist/desktop.js +27 -0
- package/dist/desktop.js.map +1 -0
- package/dist/device-authorization.d.ts +23 -0
- package/dist/diffs.d.ts +8 -0
- package/dist/diffs.js +15 -0
- package/dist/diffs.js.map +1 -0
- package/dist/discovery-cache.d.ts +5 -0
- package/dist/editor.d.ts +7 -0
- package/dist/editor.js +22 -0
- package/dist/editor.js.map +1 -0
- package/dist/embedded-new-voice-OCRNT6U5.js +18 -0
- package/dist/embedded-new-voice-OCRNT6U5.js.map +1 -0
- package/dist/embedded-voice-RPHPYVBT.js +18 -0
- package/dist/embedded-voice-RPHPYVBT.js.map +1 -0
- package/dist/{fleet-decision-row-GGCAT4E4.js → fleet-decision-row-SI63O5V4.js} +4 -1
- package/dist/fleet-decision-row-SI63O5V4.js.map +1 -0
- package/dist/hooks/latest-question.d.ts +25 -0
- package/dist/hooks/shared-machines-list.d.ts +4 -0
- package/dist/hooks/shared-query.d.ts +113 -0
- package/dist/hooks/use-attached-browsers.d.ts +1 -1
- package/dist/hooks/use-auth-runs.d.ts +1 -4
- package/dist/hooks/use-available-models.d.ts +1 -1
- package/dist/hooks/use-browser-frame-stream.d.ts +1 -1
- package/dist/hooks/use-browser-session.d.ts +12 -1
- package/dist/hooks/use-client-config-flags.d.ts +49 -0
- package/dist/hooks/use-codex-accounts.d.ts +59 -10
- package/dist/hooks/use-composer.d.ts +24 -2
- package/dist/hooks/use-computer-frame-stream.d.ts +1 -1
- package/dist/hooks/use-computer-input-posture.d.ts +13 -0
- package/dist/hooks/use-computer-session.d.ts +4 -0
- package/dist/hooks/use-connect.d.ts +23 -0
- package/dist/hooks/use-desktop-stream.d.ts +1 -1
- package/dist/hooks/use-file-attachments.d.ts +12 -0
- package/dist/hooks/use-goal.d.ts +2 -1
- package/dist/hooks/use-last-started-turn-policy.d.ts +5 -1
- package/dist/hooks/use-new-conversation.d.ts +56 -0
- package/dist/hooks/use-new-session-draft.d.ts +74 -0
- package/dist/hooks/use-realtime-voice-models.d.ts +7 -0
- package/dist/hooks/use-sandbox-files.d.ts +4 -1
- package/dist/hooks/use-session-conversation.d.ts +49 -0
- package/dist/hooks/use-session-events.d.ts +26 -5
- package/dist/hooks/use-session-mcp-approval-policy.d.ts +2 -2
- package/dist/hooks/use-session-model-account.d.ts +48 -0
- package/dist/hooks/use-supergrok-accounts.d.ts +7 -1
- package/dist/hooks/use-terminal-stream.d.ts +11 -5
- package/dist/hooks/use-usage.d.ts +40 -0
- package/dist/hooks/use-vaults.d.ts +53 -0
- package/dist/hooks/use-voice-input.d.ts +8 -1
- package/dist/hooks/use-workspace-edit.d.ts +4 -0
- package/dist/hooks/use-workspace-sessions.d.ts +24 -5
- package/dist/human-input-model.d.ts +122 -0
- package/dist/identity-link-accounts.d.ts +11 -0
- package/dist/identity-link-consent.d.ts +18 -0
- package/dist/index.d.ts +82 -20
- package/dist/index.js +2340 -6603
- package/dist/index.js.map +1 -1
- package/dist/interaction.d.ts +1 -1
- package/dist/interaction.js +14 -24
- package/dist/interaction.js.map +1 -1
- package/dist/latest-question-R77KWSUP.js +118 -0
- package/dist/latest-question-R77KWSUP.js.map +1 -0
- package/dist/lib/clipboard.d.ts +7 -0
- package/dist/lib/error-message.d.ts +7 -0
- package/dist/lib/format.d.ts +58 -4
- package/dist/lib/host-theme.d.ts +77 -0
- package/dist/lib/interaction-errors.d.ts +3 -0
- package/dist/lib/menu-styles.d.ts +22 -0
- package/dist/lib/notify-observer.d.ts +2 -0
- package/dist/lib/pierre-diffs-loader.d.ts +20 -0
- package/dist/lib/provider-recovery.d.ts +55 -0
- package/dist/lib/scrollbars.d.ts +11 -0
- package/dist/lib/terminal-input-readiness.d.ts +11 -0
- package/dist/lib/transient-retry.d.ts +25 -0
- package/dist/lib/workbench-peers.d.ts +36 -0
- package/dist/lib/xterm-theme.d.ts +7 -5
- package/dist/machines.js +9 -5
- package/dist/markdown-table-layout-3PV2UAAH.js +113 -0
- package/dist/markdown-table-layout-3PV2UAAH.js.map +1 -0
- package/dist/mcp-connection-status.d.ts +14 -0
- package/dist/model-mark-paths.d.ts +34 -0
- package/dist/model-mark-paths.js +16 -0
- package/dist/model-mark-paths.js.map +1 -0
- package/dist/model-picker-model.d.ts +111 -0
- package/dist/model-picker-model.js +25 -0
- package/dist/model-picker-model.js.map +1 -0
- package/dist/model-policy-picker-menu-7GJ5URPR.js +17 -0
- package/dist/model-policy-picker-menu-7GJ5URPR.js.map +1 -0
- package/dist/model-policy.d.ts +30 -3
- package/dist/model-policy.js +14 -1
- package/dist/native-previews.d.ts +28 -0
- package/dist/native-previews.js +82 -0
- package/dist/native-previews.js.map +1 -0
- package/dist/new-session-draft.d.ts +7 -0
- package/dist/new-session-draft.js +639 -0
- package/dist/new-session-draft.js.map +1 -0
- package/dist/notification-text.d.ts +27 -0
- package/dist/{noto-sans-arabic-loader-IA2T4X2A.js → noto-sans-arabic-loader-XSH2KYWJ.js} +3 -1
- package/dist/{noto-sans-arabic-loader-IA2T4X2A.js.map → noto-sans-arabic-loader-XSH2KYWJ.js.map} +1 -1
- package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js → noto-sans-jp-loader.generated-MR5L6V7K.js} +3 -1
- package/dist/{noto-sans-jp-loader.generated-HFGLYBR3.js.map → noto-sans-jp-loader.generated-MR5L6V7K.js.map} +1 -1
- package/dist/older-history.d.ts +3 -2
- package/dist/organization-model.d.ts +32 -0
- package/dist/organization-model.js +65 -0
- package/dist/organization-model.js.map +1 -0
- package/dist/{platform-activity-row-BJHUHXAT.js → platform-activity-row-5OCKOQWZ.js} +16 -78
- package/dist/platform-activity-row-5OCKOQWZ.js.map +1 -0
- package/dist/plugin-details.d.ts +14 -0
- package/dist/plugin-discovery.d.ts +25 -0
- package/dist/preview-loading-paint.d.ts +20 -0
- package/dist/provider.d.ts +25 -2
- package/dist/queue-presentation-model.d.ts +72 -0
- package/dist/queue-presentation-model.js +38 -0
- package/dist/queue-presentation-model.js.map +1 -0
- package/dist/{queue-surface-implementation-BSKUWHRI.js → queue-surface-implementation-GJBH7NKO.js} +65 -265
- package/dist/queue-surface-implementation-GJBH7NKO.js.map +1 -0
- package/dist/realtime/embedded-new-voice.d.ts +1 -0
- package/dist/realtime/embedded-voice.d.ts +1 -0
- package/dist/realtime/realtime-control.d.ts +4 -65
- package/dist/realtime/session-realtime.d.ts +78 -0
- package/dist/realtime.js +25 -1333
- package/dist/realtime.js.map +1 -1
- package/dist/sandbox-files-O27IPOZW.js +21 -0
- package/dist/sandbox-files-O27IPOZW.js.map +1 -0
- package/dist/sandbox-label-model.d.ts +30 -0
- package/dist/sandbox-label-model.js +20 -0
- package/dist/sandbox-label-model.js.map +1 -0
- package/dist/scrollbars.d.ts +1 -0
- package/dist/scrollbars.js +10 -0
- package/dist/scrollbars.js.map +1 -0
- package/dist/secret-reference-label.d.ts +14 -0
- package/dist/secrets-ui.d.ts +57 -0
- package/dist/session-agents-model.d.ts +10 -0
- package/dist/session-agents-model.js +25 -0
- package/dist/session-agents-model.js.map +1 -0
- package/dist/session-attention-model.d.ts +8 -0
- package/dist/session-attention-model.js +47 -0
- package/dist/session-attention-model.js.map +1 -0
- package/dist/session-auth-recommendation.d.ts +5 -0
- package/dist/session-capability-policy.d.ts +31 -0
- package/dist/session-feedback-model.d.ts +20 -0
- package/dist/session-feedback-model.js +56 -0
- package/dist/session-feedback-model.js.map +1 -0
- package/dist/session-list-model.d.ts +138 -0
- package/dist/session-list-model.js +274 -0
- package/dist/session-list-model.js.map +1 -0
- package/dist/session-realtime-7DJOIHQW.js +21 -0
- package/dist/session-realtime-7DJOIHQW.js.map +1 -0
- package/dist/session-realtime.d.ts +7 -0
- package/dist/session-realtime.js +19 -0
- package/dist/session-realtime.js.map +1 -0
- package/dist/session-status-model.d.ts +36 -0
- package/dist/session-ui.d.ts +39 -1
- package/dist/session-ui.js +126 -12
- package/dist/session-ui.js.map +1 -1
- package/dist/session.d.ts +8 -2
- package/dist/session.js +35 -20
- package/dist/site-snapshot.d.ts +14 -0
- package/dist/sites-ui.d.ts +24 -0
- package/dist/sites.d.ts +3 -0
- package/dist/sites.js +14 -0
- package/dist/sites.js.map +1 -0
- package/dist/skill-discovery.d.ts +47 -0
- package/dist/terminal.d.ts +8 -0
- package/dist/terminal.js +32 -0
- package/dist/terminal.js.map +1 -0
- package/dist/testing/session-scenarios.d.ts +10 -0
- package/dist/testing/session-scenarios.js +367 -0
- package/dist/testing/session-scenarios.js.map +1 -0
- package/dist/timeline/activity-rail.d.ts +11 -2
- package/dist/timeline/agent-identity.d.ts +30 -0
- package/dist/timeline/agent-row.d.ts +31 -0
- package/dist/timeline/allowance-exhausted-row.d.ts +24 -0
- package/dist/timeline/compaction-copy.d.ts +46 -0
- package/dist/timeline/focus-sequence.d.ts +9 -0
- package/dist/timeline/genie-copy.d.ts +3 -0
- package/dist/timeline/genie-loading.d.ts +47 -0
- package/dist/timeline/index.d.ts +10 -5
- package/dist/timeline/knowledge-receipt.d.ts +17 -0
- package/dist/timeline/message-sender.d.ts +19 -0
- package/dist/timeline/notice-presentation.d.ts +13 -0
- package/dist/timeline/parsers.d.ts +11 -0
- package/dist/timeline/patch-apply-command.d.ts +18 -0
- package/dist/timeline/platform-activity-presentation.d.ts +21 -0
- package/dist/timeline/platform-activity-row.d.ts +1 -2
- package/dist/timeline/presented-image.d.ts +11 -0
- package/dist/timeline/projection.d.ts +31 -2
- package/dist/timeline/provider-logo.d.ts +15 -0
- package/dist/timeline/question-nav-model.d.ts +23 -0
- package/dist/timeline/registry.d.ts +12 -1
- package/dist/timeline/retained-image.d.ts +18 -0
- package/dist/timeline/retained-loaders.d.ts +27 -0
- package/dist/timeline/rolling-activity.d.ts +11 -0
- package/dist/timeline/screenshot-lightbox.d.ts +23 -1
- package/dist/timeline/session-usage-limit-row.d.ts +11 -0
- package/dist/timeline/shared.d.ts +4 -1
- package/dist/timeline/startup-dispatch-details.d.ts +5 -0
- package/dist/timeline/startup-preference.d.ts +3 -0
- package/dist/timeline/startup-timings.d.ts +4 -0
- package/dist/timeline/tool-display-name.d.ts +5 -2
- package/dist/timeline/tool-presentation.d.ts +172 -0
- package/dist/timeline/turn-summary-model.d.ts +95 -0
- package/dist/timeline/turn-summary.d.ts +20 -54
- package/dist/timeline/types.d.ts +179 -7
- package/dist/timeline/work-presentation.d.ts +60 -0
- package/dist/timeline-annotation-markers-U3G66KUD.js +166 -0
- package/dist/timeline-annotation-markers-U3G66KUD.js.map +1 -0
- package/dist/timeline-annotation-selection-BI7QTPTZ.js +242 -0
- package/dist/timeline-annotation-selection-BI7QTPTZ.js.map +1 -0
- package/dist/timeline-annotations-dialog-FOMHSDTE.js +274 -0
- package/dist/timeline-annotations-dialog-FOMHSDTE.js.map +1 -0
- package/dist/timeline-model.d.ts +29 -0
- package/dist/timeline-model.js +254 -0
- package/dist/timeline-model.js.map +1 -0
- package/dist/usage/allowance-copy.d.ts +25 -0
- package/dist/usage/session-usage-limit.d.ts +88 -0
- package/dist/usage/summary.d.ts +35 -0
- package/dist/usage.d.ts +17 -0
- package/dist/usage.js +1187 -0
- package/dist/usage.js.map +1 -0
- package/dist/voice-recording-owner.d.ts +7 -0
- package/package.json +106 -7
- package/src/approvals.ts +8 -1
- package/src/artifacts-spreadsheet.ts +1 -0
- package/src/artifacts.ts +44 -0
- package/src/assets/README.md +8 -0
- package/src/assets/gmail.ico +0 -0
- package/src/assets/outlook.ico +0 -0
- package/src/capability-catalog-row.tsx +94 -0
- package/src/capability-logo-fallback.ts +22 -0
- package/src/client.ts +20 -31
- package/src/commands/registry.ts +18 -15
- package/src/commands/types.ts +2 -0
- package/src/components/anthropic-mark.tsx +10 -0
- package/src/components/approval-surface.tsx +401 -138
- package/src/components/artifacts/artifact-chrome.tsx +413 -0
- package/src/components/artifacts/artifact-sandbox.tsx +193 -0
- package/src/components/artifacts/artifact-surface.tsx +40 -20
- package/src/components/artifacts/chat-interactive-block.tsx +260 -0
- package/src/components/artifacts/deferred-chat-media.tsx +67 -0
- package/src/components/artifacts/document-editor.tsx +141 -16
- package/src/components/artifacts/editable-artifact-ui.tsx +4 -2
- package/src/components/artifacts/editable-artifact-view.tsx +197 -0
- package/src/components/artifacts/editable-artifact-workbench.tsx +5 -2
- package/src/components/artifacts/editable-document.tsx +37 -36
- package/src/components/artifacts/editable-presentation.tsx +36 -18
- package/src/components/artifacts/editable-spreadsheet.tsx +543 -103
- package/src/components/artifacts/index.ts +45 -0
- package/src/components/artifacts/inline-html-document.ts +24 -0
- package/src/components/artifacts/latest-task-runner.ts +49 -0
- package/src/components/artifacts/presentation-editor.tsx +323 -67
- package/src/components/artifacts/published-html-artifact-frame.tsx +122 -5
- package/src/components/artifacts/session-artifact-viewer.tsx +378 -0
- package/src/components/artifacts/site-view.tsx +121 -0
- package/src/components/artifacts/spreadsheet-canvas.ts +5 -10
- package/src/components/artifacts/spreadsheet-command-queue.ts +184 -0
- package/src/components/artifacts/spreadsheet-download.tsx +109 -0
- package/src/components/artifacts/spreadsheet-general-display.ts +43 -0
- package/src/components/artifacts/spreadsheet-grid.tsx +344 -144
- package/src/components/artifacts/spreadsheet-resize.tsx +421 -0
- package/src/components/artifacts/spreadsheet-submissions.tsx +46 -0
- package/src/components/artifacts/visualization-assets/base.css +1015 -0
- package/src/components/artifacts/visualization-assets/helpers.html +349 -0
- package/src/components/artifacts/visualization-assets.gen.ts +3 -0
- package/src/components/browser-select-control.tsx +312 -0
- package/src/components/browser-viewer.tsx +778 -318
- package/src/components/chat-composer.tsx +47 -5
- package/src/components/child-session-link.tsx +36 -0
- package/src/components/claude-mark.tsx +11 -0
- package/src/components/code-editor.tsx +13 -16
- package/src/components/composer-transcription-control.tsx +128 -30
- package/src/components/composer.tsx +404 -195
- package/src/components/computer-viewer.tsx +880 -253
- package/src/components/copy-button.tsx +13 -5
- package/src/components/desktop-viewer.tsx +1 -1
- package/src/components/enrollment-consent.tsx +1 -1
- package/src/components/enrollment-device-flow.tsx +1 -1
- package/src/components/file-browser.tsx +10 -14
- package/src/components/fleet-tile.tsx +5 -3
- package/src/components/generated-video-player.tsx +4 -2
- package/src/components/grok-mark.tsx +34 -0
- package/src/components/human-input-form.tsx +590 -283
- package/src/components/human-input-surface.tsx +11 -0
- package/src/components/interaction-intervention-banner.tsx +2 -2
- package/src/components/linkified-text.tsx +79 -0
- package/src/components/machine-card.tsx +35 -78
- package/src/components/machine-dock-bar.tsx +1 -1
- package/src/components/machine-input-display.ts +197 -3
- package/src/components/machines/agent-status-icon.tsx +31 -0
- package/src/components/machines/machine-detail.tsx +200 -31
- package/src/components/machines/machine-operation-policy.tsx +1 -1
- package/src/components/machines/machine-status.ts +241 -0
- package/src/components/machines-dashboard.tsx +2 -17
- package/src/components/markdown-table-layout.ts +143 -0
- package/src/components/markdown.tsx +466 -129
- package/src/components/message-timeline.tsx +2370 -667
- package/src/components/model-mark.tsx +102 -0
- package/src/components/model-picker.tsx +15 -4
- package/src/components/model-policy-picker-menu.tsx +371 -0
- package/src/components/model-policy-picker.tsx +252 -429
- package/src/components/new-conversation.tsx +221 -0
- package/src/components/open-geni-chat.tsx +309 -0
- package/src/components/open-geni-links.tsx +179 -0
- package/src/components/openrouter-mark.tsx +13 -0
- package/src/components/opper-mark.tsx +18 -0
- package/src/components/pierre-diff.tsx +41 -16
- package/src/components/pierre-file.tsx +35 -10
- package/src/components/preview-loading.tsx +109 -0
- package/src/components/provider-recovery-notice.tsx +49 -0
- package/src/components/queue-item-content.ts +14 -0
- package/src/components/queue-surface-implementation.tsx +51 -356
- package/src/components/queue-surface-state.tsx +3 -1
- package/src/components/rehype-secret-refs.ts +98 -0
- package/src/components/remark-soft-line-breaks.ts +166 -0
- package/src/components/sandbox-files.tsx +91 -15
- package/src/components/sandbox-terminal.tsx +84 -13
- package/src/components/sandbox-workspace.tsx +147 -51
- package/src/components/secret-question-field.tsx +324 -0
- package/src/components/secret-ref-chip.tsx +185 -0
- package/src/components/session-capability-frame.tsx +197 -0
- package/src/components/session-chrome.tsx +842 -251
- package/src/components/session-commands-panel.tsx +126 -0
- package/src/components/session-commands.tsx +18 -0
- package/src/components/session-connection-request.tsx +97 -0
- package/src/components/session-conversation.tsx +876 -0
- package/src/components/session-list.tsx +257 -0
- package/src/components/session-mcp-capability-card.tsx +680 -0
- package/src/components/session-proxy-scope.tsx +153 -0
- package/src/components/session-status.tsx +26 -17
- package/src/components/session-usage-limit-notice.tsx +174 -0
- package/src/components/timeline-anchor.tsx +119 -0
- package/src/components/timeline-annotation-chrome.tsx +196 -0
- package/src/components/timeline-annotation-layout.ts +268 -0
- package/src/components/timeline-annotation-markers.tsx +185 -0
- package/src/components/timeline-annotation-reveal-context.ts +9 -0
- package/src/components/timeline-annotation-selection.tsx +106 -54
- package/src/components/timeline-annotation-shared.ts +245 -0
- package/src/components/timeline-annotations-dialog.tsx +185 -128
- package/src/components/timeline-annotations.tsx +189 -45
- package/src/components/timeline-reading-progress.ts +80 -0
- package/src/components/timeline-search.tsx +168 -0
- package/src/components/timeline-settlement.ts +60 -0
- package/src/components/tool-action-review.tsx +650 -0
- package/src/components/tool-review-history.tsx +88 -0
- package/src/components/usage-limit-notice.tsx +179 -0
- package/src/components/usage-member-list.tsx +792 -0
- package/src/components/usage-meter.tsx +382 -0
- package/src/components/use-viewer-menu-dismiss.ts +33 -0
- package/src/components/user-message-body.tsx +27 -2
- package/src/components/workspace-dock.tsx +18 -1
- package/src/composer-messages.ts +150 -0
- package/src/composer-voice-events.ts +12 -0
- package/src/composer.ts +6 -1
- package/src/connect-account-identity.tsx +34 -0
- package/src/connect-accounts.tsx +233 -0
- package/src/connect-chooser.tsx +336 -0
- package/src/connect-panel.tsx +99 -0
- package/src/connect-setup.tsx +355 -0
- package/src/connect.ts +60 -0
- package/src/connection-assets.d.ts +4 -0
- package/src/connection-catalog.tsx +162 -0
- package/src/connection-discovery.tsx +238 -0
- package/src/connection-installed.tsx +51 -0
- package/src/connection-logo.tsx +37 -0
- package/src/connection-service-logo.tsx +55 -0
- package/src/connection-service-presentation.ts +46 -0
- package/src/connection-skeleton.tsx +16 -0
- package/src/connection-type-picker.tsx +36 -0
- package/src/conversation-timeline.ts +92 -0
- package/src/desktop.ts +24 -0
- package/src/device-authorization.tsx +98 -0
- package/src/diffs.ts +16 -0
- package/src/discovery-cache.ts +42 -0
- package/src/editor.ts +13 -0
- package/src/hooks/internal.ts +3 -2
- package/src/hooks/latest-question.ts +164 -0
- package/src/hooks/shared-machines-list.ts +34 -1
- package/src/hooks/shared-query.ts +721 -0
- package/src/hooks/use-attached-browsers.ts +1 -1
- package/src/hooks/use-auth-runs.ts +0 -27
- package/src/hooks/use-available-models.ts +2 -2
- package/src/hooks/use-browser-frame-stream.ts +19 -2
- package/src/hooks/use-browser-session.ts +680 -205
- package/src/hooks/use-browser-sessions.ts +32 -1
- package/src/hooks/use-client-config-flags.ts +118 -0
- package/src/hooks/use-codex-accounts.ts +247 -47
- package/src/hooks/use-composer.ts +227 -44
- package/src/hooks/use-computer-frame-stream.ts +25 -7
- package/src/hooks/use-computer-input-posture.ts +94 -0
- package/src/hooks/use-computer-session.ts +409 -95
- package/src/hooks/use-connect.ts +23 -0
- package/src/hooks/use-desktop-stream.ts +19 -28
- package/src/hooks/use-file-attachments.ts +80 -4
- package/src/hooks/use-goal.ts +79 -9
- package/src/hooks/use-last-started-turn-policy.ts +37 -11
- package/src/hooks/use-machines.ts +4 -0
- package/src/hooks/use-new-conversation.ts +374 -0
- package/src/hooks/use-new-session-draft.ts +813 -0
- package/src/hooks/use-realtime-voice-models.ts +46 -0
- package/src/hooks/use-sandbox-files.ts +68 -20
- package/src/hooks/use-session-background-commands.ts +22 -11
- package/src/hooks/use-session-capabilities.ts +3 -2
- package/src/hooks/use-session-conversation.ts +150 -0
- package/src/hooks/use-session-events.ts +531 -335
- package/src/hooks/use-session-mcp-approval-policy.ts +13 -5
- package/src/hooks/use-session-model-account.ts +174 -0
- package/src/hooks/use-session.ts +30 -2
- package/src/hooks/use-slash-commands.ts +6 -11
- package/src/hooks/use-supergrok-accounts.ts +22 -8
- package/src/hooks/use-terminal-stream.ts +153 -27
- package/src/hooks/use-transcription.ts +6 -0
- package/src/hooks/use-turn-queue.ts +2 -1
- package/src/hooks/use-usage.ts +100 -0
- package/src/hooks/use-vaults.ts +153 -0
- package/src/hooks/use-video-artifact-playback.ts +1 -1
- package/src/hooks/use-voice-input.ts +127 -19
- package/src/hooks/use-workspace-capture.ts +3 -2
- package/src/hooks/use-workspace-edit.ts +23 -5
- package/src/hooks/use-workspace-sessions.ts +74 -7
- package/src/human-input-model.ts +359 -0
- package/src/identity-link-accounts.tsx +148 -0
- package/src/identity-link-consent.tsx +192 -0
- package/src/index.ts +262 -16
- package/src/interaction.ts +1 -0
- package/src/lib/clipboard.ts +29 -0
- package/src/lib/error-message.ts +37 -0
- package/src/lib/format.ts +205 -10
- package/src/lib/host-theme.ts +529 -0
- package/src/lib/interaction-errors.ts +15 -0
- package/src/lib/menu-styles.ts +44 -0
- package/src/lib/notify-observer.ts +15 -0
- package/src/lib/pierre-diffs-loader.ts +53 -0
- package/src/lib/provider-recovery.ts +243 -0
- package/src/lib/scrollbars.ts +30 -0
- package/src/lib/terminal-input-readiness.ts +51 -0
- package/src/lib/transient-retry.ts +99 -0
- package/src/lib/workbench-peers.ts +62 -0
- package/src/lib/xterm-theme.ts +23 -21
- package/src/mcp-connection-status.ts +35 -0
- package/src/model-mark-paths.ts +53 -0
- package/src/model-picker-model.ts +330 -0
- package/src/model-policy.ts +299 -74
- package/src/native-previews.ts +100 -0
- package/src/new-session-draft.ts +22 -0
- package/src/notification-text.ts +81 -0
- package/src/older-history.ts +22 -4
- package/src/organization-model.ts +118 -0
- package/src/plugin-details.tsx +185 -0
- package/src/plugin-discovery.tsx +196 -0
- package/src/preview-loading-paint.ts +68 -0
- package/src/provider.tsx +74 -15
- package/src/queue-presentation-model.ts +464 -0
- package/src/realtime/dropdown-menu.tsx +19 -12
- package/src/realtime/embedded-new-voice.tsx +1 -0
- package/src/realtime/embedded-voice.tsx +3 -0
- package/src/realtime/realtime-control.tsx +138 -550
- package/src/realtime/session-realtime.ts +566 -0
- package/src/sandbox-label-model.ts +53 -0
- package/src/scrollbars.ts +3 -0
- package/src/secret-reference-label.ts +43 -0
- package/src/secrets-ui.tsx +59 -0
- package/src/session-agents-model.ts +33 -0
- package/src/session-attention-model.ts +62 -0
- package/src/session-auth-recommendation.ts +48 -0
- package/src/session-capability-policy.ts +196 -0
- package/src/session-context.ts +3 -4
- package/src/session-feedback-model.ts +95 -0
- package/src/session-list-model.ts +434 -0
- package/src/session-realtime.ts +18 -0
- package/src/session-status-model.ts +99 -0
- package/src/session-ui.ts +98 -1
- package/src/session.ts +17 -1
- package/src/site-snapshot.ts +74 -0
- package/src/sites-ui.tsx +348 -0
- package/src/sites.ts +3 -0
- package/src/skill-discovery.tsx +208 -0
- package/src/terminal.ts +26 -0
- package/src/testing/session-scenarios.ts +404 -0
- package/src/timeline/activity-rail.tsx +242 -101
- package/src/timeline/agent-identity.tsx +84 -0
- package/src/timeline/agent-row.tsx +231 -0
- package/src/timeline/allowance-exhausted-row.tsx +86 -0
- package/src/timeline/compaction-copy.ts +115 -0
- package/src/timeline/fleet-decision-projection.ts +2 -1
- package/src/timeline/fleet-decision-row.tsx +1 -0
- package/src/timeline/focus-sequence.ts +44 -0
- package/src/timeline/genie-copy.ts +19 -0
- package/src/timeline/genie-loading.tsx +143 -0
- package/src/timeline/index.ts +30 -2
- package/src/timeline/knowledge-receipt.tsx +100 -0
- package/src/timeline/message-sender.tsx +71 -0
- package/src/timeline/notice-presentation.ts +48 -0
- package/src/timeline/parsers.ts +42 -2
- package/src/timeline/patch-apply-command.tsx +135 -0
- package/src/timeline/platform-activity-presentation.ts +166 -0
- package/src/timeline/platform-activity-row.tsx +15 -90
- package/src/timeline/presented-image.ts +63 -0
- package/src/timeline/projection.ts +1742 -76
- package/src/timeline/provider-logo.tsx +53 -0
- package/src/timeline/question-nav-model.ts +28 -0
- package/src/timeline/registry.ts +26 -4
- package/src/timeline/retained-image.ts +97 -0
- package/src/timeline/retained-loaders.ts +91 -0
- package/src/timeline/rolling-activity.tsx +80 -0
- package/src/timeline/screenshot-lightbox.tsx +228 -5
- package/src/timeline/session-usage-limit-row.tsx +42 -0
- package/src/timeline/shared.tsx +42 -15
- package/src/timeline/startup-dispatch-details.tsx +36 -0
- package/src/timeline/startup-preference.ts +33 -0
- package/src/timeline/startup-timings.tsx +145 -0
- package/src/timeline/tool-display-name.ts +19 -7
- package/src/timeline/tool-presentation.ts +1316 -0
- package/src/timeline/tool-renderers.tsx +835 -1138
- package/src/timeline/turn-summary-model.ts +343 -0
- package/src/timeline/turn-summary.tsx +272 -365
- package/src/timeline/types.ts +189 -6
- package/src/timeline/work-presentation.ts +189 -0
- package/src/timeline-model.ts +143 -0
- package/src/usage/allowance-copy.ts +64 -0
- package/src/usage/session-usage-limit.ts +266 -0
- package/src/usage/summary.ts +93 -0
- package/src/usage.ts +70 -0
- package/src/voice-recording-owner.ts +22 -0
- package/styles/compiled.css +2319 -748
- package/styles/connect.css +290 -0
- package/styles/connect.d.ts +1 -0
- package/styles/effective-tokens.css +1 -0
- package/styles/index.css +309 -9
- package/styles/responsive.css +99 -7
- package/styles/session-capability.css +44 -0
- package/styles/tokens.css +134 -66
- package/dist/browser-viewer-MKKFRRRV.js +0 -14
- package/dist/chunk-2DZVYHVO.js +0 -470
- package/dist/chunk-2DZVYHVO.js.map +0 -1
- package/dist/chunk-3AGBGTRT.js.map +0 -1
- package/dist/chunk-4MDLEHXL.js.map +0 -1
- package/dist/chunk-5YK2ZDIG.js.map +0 -1
- package/dist/chunk-7EAFGICR.js +0 -302
- package/dist/chunk-7EAFGICR.js.map +0 -1
- package/dist/chunk-ELIYWBZR.js.map +0 -1
- package/dist/chunk-H5YGYNXS.js.map +0 -1
- package/dist/chunk-HUIKIDM5.js.map +0 -1
- package/dist/chunk-ICA6R6TW.js.map +0 -1
- package/dist/chunk-IOLVN74D.js.map +0 -1
- package/dist/chunk-JAQ5K7W6.js.map +0 -1
- package/dist/chunk-JVYQRRC4.js.map +0 -1
- package/dist/chunk-KCGXPP5V.js.map +0 -1
- package/dist/chunk-KZ73RL76.js.map +0 -1
- package/dist/chunk-NEXLLTP4.js.map +0 -1
- package/dist/chunk-PEI6RANI.js.map +0 -1
- package/dist/chunk-VTOREEXF.js +0 -142
- package/dist/chunk-VTOREEXF.js.map +0 -1
- package/dist/chunk-WSK7G5LE.js +0 -170
- package/dist/chunk-WSK7G5LE.js.map +0 -1
- package/dist/chunk-X4A66EWZ.js +0 -223
- package/dist/chunk-X4A66EWZ.js.map +0 -1
- package/dist/chunk-XYRDDSXF.js.map +0 -1
- package/dist/chunk-YG4QEQF5.js +0 -9557
- package/dist/chunk-YG4QEQF5.js.map +0 -1
- package/dist/chunk-YVCHAQZY.js.map +0 -1
- package/dist/chunk-ZPBTI3TE.js.map +0 -1
- package/dist/computer-viewer-FWEZISW4.js +0 -16
- package/dist/fleet-decision-row-GGCAT4E4.js.map +0 -1
- package/dist/hooks/use-environments.d.ts +0 -41
- package/dist/hooks/use-packs.d.ts +0 -32
- package/dist/platform-activity-row-BJHUHXAT.js.map +0 -1
- package/dist/queue-surface-implementation-BSKUWHRI.js.map +0 -1
- package/dist/timeline-annotation-selection-3L7LHGG2.js +0 -187
- package/dist/timeline-annotation-selection-3L7LHGG2.js.map +0 -1
- package/dist/timeline-annotations-dialog-U7EVLR75.js +0 -196
- package/dist/timeline-annotations-dialog-U7EVLR75.js.map +0 -1
- package/src/hooks/use-environments.ts +0 -182
- package/src/hooks/use-packs.ts +0 -157
- /package/dist/{browser-viewer-MKKFRRRV.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
- /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-4EUKJXUO.js.map} +0 -0
|
@@ -44,6 +44,9 @@ const MAX_ZOOM = 4;
|
|
|
44
44
|
const RAIL_ITEM_HEIGHT = 116;
|
|
45
45
|
const RAIL_OVERSCAN = 3;
|
|
46
46
|
const DEFAULT_RAIL_HEIGHT = 640;
|
|
47
|
+
const MOBILE_RAIL_ITEM_HEIGHT = 44;
|
|
48
|
+
const MOBILE_RAIL_OVERSCAN = 3;
|
|
49
|
+
const DEFAULT_MOBILE_LIST_HEIGHT = 264;
|
|
47
50
|
const DEFAULT_VIEWPORT = { width: 960, height: 640 };
|
|
48
51
|
const SPATIAL_TILE = 256;
|
|
49
52
|
const MAX_SPATIAL_BUCKETS_PER_OBJECT = 1_024;
|
|
@@ -331,6 +334,7 @@ export type PresentationProjectionEditorProps = Omit<
|
|
|
331
334
|
|
|
332
335
|
export type PresentationProjectionArtifactSurfaceProps = PresentationProjectionEditorProps & {
|
|
333
336
|
title?: string | undefined;
|
|
337
|
+
showHeader?: boolean | undefined;
|
|
334
338
|
subtitle?: ReactNode | undefined;
|
|
335
339
|
actions?: ReactNode | undefined;
|
|
336
340
|
busy?: boolean | undefined;
|
|
@@ -347,6 +351,8 @@ export type PresentationEditorProps = {
|
|
|
347
351
|
zoom?: number | undefined;
|
|
348
352
|
defaultZoom?: number | undefined;
|
|
349
353
|
readOnly?: boolean | undefined;
|
|
354
|
+
/** Temporarily fence commands while keeping the current editor draft. */
|
|
355
|
+
authoringBlockedReason?: "pending_conflict" | "prior_writer" | undefined;
|
|
350
356
|
className?: string | undefined;
|
|
351
357
|
onSlideChange?: ((slide: Slide, index: number) => void) | undefined;
|
|
352
358
|
onSelectionChange?: ((object: PresentationObject | null, slide: Slide) => void) | undefined;
|
|
@@ -357,6 +363,7 @@ export type PresentationEditorProps = {
|
|
|
357
363
|
|
|
358
364
|
export type PresentationArtifactSurfaceProps = PresentationEditorProps & {
|
|
359
365
|
title?: string | undefined;
|
|
366
|
+
showHeader?: boolean | undefined;
|
|
360
367
|
subtitle?: ReactNode | undefined;
|
|
361
368
|
actions?: ReactNode | undefined;
|
|
362
369
|
busy?: boolean | undefined;
|
|
@@ -450,6 +457,15 @@ export function PresentationProjectionEditor({
|
|
|
450
457
|
);
|
|
451
458
|
}
|
|
452
459
|
|
|
460
|
+
function nextSlideIndexFromKey(key: string, activeIndex: number, length: number): number | null {
|
|
461
|
+
if (length === 0) return null;
|
|
462
|
+
if (key === "ArrowDown") return Math.min(length - 1, activeIndex + 1);
|
|
463
|
+
if (key === "ArrowUp") return Math.max(0, activeIndex - 1);
|
|
464
|
+
if (key === "Home") return 0;
|
|
465
|
+
if (key === "End") return length - 1;
|
|
466
|
+
return null;
|
|
467
|
+
}
|
|
468
|
+
|
|
453
469
|
function PresentationEditorCore({
|
|
454
470
|
presentation,
|
|
455
471
|
revision,
|
|
@@ -460,6 +476,7 @@ function PresentationEditorCore({
|
|
|
460
476
|
zoom: controlledZoom,
|
|
461
477
|
defaultZoom = 0.75,
|
|
462
478
|
readOnly = false,
|
|
479
|
+
authoringBlockedReason,
|
|
463
480
|
className,
|
|
464
481
|
onSlideChange,
|
|
465
482
|
onSelectionChange,
|
|
@@ -467,6 +484,14 @@ function PresentationEditorCore({
|
|
|
467
484
|
onCommandError,
|
|
468
485
|
onZoomChange,
|
|
469
486
|
}: PresentationEditorProps) {
|
|
487
|
+
const mutationsBlocked = readOnly || authoringBlockedReason !== undefined;
|
|
488
|
+
const authoringStatus = readOnly
|
|
489
|
+
? null
|
|
490
|
+
: authoringBlockedReason === "pending_conflict"
|
|
491
|
+
? "An earlier change needs attention"
|
|
492
|
+
: authoringBlockedReason === "prior_writer"
|
|
493
|
+
? "Saving earlier changes…"
|
|
494
|
+
: null;
|
|
470
495
|
const slides = presentation.slides.items;
|
|
471
496
|
const firstSlideId = slides[0]?.id ?? null;
|
|
472
497
|
const [localSlideId, setLocalSlideId] = useState(
|
|
@@ -492,6 +517,11 @@ function PresentationEditorCore({
|
|
|
492
517
|
scrollTop: 0,
|
|
493
518
|
height: DEFAULT_RAIL_HEIGHT,
|
|
494
519
|
});
|
|
520
|
+
const [mobileSelectorOpen, setMobileSelectorOpen] = useState(false);
|
|
521
|
+
const [mobileRail, setMobileRail] = useState({
|
|
522
|
+
scrollTop: 0,
|
|
523
|
+
height: DEFAULT_MOBILE_LIST_HEIGHT,
|
|
524
|
+
});
|
|
495
525
|
const [viewport, setViewport] = useState<ViewportMetrics>({
|
|
496
526
|
scrollLeft: 0,
|
|
497
527
|
scrollTop: 0,
|
|
@@ -504,6 +534,9 @@ function PresentationEditorCore({
|
|
|
504
534
|
const [textDraft, setTextDraft] = useState("");
|
|
505
535
|
const [paintEpoch, setPaintEpoch] = useState(0);
|
|
506
536
|
const railRef = useRef<HTMLDivElement>(null);
|
|
537
|
+
const mobileSelectorTriggerRef = useRef<HTMLButtonElement>(null);
|
|
538
|
+
const mobileSelectorPanelRef = useRef<HTMLDivElement>(null);
|
|
539
|
+
const mobileRailRef = useRef<HTMLDivElement>(null);
|
|
507
540
|
const viewportRef = useRef<HTMLDivElement>(null);
|
|
508
541
|
const stageRef = useRef<HTMLDivElement>(null);
|
|
509
542
|
const canvasRef = useRef<HTMLCanvasElement>(null);
|
|
@@ -517,6 +550,7 @@ function PresentationEditorCore({
|
|
|
517
550
|
const commandVersionsRef = useRef(new Map<string, number>());
|
|
518
551
|
const pendingSlideIdRef = useRef<string | null>(null);
|
|
519
552
|
const pendingObjectIdRef = useRef<string | null>(null);
|
|
553
|
+
const mobileRailScrollOnOpenRef = useRef(0);
|
|
520
554
|
const domId = useId().replaceAll(":", "");
|
|
521
555
|
const selectionProxyId = `${domId}-presentation-selection`;
|
|
522
556
|
const instructionsId = `${domId}-presentation-instructions`;
|
|
@@ -596,6 +630,47 @@ function PresentationEditorCore({
|
|
|
596
630
|
return () => observer.disconnect();
|
|
597
631
|
}, []);
|
|
598
632
|
|
|
633
|
+
useLayoutEffect(() => {
|
|
634
|
+
if (!mobileSelectorOpen) return;
|
|
635
|
+
const element = mobileRailRef.current;
|
|
636
|
+
if (!element) return;
|
|
637
|
+
element.scrollTop = mobileRailScrollOnOpenRef.current;
|
|
638
|
+
element.focus();
|
|
639
|
+
const measure = () =>
|
|
640
|
+
setMobileRail((current) => ({
|
|
641
|
+
scrollTop: element.scrollTop,
|
|
642
|
+
height: element.clientHeight || current.height,
|
|
643
|
+
}));
|
|
644
|
+
measure();
|
|
645
|
+
if (typeof ResizeObserver === "undefined") return;
|
|
646
|
+
const observer = new ResizeObserver(measure);
|
|
647
|
+
observer.observe(element);
|
|
648
|
+
return () => observer.disconnect();
|
|
649
|
+
}, [mobileSelectorOpen]);
|
|
650
|
+
|
|
651
|
+
useEffect(() => {
|
|
652
|
+
if (!mobileSelectorOpen) return;
|
|
653
|
+
const onPointerDown = (event: PointerEvent) => {
|
|
654
|
+
const target = event.target;
|
|
655
|
+
if (!(target instanceof Node)) return;
|
|
656
|
+
if (mobileSelectorTriggerRef.current?.contains(target)) return;
|
|
657
|
+
if (mobileSelectorPanelRef.current?.contains(target)) return;
|
|
658
|
+
setMobileSelectorOpen(false);
|
|
659
|
+
};
|
|
660
|
+
const onKeyDown = (event: KeyboardEvent) => {
|
|
661
|
+
if (event.key !== "Escape") return;
|
|
662
|
+
event.preventDefault();
|
|
663
|
+
setMobileSelectorOpen(false);
|
|
664
|
+
mobileSelectorTriggerRef.current?.focus();
|
|
665
|
+
};
|
|
666
|
+
document.addEventListener("pointerdown", onPointerDown);
|
|
667
|
+
document.addEventListener("keydown", onKeyDown);
|
|
668
|
+
return () => {
|
|
669
|
+
document.removeEventListener("pointerdown", onPointerDown);
|
|
670
|
+
document.removeEventListener("keydown", onKeyDown);
|
|
671
|
+
};
|
|
672
|
+
}, [mobileSelectorOpen]);
|
|
673
|
+
|
|
599
674
|
useLayoutEffect(() => {
|
|
600
675
|
const element = viewportRef.current;
|
|
601
676
|
if (!element) return;
|
|
@@ -835,7 +910,7 @@ function PresentationEditorCore({
|
|
|
835
910
|
|
|
836
911
|
const runCommit = useCallback(
|
|
837
912
|
(key: string, command: PresentationCommit, rollback: () => void, retry: () => void) => {
|
|
838
|
-
if (!onCommit) return;
|
|
913
|
+
if (mutationsBlocked || !onCommit) return;
|
|
839
914
|
const version = (commandVersionsRef.current.get(key) ?? 0) + 1;
|
|
840
915
|
commandVersionsRef.current.set(key, version);
|
|
841
916
|
const scope = commandScopeRef.current;
|
|
@@ -875,12 +950,12 @@ function PresentationEditorCore({
|
|
|
875
950
|
},
|
|
876
951
|
);
|
|
877
952
|
},
|
|
878
|
-
[onCommandError, onCommit],
|
|
953
|
+
[mutationsBlocked, onCommandError, onCommit],
|
|
879
954
|
);
|
|
880
955
|
|
|
881
956
|
const commitPosition = useCallback(
|
|
882
957
|
(entry: DisplayObject, kind: "move" | "resize", next: PresentationPosition) => {
|
|
883
|
-
if (!activeSlide ||
|
|
958
|
+
if (!activeSlide || mutationsBlocked || entry.readOnly) return;
|
|
884
959
|
const before = copyPosition(entry.object.position);
|
|
885
960
|
const after = normalizeEditorPosition(next);
|
|
886
961
|
if (samePosition(before, after)) return;
|
|
@@ -909,11 +984,11 @@ function PresentationEditorCore({
|
|
|
909
984
|
);
|
|
910
985
|
submit();
|
|
911
986
|
},
|
|
912
|
-
[activeSlide,
|
|
987
|
+
[activeSlide, mutationsBlocked, runCommit],
|
|
913
988
|
);
|
|
914
989
|
|
|
915
990
|
const insertSlide = useCallback(() => {
|
|
916
|
-
if (
|
|
991
|
+
if (mutationsBlocked) return;
|
|
917
992
|
const slideId = randomPresentationId();
|
|
918
993
|
const index = activeIndex < 0 ? slides.length : activeIndex + 1;
|
|
919
994
|
const command: PresentationCommit = { kind: "slide-insert", slideId, index };
|
|
@@ -929,10 +1004,10 @@ function PresentationEditorCore({
|
|
|
929
1004
|
);
|
|
930
1005
|
};
|
|
931
1006
|
submit();
|
|
932
|
-
}, [activeIndex,
|
|
1007
|
+
}, [activeIndex, mutationsBlocked, runCommit, slides.length]);
|
|
933
1008
|
|
|
934
1009
|
const deleteSlide = useCallback(() => {
|
|
935
|
-
if (
|
|
1010
|
+
if (mutationsBlocked || !activeSlide) return;
|
|
936
1011
|
const command: PresentationCommit = {
|
|
937
1012
|
kind: "slide-delete",
|
|
938
1013
|
slideId: activeSlide.id,
|
|
@@ -941,10 +1016,10 @@ function PresentationEditorCore({
|
|
|
941
1016
|
const submit = () =>
|
|
942
1017
|
runCommit(`slide-delete:${activeSlide.id}`, command, () => undefined, submit);
|
|
943
1018
|
submit();
|
|
944
|
-
}, [activeIndex, activeSlide,
|
|
1019
|
+
}, [activeIndex, activeSlide, mutationsBlocked, runCommit]);
|
|
945
1020
|
|
|
946
1021
|
const insertTextBox = useCallback(() => {
|
|
947
|
-
if (
|
|
1022
|
+
if (mutationsBlocked || !activeSlide) return;
|
|
948
1023
|
const objectId = randomPresentationId();
|
|
949
1024
|
const position = nextTextBoxPosition(objects, presentation.slideSize);
|
|
950
1025
|
const command: PresentationCommit = {
|
|
@@ -966,10 +1041,10 @@ function PresentationEditorCore({
|
|
|
966
1041
|
);
|
|
967
1042
|
};
|
|
968
1043
|
submit();
|
|
969
|
-
}, [activeSlide, objects, presentation.slideSize,
|
|
1044
|
+
}, [activeSlide, objects, presentation.slideSize, mutationsBlocked, runCommit]);
|
|
970
1045
|
|
|
971
1046
|
const deleteObject = useCallback(() => {
|
|
972
|
-
if (
|
|
1047
|
+
if (mutationsBlocked || !activeSlide || !selected || selected.readOnly) return;
|
|
973
1048
|
const command: PresentationCommit = {
|
|
974
1049
|
kind: "object-delete",
|
|
975
1050
|
slideId: activeSlide.id,
|
|
@@ -978,11 +1053,11 @@ function PresentationEditorCore({
|
|
|
978
1053
|
const submit = () =>
|
|
979
1054
|
runCommit(`object-delete:${activeSlide.id}:${selected.id}`, command, () => undefined, submit);
|
|
980
1055
|
submit();
|
|
981
|
-
}, [activeSlide,
|
|
1056
|
+
}, [activeSlide, mutationsBlocked, runCommit, selected]);
|
|
982
1057
|
|
|
983
1058
|
const startTextEdit = useCallback(
|
|
984
1059
|
(entry: DisplayObject | null) => {
|
|
985
|
-
if (
|
|
1060
|
+
if (mutationsBlocked || !entry || entry.readOnly || entry.kind !== "shape") return;
|
|
986
1061
|
const shape = entry.object as PresentationShape;
|
|
987
1062
|
if (shape.geometry === "line") return;
|
|
988
1063
|
const before = shape.text.toString();
|
|
@@ -992,7 +1067,7 @@ function PresentationEditorCore({
|
|
|
992
1067
|
setTextEdit(edit);
|
|
993
1068
|
setTextDraft(before);
|
|
994
1069
|
},
|
|
995
|
-
[activeSlide,
|
|
1070
|
+
[activeSlide, mutationsBlocked],
|
|
996
1071
|
);
|
|
997
1072
|
|
|
998
1073
|
useEffect(() => {
|
|
@@ -1004,12 +1079,12 @@ function PresentationEditorCore({
|
|
|
1004
1079
|
const finishTextEdit = useCallback(
|
|
1005
1080
|
(cancel = false) => {
|
|
1006
1081
|
const edit = textEditRef.current;
|
|
1007
|
-
if (!edit) return;
|
|
1082
|
+
if (!edit || (!cancel && authoringBlockedReason !== undefined)) return;
|
|
1008
1083
|
textEditRef.current = null;
|
|
1009
1084
|
setTextEdit(null);
|
|
1010
1085
|
const { shape, before, slideId } = edit;
|
|
1011
1086
|
if (!activeSlide || activeSlide.id !== slideId) return;
|
|
1012
|
-
if (cancel ||
|
|
1087
|
+
if (cancel || mutationsBlocked || before === textDraft) return;
|
|
1013
1088
|
shape.text.set(textDraft);
|
|
1014
1089
|
setModelEpoch((value) => value + 1);
|
|
1015
1090
|
const command: PresentationCommit = {
|
|
@@ -1035,7 +1110,7 @@ function PresentationEditorCore({
|
|
|
1035
1110
|
);
|
|
1036
1111
|
submit();
|
|
1037
1112
|
},
|
|
1038
|
-
[activeSlide,
|
|
1113
|
+
[activeSlide, authoringBlockedReason, mutationsBlocked, runCommit, textDraft],
|
|
1039
1114
|
);
|
|
1040
1115
|
|
|
1041
1116
|
const cycleObject = useCallback(
|
|
@@ -1058,6 +1133,34 @@ function PresentationEditorCore({
|
|
|
1058
1133
|
[activeIndex, activeSlide, selectSlide, slides],
|
|
1059
1134
|
);
|
|
1060
1135
|
|
|
1136
|
+
const toggleMobileSlideSelector = useCallback(() => {
|
|
1137
|
+
setMobileSelectorOpen((open) => {
|
|
1138
|
+
if (open) return false;
|
|
1139
|
+
const index = Math.max(0, activeIndex);
|
|
1140
|
+
const height = DEFAULT_MOBILE_LIST_HEIGHT;
|
|
1141
|
+
const maxScroll = Math.max(0, slides.length * MOBILE_RAIL_ITEM_HEIGHT - height);
|
|
1142
|
+
const scrollTop = Math.max(
|
|
1143
|
+
0,
|
|
1144
|
+
Math.min(
|
|
1145
|
+
maxScroll,
|
|
1146
|
+
index * MOBILE_RAIL_ITEM_HEIGHT - height / 2 + MOBILE_RAIL_ITEM_HEIGHT / 2,
|
|
1147
|
+
),
|
|
1148
|
+
);
|
|
1149
|
+
mobileRailScrollOnOpenRef.current = scrollTop;
|
|
1150
|
+
setMobileRail({ scrollTop, height });
|
|
1151
|
+
return true;
|
|
1152
|
+
});
|
|
1153
|
+
}, [activeIndex, slides.length]);
|
|
1154
|
+
|
|
1155
|
+
const chooseMobileSlide = useCallback(
|
|
1156
|
+
(slide: Slide, index: number) => {
|
|
1157
|
+
if (slide !== activeSlide) selectSlide(slide, index);
|
|
1158
|
+
setMobileSelectorOpen(false);
|
|
1159
|
+
mobileSelectorTriggerRef.current?.focus();
|
|
1160
|
+
},
|
|
1161
|
+
[activeSlide, selectSlide],
|
|
1162
|
+
);
|
|
1163
|
+
|
|
1061
1164
|
const handleCanvasKeyDown = useCallback(
|
|
1062
1165
|
(event: ReactKeyboardEvent<SVGSVGElement>) => {
|
|
1063
1166
|
if (event.metaKey || event.ctrlKey) {
|
|
@@ -1107,7 +1210,7 @@ function PresentationEditorCore({
|
|
|
1107
1210
|
}
|
|
1108
1211
|
if (!selected || !event.key.startsWith("Arrow")) return;
|
|
1109
1212
|
event.preventDefault();
|
|
1110
|
-
if (
|
|
1213
|
+
if (mutationsBlocked || selected.readOnly) return;
|
|
1111
1214
|
const amount = event.shiftKey ? 10 : 1;
|
|
1112
1215
|
const dx = event.key === "ArrowLeft" ? -amount : event.key === "ArrowRight" ? amount : 0;
|
|
1113
1216
|
const dy = event.key === "ArrowUp" ? -amount : event.key === "ArrowDown" ? amount : 0;
|
|
@@ -1130,7 +1233,7 @@ function PresentationEditorCore({
|
|
|
1130
1233
|
commitPosition,
|
|
1131
1234
|
cycleObject,
|
|
1132
1235
|
fitSlide,
|
|
1133
|
-
|
|
1236
|
+
mutationsBlocked,
|
|
1134
1237
|
selectObject,
|
|
1135
1238
|
selected,
|
|
1136
1239
|
startTextEdit,
|
|
@@ -1157,7 +1260,7 @@ function PresentationEditorCore({
|
|
|
1157
1260
|
event.preventDefault();
|
|
1158
1261
|
event.stopPropagation();
|
|
1159
1262
|
selectObject(entry);
|
|
1160
|
-
if (
|
|
1263
|
+
if (mutationsBlocked || entry.readOnly) return;
|
|
1161
1264
|
const start = pointFromPointer(event);
|
|
1162
1265
|
const before = copyPosition(entry.object.position);
|
|
1163
1266
|
dragRef.current = {
|
|
@@ -1171,7 +1274,7 @@ function PresentationEditorCore({
|
|
|
1171
1274
|
setDraftPosition({ objectId: entry.id, position: before });
|
|
1172
1275
|
overlayRef.current?.setPointerCapture?.(event.pointerId);
|
|
1173
1276
|
},
|
|
1174
|
-
[pointFromPointer,
|
|
1277
|
+
[pointFromPointer, mutationsBlocked, selectObject],
|
|
1175
1278
|
);
|
|
1176
1279
|
|
|
1177
1280
|
const handlePointerDown = useCallback(
|
|
@@ -1191,17 +1294,22 @@ function PresentationEditorCore({
|
|
|
1191
1294
|
const handlePointerMove = useCallback(
|
|
1192
1295
|
(event: ReactPointerEvent<SVGSVGElement>) => {
|
|
1193
1296
|
const drag = dragRef.current;
|
|
1194
|
-
if (!drag || drag.pointerId !== event.pointerId) return;
|
|
1297
|
+
if (!drag || drag.pointerId !== event.pointerId || mutationsBlocked) return;
|
|
1195
1298
|
const point = pointFromPointer(event);
|
|
1196
1299
|
setDraftPosition({ objectId: drag.object.id, position: positionFromDrag(drag, point) });
|
|
1197
1300
|
},
|
|
1198
|
-
[pointFromPointer],
|
|
1301
|
+
[mutationsBlocked, pointFromPointer],
|
|
1199
1302
|
);
|
|
1200
1303
|
|
|
1201
1304
|
const finishDrag = useCallback(
|
|
1202
1305
|
(event: ReactPointerEvent<SVGSVGElement>, cancel = false) => {
|
|
1203
1306
|
const drag = dragRef.current;
|
|
1204
|
-
if (
|
|
1307
|
+
if (
|
|
1308
|
+
!drag ||
|
|
1309
|
+
drag.pointerId !== event.pointerId ||
|
|
1310
|
+
(!cancel && authoringBlockedReason !== undefined)
|
|
1311
|
+
)
|
|
1312
|
+
return;
|
|
1205
1313
|
dragRef.current = null;
|
|
1206
1314
|
const captureTarget = overlayRef.current;
|
|
1207
1315
|
if (captureTarget?.hasPointerCapture?.(event.pointerId)) {
|
|
@@ -1214,21 +1322,36 @@ function PresentationEditorCore({
|
|
|
1214
1322
|
const point = pointFromPointer(event);
|
|
1215
1323
|
commitPosition(entry, drag.mode, positionFromDrag(drag, point));
|
|
1216
1324
|
},
|
|
1217
|
-
[commitPosition, objectById, pointFromPointer],
|
|
1325
|
+
[authoringBlockedReason, commitPosition, objectById, pointFromPointer],
|
|
1218
1326
|
);
|
|
1219
1327
|
|
|
1220
|
-
const handleLostPointerCapture = useCallback(
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1328
|
+
const handleLostPointerCapture = useCallback(
|
|
1329
|
+
(event: ReactPointerEvent<SVGSVGElement>) => {
|
|
1330
|
+
const drag = dragRef.current;
|
|
1331
|
+
if (!drag || drag.pointerId !== event.pointerId || authoringBlockedReason !== undefined)
|
|
1332
|
+
return;
|
|
1333
|
+
dragRef.current = null;
|
|
1334
|
+
setDraftPosition(null);
|
|
1335
|
+
},
|
|
1336
|
+
[authoringBlockedReason],
|
|
1337
|
+
);
|
|
1226
1338
|
|
|
1227
1339
|
const railStart = Math.max(0, Math.floor(rail.scrollTop / RAIL_ITEM_HEIGHT) - RAIL_OVERSCAN);
|
|
1228
1340
|
const railEnd = Math.min(
|
|
1229
1341
|
slides.length,
|
|
1230
1342
|
Math.ceil((rail.scrollTop + rail.height) / RAIL_ITEM_HEIGHT) + RAIL_OVERSCAN,
|
|
1231
1343
|
);
|
|
1344
|
+
const mobileRailStart = Math.max(
|
|
1345
|
+
0,
|
|
1346
|
+
Math.floor(mobileRail.scrollTop / MOBILE_RAIL_ITEM_HEIGHT) - MOBILE_RAIL_OVERSCAN,
|
|
1347
|
+
);
|
|
1348
|
+
const mobileRailEnd = Math.min(
|
|
1349
|
+
slides.length,
|
|
1350
|
+
Math.ceil((mobileRail.scrollTop + mobileRail.height) / MOBILE_RAIL_ITEM_HEIGHT) +
|
|
1351
|
+
MOBILE_RAIL_OVERSCAN,
|
|
1352
|
+
);
|
|
1353
|
+
const slideCountLabel =
|
|
1354
|
+
activeIndex >= 0 ? `${activeIndex + 1} / ${slides.length}` : `0 / ${slides.length}`;
|
|
1232
1355
|
const stageWidth = presentation.slideSize.width * zoom;
|
|
1233
1356
|
const stageHeight = presentation.slideSize.height * zoom;
|
|
1234
1357
|
|
|
@@ -1238,8 +1361,16 @@ function PresentationEditorCore({
|
|
|
1238
1361
|
style={{ minHeight: "22rem" }}
|
|
1239
1362
|
data-og-presentation-editor
|
|
1240
1363
|
data-og-painted-object-count={visibleObjectIndexes.length}
|
|
1241
|
-
data-og-command-state={
|
|
1242
|
-
|
|
1364
|
+
data-og-command-state={
|
|
1365
|
+
commandFailure || authoringBlockedReason === "pending_conflict"
|
|
1366
|
+
? "error"
|
|
1367
|
+
: pendingCommands > 0 || authoringBlockedReason === "prior_writer"
|
|
1368
|
+
? "pending"
|
|
1369
|
+
: "idle"
|
|
1370
|
+
}
|
|
1371
|
+
aria-busy={
|
|
1372
|
+
pendingCommands > 0 || authoringBlockedReason === "prior_writer" ? "true" : undefined
|
|
1373
|
+
}
|
|
1243
1374
|
>
|
|
1244
1375
|
<div
|
|
1245
1376
|
role="toolbar"
|
|
@@ -1256,8 +1387,22 @@ function PresentationEditorCore({
|
|
|
1256
1387
|
>
|
|
1257
1388
|
<ChevronLeftIcon />
|
|
1258
1389
|
</button>
|
|
1259
|
-
<
|
|
1260
|
-
{
|
|
1390
|
+
<button
|
|
1391
|
+
ref={mobileSelectorTriggerRef}
|
|
1392
|
+
type="button"
|
|
1393
|
+
aria-label="Choose slide"
|
|
1394
|
+
aria-haspopup="listbox"
|
|
1395
|
+
aria-expanded={mobileSelectorOpen}
|
|
1396
|
+
aria-controls={mobileSelectorOpen ? `${domId}-mobile-slides` : undefined}
|
|
1397
|
+
disabled={slides.length === 0}
|
|
1398
|
+
data-og-mobile-slide-selector
|
|
1399
|
+
onClick={toggleMobileSlideSelector}
|
|
1400
|
+
className="inline-flex min-h-11 min-w-16 shrink-0 items-center justify-center rounded-og-sm px-2 text-og-xs tabular-nums text-og-fg-muted hover:bg-og-surface-3 hover:text-og-fg disabled:opacity-35 sm:hidden"
|
|
1401
|
+
>
|
|
1402
|
+
<span>{slideCountLabel}</span>
|
|
1403
|
+
</button>
|
|
1404
|
+
<span className="hidden min-w-16 shrink-0 text-center text-og-xs tabular-nums text-og-fg-muted sm:inline">
|
|
1405
|
+
{slideCountLabel}
|
|
1261
1406
|
</span>
|
|
1262
1407
|
<button
|
|
1263
1408
|
type="button"
|
|
@@ -1271,7 +1416,7 @@ function PresentationEditorCore({
|
|
|
1271
1416
|
<button
|
|
1272
1417
|
type="button"
|
|
1273
1418
|
aria-label="Add slide"
|
|
1274
|
-
disabled={
|
|
1419
|
+
disabled={mutationsBlocked}
|
|
1275
1420
|
onClick={insertSlide}
|
|
1276
1421
|
className="ml-0.5 grid size-7 shrink-0 place-items-center rounded-og-sm text-og-fg-muted hover:bg-og-surface-3 hover:text-og-fg disabled:opacity-35 [&>svg]:size-3.5"
|
|
1277
1422
|
>
|
|
@@ -1280,7 +1425,7 @@ function PresentationEditorCore({
|
|
|
1280
1425
|
<button
|
|
1281
1426
|
type="button"
|
|
1282
1427
|
aria-label="Delete slide"
|
|
1283
|
-
disabled={
|
|
1428
|
+
disabled={mutationsBlocked || !activeSlide}
|
|
1284
1429
|
onClick={deleteSlide}
|
|
1285
1430
|
className="grid size-7 shrink-0 place-items-center rounded-og-sm text-og-fg-muted hover:bg-og-surface-3 hover:text-og-status-failed disabled:opacity-35 [&>svg]:size-3.5"
|
|
1286
1431
|
>
|
|
@@ -1318,7 +1463,7 @@ function PresentationEditorCore({
|
|
|
1318
1463
|
<button
|
|
1319
1464
|
type="button"
|
|
1320
1465
|
aria-label="Add text box"
|
|
1321
|
-
disabled={
|
|
1466
|
+
disabled={mutationsBlocked || !activeSlide}
|
|
1322
1467
|
onClick={insertTextBox}
|
|
1323
1468
|
className="grid size-7 shrink-0 place-items-center rounded-og-sm text-og-fg-muted hover:bg-og-surface-3 hover:text-og-fg disabled:opacity-35 [&>svg]:size-3.5"
|
|
1324
1469
|
>
|
|
@@ -1327,7 +1472,7 @@ function PresentationEditorCore({
|
|
|
1327
1472
|
<button
|
|
1328
1473
|
type="button"
|
|
1329
1474
|
aria-label="Delete selected object"
|
|
1330
|
-
disabled={
|
|
1475
|
+
disabled={mutationsBlocked || !selected || selected.readOnly}
|
|
1331
1476
|
onClick={deleteObject}
|
|
1332
1477
|
className="grid size-7 shrink-0 place-items-center rounded-og-sm text-og-fg-muted hover:bg-og-surface-3 hover:text-og-status-failed disabled:opacity-35 [&>svg]:size-3.5"
|
|
1333
1478
|
>
|
|
@@ -1339,32 +1484,38 @@ function PresentationEditorCore({
|
|
|
1339
1484
|
title={
|
|
1340
1485
|
commandFailure
|
|
1341
1486
|
? "Change not saved"
|
|
1487
|
+
: authoringStatus
|
|
1488
|
+
? authoringStatus
|
|
1489
|
+
: pendingCommands > 0
|
|
1490
|
+
? "Saving…"
|
|
1491
|
+
: mutationsBlocked
|
|
1492
|
+
? "View only"
|
|
1493
|
+
: selected
|
|
1494
|
+
? `${objectLabel(selected)}${selected.readOnly ? " · View only" : ""}`
|
|
1495
|
+
: "Select an object to edit"
|
|
1496
|
+
}
|
|
1497
|
+
>
|
|
1498
|
+
{commandFailure
|
|
1499
|
+
? "Change not saved"
|
|
1500
|
+
: authoringStatus
|
|
1501
|
+
? authoringStatus
|
|
1342
1502
|
: pendingCommands > 0
|
|
1343
1503
|
? "Saving…"
|
|
1344
|
-
:
|
|
1504
|
+
: mutationsBlocked
|
|
1345
1505
|
? "View only"
|
|
1346
1506
|
: selected
|
|
1347
1507
|
? `${objectLabel(selected)}${selected.readOnly ? " · View only" : ""}`
|
|
1348
|
-
: "Select an object to edit"
|
|
1349
|
-
}
|
|
1350
|
-
>
|
|
1351
|
-
{commandFailure
|
|
1352
|
-
? "Change not saved"
|
|
1353
|
-
: pendingCommands > 0
|
|
1354
|
-
? "Saving…"
|
|
1355
|
-
: readOnly
|
|
1356
|
-
? "View only"
|
|
1357
|
-
: selected
|
|
1358
|
-
? `${objectLabel(selected)}${selected.readOnly ? " · View only" : ""}`
|
|
1359
|
-
: "Select an object to edit"}
|
|
1508
|
+
: "Select an object to edit"}
|
|
1360
1509
|
</span>
|
|
1361
1510
|
</div>
|
|
1362
1511
|
|
|
1363
1512
|
<div role="status" aria-live="polite" className="sr-only">
|
|
1364
|
-
{commandFailure?.message ??
|
|
1513
|
+
{commandFailure?.message ??
|
|
1514
|
+
authoringStatus ??
|
|
1515
|
+
(pendingCommands > 0 ? "Saving presentation changes" : "")}
|
|
1365
1516
|
</div>
|
|
1366
1517
|
|
|
1367
|
-
<div className="flex min-h-0 min-w-0 flex-1">
|
|
1518
|
+
<div className="relative flex min-h-0 min-w-0 flex-1">
|
|
1368
1519
|
<div
|
|
1369
1520
|
ref={railRef}
|
|
1370
1521
|
role="listbox"
|
|
@@ -1389,12 +1540,7 @@ function PresentationEditorCore({
|
|
|
1389
1540
|
}));
|
|
1390
1541
|
}}
|
|
1391
1542
|
onKeyDown={(event) => {
|
|
1392
|
-
|
|
1393
|
-
let nextIndex: number | null = null;
|
|
1394
|
-
if (event.key === "ArrowDown") nextIndex = Math.min(slides.length - 1, activeIndex + 1);
|
|
1395
|
-
else if (event.key === "ArrowUp") nextIndex = Math.max(0, activeIndex - 1);
|
|
1396
|
-
else if (event.key === "Home") nextIndex = 0;
|
|
1397
|
-
else if (event.key === "End") nextIndex = slides.length - 1;
|
|
1543
|
+
const nextIndex = nextSlideIndexFromKey(event.key, activeIndex, slides.length);
|
|
1398
1544
|
if (nextIndex === null) return;
|
|
1399
1545
|
event.preventDefault();
|
|
1400
1546
|
const next = slides[nextIndex];
|
|
@@ -1447,6 +1593,101 @@ function PresentationEditorCore({
|
|
|
1447
1593
|
</div>
|
|
1448
1594
|
</div>
|
|
1449
1595
|
|
|
1596
|
+
{mobileSelectorOpen ? (
|
|
1597
|
+
<div
|
|
1598
|
+
ref={mobileSelectorPanelRef}
|
|
1599
|
+
className="absolute left-2 top-2 z-40 max-w-56 overflow-hidden rounded-og-md border border-og-border bg-og-surface-1 shadow-og-md sm:hidden"
|
|
1600
|
+
style={{ width: "calc(100% - 1rem)" }}
|
|
1601
|
+
>
|
|
1602
|
+
<div
|
|
1603
|
+
ref={mobileRailRef}
|
|
1604
|
+
id={`${domId}-mobile-slides`}
|
|
1605
|
+
role="listbox"
|
|
1606
|
+
tabIndex={0}
|
|
1607
|
+
aria-label="Slides"
|
|
1608
|
+
aria-orientation="vertical"
|
|
1609
|
+
aria-activedescendant={
|
|
1610
|
+
activeSlide && activeIndex >= mobileRailStart && activeIndex < mobileRailEnd
|
|
1611
|
+
? `${domId}-mobile-slide-${safeDomId(activeSlide.id)}`
|
|
1612
|
+
: undefined
|
|
1613
|
+
}
|
|
1614
|
+
className="max-h-72 overflow-y-auto outline-hidden focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-og-accent"
|
|
1615
|
+
data-og-mobile-slide-list
|
|
1616
|
+
data-og-window-start={mobileRailStart}
|
|
1617
|
+
data-og-window-end={mobileRailEnd}
|
|
1618
|
+
onScroll={(event) => {
|
|
1619
|
+
const scrollTop = event.currentTarget.scrollTop;
|
|
1620
|
+
const height = event.currentTarget.clientHeight;
|
|
1621
|
+
setMobileRail((current) => ({
|
|
1622
|
+
scrollTop,
|
|
1623
|
+
height: height || current.height,
|
|
1624
|
+
}));
|
|
1625
|
+
}}
|
|
1626
|
+
onKeyDown={(event) => {
|
|
1627
|
+
if (event.key === "Escape") {
|
|
1628
|
+
event.preventDefault();
|
|
1629
|
+
setMobileSelectorOpen(false);
|
|
1630
|
+
mobileSelectorTriggerRef.current?.focus();
|
|
1631
|
+
return;
|
|
1632
|
+
}
|
|
1633
|
+
const nextIndex = nextSlideIndexFromKey(event.key, activeIndex, slides.length);
|
|
1634
|
+
if (nextIndex === null) return;
|
|
1635
|
+
event.preventDefault();
|
|
1636
|
+
const next = slides[nextIndex];
|
|
1637
|
+
if (!next) return;
|
|
1638
|
+
if (next !== activeSlide) selectSlide(next, nextIndex);
|
|
1639
|
+
const list = event.currentTarget;
|
|
1640
|
+
const top = nextIndex * MOBILE_RAIL_ITEM_HEIGHT;
|
|
1641
|
+
const bottom = top + MOBILE_RAIL_ITEM_HEIGHT;
|
|
1642
|
+
if (top < list.scrollTop) list.scrollTop = top;
|
|
1643
|
+
else if (bottom > list.scrollTop + list.clientHeight) {
|
|
1644
|
+
list.scrollTop = bottom - list.clientHeight;
|
|
1645
|
+
}
|
|
1646
|
+
}}
|
|
1647
|
+
>
|
|
1648
|
+
<div
|
|
1649
|
+
className="relative w-full"
|
|
1650
|
+
style={{ height: slides.length * MOBILE_RAIL_ITEM_HEIGHT }}
|
|
1651
|
+
>
|
|
1652
|
+
{slides.slice(mobileRailStart, mobileRailEnd).map((slide, offset) => {
|
|
1653
|
+
const index = mobileRailStart + offset;
|
|
1654
|
+
const active = slide === activeSlide;
|
|
1655
|
+
return (
|
|
1656
|
+
<button
|
|
1657
|
+
key={slide.id}
|
|
1658
|
+
id={`${domId}-mobile-slide-${safeDomId(slide.id)}`}
|
|
1659
|
+
type="button"
|
|
1660
|
+
role="option"
|
|
1661
|
+
tabIndex={-1}
|
|
1662
|
+
aria-selected={active}
|
|
1663
|
+
aria-label={`Slide ${index + 1}${slide.title ? `: ${slide.title}` : ""}`}
|
|
1664
|
+
onClick={() => chooseMobileSlide(slide, index)}
|
|
1665
|
+
className={cn(
|
|
1666
|
+
"absolute left-0 flex min-h-11 w-full items-center gap-2 px-2 text-left",
|
|
1667
|
+
active
|
|
1668
|
+
? "bg-og-surface-3 text-og-fg"
|
|
1669
|
+
: "text-og-fg-muted hover:bg-og-surface-3/70",
|
|
1670
|
+
)}
|
|
1671
|
+
style={{
|
|
1672
|
+
top: index * MOBILE_RAIL_ITEM_HEIGHT,
|
|
1673
|
+
height: MOBILE_RAIL_ITEM_HEIGHT,
|
|
1674
|
+
}}
|
|
1675
|
+
data-og-mobile-slide-index={index}
|
|
1676
|
+
>
|
|
1677
|
+
<span className="w-7 shrink-0 text-right text-og-xs tabular-nums text-og-fg-subtle">
|
|
1678
|
+
{index + 1}
|
|
1679
|
+
</span>
|
|
1680
|
+
<span className="min-w-0 flex-1 truncate text-og-sm">
|
|
1681
|
+
{slide.title || `Slide ${index + 1}`}
|
|
1682
|
+
</span>
|
|
1683
|
+
</button>
|
|
1684
|
+
);
|
|
1685
|
+
})}
|
|
1686
|
+
</div>
|
|
1687
|
+
</div>
|
|
1688
|
+
</div>
|
|
1689
|
+
) : null}
|
|
1690
|
+
|
|
1450
1691
|
<div
|
|
1451
1692
|
ref={viewportRef}
|
|
1452
1693
|
className="relative min-h-0 min-w-0 flex-1 overflow-auto bg-og-surface-3/60 p-6"
|
|
@@ -1476,7 +1717,10 @@ function PresentationEditorCore({
|
|
|
1476
1717
|
<span className="truncate">{commandFailure.message}</span>
|
|
1477
1718
|
<button
|
|
1478
1719
|
type="button"
|
|
1479
|
-
|
|
1720
|
+
disabled={mutationsBlocked}
|
|
1721
|
+
onClick={() => {
|
|
1722
|
+
if (!mutationsBlocked) commandFailure.retry();
|
|
1723
|
+
}}
|
|
1480
1724
|
className="shrink-0 rounded-og-xs px-1.5 py-0.5 font-medium outline-hidden hover:bg-og-surface-3 focus-visible:ring-2 focus-visible:ring-og-accent"
|
|
1481
1725
|
>
|
|
1482
1726
|
Retry
|
|
@@ -1489,6 +1733,9 @@ function PresentationEditorCore({
|
|
|
1489
1733
|
className="relative mx-auto shrink-0 overflow-hidden shadow-og-lg"
|
|
1490
1734
|
style={{ width: stageWidth, height: stageHeight, backgroundColor: "#fff" }}
|
|
1491
1735
|
data-og-presentation-stage
|
|
1736
|
+
// The slide is white paper in both app themes, so its selection
|
|
1737
|
+
// chrome uses the light palette to stay visible on it.
|
|
1738
|
+
data-og-theme="light"
|
|
1492
1739
|
>
|
|
1493
1740
|
<canvas
|
|
1494
1741
|
ref={canvasRef}
|
|
@@ -1504,7 +1751,7 @@ function PresentationEditorCore({
|
|
|
1504
1751
|
aria-describedby={
|
|
1505
1752
|
selected ? `${instructionsId} ${selectionProxyId}` : instructionsId
|
|
1506
1753
|
}
|
|
1507
|
-
aria-readonly={
|
|
1754
|
+
aria-readonly={mutationsBlocked || selected?.readOnly || undefined}
|
|
1508
1755
|
viewBox={`0 0 ${presentation.slideSize.width} ${presentation.slideSize.height}`}
|
|
1509
1756
|
className="absolute inset-0 size-full touch-none outline-hidden focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-og-accent"
|
|
1510
1757
|
onKeyDown={handleCanvasKeyDown}
|
|
@@ -1526,17 +1773,17 @@ function PresentationEditorCore({
|
|
|
1526
1773
|
width={effectiveSelectedPosition.width}
|
|
1527
1774
|
height={effectiveSelectedPosition.height}
|
|
1528
1775
|
fill="transparent"
|
|
1529
|
-
stroke="var(--og-accent
|
|
1776
|
+
stroke="var(--og-color-accent-deep)"
|
|
1530
1777
|
strokeWidth={2}
|
|
1531
1778
|
vectorEffect="non-scaling-stroke"
|
|
1532
1779
|
pointerEvents="none"
|
|
1533
1780
|
/>
|
|
1534
|
-
{!
|
|
1781
|
+
{!mutationsBlocked && !selected.readOnly ? (
|
|
1535
1782
|
<circle
|
|
1536
1783
|
cx={effectiveSelectedPosition.left + effectiveSelectedPosition.width}
|
|
1537
1784
|
cy={effectiveSelectedPosition.top + effectiveSelectedPosition.height}
|
|
1538
1785
|
r={6 / zoom}
|
|
1539
|
-
fill="var(--og-accent
|
|
1786
|
+
fill="var(--og-color-accent-deep)"
|
|
1540
1787
|
stroke="white"
|
|
1541
1788
|
strokeWidth={1.5}
|
|
1542
1789
|
vectorEffect="non-scaling-stroke"
|
|
@@ -1564,9 +1811,14 @@ function PresentationEditorCore({
|
|
|
1564
1811
|
ref={editorRef}
|
|
1565
1812
|
aria-label={`Edit ${textEdit.shape.name}`}
|
|
1566
1813
|
value={textDraft}
|
|
1814
|
+
readOnly={mutationsBlocked}
|
|
1567
1815
|
maxLength={1_000_000}
|
|
1568
|
-
onChange={(event) =>
|
|
1569
|
-
|
|
1816
|
+
onChange={(event) => {
|
|
1817
|
+
if (!mutationsBlocked) setTextDraft(event.currentTarget.value);
|
|
1818
|
+
}}
|
|
1819
|
+
onInput={(event) => {
|
|
1820
|
+
if (!mutationsBlocked) setTextDraft(event.currentTarget.value);
|
|
1821
|
+
}}
|
|
1570
1822
|
onBlur={() => finishTextEdit()}
|
|
1571
1823
|
onKeyDown={(event) => {
|
|
1572
1824
|
if (event.key === "Escape") {
|
|
@@ -1614,6 +1866,7 @@ function PresentationEditorCore({
|
|
|
1614
1866
|
export function PresentationArtifactSurface({
|
|
1615
1867
|
presentation,
|
|
1616
1868
|
title = "Presentation",
|
|
1869
|
+
showHeader,
|
|
1617
1870
|
subtitle,
|
|
1618
1871
|
actions,
|
|
1619
1872
|
busy,
|
|
@@ -1625,6 +1878,7 @@ export function PresentationArtifactSurface({
|
|
|
1625
1878
|
<ArtifactSurface
|
|
1626
1879
|
modality="presentation"
|
|
1627
1880
|
title={title}
|
|
1881
|
+
showHeader={showHeader}
|
|
1628
1882
|
subtitle={subtitle ?? `${count} slide${count === 1 ? "" : "s"}`}
|
|
1629
1883
|
actions={actions}
|
|
1630
1884
|
busy={busy}
|
|
@@ -1639,6 +1893,7 @@ export function PresentationArtifactSurface({
|
|
|
1639
1893
|
export function PresentationProjectionArtifactSurface({
|
|
1640
1894
|
projection,
|
|
1641
1895
|
title = "Presentation",
|
|
1896
|
+
showHeader,
|
|
1642
1897
|
subtitle,
|
|
1643
1898
|
actions,
|
|
1644
1899
|
busy,
|
|
@@ -1650,6 +1905,7 @@ export function PresentationProjectionArtifactSurface({
|
|
|
1650
1905
|
<ArtifactSurface
|
|
1651
1906
|
modality="presentation"
|
|
1652
1907
|
title={title}
|
|
1908
|
+
showHeader={showHeader}
|
|
1653
1909
|
subtitle={subtitle ?? `${count} slide${count === 1 ? "" : "s"}`}
|
|
1654
1910
|
actions={actions}
|
|
1655
1911
|
busy={busy}
|