@allbluecn/web-app 0.9.4 → 0.10.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 (684) hide show
  1. package/package.json +12 -10
  2. package/public/favicon.ico +0 -0
  3. package/src/__tests__/paraglide.test.ts +43 -0
  4. package/src/__tests__/setup.ts +27 -9
  5. package/src/assets/illustrations/empty-states/workspace-empty.svg +5 -0
  6. package/src/assets/illustrations/knowledge/law-card-illustration.svg +5 -0
  7. package/src/assets/logo/logo.tsx +53 -36
  8. package/src/components/agents/agent-card.tsx +7 -7
  9. package/src/components/agents/agent-form-dialog.tsx +41 -42
  10. package/src/components/agents/agent-selector.tsx +6 -8
  11. package/src/components/agents/agents-page.tsx +26 -28
  12. package/src/components/agents/skill-card.tsx +1 -4
  13. package/src/components/agents/skill-form-dialog.tsx +19 -21
  14. package/src/components/agents/slash-skill-menu.tsx +5 -7
  15. package/src/components/agents/use-agent-handlers.ts +5 -8
  16. package/src/components/ai/ai-chat-prompt.tsx +26 -33
  17. package/src/components/ai/global-chat-panel.tsx +10 -11
  18. package/src/components/ai/use-knowledge-bases.ts +2 -2
  19. package/src/components/anyhub/anyhub-app-card.tsx +13 -15
  20. package/src/components/anyhub/anyhub-app-runner.tsx +5 -7
  21. package/src/components/anyhub/anyhub-install-dialog.tsx +16 -18
  22. package/src/components/anyhub/anyhub-management-view.tsx +9 -11
  23. package/src/components/anyhub/anyhub-marketplace-view.tsx +14 -17
  24. package/src/components/anyhub/anyhub-permission-panel.tsx +8 -11
  25. package/src/components/anyhub/anyhub-provider.tsx +0 -1
  26. package/src/components/anyhub/anyhub-top-nav.tsx +5 -8
  27. package/src/components/auth/auth-header.tsx +2 -2
  28. package/src/components/auth/icon-input.tsx +0 -1
  29. package/src/components/auth/oauth-section.tsx +3 -5
  30. package/src/components/auth/password-input.tsx +2 -4
  31. package/src/components/auth/session-guard.tsx +0 -1
  32. package/src/components/auth/sso-section.tsx +3 -4
  33. package/src/components/billing/__tests__/seats-manager.test.tsx +5 -9
  34. package/src/components/billing/billing-panel.tsx +5 -6
  35. package/src/components/billing/checkout-redirect.ts +6 -10
  36. package/src/components/billing/feature-gate.tsx +2 -3
  37. package/src/components/billing/invoice-history.tsx +9 -11
  38. package/src/components/billing/login-prompt-dialog.tsx +10 -11
  39. package/src/components/billing/pricing-card.tsx +6 -7
  40. package/src/components/billing/pricing-page.tsx +4 -5
  41. package/src/components/billing/seats-manager.tsx +19 -20
  42. package/src/components/billing/subscription-card.tsx +13 -14
  43. package/src/components/billing/upgrade-prompt.tsx +11 -13
  44. package/src/components/changelog/changelog-page.tsx +36 -26
  45. package/src/components/chat/ai-chat-history/components/conversation-header.tsx +4 -5
  46. package/src/components/chat/ai-chat-history/components/conversation-item.tsx +15 -17
  47. package/src/components/chat/ai-chat-history/components/conversation-search.tsx +3 -4
  48. package/src/components/chat/ai-chat-history/components/empty-state.tsx +5 -6
  49. package/src/components/chat/ai-chat-history/index.tsx +11 -15
  50. package/src/components/chat/ai-chat-history/utils/group-conversations.ts +9 -2
  51. package/src/components/chat/ai-citations/components/citation-item.tsx +3 -5
  52. package/src/components/chat/ai-citations/components/citations-list.tsx +4 -6
  53. package/src/components/chat/ai-citations/components/inline-citation.tsx +2 -4
  54. package/src/components/chat/ai-citations/components/source-components.tsx +6 -10
  55. package/src/components/chat/ai-citations/index.tsx +3 -4
  56. package/src/components/chat/ai-citations/utils.ts +15 -3
  57. package/src/components/chat/ai-conversation.tsx +10 -12
  58. package/src/components/chat/ai-message/components/message-actions.tsx +7 -9
  59. package/src/components/chat/ai-message/components/streaming-indicator.tsx +3 -4
  60. package/src/components/chat/ai-message/index.tsx +5 -5
  61. package/src/components/chat/ai-message/utils/dom-utils.ts +1 -1
  62. package/src/components/chat/ai-prompt-input/components/action-buttons.tsx +14 -16
  63. package/src/components/chat/ai-prompt-input/components/agent-mode-select.tsx +10 -5
  64. package/src/components/chat/ai-prompt-input/components/context-badge.tsx +2 -3
  65. package/src/components/chat/ai-prompt-input/components/kb-context-selector.tsx +6 -8
  66. package/src/components/chat/ai-prompt-input/components/model-select.tsx +14 -7
  67. package/src/components/chat/ai-prompt-input/components/page-user-context-selector.tsx +6 -8
  68. package/src/components/chat/ai-prompt-input/index.tsx +18 -11
  69. package/src/components/chat/ai-prompt-input/types.ts +6 -5
  70. package/src/components/chat/ai-thinking.tsx +6 -9
  71. package/src/components/chat/chat-thread-page.tsx +4 -5
  72. package/src/components/chat/interrupt-approval.tsx +6 -8
  73. package/src/components/command/command-palette.tsx +7 -10
  74. package/src/components/design/project-card.tsx +2 -3
  75. package/src/components/design/sketch/code-preview.tsx +3 -4
  76. package/src/components/design/sketch/export-panel.tsx +3 -4
  77. package/src/components/design/sketch/property-panel.tsx +16 -17
  78. package/src/components/error/global-error-boundary.tsx +65 -0
  79. package/src/components/forms/app-array-field.tsx +3 -4
  80. package/src/components/forms/app-combobox.tsx +2 -3
  81. package/src/components/forms/app-date-picker.tsx +2 -3
  82. package/src/components/forms/app-form-dialog.tsx +3 -4
  83. package/src/components/forms/app-select.tsx +2 -3
  84. package/src/components/forms/hooks/use-form-submit.ts +2 -2
  85. package/src/components/forms/schemas/common.ts +4 -6
  86. package/src/components/hotkeys/shortcuts-panel.tsx +2 -3
  87. package/src/components/iteration/auto-schedule-dialog.tsx +12 -13
  88. package/src/components/iteration/burndown-chart.tsx +6 -8
  89. package/src/components/iteration/constants.ts +5 -4
  90. package/src/components/iteration/create-iteration-dialog.tsx +14 -15
  91. package/src/components/iteration/iteration-card.tsx +3 -4
  92. package/src/components/iteration/iteration-editor.tsx +7 -8
  93. package/src/components/iteration/iteration-progress-bar.tsx +3 -5
  94. package/src/components/iteration/iteration-status-badge.tsx +1 -3
  95. package/src/components/kibo-ui/contribution-graph/index.tsx +37 -9
  96. package/src/components/knowledge/dialog/knowledge-form-dialog.tsx +8 -9
  97. package/src/components/knowledge/doc-properties.tsx +12 -13
  98. package/src/components/knowledge/editor/doc-header.tsx +7 -8
  99. package/src/components/knowledge/editor/knowledge-doc-editor.tsx +9 -9
  100. package/src/components/knowledge/knowledge-homepage.tsx +6 -7
  101. package/src/components/knowledge/knowledge-tag-input.tsx +3 -4
  102. package/src/components/knowledge/knowledge-toolbar.tsx +38 -40
  103. package/src/components/knowledge/knowledge-tree-item.tsx +21 -22
  104. package/src/components/knowledge/knowledge-tree.tsx +15 -16
  105. package/src/components/knowledge-public/bookmark-card.tsx +13 -14
  106. package/src/components/knowledge-public/bookmark-form-dialog.tsx +25 -26
  107. package/src/components/knowledge-public/knowledge-card-grid.tsx +3 -3
  108. package/src/components/knowledge-public/knowledge-filters.tsx +9 -10
  109. package/src/components/knowledge-public/knowledge-form-dialog.tsx +62 -63
  110. package/src/components/knowledge-public/knowledge-search-bar.tsx +3 -4
  111. package/src/components/knowledge-public/legal-compliance-editor.tsx +30 -31
  112. package/src/components/knowledge-public/markdown-editor.tsx +3 -4
  113. package/src/components/knowledge-public/markdown-view.tsx +2 -3
  114. package/src/components/knowledge-public/sharers-avatar-group.tsx +3 -4
  115. package/src/components/knowledge-public/tag-filter.tsx +3 -4
  116. package/src/components/layout/sidebar-03/__tests__/nav-workspace.test.tsx +42 -79
  117. package/src/components/layout/sidebar-03/__tests__/user-menu-anonymous.test.tsx +51 -0
  118. package/src/components/layout/sidebar-03/app-sidebar.tsx +3 -4
  119. package/src/components/layout/sidebar-03/index.tsx +0 -1
  120. package/src/components/layout/sidebar-03/nav-anyhub.tsx +4 -5
  121. package/src/components/layout/sidebar-03/nav-knowledge.tsx +80 -37
  122. package/src/components/layout/sidebar-03/nav-main.tsx +10 -12
  123. package/src/components/layout/sidebar-03/nav-notifications.tsx +19 -28
  124. package/src/components/layout/sidebar-03/nav-search-trigger.tsx +3 -5
  125. package/src/components/layout/sidebar-03/nav-workspace.tsx +32 -12
  126. package/src/components/layout/sidebar-03/team-switcher.tsx +0 -1
  127. package/src/components/layout/sidebar-03/user-menu.tsx +33 -13
  128. package/src/components/magicui/components/animate/avatar-group.tsx +0 -1
  129. package/src/components/magicui/primitives/animate/avatar-group.tsx +0 -1
  130. package/src/components/magicui/primitives/animate/slot.tsx +0 -1
  131. package/src/components/magicui/primitives/animate/tooltip.tsx +0 -1
  132. package/src/components/magicui/sparkles-text.tsx +0 -1
  133. package/src/components/mindmap/mindmap-doc-editor.tsx +15 -15
  134. package/src/components/notifications/settings-notifications.tsx +22 -23
  135. package/src/components/notifications/team-notifications.tsx +27 -29
  136. package/src/components/plugin-slots/__tests__/plugin-settings-tabs.test.tsx +4 -4
  137. package/src/components/plugin-slots/plugin-settings-tabs.tsx +15 -11
  138. package/src/components/project/create-project-dialog.tsx +60 -34
  139. package/src/components/project/invite-member-dialog.tsx +20 -21
  140. package/src/components/project/project-activity-list.tsx +19 -24
  141. package/src/components/project/project-member-manager.tsx +27 -28
  142. package/src/components/project/project-module-card.tsx +5 -6
  143. package/src/components/project/schemas/create-project.ts +3 -5
  144. package/src/components/prototype/component/GenericPrototype.tsx +0 -1
  145. package/src/components/prototype/component-preview.tsx +0 -1
  146. package/src/components/settings/ai/api-key-field.tsx +8 -10
  147. package/src/components/settings/ai/create-custom-model-dialog.tsx +28 -21
  148. package/src/components/settings/ai/create-custom-provider-dialog.tsx +15 -16
  149. package/src/components/settings/ai/model-card.tsx +25 -10
  150. package/src/components/settings/ai/model-manager.tsx +24 -16
  151. package/src/components/settings/ai/provider-card.tsx +9 -11
  152. package/src/components/settings/ai/provider-detail-form.tsx +24 -26
  153. package/src/components/settings/ai/provider-grid.tsx +23 -13
  154. package/src/components/settings/language-selector.tsx +13 -15
  155. package/src/components/settings/personal-team/account/account-client.tsx +14 -16
  156. package/src/components/settings/personal-team/account/avatar/notion-avatar-editor.tsx +36 -28
  157. package/src/components/settings/personal-team/account/settings-profile.tsx +39 -40
  158. package/src/components/settings/personal-team/team/team-client.tsx +45 -50
  159. package/src/components/settings/personal-team/team/team-invitations.tsx +89 -95
  160. package/src/components/settings/personal-team/team/team-member-list.tsx +50 -47
  161. package/src/components/shadcn-space/blocks/pricing-01/pricing.tsx +170 -172
  162. package/src/components/shared-kit/data-viz/contribution-graph-tooltip.tsx +128 -15
  163. package/src/components/shared-kit/dialogs/name-confirm-dialog.tsx +16 -16
  164. package/src/components/shared-kit/i18n/language-switcher.tsx +6 -9
  165. package/src/components/shared-kit/i18n/translator-text.tsx +2 -4
  166. package/src/components/shared-kit/icons/lucide-icon-picker/panel.tsx +7 -8
  167. package/src/components/shared-kit/logos/logo-icon.tsx +64 -0
  168. package/src/components/shared-kit/navigation/nav-float-button.tsx +3 -5
  169. package/src/components/shared-kit/pages/placeholder-page.tsx +2 -4
  170. package/src/components/shared-kit/theme/animated-theme-toggler.tsx +0 -1
  171. package/src/components/shared-kit/theme/theme-toggle.tsx +0 -1
  172. package/src/components/shared-kit/timezone/timezone-select.tsx +6 -7
  173. package/src/components/story/__tests__/constants.test.ts +7 -7
  174. package/src/components/story/__tests__/dependency-type-badge.test.ts +5 -5
  175. package/src/components/story/ai/action-registry.ts +12 -11
  176. package/src/components/story/ai/handlers/more-popover.tsx +5 -6
  177. package/src/components/story/ai/prototype-dialog.tsx +9 -10
  178. package/src/components/story/ai/split-dialog.tsx +22 -23
  179. package/src/components/story/ai/story-ai-panel.tsx +29 -30
  180. package/src/components/story/ai/story-ai-preview-list.tsx +16 -9
  181. package/src/components/story/ai/story-ai-toolbar.tsx +12 -13
  182. package/src/components/story/columns.tsx +33 -17
  183. package/src/components/story/constants.ts +73 -69
  184. package/src/components/story/create-story-dialog.tsx +13 -14
  185. package/src/components/story/detail/__tests__/categories.test.tsx +8 -10
  186. package/src/components/story/detail/__tests__/dependencies-button.test.tsx +3 -5
  187. package/src/components/story/detail/activity-tabs.tsx +6 -7
  188. package/src/components/story/detail/activity-timeline.tsx +33 -35
  189. package/src/components/story/detail/comment-input.tsx +7 -8
  190. package/src/components/story/detail/comment-item.tsx +15 -16
  191. package/src/components/story/detail/comment-thread.tsx +6 -7
  192. package/src/components/story/detail/reaction-bar.tsx +2 -3
  193. package/src/components/story/detail/story-detail-body.tsx +26 -28
  194. package/src/components/story/detail/story-detail-toolbar/associated-attachments-panel.tsx +42 -45
  195. package/src/components/story/detail/story-detail-toolbar/categories.tsx +13 -14
  196. package/src/components/story/detail/story-detail-toolbar/children.tsx +19 -22
  197. package/src/components/story/detail/story-detail-toolbar/dependencies.tsx +3 -5
  198. package/src/components/story/detail/story-detail-toolbar/dependency-panel.tsx +30 -20
  199. package/src/components/story/detail/story-detail-toolbar.tsx +16 -11
  200. package/src/components/story/detail/story-properties.tsx +7 -8
  201. package/src/components/story/display/__tests__/display-dropdown.test.tsx +3 -5
  202. package/src/components/story/display/__tests__/use-paged-story-groups.test.ts +2 -0
  203. package/src/components/story/display/constants.ts +27 -26
  204. package/src/components/story/display/display-dropdown.tsx +20 -26
  205. package/src/components/story/display/group-resolver.tsx +12 -14
  206. package/src/components/story/display/use-grouped-stories.ts +3 -5
  207. package/src/components/story/display/use-paged-story-groups.ts +12 -13
  208. package/src/components/story/filters/add-filter-dropdown.tsx +4 -5
  209. package/src/components/story/filters/applied-filters.tsx +7 -9
  210. package/src/components/story/filters/filter-condition.tsx +9 -12
  211. package/src/components/story/filters/filter-row.tsx +5 -6
  212. package/src/components/story/filters/filter-toggle.tsx +2 -3
  213. package/src/components/story/filters/filter-types.ts +24 -23
  214. package/src/components/story/filters/filter-value-input.tsx +3 -4
  215. package/src/components/story/infinite-scroll-sentinel.tsx +2 -3
  216. package/src/components/story/inline-editors/__tests__/dependency-type-select.test.tsx +18 -23
  217. package/src/components/story/inline-editors/__tests__/labels-editor.test.tsx +9 -11
  218. package/src/components/story/inline-editors/__tests__/priority-editor.test.tsx +21 -25
  219. package/src/components/story/inline-editors/__tests__/state-editor.test.tsx +21 -25
  220. package/src/components/story/inline-editors/assignee-editor.tsx +8 -9
  221. package/src/components/story/inline-editors/date-editor.tsx +4 -5
  222. package/src/components/story/inline-editors/dependency-type-select.tsx +15 -12
  223. package/src/components/story/inline-editors/inline-trigger.tsx +2 -3
  224. package/src/components/story/inline-editors/labels-editor.tsx +16 -17
  225. package/src/components/story/inline-editors/parent-story-editor.tsx +3 -4
  226. package/src/components/story/inline-editors/priority-editor.tsx +6 -8
  227. package/src/components/story/inline-editors/state-editor.tsx +6 -7
  228. package/src/components/story/inline-editors/story-select-dialog.tsx +25 -26
  229. package/src/components/story/inline-editors/title-editor.tsx +2 -3
  230. package/src/components/story/peek-panel.tsx +6 -7
  231. package/src/components/story/relations/__tests__/knowledge-select-dialog.test.tsx +2 -0
  232. package/src/components/story/relations/__tests__/link-manage-dialog.test.tsx +2 -0
  233. package/src/components/story/relations/attachment-manage-dialog.tsx +23 -24
  234. package/src/components/story/relations/general-groups.ts +12 -29
  235. package/src/components/story/relations/knowledge-select-dialog.tsx +21 -22
  236. package/src/components/story/relations/link-manage-dialog.tsx +12 -13
  237. package/src/components/story/relations/story-ref-row.tsx +20 -21
  238. package/src/components/story/schemas/story-create.ts +3 -5
  239. package/src/components/story/search-popover.tsx +5 -6
  240. package/src/components/story/story-list-table.tsx +3 -4
  241. package/src/components/story/story-list-view.tsx +9 -10
  242. package/src/components/story/story-panel-header.tsx +27 -28
  243. package/src/components/story/story-toolbar.tsx +11 -12
  244. package/src/components/story/transfer-story-popover.tsx +15 -16
  245. package/src/components/story/views/calendar-view.tsx +12 -14
  246. package/src/components/story/views/create-view-dialog.tsx +19 -52
  247. package/src/components/story/views/kanban-board.tsx +9 -12
  248. package/src/components/story/views/kanban-card.tsx +1 -3
  249. package/src/components/story/views/story-list/__tests__/batch-toolbar.test.tsx +9 -2
  250. package/src/components/story/views/story-list/__tests__/group-header.test.tsx +15 -17
  251. package/src/components/story/views/story-list/batch-preview-dialog.tsx +26 -28
  252. package/src/components/story/views/story-list/batch-toolbar.tsx +12 -13
  253. package/src/components/story/views/story-list/group.tsx +9 -11
  254. package/src/components/story/views/story-list/index.tsx +13 -14
  255. package/src/components/story/views/story-list/inline-story-creator.tsx +6 -7
  256. package/src/components/story/views/story-list/row.tsx +6 -7
  257. package/src/components/story/views/timeline-view.tsx +7 -8
  258. package/src/components/story/views/view-list-section.tsx +14 -16
  259. package/src/components/story/views/view-selector-button.tsx +6 -7
  260. package/src/components/story/views/view-switcher.tsx +9 -10
  261. package/src/components/story/views/view-types.ts +15 -15
  262. package/src/components/tiptap/extension/code-block-ellipsis-input-extension.ts +0 -1
  263. package/src/components/tiptap/hooks/use-composed-ref.ts +0 -1
  264. package/src/components/tiptap/hooks/use-cursor-visibility.ts +0 -1
  265. package/src/components/tiptap/hooks/use-floating-element.ts +0 -1
  266. package/src/components/tiptap/hooks/use-is-breakpoint.ts +0 -1
  267. package/src/components/tiptap/hooks/use-isomorphic-layout-effect.ts +0 -1
  268. package/src/components/tiptap/hooks/use-menu-navigation.ts +0 -1
  269. package/src/components/tiptap/hooks/use-on-click-outside.ts +0 -1
  270. package/src/components/tiptap/hooks/use-tiptap-editor.ts +0 -1
  271. package/src/components/tiptap/hooks/use-ui-editor-state.ts +0 -1
  272. package/src/components/tiptap/mindmap/lib/__tests__/default-mindmap-data.test.ts +3 -2
  273. package/src/components/tiptap/mindmap/lib/default-mindmap-data.ts +2 -2
  274. package/src/components/tiptap/mindmap/mind-map.tsx +36 -39
  275. package/src/components/tiptap/mindmap/mindmap-fullscreen-dialog.tsx +2 -3
  276. package/src/components/tiptap/node/annotation-node/annotation-node-view.tsx +11 -12
  277. package/src/components/tiptap/node/doc-card-extension.tsx +8 -10
  278. package/src/components/tiptap/node/image-node/image-node-floating.tsx +2 -3
  279. package/src/components/tiptap/node/image-upload-node/image-upload-node.tsx +0 -1
  280. package/src/components/tiptap/node/mention-extension.ts +5 -5
  281. package/src/components/tiptap/node/table-node/hooks/use-table-handle-state.ts +0 -1
  282. package/src/components/tiptap/node/table-node/ui/table-add-row-column-button/table-add-row-column-button.tsx +0 -1
  283. package/src/components/tiptap/node/table-node/ui/table-add-row-column-button/use-table-add-row-column.ts +5 -6
  284. package/src/components/tiptap/node/table-node/ui/table-align-cell-button/table-align-cell-button.tsx +0 -1
  285. package/src/components/tiptap/node/table-node/ui/table-align-cell-button/use-table-align-cell.ts +8 -9
  286. package/src/components/tiptap/node/table-node/ui/table-alignment-menu/table-alignment-menu.tsx +2 -4
  287. package/src/components/tiptap/node/table-node/ui/table-cell-handle-menu/table-cell-handle-menu.tsx +2 -5
  288. package/src/components/tiptap/node/table-node/ui/table-clear-row-column-content-button/table-clear-row-column-content-button.tsx +0 -1
  289. package/src/components/tiptap/node/table-node/ui/table-clear-row-column-content-button/use-table-clear-row-column-content.ts +4 -5
  290. package/src/components/tiptap/node/table-node/ui/table-delete-row-column-button/table-delete-row-column-button.tsx +0 -1
  291. package/src/components/tiptap/node/table-node/ui/table-delete-row-column-button/use-table-delete-row-column.ts +3 -4
  292. package/src/components/tiptap/node/table-node/ui/table-duplicate-row-column-button/table-duplicate-row-column-button.tsx +0 -1
  293. package/src/components/tiptap/node/table-node/ui/table-duplicate-row-column-button/use-table-duplicate-row-column.ts +3 -4
  294. package/src/components/tiptap/node/table-node/ui/table-extend-row-column-button/table-extend-row-column-button.tsx +2 -4
  295. package/src/components/tiptap/node/table-node/ui/table-fit-to-width-button/table-fit-to-width-button.tsx +0 -1
  296. package/src/components/tiptap/node/table-node/ui/table-fit-to-width-button/use-table-fit-to-width.ts +3 -4
  297. package/src/components/tiptap/node/table-node/ui/table-handle/table-handle.tsx +0 -1
  298. package/src/components/tiptap/node/table-node/ui/table-handle-menu/table-handle-menu.tsx +3 -5
  299. package/src/components/tiptap/node/table-node/ui/table-header-row-column-button/table-header-row-column-button.tsx +0 -1
  300. package/src/components/tiptap/node/table-node/ui/table-header-row-column-button/use-table-header-row-column.ts +3 -4
  301. package/src/components/tiptap/node/table-node/ui/table-merge-split-cell-button/table-merge-split-cell-button.tsx +0 -1
  302. package/src/components/tiptap/node/table-node/ui/table-merge-split-cell-button/use-table-merge-split-cell.ts +3 -4
  303. package/src/components/tiptap/node/table-node/ui/table-move-row-column-button/table-move-row-column-button.tsx +0 -1
  304. package/src/components/tiptap/node/table-node/ui/table-move-row-column-button/use-table-move-row-column.ts +9 -10
  305. package/src/components/tiptap/node/table-node/ui/table-selection-overlay/table-selection-overlay.tsx +0 -1
  306. package/src/components/tiptap/node/table-node/ui/table-selection-overlay/use-resize-overlay.ts +0 -1
  307. package/src/components/tiptap/node/table-node/ui/table-sort-row-column-button/table-sort-row-column-button.tsx +0 -1
  308. package/src/components/tiptap/node/table-node/ui/table-sort-row-column-button/use-table-sort-row-column.ts +5 -6
  309. package/src/components/tiptap/node/table-node/ui/table-trigger-button/table-grid-selector.tsx +2 -3
  310. package/src/components/tiptap/node/table-node/ui/table-trigger-button/table-trigger-button.tsx +0 -1
  311. package/src/components/tiptap/node/table-node/ui/table-trigger-button/use-table-trigger.ts +3 -4
  312. package/src/components/tiptap/node/toc-node/toc-node.tsx +2 -4
  313. package/src/components/tiptap/node/toc-node/ui/toc-show-title-button/toc-show-title-button.tsx +0 -1
  314. package/src/components/tiptap/node/toc-node/ui/toc-show-title-button/toc-show-title.ts +2 -3
  315. package/src/components/tiptap/node/toc-node/ui/toc-sidebar/toc-sidebar.tsx +2 -5
  316. package/src/components/tiptap/notion-like/notion-like-editor-header.tsx +2 -4
  317. package/src/components/tiptap/notion-like/notion-like-editor-mobile-toolbar.tsx +17 -23
  318. package/src/components/tiptap/notion-like/notion-like-editor-theme-toggle.tsx +2 -5
  319. package/src/components/tiptap/notion-like/notion-like-editor-toolbar-floating.tsx +16 -12
  320. package/src/components/tiptap/notion-like/notion-like-editor.tsx +2 -7
  321. package/src/components/tiptap/notion-like/setup-error-message/setup-error-message.tsx +0 -1
  322. package/src/components/tiptap/ui/ai-ask-button/ai-ask-button.tsx +0 -1
  323. package/src/components/tiptap/ui/ai-ask-button/use-ai-ask.ts +2 -3
  324. package/src/components/tiptap/ui/ai-menu/ai-menu-actions/ai-menu-actions.tsx +4 -6
  325. package/src/components/tiptap/ui/ai-menu/ai-menu-input/ai-menu-input.tsx +6 -10
  326. package/src/components/tiptap/ui/ai-menu/ai-menu-items/ai-menu-items-constants.ts +36 -36
  327. package/src/components/tiptap/ui/ai-menu/ai-menu-items/ai-menu-items.tsx +13 -16
  328. package/src/components/tiptap/ui/ai-menu/ai-menu-items/language-selection-submenu.tsx +3 -4
  329. package/src/components/tiptap/ui/ai-menu/ai-menu-items/tone-selection-submenu.tsx +2 -3
  330. package/src/components/tiptap/ui/ai-menu/ai-menu-utils.ts +3 -3
  331. package/src/components/tiptap/ui/ai-menu/ai-menu.tsx +3 -5
  332. package/src/components/tiptap/ui/blockquote-button/blockquote-button.tsx +2 -6
  333. package/src/components/tiptap/ui/blockquote-button/use-blockquote.ts +2 -3
  334. package/src/components/tiptap/ui/code-block-button/code-block-button.tsx +2 -6
  335. package/src/components/tiptap/ui/code-block-button/use-code-block.ts +2 -3
  336. package/src/components/tiptap/ui/color-highlight-button/color-highlight-button.tsx +0 -1
  337. package/src/components/tiptap/ui/color-highlight-button/use-color-highlight.ts +14 -14
  338. package/src/components/tiptap/ui/color-highlight-popover/color-highlight-popover.tsx +9 -11
  339. package/src/components/tiptap/ui/color-menu/color-menu.tsx +5 -11
  340. package/src/components/tiptap/ui/color-text-button/color-text-button.tsx +2 -3
  341. package/src/components/tiptap/ui/color-text-button/use-color-text.ts +12 -13
  342. package/src/components/tiptap/ui/color-text-popover/color-text-popover.tsx +6 -10
  343. package/src/components/tiptap/ui/color-text-popover/use-color-text-popover.ts +2 -3
  344. package/src/components/tiptap/ui/copy-anchor-link-button/copy-anchor-link-button.tsx +2 -6
  345. package/src/components/tiptap/ui/copy-anchor-link-button/use-copy-anchor-link.ts +2 -3
  346. package/src/components/tiptap/ui/copy-anchor-link-button/use-scroll-to-hash.ts +0 -1
  347. package/src/components/tiptap/ui/copy-to-clipboard-button/copy-to-clipboard-button.tsx +2 -6
  348. package/src/components/tiptap/ui/copy-to-clipboard-button/use-copy-to-clipboard.ts +2 -3
  349. package/src/components/tiptap/ui/delete-node-button/delete-node-button.tsx +2 -6
  350. package/src/components/tiptap/ui/delete-node-button/use-delete-node.ts +2 -3
  351. package/src/components/tiptap/ui/doc-reference-floating/doc-reference-floating.tsx +10 -11
  352. package/src/components/tiptap/ui/doc-reference-interaction/doc-reference-interaction.tsx +10 -11
  353. package/src/components/tiptap/ui/drag-context-menu/drag-context-menu.tsx +7 -9
  354. package/src/components/tiptap/ui/duplicate-button/duplicate-button.tsx +2 -6
  355. package/src/components/tiptap/ui/duplicate-button/use-duplicate.ts +2 -3
  356. package/src/components/tiptap/ui/emoji-dropdown-menu/emoji-dropdown-menu.tsx +0 -1
  357. package/src/components/tiptap/ui/emoji-menu/emoji-menu.tsx +2 -5
  358. package/src/components/tiptap/ui/emoji-trigger-button/emoji-trigger-button.tsx +2 -6
  359. package/src/components/tiptap/ui/emoji-trigger-button/use-emoji-trigger.ts +2 -3
  360. package/src/components/tiptap/ui/heading-button/heading-button.tsx +0 -1
  361. package/src/components/tiptap/ui/heading-button/use-heading.ts +7 -8
  362. package/src/components/tiptap/ui/image-align-button/image-align-button.tsx +0 -1
  363. package/src/components/tiptap/ui/image-align-button/use-image-align.ts +4 -5
  364. package/src/components/tiptap/ui/image-caption-button/image-caption-button.tsx +0 -1
  365. package/src/components/tiptap/ui/image-caption-button/use-image-caption.ts +2 -3
  366. package/src/components/tiptap/ui/image-download-button/image-download-button.tsx +0 -1
  367. package/src/components/tiptap/ui/image-download-button/use-image-download.ts +2 -3
  368. package/src/components/tiptap/ui/image-upload-button/image-upload-button.tsx +0 -1
  369. package/src/components/tiptap/ui/image-upload-button/use-image-upload.ts +2 -3
  370. package/src/components/tiptap/ui/improve-dropdown/improve-dropdown.tsx +14 -17
  371. package/src/components/tiptap/ui/improve-dropdown/use-improve-dropdown.ts +2 -3
  372. package/src/components/tiptap/ui/indent-button/indent-button.tsx +0 -1
  373. package/src/components/tiptap/ui/indent-button/use-indent.ts +3 -4
  374. package/src/components/tiptap/ui/link-popover/link-popover.tsx +7 -12
  375. package/src/components/tiptap/ui/link-popover/use-link-popover.ts +2 -3
  376. package/src/components/tiptap/ui/list-button/list-button.tsx +0 -1
  377. package/src/components/tiptap/ui/list-button/use-list.ts +4 -5
  378. package/src/components/tiptap/ui/mark-button/mark-button.tsx +0 -1
  379. package/src/components/tiptap/ui/mark-button/use-mark.ts +8 -9
  380. package/src/components/tiptap/ui/mention-dropdown-menu/mention-dropdown-menu.tsx +0 -2
  381. package/src/components/tiptap/ui/mention-trigger-button/mention-trigger-button.tsx +0 -1
  382. package/src/components/tiptap/ui/mention-trigger-button/use-mention-trigger.ts +2 -3
  383. package/src/components/tiptap/ui/move-node-button/move-node-button.tsx +2 -6
  384. package/src/components/tiptap/ui/move-node-button/use-move-node.ts +2 -3
  385. package/src/components/tiptap/ui/reference-dropdown-menu/reference-dropdown-menu.tsx +6 -10
  386. package/src/components/tiptap/ui/reset-all-formatting-button/reset-all-formatting-button.tsx +2 -6
  387. package/src/components/tiptap/ui/reset-all-formatting-button/use-reset-all-formatting.ts +2 -3
  388. package/src/components/tiptap/ui/slash-command-trigger-button/slash-command-trigger-button.tsx +0 -1
  389. package/src/components/tiptap/ui/slash-command-trigger-button/use-slash-command-trigger.ts +2 -3
  390. package/src/components/tiptap/ui/slash-dropdown-menu/slash-dropdown-menu.tsx +2 -5
  391. package/src/components/tiptap/ui/slash-dropdown-menu/use-slash-dropdown-menu.ts +78 -79
  392. package/src/components/tiptap/ui/text-align-button/text-align-button.tsx +0 -1
  393. package/src/components/tiptap/ui/text-align-button/use-text-align.ts +5 -6
  394. package/src/components/tiptap/ui/text-button/text-button.tsx +2 -6
  395. package/src/components/tiptap/ui/text-button/use-text.ts +2 -3
  396. package/src/components/tiptap/ui/turn-into-dropdown/turn-into-dropdown.tsx +4 -7
  397. package/src/components/tiptap/ui/turn-into-dropdown/use-turn-into-dropdown.ts +11 -12
  398. package/src/components/tiptap/ui/undo-redo-button/undo-redo-button.tsx +0 -1
  399. package/src/components/tiptap/ui/undo-redo-button/use-undo-redo.ts +3 -4
  400. package/src/components/tiptap/ui-primitive/avatar/avatar.tsx +0 -1
  401. package/src/components/tiptap/ui-primitive/badge/badge.tsx +0 -1
  402. package/src/components/tiptap/ui-primitive/button/button.tsx +0 -1
  403. package/src/components/tiptap/ui-primitive/card/card.tsx +0 -1
  404. package/src/components/tiptap/ui-primitive/combobox/combobox.tsx +0 -1
  405. package/src/components/tiptap/ui-primitive/dropdown-menu/dropdown-menu.tsx +0 -1
  406. package/src/components/tiptap/ui-primitive/input/input.tsx +0 -1
  407. package/src/components/tiptap/ui-primitive/input-group/input-group.tsx +0 -1
  408. package/src/components/tiptap/ui-primitive/label/label.tsx +0 -1
  409. package/src/components/tiptap/ui-primitive/menu/menu-context.ts +0 -1
  410. package/src/components/tiptap/ui-primitive/menu/menu-hooks.ts +0 -1
  411. package/src/components/tiptap/ui-primitive/menu/menu-types.ts +0 -1
  412. package/src/components/tiptap/ui-primitive/menu/menu-utils.ts +0 -1
  413. package/src/components/tiptap/ui-primitive/menu/menu.tsx +0 -1
  414. package/src/components/tiptap/ui-primitive/popover/popover.tsx +0 -1
  415. package/src/components/tiptap/ui-primitive/separator/separator.tsx +0 -1
  416. package/src/components/tiptap/ui-primitive/sidebar/sidebar.tsx +0 -1
  417. package/src/components/tiptap/ui-primitive/spacer/spacer.tsx +0 -1
  418. package/src/components/tiptap/ui-primitive/textarea/textarea.tsx +0 -1
  419. package/src/components/tiptap/ui-primitive/textarea-autosize/textarea-autosize.tsx +0 -1
  420. package/src/components/tiptap/ui-primitive/toolbar/toolbar.tsx +0 -1
  421. package/src/components/tiptap/ui-primitive/tooltip/tooltip.tsx +0 -1
  422. package/src/components/tiptap/ui-utils/floating-element/floating-element.tsx +0 -1
  423. package/src/components/tiptap/ui-utils/suggestion-menu/suggestion-menu.tsx +0 -1
  424. package/src/components/ui/field.tsx +1 -1
  425. package/src/components/ui/radio-group.tsx +2 -3
  426. package/src/components/ui/spinner.tsx +2 -2
  427. package/src/components/workspace/create-workspace-dialog.tsx +12 -13
  428. package/src/components/workspace/delete-workspace-options.tsx +177 -0
  429. package/src/components/workspace/edit-workspace-dialog.tsx +153 -0
  430. package/src/components/workspace/schemas/create-workspace.ts +2 -2
  431. package/src/components/workspace/workspace-activity-card.tsx +60 -0
  432. package/src/components/workspace/workspace-contribution-card.tsx +37 -0
  433. package/src/components/workspace/workspace-header.tsx +100 -0
  434. package/src/components/workspace/workspace-kb-card.tsx +31 -0
  435. package/src/components/workspace/workspace-member-item.tsx +80 -0
  436. package/src/components/workspace/workspace-members-manager.tsx +291 -0
  437. package/src/components/workspace/workspace-project-list.tsx +129 -0
  438. package/src/config/sidebar-routes.tsx +25 -24
  439. package/src/config/sidebar-teams.ts +4 -4
  440. package/src/hooks/__tests__/use-commands.test.tsx +0 -10
  441. package/src/hooks/use-commands.ts +3 -7
  442. package/src/hooks/use-entity-subscription.ts +0 -1
  443. package/src/hooks/use-notifications.ts +5 -6
  444. package/src/hooks/useTranslator.ts +0 -1
  445. package/src/lib/__tests__/edition.test.ts +9 -0
  446. package/src/lib/analytics.ts +0 -1
  447. package/src/lib/anyhub/anyhub-message-bridge.ts +1 -1
  448. package/src/lib/auth/__tests__/anonymous-safe.test.ts +89 -0
  449. package/src/lib/auth/__tests__/page-gate.test.ts +29 -0
  450. package/src/lib/auth/anonymous-safe.ts +39 -0
  451. package/src/lib/auth/page-gate.ts +18 -0
  452. package/src/lib/changelog/sdk-versions.ts +19 -19
  453. package/src/lib/collections/knowledge/knowledge-bases-collection.ts +1 -1
  454. package/src/lib/collections/reference/bookmark-categories-collection.ts +1 -1
  455. package/src/lib/collections/reference/labels-collection.ts +1 -1
  456. package/src/lib/collections/reference/projects-collection.ts +1 -1
  457. package/src/lib/collections/reference/users-brief-collection.ts +1 -1
  458. package/src/lib/collections/reference/workspaces-collection.ts +3 -3
  459. package/src/lib/commands/__tests__/registry.test.ts +3 -3
  460. package/src/lib/commands/registry.ts +22 -21
  461. package/src/lib/commands/types.ts +1 -1
  462. package/src/lib/edition.ts +7 -0
  463. package/src/lib/router-context.ts +1 -2
  464. package/src/plugins/.gen-manifest.json +13 -0
  465. package/src/plugins/core/inspiration/pages/inspiration-page.tsx +2 -3
  466. package/src/plugins/core/inspiration/ui.tsx +2 -3
  467. package/src/plugins/core/prd/components/agent-input.tsx +7 -8
  468. package/src/plugins/core/prd/components/component-editor/content-section.tsx +3 -3
  469. package/src/plugins/core/prd/components/component-editor/position-section.tsx +3 -4
  470. package/src/plugins/core/prd/components/component-editor/style-fields.tsx +13 -16
  471. package/src/plugins/core/prd/components/dialog/create-prd-dialog.tsx +11 -12
  472. package/src/plugins/core/prd/components/dialog/prd-detail-client.tsx +7 -9
  473. package/src/plugins/core/prd/components/page-version-panel/components/create-version-dialog.tsx +7 -8
  474. package/src/plugins/core/prd/components/page-version-panel/components/delete-version-dialog.tsx +5 -6
  475. package/src/plugins/core/prd/components/page-version-panel/components/edit-version-dialog.tsx +7 -8
  476. package/src/plugins/core/prd/components/page-version-panel/constants.tsx +3 -2
  477. package/src/plugins/core/prd/components/page-version-panel.tsx +43 -45
  478. package/src/plugins/core/prd/components/page-version-tree.tsx +6 -8
  479. package/src/plugins/core/prd/components/prd-agent-panel.tsx +29 -23
  480. package/src/plugins/core/prd/components/prd-comment-review-panel.tsx +21 -23
  481. package/src/plugins/core/prd/components/prd-component-editor-content.tsx +6 -7
  482. package/src/plugins/core/prd/components/prd-dashboard.tsx +28 -23
  483. package/src/plugins/core/prd/components/prd-doc-panel.tsx +6 -9
  484. package/src/plugins/core/prd/components/prd-editor-layout.tsx +11 -13
  485. package/src/plugins/core/prd/components/prd-filter-bar.tsx +2 -3
  486. package/src/plugins/core/prd/components/prd-left-sidebar.tsx +19 -20
  487. package/src/plugins/core/prd/components/prd-navigation.tsx +12 -14
  488. package/src/plugins/core/prd/components/prd-outline-tab.tsx +3 -4
  489. package/src/plugins/core/prd/components/prd-prototype-panel.tsx +8 -10
  490. package/src/plugins/core/prd/components/prd-right-sidebar.tsx +10 -12
  491. package/src/plugins/core/prd/components/prd-share-panel/components/single-version-share-card.tsx +13 -14
  492. package/src/plugins/core/prd/components/prd-share-panel/constants.ts +5 -3
  493. package/src/plugins/core/prd/components/prd-share-panel.tsx +58 -60
  494. package/src/plugins/core/prd/components/prd-tree-page-tab.tsx +20 -22
  495. package/src/plugins/core/prd/components/prototype/PrototypeCanvas.tsx +2 -4
  496. package/src/plugins/core/prd/components/prototype/PrototypeElement.tsx +3 -5
  497. package/src/plugins/core/prd/components/prototype/ResizeHandles.tsx +0 -1
  498. package/src/plugins/core/prd/components/prototype/icon-components.ts +19 -21
  499. package/src/plugins/core/prd/components/prototype/index.ts +3 -0
  500. package/src/plugins/core/prd/components/restore-version-dialog.tsx +5 -7
  501. package/src/plugins/core/prd/components/share/prd-share-client.tsx +7 -9
  502. package/src/plugins/core/prd/components/share/share-annotation-overlay.tsx +0 -1
  503. package/src/plugins/core/prd/components/share/share-comment-panel.tsx +15 -16
  504. package/src/plugins/core/prd/components/share/share-comment-review-panel.tsx +7 -9
  505. package/src/plugins/core/prd/components/share/share-directory-tree.tsx +3 -5
  506. package/src/plugins/core/prd/components/share/share-doc-view.tsx +3 -5
  507. package/src/plugins/core/prd/components/share/share-layout.tsx +3 -5
  508. package/src/plugins/core/prd/components/share/share-nav-bar.tsx +3 -5
  509. package/src/plugins/core/prd/components/share/share-password-gate.tsx +8 -9
  510. package/src/plugins/core/prd/components/share/share-prototype-view.tsx +3 -5
  511. package/src/plugins/core/prd/components/share/share-review-panel.tsx +9 -11
  512. package/src/plugins/core/prd/components/share/share-sse-listener.tsx +0 -1
  513. package/src/plugins/core/prd/components/share/version-share-client.tsx +3 -5
  514. package/src/plugins/core/prd/pages/prd-detail-page.tsx +9 -21
  515. package/src/plugins/core/prd/pages/share-prd-page.tsx +6 -16
  516. package/src/plugins/core/prd/prd-nav.tsx +2 -3
  517. package/src/plugins/core/tags/nav-tag.tsx +14 -15
  518. package/src/plugins/core/tags/pages/tag-detail-page.tsx +3 -5
  519. package/src/plugins/core/tags/pages/tag-settings-page.tsx +3 -5
  520. package/src/plugins/core/tags/pages/tags-index-page.tsx +3 -5
  521. package/src/plugins/core/tags/tag-badge.tsx +2 -3
  522. package/src/plugins/core/tags/tag-color-picker.tsx +2 -4
  523. package/src/plugins/core/tags/tag-manager.tsx +23 -25
  524. package/src/plugins/core/tags/tag-selector.tsx +4 -5
  525. package/src/plugins/modules.gen.ts +21 -0
  526. package/src/plugins/plugins.gen.ts +20 -0
  527. package/src/plugins/ui.gen.ts +8 -0
  528. package/src/providers/index.tsx +3 -14
  529. package/src/routeTree.gen.ts +27 -0
  530. package/src/router.tsx +16 -6
  531. package/src/routes/__desktop/onboarding/route.lazy.tsx +22 -23
  532. package/src/routes/__root.tsx +13 -36
  533. package/src/routes/__tests__/-edition-routing.test.tsx +151 -0
  534. package/src/routes/_login/forgot-password/route.lazy.tsx +14 -15
  535. package/src/routes/_login/login/route.lazy.tsx +26 -25
  536. package/src/routes/_login/register/route.lazy.tsx +23 -24
  537. package/src/routes/_login/reset-password/route.lazy.tsx +16 -17
  538. package/src/routes/_login/schemas/-auth.ts +11 -13
  539. package/src/routes/_nav/acceptance-criteria/route.tsx +2 -3
  540. package/src/routes/_nav/apps/anyhub/$id/route.tsx +2 -3
  541. package/src/routes/_nav/chat/route.lazy.tsx +9 -10
  542. package/src/routes/_nav/dashboard/-components/activity-feed.tsx +3 -4
  543. package/src/routes/_nav/dashboard/-components/quick-actions.tsx +3 -4
  544. package/src/routes/_nav/dashboard/-components/stats-grid.tsx +5 -6
  545. package/src/routes/_nav/dashboard/route.lazy.tsx +7 -8
  546. package/src/routes/_nav/design/$projectId/$artboardId/route.lazy.tsx +7 -9
  547. package/src/routes/_nav/design/$projectId/route.lazy.tsx +3 -5
  548. package/src/routes/_nav/design/index.lazy.tsx +26 -27
  549. package/src/routes/_nav/inspiration/route.tsx +8 -0
  550. package/src/routes/_nav/knowledge/$kbId/doc/$docId/route.lazy.tsx +4 -5
  551. package/src/routes/_nav/knowledge/$kbId/route.lazy.tsx +3 -4
  552. package/src/routes/_nav/knowledge/bookmarks/$id.lazy.tsx +29 -30
  553. package/src/routes/_nav/knowledge/bookmarks/index.lazy.tsx +12 -13
  554. package/src/routes/_nav/knowledge/compliance/$id.lazy.tsx +22 -23
  555. package/src/routes/_nav/knowledge/compliance/index.lazy.tsx +18 -19
  556. package/src/routes/_nav/knowledge/dictionaries/$id.lazy.tsx +5 -6
  557. package/src/routes/_nav/knowledge/dictionaries/index.lazy.tsx +17 -18
  558. package/src/routes/_nav/knowledge/index.lazy.tsx +248 -40
  559. package/src/routes/_nav/knowledge/laws/$id.lazy.tsx +22 -23
  560. package/src/routes/_nav/knowledge/laws/index.lazy.tsx +14 -15
  561. package/src/routes/_nav/knowledge/summary/index.lazy.tsx +31 -32
  562. package/src/routes/_nav/notifications/route.lazy.tsx +3 -4
  563. package/src/routes/_nav/notifications/route.tsx +2 -0
  564. package/src/routes/_nav/notion-like/route.tsx +2 -3
  565. package/src/routes/_nav/prd/$id/route.tsx +9 -0
  566. package/src/routes/_nav/prd/index.tsx +9 -0
  567. package/src/routes/_nav/prd/route.tsx +8 -0
  568. package/src/routes/_nav/pricing-02/route.tsx +2 -3
  569. package/src/routes/_nav/projects/$projectId/$storyId/route.lazy.tsx +23 -24
  570. package/src/routes/_nav/projects/$projectId/index.lazy.tsx +54 -74
  571. package/src/routes/_nav/projects/$projectId/iterations/$iterationId/route.lazy.tsx +27 -30
  572. package/src/routes/_nav/projects/$projectId/iterations/index.lazy.tsx +9 -10
  573. package/src/routes/_nav/projects/$projectId/route.tsx +4 -2
  574. package/src/routes/_nav/projects/$projectId/settings/route.lazy.tsx +40 -41
  575. package/src/routes/_nav/route.tsx +13 -16
  576. package/src/routes/_nav/settings/-settings-tabs.tsx +24 -51
  577. package/src/routes/_nav/settings/account/route.lazy.tsx +1 -9
  578. package/src/routes/_nav/settings/ai/index/route.lazy.tsx +5 -6
  579. package/src/routes/_nav/settings/billing/route.lazy.tsx +4 -5
  580. package/src/routes/_nav/settings/connection/route.lazy.tsx +14 -10
  581. package/src/routes/_nav/settings/design/route.lazy.tsx +21 -22
  582. package/src/routes/_nav/settings/general/route.lazy.tsx +10 -11
  583. package/src/routes/_nav/settings/notifications/route.lazy.tsx +3 -5
  584. package/src/routes/_nav/settings/privacy/route.lazy.tsx +15 -16
  585. package/src/routes/_nav/settings/route.lazy.tsx +2 -3
  586. package/src/routes/_nav/settings/route.tsx +10 -15
  587. package/src/routes/_nav/settings/team/route.lazy.tsx +1 -9
  588. package/src/routes/_nav/tags/$id/route.tsx +8 -0
  589. package/src/routes/_nav/tags/index.tsx +8 -0
  590. package/src/routes/_nav/tags/route.tsx +8 -0
  591. package/src/routes/_nav/tags/settings/route.tsx +9 -0
  592. package/src/routes/_nav/test-cases/route.tsx +2 -3
  593. package/src/routes/_nav/workspaces/$workspaceId/activities/route.lazy.tsx +69 -0
  594. package/src/routes/_nav/workspaces/$workspaceId/activities/route.tsx +28 -0
  595. package/src/routes/_nav/workspaces/$workspaceId/route.lazy.tsx +194 -99
  596. package/src/routes/_nav/workspaces/$workspaceId/route.tsx +12 -3
  597. package/src/routes/_nav/workspaces/$workspaceId/settings/route.lazy.tsx +75 -61
  598. package/src/routes/_nav/workspaces/index.lazy.tsx +196 -22
  599. package/src/routes/_nav/workspaces/route.tsx +2 -0
  600. package/src/routes/_public/index/route.tsx +5 -1
  601. package/src/routes/invite/$token/route.lazy.tsx +36 -37
  602. package/src/routes/share/$versionId/route.lazy.tsx +4 -11
  603. package/src/routes/share/compliance/$id/route.lazy.tsx +6 -8
  604. package/src/routes/share/law/$id/route.lazy.tsx +6 -8
  605. package/src/routes/share/prd/$prdId/route.tsx +10 -0
  606. package/src/server/__tests__/agent-client-graph.test.ts +4 -8
  607. package/src/server/ai-ports.ts +7 -6
  608. package/src/server/builtin-project.ts +43 -0
  609. package/src/server/design/sketch/file-storage.ts +1 -1
  610. package/src/server/pro-services.ts +1 -1
  611. package/src/server/serverFns/__tests__/workspace.test.ts +101 -0
  612. package/src/server/serverFns/activity.ts +15 -9
  613. package/src/server/serverFns/knowledge-public/bookmarks/list.ts +1 -1
  614. package/src/server/serverFns/knowledge-public/bookmarks/share.ts +3 -3
  615. package/src/server/serverFns/knowledge-public/compliance/share.ts +3 -3
  616. package/src/server/serverFns/knowledge-public/dictionary/share.ts +3 -3
  617. package/src/server/serverFns/knowledge-public/legal/share.ts +3 -3
  618. package/src/server/serverFns/knowledge.ts +27 -2
  619. package/src/server/serverFns/notifications.ts +3 -0
  620. package/src/server/serverFns/project.ts +48 -35
  621. package/src/server/serverFns/story/story-crud/bulk.ts +2 -2
  622. package/src/server/serverFns/story/story-crud.ts +9 -7
  623. package/src/server/serverFns/story/story-groups.ts +6 -6
  624. package/src/server/serverFns/workspace.ts +334 -13
  625. package/src/server-entry.ts +29 -0
  626. package/vite.shared.ts +4 -1
  627. package/src/components/layout/sidebar-03/logo.tsx +0 -41
  628. package/src/i18n/__tests__/detect.test.ts +0 -48
  629. package/src/i18n/__tests__/integration.test.tsx +0 -32
  630. package/src/i18n/__tests__/server.test.ts +0 -33
  631. package/src/i18n/client.ts +0 -32
  632. package/src/i18n/config.ts +0 -116
  633. package/src/i18n/detect.ts +0 -43
  634. package/src/i18n/locales/en/agents.json +0 -134
  635. package/src/i18n/locales/en/apps.json +0 -6
  636. package/src/i18n/locales/en/auth.json +0 -90
  637. package/src/i18n/locales/en/billing.json +0 -78
  638. package/src/i18n/locales/en/chat.json +0 -194
  639. package/src/i18n/locales/en/common.json +0 -242
  640. package/src/i18n/locales/en/dashboard.json +0 -38
  641. package/src/i18n/locales/en/design.json +0 -70
  642. package/src/i18n/locales/en/desktop.json +0 -35
  643. package/src/i18n/locales/en/display.json +0 -37
  644. package/src/i18n/locales/en/editor.json +0 -304
  645. package/src/i18n/locales/en/enterprise.json +0 -1
  646. package/src/i18n/locales/en/invite.json +0 -56
  647. package/src/i18n/locales/en/iterations.json +0 -92
  648. package/src/i18n/locales/en/knowledge.json +0 -462
  649. package/src/i18n/locales/en/mindmap.json +0 -28
  650. package/src/i18n/locales/en/notifications.json +0 -79
  651. package/src/i18n/locales/en/prd.json +0 -51
  652. package/src/i18n/locales/en/projects.json +0 -140
  653. package/src/i18n/locales/en/settings.json +0 -428
  654. package/src/i18n/locales/en/share.json +0 -20
  655. package/src/i18n/locales/en/story.json +0 -923
  656. package/src/i18n/locales/en/tags.json +0 -42
  657. package/src/i18n/locales/en/workspace.json +0 -90
  658. package/src/i18n/locales/zh/agents.json +0 -134
  659. package/src/i18n/locales/zh/apps.json +0 -6
  660. package/src/i18n/locales/zh/auth.json +0 -90
  661. package/src/i18n/locales/zh/billing.json +0 -78
  662. package/src/i18n/locales/zh/chat.json +0 -194
  663. package/src/i18n/locales/zh/common.json +0 -242
  664. package/src/i18n/locales/zh/dashboard.json +0 -38
  665. package/src/i18n/locales/zh/design.json +0 -70
  666. package/src/i18n/locales/zh/desktop.json +0 -35
  667. package/src/i18n/locales/zh/display.json +0 -37
  668. package/src/i18n/locales/zh/editor.json +0 -304
  669. package/src/i18n/locales/zh/enterprise.json +0 -1
  670. package/src/i18n/locales/zh/invite.json +0 -56
  671. package/src/i18n/locales/zh/iterations.json +0 -92
  672. package/src/i18n/locales/zh/knowledge.json +0 -462
  673. package/src/i18n/locales/zh/mindmap.json +0 -28
  674. package/src/i18n/locales/zh/notifications.json +0 -79
  675. package/src/i18n/locales/zh/prd.json +0 -51
  676. package/src/i18n/locales/zh/projects.json +0 -140
  677. package/src/i18n/locales/zh/settings.json +0 -428
  678. package/src/i18n/locales/zh/share.json +0 -20
  679. package/src/i18n/locales/zh/story.json +0 -923
  680. package/src/i18n/locales/zh/tags.json +0 -42
  681. package/src/i18n/locales/zh/workspace.json +0 -90
  682. package/src/i18n/server.ts +0 -18
  683. package/src/i18n/types.ts +0 -5
  684. package/src/server/serverFns/locale.ts +0 -20
@@ -71,11 +71,11 @@ import { reindexKnowledgeBaseFn } from '@/server/serverFns/knowledge-index'
71
71
  import { toast } from '@/components/ui/sonner'
72
72
  import { KnowledgeFormDialog } from '@/components/knowledge/dialog/knowledge-form-dialog'
73
73
  import { cn } from '@/lib/utils'
74
- import { useTranslation } from 'react-i18next'
75
74
  import { Checkbox } from '@/components/ui/checkbox'
76
75
  import { Link as LinkIcon } from 'lucide-react'
77
76
  import { listKbProjectsFn, setKbProjectsFn } from '@/server/serverFns/knowledge'
78
77
  import { listProjectsBriefFn } from '@/server/serverFns/project'
78
+ import { m } from "@/paraglide/messages.js";
79
79
 
80
80
  interface KbData {
81
81
  id: string
@@ -105,7 +105,6 @@ const TYPE_ICONS: Record<string, React.ComponentType<{ className?: string }>> =
105
105
  }
106
106
 
107
107
  export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollapsed, onToggleTree, onConfirmCreate, onNavigate, onNavigateRoot }: KnowledgeToolbarProps) {
108
- const { t } = useTranslation('knowledge')
109
108
  const navigate = useNavigate()
110
109
  const [editingName, setEditingName] = useState(false)
111
110
  const [name, setName] = useState(kb.name)
@@ -209,12 +208,12 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
209
208
  try {
210
209
  const { indexed, documentCount } = await reindexKnowledgeBaseFn({ data: { kbId: kb.id } })
211
210
  if (documentCount === 0) {
212
- toast.success(t('toolbar.noDocs'))
211
+ toast.success(m.knowledge_toolbar_noDocs())
213
212
  } else {
214
- toast.success(t('toolbar.reindexDone', { indexed, documentCount }))
213
+ toast.success(m.knowledge_toolbar_reindexDone({ indexed, documentCount }))
215
214
  }
216
215
  } catch (e) {
217
- toast.error(`${t('toolbar.reindexFailed')}:${e instanceof Error ? e.message : String(e)}`)
216
+ toast.error(`${m.knowledge_toolbar_reindexFailed()}:${e instanceof Error ? e.message : String(e)}`)
218
217
  }
219
218
  setReindexing(false)
220
219
  }
@@ -234,7 +233,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
234
233
  <Popover open={createPopover} onOpenChange={(open) => {
235
234
  setCreatePopover(open)
236
235
  if (open) {
237
- setCreateTitle(t('untitledDoc'))
236
+ setCreateTitle(m.knowledge_untitledDoc())
238
237
  setCreateType('doc')
239
238
  }
240
239
  }}>
@@ -246,7 +245,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
246
245
  </Button>
247
246
  </TooltipTrigger>
248
247
  </PopoverTrigger>
249
- <TooltipContent side="right">{t('toolbar.createDoc')}</TooltipContent>
248
+ <TooltipContent side="right">{m.knowledge_toolbar_createDoc()}</TooltipContent>
250
249
  </Tooltip>
251
250
  <PopoverContent
252
251
  className="w-56 p-3"
@@ -255,7 +254,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
255
254
  sideOffset={4}
256
255
  >
257
256
  <div className="space-y-2">
258
- <p className="text-xs font-medium text-muted-foreground">{t('toolbar.selectDocType')}</p>
257
+ <p className="text-xs font-medium text-muted-foreground">{m.knowledge_toolbar_selectDocType()}</p>
259
258
  <div className="flex flex-col gap-1">
260
259
  <Button
261
260
  variant="ghost"
@@ -263,7 +262,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
263
262
  className={cn('justify-start', createType === 'doc' && 'bg-accent')}
264
263
  onClick={() => setCreateType('doc')}
265
264
  >
266
- <FileText className="size-3.5 mr-2" />{t('toolbar.doc')}
265
+ <FileText className="size-3.5 mr-2" />{m.knowledge_toolbar_doc()}
267
266
  {createType === 'doc' && <Check className="size-3.5 ml-auto" />}
268
267
  </Button>
269
268
  <Button
@@ -272,7 +271,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
272
271
  className={cn('justify-start', createType === 'mindmap' && 'bg-accent')}
273
272
  onClick={() => setCreateType('mindmap')}
274
273
  >
275
- <Network className="size-3.5 mr-2" />{t('toolbar.mindmap')}
274
+ <Network className="size-3.5 mr-2" />{m.knowledge_toolbar_mindmap()}
276
275
  {createType === 'mindmap' && <Check className="size-3.5 ml-auto" />}
277
276
  </Button>
278
277
  <Button
@@ -281,7 +280,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
281
280
  className={cn('justify-start', createType === 'sheet' && 'bg-accent')}
282
281
  disabled
283
282
  >
284
- <Table className="size-3.5 mr-2" />{t('toolbar.sheet')}
283
+ <Table className="size-3.5 mr-2" />{m.knowledge_toolbar_sheet()}
285
284
  {createType === 'sheet' && <Check className="size-3.5 ml-auto" />}
286
285
  </Button>
287
286
  <Button
@@ -290,7 +289,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
290
289
  className={cn('justify-start', createType === 'table' && 'bg-accent')}
291
290
  disabled
292
291
  >
293
- <Grid3X3 className="size-3.5 mr-2" />{t('toolbar.table')}
292
+ <Grid3X3 className="size-3.5 mr-2" />{m.knowledge_toolbar_table()}
294
293
  {createType === 'table' && <Check className="size-3.5 ml-auto" />}
295
294
  </Button>
296
295
  </div>
@@ -307,12 +306,12 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
307
306
  if (e.key === 'Escape') setCreatePopover(false)
308
307
  }}
309
308
  onFocus={(e) => e.target.select()}
310
- placeholder={t('toolbar.docNamePlaceholder')}
309
+ placeholder={m.knowledge_toolbar_docNamePlaceholder()}
311
310
  className="h-8 text-sm"
312
311
  />
313
312
  <div className="flex justify-end gap-2">
314
- <Button variant="outline" size="sm" onClick={() => setCreatePopover(false)}>{t('toolbar.cancel')}</Button>
315
- <Button size="sm" onClick={() => { onConfirmCreate?.(createType, createTitle); setCreatePopover(false) }}>{t('toolbar.create')}</Button>
313
+ <Button variant="outline" size="sm" onClick={() => setCreatePopover(false)}>{m.knowledge_toolbar_cancel()}</Button>
314
+ <Button size="sm" onClick={() => { onConfirmCreate?.(createType, createTitle); setCreatePopover(false) }}>{m.knowledge_toolbar_create()}</Button>
316
315
  </div>
317
316
  </div>
318
317
  </PopoverContent>
@@ -458,7 +457,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
458
457
  ) : (
459
458
  <Lock className="size-3" />
460
459
  )}
461
- {localVisibility === 'team' ? t('toolbar.team') : t('toolbar.private')}
460
+ {localVisibility === 'team' ? m.knowledge_toolbar_team() : m.knowledge_toolbar_private()}
462
461
  </Badge>
463
462
 
464
463
  {localVisibility === 'team' && (
@@ -469,7 +468,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
469
468
  onClick={openProjectsDialog}
470
469
  >
471
470
  <LinkIcon className="size-3.5 text-muted-foreground" />
472
- {t('toolbar.linkProjects')}
471
+ {m.knowledge_toolbar_linkProjects()}
473
472
  </Button>
474
473
  )}
475
474
 
@@ -483,11 +482,11 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
483
482
  disabled
484
483
  >
485
484
  <LinkIcon className="size-3.5 text-muted-foreground" />
486
- {t('toolbar.linkProjects')}
485
+ {m.knowledge_toolbar_linkProjects()}
487
486
  </Button>
488
487
  </TooltipTrigger>
489
488
  <TooltipContent>
490
- <p>{t('toolbar.generalLinkDisabled')}</p>
489
+ <p>{m.knowledge_toolbar_generalLinkDisabled()}</p>
491
490
  </TooltipContent>
492
491
  </Tooltip>
493
492
  )}
@@ -502,11 +501,11 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
502
501
  disabled
503
502
  >
504
503
  <LinkIcon className="size-3.5 text-muted-foreground" />
505
- {t('toolbar.linkProjects')}
504
+ {m.knowledge_toolbar_linkProjects()}
506
505
  </Button>
507
506
  </TooltipTrigger>
508
507
  <TooltipContent>
509
- <p>{t('toolbar.privateLinkDisabled')}</p>
508
+ <p>{m.knowledge_toolbar_privateLinkDisabled()}</p>
510
509
  </TooltipContent>
511
510
  </Tooltip>
512
511
  )}
@@ -521,7 +520,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
521
520
  <DropdownMenuContent align="end" className="w-48 space-y-1">
522
521
  <DropdownMenuItem onSelect={(e) => { e.preventDefault(); setEditOpen(true) }}>
523
522
  <Pencil className="size-3.5 mr-2" />
524
- {t('toolbar.nameSettings')}
523
+ {m.knowledge_toolbar_nameSettings()}
525
524
  </DropdownMenuItem>
526
525
 
527
526
  <DropdownMenuSeparator />
@@ -529,21 +528,21 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
529
528
  <DropdownMenuSub>
530
529
  <DropdownMenuSubTrigger>
531
530
  <Columns2 className="size-3.5 mr-2" />
532
- {t('toolbar.pageWidth')}
531
+ {m.knowledge_toolbar_pageWidth()}
533
532
  </DropdownMenuSubTrigger>
534
533
  <DropdownMenuSubContent className="w-40">
535
534
  <DropdownMenuRadioGroup value={effectiveWidth} onValueChange={(v) => setWidth(v as EditorWidth)}>
536
535
  <DropdownMenuRadioItem value="auto">
537
536
  <Minimize2 className="size-3.5 mr-2" />
538
- {t('toolbar.widthAuto')}
537
+ {m.knowledge_toolbar_widthAuto()}
539
538
  </DropdownMenuRadioItem>
540
539
  <DropdownMenuRadioItem value="wider">
541
540
  <ArrowLeftRight className="size-3.5 mr-2" />
542
- {t('toolbar.widthWider')}
541
+ {m.knowledge_toolbar_widthWider()}
543
542
  </DropdownMenuRadioItem>
544
543
  <DropdownMenuRadioItem value="full">
545
544
  <Maximize2 className="size-3.5 mr-2" />
546
- {t('toolbar.widthFull')}
545
+ {m.knowledge_toolbar_widthFull()}
547
546
  </DropdownMenuRadioItem>
548
547
  </DropdownMenuRadioGroup>
549
548
  </DropdownMenuSubContent>
@@ -552,23 +551,22 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
552
551
  <DropdownMenuSub>
553
552
  <DropdownMenuSubTrigger>
554
553
  <Globe className="size-3.5 mr-2" />
555
- {t('toolbar.kbOwnership')}
554
+ {m.knowledge_toolbar_kbOwnership()}
556
555
  </DropdownMenuSubTrigger>
557
556
  <DropdownMenuSubContent className="w-36">
558
557
  <DropdownMenuRadioGroup value={localVisibility} onValueChange={handleVisibilityChange}>
559
558
  <DropdownMenuRadioItem value="private">
560
559
  <Lock className="size-3.5 mr-2" />
561
- {t('toolbar.private')}
560
+ {m.knowledge_toolbar_private()}
562
561
  </DropdownMenuRadioItem>
563
562
  <DropdownMenuRadioItem value="team">
564
563
  <Globe className="size-3.5 mr-2" />
565
- {t('toolbar.team')}
564
+ {m.knowledge_toolbar_team()}
566
565
  </DropdownMenuRadioItem>
567
566
  </DropdownMenuRadioGroup>
568
567
  </DropdownMenuSubContent>
569
568
  </DropdownMenuSub>
570
569
 
571
-
572
570
  <DropdownMenuSeparator />
573
571
 
574
572
  <DropdownMenuItem
@@ -576,7 +574,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
576
574
  disabled={reindexing}
577
575
  >
578
576
  <RefreshCw className={`size-3.5 mr-2 ${reindexing ? 'animate-spin' : ''}`} />
579
- {reindexing ? t('toolbar.reindexing') : t('toolbar.rebuildIndex')}
577
+ {reindexing ? m.knowledge_toolbar_reindexing() : m.knowledge_toolbar_rebuildIndex()}
580
578
  </DropdownMenuItem>
581
579
 
582
580
  <DropdownMenuSeparator />
@@ -586,7 +584,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
586
584
  onSelect={(e) => { e.preventDefault(); setDeleteOpen(true) }}
587
585
  >
588
586
  <Trash2 className="size-3.5 mr-2" />
589
- {t('toolbar.deleteKb')}
587
+ {m.knowledge_toolbar_deleteKb()}
590
588
  </DropdownMenuItem>
591
589
  </DropdownMenuContent>
592
590
  </DropdownMenu>
@@ -595,29 +593,29 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
595
593
  <Dialog open={deleteOpen} onOpenChange={(open) => { setDeleteOpen(open); if (!open) setDeleteConfirm('') }}>
596
594
  <DialogContent className="sm:max-w-sm">
597
595
  <DialogHeader>
598
- <DialogTitle>{t('toolbar.deleteKb')}</DialogTitle>
596
+ <DialogTitle>{m.knowledge_toolbar_deleteKb()}</DialogTitle>
599
597
  <DialogDescription>
600
- {t('toolbar.deleteKbConfirm', { name: kb.name })}
598
+ {m.knowledge_toolbar_deleteKbConfirm({ name: kb.name })}
601
599
  </DialogDescription>
602
600
  </DialogHeader>
603
601
  <div className="py-2">
604
602
  <Input
605
603
  value={deleteConfirm}
606
604
  onChange={(e) => setDeleteConfirm(e.target.value)}
607
- placeholder={t('toolbar.deleteKbPlaceholder')}
605
+ placeholder={m.knowledge_toolbar_deleteKbPlaceholder()}
608
606
  onKeyDown={(e) => { if (e.key === 'Enter') handleDelete() }}
609
607
  />
610
608
  </div>
611
609
  <DialogFooter>
612
610
  <Button variant="outline" onClick={() => { setDeleteOpen(false); setDeleteConfirm('') }}>
613
- {t('toolbar.cancel')}
611
+ {m.knowledge_toolbar_cancel()}
614
612
  </Button>
615
613
  <Button
616
614
  variant="destructive"
617
615
  onClick={handleDelete}
618
616
  disabled={deleting || deleteConfirm !== kb.name}
619
617
  >
620
- {deleting ? t('toolbar.deleting') : t('toolbar.confirmDelete')}
618
+ {deleting ? m.knowledge_toolbar_deleting() : m.knowledge_toolbar_confirmDelete()}
621
619
  </Button>
622
620
  </DialogFooter>
623
621
  </DialogContent>
@@ -633,7 +631,7 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
633
631
  <Dialog open={projectsDialogOpen} onOpenChange={setProjectsDialogOpen}>
634
632
  <DialogContent className="sm:max-w-260 -mt-50">
635
633
  <DialogHeader>
636
- <DialogTitle>{t('toolbar.linkProjects')}</DialogTitle>
634
+ <DialogTitle>{m.knowledge_toolbar_linkProjects()}</DialogTitle>
637
635
  </DialogHeader>
638
636
  <div className="flex flex-col gap-2 max-h-96 overflow-y-auto">
639
637
  {projectCandidates.length === 0 ? (
@@ -659,10 +657,10 @@ export function KnowledgeToolbar({ kb, onUpdate, breadcrumb, docType, treeCollap
659
657
  </div>
660
658
  <DialogFooter>
661
659
  <Button variant="outline" onClick={() => setProjectsDialogOpen(false)}>
662
- {t('knowledge:toolbar.cancel')}
660
+ {m.knowledge_toolbar_cancel()}
663
661
  </Button>
664
662
  <Button onClick={saveProjects} disabled={savingProjects}>
665
- {savingProjects ? '保存中...' : t('settings.kbSection.save')}
663
+ {savingProjects ? '保存中...' : m.projects_settings_kbSection_save()}
666
664
  </Button>
667
665
  </DialogFooter>
668
666
  </DialogContent>
@@ -41,7 +41,7 @@ import {
41
41
  DialogTitle,
42
42
  } from '@/components/ui/dialog'
43
43
  import { createDocumentFn, deleteDocumentFn, updateDocumentFn } from '@/server/serverFns/knowledge'
44
- import { useTranslation } from 'react-i18next'
44
+ import { m } from "@/paraglide/messages.js";
45
45
 
46
46
  const MAX_DEPTH = 19
47
47
 
@@ -71,11 +71,11 @@ interface KnowledgeTreeItemProps {
71
71
  onToggleExpand: () => void
72
72
  }
73
73
 
74
- const TYPE_DEFAULTS: Record<string, string> = {
75
- doc: 'untitledDoc',
76
- mindmap: 'untitledMindmap',
77
- sheet: 'untitledSheet',
78
- table: 'untitledTable',
74
+ const TYPE_DEFAULTS: Record<string, () => string> = {
75
+ doc: m.knowledge_untitledDoc,
76
+ mindmap: m.knowledge_untitledMindmap,
77
+ sheet: m.knowledge_untitledSheet,
78
+ table: m.knowledge_untitledTable,
79
79
  }
80
80
 
81
81
  const TYPE_ICONS: Record<string, React.ComponentType<{ className?: string }>> = {
@@ -86,17 +86,16 @@ const TYPE_ICONS: Record<string, React.ComponentType<{ className?: string }>> =
86
86
  }
87
87
 
88
88
  const DOC_TYPE_OPTIONS = [
89
- { type: 'doc' as const, label: 'treeType.doc', icon: FileText },
90
- { type: 'mindmap' as const, label: 'treeType.mindmap', icon: Network },
91
- { type: 'sheet' as const, label: 'treeType.sheet', icon: Table, disabled: true },
92
- { type: 'table' as const, label: 'treeType.table', icon: Grid3X3, disabled: true },
89
+ { type: 'doc' as const, label: m.knowledge_treeType_doc, icon: FileText },
90
+ { type: 'mindmap' as const, label: m.knowledge_treeType_mindmap, icon: Network },
91
+ { type: 'sheet' as const, label: m.knowledge_treeType_sheet, icon: Table, disabled: true },
92
+ { type: 'table' as const, label: m.knowledge_treeType_table, icon: Grid3X3, disabled: true },
93
93
  ]
94
94
 
95
95
  export function KnowledgeTreeItem({
96
96
  node, depth, hasChildren, activeDocId, isHomePage, kbId,
97
97
  onSelect, onHome, onRefresh, onDocRenamed, expanded, onToggleExpand,
98
98
  }: KnowledgeTreeItemProps) {
99
- const { t } = useTranslation('knowledge')
100
99
  const [editing, setEditing] = useState(false)
101
100
  const [editTitle, setEditTitle] = useState(node.title)
102
101
  const [deleting, setDeleting] = useState(false)
@@ -142,7 +141,7 @@ export function KnowledgeTreeItem({
142
141
  const handleStartCreateChild = (type: string) => {
143
142
  setCreatingChild(true)
144
143
  setChildType(type)
145
- setChildTitle(t(TYPE_DEFAULTS[type] || 'untitledDoc'))
144
+ setChildTitle(TYPE_DEFAULTS[type]?.() ?? m.knowledge_untitledDoc())
146
145
  if (!expanded) onToggleExpand()
147
146
  setTimeout(() => childInputRef.current?.focus(), 50)
148
147
  }
@@ -229,7 +228,7 @@ export function KnowledgeTreeItem({
229
228
  <Plus className="size-3.5" />
230
229
  </span>
231
230
  </TooltipTrigger>
232
- <TooltipContent side="right">{t('knowledgeTree.depthLimit')}</TooltipContent>
231
+ <TooltipContent side="right">{m.knowledge_knowledgeTree_depthLimit()}</TooltipContent>
233
232
  </Tooltip>
234
233
  ) : (
235
234
  <DropdownMenu open={openMenu === 'create'} onOpenChange={(open) => setOpenMenu(open ? 'create' : null)}>
@@ -241,7 +240,7 @@ export function KnowledgeTreeItem({
241
240
  </Button>
242
241
  </DropdownMenuTrigger>
243
242
  </TooltipTrigger>
244
- <TooltipContent side="top">{t('toolbar.createDoc')}</TooltipContent>
243
+ <TooltipContent side="top">{m.knowledge_toolbar_createDoc()}</TooltipContent>
245
244
  </Tooltip>
246
245
  <DropdownMenuContent side="right" align="start" className="w-40" onCloseAutoFocus={(e) => e.preventDefault()}>
247
246
  {DOC_TYPE_OPTIONS.map((opt) => (
@@ -251,7 +250,7 @@ export function KnowledgeTreeItem({
251
250
  onClick={(e) => { e.stopPropagation(); handleStartCreateChild(opt.type) }}
252
251
  >
253
252
  <opt.icon className="size-3.5 mr-2" />
254
- {t(opt.label)}
253
+ {opt.label()}
255
254
  </DropdownMenuItem>
256
255
  ))}
257
256
  </DropdownMenuContent>
@@ -268,7 +267,7 @@ export function KnowledgeTreeItem({
268
267
  <DropdownMenuContent align="end" className="w-36" onCloseAutoFocus={(e) => e.preventDefault()}>
269
268
  <DropdownMenuItem onClick={(e) => { e.stopPropagation(); setEditing(true); setEditTitle(node.title) }}>
270
269
  <FilePenLine className="size-3.5 mr-1.5" />
271
- {t('knowledgeTree.rename')}
270
+ {m.knowledge_knowledgeTree_rename()}
272
271
  </DropdownMenuItem>
273
272
  <DropdownMenuSeparator />
274
273
  <DropdownMenuItem
@@ -276,7 +275,7 @@ export function KnowledgeTreeItem({
276
275
  onClick={(e) => { e.stopPropagation(); setDeleteOpen(true) }}
277
276
  >
278
277
  <Trash2 className="size-3.5 mr-1.5" />
279
- {t('knowledgeTree.delete')}
278
+ {m.knowledge_knowledgeTree_delete()}
280
279
  </DropdownMenuItem>
281
280
  </DropdownMenuContent>
282
281
  </DropdownMenu>
@@ -310,29 +309,29 @@ export function KnowledgeTreeItem({
310
309
  <Dialog open={deleteOpen} onOpenChange={(open) => { setDeleteOpen(open); if (!open) setDeleteConfirm('') }}>
311
310
  <DialogContent className="sm:max-w-sm">
312
311
  <DialogHeader>
313
- <DialogTitle>{t('knowledgeTree.deleteDoc')}</DialogTitle>
312
+ <DialogTitle>{m.knowledge_knowledgeTree_deleteDoc()}</DialogTitle>
314
313
  <DialogDescription>
315
- {t('knowledgeTree.deleteConfirm', { name: node.title })}
314
+ {m.knowledge_knowledgeTree_deleteConfirm({ name: node.title })}
316
315
  </DialogDescription>
317
316
  </DialogHeader>
318
317
  <div className="py-2">
319
318
  <Input
320
319
  value={deleteConfirm}
321
320
  onChange={(e) => setDeleteConfirm(e.target.value)}
322
- placeholder={t('knowledgeTree.deletePlaceholder')}
321
+ placeholder={m.knowledge_knowledgeTree_deletePlaceholder()}
323
322
  onKeyDown={(e) => { if (e.key === 'Enter') handleDelete() }}
324
323
  />
325
324
  </div>
326
325
  <DialogFooter>
327
326
  <Button variant="outline" onClick={() => { setDeleteOpen(false); setDeleteConfirm('') }}>
328
- {t('knowledgeTree.cancel')}
327
+ {m.knowledge_knowledgeTree_cancel()}
329
328
  </Button>
330
329
  <Button
331
330
  variant="destructive"
332
331
  onClick={handleDelete}
333
332
  disabled={deleting || deleteConfirm !== node.title}
334
333
  >
335
- {deleting ? t('knowledgeTree.deleting') : t('knowledgeTree.confirmDelete')}
334
+ {deleting ? m.knowledge_knowledgeTree_deleting() : m.knowledge_knowledgeTree_confirmDelete()}
336
335
  </Button>
337
336
  </DialogFooter>
338
337
  </DialogContent>
@@ -29,7 +29,7 @@ import {
29
29
  } from '@/components/ui/dropdown-menu'
30
30
  import { KnowledgeTreeItem, TreeNode } from './knowledge-tree-item'
31
31
  import { createDocumentFn, listDocumentsFn } from '@/server/serverFns/knowledge'
32
- import { useTranslation } from 'react-i18next'
32
+ import { m } from "@/paraglide/messages.js";
33
33
 
34
34
  interface KnowledgeTreeProps {
35
35
  kbId: string
@@ -42,17 +42,17 @@ interface KnowledgeTreeProps {
42
42
  }
43
43
 
44
44
  const DOC_TYPE_OPTIONS = [
45
- { type: 'doc' as const, label: 'treeType.doc', icon: FileText },
46
- { type: 'mindmap' as const, label: 'treeType.mindmap', icon: Network },
47
- { type: 'sheet' as const, label: 'treeType.sheet', icon: Table, disabled: true },
48
- { type: 'table' as const, label: 'treeType.table', icon: Grid3X3, disabled: true },
45
+ { type: 'doc' as const, label: m.knowledge_treeType_doc, icon: FileText },
46
+ { type: 'mindmap' as const, label: m.knowledge_treeType_mindmap, icon: Network },
47
+ { type: 'sheet' as const, label: m.knowledge_treeType_sheet, icon: Table, disabled: true },
48
+ { type: 'table' as const, label: m.knowledge_treeType_table, icon: Grid3X3, disabled: true },
49
49
  ]
50
50
 
51
- const TYPE_DEFAULTS: Record<string, string> = {
52
- doc: 'untitledDoc',
53
- mindmap: 'untitledMindmap',
54
- sheet: 'untitledSheet',
55
- table: 'untitledTable',
51
+ const TYPE_DEFAULTS: Record<string, () => string> = {
52
+ doc: m.knowledge_untitledDoc,
53
+ mindmap: m.knowledge_untitledMindmap,
54
+ sheet: m.knowledge_untitledSheet,
55
+ table: m.knowledge_untitledTable,
56
56
  }
57
57
 
58
58
  function flattenTree(
@@ -94,7 +94,6 @@ function flattenTree(
94
94
  export function KnowledgeTree({
95
95
  kbId, activeDocId, isHomePage, onSelect, onHome, treeRefreshKey, onDocRenamed,
96
96
  }: KnowledgeTreeProps) {
97
- const { t } = useTranslation('knowledge')
98
97
  const [documents, setDocuments] = useState<TreeNode[]>([])
99
98
  const [loading, setLoading] = useState(true)
100
99
  const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set())
@@ -143,7 +142,7 @@ export function KnowledgeTree({
143
142
 
144
143
  const handleStartCreate = (type: string) => {
145
144
  setCreatingType(type)
146
- setCreatingTitle(t(TYPE_DEFAULTS[type] || 'untitledDoc'))
145
+ setCreatingTitle(TYPE_DEFAULTS[type]?.() ?? m.knowledge_untitledDoc())
147
146
  }
148
147
 
149
148
  const handleConfirmCreate = async () => {
@@ -163,7 +162,7 @@ export function KnowledgeTree({
163
162
  return (
164
163
  <div className="flex flex-col h-full">
165
164
  <div className="flex items-center justify-between px-3 py-3 border-b">
166
- <span className="text-xs font-medium text-muted-foreground leading-5">{t('knowledgeTree.title')}</span>
165
+ <span className="text-xs font-medium text-muted-foreground leading-5">{m.knowledge_knowledgeTree_title()}</span>
167
166
  <DropdownMenu>
168
167
  <DropdownMenuTrigger asChild>
169
168
  <Button variant="ghost" size="icon" className="size-6">
@@ -178,7 +177,7 @@ export function KnowledgeTree({
178
177
  onClick={() => handleStartCreate(opt.type)}
179
178
  >
180
179
  <opt.icon className="size-3.5 mr-2" />
181
- {t(opt.label)}
180
+ {opt.label()}
182
181
  </DropdownMenuItem>
183
182
  ))}
184
183
  </DropdownMenuContent>
@@ -187,7 +186,7 @@ export function KnowledgeTree({
187
186
 
188
187
  <div className="flex-1 overflow-auto py-1.5">
189
188
  {loading ? (
190
- <p className="text-sm text-muted-foreground text-center mt-8">{t('knowledgeTree.loading')}</p>
189
+ <p className="text-sm text-muted-foreground text-center mt-8">{m.knowledge_knowledgeTree_loading()}</p>
191
190
  ) : (
192
191
  <>
193
192
  {creatingType && (
@@ -208,7 +207,7 @@ export function KnowledgeTree({
208
207
  </div>
209
208
  )}
210
209
  {flatNodes.length === 0 && (
211
- <p className="text-sm text-muted-foreground text-center mt-8">{t('knowledgeTree.empty')}</p>
210
+ <p className="text-sm text-muted-foreground text-center mt-8">{m.knowledge_knowledgeTree_empty()}</p>
212
211
  )}
213
212
  {flatNodes.map(({ node, depth, hasChildren }) => (
214
213
  <KnowledgeTreeItem
@@ -24,7 +24,7 @@ import { HoverCard, HoverCardContent, HoverCardTrigger } from '@/components/ui/h
24
24
  import { Star, GitBranch, RefreshCw, ExternalLink, Pencil } from 'lucide-react'
25
25
  import { CategoryIcon } from './category-icon'
26
26
  import { cn } from '@/lib/utils'
27
- import { useTranslation } from 'react-i18next'
27
+ import { m } from "@/paraglide/messages.js";
28
28
 
29
29
  interface BookmarkItem {
30
30
  id: string
@@ -64,7 +64,6 @@ export function BookmarkCard({
64
64
  onShareToggle?: () => void
65
65
  onFavoriteToggle?: () => void
66
66
  }) {
67
- const { t } = useTranslation('knowledge')
68
67
  const open = () => window.open(item.url, '_blank', 'noopener,noreferrer')
69
68
  const stale = !item.githubSyncedAt || isStale(item.githubSyncedAt)
70
69
  const isPublic = item.visibility === 'public'
@@ -78,7 +77,7 @@ export function BookmarkCard({
78
77
  >
79
78
  {isOwner && onEdit && (
80
79
  <IconButton
81
- tooltip={t('bookmarkCard.edit')}
80
+ tooltip={m.knowledge_bookmarkCard_edit()}
82
81
  onClick={onEdit}
83
82
  className="absolute right-2 top-2 z-10 h-7 w-7 opacity-0 transition-opacity group-hover:opacity-100"
84
83
  >
@@ -110,7 +109,7 @@ export function BookmarkCard({
110
109
  {item.githubLatestVersion}
111
110
  </span>
112
111
  )}
113
- {item.githubRepoUpdatedAt && <span>{t('bookmarkCard.updatedAt')} {fmt(item.githubRepoUpdatedAt, t)}</span>}
112
+ {item.githubRepoUpdatedAt && <span>{m.knowledge_bookmarkCard_updatedAt()} {fmt(item.githubRepoUpdatedAt)}</span>}
114
113
  {stale && canEdit && onSync && (
115
114
  <button
116
115
  onClick={(e) => {
@@ -120,7 +119,7 @@ export function BookmarkCard({
120
119
  className="inline-flex items-center gap-0.5 text-primary hover:underline"
121
120
  >
122
121
  <RefreshCw className="h-3 w-3" />
123
- {t('bookmarkCard.sync')}
122
+ {m.knowledge_bookmarkCard_sync()}
124
123
  </button>
125
124
  )}
126
125
  </div>
@@ -136,7 +135,7 @@ export function BookmarkCard({
136
135
  <div className="flex shrink-0 items-center gap-1.5">
137
136
  {hasSharers ? <SharersAvatarGroup sharers={item.sharers!} currentUserId={currentUserId} /> : null}
138
137
  {!isOwner && isPublic && onFavoriteToggle && (
139
- <IconButton tooltip={item.isFavorited ? t('bookmarkCard.unbookmark') : t('bookmarkCard.bookmark')} onClick={onFavoriteToggle}>
138
+ <IconButton tooltip={item.isFavorited ? m.knowledge_bookmarkCard_unbookmark() : m.knowledge_bookmarkCard_bookmark()} onClick={onFavoriteToggle}>
140
139
  <Star
141
140
  className={cn(
142
141
  'h-4 w-4',
@@ -150,10 +149,10 @@ export function BookmarkCard({
150
149
  className="flex items-center gap-1"
151
150
  onClick={(e) => e.stopPropagation()}
152
151
  role="group"
153
- aria-label={t('bookmarkCard.shareToggle')}
152
+ aria-label={m.knowledge_bookmarkCard_shareToggle()}
154
153
  >
155
- <span className="text-[11px] text-muted-foreground select-none">{isPublic ? t('bookmarkCard.shared') : t('bookmarkCard.share')}</span>
156
- <Switch checked={isPublic} onCheckedChange={() => onShareToggle()} size="sm" aria-label={t('bookmarkCard.share')} />
154
+ <span className="text-[11px] text-muted-foreground select-none">{isPublic ? m.knowledge_bookmarkCard_shared() : m.knowledge_bookmarkCard_share()}</span>
155
+ <Switch checked={isPublic} onCheckedChange={() => onShareToggle()} size="sm" aria-label={m.knowledge_bookmarkCard_share()} />
157
156
  </div>
158
157
  )}
159
158
  </div>
@@ -238,15 +237,15 @@ function formatStars(n: number) {
238
237
  return n >= 1000 ? `${(n / 1000).toFixed(1)}k` : String(n)
239
238
  }
240
239
 
241
- function fmt(d: Date | string, t: (key: string, opts?: Record<string, unknown>) => string) {
240
+ function fmt(d: Date | string) {
242
241
  const date = new Date(d)
243
242
  if (Number.isNaN(date.getTime())) return ''
244
243
  const diff = Date.now() - date.getTime()
245
244
  const days = Math.floor(diff / 86400000)
246
- if (days <= 0) return t('bookmarkCard.today')
247
- if (days < 30) return t('bookmarkCard.daysAgo', { days })
248
- if (days < 365) return t('bookmarkCard.monthsAgo', { months: Math.floor(days / 30) })
249
- return t('bookmarkCard.yearsAgo', { years: Math.floor(days / 365) })
245
+ if (days <= 0) return m.knowledge_bookmarkCard_today()
246
+ if (days < 30) return m.knowledge_bookmarkCard_daysAgo({ days })
247
+ if (days < 365) return m.knowledge_bookmarkCard_monthsAgo({ months: Math.floor(days / 30) })
248
+ return m.knowledge_bookmarkCard_yearsAgo({ years: Math.floor(days / 365) })
250
249
  }
251
250
 
252
251
  function isStale(d: Date | string) {