@soul-refiner/design-system 0.0.5 → 0.0.6

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 (271) hide show
  1. package/package.json +5 -1
  2. package/.eslintrc.js +0 -4
  3. package/.turbo/turbo-build.log +0 -12
  4. package/.turbo/turbo-test.log +0 -4417
  5. package/CHANGELOG.md +0 -7
  6. package/babel.config.js +0 -6
  7. package/custom.d.ts +0 -4
  8. package/src/actions/Button/Button.module.scss +0 -205
  9. package/src/actions/Button/Button.spec.js +0 -56
  10. package/src/actions/Button/Button.tsx +0 -143
  11. package/src/actions/Button/index.ts +0 -1
  12. package/src/actions/Dropdown/Dropdown.module.scss +0 -77
  13. package/src/actions/Dropdown/Dropdown.spec.js +0 -149
  14. package/src/actions/Dropdown/Dropdown.tsx +0 -224
  15. package/src/actions/Dropdown/index.ts +0 -6
  16. package/src/actions/Dropzone/Dropzone.module.scss +0 -48
  17. package/src/actions/Dropzone/Dropzone.spec.js +0 -60
  18. package/src/actions/Dropzone/Dropzone.tsx +0 -191
  19. package/src/actions/Dropzone/index.ts +0 -1
  20. package/src/actions/Rate/Rate.module.scss +0 -17
  21. package/src/actions/Rate/Rate.tsx +0 -53
  22. package/src/actions/Rate/index.ts +0 -1
  23. package/src/actions/Switch/Switch.module.scss +0 -35
  24. package/src/actions/Switch/Switch.spec.js +0 -31
  25. package/src/actions/Switch/Switch.tsx +0 -34
  26. package/src/actions/Switch/index.ts +0 -1
  27. package/src/actions/index.ts +0 -5
  28. package/src/cards/CourseCard/CourseCard.module.scss +0 -219
  29. package/src/cards/CourseCard/CourseCard.spec.js +0 -60
  30. package/src/cards/CourseCard/CourseCard.tsx +0 -145
  31. package/src/cards/CourseCard/index.ts +0 -1
  32. package/src/cards/EpisodeCard/EpisodeCard.module.scss +0 -69
  33. package/src/cards/EpisodeCard/EpisodeCard.tsx +0 -53
  34. package/src/cards/EpisodeCard/index.ts +0 -1
  35. package/src/cards/FeatureCard/FeatureCard.module.scss +0 -116
  36. package/src/cards/FeatureCard/FeatureCard.spec.js +0 -70
  37. package/src/cards/FeatureCard/FeatureCard.tsx +0 -123
  38. package/src/cards/FeatureCard/index.ts +0 -1
  39. package/src/cards/index.ts +0 -3
  40. package/src/data/Bar/Bar.module.scss +0 -105
  41. package/src/data/Bar/Bar.tsx +0 -161
  42. package/src/data/Bar/index.ts +0 -1
  43. package/src/data/Line/Line.module.scss +0 -102
  44. package/src/data/Line/Line.tsx +0 -162
  45. package/src/data/Line/index.ts +0 -1
  46. package/src/data/Pie/Pie.module.scss +0 -56
  47. package/src/data/Pie/Pie.spec.js +0 -72
  48. package/src/data/Pie/Pie.tsx +0 -111
  49. package/src/data/Pie/index.ts +0 -1
  50. package/src/data/index.ts +0 -3
  51. package/src/editor/Editor.module.scss +0 -125
  52. package/src/editor/Editor.tsx +0 -327
  53. package/src/editor/common/elements.ts +0 -50
  54. package/src/editor/common/index.ts +0 -2
  55. package/src/editor/common/marks.ts +0 -27
  56. package/src/editor/components/MediaDrawer/MediaDrawer.module.scss +0 -316
  57. package/src/editor/components/MediaDrawer/MediaDrawer.tsx +0 -457
  58. package/src/editor/components/MediaDrawer/index.ts +0 -1
  59. package/src/editor/components/index.ts +0 -1
  60. package/src/editor/config/default.ts +0 -213
  61. package/src/editor/config/index.ts +0 -2
  62. package/src/editor/config/props.ts +0 -9
  63. package/src/editor/index.ts +0 -2
  64. package/src/editor/plateUI.ts +0 -82
  65. package/src/editor/plugins/blocks.tsx +0 -71
  66. package/src/editor/plugins/custom/assets/DefaultThumbnail.tsx +0 -57
  67. package/src/editor/plugins/custom/assets/index.ts +0 -1
  68. package/src/editor/plugins/custom/buttons.tsx +0 -289
  69. package/src/editor/plugins/custom/example.tsx +0 -64
  70. package/src/editor/plugins/custom/exitBreak.ts +0 -41
  71. package/src/editor/plugins/custom/footnote.tsx +0 -185
  72. package/src/editor/plugins/custom/index.ts +0 -14
  73. package/src/editor/plugins/custom/paywall.tsx +0 -156
  74. package/src/editor/plugins/custom/qa.tsx +0 -390
  75. package/src/editor/plugins/custom/resetBlockType.ts +0 -29
  76. package/src/editor/plugins/custom/selectOnBackspace.ts +0 -7
  77. package/src/editor/plugins/custom/softBreak.ts +0 -20
  78. package/src/editor/plugins/custom/styles/Button.module.scss +0 -51
  79. package/src/editor/plugins/custom/styles/Footnote.module.scss +0 -58
  80. package/src/editor/plugins/custom/styles/Paywall.module.scss +0 -67
  81. package/src/editor/plugins/custom/styles/QA.module.scss +0 -140
  82. package/src/editor/plugins/custom/styles/Video.module.scss +0 -79
  83. package/src/editor/plugins/custom/video.tsx +0 -163
  84. package/src/editor/plugins/index.ts +0 -18
  85. package/src/editor/plugins/inline.ts +0 -46
  86. package/src/editor/plugins/marks.ts +0 -25
  87. package/src/editor/plugins/utils.ts +0 -22
  88. package/src/feedback/Chip/Chip.module.scss +0 -23
  89. package/src/feedback/Chip/Chip.tsx +0 -58
  90. package/src/feedback/Chip/index.ts +0 -1
  91. package/src/feedback/Loader/Loader.module.scss +0 -18
  92. package/src/feedback/Loader/Loader.spec.js +0 -18
  93. package/src/feedback/Loader/Loader.tsx +0 -53
  94. package/src/feedback/Loader/index.ts +0 -1
  95. package/src/feedback/ProgressBar/ProgressBar.module.scss +0 -13
  96. package/src/feedback/ProgressBar/ProgressBar.tsx +0 -32
  97. package/src/feedback/ProgressBar/index.ts +0 -1
  98. package/src/feedback/Toast/Toast.module.scss +0 -44
  99. package/src/feedback/Toast/Toast.tsx +0 -76
  100. package/src/feedback/Toast/index.ts +0 -1
  101. package/src/feedback/Tooltip/Tooltip.module.scss +0 -47
  102. package/src/feedback/Tooltip/Tooltip.tsx +0 -10
  103. package/src/feedback/Tooltip/index.ts +0 -1
  104. package/src/feedback/index.ts +0 -5
  105. package/src/global.d.ts +0 -6
  106. package/src/iconography/Avatar/Avatar.module.scss +0 -90
  107. package/src/iconography/Avatar/Avatar.spec.js +0 -75
  108. package/src/iconography/Avatar/Avatar.tsx +0 -96
  109. package/src/iconography/Avatar/DefaultIcon.svg +0 -4
  110. package/src/iconography/Avatar/DefaultIcon.tsx +0 -12
  111. package/src/iconography/Avatar/iconHelpers.tsx +0 -186
  112. package/src/iconography/Avatar/index.ts +0 -1
  113. package/src/iconography/ColoredIcon/ColoredIcon.module.scss +0 -40
  114. package/src/iconography/ColoredIcon/ColoredIcon.tsx +0 -30
  115. package/src/iconography/ColoredIcon/index.ts +0 -5
  116. package/src/iconography/DevicePreview/DevicePreview.module.scss +0 -143
  117. package/src/iconography/DevicePreview/DevicePreview.tsx +0 -592
  118. package/src/iconography/DevicePreview/index.ts +0 -1
  119. package/src/iconography/IconHeader/IconHeader.module.scss +0 -42
  120. package/src/iconography/IconHeader/IconHeader.tsx +0 -42
  121. package/src/iconography/IconHeader/index.ts +0 -1
  122. package/src/iconography/StarRating/StarRating.tsx +0 -99
  123. package/src/iconography/StarRating/index.ts +0 -1
  124. package/src/iconography/index.ts +0 -5
  125. package/src/implementations/BodyContent/BodyContent.module.scss +0 -38
  126. package/src/implementations/BodyContent/BodyContent.tsx +0 -78
  127. package/src/implementations/BodyContent/index.ts +0 -2
  128. package/src/implementations/JoinGroupModal/JoinGroupModal.module.scss +0 -83
  129. package/src/implementations/JoinGroupModal/JoinGroupModal.tsx +0 -176
  130. package/src/implementations/JoinGroupModal/index.ts +0 -1
  131. package/src/implementations/index.ts +0 -2
  132. package/src/index.ts +0 -149
  133. package/src/inputs/CalendarInput/CalendarInput.module.scss +0 -38
  134. package/src/inputs/CalendarInput/CalendarInput.spec.js +0 -19
  135. package/src/inputs/CalendarInput/CalendarInput.tsx +0 -29
  136. package/src/inputs/CalendarInput/index.ts +0 -1
  137. package/src/inputs/CheckboxInput/CheckboxInput.module.scss +0 -23
  138. package/src/inputs/CheckboxInput/CheckboxInput.tsx +0 -39
  139. package/src/inputs/CheckboxInput/index.ts +0 -1
  140. package/src/inputs/FeedInput/FeedInput.module.scss +0 -48
  141. package/src/inputs/FeedInput/FeedInput.spec.js +0 -16
  142. package/src/inputs/FeedInput/FeedInput.tsx +0 -197
  143. package/src/inputs/FeedInput/index.ts +0 -1
  144. package/src/inputs/InboxInput/InboxInput.module.scss +0 -48
  145. package/src/inputs/InboxInput/InboxInput.spec.js +0 -19
  146. package/src/inputs/InboxInput/InboxInput.tsx +0 -97
  147. package/src/inputs/InboxInput/index.ts +0 -1
  148. package/src/inputs/PostInput/PostInput.module.scss +0 -49
  149. package/src/inputs/PostInput/PostInput.spec.js +0 -19
  150. package/src/inputs/PostInput/PostInput.tsx +0 -54
  151. package/src/inputs/PostInput/index.ts +0 -1
  152. package/src/inputs/RadioInput/RadioInput.module.scss +0 -68
  153. package/src/inputs/RadioInput/RadioInput.tsx +0 -55
  154. package/src/inputs/RadioInput/index.ts +0 -1
  155. package/src/inputs/SearchInput/SearchInput.module.scss +0 -40
  156. package/src/inputs/SearchInput/SearchInput.tsx +0 -61
  157. package/src/inputs/SearchInput/index.ts +0 -1
  158. package/src/inputs/SelectInput/SelectInput.module.scss +0 -66
  159. package/src/inputs/SelectInput/SelectInput.tsx +0 -145
  160. package/src/inputs/SelectInput/index.ts +0 -1
  161. package/src/inputs/TagInput/TagInput.module.scss +0 -75
  162. package/src/inputs/TagInput/TagInput.tsx +0 -115
  163. package/src/inputs/TagInput/index.ts +0 -1
  164. package/src/inputs/TextInput/TextInput.module.scss +0 -35
  165. package/src/inputs/TextInput/TextInput.tsx +0 -46
  166. package/src/inputs/TextInput/index.ts +0 -1
  167. package/src/inputs/index.ts +0 -10
  168. package/src/lists/ContactDetails/ContactDetails.module.scss +0 -70
  169. package/src/lists/ContactDetails/ContactDetails.spec.js +0 -69
  170. package/src/lists/ContactDetails/ContactDetails.tsx +0 -185
  171. package/src/lists/ContactDetails/index.ts +0 -1
  172. package/src/lists/index.ts +0 -1
  173. package/src/navigation/Breadcrumbs/Breadcrumbs.module.scss +0 -18
  174. package/src/navigation/Breadcrumbs/Breadcrumbs.spec.js +0 -38
  175. package/src/navigation/Breadcrumbs/Breadcrumbs.tsx +0 -43
  176. package/src/navigation/Breadcrumbs/index.ts +0 -1
  177. package/src/navigation/Drawer/Drawer.module.scss +0 -104
  178. package/src/navigation/Drawer/Drawer.tsx +0 -177
  179. package/src/navigation/Drawer/index.ts +0 -1
  180. package/src/navigation/EditorBar/EditorBar.module.scss +0 -118
  181. package/src/navigation/EditorBar/EditorBar.tsx +0 -416
  182. package/src/navigation/EditorBar/components/AlignmentDropdown/AlignmentDropdown.tsx +0 -106
  183. package/src/navigation/EditorBar/components/AlignmentDropdown/index.ts +0 -1
  184. package/src/navigation/EditorBar/components/ButtonModal/ButtonModal.module.scss +0 -85
  185. package/src/navigation/EditorBar/components/ButtonModal/ButtonModal.tsx +0 -314
  186. package/src/navigation/EditorBar/components/ButtonModal/assets/Comment.tsx +0 -28
  187. package/src/navigation/EditorBar/components/ButtonModal/assets/GiftSubscription.tsx +0 -28
  188. package/src/navigation/EditorBar/components/ButtonModal/assets/Link.tsx +0 -28
  189. package/src/navigation/EditorBar/components/ButtonModal/assets/Share.tsx +0 -28
  190. package/src/navigation/EditorBar/components/ButtonModal/assets/ShareCommunity.tsx +0 -42
  191. package/src/navigation/EditorBar/components/ButtonModal/assets/Signup.tsx +0 -68
  192. package/src/navigation/EditorBar/components/ButtonModal/assets/Special.tsx +0 -24
  193. package/src/navigation/EditorBar/components/ButtonModal/assets/Subscribe.tsx +0 -28
  194. package/src/navigation/EditorBar/components/ButtonModal/assets/index.ts +0 -8
  195. package/src/navigation/EditorBar/components/ButtonModal/index.ts +0 -1
  196. package/src/navigation/EditorBar/components/FontDropdown/FontDropdown.module.scss +0 -16
  197. package/src/navigation/EditorBar/components/FontDropdown/FontDropdown.tsx +0 -137
  198. package/src/navigation/EditorBar/components/FontDropdown/index.ts +0 -1
  199. package/src/navigation/EditorBar/components/MoreDropdown/MoreDropdown.module.scss +0 -43
  200. package/src/navigation/EditorBar/components/MoreDropdown/MoreDropdown.tsx +0 -124
  201. package/src/navigation/EditorBar/components/MoreDropdown/index.ts +0 -1
  202. package/src/navigation/EditorBar/components/OutlineDropdown/OutlineDropdown.module.scss +0 -21
  203. package/src/navigation/EditorBar/components/OutlineDropdown/OutlineDropdown.tsx +0 -37
  204. package/src/navigation/EditorBar/components/OutlineDropdown/index.ts +0 -1
  205. package/src/navigation/EditorBar/components/TextTypeDropdown/TextTypeDropdown.module.scss +0 -51
  206. package/src/navigation/EditorBar/components/TextTypeDropdown/TextTypeDropdown.tsx +0 -80
  207. package/src/navigation/EditorBar/components/TextTypeDropdown/index.ts +0 -1
  208. package/src/navigation/EditorBar/components/VideoModal/VideoModal.module.scss +0 -150
  209. package/src/navigation/EditorBar/components/VideoModal/VideoModal.tsx +0 -163
  210. package/src/navigation/EditorBar/components/VideoModal/index.ts +0 -1
  211. package/src/navigation/EditorBar/components/index.ts +0 -7
  212. package/src/navigation/EditorBar/index.ts +0 -1
  213. package/src/navigation/MenuTabs/MenuTabs.module.scss +0 -34
  214. package/src/navigation/MenuTabs/MenuTabs.spec.js +0 -36
  215. package/src/navigation/MenuTabs/MenuTabs.tsx +0 -52
  216. package/src/navigation/MenuTabs/index.ts +0 -1
  217. package/src/navigation/Navigation/Navigation.module.scss +0 -92
  218. package/src/navigation/Navigation/Navigation.spec.js +0 -144
  219. package/src/navigation/Navigation/Navigation.tsx +0 -111
  220. package/src/navigation/Navigation/SubNavigation.module.scss +0 -255
  221. package/src/navigation/Navigation/SubNavigation.spec.js +0 -112
  222. package/src/navigation/Navigation/SubNavigation.tsx +0 -443
  223. package/src/navigation/Navigation/index.ts +0 -15
  224. package/src/navigation/Pagination/Pagination.module.scss +0 -49
  225. package/src/navigation/Pagination/Pagination.tsx +0 -115
  226. package/src/navigation/Pagination/index.ts +0 -1
  227. package/src/navigation/index.ts +0 -21
  228. package/src/surfaces/Comment/Comment.module.scss +0 -106
  229. package/src/surfaces/Comment/Comment.spec.js +0 -105
  230. package/src/surfaces/Comment/Comment.tsx +0 -157
  231. package/src/surfaces/Comment/index.ts +0 -1
  232. package/src/surfaces/Faq/Faq.module.scss +0 -91
  233. package/src/surfaces/Faq/Faq.spec.js +0 -38
  234. package/src/surfaces/Faq/Faq.tsx +0 -156
  235. package/src/surfaces/Faq/index.ts +0 -1
  236. package/src/surfaces/Message/Message.module.scss +0 -37
  237. package/src/surfaces/Message/Message.spec.js +0 -47
  238. package/src/surfaces/Message/Message.tsx +0 -54
  239. package/src/surfaces/Message/index.ts +0 -1
  240. package/src/surfaces/Modal/Modal.module.scss +0 -52
  241. package/src/surfaces/Modal/Modal.spec.js +0 -38
  242. package/src/surfaces/Modal/Modal.tsx +0 -131
  243. package/src/surfaces/Modal/index.ts +0 -5
  244. package/src/surfaces/Plan/Plan.module.scss +0 -79
  245. package/src/surfaces/Plan/Plan.tsx +0 -75
  246. package/src/surfaces/Plan/index.ts +0 -1
  247. package/src/surfaces/Post/Post.module.scss +0 -46
  248. package/src/surfaces/Post/Post.spec.js +0 -103
  249. package/src/surfaces/Post/Post.tsx +0 -185
  250. package/src/surfaces/Post/index.ts +0 -1
  251. package/src/surfaces/Post/postHelpers.ts +0 -20
  252. package/src/surfaces/ProfileHeader/ProfileHeader.module.scss +0 -202
  253. package/src/surfaces/ProfileHeader/ProfileHeader.tsx +0 -103
  254. package/src/surfaces/ProfileHeader/index.ts +0 -1
  255. package/src/surfaces/RatingsOverview/RatingsOverview.module.scss +0 -54
  256. package/src/surfaces/RatingsOverview/RatingsOverview.tsx +0 -69
  257. package/src/surfaces/RatingsOverview/index.ts +0 -1
  258. package/src/surfaces/Review/Review.module.scss +0 -73
  259. package/src/surfaces/Review/Review.tsx +0 -88
  260. package/src/surfaces/Review/index.ts +0 -1
  261. package/src/surfaces/index.ts +0 -9
  262. package/src/tables/Filter/Filter.module.scss +0 -34
  263. package/src/tables/Filter/Filter.tsx +0 -30
  264. package/src/tables/Filter/index.ts +0 -1
  265. package/src/tables/Table/Table.module.scss +0 -126
  266. package/src/tables/Table/Table.spec.js +0 -113
  267. package/src/tables/Table/Table.tsx +0 -251
  268. package/src/tables/Table/index.ts +0 -7
  269. package/src/tables/index.ts +0 -7
  270. package/tsconfig.json +0 -14
  271. package/vite.config.ts +0 -29
@@ -1,47 +0,0 @@
1
- import React from "react";
2
- import "@testing-library/jest-dom";
3
- import { render, screen } from "@testing-library/react";
4
-
5
- import { Message } from "./Message";
6
-
7
- const props = {
8
- children: (
9
- <>
10
- <p>
11
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque laoreet
12
- ex quis purus varius, ac porttitor orci rhoncus.
13
- </p>
14
- <p>Quisque id bibendum leo.</p>
15
- <p>
16
- Aliquam vel dignissim magna, placerat maximus tortor. Vivamus tempus est
17
- et sem blandit sodales.
18
- </p>
19
- </>
20
- ),
21
- created: new Date(new Date().getTime() - 700000),
22
- fromSelf: false,
23
- sender: {
24
- id: "12309123",
25
- firstName: "Ludwig",
26
- lastName: "Wittgenstein",
27
- url: "./avatar-male.jpg",
28
- },
29
- };
30
-
31
- describe("Message", () => {
32
- it("renders the content that was sent", () => {
33
- render(<Message {...props} />);
34
- expect(screen.getByText("Ludwig Wittgenstein"));
35
- expect(
36
- screen.getByText(
37
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque laoreet ex quis purus varius, ac porttitor orci rhoncus."
38
- )
39
- );
40
- expect(screen.getByText("Quisque id bibendum leo."));
41
- expect(
42
- screen.getByText(
43
- "Aliquam vel dignissim magna, placerat maximus tortor. Vivamus tempus est et sem blandit sodales."
44
- )
45
- );
46
- });
47
- });
@@ -1,54 +0,0 @@
1
- import React from "react";
2
- import { User } from "@soul-refiner/models";
3
- import { abbrRelativeTimeString } from "@soul-refiner/utils/src";
4
- import messageStyles from "./Message.module.scss";
5
- import { Avatar } from "../../iconography";
6
-
7
- export interface MessageProps extends React.PropsWithChildren {
8
- created: Date;
9
- fromSelf: boolean;
10
- sender: User;
11
- }
12
-
13
- export const Message = ({
14
- children,
15
- created,
16
- fromSelf,
17
- sender,
18
- }: MessageProps) => {
19
- return (
20
- <div
21
- className={`${messageStyles.message} ${fromSelf ? "fromSelf" : ""}`}
22
- data-testid="message-group"
23
- >
24
- <Avatar
25
- url={sender.url}
26
- size={64}
27
- subtitle={
28
- <span style={{ color: "var(--color-blue-2)" }}>
29
- {abbrRelativeTimeString(created)}
30
- </span>
31
- }
32
- textPosition={fromSelf ? "left" : "right"}
33
- title={
34
- <span style={{ color: "var(--color-blue-2)" }}>
35
- {fromSelf ? "You" : `${sender.firstName} ${sender.lastName}`}
36
- </span>
37
- }
38
- />
39
- {React.Children.map(children, (child) => (
40
- <IndividualMessage fromSelf={fromSelf}>{child}</IndividualMessage>
41
- ))}
42
- </div>
43
- );
44
- };
45
-
46
- interface IndividualMessageProps extends React.PropsWithChildren {
47
- fromSelf: boolean;
48
- }
49
-
50
- const IndividualMessage = ({ children, fromSelf }: IndividualMessageProps) => (
51
- <div className={`${messageStyles.individual} ${fromSelf ? "fromSelf" : ""}`}>
52
- {children}
53
- </div>
54
- );
@@ -1 +0,0 @@
1
- export { Message, type MessageProps } from "./Message";
@@ -1,52 +0,0 @@
1
- @use "@soul-refiner/styles/_mixins";
2
-
3
- .background {
4
- display: none;
5
- position: fixed;
6
- top: 0;
7
- left: 0;
8
- z-index: 100;
9
- width: 100vw;
10
- height: 100vh;
11
- padding: 0px;
12
- margin: 0px;
13
- overflow: hidden;
14
-
15
- &[class~="open"] {
16
- @include mixins.flex($dir: column, $align: center, $justify: center);
17
- }
18
-
19
- &[class~="dark"] {
20
- background: radial-gradient(
21
- 79.02% 79.02% at 50% 0%,
22
- rgba(0, 27, 58, 0.8) 0%,
23
- rgba(0, 0, 0, 0.8) 100%
24
- );
25
- backdrop-filter: blur(5px);
26
- cursor: pointer;
27
- }
28
- }
29
-
30
- .modalcontent {
31
- position: absolute;
32
- z-index: 101;
33
- background-color: #ffffff;
34
- box-shadow: 0px 15px 50px rgba(0, 0, 0, 0.15);
35
- border-radius: var(--border-radius-small);
36
- cursor: initial;
37
-
38
- [class~="header"] {
39
- @include mixins.flex($align: center);
40
- padding: 16px;
41
- border-bottom: 1px solid var(--color-grey-7);
42
- & > *:first-child {
43
- flex: 1;
44
- display: block;
45
- }
46
- }
47
-
48
- [class~="footer"] {
49
- padding: 16px;
50
- border-top: 1px solid var(--color-grey-7);
51
- }
52
- }
@@ -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
- import { Button } from "../../actions/Button";
6
- import { Modal } from "./Modal";
7
-
8
- describe("Modal", () => {
9
- it("works as expected", () => {
10
- render(
11
- <Modal>
12
- <Modal.Trigger>
13
- <Button>Open Modal</Button>
14
- </Modal.Trigger>
15
- <Modal.Content
16
- footer={<Button>Action 1</Button>}
17
- header={<h4>This is a header</h4>}
18
- >
19
- <p>This is the open modal</p>
20
- <Modal.Dismiss>
21
- <Button>Dismiss</Button>
22
- </Modal.Dismiss>
23
- </Modal.Content>
24
- </Modal>
25
- );
26
- fireEvent.click(screen.getByText("Open Modal"));
27
- const header = screen.getByText("This is a header");
28
- const modal = header.parentElement.parentElement.parentElement.parentElement;
29
- expect(modal).toHaveStyle(`display: block;`);
30
- fireEvent.click(header.parentElement.nextSibling);
31
- expect(modal).toHaveClass("closed");
32
- fireEvent.click(screen.getByText("Open Modal"));
33
- expect(modal).toHaveClass("open");
34
- fireEvent.click(screen.getByText("Dismiss"));
35
- expect(modal).toHaveClass("closed");
36
- });
37
- })
38
-
@@ -1,131 +0,0 @@
1
- import React from "react";
2
- import { CloseThin } from "@soul-refiner/icons/src";
3
- import modalStyles from "./Modal.module.scss";
4
-
5
- const callAll =
6
- (...fns: Function[]) =>
7
- (...args: any) =>
8
- fns.forEach((fn) => fn && fn(...args));
9
-
10
- const ModalContext = React.createContext<
11
- [boolean, React.Dispatch<React.SetStateAction<boolean>>]
12
- >([false, (() => undefined) as React.Dispatch<React.SetStateAction<boolean>>]);
13
-
14
- export interface ModalProps extends React.PropsWithChildren {
15
- /**
16
- * This is to make the Modal a controlled component,
17
- * instead of it managing its own state
18
- */
19
- controlledOpen?: boolean;
20
- }
21
-
22
- const Modal = ({ controlledOpen, ...props }: ModalProps) => {
23
- const [open, setOpen] = React.useState(controlledOpen || false);
24
-
25
- React.useEffect(() => {
26
- if (controlledOpen !== undefined) {
27
- setOpen(controlledOpen);
28
- }
29
- }, [controlledOpen]);
30
-
31
- return <ModalContext.Provider value={[open, setOpen]} {...props} />;
32
- };
33
-
34
- const ModalTrigger = ({
35
- children: child,
36
- }: {
37
- children: React.ReactElement;
38
- }) => {
39
- const [, setOpen] = React.useContext(ModalContext);
40
- return (
41
- child &&
42
- React.cloneElement(child, {
43
- onClick: callAll(() => setOpen(true), child.props.onClick),
44
- })
45
- );
46
- };
47
-
48
- ModalTrigger.displayName = "Modal.Trigger";
49
- Modal.Trigger = ModalTrigger;
50
-
51
- const ModalDismiss = ({
52
- children: child,
53
- setClosed,
54
- }: {
55
- children: React.ReactElement;
56
- setClosed?: () => void;
57
- }) => {
58
- const [, setOpen] = React.useContext(ModalContext);
59
- return (
60
- child &&
61
- React.cloneElement(child, {
62
- onClick: callAll(
63
- () => setOpen(false),
64
- child.props.onClick,
65
- () => setClosed && setClosed()
66
- ),
67
- })
68
- );
69
- };
70
-
71
- ModalDismiss.displayName = "Modal.Dismiss";
72
- Modal.Dismiss = ModalDismiss;
73
-
74
- export interface ModalContentProps extends React.PropsWithChildren {
75
- backgroundDark?: boolean;
76
- footer?: React.ReactElement;
77
- header?: React.ReactElement;
78
- setClosed?: () => void;
79
- }
80
-
81
- const ModalContent = ({
82
- backgroundDark = true,
83
- children,
84
- footer,
85
- header,
86
- setClosed,
87
- ...props
88
- }: ModalContentProps) => {
89
- const [open, setOpen] = React.useContext(ModalContext);
90
-
91
- const handleOutsideClick = (event: React.MouseEvent) => {
92
- if (event.currentTarget != event.target) return;
93
- setClosed ? setClosed() : setOpen(false);
94
- };
95
-
96
- return (
97
- <div
98
- className={`${modalStyles.background} ${open ? "open" : "closed"} ${
99
- backgroundDark ? "dark" : ""
100
- }`}
101
- onClick={handleOutsideClick}
102
- >
103
- <div className={`${modalStyles.modalcontent}`} {...props}>
104
- {header && (
105
- <div className="header">
106
- <div>{header}</div>
107
- <Modal.Dismiss setClosed={setClosed}>
108
- <CloseThin
109
- as="button"
110
- iconColor="#FFFFFF"
111
- fill="var(--color-grey-3)"
112
- iconSize={14}
113
- size={24}
114
- style={{
115
- borderRadius: "50%",
116
- }}
117
- />
118
- </Modal.Dismiss>
119
- </div>
120
- )}
121
- {children}
122
- {footer && <div className="footer">{footer}</div>}
123
- </div>
124
- </div>
125
- );
126
- };
127
-
128
- ModalContent.displayName = "Modal.Content";
129
- Modal.Content = ModalContent;
130
-
131
- export { Modal };
@@ -1,5 +0,0 @@
1
- export {
2
- Modal,
3
- type ModalProps,
4
- type ModalContentProps,
5
- } from "./Modal"
@@ -1,79 +0,0 @@
1
- .plan {
2
- border: 1px solid #7EB7FA;
3
- border-radius: var(--border-radius-large);
4
- padding: 32px;
5
- display: flex;
6
- flex-direction: column;
7
- place-items: center;
8
- gap: 32px;
9
- width: 300px;
10
-
11
- .popular {
12
- padding: 4px 16px;
13
- background-color: var(--color-blue-9);
14
- color: var(--color-blue-3);
15
- font-size: var(--size-14);
16
- font-weight: var(--weight-inter-bold);
17
- transform: translateY(-32px);
18
- border-radius: 0 0 var(--border-radius-normal) var(--border-radius-normal);
19
- }
20
-
21
- .name {
22
- font-size: var(--size-20);
23
- font-weight: var(--weight-inter-bold);
24
- color: var(--color-blue-3);
25
- }
26
-
27
- .description {
28
- font-size: var(--size-14);
29
- }
30
-
31
- .price {
32
- font-size: var(--size-32);
33
- font-weight: var(--weight-inter-bold);
34
- color: var(--color-grey-3);
35
- }
36
-
37
- .benefits {
38
- display: flex;
39
- flex-direction: column;
40
- gap: 8px;
41
- align-self: stretch;
42
- }
43
-
44
- .benefit {
45
- display: flex;
46
- font-size: var(--size-14);
47
- gap: 10px;
48
- place-items: center;
49
- }
50
-
51
- .benefitIcon {
52
- display: inline-flex;
53
- background-color: var(--color-purple-3);
54
- place-content: center;
55
- align-content: center;
56
- border-radius: 100%;
57
- height: 18px;
58
- width: 18px;
59
- align-items: center;
60
- }
61
-
62
- .annualSavePercent {
63
- display: flex;
64
- flex-direction: row;
65
- align-self: flex-end;
66
- width: 50%;
67
- place-content: center;
68
- padding: 8px 0;
69
- color: var(--color-green-5);
70
- font-size: var(--size-14);
71
- font-weight: var(--weight-inter-semibold);
72
- }
73
-
74
- .fluid {
75
- display: flex;
76
- flex-direction: column;
77
- align-self: stretch;
78
- }
79
- }
@@ -1,75 +0,0 @@
1
- import React from "react";
2
- import { Check } from "@soul-refiner/icons/src";
3
- import planStyles from "./Plan.module.scss";
4
- import { Button } from "../../actions";
5
- import { Switch } from "../../actions";
6
-
7
- export interface PlanProps {
8
- activeSubscription: string;
9
- annualPrice: number;
10
- monthlyPrice: number;
11
- name: string;
12
- mostPopular: boolean;
13
- description: string;
14
- benefits: string[];
15
- }
16
-
17
- export const Plan = ({
18
- activeSubscription,
19
- annualPrice = 99.99,
20
- monthlyPrice = 9.99,
21
- name = "Basic",
22
- mostPopular = false,
23
- description = "Enjoy most features with cheapest plan to get you started right away.",
24
- benefits = ["Monthly Extras", "Weekly Extras", "Daily Extras"],
25
- }: PlanProps) => {
26
- const annualSavePercent = Math.round(
27
- 100 - (Number(annualPrice) / 12 / Number(monthlyPrice)) * 100
28
- );
29
- return (
30
- <div className={planStyles.plan}>
31
- {mostPopular && <div className={planStyles.popular}>Most Popular</div>}
32
- <div className={planStyles.name}>{name}</div>
33
-
34
- <div className={planStyles.description}>{description}</div>
35
-
36
- <div className={planStyles.price}>
37
- $
38
- {activeSubscription === "Monthly"
39
- ? monthlyPrice.toString()
40
- : annualPrice.toString()}
41
- </div>
42
-
43
- <div className={planStyles.fluid}>
44
- <Switch
45
- active={activeSubscription}
46
- fluid={true}
47
- options={["Monthly", "Annually"]}
48
- />
49
- <div className={planStyles.annualSavePercent}>
50
- <>Save {annualSavePercent}%</>
51
- </div>
52
- </div>
53
-
54
- <div className={planStyles.benefits}>
55
- {benefits.map((benefit, index) => {
56
- return (
57
- <div className={planStyles.benefit} key={index}>
58
- <div className={planStyles.benefitIcon}>
59
- <Check size={16} fill="#FFFFFF" />
60
- </div>
61
- {benefit}
62
- </div>
63
- );
64
- })}
65
- </div>
66
- <Button
67
- buttonColor="var(--color-blue-9)"
68
- color="var(--color-blue-3)"
69
- fluid={true}
70
- >
71
- Get Started
72
- </Button>
73
- </div>
74
- );
75
- };
@@ -1 +0,0 @@
1
- export { Plan, type PlanProps } from "./Plan";
@@ -1,46 +0,0 @@
1
- @use "@soul-refiner/styles/_mixins";
2
-
3
- .post {
4
- position: relative;
5
- box-shadow: 0px 15px 30px rgba(0, 0, 0, 0.08);
6
- border-radius: var(--border-radius-large);
7
- padding: 16px 24px 24px;
8
-
9
- [class~="post-header"] {
10
- @include mixins.flex($justify: space-between);
11
- margin: 0px -24px;
12
- border-bottom: 1px solid var(--color-grey-9);
13
- padding: 16px 24px;
14
- }
15
-
16
- [class~="post-content"] {
17
- color: var(--color-grey-0);
18
- padding: 24px 0px;
19
- }
20
-
21
- [class~="children"] {
22
- margin: -24px;
23
- padding: 24px 0px;
24
- }
25
-
26
- [class~="action-bar"] {
27
- @include mixins.flex($justify: space-between);
28
- padding: 15px 16px;
29
- margin: 0px -24px;
30
- border-bottom: 1px solid var(--color-grey-9);
31
- }
32
-
33
- [class~="comments"] {
34
- padding: 24px 48px 0px;
35
- margin: 0px -24px;
36
- border-bottom: 1px solid var(--color-grey-9);
37
- }
38
-
39
- [class~="input-bar"] {
40
- @include mixins.flex($gap: 12px);
41
- padding: 24px 0px 0px;
42
- textarea {
43
- flex: 1;
44
- }
45
- }
46
- }
@@ -1,103 +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 { Post } from "./Post";
6
-
7
- const generateMockProps = (props) => ({
8
- children: <p>Child element</p>,
9
- content: "This is the post content",
10
- comments: [
11
- {
12
- commenter: {
13
- id: 86,
14
- avatar: "https://i.pravatar.cc/33",
15
- firstName: "Jose",
16
- lastName: "Giraldo",
17
- url: "",
18
- },
19
- content:
20
- "Onec euismod, nisl eget consectetur tempor, nisl nunc egestas nisi, euismod aliquam.",
21
- created: new Date(),
22
- reactions: 3,
23
- hasReacted: false,
24
- onReact: jest.fn(),
25
- onReply: jest.fn(),
26
- showReplies: true,
27
- },
28
- ],
29
- created: new Date(),
30
- onReact: jest.fn(),
31
- onShare: jest.fn(),
32
- onComment: jest.fn(),
33
- poster: {
34
- id: 76,
35
- avatar: "https://i.pravatar.cc/64",
36
- firstName: "Paul",
37
- lastName: "Tillich",
38
- url: "https://soulrefiner.com",
39
- },
40
- reactions: 12,
41
- shares: 6,
42
- ...props,
43
- });
44
-
45
- describe("Post renders", () => {
46
- it("an avatar, the content, the author's name, the date posted, and the children", () => {
47
- const props = generateMockProps();
48
- render(<Post {...props} />);
49
- expect(screen.getByTestId("post-avatar"));
50
- expect(screen.getByText("This is the post content"));
51
- expect(screen.getByText("Paul Tillich"));
52
- expect(screen.getByText("Just now"));
53
- expect(screen.getByText("Child element"));
54
- });
55
-
56
- it("with likes", () => {
57
- const props = generateMockProps();
58
- render(<Post {...props} />);
59
- expect(screen.getByText("12 Likes"));
60
- });
61
-
62
- it("without likes", () => {
63
- const props = generateMockProps({
64
- reactions: 0,
65
- });
66
- render(<Post {...props} />);
67
- expect(!screen.queryByTestId("likes-wrapper"));
68
- });
69
-
70
- it("the comments", () => {
71
- const props = generateMockProps();
72
- render(<Post {...props} />);
73
- const commentButton = screen.getByText("1 Comment");
74
- fireEvent.click(commentButton);
75
- expect(screen.getByText("Jose Giraldo"));
76
- });
77
-
78
- it("an incrementable like count", () => {
79
- const props = generateMockProps();
80
- render(<Post {...props} />);
81
- const likeButton = screen.getByText("12 Likes");
82
- fireEvent.click(likeButton);
83
- expect(props.onReact).toHaveBeenCalled();
84
- });
85
-
86
- it("a working share button", () => {
87
- const props = generateMockProps();
88
- render(<Post {...props} />);
89
- const shareButton = screen.getByText("6 Shares");
90
- fireEvent.click(shareButton);
91
- expect(props.onShare).toHaveBeenCalled();
92
- });
93
-
94
- it("a working comment input", () => {
95
- const props = generateMockProps();
96
- render(<Post {...props} />);
97
- const textarea = screen.getByRole("textbox");
98
- fireEvent.change(textarea, { target: { value: "Comment" } });
99
- expect(textarea.value).toEqual("Comment");
100
- fireEvent.keyDown(textarea, { key: "Enter", code: "Enter", charCode: 13 });
101
- expect(props.onComment).toHaveBeenCalledWith("Comment");
102
- });
103
- });