@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
@@ -19,7 +19,6 @@
19
19
 
20
20
  import { Loader2, Save, Upload } from "lucide-react";
21
21
  import { useState } from "react"
22
- import { useTranslation } from "react-i18next";
23
22
  import { cn } from "@/lib/utils";
24
23
  import { Button } from "@/components/ui/button";
25
24
  import {
@@ -47,6 +46,7 @@ import type {
47
46
  AvatarConfig,
48
47
  ShapeType,
49
48
  } from "@/components/settings/personal-team/account/avatar/avatar-config";
49
+ import { m } from "@/paraglide/messages.js";
50
50
 
51
51
  export interface SocialLink {
52
52
  platform: string;
@@ -82,20 +82,20 @@ export interface SettingsProfileProps {
82
82
  const defaultSocialPlatforms = [
83
83
  {
84
84
  id: "twitter",
85
- labelKey: "profile.socialTwitter",
85
+ label: m.settings_profile_socialTwitter,
86
86
  placeholder: "https://x.com/preetsuthar17",
87
87
  },
88
88
  {
89
89
  id: "github",
90
- labelKey: "profile.socialGitHub",
90
+ label: m.settings_profile_socialGitHub,
91
91
  placeholder: "https://github.com/preetsuthar17",
92
92
  },
93
93
  {
94
94
  id: "linkedin",
95
- labelKey: "profile.socialLinkedIn",
95
+ label: m.settings_profile_socialLinkedIn,
96
96
  placeholder: "https://linkedin.com/in/preetsuthar17",
97
97
  },
98
- { id: "website", labelKey: "profile.socialWebsite", placeholder: "https://preetsuthar.me" },
98
+ { id: "website", label: m.settings_profile_socialWebsite, placeholder: "https://preetsuthar.me" },
99
99
  ];
100
100
 
101
101
  export default function SettingsProfile({
@@ -113,7 +113,6 @@ export default function SettingsProfile({
113
113
  const [isChangingEmail, setIsChangingEmail] = useState(false);
114
114
  const [showEmailChangeForm, setShowEmailChangeForm] = useState(false);
115
115
  const [errors, setErrors] = useState<Record<string, string>>({});
116
- const { t } = useTranslation("settings");
117
116
 
118
117
  const [formData, setFormData] = useState<ProfileData>({
119
118
  name: profile?.name || "",
@@ -133,18 +132,18 @@ export default function SettingsProfile({
133
132
  setErrors({});
134
133
 
135
134
  if (!formData.name.trim()) {
136
- setErrors({ name: t("profile.enterName") });
135
+ setErrors({ name: m.settings_profile_enterName() });
137
136
  return;
138
137
  }
139
138
 
140
139
  if (!formData.email.trim()) {
141
- setErrors({ email: t("profile.enterEmail") });
140
+ setErrors({ email: m.settings_profile_enterEmail() });
142
141
  return;
143
142
  }
144
143
 
145
144
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
146
145
  if (!emailRegex.test(formData.email)) {
147
- setErrors({ email: t("profile.invalidEmail") });
146
+ setErrors({ email: m.settings_profile_invalidEmail() });
148
147
  return;
149
148
  }
150
149
 
@@ -152,7 +151,7 @@ export default function SettingsProfile({
152
151
  try {
153
152
  new URL(formData.website);
154
153
  } catch {
155
- setErrors({ website: t("profile.invalidUrl") });
154
+ setErrors({ website: m.settings_profile_invalidUrl() });
156
155
  return;
157
156
  }
158
157
  }
@@ -163,7 +162,7 @@ export default function SettingsProfile({
163
162
  } catch (error) {
164
163
  setErrors({
165
164
  _general:
166
- error instanceof Error ? error.message : t("profile.saveFailed"),
165
+ error instanceof Error ? error.message : m.settings_profile_saveFailed(),
167
166
  });
168
167
  } finally {
169
168
  setIsSaving(false);
@@ -174,18 +173,18 @@ export default function SettingsProfile({
174
173
  setErrors({});
175
174
 
176
175
  if (!emailChangeData.newEmail.trim()) {
177
- setErrors({ newEmail: t("profile.enterNewEmail") });
176
+ setErrors({ newEmail: m.settings_profile_enterNewEmail() });
178
177
  return;
179
178
  }
180
179
 
181
180
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
182
181
  if (!emailRegex.test(emailChangeData.newEmail)) {
183
- setErrors({ newEmail: t("profile.invalidEmail") });
182
+ setErrors({ newEmail: m.settings_profile_invalidEmail() });
184
183
  return;
185
184
  }
186
185
 
187
186
  if (!emailChangeData.currentPassword.trim()) {
188
- setErrors({ currentPassword: t("profile.enterCurrentPassword") });
187
+ setErrors({ currentPassword: m.settings_profile_enterCurrentPassword() });
189
188
  return;
190
189
  }
191
190
 
@@ -202,7 +201,7 @@ export default function SettingsProfile({
202
201
  } catch (error) {
203
202
  setErrors({
204
203
  emailChange:
205
- error instanceof Error ? error.message : t("profile.emailChangeFailed"),
204
+ error instanceof Error ? error.message : m.settings_profile_emailChangeFailed(),
206
205
  });
207
206
  } finally {
208
207
  setIsChangingEmail(false);
@@ -239,9 +238,9 @@ export default function SettingsProfile({
239
238
  <CardHeader>
240
239
  <div className="flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between">
241
240
  <div className="flex min-w-0 flex-1 flex-col gap-2">
242
- <CardTitle className="wrap-break-word">{t("profile.title")}</CardTitle>
241
+ <CardTitle className="wrap-break-word">{m.settings_profile_title()}</CardTitle>
243
242
  <CardDescription className="wrap-break-word">
244
- {t("profile.description")}
243
+ {m.settings_profile_description()}
245
244
  </CardDescription>
246
245
  </div>
247
246
  <div className="flex shrink-0 gap-2">
@@ -254,12 +253,12 @@ export default function SettingsProfile({
254
253
  {isSaving ? (
255
254
  <>
256
255
  <Loader2 className="size-4 animate-spin" />
257
- <span className="whitespace-nowrap">{t("profile.saving")}</span>
256
+ <span className="whitespace-nowrap">{m.settings_profile_saving()}</span>
258
257
  </>
259
258
  ) : (
260
259
  <>
261
260
  <Save className="size-4" />
262
- <span className="whitespace-nowrap">{t("profile.saveChanges")}</span>
261
+ <span className="whitespace-nowrap">{m.settings_profile_saveChanges()}</span>
263
262
  </>
264
263
  )}
265
264
  </Button>
@@ -275,13 +274,13 @@ export default function SettingsProfile({
275
274
  )}
276
275
 
277
276
  <div className="flex flex-col gap-4">
278
- <FieldLabel>{t("profile.avatar")}</FieldLabel>
277
+ <FieldLabel>{m.settings_profile_avatar()}</FieldLabel>
279
278
  <div className="flex flex-col gap-4 sm:flex-row sm:items-center">
280
279
  <NotionAvatarEditor
281
280
  currentConfig={avatarConfig ?? undefined}
282
281
  currentBgShape={bgShape}
283
282
  currentBgColor={bgColor}
284
- userName={formData.name || t("profile.defaultUser")}
283
+ userName={formData.name || m.settings_profile_defaultUser()}
285
284
  onSave={
286
285
  onAvatarEdit
287
286
  ? (config, shape, color) =>
@@ -293,11 +292,11 @@ export default function SettingsProfile({
293
292
  <div className="flex flex-col gap-2 sm:flex-row">
294
293
  <Button disabled type="button" variant="outline">
295
294
  <Upload className="size-4" />
296
- {t("profile.uploadImage")}
295
+ {m.settings_profile_uploadImage()}
297
296
  </Button>
298
297
  </div>
299
298
  <p className="text-muted-foreground text-xs">
300
- {t("profile.avatarDescription")}
299
+ {m.settings_profile_avatarDescription()}
301
300
  </p>
302
301
  {errors.avatar && (
303
302
  <p className="text-destructive text-xs">{errors.avatar}</p>
@@ -311,7 +310,7 @@ export default function SettingsProfile({
311
310
  <div className="flex flex-col gap-4">
312
311
  <Field>
313
312
  <FieldLabel htmlFor="name">
314
- {t("profile.name")} <span className="text-destructive">*</span>
313
+ {m.settings_profile_name()} <span className="text-destructive">*</span>
315
314
  </FieldLabel>
316
315
  <FieldContent>
317
316
  <InputGroup>
@@ -320,7 +319,7 @@ export default function SettingsProfile({
320
319
  onChange={(e) =>
321
320
  setFormData((prev) => ({ ...prev, name: e.target.value }))
322
321
  }
323
- placeholder={t("profile.namePlaceholder")}
322
+ placeholder={m.settings_profile_namePlaceholder()}
324
323
  value={formData.name}
325
324
  />
326
325
  </InputGroup>
@@ -329,7 +328,7 @@ export default function SettingsProfile({
329
328
  </Field>
330
329
 
331
330
  <Field>
332
- <FieldLabel htmlFor="email">{t("profile.email")}</FieldLabel>
331
+ <FieldLabel htmlFor="email">{m.settings_profile_email()}</FieldLabel>
333
332
  <FieldContent>
334
333
  <div className="flex items-center gap-2">
335
334
  <InputGroup className="min-w-0 flex-1">
@@ -356,7 +355,7 @@ export default function SettingsProfile({
356
355
  type="button"
357
356
  variant="outline"
358
357
  >
359
- {showEmailChangeForm ? t("common.cancel") : t("profile.changeEmail")}
358
+ {showEmailChangeForm ? m.common_cancel() : m.settings_profile_changeEmail()}
360
359
  </Button>
361
360
  )}
362
361
  </div>
@@ -368,7 +367,7 @@ export default function SettingsProfile({
368
367
  <div className="flex flex-col gap-4 rounded-lg border bg-muted/30 p-4">
369
368
  <Field>
370
369
  <FieldLabel htmlFor="new-email">
371
- {t("profile.newEmail")} <span className="text-destructive">*</span>
370
+ {m.settings_profile_newEmail()} <span className="text-destructive">*</span>
372
371
  </FieldLabel>
373
372
  <FieldContent>
374
373
  <InputGroup>
@@ -393,7 +392,7 @@ export default function SettingsProfile({
393
392
 
394
393
  <Field>
395
394
  <FieldLabel htmlFor="current-password">
396
- {t("profile.currentPassword")} <span className="text-destructive">*</span>
395
+ {m.settings_profile_currentPassword()} <span className="text-destructive">*</span>
397
396
  </FieldLabel>
398
397
  <FieldContent>
399
398
  <InputGroup>
@@ -405,7 +404,7 @@ export default function SettingsProfile({
405
404
  currentPassword: e.target.value,
406
405
  }))
407
406
  }
408
- placeholder={t("profile.currentPasswordPlaceholder")}
407
+ placeholder={m.settings_profile_currentPasswordPlaceholder()}
409
408
  type="password"
410
409
  value={emailChangeData.currentPassword}
411
410
  />
@@ -428,35 +427,35 @@ export default function SettingsProfile({
428
427
  {isChangingEmail ? (
429
428
  <>
430
429
  <Loader2 className="size-4 animate-spin" />
431
- {t("profile.changingEmail")}
430
+ {m.settings_profile_changingEmail()}
432
431
  </>
433
432
  ) : (
434
- t("profile.confirmChange")
433
+ m.settings_profile_confirmChange()
435
434
  )}
436
435
  </Button>
437
436
  </div>
438
437
  )}
439
438
 
440
439
  <Field>
441
- <FieldLabel htmlFor="bio">{t("profile.bio")}</FieldLabel>
440
+ <FieldLabel htmlFor="bio">{m.settings_profile_bio()}</FieldLabel>
442
441
  <FieldContent>
443
442
  <Textarea
444
443
  id="bio"
445
444
  onChange={(e) =>
446
445
  setFormData((prev) => ({ ...prev, bio: e.target.value }))
447
446
  }
448
- placeholder={t("profile.bioPlaceholder")}
447
+ placeholder={m.settings_profile_bioPlaceholder()}
449
448
  rows={4}
450
449
  value={formData.bio || ""}
451
450
  />
452
451
  <FieldDescription>
453
- {t("profile.bioDescription")}
452
+ {m.settings_profile_bioDescription()}
454
453
  </FieldDescription>
455
454
  </FieldContent>
456
455
  </Field>
457
456
 
458
457
  <Field>
459
- <FieldLabel htmlFor="location">{t("profile.location")}</FieldLabel>
458
+ <FieldLabel htmlFor="location">{m.settings_profile_location()}</FieldLabel>
460
459
  <FieldContent>
461
460
  <InputGroup>
462
461
  <InputGroupInput
@@ -467,7 +466,7 @@ export default function SettingsProfile({
467
466
  location: e.target.value,
468
467
  }))
469
468
  }
470
- placeholder={t("profile.locationPlaceholder")}
469
+ placeholder={m.settings_profile_locationPlaceholder()}
471
470
  value={formData.location || ""}
472
471
  />
473
472
  </InputGroup>
@@ -475,7 +474,7 @@ export default function SettingsProfile({
475
474
  </Field>
476
475
 
477
476
  <Field>
478
- <FieldLabel htmlFor="website">{t("profile.website")}</FieldLabel>
477
+ <FieldLabel htmlFor="website">{m.settings_profile_website()}</FieldLabel>
479
478
  <FieldContent>
480
479
  <InputGroup>
481
480
  <InputGroupInput
@@ -499,12 +498,12 @@ export default function SettingsProfile({
499
498
  <Separator />
500
499
 
501
500
  <div className="flex flex-col gap-4">
502
- <FieldLabel>{t("profile.socialLinks")}</FieldLabel>
501
+ <FieldLabel>{m.settings_profile_socialLinks()}</FieldLabel>
503
502
  <div className="flex flex-col gap-3">
504
503
  {defaultSocialPlatforms.map((platform) => (
505
504
  <Field key={platform.id}>
506
505
  <FieldLabel htmlFor={`social-${platform.id}`}>
507
- {t(platform.labelKey)}
506
+ {platform.label()}
508
507
  </FieldLabel>
509
508
  <FieldContent>
510
509
  <InputGroup>
@@ -17,7 +17,6 @@
17
17
 
18
18
  import { useState, useEffect } from "react"
19
19
  import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"
20
- import { useTranslation } from "react-i18next"
21
20
  import { toast } from "sonner"
22
21
  import { useResource } from "@/components/billing/use-resource"
23
22
  import {
@@ -69,6 +68,7 @@ import {
69
68
  import { Trash2, Infinity as InfinityIcon } from "lucide-react"
70
69
  import TeamInvitations, { type TeamInvitation, type TeamJoinRequestItem } from "@/components/settings/personal-team/team/team-invitations"
71
70
  import TeamMemberList, { type TeamMember } from "@/components/settings/personal-team/team/team-member-list"
71
+ import { m } from "@/paraglide/messages.js";
72
72
 
73
73
  type TeamClientProps = {
74
74
  user: {
@@ -88,7 +88,6 @@ function seatTypeToRole(seatType: "member" | "guest" | "owner"): "owner" | "memb
88
88
  }
89
89
 
90
90
  export default function TeamClient({ user }: TeamClientProps) {
91
- const { t } = useTranslation("settings")
92
91
  const qc = useQueryClient()
93
92
  const seats = useResource("seats")
94
93
  const guestSeats = useResource("guestSeats")
@@ -131,55 +130,55 @@ export default function TeamClient({ user }: TeamClientProps) {
131
130
  message?: string
132
131
  }) => createTeamInvitationFn({ data }),
133
132
  onSuccess: () => {
134
- toast.success(t("team.inviteSent"))
133
+ toast.success(m.settings_team_inviteSent())
135
134
  invalidate()
136
135
  },
137
136
  onError: (err) => {
138
- toast.error(err instanceof Error ? err.message : t("team.inviteCreateFailed"))
137
+ toast.error(err instanceof Error ? err.message : m.settings_team_inviteCreateFailed())
139
138
  },
140
139
  })
141
140
 
142
141
  const revokeMutation = useMutation({
143
142
  mutationFn: (invitationId: string) => revokeTeamInvitationFn({ data: { invitationId } }),
144
143
  onSuccess: () => {
145
- toast.success(t("team.revoke"))
144
+ toast.success(m.settings_team_revoke())
146
145
  invalidate()
147
146
  },
148
147
  onError: (err) => {
149
- toast.error(err instanceof Error ? err.message : t("team.revoke"))
148
+ toast.error(err instanceof Error ? err.message : m.settings_team_revoke())
150
149
  },
151
150
  })
152
151
 
153
152
  const resendMutation = useMutation({
154
153
  mutationFn: (invitationId: string) => resendTeamInvitationFn({ data: { invitationId } }),
155
154
  onSuccess: () => {
156
- toast.success(t("team.inviteSent"))
155
+ toast.success(m.settings_team_inviteSent())
157
156
  invalidate()
158
157
  },
159
158
  onError: (err) => {
160
- toast.error(err instanceof Error ? err.message : t("team.resendInvite"))
159
+ toast.error(err instanceof Error ? err.message : m.settings_team_resendInvite())
161
160
  },
162
161
  })
163
162
 
164
163
  const removeMemberMutation = useMutation({
165
164
  mutationFn: (membershipId: string) => removeTeamMemberFn({ data: { membershipId } }),
166
165
  onSuccess: () => {
167
- toast.success(t("team.removeMember"))
166
+ toast.success(m.settings_team_removeMember())
168
167
  invalidate()
169
168
  },
170
169
  onError: (err) => {
171
- toast.error(err instanceof Error ? err.message : t("team.removeMember"))
170
+ toast.error(err instanceof Error ? err.message : m.settings_team_removeMember())
172
171
  },
173
172
  })
174
173
 
175
174
  const leaveTeamMutation = useMutation({
176
175
  mutationFn: () => leaveTeamFn({ data: {} }),
177
176
  onSuccess: () => {
178
- toast.success(t("team.leaveTeam"))
177
+ toast.success(m.settings_team_leaveTeam())
179
178
  window.location.reload()
180
179
  },
181
180
  onError: (err) => {
182
- toast.error(err instanceof Error ? err.message : t("team.leaveTeam"))
181
+ toast.error(err instanceof Error ? err.message : m.settings_team_leaveTeam())
183
182
  },
184
183
  })
185
184
 
@@ -187,11 +186,11 @@ export default function TeamClient({ user }: TeamClientProps) {
187
186
  mutationFn: ({ invitationId, seatType }: { invitationId: string; seatType: 'member' | 'guest' }) =>
188
187
  approveTeamInvitationFn({ data: { invitationId, seatType } }),
189
188
  onSuccess: () => {
190
- toast.success(t("team.inviteApproved"))
189
+ toast.success(m.settings_team_inviteApproved())
191
190
  invalidate()
192
191
  },
193
192
  onError: (err) => {
194
- toast.error(err instanceof Error ? err.message : t("team.inviteCreateFailed"))
193
+ toast.error(err instanceof Error ? err.message : m.settings_team_inviteCreateFailed())
195
194
  },
196
195
  })
197
196
 
@@ -214,7 +213,7 @@ export default function TeamClient({ user }: TeamClientProps) {
214
213
  status: inv.status as "pending" | "pending_approval" | "accepted" | "expired" | "revoked",
215
214
  applicantEmail: inv.applicantEmail ?? undefined,
216
215
  invitedBy: {
217
- name: inv.owner?.username ?? user.name ?? t("team.you"),
216
+ name: inv.owner?.username ?? user.name ?? m.settings_team_you(),
218
217
  email: inv.owner?.email ?? user.email ?? "",
219
218
  },
220
219
  expiresAt: inv.expiresAt ? new Date(inv.expiresAt) : undefined,
@@ -264,7 +263,7 @@ export default function TeamClient({ user }: TeamClientProps) {
264
263
  email: data.email,
265
264
  role: data.role,
266
265
  status: "pending",
267
- invitedBy: { name: user.name ?? t("team.you"), email: user.email ?? "" },
266
+ invitedBy: { name: user.name ?? m.settings_team_you(), email: user.email ?? "" },
268
267
  createdAt: new Date(),
269
268
  expiresAt: new Date(Date.now() + expiresDays * 24 * 60 * 60 * 1000),
270
269
  } as TeamInvitation
@@ -294,7 +293,7 @@ export default function TeamClient({ user }: TeamClientProps) {
294
293
  link: `${APP_URL}/invite/${result.token}`,
295
294
  role: "member",
296
295
  status: "pending",
297
- invitedBy: { name: user.name ?? t("team.you"), email: user.email ?? "" },
296
+ invitedBy: { name: user.name ?? m.settings_team_you(), email: user.email ?? "" },
298
297
  createdAt: new Date(),
299
298
  expiresAt: new Date(Date.now() + days * 24 * 60 * 60 * 1000),
300
299
  } as TeamInvitation
@@ -304,22 +303,22 @@ export default function TeamClient({ user }: TeamClientProps) {
304
303
  mutationFn: ({ requestId, seatType }: { requestId: string; seatType: "member" | "guest" }) =>
305
304
  approveTeamJoinRequestFn({ data: { requestId, seatType } }),
306
305
  onSuccess: () => {
307
- toast.success(t("team.inviteApproved"))
306
+ toast.success(m.settings_team_inviteApproved())
308
307
  invalidate()
309
308
  },
310
309
  onError: (err) => {
311
- toast.error(err instanceof Error ? err.message : t("team.inviteCreateFailed"))
310
+ toast.error(err instanceof Error ? err.message : m.settings_team_inviteCreateFailed())
312
311
  },
313
312
  })
314
313
 
315
314
  const rejectRequestMutation = useMutation({
316
315
  mutationFn: (requestId: string) => rejectTeamJoinRequestFn({ data: { requestId } }),
317
316
  onSuccess: () => {
318
- toast.success(t("team.joinRequests.requestRejected"))
317
+ toast.success(m.settings_team_joinRequests_requestRejected())
319
318
  invalidate()
320
319
  },
321
320
  onError: (err) => {
322
- toast.error(err instanceof Error ? err.message : t("team.inviteCreateFailed"))
321
+ toast.error(err instanceof Error ? err.message : m.settings_team_inviteCreateFailed())
323
322
  },
324
323
  })
325
324
 
@@ -337,22 +336,22 @@ export default function TeamClient({ user }: TeamClientProps) {
337
336
  const deleteInvitationMutation = useMutation({
338
337
  mutationFn: (invitationId: string) => deleteTeamInvitationFn({ data: { invitationId } }),
339
338
  onSuccess: () => {
340
- toast.success(t("team.invite.deleteRecord"))
339
+ toast.success(m.settings_team_invite_deleteRecord())
341
340
  invalidate()
342
341
  },
343
342
  onError: (err) => {
344
- toast.error(err instanceof Error ? err.message : t("team.inviteCreateFailed"))
343
+ toast.error(err instanceof Error ? err.message : m.settings_team_inviteCreateFailed())
345
344
  },
346
345
  })
347
346
 
348
347
  const deleteRequestMutation = useMutation({
349
348
  mutationFn: (requestId: string) => deleteTeamJoinRequestFn({ data: { requestId } }),
350
349
  onSuccess: () => {
351
- toast.success(t("team.invite.deleteRecord"))
350
+ toast.success(m.settings_team_invite_deleteRecord())
352
351
  invalidate()
353
352
  },
354
353
  onError: (err) => {
355
- toast.error(err instanceof Error ? err.message : t("team.inviteCreateFailed"))
354
+ toast.error(err instanceof Error ? err.message : m.settings_team_inviteCreateFailed())
356
355
  },
357
356
  })
358
357
 
@@ -385,19 +384,19 @@ export default function TeamClient({ user }: TeamClientProps) {
385
384
  return (
386
385
  <div className="space-y-6">
387
386
  <div>
388
- <h2 className="text-lg font-semibold">{t("team.title")}</h2>
387
+ <h2 className="text-lg font-semibold">{m.settings_team_title()}</h2>
389
388
  <p className="text-sm text-muted-foreground">
390
- {t("team.joinedTeam", { username: teamOwner.username })}
389
+ {m.settings_team_joinedTeam({ username: teamOwner.username })}
391
390
  </p>
392
391
  </div>
393
392
 
394
393
  <Card>
395
394
  <CardHeader>
396
- <CardTitle>{t("team.memberInfo")}</CardTitle>
395
+ <CardTitle>{m.settings_team_memberInfo()}</CardTitle>
397
396
  <CardDescription>
398
397
  {myEntry?.seatType === "guest"
399
- ? t("team.seatGuests")
400
- : t("team.seatMembers")}
398
+ ? m.settings_team_seatGuests()
399
+ : m.settings_team_seatMembers()}
401
400
  </CardDescription>
402
401
  </CardHeader>
403
402
  <CardContent>
@@ -411,18 +410,17 @@ export default function TeamClient({ user }: TeamClientProps) {
411
410
  </Card>
412
411
 
413
412
  <FieldSet>
414
- <FieldLegend className="text-destructive">{t("team.dangerZone")}</FieldLegend>
415
- <FieldDescription>{t("team.dangerZoneDesc")}</FieldDescription>
413
+ <FieldLegend className="text-destructive">{m.settings_team_dangerZone()}</FieldLegend>
414
+ <FieldDescription>{m.settings_team_dangerZoneDesc()}</FieldDescription>
416
415
  <FieldGroup>
417
416
  <Field orientation="horizontal">
418
417
  <FieldContent>
419
- <FieldTitle>{t("team.leaveTeamTitle")}</FieldTitle>
420
- <FieldDescription>{t("team.leaveTeamDesc")}</FieldDescription>
418
+ <FieldTitle>{m.settings_team_leaveTeamTitle()}</FieldTitle>
419
+ <FieldDescription>{m.settings_team_leaveTeamDesc()}</FieldDescription>
421
420
  </FieldContent>
422
421
  <LeaveTeamButton
423
422
  onConfirm={handleLeave}
424
423
  isPending={leaveTeamMutation.isPending}
425
- t={t}
426
424
  />
427
425
  </Field>
428
426
  </FieldGroup>
@@ -439,20 +437,20 @@ export default function TeamClient({ user }: TeamClientProps) {
439
437
  return (
440
438
  <div className="space-y-6">
441
439
  <div>
442
- <h2 className="text-lg font-semibold">{t("team.title")}</h2>
443
- <p className="text-sm text-muted-foreground">{t("team.subtitle")}</p>
440
+ <h2 className="text-lg font-semibold">{m.settings_team_title()}</h2>
441
+ <p className="text-sm text-muted-foreground">{m.settings_team_subtitle()}</p>
444
442
  </div>
445
443
 
446
444
  <div className="grid gap-4 xl:grid-cols-2 border rounded-lg p-4">
447
445
  <SeatCard
448
- title={t("team.seatMembers")}
449
- description={t("team.seatMembersHint")}
446
+ title={m.settings_team_seatMembers()}
447
+ description={m.settings_team_seatMembersHint()}
450
448
  usage={seatUsage}
451
449
  limit={seatLimit}
452
450
  />
453
451
  <SeatCard
454
- title={t("team.seatGuests")}
455
- description={t("team.seatGuestsHint")}
452
+ title={m.settings_team_seatGuests()}
453
+ description={m.settings_team_seatGuestsHint()}
456
454
  usage={guestSeatUsage}
457
455
  limit={guestSeatLimit}
458
456
  />
@@ -498,7 +496,6 @@ function SeatCard({
498
496
  usage: number
499
497
  limit: number | "unlimited"
500
498
  }) {
501
- const { t } = useTranslation("settings")
502
499
  return (
503
500
  <Card>
504
501
  <CardHeader className="pb-2">
@@ -508,7 +505,7 @@ function SeatCard({
508
505
  {limit === "unlimited" ? (
509
506
  <span className="flex items-center gap-1">
510
507
  <InfinityIcon className="size-3" />
511
- {t("team.unlimited")}
508
+ {m.settings_team_unlimited()}
512
509
  </span>
513
510
  ) : (
514
511
  `${usage} / ${limit}`
@@ -528,11 +525,9 @@ function SeatCard({
528
525
  function LeaveTeamButton({
529
526
  onConfirm,
530
527
  isPending,
531
- t,
532
528
  }: {
533
529
  onConfirm: () => Promise<void>
534
530
  isPending: boolean
535
- t: (key: string) => string
536
531
  }) {
537
532
  const [open, setOpen] = useState(false)
538
533
 
@@ -545,16 +540,16 @@ function LeaveTeamButton({
545
540
  onClick={() => setOpen(true)}
546
541
  >
547
542
  <Trash2 className="size-4" data-icon="inline-start" />
548
- {t("team.leaveTeam")}
543
+ {m.settings_team_leaveTeam()}
549
544
  </Button>
550
545
  <AlertDialog open={open} onOpenChange={setOpen}>
551
546
  <AlertDialogContent>
552
547
  <AlertDialogHeader>
553
- <AlertDialogTitle>{t("team.leaveTeamTitle")}</AlertDialogTitle>
554
- <AlertDialogDescription>{t("team.leaveTeamDesc")}</AlertDialogDescription>
548
+ <AlertDialogTitle>{m.settings_team_leaveTeamTitle()}</AlertDialogTitle>
549
+ <AlertDialogDescription>{m.settings_team_leaveTeamDesc()}</AlertDialogDescription>
555
550
  </AlertDialogHeader>
556
551
  <AlertDialogFooter>
557
- <AlertDialogCancel>{t("common.cancel")}</AlertDialogCancel>
552
+ <AlertDialogCancel>{m.common_cancel()}</AlertDialogCancel>
558
553
  <AlertDialogAction
559
554
  disabled={isPending}
560
555
  onClick={async () => {
@@ -563,7 +558,7 @@ function LeaveTeamButton({
563
558
  }}
564
559
  className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
565
560
  >
566
- {t("team.leaveTeam")}
561
+ {m.settings_team_leaveTeam()}
567
562
  </AlertDialogAction>
568
563
  </AlertDialogFooter>
569
564
  </AlertDialogContent>