@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.
Files changed (412) hide show
  1. package/package.json +96 -0
  2. package/src/agents/runtime/agentLiveReducer.test.ts +72 -0
  3. package/src/agents/runtime/agentLiveReducer.ts +139 -0
  4. package/src/agents/runtime/agentRunEventTypes.ts +115 -0
  5. package/src/agents/runtime/contextWindowUsage.test.ts +38 -0
  6. package/src/agents/runtime/contextWindowUsage.ts +25 -0
  7. package/src/agents/runtime/index.ts +24 -0
  8. package/src/agents/runtime/mapAgentMessages.ts +54 -0
  9. package/src/agents/runtime/mapAgentSnapshot.ts +71 -0
  10. package/src/agents/runtime/mergeUsageTurn.ts +23 -0
  11. package/src/agents/runtime/pendingToolCalls.test.ts +85 -0
  12. package/src/agents/runtime/pendingToolCalls.ts +14 -0
  13. package/src/agents/runtime/toolRequiresApproval.ts +20 -0
  14. package/src/agents/runtime/unresolvedToolCalls.ts +42 -0
  15. package/src/bridge/agentModelTiers.ts +50 -0
  16. package/src/bridge/agentToolHandlers.ts +23 -0
  17. package/src/bridge/agentToolHelpers.test.ts +27 -0
  18. package/src/bridge/agentToolHelpers.ts +20 -0
  19. package/src/bridge/agentTypes.ts +294 -0
  20. package/src/bridge/agents.d.mts +113 -0
  21. package/src/bridge/agents.mjs +233 -0
  22. package/src/bridge/agents.ts +62 -0
  23. package/src/bridge/appSettings.d.mts +9 -0
  24. package/src/bridge/appSettings.mjs +18 -0
  25. package/src/bridge/appSettings.ts +4 -0
  26. package/src/bridge/applyThemeFromHost.d.mts +7 -0
  27. package/src/bridge/applyThemeFromHost.mjs +33 -0
  28. package/src/bridge/assets.d.mts +66 -0
  29. package/src/bridge/assets.mjs +121 -0
  30. package/src/bridge/catalog.d.mts +5 -0
  31. package/src/bridge/catalog.mjs +24 -0
  32. package/src/bridge/catalog.ts +1 -0
  33. package/src/bridge/client.d.mts +19 -0
  34. package/src/bridge/client.mjs +147 -0
  35. package/src/bridge/collectionAssetAdapter.ts +63 -0
  36. package/src/bridge/collectionAssets.d.mts +1 -0
  37. package/src/bridge/collectionAssets.mjs +2 -0
  38. package/src/bridge/collectionAssets.ts +1 -0
  39. package/src/bridge/collectionDocumentHtml.test.ts +71 -0
  40. package/src/bridge/collectionDocumentHtml.ts +118 -0
  41. package/src/bridge/collectionImagePaste.test.ts +32 -0
  42. package/src/bridge/collectionImagePaste.ts +130 -0
  43. package/src/bridge/context.mjs +12 -0
  44. package/src/bridge/credentials.mjs +22 -0
  45. package/src/bridge/dialog.d.mts +5 -0
  46. package/src/bridge/dialog.mjs +13 -0
  47. package/src/bridge/events.d.mts +14 -0
  48. package/src/bridge/events.mjs +12 -0
  49. package/src/bridge/filePreviewKind.test.ts +43 -0
  50. package/src/bridge/filePreviewKind.ts +76 -0
  51. package/src/bridge/fs.d.mts +41 -0
  52. package/src/bridge/fs.mjs +82 -0
  53. package/src/bridge/fs.test.ts +16 -0
  54. package/src/bridge/fs.ts +10 -0
  55. package/src/bridge/index.ts +12 -0
  56. package/src/bridge/inlinePreview.d.mts +35 -0
  57. package/src/bridge/inlinePreview.mjs +99 -0
  58. package/src/bridge/inlinePreview.test.ts +56 -0
  59. package/src/bridge/inlinePreview.ts +13 -0
  60. package/src/bridge/methods.d.mts +115 -0
  61. package/src/bridge/methods.mjs +132 -0
  62. package/src/bridge/os.d.mts +11 -0
  63. package/src/bridge/os.mjs +26 -0
  64. package/src/bridge/plugins.d.mts +9 -0
  65. package/src/bridge/plugins.mjs +31 -0
  66. package/src/bridge/plugins.ts +5 -0
  67. package/src/bridge/preferences.d.mts +7 -0
  68. package/src/bridge/preferences.mjs +17 -0
  69. package/src/bridge/preferences.ts +13 -0
  70. package/src/bridge/printDocument.test.ts +47 -0
  71. package/src/bridge/printDocument.ts +75 -0
  72. package/src/bridge/pureRender/adapters.test.ts +144 -0
  73. package/src/bridge/pureRender/adapters.ts +175 -0
  74. package/src/bridge/pureRender/assets.test.ts +44 -0
  75. package/src/bridge/pureRender/base.css +76 -0
  76. package/src/bridge/pureRender/compiler.test.ts +279 -0
  77. package/src/bridge/pureRender/compiler.ts +660 -0
  78. package/src/bridge/pureRender/document.test.ts +283 -0
  79. package/src/bridge/pureRender/document.ts +35 -0
  80. package/src/bridge/pureRender/extraction.test.ts +432 -0
  81. package/src/bridge/pureRender/extraction.ts +1023 -0
  82. package/src/bridge/pureRender/flow.css +3 -0
  83. package/src/bridge/pureRender/index.ts +66 -0
  84. package/src/bridge/pureRender/normalize.test.ts +442 -0
  85. package/src/bridge/pureRender/normalize.ts +682 -0
  86. package/src/bridge/pureRender/presets.ts +365 -0
  87. package/src/bridge/pureRender/profiles/book.css +19 -0
  88. package/src/bridge/pureRender/profiles/manuscript.css +11 -0
  89. package/src/bridge/pureRender/profiles/writer.css +10 -0
  90. package/src/bridge/pureRender/reset.css +5 -0
  91. package/src/bridge/pureRender/samples.ts +94 -0
  92. package/src/bridge/pureRender/styles.ts +164 -0
  93. package/src/bridge/pureRender/theme.test.ts +53 -0
  94. package/src/bridge/pureRender/theme.ts +258 -0
  95. package/src/bridge/pureRender/tokens/default.css +36 -0
  96. package/src/bridge/pureRender/tokens/default.json +32 -0
  97. package/src/bridge/pureRender/types.ts +264 -0
  98. package/src/bridge/pureRender/visualLayoutInspection.test.ts +57 -0
  99. package/src/bridge/pureRender/visualLayoutInspection.ts +161 -0
  100. package/src/bridge/react/useDebouncedEffect.ts +21 -0
  101. package/src/bridge/react/useIpc.tsx +75 -0
  102. package/src/bridge/react/usePlatformAgentRunLiveState.tsx +78 -0
  103. package/src/bridge/react/usePlatformAgentSessionDrive.tsx +729 -0
  104. package/src/bridge/react/usePlatformAgentSessions.tsx +60 -0
  105. package/src/bridge/react/usePlatformAgentTools.tsx +82 -0
  106. package/src/bridge/react/usePlatformAppManifest.tsx +32 -0
  107. package/src/bridge/react/usePlatformBridge.tsx +56 -0
  108. package/src/bridge/react/usePlatformDeepLink.tsx +57 -0
  109. package/src/bridge/react/usePlatformFileBinaryDataUrl.tsx +54 -0
  110. package/src/bridge/react/usePlatformFilePreview.tsx +92 -0
  111. package/src/bridge/react/usePlatformPreferences.tsx +77 -0
  112. package/src/bridge/react/usePlatformThemeDocumentAttrs.ts +35 -0
  113. package/src/bridge/react/usePlatformThemeFromBridge.tsx +16 -0
  114. package/src/bridge/react/usePlatformViewportResource.test.tsx +106 -0
  115. package/src/bridge/react/usePlatformViewportResource.tsx +72 -0
  116. package/src/bridge/react/useScheduledTask.tsx +59 -0
  117. package/src/bridge/render.d.mts +31 -0
  118. package/src/bridge/render.mjs +62 -0
  119. package/src/bridge/render.ts +8 -0
  120. package/src/bridge/screenAnnotation.test.ts +103 -0
  121. package/src/bridge/screenAnnotation.ts +269 -0
  122. package/src/bridge/theme.d.mts +3 -0
  123. package/src/bridge/theme.mjs +9 -0
  124. package/src/bridge/types.ts +439 -0
  125. package/src/bridge/watch.d.mts +9 -0
  126. package/src/bridge/watch.mjs +34 -0
  127. package/src/bridge/watch.ts +1 -0
  128. package/src/bridge/window.d.mts +44 -0
  129. package/src/bridge/window.mjs +33 -0
  130. package/src/chrome/index.ts +1 -0
  131. package/src/components/accessibility/AccessibilityReviewDialog.test.tsx +104 -0
  132. package/src/components/accessibility/AccessibilityReviewDialog.tsx +350 -0
  133. package/src/components/accessibility/accessibilityReview.test.ts +101 -0
  134. package/src/components/accessibility/accessibilityReview.ts +639 -0
  135. package/src/components/accessibility/index.ts +16 -0
  136. package/src/components/agent-feedback/ScreenAnnotationAgentDialog.tsx +509 -0
  137. package/src/components/agent-feedback/index.ts +5 -0
  138. package/src/components/agents/AgentComposer.tsx +34 -0
  139. package/src/components/agents/AgentContextUsageBar.tsx +127 -0
  140. package/src/components/agents/AgentDrawerPanel.tsx +82 -0
  141. package/src/components/agents/AgentMarkdown.tsx +12 -0
  142. package/src/components/agents/AgentMessageBubble.tsx +82 -0
  143. package/src/components/agents/AgentMessageList.tsx +47 -0
  144. package/src/components/agents/AgentModelMenu.tsx +55 -0
  145. package/src/components/agents/AgentThinkingBlock.tsx +66 -0
  146. package/src/components/agents/AgentToolApprovalActions.tsx +65 -0
  147. package/src/components/agents/AgentToolCallCard.tsx +26 -0
  148. package/src/components/agents/AgentToolPendingList.tsx +39 -0
  149. package/src/components/agents/AgentToolPendingReview.tsx +118 -0
  150. package/src/components/agents/agentPanelStyles.ts +79 -0
  151. package/src/components/agents/agentTypes.ts +96 -0
  152. package/src/components/agents/formatToolCallArguments.test.ts +16 -0
  153. package/src/components/agents/formatToolCallArguments.ts +9 -0
  154. package/src/components/agents/index.ts +40 -0
  155. package/src/components/assets/AssetLibraryDialog.tsx +5 -0
  156. package/src/components/assets/asset-library/AssetLibraryDialog.tsx +43 -0
  157. package/src/components/assets/asset-library/AssetLibraryWorkspace.tsx +54 -0
  158. package/src/components/assets/asset-library/detail/AssetLibraryDetailActions.tsx +68 -0
  159. package/src/components/assets/asset-library/detail/AssetLibraryDetailHeader.tsx +56 -0
  160. package/src/components/assets/asset-library/detail/AssetLibraryDetailPane.tsx +90 -0
  161. package/src/components/assets/asset-library/detail/AssetLibraryDetailPreview.tsx +67 -0
  162. package/src/components/assets/asset-library/detail/AssetLibraryInlinePreview.tsx +87 -0
  163. package/src/components/assets/asset-library/detail/AssetLibraryInlineSourceField.tsx +29 -0
  164. package/src/components/assets/asset-library/detail/AssetLibraryMetadataFields.tsx +34 -0
  165. package/src/components/assets/asset-library/detail/AssetLibraryUsagePanel.tsx +46 -0
  166. package/src/components/assets/asset-library/detail/AssetLibraryVersionsPanel.tsx +145 -0
  167. package/src/components/assets/asset-library/helpers/assetKind.ts +74 -0
  168. package/src/components/assets/asset-library/helpers.ts +41 -0
  169. package/src/components/assets/asset-library/hooks/useAssetDetailDraft.ts +81 -0
  170. package/src/components/assets/asset-library/hooks/useAssetLibraryDialog.ts +233 -0
  171. package/src/components/assets/asset-library/hooks/useAssetLibraryMutations.ts +266 -0
  172. package/src/components/assets/asset-library/hooks/useAssetLibrarySelectionSync.ts +24 -0
  173. package/src/components/assets/asset-library/hooks/useAssetLibraryVersions.ts +145 -0
  174. package/src/components/assets/asset-library/hooks/useInlineAssetPreview.ts +44 -0
  175. package/src/components/assets/asset-library/index.ts +19 -0
  176. package/src/components/assets/asset-library/layout/assetLibraryLayout.ts +201 -0
  177. package/src/components/assets/asset-library/shared/fieldStyles.ts +62 -0
  178. package/src/components/assets/asset-library/sidebar/AssetLibraryFilterPills.tsx +89 -0
  179. package/src/components/assets/asset-library/sidebar/AssetLibraryList.tsx +91 -0
  180. package/src/components/assets/asset-library/sidebar/AssetLibraryListRow.tsx +99 -0
  181. package/src/components/assets/asset-library/sidebar/AssetLibraryListStatus.tsx +24 -0
  182. package/src/components/assets/asset-library/sidebar/AssetLibrarySidebar.tsx +48 -0
  183. package/src/components/assets/asset-library/sidebar/AssetLibrarySidebarActions.tsx +38 -0
  184. package/src/components/assets/asset-library/sidebar/AssetLibrarySidebarToolbar.tsx +78 -0
  185. package/src/components/assets/asset-library/sidebar/AssetListThumbnail.tsx +86 -0
  186. package/src/components/assets/asset-library/types.ts +128 -0
  187. package/src/components/assets/asset-library/utils/assetLibraryUtils.ts +181 -0
  188. package/src/components/assets/asset-library/utils/pathBasename.ts +5 -0
  189. package/src/components/assets/asset-library/utils/sanitizeUploadFileName.ts +7 -0
  190. package/src/components/assets/asset-library/utils/uploadCollectionAsset.ts +52 -0
  191. package/src/components/chrome/OverlayActionCapsule.test.tsx +82 -0
  192. package/src/components/chrome/OverlayActionCapsule.tsx +90 -0
  193. package/src/components/chrome/PanelTabStrip.tsx +113 -0
  194. package/src/components/chrome/PlatformIcon.tsx +27 -0
  195. package/src/components/chrome/PureAppWordmark.tsx +89 -0
  196. package/src/components/chrome/ShellWindowControls.tsx +51 -0
  197. package/src/components/chrome/ThemeModeButton.tsx +16 -0
  198. package/src/components/chrome/Titlebar.tsx +79 -0
  199. package/src/components/chrome/WorkspaceTabStrip.tsx +300 -0
  200. package/src/components/chrome/index.ts +31 -0
  201. package/src/components/chrome/workspaceTabTypes.ts +29 -0
  202. package/src/components/common/buttons/Button.tsx +241 -0
  203. package/src/components/common/buttons/ChoiceChip.tsx +73 -0
  204. package/src/components/common/buttons/CleanButton.tsx +34 -0
  205. package/src/components/common/buttons/IconButton.tsx +89 -0
  206. package/src/components/common/buttons/QuietAction.tsx +29 -0
  207. package/src/components/common/buttons/SegmentedControl.tsx +67 -0
  208. package/src/components/common/buttons/TextActionButton.tsx +55 -0
  209. package/src/components/common/buttons/TextLink.tsx +38 -0
  210. package/src/components/common/canvas/CanvasElementFrame.test.tsx +79 -0
  211. package/src/components/common/canvas/CanvasElementFrame.tsx +182 -0
  212. package/src/components/common/canvas/canvasGeometry.test.ts +66 -0
  213. package/src/components/common/canvas/canvasGeometry.ts +133 -0
  214. package/src/components/common/canvas/index.ts +27 -0
  215. package/src/components/common/canvas/useCanvasDragResize.test.tsx +152 -0
  216. package/src/components/common/canvas/useCanvasDragResize.ts +161 -0
  217. package/src/components/common/chat/ChatAssistantMessage.tsx +81 -0
  218. package/src/components/common/chat/ChatBox.tsx +189 -0
  219. package/src/components/common/chat/ChatMarkdown.tsx +109 -0
  220. package/src/components/common/chat/ChatModelMenu.tsx +258 -0
  221. package/src/components/common/chat/ChatStatusRow.tsx +24 -0
  222. package/src/components/common/chat/ChatThinkingIndicator.tsx +54 -0
  223. package/src/components/common/chat/ChatThread.tsx +59 -0
  224. package/src/components/common/chat/ChatToolRow.tsx +141 -0
  225. package/src/components/common/chat/ChatUserBubble.tsx +45 -0
  226. package/src/components/common/chat/chatUtils.ts +7 -0
  227. package/src/components/common/chat/index.ts +24 -0
  228. package/src/components/common/connections/ConnectionSetup.tsx +529 -0
  229. package/src/components/common/connections/index.ts +26 -0
  230. package/src/components/common/containers/AppFrame.test.tsx +47 -0
  231. package/src/components/common/containers/AppFrame.tsx +65 -0
  232. package/src/components/common/containers/AppHeader.tsx +60 -0
  233. package/src/components/common/containers/AutoFillGrid.tsx +37 -0
  234. package/src/components/common/containers/Collapsible.tsx +43 -0
  235. package/src/components/common/containers/CollapsibleGrid.tsx +174 -0
  236. package/src/components/common/containers/MotionScope.tsx +32 -0
  237. package/src/components/common/containers/PageHeader.tsx +35 -0
  238. package/src/components/common/containers/PanelToolbarHeader.tsx +113 -0
  239. package/src/components/common/containers/QuietDisclosure.tsx +91 -0
  240. package/src/components/common/containers/QuietSurface.tsx +41 -0
  241. package/src/components/common/containers/ScrollPanel.tsx +33 -0
  242. package/src/components/common/containers/StatusBar.tsx +42 -0
  243. package/src/components/common/containers/SurfacePanel.tsx +66 -0
  244. package/src/components/common/containers/ToolbarStrip.tsx +80 -0
  245. package/src/components/common/containers/flex.ts +117 -0
  246. package/src/components/common/containers/useOpenTransition.ts +33 -0
  247. package/src/components/common/context/ContextSelector.tsx +269 -0
  248. package/src/components/common/context/index.ts +7 -0
  249. package/src/components/common/desk/ActionReader.tsx +270 -0
  250. package/src/components/common/desk/ActivityLedger.tsx +143 -0
  251. package/src/components/common/desk/CreationDesk.tsx +139 -0
  252. package/src/components/common/desk/DailyBrief.tsx +160 -0
  253. package/src/components/common/desk/DeskCard.tsx +157 -0
  254. package/src/components/common/desk/index.ts +30 -0
  255. package/src/components/common/dropdown/ContextMenu.tsx +87 -0
  256. package/src/components/common/dropdown/MenuButtonDropdown.tsx +121 -0
  257. package/src/components/common/dropdown/MenuDropdown.tsx +63 -0
  258. package/src/components/common/dropdown/MenuDropdownEntry.tsx +51 -0
  259. package/src/components/common/dropdown/MenuDropdownItem.tsx +82 -0
  260. package/src/components/common/dropdown/MenuDropdownSubmenu.tsx +145 -0
  261. package/src/components/common/dropdown/MenuPanel.tsx +69 -0
  262. package/src/components/common/dropdown/MenuPortal.tsx +162 -0
  263. package/src/components/common/dropdown/MenuPortalLayer.tsx +6 -0
  264. package/src/components/common/dropdown/SelectMenu.tsx +243 -0
  265. package/src/components/common/dropdown/SelectMenuControl.tsx +23 -0
  266. package/src/components/common/dropdown/SelectMenuOptions.tsx +38 -0
  267. package/src/components/common/dropdown/menuPortalConstants.ts +11 -0
  268. package/src/components/common/dropdown/menuTypes.ts +71 -0
  269. package/src/components/common/dropdown/menuViewportPosition.test.ts +139 -0
  270. package/src/components/common/dropdown/menuViewportPosition.ts +122 -0
  271. package/src/components/common/dropdown/selectMenuLayout.test.ts +42 -0
  272. package/src/components/common/dropdown/selectMenuLayout.ts +123 -0
  273. package/src/components/common/dropdown/useMenuAnchorPosition.ts +109 -0
  274. package/src/components/common/dropdown/useSelectMenuAnchor.ts +30 -0
  275. package/src/components/common/evidence/StructuredEvidenceView.test.tsx +77 -0
  276. package/src/components/common/evidence/StructuredEvidenceView.tsx +312 -0
  277. package/src/components/common/evidence/index.ts +13 -0
  278. package/src/components/common/feedback/Badge.tsx +33 -0
  279. package/src/components/common/feedback/CapabilityPills.tsx +36 -0
  280. package/src/components/common/feedback/EmptyState.tsx +132 -0
  281. package/src/components/common/feedback/InfoHint.tsx +67 -0
  282. package/src/components/common/feedback/InlineBanner.tsx +82 -0
  283. package/src/components/common/feedback/PlatformChip.tsx +104 -0
  284. package/src/components/common/feedback/QuietPill.tsx +75 -0
  285. package/src/components/common/feedback/WorkProgressPanel.tsx +156 -0
  286. package/src/components/common/feedback/index.ts +33 -0
  287. package/src/components/common/inputs/BareInput.tsx +31 -0
  288. package/src/components/common/inputs/BareTextarea.tsx +10 -0
  289. package/src/components/common/inputs/Checkbox.tsx +13 -0
  290. package/src/components/common/inputs/FieldControlShell.tsx +49 -0
  291. package/src/components/common/inputs/FormField.tsx +40 -0
  292. package/src/components/common/inputs/HybridSearchField.tsx +280 -0
  293. package/src/components/common/inputs/InlineComposer.tsx +197 -0
  294. package/src/components/common/inputs/PaletteCirclePicker.tsx +26 -0
  295. package/src/components/common/inputs/PaletteDropdown.tsx +413 -0
  296. package/src/components/common/inputs/Radio.tsx +19 -0
  297. package/src/components/common/inputs/SearchField.tsx +128 -0
  298. package/src/components/common/inputs/SelectField.tsx +169 -0
  299. package/src/components/common/inputs/SurfacePalettePicker.tsx +54 -0
  300. package/src/components/common/inputs/TextAreaField.tsx +22 -0
  301. package/src/components/common/inputs/TextField.tsx +51 -0
  302. package/src/components/common/inputs/ToggleSwitch.tsx +110 -0
  303. package/src/components/common/inputs/WorkspacePicker.tsx +349 -0
  304. package/src/components/common/inputs/fieldStyles.ts +137 -0
  305. package/src/components/common/layout/PanelGroup.tsx +479 -0
  306. package/src/components/common/layout/index.ts +31 -0
  307. package/src/components/common/layout/panelLayoutConstants.ts +7 -0
  308. package/src/components/common/layout/panelLayoutPersistence.ts +35 -0
  309. package/src/components/common/layout/panelLayoutState.test.ts +38 -0
  310. package/src/components/common/layout/panelLayoutState.ts +174 -0
  311. package/src/components/common/layout/panelLayoutTypes.ts +19 -0
  312. package/src/components/common/layout/tabs/Tabs.tsx +136 -0
  313. package/src/components/common/lists/listRowStyles.ts +32 -0
  314. package/src/components/common/lists/quiet-ledger/QuietActivityList.tsx +64 -0
  315. package/src/components/common/lists/quiet-ledger/QuietLedgerRow.tsx +119 -0
  316. package/src/components/common/lists/quiet-ledger/index.ts +9 -0
  317. package/src/components/common/lists/reorderable/DragHandle.tsx +65 -0
  318. package/src/components/common/lists/reorderable/ReorderableList.tsx +280 -0
  319. package/src/components/common/lists/reorderable/ReorderableListRow.tsx +102 -0
  320. package/src/components/common/lists/reorderable/ReorderableSections.tsx +344 -0
  321. package/src/components/common/lists/reorderable/ReorderableSectionsDemo.tsx +94 -0
  322. package/src/components/common/lists/reorderable/index.ts +15 -0
  323. package/src/components/common/lists/reorderable/reorderableUtils.test.ts +28 -0
  324. package/src/components/common/lists/reorderable/reorderableUtils.ts +23 -0
  325. package/src/components/common/lists/reorderable/types.ts +40 -0
  326. package/src/components/common/lists/reorderable/useReorderableDragState.ts +49 -0
  327. package/src/components/common/media/ImageReferencePicker.tsx +242 -0
  328. package/src/components/common/menubar/MenuBar.tsx +78 -0
  329. package/src/components/common/menubar/MenuBarTrigger.tsx +70 -0
  330. package/src/components/common/narrative/NarrativeMention.tsx +74 -0
  331. package/src/components/common/navigation/PathBreadcrumbs.tsx +78 -0
  332. package/src/components/common/navigation/UnderlineTabs.tsx +83 -0
  333. package/src/components/common/overlays/InstallAppPromptDialog.tsx +59 -0
  334. package/src/components/common/overlays/Modal.tsx +285 -0
  335. package/src/components/common/overlays/ModalChromeHeader.tsx +105 -0
  336. package/src/components/common/overlays/ObjectActionStrip.tsx +80 -0
  337. package/src/components/common/people/AutoUpdateReviewList.tsx +182 -0
  338. package/src/components/common/people/EntityList.tsx +122 -0
  339. package/src/components/common/people/EntityPortrait.tsx +64 -0
  340. package/src/components/common/people/LinkedDossierList.tsx +99 -0
  341. package/src/components/common/people/OpportunityList.tsx +94 -0
  342. package/src/components/common/people/PeopleSourceList.tsx +145 -0
  343. package/src/components/common/people/RelationshipDossier.tsx +168 -0
  344. package/src/components/common/people/RelationshipMap.tsx +362 -0
  345. package/src/components/common/people/index.ts +40 -0
  346. package/src/components/common/preview/FileAudioPreview.tsx +89 -0
  347. package/src/components/common/preview/FileImagePreview.tsx +88 -0
  348. package/src/components/common/preview/FilePdfPreview.tsx +87 -0
  349. package/src/components/common/preview/FileTextPreview.tsx +96 -0
  350. package/src/components/common/preview/FileVideoPreview.tsx +87 -0
  351. package/src/components/common/preview/PlatformFilePreview.tsx +166 -0
  352. package/src/components/common/preview/previewLayout.ts +27 -0
  353. package/src/components/common/render/Each.tsx +42 -0
  354. package/src/components/common/research/EvidenceDossier.tsx +894 -0
  355. package/src/components/common/research/index.ts +7 -0
  356. package/src/components/common/tiles/CatalogCard.tsx +116 -0
  357. package/src/components/common/tiles/Tile.tsx +45 -0
  358. package/src/components/common/tiles/TileGrid.tsx +13 -0
  359. package/src/components/common/typography/Heading.tsx +27 -0
  360. package/src/components/common/typography/Kicker.tsx +30 -0
  361. package/src/components/common/typography/Text.tsx +80 -0
  362. package/src/components/credentials/CredentialsPanel.tsx +169 -0
  363. package/src/components/credentials/credentialsTypes.ts +14 -0
  364. package/src/components/data/DataChart.tsx +913 -0
  365. package/src/components/data/dataTable.ts +99 -0
  366. package/src/components/editor/EditorCommentPromptDialog.tsx +124 -0
  367. package/src/components/editor/EditorLinkPromptDialog.tsx +65 -0
  368. package/src/components/print-design/PrintDesignPanel.test.tsx +1446 -0
  369. package/src/components/print-design/PrintDesignPanel.tsx +3043 -0
  370. package/src/components/print-design/index.ts +9 -0
  371. package/src/components/proofing/PagedProofDialog.tsx +453 -0
  372. package/src/components/proofing/index.ts +4 -0
  373. package/src/editor/DocumentEditor.tsx +28 -0
  374. package/src/editor/EditorViewModeToggle.tsx +35 -0
  375. package/src/editor/index.ts +97 -0
  376. package/src/editor/toolbarOverlays.ts +8 -0
  377. package/src/index.ts +209 -0
  378. package/src/theme/ThemeProvider.tsx +113 -0
  379. package/src/theme/appAccents.ts +87 -0
  380. package/src/theme/buildThemeBridgePayload.ts +23 -0
  381. package/src/theme/composePlatformTheme.test.ts +30 -0
  382. package/src/theme/composePlatformTheme.ts +23 -0
  383. package/src/theme/platformFont.d.mts +7 -0
  384. package/src/theme/platformFont.mjs +20 -0
  385. package/src/theme/platformFont.ts +6 -0
  386. package/src/theme/reportsShellChromeSelectors.ts +136 -0
  387. package/src/theme/styled.d.ts +5 -0
  388. package/src/theme/surfacePalettes.ts +178 -0
  389. package/src/theme/surfaceRoleSelectors.ts +113 -0
  390. package/src/theme/themeVars.ts +13 -0
  391. package/src/theme/themes/dark.ts +59 -0
  392. package/src/theme/themes/light.ts +60 -0
  393. package/src/theme/themes/palette.ts +44 -0
  394. package/src/theme/themes/shared.ts +68 -0
  395. package/src/theme/tokens.ts +114 -0
  396. package/src/theme/utils/GlobalStyles.ts +88 -0
  397. package/src/theme/utils/appFrameDocumentStyles.d.mts +5 -0
  398. package/src/theme/utils/appFrameDocumentStyles.mjs +89 -0
  399. package/src/theme/utils/appFrameDocumentStyles.ts +5 -0
  400. package/src/theme/utils/applyTheme.ts +50 -0
  401. package/src/theme/utils/cssVariables.ts +49 -0
  402. package/src/theme/utils/useInjectThemeIntoIframe.ts +40 -0
  403. package/src/utils/extensionIconMap.ts +123 -0
  404. package/src/utils/generalUtils.ts +157 -0
  405. package/src/writing/DraftAssistantDialog.tsx +279 -0
  406. package/src/writing/WritingStyleManager.tsx +416 -0
  407. package/src/writing/condenseWritingStyle.ts +103 -0
  408. package/src/writing/draftTextWithAgent.ts +134 -0
  409. package/src/writing/index.ts +39 -0
  410. package/src/writing/styleStore.ts +32 -0
  411. package/src/writing/writingStyle.test.ts +122 -0
  412. package/src/writing/writingStyle.ts +217 -0
package/src/index.ts ADDED
@@ -0,0 +1,209 @@
1
+ export type { PlatformTheme, PlatformThemeMode } from './theme/tokens.js'
2
+ export type { PlatformThemeShared } from './theme/themes/shared.js'
3
+ export {
4
+ createPlatformTheme,
5
+ platformThemeShared,
6
+ } from './theme/themes/shared.js'
7
+ export { neutral, status } from './theme/themes/palette.js'
8
+ export { zi } from './theme/themeVars.js'
9
+ export { darkTheme } from './theme/themes/dark.js'
10
+ export { lightTheme } from './theme/themes/light.js'
11
+ export {
12
+ PLATFORM_THEME_PREFIX,
13
+ camelToCssVarKey,
14
+ themeToCssVars,
15
+ themeToRootCssBlock,
16
+ } from './theme/utils/cssVariables.js'
17
+ export {
18
+ applyThemeToDocument,
19
+ themeToInlineStyle,
20
+ } from './theme/utils/applyTheme.js'
21
+ export {
22
+ composePlatformTheme,
23
+ type PlatformThemeComposition,
24
+ } from './theme/composePlatformTheme.js'
25
+ export { buildThemeBridgePayload } from './theme/buildThemeBridgePayload.js'
26
+ export {
27
+ SURFACE_PALETTES,
28
+ SURFACE_PALETTE_DEFAULT_ID,
29
+ surfacePaletteById,
30
+ surfacePaletteSwatches,
31
+ applySurfacePaletteToTheme,
32
+ type SurfacePalette,
33
+ } from './theme/surfacePalettes.js'
34
+ export {
35
+ CanvasElementFrame,
36
+ type CanvasElementDropSide,
37
+ type CanvasElementFrameProps,
38
+ type CanvasElementPlacement,
39
+ } from './components/common/canvas/index.js'
40
+ export { surfaceRoleSelectors } from './theme/surfaceRoleSelectors.js'
41
+ export { reportsShellChromeSelectors } from './theme/reportsShellChromeSelectors.js'
42
+ export { applyAppAccentToTheme, appAccentForSlug } from './theme/appAccents.js'
43
+ export { GlobalStyles } from './theme/utils/GlobalStyles.js'
44
+ export {
45
+ buildPureRenderHtmlDocument,
46
+ buildBookPureRenderRequest,
47
+ buildWriterPureRenderRequest,
48
+ buildPureRenderStylesheet,
49
+ compilePrintTheme,
50
+ normalizePureRenderHtml,
51
+ themeToPureRenderTokenCss,
52
+ DEFAULT_PURE_RENDER_THEME,
53
+ type PrintStyleProfile,
54
+ type PureRenderMetadata,
55
+ type PureRenderProfile,
56
+ type PureRenderRequest,
57
+ type PureRenderTheme,
58
+ } from './bridge/pureRender/index.js'
59
+ export {
60
+ ThemeProvider,
61
+ usePlatformTheme,
62
+ type PlatformThemeContextValue,
63
+ } from './theme/ThemeProvider.js'
64
+ export { useInjectThemeIntoIframe } from './theme/utils/useInjectThemeIntoIframe.js'
65
+ export {
66
+ OverlayActionCapsule,
67
+ OverlayActionCapsuleButton,
68
+ OverlayActionCapsuleCloseButton,
69
+ OverlayActionCapsuleIconButton,
70
+ PlatformIcon,
71
+ PureAppWordmark,
72
+ ShellWindowControls,
73
+ ThemeModeButton,
74
+ type OverlayActionCapsuleButtonProps,
75
+ type OverlayActionCapsuleCloseButtonProps,
76
+ type OverlayActionCapsuleIconButtonProps,
77
+ type OverlayActionCapsuleProps,
78
+ type PlatformIconProps,
79
+ type PureAppWordmarkProps,
80
+ type ShellWindowControlsProps,
81
+ } from './chrome/index.js'
82
+ export {
83
+ arrIf,
84
+ callOn,
85
+ camelCaseToCapital,
86
+ filterEntries,
87
+ get,
88
+ isFunction,
89
+ isPlainObject,
90
+ mapEntries,
91
+ normalizeExtension,
92
+ safeParse,
93
+ slugToTitle,
94
+ snakeCaseToHuman,
95
+ switchOn,
96
+ toCamelCase,
97
+ toHumanReadable,
98
+ } from './utils/generalUtils.js'
99
+ export {
100
+ extensionIconMap,
101
+ type ExtensionIconMap,
102
+ } from './utils/extensionIconMap.js'
103
+ export {
104
+ DocumentEditor,
105
+ buildExtensions,
106
+ useEditorExtensions,
107
+ resolveEditorContent,
108
+ type BuildExtensionsOptions,
109
+ type DocumentEditorHandle,
110
+ type DocumentEditorProps,
111
+ type EditorFeatures,
112
+ type EditorInputFormat,
113
+ } from './editor/index.js'
114
+ export {
115
+ AppFrame,
116
+ type AppFrameProps,
117
+ } from './components/common/containers/AppFrame.js'
118
+ export {
119
+ AppHeader,
120
+ type AppHeaderProps,
121
+ type PlatformAppManifest,
122
+ } from './components/common/containers/AppHeader.js'
123
+ export {
124
+ ConnectionButtonRow,
125
+ ConnectionFieldGrid,
126
+ ConnectionOptionCard,
127
+ ConnectionOptionGrid,
128
+ ConnectionPanel,
129
+ ConnectionPanelText,
130
+ ConnectionPanelTitle,
131
+ ConnectionPrimaryButton,
132
+ ConnectionSavedCard,
133
+ ConnectionSavedList,
134
+ ConnectionSetupGrid,
135
+ ConnectionSetupPage,
136
+ ConnectionStepList,
137
+ type ConnectionOptionCardProps,
138
+ type ConnectionOptionTone,
139
+ type ConnectionSavedCardProps,
140
+ type ConnectionSetupPageProps,
141
+ type ConnectionStep,
142
+ } from './components/common/connections/index.js'
143
+ export {
144
+ ActionReader,
145
+ ActivityLedger,
146
+ CreationDesk,
147
+ CreationDeskFieldBox,
148
+ CreationDeskFieldTextarea,
149
+ CreationDeskNote,
150
+ CreationDeskRow,
151
+ CreationDeskSection,
152
+ CreationDeskSectionLabel,
153
+ CreationDeskSourceCard,
154
+ CreationDeskSourceHead,
155
+ CreationDeskTextarea,
156
+ DailyBrief,
157
+ DeskCard,
158
+ type ActionReaderAction,
159
+ type ActionReaderProps,
160
+ type ActivityLedgerItem,
161
+ type ActivityLedgerProps,
162
+ type ActivityLedgerTone,
163
+ type CreationDeskProps,
164
+ type DailyBriefProps,
165
+ type DailyBriefSpan,
166
+ type DeskCardProps,
167
+ type DeskCardTone,
168
+ } from './components/common/desk/index.js'
169
+ export {
170
+ ContextSelector,
171
+ type ContextOption,
172
+ type ContextSelection,
173
+ type ContextSelectorProps,
174
+ type ContextSourceKind,
175
+ } from './components/common/context/index.js'
176
+ export {
177
+ Badge,
178
+ CapabilityPills,
179
+ EmptyState,
180
+ InfoHint,
181
+ InlineBanner,
182
+ PlatformChip,
183
+ QuietPill,
184
+ WorkProgressPanel,
185
+ type BadgeProps,
186
+ type BadgeTone,
187
+ type CapabilityPillsProps,
188
+ type EmptyStateAction,
189
+ type EmptyStateProps,
190
+ type EmptyStateTone,
191
+ type EmptyStateVariant,
192
+ type InfoHintProps,
193
+ type InlineBannerProps,
194
+ type InlineBannerVariant,
195
+ type PlatformChipProps,
196
+ type PlatformChipTone,
197
+ type QuietPillProps,
198
+ type QuietPillTone,
199
+ type WorkProgressMetric,
200
+ type WorkProgressPanelProps,
201
+ } from './components/common/feedback/index.js'
202
+ export {
203
+ EvidenceDossier,
204
+ type EvidenceDossierProps,
205
+ type EvidenceFinding,
206
+ type EvidenceSource,
207
+ type EvidenceStrength,
208
+ } from './components/common/research/index.js'
209
+ export * from '@ant-design/icons'
@@ -0,0 +1,113 @@
1
+ import {
2
+ createContext,
3
+ useContext,
4
+ useEffect,
5
+ useMemo,
6
+ useState,
7
+ type ReactNode,
8
+ } from 'react'
9
+ import { ThemeProvider as StyledThemeProvider } from 'styled-components'
10
+ import {
11
+ composePlatformTheme,
12
+ type PlatformThemeComposition,
13
+ } from './composePlatformTheme.js'
14
+ import { darkTheme } from './themes/dark.js'
15
+ import { lightTheme } from './themes/light.js'
16
+ import { PlatformTheme, PlatformThemeMode } from './tokens.js'
17
+ import { injectPlatformFontStylesheet } from './platformFont.js'
18
+ import { applyThemeToDocument } from './utils/applyTheme.js'
19
+ import { MenuPortalLayer } from '../components/common/dropdown/MenuPortalLayer.js'
20
+ import { GlobalStyles } from './utils/GlobalStyles.js'
21
+
22
+ const STORAGE_KEY = 'platform-theme-mode'
23
+
24
+ export interface PlatformThemeContextValue {
25
+ mode: PlatformThemeMode
26
+ theme: PlatformTheme
27
+ setMode: (mode: PlatformThemeMode) => void
28
+ toggleMode: () => void
29
+ }
30
+
31
+ const PlatformThemeContext = createContext<PlatformThemeContextValue | null>(
32
+ null,
33
+ )
34
+
35
+ function readStoredMode(): PlatformThemeMode {
36
+ if (typeof window === 'undefined') return 'dark'
37
+ const stored = window.localStorage.getItem(STORAGE_KEY)
38
+ return stored === 'light' || stored === 'dark' ? stored : 'dark'
39
+ }
40
+
41
+ function themeForMode(mode: PlatformThemeMode): PlatformTheme {
42
+ return mode === 'light' ? lightTheme : darkTheme
43
+ }
44
+
45
+ export interface ThemeProviderProps {
46
+ children: ReactNode
47
+ defaultMode?: PlatformThemeMode
48
+ /** Shell: active app accent + surface palette for the whole desktop window. */
49
+ composition?: PlatformThemeComposition
50
+ }
51
+
52
+ export function ThemeProvider({
53
+ children,
54
+ defaultMode,
55
+ composition,
56
+ }: ThemeProviderProps): React.ReactElement {
57
+ const [mode, setModeState] = useState<PlatformThemeMode>(
58
+ () => defaultMode ?? readStoredMode(),
59
+ )
60
+
61
+ const baseTheme = useMemo(() => themeForMode(mode), [mode])
62
+ const theme = useMemo(
63
+ () => composePlatformTheme(baseTheme, composition),
64
+ [baseTheme, composition?.appSlug, composition?.surfacePaletteId],
65
+ )
66
+
67
+ useEffect(() => {
68
+ injectPlatformFontStylesheet()
69
+ }, [])
70
+
71
+ useEffect(() => {
72
+ applyThemeToDocument(document, theme, {
73
+ surfacePaletteId: composition?.surfacePaletteId,
74
+ })
75
+ }, [composition?.surfacePaletteId, theme])
76
+
77
+ const setMode = (next: PlatformThemeMode): void => {
78
+ setModeState(next)
79
+ window.localStorage.setItem(STORAGE_KEY, next)
80
+ }
81
+
82
+ const toggleMode = (): void => {
83
+ setMode(mode === 'dark' ? 'light' : 'dark')
84
+ }
85
+
86
+ const value = useMemo(
87
+ (): PlatformThemeContextValue => ({
88
+ mode,
89
+ theme,
90
+ setMode,
91
+ toggleMode,
92
+ }),
93
+ [mode, theme],
94
+ )
95
+
96
+ return (
97
+ <PlatformThemeContext.Provider value={value}>
98
+ <StyledThemeProvider theme={theme}>
99
+ <GlobalStyles />
100
+ <MenuPortalLayer />
101
+ {children}
102
+ </StyledThemeProvider>
103
+ </PlatformThemeContext.Provider>
104
+ )
105
+ }
106
+
107
+ export function usePlatformTheme(): PlatformThemeContextValue {
108
+ const ctx = useContext(PlatformThemeContext)
109
+ if (!ctx) {
110
+ throw new Error('usePlatformTheme must be used within ThemeProvider')
111
+ }
112
+ return ctx
113
+ }
@@ -0,0 +1,87 @@
1
+ import type { PlatformTheme } from './tokens.js'
2
+
3
+ /**
4
+ * Per-app accent identity, owned centrally by the shared UI (not by each app).
5
+ *
6
+ * The brand system assigns every app one hue ~28–32° apart so the suite reads
7
+ * as a family; opening a different app should feel like being "somewhere else".
8
+ * The shell derives each app's accent from this map and injects it into that
9
+ * app's theme bridge payload, so no app ships its own brand CSS.
10
+ */
11
+
12
+ /** App slug → accent hue in degrees (PURE_BRAND_SYSTEM §2.2). */
13
+ export const APP_ACCENT_HUES: Record<string, number> = {
14
+ purefiles: 70,
15
+ files: 70,
16
+ writer: 212,
17
+ paper: 200,
18
+ book: 150,
19
+ chat: 232,
20
+ tasks: 8,
21
+ review: 265,
22
+ knowledge: 38,
23
+ slides: 295,
24
+ mail: 232,
25
+ chart: 200,
26
+ reports: 325,
27
+ vibes: 348,
28
+ today: 38,
29
+ calendar: 175,
30
+ pages: 265,
31
+ }
32
+
33
+ /**
34
+ * Pale hues (~30–180°) need a darker accent text so it stays AA-legible on
35
+ * light tints — the one per-app variable besides hue (PURE_BRAND_SYSTEM §2.2).
36
+ */
37
+ function accentTextLightness(hue: number): number {
38
+ return hue >= 30 && hue <= 180 ? 31 : 42
39
+ }
40
+
41
+ export interface DerivedAppAccent {
42
+ accent: string
43
+ accentHover: string
44
+ accentMuted: string
45
+ accentText: string
46
+ }
47
+
48
+ /** Derive the accent token set from a single hue. */
49
+ export function deriveAppAccent(hue: number): DerivedAppAccent {
50
+ return {
51
+ accent: `hsl(${hue}, 50%, 49%)`,
52
+ accentHover: `hsl(${hue}, 50%, 42%)`,
53
+ accentMuted: `hsl(${hue}, 42%, 95%)`,
54
+ accentText: `hsl(${hue}, 48%, ${accentTextLightness(hue)}%)`,
55
+ }
56
+ }
57
+
58
+ export function appAccentForSlug(
59
+ slug: string | null | undefined,
60
+ ): DerivedAppAccent | null {
61
+ if (!slug) return null
62
+ const hue = APP_ACCENT_HUES[slug]
63
+ return typeof hue === 'number' ? deriveAppAccent(hue) : null
64
+ }
65
+
66
+ /**
67
+ * Overlay an app's accent hue onto the platform theme. Applies in both modes —
68
+ * the accent is the app's identity, used structurally (active tab, selection,
69
+ * focus, links), never as a data-label fill.
70
+ */
71
+ export function applyAppAccentToTheme(
72
+ theme: PlatformTheme,
73
+ slug: string | null | undefined,
74
+ ): PlatformTheme {
75
+ const accent = appAccentForSlug(slug)
76
+ if (!accent) return theme
77
+ return {
78
+ ...theme,
79
+ colors: {
80
+ ...theme.colors,
81
+ accent: accent.accent,
82
+ accentHover: accent.accentHover,
83
+ accentMuted: accent.accentMuted,
84
+ focus: accent.accent,
85
+ },
86
+ }
87
+ }
@@ -0,0 +1,23 @@
1
+ import type { PlatformThemeBridgePayload } from '../bridge/types.js'
2
+ import { themeToRootCssBlock } from './utils/cssVariables.js'
3
+ import type { PlatformTheme } from './tokens.js'
4
+ import { SURFACE_PALETTE_DEFAULT_ID } from './surfacePalettes.js'
5
+
6
+ export function normalizeSurfacePaletteId(
7
+ paletteId: string | null | undefined,
8
+ ): string | null {
9
+ if (!paletteId || paletteId === SURFACE_PALETTE_DEFAULT_ID) return null
10
+ return paletteId
11
+ }
12
+
13
+ export function buildThemeBridgePayload(
14
+ theme: PlatformTheme,
15
+ surfacePaletteId?: string | null,
16
+ ): PlatformThemeBridgePayload {
17
+ const normalizedPaletteId = normalizeSurfacePaletteId(surfacePaletteId)
18
+ return {
19
+ mode: theme.mode,
20
+ surfacePaletteId: normalizedPaletteId,
21
+ css: themeToRootCssBlock(theme),
22
+ }
23
+ }
@@ -0,0 +1,30 @@
1
+ import { describe, expect, it } from 'vitest'
2
+ import { composePlatformTheme } from './composePlatformTheme.js'
3
+ import { darkTheme } from './themes/dark.js'
4
+ import { lightTheme } from './themes/light.js'
5
+
6
+ describe('composePlatformTheme', () => {
7
+ it('applies writer accent and ink surface palette in light mode', () => {
8
+ const theme = composePlatformTheme(lightTheme, {
9
+ appSlug: 'writer',
10
+ surfacePaletteId: 'ink',
11
+ })
12
+ expect(theme.colors.appViewport).toBe('#f5f3ef')
13
+ expect(theme.colors.text).toBe('#2e3338')
14
+ expect(theme.colors.accent).toBe('#525a65')
15
+ })
16
+
17
+ it('applies surface palette roles in dark mode', () => {
18
+ const theme = composePlatformTheme(darkTheme, {
19
+ appSlug: 'writer',
20
+ surfacePaletteId: 'sepia',
21
+ })
22
+ expect(theme.colors.appViewport).toBe('#1a1814')
23
+ expect(theme.colors.text).toBe('#ece6dc')
24
+ expect(theme.colors.surface).toBe('#242019')
25
+ })
26
+
27
+ it('returns base theme when composition is empty', () => {
28
+ expect(composePlatformTheme(lightTheme)).toBe(lightTheme)
29
+ })
30
+ })
@@ -0,0 +1,23 @@
1
+ import { applyAppAccentToTheme } from './appAccents.js'
2
+ import { applySurfacePaletteToTheme } from './surfacePalettes.js'
3
+ import type { PlatformTheme } from './tokens.js'
4
+
5
+ export interface PlatformThemeComposition {
6
+ appSlug?: string | null
7
+ surfacePaletteId?: string | null
8
+ }
9
+
10
+ /** Accent + optional surface palette on top of a base light/dark theme. */
11
+ export function composePlatformTheme(
12
+ base: PlatformTheme,
13
+ composition?: PlatformThemeComposition,
14
+ ): PlatformTheme {
15
+ let theme = base
16
+ if (composition?.appSlug) {
17
+ theme = applyAppAccentToTheme(theme, composition.appSlug)
18
+ }
19
+ if (composition?.surfacePaletteId) {
20
+ theme = applySurfacePaletteToTheme(theme, composition.surfacePaletteId)
21
+ }
22
+ return theme
23
+ }
@@ -0,0 +1,7 @@
1
+ export declare const PLATFORM_FONT_FAMILY: '"Schibsted Grotesk", sans-serif'
2
+
3
+ export declare const PLATFORM_FONT_STYLESHEET_ID: 'platform-font-schibsted-grotesk'
4
+
5
+ export declare const PLATFORM_FONT_STYLESHEET_URL: string
6
+
7
+ export function injectPlatformFontStylesheet(doc?: Document): void
@@ -0,0 +1,20 @@
1
+ /** Shared platform UI font — loaded in shell ThemeProvider and AppFrame iframe apps. */
2
+ export const PLATFORM_FONT_FAMILY = '"Schibsted Grotesk", sans-serif'
3
+
4
+ export const PLATFORM_FONT_STYLESHEET_ID = 'platform-font-schibsted-grotesk'
5
+
6
+ export const PLATFORM_FONT_STYLESHEET_URL =
7
+ 'https://fonts.googleapis.com/css2?family=Schibsted+Grotesk:ital,wght@0,400..900;1,400..900&display=swap'
8
+
9
+ /**
10
+ * @param {Document} [doc]
11
+ */
12
+ export function injectPlatformFontStylesheet(doc = document) {
13
+ if (doc.getElementById(PLATFORM_FONT_STYLESHEET_ID)) return
14
+
15
+ const link = doc.createElement('link')
16
+ link.id = PLATFORM_FONT_STYLESHEET_ID
17
+ link.rel = 'stylesheet'
18
+ link.href = PLATFORM_FONT_STYLESHEET_URL
19
+ doc.head.appendChild(link)
20
+ }
@@ -0,0 +1,6 @@
1
+ export {
2
+ PLATFORM_FONT_FAMILY,
3
+ PLATFORM_FONT_STYLESHEET_ID,
4
+ PLATFORM_FONT_STYLESHEET_URL,
5
+ injectPlatformFontStylesheet,
6
+ } from './platformFont.mjs'
@@ -0,0 +1,136 @@
1
+ import { css } from 'styled-components'
2
+
3
+ /** Reports builder chrome — designed vars, palette + dark via data attrs. */
4
+ export const reportsShellChromeSelectors = css`
5
+ :not([data-platform-surface-palette]) &,
6
+ [data-platform-surface-palette='ink'] & {
7
+ --text: #2e3338;
8
+ --muted: #737b86;
9
+ --faint: #9aa2ad;
10
+ --accent: #525a65;
11
+ --bg: #f2f4f7;
12
+ --surface: #ffffff;
13
+ --surface-soft: #f7f8fa;
14
+ --border: #d9dee5;
15
+ --soft-border: #e7ebf0;
16
+ --report-desk: #f5f3ef;
17
+ }
18
+
19
+ [data-platform-surface-palette='sepia'] & {
20
+ --text: #3a342c;
21
+ --muted: #7d7468;
22
+ --faint: #a89e90;
23
+ --accent: #6b5d49;
24
+ --bg: #f2f0eb;
25
+ --surface: #fffdf6;
26
+ --surface-soft: #f4efe6;
27
+ --border: #d9dee5;
28
+ --soft-border: #e7ebf0;
29
+ --report-desk: #f4efe6;
30
+ }
31
+
32
+ [data-platform-surface-palette='slate'] & {
33
+ --text: #2b323c;
34
+ --muted: #6e7a88;
35
+ --faint: #97a2af;
36
+ --accent: #4d6378;
37
+ --bg: #eef1f4;
38
+ --surface: #fdfeff;
39
+ --surface-soft: #f7f8fa;
40
+ --border: #d9dee5;
41
+ --soft-border: #e7ebf0;
42
+ --report-desk: #eef1f4;
43
+ }
44
+
45
+ [data-platform-surface-palette='forest'] & {
46
+ --text: #2d352f;
47
+ --muted: #6f7b72;
48
+ --faint: #98a39b;
49
+ --accent: #4e6b58;
50
+ --bg: #eff2ee;
51
+ --surface: #fdfffd;
52
+ --surface-soft: #f7f8fa;
53
+ --border: #d9dee5;
54
+ --soft-border: #e7ebf0;
55
+ --report-desk: #eff2ee;
56
+ }
57
+
58
+ [data-platform-surface-palette='plum'] & {
59
+ --text: #342e38;
60
+ --muted: #7a7280;
61
+ --faint: #a59dab;
62
+ --accent: #66506e;
63
+ --bg: #f3f0f4;
64
+ --surface: #fffdff;
65
+ --surface-soft: #f7f8fa;
66
+ --border: #d9dee5;
67
+ --soft-border: #e7ebf0;
68
+ --report-desk: #f3f0f4;
69
+ }
70
+
71
+ [data-platform-theme='dark']:not([data-platform-surface-palette]) &,
72
+ [data-platform-theme='dark'][data-platform-surface-palette='ink'] & {
73
+ --text: #e8eaed;
74
+ --muted: #9aa2ad;
75
+ --faint: #6e7681;
76
+ --accent: #8a929d;
77
+ --bg: #141618;
78
+ --surface: #1c1f23;
79
+ --surface-soft: #20242a;
80
+ --border: #2a2f36;
81
+ --soft-border: #252a31;
82
+ --report-desk: #141618;
83
+ }
84
+
85
+ [data-platform-theme='dark'][data-platform-surface-palette='sepia'] & {
86
+ --text: #ece6dc;
87
+ --muted: #a89e90;
88
+ --faint: #7d7468;
89
+ --accent: #9a8468;
90
+ --bg: #1a1814;
91
+ --surface: #242019;
92
+ --surface-soft: #242019;
93
+ --border: #2a2f36;
94
+ --soft-border: #252a31;
95
+ --report-desk: #1a1814;
96
+ }
97
+
98
+ [data-platform-theme='dark'][data-platform-surface-palette='slate'] & {
99
+ --text: #e3e8ef;
100
+ --muted: #97a2af;
101
+ --faint: #6e7a88;
102
+ --accent: #7a94ad;
103
+ --bg: #13171c;
104
+ --surface: #1a2028;
105
+ --surface-soft: #1a2028;
106
+ --border: #2a2f36;
107
+ --soft-border: #252a31;
108
+ --report-desk: #13171c;
109
+ }
110
+
111
+ [data-platform-theme='dark'][data-platform-surface-palette='forest'] & {
112
+ --text: #e2ebe4;
113
+ --muted: #98a39b;
114
+ --faint: #6f7b72;
115
+ --accent: #6d9479;
116
+ --bg: #141916;
117
+ --surface: #1b221d;
118
+ --surface-soft: #1b221d;
119
+ --border: #2a2f36;
120
+ --soft-border: #252a31;
121
+ --report-desk: #141916;
122
+ }
123
+
124
+ [data-platform-theme='dark'][data-platform-surface-palette='plum'] & {
125
+ --text: #ebe6ef;
126
+ --muted: #a59dab;
127
+ --faint: #7a7280;
128
+ --accent: #8f74a0;
129
+ --bg: #17141a;
130
+ --surface: #201c24;
131
+ --surface-soft: #201c24;
132
+ --border: #2a2f36;
133
+ --soft-border: #252a31;
134
+ --report-desk: #17141a;
135
+ }
136
+ `
@@ -0,0 +1,5 @@
1
+ import type { PlatformTheme } from './tokens.ts'
2
+
3
+ declare module 'styled-components' {
4
+ export interface DefaultTheme extends PlatformTheme {}
5
+ }