@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,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
- });