@docyrus/ui-pro-ai-assistant 0.0.1

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 (308) hide show
  1. package/dist/index.js +26161 -0
  2. package/dist/index.js.map +1 -0
  3. package/package.json +155 -0
  4. package/src/components/assistant-animations.tsx +29 -0
  5. package/src/components/assistant-dialogs.tsx +235 -0
  6. package/src/components/code-view.tsx +278 -0
  7. package/src/components/create-agent-task.tsx +104 -0
  8. package/src/components/create-new-work-version.tsx +30 -0
  9. package/src/components/extract-web.tsx +160 -0
  10. package/src/components/forward-to-agent.tsx +90 -0
  11. package/src/components/generate-chart.tsx +101 -0
  12. package/src/components/generative-action-button.tsx +122 -0
  13. package/src/components/generative-tool.tsx +685 -0
  14. package/src/components/generative-ui-object.tsx +210 -0
  15. package/src/components/input-area.tsx +1209 -0
  16. package/src/components/json-schema-layout.tsx +326 -0
  17. package/src/components/list-item-card.tsx +92 -0
  18. package/src/components/mermaid-diagram.tsx +192 -0
  19. package/src/components/preview-image.tsx +47 -0
  20. package/src/components/request-approval.tsx +48 -0
  21. package/src/components/request-user-input.tsx +270 -0
  22. package/src/components/search-web.tsx +319 -0
  23. package/src/components/sheet-command.tsx +88 -0
  24. package/src/components/shell-canvas.tsx +122 -0
  25. package/src/components/show-advanced-data-table.tsx +352 -0
  26. package/src/components/show-generated-content-options.tsx +93 -0
  27. package/src/components/show-people-cards.tsx +180 -0
  28. package/src/components/subagent-tool.tsx +180 -0
  29. package/src/components/text-editor-tool.tsx +328 -0
  30. package/src/components/work-canvas.tsx +88 -0
  31. package/src/components/work-card.tsx +42 -0
  32. package/src/declarations.d.ts +1 -0
  33. package/src/docy-assistant.tsx +1962 -0
  34. package/src/hooks/index.ts +7 -0
  35. package/src/hooks/use-assistant-api.ts +507 -0
  36. package/src/hooks/use-deployment-data.ts +162 -0
  37. package/src/hooks/use-project-state.ts +347 -0
  38. package/src/hooks/use-session-state.ts +207 -0
  39. package/src/hooks/use-speech-recognition.ts +137 -0
  40. package/src/hooks/use-ui-state.ts +185 -0
  41. package/src/hooks/use-works-state.ts +146 -0
  42. package/src/i18n/context.tsx +253 -0
  43. package/src/i18n/index.ts +19 -0
  44. package/src/i18n/locales/de.json +198 -0
  45. package/src/i18n/locales/el.json +198 -0
  46. package/src/i18n/locales/en.json +226 -0
  47. package/src/i18n/locales/es.json +198 -0
  48. package/src/i18n/locales/fr.json +198 -0
  49. package/src/i18n/locales/it.json +198 -0
  50. package/src/i18n/locales/pt.json +198 -0
  51. package/src/i18n/locales/sl.json +198 -0
  52. package/src/i18n/locales/tr.json +211 -0
  53. package/src/i18n/types.ts +23 -0
  54. package/src/i18n/use-translation.ts +17 -0
  55. package/src/index.ts +18 -0
  56. package/src/internal/plate-editor/editor/auth-context.ts +11 -0
  57. package/src/internal/plate-editor/editor/editor-base-kit.tsx +39 -0
  58. package/src/internal/plate-editor/editor/editor-kit.tsx +89 -0
  59. package/src/internal/plate-editor/editor/plate-editor.tsx +75 -0
  60. package/src/internal/plate-editor/editor/plate-types.ts +126 -0
  61. package/src/internal/plate-editor/editor/plugins/ai-kit.tsx +172 -0
  62. package/src/internal/plate-editor/editor/plugins/autoformat-kit.tsx +211 -0
  63. package/src/internal/plate-editor/editor/plugins/basic-blocks-base-kit.tsx +26 -0
  64. package/src/internal/plate-editor/editor/plugins/basic-blocks-kit.tsx +51 -0
  65. package/src/internal/plate-editor/editor/plugins/basic-marks-base-kit.tsx +24 -0
  66. package/src/internal/plate-editor/editor/plugins/basic-marks-kit.tsx +38 -0
  67. package/src/internal/plate-editor/editor/plugins/basic-nodes-kit.tsx +6 -0
  68. package/src/internal/plate-editor/editor/plugins/block-menu-kit.tsx +14 -0
  69. package/src/internal/plate-editor/editor/plugins/block-placeholder-kit.tsx +17 -0
  70. package/src/internal/plate-editor/editor/plugins/block-selection-kit.tsx +31 -0
  71. package/src/internal/plate-editor/editor/plugins/callout-base-kit.tsx +5 -0
  72. package/src/internal/plate-editor/editor/plugins/callout-kit.tsx +7 -0
  73. package/src/internal/plate-editor/editor/plugins/code-block-base-kit.tsx +23 -0
  74. package/src/internal/plate-editor/editor/plugins/code-block-kit.tsx +26 -0
  75. package/src/internal/plate-editor/editor/plugins/column-base-kit.tsx +8 -0
  76. package/src/internal/plate-editor/editor/plugins/column-kit.tsx +7 -0
  77. package/src/internal/plate-editor/editor/plugins/comment-base-kit.tsx +5 -0
  78. package/src/internal/plate-editor/editor/plugins/comment-kit.tsx +174 -0
  79. package/src/internal/plate-editor/editor/plugins/copilot-kit.tsx +68 -0
  80. package/src/internal/plate-editor/editor/plugins/cursor-overlay-kit.tsx +13 -0
  81. package/src/internal/plate-editor/editor/plugins/date-base-kit.tsx +5 -0
  82. package/src/internal/plate-editor/editor/plugins/date-kit.tsx +7 -0
  83. package/src/internal/plate-editor/editor/plugins/discussion-kit.tsx +36 -0
  84. package/src/internal/plate-editor/editor/plugins/dnd-kit.tsx +27 -0
  85. package/src/internal/plate-editor/editor/plugins/docx-export-kit.tsx +43 -0
  86. package/src/internal/plate-editor/editor/plugins/docx-kit.tsx +6 -0
  87. package/src/internal/plate-editor/editor/plugins/emoji-kit.tsx +15 -0
  88. package/src/internal/plate-editor/editor/plugins/exit-break-kit.tsx +12 -0
  89. package/src/internal/plate-editor/editor/plugins/floating-toolbar-kit.tsx +19 -0
  90. package/src/internal/plate-editor/editor/plugins/font-base-kit.tsx +36 -0
  91. package/src/internal/plate-editor/editor/plugins/font-kit.tsx +47 -0
  92. package/src/internal/plate-editor/editor/plugins/indent-base-kit.tsx +19 -0
  93. package/src/internal/plate-editor/editor/plugins/indent-kit.tsx +22 -0
  94. package/src/internal/plate-editor/editor/plugins/link-base-kit.tsx +5 -0
  95. package/src/internal/plate-editor/editor/plugins/link-kit.tsx +35 -0
  96. package/src/internal/plate-editor/editor/plugins/list-base-kit.tsx +24 -0
  97. package/src/internal/plate-editor/editor/plugins/list-kit.tsx +27 -0
  98. package/src/internal/plate-editor/editor/plugins/markdown-kit.tsx +18 -0
  99. package/src/internal/plate-editor/editor/plugins/math-base-kit.tsx +8 -0
  100. package/src/internal/plate-editor/editor/plugins/math-kit.tsx +10 -0
  101. package/src/internal/plate-editor/editor/plugins/media-base-kit.tsx +37 -0
  102. package/src/internal/plate-editor/editor/plugins/media-kit.tsx +53 -0
  103. package/src/internal/plate-editor/editor/plugins/mention-base-kit.tsx +5 -0
  104. package/src/internal/plate-editor/editor/plugins/mention-kit.tsx +36 -0
  105. package/src/internal/plate-editor/editor/plugins/slash-kit.tsx +17 -0
  106. package/src/internal/plate-editor/editor/plugins/suggestion-base-kit.tsx +5 -0
  107. package/src/internal/plate-editor/editor/plugins/suggestion-kit.tsx +95 -0
  108. package/src/internal/plate-editor/editor/plugins/table-base-kit.tsx +20 -0
  109. package/src/internal/plate-editor/editor/plugins/table-kit.tsx +22 -0
  110. package/src/internal/plate-editor/editor/plugins/toc-base-kit.tsx +5 -0
  111. package/src/internal/plate-editor/editor/plugins/toc-kit.tsx +14 -0
  112. package/src/internal/plate-editor/editor/plugins/toggle-base-kit.tsx +5 -0
  113. package/src/internal/plate-editor/editor/plugins/toggle-kit.tsx +9 -0
  114. package/src/internal/plate-editor/editor/transforms.ts +165 -0
  115. package/src/internal/plate-editor/editor/use-chat.ts +152 -0
  116. package/src/internal/plate-editor/hooks/index.ts +3 -0
  117. package/src/internal/plate-editor/hooks/use-copy-to-clipboard.ts +31 -0
  118. package/src/internal/plate-editor/hooks/use-is-touch-device.ts +26 -0
  119. package/src/internal/plate-editor/hooks/use-lock-scroll.ts +21 -0
  120. package/src/internal/plate-editor/hooks/use-media-query.ts +44 -0
  121. package/src/internal/plate-editor/hooks/use-mounted.ts +18 -0
  122. package/src/internal/plate-editor/hooks/use-on-click-outside.ts +114 -0
  123. package/src/internal/plate-editor/hooks/use-upload-file.ts +81 -0
  124. package/src/internal/plate-editor/i18n/context.tsx +58 -0
  125. package/src/internal/plate-editor/i18n/index.ts +3 -0
  126. package/src/internal/plate-editor/i18n/locales/de.json +57 -0
  127. package/src/internal/plate-editor/i18n/locales/el.json +57 -0
  128. package/src/internal/plate-editor/i18n/locales/en.json +57 -0
  129. package/src/internal/plate-editor/i18n/locales/es.json +57 -0
  130. package/src/internal/plate-editor/i18n/locales/fr.json +57 -0
  131. package/src/internal/plate-editor/i18n/locales/it.json +57 -0
  132. package/src/internal/plate-editor/i18n/locales/pt.json +57 -0
  133. package/src/internal/plate-editor/i18n/locales/sl.json +57 -0
  134. package/src/internal/plate-editor/i18n/locales/tr.json +57 -0
  135. package/src/internal/plate-editor/i18n/types.ts +59 -0
  136. package/src/internal/plate-editor/i18n/use-translation.ts +22 -0
  137. package/src/internal/plate-editor/index.ts +39 -0
  138. package/src/internal/plate-editor/lib/ai-output-converter.ts +153 -0
  139. package/src/internal/plate-editor/lib/download-file.ts +17 -0
  140. package/src/internal/plate-editor/plate-ui/ai-chat-editor.tsx +26 -0
  141. package/src/internal/plate-editor/plate-ui/ai-menu.tsx +828 -0
  142. package/src/internal/plate-editor/plate-ui/ai-node.tsx +41 -0
  143. package/src/internal/plate-editor/plate-ui/ai-toolbar-button.tsx +27 -0
  144. package/src/internal/plate-editor/plate-ui/alert-dialog.tsx +147 -0
  145. package/src/internal/plate-editor/plate-ui/align-toolbar-button.tsx +90 -0
  146. package/src/internal/plate-editor/plate-ui/avatar.tsx +3 -0
  147. package/src/internal/plate-editor/plate-ui/block-context-menu.tsx +106 -0
  148. package/src/internal/plate-editor/plate-ui/block-discussion.tsx +364 -0
  149. package/src/internal/plate-editor/plate-ui/block-draggable.tsx +556 -0
  150. package/src/internal/plate-editor/plate-ui/block-list-static.tsx +78 -0
  151. package/src/internal/plate-editor/plate-ui/block-list.tsx +85 -0
  152. package/src/internal/plate-editor/plate-ui/block-menu.tsx +557 -0
  153. package/src/internal/plate-editor/plate-ui/block-selection.tsx +47 -0
  154. package/src/internal/plate-editor/plate-ui/block-suggestion.tsx +469 -0
  155. package/src/internal/plate-editor/plate-ui/blockquote-node-static.tsx +10 -0
  156. package/src/internal/plate-editor/plate-ui/blockquote-node.tsx +11 -0
  157. package/src/internal/plate-editor/plate-ui/button.tsx +190 -0
  158. package/src/internal/plate-editor/plate-ui/calendar.tsx +3 -0
  159. package/src/internal/plate-editor/plate-ui/callout-node-static.tsx +76 -0
  160. package/src/internal/plate-editor/plate-ui/callout-node.tsx +54 -0
  161. package/src/internal/plate-editor/plate-ui/caption.tsx +48 -0
  162. package/src/internal/plate-editor/plate-ui/checkbox.tsx +3 -0
  163. package/src/internal/plate-editor/plate-ui/code-block-node-static.tsx +172 -0
  164. package/src/internal/plate-editor/plate-ui/code-block-node.tsx +228 -0
  165. package/src/internal/plate-editor/plate-ui/code-node-static.tsx +11 -0
  166. package/src/internal/plate-editor/plate-ui/code-node.tsx +12 -0
  167. package/src/internal/plate-editor/plate-ui/column-node-static.tsx +65 -0
  168. package/src/internal/plate-editor/plate-ui/column-node.tsx +24 -0
  169. package/src/internal/plate-editor/plate-ui/command.tsx +204 -0
  170. package/src/internal/plate-editor/plate-ui/comment-node-static.tsx +12 -0
  171. package/src/internal/plate-editor/plate-ui/comment-node.tsx +45 -0
  172. package/src/internal/plate-editor/plate-ui/comment-toolbar-button.tsx +24 -0
  173. package/src/internal/plate-editor/plate-ui/comment.tsx +619 -0
  174. package/src/internal/plate-editor/plate-ui/cursor-overlay.tsx +85 -0
  175. package/src/internal/plate-editor/plate-ui/date-node-static.tsx +43 -0
  176. package/src/internal/plate-editor/plate-ui/date-node.tsx +56 -0
  177. package/src/internal/plate-editor/plate-ui/dialog.tsx +426 -0
  178. package/src/internal/plate-editor/plate-ui/dropdown-menu.tsx +266 -0
  179. package/src/internal/plate-editor/plate-ui/editor-static.tsx +40 -0
  180. package/src/internal/plate-editor/plate-ui/editor.tsx +148 -0
  181. package/src/internal/plate-editor/plate-ui/emoji-node.tsx +48 -0
  182. package/src/internal/plate-editor/plate-ui/emoji-toolbar-button.tsx +626 -0
  183. package/src/internal/plate-editor/plate-ui/equation-node-static.tsx +155 -0
  184. package/src/internal/plate-editor/plate-ui/equation-node.tsx +226 -0
  185. package/src/internal/plate-editor/plate-ui/equation-toolbar-button.tsx +26 -0
  186. package/src/internal/plate-editor/plate-ui/export-toolbar-button.tsx +208 -0
  187. package/src/internal/plate-editor/plate-ui/fixed-toolbar-buttons.tsx +157 -0
  188. package/src/internal/plate-editor/plate-ui/fixed-toolbar.tsx +27 -0
  189. package/src/internal/plate-editor/plate-ui/floating-discussion.tsx +1129 -0
  190. package/src/internal/plate-editor/plate-ui/floating-toolbar-buttons.tsx +129 -0
  191. package/src/internal/plate-editor/plate-ui/floating-toolbar.tsx +99 -0
  192. package/src/internal/plate-editor/plate-ui/font-color-toolbar-button.tsx +211 -0
  193. package/src/internal/plate-editor/plate-ui/font-size-toolbar-button.tsx +154 -0
  194. package/src/internal/plate-editor/plate-ui/ghost-text.tsx +20 -0
  195. package/src/internal/plate-editor/plate-ui/heading-node-static.tsx +52 -0
  196. package/src/internal/plate-editor/plate-ui/heading-node.tsx +56 -0
  197. package/src/internal/plate-editor/plate-ui/highlight-node-static.tsx +9 -0
  198. package/src/internal/plate-editor/plate-ui/highlight-node.tsx +11 -0
  199. package/src/internal/plate-editor/plate-ui/history-toolbar-button.tsx +52 -0
  200. package/src/internal/plate-editor/plate-ui/hover-card.tsx +7 -0
  201. package/src/internal/plate-editor/plate-ui/hr-node-static.tsx +18 -0
  202. package/src/internal/plate-editor/plate-ui/hr-node.tsx +28 -0
  203. package/src/internal/plate-editor/plate-ui/import-toolbar-button.tsx +124 -0
  204. package/src/internal/plate-editor/plate-ui/indent-toolbar-button.tsx +34 -0
  205. package/src/internal/plate-editor/plate-ui/inline-combobox.tsx +409 -0
  206. package/src/internal/plate-editor/plate-ui/input.tsx +39 -0
  207. package/src/internal/plate-editor/plate-ui/insert-toolbar-button.tsx +260 -0
  208. package/src/internal/plate-editor/plate-ui/label.tsx +1 -0
  209. package/src/internal/plate-editor/plate-ui/line-height-toolbar-button.tsx +71 -0
  210. package/src/internal/plate-editor/plate-ui/link-node-static.tsx +15 -0
  211. package/src/internal/plate-editor/plate-ui/link-node.tsx +33 -0
  212. package/src/internal/plate-editor/plate-ui/link-toolbar-button.tsx +30 -0
  213. package/src/internal/plate-editor/plate-ui/link-toolbar.tsx +149 -0
  214. package/src/internal/plate-editor/plate-ui/list-toolbar-button.tsx +179 -0
  215. package/src/internal/plate-editor/plate-ui/mark-toolbar-button.tsx +36 -0
  216. package/src/internal/plate-editor/plate-ui/media-audio-node-static.tsx +21 -0
  217. package/src/internal/plate-editor/plate-ui/media-audio-node.tsx +32 -0
  218. package/src/internal/plate-editor/plate-ui/media-embed-node.tsx +103 -0
  219. package/src/internal/plate-editor/plate-ui/media-file-node-static.tsx +30 -0
  220. package/src/internal/plate-editor/plate-ui/media-file-node.tsx +52 -0
  221. package/src/internal/plate-editor/plate-ui/media-image-node-static.tsx +37 -0
  222. package/src/internal/plate-editor/plate-ui/media-image-node.tsx +183 -0
  223. package/src/internal/plate-editor/plate-ui/media-placeholder-node.tsx +441 -0
  224. package/src/internal/plate-editor/plate-ui/media-preview-dialog.tsx +127 -0
  225. package/src/internal/plate-editor/plate-ui/media-toolbar-button.tsx +229 -0
  226. package/src/internal/plate-editor/plate-ui/media-toolbar.tsx +216 -0
  227. package/src/internal/plate-editor/plate-ui/media-upload-toast.tsx +73 -0
  228. package/src/internal/plate-editor/plate-ui/media-video-node-static.tsx +35 -0
  229. package/src/internal/plate-editor/plate-ui/media-video-node.tsx +119 -0
  230. package/src/internal/plate-editor/plate-ui/mention-node-static.tsx +46 -0
  231. package/src/internal/plate-editor/plate-ui/mention-node.tsx +79 -0
  232. package/src/internal/plate-editor/plate-ui/menu.tsx +532 -0
  233. package/src/internal/plate-editor/plate-ui/mode-toolbar-button.tsx +126 -0
  234. package/src/internal/plate-editor/plate-ui/more-toolbar-button.tsx +34 -0
  235. package/src/internal/plate-editor/plate-ui/paragraph-node-static.tsx +15 -0
  236. package/src/internal/plate-editor/plate-ui/paragraph-node.tsx +16 -0
  237. package/src/internal/plate-editor/plate-ui/popover.tsx +77 -0
  238. package/src/internal/plate-editor/plate-ui/progress.tsx +1 -0
  239. package/src/internal/plate-editor/plate-ui/remote-cursor-overlay.tsx +81 -0
  240. package/src/internal/plate-editor/plate-ui/resize-handle.tsx +88 -0
  241. package/src/internal/plate-editor/plate-ui/separator.tsx +43 -0
  242. package/src/internal/plate-editor/plate-ui/slash-node.tsx +435 -0
  243. package/src/internal/plate-editor/plate-ui/spinner.tsx +1 -0
  244. package/src/internal/plate-editor/plate-ui/suggestion-node-static.tsx +35 -0
  245. package/src/internal/plate-editor/plate-ui/suggestion-node.tsx +168 -0
  246. package/src/internal/plate-editor/plate-ui/suggestion-toolbar-button.tsx +24 -0
  247. package/src/internal/plate-editor/plate-ui/table-node-static.tsx +85 -0
  248. package/src/internal/plate-editor/plate-ui/table-node.tsx +285 -0
  249. package/src/internal/plate-editor/plate-ui/table-toolbar-button.tsx +254 -0
  250. package/src/internal/plate-editor/plate-ui/tabs.tsx +3 -0
  251. package/src/internal/plate-editor/plate-ui/textarea.tsx +58 -0
  252. package/src/internal/plate-editor/plate-ui/toc-node-static.tsx +142 -0
  253. package/src/internal/plate-editor/plate-ui/toc-node.tsx +57 -0
  254. package/src/internal/plate-editor/plate-ui/toc-sidebar.tsx +50 -0
  255. package/src/internal/plate-editor/plate-ui/toggle-node-static.tsx +18 -0
  256. package/src/internal/plate-editor/plate-ui/toggle-node.tsx +33 -0
  257. package/src/internal/plate-editor/plate-ui/toggle-toolbar-button.tsx +26 -0
  258. package/src/internal/plate-editor/plate-ui/toggle.tsx +3 -0
  259. package/src/internal/plate-editor/plate-ui/toolbar.tsx +380 -0
  260. package/src/internal/plate-editor/plate-ui/tooltip.tsx +149 -0
  261. package/src/internal/plate-editor/plate-ui/turn-into-toolbar-button.tsx +177 -0
  262. package/src/internal/plate-editor/types/index.ts +22 -0
  263. package/src/internal/plate-editor/vite.ts +284 -0
  264. package/src/internal/sheets/components/univer-sheets.tsx +1104 -0
  265. package/src/internal/sheets/i18n/context.tsx +183 -0
  266. package/src/internal/sheets/i18n/index.ts +19 -0
  267. package/src/internal/sheets/i18n/locales/de.json +21 -0
  268. package/src/internal/sheets/i18n/locales/el.json +21 -0
  269. package/src/internal/sheets/i18n/locales/en.json +21 -0
  270. package/src/internal/sheets/i18n/locales/es.json +21 -0
  271. package/src/internal/sheets/i18n/locales/fr.json +21 -0
  272. package/src/internal/sheets/i18n/locales/it.json +21 -0
  273. package/src/internal/sheets/i18n/locales/pt.json +21 -0
  274. package/src/internal/sheets/i18n/locales/sl.json +21 -0
  275. package/src/internal/sheets/i18n/locales/tr.json +21 -0
  276. package/src/internal/sheets/i18n/types.ts +23 -0
  277. package/src/internal/sheets/i18n/use-translation.ts +17 -0
  278. package/src/internal/sheets/index.ts +14 -0
  279. package/src/internal/sheets/types/css.d.ts +11 -0
  280. package/src/internal/sheets/types/index.ts +260 -0
  281. package/src/internal/sheets/xlsx.ts +1169 -0
  282. package/src/lib/api-client.ts +77 -0
  283. package/src/lib/assistant-api-actions.ts +549 -0
  284. package/src/lib/assistant-config.tsx +71 -0
  285. package/src/lib/class-utils.ts +40 -0
  286. package/src/lib/index.ts +7 -0
  287. package/src/lib/message-utils.ts +131 -0
  288. package/src/tools/tools-schema.json +512 -0
  289. package/src/types/index.ts +235 -0
  290. package/src/views/assistant-view.tsx +1137 -0
  291. package/src/views/canvas-app.tsx +839 -0
  292. package/src/views/canvas-code.tsx +93 -0
  293. package/src/views/canvas-deep-research.tsx +44 -0
  294. package/src/views/canvas-image.tsx +25 -0
  295. package/src/views/canvas-record-view.tsx +285 -0
  296. package/src/views/canvas-spreadsheet.tsx +125 -0
  297. package/src/views/canvas-text.tsx +52 -0
  298. package/src/views/canvas.tsx +274 -0
  299. package/src/views/chat-panel.tsx +149 -0
  300. package/src/views/index.ts +20 -0
  301. package/src/views/memories-panel.tsx +365 -0
  302. package/src/views/message-list.tsx +370 -0
  303. package/src/views/project-detail.tsx +257 -0
  304. package/src/views/projects-panel.tsx +131 -0
  305. package/src/views/sessions-list.tsx +98 -0
  306. package/src/views/sidebar-content.tsx +256 -0
  307. package/src/views/work-detail.tsx +98 -0
  308. package/src/vite.ts +284 -0
@@ -0,0 +1,71 @@
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+
5
+ import * as React from 'react';
6
+
7
+ import { LineHeightPlugin } from '@platejs/basic-styles/react';
8
+ import { CheckIcon, WrapText } from 'lucide-react';
9
+ import { useEditorRef, useSelectionFragmentProp } from 'platejs/react';
10
+
11
+ import {
12
+ DropdownMenu,
13
+ DropdownMenuContent,
14
+ DropdownMenuItemIndicator,
15
+ DropdownMenuRadioGroup,
16
+ DropdownMenuRadioItem,
17
+ DropdownMenuTrigger,
18
+ type DropdownMenuProps
19
+ } from './dropdown-menu';
20
+
21
+ import { ToolbarButton } from './toolbar';
22
+
23
+ export function LineHeightToolbarButton(props: DropdownMenuProps) {
24
+ const editor = useEditorRef();
25
+ const {
26
+ defaultNodeValue,
27
+ validNodeValues: values = []
28
+ } = editor.getInjectProps(LineHeightPlugin);
29
+
30
+ const value = useSelectionFragmentProp({
31
+ defaultValue: defaultNodeValue,
32
+ getProp: node => node.lineHeight
33
+ });
34
+
35
+ const [open, setOpen] = useState(false);
36
+
37
+ return (
38
+ <DropdownMenu open={open} onOpenChange={setOpen} modal={false} {...props}>
39
+ <DropdownMenuTrigger asChild>
40
+ <ToolbarButton pressed={open} tooltip="Line height" isDropdown>
41
+ <WrapText />
42
+ </ToolbarButton>
43
+ </DropdownMenuTrigger>
44
+
45
+ <DropdownMenuContent className="min-w-0" align="start" portal>
46
+ <DropdownMenuRadioGroup
47
+ value={value}
48
+ onValueChange={(newValue) => {
49
+ editor
50
+ .getTransforms(LineHeightPlugin)
51
+ .lineHeight.setNodes(Number(newValue));
52
+ editor.tf.focus();
53
+ }}>
54
+ {values.map(v => (
55
+ <DropdownMenuRadioItem
56
+ key={v}
57
+ className="min-w-[180px] pl-2 *:first:[span]:hidden"
58
+ value={v}>
59
+ <span className="pointer-events-none absolute right-2 flex size-3.5 items-center justify-center">
60
+ <DropdownMenuItemIndicator>
61
+ <CheckIcon />
62
+ </DropdownMenuItemIndicator>
63
+ </span>
64
+ {v}
65
+ </DropdownMenuRadioItem>
66
+ ))}
67
+ </DropdownMenuRadioGroup>
68
+ </DropdownMenuContent>
69
+ </DropdownMenu>
70
+ );
71
+ }
@@ -0,0 +1,15 @@
1
+
2
+ import { type TLinkElement } from 'platejs';
3
+
4
+ import { SlateElement, type SlateElementProps } from 'platejs/static';
5
+
6
+ export function LinkElementStatic(props: SlateElementProps<TLinkElement>) {
7
+ return (
8
+ <SlateElement
9
+ {...props}
10
+ as="a"
11
+ className="font-medium text-primary underline decoration-primary underline-offset-4">
12
+ {props.children}
13
+ </SlateElement>
14
+ );
15
+ }
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+
3
+ import { useLink } from '@platejs/link/react';
4
+ import { type TLinkElement } from 'platejs';
5
+ import {
6
+ PlateElement,
7
+ type PlateElementProps,
8
+ useElement
9
+ } from 'platejs/react';
10
+
11
+ import { cn } from '@docyrus/ui-pro-shared/lib/utils';
12
+
13
+ export const mockRecentDocuments: { id: string; title: string; icon?: string }[] = [];
14
+
15
+ export function LinkElement(props: PlateElementProps) {
16
+ const element = useElement<TLinkElement>();
17
+ const { props: linkProps } = useLink({ element });
18
+
19
+ return (
20
+ <PlateElement
21
+ as="a"
22
+ {...props}
23
+ attributes={{
24
+ ...props.attributes,
25
+ ...(linkProps as any)
26
+ }}
27
+ className={cn(
28
+ 'cursor-pointer border-b-1 font-medium text-primary/65'
29
+ )}>
30
+ {props.children}
31
+ </PlateElement>
32
+ );
33
+ }
@@ -0,0 +1,30 @@
1
+ 'use client';
2
+
3
+ import { type ComponentProps } from 'react';
4
+
5
+ import * as React from 'react';
6
+
7
+ import {
8
+ useLinkToolbarButton,
9
+ useLinkToolbarButtonState
10
+ } from '@platejs/link/react';
11
+ import { Link } from 'lucide-react';
12
+
13
+ import { ToolbarButton } from './toolbar';
14
+
15
+ export function LinkToolbarButton(
16
+ props: ComponentProps<typeof ToolbarButton>
17
+ ) {
18
+ const state = useLinkToolbarButtonState();
19
+ const { props: buttonProps } = useLinkToolbarButton(state);
20
+
21
+ return (
22
+ <ToolbarButton
23
+ {...props}
24
+ {...buttonProps}
25
+ data-plate-focus
26
+ tooltip="Link">
27
+ <Link />
28
+ </ToolbarButton>
29
+ );
30
+ }
@@ -0,0 +1,149 @@
1
+ 'use client';
2
+
3
+ import { useMemo } from 'react';
4
+
5
+ import * as React from 'react';
6
+
7
+ import {
8
+ type UseVirtualFloatingOptions,
9
+ flip,
10
+ offset
11
+ } from '@platejs/floating';
12
+ import {
13
+ FloatingLinkUrlInput,
14
+ LinkOpenButton,
15
+ useFloatingLinkEdit,
16
+ useFloatingLinkEditState,
17
+ useFloatingLinkInsert,
18
+ useFloatingLinkInsertState
19
+ } from '@platejs/link/react';
20
+ import { cva } from 'class-variance-authority';
21
+ import {
22
+ ExternalLink,
23
+ Link,
24
+ Text,
25
+ Unlink
26
+ } from 'lucide-react';
27
+
28
+ import { cn } from '@docyrus/ui-pro-shared/lib/utils';
29
+
30
+ import { buttonVariants } from './button';
31
+ import { Separator } from './separator';
32
+
33
+ const popoverVariants = cva(
34
+ 'z-50 w-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md outline-hidden'
35
+ );
36
+
37
+ const inputVariants = cva(
38
+ 'flex h-[28px] w-full rounded-md border-none bg-transparent px-1.5 py-1 text-base placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-transparent md:text-sm'
39
+ );
40
+
41
+ export function LinkFloatingToolbar() {
42
+ const floatingOptions: UseVirtualFloatingOptions = useMemo(
43
+ () => ({
44
+ middleware: [
45
+ offset(8),
46
+ flip({
47
+ fallbackPlacements: ['bottom-end', 'top-start', 'top-end'],
48
+ padding: 12
49
+ })
50
+ ],
51
+ placement: 'bottom-start'
52
+ }),
53
+ []
54
+ );
55
+
56
+ const insertState = useFloatingLinkInsertState({ floatingOptions });
57
+ const {
58
+ hidden,
59
+ props: insertProps,
60
+ ref: insertRef,
61
+ textInputProps
62
+ } = useFloatingLinkInsert(insertState);
63
+
64
+ const editState = useFloatingLinkEditState({ floatingOptions });
65
+ const {
66
+ editButtonProps,
67
+ props: editProps,
68
+ ref: editRef,
69
+ unlinkButtonProps
70
+ } = useFloatingLinkEdit(editState);
71
+
72
+ if (hidden) return null;
73
+
74
+ const input = (
75
+ <div className="flex w-[330px] flex-col">
76
+ <div className="flex items-center">
77
+ <div className="flex items-center pr-1 pl-2 text-muted-foreground">
78
+ <Link className="size-4" />
79
+ </div>
80
+
81
+ <FloatingLinkUrlInput
82
+ className={inputVariants()}
83
+ data-plate-focus
84
+ placeholder="Paste link" />
85
+ </div>
86
+
87
+ <Separator className="my-1" />
88
+
89
+ <div className="flex items-center">
90
+ <div className="flex items-center pr-1 pl-2 text-muted-foreground">
91
+ <Text className="size-4" />
92
+ </div>
93
+
94
+ <input
95
+ className={inputVariants()}
96
+ data-plate-focus
97
+ placeholder="Text to display"
98
+ {...textInputProps} />
99
+ </div>
100
+ </div>
101
+ );
102
+
103
+ const editContent = editState.isEditing ? (
104
+ input
105
+ ) : (
106
+ <div className="box-content flex items-center">
107
+ <button
108
+ className={cn(buttonVariants({ size: 'default', variant: 'ghost' }))}
109
+ type="button"
110
+ {...editButtonProps}>
111
+ Edit link
112
+ </button>
113
+
114
+ <Separator orientation="vertical" />
115
+
116
+ <LinkOpenButton
117
+ className={cn(buttonVariants({ size: 'default', variant: 'ghost' }))}>
118
+ <ExternalLink className="size-4" />
119
+ </LinkOpenButton>
120
+
121
+ <Separator orientation="vertical" />
122
+
123
+ <button
124
+ className={cn(buttonVariants({ size: 'default', variant: 'ghost' }))}
125
+ type="button"
126
+ {...unlinkButtonProps}>
127
+ <Unlink className="size-4" />
128
+ </button>
129
+ </div>
130
+ );
131
+
132
+ return (
133
+ <>
134
+ <div
135
+ ref={insertRef}
136
+ className={popoverVariants()}
137
+ {...insertProps}>
138
+ {input}
139
+ </div>
140
+
141
+ <div
142
+ ref={editRef}
143
+ className={popoverVariants()}
144
+ {...editProps}>
145
+ {editContent}
146
+ </div>
147
+ </>
148
+ );
149
+ }
@@ -0,0 +1,179 @@
1
+ 'use client';
2
+
3
+ import { useState, type ComponentProps } from 'react';
4
+
5
+ import * as React from 'react';
6
+
7
+ import { ListStyleType, someList, toggleList } from '@platejs/list';
8
+ import {
9
+ useIndentTodoToolBarButton,
10
+ useIndentTodoToolBarButtonState
11
+ } from '@platejs/list/react';
12
+ import { List, ListOrdered, ListTodoIcon } from 'lucide-react';
13
+ import { useEditorRef, useEditorSelector } from 'platejs/react';
14
+
15
+ import {
16
+ DropdownMenu,
17
+ DropdownMenuContent,
18
+ DropdownMenuGroup,
19
+ DropdownMenuItem,
20
+ DropdownMenuPortal,
21
+ DropdownMenuTrigger
22
+ } from './dropdown-menu';
23
+
24
+ import {
25
+ ToolbarButton,
26
+ ToolbarSplitButton,
27
+ ToolbarSplitButtonPrimary,
28
+ ToolbarSplitButtonSecondary
29
+ } from './toolbar';
30
+
31
+ export function BulletedListToolbarButton() {
32
+ const editor = useEditorRef();
33
+ const [open, setOpen] = useState(false);
34
+
35
+ const pressed = useEditorSelector(
36
+ editor => editor ? someList(editor, [ListStyleType.Disc, ListStyleType.Circle, ListStyleType.Square]) : false,
37
+ []
38
+ );
39
+
40
+ return (
41
+ <ToolbarSplitButton pressed={open}>
42
+ <ToolbarSplitButtonPrimary
43
+ className="data-[state=on]:bg-accent data-[state=on]:text-accent-foreground"
44
+ onClick={() => {
45
+ toggleList(editor, {
46
+ listStyleType: ListStyleType.Disc
47
+ });
48
+ }}
49
+ data-state={pressed ? 'on' : 'off'}>
50
+ <List className="size-4" />
51
+ </ToolbarSplitButtonPrimary>
52
+
53
+ <DropdownMenu open={open} onOpenChange={setOpen} modal={false}>
54
+ <DropdownMenuTrigger asChild>
55
+ <ToolbarSplitButtonSecondary />
56
+ </DropdownMenuTrigger>
57
+
58
+ <DropdownMenuPortal>
59
+ <DropdownMenuContent align="start" alignOffset={-32}>
60
+ <DropdownMenuGroup>
61
+ <DropdownMenuItem
62
+ onClick={() => toggleList(editor, {
63
+ listStyleType: ListStyleType.Disc
64
+ })}>
65
+ <div className="flex items-center gap-2">
66
+ <div className="size-2 rounded-full border border-current bg-current" />
67
+ Default
68
+ </div>
69
+ </DropdownMenuItem>
70
+ <DropdownMenuItem
71
+ onClick={() => toggleList(editor, {
72
+ listStyleType: ListStyleType.Circle
73
+ })}>
74
+ <div className="flex items-center gap-2">
75
+ <div className="size-2 rounded-full border border-current" />
76
+ Circle
77
+ </div>
78
+ </DropdownMenuItem>
79
+ <DropdownMenuItem
80
+ onClick={() => toggleList(editor, {
81
+ listStyleType: ListStyleType.Square
82
+ })}>
83
+ <div className="flex items-center gap-2">
84
+ <div className="size-2 border border-current bg-current" />
85
+ Square
86
+ </div>
87
+ </DropdownMenuItem>
88
+ </DropdownMenuGroup>
89
+ </DropdownMenuContent>
90
+ </DropdownMenuPortal>
91
+ </DropdownMenu>
92
+ </ToolbarSplitButton>
93
+ );
94
+ }
95
+
96
+ export function NumberedListToolbarButton() {
97
+ const editor = useEditorRef();
98
+ const [open, setOpen] = useState(false);
99
+
100
+ const pressed = useEditorSelector(
101
+ editor => editor ? someList(editor, [
102
+ ListStyleType.Decimal,
103
+ ListStyleType.LowerAlpha,
104
+ ListStyleType.UpperAlpha,
105
+ ListStyleType.LowerRoman,
106
+ ListStyleType.UpperRoman
107
+ ]) : false,
108
+ []
109
+ );
110
+
111
+ return (
112
+ <ToolbarSplitButton pressed={open}>
113
+ <ToolbarSplitButtonPrimary
114
+ className="data-[state=on]:bg-accent data-[state=on]:text-accent-foreground"
115
+ onClick={() => toggleList(editor, {
116
+ listStyleType: ListStyleType.Decimal
117
+ })}
118
+ data-state={pressed ? 'on' : 'off'}>
119
+ <ListOrdered className="size-4" />
120
+ </ToolbarSplitButtonPrimary>
121
+
122
+ <DropdownMenu open={open} onOpenChange={setOpen} modal={false}>
123
+ <DropdownMenuTrigger asChild>
124
+ <ToolbarSplitButtonSecondary />
125
+ </DropdownMenuTrigger>
126
+
127
+ <DropdownMenuPortal>
128
+ <DropdownMenuContent align="start" alignOffset={-32}>
129
+ <DropdownMenuGroup>
130
+ <DropdownMenuItem
131
+ onSelect={() => toggleList(editor, {
132
+ listStyleType: ListStyleType.Decimal
133
+ })}>
134
+ Decimal (1, 2, 3)
135
+ </DropdownMenuItem>
136
+ <DropdownMenuItem
137
+ onSelect={() => toggleList(editor, {
138
+ listStyleType: ListStyleType.LowerAlpha
139
+ })}>
140
+ Lower Alpha (a, b, c)
141
+ </DropdownMenuItem>
142
+ <DropdownMenuItem
143
+ onSelect={() => toggleList(editor, {
144
+ listStyleType: ListStyleType.UpperAlpha
145
+ })}>
146
+ Upper Alpha (A, B, C)
147
+ </DropdownMenuItem>
148
+ <DropdownMenuItem
149
+ onSelect={() => toggleList(editor, {
150
+ listStyleType: ListStyleType.LowerRoman
151
+ })}>
152
+ Lower Roman (i, ii, iii)
153
+ </DropdownMenuItem>
154
+ <DropdownMenuItem
155
+ onSelect={() => toggleList(editor, {
156
+ listStyleType: ListStyleType.UpperRoman
157
+ })}>
158
+ Upper Roman (I, II, III)
159
+ </DropdownMenuItem>
160
+ </DropdownMenuGroup>
161
+ </DropdownMenuContent>
162
+ </DropdownMenuPortal>
163
+ </DropdownMenu>
164
+ </ToolbarSplitButton>
165
+ );
166
+ }
167
+
168
+ export function TodoListToolbarButton(
169
+ props: ComponentProps<typeof ToolbarButton>
170
+ ) {
171
+ const state = useIndentTodoToolBarButtonState({ nodeType: 'todo' });
172
+ const { props: buttonProps } = useIndentTodoToolBarButton(state);
173
+
174
+ return (
175
+ <ToolbarButton {...props} {...buttonProps} tooltip="Todo">
176
+ <ListTodoIcon />
177
+ </ToolbarButton>
178
+ );
179
+ }
@@ -0,0 +1,36 @@
1
+ 'use client';
2
+
3
+ import { type ComponentProps } from 'react';
4
+
5
+ import * as React from 'react';
6
+
7
+ import {
8
+ useEditorRef,
9
+ useMarkToolbarButton,
10
+ useMarkToolbarButtonState
11
+ } from 'platejs/react';
12
+
13
+ import { ToolbarButton } from './toolbar';
14
+
15
+ export function MarkToolbarButton({
16
+ clear,
17
+ nodeType,
18
+ ...props
19
+ }: ComponentProps<typeof ToolbarButton> & {
20
+ nodeType: string;
21
+ clear?: string[] | string;
22
+ }) {
23
+ const editor = useEditorRef();
24
+ const state = useMarkToolbarButtonState({ clear, nodeType });
25
+ const { props: buttonProps } = useMarkToolbarButton(state);
26
+
27
+ return (
28
+ <ToolbarButton
29
+ {...buttonProps}
30
+ {...props}
31
+ onClick={() => {
32
+ buttonProps.onClick?.();
33
+ editor.tf.focus();
34
+ }} />
35
+ );
36
+ }
@@ -0,0 +1,21 @@
1
+
2
+ import { type TAudioElement } from 'platejs';
3
+
4
+ import { SlateElement, type SlateElementProps } from 'platejs/static';
5
+
6
+ export function MediaAudioElementStatic(
7
+ props: SlateElementProps<TAudioElement>
8
+ ) {
9
+ const { url } = props.element;
10
+
11
+ return (
12
+ <SlateElement className="mb-1" {...props}>
13
+ <figure className="group relative cursor-default">
14
+ <div className="h-16">
15
+ <audio className="size-full" controls src={url} />
16
+ </div>
17
+ </figure>
18
+ {props.children}
19
+ </SlateElement>
20
+ );
21
+ }
@@ -0,0 +1,32 @@
1
+ 'use client';
2
+
3
+ import { useMediaState } from '@platejs/media/react';
4
+ import { ResizableProvider } from '@platejs/resizable';
5
+ import { PlateElement, type PlateElementProps, withHOC } from 'platejs/react';
6
+
7
+ import { Caption, CaptionTextarea } from './caption';
8
+
9
+ export const MediaAudioElement = withHOC(
10
+ ResizableProvider,
11
+ (props: PlateElementProps) => {
12
+ const { align = 'center', readOnly, unsafeUrl } = useMediaState();
13
+
14
+ return (
15
+ <PlateElement className="mb-1" {...props}>
16
+ <figure className="group relative" contentEditable={false}>
17
+ <div className="h-16">
18
+ <audio className="size-full" controls src={unsafeUrl} />
19
+ </div>
20
+
21
+ <Caption align={align} style={{ width: '100%' }}>
22
+ <CaptionTextarea
23
+ className="h-20"
24
+ placeholder="Write a caption..."
25
+ readOnly={readOnly} />
26
+ </Caption>
27
+ </figure>
28
+ {props.children}
29
+ </PlateElement>
30
+ );
31
+ }
32
+ );
@@ -0,0 +1,103 @@
1
+ 'use client';
2
+
3
+ import { parseVideoUrl } from '@platejs/media';
4
+ import { useMediaState } from '@platejs/media/react';
5
+ import { ResizableProvider, useResizableValue } from '@platejs/resizable';
6
+ import { PlateElement, type PlateElementProps, withHOC } from 'platejs/react';
7
+
8
+ import { cn } from '@docyrus/ui-pro-shared/lib/utils';
9
+
10
+ import { Caption, CaptionTextarea } from './caption';
11
+ import { MediaToolbar } from './media-toolbar';
12
+ import {
13
+ mediaResizeHandleVariants,
14
+ Resizable,
15
+ ResizeHandle
16
+ } from './resize-handle';
17
+
18
+ export const MediaEmbedElement = withHOC(
19
+ ResizableProvider,
20
+ (props: PlateElementProps) => {
21
+ const {
22
+ align = 'center',
23
+ embed,
24
+ focused,
25
+ isVideo,
26
+ isYoutube,
27
+ selected,
28
+ unsafeUrl
29
+ } = useMediaState({
30
+ urlParsers: [parseVideoUrl]
31
+ });
32
+ const width = useResizableValue('width');
33
+ const provider = embed?.provider;
34
+
35
+ return (
36
+ <PlateElement className="py-2.5" {...props}>
37
+ <figure className="relative m-0 w-full" contentEditable={false}>
38
+ <Resizable
39
+ align={align}
40
+ options={{
41
+ align,
42
+ maxWidth: '100%',
43
+ minWidth: 100
44
+ }}>
45
+ <div className="group/media">
46
+ <ResizeHandle
47
+ className={mediaResizeHandleVariants({ direction: 'left' })}
48
+ options={{ direction: 'left' }} />
49
+
50
+ <ResizeHandle
51
+ className={mediaResizeHandleVariants({ direction: 'right' })}
52
+ options={{ direction: 'right' }} />
53
+
54
+ {isVideo && !isYoutube && (
55
+ <div
56
+ className={cn(
57
+ provider === 'vimeo' && 'pb-[75%]',
58
+ provider === 'youku' && 'pb-[56.25%]',
59
+ provider === 'dailymotion' && 'pb-[56.0417%]',
60
+ provider === 'coub' && 'pb-[51.25%]'
61
+ )}>
62
+ <iframe
63
+ allowFullScreen
64
+ className={cn(
65
+ 'absolute top-0 left-0 aspect-video size-full rounded-sm',
66
+ isVideo && 'border-0',
67
+ focused && selected && 'ring-2 ring-ring ring-offset-2'
68
+ )}
69
+ src={embed!.url}
70
+ title="embed" />
71
+ </div>
72
+ )}
73
+
74
+ {!isVideo && unsafeUrl && (
75
+ <div
76
+ className={cn(
77
+ 'relative pb-[56.25%]'
78
+ )}>
79
+ <iframe
80
+ allowFullScreen
81
+ className={cn(
82
+ 'absolute top-0 left-0 size-full rounded-sm border-0',
83
+ focused && selected && 'ring-2 ring-ring ring-offset-2'
84
+ )}
85
+ src={unsafeUrl}
86
+ title="embed" />
87
+ </div>
88
+ )}
89
+
90
+ <MediaToolbar />
91
+ </div>
92
+ </Resizable>
93
+
94
+ <Caption align={align} style={{ width }}>
95
+ <CaptionTextarea placeholder="Write a caption..." />
96
+ </Caption>
97
+ </figure>
98
+
99
+ {props.children}
100
+ </PlateElement>
101
+ );
102
+ }
103
+ );