@allbluecn/web-app 0.9.5 → 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 +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 * as React from "react";
19
- import { useTranslation } from "react-i18next";
20
19
  import { useTheme } from "next-themes";
21
20
  import { Link as RouterLink } from "@tanstack/react-router";
22
21
  import { useServerFn } from "@tanstack/react-start";
@@ -52,6 +51,7 @@ import { formatFileSize, getFaviconUrl, getFileTypeIcon, extractLinkTitle, getMi
52
51
  import { generalGroupLabel } from "../../relations/general-groups";
53
52
  import { LucideIconByName } from "@/components/shared-kit/icons/lucide-icon-picker/lucide-icon-by-name";
54
53
  import type { AssociatedItem, RelationsData, StoryLinkItem, StoryAttachmentItem } from "../../types";
54
+ import { m } from "@/paraglide/messages.js";
55
55
 
56
56
  export type AssociatedDialogKind = "link" | "attachment" | "knowledge";
57
57
 
@@ -106,7 +106,6 @@ function AttachmentFileView({
106
106
  /** fill: 填充父容器(全屏弹窗内),否则使用网格 CSS 变量高度 */
107
107
  fill?: boolean;
108
108
  }) {
109
- const { t } = useTranslation("story");
110
109
  const { file, error } = useAttachmentFile(attachment);
111
110
 
112
111
  if (error) {
@@ -134,10 +133,10 @@ function AttachmentFileView({
134
133
  file={file}
135
134
  fileName={attachment.fileName}
136
135
  showTitleToggle
137
- titleToggleLabel={t("attachmentDialog.toggleTitle")}
138
- titleToggleHideLabel={t("attachmentDialog.hideTitle")}
139
- fullscreenLabel={t("associatedAttachments.fullscreen")}
140
- exitFullscreenLabel={t("associatedAttachments.exitFullscreen")}
136
+ titleToggleLabel={m.story_attachmentDialog_toggleTitle()}
137
+ titleToggleHideLabel={m.story_attachmentDialog_hideTitle()}
138
+ fullscreenLabel={m.story_associatedAttachments_fullscreen()}
139
+ exitFullscreenLabel={m.story_associatedAttachments_exitFullscreen()}
141
140
  onFullscreen={onFullscreen}
142
141
  onExitFullscreen={onExitFullscreen}
143
142
  height={fill ? "100%" : "var(--attachment-preview-h, 24rem)"}
@@ -272,12 +271,11 @@ function DocHtmlPreview({ kbId, docId, title }: { kbId: string; docId: string; t
272
271
  }
273
272
 
274
273
  function ExternalDocPreview({ group, title }: { group: string; title: string }) {
275
- const { t } = useTranslation("story");
276
274
  return (
277
275
  <div className="flex h-48 w-full flex-col items-center justify-center gap-2 rounded-md border bg-muted/30 text-sm text-muted-foreground">
278
276
  <BookOpenText className="size-6" />
279
277
  <span className="max-w-full truncate px-4 font-medium text-foreground">{title}</span>
280
- <span>{generalGroupLabel(t, group)}</span>
278
+ <span>{generalGroupLabel(group)}</span>
281
279
  </div>
282
280
  );
283
281
  }
@@ -303,7 +301,6 @@ export function AssociatedAttachmentsPanel({
303
301
  onOpenDialog,
304
302
  onAppendActivities,
305
303
  }: AssociatedAttachmentsPanelProps) {
306
- const { t } = useTranslation("story");
307
304
  const removeLink = useServerFn(removeLinkFn);
308
305
  const removeAttachment = useServerFn(removeAttachmentFn);
309
306
  const unlinkDoc = useServerFn(unlinkDocFn);
@@ -377,11 +374,11 @@ export function AssociatedAttachmentsPanel({
377
374
  : attachmentItems;
378
375
 
379
376
  return [
380
- { kind: "link" as const, label: t("associatedAttachments.groupLink"), count: linkItems.length, items: linkItems },
381
- { kind: "attachment" as const, label: t("associatedAttachments.groupAttachment"), count: filteredAttachmentItems.length, items: filteredAttachmentItems },
382
- { kind: "doc" as const, label: t("associatedAttachments.groupKb"), count: docItems.length, items: docItems },
377
+ { kind: "link" as const, label: m.story_associatedAttachments_groupLink(), count: linkItems.length, items: linkItems },
378
+ { kind: "attachment" as const, label: m.story_associatedAttachments_groupAttachment(), count: filteredAttachmentItems.length, items: filteredAttachmentItems },
379
+ { kind: "doc" as const, label: m.story_associatedAttachments_groupKb(), count: docItems.length, items: docItems },
383
380
  ].filter((g) => g.count > 0);
384
- }, [items, t, activeTypeFilters]);
381
+ }, [items, activeTypeFilters]);
385
382
 
386
383
  const handleRemoveLink = async (id: string) => {
387
384
  try {
@@ -389,7 +386,7 @@ export function AssociatedAttachmentsPanel({
389
386
  if (res?.activity) onAppendActivities?.([res.activity]);
390
387
  onRefresh((prev) => ({ ...prev, links: prev.links.filter((l) => l.id !== id) }));
391
388
  } catch (err) {
392
- toast.error((err as Error)?.message || t("linkDialog.removeFailed"));
389
+ toast.error((err as Error)?.message || m.story_linkDialog_removeFailed());
393
390
  }
394
391
  };
395
392
 
@@ -402,7 +399,7 @@ export function AssociatedAttachmentsPanel({
402
399
  attachments: prev.attachments.filter((a) => a.id !== id),
403
400
  }));
404
401
  } catch (err) {
405
- toast.error((err as Error)?.message || t("attachmentDialog.removeFailed"));
402
+ toast.error((err as Error)?.message || m.story_attachmentDialog_removeFailed());
406
403
  }
407
404
  };
408
405
 
@@ -415,7 +412,7 @@ export function AssociatedAttachmentsPanel({
415
412
  knowledge: { ...prev.knowledge, docs: prev.knowledge.docs.filter((d) => d.id !== docId) },
416
413
  }));
417
414
  } catch (err) {
418
- toast.error((err as Error)?.message || t("knowledgeDialog.linkFailed"));
415
+ toast.error((err as Error)?.message || m.story_knowledgeDialog_linkFailed());
419
416
  }
420
417
  };
421
418
 
@@ -435,7 +432,7 @@ export function AssociatedAttachmentsPanel({
435
432
  return (
436
433
  <>
437
434
  <Button variant="ghost" size="icon" className="size-7" asChild>
438
- <a href={item.data.url} target="_blank" rel="noopener noreferrer" title={t("associatedAttachments.open")} onClick={(e) => e.stopPropagation()}>
435
+ <a href={item.data.url} target="_blank" rel="noopener noreferrer" title={m.story_associatedAttachments_open()} onClick={(e) => e.stopPropagation()}>
439
436
  <ExternalLink className="size-3.5" />
440
437
  </a>
441
438
  </Button>
@@ -443,8 +440,8 @@ export function AssociatedAttachmentsPanel({
443
440
  variant="ghost"
444
441
  size="icon"
445
442
  className="size-7"
446
- title={t("associatedAttachments.edit")}
447
- aria-label={t("associatedAttachments.edit")}
443
+ title={m.story_associatedAttachments_edit()}
444
+ aria-label={m.story_associatedAttachments_edit()}
448
445
  onClick={() => onOpenDialog("link", item.data)}
449
446
  >
450
447
  <Edit2 className="size-3.5" />
@@ -453,7 +450,7 @@ export function AssociatedAttachmentsPanel({
453
450
  variant="ghost"
454
451
  size="icon"
455
452
  className="size-7"
456
- aria-label={t("associatedAttachments.remove")}
453
+ aria-label={m.story_associatedAttachments_remove()}
457
454
  onClick={() => handleRemoveLink(item.data.id)}
458
455
  >
459
456
  <Trash2 className="size-3.5" />
@@ -468,8 +465,8 @@ export function AssociatedAttachmentsPanel({
468
465
  <a
469
466
  href={item.data.storageUrl}
470
467
  download={item.data.fileName}
471
- title={t("associatedAttachments.download")}
472
- aria-label={t("associatedAttachments.download")}
468
+ title={m.story_associatedAttachments_download()}
469
+ aria-label={m.story_associatedAttachments_download()}
473
470
  onClick={(e) => e.stopPropagation()}
474
471
  >
475
472
  <Download className="size-3.5" />
@@ -480,8 +477,8 @@ export function AssociatedAttachmentsPanel({
480
477
  variant="ghost"
481
478
  size="icon"
482
479
  className="size-7"
483
- title={t("associatedAttachments.edit")}
484
- aria-label={t("associatedAttachments.edit")}
480
+ title={m.story_associatedAttachments_edit()}
481
+ aria-label={m.story_associatedAttachments_edit()}
485
482
  onClick={() => onOpenDialog("attachment", undefined, item.data)}
486
483
  >
487
484
  <Edit2 className="size-3.5" />
@@ -490,7 +487,7 @@ export function AssociatedAttachmentsPanel({
490
487
  variant="ghost"
491
488
  size="icon"
492
489
  className="size-7"
493
- aria-label={t("associatedAttachments.remove")}
490
+ aria-label={m.story_associatedAttachments_remove()}
494
491
  onClick={() => handleRemoveAttachment(item.data.id)}
495
492
  >
496
493
  <Trash2 className="size-3.5" />
@@ -505,19 +502,19 @@ export function AssociatedAttachmentsPanel({
505
502
  <Button variant="ghost" size="icon" className="size-7" asChild>
506
503
  {isExternal && externalGroup ? (
507
504
  externalGroup === "legal" ? (
508
- <RouterLink to="/knowledge/laws/$id" params={{ id: item.data.id }} title={t("associatedAttachments.goToDoc")} onClick={(e) => e.stopPropagation()}>
505
+ <RouterLink to="/knowledge/laws/$id" params={{ id: item.data.id }} title={m.story_associatedAttachments_goToDoc()} onClick={(e) => e.stopPropagation()}>
509
506
  <ExternalLink className="size-3.5" />
510
507
  </RouterLink>
511
508
  ) : externalGroup === "compliance" ? (
512
- <RouterLink to="/knowledge/compliance/$id" params={{ id: item.data.id }} title={t("associatedAttachments.goToDoc")} onClick={(e) => e.stopPropagation()}>
509
+ <RouterLink to="/knowledge/compliance/$id" params={{ id: item.data.id }} title={m.story_associatedAttachments_goToDoc()} onClick={(e) => e.stopPropagation()}>
513
510
  <ExternalLink className="size-3.5" />
514
511
  </RouterLink>
515
512
  ) : externalGroup === "dictionary" ? (
516
- <RouterLink to="/knowledge/dictionaries/$id" params={{ id: item.data.id }} title={t("associatedAttachments.goToDoc")} onClick={(e) => e.stopPropagation()}>
513
+ <RouterLink to="/knowledge/dictionaries/$id" params={{ id: item.data.id }} title={m.story_associatedAttachments_goToDoc()} onClick={(e) => e.stopPropagation()}>
517
514
  <ExternalLink className="size-3.5" />
518
515
  </RouterLink>
519
516
  ) : externalGroup === "bookmark" ? (
520
- <RouterLink to="/knowledge/bookmarks/$id" params={{ id: item.data.id }} title={t("associatedAttachments.goToDoc")} onClick={(e) => e.stopPropagation()}>
517
+ <RouterLink to="/knowledge/bookmarks/$id" params={{ id: item.data.id }} title={m.story_associatedAttachments_goToDoc()} onClick={(e) => e.stopPropagation()}>
521
518
  <ExternalLink className="size-3.5" />
522
519
  </RouterLink>
523
520
  ) : (
@@ -527,7 +524,7 @@ export function AssociatedAttachmentsPanel({
527
524
  <RouterLink
528
525
  to="/knowledge/$kbId/doc/$docId"
529
526
  params={{ kbId: item.data.kbId, docId: item.data.id }}
530
- title={t("associatedAttachments.goToDoc")}
527
+ title={m.story_associatedAttachments_goToDoc()}
531
528
  onClick={(e) => e.stopPropagation()}
532
529
  >
533
530
  <ExternalLink className="size-3.5" />
@@ -538,8 +535,8 @@ export function AssociatedAttachmentsPanel({
538
535
  variant="ghost"
539
536
  size="icon"
540
537
  className="size-7"
541
- title={t("associatedAttachments.removeLink")}
542
- aria-label={t("associatedAttachments.removeLink")}
538
+ title={m.story_associatedAttachments_removeLink()}
539
+ aria-label={m.story_associatedAttachments_removeLink()}
543
540
  onClick={() => handleUnlinkDoc(item.data.id)}
544
541
  >
545
542
  <Unlink className="size-3.5" />
@@ -605,7 +602,7 @@ export function AssociatedAttachmentsPanel({
605
602
  <BookOpenText className="size-4 shrink-0 text-muted-foreground" />
606
603
  <span className="min-w-0 flex-1 truncate text-sm text-foreground">{item.data.title}</span>
607
604
  <LucideIconByName name={item.data.kbIcon} size={14} className="shrink-0 text-muted-foreground" />
608
- <span className="shrink-0 text-xs text-muted-foreground">{item.data.kbId.startsWith("ext:") ? generalGroupLabel(t, item.data.kbName) : item.data.kbName}</span>
605
+ <span className="shrink-0 text-xs text-muted-foreground">{item.data.kbId.startsWith("ext:") ? generalGroupLabel(item.data.kbName) : item.data.kbName}</span>
609
606
  <div className="flex items-center gap-0.5 shrink-0">{renderActionsInline(item)}</div>
610
607
  </div>
611
608
  );
@@ -666,7 +663,7 @@ export function AssociatedAttachmentsPanel({
666
663
  </div>
667
664
  <div className="flex items-center gap-1.5">
668
665
  <LucideIconByName name={item.data.kbIcon} size={12} className="shrink-0 text-muted-foreground" />
669
- <span className="truncate text-xs text-muted-foreground">{item.data.kbId.startsWith("ext:") ? generalGroupLabel(t, item.data.kbName) : item.data.kbName}</span>
666
+ <span className="truncate text-xs text-muted-foreground">{item.data.kbId.startsWith("ext:") ? generalGroupLabel(item.data.kbName) : item.data.kbName}</span>
670
667
  </div>
671
668
  <div className="absolute right-2 top-2 hidden gap-0.5 rounded-md border bg-background p-0.5 group-hover:flex">
672
669
  {renderActionsInline(item, true)}
@@ -694,7 +691,7 @@ export function AssociatedAttachmentsPanel({
694
691
  }}
695
692
  >
696
693
  <div className="flex items-center gap-1.5">
697
- <span>{t("associatedAttachments.title")}</span>
694
+ <span>{m.story_associatedAttachments_title()}</span>
698
695
  <span className="inline-flex min-w-[18px] items-center justify-center rounded-full bg-primary px-1 text-[10px] font-medium text-primary-foreground">
699
696
  {items.length}
700
697
  </span>
@@ -705,8 +702,8 @@ export function AssociatedAttachmentsPanel({
705
702
  variant="ghost"
706
703
  size="sm"
707
704
  className={`size-7 p-0 ${mode === "list" ? "bg-muted" : ""}`}
708
- aria-label={t("associatedAttachments.list")}
709
- title={t("associatedAttachments.list")}
705
+ aria-label={m.story_associatedAttachments_list()}
706
+ title={m.story_associatedAttachments_list()}
710
707
  onClick={() => switchMode("list")}
711
708
  >
712
709
  <LayoutList className="size-3.5" />
@@ -715,8 +712,8 @@ export function AssociatedAttachmentsPanel({
715
712
  variant="ghost"
716
713
  size="sm"
717
714
  className={`size-7 p-0 ${mode === "preview" ? "bg-muted" : ""}`}
718
- aria-label={t("associatedAttachments.preview")}
719
- title={t("associatedAttachments.preview")}
715
+ aria-label={m.story_associatedAttachments_preview()}
716
+ title={m.story_associatedAttachments_preview()}
720
717
  onClick={() => switchMode("preview")}
721
718
  >
722
719
  <LayoutGrid className="size-3.5" />
@@ -747,8 +744,8 @@ export function AssociatedAttachmentsPanel({
747
744
  variant="ghost"
748
745
  size="sm"
749
746
  className={`size-6 p-0 ${activeTypeFilters.size > 0 ? "bg-muted text-foreground" : ""}`}
750
- aria-label={t("associatedAttachments.filter")}
751
- title={t("associatedAttachments.filter")}
747
+ aria-label={m.story_associatedAttachments_filter()}
748
+ title={m.story_associatedAttachments_filter()}
752
749
  >
753
750
  <ChartNoAxesGantt className="size-3.5" />
754
751
  {activeTypeFilters.size > 0 && (
@@ -758,7 +755,7 @@ export function AssociatedAttachmentsPanel({
758
755
  </PopoverTrigger>
759
756
  <PopoverContent align="end" className="w-52 p-2">
760
757
  <div className="text-xs font-medium text-muted-foreground my-1 px-1">
761
- {t("associatedAttachments.filterByType")}
758
+ {m.story_associatedAttachments_filterByType()}
762
759
  </div>
763
760
  <div className="flex flex-wrap gap-1">
764
761
  <button
@@ -777,7 +774,7 @@ export function AssociatedAttachmentsPanel({
777
774
  : "border-border text-muted-foreground hover:bg-muted hover:text-foreground",
778
775
  )}
779
776
  >
780
- {t("associatedAttachments.filterAll")}
777
+ {m.story_associatedAttachments_filterAll()}
781
778
  </button>
782
779
  {attachmentTypeGroups.map((g) => (
783
780
  <button
@@ -807,8 +804,8 @@ export function AssociatedAttachmentsPanel({
807
804
  variant="ghost"
808
805
  size="sm"
809
806
  className="size-6 p-0"
810
- aria-label={t("associatedAttachments.add")}
811
- title={t("associatedAttachments.add")}
807
+ aria-label={m.story_associatedAttachments_add()}
808
+ title={m.story_associatedAttachments_add()}
812
809
  onClick={() => onOpenDialog(group.kind === "doc" ? "knowledge" : group.kind)}
813
810
  >
814
811
  <Plus className="size-3.5" />
@@ -16,7 +16,7 @@
16
16
  // along with this program. If not, see <https://www.gnu.org/licenses/>.
17
17
 
18
18
  import * as React from "react";
19
- import { useTranslation } from "react-i18next";
19
+ import { m } from '@/paraglide/messages.js'
20
20
  import {
21
21
  FileText,
22
22
  PenTool,
@@ -30,23 +30,22 @@ import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover
30
30
 
31
31
  interface StoryDetailCategoryConfig {
32
32
  key: string;
33
- label: string;
33
+ label: () => string;
34
34
  icon: React.ComponentType<{ className?: string }>;
35
- tooltip: string;
36
- placeholder: string;
35
+ tooltip: () => string;
36
+ placeholder: () => string;
37
37
  }
38
38
 
39
39
  const CATEGORIES: StoryDetailCategoryConfig[] = [
40
- { key: "prd", label: "categories.prd.label", icon: FileText, tooltip: "categories.prd.tooltip", placeholder: "categories.prd.placeholder" },
41
- { key: "ui", label: "categories.ui.label", icon: PenTool, tooltip: "categories.ui.tooltip", placeholder: "categories.ui.placeholder" },
42
- { key: "bug", label: "categories.bug.label", icon: Bug, tooltip: "categories.bug.tooltip", placeholder: "categories.bug.placeholder" },
43
- { key: "test-case", label: "categories.testCase.label", icon: FlaskConical, tooltip: "categories.testCase.tooltip", placeholder: "categories.testCase.placeholder" },
44
- { key: "acceptance", label: "categories.acceptance.label", icon: CircleCheckBig, tooltip: "categories.acceptance.tooltip", placeholder: "categories.acceptance.placeholder" },
45
- { key: "retro", label: "categories.retro.label", icon: Speech, tooltip: "categories.retro.tooltip", placeholder: "categories.retro.placeholder" },
40
+ { key: "prd", label: m.story_categories_prd_label, icon: FileText, tooltip: m.story_categories_prd_tooltip, placeholder: m.story_categories_prd_placeholder },
41
+ { key: "ui", label: m.story_categories_ui_label, icon: PenTool, tooltip: m.story_categories_ui_tooltip, placeholder: m.story_categories_ui_placeholder },
42
+ { key: "bug", label: m.story_categories_bug_label, icon: Bug, tooltip: m.story_categories_bug_tooltip, placeholder: m.story_categories_bug_placeholder },
43
+ { key: "test-case", label: m.story_categories_testCase_label, icon: FlaskConical, tooltip: m.story_categories_testCase_tooltip, placeholder: m.story_categories_testCase_placeholder },
44
+ { key: "acceptance", label: m.story_categories_acceptance_label, icon: CircleCheckBig, tooltip: m.story_categories_acceptance_tooltip, placeholder: m.story_categories_acceptance_placeholder },
45
+ { key: "retro", label: m.story_categories_retro_label, icon: Speech, tooltip: m.story_categories_retro_tooltip, placeholder: m.story_categories_retro_placeholder },
46
46
  ];
47
47
 
48
48
  export function StoryDetailCategories() {
49
- const { t } = useTranslation("story");
50
49
  return (
51
50
  <>
52
51
  {CATEGORIES.map((cat) => (
@@ -60,15 +59,15 @@ export function StoryDetailCategories() {
60
59
  variant="ghost"
61
60
  size="sm"
62
61
  className="h-7 gap-1.5 px-2.5 text-xs font-normal hover:bg-muted rounded-md"
63
- title={t(cat.tooltip)}
62
+ title={cat.tooltip()}
64
63
  >
65
64
  <cat.icon className="size-3.5 text-muted-foreground" />
66
- {t(cat.label)}
65
+ {cat.label()}
67
66
  </Button>
68
67
  </PopoverTrigger>
69
68
  <PopoverContent align="start" className="w-[320px] p-4">
70
69
  <div className="text-sm text-muted-foreground">
71
- {t(cat.placeholder)}
70
+ {cat.placeholder()}
72
71
  </div>
73
72
  </PopoverContent>
74
73
  </Popover>
@@ -16,7 +16,6 @@
16
16
  // along with this program. If not, see <https://www.gnu.org/licenses/>.
17
17
 
18
18
  import * as React from "react";
19
- import { useTranslation } from "react-i18next";
20
19
  import {
21
20
  Plus,
22
21
  ChevronDown,
@@ -50,6 +49,7 @@ import { StoryRefRow } from "../../relations/story-ref-row";
50
49
  import type { DisplayOptions } from "../../display/types";
51
50
  import type { RelationsData, StoryListItem, UserBrief } from "../../types";
52
51
  import type { StoryPatch } from "../../display/group-fields";
52
+ import { m } from "@/paraglide/messages.js";
53
53
 
54
54
  export interface StoryDetailChildrenButtonProps {
55
55
  onAction: (action: "create" | "select") => void;
@@ -69,7 +69,6 @@ export interface StoryDetailChildrenPanelProps {
69
69
  }
70
70
 
71
71
  export function StoryDetailChildrenButton({ onAction }: StoryDetailChildrenButtonProps) {
72
- const { t } = useTranslation("story");
73
72
  return (
74
73
  <Tooltip>
75
74
  <TooltipTrigger asChild>
@@ -81,27 +80,26 @@ export function StoryDetailChildrenButton({ onAction }: StoryDetailChildrenButto
81
80
  className="h-7 gap-1.5 px-2.5 text-xs font-normal hover:bg-muted rounded-md"
82
81
  >
83
82
  <GitBranch className="size-3.5 text-muted-foreground" />
84
- {t("children.addChild")}
83
+ {m.story_children_addChild()}
85
84
  <ChevronDown className="size-3 text-muted-foreground" />
86
85
  </Button>
87
86
  </DropdownMenuTrigger>
88
87
  <DropdownMenuContent align="start" className="w-36">
89
88
  <DropdownMenuItem onSelect={() => onAction("create")}>
90
- <Plus className="mr-2 size-4" />{t("children.createChild")}
89
+ <Plus className="mr-2 size-4" />{m.story_children_createChild()}
91
90
  </DropdownMenuItem>
92
91
  <DropdownMenuItem onSelect={() => onAction("select")}>
93
- <SquareDashedMousePointer className="mr-2 size-4" />{t("children.selectChild")}
92
+ <SquareDashedMousePointer className="mr-2 size-4" />{m.story_children_selectChild()}
94
93
  </DropdownMenuItem>
95
94
  </DropdownMenuContent>
96
95
  </DropdownMenu>
97
96
  </TooltipTrigger>
98
- <TooltipContent side="top">{t("children.childStories")}</TooltipContent>
97
+ <TooltipContent side="top">{m.story_children_childStories()}</TooltipContent>
99
98
  </Tooltip>
100
99
  );
101
100
  }
102
101
 
103
102
  function ChildrenActionDropdown({ onAction }: { onAction: (action: "create" | "select") => void }) {
104
- const { t } = useTranslation("story");
105
103
  return (
106
104
  <DropdownMenu>
107
105
  <DropdownMenuTrigger asChild>
@@ -111,10 +109,10 @@ function ChildrenActionDropdown({ onAction }: { onAction: (action: "create" | "s
111
109
  </DropdownMenuTrigger>
112
110
  <DropdownMenuContent align="end" className="w-36">
113
111
  <DropdownMenuItem onSelect={() => onAction("create")}>
114
- <Plus className="mr-2 size-4" />{t("children.createChild")}
112
+ <Plus className="mr-2 size-4" />{m.story_children_createChild()}
115
113
  </DropdownMenuItem>
116
114
  <DropdownMenuItem onSelect={() => onAction("select")}>
117
- <SquareDashedMousePointer className="mr-2 size-4" />{t("children.selectChild")}
115
+ <SquareDashedMousePointer className="mr-2 size-4" />{m.story_children_selectChild()}
118
116
  </DropdownMenuItem>
119
117
  </DropdownMenuContent>
120
118
  </DropdownMenu>
@@ -133,7 +131,6 @@ export function StoryDetailChildrenPanel({
133
131
  onAction,
134
132
  onNavigateInPanel,
135
133
  }: StoryDetailChildrenPanelProps) {
136
- const { t } = useTranslation("story");
137
134
  const childrenList = data.children as StoryListItem[];
138
135
  const [selectedIds, setSelectedIds] = React.useState<Set<string>>(() => new Set());
139
136
  const [busy, setBusy] = React.useState(false);
@@ -185,7 +182,7 @@ export function StoryDetailChildrenPanel({
185
182
  const handleRemoveChild = async (childId: string) => {
186
183
  try {
187
184
  await removeChildFn({ data: { childId } });
188
- toast.success(t("children.removedChild"));
185
+ toast.success(m.story_children_removedChild());
189
186
  onRefresh((prev) => ({
190
187
  ...prev,
191
188
  hierarchy: {
@@ -195,7 +192,7 @@ export function StoryDetailChildrenPanel({
195
192
  },
196
193
  }));
197
194
  } catch (e) {
198
- toast.error((e as Error)?.message || t("children.removeChildFailed"));
195
+ toast.error((e as Error)?.message || m.story_children_removeChildFailed());
199
196
  }
200
197
  };
201
198
 
@@ -240,13 +237,13 @@ export function StoryDetailChildrenPanel({
240
237
  const res = await bulkArchiveStoriesFn({ data: { storyIds: ids } });
241
238
  toast.success(
242
239
  res.skipped > 0
243
- ? t("children.bulkArchivedSkipped", { archived: res.archived, skipped: res.skipped })
244
- : t("children.bulkArchived", { count: res.archived }),
240
+ ? m.story_children_bulkArchivedSkipped({ archived: res.archived, skipped: res.skipped })
241
+ : m.story_children_bulkArchived({ count: res.archived }),
245
242
  );
246
243
  setSelectedIds(new Set());
247
244
  refreshChildren();
248
245
  } catch (e) {
249
- toast.error((e as Error)?.message || t("children.archiveFailed"));
246
+ toast.error((e as Error)?.message || m.story_children_archiveFailed());
250
247
  } finally {
251
248
  setBusy(false);
252
249
  }
@@ -258,11 +255,11 @@ export function StoryDetailChildrenPanel({
258
255
  setBusy(true);
259
256
  try {
260
257
  const res = await bulkDeleteStoriesFn({ data: { storyIds: ids } });
261
- toast.success(t("children.bulkDeleted", { count: res.deleted }));
258
+ toast.success(m.story_children_bulkDeleted({ count: res.deleted }));
262
259
  setSelectedIds(new Set());
263
260
  refreshChildren();
264
261
  } catch (e) {
265
- toast.error((e as Error)?.message || t("children.deleteFailed"));
262
+ toast.error((e as Error)?.message || m.story_children_deleteFailed());
266
263
  } finally {
267
264
  setBusy(false);
268
265
  }
@@ -274,10 +271,10 @@ export function StoryDetailChildrenPanel({
274
271
  try {
275
272
  await bulkUpdateStoriesFn({ data: { storyIds: [...selectedIds], patch } });
276
273
  setSelectedIds(new Set());
277
- toast.success(t("children.bulkUpdated"));
274
+ toast.success(m.story_children_bulkUpdated());
278
275
  refreshChildren();
279
276
  } catch (e) {
280
- toast.error((e as Error)?.message || t("children.bulkUpdateFailed"));
277
+ toast.error((e as Error)?.message || m.story_children_bulkUpdateFailed());
281
278
  } finally {
282
279
  setBusy(false);
283
280
  }
@@ -337,7 +334,7 @@ export function StoryDetailChildrenPanel({
337
334
  }}
338
335
  >
339
336
  <div className="flex items-center gap-1.5">
340
- <span>{t("children.childStories")}</span>
337
+ <span>{m.story_children_childStories()}</span>
341
338
  <span className="inline-flex min-w-[18px] items-center justify-center rounded-full bg-primary px-1 text-[10px] font-medium text-primary-foreground">
342
339
  {childrenList.length}
343
340
  </span>
@@ -425,7 +422,7 @@ export function StoryDetailChildrenPanel({
425
422
  onToggle={toggleStory}
426
423
  onOpenStory={handleOpenStory}
427
424
  onRemove={handleRemoveChild}
428
- removeMenuLabel={t("children.removeChild")}
425
+ removeMenuLabel={m.story_children_removeChild()}
429
426
  onStoryRefresh={(storyId, patch) => {
430
427
  if (patch.deleted) {
431
428
  onRefresh((prev) => ({
@@ -473,7 +470,7 @@ export function StoryDetailChildrenPanel({
473
470
  onToggle={toggleStory}
474
471
  onOpenStory={handleOpenStory}
475
472
  onRemove={handleRemoveChild}
476
- removeMenuLabel={t("children.removeChild")}
473
+ removeMenuLabel={m.story_children_removeChild()}
477
474
  onStoryRefresh={(storyId, patch) => {
478
475
  if (patch.deleted) {
479
476
  onRefresh((prev) => ({
@@ -16,26 +16,24 @@
16
16
  // along with this program. If not, see <https://www.gnu.org/licenses/>.
17
17
 
18
18
  import { Waypoints } from "lucide-react";
19
- import { useTranslation } from "react-i18next";
20
19
  import { Button } from "@/components/ui/button";
20
+ import { m } from "@/paraglide/messages.js";
21
21
 
22
22
  export function StoryDetailDependencies({
23
23
  onOpenAdd,
24
24
  }: {
25
25
  onOpenAdd: () => void;
26
26
  }) {
27
- const { t } = useTranslation("story");
28
-
29
27
  return (
30
28
  <Button
31
29
  variant="ghost"
32
30
  size="sm"
33
31
  className="h-7 gap-1.5 px-2.5 text-xs font-normal hover:bg-muted rounded-md"
34
32
  onClick={onOpenAdd}
35
- title={t("relations.dependencyTitle")}
33
+ title={m.story_relations_dependencyTitle()}
36
34
  >
37
35
  <Waypoints className="size-3.5 text-muted-foreground" />
38
- {t("relations.addDependency")}
36
+ {m.story_relations_addDependency()}
39
37
  </Button>
40
38
  );
41
39
  }