@allbluecn/web-app 0.9.5 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (684) hide show
  1. package/package.json +9 -8
  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
@@ -16,7 +16,6 @@
16
16
  // along with this program. If not, see <https://www.gnu.org/licenses/>.
17
17
 
18
18
  import { useEffect, useRef, useState } from 'react'
19
- import { useTranslation } from 'react-i18next'
20
19
  import { useLiveQuery } from '@tanstack/react-db'
21
20
  import { Button } from '@/components/ui/button'
22
21
  import { Input } from '@/components/ui/input'
@@ -30,11 +29,11 @@ import { getQueryClient } from '@/lib/query-client-seam'
30
29
  import { TagBadge } from "./tag-badge"
31
30
  import { TagColorPicker } from "./tag-color-picker"
32
31
  import { toast } from '@/components/ui/sonner'
32
+ import { m } from "@/paraglide/messages.js";
33
33
 
34
34
  type Tag = { id: string; name: string; color: number; sortOrder: number }
35
35
 
36
36
  function TagManagerContent() {
37
- const { t } = useTranslation('tags')
38
37
  const { data: tags, status } = useLiveQuery(
39
38
  (q) => q.from({ tag: getTagsCollection() })
40
39
  )
@@ -59,7 +58,7 @@ function TagManagerContent() {
59
58
  }
60
59
  await reorderTagsFn({ data: { orderedIds: newTags.map((tag) => tag.id) } })
61
60
  } catch {
62
- toast.error(t('sortFailed'))
61
+ toast.error(m.tags_sortFailed())
63
62
  }
64
63
  }
65
64
 
@@ -68,10 +67,10 @@ function TagManagerContent() {
68
67
  try {
69
68
  getTagsCollection().delete(deleting.id)
70
69
  await deleteTagFn({ data: { id: deleting.id } })
71
- toast.success(t('deleted'))
70
+ toast.success(m.tags_deleted())
72
71
  setDeleting(null)
73
72
  } catch (e) {
74
- toast.error(e instanceof Error ? e.message : t('deleteFailed'))
73
+ toast.error(e instanceof Error ? e.message : m.tags_deleteFailed())
75
74
  }
76
75
  }
77
76
 
@@ -79,12 +78,12 @@ function TagManagerContent() {
79
78
  return (
80
79
  <Empty className="border rounded-lg py-12">
81
80
  <EmptyHeader>
82
- <EmptyTitle>{t('emptyTitle')}</EmptyTitle>
83
- <EmptyDescription>{t('emptyDesc')}</EmptyDescription>
81
+ <EmptyTitle>{m.tags_emptyTitle()}</EmptyTitle>
82
+ <EmptyDescription>{m.tags_emptyDesc()}</EmptyDescription>
84
83
  </EmptyHeader>
85
84
  <EmptyContent>
86
85
  <Button onClick={() => setCreating(true)}>
87
- <Plus className="size-4" /> {t('createTag')}
86
+ <Plus className="size-4" /> {m.tags_createTag()}
88
87
  </Button>
89
88
  </EmptyContent>
90
89
  </Empty>
@@ -95,7 +94,7 @@ function TagManagerContent() {
95
94
  <div className="space-y-4">
96
95
  <div className="flex justify-end">
97
96
  <Button onClick={() => setCreating(true)}>
98
- <Plus className="size-4" /> {t('createTag')}
97
+ <Plus className="size-4" /> {m.tags_createTag()}
99
98
  </Button>
100
99
  </div>
101
100
 
@@ -113,10 +112,10 @@ function TagManagerContent() {
113
112
  <GripVertical className="size-4 text-muted-foreground/40" />
114
113
  <TagBadge tag={tag} />
115
114
  <span className="flex-1" />
116
- <Button variant="ghost" size="icon" onClick={() => setEditing(tag)} aria-label={t('editTag')}>
115
+ <Button variant="ghost" size="icon" onClick={() => setEditing(tag)} aria-label={m.tags_editTag()}>
117
116
  <Edit className="size-4" />
118
117
  </Button>
119
- <Button variant="ghost" size="icon" onClick={() => setDeleting(tag)} aria-label={t('delete')}>
118
+ <Button variant="ghost" size="icon" onClick={() => setDeleting(tag)} aria-label={m.tags_delete()}>
120
119
  <Trash2 className="size-4" />
121
120
  </Button>
122
121
  </div>
@@ -134,12 +133,12 @@ function TagManagerContent() {
134
133
  <AlertDialog open={!!deleting} onOpenChange={(o) => !o && setDeleting(null)}>
135
134
  <AlertDialogContent>
136
135
  <AlertDialogHeader>
137
- <AlertDialogTitle>{t('confirmDeleteTitle', { name: deleting?.name })}</AlertDialogTitle>
138
- <AlertDialogDescription>{t('confirmDeleteDesc')}</AlertDialogDescription>
136
+ <AlertDialogTitle>{m.tags_confirmDeleteTitle({ name: deleting?.name ?? "" })}</AlertDialogTitle>
137
+ <AlertDialogDescription>{m.tags_confirmDeleteDesc()}</AlertDialogDescription>
139
138
  </AlertDialogHeader>
140
139
  <AlertDialogFooter>
141
- <AlertDialogCancel>{t('cancel')}</AlertDialogCancel>
142
- <AlertDialogAction onClick={handleDelete}>{t('delete')}</AlertDialogAction>
140
+ <AlertDialogCancel>{m.tags_cancel()}</AlertDialogCancel>
141
+ <AlertDialogAction onClick={handleDelete}>{m.tags_delete()}</AlertDialogAction>
143
142
  </AlertDialogFooter>
144
143
  </AlertDialogContent>
145
144
  </AlertDialog>
@@ -158,14 +157,13 @@ export function TagManager() {
158
157
  }
159
158
 
160
159
  function TagEditDialog({ tag, onClose, onSuccess }: { tag: Tag | null; onClose: () => void; onSuccess: () => void }) {
161
- const { t } = useTranslation('tags')
162
160
  const [name, setName] = useState(tag?.name ?? '')
163
161
  const [color, setColor] = useState(tag?.color ?? 0)
164
162
  const [saving, setSaving] = useState(false)
165
163
  const [error, setError] = useState('')
166
164
 
167
165
  async function handleSave() {
168
- if (!name.trim()) { setError(t('nameRequired')); return }
166
+ if (!name.trim()) { setError(m.tags_nameRequired()); return }
169
167
  setSaving(true)
170
168
  setError('')
171
169
  try {
@@ -175,11 +173,11 @@ function TagEditDialog({ tag, onClose, onSuccess }: { tag: Tag | null; onClose:
175
173
  await createTagFn({ data: { name: name.trim() } })
176
174
  }
177
175
  await getQueryClient().invalidateQueries({ queryKey: ['tags'] })
178
- toast.success(tag ? t('updated') : t('created'))
176
+ toast.success(tag ? m.tags_updated() : m.tags_created())
179
177
  onSuccess()
180
178
  } catch (e) {
181
- const msg = e instanceof Error ? e.message : t('saveFailed')
182
- setError(msg === 'TAG_NAME_CONFLICT' ? t('nameConflict') : msg)
179
+ const msg = e instanceof Error ? e.message : m.tags_saveFailed()
180
+ setError(msg === 'TAG_NAME_CONFLICT' ? m.tags_nameConflict() : msg)
183
181
  } finally {
184
182
  setSaving(false)
185
183
  }
@@ -189,22 +187,22 @@ function TagEditDialog({ tag, onClose, onSuccess }: { tag: Tag | null; onClose:
189
187
  <Dialog open onOpenChange={(o) => !o && onClose()}>
190
188
  <DialogContent className="sm:max-w-100">
191
189
  <DialogHeader>
192
- <DialogTitle>{tag ? t('editTag') : t('createTag')}</DialogTitle>
190
+ <DialogTitle>{tag ? m.tags_editTag() : m.tags_createTag()}</DialogTitle>
193
191
  </DialogHeader>
194
192
  <div className="space-y-4">
195
193
  <div>
196
- <label className="text-sm font-medium">{t('nameLabel')}</label>
194
+ <label className="text-sm font-medium">{m.tags_nameLabel()}</label>
197
195
  <Input autoFocus value={name} onChange={(e) => setName(e.target.value)} maxLength={30} />
198
196
  </div>
199
197
  <div>
200
- <label className="text-sm font-medium">{t('colorLabel')}</label>
198
+ <label className="text-sm font-medium">{m.tags_colorLabel()}</label>
201
199
  <div className="mt-2"><TagColorPicker value={color} onChange={setColor} /></div>
202
200
  </div>
203
201
  {error && <p className="text-sm text-destructive">{error}</p>}
204
202
  </div>
205
203
  <DialogFooter>
206
- <Button variant="outline" onClick={onClose}>{t('cancel')}</Button>
207
- <Button onClick={handleSave} disabled={saving}>{saving ? t('saving') : t('save')}</Button>
204
+ <Button variant="outline" onClick={onClose}>{m.tags_cancel()}</Button>
205
+ <Button onClick={handleSave} disabled={saving}>{saving ? m.tags_saving() : m.tags_save()}</Button>
208
206
  </DialogFooter>
209
207
  </DialogContent>
210
208
  </Dialog>
@@ -16,7 +16,6 @@
16
16
  // along with this program. If not, see <https://www.gnu.org/licenses/>.
17
17
 
18
18
  import { useEffect, useState } from 'react'
19
- import { useTranslation } from 'react-i18next'
20
19
  import { useLiveQuery } from '@tanstack/react-db'
21
20
  import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'
22
21
  import { Input } from '@/components/ui/input'
@@ -25,6 +24,7 @@ import { createTagFn } from "./serverFns"
25
24
  import { getTagsCollection } from "./tags-collection"
26
25
  import { TagBadge } from "./tag-badge"
27
26
  import { cn } from '@/lib/utils'
27
+ import { m } from "@/paraglide/messages.js";
28
28
 
29
29
  type Tag = { id: string; name: string; color: number }
30
30
  type TagSelectorProps = {
@@ -40,8 +40,7 @@ function TagSelectorInner({
40
40
  placeholder,
41
41
  className,
42
42
  }: TagSelectorProps) {
43
- const { t } = useTranslation('tags')
44
- const resolvedPlaceholder = placeholder ?? t('selector.placeholder')
43
+ const resolvedPlaceholder = placeholder ?? m.tags_selector_placeholder()
45
44
  const [open, setOpen] = useState(false)
46
45
  const [search, setSearch] = useState('')
47
46
  const [creating, setCreating] = useState(false)
@@ -97,7 +96,7 @@ function TagSelectorInner({
97
96
  <PopoverContent className="w-72 p-2" align="start">
98
97
  <Input
99
98
  autoFocus
100
- placeholder={t('selector.searchPlaceholder')}
99
+ placeholder={m.tags_selector_searchPlaceholder()}
101
100
  className='text-xs md:text-xs'
102
101
  value={search}
103
102
  onChange={(e) => setSearch(e.target.value)}
@@ -117,7 +116,7 @@ function TagSelectorInner({
117
116
  className="w-full flex items-center gap-2 px-2 py-1.5 text-sm rounded hover:bg-muted"
118
117
  >
119
118
  <Plus className="size-3.5" />
120
- {t('selector.createTag', { name: search.trim() })}
119
+ {m.tags_selector_createTag({ name: search.trim() })}
121
120
  </button>
122
121
  )}
123
122
  {filtered.map((t) => {
@@ -0,0 +1,21 @@
1
+ // AUTO-GENERATED by @allbluecn/kernel — DO NOT EDIT
2
+ import type { ProFeature } from '@allbluecn/kernel'
3
+
4
+ export const profileId = 'oss' as const
5
+ export const activePluginIds = ['@allbluecn/tags', '@allbluecn/inspiration', '@allbluecn/prd'] as const
6
+ export type ActivePluginId = (typeof activePluginIds)[number]
7
+
8
+ export const implementedModules: Record<ProFeature, boolean> = {
9
+ billing: false,
10
+ hostedAi: false,
11
+ sso: false,
12
+ audit: false,
13
+ permissions: false,
14
+ license: false,
15
+ versionHistory: false,
16
+ automation: false,
17
+ templates: false,
18
+ analytics: false,
19
+ globalSearch: false,
20
+ compliance: false,
21
+ }
@@ -0,0 +1,20 @@
1
+ // AUTO-GENERATED by @allbluecn/kernel — DO NOT EDIT
2
+ // profile: oss (validated: 3 plugins)
3
+ // 拓扑序:@allbluecn/tags -> @allbluecn/inspiration -> @allbluecn/prd
4
+ import tags from '@/plugins/core/tags'
5
+ import inspiration from '@/plugins/core/inspiration'
6
+ import prd from '@/plugins/core/prd'
7
+ import { defineProfile, type ProfileDefinition } from '@allbluecn/kernel'
8
+
9
+ export const profile: ProfileDefinition = defineProfile({
10
+ id: 'oss',
11
+ plugins: [tags, inspiration, prd],
12
+ })
13
+
14
+ export const pluginIds: string[] = ['@allbluecn/tags', '@allbluecn/inspiration', '@allbluecn/prd']
15
+
16
+ export const pluginMiddleware: unknown[] = [
17
+ ...tags.contributes.serverMiddleware ?? [],
18
+ ...inspiration.contributes.serverMiddleware ?? [],
19
+ ...prd.contributes.serverMiddleware ?? [],
20
+ ]
@@ -0,0 +1,8 @@
1
+ // AUTO-GENERATED by @allbluecn/kernel — DO NOT EDIT
2
+ import { NavTag } from '@/plugins/core/tags/ui'
3
+ import { type ComponentType } from 'react'
4
+ import type { SettingsTabContribution } from '@allbluecn/kernel'
5
+
6
+ export const navItems: ComponentType[] = [NavTag]
7
+ export const settingsTabs: SettingsTabContribution[] = []
8
+ export const dashboardWidgets: ComponentType[] = []
@@ -15,26 +15,22 @@
15
15
  // You should have received a copy of the GNU Affero General Public License
16
16
  // along with this program. If not, see <https://www.gnu.org/licenses/>.
17
17
 
18
-
19
18
  import { ThemeProvider } from "next-themes";
20
19
  import { useEffect, type ReactNode } from "react";
21
- import { getClientI18n } from "@/i18n/client";
22
20
  import { LazyMotion, domAnimation } from "motion/react";
23
- import { I18nextProvider } from "react-i18next";
24
21
  import { useRouteContext } from "@tanstack/react-router";
25
22
  import { TooltipProvider } from "@/components/ui/tooltip";
26
23
  import { TimezoneProvider } from "@/providers/timezone-provider";
27
24
  import type { Session } from "@/lib/auth/auth-client";
28
25
  import { exchangeRemoteTokenFn } from "@/server/serverFns/auth/session";
29
26
  import { toast } from "sonner";
30
- import { createServerI18n } from "@/i18n/server";
31
27
  import { registerIconPicker } from "@/plugins/core/prd/icon-picker-bridge";
32
28
  import { LucideIconPicker } from "@/components/shared-kit/icons/lucide-icon-picker";
29
+ import { m } from "@/paraglide/messages.js";
33
30
 
34
31
  // 宿主注入图标选择器实现,供 plugins-core 的 PRD 弹窗等使用(模块级单例)
35
32
  registerIconPicker(LucideIconPicker);
36
33
 
37
-
38
34
  function DesktopDeepLinkListener() {
39
35
  useEffect(() => {
40
36
  if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__ && !(window as any).__TAURI__) return
@@ -45,10 +41,10 @@ function DesktopDeepLinkListener() {
45
41
  if (!token) return
46
42
  try {
47
43
  await exchangeRemoteTokenFn({ data: { token } })
48
- toast.success(getClientI18n().t('auth.loginSuccess'))
44
+ toast.success(m.common_auth_loginSuccess())
49
45
  window.location.reload()
50
46
  } catch (e) {
51
- toast.error(getClientI18n().t('auth.loginFailed', { message: e instanceof Error ? e.message : getClientI18n().t('auth.unknownError') }))
47
+ toast.error(m.common_auth_loginFailed({ message: e instanceof Error ? e.message : m.common_auth_unknownError() }))
52
48
  }
53
49
  }).then((fn) => {
54
50
  unlisten = fn
@@ -70,13 +66,7 @@ export function Providers({
70
66
  children: ReactNode;
71
67
  session: Session | null;
72
68
  }) {
73
- const locale = useRouteContext({ from: '__root__', select: (c) => c.locale })
74
-
75
- const isServer = typeof window === 'undefined'
76
- const i18n = isServer ? createServerI18n(locale) : getClientI18n()
77
-
78
69
  return (
79
- <I18nextProvider i18n={i18n}>
80
70
  <ThemeProvider attribute="class" defaultTheme="light" enableSystem>
81
71
  <LazyMotion features={domAnimation} strict>
82
72
  <TooltipProvider>
@@ -87,6 +77,5 @@ export function Providers({
87
77
  </TooltipProvider>
88
78
  </LazyMotion>
89
79
  </ThemeProvider>
90
- </I18nextProvider>
91
80
  );
92
81
  }
@@ -100,6 +100,7 @@ import { Route as NavKnowledgeKbIdIndexRouteImport } from './routes/_nav/knowled
100
100
  import { Route as NavProjectsProjectIdStoryIdRouteRouteImport } from './routes/_nav/projects/$projectId/$storyId/route'
101
101
  import { Route as NavProjectsProjectIdSettingsRouteRouteImport } from './routes/_nav/projects/$projectId/settings/route'
102
102
  import { Route as NavSettingsAiProviderIdRouteRouteImport } from './routes/_nav/settings/ai/$providerId/route'
103
+ import { Route as NavWorkspacesWorkspaceIdActivitiesRouteRouteImport } from './routes/_nav/workspaces/$workspaceId/activities/route'
103
104
  import { Route as NavWorkspacesWorkspaceIdSettingsRouteRouteImport } from './routes/_nav/workspaces/$workspaceId/settings/route'
104
105
  import { Route as ApiAttachmentsIdContentRouteImport } from './routes/api/attachments/$id/content'
105
106
  import { Route as DesignFilesProjectIdArtboardIdFilenameRouteImport } from './routes/design-files/$projectId/$artboardId/$filename'
@@ -789,6 +790,16 @@ const NavSettingsAiProviderIdRouteRoute =
789
790
  (d) => d.Route,
790
791
  ),
791
792
  )
793
+ const NavWorkspacesWorkspaceIdActivitiesRouteRoute =
794
+ NavWorkspacesWorkspaceIdActivitiesRouteRouteImport.update({
795
+ id: '/activities',
796
+ path: '/activities',
797
+ getParentRoute: () => NavWorkspacesWorkspaceIdRouteRoute,
798
+ } as any).lazy(() =>
799
+ import('./routes/_nav/workspaces/$workspaceId/activities/route.lazy').then(
800
+ (d) => d.Route,
801
+ ),
802
+ )
792
803
  const NavWorkspacesWorkspaceIdSettingsRouteRoute =
793
804
  NavWorkspacesWorkspaceIdSettingsRouteRouteImport.update({
794
805
  id: '/settings',
@@ -950,6 +961,7 @@ export interface FileRoutesByFullPath {
950
961
  '/projects/$projectId/$storyId': typeof NavProjectsProjectIdStoryIdRouteRoute
951
962
  '/projects/$projectId/settings': typeof NavProjectsProjectIdSettingsRouteRoute
952
963
  '/settings/ai/$providerId': typeof NavSettingsAiProviderIdRouteRoute
964
+ '/workspaces/$workspaceId/activities': typeof NavWorkspacesWorkspaceIdActivitiesRouteRoute
953
965
  '/workspaces/$workspaceId/settings': typeof NavWorkspacesWorkspaceIdSettingsRouteRoute
954
966
  '/api/attachments/$id/content': typeof ApiAttachmentsIdContentRoute
955
967
  '/design-files/$projectId/$artboardId/$filename': typeof DesignFilesProjectIdArtboardIdFilenameRoute
@@ -1044,6 +1056,7 @@ export interface FileRoutesByTo {
1044
1056
  '/projects/$projectId/$storyId': typeof NavProjectsProjectIdStoryIdRouteRoute
1045
1057
  '/projects/$projectId/settings': typeof NavProjectsProjectIdSettingsRouteRoute
1046
1058
  '/settings/ai/$providerId': typeof NavSettingsAiProviderIdRouteRoute
1059
+ '/workspaces/$workspaceId/activities': typeof NavWorkspacesWorkspaceIdActivitiesRouteRoute
1047
1060
  '/workspaces/$workspaceId/settings': typeof NavWorkspacesWorkspaceIdSettingsRouteRoute
1048
1061
  '/api/attachments/$id/content': typeof ApiAttachmentsIdContentRoute
1049
1062
  '/design-files/$projectId/$artboardId/$filename': typeof DesignFilesProjectIdArtboardIdFilenameRoute
@@ -1156,6 +1169,7 @@ export interface FileRoutesById {
1156
1169
  '/_nav/projects/$projectId/$storyId': typeof NavProjectsProjectIdStoryIdRouteRoute
1157
1170
  '/_nav/projects/$projectId/settings': typeof NavProjectsProjectIdSettingsRouteRoute
1158
1171
  '/_nav/settings/ai/$providerId': typeof NavSettingsAiProviderIdRouteRoute
1172
+ '/_nav/workspaces/$workspaceId/activities': typeof NavWorkspacesWorkspaceIdActivitiesRouteRoute
1159
1173
  '/_nav/workspaces/$workspaceId/settings': typeof NavWorkspacesWorkspaceIdSettingsRouteRoute
1160
1174
  '/api/attachments/$id/content': typeof ApiAttachmentsIdContentRoute
1161
1175
  '/design-files/$projectId/$artboardId/$filename': typeof DesignFilesProjectIdArtboardIdFilenameRoute
@@ -1266,6 +1280,7 @@ export interface FileRouteTypes {
1266
1280
  | '/projects/$projectId/$storyId'
1267
1281
  | '/projects/$projectId/settings'
1268
1282
  | '/settings/ai/$providerId'
1283
+ | '/workspaces/$workspaceId/activities'
1269
1284
  | '/workspaces/$workspaceId/settings'
1270
1285
  | '/api/attachments/$id/content'
1271
1286
  | '/design-files/$projectId/$artboardId/$filename'
@@ -1360,6 +1375,7 @@ export interface FileRouteTypes {
1360
1375
  | '/projects/$projectId/$storyId'
1361
1376
  | '/projects/$projectId/settings'
1362
1377
  | '/settings/ai/$providerId'
1378
+ | '/workspaces/$workspaceId/activities'
1363
1379
  | '/workspaces/$workspaceId/settings'
1364
1380
  | '/api/attachments/$id/content'
1365
1381
  | '/design-files/$projectId/$artboardId/$filename'
@@ -1471,6 +1487,7 @@ export interface FileRouteTypes {
1471
1487
  | '/_nav/projects/$projectId/$storyId'
1472
1488
  | '/_nav/projects/$projectId/settings'
1473
1489
  | '/_nav/settings/ai/$providerId'
1490
+ | '/_nav/workspaces/$workspaceId/activities'
1474
1491
  | '/_nav/workspaces/$workspaceId/settings'
1475
1492
  | '/api/attachments/$id/content'
1476
1493
  | '/design-files/$projectId/$artboardId/$filename'
@@ -2224,6 +2241,13 @@ declare module '@tanstack/react-router' {
2224
2241
  preLoaderRoute: typeof NavSettingsAiProviderIdRouteRouteImport
2225
2242
  parentRoute: typeof NavSettingsAiRouteRoute
2226
2243
  }
2244
+ '/_nav/workspaces/$workspaceId/activities': {
2245
+ id: '/_nav/workspaces/$workspaceId/activities'
2246
+ path: '/activities'
2247
+ fullPath: '/workspaces/$workspaceId/activities'
2248
+ preLoaderRoute: typeof NavWorkspacesWorkspaceIdActivitiesRouteRouteImport
2249
+ parentRoute: typeof NavWorkspacesWorkspaceIdRouteRoute
2250
+ }
2227
2251
  '/_nav/workspaces/$workspaceId/settings': {
2228
2252
  id: '/_nav/workspaces/$workspaceId/settings'
2229
2253
  path: '/settings'
@@ -2619,11 +2643,14 @@ const NavTagsRouteRouteWithChildren = NavTagsRouteRoute._addFileChildren(
2619
2643
  )
2620
2644
 
2621
2645
  interface NavWorkspacesWorkspaceIdRouteRouteChildren {
2646
+ NavWorkspacesWorkspaceIdActivitiesRouteRoute: typeof NavWorkspacesWorkspaceIdActivitiesRouteRoute
2622
2647
  NavWorkspacesWorkspaceIdSettingsRouteRoute: typeof NavWorkspacesWorkspaceIdSettingsRouteRoute
2623
2648
  }
2624
2649
 
2625
2650
  const NavWorkspacesWorkspaceIdRouteRouteChildren: NavWorkspacesWorkspaceIdRouteRouteChildren =
2626
2651
  {
2652
+ NavWorkspacesWorkspaceIdActivitiesRouteRoute:
2653
+ NavWorkspacesWorkspaceIdActivitiesRouteRoute,
2627
2654
  NavWorkspacesWorkspaceIdSettingsRouteRoute:
2628
2655
  NavWorkspacesWorkspaceIdSettingsRouteRoute,
2629
2656
  }
package/src/router.tsx CHANGED
@@ -17,30 +17,39 @@
17
17
 
18
18
  import { createRouter as createTanstackRouter } from '@tanstack/react-router'
19
19
  import { setupRouterSsrQueryIntegration } from '@tanstack/react-router-ssr-query'
20
- import { QueryClient } from '@tanstack/react-query'
20
+ import { MutationCache, QueryClient } from '@tanstack/react-query'
21
+ import { navigateToLoginOnUnauthorized } from '@/lib/auth/anonymous-safe'
21
22
  import { setQueryClient } from '@/lib/query-client-seam'
22
23
  import { Loader2 } from 'lucide-react'
23
- import { useTranslation } from 'react-i18next'
24
24
  import { routeTree } from './routeTree.gen'
25
- import type { AppLocale } from '@/i18n/config'
25
+ import { GlobalErrorBoundary } from '@/components/error/global-error-boundary'
26
+ import type { Locale } from '@/paraglide/runtime'
27
+ import { m } from "@/paraglide/messages.js";
26
28
 
27
29
  function DefaultPendingComponent() {
28
- const { t } = useTranslation('common')
29
30
  return (
30
31
  <div className="flex h-screen w-full items-center justify-center">
31
32
  <div className="flex items-center gap-3 text-muted-foreground">
32
33
  <Loader2 className="h-5 w-5 animate-spin" />
33
- <span className="text-sm">{t('loading')}</span>
34
+ <span className="text-sm">{m.common_loading()}</span>
34
35
  </div>
35
36
  </div>
36
37
  )
37
38
  }
38
39
 
39
40
  export function getRouter() {
41
+ // MutationCache 必须在 QueryClient 构造期注入(该版本 MutationCache 实例无 onError 方法);
42
+ // onError 闭包引用下方才声明的 router——onError 只在 mutation 报错时触发,
43
+ // 必然晚于 getRouter 返回,运行时不会读到未初始化的 router
40
44
  const queryClient = new QueryClient({
41
45
  defaultOptions: {
42
46
  queries: { staleTime: 60 * 1000, refetchOnWindowFocus: false },
43
47
  },
48
+ mutationCache: new MutationCache({
49
+ onError: (error) => {
50
+ navigateToLoginOnUnauthorized(error, router)
51
+ },
52
+ }),
44
53
  })
45
54
  setQueryClient(queryClient)
46
55
 
@@ -48,12 +57,13 @@ export function getRouter() {
48
57
  routeTree,
49
58
  context: {
50
59
  queryClient,
51
- locale: 'zh' as AppLocale,
60
+ locale: 'zh' as Locale,
52
61
  session: null,
53
62
  },
54
63
  defaultPreload: 'intent',
55
64
  defaultPendingMs: 200,
56
65
  defaultPendingComponent: DefaultPendingComponent,
66
+ defaultErrorComponent: GlobalErrorBoundary,
57
67
  scrollRestoration: true,
58
68
  })
59
69
 
@@ -1,5 +1,4 @@
1
1
  import { createLazyFileRoute, useNavigate } from '@tanstack/react-router'
2
- import { useTranslation } from 'react-i18next'
3
2
  import { useState } from 'react'
4
3
  import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'
5
4
  import { Button } from '@/components/ui/button'
@@ -16,6 +15,7 @@ import { Cloud, Server, HardDrive, Loader2 } from 'lucide-react'
16
15
  import { useConnection } from '@desktop/connection-manager'
17
16
  import { connectionTest } from '@desktop/connection-manager/connection-test'
18
17
  import { toast } from 'sonner'
18
+ import { m } from "@/paraglide/messages.js";
19
19
 
20
20
  export const Route = createLazyFileRoute('/__desktop/onboarding')({
21
21
  component: OnboardingPage,
@@ -24,7 +24,6 @@ export const Route = createLazyFileRoute('/__desktop/onboarding')({
24
24
  function OnboardingPage() {
25
25
  const { switchMode } = useConnection()
26
26
  const navigate = useNavigate()
27
- const { t } = useTranslation('desktop')
28
27
  const [selfHostedDialogOpen, setSelfHostedDialogOpen] = useState(false)
29
28
  const [selfHostedUrl, setSelfHostedUrl] = useState('')
30
29
  const [selfHostedLabel, setSelfHostedLabel] = useState('')
@@ -34,7 +33,7 @@ function OnboardingPage() {
34
33
  try {
35
34
  await switchMode({ mode: 'saas', url: 'https://allblue.litsex.cn' })
36
35
  } catch (e) {
37
- toast.error(t('onboarding.errors.switchFailed', { message: e instanceof Error ? e.message : t('onboarding.errors.unknownError') }))
36
+ toast.error(m.desktop_onboarding_errors_switchFailed({ message: e instanceof Error ? e.message : m.desktop_onboarding_errors_unknownError() }))
38
37
  }
39
38
  }
40
39
 
@@ -43,7 +42,7 @@ function OnboardingPage() {
43
42
  await switchMode({ mode: 'local' })
44
43
  navigate({ to: '/workspace' })
45
44
  } catch (e) {
46
- toast.error(t('onboarding.errors.localFailed', { message: e instanceof Error ? e.message : t('onboarding.errors.unknownError') }))
45
+ toast.error(m.desktop_onboarding_errors_localFailed({ message: e instanceof Error ? e.message : m.desktop_onboarding_errors_unknownError() }))
47
46
  }
48
47
  }
49
48
 
@@ -52,13 +51,13 @@ function OnboardingPage() {
52
51
  const result = await connectionTest(selfHostedUrl)
53
52
  setTesting(false)
54
53
  if (!result.ok) {
55
- toast.error(t('onboarding.errors.connectFailed', { message: result.error ?? t('onboarding.errors.timeout') }))
54
+ toast.error(m.desktop_onboarding_errors_connectFailed({ message: result.error ?? m.desktop_onboarding_errors_timeout() }))
56
55
  return
57
56
  }
58
57
  try {
59
58
  await switchMode({ mode: 'self-hosted', url: selfHostedUrl, label: selfHostedLabel })
60
59
  } catch (e) {
61
- toast.error(t('onboarding.errors.switchFailed', { message: e instanceof Error ? e.message : t('onboarding.errors.unknownError') }))
60
+ toast.error(m.desktop_onboarding_errors_switchFailed({ message: e instanceof Error ? e.message : m.desktop_onboarding_errors_unknownError() }))
62
61
  }
63
62
  }
64
63
 
@@ -66,41 +65,41 @@ function OnboardingPage() {
66
65
  <div className="flex min-h-screen items-center justify-center bg-background p-8">
67
66
  <div className="w-full max-w-4xl space-y-6">
68
67
  <div className="text-center space-y-2">
69
- <h1 className="text-3xl font-bold">{t('onboarding.title')}</h1>
70
- <p className="text-muted-foreground">{t('onboarding.subtitle')}</p>
68
+ <h1 className="text-3xl font-bold">{m.desktop_onboarding_title()}</h1>
69
+ <p className="text-muted-foreground">{m.desktop_onboarding_subtitle()}</p>
71
70
  </div>
72
71
 
73
72
  <div className="grid gap-4 md:grid-cols-3">
74
73
  <Card className="cursor-pointer hover:border-primary transition-colors" onClick={handleSelectSaas}>
75
74
  <CardHeader>
76
75
  <Cloud className="size-10 text-primary mb-2" />
77
- <CardTitle>{t('onboarding.saas.title')}</CardTitle>
78
- <CardDescription>{t('onboarding.saas.desc')}</CardDescription>
76
+ <CardTitle>{m.desktop_onboarding_saas_title()}</CardTitle>
77
+ <CardDescription>{m.desktop_onboarding_saas_desc()}</CardDescription>
79
78
  </CardHeader>
80
79
  <CardContent>
81
- <Button className="w-full" variant="default">{t('onboarding.saas.button')}</Button>
80
+ <Button className="w-full" variant="default">{m.desktop_onboarding_saas_button()}</Button>
82
81
  </CardContent>
83
82
  </Card>
84
83
 
85
84
  <Card className="cursor-pointer hover:border-primary transition-colors" onClick={() => setSelfHostedDialogOpen(true)} >
86
85
  <CardHeader>
87
86
  <Server className="size-10 text-primary mb-2" />
88
- <CardTitle>{t('onboarding.selfHosted.title')}</CardTitle>
89
- <CardDescription>{t('onboarding.selfHosted.desc')}</CardDescription>
87
+ <CardTitle>{m.desktop_onboarding_selfHosted_title()}</CardTitle>
88
+ <CardDescription>{m.desktop_onboarding_selfHosted_desc()}</CardDescription>
90
89
  </CardHeader>
91
90
  <CardContent>
92
- <Button className="w-full" variant="outline">{t('onboarding.selfHosted.button')}</Button>
91
+ <Button className="w-full" variant="outline">{m.desktop_onboarding_selfHosted_button()}</Button>
93
92
  </CardContent>
94
93
  </Card>
95
94
 
96
95
  <Card className="cursor-pointer hover:border-primary transition-colors" onClick={handleSelectLocal}>
97
96
  <CardHeader>
98
97
  <HardDrive className="size-10 text-primary mb-2" />
99
- <CardTitle>{t('onboarding.local.title')}</CardTitle>
100
- <CardDescription>{t('onboarding.local.desc')}</CardDescription>
98
+ <CardTitle>{m.desktop_onboarding_local_title()}</CardTitle>
99
+ <CardDescription>{m.desktop_onboarding_local_desc()}</CardDescription>
101
100
  </CardHeader>
102
101
  <CardContent>
103
- <Button className="w-full" variant="outline">{t('onboarding.local.button')}</Button>
102
+ <Button className="w-full" variant="outline">{m.desktop_onboarding_local_button()}</Button>
104
103
  </CardContent>
105
104
  </Card>
106
105
  </div>
@@ -109,11 +108,11 @@ function OnboardingPage() {
109
108
  <Dialog open={selfHostedDialogOpen} onOpenChange={setSelfHostedDialogOpen}>
110
109
  <DialogContent>
111
110
  <DialogHeader>
112
- <DialogTitle>{t('onboarding.selfHosted.dialogTitle')}</DialogTitle>
111
+ <DialogTitle>{m.desktop_onboarding_selfHosted_dialogTitle()}</DialogTitle>
113
112
  </DialogHeader>
114
113
  <div className="space-y-4 py-4">
115
114
  <div className="space-y-2">
116
- <Label htmlFor="url">{t('onboarding.selfHosted.urlLabel')}</Label>
115
+ <Label htmlFor="url">{m.desktop_onboarding_selfHosted_urlLabel()}</Label>
117
116
  <Input
118
117
  id="url"
119
118
  placeholder="https://prd.mycompany.com"
@@ -122,20 +121,20 @@ function OnboardingPage() {
122
121
  />
123
122
  </div>
124
123
  <div className="space-y-2">
125
- <Label htmlFor="label">{t('onboarding.selfHosted.labelField')}</Label>
124
+ <Label htmlFor="label">{m.desktop_onboarding_selfHosted_labelField()}</Label>
126
125
  <Input
127
126
  id="label"
128
- placeholder={t('onboarding.selfHosted.labelPlaceholder')}
127
+ placeholder={m.desktop_onboarding_selfHosted_labelPlaceholder()}
129
128
  value={selfHostedLabel}
130
129
  onChange={(e) => setSelfHostedLabel(e.target.value)}
131
130
  />
132
131
  </div>
133
132
  </div>
134
133
  <DialogFooter>
135
- <Button variant="outline" onClick={() => setSelfHostedDialogOpen(false)}>{t('onboarding.selfHosted.cancel')}</Button>
134
+ <Button variant="outline" onClick={() => setSelfHostedDialogOpen(false)}>{m.desktop_onboarding_selfHosted_cancel()}</Button>
136
135
  <Button onClick={handleConfirmSelfHosted} disabled={testing || !selfHostedUrl.trim()}>
137
136
  {testing ? <Loader2 className="size-4 animate-spin mr-2" /> : null}
138
- {testing ? t('onboarding.selfHosted.connecting') : t('onboarding.selfHosted.connect')}
137
+ {testing ? m.desktop_onboarding_selfHosted_connecting() : m.desktop_onboarding_selfHosted_connect()}
139
138
  </Button>
140
139
  </DialogFooter>
141
140
  </DialogContent>