@book.dev/ui 1.60.0

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 (305) hide show
  1. package/LICENSE +21 -0
  2. package/dist/EmojiGrid-xK5mPJPo.js +205 -0
  3. package/dist/blockeditor/BlockEditor.d.ts +68 -0
  4. package/dist/blockeditor/CodeBlockView.d.ts +19 -0
  5. package/dist/blockeditor/InlineToolbar.d.ts +18 -0
  6. package/dist/blockeditor/LinkPicker.d.ts +16 -0
  7. package/dist/blockeditor/MentionMenu.d.ts +14 -0
  8. package/dist/blockeditor/PresentBlocks.d.ts +21 -0
  9. package/dist/blockeditor/RichTextEditor.d.ts +29 -0
  10. package/dist/blockeditor/SlashMenu.d.ts +49 -0
  11. package/dist/blockeditor/TextBlockView.d.ts +9 -0
  12. package/dist/blockeditor/__tests__/LinkPicker.test.d.ts +1 -0
  13. package/dist/blockeditor/__tests__/SlashMenu.test.d.ts +1 -0
  14. package/dist/blockeditor/__tests__/aiApply.test.d.ts +1 -0
  15. package/dist/blockeditor/__tests__/groupLock.test.d.ts +1 -0
  16. package/dist/blockeditor/__tests__/highlight.test.d.ts +1 -0
  17. package/dist/blockeditor/__tests__/mergeUp.test.d.ts +1 -0
  18. package/dist/blockeditor/__tests__/present.test.d.ts +1 -0
  19. package/dist/blockeditor/aiBlocks.d.ts +9 -0
  20. package/dist/blockeditor/colors.d.ts +23 -0
  21. package/dist/blockeditor/exportBlocks.d.ts +25 -0
  22. package/dist/blockeditor/highlight.d.ts +25 -0
  23. package/dist/blockeditor/index.d.ts +8 -0
  24. package/dist/blockeditor/kit/KitFrame.d.ts +95 -0
  25. package/dist/blockeditor/kit/KitSettings.d.ts +18 -0
  26. package/dist/blockeditor/kit/OptionsEditor.d.ts +8 -0
  27. package/dist/blockeditor/kit/__tests__/chartMath.test.d.ts +1 -0
  28. package/dist/blockeditor/kit/__tests__/dataflow.test.d.ts +1 -0
  29. package/dist/blockeditor/kit/__tests__/exportKit.test.d.ts +1 -0
  30. package/dist/blockeditor/kit/__tests__/exportKit2.test.d.ts +1 -0
  31. package/dist/blockeditor/kit/__tests__/groupSync.test.d.ts +1 -0
  32. package/dist/blockeditor/kit/__tests__/inputs2Render.test.d.ts +1 -0
  33. package/dist/blockeditor/kit/__tests__/inputs2Scope.test.d.ts +1 -0
  34. package/dist/blockeditor/kit/__tests__/inputsRender.test.d.ts +1 -0
  35. package/dist/blockeditor/kit/__tests__/kitConfig.test.d.ts +1 -0
  36. package/dist/blockeditor/kit/__tests__/kitPanel.test.d.ts +1 -0
  37. package/dist/blockeditor/kit/__tests__/options.test.d.ts +1 -0
  38. package/dist/blockeditor/kit/__tests__/scope.test.d.ts +1 -0
  39. package/dist/blockeditor/kit/cards.d.ts +51 -0
  40. package/dist/blockeditor/kit/chartMath.d.ts +62 -0
  41. package/dist/blockeditor/kit/charts.d.ts +27 -0
  42. package/dist/blockeditor/kit/completion.d.ts +45 -0
  43. package/dist/blockeditor/kit/dataflow.d.ts +68 -0
  44. package/dist/blockeditor/kit/groupSync.d.ts +23 -0
  45. package/dist/blockeditor/kit/index.d.ts +11 -0
  46. package/dist/blockeditor/kit/inputs.d.ts +135 -0
  47. package/dist/blockeditor/kit/inputs2.d.ts +86 -0
  48. package/dist/blockeditor/kit/kitConfig.d.ts +5 -0
  49. package/dist/blockeditor/kit/kitPanel.d.ts +31 -0
  50. package/dist/blockeditor/kit/lock.d.ts +12 -0
  51. package/dist/blockeditor/kit/options.d.ts +60 -0
  52. package/dist/blockeditor/kit/progress.d.ts +20 -0
  53. package/dist/blockeditor/kit/scope.d.ts +100 -0
  54. package/dist/blockeditor/model.d.ts +236 -0
  55. package/dist/blockeditor/present.d.ts +18 -0
  56. package/dist/blockeditor/provider.d.ts +16 -0
  57. package/dist/blockeditor/reactiveBlocks.d.ts +2 -0
  58. package/dist/blockeditor/registry.d.ts +38 -0
  59. package/dist/blockeditor/richtext.d.ts +48 -0
  60. package/dist/blockeditor/useBlockEditor.d.ts +45 -0
  61. package/dist/components/AboutDialog.d.ts +9 -0
  62. package/dist/components/AgentPanel.d.ts +2 -0
  63. package/dist/components/AiBridgeHost.d.ts +14 -0
  64. package/dist/components/AiSearchDialog.d.ts +8 -0
  65. package/dist/components/AiSettings.d.ts +7 -0
  66. package/dist/components/AppearanceSettings.d.ts +3 -0
  67. package/dist/components/BackForwardCluster.d.ts +1 -0
  68. package/dist/components/BackupSettings.d.ts +2 -0
  69. package/dist/components/BreadcrumbCluster.d.ts +1 -0
  70. package/dist/components/ColorSchemeMenu.d.ts +1 -0
  71. package/dist/components/CommandMenu.d.ts +1 -0
  72. package/dist/components/CommandToggle.d.ts +3 -0
  73. package/dist/components/DocumentArea.d.ts +8 -0
  74. package/dist/components/Drawer.d.ts +7 -0
  75. package/dist/components/EmojiGrid.d.ts +16 -0
  76. package/dist/components/EmojiPickerHost.d.ts +8 -0
  77. package/dist/components/ExtensionsSettings.d.ts +7 -0
  78. package/dist/components/FavoritesNav.d.ts +8 -0
  79. package/dist/components/GeneralSettings.d.ts +2 -0
  80. package/dist/components/GlobalShortcuts.d.ts +9 -0
  81. package/dist/components/HomeButton.d.ts +2 -0
  82. package/dist/components/IconPicker.d.ts +17 -0
  83. package/dist/components/NavBar.d.ts +1 -0
  84. package/dist/components/NavContextMenu.d.ts +7 -0
  85. package/dist/components/PageActionsCluster.d.ts +9 -0
  86. package/dist/components/PageAppearanceHost.d.ts +9 -0
  87. package/dist/components/PageContextMenu.d.ts +17 -0
  88. package/dist/components/PageCover.d.ts +18 -0
  89. package/dist/components/PageHeaderControls.d.ts +13 -0
  90. package/dist/components/PageIcon.d.ts +16 -0
  91. package/dist/components/PageProperties.d.ts +53 -0
  92. package/dist/components/PluginBoot.d.ts +2 -0
  93. package/dist/components/PresentMode.d.ts +7 -0
  94. package/dist/components/ProfileAvatar.d.ts +17 -0
  95. package/dist/components/ProfileMenu.d.ts +6 -0
  96. package/dist/components/Settings.d.ts +7 -0
  97. package/dist/components/SettingsButton.d.ts +2 -0
  98. package/dist/components/SettingsPanel.d.ts +14 -0
  99. package/dist/components/SideNav.d.ts +1 -0
  100. package/dist/components/SideNavToggle.d.ts +3 -0
  101. package/dist/components/SidebarSections.d.ts +17 -0
  102. package/dist/components/SplitPane.d.ts +9 -0
  103. package/dist/components/TemplateGallery.d.ts +8 -0
  104. package/dist/components/TitlebarTabs.d.ts +10 -0
  105. package/dist/components/TrashDialog.d.ts +7 -0
  106. package/dist/components/WindowActionsCluster.d.ts +6 -0
  107. package/dist/components/WindowControls.d.ts +6 -0
  108. package/dist/components/WindowTitle.d.ts +7 -0
  109. package/dist/components/WorkspaceInfo.d.ts +6 -0
  110. package/dist/components/WorkspaceNavigationTree.d.ts +14 -0
  111. package/dist/components/WorkspaceSelectMenu.d.ts +10 -0
  112. package/dist/components/__tests__/AppearanceSettings.test.d.ts +1 -0
  113. package/dist/components/__tests__/PageIcon.test.d.ts +1 -0
  114. package/dist/components/__tests__/SettingsPanel.test.d.ts +1 -0
  115. package/dist/components/__tests__/buildTree.test.d.ts +1 -0
  116. package/dist/components/__tests__/profileAvatar.test.d.ts +1 -0
  117. package/dist/components/appearance/AppearanceControls.d.ts +33 -0
  118. package/dist/components/appearance/PageCustomiseBody.d.ts +29 -0
  119. package/dist/components/brand/OpenBookLogo.d.ts +11 -0
  120. package/dist/components/brand/index.d.ts +1 -0
  121. package/dist/components/database/DatabaseCard.d.ts +36 -0
  122. package/dist/components/database/DatabasePicker.d.ts +12 -0
  123. package/dist/components/database/DatabaseRowProperties.d.ts +13 -0
  124. package/dist/components/database/DatabaseView.d.ts +9 -0
  125. package/dist/components/database/InlineDatabaseBlock.d.ts +3 -0
  126. package/dist/components/database/__tests__/InlineDatabaseBlock.test.d.ts +1 -0
  127. package/dist/components/database/databaseCells.d.ts +57 -0
  128. package/dist/components/database/databaseCharts.d.ts +28 -0
  129. package/dist/components/database/databaseColors.d.ts +12 -0
  130. package/dist/components/database/databaseGraph.d.ts +16 -0
  131. package/dist/components/database/databaseLayouts.d.ts +84 -0
  132. package/dist/components/database/databaseMap.d.ts +21 -0
  133. package/dist/components/database/databaseMapLeaflet.d.ts +26 -0
  134. package/dist/components/database/databaseMenus.d.ts +97 -0
  135. package/dist/components/database/databaseTimeline.d.ts +27 -0
  136. package/dist/components/database/geocode.d.ts +24 -0
  137. package/dist/components/database/useDatabase.d.ts +129 -0
  138. package/dist/components/index.d.ts +12 -0
  139. package/dist/components/review/BlockReviewMarkers.d.ts +19 -0
  140. package/dist/components/review/CommentThread.d.ts +20 -0
  141. package/dist/components/review/ReviewPaneBody.d.ts +12 -0
  142. package/dist/components/review/SuggestHost.d.ts +13 -0
  143. package/dist/components/review/SuggestionCard.d.ts +21 -0
  144. package/dist/components/review/__tests__/review.test.d.ts +1 -0
  145. package/dist/components/review/useReview.d.ts +27 -0
  146. package/dist/components/settings/AccountSettings.d.ts +6 -0
  147. package/dist/components/settings/AdminSettings.d.ts +2 -0
  148. package/dist/components/settings/ConnectionSettings.d.ts +7 -0
  149. package/dist/components/settings/CustomisationSettings.d.ts +2 -0
  150. package/dist/components/settings/ProfileSettings.d.ts +2 -0
  151. package/dist/components/settings/primitives.d.ts +47 -0
  152. package/dist/components/settings/stubs.d.ts +8 -0
  153. package/dist/components/ui/__tests__/kbd.test.d.ts +1 -0
  154. package/dist/components/ui/__tests__/markdown.test.d.ts +1 -0
  155. package/dist/components/ui/__tests__/select.test.d.ts +1 -0
  156. package/dist/components/ui/badge.d.ts +9 -0
  157. package/dist/components/ui/button.d.ts +11 -0
  158. package/dist/components/ui/command.d.ts +86 -0
  159. package/dist/components/ui/context-menu.d.ts +24 -0
  160. package/dist/components/ui/dialog.d.ts +18 -0
  161. package/dist/components/ui/dropdown-menu.d.ts +27 -0
  162. package/dist/components/ui/icon-button.d.ts +16 -0
  163. package/dist/components/ui/input.d.ts +9 -0
  164. package/dist/components/ui/kbd.d.ts +31 -0
  165. package/dist/components/ui/label.d.ts +5 -0
  166. package/dist/components/ui/markdown.d.ts +19 -0
  167. package/dist/components/ui/navigation-menu.d.ts +12 -0
  168. package/dist/components/ui/popover.d.ts +6 -0
  169. package/dist/components/ui/scroll-area.d.ts +5 -0
  170. package/dist/components/ui/select.d.ts +42 -0
  171. package/dist/components/ui/skeleton.d.ts +6 -0
  172. package/dist/components/ui/switch.d.ts +4 -0
  173. package/dist/components/ui/tooltip.d.ts +7 -0
  174. package/dist/components/ui/tree.d.ts +37 -0
  175. package/dist/components/useAppCommands.d.ts +25 -0
  176. package/dist/data/DataProvider.d.ts +30 -0
  177. package/dist/data/index.d.ts +1 -0
  178. package/dist/databaseMapLeaflet-8LYcHcR6.js +87 -0
  179. package/dist/export/__tests__/chartNormalize.test.d.ts +1 -0
  180. package/dist/export/__tests__/export.test.d.ts +1 -0
  181. package/dist/export/__tests__/exportReactive.test.d.ts +1 -0
  182. package/dist/export/chartNormalize.d.ts +22 -0
  183. package/dist/export/chartSvg.d.ts +2 -0
  184. package/dist/export/documentModel.d.ts +136 -0
  185. package/dist/export/exportSite.d.ts +40 -0
  186. package/dist/export/format.d.ts +2 -0
  187. package/dist/export/kitChart.d.ts +21 -0
  188. package/dist/export/toHtml.d.ts +25 -0
  189. package/dist/export/toMarkdown.d.ts +7 -0
  190. package/dist/export/toPdf.d.ts +14 -0
  191. package/dist/exportBlocks-33D7P_8Q.js +987 -0
  192. package/dist/exportSite-DlRm4u7W.js +50 -0
  193. package/dist/format-CLQoRoYP.js +1646 -0
  194. package/dist/i18n/__tests__/i18n.test.d.ts +1 -0
  195. package/dist/i18n/index.d.ts +24 -0
  196. package/dist/i18n/messages/de.d.ts +2 -0
  197. package/dist/i18n/messages/en.d.ts +977 -0
  198. package/dist/i18n/messages/ja.d.ts +2 -0
  199. package/dist/i18n/messages/zh.d.ts +2 -0
  200. package/dist/index.d.ts +11 -0
  201. package/dist/index.js +20915 -0
  202. package/dist/layouts/DefaultLayout.d.ts +4 -0
  203. package/dist/layouts/index.d.ts +1 -0
  204. package/dist/lib/__tests__/accountClient.test.d.ts +1 -0
  205. package/dist/lib/__tests__/backlinks.test.d.ts +1 -0
  206. package/dist/lib/__tests__/backupBundle.test.d.ts +1 -0
  207. package/dist/lib/__tests__/blockExport.test.d.ts +1 -0
  208. package/dist/lib/__tests__/blockModel.test.d.ts +1 -0
  209. package/dist/lib/__tests__/databaseFormula.test.d.ts +1 -0
  210. package/dist/lib/__tests__/databaseTypes.test.d.ts +1 -0
  211. package/dist/lib/__tests__/favorites.test.d.ts +1 -0
  212. package/dist/lib/__tests__/homePage.test.d.ts +1 -0
  213. package/dist/lib/__tests__/hud.test.d.ts +1 -0
  214. package/dist/lib/__tests__/icons.test.d.ts +1 -0
  215. package/dist/lib/__tests__/mixedContent.test.d.ts +1 -0
  216. package/dist/lib/__tests__/pageAppearance.test.d.ts +1 -0
  217. package/dist/lib/__tests__/pageIcon.test.d.ts +1 -0
  218. package/dist/lib/__tests__/pageLayout.test.d.ts +1 -0
  219. package/dist/lib/__tests__/pageSaveStatus.test.d.ts +1 -0
  220. package/dist/lib/__tests__/pageTheme.test.d.ts +1 -0
  221. package/dist/lib/__tests__/parentGrouping.test.d.ts +1 -0
  222. package/dist/lib/__tests__/pluginSdk.test.d.ts +1 -0
  223. package/dist/lib/__tests__/recents.test.d.ts +1 -0
  224. package/dist/lib/__tests__/relations.test.d.ts +1 -0
  225. package/dist/lib/__tests__/templates.test.d.ts +1 -0
  226. package/dist/lib/__tests__/textMerge.test.d.ts +1 -0
  227. package/dist/lib/__tests__/themes.test.d.ts +1 -0
  228. package/dist/lib/__tests__/treeMove.test.d.ts +1 -0
  229. package/dist/lib/aiBridge.d.ts +67 -0
  230. package/dist/lib/aiFeatures.d.ts +31 -0
  231. package/dist/lib/aiSettingsNav.d.ts +14 -0
  232. package/dist/lib/backupBundle.d.ts +23 -0
  233. package/dist/lib/bookFolderTransfer.d.ts +15 -0
  234. package/dist/lib/download.d.ts +10 -0
  235. package/dist/lib/editorChrome.d.ts +14 -0
  236. package/dist/lib/emoji.d.ts +10 -0
  237. package/dist/lib/emojiData.d.ts +21 -0
  238. package/dist/lib/emojiPicker.d.ts +31 -0
  239. package/dist/lib/favorites.d.ts +11 -0
  240. package/dist/lib/homePage.d.ts +53 -0
  241. package/dist/lib/hud.d.ts +70 -0
  242. package/dist/lib/iconRecents.d.ts +3 -0
  243. package/dist/lib/iconValue.d.ts +19 -0
  244. package/dist/lib/lucideIcons.d.ts +21 -0
  245. package/dist/lib/openDocs.d.ts +5 -0
  246. package/dist/lib/pageActions.d.ts +17 -0
  247. package/dist/lib/pageAppearance.d.ts +20 -0
  248. package/dist/lib/pageCover.d.ts +21 -0
  249. package/dist/lib/pageCustomise.d.ts +6 -0
  250. package/dist/lib/pageDocActions.d.ts +20 -0
  251. package/dist/lib/pageFont.d.ts +25 -0
  252. package/dist/lib/pageFullWidth.d.ts +10 -0
  253. package/dist/lib/pageIcon.d.ts +25 -0
  254. package/dist/lib/pageLinks.d.ts +41 -0
  255. package/dist/lib/pageSaveStatus.d.ts +14 -0
  256. package/dist/lib/pageTheme.d.ts +15 -0
  257. package/dist/lib/pageThemePresets.d.ts +23 -0
  258. package/dist/lib/recents.d.ts +9 -0
  259. package/dist/lib/reviewPane.d.ts +23 -0
  260. package/dist/lib/selection.d.ts +2 -0
  261. package/dist/lib/shortcuts.d.ts +79 -0
  262. package/dist/lib/sidebarStyles.d.ts +10 -0
  263. package/dist/lib/suggestBridge.d.ts +33 -0
  264. package/dist/lib/textMerge.d.ts +19 -0
  265. package/dist/lib/themes.d.ts +137 -0
  266. package/dist/lib/treeMove.d.ts +24 -0
  267. package/dist/lib/useModifierHeld.d.ts +1 -0
  268. package/dist/lib/utils.d.ts +2 -0
  269. package/dist/lucideIcons-B6pmC-WQ.js +5003 -0
  270. package/dist/model-CBxw8JNb.js +734 -0
  271. package/dist/pageIcon-BWTy7hAh.js +32 -0
  272. package/dist/plugins/__tests__/host.test.d.ts +1 -0
  273. package/dist/plugins/__tests__/loader.test.d.ts +1 -0
  274. package/dist/plugins/__tests__/pagePlugin.test.d.ts +1 -0
  275. package/dist/plugins/api.d.ts +67 -0
  276. package/dist/plugins/commandRegistry.d.ts +15 -0
  277. package/dist/plugins/host.d.ts +32 -0
  278. package/dist/plugins/index.d.ts +5 -0
  279. package/dist/plugins/loader.d.ts +19 -0
  280. package/dist/plugins/pagePlugin.d.ts +21 -0
  281. package/dist/providers/AccountProvider.d.ts +67 -0
  282. package/dist/providers/ConfirmProvider.d.ts +30 -0
  283. package/dist/providers/ForwardingProvider.d.ts +23 -0
  284. package/dist/providers/HudProvider.d.ts +9 -0
  285. package/dist/providers/I18nProvider.d.ts +23 -0
  286. package/dist/providers/NavigationProvider.d.ts +89 -0
  287. package/dist/providers/PlatformLibraryProvider.d.ts +107 -0
  288. package/dist/providers/PreferencesProvider.d.ts +47 -0
  289. package/dist/providers/ThemeProvider.d.ts +26 -0
  290. package/dist/providers/WorkspaceProvider.d.ts +40 -0
  291. package/dist/providers/__tests__/PreferencesProvider.test.d.ts +1 -0
  292. package/dist/providers/__tests__/extractToken.test.d.ts +1 -0
  293. package/dist/providers/__tests__/windowModel.test.d.ts +1 -0
  294. package/dist/providers/index.d.ts +10 -0
  295. package/dist/providers/windowModel.d.ts +69 -0
  296. package/dist/screens/BlockPageDocument.d.ts +4 -0
  297. package/dist/screens/ConnectedPageDocument.d.ts +14 -0
  298. package/dist/screens/DataflowView.d.ts +2 -0
  299. package/dist/screens/HomeScreen.d.ts +7 -0
  300. package/dist/screens/index.d.ts +3 -0
  301. package/dist/screens/pageChrome.d.ts +46 -0
  302. package/dist/style.css +3 -0
  303. package/dist/toHtml-BoPr8Ce4.js +394 -0
  304. package/dist/toPdf-DGtKQSRA.js +133 -0
  305. package/package.json +94 -0
@@ -0,0 +1,48 @@
1
+ import type * as Y from 'yjs';
2
+ import type { InlineAttrs } from './model';
3
+ /**
4
+ * The DOM half of text editing: rendering Y.Text runs into a contenteditable
5
+ * element, and mapping carets between DOM positions and linear offsets.
6
+ *
7
+ * The contract that keeps everything simple: the rendered DOM's
8
+ * `textContent` is exactly the Y.Text string (no decoration characters), so
9
+ * a caret is always "the number of characters before it".
10
+ */
11
+ /**
12
+ * Render Y.Text (or a delta) to the innerHTML of a text block. For code blocks
13
+ * (`opts.code`) the text carries no inline attributes, so it goes straight
14
+ * through the syntax highlighter — which, like this path, only wraps runs and
15
+ * preserves the exact character stream (newlines as `<br>`).
16
+ */
17
+ export declare function runsToHtml(text: Y.Text, opts?: {
18
+ code?: boolean;
19
+ language?: string;
20
+ }): string;
21
+ /** The linear caret offset of (node, nodeOffset) within `root`, or null. */
22
+ export declare function domToOffset(root: HTMLElement, node: Node, nodeOffset: number): number | null;
23
+ /** Resolve a linear offset to a (node, offset) DOM position inside `root`. */
24
+ export declare function offsetToDom(root: HTMLElement, offset: number): {
25
+ node: Node;
26
+ offset: number;
27
+ };
28
+ /** The current selection within `root` as linear offsets, or null. */
29
+ export declare function readSelection(root: HTMLElement): {
30
+ start: number;
31
+ end: number;
32
+ } | null;
33
+ /** Place the caret (or a range) at linear offsets inside `root`. */
34
+ export declare function writeSelection(root: HTMLElement, start: number, end?: number): void;
35
+ /**
36
+ * Diff two strings into one splice (used after IME composition, where we let
37
+ * the browser mutate the DOM and reconcile afterwards). Returns the region
38
+ * [start, delEnd) of `before` replaced by `insert` from `after`.
39
+ */
40
+ export declare function diffText(before: string, after: string): {
41
+ start: number;
42
+ deleteLen: number;
43
+ insert: string;
44
+ } | null;
45
+ /** The inline attributes at `offset` (the formatting typing would continue). */
46
+ export declare function attrsAt(text: Y.Text, offset: number): InlineAttrs;
47
+ /** Whether the whole [start,end) range carries attribute `key`. */
48
+ export declare function rangeHasAttr(text: Y.Text, start: number, end: number, key: keyof InlineAttrs): boolean;
@@ -0,0 +1,45 @@
1
+ import * as Y from 'yjs';
2
+ import { type BlockType, type NewBlock } from './model';
3
+ /**
4
+ * The editor's working state around a Y.Doc: one version counter that bumps
5
+ * on every doc update (the whole tree re-renders; text blocks themselves
6
+ * diff against the DOM so unchanged blocks are no-ops), an undo manager
7
+ * scoped to local edits, a "pending focus" hand-off for structural edits
8
+ * (split/merge/insert decide where the caret lands *after* React re-renders),
9
+ * and the block-level selection used for multi-block operations.
10
+ */
11
+ export interface CaretRequest {
12
+ blockId: string;
13
+ /** Linear offset, or 'end'. */
14
+ offset: number | 'end';
15
+ }
16
+ export interface BlockEditorController {
17
+ doc: Y.Doc;
18
+ version: number;
19
+ /** Undo/redo over local edits (a live wrapper — see useBlockEditor). */
20
+ undo: {
21
+ undo(): void;
22
+ redo(): void;
23
+ };
24
+ readOnly: boolean;
25
+ /** Set by structural ops; consumed by the focused block after render. */
26
+ pendingCaret: React.MutableRefObject<CaretRequest | null>;
27
+ requestCaret(req: CaretRequest): void;
28
+ /** Block-level selection (ids), for multi-block ops. */
29
+ selection: ReadonlySet<string>;
30
+ setSelection(ids: Iterable<string>): void;
31
+ clearSelection(): void;
32
+ /** The id of the text block that currently owns the DOM caret. */
33
+ focusedId: string | null;
34
+ setFocusedId(id: string | null): void;
35
+ splitAt(blockId: string, offset: number): void;
36
+ mergeUp(blockId: string): void;
37
+ insertAfter(blockId: string | null, block: NewBlock): string | null;
38
+ removeSelected(): void;
39
+ turnInto(blockId: string, type: BlockType, props?: Record<string, unknown>): void;
40
+ duplicateSelected(): void;
41
+ moveSelected(delta: -1 | 1): void;
42
+ /** Ordered top-level traversal of text blocks (arrow navigation). */
43
+ textBlockIds(): string[];
44
+ }
45
+ export declare function useBlockEditor(doc: Y.Doc, readOnly?: boolean): BlockEditorController;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Uncontrolled (no props) it renders its own "About" trigger button;
3
+ * controlled (open/onOpenChange) it is just the dialog — the profile menu
4
+ * opens it from a menu item.
5
+ */
6
+ export default function AboutDialog({ open, onOpenChange }?: {
7
+ open?: boolean;
8
+ onOpenChange?: (open: boolean) => void;
9
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export declare function AgentPanel(): import("react/jsx-runtime").JSX.Element;
2
+ export default AgentPanel;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Installs the AI bridge (lib/aiBridge) for the provider-less block editor
3
+ * and keeps a lazily-refreshed readiness flag. Renders nothing. The poll is
4
+ * deliberately gentle: once on mount, then only re-checked when an AI action
5
+ * actually runs and fails.
6
+ *
7
+ * The bridge also owns the agent WRITE path: applying an approved proposal set.
8
+ * A change is applied in ONE CRDT transaction against the live editor doc when
9
+ * the target page has a mounted editor (undoable + broadcast, like a kit
10
+ * click); otherwise it's applied through the data client and merged by any live
11
+ * editor on its next server push.
12
+ */
13
+ export declare function AiBridgeHost(): null;
14
+ export default AiBridgeHost;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * AI note search: ranked, snippeted results over every page's content.
3
+ * Lexical (BM25) always works — server-side — and upgrades to hybrid
4
+ * semantic ranking when the configured engine can embed. Opened from the
5
+ * command palette ("Search notes with AI") or the sidebar.
6
+ */
7
+ export declare function AiSearchDialog(): import("react/jsx-runtime").JSX.Element;
8
+ export default AiSearchDialog;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Settings → AI: the optional local model engine. Everything here talks to
3
+ * the server's /api/ai surface; nothing runs in the browser. The provider
4
+ * choices cover the cross-platform in-process engine (llama.cpp), Apple
5
+ * Silicon's MLX, and any OpenAI-compatible local server.
6
+ */
7
+ export default function AiSettings(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ /** Color mode + the full appearance model: accent palette, interface tint,
2
+ * control-accent intensity, and an overlay-blur toggle. */
3
+ export default function AppearanceSettings(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export default function BackForwardCluster(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ /** Backup & restore the whole workspace, from the Settings panel. */
2
+ export default function BackupSettings(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export default function BreadcrumbCluster(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export default function ColorSchemeMenu(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function CommandMenu(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ /** Sidebar launcher for the command palette. The shortcut is quiet: it reveals
2
+ * inline while ⌘/Ctrl is held, and on long hover via the tooltip. */
3
+ export default function CommandToggle(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The document workspace for this window: the primary page. Tabs themselves
3
+ * are native (browser tabs on web, macOS window-tabs on desktop) — each
4
+ * window runs one of these. The split view's secondary page renders as a
5
+ * full-height side pane ({@link SplitPane} in the layout), not here, so the
6
+ * primary keeps the NavBar and full width when alone.
7
+ */
8
+ export default function DocumentArea(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export interface DrawerProps {
3
+ children: React.ReactNode;
4
+ open: boolean;
5
+ docked?: boolean;
6
+ }
7
+ export default function Drawer({ children, ...props }: DrawerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The in-house icon picker — emoji glyphs + a curated set of Lucide icons —
3
+ * replacing the third-party `emoji-picker-react`. Native glyphs only (no
4
+ * network), our own design-system chrome, search across the full emoji dataset
5
+ * (via {@link searchEmojis}) and the icon registry, plus recents. It's the lazy
6
+ * payload behind {@link components/EmojiPickerHost}; the {@link lib/emojiPicker}
7
+ * bridge / {@link components/IconPicker} open API is unchanged.
8
+ *
9
+ * Structured around an icon *source* (emoji | icon) so further sources (custom
10
+ * uploads, other libraries) can slot in later (#5).
11
+ */
12
+ export default function EmojiGrid({ value, onPick, }: {
13
+ /** The current icon value, used to highlight it and pick the opening tab. */
14
+ value?: string;
15
+ onPick: (value: string) => void;
16
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The single app-wide emoji grid picker. Mounted once at the app shell; it
3
+ * renders over the {@link emojiPicker} bridge's state, anchored at the rect the
4
+ * caller passed (a 0-area Radix anchor positioned there), so it reuses Radix's
5
+ * collision handling, outside-click and Escape dismissal. The picker itself is
6
+ * lazy so its bundle loads only on first open.
7
+ */
8
+ export default function EmojiPickerHost(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Settings → Extensions: the workspace's installed plugins. Install from a
3
+ * zip of TypeScript source; each card shows provenance (verified by a
4
+ * trusted registry / unverified) and activation state, with enable and
5
+ * remove always one click away — VS Code's extension list, OpenBook's skin.
6
+ */
7
+ export default function ExtensionsSettings(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The sidebar "Favourites" section: pinned pages, in pin order, shown above the
3
+ * page tree. Renders nothing when empty. Rows mirror the tree row styling but
4
+ * are intentionally not `role=treeitem` (they're a separate, flat list) so the
5
+ * page tree stays the sole tree in the sidebar. A favourited page that's since
6
+ * been deleted simply drops out (we only show ids still in the page list).
7
+ */
8
+ export default function FavoritesNav(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,2 @@
1
+ /** General app settings — display language + basic editor/behavior toggles. */
2
+ export default function GeneralSettings(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Binds the app's global keyboard shortcuts. Every combo uses a modifier (⌘/Ctrl)
3
+ * so it fires even while the editor or a text field has focus without stealing
4
+ * ordinary typing. The shortcuts come from the same {@link useAppCommands}
5
+ * registry the command palette renders, so a key and its menu entry never drift.
6
+ *
7
+ * Renders nothing — it's a behavior, mounted once in the layout.
8
+ */
9
+ export default function GlobalShortcuts(): null;
@@ -0,0 +1,2 @@
1
+ /** Sidebar launcher for the Home view — the workspace's new-tab page. */
2
+ export default function HomeButton(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ /**
3
+ * A click-to-pick icon trigger. Opens the one app-wide grid picker (via the
4
+ * {@link emojiPicker} bridge) anchored at this button and reports the chosen
5
+ * value to `onPick` — an emoji glyph or a `lucide:<Name>` icon. Each call site
6
+ * styles its own trigger via `className` / `children`; with no children it
7
+ * renders the current value (or `fallback`).
8
+ */
9
+ export declare function IconPicker({ id, value, onPick, className, ariaLabel, fallback, children, }: {
10
+ id?: string;
11
+ value: string;
12
+ onPick: (emoji: string) => void;
13
+ className?: string;
14
+ ariaLabel?: string;
15
+ fallback?: string;
16
+ children?: React.ReactNode;
17
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export default function NavBar(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The page "…" actions menu. Targets {@link pageId} (defaults to the focused
3
+ * page) so the split view's cluster can act on the right pane's page.
4
+ */
5
+ export default function NavContextMenu({ pageId }?: {
6
+ pageId?: string | null;
7
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The page-actions cluster for one page: last-saved status, a copy-link button,
3
+ * a favourite star, then the "…" actions menu. It acts on the given
4
+ * {@link pageId}, so the nav bar mounts one for the primary page and the split
5
+ * pane mounts its own for the right pane — each owns its page's actions.
6
+ */
7
+ export default function PageActionsCluster({ pageId }: {
8
+ pageId: string | null;
9
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Wires the per-page appearance store (lib/pageAppearance) and the icon store
3
+ * (lib/pageIcon) to the data client: writes persist a page's theme / cover /
4
+ * typefaces / full-width / icon onto `page.properties`, and a lazy load hydrates
5
+ * the appearance cache the first time a page's appearance is read. Renders
6
+ * nothing. Mounted once at the app root (alongside AiBridgeHost).
7
+ */
8
+ export declare function PageAppearanceHost(): null;
9
+ export default PageAppearanceHost;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ /**
3
+ * The right-click actions for a page, shared by the sidebar tree rows and the
4
+ * page body. Rendered inside a {@link ContextMenuContent}.
5
+ */
6
+ export declare function PageMenuItems({ pageId }: {
7
+ pageId: string;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ /**
10
+ * Wrap the page body so right-clicking it opens the page's context menu. (The
11
+ * block editor supplies its own per-block actions through the gutter handle; the
12
+ * sidebar tree wires {@link PageMenuItems} in directly.)
13
+ */
14
+ export declare function PageContextMenu({ pageId, children }: {
15
+ pageId: string;
16
+ children: React.ReactNode;
17
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ /**
3
+ * The wide cover banner above a page's title (a gradient or an image). Hovering
4
+ * reveals controls to change, reposition (images only), or remove it. The cover
5
+ * is a local per-page preference (see {@link lib/pageCover}).
6
+ */
7
+ export declare function PageCoverBanner({ pageId }: {
8
+ pageId: string;
9
+ }): import("react/jsx-runtime").JSX.Element | null;
10
+ /**
11
+ * The cover chooser: a grid of curated gradients plus an image-URL field.
12
+ * `children` is the trigger (used both by the "Add cover" header button and the
13
+ * "Change cover" overlay button).
14
+ */
15
+ export declare function CoverPicker({ pageId, children }: {
16
+ pageId: string;
17
+ children: React.ReactNode;
18
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The cover-area control cluster, sitting above the title: page customisation
3
+ * (accent / fonts → the side pane), owner, verification, backlinks count, and —
4
+ * when the page has no cover yet — an "Add cover" affordance. Notion-style, it is
5
+ * hidden until the cover / header region is hovered (the `group/pagehead` wrapper
6
+ * in BlockPageDocument), and stays visible while any of its menus is open. Owner
7
+ * and verification still write the reserved property ids, so they round-trip as
8
+ * database columns.
9
+ */
10
+ export declare function PageHeaderControls({ pageId }: {
11
+ pageId: string;
12
+ }): import("react/jsx-runtime").JSX.Element;
13
+ export default PageHeaderControls;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Renders a page-icon *value* — either a native emoji glyph (e.g. `"📄"`) or a
3
+ * curated Lucide icon serialized as `"lucide:<Name>"` (see {@link lib/lucideIcons}).
4
+ *
5
+ * Lucide icons render at `1em`, so they inherit the surrounding font-size exactly
6
+ * like an emoji glyph does, and use `currentColor` so they take the text color.
7
+ * This is the one place icon values turn into pixels, so every surface that shows
8
+ * a page icon (tree rows, headers, tabs, the picker's recents) stays consistent.
9
+ */
10
+ export declare function PageIcon({ value, fallback, className, }: {
11
+ value?: string | null;
12
+ /** Shown when `value` is empty. Pass `null` to render nothing. */
13
+ fallback?: string | null;
14
+ /** Extra classes — for Lucide icons these compose over the `1em` sizing. */
15
+ className?: string;
16
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import type { VerificationValue } from '@book.dev/sdk';
3
+ export interface PagePropertiesState {
4
+ /** The page's stored property values (owner, verification, …), kept live. */
5
+ properties: Record<string, unknown>;
6
+ /** The database this page is a row of, or `null` for a standalone page. */
7
+ databaseId: string | null;
8
+ /** Optimistically set a property and persist it. */
9
+ setProperty: (id: string, value: unknown) => void;
10
+ /** Resolved owner name (`''` when unset) and verification value. */
11
+ owner: string;
12
+ verification: VerificationValue | undefined;
13
+ }
14
+ /**
15
+ * Load a page's stored properties and keep them live (e.g. edited from a
16
+ * database column elsewhere). Shared by the cover-area header controls and the
17
+ * database-row field panel, so both read and write the same values. Also
18
+ * hydrates the per-page appearance store from the same fetch — theme / cover /
19
+ * fonts live on `page.properties` now ({@link lib/pageAppearance}).
20
+ */
21
+ export declare function usePageProperties(pageId: string): PagePropertiesState;
22
+ /**
23
+ * The properties shown under a page's title. Owner, Verification, and Backlinks
24
+ * have moved up into the cover-area header controls; this now renders only a
25
+ * database row's editable column fields (when the page is a row), so a standalone
26
+ * page keeps a clean title with no empty panel.
27
+ */
28
+ export declare const PageProperties: React.FC<{
29
+ pageId: string;
30
+ }>;
31
+ /** Owner editor: a person chip; click to type a name, pick yourself, or clear. */
32
+ export declare const OwnerEditor: React.FC<{
33
+ owner: string;
34
+ onChange: (value: string | null) => void;
35
+ }>;
36
+ /**
37
+ * Verification editor: verify the page (stamping you + now, with a chosen
38
+ * expiry) or, once verified, review / change the expiry or remove it. An expired
39
+ * verification reads as lapsed (amber) rather than verified (green).
40
+ */
41
+ export declare const VerificationEditor: React.FC<{
42
+ value?: VerificationValue;
43
+ onChange: (value: VerificationValue) => void;
44
+ }>;
45
+ /**
46
+ * Backlinks, collapsed: a compact "N backlinks" chip in the header controls that
47
+ * opens the list on click (hidden weight by default — the links are rarely the
48
+ * point, but the count is a useful signal). Lives beside owner / verification.
49
+ */
50
+ export declare const BacklinksControl: React.FC<{
51
+ pageId: string;
52
+ }>;
53
+ export default PageProperties;
@@ -0,0 +1,2 @@
1
+ /** Loads the workspace's enabled extensions once the data client exists. */
2
+ export default function PluginBoot(): null;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Present mode: a page rendered as a slide deck (split at every `divider`),
3
+ * read-only but with its interactive widgets still live. Two layouts — an
4
+ * immersive full-screen deck, or a presenter console with the next slide and
5
+ * speaker notes. Entered from the page's "…" menu; driven by HUD state.
6
+ */
7
+ export default function PresentMode(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { type ProfilePreferences } from '@/providers';
3
+ /**
4
+ * The user's avatar, everywhere it appears: an uploaded image if there is
5
+ * one, else the chosen emoji, else a lettered monogram derived from the
6
+ * name — tinted with a hue that is stable for that name, so "Ada" is always
7
+ * the same color without anyone picking it.
8
+ */
9
+ /** First letters of the first two words, uppercased — "Ada Lovelace" → "AL". */
10
+ export declare function initialsOf(name: string): string;
11
+ /** A stable hue for a given name (same input → same color, every session). */
12
+ export declare function monogramHue(seed: string): string;
13
+ export declare const ProfileAvatar: React.FC<{
14
+ profile: ProfilePreferences;
15
+ /** Size + type scale, e.g. "h-6 w-6 text-[10px]". */
16
+ className?: string;
17
+ }>;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The sidebar footer is the user: avatar + name opening a small profile
3
+ * menu — edit the profile (Settings → Profile), switch the color mode,
4
+ * or read about the app.
5
+ */
6
+ export default function ProfileMenu(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Settings surface, presented as either a centered modal or a fullscreen view
3
+ * per `hud.settings.mode`. Both presentations are the same Radix dialog (so each
4
+ * gets focus trapping, Escape-to-close, and scroll locking) sized differently,
5
+ * wrapping the shared {@link SettingsPanel}. Rendered once at the layout root.
6
+ */
7
+ export default function Settings(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ /** Sidebar launcher that opens the settings surface (modal or fullscreen). */
2
+ export default function SettingsButton(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { type SettingsMode, type SettingsTab } from '@/lib/hud';
2
+ export interface SettingsPanelProps {
3
+ tab: SettingsTab;
4
+ onTabChange: (tab: SettingsTab) => void;
5
+ mode: SettingsMode;
6
+ onModeChange: (mode: SettingsMode) => void;
7
+ onClose: () => void;
8
+ }
9
+ /**
10
+ * The settings UI (grouped tab rail + active panel + window controls), fully
11
+ * controlled. Rendered identically inside the modal and fullscreen surfaces so
12
+ * the two only differ in how the surrounding surface is sized.
13
+ */
14
+ export default function SettingsPanel({ tab, onTabChange, mode, onModeChange, onClose }: SettingsPanelProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export default function SideNav(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ export default function SideNavToggle({ className }: {
2
+ className?: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,17 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { PageMeta } from '@book.dev/sdk';
3
+ /** A collapsible labelled sidebar group. Open by default; state persists. */
4
+ export declare function SidebarSection({ id, label, children }: {
5
+ id: string;
6
+ label: string;
7
+ children: ReactNode;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ /** A flat page row: icon + name, selectable, with the shared page context menu. */
10
+ export declare function SidebarPageRow({ page }: {
11
+ page: PageMeta;
12
+ }): import("react/jsx-runtime").JSX.Element;
13
+ /**
14
+ * Pages that changed recently but aren't in your recent trail — the "you
15
+ * might be looking for this" shelf. Empty (and hidden) in a fresh workspace.
16
+ */
17
+ export declare function SuggestedNav(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The split view's secondary page: a full-height pane docked at the window's
3
+ * right edge (alongside the assistant panel), sliding in like a side peek
4
+ * rather than carving the document area in two. Its left edge drags to
5
+ * resize; the header closes it. The primary document keeps the NavBar and
6
+ * the full editing surface.
7
+ */
8
+ export declare function SplitPane(): import("react/jsx-runtime").JSX.Element | null;
9
+ export default SplitPane;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The template gallery: ready-made pages (documents and databases with sample
3
+ * rows) created client-side through the data APIs. Opened from the sidebar's
4
+ * Templates button or the command palette; picking a card creates the page,
5
+ * stamps its icon, navigates to it, and closes the dialog.
6
+ */
7
+ export declare function TemplateGallery(): import("react/jsx-runtime").JSX.Element;
8
+ export default TemplateGallery;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The in-window tab bar, drawn in the titlebar (Chrome/Arc style) on the
3
+ * desktop. Tabs sit to the right of the macOS traffic lights; the empty regions
4
+ * are `data-tauri-drag-region` so the window can still be dragged by them
5
+ * (interactive elements — tabs, buttons — are not drag regions, so clicks work).
6
+ *
7
+ * Off the desktop (`inWindowTabs` false) this is just a draggable filler; the
8
+ * titlebar strip collapses to 0 height on the web, so nothing shows.
9
+ */
10
+ export default function TitlebarTabs(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The trash: pages deleted from elsewhere in the app are soft-deleted and land
3
+ * here, where they can be restored or permanently removed. The server's cleanup
4
+ * job purges them automatically after its retention window; this just exposes
5
+ * the manual controls.
6
+ */
7
+ export default function TrashDialog(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Window-level actions in the nav bar: toggle the in-window split view. (New
3
+ * tabs are native — a real browser tab on the web, a macOS window-tab on the
4
+ * desktop, opened from the titlebar's "+".)
5
+ */
6
+ export default function WindowActionsCluster(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Minimize / maximize / close buttons for a frameless window (Windows & Linux,
3
+ * where the host provides `windowControls`). Drawn on the right of the titlebar
4
+ * strip. Renders nothing on macOS / the web, which keep their native controls.
5
+ */
6
+ export default function WindowControls(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Keeps the document (browser-tab / window) title in sync with the current
3
+ * page, so tabs read "Sprint board · OpenBook" instead of all being "OpenBook".
4
+ * Runs on every render — the label can change through rename flows that don't
5
+ * change identity-stable deps, and assignment is trivially cheap.
6
+ */
7
+ export default function WindowTitle(): null;
@@ -0,0 +1,6 @@
1
+ export interface WorkspaceInfoProps {
2
+ name: string;
3
+ url: string;
4
+ icon?: string;
5
+ }
6
+ export default function WorkspaceInfo(props: WorkspaceInfoProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import type { PageMeta } from '@book.dev/sdk';
2
+ import { TreeDataItem } from '@/components/ui/tree';
3
+ /**
4
+ * Build the sidebar tree from the flat page list: each page becomes a node, and
5
+ * a page with a `parentId` is attached under that parent (recursively). Pages
6
+ * whose parent isn't in the list (e.g. it was deleted) surface at the top level.
7
+ * The page list arrives in manual sidebar order (server `position`), so each
8
+ * parent's children come out in the order the user arranged them.
9
+ *
10
+ * A node's icon mirrors the page's own icon: its chosen emoji, or the default
11
+ * page icon (📄) when none is set — so the sidebar matches the page header.
12
+ */
13
+ export declare function buildTree(pages: PageMeta[]): TreeDataItem[];
14
+ export default function WorkspaceNavigationTree(): import("react/jsx-runtime").JSX.Element;