@collabchron/notiq 0.3.0 → 1.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 (282) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +230 -39
  3. package/dist/CodeActionMenuPlugin-EINOY4U4.mjs +15 -0
  4. package/dist/DynamicBlockComponent-NRQJ4WW4.mjs +161 -0
  5. package/dist/EquationComponent-CB6DFIHV.mjs +154 -0
  6. package/dist/ExcalidrawComponent-XW6646OH.mjs +528 -0
  7. package/dist/ExcalidrawPlugin-ZFHT62IF.mjs +14 -0
  8. package/dist/ExportPlugin-V2RLM63S.mjs +11 -0
  9. package/dist/FloatingLinkEditorPlugin-TRTCMSP4.mjs +12 -0
  10. package/dist/FloatingTextFormatToolbarPlugin-F2GY6LMI.mjs +30 -0
  11. package/dist/HintComponet-BRL6EAMS.mjs +217 -0
  12. package/dist/InlineImageComponent-UWIUWBHI.mjs +453 -0
  13. package/dist/MobileToolbar-BOOZAMQE.mjs +268 -0
  14. package/dist/SlashCommand-GMT5JI33.mjs +28 -0
  15. package/dist/StoryBuilderComponent-JGDBM5JU.mjs +562 -0
  16. package/{src/components/editor/plugins/TableCellActionMenuPlugin/index.tsx → dist/TableCellActionMenuPlugin-PGK2K3VG.mjs} +667 -759
  17. package/{src/components/editor/plugins/TableHoverActionsPlugin/index.tsx → dist/TableHoverActionsPlugin-GJVE6VRW.mjs} +258 -314
  18. package/dist/TemplatePlugin-ZD3QEVTI.mjs +9 -0
  19. package/dist/ToolbarPlugin-YKYA4NB4.mjs +1547 -0
  20. package/dist/babel-JZ2EV6AX.mjs +7233 -0
  21. package/dist/background-color-XZTYLGO2.mjs +362 -0
  22. package/dist/block-format-YJCV2DIY.mjs +15 -0
  23. package/dist/chunk-2FNEAMSP.mjs +127 -0
  24. package/dist/chunk-3CPBODXA.mjs +84 -0
  25. package/dist/chunk-3G37YKTV.mjs +83 -0
  26. package/dist/chunk-3JVFG7ER.mjs +184 -0
  27. package/dist/chunk-456TN7IM.mjs +110 -0
  28. package/dist/chunk-4EXYCTGJ.mjs +27 -0
  29. package/{src/utils/getSelectedNode.ts → dist/chunk-4HBCVSE6.mjs} +26 -27
  30. package/dist/chunk-4MEDW3T6.mjs +125 -0
  31. package/dist/chunk-4VWFVWYP.mjs +36 -0
  32. package/dist/chunk-5BAKY5KN.mjs +84 -0
  33. package/dist/chunk-5QSNIVIG.mjs +333 -0
  34. package/dist/chunk-64Z3FI7T.mjs +37 -0
  35. package/{src/components/editor/nodes/Stepper/index.tsx → dist/chunk-6RNZQOH2.mjs} +214 -260
  36. package/dist/chunk-77KXU36M.mjs +64 -0
  37. package/dist/chunk-77UA6HYR.mjs +165 -0
  38. package/dist/chunk-7NZAPJ4G.mjs +102 -0
  39. package/dist/chunk-7VUMHWWL.mjs +152 -0
  40. package/dist/chunk-AMMKBSST.mjs +1256 -0
  41. package/dist/chunk-BIU7WTLX.mjs +95 -0
  42. package/dist/chunk-EGMI62PP.mjs +83 -0
  43. package/dist/chunk-EHNQD5KO.mjs +88 -0
  44. package/dist/chunk-FSM26655.mjs +37 -0
  45. package/{src/components/editor/nodes/Hint/index.tsx → dist/chunk-G53GLEAY.mjs} +158 -190
  46. package/dist/chunk-GK35L7UY.mjs +28 -0
  47. package/dist/chunk-GXYD4VZM.mjs +193 -0
  48. package/dist/chunk-GYIOYVCN.mjs +538 -0
  49. package/dist/chunk-GZPNVR7L.mjs +157 -0
  50. package/dist/chunk-JXDPPUJI.mjs +52 -0
  51. package/dist/chunk-K36V4SIW.mjs +141 -0
  52. package/dist/chunk-KJ6AJ44Q.mjs +128 -0
  53. package/dist/chunk-KJV3FAZ7.mjs +142 -0
  54. package/{src/components/editor/plugins/ImagesPlugin/index.tsx → dist/chunk-LGG4IUIA.mjs} +189 -222
  55. package/dist/chunk-LQN3CMKV.mjs +1906 -0
  56. package/dist/chunk-N3WN46VL.mjs +236 -0
  57. package/dist/chunk-PBD6LMLC.mjs +366 -0
  58. package/dist/chunk-POGRR73N.mjs +33 -0
  59. package/{src/components/editor/utils/editorFormatting.ts → dist/chunk-PZSUSXQG.mjs} +238 -282
  60. package/dist/chunk-QEIFVK5M.mjs +29 -0
  61. package/dist/chunk-QHIQKMVN.mjs +427 -0
  62. package/dist/chunk-TCYK7DM7.mjs +36 -0
  63. package/dist/chunk-TTHQCW5F.mjs +47 -0
  64. package/dist/chunk-U47ABU5Z.mjs +53 -0
  65. package/dist/chunk-WDG7J2DY.mjs +116 -0
  66. package/dist/chunk-WJRHXI2C.mjs +733 -0
  67. package/dist/chunk-XLER2DHM.mjs +357 -0
  68. package/dist/chunk-XWC4TK2N.mjs +315 -0
  69. package/dist/chunk-YHPNOWFH.mjs +15 -0
  70. package/dist/chunk-YKC3SO4Z.mjs +32 -0
  71. package/dist/chunk-YMBXLRW5.mjs +374 -0
  72. package/dist/chunk-YPHOEJ46.mjs +64 -0
  73. package/dist/chunk-YUDCJRJM.mjs +25 -0
  74. package/dist/chunk-Z4EWP7BI.mjs +65 -0
  75. package/dist/chunk-ZB5LZQKC.mjs +191 -0
  76. package/dist/chunk-ZJRKATOJ.mjs +65 -0
  77. package/dist/color-BPKOPQKN.mjs +12 -0
  78. package/dist/estree-XC56IUFX.mjs +4414 -0
  79. package/dist/font-FEZ3GKSF.mjs +13 -0
  80. package/dist/font-size-EK775WRH.mjs +15 -0
  81. package/dist/html-S3ACX7NI.mjs +2738 -0
  82. package/dist/image-2PJIAYAT.mjs +993 -0
  83. package/dist/index.d.mts +145 -0
  84. package/dist/index.d.ts +145 -0
  85. package/dist/index.js +57855 -0
  86. package/dist/index.mjs +1790 -0
  87. package/dist/insert-gif-SAIDYURE.mjs +100 -0
  88. package/dist/insert-image-U3RJN3OW.mjs +259 -0
  89. package/dist/insert-node-5P2CRJ7S.mjs +201 -0
  90. package/dist/insert-poll-HCPM7MO6.mjs +33 -0
  91. package/dist/insert-table-24XYUS2W.mjs +66 -0
  92. package/dist/markdown-SNVBOSRA.mjs +3487 -0
  93. package/dist/poll-component-2R4MDLHS.mjs +303 -0
  94. package/dist/postcss-ONF3VDIM.mjs +5051 -0
  95. package/dist/standalone-EOIALU3M.mjs +2373 -0
  96. package/dist/stepper-FSARL6X6.mjs +304 -0
  97. package/dist/styles/notiq.css +1149 -0
  98. package/dist/text-align-VLECWO4H.mjs +118 -0
  99. package/dist/text-format-BG5WOOPZ.mjs +16 -0
  100. package/dist/typescript-AMPI6OVS.mjs +13135 -0
  101. package/package.json +67 -11
  102. package/src/styles/notiq.css +1149 -0
  103. package/src/styles/tailwind-plugin.ts +134 -0
  104. package/components.json +0 -21
  105. package/eslint.config.mjs +0 -16
  106. package/next.config.ts +0 -12
  107. package/postcss.config.mjs +0 -5
  108. package/public/file.svg +0 -1
  109. package/public/globe.svg +0 -1
  110. package/public/images/icons/plus.svg +0 -10
  111. package/public/next.svg +0 -1
  112. package/public/vercel.svg +0 -1
  113. package/public/window.svg +0 -1
  114. package/src/app/actions.ts +0 -2
  115. package/src/app/api/ai/route.ts +0 -175
  116. package/src/app/api/edgestore/[...edgestore]/route.ts +0 -28
  117. package/src/app/favicon.ico +0 -0
  118. package/src/app/globals.css +0 -205
  119. package/src/app/layout.tsx +0 -38
  120. package/src/app/page.tsx +0 -12
  121. package/src/components/editor/Core.tsx +0 -220
  122. package/src/components/editor/hooks/instructions-messages.ts +0 -300
  123. package/src/components/editor/hooks/use-mobile.ts +0 -19
  124. package/src/components/editor/hooks/useReport.ts +0 -67
  125. package/src/components/editor/hooks/useResizeObservert.ts +0 -22
  126. package/src/components/editor/index.tsx +0 -39
  127. package/src/components/editor/lexical-on-change.tsx +0 -28
  128. package/src/components/editor/nodes/CollapsibleNode/CollapsibleContainerNode.ts +0 -92
  129. package/src/components/editor/nodes/CollapsibleNode/CollapsibleContentNode.ts +0 -65
  130. package/src/components/editor/nodes/CollapsibleNode/CollapsibleTitleNode.ts +0 -105
  131. package/src/components/editor/nodes/EquationNode/EquationComponent.tsx +0 -143
  132. package/src/components/editor/nodes/EquationNode/EquationNode.tsx +0 -170
  133. package/src/components/editor/nodes/ExcalidrawNode/ExcalidrawComponent.tsx +0 -228
  134. package/src/components/editor/nodes/ExcalidrawNode/ExcalidrawImage.tsx +0 -137
  135. package/src/components/editor/nodes/ExcalidrawNode/ImageResizer.tsx +0 -317
  136. package/src/components/editor/nodes/ExcalidrawNode/index.tsx +0 -204
  137. package/src/components/editor/nodes/FigmaNode/FigmaNode.tsx +0 -134
  138. package/src/components/editor/nodes/Hint/HintComponet.tsx +0 -221
  139. package/src/components/editor/nodes/ImageNode/index.tsx +0 -328
  140. package/src/components/editor/nodes/InlineImageNode/InlineImageComponent.tsx +0 -383
  141. package/src/components/editor/nodes/InlineImageNode/InlineImageNode.css +0 -94
  142. package/src/components/editor/nodes/InlineImageNode/InlineImageNode.tsx +0 -309
  143. package/src/components/editor/nodes/LayoutNode/LayoutContainerNode.ts +0 -146
  144. package/src/components/editor/nodes/LayoutNode/LayoutItemNode.ts +0 -79
  145. package/src/components/editor/nodes/PollNode/index.tsx +0 -204
  146. package/src/components/editor/nodes/TweetNode/index.tsx +0 -214
  147. package/src/components/editor/nodes/index.ts +0 -81
  148. package/src/components/editor/plugins/AutoEmbedPlugin/index.tsx +0 -350
  149. package/src/components/editor/plugins/AutoLinkPlugin/index.tsx +0 -56
  150. package/src/components/editor/plugins/CodeActionMenuPlugin/components/CopyButton.tsx +0 -70
  151. package/src/components/editor/plugins/CodeActionMenuPlugin/components/PrettierButton.tsx +0 -192
  152. package/src/components/editor/plugins/CodeActionMenuPlugin/index.tsx +0 -217
  153. package/src/components/editor/plugins/CodeActionMenuPlugin/utils.ts +0 -26
  154. package/src/components/editor/plugins/CodeHighlightPlugin/index.ts +0 -21
  155. package/src/components/editor/plugins/CollapsiblePlugin/Collapsible.css +0 -76
  156. package/src/components/editor/plugins/CollapsiblePlugin/index.ts +0 -228
  157. package/src/components/editor/plugins/DragDropPastePlugin/index.tsx +0 -44
  158. package/src/components/editor/plugins/DraggableBlockPlugin/index.tsx +0 -52
  159. package/src/components/editor/plugins/EquationsPlugin/index.tsx +0 -85
  160. package/src/components/editor/plugins/ExcalidrawPlugin/index.tsx +0 -98
  161. package/src/components/editor/plugins/FigmaPlugin/index.tsx +0 -42
  162. package/src/components/editor/plugins/FloatingLinkEditorPlugin/index.tsx +0 -445
  163. package/src/components/editor/plugins/FloatingTextFormatToolbarPlugin/index.tsx +0 -275
  164. package/src/components/editor/plugins/InlineImagePlugin/index.tsx +0 -351
  165. package/src/components/editor/plugins/LayoutPlugin/index.tsx +0 -238
  166. package/src/components/editor/plugins/LinkPlugin/index.tsx +0 -36
  167. package/src/components/editor/plugins/LinkWithMetaData/index.tsx +0 -271
  168. package/src/components/editor/plugins/MarkdownShortcutPlugin/index.tsx +0 -11
  169. package/src/components/editor/plugins/MarkdownTransformers/index.tsx +0 -304
  170. package/src/components/editor/plugins/PollPlugin/index.tsx +0 -49
  171. package/src/components/editor/plugins/ShortcutsPlugin/index.tsx +0 -180
  172. package/src/components/editor/plugins/ShortcutsPlugin/shortcuts.ts +0 -253
  173. package/src/components/editor/plugins/SlashCommand/index.tsx +0 -621
  174. package/src/components/editor/plugins/SpeechToTextPlugin/index.ts +0 -127
  175. package/src/components/editor/plugins/TabFocusPlugin/index.ts +0 -58
  176. package/src/components/editor/plugins/TableCellResizer/index.tsx +0 -438
  177. package/src/components/editor/plugins/TablePlugin/index.tsx +0 -99
  178. package/src/components/editor/plugins/ToolbarPlugin/index.tsx +0 -522
  179. package/src/components/editor/plugins/TwitterPlugin/index.ts +0 -35
  180. package/src/components/editor/plugins/YouTubeNode/index.tsx +0 -179
  181. package/src/components/editor/plugins/YouTubePlugin/index.ts +0 -41
  182. package/src/components/editor/themes/editor-theme.ts +0 -113
  183. package/src/components/editor/themes/theme.css +0 -377
  184. package/src/components/editor/utils/ai.ts +0 -291
  185. package/src/components/editor/utils/canUseDOM.ts +0 -12
  186. package/src/components/editor/utils/environment.ts +0 -50
  187. package/src/components/editor/utils/extract-data.ts +0 -166
  188. package/src/components/editor/utils/getAllLexicalChildren.ts +0 -13
  189. package/src/components/editor/utils/getDOMRangeRect.ts +0 -27
  190. package/src/components/editor/utils/getSelectedNode.ts +0 -27
  191. package/src/components/editor/utils/gif.ts +0 -29
  192. package/src/components/editor/utils/invariant.ts +0 -15
  193. package/src/components/editor/utils/setFloatingElemPosition.ts +0 -51
  194. package/src/components/editor/utils/setFloatingElemPositionForLinkEditor.ts +0 -40
  195. package/src/components/editor/utils/setNodePlaceholderFromSelection/getNodePlaceholder.ts +0 -51
  196. package/src/components/editor/utils/setNodePlaceholderFromSelection/setNodePlaceholderFromSelection.ts +0 -15
  197. package/src/components/editor/utils/setNodePlaceholderFromSelection/setPlaceholderOnSelection.ts +0 -114
  198. package/src/components/editor/utils/setNodePlaceholderFromSelection/styles.css +0 -6
  199. package/src/components/editor/utils/url.ts +0 -109
  200. package/src/components/editor/utils/useLayoutEffect.ts +0 -13
  201. package/src/components/providers/QueryProvider.tsx +0 -15
  202. package/src/components/providers/SharedHistoryContext.tsx +0 -28
  203. package/src/components/providers/ToolbarContext.tsx +0 -123
  204. package/src/components/providers/theme-provider.tsx +0 -11
  205. package/src/components/theme/ModeToggle.tsx +0 -40
  206. package/src/components/ui/FileInput.tsx +0 -40
  207. package/src/components/ui/Input.css +0 -32
  208. package/src/components/ui/Select.css +0 -42
  209. package/src/components/ui/Select.tsx +0 -36
  210. package/src/components/ui/TextInput.tsx +0 -48
  211. package/src/components/ui/ai/ai-button.tsx +0 -574
  212. package/src/components/ui/ai/border.tsx +0 -99
  213. package/src/components/ui/ai/placeholder-input-vanish.tsx +0 -282
  214. package/src/components/ui/button.tsx +0 -89
  215. package/src/components/ui/card.tsx +0 -76
  216. package/src/components/ui/checkbox.tsx +0 -30
  217. package/src/components/ui/command.tsx +0 -153
  218. package/src/components/ui/dialog/Dialog.css +0 -25
  219. package/src/components/ui/dialog/Dialog.tsx +0 -34
  220. package/src/components/ui/dialog.tsx +0 -122
  221. package/src/components/ui/drop-downs/background-color.tsx +0 -183
  222. package/src/components/ui/drop-downs/block-format.tsx +0 -159
  223. package/src/components/ui/drop-downs/code.tsx +0 -42
  224. package/src/components/ui/drop-downs/color.tsx +0 -177
  225. package/src/components/ui/drop-downs/font-size.tsx +0 -138
  226. package/src/components/ui/drop-downs/font.tsx +0 -155
  227. package/src/components/ui/drop-downs/index.tsx +0 -122
  228. package/src/components/ui/drop-downs/insert-node.tsx +0 -213
  229. package/src/components/ui/drop-downs/text-align.tsx +0 -123
  230. package/src/components/ui/drop-downs/text-format.tsx +0 -104
  231. package/src/components/ui/dropdown-menu.tsx +0 -201
  232. package/src/components/ui/equation/EquationEditor.css +0 -38
  233. package/src/components/ui/equation/EquationEditor.tsx +0 -56
  234. package/src/components/ui/equation/KatexEquationAlterer.css +0 -41
  235. package/src/components/ui/equation/KatexEquationAlterer.tsx +0 -83
  236. package/src/components/ui/equation/KatexRenderer.tsx +0 -66
  237. package/src/components/ui/excalidraw/ExcalidrawModal.css +0 -64
  238. package/src/components/ui/excalidraw/ExcalidrawModal.tsx +0 -234
  239. package/src/components/ui/excalidraw/Modal.css +0 -62
  240. package/src/components/ui/excalidraw/Modal.tsx +0 -110
  241. package/src/components/ui/hover-card.tsx +0 -29
  242. package/src/components/ui/image/error-image.tsx +0 -17
  243. package/src/components/ui/image/file-upload.tsx +0 -240
  244. package/src/components/ui/image/image-resizer.tsx +0 -297
  245. package/src/components/ui/image/image-toolbar.tsx +0 -264
  246. package/src/components/ui/image/index.tsx +0 -408
  247. package/src/components/ui/image/lazy-image.tsx +0 -68
  248. package/src/components/ui/image/lazy-video.tsx +0 -71
  249. package/src/components/ui/input.tsx +0 -22
  250. package/src/components/ui/models/custom-dialog.tsx +0 -320
  251. package/src/components/ui/models/insert-gif.tsx +0 -90
  252. package/src/components/ui/models/insert-image.tsx +0 -52
  253. package/src/components/ui/models/insert-poll.tsx +0 -29
  254. package/src/components/ui/models/insert-table.tsx +0 -62
  255. package/src/components/ui/models/use-model.tsx +0 -91
  256. package/src/components/ui/poll/poll-component.tsx +0 -304
  257. package/src/components/ui/popover.tsx +0 -33
  258. package/src/components/ui/progress.tsx +0 -28
  259. package/src/components/ui/scroll-area.tsx +0 -48
  260. package/src/components/ui/separator.tsx +0 -31
  261. package/src/components/ui/skeleton.tsx +0 -15
  262. package/src/components/ui/sonner.tsx +0 -31
  263. package/src/components/ui/stepper/step.tsx +0 -179
  264. package/src/components/ui/stepper/stepper.tsx +0 -89
  265. package/src/components/ui/textarea.tsx +0 -22
  266. package/src/components/ui/toggle.tsx +0 -71
  267. package/src/components/ui/tooltip.tsx +0 -32
  268. package/src/components/ui/write/text-format-floting-toolbar.tsx +0 -346
  269. package/src/lib/edgestore.ts +0 -9
  270. package/src/lib/pinecone-client.ts +0 -0
  271. package/src/lib/utils.ts +0 -6
  272. package/src/utils/docSerialization.ts +0 -77
  273. package/src/utils/emoji-list.ts +0 -16615
  274. package/src/utils/getDOMRangeRect.ts +0 -27
  275. package/src/utils/getThemeSelector.ts +0 -25
  276. package/src/utils/isMobileWidth.ts +0 -7
  277. package/src/utils/joinClasses.ts +0 -13
  278. package/src/utils/setFloatingElemPosition.ts +0 -74
  279. package/src/utils/setFloatingElemPositionForLinkEditor.ts +0 -46
  280. package/src/utils/swipe.ts +0 -127
  281. package/src/utils/url.ts +0 -38
  282. package/tsconfig.json +0 -27
@@ -1,62 +0,0 @@
1
- import { Button } from "@/components/ui/button";
2
- import { Input } from "@/components/ui/input";
3
- import { INSERT_TABLE_COMMAND } from "@lexical/table";
4
- import { LexicalEditor } from "lexical";
5
- import { JSX, useEffect, useState } from "react";
6
-
7
- export function InsertTable({
8
- activeEditor,
9
- onClose,
10
- }: {
11
- activeEditor: LexicalEditor;
12
- onClose: () => void;
13
- }): JSX.Element {
14
- const [rows, setRows] = useState("5");
15
- const [columns, setColumns] = useState("5");
16
- const [isDisabled, setIsDisabled] = useState(true);
17
-
18
- useEffect(() => {
19
- const row = Number(rows);
20
- const column = Number(columns);
21
- if (row && row > 0 && row <= 500 && column && column > 0 && column <= 50) {
22
- setIsDisabled(false);
23
- } else {
24
- setIsDisabled(true);
25
- }
26
- }, [rows, columns]);
27
-
28
- const onClick = () => {
29
- activeEditor.dispatchCommand(INSERT_TABLE_COMMAND, {
30
- columns,
31
- rows,
32
- });
33
-
34
- onClose();
35
- };
36
-
37
- return (
38
- <div className="flex flex-col gap-y-2 ">
39
- <Input
40
- placeholder={"# of rows (1-500)"}
41
- onChange={(e) => {
42
- setRows(e.target.value);
43
- }}
44
- value={rows}
45
- data-test-id="table-modal-rows"
46
- type="number"
47
- />
48
- <Input
49
- placeholder={"# of columns (1-50)"}
50
- onChange={(e) => {
51
- setColumns(e.target.value);
52
- }}
53
- value={columns}
54
- data-test-id="table-modal-columns"
55
- type="number"
56
- />
57
- <Button className="w-full" disabled={isDisabled} onClick={onClick}>
58
- Confirm
59
- </Button>
60
- </div>
61
- );
62
- }
@@ -1,91 +0,0 @@
1
- "use client";
2
-
3
- import { useCallback, useMemo, useState,JSX } from "react";
4
- import {
5
- Dialog,
6
- DialogDescription,
7
- DialogContent,
8
- DialogHeader,
9
- DialogTitle,
10
- DialogClose,
11
- } from "./custom-dialog";
12
-
13
- export default function useModal(): [
14
- JSX.Element | null,
15
- (
16
- title?: string | null,
17
- description?: string | null,
18
- getContent?: (onClose: () => void) => JSX.Element,
19
- isDilog?:boolean
20
-
21
- ) => void,
22
- boolean
23
- ] {
24
- const [isOpen, setIsOpen] = useState(false);
25
- const [modalContent, setModalContent] = useState<{
26
- title?: string | null;
27
- description?: string | null;
28
- content?: JSX.Element;
29
- isDilog?:boolean
30
- } | null>(null);
31
-
32
- const onClose = useCallback(() => {
33
- setIsOpen(false);
34
- setModalContent(null);
35
- }, []);
36
-
37
- const showModal = useCallback(
38
- (
39
- title?: string | null,
40
- description?: string | null,
41
- getContent?: (onClose: () => void) => JSX.Element,
42
- isDilog?:boolean
43
-
44
- ) => {
45
- setIsOpen(true);
46
- setModalContent({
47
- title,
48
- description,
49
- content: getContent ? getContent(onClose) : undefined,
50
- isDilog:isDilog
51
- });
52
- },
53
- [onClose]
54
- );
55
-
56
- const modal = useMemo(() => {
57
- if (!isOpen || !modalContent) {
58
- return null;
59
- }
60
-
61
-
62
- const { title, description, content,isDilog } = modalContent;
63
- if(!isDilog){
64
- return <>{content}</>
65
- }
66
- return (
67
- <Dialog open={isOpen} onOpenChange={setIsOpen}>
68
- <DialogContent className="w-full max-w-md bg-white p-6 dark:bg-zinc-900">
69
- {(title || description) && (
70
- <DialogHeader>
71
- {title && (
72
- <DialogTitle className="text-zinc-900 dark:text-white">
73
- {title}
74
- </DialogTitle>
75
- )}
76
- {description && (
77
- <DialogDescription className="text-zinc-600 dark:text-zinc-400">
78
- {description}
79
- </DialogDescription>
80
- )}
81
- </DialogHeader>
82
- )}
83
- <div className="mt-2">{content}</div>
84
- <DialogClose />
85
- </DialogContent>
86
- </Dialog>
87
- );
88
- }, [isOpen, modalContent]);
89
-
90
- return [modal, showModal, isOpen];
91
- }
@@ -1,304 +0,0 @@
1
- import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
2
- import { useLexicalNodeSelection } from "@lexical/react/useLexicalNodeSelection";
3
- import { mergeRegister } from "@lexical/utils";
4
- import {
5
- $getNodeByKey,
6
- $getSelection,
7
- $isNodeSelection,
8
- BaseSelection,
9
- CLICK_COMMAND,
10
- COMMAND_PRIORITY_LOW,
11
- KEY_BACKSPACE_COMMAND,
12
- KEY_DELETE_COMMAND,
13
- NodeKey,
14
- } from "lexical";
15
- import * as React from "react";
16
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
17
- import { Button } from "@/components/ui/button";
18
- import { Input } from "@/components/ui/input";
19
- import { Checkbox } from "@/components/ui/checkbox";
20
- import { X } from "lucide-react";
21
- import { useLexicalEditable } from "@lexical/react/useLexicalEditable";
22
- import { useMutation } from "@tanstack/react-query";
23
-
24
- import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card";
25
- import { $isPollNode, createPollOption, Option, Options, PollNode } from "../../editor/nodes/PollNode";
26
-
27
- function getTotalVotes(options: Options): number {
28
- return options.reduce((totalVotes, next) => {
29
- return totalVotes + next.votes.length;
30
- }, 0);
31
- }
32
-
33
- function PollOptionComponent({
34
- option,
35
- index,
36
- options,
37
- totalVotes,
38
- withPollNode,
39
- isEditable,
40
- }: {
41
- index: number;
42
- option: Option;
43
- options: Options;
44
- totalVotes: number;
45
- withPollNode: (
46
- cb: (pollNode: PollNode) => void,
47
- onSelect?: () => void
48
- ) => void;
49
- isEditable: boolean;
50
- }): React.JSX.Element {
51
- const userId = "1212312" // change it with user ID
52
- const checkboxRef = useRef(null);
53
- const votesArray = option.votes;
54
- const checkedIndex = votesArray.indexOf(userId!);
55
- const checked = checkedIndex !== -1;
56
- const votes = votesArray.length;
57
- const text = option.text;
58
- const [editor] = useLexicalComposerContext();
59
-
60
-
61
- const { mutate, isPending } = useMutation({
62
- mutationFn: async () => {
63
-
64
- try {
65
-
66
- await new Promise<void>((resolve) => {
67
- withPollNode((node) => {
68
- node.toggleVote(option, userId!);
69
- }, resolve);
70
- });
71
- return
72
- // const currentState = editor.getEditorState();
73
- // await updateContent(id, currentState.toJSON(), true);
74
- } catch (error) {
75
- await new Promise<void>((resolve) => {
76
- withPollNode((node) => {
77
- node.toggleVote(option, userId!);
78
- }, resolve);
79
- });
80
- throw error;
81
- }
82
- },
83
- });
84
-
85
- return (
86
- <div className="flex flex-row items-center justify-center gap-x-2">
87
- <div>
88
- <Checkbox
89
- disabled={!userId}
90
- ref={checkboxRef}
91
- onCheckedChange={() => {
92
- mutate();
93
- }}
94
- checked={checked}
95
- />
96
- </div>
97
- <div className="flex relative overflow-hidden">
98
- <div
99
- className="h-9 overflow-hidden bg-blue-500/30 dark:bg-blue-300/50 rounded-md absolute top-0 left-0 w-full py-2 transition-all duration-1000"
100
- style={{ width: `${votes === 0 ? 0 : (votes / totalVotes) * 100}%` }}
101
- />
102
- <span className=" absolute text-xs font-bold right-2 top-1">
103
- {votes > 0 && (votes === 1 ? "1 vote" : `${votes} votes`)}
104
- </span>
105
- <Input
106
- className=" overflow-hidden ring-0 outline-none bg-transparent"
107
- value={text}
108
- disabled={!isEditable}
109
- onChange={(e) => {
110
- const target = e.target;
111
- const value = target.value;
112
- const selectionStart = target.selectionStart;
113
- const selectionEnd = target.selectionEnd;
114
- withPollNode(
115
- (node) => {
116
- node.setOptionText(option, value);
117
- },
118
- () => {
119
- target.selectionStart = selectionStart;
120
- target.selectionEnd = selectionEnd;
121
- }
122
- );
123
- }}
124
- placeholder={`Option ${index + 1}`}
125
- />
126
- </div>
127
- {isEditable && (
128
- <Button
129
- size={"sm"}
130
- variant={"ghost"}
131
- disabled={options.length < 3 || !isEditable || isPending}
132
- aria-label="Remove"
133
- className="mx-1"
134
- onClick={() => {
135
- withPollNode((node) => {
136
- node.deleteOption(option);
137
- });
138
- }}
139
- >
140
- <X />
141
- </Button>
142
- )}
143
- </div>
144
- );
145
- }
146
-
147
- export default function PollComponent({
148
- question,
149
- options,
150
- nodeKey,
151
- }: {
152
- nodeKey: NodeKey;
153
- options: Options;
154
- question: string;
155
- }): React.JSX.Element {
156
- const [editor] = useLexicalComposerContext();
157
- const [internalOptions, setInternalOptions] = useState(options);
158
- const [version, setVersion] = useState(0);
159
- const totalVotes = useMemo(() => getTotalVotes(options), [options, version]);
160
- const [isSelected, setSelected, clearSelection] =
161
- useLexicalNodeSelection(nodeKey);
162
- const [selection, setSelection] = useState<BaseSelection | null>(null);
163
- const ref = useRef(null);
164
- const isEditable = useLexicalEditable();
165
-
166
- const $onDelete = useCallback(
167
- (payload: KeyboardEvent) => {
168
- const deleteSelection = $getSelection();
169
- if (isSelected && $isNodeSelection(deleteSelection)) {
170
- const event: KeyboardEvent = payload;
171
- event.preventDefault();
172
- deleteSelection.getNodes().forEach((node) => {
173
- if ($isPollNode(node)) {
174
- node.remove();
175
- }
176
- });
177
- }
178
- return false;
179
- },
180
- [isSelected]
181
- );
182
-
183
- useEffect(() => {
184
- return editor.registerUpdateListener(({ editorState }) => {
185
- editorState.read(() => {
186
- const node = $getNodeByKey(nodeKey);
187
- if ($isPollNode(node)) {
188
- setInternalOptions([...node.__options]);
189
- setVersion((v) => v + 1);
190
- }
191
- });
192
- });
193
- }, [editor, nodeKey]);
194
-
195
- useEffect(() => {
196
- return mergeRegister(
197
- editor.registerUpdateListener(({ editorState }) => {
198
- setSelection(editorState.read(() => $getSelection()));
199
- }),
200
- editor.registerCommand<MouseEvent>(
201
- CLICK_COMMAND,
202
- (payload) => {
203
- const event = payload;
204
-
205
- if (event.target === ref.current) {
206
- if (!event.shiftKey) {
207
- clearSelection();
208
- }
209
- setSelected(!isSelected);
210
- return true;
211
- }
212
-
213
- return false;
214
- },
215
- COMMAND_PRIORITY_LOW
216
- ),
217
- editor.registerCommand(
218
- KEY_DELETE_COMMAND,
219
- $onDelete,
220
- COMMAND_PRIORITY_LOW
221
- ),
222
- editor.registerCommand(
223
- KEY_BACKSPACE_COMMAND,
224
- $onDelete,
225
- COMMAND_PRIORITY_LOW
226
- )
227
- );
228
- }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected]);
229
- const withPollNode = (
230
- cb: (node: PollNode) => void,
231
- onUpdate?: () => void
232
- ): Promise<void> => {
233
- return new Promise((resolve) => {
234
- editor.update(
235
- () => {
236
- const node = $getNodeByKey(nodeKey);
237
- if ($isPollNode(node)) {
238
- cb(node);
239
- node.markDirty();
240
- }
241
- },
242
- {
243
- onUpdate: () => {
244
- onUpdate?.();
245
- resolve();
246
- },
247
- tag: "history-merge",
248
- }
249
- );
250
- });
251
- };
252
-
253
- const addOption = () => {
254
- withPollNode((node) => {
255
- node.addOption(createPollOption());
256
- });
257
- };
258
-
259
- const handleQuestionChange = useCallback(
260
- (event: any) => {
261
- const newQuestion = event.target.value || "";
262
- withPollNode((node) => {
263
- node.setQuestion(newQuestion);
264
- });
265
- },
266
- [withPollNode]
267
- );
268
- return (
269
- <Card>
270
- <CardHeader className="text-center">
271
- <CardTitle
272
- suppressContentEditableWarning
273
- onChange={handleQuestionChange}
274
- contentEditable={isEditable}
275
- >
276
- {question}
277
- </CardTitle>
278
- </CardHeader>
279
- <CardContent className=" space-y-2">
280
- {options.map((option, index) => {
281
- const key = `${option.uid}-${option.votes.length}`;
282
- return (
283
- <PollOptionComponent
284
- key={key}
285
- withPollNode={withPollNode}
286
- option={option}
287
- index={index}
288
- options={options}
289
- totalVotes={totalVotes}
290
- isEditable={isEditable}
291
- />
292
- );
293
- })}
294
- </CardContent>
295
- {isEditable && (
296
- <CardFooter className="flex items-center justify-center">
297
- <Button disabled={!isEditable} onClick={addOption}>
298
- Add Option
299
- </Button>
300
- </CardFooter>
301
- )}
302
- </Card>
303
- );
304
- }
@@ -1,33 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as PopoverPrimitive from "@radix-ui/react-popover"
5
-
6
- import { cn } from "@/lib/utils"
7
-
8
- const Popover = PopoverPrimitive.Root
9
-
10
- const PopoverTrigger = PopoverPrimitive.Trigger
11
-
12
- const PopoverAnchor = PopoverPrimitive.Anchor
13
-
14
- const PopoverContent = React.forwardRef<
15
- React.ElementRef<typeof PopoverPrimitive.Content>,
16
- React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>
17
- >(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
18
- <PopoverPrimitive.Portal>
19
- <PopoverPrimitive.Content
20
- ref={ref}
21
- align={align}
22
- sideOffset={sideOffset}
23
- className={cn(
24
- "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=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",
25
- className
26
- )}
27
- {...props}
28
- />
29
- </PopoverPrimitive.Portal>
30
- ))
31
- PopoverContent.displayName = PopoverPrimitive.Content.displayName
32
-
33
- export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }
@@ -1,28 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as ProgressPrimitive from "@radix-ui/react-progress"
5
-
6
- import { cn } from "@/lib/utils"
7
-
8
- const Progress = React.forwardRef<
9
- React.ElementRef<typeof ProgressPrimitive.Root>,
10
- React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>
11
- >(({ className, value, ...props }, ref) => (
12
- <ProgressPrimitive.Root
13
- ref={ref}
14
- className={cn(
15
- "relative h-2 w-full overflow-hidden rounded-full bg-primary/20",
16
- className
17
- )}
18
- {...props}
19
- >
20
- <ProgressPrimitive.Indicator
21
- className="h-full w-full flex-1 bg-primary transition-all"
22
- style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
23
- />
24
- </ProgressPrimitive.Root>
25
- ))
26
- Progress.displayName = ProgressPrimitive.Root.displayName
27
-
28
- export { Progress }
@@ -1,48 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"
5
-
6
- import { cn } from "@/lib/utils"
7
-
8
- const ScrollArea = React.forwardRef<
9
- React.ElementRef<typeof ScrollAreaPrimitive.Root>,
10
- React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>
11
- >(({ className, children, ...props }, ref) => (
12
- <ScrollAreaPrimitive.Root
13
- ref={ref}
14
- className={cn("relative overflow-hidden", className)}
15
- {...props}
16
- >
17
- <ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]">
18
- {children}
19
- </ScrollAreaPrimitive.Viewport>
20
- <ScrollBar />
21
- <ScrollAreaPrimitive.Corner />
22
- </ScrollAreaPrimitive.Root>
23
- ))
24
- ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName
25
-
26
- const ScrollBar = React.forwardRef<
27
- React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,
28
- React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>
29
- >(({ className, orientation = "vertical", ...props }, ref) => (
30
- <ScrollAreaPrimitive.ScrollAreaScrollbar
31
- ref={ref}
32
- orientation={orientation}
33
- className={cn(
34
- "flex touch-none select-none transition-colors",
35
- orientation === "vertical" &&
36
- "h-full w-2.5 border-l border-l-transparent p-[1px]",
37
- orientation === "horizontal" &&
38
- "h-2.5 flex-col border-t border-t-transparent p-[1px]",
39
- className
40
- )}
41
- {...props}
42
- >
43
- <ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-border" />
44
- </ScrollAreaPrimitive.ScrollAreaScrollbar>
45
- ))
46
- ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName
47
-
48
- export { ScrollArea, ScrollBar }
@@ -1,31 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import * as SeparatorPrimitive from "@radix-ui/react-separator"
5
-
6
- import { cn } from "@/lib/utils"
7
-
8
- const Separator = React.forwardRef<
9
- React.ElementRef<typeof SeparatorPrimitive.Root>,
10
- React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>
11
- >(
12
- (
13
- { className, orientation = "horizontal", decorative = true, ...props },
14
- ref
15
- ) => (
16
- <SeparatorPrimitive.Root
17
- ref={ref}
18
- decorative={decorative}
19
- orientation={orientation}
20
- className={cn(
21
- "shrink-0 bg-border",
22
- orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
23
- className
24
- )}
25
- {...props}
26
- />
27
- )
28
- )
29
- Separator.displayName = SeparatorPrimitive.Root.displayName
30
-
31
- export { Separator }
@@ -1,15 +0,0 @@
1
- import { cn } from "@/lib/utils"
2
-
3
- function Skeleton({
4
- className,
5
- ...props
6
- }: React.HTMLAttributes<HTMLDivElement>) {
7
- return (
8
- <div
9
- className={cn("animate-pulse rounded-md bg-primary/10", className)}
10
- {...props}
11
- />
12
- )
13
- }
14
-
15
- export { Skeleton }
@@ -1,31 +0,0 @@
1
- "use client"
2
-
3
- import { useTheme } from "next-themes"
4
- import { Toaster as Sonner } from "sonner"
5
-
6
- type ToasterProps = React.ComponentProps<typeof Sonner>
7
-
8
- const Toaster = ({ ...props }: ToasterProps) => {
9
- const { theme = "system" } = useTheme()
10
-
11
- return (
12
- <Sonner
13
- theme={theme as ToasterProps["theme"]}
14
- className="toaster group"
15
- toastOptions={{
16
- classNames: {
17
- toast:
18
- "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
19
- description: "group-[.toast]:text-muted-foreground",
20
- actionButton:
21
- "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
22
- cancelButton:
23
- "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground",
24
- },
25
- }}
26
- {...props}
27
- />
28
- )
29
- }
30
-
31
- export { Toaster }