@soul-refiner/design-system 0.0.5 → 0.0.7

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 (274) hide show
  1. package/dist/{design-system.mjs → @soul-refiner/design-system.mjs} +37349 -34209
  2. package/dist/@soul-refiner/design-system.umd.js +1398 -0
  3. package/package.json +6 -2
  4. package/.eslintrc.js +0 -4
  5. package/.turbo/turbo-build.log +0 -12
  6. package/.turbo/turbo-test.log +0 -4417
  7. package/CHANGELOG.md +0 -7
  8. package/babel.config.js +0 -6
  9. package/custom.d.ts +0 -4
  10. package/dist/design-system.umd.js +0 -1426
  11. package/src/actions/Button/Button.module.scss +0 -205
  12. package/src/actions/Button/Button.spec.js +0 -56
  13. package/src/actions/Button/Button.tsx +0 -143
  14. package/src/actions/Button/index.ts +0 -1
  15. package/src/actions/Dropdown/Dropdown.module.scss +0 -77
  16. package/src/actions/Dropdown/Dropdown.spec.js +0 -149
  17. package/src/actions/Dropdown/Dropdown.tsx +0 -224
  18. package/src/actions/Dropdown/index.ts +0 -6
  19. package/src/actions/Dropzone/Dropzone.module.scss +0 -48
  20. package/src/actions/Dropzone/Dropzone.spec.js +0 -60
  21. package/src/actions/Dropzone/Dropzone.tsx +0 -191
  22. package/src/actions/Dropzone/index.ts +0 -1
  23. package/src/actions/Rate/Rate.module.scss +0 -17
  24. package/src/actions/Rate/Rate.tsx +0 -53
  25. package/src/actions/Rate/index.ts +0 -1
  26. package/src/actions/Switch/Switch.module.scss +0 -35
  27. package/src/actions/Switch/Switch.spec.js +0 -31
  28. package/src/actions/Switch/Switch.tsx +0 -34
  29. package/src/actions/Switch/index.ts +0 -1
  30. package/src/actions/index.ts +0 -5
  31. package/src/cards/CourseCard/CourseCard.module.scss +0 -219
  32. package/src/cards/CourseCard/CourseCard.spec.js +0 -60
  33. package/src/cards/CourseCard/CourseCard.tsx +0 -145
  34. package/src/cards/CourseCard/index.ts +0 -1
  35. package/src/cards/EpisodeCard/EpisodeCard.module.scss +0 -69
  36. package/src/cards/EpisodeCard/EpisodeCard.tsx +0 -53
  37. package/src/cards/EpisodeCard/index.ts +0 -1
  38. package/src/cards/FeatureCard/FeatureCard.module.scss +0 -116
  39. package/src/cards/FeatureCard/FeatureCard.spec.js +0 -70
  40. package/src/cards/FeatureCard/FeatureCard.tsx +0 -123
  41. package/src/cards/FeatureCard/index.ts +0 -1
  42. package/src/cards/index.ts +0 -3
  43. package/src/data/Bar/Bar.module.scss +0 -105
  44. package/src/data/Bar/Bar.tsx +0 -161
  45. package/src/data/Bar/index.ts +0 -1
  46. package/src/data/Line/Line.module.scss +0 -102
  47. package/src/data/Line/Line.tsx +0 -162
  48. package/src/data/Line/index.ts +0 -1
  49. package/src/data/Pie/Pie.module.scss +0 -56
  50. package/src/data/Pie/Pie.spec.js +0 -72
  51. package/src/data/Pie/Pie.tsx +0 -111
  52. package/src/data/Pie/index.ts +0 -1
  53. package/src/data/index.ts +0 -3
  54. package/src/editor/Editor.module.scss +0 -125
  55. package/src/editor/Editor.tsx +0 -327
  56. package/src/editor/common/elements.ts +0 -50
  57. package/src/editor/common/index.ts +0 -2
  58. package/src/editor/common/marks.ts +0 -27
  59. package/src/editor/components/MediaDrawer/MediaDrawer.module.scss +0 -316
  60. package/src/editor/components/MediaDrawer/MediaDrawer.tsx +0 -457
  61. package/src/editor/components/MediaDrawer/index.ts +0 -1
  62. package/src/editor/components/index.ts +0 -1
  63. package/src/editor/config/default.ts +0 -213
  64. package/src/editor/config/index.ts +0 -2
  65. package/src/editor/config/props.ts +0 -9
  66. package/src/editor/index.ts +0 -2
  67. package/src/editor/plateUI.ts +0 -82
  68. package/src/editor/plugins/blocks.tsx +0 -71
  69. package/src/editor/plugins/custom/assets/DefaultThumbnail.tsx +0 -57
  70. package/src/editor/plugins/custom/assets/index.ts +0 -1
  71. package/src/editor/plugins/custom/buttons.tsx +0 -289
  72. package/src/editor/plugins/custom/example.tsx +0 -64
  73. package/src/editor/plugins/custom/exitBreak.ts +0 -41
  74. package/src/editor/plugins/custom/footnote.tsx +0 -185
  75. package/src/editor/plugins/custom/index.ts +0 -14
  76. package/src/editor/plugins/custom/paywall.tsx +0 -156
  77. package/src/editor/plugins/custom/qa.tsx +0 -390
  78. package/src/editor/plugins/custom/resetBlockType.ts +0 -29
  79. package/src/editor/plugins/custom/selectOnBackspace.ts +0 -7
  80. package/src/editor/plugins/custom/softBreak.ts +0 -20
  81. package/src/editor/plugins/custom/styles/Button.module.scss +0 -51
  82. package/src/editor/plugins/custom/styles/Footnote.module.scss +0 -58
  83. package/src/editor/plugins/custom/styles/Paywall.module.scss +0 -67
  84. package/src/editor/plugins/custom/styles/QA.module.scss +0 -140
  85. package/src/editor/plugins/custom/styles/Video.module.scss +0 -79
  86. package/src/editor/plugins/custom/video.tsx +0 -163
  87. package/src/editor/plugins/index.ts +0 -18
  88. package/src/editor/plugins/inline.ts +0 -46
  89. package/src/editor/plugins/marks.ts +0 -25
  90. package/src/editor/plugins/utils.ts +0 -22
  91. package/src/feedback/Chip/Chip.module.scss +0 -23
  92. package/src/feedback/Chip/Chip.tsx +0 -58
  93. package/src/feedback/Chip/index.ts +0 -1
  94. package/src/feedback/Loader/Loader.module.scss +0 -18
  95. package/src/feedback/Loader/Loader.spec.js +0 -18
  96. package/src/feedback/Loader/Loader.tsx +0 -53
  97. package/src/feedback/Loader/index.ts +0 -1
  98. package/src/feedback/ProgressBar/ProgressBar.module.scss +0 -13
  99. package/src/feedback/ProgressBar/ProgressBar.tsx +0 -32
  100. package/src/feedback/ProgressBar/index.ts +0 -1
  101. package/src/feedback/Toast/Toast.module.scss +0 -44
  102. package/src/feedback/Toast/Toast.tsx +0 -76
  103. package/src/feedback/Toast/index.ts +0 -1
  104. package/src/feedback/Tooltip/Tooltip.module.scss +0 -47
  105. package/src/feedback/Tooltip/Tooltip.tsx +0 -10
  106. package/src/feedback/Tooltip/index.ts +0 -1
  107. package/src/feedback/index.ts +0 -5
  108. package/src/global.d.ts +0 -6
  109. package/src/iconography/Avatar/Avatar.module.scss +0 -90
  110. package/src/iconography/Avatar/Avatar.spec.js +0 -75
  111. package/src/iconography/Avatar/Avatar.tsx +0 -96
  112. package/src/iconography/Avatar/DefaultIcon.svg +0 -4
  113. package/src/iconography/Avatar/DefaultIcon.tsx +0 -12
  114. package/src/iconography/Avatar/iconHelpers.tsx +0 -186
  115. package/src/iconography/Avatar/index.ts +0 -1
  116. package/src/iconography/ColoredIcon/ColoredIcon.module.scss +0 -40
  117. package/src/iconography/ColoredIcon/ColoredIcon.tsx +0 -30
  118. package/src/iconography/ColoredIcon/index.ts +0 -5
  119. package/src/iconography/DevicePreview/DevicePreview.module.scss +0 -143
  120. package/src/iconography/DevicePreview/DevicePreview.tsx +0 -592
  121. package/src/iconography/DevicePreview/index.ts +0 -1
  122. package/src/iconography/IconHeader/IconHeader.module.scss +0 -42
  123. package/src/iconography/IconHeader/IconHeader.tsx +0 -42
  124. package/src/iconography/IconHeader/index.ts +0 -1
  125. package/src/iconography/StarRating/StarRating.tsx +0 -99
  126. package/src/iconography/StarRating/index.ts +0 -1
  127. package/src/iconography/index.ts +0 -5
  128. package/src/implementations/BodyContent/BodyContent.module.scss +0 -38
  129. package/src/implementations/BodyContent/BodyContent.tsx +0 -78
  130. package/src/implementations/BodyContent/index.ts +0 -2
  131. package/src/implementations/JoinGroupModal/JoinGroupModal.module.scss +0 -83
  132. package/src/implementations/JoinGroupModal/JoinGroupModal.tsx +0 -176
  133. package/src/implementations/JoinGroupModal/index.ts +0 -1
  134. package/src/implementations/index.ts +0 -2
  135. package/src/index.ts +0 -149
  136. package/src/inputs/CalendarInput/CalendarInput.module.scss +0 -38
  137. package/src/inputs/CalendarInput/CalendarInput.spec.js +0 -19
  138. package/src/inputs/CalendarInput/CalendarInput.tsx +0 -29
  139. package/src/inputs/CalendarInput/index.ts +0 -1
  140. package/src/inputs/CheckboxInput/CheckboxInput.module.scss +0 -23
  141. package/src/inputs/CheckboxInput/CheckboxInput.tsx +0 -39
  142. package/src/inputs/CheckboxInput/index.ts +0 -1
  143. package/src/inputs/FeedInput/FeedInput.module.scss +0 -48
  144. package/src/inputs/FeedInput/FeedInput.spec.js +0 -16
  145. package/src/inputs/FeedInput/FeedInput.tsx +0 -197
  146. package/src/inputs/FeedInput/index.ts +0 -1
  147. package/src/inputs/InboxInput/InboxInput.module.scss +0 -48
  148. package/src/inputs/InboxInput/InboxInput.spec.js +0 -19
  149. package/src/inputs/InboxInput/InboxInput.tsx +0 -97
  150. package/src/inputs/InboxInput/index.ts +0 -1
  151. package/src/inputs/PostInput/PostInput.module.scss +0 -49
  152. package/src/inputs/PostInput/PostInput.spec.js +0 -19
  153. package/src/inputs/PostInput/PostInput.tsx +0 -54
  154. package/src/inputs/PostInput/index.ts +0 -1
  155. package/src/inputs/RadioInput/RadioInput.module.scss +0 -68
  156. package/src/inputs/RadioInput/RadioInput.tsx +0 -55
  157. package/src/inputs/RadioInput/index.ts +0 -1
  158. package/src/inputs/SearchInput/SearchInput.module.scss +0 -40
  159. package/src/inputs/SearchInput/SearchInput.tsx +0 -61
  160. package/src/inputs/SearchInput/index.ts +0 -1
  161. package/src/inputs/SelectInput/SelectInput.module.scss +0 -66
  162. package/src/inputs/SelectInput/SelectInput.tsx +0 -145
  163. package/src/inputs/SelectInput/index.ts +0 -1
  164. package/src/inputs/TagInput/TagInput.module.scss +0 -75
  165. package/src/inputs/TagInput/TagInput.tsx +0 -115
  166. package/src/inputs/TagInput/index.ts +0 -1
  167. package/src/inputs/TextInput/TextInput.module.scss +0 -35
  168. package/src/inputs/TextInput/TextInput.tsx +0 -46
  169. package/src/inputs/TextInput/index.ts +0 -1
  170. package/src/inputs/index.ts +0 -10
  171. package/src/lists/ContactDetails/ContactDetails.module.scss +0 -70
  172. package/src/lists/ContactDetails/ContactDetails.spec.js +0 -69
  173. package/src/lists/ContactDetails/ContactDetails.tsx +0 -185
  174. package/src/lists/ContactDetails/index.ts +0 -1
  175. package/src/lists/index.ts +0 -1
  176. package/src/navigation/Breadcrumbs/Breadcrumbs.module.scss +0 -18
  177. package/src/navigation/Breadcrumbs/Breadcrumbs.spec.js +0 -38
  178. package/src/navigation/Breadcrumbs/Breadcrumbs.tsx +0 -43
  179. package/src/navigation/Breadcrumbs/index.ts +0 -1
  180. package/src/navigation/Drawer/Drawer.module.scss +0 -104
  181. package/src/navigation/Drawer/Drawer.tsx +0 -177
  182. package/src/navigation/Drawer/index.ts +0 -1
  183. package/src/navigation/EditorBar/EditorBar.module.scss +0 -118
  184. package/src/navigation/EditorBar/EditorBar.tsx +0 -416
  185. package/src/navigation/EditorBar/components/AlignmentDropdown/AlignmentDropdown.tsx +0 -106
  186. package/src/navigation/EditorBar/components/AlignmentDropdown/index.ts +0 -1
  187. package/src/navigation/EditorBar/components/ButtonModal/ButtonModal.module.scss +0 -85
  188. package/src/navigation/EditorBar/components/ButtonModal/ButtonModal.tsx +0 -314
  189. package/src/navigation/EditorBar/components/ButtonModal/assets/Comment.tsx +0 -28
  190. package/src/navigation/EditorBar/components/ButtonModal/assets/GiftSubscription.tsx +0 -28
  191. package/src/navigation/EditorBar/components/ButtonModal/assets/Link.tsx +0 -28
  192. package/src/navigation/EditorBar/components/ButtonModal/assets/Share.tsx +0 -28
  193. package/src/navigation/EditorBar/components/ButtonModal/assets/ShareCommunity.tsx +0 -42
  194. package/src/navigation/EditorBar/components/ButtonModal/assets/Signup.tsx +0 -68
  195. package/src/navigation/EditorBar/components/ButtonModal/assets/Special.tsx +0 -24
  196. package/src/navigation/EditorBar/components/ButtonModal/assets/Subscribe.tsx +0 -28
  197. package/src/navigation/EditorBar/components/ButtonModal/assets/index.ts +0 -8
  198. package/src/navigation/EditorBar/components/ButtonModal/index.ts +0 -1
  199. package/src/navigation/EditorBar/components/FontDropdown/FontDropdown.module.scss +0 -16
  200. package/src/navigation/EditorBar/components/FontDropdown/FontDropdown.tsx +0 -137
  201. package/src/navigation/EditorBar/components/FontDropdown/index.ts +0 -1
  202. package/src/navigation/EditorBar/components/MoreDropdown/MoreDropdown.module.scss +0 -43
  203. package/src/navigation/EditorBar/components/MoreDropdown/MoreDropdown.tsx +0 -124
  204. package/src/navigation/EditorBar/components/MoreDropdown/index.ts +0 -1
  205. package/src/navigation/EditorBar/components/OutlineDropdown/OutlineDropdown.module.scss +0 -21
  206. package/src/navigation/EditorBar/components/OutlineDropdown/OutlineDropdown.tsx +0 -37
  207. package/src/navigation/EditorBar/components/OutlineDropdown/index.ts +0 -1
  208. package/src/navigation/EditorBar/components/TextTypeDropdown/TextTypeDropdown.module.scss +0 -51
  209. package/src/navigation/EditorBar/components/TextTypeDropdown/TextTypeDropdown.tsx +0 -80
  210. package/src/navigation/EditorBar/components/TextTypeDropdown/index.ts +0 -1
  211. package/src/navigation/EditorBar/components/VideoModal/VideoModal.module.scss +0 -150
  212. package/src/navigation/EditorBar/components/VideoModal/VideoModal.tsx +0 -163
  213. package/src/navigation/EditorBar/components/VideoModal/index.ts +0 -1
  214. package/src/navigation/EditorBar/components/index.ts +0 -7
  215. package/src/navigation/EditorBar/index.ts +0 -1
  216. package/src/navigation/MenuTabs/MenuTabs.module.scss +0 -34
  217. package/src/navigation/MenuTabs/MenuTabs.spec.js +0 -36
  218. package/src/navigation/MenuTabs/MenuTabs.tsx +0 -52
  219. package/src/navigation/MenuTabs/index.ts +0 -1
  220. package/src/navigation/Navigation/Navigation.module.scss +0 -92
  221. package/src/navigation/Navigation/Navigation.spec.js +0 -144
  222. package/src/navigation/Navigation/Navigation.tsx +0 -111
  223. package/src/navigation/Navigation/SubNavigation.module.scss +0 -255
  224. package/src/navigation/Navigation/SubNavigation.spec.js +0 -112
  225. package/src/navigation/Navigation/SubNavigation.tsx +0 -443
  226. package/src/navigation/Navigation/index.ts +0 -15
  227. package/src/navigation/Pagination/Pagination.module.scss +0 -49
  228. package/src/navigation/Pagination/Pagination.tsx +0 -115
  229. package/src/navigation/Pagination/index.ts +0 -1
  230. package/src/navigation/index.ts +0 -21
  231. package/src/surfaces/Comment/Comment.module.scss +0 -106
  232. package/src/surfaces/Comment/Comment.spec.js +0 -105
  233. package/src/surfaces/Comment/Comment.tsx +0 -157
  234. package/src/surfaces/Comment/index.ts +0 -1
  235. package/src/surfaces/Faq/Faq.module.scss +0 -91
  236. package/src/surfaces/Faq/Faq.spec.js +0 -38
  237. package/src/surfaces/Faq/Faq.tsx +0 -156
  238. package/src/surfaces/Faq/index.ts +0 -1
  239. package/src/surfaces/Message/Message.module.scss +0 -37
  240. package/src/surfaces/Message/Message.spec.js +0 -47
  241. package/src/surfaces/Message/Message.tsx +0 -54
  242. package/src/surfaces/Message/index.ts +0 -1
  243. package/src/surfaces/Modal/Modal.module.scss +0 -52
  244. package/src/surfaces/Modal/Modal.spec.js +0 -38
  245. package/src/surfaces/Modal/Modal.tsx +0 -131
  246. package/src/surfaces/Modal/index.ts +0 -5
  247. package/src/surfaces/Plan/Plan.module.scss +0 -79
  248. package/src/surfaces/Plan/Plan.tsx +0 -75
  249. package/src/surfaces/Plan/index.ts +0 -1
  250. package/src/surfaces/Post/Post.module.scss +0 -46
  251. package/src/surfaces/Post/Post.spec.js +0 -103
  252. package/src/surfaces/Post/Post.tsx +0 -185
  253. package/src/surfaces/Post/index.ts +0 -1
  254. package/src/surfaces/Post/postHelpers.ts +0 -20
  255. package/src/surfaces/ProfileHeader/ProfileHeader.module.scss +0 -202
  256. package/src/surfaces/ProfileHeader/ProfileHeader.tsx +0 -103
  257. package/src/surfaces/ProfileHeader/index.ts +0 -1
  258. package/src/surfaces/RatingsOverview/RatingsOverview.module.scss +0 -54
  259. package/src/surfaces/RatingsOverview/RatingsOverview.tsx +0 -69
  260. package/src/surfaces/RatingsOverview/index.ts +0 -1
  261. package/src/surfaces/Review/Review.module.scss +0 -73
  262. package/src/surfaces/Review/Review.tsx +0 -88
  263. package/src/surfaces/Review/index.ts +0 -1
  264. package/src/surfaces/index.ts +0 -9
  265. package/src/tables/Filter/Filter.module.scss +0 -34
  266. package/src/tables/Filter/Filter.tsx +0 -30
  267. package/src/tables/Filter/index.ts +0 -1
  268. package/src/tables/Table/Table.module.scss +0 -126
  269. package/src/tables/Table/Table.spec.js +0 -113
  270. package/src/tables/Table/Table.tsx +0 -251
  271. package/src/tables/Table/index.ts +0 -7
  272. package/src/tables/index.ts +0 -7
  273. package/tsconfig.json +0 -14
  274. package/vite.config.ts +0 -29
@@ -1,106 +0,0 @@
1
- @use "@soul-refiner/styles/_mixins";
2
-
3
- .comment {
4
- @include mixins.flex($justify: space-between, $gap: 12px);
5
- position: relative;
6
- padding-bottom: 12px;
7
-
8
- [class~="content-wrapper"] {
9
- flex: 1;
10
-
11
- [class~="comment"] {
12
- padding: 16px;
13
- border-radius: 18px;
14
- background-color: #ffffff;
15
-
16
- [class~="name"] {
17
- margin-bottom: 8px;
18
- display: block;
19
- }
20
- }
21
-
22
- [class~="actions-wrapper"] {
23
- @include mixins.flex($gap: 16px, $align: center);
24
- margin: 8px 0px;
25
- padding-left: 17px;
26
-
27
- p {
28
- color: var(--color-grey-4);
29
- font-size: 12px;
30
- line-height: 18px;
31
- user-select: none;
32
- }
33
-
34
- [class~="interactive"] {
35
- cursor: pointer;
36
- }
37
-
38
- [class~="likes-wrapper"] {
39
- @include mixins.flex($gap: 5px);
40
- margin-left: auto;
41
- div {
42
- border-radius: 50%;
43
- background: linear-gradient(0deg, #1d62f0 0%, #1ad5fd 100%);
44
- }
45
- }
46
- }
47
-
48
- textarea {
49
- width: 100%;
50
- margin: 16px 0px;
51
- }
52
-
53
- [class~="has-replies"] {
54
- position: relative;
55
-
56
- &::before {
57
- content: "";
58
- position: absolute;
59
- top: 32px;
60
- left: -28px;
61
- height: calc(100% - 12px);
62
- border-left: 2px solid var(--color-grey-9);
63
- }
64
- }
65
-
66
- [class~="is-reply"] {
67
- position: relative;
68
-
69
- &::before {
70
- content: "";
71
- position: absolute;
72
- left: -28px;
73
- height: 100%;
74
- border-left: 2px solid var(--color-grey-9);
75
- }
76
- }
77
- }
78
- }
79
-
80
- .replies {
81
- padding-top: 12px;
82
-
83
- [class~="reply-line-bottom"] {
84
- position: absolute;
85
- top: 0;
86
- left: -28px;
87
- width: 28px;
88
- height: 16px;
89
- border-bottom-left-radius: 16px;
90
- border: 2px solid var(--color-grey-9);
91
- border-top: none;
92
- border-right: none;
93
- }
94
-
95
- [class~="show-replies"] {
96
- padding: 5px 0px 8px 5px;
97
- font-weight: 600;
98
- color: var(--color-grey-4);
99
- cursor: pointer;
100
- user-select: none;
101
-
102
- &:hover {
103
- color: var(--colorify-blue-3);
104
- }
105
- }
106
- }
@@ -1,105 +0,0 @@
1
- import React from "react";
2
- import "@testing-library/jest-dom";
3
- import { render, screen, fireEvent } from "@testing-library/react";
4
-
5
- import { Comment } from "./Comment";
6
-
7
- const props = {
8
- commenter: {
9
- id: 1,
10
- avatar: "https://i.pravatar.cc/32",
11
- firstName: "Dietrich",
12
- lastName: "von Hildebrand",
13
- url: "",
14
- },
15
- content: "What a great point!",
16
- created: new Date(),
17
- hasLiked: false,
18
- reactions: 0,
19
- onReact: jest.fn(),
20
- onReply: jest.fn(),
21
- };
22
-
23
- describe("Comment renders", () => {
24
- it("the comment, name, and avatar", () => {
25
- render(<Comment {...props} />);
26
- expect(screen.getByText("What a great point!"));
27
- expect(screen.getByText("Dietrich von Hildebrand"));
28
- expect(screen.getByRole("img"));
29
- });
30
-
31
- it("with reactions", () => {
32
- props.reactions = 10;
33
- render(<Comment {...props} />);
34
- expect(screen.getByTestId("likes-wrapper").lastChild.textContent).toEqual(
35
- "10"
36
- );
37
- });
38
-
39
- it("without reactions", () => {
40
- render(<Comment {...props} />);
41
- expect(!screen.queryByTestId("likes-wrapper"));
42
- });
43
-
44
- it("a yet-to-be reacted to comment", () => {
45
- render(<Comment {...props} />);
46
- const notLikedIcon = screen.getByTestId("not-liked-icon");
47
- fireEvent.click(notLikedIcon);
48
- expect(props.onReact).toHaveBeenCalled();
49
- });
50
-
51
- it("a liked comment", () => {
52
- props.hasReacted = true;
53
- render(<Comment {...props} />);
54
- const likedIcon = screen.getByTestId("liked-icon");
55
- fireEvent.click(likedIcon);
56
- expect(props.onReact).toHaveBeenCalled();
57
- });
58
-
59
- it("the abbreviated time the commented was posted", () => {
60
- render(<Comment {...props} />);
61
- expect(screen.getByText("Just now"));
62
- });
63
-
64
- it("nested comments", () => {
65
- props.replies = [
66
- {
67
- commentId: "zlk2jlkjsalkfjaslkdfj",
68
- commenter: {
69
- id: 3,
70
- avatar: "",
71
- firstName: "Laura",
72
- lastName: "Smith",
73
- url: "",
74
- },
75
- content:
76
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tempus, leo, id mi proin aenean gravida. Suspendisse auctor rutrum porttitor viverra convallis neque. Ipsum, aliquet sed laoreet tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tempus, leo, id mi proin aenean gravida. Suspendisse auctor rutrum porttitor viverra convallis neque. Ipsum, aliquet sed laoreet tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tempus, leo, id mi proin aenean gravida. Suspendisse auctor rutrum porttitor viverra convallis neque. Ipsum, aliquet sed laoreet tincidunt.",
77
- created: new Date(new Date().getTime() - 60000 * 1),
78
- hasReacted: false,
79
- onReact: jest.fn(),
80
- onReply: jest.fn(),
81
- reactions: 1,
82
- },
83
- {
84
- commentId: "blkjsdlkjlkjwlfkajsdf",
85
- commenter: {
86
- id: 3,
87
- avatar: "https://i.pravatar.cc/36",
88
- firstName: "Dave",
89
- lastName: "Johannisburger",
90
- url: "",
91
- },
92
- content:
93
- "Onec euismod, nisl eget consectetur tempor, nisl nunc egestas nisi, euismod aliquam.",
94
- created: new Date(),
95
- hasReacted: false,
96
- onReact: jest.fn(),
97
- onReply: jest.fn(),
98
- reactions: 1,
99
- },
100
- ];
101
- render(<Comment {...props}></Comment>);
102
- expect(screen.getByText("Show Replies"));
103
- expect(screen.getByTestId("reply-line-bottom"));
104
- });
105
- });
@@ -1,157 +0,0 @@
1
- import React from "react";
2
- import commentStyles from "./Comment.module.scss";
3
- import { abbrRelativeTimeString } from "@soul-refiner/utils/src";
4
- import { Comment as IComment } from "@soul-refiner/models";
5
-
6
- import { Avatar } from "../../iconography";
7
- import { PostInput } from "../../inputs";
8
- import {
9
- Circle,
10
- CommentOutline,
11
- Like,
12
- LikeOutline,
13
- } from "@soul-refiner/icons/src";
14
-
15
- export interface CommentProps extends IComment {
16
- onReact: () => void;
17
- onReply: (reply: string) => void;
18
- onShowReplies?: () => void;
19
- replies?: IComment[];
20
- showReplies: boolean;
21
- }
22
-
23
- export const Comment = ({
24
- id,
25
- parentId,
26
- user,
27
- text,
28
- created,
29
- onReact,
30
- onReply,
31
- onShowReplies,
32
- replies,
33
- reactions,
34
- showReplies,
35
- }: CommentProps) => {
36
- const [showReplyInput, setshowReplyInput] = React.useState(false);
37
- const [reply, setReply] = React.useState("");
38
-
39
- const handleshowReplyInput = () => setshowReplyInput(true);
40
-
41
- const handleReplyChange = (
42
- event: React.KeyboardEvent<HTMLTextAreaElement>
43
- ) => {
44
- setReply((event.target as HTMLTextAreaElement).value);
45
- };
46
-
47
- const handleReplySubmit = (
48
- event: React.KeyboardEvent<HTMLTextAreaElement>
49
- ) => {
50
- if (event.key === "Enter") {
51
- onReply(reply);
52
- setshowReplyInput(false);
53
- setReply("");
54
- }
55
- };
56
-
57
- const numReplies = replies ? replies.length : 0;
58
-
59
- return (
60
- <div className={`${commentStyles.comment}`} data-commentid={id}>
61
- <Avatar
62
- as="a"
63
- href={user?.url ? user.url : ""}
64
- size={32}
65
- url={user?.avatar ? user.avatar : ""}
66
- />
67
- <div className="content-wrapper">
68
- <div className={`${numReplies > 0 ? "has-replies" : ""}`}>
69
- <p className="comment body">
70
- <span className="lead name">
71
- {user.firstName} {user.lastName}
72
- </span>
73
- <span className="body-large">{text}</span>
74
- </p>
75
- <div className="actions-wrapper">
76
- {reactions.some((reaction) => reaction.userId !== user.id) ? (
77
- <Like
78
- className="interactive"
79
- data-testid="liked-icon"
80
- fill="var(--colorify-blue-3)"
81
- iconSize={18}
82
- onClick={onReact}
83
- size={18}
84
- />
85
- ) : (
86
- <LikeOutline
87
- className="interactive"
88
- data-testid="not-liked-icon"
89
- fill="var(--colorify-blue-3)"
90
- iconSize={18}
91
- onClick={onReact}
92
- size={18}
93
- />
94
- )}
95
- <CommentOutline
96
- className="interactive"
97
- fill="var(--colorify-blue-3)"
98
- iconSize={16}
99
- onClick={handleshowReplyInput}
100
- size={18}
101
- />
102
- <Circle fill="var(--color-grey-7" iconSize={3} size={3} />
103
- <p>{abbrRelativeTimeString(new Date(created))}</p>
104
- {!!reactions && (
105
- <div className="likes-wrapper" data-testid="likes-wrapper">
106
- <Like fill="white" iconSize={10} inline size={18} />
107
- <p>{reactions.length}</p>
108
- </div>
109
- )}
110
- </div>
111
- {showReplyInput && (
112
- <PostInput
113
- onChange={handleReplyChange}
114
- onKeyDown={handleReplySubmit}
115
- placeholder="Write a reply"
116
- value={reply}
117
- />
118
- )}
119
- </div>
120
- {numReplies > 0 && (
121
- <div className={`${commentStyles.replies}`}>
122
- {showReplies ? (
123
- replies &&
124
- replies.map(({ ...reply }, index) => (
125
- <div
126
- className={index !== numReplies - 1 ? "is-reply" : ""}
127
- key={reply.id + text.length + index}
128
- style={{ position: "relative" }}
129
- >
130
- <Comment
131
- onReact={onReact}
132
- onReply={onReply}
133
- onShowReplies={onShowReplies}
134
- showReplies={true}
135
- {...reply}
136
- />
137
- <div className="reply-line-bottom"></div>
138
- </div>
139
- ))
140
- ) : (
141
- <div
142
- onClick={onShowReplies}
143
- style={{ position: "relative", width: "fit-content" }}
144
- >
145
- <p className="show-replies">Show Replies</p>
146
- <div
147
- className="reply-line-bottom"
148
- data-testid="reply-line-bottom"
149
- ></div>
150
- </div>
151
- )}
152
- </div>
153
- )}
154
- </div>
155
- </div>
156
- );
157
- };
@@ -1 +0,0 @@
1
- export { Comment, type CommentProps } from "./Comment";
@@ -1,91 +0,0 @@
1
- @use "@soul-refiner/styles/mixins";
2
- .faq,
3
- .create {
4
- display: flex;
5
- flex-grow: 1;
6
- align-self: stretch;
7
- padding: 14px 16px;
8
- background-color: var(--color-grey-9);
9
- flex-direction: column;
10
- border-radius: var(--border-radius-small);
11
- gap: 16px;
12
-
13
- .header {
14
- display: flex;
15
- flex-direction: row;
16
- justify-content: space-between;
17
- flex: 1;
18
- place-items: center;
19
- gap: 16px;
20
- }
21
-
22
- input,
23
- textarea {
24
- padding: 16px;
25
- background-color: var(--color-grey-10);
26
- border: none;
27
- border-radius: var(--border-radius-small);
28
- width: 100%;
29
- resize: vertical;
30
- outline: none;
31
- color: var(--color-grey-3);
32
- box-shadow: inset 0px 4px 4px rgb(0 0 0 / 3%);
33
- }
34
-
35
- input {
36
- width: 50%;
37
- }
38
-
39
- .contentArea {
40
- white-space: pre-line;
41
- color: var(--color-grey-0);
42
- padding-bottom: 16px;
43
- }
44
-
45
- .entry {
46
- font-size: var(--size-20);
47
- font-weight: var(--weight-inter-semibold);
48
- }
49
-
50
- .arrowUp {
51
- transform: rotate(180deg);
52
- }
53
-
54
- [class~="row"] {
55
- display: flex;
56
- flex-direction: row;
57
- gap: 16px;
58
- place-items: center;
59
- }
60
-
61
- [class~="actions"] {
62
- @include mixins.flex($justify: flex-end, $gap: 4px);
63
- width: 100%;
64
- button {
65
- background-color: var(--color-grey-10);
66
- box-shadow: 0px 3px 5px rgba(9, 30, 66, 0.2),
67
- 0px 0px 1px rgba(9, 30, 66, 0.31);
68
- border-radius: 3px;
69
-
70
- &:hover {
71
- background-color: var(--color-blue-9);
72
- }
73
-
74
- &:active {
75
- background-color: var(--color-grey-4);
76
- color: var(--color-grey-10);
77
- svg {
78
- fill: var(--color-grey-10);
79
- }
80
- }
81
- }
82
- }
83
- }
84
-
85
- .create {
86
- border: 1px dashed #97a0a3;
87
- font-size: var(--size-20);
88
- font-weight: var(--weight-inter-semibold);
89
- color: var(--color-grey-0);
90
- background-color: transparent;
91
- }
@@ -1,38 +0,0 @@
1
- import React from "react";
2
- import "@testing-library/jest-dom";
3
- import { render, screen, fireEvent } from "@testing-library/react";
4
-
5
-
6
- import { Faq } from "./Faq";
7
-
8
- const generateProps = props => ({
9
- editable: true,
10
- title: "What is Soul Refiner?",
11
- content: "Soul Refiner is the streaming platform that makes it possible for anyone to watch or listen to hundreds of video lessons taught by 150+ of the world’s best.",
12
- creationMode: false,
13
- onSubmit: jest.fn(e => e.preventDefault()),
14
- ...props
15
- });
16
-
17
- describe("FAQ", () => {
18
- it("adds another", () => {
19
- const props = generateProps();
20
- render(<Faq {...props} />);
21
- fireEvent.click(screen.getByText("Add a FAQ"));
22
- let title = screen.getByPlaceholderText("Title");
23
- let content = screen.getByPlaceholderText("Your FAQ content...");
24
- expect(title).toHaveAttribute(
25
- "value",
26
- "What is Soul Refiner?"
27
- );
28
- expect(content.value).toEqual(
29
- "Soul Refiner is the streaming platform that makes it possible for anyone to watch or listen to hundreds of video lessons taught by 150+ of the world’s best."
30
- );
31
- const submit = screen.getByTestId("faq-submit");
32
- fireEvent.click(submit);
33
- title = screen.getByText("What is Soul Refiner?");
34
- content = screen.getByText("Soul Refiner is the streaming platform that makes it possible for anyone to watch or listen to hundreds of video lessons taught by 150+ of the world’s best.");
35
- expect(title.tagName).toEqual("H3");
36
- expect(content.tagName).toEqual("P");
37
- });
38
- })
@@ -1,156 +0,0 @@
1
- import React, { useEffect, useState } from "react";
2
- import { Component } from "@soul-refiner/utils/src";
3
- import { Check, Close, ChevronDown, Pencil } from "@soul-refiner/icons/src";
4
- import faqStyles from "./Faq.module.scss";
5
-
6
- export interface FaqProps {
7
- title: string;
8
- content: string;
9
- editable: boolean;
10
- creationMode: boolean;
11
- onSubmit: (
12
- event: React.FormEvent,
13
- props: { title: string; content: string }
14
- ) => void;
15
- }
16
-
17
- export const Faq = ({
18
- title = "",
19
- content = "",
20
- editable,
21
- creationMode,
22
- onSubmit,
23
- }: FaqProps) => {
24
- const [createFaq, setCreateFaq] = useState(creationMode);
25
- const [editing, setEditing] = useState(false);
26
- const [collapsed, setCollapsed] = useState(true);
27
- const [details, setDetails] = useState(() => ({
28
- title: title,
29
- content: content,
30
- }));
31
-
32
- React.useEffect(() => {
33
- setCreateFaq(creationMode);
34
- }, [creationMode]);
35
-
36
- const handleReset = () => {
37
- if (details.title === "" && details.content === "") {
38
- setCreateFaq(false);
39
- } else {
40
- setDetails({
41
- title: title,
42
- content: content,
43
- });
44
- }
45
- setEditing(false);
46
- };
47
-
48
- const handleCreateFaq = () => {
49
- setCreateFaq(true);
50
- setEditing(true);
51
- setCollapsed(false);
52
- };
53
-
54
- const handleSubmit = (event: React.FormEvent) => {
55
- setEditing(false);
56
- onSubmit(event, details);
57
- };
58
-
59
- const handleChange = (e: React.FormEvent) => {
60
- const element: HTMLInputElement = e.target as HTMLInputElement;
61
-
62
- setDetails((prev) => ({
63
- ...prev,
64
- [element.name]: element.value,
65
- }));
66
- };
67
-
68
- if (!createFaq) {
69
- return (
70
- <>
71
- <button className={faqStyles.create} onClick={handleCreateFaq}>
72
- Add a FAQ
73
- </button>
74
- </>
75
- );
76
- }
77
-
78
- return (
79
- <>
80
- <Component as={editing ? "form" : "div"} className={faqStyles.faq}>
81
- <div className={faqStyles.header}>
82
- <Component
83
- as={editing ? "input" : "h3"}
84
- className={faqStyles.entry}
85
- children={editing ? undefined : details.title}
86
- name="title"
87
- onChange={handleChange}
88
- value={details.title}
89
- data-form-type="other"
90
- placeholder="Title"
91
- />
92
-
93
- <div className="row">
94
- {!editing && editable && (
95
- <Pencil
96
- as="button"
97
- fill="var(--color-grey-4)"
98
- iconSize={14}
99
- size={24}
100
- onClick={() => {
101
- setEditing(true);
102
- setCollapsed(false);
103
- }}
104
- />
105
- )}
106
-
107
- <ChevronDown
108
- as="button"
109
- fill="var(--color-grey-0)"
110
- iconSize={16}
111
- size={32}
112
- className={!collapsed ? faqStyles.arrowUp : ""}
113
- onClick={() => setCollapsed(!collapsed)}
114
- />
115
- </div>
116
- </div>
117
-
118
- {!collapsed && (
119
- <div className={faqStyles.contentArea}>
120
- <Component
121
- as={editing ? "textarea" : "p"}
122
- rows={3}
123
- className={faqStyles.content}
124
- children={editing ? undefined : details.content}
125
- name="content"
126
- onChange={handleChange}
127
- value={details.content}
128
- placeholder="Your FAQ content..."
129
- />
130
- </div>
131
- )}
132
-
133
- {editing && (
134
- <div className="actions">
135
- <Check
136
- as="button"
137
- data-testid="faq-submit"
138
- fill="var(--color-grey-4)"
139
- iconSize={10}
140
- onClick={handleSubmit}
141
- size={32}
142
- />
143
- <Close
144
- as="button"
145
- data-testid="faq-reset"
146
- fill="var(--color-grey-4)"
147
- iconSize={10}
148
- onClick={handleReset}
149
- size={32}
150
- />
151
- </div>
152
- )}
153
- </Component>
154
- </>
155
- );
156
- };
@@ -1 +0,0 @@
1
- export { Faq, type FaqProps } from "./Faq";
@@ -1,37 +0,0 @@
1
- @use "@soul-refiner/styles/_mixins";
2
-
3
- .message {
4
- margin-bottom: 64px;
5
-
6
- & > div:first-of-type {
7
- justify-content: flex-start;
8
- }
9
-
10
- &[class~="fromSelf"] {
11
- & > div:first-of-type {
12
- justify-content: flex-end;
13
- }
14
- }
15
- }
16
-
17
- .individual {
18
- max-width: 480px;
19
- margin: 10px 70px;
20
- border-radius: 18px;
21
- border-top-left-radius: 0px;
22
- padding: 20px 16px;
23
- background-color: var(--color-grey-9);
24
- & > * {
25
- color: var(--color-grey-1);
26
- }
27
-
28
- &[class~="fromSelf"] {
29
- border-top-left-radius: 18px;
30
- border-top-right-radius: 0px;
31
- background-color: var(--color-blue-3);
32
- margin-left: auto;
33
- & > * {
34
- color: #ffffff;
35
- }
36
- }
37
- }