@opengeni/react 3.1.0 → 3.1.2
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 +89 -11
- 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-BO2IWXVK.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-RGALCTWO.js → chunk-2I6R3GCZ.js} +4285 -3980
- package/dist/chunk-2I6R3GCZ.js.map +1 -0
- package/dist/{chunk-D3UIAJKY.js → chunk-2SFFYIH3.js} +1179 -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-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-OAM4WAAM.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-XXWH2JLC.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-OVB5WIG5.js +14064 -0
- package/dist/chunk-OVB5WIG5.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-MZ2G2XBA.js → chunk-V5ZUJT2T.js} +205 -45
- package/dist/chunk-V5ZUJT2T.js.map +1 -0
- package/dist/chunk-VIUEOHXY.js +394 -0
- package/dist/chunk-VIUEOHXY.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-YJFGAFBD.js → chunk-X5UVUIMF.js} +1892 -1223
- 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/fleet-tile.d.ts +2 -2
- 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 +41 -25
- 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/tip-follow.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 +28 -7
- 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 +22 -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 +2350 -6605
- 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 -1294
- 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/entrance.d.ts +13 -1
- 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 +107 -7
- package/src/accounts.tsx +116 -14
- 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 +189 -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 +9 -18
- 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 +2567 -728
- 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 +256 -412
- 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/tip-follow.ts +52 -0
- package/src/components/tool-action-review.tsx +650 -0
- package/src/components/tool-review-history.tsx +88 -0
- package/src/components/tooltip.tsx +38 -5
- 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 +21 -15
- 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 +276 -47
- 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 +107 -13
- package/src/hooks/use-last-started-turn-policy.ts +46 -14
- 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 +703 -382
- package/src/hooks/use-session-lineage.ts +20 -16
- 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 +53 -21
- 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 +97 -32
- 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 +213 -16
- 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 -501
- 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/entrance.tsx +28 -3
- 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 +1746 -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-AEFHUYZK.js +0 -14
- package/dist/chunk-4MDLEHXL.js.map +0 -1
- package/dist/chunk-5YK2ZDIG.js.map +0 -1
- package/dist/chunk-D3UIAJKY.js.map +0 -1
- package/dist/chunk-ELIYWBZR.js.map +0 -1
- package/dist/chunk-H5YGYNXS.js.map +0 -1
- package/dist/chunk-HQVCKCLG.js +0 -9458
- package/dist/chunk-HQVCKCLG.js.map +0 -1
- package/dist/chunk-HUIKIDM5.js.map +0 -1
- package/dist/chunk-ICA6R6TW.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-LAKLF4PA.js +0 -141
- package/dist/chunk-LAKLF4PA.js.map +0 -1
- package/dist/chunk-MZ2G2XBA.js.map +0 -1
- package/dist/chunk-NEXLLTP4.js.map +0 -1
- package/dist/chunk-OAM4WAAM.js.map +0 -1
- package/dist/chunk-PEI6RANI.js.map +0 -1
- package/dist/chunk-RGALCTWO.js.map +0 -1
- package/dist/chunk-W6NFJXSA.js +0 -454
- package/dist/chunk-W6NFJXSA.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-XXWH2JLC.js.map +0 -1
- package/dist/chunk-YFKJ7VZH.js +0 -268
- package/dist/chunk-YFKJ7VZH.js.map +0 -1
- package/dist/chunk-YJFGAFBD.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-AEFHUYZK.js.map → browser-viewer-ZWR6MWJ7.js.map} +0 -0
- /package/dist/{computer-viewer-FWEZISW4.js.map → chat-interactive-block-BO2IWXVK.js.map} +0 -0
|
@@ -17,6 +17,10 @@ import {
|
|
|
17
17
|
|
|
18
18
|
import { cn } from "../../lib/cn";
|
|
19
19
|
import { ArtifactSurface } from "./artifact-surface";
|
|
20
|
+
import {
|
|
21
|
+
useSpreadsheetCommandQueue,
|
|
22
|
+
type SpreadsheetCommandTarget,
|
|
23
|
+
} from "./spreadsheet-command-queue";
|
|
20
24
|
import {
|
|
21
25
|
SparseSpreadsheetCellIndex,
|
|
22
26
|
SpreadsheetCanvasRenderer,
|
|
@@ -26,6 +30,17 @@ import {
|
|
|
26
30
|
type SpreadsheetCanvasProjection,
|
|
27
31
|
type SpreadsheetCanvasTheme,
|
|
28
32
|
} from "./spreadsheet-canvas";
|
|
33
|
+
import {
|
|
34
|
+
formatSpreadsheetGeneralDisplay,
|
|
35
|
+
spreadsheetCellEditSource,
|
|
36
|
+
} from "./spreadsheet-general-display";
|
|
37
|
+
import {
|
|
38
|
+
SpreadsheetResizeHandle,
|
|
39
|
+
useSpreadsheetResizing,
|
|
40
|
+
type SpreadsheetDimensionCommit,
|
|
41
|
+
} from "./spreadsheet-resize";
|
|
42
|
+
|
|
43
|
+
export type { SpreadsheetDimensionCommit } from "./spreadsheet-resize";
|
|
29
44
|
|
|
30
45
|
const MAX_ROWS = 1_048_576;
|
|
31
46
|
const MAX_COLUMNS = 16_384;
|
|
@@ -45,6 +60,7 @@ const MAX_MOUNTED_AXIS_ITEMS = 512;
|
|
|
45
60
|
const MAX_MOUNTED_GRID_CELLS = 2_048;
|
|
46
61
|
const MAX_CLIPBOARD_INPUT_BYTES = 4 * 1024 * 1024;
|
|
47
62
|
const MAX_CLIPBOARD_CELLS = 65_536;
|
|
63
|
+
const EMPTY_DIMENSIONS: readonly (readonly [number, number])[] = [];
|
|
48
64
|
|
|
49
65
|
type CellCoordinate = { row: number; col: number };
|
|
50
66
|
|
|
@@ -99,6 +115,7 @@ export type SpreadsheetGridProps = {
|
|
|
99
115
|
overscanColumns?: number | undefined;
|
|
100
116
|
onSelectionChange?: ((selection: SpreadsheetSelection) => void) | undefined;
|
|
101
117
|
onCommit?: ((commit: SpreadsheetCommit) => void) | undefined;
|
|
118
|
+
onResize?: ((change: SpreadsheetDimensionCommit) => void) | undefined;
|
|
102
119
|
onViewportChange?: ((viewport: SpreadsheetViewport) => void) | undefined;
|
|
103
120
|
className?: string | undefined;
|
|
104
121
|
};
|
|
@@ -136,6 +153,11 @@ export type SpreadsheetProjectionGridProps = {
|
|
|
136
153
|
commit?: ((commit: SpreadsheetCommit) => void | Promise<void>) | undefined;
|
|
137
154
|
commitRange?: ((commit: SpreadsheetRangeCommit) => void | Promise<void>) | undefined;
|
|
138
155
|
clear?: ((selection: SpreadsheetSelection) => void | Promise<void>) | undefined;
|
|
156
|
+
resize?: ((change: SpreadsheetDimensionCommit) => void | Promise<void>) | undefined;
|
|
157
|
+
/** Server-unacknowledged changes, distinct from local command acceptance. */
|
|
158
|
+
pendingTransactions?: number | undefined;
|
|
159
|
+
syncStatus?: string | undefined;
|
|
160
|
+
syncError?: string | undefined;
|
|
139
161
|
onCommandError?: ((error: Error) => void) | undefined;
|
|
140
162
|
onViewportChange?: ((viewport: SpreadsheetViewport) => void) | undefined;
|
|
141
163
|
className?: string | undefined;
|
|
@@ -494,13 +516,6 @@ function isCellSelected(selection: SpreadsheetSelection, row: number, col: numbe
|
|
|
494
516
|
);
|
|
495
517
|
}
|
|
496
518
|
|
|
497
|
-
function displayValue(value: unknown): string {
|
|
498
|
-
if (value === null || value === undefined) return "";
|
|
499
|
-
if (value instanceof Date) return Number.isNaN(value.getTime()) ? "" : value.toLocaleDateString();
|
|
500
|
-
if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
|
|
501
|
-
return String(value);
|
|
502
|
-
}
|
|
503
|
-
|
|
504
519
|
function parseCellInput(input: string): string | number | boolean | null {
|
|
505
520
|
if (input === "") return null;
|
|
506
521
|
const normalized = input.trim();
|
|
@@ -634,7 +649,7 @@ function spreadsheetCanvasTheme(element: HTMLElement): SpreadsheetCanvasTheme {
|
|
|
634
649
|
const border = computedToken(style, "--og-color-border", "#d1d5db");
|
|
635
650
|
const foreground = style.color || computedToken(style, "--og-color-fg", "#111827");
|
|
636
651
|
const mutedForeground = computedToken(style, "--og-color-fg-muted", "#6b7280");
|
|
637
|
-
const accent = computedToken(style, "--og-color-accent", "#
|
|
652
|
+
const accent = computedToken(style, "--og-color-accent", "#545454");
|
|
638
653
|
const error = computedToken(style, "--og-color-status-failed", "#dc2626");
|
|
639
654
|
const fontFamily =
|
|
640
655
|
style.fontFamily ||
|
|
@@ -816,7 +831,7 @@ export function SpreadsheetArtifactSurface({
|
|
|
816
831
|
<button
|
|
817
832
|
type="button"
|
|
818
833
|
onClick={addSheet}
|
|
819
|
-
className="mt-3 rounded-og-sm bg-og-
|
|
834
|
+
className="mt-3 rounded-og-sm border border-og-primary-border bg-og-primary text-og-primary-fg px-3 py-1.5 text-og-sm font-medium hover:bg-og-primary-hover"
|
|
820
835
|
>
|
|
821
836
|
Add worksheet
|
|
822
837
|
</button>
|
|
@@ -838,6 +853,7 @@ export function SpreadsheetGrid({
|
|
|
838
853
|
overscanColumns = 2,
|
|
839
854
|
onSelectionChange,
|
|
840
855
|
onCommit,
|
|
856
|
+
onResize,
|
|
841
857
|
onViewportChange,
|
|
842
858
|
className,
|
|
843
859
|
}: SpreadsheetGridProps) {
|
|
@@ -906,7 +922,7 @@ export function SpreadsheetGrid({
|
|
|
906
922
|
const data = worksheet.cellData(row, col);
|
|
907
923
|
return {
|
|
908
924
|
value: data.formula ? workbook.valueAt(worksheet, { row, col }) : data.value,
|
|
909
|
-
input: data.formula ??
|
|
925
|
+
input: data.formula ?? spreadsheetCellEditSource(data.value),
|
|
910
926
|
format: data.format,
|
|
911
927
|
};
|
|
912
928
|
},
|
|
@@ -968,6 +984,14 @@ export function SpreadsheetGrid({
|
|
|
968
984
|
},
|
|
969
985
|
[worksheet],
|
|
970
986
|
);
|
|
987
|
+
const resize = useCallback(
|
|
988
|
+
(change: SpreadsheetDimensionCommit) => {
|
|
989
|
+
if (change.axis === "column") worksheet.setColumnWidth(change.index, change.size);
|
|
990
|
+
else worksheet.setRowHeight(change.index, change.size);
|
|
991
|
+
onResize?.(change);
|
|
992
|
+
},
|
|
993
|
+
[onResize, worksheet],
|
|
994
|
+
);
|
|
971
995
|
|
|
972
996
|
return (
|
|
973
997
|
<SpreadsheetProjectionGrid
|
|
@@ -979,6 +1003,7 @@ export function SpreadsheetGrid({
|
|
|
979
1003
|
commit={commit}
|
|
980
1004
|
commitRange={commitRange}
|
|
981
1005
|
clear={clear}
|
|
1006
|
+
resize={resize}
|
|
982
1007
|
onViewportChange={onViewportChange}
|
|
983
1008
|
className={className}
|
|
984
1009
|
/>
|
|
@@ -998,25 +1023,50 @@ export function SpreadsheetProjectionGrid({
|
|
|
998
1023
|
commit,
|
|
999
1024
|
commitRange,
|
|
1000
1025
|
clear,
|
|
1026
|
+
resize,
|
|
1027
|
+
pendingTransactions = 0,
|
|
1028
|
+
syncStatus,
|
|
1029
|
+
syncError,
|
|
1001
1030
|
onCommandError,
|
|
1002
1031
|
onViewportChange,
|
|
1003
1032
|
className,
|
|
1004
1033
|
}: SpreadsheetProjectionGridProps) {
|
|
1005
1034
|
const { revision, rowCount, columnCount } = projection;
|
|
1006
|
-
const dimensionRevision = projection.dimensionRevision ?? 0;
|
|
1007
1035
|
const editable = !readOnly && commit !== undefined;
|
|
1036
|
+
const commandQueue = useSpreadsheetCommandQueue({
|
|
1037
|
+
scopeKey: `${projection.sheetId}:${projection.generationId ?? "none"}`,
|
|
1038
|
+
enabled: editable,
|
|
1039
|
+
onCommandError,
|
|
1040
|
+
});
|
|
1041
|
+
const [commandFailure, setCommandFailure] = useState<{
|
|
1042
|
+
message: string;
|
|
1043
|
+
retry?: (() => void) | undefined;
|
|
1044
|
+
} | null>(null);
|
|
1045
|
+
const clearPreflightFailure = commandQueue.clearPreflightFailure;
|
|
1046
|
+
const clearCommandFailure = useCallback(() => {
|
|
1047
|
+
setCommandFailure(null);
|
|
1048
|
+
clearPreflightFailure();
|
|
1049
|
+
}, [clearPreflightFailure]);
|
|
1050
|
+
const resizing = useSpreadsheetResizing({
|
|
1051
|
+
sheetId: projection.sheetId,
|
|
1052
|
+
generationId: projection.generationId,
|
|
1053
|
+
revision: projection.dimensionRevision ?? revision,
|
|
1054
|
+
rowHeights: projection.rowHeights ?? EMPTY_DIMENSIONS,
|
|
1055
|
+
columnWidths: projection.columnWidths ?? EMPTY_DIMENSIONS,
|
|
1056
|
+
defaultRowHeight: projection.defaultRowHeight ?? 24,
|
|
1057
|
+
defaultColumnWidth: projection.defaultColumnWidth ?? 96,
|
|
1058
|
+
enabled: !readOnly && resize !== undefined,
|
|
1059
|
+
commit: resize,
|
|
1060
|
+
onCommandError,
|
|
1061
|
+
onStart: clearCommandFailure,
|
|
1062
|
+
});
|
|
1063
|
+
const dimensionRevision = `${projection.dimensionRevision ?? 0}:${resizing.previewKey}`;
|
|
1008
1064
|
const rows = useMemo(() => {
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
}, [dimensionRevision, projection.defaultRowHeight, projection.rowHeights, rowCount]);
|
|
1065
|
+
return buildAxis(rowCount, projection.defaultRowHeight ?? 24, resizing.rowHeights);
|
|
1066
|
+
}, [projection.defaultRowHeight, resizing.rowHeights, rowCount]);
|
|
1012
1067
|
const columns = useMemo(() => {
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
columnCount,
|
|
1016
|
-
projection.defaultColumnWidth ?? 96,
|
|
1017
|
-
projection.columnWidths ?? [],
|
|
1018
|
-
);
|
|
1019
|
-
}, [columnCount, dimensionRevision, projection.columnWidths, projection.defaultColumnWidth]);
|
|
1068
|
+
return buildAxis(columnCount, projection.defaultColumnWidth ?? 96, resizing.columnWidths);
|
|
1069
|
+
}, [columnCount, resizing.columnWidths, projection.defaultColumnWidth]);
|
|
1020
1070
|
const canvasRows = useMemo(() => canvasAxis(rows), [rows]);
|
|
1021
1071
|
const canvasColumns = useMemo(() => canvasAxis(columns), [columns]);
|
|
1022
1072
|
const [selection, setSelection] = useState<SpreadsheetSelection>(() => ({
|
|
@@ -1028,11 +1078,18 @@ export function SpreadsheetProjectionGrid({
|
|
|
1028
1078
|
const [draft, setDraft] = useState(
|
|
1029
1079
|
() => projection.readCell(selection.focus.row, selection.focus.col)?.input ?? "",
|
|
1030
1080
|
);
|
|
1031
|
-
const
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1081
|
+
const visibleCommandFailure =
|
|
1082
|
+
resizing.error ??
|
|
1083
|
+
commandQueue.error ??
|
|
1084
|
+
commandFailure ??
|
|
1085
|
+
(syncError ? { message: syncError, retry: undefined } : null);
|
|
1086
|
+
const pendingCommandCount =
|
|
1087
|
+
commandQueue.pendingCount + resizing.pendingCount + pendingTransactions;
|
|
1088
|
+
const visibleSyncStatus =
|
|
1089
|
+
pendingCommandCount > 0 && (!syncStatus || syncStatus === "Saved" || syncStatus === "Read only")
|
|
1090
|
+
? "Saving…"
|
|
1091
|
+
: syncStatus;
|
|
1092
|
+
const runQueuedCommand = commandQueue.run;
|
|
1036
1093
|
const [viewport, setViewport] = useState<ViewportState>({
|
|
1037
1094
|
width: FALLBACK_VIEWPORT_WIDTH,
|
|
1038
1095
|
height: FALLBACK_VIEWPORT_HEIGHT,
|
|
@@ -1052,19 +1109,59 @@ export function SpreadsheetProjectionGrid({
|
|
|
1052
1109
|
const commitAfterCompositionRef = useRef(false);
|
|
1053
1110
|
const selectDraftOnFocusRef = useRef(true);
|
|
1054
1111
|
const initialDraftRef = useRef(draft);
|
|
1055
|
-
const
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1112
|
+
const optimisticInputsRef = useRef(
|
|
1113
|
+
new Map<
|
|
1114
|
+
string,
|
|
1115
|
+
{
|
|
1116
|
+
row: number;
|
|
1117
|
+
col: number;
|
|
1118
|
+
input: string;
|
|
1119
|
+
baseRevision: string | number;
|
|
1120
|
+
commandId: number;
|
|
1121
|
+
pending: boolean;
|
|
1122
|
+
}
|
|
1123
|
+
>(),
|
|
1124
|
+
);
|
|
1125
|
+
const [optimisticEpoch, setOptimisticEpoch] = useState(0);
|
|
1126
|
+
const refreshOptimisticInputs = useCallback(() => setOptimisticEpoch((value) => value + 1), []);
|
|
1127
|
+
const optimisticScope = `${projection.sheetId}:${projection.generationId ?? "none"}`;
|
|
1128
|
+
const optimisticScopeRef = useRef(optimisticScope);
|
|
1129
|
+
if (optimisticScopeRef.current !== optimisticScope) {
|
|
1130
|
+
optimisticScopeRef.current = optimisticScope;
|
|
1131
|
+
optimisticInputsRef.current.clear();
|
|
1132
|
+
}
|
|
1133
|
+
const projectionRef = useRef(projection);
|
|
1134
|
+
projectionRef.current = projection;
|
|
1135
|
+
const editModeRef = useRef(editMode);
|
|
1136
|
+
editModeRef.current = editMode;
|
|
1065
1137
|
const canvasRendererRef = useRef<SpreadsheetCanvasRenderer | null>(null);
|
|
1066
1138
|
if (!canvasRendererRef.current) canvasRendererRef.current = new SpreadsheetCanvasRenderer();
|
|
1067
1139
|
const reactId = useId().replaceAll(":", "");
|
|
1140
|
+
const readEditInput = useCallback(
|
|
1141
|
+
(cell: CellCoordinate) =>
|
|
1142
|
+
optimisticInputsRef.current.get(`${cell.row}:${cell.col}`)?.input ??
|
|
1143
|
+
projectionRef.current.readCell(cell.row, cell.col)?.input ??
|
|
1144
|
+
"",
|
|
1145
|
+
[],
|
|
1146
|
+
);
|
|
1147
|
+
const forgetOptimisticInputs = useCallback(
|
|
1148
|
+
(target: SpreadsheetCommandTarget) => {
|
|
1149
|
+
let changed = false;
|
|
1150
|
+
for (const [key, entry] of optimisticInputsRef.current) {
|
|
1151
|
+
if (
|
|
1152
|
+
entry.row >= target.top &&
|
|
1153
|
+
entry.row <= target.bottom &&
|
|
1154
|
+
entry.col >= target.left &&
|
|
1155
|
+
entry.col <= target.right
|
|
1156
|
+
) {
|
|
1157
|
+
optimisticInputsRef.current.delete(key);
|
|
1158
|
+
changed = true;
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
if (changed) refreshOptimisticInputs();
|
|
1162
|
+
},
|
|
1163
|
+
[refreshOptimisticInputs],
|
|
1164
|
+
);
|
|
1068
1165
|
|
|
1069
1166
|
const updateSelection = useCallback(
|
|
1070
1167
|
(next: SpreadsheetSelection) => {
|
|
@@ -1077,44 +1174,54 @@ export function SpreadsheetProjectionGrid({
|
|
|
1077
1174
|
|
|
1078
1175
|
useEffect(() => {
|
|
1079
1176
|
if (selection.sheetId === projection.sheetId) return;
|
|
1080
|
-
commandScopeRef.current += 1;
|
|
1081
|
-
latestCommandRef.current += 1;
|
|
1082
1177
|
const next = {
|
|
1083
1178
|
sheetId: projection.sheetId,
|
|
1084
1179
|
anchor: { row: 0, col: 0 },
|
|
1085
1180
|
focus: { row: 0, col: 0 },
|
|
1086
1181
|
};
|
|
1087
|
-
|
|
1088
|
-
setPendingCommands(0);
|
|
1182
|
+
optimisticInputsRef.current.clear();
|
|
1089
1183
|
setCommandFailure(null);
|
|
1090
1184
|
setEditMode(null);
|
|
1091
1185
|
updateSelection(next);
|
|
1092
1186
|
}, [projection.sheetId, selection.sheetId, updateSelection]);
|
|
1093
1187
|
|
|
1094
1188
|
useEffect(() => {
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
commandScopeRef.current += 1;
|
|
1099
|
-
latestCommandRef.current += 1;
|
|
1100
|
-
};
|
|
1101
|
-
}, []);
|
|
1189
|
+
optimisticInputsRef.current.clear();
|
|
1190
|
+
refreshOptimisticInputs();
|
|
1191
|
+
}, [projection.generationId, projection.sheetId, refreshOptimisticInputs]);
|
|
1102
1192
|
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
const optimistic
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1193
|
+
useClientLayoutEffect(() => {
|
|
1194
|
+
let changed = false;
|
|
1195
|
+
for (const [key, optimistic] of optimisticInputsRef.current) {
|
|
1196
|
+
const coverage = projection.coverage;
|
|
1197
|
+
const covered =
|
|
1198
|
+
!coverage ||
|
|
1199
|
+
(optimistic.row >= coverage.rowStart &&
|
|
1200
|
+
optimistic.row < coverage.rowEnd &&
|
|
1201
|
+
optimistic.col >= coverage.columnStart &&
|
|
1202
|
+
optimistic.col < coverage.columnEnd);
|
|
1203
|
+
if (
|
|
1204
|
+
!optimistic.pending &&
|
|
1205
|
+
covered &&
|
|
1206
|
+
(projection.readCell(optimistic.row, optimistic.col)?.input === optimistic.input ||
|
|
1207
|
+
revision !== optimistic.baseRevision)
|
|
1208
|
+
) {
|
|
1209
|
+
optimisticInputsRef.current.delete(key);
|
|
1210
|
+
changed = true;
|
|
1211
|
+
}
|
|
1114
1212
|
}
|
|
1115
|
-
if (
|
|
1116
|
-
setDraft(
|
|
1117
|
-
}, [
|
|
1213
|
+
if (changed) refreshOptimisticInputs();
|
|
1214
|
+
if (editMode === null) setDraft(readEditInput(selection.focus));
|
|
1215
|
+
}, [
|
|
1216
|
+
commandQueue.pendingCount,
|
|
1217
|
+
editMode,
|
|
1218
|
+
projection,
|
|
1219
|
+
readEditInput,
|
|
1220
|
+
revision,
|
|
1221
|
+
selection.focus,
|
|
1222
|
+
refreshOptimisticInputs,
|
|
1223
|
+
optimisticEpoch,
|
|
1224
|
+
]);
|
|
1118
1225
|
|
|
1119
1226
|
useClientLayoutEffect(() => {
|
|
1120
1227
|
const element = viewportRef.current;
|
|
@@ -1232,46 +1339,17 @@ export function SpreadsheetProjectionGrid({
|
|
|
1232
1339
|
);
|
|
1233
1340
|
|
|
1234
1341
|
const runCommand = useCallback(
|
|
1235
|
-
(
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1342
|
+
(
|
|
1343
|
+
invoke: (id: number) => void | Promise<void>,
|
|
1344
|
+
retry: () => void,
|
|
1345
|
+
rollback: (id: number) => void,
|
|
1346
|
+
target?: SpreadsheetCommandTarget | (() => SpreadsheetCommandTarget),
|
|
1347
|
+
accepted?: (id: number) => void,
|
|
1348
|
+
) => {
|
|
1239
1349
|
setCommandFailure(null);
|
|
1240
|
-
|
|
1241
|
-
if (
|
|
1242
|
-
!mountedRef.current ||
|
|
1243
|
-
commandScopeRef.current !== scope ||
|
|
1244
|
-
latestCommandRef.current !== commandId
|
|
1245
|
-
) {
|
|
1246
|
-
return;
|
|
1247
|
-
}
|
|
1248
|
-
const error = cause instanceof Error ? cause : new Error(String(cause));
|
|
1249
|
-
rollback();
|
|
1250
|
-
setCommandFailure({ message: error.message || "Spreadsheet change failed", retry });
|
|
1251
|
-
onCommandError?.(error);
|
|
1252
|
-
};
|
|
1253
|
-
let result: void | Promise<void>;
|
|
1254
|
-
try {
|
|
1255
|
-
result = invoke();
|
|
1256
|
-
} catch (cause) {
|
|
1257
|
-
fail(cause);
|
|
1258
|
-
return;
|
|
1259
|
-
}
|
|
1260
|
-
if (!result || typeof result.then !== "function") return;
|
|
1261
|
-
setPendingCommands((current) => current + 1);
|
|
1262
|
-
void Promise.resolve(result).then(
|
|
1263
|
-
() => {
|
|
1264
|
-
if (!mountedRef.current || commandScopeRef.current !== scope) return;
|
|
1265
|
-
setPendingCommands((current) => Math.max(0, current - 1));
|
|
1266
|
-
},
|
|
1267
|
-
(cause) => {
|
|
1268
|
-
if (!mountedRef.current || commandScopeRef.current !== scope) return;
|
|
1269
|
-
setPendingCommands((current) => Math.max(0, current - 1));
|
|
1270
|
-
fail(cause);
|
|
1271
|
-
},
|
|
1272
|
-
);
|
|
1350
|
+
runQueuedCommand(invoke, retry, rollback, target, accepted);
|
|
1273
1351
|
},
|
|
1274
|
-
[
|
|
1352
|
+
[runQueuedCommand],
|
|
1275
1353
|
);
|
|
1276
1354
|
|
|
1277
1355
|
const reportCommandFailure = useCallback(
|
|
@@ -1309,21 +1387,49 @@ export function SpreadsheetProjectionGrid({
|
|
|
1309
1387
|
kind: input.startsWith("=") ? "formula" : "value",
|
|
1310
1388
|
} satisfies SpreadsheetCommit;
|
|
1311
1389
|
const execute = () => {
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1390
|
+
const retryFocus = selectionRef.current.focus;
|
|
1391
|
+
if (
|
|
1392
|
+
editModeRef.current === null &&
|
|
1393
|
+
retryFocus.row === next.cell.row &&
|
|
1394
|
+
retryFocus.col === next.cell.col
|
|
1395
|
+
) {
|
|
1396
|
+
setDraft(input);
|
|
1397
|
+
}
|
|
1398
|
+
const key = `${next.cell.row}:${next.cell.col}`;
|
|
1320
1399
|
runCommand(
|
|
1321
|
-
() =>
|
|
1400
|
+
(commandId) => {
|
|
1401
|
+
optimisticInputsRef.current.set(key, {
|
|
1402
|
+
...next.cell,
|
|
1403
|
+
input,
|
|
1404
|
+
baseRevision: revision,
|
|
1405
|
+
commandId,
|
|
1406
|
+
pending: true,
|
|
1407
|
+
});
|
|
1408
|
+
refreshOptimisticInputs();
|
|
1409
|
+
return commit(next);
|
|
1410
|
+
},
|
|
1322
1411
|
execute,
|
|
1323
|
-
() => {
|
|
1324
|
-
|
|
1412
|
+
(commandId) => {
|
|
1413
|
+
if (optimisticInputsRef.current.get(key)?.commandId !== commandId) return;
|
|
1414
|
+
optimisticInputsRef.current.delete(key);
|
|
1415
|
+
refreshOptimisticInputs();
|
|
1325
1416
|
const current = selectionRef.current.focus;
|
|
1326
|
-
|
|
1417
|
+
if (
|
|
1418
|
+
editModeRef.current === null &&
|
|
1419
|
+
current.row === next.cell.row &&
|
|
1420
|
+
current.col === next.cell.col
|
|
1421
|
+
) {
|
|
1422
|
+
setDraft(readEditInput(current));
|
|
1423
|
+
}
|
|
1424
|
+
},
|
|
1425
|
+
{ top: next.cell.row, bottom: next.cell.row, left: next.cell.col, right: next.cell.col },
|
|
1426
|
+
(commandId) => {
|
|
1427
|
+
const optimistic = optimisticInputsRef.current.get(key);
|
|
1428
|
+
if (optimistic?.commandId === commandId) {
|
|
1429
|
+
optimistic.pending = false;
|
|
1430
|
+
optimistic.baseRevision = projectionRef.current.revision;
|
|
1431
|
+
refreshOptimisticInputs();
|
|
1432
|
+
}
|
|
1327
1433
|
},
|
|
1328
1434
|
);
|
|
1329
1435
|
};
|
|
@@ -1335,20 +1441,35 @@ export function SpreadsheetProjectionGrid({
|
|
|
1335
1441
|
committingRef.current = false;
|
|
1336
1442
|
});
|
|
1337
1443
|
},
|
|
1338
|
-
[
|
|
1444
|
+
[
|
|
1445
|
+
commit,
|
|
1446
|
+
draft,
|
|
1447
|
+
editable,
|
|
1448
|
+
projection,
|
|
1449
|
+
readEditInput,
|
|
1450
|
+
revision,
|
|
1451
|
+
runCommand,
|
|
1452
|
+
selection.focus,
|
|
1453
|
+
refreshOptimisticInputs,
|
|
1454
|
+
],
|
|
1339
1455
|
);
|
|
1340
1456
|
|
|
1341
1457
|
const clearSelection = useCallback(() => {
|
|
1342
1458
|
if (!editable || !clear) return;
|
|
1343
1459
|
const current = selection;
|
|
1460
|
+
const target = normalizeSelection(current);
|
|
1344
1461
|
const execute = () =>
|
|
1345
1462
|
runCommand(
|
|
1346
|
-
() =>
|
|
1463
|
+
() => {
|
|
1464
|
+
forgetOptimisticInputs(target);
|
|
1465
|
+
return clear(current);
|
|
1466
|
+
},
|
|
1347
1467
|
execute,
|
|
1348
1468
|
() => {},
|
|
1469
|
+
target,
|
|
1349
1470
|
);
|
|
1350
1471
|
execute();
|
|
1351
|
-
}, [clear, editable, runCommand, selection]);
|
|
1472
|
+
}, [clear, editable, forgetOptimisticInputs, runCommand, selection]);
|
|
1352
1473
|
|
|
1353
1474
|
const pasteClipboard = useCallback(
|
|
1354
1475
|
(event: ReactClipboardEvent<HTMLDivElement>) => {
|
|
@@ -1356,17 +1477,33 @@ export function SpreadsheetProjectionGrid({
|
|
|
1356
1477
|
const clipboardText = event.clipboardData.getData("text/plain");
|
|
1357
1478
|
if (!clipboardText && !event.clipboardData.types.includes("text/plain")) return;
|
|
1358
1479
|
event.preventDefault();
|
|
1480
|
+
const previousSelection = selectionRef.current;
|
|
1481
|
+
const anchor = previousSelection.focus;
|
|
1359
1482
|
const execute = () => {
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
if (
|
|
1483
|
+
let prepared: ReturnType<typeof parseSpreadsheetClipboard>;
|
|
1484
|
+
let target: SpreadsheetCommandTarget;
|
|
1485
|
+
const prepare = () => {
|
|
1486
|
+
prepared = parseSpreadsheetClipboard(clipboardText);
|
|
1487
|
+
if (
|
|
1488
|
+
anchor.row + prepared.rows > rowCount ||
|
|
1489
|
+
anchor.col + prepared.columns > columnCount
|
|
1490
|
+
) {
|
|
1365
1491
|
throw new Error("Clipboard range does not fit in this worksheet");
|
|
1366
1492
|
}
|
|
1367
|
-
if (!commitRange &&
|
|
1493
|
+
if (!commitRange && prepared.inputs.length !== 1) {
|
|
1368
1494
|
throw new Error("This spreadsheet adapter does not support rectangular paste");
|
|
1369
1495
|
}
|
|
1496
|
+
target = {
|
|
1497
|
+
top: anchor.row,
|
|
1498
|
+
left: anchor.col,
|
|
1499
|
+
bottom: anchor.row + prepared.rows - 1,
|
|
1500
|
+
right: anchor.col + prepared.columns - 1,
|
|
1501
|
+
};
|
|
1502
|
+
return target;
|
|
1503
|
+
};
|
|
1504
|
+
const invoke = () => {
|
|
1505
|
+
const parsed = prepared;
|
|
1506
|
+
forgetOptimisticInputs(target);
|
|
1370
1507
|
const bottomRight = {
|
|
1371
1508
|
row: anchor.row + parsed.rows - 1,
|
|
1372
1509
|
col: anchor.col + parsed.columns - 1,
|
|
@@ -1394,7 +1531,23 @@ export function SpreadsheetProjectionGrid({
|
|
|
1394
1531
|
kind: input.startsWith("=") ? "formula" : "value",
|
|
1395
1532
|
});
|
|
1396
1533
|
};
|
|
1397
|
-
runCommand(
|
|
1534
|
+
runCommand(
|
|
1535
|
+
invoke,
|
|
1536
|
+
execute,
|
|
1537
|
+
() => {
|
|
1538
|
+
const current = selectionRef.current;
|
|
1539
|
+
if (
|
|
1540
|
+
target &&
|
|
1541
|
+
current.anchor.row === anchor.row &&
|
|
1542
|
+
current.anchor.col === anchor.col &&
|
|
1543
|
+
current.focus.row === target.bottom &&
|
|
1544
|
+
current.focus.col === target.right
|
|
1545
|
+
) {
|
|
1546
|
+
updateSelection(previousSelection);
|
|
1547
|
+
}
|
|
1548
|
+
},
|
|
1549
|
+
prepare,
|
|
1550
|
+
);
|
|
1398
1551
|
};
|
|
1399
1552
|
execute();
|
|
1400
1553
|
},
|
|
@@ -1405,6 +1558,7 @@ export function SpreadsheetProjectionGrid({
|
|
|
1405
1558
|
editMode,
|
|
1406
1559
|
editable,
|
|
1407
1560
|
ensureVisible,
|
|
1561
|
+
forgetOptimisticInputs,
|
|
1408
1562
|
projection.sheetId,
|
|
1409
1563
|
rowCount,
|
|
1410
1564
|
runCommand,
|
|
@@ -1454,13 +1608,13 @@ export function SpreadsheetProjectionGrid({
|
|
|
1454
1608
|
(initial?: string, cell: CellCoordinate = selectionRef.current.focus) => {
|
|
1455
1609
|
if (!editable) return;
|
|
1456
1610
|
ensureVisible(cell);
|
|
1457
|
-
const current =
|
|
1611
|
+
const current = readEditInput(cell);
|
|
1458
1612
|
initialDraftRef.current = current;
|
|
1459
1613
|
selectDraftOnFocusRef.current = initial === undefined;
|
|
1460
1614
|
setDraft(initial ?? current);
|
|
1461
1615
|
setEditMode("cell");
|
|
1462
1616
|
},
|
|
1463
|
-
[editable, ensureVisible,
|
|
1617
|
+
[editable, ensureVisible, readEditInput],
|
|
1464
1618
|
);
|
|
1465
1619
|
|
|
1466
1620
|
const onGridKeyDown = useCallback(
|
|
@@ -1553,7 +1707,7 @@ export function SpreadsheetProjectionGrid({
|
|
|
1553
1707
|
} else if (event.key === "Escape") {
|
|
1554
1708
|
event.preventDefault();
|
|
1555
1709
|
committingRef.current = true;
|
|
1556
|
-
setDraft(
|
|
1710
|
+
setDraft(readEditInput(selection.focus));
|
|
1557
1711
|
setEditMode(null);
|
|
1558
1712
|
viewportRef.current?.focus();
|
|
1559
1713
|
queueMicrotask(() => {
|
|
@@ -1561,7 +1715,7 @@ export function SpreadsheetProjectionGrid({
|
|
|
1561
1715
|
});
|
|
1562
1716
|
}
|
|
1563
1717
|
},
|
|
1564
|
-
[commitDraft,
|
|
1718
|
+
[commitDraft, readEditInput, selection.focus],
|
|
1565
1719
|
);
|
|
1566
1720
|
|
|
1567
1721
|
const onEditorCompositionStart = useCallback(() => {
|
|
@@ -1857,7 +2011,9 @@ export function SpreadsheetProjectionGrid({
|
|
|
1857
2011
|
return (
|
|
1858
2012
|
<div
|
|
1859
2013
|
className={cn("relative flex h-full min-w-0 flex-col bg-og-bg", className)}
|
|
1860
|
-
data-og-command-state={
|
|
2014
|
+
data-og-command-state={
|
|
2015
|
+
visibleCommandFailure ? "error" : pendingCommandCount > 0 ? "pending" : "idle"
|
|
2016
|
+
}
|
|
1861
2017
|
style={{ minHeight: 256 }}
|
|
1862
2018
|
>
|
|
1863
2019
|
<div className="flex min-h-9 shrink-0 items-center border-b border-og-border bg-og-surface-1">
|
|
@@ -1874,12 +2030,11 @@ export function SpreadsheetProjectionGrid({
|
|
|
1874
2030
|
<input
|
|
1875
2031
|
aria-label="Formula or value"
|
|
1876
2032
|
readOnly={!editable}
|
|
1877
|
-
aria-invalid={
|
|
2033
|
+
aria-invalid={visibleCommandFailure ? "true" : undefined}
|
|
1878
2034
|
value={draft}
|
|
1879
2035
|
onFocus={() => {
|
|
1880
2036
|
if (editable) {
|
|
1881
|
-
const current =
|
|
1882
|
-
projection.readCell(selection.focus.row, selection.focus.col)?.input ?? "";
|
|
2037
|
+
const current = readEditInput(selection.focus);
|
|
1883
2038
|
initialDraftRef.current = current;
|
|
1884
2039
|
setDraft(current);
|
|
1885
2040
|
setEditMode("formula");
|
|
@@ -1892,21 +2047,30 @@ export function SpreadsheetProjectionGrid({
|
|
|
1892
2047
|
onBlur={(event) => commitEditorOnBlur("formula", event.currentTarget.value)}
|
|
1893
2048
|
className="h-8 min-w-0 flex-1 bg-transparent px-1 font-mono text-og-sm text-og-fg outline-hidden placeholder:text-og-fg-subtle"
|
|
1894
2049
|
/>
|
|
2050
|
+
{visibleSyncStatus ? (
|
|
2051
|
+
<output
|
|
2052
|
+
aria-label="Spreadsheet sync status"
|
|
2053
|
+
className="shrink-0 px-2 text-og-xs text-og-fg-muted"
|
|
2054
|
+
>
|
|
2055
|
+
{visibleCommandFailure ? "Not saved" : visibleSyncStatus}
|
|
2056
|
+
</output>
|
|
2057
|
+
) : null}
|
|
1895
2058
|
</div>
|
|
1896
2059
|
<div role="status" aria-live="polite" className="sr-only">
|
|
1897
|
-
{
|
|
2060
|
+
{visibleCommandFailure?.message ??
|
|
2061
|
+
(pendingCommandCount > 0 ? "Saving spreadsheet changes" : "")}
|
|
1898
2062
|
</div>
|
|
1899
|
-
{
|
|
2063
|
+
{visibleCommandFailure ? (
|
|
1900
2064
|
<div
|
|
1901
2065
|
role="alert"
|
|
1902
2066
|
className="absolute bottom-2 left-2 z-50 flex items-center gap-2 rounded-og-sm border border-og-status-failed/30 bg-og-surface-1/95 px-2 py-1 text-og-xs text-og-status-failed shadow-og-sm"
|
|
1903
2067
|
style={{ maxWidth: "calc(100% - 1rem)" }}
|
|
1904
2068
|
>
|
|
1905
|
-
<span className="truncate">{
|
|
1906
|
-
{
|
|
2069
|
+
<span className="truncate">{visibleCommandFailure.message}</span>
|
|
2070
|
+
{visibleCommandFailure.retry ? (
|
|
1907
2071
|
<button
|
|
1908
2072
|
type="button"
|
|
1909
|
-
onClick={
|
|
2073
|
+
onClick={visibleCommandFailure.retry}
|
|
1910
2074
|
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"
|
|
1911
2075
|
>
|
|
1912
2076
|
Retry
|
|
@@ -1924,7 +2088,7 @@ export function SpreadsheetProjectionGrid({
|
|
|
1924
2088
|
aria-colcount={columnCount}
|
|
1925
2089
|
aria-multiselectable="true"
|
|
1926
2090
|
aria-readonly={!editable}
|
|
1927
|
-
aria-busy={
|
|
2091
|
+
aria-busy={pendingCommandCount > 0 ? "true" : undefined}
|
|
1928
2092
|
aria-activedescendant={activeCellId}
|
|
1929
2093
|
onKeyDown={onGridKeyDown}
|
|
1930
2094
|
onCopy={copySelection}
|
|
@@ -1958,6 +2122,10 @@ export function SpreadsheetProjectionGrid({
|
|
|
1958
2122
|
style={{
|
|
1959
2123
|
width: horizontalProjection.physicalTotal,
|
|
1960
2124
|
height: verticalProjection.physicalTotal,
|
|
2125
|
+
// Centered boundary handles must not enlarge the bounded scroll
|
|
2126
|
+
// extent at the final row/column. Unlike hidden, clip does not
|
|
2127
|
+
// create another scroll container for the sticky headers.
|
|
2128
|
+
overflow: "clip",
|
|
1961
2129
|
}}
|
|
1962
2130
|
>
|
|
1963
2131
|
<canvas
|
|
@@ -1990,7 +2158,7 @@ export function SpreadsheetProjectionGrid({
|
|
|
1990
2158
|
key={`header-${col}`}
|
|
1991
2159
|
role="columnheader"
|
|
1992
2160
|
aria-colindex={col + 1}
|
|
1993
|
-
className="sticky top-0 z-30 grid select-none place-items-center
|
|
2161
|
+
className="pointer-events-none sticky top-0 z-30 grid select-none place-items-center border-b border-r border-og-border bg-og-surface-2 text-og-xs font-medium text-og-fg-muted"
|
|
1994
2162
|
style={{
|
|
1995
2163
|
position: "absolute",
|
|
1996
2164
|
left,
|
|
@@ -2006,7 +2174,15 @@ export function SpreadsheetProjectionGrid({
|
|
|
2006
2174
|
: undefined),
|
|
2007
2175
|
}}
|
|
2008
2176
|
>
|
|
2009
|
-
{columnName(col)}
|
|
2177
|
+
<span className="max-w-full overflow-hidden">{columnName(col)}</span>
|
|
2178
|
+
{!readOnly && resize ? (
|
|
2179
|
+
<SpreadsheetResizeHandle
|
|
2180
|
+
axis="column"
|
|
2181
|
+
label={`Resize column ${columnName(col)}`}
|
|
2182
|
+
size={width}
|
|
2183
|
+
{...resizing.handleProps("column", col)}
|
|
2184
|
+
/>
|
|
2185
|
+
) : null}
|
|
2010
2186
|
</div>
|
|
2011
2187
|
))}
|
|
2012
2188
|
</div>
|
|
@@ -2026,7 +2202,7 @@ export function SpreadsheetProjectionGrid({
|
|
|
2026
2202
|
>
|
|
2027
2203
|
<div
|
|
2028
2204
|
role="rowheader"
|
|
2029
|
-
className="sticky left-0 z-20 grid h-full select-none place-items-center border-b border-r border-og-border bg-og-surface-2 text-og-xs text-og-fg-muted"
|
|
2205
|
+
className="pointer-events-none sticky left-0 z-20 grid h-full select-none place-items-center border-b border-r border-og-border bg-og-surface-2 text-og-xs text-og-fg-muted"
|
|
2030
2206
|
style={{
|
|
2031
2207
|
width: ROW_HEADER_WIDTH,
|
|
2032
2208
|
...(canvasReady
|
|
@@ -2039,6 +2215,14 @@ export function SpreadsheetProjectionGrid({
|
|
|
2039
2215
|
}}
|
|
2040
2216
|
>
|
|
2041
2217
|
{row + 1}
|
|
2218
|
+
{!readOnly && resize ? (
|
|
2219
|
+
<SpreadsheetResizeHandle
|
|
2220
|
+
axis="row"
|
|
2221
|
+
label={`Resize row ${row + 1}`}
|
|
2222
|
+
size={height}
|
|
2223
|
+
{...resizing.handleProps("row", row)}
|
|
2224
|
+
/>
|
|
2225
|
+
) : null}
|
|
2042
2226
|
</div>
|
|
2043
2227
|
|
|
2044
2228
|
{columnLayout.map(({ col, left, width }) => {
|
|
@@ -2050,6 +2234,13 @@ export function SpreadsheetProjectionGrid({
|
|
|
2050
2234
|
format: {},
|
|
2051
2235
|
};
|
|
2052
2236
|
const value = data.value;
|
|
2237
|
+
// Submitted input is a transient overlay, not a calculated or saved value.
|
|
2238
|
+
const optimistic = editable
|
|
2239
|
+
? optimisticInputsRef.current.get(`${row}:${col}`)
|
|
2240
|
+
: undefined;
|
|
2241
|
+
const display = optimistic
|
|
2242
|
+
? optimistic.input
|
|
2243
|
+
: formatSpreadsheetGeneralDisplay(value);
|
|
2053
2244
|
const address = cellName({ row, col });
|
|
2054
2245
|
const error = typeof value === "string" && value.startsWith("#");
|
|
2055
2246
|
return (
|
|
@@ -2059,12 +2250,13 @@ export function SpreadsheetProjectionGrid({
|
|
|
2059
2250
|
role="gridcell"
|
|
2060
2251
|
aria-colindex={col + 1}
|
|
2061
2252
|
aria-selected={selected}
|
|
2062
|
-
aria-label={`${address}${
|
|
2253
|
+
aria-label={`${address}${display ? `, ${display}` : ""}${optimistic ? (optimistic.input.startsWith("=") ? ", pending formula, awaiting calculation" : ", pending edit") : ""}`}
|
|
2254
|
+
data-og-pending-input={optimistic ? "true" : undefined}
|
|
2063
2255
|
data-og-cell={address}
|
|
2064
2256
|
className={cn(
|
|
2065
2257
|
"pointer-events-none absolute top-0 flex h-full min-w-0 overflow-hidden border-b border-r border-og-border px-1.5 text-og-fg",
|
|
2066
|
-
!canvasReady && selected && !active && "bg-og-accent/10",
|
|
2067
|
-
!canvasReady &&
|
|
2258
|
+
(!canvasReady || optimistic) && selected && !active && "bg-og-accent/10",
|
|
2259
|
+
(!canvasReady || optimistic) &&
|
|
2068
2260
|
active &&
|
|
2069
2261
|
"z-10 bg-og-accent/10 ring-2 ring-inset ring-og-accent",
|
|
2070
2262
|
!canvasReady && error && "text-og-status-failed",
|
|
@@ -2073,13 +2265,19 @@ export function SpreadsheetProjectionGrid({
|
|
|
2073
2265
|
left,
|
|
2074
2266
|
width,
|
|
2075
2267
|
...cellStyle(data.format),
|
|
2076
|
-
...(canvasReady
|
|
2268
|
+
...(canvasReady && !optimistic
|
|
2077
2269
|
? {
|
|
2078
2270
|
background: "transparent",
|
|
2079
2271
|
borderColor: "transparent",
|
|
2080
2272
|
color: "transparent",
|
|
2081
2273
|
}
|
|
2082
2274
|
: undefined),
|
|
2275
|
+
...(optimistic
|
|
2276
|
+
? {
|
|
2277
|
+
background: data.format.fill ?? "var(--og-color-surface-1)",
|
|
2278
|
+
zIndex: 10,
|
|
2279
|
+
}
|
|
2280
|
+
: undefined),
|
|
2083
2281
|
}}
|
|
2084
2282
|
>
|
|
2085
2283
|
{active && editMode === "cell" ? (
|
|
@@ -2099,7 +2297,7 @@ export function SpreadsheetProjectionGrid({
|
|
|
2099
2297
|
/>
|
|
2100
2298
|
) : (
|
|
2101
2299
|
<span className="block min-w-0 overflow-hidden text-ellipsis">
|
|
2102
|
-
{
|
|
2300
|
+
{display}
|
|
2103
2301
|
</span>
|
|
2104
2302
|
)}
|
|
2105
2303
|
</div>
|
|
@@ -2117,7 +2315,9 @@ export function SpreadsheetProjectionGrid({
|
|
|
2117
2315
|
aria-colindex={selection.focus.col + 1}
|
|
2118
2316
|
aria-selected="true"
|
|
2119
2317
|
aria-label={`${cellName(selection.focus)}${
|
|
2120
|
-
hiddenActiveValue == null
|
|
2318
|
+
hiddenActiveValue == null
|
|
2319
|
+
? ""
|
|
2320
|
+
: `, ${formatSpreadsheetGeneralDisplay(hiddenActiveValue)}`
|
|
2121
2321
|
}`}
|
|
2122
2322
|
/>
|
|
2123
2323
|
</div>
|