@soul-refiner/design-system 0.0.9 → 0.0.11

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 (267) hide show
  1. package/dist/custom.d.ts +4 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/{design-system.umd.cjs → index.umd.cjs} +1 -1
  4. package/dist/src/actions/Button/Button.module.scss +205 -0
  5. package/dist/src/actions/Button/Button.spec.js +56 -0
  6. package/dist/src/actions/Button/Button.tsx +143 -0
  7. package/dist/src/actions/Button/index.ts +1 -0
  8. package/dist/src/actions/Dropdown/Dropdown.module.scss +77 -0
  9. package/dist/src/actions/Dropdown/Dropdown.spec.js +149 -0
  10. package/dist/src/actions/Dropdown/Dropdown.tsx +224 -0
  11. package/dist/src/actions/Dropdown/index.ts +6 -0
  12. package/dist/src/actions/Dropzone/Dropzone.module.scss +48 -0
  13. package/dist/src/actions/Dropzone/Dropzone.spec.js +60 -0
  14. package/dist/src/actions/Dropzone/Dropzone.tsx +191 -0
  15. package/dist/src/actions/Dropzone/index.ts +1 -0
  16. package/dist/src/actions/Rate/Rate.module.scss +17 -0
  17. package/dist/src/actions/Rate/Rate.tsx +53 -0
  18. package/dist/src/actions/Rate/index.ts +1 -0
  19. package/dist/src/actions/Switch/Switch.module.scss +35 -0
  20. package/dist/src/actions/Switch/Switch.spec.js +31 -0
  21. package/dist/src/actions/Switch/Switch.tsx +34 -0
  22. package/dist/src/actions/Switch/index.ts +1 -0
  23. package/dist/src/actions/index.ts +5 -0
  24. package/dist/src/cards/CourseCard/CourseCard.module.scss +219 -0
  25. package/dist/src/cards/CourseCard/CourseCard.spec.js +60 -0
  26. package/dist/src/cards/CourseCard/CourseCard.tsx +145 -0
  27. package/dist/src/cards/CourseCard/index.ts +1 -0
  28. package/dist/src/cards/EpisodeCard/EpisodeCard.module.scss +69 -0
  29. package/dist/src/cards/EpisodeCard/EpisodeCard.tsx +53 -0
  30. package/dist/src/cards/EpisodeCard/index.ts +1 -0
  31. package/dist/src/cards/FeatureCard/FeatureCard.module.scss +116 -0
  32. package/dist/src/cards/FeatureCard/FeatureCard.spec.js +70 -0
  33. package/dist/src/cards/FeatureCard/FeatureCard.tsx +123 -0
  34. package/dist/src/cards/FeatureCard/index.ts +1 -0
  35. package/dist/src/cards/index.ts +3 -0
  36. package/dist/src/data/Bar/Bar.module.scss +105 -0
  37. package/dist/src/data/Bar/Bar.tsx +161 -0
  38. package/dist/src/data/Bar/index.ts +1 -0
  39. package/dist/src/data/Line/Line.module.scss +102 -0
  40. package/dist/src/data/Line/Line.tsx +162 -0
  41. package/dist/src/data/Line/index.ts +1 -0
  42. package/dist/src/data/Pie/Pie.module.scss +56 -0
  43. package/dist/src/data/Pie/Pie.spec.js +72 -0
  44. package/dist/src/data/Pie/Pie.tsx +111 -0
  45. package/dist/src/data/Pie/index.ts +1 -0
  46. package/dist/src/data/index.ts +3 -0
  47. package/dist/src/editor/Editor.module.scss +125 -0
  48. package/dist/src/editor/Editor.tsx +327 -0
  49. package/dist/src/editor/common/elements.ts +50 -0
  50. package/dist/src/editor/common/index.ts +2 -0
  51. package/dist/src/editor/common/marks.ts +27 -0
  52. package/dist/src/editor/components/MediaDrawer/MediaDrawer.module.scss +316 -0
  53. package/dist/src/editor/components/MediaDrawer/MediaDrawer.tsx +457 -0
  54. package/dist/src/editor/components/MediaDrawer/index.ts +1 -0
  55. package/dist/src/editor/components/index.ts +1 -0
  56. package/dist/src/editor/config/default.ts +213 -0
  57. package/dist/src/editor/config/index.ts +2 -0
  58. package/dist/src/editor/config/props.ts +9 -0
  59. package/dist/src/editor/index.ts +2 -0
  60. package/dist/src/editor/plateUI.ts +82 -0
  61. package/dist/src/editor/plugins/blocks.tsx +71 -0
  62. package/dist/src/editor/plugins/custom/assets/DefaultThumbnail.tsx +57 -0
  63. package/dist/src/editor/plugins/custom/assets/index.ts +1 -0
  64. package/dist/src/editor/plugins/custom/buttons.tsx +289 -0
  65. package/dist/src/editor/plugins/custom/example.tsx +64 -0
  66. package/dist/src/editor/plugins/custom/exitBreak.ts +41 -0
  67. package/dist/src/editor/plugins/custom/footnote.tsx +185 -0
  68. package/dist/src/editor/plugins/custom/index.ts +14 -0
  69. package/dist/src/editor/plugins/custom/paywall.tsx +156 -0
  70. package/dist/src/editor/plugins/custom/qa.tsx +390 -0
  71. package/dist/src/editor/plugins/custom/resetBlockType.ts +29 -0
  72. package/dist/src/editor/plugins/custom/selectOnBackspace.ts +7 -0
  73. package/dist/src/editor/plugins/custom/softBreak.ts +20 -0
  74. package/dist/src/editor/plugins/custom/styles/Button.module.scss +51 -0
  75. package/dist/src/editor/plugins/custom/styles/Footnote.module.scss +58 -0
  76. package/dist/src/editor/plugins/custom/styles/Paywall.module.scss +67 -0
  77. package/dist/src/editor/plugins/custom/styles/QA.module.scss +140 -0
  78. package/dist/src/editor/plugins/custom/styles/Video.module.scss +79 -0
  79. package/dist/src/editor/plugins/custom/video.tsx +163 -0
  80. package/dist/src/editor/plugins/index.ts +18 -0
  81. package/dist/src/editor/plugins/inline.ts +46 -0
  82. package/dist/src/editor/plugins/marks.ts +25 -0
  83. package/dist/src/editor/plugins/utils.ts +22 -0
  84. package/dist/src/feedback/Chip/Chip.module.scss +23 -0
  85. package/dist/src/feedback/Chip/Chip.tsx +58 -0
  86. package/dist/src/feedback/Chip/index.ts +1 -0
  87. package/dist/src/feedback/Loader/Loader.module.scss +18 -0
  88. package/dist/src/feedback/Loader/Loader.spec.js +18 -0
  89. package/dist/src/feedback/Loader/Loader.tsx +53 -0
  90. package/dist/src/feedback/Loader/index.ts +1 -0
  91. package/dist/src/feedback/ProgressBar/ProgressBar.module.scss +13 -0
  92. package/dist/src/feedback/ProgressBar/ProgressBar.tsx +32 -0
  93. package/dist/src/feedback/ProgressBar/index.ts +1 -0
  94. package/dist/src/feedback/Toast/Toast.module.scss +44 -0
  95. package/dist/src/feedback/Toast/Toast.tsx +76 -0
  96. package/dist/src/feedback/Toast/index.ts +1 -0
  97. package/dist/src/feedback/Tooltip/Tooltip.module.scss +47 -0
  98. package/dist/src/feedback/Tooltip/Tooltip.tsx +10 -0
  99. package/dist/src/feedback/Tooltip/index.ts +1 -0
  100. package/dist/src/feedback/index.ts +5 -0
  101. package/dist/src/global.d.ts +6 -0
  102. package/dist/src/iconography/Avatar/Avatar.module.scss +90 -0
  103. package/dist/src/iconography/Avatar/Avatar.spec.js +75 -0
  104. package/dist/src/iconography/Avatar/Avatar.tsx +96 -0
  105. package/dist/src/iconography/Avatar/DefaultIcon.svg +4 -0
  106. package/dist/src/iconography/Avatar/DefaultIcon.tsx +12 -0
  107. package/dist/src/iconography/Avatar/iconHelpers.tsx +186 -0
  108. package/dist/src/iconography/Avatar/index.ts +1 -0
  109. package/dist/src/iconography/ColoredIcon/ColoredIcon.module.scss +40 -0
  110. package/dist/src/iconography/ColoredIcon/ColoredIcon.tsx +30 -0
  111. package/dist/src/iconography/ColoredIcon/index.ts +5 -0
  112. package/dist/src/iconography/DevicePreview/DevicePreview.module.scss +143 -0
  113. package/dist/src/iconography/DevicePreview/DevicePreview.tsx +592 -0
  114. package/dist/src/iconography/DevicePreview/index.ts +1 -0
  115. package/dist/src/iconography/IconHeader/IconHeader.module.scss +42 -0
  116. package/dist/src/iconography/IconHeader/IconHeader.tsx +42 -0
  117. package/dist/src/iconography/IconHeader/index.ts +1 -0
  118. package/dist/src/iconography/StarRating/StarRating.tsx +99 -0
  119. package/dist/src/iconography/StarRating/index.ts +1 -0
  120. package/dist/src/iconography/index.ts +5 -0
  121. package/dist/src/implementations/BodyContent/BodyContent.module.scss +38 -0
  122. package/dist/src/implementations/BodyContent/BodyContent.tsx +78 -0
  123. package/dist/src/implementations/BodyContent/index.ts +2 -0
  124. package/dist/src/implementations/JoinGroupModal/JoinGroupModal.module.scss +83 -0
  125. package/dist/src/implementations/JoinGroupModal/JoinGroupModal.tsx +176 -0
  126. package/dist/src/implementations/JoinGroupModal/index.ts +1 -0
  127. package/dist/src/implementations/index.ts +2 -0
  128. package/dist/src/index.ts +149 -0
  129. package/dist/src/inputs/CalendarInput/CalendarInput.module.scss +38 -0
  130. package/dist/src/inputs/CalendarInput/CalendarInput.spec.js +19 -0
  131. package/dist/src/inputs/CalendarInput/CalendarInput.tsx +29 -0
  132. package/dist/src/inputs/CalendarInput/index.ts +1 -0
  133. package/dist/src/inputs/CheckboxInput/CheckboxInput.module.scss +23 -0
  134. package/dist/src/inputs/CheckboxInput/CheckboxInput.tsx +39 -0
  135. package/dist/src/inputs/CheckboxInput/index.ts +1 -0
  136. package/dist/src/inputs/FeedInput/FeedInput.module.scss +48 -0
  137. package/dist/src/inputs/FeedInput/FeedInput.spec.js +16 -0
  138. package/dist/src/inputs/FeedInput/FeedInput.tsx +197 -0
  139. package/dist/src/inputs/FeedInput/index.ts +1 -0
  140. package/dist/src/inputs/InboxInput/InboxInput.module.scss +48 -0
  141. package/dist/src/inputs/InboxInput/InboxInput.spec.js +19 -0
  142. package/dist/src/inputs/InboxInput/InboxInput.tsx +97 -0
  143. package/dist/src/inputs/InboxInput/index.ts +1 -0
  144. package/dist/src/inputs/PostInput/PostInput.module.scss +49 -0
  145. package/dist/src/inputs/PostInput/PostInput.spec.js +19 -0
  146. package/dist/src/inputs/PostInput/PostInput.tsx +54 -0
  147. package/dist/src/inputs/PostInput/index.ts +1 -0
  148. package/dist/src/inputs/RadioInput/RadioInput.module.scss +68 -0
  149. package/dist/src/inputs/RadioInput/RadioInput.tsx +55 -0
  150. package/dist/src/inputs/RadioInput/index.ts +1 -0
  151. package/dist/src/inputs/SearchInput/SearchInput.module.scss +40 -0
  152. package/dist/src/inputs/SearchInput/SearchInput.tsx +61 -0
  153. package/dist/src/inputs/SearchInput/index.ts +1 -0
  154. package/dist/src/inputs/SelectInput/SelectInput.module.scss +66 -0
  155. package/dist/src/inputs/SelectInput/SelectInput.tsx +145 -0
  156. package/dist/src/inputs/SelectInput/index.ts +1 -0
  157. package/dist/src/inputs/TagInput/TagInput.module.scss +75 -0
  158. package/dist/src/inputs/TagInput/TagInput.tsx +115 -0
  159. package/dist/src/inputs/TagInput/index.ts +1 -0
  160. package/dist/src/inputs/TextInput/TextInput.module.scss +35 -0
  161. package/dist/src/inputs/TextInput/TextInput.tsx +46 -0
  162. package/dist/src/inputs/TextInput/index.ts +1 -0
  163. package/dist/src/inputs/index.ts +10 -0
  164. package/dist/src/lists/ContactDetails/ContactDetails.module.scss +70 -0
  165. package/dist/src/lists/ContactDetails/ContactDetails.spec.js +69 -0
  166. package/dist/src/lists/ContactDetails/ContactDetails.tsx +185 -0
  167. package/dist/src/lists/ContactDetails/index.ts +1 -0
  168. package/dist/src/lists/index.ts +1 -0
  169. package/dist/src/navigation/Breadcrumbs/Breadcrumbs.module.scss +18 -0
  170. package/dist/src/navigation/Breadcrumbs/Breadcrumbs.spec.js +38 -0
  171. package/dist/src/navigation/Breadcrumbs/Breadcrumbs.tsx +43 -0
  172. package/dist/src/navigation/Breadcrumbs/index.ts +1 -0
  173. package/dist/src/navigation/Drawer/Drawer.module.scss +104 -0
  174. package/dist/src/navigation/Drawer/Drawer.tsx +177 -0
  175. package/dist/src/navigation/Drawer/index.ts +1 -0
  176. package/dist/src/navigation/EditorBar/EditorBar.module.scss +118 -0
  177. package/dist/src/navigation/EditorBar/EditorBar.tsx +416 -0
  178. package/dist/src/navigation/EditorBar/components/AlignmentDropdown/AlignmentDropdown.tsx +106 -0
  179. package/dist/src/navigation/EditorBar/components/AlignmentDropdown/index.ts +1 -0
  180. package/dist/src/navigation/EditorBar/components/ButtonModal/ButtonModal.module.scss +85 -0
  181. package/dist/src/navigation/EditorBar/components/ButtonModal/ButtonModal.tsx +314 -0
  182. package/dist/src/navigation/EditorBar/components/ButtonModal/assets/Comment.tsx +28 -0
  183. package/dist/src/navigation/EditorBar/components/ButtonModal/assets/GiftSubscription.tsx +28 -0
  184. package/dist/src/navigation/EditorBar/components/ButtonModal/assets/Link.tsx +28 -0
  185. package/dist/src/navigation/EditorBar/components/ButtonModal/assets/Share.tsx +28 -0
  186. package/dist/src/navigation/EditorBar/components/ButtonModal/assets/ShareCommunity.tsx +42 -0
  187. package/dist/src/navigation/EditorBar/components/ButtonModal/assets/Signup.tsx +68 -0
  188. package/dist/src/navigation/EditorBar/components/ButtonModal/assets/Special.tsx +24 -0
  189. package/dist/src/navigation/EditorBar/components/ButtonModal/assets/Subscribe.tsx +28 -0
  190. package/dist/src/navigation/EditorBar/components/ButtonModal/assets/index.ts +8 -0
  191. package/dist/src/navigation/EditorBar/components/ButtonModal/index.ts +1 -0
  192. package/dist/src/navigation/EditorBar/components/FontDropdown/FontDropdown.module.scss +16 -0
  193. package/dist/src/navigation/EditorBar/components/FontDropdown/FontDropdown.tsx +137 -0
  194. package/dist/src/navigation/EditorBar/components/FontDropdown/index.ts +1 -0
  195. package/dist/src/navigation/EditorBar/components/MoreDropdown/MoreDropdown.module.scss +43 -0
  196. package/dist/src/navigation/EditorBar/components/MoreDropdown/MoreDropdown.tsx +124 -0
  197. package/dist/src/navigation/EditorBar/components/MoreDropdown/index.ts +1 -0
  198. package/dist/src/navigation/EditorBar/components/OutlineDropdown/OutlineDropdown.module.scss +21 -0
  199. package/dist/src/navigation/EditorBar/components/OutlineDropdown/OutlineDropdown.tsx +37 -0
  200. package/dist/src/navigation/EditorBar/components/OutlineDropdown/index.ts +1 -0
  201. package/dist/src/navigation/EditorBar/components/TextTypeDropdown/TextTypeDropdown.module.scss +51 -0
  202. package/dist/src/navigation/EditorBar/components/TextTypeDropdown/TextTypeDropdown.tsx +80 -0
  203. package/dist/src/navigation/EditorBar/components/TextTypeDropdown/index.ts +1 -0
  204. package/dist/src/navigation/EditorBar/components/VideoModal/VideoModal.module.scss +150 -0
  205. package/dist/src/navigation/EditorBar/components/VideoModal/VideoModal.tsx +163 -0
  206. package/dist/src/navigation/EditorBar/components/VideoModal/index.ts +1 -0
  207. package/dist/src/navigation/EditorBar/components/index.ts +7 -0
  208. package/dist/src/navigation/EditorBar/index.ts +1 -0
  209. package/dist/src/navigation/MenuTabs/MenuTabs.module.scss +34 -0
  210. package/dist/src/navigation/MenuTabs/MenuTabs.spec.js +36 -0
  211. package/dist/src/navigation/MenuTabs/MenuTabs.tsx +52 -0
  212. package/dist/src/navigation/MenuTabs/index.ts +1 -0
  213. package/dist/src/navigation/Navigation/Navigation.module.scss +92 -0
  214. package/dist/src/navigation/Navigation/Navigation.spec.js +144 -0
  215. package/dist/src/navigation/Navigation/Navigation.tsx +111 -0
  216. package/dist/src/navigation/Navigation/SubNavigation.module.scss +255 -0
  217. package/dist/src/navigation/Navigation/SubNavigation.spec.js +112 -0
  218. package/dist/src/navigation/Navigation/SubNavigation.tsx +443 -0
  219. package/dist/src/navigation/Navigation/index.ts +15 -0
  220. package/dist/src/navigation/Pagination/Pagination.module.scss +49 -0
  221. package/dist/src/navigation/Pagination/Pagination.tsx +115 -0
  222. package/dist/src/navigation/Pagination/index.ts +1 -0
  223. package/dist/src/navigation/index.ts +21 -0
  224. package/dist/src/surfaces/Comment/Comment.module.scss +106 -0
  225. package/dist/src/surfaces/Comment/Comment.spec.js +105 -0
  226. package/dist/src/surfaces/Comment/Comment.tsx +157 -0
  227. package/dist/src/surfaces/Comment/index.ts +1 -0
  228. package/dist/src/surfaces/Faq/Faq.module.scss +91 -0
  229. package/dist/src/surfaces/Faq/Faq.spec.js +38 -0
  230. package/dist/src/surfaces/Faq/Faq.tsx +156 -0
  231. package/dist/src/surfaces/Faq/index.ts +1 -0
  232. package/dist/src/surfaces/Message/Message.module.scss +37 -0
  233. package/dist/src/surfaces/Message/Message.spec.js +47 -0
  234. package/dist/src/surfaces/Message/Message.tsx +54 -0
  235. package/dist/src/surfaces/Message/index.ts +1 -0
  236. package/dist/src/surfaces/Modal/Modal.module.scss +52 -0
  237. package/dist/src/surfaces/Modal/Modal.spec.js +38 -0
  238. package/dist/src/surfaces/Modal/Modal.tsx +131 -0
  239. package/dist/src/surfaces/Modal/index.ts +5 -0
  240. package/dist/src/surfaces/Plan/Plan.module.scss +79 -0
  241. package/dist/src/surfaces/Plan/Plan.tsx +75 -0
  242. package/dist/src/surfaces/Plan/index.ts +1 -0
  243. package/dist/src/surfaces/Post/Post.module.scss +46 -0
  244. package/dist/src/surfaces/Post/Post.spec.js +103 -0
  245. package/dist/src/surfaces/Post/Post.tsx +185 -0
  246. package/dist/src/surfaces/Post/index.ts +1 -0
  247. package/dist/src/surfaces/Post/postHelpers.ts +20 -0
  248. package/dist/src/surfaces/ProfileHeader/ProfileHeader.module.scss +202 -0
  249. package/dist/src/surfaces/ProfileHeader/ProfileHeader.tsx +103 -0
  250. package/dist/src/surfaces/ProfileHeader/index.ts +1 -0
  251. package/dist/src/surfaces/RatingsOverview/RatingsOverview.module.scss +54 -0
  252. package/dist/src/surfaces/RatingsOverview/RatingsOverview.tsx +69 -0
  253. package/dist/src/surfaces/RatingsOverview/index.ts +1 -0
  254. package/dist/src/surfaces/Review/Review.module.scss +73 -0
  255. package/dist/src/surfaces/Review/Review.tsx +88 -0
  256. package/dist/src/surfaces/Review/index.ts +1 -0
  257. package/dist/src/surfaces/index.ts +9 -0
  258. package/dist/src/tables/Filter/Filter.module.scss +34 -0
  259. package/dist/src/tables/Filter/Filter.tsx +30 -0
  260. package/dist/src/tables/Filter/index.ts +1 -0
  261. package/dist/src/tables/Table/Table.module.scss +126 -0
  262. package/dist/src/tables/Table/Table.spec.js +113 -0
  263. package/dist/src/tables/Table/Table.tsx +251 -0
  264. package/dist/src/tables/Table/index.ts +7 -0
  265. package/dist/src/tables/index.ts +7 -0
  266. package/package.json +3 -2
  267. /package/dist/{design-system.js → index.js} +0 -0
@@ -0,0 +1,457 @@
1
+ import React from "react";
2
+ import {
3
+ findNodePath,
4
+ replaceNodeChildren,
5
+ removeNodes,
6
+ setNodes,
7
+ TElement,
8
+ usePlateEditorRef,
9
+ } from "@udecode/plate";
10
+ import {
11
+ ClosedCaptions,
12
+ Details,
13
+ Image,
14
+ Upload,
15
+ VideoPlay,
16
+ } from "@soul-refiner/icons/src";
17
+ import { secondsToTimeString } from "@soul-refiner/utils/src";
18
+ import { Media } from "@soul-refiner/models";
19
+
20
+ import { Button, Dropzone, Switch } from "../../../actions";
21
+ import { EditorContext } from "../../Editor";
22
+ import { TextInput } from "../../../inputs";
23
+ import { Drawer } from "../../../navigation";
24
+ import { Modal } from "../../../surfaces";
25
+
26
+ import styles from "./MediaDrawer.module.scss";
27
+ import { ELEMENT_VIDEO } from "../../common";
28
+
29
+ export interface MediaDrawerProps {
30
+ element: TElement;
31
+ open: boolean;
32
+ toggle: () => void;
33
+ }
34
+
35
+ export const MediaDrawer = ({ element, open, toggle }: MediaDrawerProps) => {
36
+ const {
37
+ availableVideos,
38
+ handleChangeVideo,
39
+ handleDeleteVideo,
40
+ handleUploadImage,
41
+ handleUploadVideo,
42
+ } = React.useContext(EditorContext);
43
+ const { children, type: __, ...spreadVideo } = element;
44
+ const text = children[0].text as string;
45
+ const video = spreadVideo as unknown as Media;
46
+ const editorRef = usePlateEditorRef("main");
47
+ const [mediaTab, setMediaTab] = React.useState("Upload");
48
+ const [title, setTitle] = React.useState(video.title);
49
+ const [synopsis, setSynopsis] = React.useState(video.synopsis);
50
+ const [videoToBeChanged, setVideoToBeChanged] = React.useState<null | Media>(
51
+ null
52
+ );
53
+ const [deleteText, setDeleteText] = React.useState("");
54
+
55
+ const path = findNodePath(editorRef, element);
56
+
57
+ React.useEffect(() => {
58
+ if (title !== text && typeof text === "string") setTitle(text);
59
+ }, [text]);
60
+
61
+ if (!video) return null;
62
+
63
+ const handleTitle = (event: React.FormEvent) => {
64
+ const value = (event.target as HTMLTextAreaElement).value;
65
+ if (path) {
66
+ replaceNodeChildren(editorRef, {
67
+ at: path,
68
+ nodes: {
69
+ text: value,
70
+ },
71
+ });
72
+ setNodes(
73
+ editorRef,
74
+ {
75
+ title,
76
+ },
77
+ {
78
+ at: path,
79
+ }
80
+ );
81
+ setTitle(value);
82
+ }
83
+ };
84
+
85
+ const handleSynopsis = (event: React.FormEvent) => {
86
+ const value = (event.target as HTMLTextAreaElement).value;
87
+ setNodes(
88
+ editorRef,
89
+ {
90
+ synopsis,
91
+ },
92
+ {
93
+ at: path,
94
+ }
95
+ );
96
+ setSynopsis(value);
97
+ };
98
+
99
+ const handleMediaTabs = (option: string) => setMediaTab(option);
100
+
101
+ const handleDeleteTextChange = (event: React.FormEvent) => {
102
+ const value = (event.target as HTMLInputElement).value;
103
+ setDeleteText(value);
104
+ };
105
+
106
+ const handleVideoReplace = () => {
107
+ if (videoToBeChanged) {
108
+ setTitle(videoToBeChanged.title);
109
+ setSynopsis(videoToBeChanged.synopsis);
110
+ setVideoToBeChanged(null);
111
+ setNodes(
112
+ editorRef,
113
+ {
114
+ id: videoToBeChanged.id,
115
+ created: videoToBeChanged.created,
116
+ parentId: videoToBeChanged.parentId,
117
+ captions: videoToBeChanged.captions ?? [],
118
+ duration: videoToBeChanged.duration,
119
+ sample: videoToBeChanged.sample,
120
+ source: videoToBeChanged.source,
121
+ status: videoToBeChanged.status,
122
+ synopsis: videoToBeChanged.synopsis,
123
+ thumbnail: videoToBeChanged.thumbnail,
124
+ title: videoToBeChanged.title,
125
+ },
126
+ {
127
+ at: path,
128
+ }
129
+ );
130
+ if (path) {
131
+ replaceNodeChildren(editorRef, {
132
+ at: path,
133
+ nodes: {
134
+ text: videoToBeChanged.title,
135
+ },
136
+ });
137
+ }
138
+ }
139
+ };
140
+
141
+ const handleVideoDelete = () => {
142
+ handleDeleteVideo(video.id);
143
+ removeNodes(editorRef, {
144
+ at: path,
145
+ });
146
+ };
147
+
148
+ const handleSourceChange = async (files: FileList) => {
149
+ const file = files[0];
150
+ handleUploadVideo(file).then((obj) => setVideoToBeChanged(obj));
151
+ };
152
+
153
+ const handleThumbnailChange = async (files: FileList) => {
154
+ const file = files[0];
155
+ handleUploadImage(file).then((url) => {
156
+ setNodes(
157
+ editorRef,
158
+ {
159
+ thumbnail: url,
160
+ },
161
+ {
162
+ at: path,
163
+ }
164
+ );
165
+ });
166
+ };
167
+
168
+ const handleSave = () => {
169
+ handleChangeVideo(video);
170
+ toggle();
171
+ };
172
+
173
+ return (
174
+ <Drawer className={styles.drawer} open={open} toggle={toggle}>
175
+ <Drawer.Heading>Media Settings</Drawer.Heading>
176
+ <Drawer.Action onClick={() => toggle()}>Cancel</Drawer.Action>
177
+ <Drawer.Action onClick={handleSave}>Save</Drawer.Action>
178
+ <h4 className={styles.mediaName}>{text}</h4>
179
+ <Drawer.Tab name="Media">
180
+ <Drawer.Item
181
+ header={{
182
+ as: "h5",
183
+ color: "orange",
184
+ icon: (
185
+ <Details
186
+ iconSize={20}
187
+ size={24}
188
+ style={{ backgroundColor: "transparent" }}
189
+ />
190
+ ),
191
+ title: "Details",
192
+ }}
193
+ >
194
+ <div contentEditable={false} className={styles.details}>
195
+ <h6>Title</h6>
196
+ <p>
197
+ Pick an easy to read, memorable title for your product. Example:
198
+ "10 Lessons from the Book of Matthew." Suggested 140 characters
199
+ max.
200
+ </p>
201
+ <TextInput
202
+ characterCount={false}
203
+ onChange={handleTitle}
204
+ placeholder="Title"
205
+ value={title}
206
+ />
207
+ <h6>Description</h6>
208
+ <p>
209
+ Tell us a little bit about this media. The description will appear
210
+ on the overview page.
211
+ </p>
212
+ <TextInput
213
+ characterCount={true}
214
+ maxLength={350}
215
+ onChange={handleSynopsis}
216
+ placeholder="Description..."
217
+ value={synopsis}
218
+ />
219
+ </div>
220
+ </Drawer.Item>
221
+ <Drawer.Item
222
+ header={{
223
+ as: "h5",
224
+ color: "purple",
225
+ icon: (
226
+ <Upload
227
+ iconSize={20}
228
+ size={24}
229
+ style={{ backgroundColor: "transparent" }}
230
+ />
231
+ ),
232
+ title: "Media",
233
+ }}
234
+ >
235
+ <div className={styles.media}>
236
+ <Switch
237
+ active={mediaTab}
238
+ onClick={handleMediaTabs}
239
+ options={["Upload", "Select from list"]}
240
+ />
241
+ <div className={styles.contentWrapper}>
242
+ {mediaTab === "Upload" && (
243
+ <Dropzone
244
+ color="purple"
245
+ fileType="video"
246
+ onDrop={handleSourceChange}
247
+ showBrowse
248
+ text="Drag here or "
249
+ />
250
+ )}
251
+ {mediaTab === "Select from list" && (
252
+ <div className={styles.select}>
253
+ <div className={styles.videoWrapper}>
254
+ {availableVideos.map((video) => (
255
+ <div
256
+ className={styles.video}
257
+ key={video.id}
258
+ onClick={() => setVideoToBeChanged(video)}
259
+ >
260
+ <div className={styles.thumbnailWrapper}>
261
+ <img src={video.thumbnail} alt={video.title} />
262
+ <span className={styles.duration}>
263
+ {secondsToTimeString(video.duration)}
264
+ </span>
265
+ </div>
266
+ <p className={styles.title}>{video.title}</p>
267
+ <div
268
+ className={`${styles.selected} ${
269
+ videoToBeChanged?.id === video.id ? "active" : ""
270
+ }`}
271
+ />
272
+ </div>
273
+ ))}
274
+ </div>
275
+ </div>
276
+ )}
277
+ <div className={styles.buttonWrapper}>
278
+ <Modal>
279
+ <Modal.Trigger>
280
+ <Button
281
+ buttonColor="var(--color-blue-3)"
282
+ disabled={!videoToBeChanged}
283
+ shape="rectangular"
284
+ size="large"
285
+ >
286
+ Replace Video
287
+ </Button>
288
+ </Modal.Trigger>
289
+ <Modal.Content header={<h4>Replace Video</h4>}>
290
+ <div className={styles.modal}>
291
+ <p>
292
+ Replace this file with a different version. Stats,
293
+ public comments, and likes associated with this video
294
+ will not be affected.
295
+ </p>
296
+ <div
297
+ className={`${styles.buttonWrapper} ${styles.replaceModal}`}
298
+ >
299
+ <Modal.Dismiss>
300
+ <Button
301
+ buttonType="secondary"
302
+ shape="rectangular"
303
+ size="large"
304
+ >
305
+ Cancel
306
+ </Button>
307
+ </Modal.Dismiss>
308
+ <Modal.Dismiss>
309
+ <Button
310
+ buttonColor="var(--color-blue-3)"
311
+ onClick={handleVideoReplace}
312
+ shape="rectangular"
313
+ size="large"
314
+ >
315
+ Replace
316
+ </Button>
317
+ </Modal.Dismiss>
318
+ </div>
319
+ </div>
320
+ </Modal.Content>
321
+ </Modal>
322
+ <Modal>
323
+ <Modal.Trigger>
324
+ <Button
325
+ buttonColor="#FFFFFF"
326
+ shape="rectangular"
327
+ size="large"
328
+ style={{
329
+ border: "1px solid var(--color-red-5)",
330
+ }}
331
+ >
332
+ Delete Video
333
+ </Button>
334
+ </Modal.Trigger>
335
+ <Modal.Content header={<h4>Delete this video?</h4>}>
336
+ <div className={`${styles.modal} ${styles.deleteWrapper}`}>
337
+ <p>
338
+ This will permanently delete this video, including all
339
+ analytics, removing it from your course and player. This
340
+ action cannot be undone.
341
+ </p>
342
+ <p>Are you sure you want to delete this video?</p>
343
+ <p>Type DELETE to confirm.</p>
344
+ <input
345
+ onChange={handleDeleteTextChange}
346
+ value={deleteText}
347
+ />
348
+ <div
349
+ className={`${styles.buttonWrapper} ${styles.deleteModal}`}
350
+ >
351
+ <Modal.Dismiss>
352
+ <Button
353
+ buttonType="secondary"
354
+ shape="rectangular"
355
+ size="large"
356
+ >
357
+ Cancel
358
+ </Button>
359
+ </Modal.Dismiss>
360
+ <Modal.Dismiss>
361
+ <Button
362
+ disabled={deleteText !== "DELETE"}
363
+ onClick={handleVideoDelete}
364
+ shape="rectangular"
365
+ size="large"
366
+ >
367
+ Delete
368
+ </Button>
369
+ </Modal.Dismiss>
370
+ </div>
371
+ </div>
372
+ </Modal.Content>
373
+ </Modal>
374
+ </div>
375
+ </div>
376
+ </div>
377
+ </Drawer.Item>
378
+ <Drawer.Item
379
+ header={{
380
+ as: "h5",
381
+ color: "green",
382
+ icon: (
383
+ <Image
384
+ iconSize={24}
385
+ size={24}
386
+ style={{ backgroundColor: "transparent" }}
387
+ />
388
+ ),
389
+ title: "Thumbnail",
390
+ }}
391
+ >
392
+ <div className={styles.thumbnail}>
393
+ <Dropzone
394
+ color="green"
395
+ fileType="image"
396
+ onDrop={handleThumbnailChange}
397
+ showBrowse
398
+ text="Drag here or "
399
+ />
400
+ </div>
401
+ </Drawer.Item>
402
+ <Drawer.Item
403
+ header={{
404
+ as: "h5",
405
+ color: "turquoise",
406
+ icon: (
407
+ <VideoPlay
408
+ iconSize={20}
409
+ size={24}
410
+ style={{ backgroundColor: "transparent" }}
411
+ />
412
+ ),
413
+ title: "Add to Playlist",
414
+ }}
415
+ >
416
+ <div className={styles.addToPlaylist}></div>
417
+ </Drawer.Item>
418
+ </Drawer.Tab>
419
+ <Drawer.Tab name="Media">
420
+ <Drawer.Item
421
+ header={{
422
+ as: "h5",
423
+ color: "purple",
424
+ icon: (
425
+ <ClosedCaptions
426
+ iconSize={20}
427
+ size={24}
428
+ style={{ backgroundColor: "transparent" }}
429
+ />
430
+ ),
431
+ title: "Video Subtitles",
432
+ }}
433
+ >
434
+ <div contentEditable={false} className={styles.captions}></div>
435
+ </Drawer.Item>
436
+ </Drawer.Tab>
437
+ <Drawer.Tab name="Sample">
438
+ <Drawer.Item
439
+ header={{
440
+ as: "h5",
441
+ color: "purple",
442
+ icon: (
443
+ <ClosedCaptions
444
+ iconSize={20}
445
+ size={24}
446
+ style={{ backgroundColor: "transparent" }}
447
+ />
448
+ ),
449
+ title: "Video Sample",
450
+ }}
451
+ >
452
+ <div contentEditable={false} className={styles.captions}></div>
453
+ </Drawer.Item>
454
+ </Drawer.Tab>
455
+ </Drawer>
456
+ );
457
+ };
@@ -0,0 +1 @@
1
+ export { MediaDrawer, type MediaDrawerProps } from "./MediaDrawer";
@@ -0,0 +1 @@
1
+ export { MediaDrawer, type MediaDrawerProps } from "./MediaDrawer";
@@ -0,0 +1,213 @@
1
+ export const DEFAULT_CONTENT = [
2
+ {
3
+ type: "h1",
4
+ children: [
5
+ {
6
+ text: "Module 1: The Warrior Identity",
7
+ bold: true,
8
+ },
9
+ ],
10
+ },
11
+ {
12
+ id: "video-234jlnlknsdlkfjwlkjaa",
13
+ parentId: "course-1lk4j3k4jlkj2l4k2j34lkj",
14
+ children: [
15
+ {
16
+ text: "The DNA of a Warrior",
17
+ },
18
+ ],
19
+ captions: [],
20
+ duration: 3765,
21
+ source: "",
22
+ synopsis:
23
+ "Understanding the battlefield is the first key to winning the war for sexual purity. In this episode, you will discover hell's strategies against the 21st Century Church and be introduced to the four components of the noose of sexual bondage. Learn the first key steps to freedom and how to stay pure.",
24
+ thumbnail: "video-thumbnail.jpg",
25
+ title: "The DNA of a Warrior",
26
+ type: "video",
27
+ },
28
+ {
29
+ type: "p",
30
+ children: [
31
+ {
32
+ text: "Welcome to Warpath. You’re about to embark on a journey towards lifelong healing, freedom and victory. This is a season of training. It’s sanctification on steroids, not for the faint-hearted, but for those who truly desire to live the rest of their lives for Jesus. No reserves, no retreats, no regrets.",
33
+ },
34
+ {
35
+ type: "footnote",
36
+ children: [
37
+ {
38
+ text: "This is a footnote",
39
+ },
40
+ ],
41
+ },
42
+ {
43
+ text: " What was once your deepest, darkest secret will now become the word of your testimony that heals and liberates others.",
44
+ },
45
+ ],
46
+ },
47
+ {
48
+ type: "q-n-a",
49
+ children: [
50
+ {
51
+ type: "p",
52
+ children: [
53
+ {
54
+ text: "Ask your question...",
55
+ },
56
+ ],
57
+ },
58
+ ],
59
+ },
60
+ {
61
+ type: "p",
62
+ children: [
63
+ {
64
+ text: "In this new season, God is calling you up. He’s calling you to a higher level, a place where you’re no longer part of the problem but are becoming a part of the solution.",
65
+ },
66
+ {
67
+ type: "footnote",
68
+ children: [
69
+ {
70
+ text: "This is another footnote",
71
+ },
72
+ ],
73
+ },
74
+ {
75
+ text: "",
76
+ },
77
+ ],
78
+ },
79
+ {
80
+ type: "blockquote",
81
+ children: [
82
+ {
83
+ text: '"Warpath isn’t about just winning for you; that’s the beginning. Warpath is about you taking the battle and winning for others so they can have their families, and their marriages, and their destinies." \n— ',
84
+ },
85
+ {
86
+ text: "Dr. Doug Weiss",
87
+ italic: true,
88
+ },
89
+ ],
90
+ },
91
+ {
92
+ type: "hr",
93
+ children: [
94
+ {
95
+ text: "",
96
+ },
97
+ ],
98
+ },
99
+ {
100
+ type: "h2",
101
+ children: [
102
+ {
103
+ text: "Lesson Overview",
104
+ bold: true,
105
+ },
106
+ ],
107
+ },
108
+ {
109
+ type: "h3",
110
+ align: "center",
111
+ children: [
112
+ {
113
+ text: "THE WARRIOR IDENTITY",
114
+ bold: true,
115
+ fontSize: "16px",
116
+ },
117
+ ],
118
+ },
119
+ {
120
+ type: "hr",
121
+ children: [
122
+ {
123
+ text: "",
124
+ },
125
+ ],
126
+ },
127
+ {
128
+ type: "img",
129
+ url: "https://source.unsplash.com/1600x900/?christian",
130
+ children: [
131
+ {
132
+ text: "",
133
+ },
134
+ ],
135
+ },
136
+ {
137
+ type: "p",
138
+ children: [
139
+ {
140
+ text: "Identity: You will have to grasp your true identity in Christ. You cannot look at this as a “what”, but instead about a “who”. We must become more like Christ, because He is a warrior.",
141
+ },
142
+ ],
143
+ },
144
+ {
145
+ type: "p",
146
+ children: [
147
+ {
148
+ text: "A different DNA: As a warrior, your spiritual genetic code will be different from those who haven’t tasted the victory and grace you’ve experienced from this battle. You’ve experienced truth as a person: Jesus; and it has forever changed you. You’ve been set apart as a “fighting man”, no longer a civilian idly consumed by the cares of this world, but a warrior who’s passionate about the Kingdom and craving some sweet revenge.",
149
+ },
150
+ ],
151
+ },
152
+ {
153
+ type: "code_block",
154
+ lang: "typescript",
155
+ children: [
156
+ {
157
+ type: "code_line",
158
+ children: [
159
+ {
160
+ text: 'const variable = "DO_NOT_USE"',
161
+ },
162
+ ],
163
+ },
164
+ ],
165
+ },
166
+ {
167
+ type: "paywall",
168
+ children: [
169
+ {
170
+ type: "h2",
171
+ children: [
172
+ {
173
+ text: "Keep reading with a paid subscription",
174
+ },
175
+ ],
176
+ },
177
+ {
178
+ type: "p",
179
+ children: [
180
+ {
181
+ text: "Subscribe to ",
182
+ },
183
+ {
184
+ text: "Soul Refiner",
185
+ italic: true,
186
+ },
187
+ {
188
+ text: " to keep reading this content.",
189
+ },
190
+ ],
191
+ },
192
+ {
193
+ type: "button",
194
+ buttonType: "button-subscribe",
195
+ children: [
196
+ {
197
+ text: "Get Access",
198
+ },
199
+ ],
200
+ },
201
+ ],
202
+ },
203
+ {
204
+ type: "p",
205
+ children: [
206
+ {
207
+ text: "",
208
+ },
209
+ ],
210
+ },
211
+ ];
212
+
213
+ export const PLACEHOLDER = "This is a placeholder";
@@ -0,0 +1,2 @@
1
+ export { DEFAULT_CONTENT, PLACEHOLDER, } from "./default";
2
+ export { editableProps } from "./props";
@@ -0,0 +1,9 @@
1
+ import { TEditableProps } from "@udecode/plate";
2
+
3
+ import { PLACEHOLDER } from "./default";
4
+
5
+ export const editableProps: TEditableProps = {
6
+ spellCheck: true,
7
+ autoFocus: true,
8
+ placeholder: PLACEHOLDER,
9
+ };
@@ -0,0 +1,2 @@
1
+ export { Editor, EditorContext, type EditorProps } from "./Editor";
2
+ export * from "./common";