@fuma-content/studio 0.1.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 (413) hide show
  1. package/dist/bin.d.mts +1 -0
  2. package/dist/bin.mjs +90 -0
  3. package/dist/index.d.mts +13 -0
  4. package/dist/index.mjs +66 -0
  5. package/dist/mdx/actions.mjs +34 -0
  6. package/dist/mdx/client.mjs +167 -0
  7. package/dist/package.mjs +6 -0
  8. package/dist/src/components/code-editor/mdx.lazy.mjs +19 -0
  9. package/dist/src/components/code-editor/mdx.mjs +44 -0
  10. package/dist/src/components/code-editor/yaml.lazy.mjs +22 -0
  11. package/dist/src/components/code-editor/yaml.mjs +63 -0
  12. package/dist/src/components/editor/editor-base-kit.mjs +41 -0
  13. package/dist/src/components/editor/editor-kit.mjs +73 -0
  14. package/dist/src/components/editor/md.mjs +42 -0
  15. package/dist/src/components/editor/plugins/ai-kit.mjs +68 -0
  16. package/dist/src/components/editor/plugins/align-base-kit.mjs +28 -0
  17. package/dist/src/components/editor/plugins/align-kit.mjs +30 -0
  18. package/dist/src/components/editor/plugins/autoformat-kit.mjs +214 -0
  19. package/dist/src/components/editor/plugins/basic-blocks-base-kit.mjs +22 -0
  20. package/dist/src/components/editor/plugins/basic-blocks-kit.mjs +51 -0
  21. package/dist/src/components/editor/plugins/basic-marks-base-kit.mjs +20 -0
  22. package/dist/src/components/editor/plugins/basic-marks-kit.mjs +28 -0
  23. package/dist/src/components/editor/plugins/block-menu-kit.mjs +11 -0
  24. package/dist/src/components/editor/plugins/block-placeholder-kit.mjs +14 -0
  25. package/dist/src/components/editor/plugins/block-selection-kit.mjs +48 -0
  26. package/dist/src/components/editor/plugins/callout-base-kit.mjs +8 -0
  27. package/dist/src/components/editor/plugins/callout-kit.mjs +10 -0
  28. package/dist/src/components/editor/plugins/code-block-base-kit.mjs +16 -0
  29. package/dist/src/components/editor/plugins/code-block-kit.mjs +19 -0
  30. package/dist/src/components/editor/plugins/column-base-kit.mjs +8 -0
  31. package/dist/src/components/editor/plugins/column-kit.mjs +10 -0
  32. package/dist/src/components/editor/plugins/comment-base-kit.mjs +8 -0
  33. package/dist/src/components/editor/plugins/comment-kit.mjs +53 -0
  34. package/dist/src/components/editor/plugins/copilot-kit.mjs +49 -0
  35. package/dist/src/components/editor/plugins/cursor-overlay-kit.mjs +11 -0
  36. package/dist/src/components/editor/plugins/date-base-kit.mjs +8 -0
  37. package/dist/src/components/editor/plugins/date-kit.mjs +10 -0
  38. package/dist/src/components/editor/plugins/discussion-kit.mjs +94 -0
  39. package/dist/src/components/editor/plugins/dnd-kit.mjs +31 -0
  40. package/dist/src/components/editor/plugins/emoji-kit.mjs +11 -0
  41. package/dist/src/components/editor/plugins/exit-break-kit.mjs +12 -0
  42. package/dist/src/components/editor/plugins/fixed-toolbar-kit.mjs +15 -0
  43. package/dist/src/components/editor/plugins/floating-toolbar-kit.mjs +15 -0
  44. package/dist/src/components/editor/plugins/font-base-kit.mjs +14 -0
  45. package/dist/src/components/editor/plugins/font-kit.mjs +19 -0
  46. package/dist/src/components/editor/plugins/indent-base-kit.mjs +17 -0
  47. package/dist/src/components/editor/plugins/indent-kit.mjs +20 -0
  48. package/dist/src/components/editor/plugins/line-height-base-kit.mjs +20 -0
  49. package/dist/src/components/editor/plugins/line-height-kit.mjs +22 -0
  50. package/dist/src/components/editor/plugins/link-base-kit.mjs +8 -0
  51. package/dist/src/components/editor/plugins/link-kit.mjs +15 -0
  52. package/dist/src/components/editor/plugins/list-base-kit.mjs +19 -0
  53. package/dist/src/components/editor/plugins/list-kit.mjs +22 -0
  54. package/dist/src/components/editor/plugins/markdown-kit.mjs +17 -0
  55. package/dist/src/components/editor/plugins/math-base-kit.mjs +8 -0
  56. package/dist/src/components/editor/plugins/math-kit.mjs +10 -0
  57. package/dist/src/components/editor/plugins/media-base-kit.mjs +23 -0
  58. package/dist/src/components/editor/plugins/media-kit.mjs +37 -0
  59. package/dist/src/components/editor/plugins/slash-kit.mjs +11 -0
  60. package/dist/src/components/editor/plugins/suggestion-base-kit.mjs +8 -0
  61. package/dist/src/components/editor/plugins/suggestion-kit.mjs +50 -0
  62. package/dist/src/components/editor/plugins/table-base-kit.mjs +13 -0
  63. package/dist/src/components/editor/plugins/table-kit.mjs +15 -0
  64. package/dist/src/components/editor/transforms.mjs +125 -0
  65. package/dist/src/components/editor/ui/ai-chat-editor.mjs +21 -0
  66. package/dist/src/components/editor/ui/ai-menu.mjs +488 -0
  67. package/dist/src/components/editor/ui/ai-node.mjs +24 -0
  68. package/dist/src/components/editor/ui/ai-toolbar-button.mjs +23 -0
  69. package/dist/src/components/editor/ui/align-toolbar-button.mjs +71 -0
  70. package/dist/src/components/editor/ui/block-context-menu.mjs +130 -0
  71. package/dist/src/components/editor/ui/block-discussion.mjs +200 -0
  72. package/dist/src/components/editor/ui/block-draggable.mjs +265 -0
  73. package/dist/src/components/editor/ui/block-list-static.mjs +48 -0
  74. package/dist/src/components/editor/ui/block-list.mjs +47 -0
  75. package/dist/src/components/editor/ui/block-selection.mjs +28 -0
  76. package/dist/src/components/editor/ui/block-suggestion.mjs +319 -0
  77. package/dist/src/components/editor/ui/blockquote-node-static.mjs +14 -0
  78. package/dist/src/components/editor/ui/blockquote-node.mjs +16 -0
  79. package/dist/src/components/editor/ui/callout-node-static.mjs +29 -0
  80. package/dist/src/components/editor/ui/callout-node.mjs +50 -0
  81. package/dist/src/components/editor/ui/caption.mjs +39 -0
  82. package/dist/src/components/editor/ui/code-block-node-static.mjs +30 -0
  83. package/dist/src/components/editor/ui/code-block-node.mjs +121 -0
  84. package/dist/src/components/editor/ui/code-node-static.mjs +15 -0
  85. package/dist/src/components/editor/ui/code-node.mjs +17 -0
  86. package/dist/src/components/editor/ui/column-node-static.mjs +32 -0
  87. package/dist/src/components/editor/ui/column-node.mjs +229 -0
  88. package/dist/src/components/editor/ui/comment-node-static.mjs +14 -0
  89. package/dist/src/components/editor/ui/comment-node.mjs +33 -0
  90. package/dist/src/components/editor/ui/comment-toolbar-button.mjs +23 -0
  91. package/dist/src/components/editor/ui/comment.mjs +422 -0
  92. package/dist/src/components/editor/ui/cursor-overlay.mjs +36 -0
  93. package/dist/src/components/editor/ui/date-node-static.mjs +32 -0
  94. package/dist/src/components/editor/ui/date-node.mjs +60 -0
  95. package/dist/src/components/editor/ui/editor-static.mjs +31 -0
  96. package/dist/src/components/editor/ui/editor.mjs +60 -0
  97. package/dist/src/components/editor/ui/emoji-node.mjs +46 -0
  98. package/dist/src/components/editor/ui/emoji-toolbar-button.mjs +415 -0
  99. package/dist/src/components/editor/ui/equation-node-static.mjs +65 -0
  100. package/dist/src/components/editor/ui/equation-node.mjs +159 -0
  101. package/dist/src/components/editor/ui/equation-toolbar-button.mjs +23 -0
  102. package/dist/src/components/editor/ui/fixed-toolbar-buttons.mjs +109 -0
  103. package/dist/src/components/editor/ui/fixed-toolbar.mjs +16 -0
  104. package/dist/src/components/editor/ui/floating-toolbar-buttons.mjs +54 -0
  105. package/dist/src/components/editor/ui/floating-toolbar.mjs +51 -0
  106. package/dist/src/components/editor/ui/font-color-toolbar-button.mjs +637 -0
  107. package/dist/src/components/editor/ui/font-size-toolbar-button.mjs +83 -0
  108. package/dist/src/components/editor/ui/ghost-text.mjs +22 -0
  109. package/dist/src/components/editor/ui/heading-node-static.mjs +60 -0
  110. package/dist/src/components/editor/ui/heading-node.mjs +62 -0
  111. package/dist/src/components/editor/ui/highlight-node-static.mjs +15 -0
  112. package/dist/src/components/editor/ui/highlight-node.mjs +17 -0
  113. package/dist/src/components/editor/ui/history-toolbar-button.mjs +35 -0
  114. package/dist/src/components/editor/ui/hr-node-static.mjs +18 -0
  115. package/dist/src/components/editor/ui/hr-node.mjs +23 -0
  116. package/dist/src/components/editor/ui/indent-toolbar-button.mjs +29 -0
  117. package/dist/src/components/editor/ui/inline-combobox.mjs +148 -0
  118. package/dist/src/components/editor/ui/insert-toolbar-button.mjs +199 -0
  119. package/dist/src/components/editor/ui/kbd-node-static.mjs +15 -0
  120. package/dist/src/components/editor/ui/kbd-node.mjs +17 -0
  121. package/dist/src/components/editor/ui/line-height-toolbar-button.mjs +56 -0
  122. package/dist/src/components/editor/ui/link-node-static.mjs +20 -0
  123. package/dist/src/components/editor/ui/link-node.mjs +28 -0
  124. package/dist/src/components/editor/ui/link-toolbar-button.mjs +21 -0
  125. package/dist/src/components/editor/ui/link-toolbar.mjs +141 -0
  126. package/dist/src/components/editor/ui/list-toolbar-button.mjs +131 -0
  127. package/dist/src/components/editor/ui/mark-toolbar-button.mjs +20 -0
  128. package/dist/src/components/editor/ui/media-image-node-static.mjs +32 -0
  129. package/dist/src/components/editor/ui/media-image-node.mjs +64 -0
  130. package/dist/src/components/editor/ui/media-placeholder-node.mjs +184 -0
  131. package/dist/src/components/editor/ui/media-preview-dialog.mjs +113 -0
  132. package/dist/src/components/editor/ui/media-toolbar-button.mjs +156 -0
  133. package/dist/src/components/editor/ui/media-toolbar.mjs +80 -0
  134. package/dist/src/components/editor/ui/media-upload-toast.mjs +39 -0
  135. package/dist/src/components/editor/ui/media-video-node-static.mjs +27 -0
  136. package/dist/src/components/editor/ui/mode-toolbar-button.mjs +112 -0
  137. package/dist/src/components/editor/ui/paragraph-node-static.mjs +15 -0
  138. package/dist/src/components/editor/ui/paragraph-node.mjs +17 -0
  139. package/dist/src/components/editor/ui/resize-handle.mjs +43 -0
  140. package/dist/src/components/editor/ui/slash-node.mjs +228 -0
  141. package/dist/src/components/editor/ui/suggestion-node-static.mjs +24 -0
  142. package/dist/src/components/editor/ui/suggestion-node.mjs +111 -0
  143. package/dist/src/components/editor/ui/suggestion-toolbar-button.mjs +24 -0
  144. package/dist/src/components/editor/ui/table-icons.mjs +1310 -0
  145. package/dist/src/components/editor/ui/table-node-static.mjs +68 -0
  146. package/dist/src/components/editor/ui/table-node.mjs +375 -0
  147. package/dist/src/components/editor/ui/table-toolbar-button.mjs +190 -0
  148. package/dist/src/components/editor/ui/turn-into-toolbar-button.mjs +168 -0
  149. package/dist/src/components/editor/use-chat.mjs +80 -0
  150. package/dist/src/components/json-schema-editor/client.mjs +46 -0
  151. package/dist/src/components/json-schema-editor/components/inputs.mjs +438 -0
  152. package/dist/src/components/json-schema-editor/get-default-values.mjs +23 -0
  153. package/dist/src/components/json-schema-editor/schema.mjs +131 -0
  154. package/dist/src/components/json-schema-editor/utils/merge-schema.mjs +134 -0
  155. package/dist/src/components/json-schema-editor/utils/schema-to-string.mjs +53 -0
  156. package/dist/src/components/ui/alert-dialog.mjs +90 -0
  157. package/dist/src/components/ui/avatar.mjs +32 -0
  158. package/dist/src/components/ui/button.mjs +48 -0
  159. package/dist/src/components/ui/calendar.mjs +108 -0
  160. package/dist/src/components/ui/checkbox.mjs +23 -0
  161. package/dist/src/components/ui/combobox.mjs +53 -0
  162. package/dist/src/components/ui/command.mjs +42 -0
  163. package/dist/src/components/ui/context-menu.mjs +67 -0
  164. package/dist/src/components/ui/dialog.mjs +9 -0
  165. package/dist/src/components/ui/dropdown-menu.mjs +122 -0
  166. package/dist/src/components/ui/input-group.mjs +31 -0
  167. package/dist/src/components/ui/input.mjs +15 -0
  168. package/dist/src/components/ui/label.mjs +19 -0
  169. package/dist/src/components/ui/popover.mjs +37 -0
  170. package/dist/src/components/ui/select.mjs +80 -0
  171. package/dist/src/components/ui/separator.mjs +19 -0
  172. package/dist/src/components/ui/spinner.mjs +16 -0
  173. package/dist/src/components/ui/tabs.mjs +39 -0
  174. package/dist/src/components/ui/textarea.mjs +14 -0
  175. package/dist/src/components/ui/toolbar.mjs +183 -0
  176. package/dist/src/components/ui/tooltip.mjs +38 -0
  177. package/dist/src/hooks/editor/use-is-creator.mjs +19 -0
  178. package/dist/src/hooks/use-upload-file.mjs +73 -0
  179. package/dist/src/lib/config.mjs +38 -0
  180. package/dist/src/lib/data/store.d.mts +15 -0
  181. package/dist/src/lib/lowlight.mjs +7 -0
  182. package/dist/src/lib/utils/deep-equal.mjs +18 -0
  183. package/dist/src/lib/utils/remove-undefined.mjs +18 -0
  184. package/dist/src/lib/utils.mjs +10 -0
  185. package/dist/types.d.mts +50 -0
  186. package/next.config.ts +23 -0
  187. package/package.json +131 -0
  188. package/postcss.config.mjs +7 -0
  189. package/src/app/(dashboard)/collection/[name]/[...slug]/page.client.tsx +26 -0
  190. package/src/app/(dashboard)/collection/[name]/[...slug]/page.tsx +17 -0
  191. package/src/app/(dashboard)/collection/[name]/page.client.tsx +82 -0
  192. package/src/app/(dashboard)/collection/[name]/page.tsx +11 -0
  193. package/src/app/(dashboard)/layout.tsx +34 -0
  194. package/src/app/(dashboard)/page.tsx +38 -0
  195. package/src/app/api/ai/command/prompts.ts +313 -0
  196. package/src/app/api/ai/command/route.ts +203 -0
  197. package/src/app/api/ai/command/utils.ts +242 -0
  198. package/src/app/api/ai/copilot/route.ts +33 -0
  199. package/src/app/api/uploadthing/route.ts +5 -0
  200. package/src/app/codeblock/LICENSE +21 -0
  201. package/src/app/codeblock/styles.css +289 -0
  202. package/src/app/favicon.ico +0 -0
  203. package/src/app/globals.css +223 -0
  204. package/src/app/layout.client.tsx +15 -0
  205. package/src/app/layout.tsx +30 -0
  206. package/src/components/app-sidebar.tsx +162 -0
  207. package/src/components/code-editor/mdx.lazy.tsx +18 -0
  208. package/src/components/code-editor/mdx.tsx +48 -0
  209. package/src/components/code-editor/yaml.lazy.tsx +20 -0
  210. package/src/components/code-editor/yaml.tsx +71 -0
  211. package/src/components/collection/actions.tsx +41 -0
  212. package/src/components/collection/client.tsx +63 -0
  213. package/src/components/collection/context.tsx +24 -0
  214. package/src/components/collection/document/actions.tsx +83 -0
  215. package/src/components/editor/editor-base-kit.tsx +37 -0
  216. package/src/components/editor/editor-kit.tsx +87 -0
  217. package/src/components/editor/md.tsx +60 -0
  218. package/src/components/editor/plugins/ai-kit.tsx +102 -0
  219. package/src/components/editor/plugins/align-base-kit.tsx +16 -0
  220. package/src/components/editor/plugins/align-kit.tsx +18 -0
  221. package/src/components/editor/plugins/autoformat-kit.tsx +236 -0
  222. package/src/components/editor/plugins/basic-blocks-base-kit.tsx +34 -0
  223. package/src/components/editor/plugins/basic-blocks-kit.tsx +87 -0
  224. package/src/components/editor/plugins/basic-marks-base-kit.tsx +26 -0
  225. package/src/components/editor/plugins/basic-marks-kit.tsx +40 -0
  226. package/src/components/editor/plugins/basic-nodes-kit.tsx +6 -0
  227. package/src/components/editor/plugins/block-menu-kit.tsx +14 -0
  228. package/src/components/editor/plugins/block-placeholder-kit.tsx +17 -0
  229. package/src/components/editor/plugins/block-selection-kit.tsx +54 -0
  230. package/src/components/editor/plugins/callout-base-kit.tsx +5 -0
  231. package/src/components/editor/plugins/callout-kit.tsx +7 -0
  232. package/src/components/editor/plugins/code-block-base-kit.tsx +16 -0
  233. package/src/components/editor/plugins/code-block-kit.tsx +19 -0
  234. package/src/components/editor/plugins/column-base-kit.tsx +11 -0
  235. package/src/components/editor/plugins/column-kit.tsx +10 -0
  236. package/src/components/editor/plugins/comment-base-kit.tsx +5 -0
  237. package/src/components/editor/plugins/comment-kit.tsx +92 -0
  238. package/src/components/editor/plugins/copilot-kit.tsx +70 -0
  239. package/src/components/editor/plugins/cursor-overlay-kit.tsx +13 -0
  240. package/src/components/editor/plugins/date-base-kit.tsx +5 -0
  241. package/src/components/editor/plugins/date-kit.tsx +7 -0
  242. package/src/components/editor/plugins/discussion-kit.tsx +142 -0
  243. package/src/components/editor/plugins/dnd-kit.tsx +25 -0
  244. package/src/components/editor/plugins/emoji-kit.tsx +13 -0
  245. package/src/components/editor/plugins/exit-break-kit.tsx +12 -0
  246. package/src/components/editor/plugins/fixed-toolbar-kit.tsx +19 -0
  247. package/src/components/editor/plugins/floating-toolbar-kit.tsx +19 -0
  248. package/src/components/editor/plugins/font-base-kit.tsx +20 -0
  249. package/src/components/editor/plugins/font-kit.tsx +29 -0
  250. package/src/components/editor/plugins/indent-base-kit.tsx +13 -0
  251. package/src/components/editor/plugins/indent-kit.tsx +22 -0
  252. package/src/components/editor/plugins/line-height-base-kit.tsx +14 -0
  253. package/src/components/editor/plugins/line-height-kit.tsx +16 -0
  254. package/src/components/editor/plugins/link-base-kit.tsx +5 -0
  255. package/src/components/editor/plugins/link-kit.tsx +15 -0
  256. package/src/components/editor/plugins/list-base-kit.tsx +17 -0
  257. package/src/components/editor/plugins/list-kit.tsx +26 -0
  258. package/src/components/editor/plugins/markdown-kit.tsx +13 -0
  259. package/src/components/editor/plugins/math-base-kit.tsx +11 -0
  260. package/src/components/editor/plugins/math-kit.tsx +10 -0
  261. package/src/components/editor/plugins/media-base-kit.tsx +25 -0
  262. package/src/components/editor/plugins/media-kit.tsx +28 -0
  263. package/src/components/editor/plugins/slash-kit.tsx +18 -0
  264. package/src/components/editor/plugins/suggestion-base-kit.tsx +5 -0
  265. package/src/components/editor/plugins/suggestion-kit.tsx +83 -0
  266. package/src/components/editor/plugins/table-base-kit.tsx +20 -0
  267. package/src/components/editor/plugins/table-kit.tsx +22 -0
  268. package/src/components/editor/settings-dialog.tsx +418 -0
  269. package/src/components/editor/transforms.ts +193 -0
  270. package/src/components/editor/types.ts +149 -0
  271. package/src/components/editor/ui/ai-chat-editor.tsx +20 -0
  272. package/src/components/editor/ui/ai-menu.tsx +663 -0
  273. package/src/components/editor/ui/ai-node.tsx +40 -0
  274. package/src/components/editor/ui/ai-toolbar-button.tsx +23 -0
  275. package/src/components/editor/ui/align-toolbar-button.tsx +78 -0
  276. package/src/components/editor/ui/block-context-menu.tsx +154 -0
  277. package/src/components/editor/ui/block-discussion.tsx +318 -0
  278. package/src/components/editor/ui/block-draggable.tsx +464 -0
  279. package/src/components/editor/ui/block-list-static.tsx +75 -0
  280. package/src/components/editor/ui/block-list.tsx +72 -0
  281. package/src/components/editor/ui/block-selection.tsx +37 -0
  282. package/src/components/editor/ui/block-suggestion.tsx +438 -0
  283. package/src/components/editor/ui/blockquote-node-static.tsx +5 -0
  284. package/src/components/editor/ui/blockquote-node.tsx +7 -0
  285. package/src/components/editor/ui/callout-node-static.tsx +30 -0
  286. package/src/components/editor/ui/callout-node.tsx +64 -0
  287. package/src/components/editor/ui/caption.tsx +55 -0
  288. package/src/components/editor/ui/code-block-node-static.tsx +33 -0
  289. package/src/components/editor/ui/code-block-node.tsx +161 -0
  290. package/src/components/editor/ui/code-node-static.tsx +15 -0
  291. package/src/components/editor/ui/code-node.tsx +17 -0
  292. package/src/components/editor/ui/column-node-static.tsx +27 -0
  293. package/src/components/editor/ui/column-node.tsx +285 -0
  294. package/src/components/editor/ui/comment-node-static.tsx +12 -0
  295. package/src/components/editor/ui/comment-node.tsx +43 -0
  296. package/src/components/editor/ui/comment-toolbar-button.tsx +24 -0
  297. package/src/components/editor/ui/comment.tsx +577 -0
  298. package/src/components/editor/ui/cursor-overlay.tsx +66 -0
  299. package/src/components/editor/ui/date-node-static.tsx +45 -0
  300. package/src/components/editor/ui/date-node.tsx +86 -0
  301. package/src/components/editor/ui/editor-static.tsx +47 -0
  302. package/src/components/editor/ui/editor.tsx +120 -0
  303. package/src/components/editor/ui/emoji-node.tsx +65 -0
  304. package/src/components/editor/ui/emoji-toolbar-button.tsx +582 -0
  305. package/src/components/editor/ui/equation-node-static.tsx +94 -0
  306. package/src/components/editor/ui/equation-node.tsx +218 -0
  307. package/src/components/editor/ui/equation-toolbar-button.tsx +24 -0
  308. package/src/components/editor/ui/fixed-toolbar-buttons.tsx +135 -0
  309. package/src/components/editor/ui/fixed-toolbar.tsx +17 -0
  310. package/src/components/editor/ui/floating-toolbar-buttons.tsx +72 -0
  311. package/src/components/editor/ui/floating-toolbar.tsx +76 -0
  312. package/src/components/editor/ui/font-color-toolbar-button.tsx +804 -0
  313. package/src/components/editor/ui/font-size-toolbar-button.tsx +102 -0
  314. package/src/components/editor/ui/ghost-text.tsx +27 -0
  315. package/src/components/editor/ui/heading-node-static.tsx +54 -0
  316. package/src/components/editor/ui/heading-node.tsx +54 -0
  317. package/src/components/editor/ui/highlight-node-static.tsx +11 -0
  318. package/src/components/editor/ui/highlight-node.tsx +13 -0
  319. package/src/components/editor/ui/history-toolbar-button.tsx +41 -0
  320. package/src/components/editor/ui/hr-node-static.tsx +16 -0
  321. package/src/components/editor/ui/hr-node.tsx +28 -0
  322. package/src/components/editor/ui/indent-toolbar-button.tsx +27 -0
  323. package/src/components/editor/ui/inline-combobox.tsx +251 -0
  324. package/src/components/editor/ui/insert-toolbar-button.tsx +242 -0
  325. package/src/components/editor/ui/kbd-node-static.tsx +15 -0
  326. package/src/components/editor/ui/kbd-node.tsx +17 -0
  327. package/src/components/editor/ui/line-height-toolbar-button.tsx +66 -0
  328. package/src/components/editor/ui/link-node-static.tsx +21 -0
  329. package/src/components/editor/ui/link-node.tsx +37 -0
  330. package/src/components/editor/ui/link-toolbar-button.tsx +18 -0
  331. package/src/components/editor/ui/link-toolbar.tsx +196 -0
  332. package/src/components/editor/ui/list-toolbar-button.tsx +195 -0
  333. package/src/components/editor/ui/mark-toolbar-button.tsx +20 -0
  334. package/src/components/editor/ui/media-image-node-static.tsx +33 -0
  335. package/src/components/editor/ui/media-image-node.tsx +75 -0
  336. package/src/components/editor/ui/media-placeholder-node.tsx +235 -0
  337. package/src/components/editor/ui/media-preview-dialog.tsx +145 -0
  338. package/src/components/editor/ui/media-toolbar-button.tsx +202 -0
  339. package/src/components/editor/ui/media-toolbar.tsx +100 -0
  340. package/src/components/editor/ui/media-upload-toast.tsx +59 -0
  341. package/src/components/editor/ui/media-video-node-static.tsx +23 -0
  342. package/src/components/editor/ui/mode-toolbar-button.tsx +121 -0
  343. package/src/components/editor/ui/paragraph-node-static.tsx +13 -0
  344. package/src/components/editor/ui/paragraph-node.tsx +15 -0
  345. package/src/components/editor/ui/resize-handle.tsx +79 -0
  346. package/src/components/editor/ui/slash-node.tsx +274 -0
  347. package/src/components/editor/ui/suggestion-node-static.tsx +30 -0
  348. package/src/components/editor/ui/suggestion-node.tsx +157 -0
  349. package/src/components/editor/ui/suggestion-toolbar-button.tsx +25 -0
  350. package/src/components/editor/ui/table-icons.tsx +685 -0
  351. package/src/components/editor/ui/table-node-static.tsx +86 -0
  352. package/src/components/editor/ui/table-node.tsx +569 -0
  353. package/src/components/editor/ui/table-toolbar-button.tsx +260 -0
  354. package/src/components/editor/ui/turn-into-toolbar-button.tsx +176 -0
  355. package/src/components/editor/use-chat.ts +120 -0
  356. package/src/components/icons/logo.tsx +37 -0
  357. package/src/components/json-schema-editor/client.tsx +55 -0
  358. package/src/components/json-schema-editor/components/inputs.tsx +612 -0
  359. package/src/components/json-schema-editor/get-default-values.ts +29 -0
  360. package/src/components/json-schema-editor/schema.tsx +206 -0
  361. package/src/components/json-schema-editor/utils/merge-schema.ts +167 -0
  362. package/src/components/json-schema-editor/utils/schema-to-string.ts +87 -0
  363. package/src/components/nav-user.tsx +102 -0
  364. package/src/components/site-header.tsx +13 -0
  365. package/src/components/ui/alert-dialog.tsx +182 -0
  366. package/src/components/ui/avatar.tsx +96 -0
  367. package/src/components/ui/badge.tsx +46 -0
  368. package/src/components/ui/button.tsx +65 -0
  369. package/src/components/ui/calendar.tsx +186 -0
  370. package/src/components/ui/checkbox.tsx +29 -0
  371. package/src/components/ui/combobox.tsx +267 -0
  372. package/src/components/ui/command.tsx +180 -0
  373. package/src/components/ui/context-menu.tsx +161 -0
  374. package/src/components/ui/dialog.tsx +142 -0
  375. package/src/components/ui/drawer.tsx +120 -0
  376. package/src/components/ui/dropdown-menu.tsx +239 -0
  377. package/src/components/ui/field.tsx +224 -0
  378. package/src/components/ui/input-group.tsx +144 -0
  379. package/src/components/ui/input.tsx +19 -0
  380. package/src/components/ui/label.tsx +18 -0
  381. package/src/components/ui/popover.tsx +76 -0
  382. package/src/components/ui/select.tsx +182 -0
  383. package/src/components/ui/separator.tsx +28 -0
  384. package/src/components/ui/sheet.tsx +130 -0
  385. package/src/components/ui/sidebar.tsx +608 -0
  386. package/src/components/ui/sonner.tsx +45 -0
  387. package/src/components/ui/spinner.tsx +15 -0
  388. package/src/components/ui/table.tsx +89 -0
  389. package/src/components/ui/tabs.tsx +60 -0
  390. package/src/components/ui/textarea.tsx +18 -0
  391. package/src/components/ui/toggle-group.tsx +86 -0
  392. package/src/components/ui/toggle.tsx +45 -0
  393. package/src/components/ui/toolbar.tsx +365 -0
  394. package/src/components/ui/tooltip.tsx +57 -0
  395. package/src/hooks/editor/use-is-creator.ts +21 -0
  396. package/src/hooks/use-mobile.ts +19 -0
  397. package/src/hooks/use-mounted.ts +11 -0
  398. package/src/hooks/use-upload-file.ts +121 -0
  399. package/src/lib/ai/markdown-joiner-transform.ts +235 -0
  400. package/src/lib/config.ts +60 -0
  401. package/src/lib/data/actions.ts +51 -0
  402. package/src/lib/data/boundary.client.tsx +22 -0
  403. package/src/lib/data/boundary.tsx +22 -0
  404. package/src/lib/data/query.ts +9 -0
  405. package/src/lib/data/store.ts +52 -0
  406. package/src/lib/lowlight.ts +3 -0
  407. package/src/lib/uploadthing.ts +19 -0
  408. package/src/lib/utils/deep-equal.ts +37 -0
  409. package/src/lib/utils/remove-undefined.ts +21 -0
  410. package/src/lib/utils/urls.ts +6 -0
  411. package/src/lib/utils.ts +6 -0
  412. package/tsconfig.build.json +24 -0
  413. package/tsconfig.json +37 -0
@@ -0,0 +1,122 @@
1
+ "use client";
2
+
3
+ import { cn } from "../../lib/utils.mjs";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { CheckIcon, ChevronRightIcon } from "lucide-react";
6
+ import { DropdownMenu } from "radix-ui";
7
+
8
+ //#region src/components/ui/dropdown-menu.tsx
9
+ function DropdownMenu$1({ ...props }) {
10
+ return /* @__PURE__ */ jsx(DropdownMenu.Root, {
11
+ "data-slot": "dropdown-menu",
12
+ ...props
13
+ });
14
+ }
15
+ function DropdownMenuPortal({ ...props }) {
16
+ return /* @__PURE__ */ jsx(DropdownMenu.Portal, {
17
+ "data-slot": "dropdown-menu-portal",
18
+ ...props
19
+ });
20
+ }
21
+ function DropdownMenuTrigger({ ...props }) {
22
+ return /* @__PURE__ */ jsx(DropdownMenu.Trigger, {
23
+ "data-slot": "dropdown-menu-trigger",
24
+ ...props
25
+ });
26
+ }
27
+ function DropdownMenuContent({ className, align = "start", sideOffset = 4, ...props }) {
28
+ return /* @__PURE__ */ jsx(DropdownMenu.Portal, { children: /* @__PURE__ */ jsx(DropdownMenu.Content, {
29
+ "data-slot": "dropdown-menu-content",
30
+ sideOffset,
31
+ align,
32
+ className: cn("data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-48 origin-(--radix-dropdown-menu-content-transform-origin) overflow-y-auto overflow-x-hidden rounded-2xl bg-popover p-1 text-popover-foreground shadow-2xl ring-1 ring-foreground/5 duration-100 data-closed:animate-out data-open:animate-in data-[state=closed]:overflow-hidden", className),
33
+ ...props
34
+ }) });
35
+ }
36
+ function DropdownMenuGroup({ ...props }) {
37
+ return /* @__PURE__ */ jsx(DropdownMenu.Group, {
38
+ "data-slot": "dropdown-menu-group",
39
+ ...props
40
+ });
41
+ }
42
+ function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
43
+ return /* @__PURE__ */ jsx(DropdownMenu.Item, {
44
+ "data-slot": "dropdown-menu-item",
45
+ "data-inset": inset,
46
+ "data-variant": variant,
47
+ className: cn("group/dropdown-menu-item relative flex cursor-default select-none items-center gap-2.5 rounded-xl px-3 py-2 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-8 data-[variant=destructive]:text-destructive data-disabled:opacity-50 data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:size-4 [&_svg]:shrink-0 data-[variant=destructive]:*:[svg]:text-destructive", className),
48
+ ...props
49
+ });
50
+ }
51
+ function DropdownMenuCheckboxItem({ className, children, checked, ...props }) {
52
+ return /* @__PURE__ */ jsxs(DropdownMenu.CheckboxItem, {
53
+ "data-slot": "dropdown-menu-checkbox-item",
54
+ className: cn("relative flex cursor-default select-none items-center gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0", className),
55
+ checked,
56
+ ...props,
57
+ children: [/* @__PURE__ */ jsx("span", {
58
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
59
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
60
+ children: /* @__PURE__ */ jsx(DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
61
+ }), children]
62
+ });
63
+ }
64
+ function DropdownMenuRadioGroup({ ...props }) {
65
+ return /* @__PURE__ */ jsx(DropdownMenu.RadioGroup, {
66
+ "data-slot": "dropdown-menu-radio-group",
67
+ ...props
68
+ });
69
+ }
70
+ function DropdownMenuRadioItem({ className, children, ...props }) {
71
+ return /* @__PURE__ */ jsxs(DropdownMenu.RadioItem, {
72
+ "data-slot": "dropdown-menu-radio-item",
73
+ className: cn("relative flex cursor-default select-none items-center gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:shrink-0", className),
74
+ ...props,
75
+ children: [/* @__PURE__ */ jsx("span", {
76
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
77
+ "data-slot": "dropdown-menu-radio-item-indicator",
78
+ children: /* @__PURE__ */ jsx(DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
79
+ }), children]
80
+ });
81
+ }
82
+ function DropdownMenuLabel({ className, inset, ...props }) {
83
+ return /* @__PURE__ */ jsx(DropdownMenu.Label, {
84
+ "data-slot": "dropdown-menu-label",
85
+ "data-inset": inset,
86
+ className: cn("px-3 py-2.5 text-muted-foreground text-xs data-inset:pl-8", className),
87
+ ...props
88
+ });
89
+ }
90
+ function DropdownMenuSeparator({ className, ...props }) {
91
+ return /* @__PURE__ */ jsx(DropdownMenu.Separator, {
92
+ "data-slot": "dropdown-menu-separator",
93
+ className: cn("-mx-1 my-1 h-px bg-border/50", className),
94
+ ...props
95
+ });
96
+ }
97
+ function DropdownMenuSub({ ...props }) {
98
+ return /* @__PURE__ */ jsx(DropdownMenu.Sub, {
99
+ "data-slot": "dropdown-menu-sub",
100
+ ...props
101
+ });
102
+ }
103
+ function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
104
+ return /* @__PURE__ */ jsxs(DropdownMenu.SubTrigger, {
105
+ "data-slot": "dropdown-menu-sub-trigger",
106
+ "data-inset": inset,
107
+ className: cn("flex cursor-default select-none items-center gap-2 rounded-xl px-3 py-2 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-open:bg-accent data-inset:pl-8 data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
108
+ ...props,
109
+ children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })]
110
+ });
111
+ }
112
+ function DropdownMenuSubContent({ className, ...props }) {
113
+ return /* @__PURE__ */ jsx(DropdownMenu.SubContent, {
114
+ "data-slot": "dropdown-menu-sub-content",
115
+ className: cn("data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-36 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-2xl bg-popover p-1 text-popover-foreground shadow-2xl ring-1 ring-foreground/5 duration-100 data-closed:animate-out data-open:animate-in", className),
116
+ ...props
117
+ });
118
+ }
119
+ const { DropdownMenuItemIndicator } = DropdownMenu;
120
+
121
+ //#endregion
122
+ export { DropdownMenu$1 as DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuItemIndicator, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
@@ -0,0 +1,31 @@
1
+ "use client";
2
+
3
+ import "../../lib/utils.mjs";
4
+ import "./button.mjs";
5
+ import "./input.mjs";
6
+ import "./textarea.mjs";
7
+ import { jsx } from "react/jsx-runtime";
8
+ import { cva } from "class-variance-authority";
9
+
10
+ //#region src/components/ui/input-group.tsx
11
+ const inputGroupAddonVariants = cva("text-muted-foreground **:data-[slot=kbd]:bg-muted-foreground/10 h-auto gap-2 py-2 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 **:data-[slot=kbd]:rounded-4xl **:data-[slot=kbd]:px-1.5 [&>svg:not([class*='size-'])]:size-4 flex cursor-text items-center justify-center select-none", {
12
+ variants: { align: {
13
+ "inline-start": "pl-3 has-[>button]:ml-[-0.25rem] has-[>kbd]:ml-[-0.15rem] order-first",
14
+ "inline-end": "pr-3 has-[>button]:mr-[-0.25rem] has-[>kbd]:mr-[-0.15rem] order-last",
15
+ "block-start": "px-3 pt-3 group-has-[>input]/input-group:pt-3 [.border-b]:pb-3 order-first w-full justify-start",
16
+ "block-end": "px-3 pb-3 group-has-[>input]/input-group:pb-3 [.border-t]:pt-3 order-last w-full justify-start"
17
+ } },
18
+ defaultVariants: { align: "inline-start" }
19
+ });
20
+ const inputGroupButtonVariants = cva("gap-2 rounded-4xl text-sm shadow-none flex items-center", {
21
+ variants: { size: {
22
+ xs: "h-6 gap-1 px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
23
+ sm: "",
24
+ "icon-xs": "size-6 p-0 has-[>svg]:p-0",
25
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0"
26
+ } },
27
+ defaultVariants: { size: "xs" }
28
+ });
29
+
30
+ //#endregion
31
+ export { };
@@ -0,0 +1,15 @@
1
+ import { cn } from "../../lib/utils.mjs";
2
+ import { jsx } from "react/jsx-runtime";
3
+
4
+ //#region src/components/ui/input.tsx
5
+ function Input({ className, type, ...props }) {
6
+ return /* @__PURE__ */ jsx("input", {
7
+ type,
8
+ "data-slot": "input",
9
+ className: cn("h-9 w-full min-w-0 rounded-4xl border border-input bg-input/30 px-3 py-1 text-base outline-none transition-colors file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium file:text-foreground file:text-sm placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className),
10
+ ...props
11
+ });
12
+ }
13
+
14
+ //#endregion
15
+ export { Input };
@@ -0,0 +1,19 @@
1
+ "use client";
2
+
3
+ import { cn } from "../../lib/utils.mjs";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { cva } from "class-variance-authority";
6
+ import { Label } from "radix-ui";
7
+
8
+ //#region src/components/ui/label.tsx
9
+ const labelVariants = cva("flex select-none items-center gap-2 font-medium text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50");
10
+ function Label$1({ className, ...props }) {
11
+ return /* @__PURE__ */ jsx(Label.Root, {
12
+ "data-slot": "label",
13
+ className: cn(labelVariants(), className),
14
+ ...props
15
+ });
16
+ }
17
+
18
+ //#endregion
19
+ export { Label$1 as Label, labelVariants };
@@ -0,0 +1,37 @@
1
+ "use client";
2
+
3
+ import { cn } from "../../lib/utils.mjs";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { Popover } from "radix-ui";
6
+
7
+ //#region src/components/ui/popover.tsx
8
+ function Popover$1({ ...props }) {
9
+ return /* @__PURE__ */ jsx(Popover.Root, {
10
+ "data-slot": "popover",
11
+ ...props
12
+ });
13
+ }
14
+ function PopoverTrigger({ ...props }) {
15
+ return /* @__PURE__ */ jsx(Popover.Trigger, {
16
+ "data-slot": "popover-trigger",
17
+ ...props
18
+ });
19
+ }
20
+ function PopoverContent({ className, align = "center", sideOffset = 4, ...props }) {
21
+ return /* @__PURE__ */ jsx(Popover.Portal, { children: /* @__PURE__ */ jsx(Popover.Content, {
22
+ "data-slot": "popover-content",
23
+ align,
24
+ sideOffset,
25
+ className: cn("bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 flex flex-col gap-4 rounded-2xl p-4 text-sm shadow-2xl ring-1 duration-100 z-50 w-72 origin-(--radix-popover-content-transform-origin) outline-hidden", className),
26
+ ...props
27
+ }) });
28
+ }
29
+ function PopoverAnchor({ ...props }) {
30
+ return /* @__PURE__ */ jsx(Popover.Anchor, {
31
+ "data-slot": "popover-anchor",
32
+ ...props
33
+ });
34
+ }
35
+
36
+ //#endregion
37
+ export { Popover$1 as Popover, PopoverAnchor, PopoverContent, PopoverTrigger };
@@ -0,0 +1,80 @@
1
+ "use client";
2
+
3
+ import { cn } from "../../lib/utils.mjs";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react";
6
+ import { Select } from "radix-ui";
7
+
8
+ //#region src/components/ui/select.tsx
9
+ function Select$1({ ...props }) {
10
+ return /* @__PURE__ */ jsx(Select.Root, {
11
+ "data-slot": "select",
12
+ ...props
13
+ });
14
+ }
15
+ function SelectValue({ ...props }) {
16
+ return /* @__PURE__ */ jsx(Select.Value, {
17
+ "data-slot": "select-value",
18
+ ...props
19
+ });
20
+ }
21
+ function SelectTrigger({ className, size = "default", children, ...props }) {
22
+ return /* @__PURE__ */ jsxs(Select.Trigger, {
23
+ "data-slot": "select-trigger",
24
+ "data-size": size,
25
+ className: cn("flex w-fit items-center justify-between gap-1.5 whitespace-nowrap rounded-4xl border border-input bg-input/30 px-3 py-2 text-sm outline-none transition-colors focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 data-[size=default]:h-9 data-[size=sm]:h-8 data-placeholder:text-muted-foreground *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 dark:hover:bg-input/50 [&_svg]:shrink-0", className),
26
+ ...props,
27
+ children: [children, /* @__PURE__ */ jsx(Select.Icon, {
28
+ asChild: true,
29
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" })
30
+ })]
31
+ });
32
+ }
33
+ function SelectContent({ className, children, position = "item-aligned", align = "center", ...props }) {
34
+ return /* @__PURE__ */ jsx(Select.Portal, { children: /* @__PURE__ */ jsxs(Select.Content, {
35
+ "data-slot": "select-content",
36
+ className: cn("data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-y-auto overflow-x-hidden rounded-2xl bg-popover text-popover-foreground shadow-2xl ring-1 ring-foreground/5 duration-100 data-closed:animate-out data-open:animate-in", position === "popper" && "data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1", className),
37
+ position,
38
+ align,
39
+ ...props,
40
+ children: [
41
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
42
+ /* @__PURE__ */ jsx(Select.Viewport, {
43
+ "data-position": position,
44
+ className: cn("data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)", position === "popper" && ""),
45
+ children
46
+ }),
47
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
48
+ ]
49
+ }) });
50
+ }
51
+ function SelectItem({ className, children, ...props }) {
52
+ return /* @__PURE__ */ jsxs(Select.Item, {
53
+ "data-slot": "select-item",
54
+ className: cn("flex w-full select-none items-center gap-2.5 ps-3 p-2 text-sm outline-hidden focus:bg-accent data-[state=checked]:bg-accent data-[state=checked]:text-accent-foreground data-disabled:opacity-50 [&_svg]:shrink-0 *:[span]:flex *:[span]:items-center *:[span]:gap-2 *:[span]:flex-1", className),
55
+ ...props,
56
+ children: [/* @__PURE__ */ jsx(Select.ItemText, { children }), /* @__PURE__ */ jsx(Select.ItemIndicator, {
57
+ asChild: true,
58
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" })
59
+ })]
60
+ });
61
+ }
62
+ function SelectScrollUpButton({ className, ...props }) {
63
+ return /* @__PURE__ */ jsx(Select.ScrollUpButton, {
64
+ "data-slot": "select-scroll-up-button",
65
+ className: cn("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className),
66
+ ...props,
67
+ children: /* @__PURE__ */ jsx(ChevronUpIcon, {})
68
+ });
69
+ }
70
+ function SelectScrollDownButton({ className, ...props }) {
71
+ return /* @__PURE__ */ jsx(Select.ScrollDownButton, {
72
+ "data-slot": "select-scroll-down-button",
73
+ className: cn("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className),
74
+ ...props,
75
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
76
+ });
77
+ }
78
+
79
+ //#endregion
80
+ export { Select$1 as Select, SelectContent, SelectItem, SelectTrigger, SelectValue };
@@ -0,0 +1,19 @@
1
+ "use client";
2
+
3
+ import { cn } from "../../lib/utils.mjs";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { Separator } from "radix-ui";
6
+
7
+ //#region src/components/ui/separator.tsx
8
+ function Separator$1({ className, orientation = "horizontal", decorative = true, ...props }) {
9
+ return /* @__PURE__ */ jsx(Separator.Root, {
10
+ "data-slot": "separator",
11
+ decorative,
12
+ orientation,
13
+ className: cn("shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px", className),
14
+ ...props
15
+ });
16
+ }
17
+
18
+ //#endregion
19
+ export { Separator$1 as Separator };
@@ -0,0 +1,16 @@
1
+ import { cn } from "../../lib/utils.mjs";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { Loader2Icon } from "lucide-react";
4
+
5
+ //#region src/components/ui/spinner.tsx
6
+ function Spinner({ className, ...props }) {
7
+ return /* @__PURE__ */ jsx(Loader2Icon, {
8
+ role: "status",
9
+ "aria-label": "Loading",
10
+ className: cn("size-4 animate-spin", className),
11
+ ...props
12
+ });
13
+ }
14
+
15
+ //#endregion
16
+ export { Spinner };
@@ -0,0 +1,39 @@
1
+ "use client";
2
+
3
+ import { cn } from "../../lib/utils.mjs";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { Tabs } from "radix-ui";
6
+
7
+ //#region src/components/ui/tabs.tsx
8
+ function Tabs$1({ className, orientation = "horizontal", ...props }) {
9
+ return /* @__PURE__ */ jsx(Tabs.Root, {
10
+ "data-slot": "tabs",
11
+ "data-orientation": orientation,
12
+ className: cn("group/tabs flex gap-2 data-horizontal:flex-col", className),
13
+ ...props
14
+ });
15
+ }
16
+ function TabsList({ className, ...props }) {
17
+ return /* @__PURE__ */ jsx(Tabs.List, {
18
+ "data-slot": "tabs-list",
19
+ className: cn("rounded-4xl bg-muted p-1 group-data-horizontal/tabs:h-9 group-data-vertical/tabs:rounded-2xl group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col", className),
20
+ ...props
21
+ });
22
+ }
23
+ function TabsTrigger({ className, ...props }) {
24
+ return /* @__PURE__ */ jsx(Tabs.Trigger, {
25
+ "data-slot": "tabs-trigger",
26
+ className: cn("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-xl border border-transparent px-2 py-1 font-medium text-foreground/60 text-sm transition-colors hover:text-foreground focus-visible:border-ring focus-visible:outline-1 focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start group-data-vertical/tabs:px-2.5 group-data-vertical/tabs:py-1.5 dark:text-muted-foreground dark:hover:text-foreground [&_svg]:size-4 [&_svg]:shrink-0", "data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground", className),
27
+ ...props
28
+ });
29
+ }
30
+ function TabsContent({ className, ...props }) {
31
+ return /* @__PURE__ */ jsx(Tabs.Content, {
32
+ "data-slot": "tabs-content",
33
+ className: cn("flex-1 text-sm outline-none", className),
34
+ ...props
35
+ });
36
+ }
37
+
38
+ //#endregion
39
+ export { Tabs$1 as Tabs, TabsContent, TabsList, TabsTrigger };
@@ -0,0 +1,14 @@
1
+ import { cn } from "../../lib/utils.mjs";
2
+ import { jsx } from "react/jsx-runtime";
3
+
4
+ //#region src/components/ui/textarea.tsx
5
+ function Textarea({ className, ...props }) {
6
+ return /* @__PURE__ */ jsx("textarea", {
7
+ "data-slot": "textarea",
8
+ className: cn("field-sizing-content flex min-h-16 w-full resize-none rounded-xl border border-input bg-input/30 px-3 py-3 text-base outline-none transition-colors placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className),
9
+ ...props
10
+ });
11
+ }
12
+
13
+ //#endregion
14
+ export { Textarea };
@@ -0,0 +1,183 @@
1
+ "use client";
2
+
3
+ import { cn } from "../../lib/utils.mjs";
4
+ import { DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuSeparator } from "./dropdown-menu.mjs";
5
+ import { Separator as Separator$1 } from "./separator.mjs";
6
+ import { Tooltip as Tooltip$1, TooltipTrigger } from "./tooltip.mjs";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ import * as React$1 from "react";
9
+ import { ChevronDown } from "lucide-react";
10
+ import { cva } from "class-variance-authority";
11
+ import { Toolbar, Tooltip } from "radix-ui";
12
+
13
+ //#region src/components/ui/toolbar.tsx
14
+ function Toolbar$1({ className, ...props }) {
15
+ return /* @__PURE__ */ jsx(Toolbar.Root, {
16
+ className: cn("relative flex select-none items-center", className),
17
+ ...props
18
+ });
19
+ }
20
+ function ToolbarToggleGroup({ className, ...props }) {
21
+ return /* @__PURE__ */ jsx(Toolbar.ToolbarToggleGroup, {
22
+ className: cn("flex items-center", className),
23
+ ...props
24
+ });
25
+ }
26
+ const toolbarButtonVariants = cva("inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium text-sm outline-none transition-[color,box-shadow] hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-checked:bg-accent aria-checked:text-accent-foreground aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:size-4 [&_svg]:shrink-0", {
27
+ defaultVariants: {
28
+ size: "default",
29
+ variant: "default"
30
+ },
31
+ variants: {
32
+ size: {
33
+ default: "h-9 min-w-9 px-2",
34
+ lg: "h-10 min-w-10 px-2.5",
35
+ sm: "h-8 min-w-8 px-1.5"
36
+ },
37
+ variant: {
38
+ default: "bg-transparent",
39
+ outline: "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground"
40
+ }
41
+ }
42
+ });
43
+ const dropdownArrowVariants = cva(cn("inline-flex items-center justify-center rounded-r-md font-medium text-foreground text-sm transition-colors disabled:pointer-events-none disabled:opacity-50"), {
44
+ defaultVariants: {
45
+ size: "sm",
46
+ variant: "default"
47
+ },
48
+ variants: {
49
+ size: {
50
+ default: "h-9 w-6",
51
+ lg: "h-10 w-8",
52
+ sm: "h-8 w-4"
53
+ },
54
+ variant: {
55
+ default: "bg-transparent hover:bg-muted hover:text-muted-foreground aria-checked:bg-accent aria-checked:text-accent-foreground",
56
+ outline: "border border-input border-l-0 bg-transparent hover:bg-accent hover:text-accent-foreground"
57
+ }
58
+ }
59
+ });
60
+ const ToolbarButton = withTooltip(function ToolbarButton$1({ children, className, isDropdown, pressed, size = "sm", variant, ...props }) {
61
+ return typeof pressed === "boolean" ? /* @__PURE__ */ jsx(ToolbarToggleGroup, {
62
+ disabled: props.disabled,
63
+ value: "single",
64
+ type: "single",
65
+ children: /* @__PURE__ */ jsx(ToolbarToggleItem, {
66
+ className: cn(toolbarButtonVariants({
67
+ size,
68
+ variant
69
+ }), isDropdown && "justify-between gap-1 pr-1", className),
70
+ value: pressed ? "single" : "",
71
+ ...props,
72
+ children: isDropdown ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
73
+ className: "flex flex-1 items-center gap-2 whitespace-nowrap",
74
+ children
75
+ }), /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(ChevronDown, {
76
+ className: "size-3.5 text-muted-foreground",
77
+ "data-icon": true
78
+ }) })] }) : children
79
+ })
80
+ }) : /* @__PURE__ */ jsx(Toolbar.Button, {
81
+ className: cn(toolbarButtonVariants({
82
+ size,
83
+ variant
84
+ }), isDropdown && "pr-1", className),
85
+ ...props,
86
+ children
87
+ });
88
+ });
89
+ function ToolbarSplitButton({ className, ...props }) {
90
+ return /* @__PURE__ */ jsx(ToolbarButton, {
91
+ className: cn("group flex gap-0 px-0 hover:bg-transparent", className),
92
+ ...props
93
+ });
94
+ }
95
+ function ToolbarSplitButtonPrimary({ children, className, size = "sm", variant, ...props }) {
96
+ return /* @__PURE__ */ jsx("span", {
97
+ className: cn(toolbarButtonVariants({
98
+ size,
99
+ variant
100
+ }), "rounded-r-none", "group-data-[pressed=true]:bg-accent group-data-[pressed=true]:text-accent-foreground", className),
101
+ ...props,
102
+ children
103
+ });
104
+ }
105
+ function ToolbarSplitButtonSecondary({ className, size, variant, ...props }) {
106
+ return /* @__PURE__ */ jsx("span", {
107
+ className: cn(dropdownArrowVariants({
108
+ size,
109
+ variant
110
+ }), "group-data-[pressed=true]:bg-accent group-data-[pressed=true]:text-accent-foreground", className),
111
+ onClick: (e) => e.stopPropagation(),
112
+ role: "button",
113
+ ...props,
114
+ children: /* @__PURE__ */ jsx(ChevronDown, {
115
+ className: "size-3.5 text-muted-foreground",
116
+ "data-icon": true
117
+ })
118
+ });
119
+ }
120
+ function ToolbarToggleItem({ className, size = "sm", variant, ...props }) {
121
+ return /* @__PURE__ */ jsx(Toolbar.ToggleItem, {
122
+ className: cn(toolbarButtonVariants({
123
+ size,
124
+ variant
125
+ }), className),
126
+ ...props
127
+ });
128
+ }
129
+ function ToolbarGroup({ children, className }) {
130
+ return /* @__PURE__ */ jsxs("div", {
131
+ className: cn("group/toolbar-group", "relative hidden has-[button]:flex", className),
132
+ children: [/* @__PURE__ */ jsx("div", {
133
+ className: "flex items-center",
134
+ children
135
+ }), /* @__PURE__ */ jsx("div", {
136
+ className: "group-last/toolbar-group:hidden! mx-1.5 py-0.5",
137
+ children: /* @__PURE__ */ jsx(Separator$1, { orientation: "vertical" })
138
+ })]
139
+ });
140
+ }
141
+ function withTooltip(Component) {
142
+ return function ExtendComponent({ tooltip, tooltipContentProps, tooltipProps, tooltipTriggerProps, ...props }) {
143
+ const [mounted, setMounted] = React$1.useState(false);
144
+ React$1.useEffect(() => {
145
+ setMounted(true);
146
+ }, []);
147
+ const component = /* @__PURE__ */ jsx(Component, { ...props });
148
+ if (tooltip && mounted) return /* @__PURE__ */ jsxs(Tooltip$1, {
149
+ ...tooltipProps,
150
+ children: [/* @__PURE__ */ jsx(TooltipTrigger, {
151
+ asChild: true,
152
+ ...tooltipTriggerProps,
153
+ children: component
154
+ }), /* @__PURE__ */ jsx(TooltipContent, {
155
+ ...tooltipContentProps,
156
+ children: tooltip
157
+ })]
158
+ });
159
+ return component;
160
+ };
161
+ }
162
+ function TooltipContent({ children, className, sideOffset = 4, ...props }) {
163
+ return /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsx(Tooltip.Content, {
164
+ className: cn("z-50 w-fit origin-(--radix-tooltip-content-transform-origin) text-balance rounded-md bg-primary px-3 py-1.5 text-primary-foreground text-xs", className),
165
+ "data-slot": "tooltip-content",
166
+ sideOffset,
167
+ ...props,
168
+ children
169
+ }) });
170
+ }
171
+ function ToolbarMenuGroup({ children, className, label, ...props }) {
172
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(DropdownMenuSeparator, { className: cn("hidden", "mb-0 shrink-0 peer-has-[[role=menuitem]]/menu-group:block peer-has-[[role=menuitemradio]]/menu-group:block peer-has-[[role=option]]/menu-group:block") }), /* @__PURE__ */ jsxs(DropdownMenuRadioGroup, {
173
+ ...props,
174
+ className: cn("hidden", "peer/menu-group group/menu-group my-1.5 has-[[role=menuitem]]:block has-[[role=menuitemradio]]:block has-[[role=option]]:block", className),
175
+ children: [label && /* @__PURE__ */ jsx(DropdownMenuLabel, {
176
+ className: "select-none font-semibold text-muted-foreground text-xs",
177
+ children: label
178
+ }), children]
179
+ })] });
180
+ }
181
+
182
+ //#endregion
183
+ export { Toolbar$1 as Toolbar, ToolbarButton, ToolbarGroup, ToolbarMenuGroup, ToolbarSplitButton, ToolbarSplitButtonPrimary, ToolbarSplitButtonSecondary };
@@ -0,0 +1,38 @@
1
+ "use client";
2
+
3
+ import { cn } from "../../lib/utils.mjs";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { Tooltip } from "radix-ui";
6
+
7
+ //#region src/components/ui/tooltip.tsx
8
+ function TooltipProvider({ delayDuration = 0, ...props }) {
9
+ return /* @__PURE__ */ jsx(Tooltip.Provider, {
10
+ "data-slot": "tooltip-provider",
11
+ delayDuration,
12
+ ...props
13
+ });
14
+ }
15
+ function Tooltip$1({ ...props }) {
16
+ return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(Tooltip.Root, {
17
+ "data-slot": "tooltip",
18
+ ...props
19
+ }) });
20
+ }
21
+ function TooltipTrigger({ ...props }) {
22
+ return /* @__PURE__ */ jsx(Tooltip.Trigger, {
23
+ "data-slot": "tooltip-trigger",
24
+ ...props
25
+ });
26
+ }
27
+ function TooltipContent({ className, sideOffset = 0, children, ...props }) {
28
+ return /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsxs(Tooltip.Content, {
29
+ "data-slot": "tooltip-content",
30
+ sideOffset,
31
+ className: cn("data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) rounded-2xl bg-foreground px-3 py-1.5 text-background text-xs data-[state=delayed-open]:animate-in data-closed:animate-out data-open:animate-in **:data-[slot=kbd]:rounded-4xl", className),
32
+ ...props,
33
+ children: [children, /* @__PURE__ */ jsx(Tooltip.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground" })]
34
+ }) });
35
+ }
36
+
37
+ //#endregion
38
+ export { Tooltip$1 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
@@ -0,0 +1,19 @@
1
+ import { useEditor } from "../../components/editor/editor-kit.mjs";
2
+ import { useMemo } from "react";
3
+
4
+ //#region src/hooks/editor/use-is-creator.ts
5
+ /**
6
+ * Check if current user is the creator of this element (for Yjs collaboration)
7
+ */
8
+ function useIsCreator(element) {
9
+ const editor = useEditor();
10
+ return useMemo(() => {
11
+ const elementUserId = "userId" in element && typeof element.userId === "string" ? element.userId : void 0;
12
+ const currentUserId = editor.meta.userId;
13
+ if (!elementUserId) return true;
14
+ return elementUserId === currentUserId;
15
+ }, [editor.meta.userId, element]);
16
+ }
17
+
18
+ //#endregion
19
+ export { useIsCreator };