@puredesktop/puredesktop-ui-bridge 1.0.0-beta.1
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/package.json +96 -0
- package/src/agents/runtime/agentLiveReducer.test.ts +72 -0
- package/src/agents/runtime/agentLiveReducer.ts +139 -0
- package/src/agents/runtime/agentRunEventTypes.ts +115 -0
- package/src/agents/runtime/contextWindowUsage.test.ts +38 -0
- package/src/agents/runtime/contextWindowUsage.ts +25 -0
- package/src/agents/runtime/index.ts +24 -0
- package/src/agents/runtime/mapAgentMessages.ts +54 -0
- package/src/agents/runtime/mapAgentSnapshot.ts +71 -0
- package/src/agents/runtime/mergeUsageTurn.ts +23 -0
- package/src/agents/runtime/pendingToolCalls.test.ts +85 -0
- package/src/agents/runtime/pendingToolCalls.ts +14 -0
- package/src/agents/runtime/toolRequiresApproval.ts +20 -0
- package/src/agents/runtime/unresolvedToolCalls.ts +42 -0
- package/src/bridge/agentModelTiers.ts +50 -0
- package/src/bridge/agentToolHandlers.ts +23 -0
- package/src/bridge/agentToolHelpers.test.ts +27 -0
- package/src/bridge/agentToolHelpers.ts +20 -0
- package/src/bridge/agentTypes.ts +294 -0
- package/src/bridge/agents.d.mts +113 -0
- package/src/bridge/agents.mjs +233 -0
- package/src/bridge/agents.ts +62 -0
- package/src/bridge/appSettings.d.mts +9 -0
- package/src/bridge/appSettings.mjs +18 -0
- package/src/bridge/appSettings.ts +4 -0
- package/src/bridge/applyThemeFromHost.d.mts +7 -0
- package/src/bridge/applyThemeFromHost.mjs +33 -0
- package/src/bridge/assets.d.mts +66 -0
- package/src/bridge/assets.mjs +121 -0
- package/src/bridge/catalog.d.mts +5 -0
- package/src/bridge/catalog.mjs +24 -0
- package/src/bridge/catalog.ts +1 -0
- package/src/bridge/client.d.mts +19 -0
- package/src/bridge/client.mjs +147 -0
- package/src/bridge/collectionAssetAdapter.ts +63 -0
- package/src/bridge/collectionAssets.d.mts +1 -0
- package/src/bridge/collectionAssets.mjs +2 -0
- package/src/bridge/collectionAssets.ts +1 -0
- package/src/bridge/collectionDocumentHtml.test.ts +71 -0
- package/src/bridge/collectionDocumentHtml.ts +118 -0
- package/src/bridge/collectionImagePaste.test.ts +32 -0
- package/src/bridge/collectionImagePaste.ts +130 -0
- package/src/bridge/context.mjs +12 -0
- package/src/bridge/credentials.mjs +22 -0
- package/src/bridge/dialog.d.mts +5 -0
- package/src/bridge/dialog.mjs +13 -0
- package/src/bridge/events.d.mts +14 -0
- package/src/bridge/events.mjs +12 -0
- package/src/bridge/filePreviewKind.test.ts +43 -0
- package/src/bridge/filePreviewKind.ts +76 -0
- package/src/bridge/fs.d.mts +41 -0
- package/src/bridge/fs.mjs +82 -0
- package/src/bridge/fs.test.ts +16 -0
- package/src/bridge/fs.ts +10 -0
- package/src/bridge/index.ts +12 -0
- package/src/bridge/inlinePreview.d.mts +35 -0
- package/src/bridge/inlinePreview.mjs +99 -0
- package/src/bridge/inlinePreview.test.ts +56 -0
- package/src/bridge/inlinePreview.ts +13 -0
- package/src/bridge/methods.d.mts +115 -0
- package/src/bridge/methods.mjs +132 -0
- package/src/bridge/os.d.mts +11 -0
- package/src/bridge/os.mjs +26 -0
- package/src/bridge/plugins.d.mts +9 -0
- package/src/bridge/plugins.mjs +31 -0
- package/src/bridge/plugins.ts +5 -0
- package/src/bridge/preferences.d.mts +7 -0
- package/src/bridge/preferences.mjs +17 -0
- package/src/bridge/preferences.ts +13 -0
- package/src/bridge/printDocument.test.ts +47 -0
- package/src/bridge/printDocument.ts +75 -0
- package/src/bridge/pureRender/adapters.test.ts +144 -0
- package/src/bridge/pureRender/adapters.ts +175 -0
- package/src/bridge/pureRender/assets.test.ts +44 -0
- package/src/bridge/pureRender/base.css +76 -0
- package/src/bridge/pureRender/compiler.test.ts +279 -0
- package/src/bridge/pureRender/compiler.ts +660 -0
- package/src/bridge/pureRender/document.test.ts +283 -0
- package/src/bridge/pureRender/document.ts +35 -0
- package/src/bridge/pureRender/extraction.test.ts +432 -0
- package/src/bridge/pureRender/extraction.ts +1023 -0
- package/src/bridge/pureRender/flow.css +3 -0
- package/src/bridge/pureRender/index.ts +66 -0
- package/src/bridge/pureRender/normalize.test.ts +442 -0
- package/src/bridge/pureRender/normalize.ts +682 -0
- package/src/bridge/pureRender/presets.ts +365 -0
- package/src/bridge/pureRender/profiles/book.css +19 -0
- package/src/bridge/pureRender/profiles/manuscript.css +11 -0
- package/src/bridge/pureRender/profiles/writer.css +10 -0
- package/src/bridge/pureRender/reset.css +5 -0
- package/src/bridge/pureRender/samples.ts +94 -0
- package/src/bridge/pureRender/styles.ts +164 -0
- package/src/bridge/pureRender/theme.test.ts +53 -0
- package/src/bridge/pureRender/theme.ts +258 -0
- package/src/bridge/pureRender/tokens/default.css +36 -0
- package/src/bridge/pureRender/tokens/default.json +32 -0
- package/src/bridge/pureRender/types.ts +264 -0
- package/src/bridge/pureRender/visualLayoutInspection.test.ts +57 -0
- package/src/bridge/pureRender/visualLayoutInspection.ts +161 -0
- package/src/bridge/react/useDebouncedEffect.ts +21 -0
- package/src/bridge/react/useIpc.tsx +75 -0
- package/src/bridge/react/usePlatformAgentRunLiveState.tsx +78 -0
- package/src/bridge/react/usePlatformAgentSessionDrive.tsx +729 -0
- package/src/bridge/react/usePlatformAgentSessions.tsx +60 -0
- package/src/bridge/react/usePlatformAgentTools.tsx +82 -0
- package/src/bridge/react/usePlatformAppManifest.tsx +32 -0
- package/src/bridge/react/usePlatformBridge.tsx +56 -0
- package/src/bridge/react/usePlatformDeepLink.tsx +57 -0
- package/src/bridge/react/usePlatformFileBinaryDataUrl.tsx +54 -0
- package/src/bridge/react/usePlatformFilePreview.tsx +92 -0
- package/src/bridge/react/usePlatformPreferences.tsx +77 -0
- package/src/bridge/react/usePlatformThemeDocumentAttrs.ts +35 -0
- package/src/bridge/react/usePlatformThemeFromBridge.tsx +16 -0
- package/src/bridge/react/usePlatformViewportResource.test.tsx +106 -0
- package/src/bridge/react/usePlatformViewportResource.tsx +72 -0
- package/src/bridge/react/useScheduledTask.tsx +59 -0
- package/src/bridge/render.d.mts +31 -0
- package/src/bridge/render.mjs +62 -0
- package/src/bridge/render.ts +8 -0
- package/src/bridge/screenAnnotation.test.ts +103 -0
- package/src/bridge/screenAnnotation.ts +269 -0
- package/src/bridge/theme.d.mts +3 -0
- package/src/bridge/theme.mjs +9 -0
- package/src/bridge/types.ts +439 -0
- package/src/bridge/watch.d.mts +9 -0
- package/src/bridge/watch.mjs +34 -0
- package/src/bridge/watch.ts +1 -0
- package/src/bridge/window.d.mts +44 -0
- package/src/bridge/window.mjs +33 -0
- package/src/chrome/index.ts +1 -0
- package/src/components/accessibility/AccessibilityReviewDialog.test.tsx +104 -0
- package/src/components/accessibility/AccessibilityReviewDialog.tsx +350 -0
- package/src/components/accessibility/accessibilityReview.test.ts +101 -0
- package/src/components/accessibility/accessibilityReview.ts +639 -0
- package/src/components/accessibility/index.ts +16 -0
- package/src/components/agent-feedback/ScreenAnnotationAgentDialog.tsx +509 -0
- package/src/components/agent-feedback/index.ts +5 -0
- package/src/components/agents/AgentComposer.tsx +34 -0
- package/src/components/agents/AgentContextUsageBar.tsx +127 -0
- package/src/components/agents/AgentDrawerPanel.tsx +82 -0
- package/src/components/agents/AgentMarkdown.tsx +12 -0
- package/src/components/agents/AgentMessageBubble.tsx +82 -0
- package/src/components/agents/AgentMessageList.tsx +47 -0
- package/src/components/agents/AgentModelMenu.tsx +55 -0
- package/src/components/agents/AgentThinkingBlock.tsx +66 -0
- package/src/components/agents/AgentToolApprovalActions.tsx +65 -0
- package/src/components/agents/AgentToolCallCard.tsx +26 -0
- package/src/components/agents/AgentToolPendingList.tsx +39 -0
- package/src/components/agents/AgentToolPendingReview.tsx +118 -0
- package/src/components/agents/agentPanelStyles.ts +79 -0
- package/src/components/agents/agentTypes.ts +96 -0
- package/src/components/agents/formatToolCallArguments.test.ts +16 -0
- package/src/components/agents/formatToolCallArguments.ts +9 -0
- package/src/components/agents/index.ts +40 -0
- package/src/components/assets/AssetLibraryDialog.tsx +5 -0
- package/src/components/assets/asset-library/AssetLibraryDialog.tsx +43 -0
- package/src/components/assets/asset-library/AssetLibraryWorkspace.tsx +54 -0
- package/src/components/assets/asset-library/detail/AssetLibraryDetailActions.tsx +68 -0
- package/src/components/assets/asset-library/detail/AssetLibraryDetailHeader.tsx +56 -0
- package/src/components/assets/asset-library/detail/AssetLibraryDetailPane.tsx +90 -0
- package/src/components/assets/asset-library/detail/AssetLibraryDetailPreview.tsx +67 -0
- package/src/components/assets/asset-library/detail/AssetLibraryInlinePreview.tsx +87 -0
- package/src/components/assets/asset-library/detail/AssetLibraryInlineSourceField.tsx +29 -0
- package/src/components/assets/asset-library/detail/AssetLibraryMetadataFields.tsx +34 -0
- package/src/components/assets/asset-library/detail/AssetLibraryUsagePanel.tsx +46 -0
- package/src/components/assets/asset-library/detail/AssetLibraryVersionsPanel.tsx +145 -0
- package/src/components/assets/asset-library/helpers/assetKind.ts +74 -0
- package/src/components/assets/asset-library/helpers.ts +41 -0
- package/src/components/assets/asset-library/hooks/useAssetDetailDraft.ts +81 -0
- package/src/components/assets/asset-library/hooks/useAssetLibraryDialog.ts +233 -0
- package/src/components/assets/asset-library/hooks/useAssetLibraryMutations.ts +266 -0
- package/src/components/assets/asset-library/hooks/useAssetLibrarySelectionSync.ts +24 -0
- package/src/components/assets/asset-library/hooks/useAssetLibraryVersions.ts +145 -0
- package/src/components/assets/asset-library/hooks/useInlineAssetPreview.ts +44 -0
- package/src/components/assets/asset-library/index.ts +19 -0
- package/src/components/assets/asset-library/layout/assetLibraryLayout.ts +201 -0
- package/src/components/assets/asset-library/shared/fieldStyles.ts +62 -0
- package/src/components/assets/asset-library/sidebar/AssetLibraryFilterPills.tsx +89 -0
- package/src/components/assets/asset-library/sidebar/AssetLibraryList.tsx +91 -0
- package/src/components/assets/asset-library/sidebar/AssetLibraryListRow.tsx +99 -0
- package/src/components/assets/asset-library/sidebar/AssetLibraryListStatus.tsx +24 -0
- package/src/components/assets/asset-library/sidebar/AssetLibrarySidebar.tsx +48 -0
- package/src/components/assets/asset-library/sidebar/AssetLibrarySidebarActions.tsx +38 -0
- package/src/components/assets/asset-library/sidebar/AssetLibrarySidebarToolbar.tsx +78 -0
- package/src/components/assets/asset-library/sidebar/AssetListThumbnail.tsx +86 -0
- package/src/components/assets/asset-library/types.ts +128 -0
- package/src/components/assets/asset-library/utils/assetLibraryUtils.ts +181 -0
- package/src/components/assets/asset-library/utils/pathBasename.ts +5 -0
- package/src/components/assets/asset-library/utils/sanitizeUploadFileName.ts +7 -0
- package/src/components/assets/asset-library/utils/uploadCollectionAsset.ts +52 -0
- package/src/components/chrome/OverlayActionCapsule.test.tsx +82 -0
- package/src/components/chrome/OverlayActionCapsule.tsx +90 -0
- package/src/components/chrome/PanelTabStrip.tsx +113 -0
- package/src/components/chrome/PlatformIcon.tsx +27 -0
- package/src/components/chrome/PureAppWordmark.tsx +89 -0
- package/src/components/chrome/ShellWindowControls.tsx +51 -0
- package/src/components/chrome/ThemeModeButton.tsx +16 -0
- package/src/components/chrome/Titlebar.tsx +79 -0
- package/src/components/chrome/WorkspaceTabStrip.tsx +300 -0
- package/src/components/chrome/index.ts +31 -0
- package/src/components/chrome/workspaceTabTypes.ts +29 -0
- package/src/components/common/buttons/Button.tsx +241 -0
- package/src/components/common/buttons/ChoiceChip.tsx +73 -0
- package/src/components/common/buttons/CleanButton.tsx +34 -0
- package/src/components/common/buttons/IconButton.tsx +89 -0
- package/src/components/common/buttons/QuietAction.tsx +29 -0
- package/src/components/common/buttons/SegmentedControl.tsx +67 -0
- package/src/components/common/buttons/TextActionButton.tsx +55 -0
- package/src/components/common/buttons/TextLink.tsx +38 -0
- package/src/components/common/canvas/CanvasElementFrame.test.tsx +79 -0
- package/src/components/common/canvas/CanvasElementFrame.tsx +182 -0
- package/src/components/common/canvas/canvasGeometry.test.ts +66 -0
- package/src/components/common/canvas/canvasGeometry.ts +133 -0
- package/src/components/common/canvas/index.ts +27 -0
- package/src/components/common/canvas/useCanvasDragResize.test.tsx +152 -0
- package/src/components/common/canvas/useCanvasDragResize.ts +161 -0
- package/src/components/common/chat/ChatAssistantMessage.tsx +81 -0
- package/src/components/common/chat/ChatBox.tsx +189 -0
- package/src/components/common/chat/ChatMarkdown.tsx +109 -0
- package/src/components/common/chat/ChatModelMenu.tsx +258 -0
- package/src/components/common/chat/ChatStatusRow.tsx +24 -0
- package/src/components/common/chat/ChatThinkingIndicator.tsx +54 -0
- package/src/components/common/chat/ChatThread.tsx +59 -0
- package/src/components/common/chat/ChatToolRow.tsx +141 -0
- package/src/components/common/chat/ChatUserBubble.tsx +45 -0
- package/src/components/common/chat/chatUtils.ts +7 -0
- package/src/components/common/chat/index.ts +24 -0
- package/src/components/common/connections/ConnectionSetup.tsx +529 -0
- package/src/components/common/connections/index.ts +26 -0
- package/src/components/common/containers/AppFrame.test.tsx +47 -0
- package/src/components/common/containers/AppFrame.tsx +65 -0
- package/src/components/common/containers/AppHeader.tsx +60 -0
- package/src/components/common/containers/AutoFillGrid.tsx +37 -0
- package/src/components/common/containers/Collapsible.tsx +43 -0
- package/src/components/common/containers/CollapsibleGrid.tsx +174 -0
- package/src/components/common/containers/MotionScope.tsx +32 -0
- package/src/components/common/containers/PageHeader.tsx +35 -0
- package/src/components/common/containers/PanelToolbarHeader.tsx +113 -0
- package/src/components/common/containers/QuietDisclosure.tsx +91 -0
- package/src/components/common/containers/QuietSurface.tsx +41 -0
- package/src/components/common/containers/ScrollPanel.tsx +33 -0
- package/src/components/common/containers/StatusBar.tsx +42 -0
- package/src/components/common/containers/SurfacePanel.tsx +66 -0
- package/src/components/common/containers/ToolbarStrip.tsx +80 -0
- package/src/components/common/containers/flex.ts +117 -0
- package/src/components/common/containers/useOpenTransition.ts +33 -0
- package/src/components/common/context/ContextSelector.tsx +269 -0
- package/src/components/common/context/index.ts +7 -0
- package/src/components/common/desk/ActionReader.tsx +270 -0
- package/src/components/common/desk/ActivityLedger.tsx +143 -0
- package/src/components/common/desk/CreationDesk.tsx +139 -0
- package/src/components/common/desk/DailyBrief.tsx +160 -0
- package/src/components/common/desk/DeskCard.tsx +157 -0
- package/src/components/common/desk/index.ts +30 -0
- package/src/components/common/dropdown/ContextMenu.tsx +87 -0
- package/src/components/common/dropdown/MenuButtonDropdown.tsx +121 -0
- package/src/components/common/dropdown/MenuDropdown.tsx +63 -0
- package/src/components/common/dropdown/MenuDropdownEntry.tsx +51 -0
- package/src/components/common/dropdown/MenuDropdownItem.tsx +82 -0
- package/src/components/common/dropdown/MenuDropdownSubmenu.tsx +145 -0
- package/src/components/common/dropdown/MenuPanel.tsx +69 -0
- package/src/components/common/dropdown/MenuPortal.tsx +162 -0
- package/src/components/common/dropdown/MenuPortalLayer.tsx +6 -0
- package/src/components/common/dropdown/SelectMenu.tsx +243 -0
- package/src/components/common/dropdown/SelectMenuControl.tsx +23 -0
- package/src/components/common/dropdown/SelectMenuOptions.tsx +38 -0
- package/src/components/common/dropdown/menuPortalConstants.ts +11 -0
- package/src/components/common/dropdown/menuTypes.ts +71 -0
- package/src/components/common/dropdown/menuViewportPosition.test.ts +139 -0
- package/src/components/common/dropdown/menuViewportPosition.ts +122 -0
- package/src/components/common/dropdown/selectMenuLayout.test.ts +42 -0
- package/src/components/common/dropdown/selectMenuLayout.ts +123 -0
- package/src/components/common/dropdown/useMenuAnchorPosition.ts +109 -0
- package/src/components/common/dropdown/useSelectMenuAnchor.ts +30 -0
- package/src/components/common/evidence/StructuredEvidenceView.test.tsx +77 -0
- package/src/components/common/evidence/StructuredEvidenceView.tsx +312 -0
- package/src/components/common/evidence/index.ts +13 -0
- package/src/components/common/feedback/Badge.tsx +33 -0
- package/src/components/common/feedback/CapabilityPills.tsx +36 -0
- package/src/components/common/feedback/EmptyState.tsx +132 -0
- package/src/components/common/feedback/InfoHint.tsx +67 -0
- package/src/components/common/feedback/InlineBanner.tsx +82 -0
- package/src/components/common/feedback/PlatformChip.tsx +104 -0
- package/src/components/common/feedback/QuietPill.tsx +75 -0
- package/src/components/common/feedback/WorkProgressPanel.tsx +156 -0
- package/src/components/common/feedback/index.ts +33 -0
- package/src/components/common/inputs/BareInput.tsx +31 -0
- package/src/components/common/inputs/BareTextarea.tsx +10 -0
- package/src/components/common/inputs/Checkbox.tsx +13 -0
- package/src/components/common/inputs/FieldControlShell.tsx +49 -0
- package/src/components/common/inputs/FormField.tsx +40 -0
- package/src/components/common/inputs/HybridSearchField.tsx +280 -0
- package/src/components/common/inputs/InlineComposer.tsx +197 -0
- package/src/components/common/inputs/PaletteCirclePicker.tsx +26 -0
- package/src/components/common/inputs/PaletteDropdown.tsx +413 -0
- package/src/components/common/inputs/Radio.tsx +19 -0
- package/src/components/common/inputs/SearchField.tsx +128 -0
- package/src/components/common/inputs/SelectField.tsx +169 -0
- package/src/components/common/inputs/SurfacePalettePicker.tsx +54 -0
- package/src/components/common/inputs/TextAreaField.tsx +22 -0
- package/src/components/common/inputs/TextField.tsx +51 -0
- package/src/components/common/inputs/ToggleSwitch.tsx +110 -0
- package/src/components/common/inputs/WorkspacePicker.tsx +349 -0
- package/src/components/common/inputs/fieldStyles.ts +137 -0
- package/src/components/common/layout/PanelGroup.tsx +479 -0
- package/src/components/common/layout/index.ts +31 -0
- package/src/components/common/layout/panelLayoutConstants.ts +7 -0
- package/src/components/common/layout/panelLayoutPersistence.ts +35 -0
- package/src/components/common/layout/panelLayoutState.test.ts +38 -0
- package/src/components/common/layout/panelLayoutState.ts +174 -0
- package/src/components/common/layout/panelLayoutTypes.ts +19 -0
- package/src/components/common/layout/tabs/Tabs.tsx +136 -0
- package/src/components/common/lists/listRowStyles.ts +32 -0
- package/src/components/common/lists/quiet-ledger/QuietActivityList.tsx +64 -0
- package/src/components/common/lists/quiet-ledger/QuietLedgerRow.tsx +119 -0
- package/src/components/common/lists/quiet-ledger/index.ts +9 -0
- package/src/components/common/lists/reorderable/DragHandle.tsx +65 -0
- package/src/components/common/lists/reorderable/ReorderableList.tsx +280 -0
- package/src/components/common/lists/reorderable/ReorderableListRow.tsx +102 -0
- package/src/components/common/lists/reorderable/ReorderableSections.tsx +344 -0
- package/src/components/common/lists/reorderable/ReorderableSectionsDemo.tsx +94 -0
- package/src/components/common/lists/reorderable/index.ts +15 -0
- package/src/components/common/lists/reorderable/reorderableUtils.test.ts +28 -0
- package/src/components/common/lists/reorderable/reorderableUtils.ts +23 -0
- package/src/components/common/lists/reorderable/types.ts +40 -0
- package/src/components/common/lists/reorderable/useReorderableDragState.ts +49 -0
- package/src/components/common/media/ImageReferencePicker.tsx +242 -0
- package/src/components/common/menubar/MenuBar.tsx +78 -0
- package/src/components/common/menubar/MenuBarTrigger.tsx +70 -0
- package/src/components/common/narrative/NarrativeMention.tsx +74 -0
- package/src/components/common/navigation/PathBreadcrumbs.tsx +78 -0
- package/src/components/common/navigation/UnderlineTabs.tsx +83 -0
- package/src/components/common/overlays/InstallAppPromptDialog.tsx +59 -0
- package/src/components/common/overlays/Modal.tsx +285 -0
- package/src/components/common/overlays/ModalChromeHeader.tsx +105 -0
- package/src/components/common/overlays/ObjectActionStrip.tsx +80 -0
- package/src/components/common/people/AutoUpdateReviewList.tsx +182 -0
- package/src/components/common/people/EntityList.tsx +122 -0
- package/src/components/common/people/EntityPortrait.tsx +64 -0
- package/src/components/common/people/LinkedDossierList.tsx +99 -0
- package/src/components/common/people/OpportunityList.tsx +94 -0
- package/src/components/common/people/PeopleSourceList.tsx +145 -0
- package/src/components/common/people/RelationshipDossier.tsx +168 -0
- package/src/components/common/people/RelationshipMap.tsx +362 -0
- package/src/components/common/people/index.ts +40 -0
- package/src/components/common/preview/FileAudioPreview.tsx +89 -0
- package/src/components/common/preview/FileImagePreview.tsx +88 -0
- package/src/components/common/preview/FilePdfPreview.tsx +87 -0
- package/src/components/common/preview/FileTextPreview.tsx +96 -0
- package/src/components/common/preview/FileVideoPreview.tsx +87 -0
- package/src/components/common/preview/PlatformFilePreview.tsx +166 -0
- package/src/components/common/preview/previewLayout.ts +27 -0
- package/src/components/common/render/Each.tsx +42 -0
- package/src/components/common/research/EvidenceDossier.tsx +894 -0
- package/src/components/common/research/index.ts +7 -0
- package/src/components/common/tiles/CatalogCard.tsx +116 -0
- package/src/components/common/tiles/Tile.tsx +45 -0
- package/src/components/common/tiles/TileGrid.tsx +13 -0
- package/src/components/common/typography/Heading.tsx +27 -0
- package/src/components/common/typography/Kicker.tsx +30 -0
- package/src/components/common/typography/Text.tsx +80 -0
- package/src/components/credentials/CredentialsPanel.tsx +169 -0
- package/src/components/credentials/credentialsTypes.ts +14 -0
- package/src/components/data/DataChart.tsx +913 -0
- package/src/components/data/dataTable.ts +99 -0
- package/src/components/editor/EditorCommentPromptDialog.tsx +124 -0
- package/src/components/editor/EditorLinkPromptDialog.tsx +65 -0
- package/src/components/print-design/PrintDesignPanel.test.tsx +1446 -0
- package/src/components/print-design/PrintDesignPanel.tsx +3043 -0
- package/src/components/print-design/index.ts +9 -0
- package/src/components/proofing/PagedProofDialog.tsx +453 -0
- package/src/components/proofing/index.ts +4 -0
- package/src/editor/DocumentEditor.tsx +28 -0
- package/src/editor/EditorViewModeToggle.tsx +35 -0
- package/src/editor/index.ts +97 -0
- package/src/editor/toolbarOverlays.ts +8 -0
- package/src/index.ts +209 -0
- package/src/theme/ThemeProvider.tsx +113 -0
- package/src/theme/appAccents.ts +87 -0
- package/src/theme/buildThemeBridgePayload.ts +23 -0
- package/src/theme/composePlatformTheme.test.ts +30 -0
- package/src/theme/composePlatformTheme.ts +23 -0
- package/src/theme/platformFont.d.mts +7 -0
- package/src/theme/platformFont.mjs +20 -0
- package/src/theme/platformFont.ts +6 -0
- package/src/theme/reportsShellChromeSelectors.ts +136 -0
- package/src/theme/styled.d.ts +5 -0
- package/src/theme/surfacePalettes.ts +178 -0
- package/src/theme/surfaceRoleSelectors.ts +113 -0
- package/src/theme/themeVars.ts +13 -0
- package/src/theme/themes/dark.ts +59 -0
- package/src/theme/themes/light.ts +60 -0
- package/src/theme/themes/palette.ts +44 -0
- package/src/theme/themes/shared.ts +68 -0
- package/src/theme/tokens.ts +114 -0
- package/src/theme/utils/GlobalStyles.ts +88 -0
- package/src/theme/utils/appFrameDocumentStyles.d.mts +5 -0
- package/src/theme/utils/appFrameDocumentStyles.mjs +89 -0
- package/src/theme/utils/appFrameDocumentStyles.ts +5 -0
- package/src/theme/utils/applyTheme.ts +50 -0
- package/src/theme/utils/cssVariables.ts +49 -0
- package/src/theme/utils/useInjectThemeIntoIframe.ts +40 -0
- package/src/utils/extensionIconMap.ts +123 -0
- package/src/utils/generalUtils.ts +157 -0
- package/src/writing/DraftAssistantDialog.tsx +279 -0
- package/src/writing/WritingStyleManager.tsx +416 -0
- package/src/writing/condenseWritingStyle.ts +103 -0
- package/src/writing/draftTextWithAgent.ts +134 -0
- package/src/writing/index.ts +39 -0
- package/src/writing/styleStore.ts +32 -0
- package/src/writing/writingStyle.test.ts +122 -0
- package/src/writing/writingStyle.ts +217 -0
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
export type PlatformBridgeEventName =
|
|
2
|
+
import('./events.mjs').PlatformBridgeEventName
|
|
3
|
+
|
|
4
|
+
import type { PlatformThemeMode } from '../theme/tokens.js'
|
|
5
|
+
|
|
6
|
+
/** Shell prefs exposed via `settings.prefs.get` / `settings.prefs.set`. */
|
|
7
|
+
export type PlatformThemePreference = PlatformThemeMode
|
|
8
|
+
|
|
9
|
+
export interface PlatformShellPreferences {
|
|
10
|
+
workingDirectory: string
|
|
11
|
+
theme: PlatformThemePreference
|
|
12
|
+
appSettings?: Record<string, Record<string, unknown>>
|
|
13
|
+
/** Local agent models enabled in the shell model menu. */
|
|
14
|
+
enabledLocalLlmModelIds?: string[]
|
|
15
|
+
/** Low / high agent model tiers from shell settings. */
|
|
16
|
+
agentModelTiers?: {
|
|
17
|
+
lowLevelModelId: string
|
|
18
|
+
highLevelModelId: string
|
|
19
|
+
}
|
|
20
|
+
/** Defaults for new agent sessions per scope. */
|
|
21
|
+
agentSessionDefaults?: {
|
|
22
|
+
global?: Record<string, unknown>
|
|
23
|
+
apps?: Record<string, Record<string, unknown>>
|
|
24
|
+
}
|
|
25
|
+
/** Explicit opt-in switches for unfinished capabilities. */
|
|
26
|
+
betaFeatures?: {
|
|
27
|
+
/** Enables model-backed Pure Render reference-image extraction in app panels. */
|
|
28
|
+
pureRenderVisionExtraction?: boolean
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Host-only workspace tab session (phase 4). Plugin apps should ignore this field.
|
|
32
|
+
*/
|
|
33
|
+
platformWorkspace?: Record<string, unknown>
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface PlatformAppSettingsUpdateRequest {
|
|
37
|
+
appSlug: string
|
|
38
|
+
patch: Record<string, unknown>
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface PlatformThemeBridgePayload {
|
|
42
|
+
mode: PlatformThemeMode
|
|
43
|
+
/** Active surface palette id, omitted when platform default. */
|
|
44
|
+
surfacePaletteId?: string | null
|
|
45
|
+
css: string
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type PlatformFileKind =
|
|
49
|
+
| 'folder'
|
|
50
|
+
| 'image'
|
|
51
|
+
| 'video'
|
|
52
|
+
| 'audio'
|
|
53
|
+
| 'pdf'
|
|
54
|
+
| 'code'
|
|
55
|
+
| 'html'
|
|
56
|
+
| 'markdown'
|
|
57
|
+
| 'spreadsheet'
|
|
58
|
+
| 'data'
|
|
59
|
+
| 'text'
|
|
60
|
+
| 'other'
|
|
61
|
+
|
|
62
|
+
/** Mirrors `PlatformAppManifest` from the shell contracts. */
|
|
63
|
+
export interface PlatformAppManifest {
|
|
64
|
+
id: string
|
|
65
|
+
slug: string
|
|
66
|
+
name: string
|
|
67
|
+
navigationLabel?: string
|
|
68
|
+
productName: string
|
|
69
|
+
kind: string
|
|
70
|
+
description: string
|
|
71
|
+
peopleProviders?: Array<{
|
|
72
|
+
id: string
|
|
73
|
+
label: string
|
|
74
|
+
storage: {
|
|
75
|
+
fileName: string
|
|
76
|
+
contactPaths: Array<{
|
|
77
|
+
path: string
|
|
78
|
+
nameField?: string
|
|
79
|
+
emailField?: string
|
|
80
|
+
}>
|
|
81
|
+
}
|
|
82
|
+
}>
|
|
83
|
+
icon?: string
|
|
84
|
+
source?: 'builtin' | 'plugin'
|
|
85
|
+
pluginId?: string
|
|
86
|
+
pluginRoot?: string
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export interface PlatformPeopleSuggestRequest {
|
|
90
|
+
query: string
|
|
91
|
+
limit?: number
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface PlatformPeopleSuggestion {
|
|
95
|
+
name: string
|
|
96
|
+
email?: string
|
|
97
|
+
sourceAppSlug: string
|
|
98
|
+
sourceLabel: string
|
|
99
|
+
providerId: string
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Mirrors `PlatformShellManifest` from the shell contracts. */
|
|
103
|
+
export interface PlatformShellManifest {
|
|
104
|
+
apps: PlatformAppManifest[]
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Binds one plugin iframe to a shell workspace tab (phase 4+).
|
|
109
|
+
* `resource` is the document/file this tab owns; `null` for app-only tabs.
|
|
110
|
+
*/
|
|
111
|
+
export interface PlatformBridgeViewportBinding {
|
|
112
|
+
tabId: string
|
|
113
|
+
resource: ResourceOpenEvent | null
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface PlatformBridgeReadyMeta {
|
|
117
|
+
version: number
|
|
118
|
+
pluginId: string
|
|
119
|
+
appSlug: string
|
|
120
|
+
methods: string[]
|
|
121
|
+
theme?: PlatformThemeBridgePayload
|
|
122
|
+
/** Per-tab open intent — apps should prefer this over global consume queues. */
|
|
123
|
+
viewport?: PlatformBridgeViewportBinding
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export interface ResourceOpenEvent {
|
|
127
|
+
path: string
|
|
128
|
+
name?: string
|
|
129
|
+
kind?: PlatformFileKind
|
|
130
|
+
sourceAppSlug?: string
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export type RenderProgressPhase =
|
|
134
|
+
| 'loading'
|
|
135
|
+
| 'paginating'
|
|
136
|
+
| 'printing'
|
|
137
|
+
| 'done'
|
|
138
|
+
| 'error'
|
|
139
|
+
|
|
140
|
+
export interface RenderProgress {
|
|
141
|
+
phase: RenderProgressPhase
|
|
142
|
+
pct?: number
|
|
143
|
+
message?: string
|
|
144
|
+
outputPath?: string
|
|
145
|
+
hint?: string
|
|
146
|
+
sourcePath?: string
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export interface RenderPrintHtmlRequest {
|
|
150
|
+
htmlPath: string
|
|
151
|
+
outputPath: string
|
|
152
|
+
basePath?: string
|
|
153
|
+
pageSize?: string
|
|
154
|
+
margins?: string
|
|
155
|
+
loadingMessage?: string
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export interface RenderPagedPreviewRequest {
|
|
159
|
+
htmlPath: string
|
|
160
|
+
basePath?: string
|
|
161
|
+
loadingMessage?: string
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export interface RenderPagedSnapshotRequest {
|
|
165
|
+
htmlPath: string
|
|
166
|
+
outputPath: string
|
|
167
|
+
basePath?: string
|
|
168
|
+
page?: number
|
|
169
|
+
loadingMessage?: string
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export interface RenderPagedSnapshotResult {
|
|
173
|
+
imagePath: string
|
|
174
|
+
page: number
|
|
175
|
+
pageCount: number
|
|
176
|
+
metrics?: RenderPagedSnapshotMetrics
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export interface RenderPagedSnapshotMetrics {
|
|
180
|
+
topGapRatio: number
|
|
181
|
+
bottomGapRatio: number
|
|
182
|
+
usedHeightRatio: number
|
|
183
|
+
pageCount?: number
|
|
184
|
+
problemPage?: number
|
|
185
|
+
figurePage?: number
|
|
186
|
+
imagePage?: number
|
|
187
|
+
captionPage?: number
|
|
188
|
+
headingPage?: number
|
|
189
|
+
blankBeforeFigurePx?: number
|
|
190
|
+
blankBeforeFigureRatio?: number
|
|
191
|
+
blankPageCount?: number
|
|
192
|
+
imageVisible?: boolean
|
|
193
|
+
captionVisible?: boolean
|
|
194
|
+
captionOrphaned?: boolean
|
|
195
|
+
strandedHeading?: boolean | null
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export interface RenderPagedPreviewResult {
|
|
199
|
+
htmlPath: string
|
|
200
|
+
html: string
|
|
201
|
+
pageCount: number
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** Built-in trade-book page sizes (`render.getPrintStylesheet`). */
|
|
205
|
+
export type PrintPageSize = 'A4' | 'A5' | '6x9'
|
|
206
|
+
|
|
207
|
+
export type FileWatchChangeType = 'add' | 'change' | 'unlink'
|
|
208
|
+
|
|
209
|
+
export interface FileWatchChange {
|
|
210
|
+
path: string
|
|
211
|
+
relativePath: string
|
|
212
|
+
type: FileWatchChangeType
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** Plugin bridge `watch.change` payload. */
|
|
216
|
+
export interface WatchChangeEvent extends FileWatchChange {
|
|
217
|
+
rootPath: string
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Result of `catalog.consumePendingOpen` — open intent for **this viewport tab only**.
|
|
222
|
+
* Prefer `PlatformBridgeReadyMeta.viewport.resource` on boot when available.
|
|
223
|
+
*/
|
|
224
|
+
export interface PlatformCatalogConsumePendingOpenResult {
|
|
225
|
+
resource: ResourceOpenEvent | null
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export interface PlatformPluginInstallRequest {
|
|
229
|
+
path: string
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export interface PlatformPluginInstallSummary {
|
|
233
|
+
id: string
|
|
234
|
+
name: string
|
|
235
|
+
rootDir: string
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export interface PlatformPluginInstallResult {
|
|
239
|
+
installed: boolean
|
|
240
|
+
sourcePath: string
|
|
241
|
+
targetPath: string
|
|
242
|
+
plugin: PlatformPluginInstallSummary
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/** Minimal manifest fields for install / create gating in plugin apps. */
|
|
246
|
+
export interface PlatformAppInstallState {
|
|
247
|
+
pluginRoot?: string
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export interface PlatformFileReadPreviewResult {
|
|
251
|
+
path: string
|
|
252
|
+
content: string | null
|
|
253
|
+
truncated: boolean
|
|
254
|
+
encoding: 'utf-8'
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export interface PlatformFileReadBinaryResult {
|
|
258
|
+
path: string
|
|
259
|
+
mimeType: string
|
|
260
|
+
base64: string
|
|
261
|
+
truncated: boolean
|
|
262
|
+
byteLength: number
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export interface PlatformFilePreviewUrlResult {
|
|
266
|
+
path: string
|
|
267
|
+
url: string
|
|
268
|
+
mimeType: string
|
|
269
|
+
byteLength: number
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/** Minimal file entry fields required for inline preview in plugin iframes. */
|
|
273
|
+
export interface PlatformFilePreviewEntry {
|
|
274
|
+
path: string
|
|
275
|
+
name: string
|
|
276
|
+
extension: string
|
|
277
|
+
kind: PlatformFileKind
|
|
278
|
+
isDirectory: boolean
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/** Collection asset index — shell `assets.*`; apps pass `collectionPath`. */
|
|
282
|
+
export type PlatformAssetKind =
|
|
283
|
+
| 'image'
|
|
284
|
+
| 'vector'
|
|
285
|
+
| 'mermaid'
|
|
286
|
+
| 'table'
|
|
287
|
+
| 'math'
|
|
288
|
+
| 'other'
|
|
289
|
+
|
|
290
|
+
export type PlatformAssetOrigin =
|
|
291
|
+
| 'uploaded'
|
|
292
|
+
| 'imported'
|
|
293
|
+
| 'generated'
|
|
294
|
+
| 'derived'
|
|
295
|
+
|
|
296
|
+
export type PlatformAssetSourceType =
|
|
297
|
+
| 'file'
|
|
298
|
+
| 'inline-mermaid'
|
|
299
|
+
| 'inline-table'
|
|
300
|
+
| 'inline-math'
|
|
301
|
+
|
|
302
|
+
export interface PlatformAssetUsage {
|
|
303
|
+
documentPath: string
|
|
304
|
+
title: string
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export interface PlatformAssetSummary {
|
|
308
|
+
id: string
|
|
309
|
+
collectionPath: string
|
|
310
|
+
relativePath: string
|
|
311
|
+
absolutePath: string
|
|
312
|
+
fileName: string
|
|
313
|
+
label: string
|
|
314
|
+
caption?: string
|
|
315
|
+
description?: string
|
|
316
|
+
kind: PlatformAssetKind
|
|
317
|
+
mimeType: string
|
|
318
|
+
byteLength: number
|
|
319
|
+
modifiedAt: string
|
|
320
|
+
usedIn: PlatformAssetUsage[]
|
|
321
|
+
lineageId: string
|
|
322
|
+
versionNumber: number
|
|
323
|
+
parentRelativePath?: string
|
|
324
|
+
origin?: PlatformAssetOrigin
|
|
325
|
+
transformationPrompt?: string
|
|
326
|
+
createdBy?: string
|
|
327
|
+
sourceType?: PlatformAssetSourceType
|
|
328
|
+
sourceCode?: string
|
|
329
|
+
sourceDocumentPath?: string
|
|
330
|
+
sourceAppSlug?: string
|
|
331
|
+
sourceNodeId?: string
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
export interface PlatformAssetContext {
|
|
335
|
+
asset: PlatformAssetSummary
|
|
336
|
+
versions: PlatformAssetSummary[]
|
|
337
|
+
isLatestVersion: boolean
|
|
338
|
+
latestVersionRelativePath: string
|
|
339
|
+
totalVersions: number
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
export interface PlatformAssetListScopedRequest {
|
|
343
|
+
collectionPath: string
|
|
344
|
+
/** Relative paths under `collectionPath` — supplied by the active app. */
|
|
345
|
+
documentFiles: string[]
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
export interface PlatformAssetDeleteRequest {
|
|
349
|
+
collectionPath: string
|
|
350
|
+
relativePath: string
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export interface PlatformAssetUpdateRequest {
|
|
354
|
+
collectionPath: string
|
|
355
|
+
relativePath: string
|
|
356
|
+
label?: string
|
|
357
|
+
caption?: string
|
|
358
|
+
description?: string
|
|
359
|
+
sourceDocumentPath?: string
|
|
360
|
+
sourceAppSlug?: string
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
export interface PlatformAssetSourceUpdateRequest
|
|
364
|
+
extends PlatformAssetUpdateRequest {
|
|
365
|
+
assetId: string
|
|
366
|
+
kind: 'mermaid' | 'table' | 'math'
|
|
367
|
+
sourceCode: string
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
export interface PlatformAssetSourceUpdateScopedRequest
|
|
371
|
+
extends PlatformAssetSourceUpdateRequest {
|
|
372
|
+
/** Relative paths under `collectionPath` — supplied by the active app. */
|
|
373
|
+
documentFiles: string[]
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
export interface PlatformAssetSelection {
|
|
377
|
+
collectionPath: string
|
|
378
|
+
relativePath: string
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
export interface PlatformAssetVersionCreateRequest {
|
|
382
|
+
collectionPath: string
|
|
383
|
+
sourceRelativePath: string
|
|
384
|
+
sourcePath: string
|
|
385
|
+
label?: string
|
|
386
|
+
caption?: string
|
|
387
|
+
description?: string
|
|
388
|
+
transformationPrompt?: string
|
|
389
|
+
createdBy?: string
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
export interface PlatformAssetReferenceSwapRequest {
|
|
393
|
+
collectionPath: string
|
|
394
|
+
fromRelativePath: string
|
|
395
|
+
toRelativePath: string
|
|
396
|
+
scope: 'document' | 'collection'
|
|
397
|
+
documentFile?: string
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
export interface PlatformAssetReferenceSwapScopedRequest
|
|
401
|
+
extends PlatformAssetReferenceSwapRequest {
|
|
402
|
+
/** Relative paths under `collectionPath` — supplied by the active app. */
|
|
403
|
+
documentFiles: string[]
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
export interface PlatformAssetReferenceSwapResult {
|
|
407
|
+
updatedDocuments: number
|
|
408
|
+
updatedReferences: number
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
export interface PlatformAssetTransformRequest {
|
|
412
|
+
collectionPath?: string
|
|
413
|
+
sourceRelativePath?: string
|
|
414
|
+
prompt: string
|
|
415
|
+
label?: string
|
|
416
|
+
createdBy?: string
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
export interface PlatformAssetGetContextRequest {
|
|
420
|
+
collectionPath: string
|
|
421
|
+
relativePath: string
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
export type PlatformBridgeEventHandler = (payload: unknown) => void
|
|
425
|
+
|
|
426
|
+
export interface PlatformBridgeClient {
|
|
427
|
+
waitForReady(): Promise<PlatformBridgeReadyMeta>
|
|
428
|
+
call<T = unknown>(method: string, args?: unknown[]): Promise<T>
|
|
429
|
+
onEvent(
|
|
430
|
+
name: PlatformBridgeEventName | string,
|
|
431
|
+
handler: PlatformBridgeEventHandler,
|
|
432
|
+
): () => void
|
|
433
|
+
offEvent(
|
|
434
|
+
name: PlatformBridgeEventName | string,
|
|
435
|
+
handler: PlatformBridgeEventHandler,
|
|
436
|
+
): void
|
|
437
|
+
getMethods(): string[]
|
|
438
|
+
ping(): Promise<unknown>
|
|
439
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { WatchChangeEvent } from './types.js'
|
|
2
|
+
|
|
3
|
+
export function watchStart(rootPath: string): Promise<void>
|
|
4
|
+
|
|
5
|
+
export function watchStop(rootPath: string): Promise<void>
|
|
6
|
+
|
|
7
|
+
export function onWatchChange(
|
|
8
|
+
listener: (payload: WatchChangeEvent) => void,
|
|
9
|
+
): () => void
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { bridge } from './client.mjs'
|
|
2
|
+
import { PLATFORM_BRIDGE_EVENTS } from './events.mjs'
|
|
3
|
+
import { PLATFORM_BRIDGE_METHODS } from './methods.mjs'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Start watching a directory for debounced filesystem events.
|
|
7
|
+
* Requires `filesystem` permission.
|
|
8
|
+
*
|
|
9
|
+
* @param {string} rootPath Absolute path to watch
|
|
10
|
+
* @returns {Promise<void>}
|
|
11
|
+
*/
|
|
12
|
+
export async function watchStart(rootPath) {
|
|
13
|
+
return bridge.call(PLATFORM_BRIDGE_METHODS.WATCH_START, [rootPath])
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Stop watching a directory for this plugin tab.
|
|
18
|
+
*
|
|
19
|
+
* @param {string} rootPath Same absolute path passed to watchStart
|
|
20
|
+
* @returns {Promise<void>}
|
|
21
|
+
*/
|
|
22
|
+
export async function watchStop(rootPath) {
|
|
23
|
+
return bridge.call(PLATFORM_BRIDGE_METHODS.WATCH_STOP, [rootPath])
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Subscribe to watch.change events for paths this tab is watching.
|
|
28
|
+
*
|
|
29
|
+
* @param {(payload: import('./types.js').WatchChangeEvent) => void} listener
|
|
30
|
+
* @returns {() => void} unsubscribe
|
|
31
|
+
*/
|
|
32
|
+
export function onWatchChange(listener) {
|
|
33
|
+
return bridge.onEvent(PLATFORM_BRIDGE_EVENTS.WATCH_CHANGE, listener)
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { onWatchChange, watchStart, watchStop } from './watch.mjs'
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export type PlatformScreenCaptureMode = 'content' | 'ui'
|
|
2
|
+
|
|
3
|
+
export interface PlatformScreenCaptureRect {
|
|
4
|
+
x: number
|
|
5
|
+
y: number
|
|
6
|
+
width: number
|
|
7
|
+
height: number
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface PlatformScreenCaptureOptionChoice {
|
|
11
|
+
value: string
|
|
12
|
+
label: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** A contextual control the overlay renders (e.g. design scope: this/all). */
|
|
16
|
+
export interface PlatformScreenCaptureOption {
|
|
17
|
+
id: string
|
|
18
|
+
label: string
|
|
19
|
+
type: 'toggle' | 'choice'
|
|
20
|
+
choices?: PlatformScreenCaptureOptionChoice[]
|
|
21
|
+
default?: string | boolean
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export type PlatformScreenCaptureOptionValues = Record<string, string | boolean>
|
|
25
|
+
|
|
26
|
+
export interface PlatformScreenCaptureResult {
|
|
27
|
+
/** PNG data URL of the cropped region with the drawn marks composited in. */
|
|
28
|
+
imageDataUrl: string
|
|
29
|
+
/** Selection rect — app-local px in content mode, window px in vibe mode. */
|
|
30
|
+
rect: PlatformScreenCaptureRect
|
|
31
|
+
note: string
|
|
32
|
+
mode: PlatformScreenCaptureMode
|
|
33
|
+
/** True when the user drew pen marks — the agent should focus on them. */
|
|
34
|
+
hasMarks: boolean
|
|
35
|
+
/** Selected values for the contextual option controls, keyed by option id. */
|
|
36
|
+
optionValues: PlatformScreenCaptureOptionValues
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export declare function startScreenCapture(options?: {
|
|
40
|
+
label?: string
|
|
41
|
+
options?: PlatformScreenCaptureOption[]
|
|
42
|
+
}): Promise<PlatformScreenCaptureResult | null>
|
|
43
|
+
|
|
44
|
+
export declare function onScreenCaptureShortcut(listener: () => void): () => void
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { bridge } from './client.mjs'
|
|
2
|
+
import { PLATFORM_BRIDGE_EVENTS } from './events.mjs'
|
|
3
|
+
import { PLATFORM_BRIDGE_METHODS } from './methods.mjs'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Start the shell's chromeless screen-capture overlay. The user drags a region,
|
|
7
|
+
* draws marks, and adds a note; resolves with the cropped annotated image plus
|
|
8
|
+
* the selection rect (app-local px in content mode, window px in vibe mode), or
|
|
9
|
+
* null if cancelled. Requires `agents` permission.
|
|
10
|
+
*
|
|
11
|
+
* @param {{ label?: string, options?: import('./window.d.mts').PlatformScreenCaptureOption[] }} [options]
|
|
12
|
+
* `label` states what the capture transforms (e.g. "book content", "page
|
|
13
|
+
* design"); `options` are contextual controls rendered in the overlay.
|
|
14
|
+
* @returns {Promise<import('./window.d.mts').PlatformScreenCaptureResult | null>}
|
|
15
|
+
*/
|
|
16
|
+
export async function startScreenCapture(options = {}) {
|
|
17
|
+
return bridge.call(PLATFORM_BRIDGE_METHODS.WINDOW_START_SCREEN_CAPTURE, [
|
|
18
|
+
{ label: options.label, options: options.options },
|
|
19
|
+
])
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Subscribe to the window-wide camera shortcut (Cmd/Ctrl+Shift+X), forwarded to
|
|
24
|
+
* the active app. Apps typically respond by opening their default capture.
|
|
25
|
+
*
|
|
26
|
+
* @param {() => void} listener
|
|
27
|
+
* @returns {() => void} unsubscribe
|
|
28
|
+
*/
|
|
29
|
+
export function onScreenCaptureShortcut(listener) {
|
|
30
|
+
return bridge.onEvent(PLATFORM_BRIDGE_EVENTS.WINDOW_CAMERA_SHORTCUT, () => {
|
|
31
|
+
listener()
|
|
32
|
+
})
|
|
33
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../components/chrome/index.js'
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { act } from 'react'
|
|
2
|
+
import { createRoot, type Root } from 'react-dom/client'
|
|
3
|
+
import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
4
|
+
import { AccessibilityReviewDialog } from './AccessibilityReviewDialog.js'
|
|
5
|
+
|
|
6
|
+
function render(ui: React.ReactElement): {
|
|
7
|
+
container: HTMLDivElement
|
|
8
|
+
root: Root
|
|
9
|
+
} {
|
|
10
|
+
const container = document.createElement('div')
|
|
11
|
+
document.body.appendChild(container)
|
|
12
|
+
const root = createRoot(container)
|
|
13
|
+
act(() => {
|
|
14
|
+
root.render(ui)
|
|
15
|
+
})
|
|
16
|
+
return { container, root }
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function buttonNamed(name: string): HTMLButtonElement {
|
|
20
|
+
const buttons = Array.from(document.querySelectorAll('button'))
|
|
21
|
+
const button = buttons.find(item => item.textContent?.trim() === name)
|
|
22
|
+
if (!(button instanceof HTMLButtonElement)) {
|
|
23
|
+
throw new Error(`Button not found: ${name}`)
|
|
24
|
+
}
|
|
25
|
+
return button
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function changeTextarea(value: string): void {
|
|
29
|
+
const textarea = document.querySelector('textarea')
|
|
30
|
+
if (!(textarea instanceof HTMLTextAreaElement)) {
|
|
31
|
+
throw new Error('Draft textarea not found')
|
|
32
|
+
}
|
|
33
|
+
const valueSetter = Object.getOwnPropertyDescriptor(
|
|
34
|
+
HTMLTextAreaElement.prototype,
|
|
35
|
+
'value',
|
|
36
|
+
)?.set
|
|
37
|
+
act(() => {
|
|
38
|
+
valueSetter?.call(textarea, value)
|
|
39
|
+
textarea.dispatchEvent(new InputEvent('input', { bubbles: true }))
|
|
40
|
+
})
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
afterEach(() => {
|
|
44
|
+
document.body.innerHTML = ''
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
describe('AccessibilityReviewDialog', () => {
|
|
48
|
+
it('lets a reviewer draft, edit, and apply an image alt text fix', () => {
|
|
49
|
+
const onChange = vi.fn()
|
|
50
|
+
const html =
|
|
51
|
+
'<figure><img src="revenue-chart.png"><figcaption>Revenue by quarter</figcaption></figure>'
|
|
52
|
+
|
|
53
|
+
render(
|
|
54
|
+
<AccessibilityReviewDialog
|
|
55
|
+
open
|
|
56
|
+
html={html}
|
|
57
|
+
onClose={() => undefined}
|
|
58
|
+
onChange={onChange}
|
|
59
|
+
/>,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
expect(document.body.textContent).toContain('1 findings')
|
|
63
|
+
expect(document.body.textContent).toContain('Image needs alt text')
|
|
64
|
+
|
|
65
|
+
act(() => {
|
|
66
|
+
buttonNamed('Draft fix').click()
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
const textarea = document.querySelector('textarea')
|
|
70
|
+
expect(textarea).toBeInstanceOf(HTMLTextAreaElement)
|
|
71
|
+
expect((textarea as HTMLTextAreaElement).value).toBe('Revenue by quarter')
|
|
72
|
+
|
|
73
|
+
changeTextarea('Quarterly revenue chart')
|
|
74
|
+
|
|
75
|
+
act(() => {
|
|
76
|
+
buttonNamed('Use alt text').click()
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
expect(onChange).toHaveBeenCalledWith(
|
|
80
|
+
expect.stringContaining('alt="Quarterly revenue chart"'),
|
|
81
|
+
)
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
it('applies safe mechanical fixes without opening a draft editor', () => {
|
|
85
|
+
const onChange = vi.fn()
|
|
86
|
+
const html = '<figure><img src="separator.png"></figure>'
|
|
87
|
+
|
|
88
|
+
render(
|
|
89
|
+
<AccessibilityReviewDialog
|
|
90
|
+
open
|
|
91
|
+
html={html}
|
|
92
|
+
onClose={() => undefined}
|
|
93
|
+
onChange={onChange}
|
|
94
|
+
/>,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
act(() => {
|
|
98
|
+
buttonNamed('Apply fix').click()
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
expect(onChange).toHaveBeenCalledWith(expect.stringContaining('alt=""'))
|
|
102
|
+
expect(document.querySelector('textarea')).toBeNull()
|
|
103
|
+
})
|
|
104
|
+
})
|