@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,34 +0,0 @@
1
- import React from "react";
2
- import switchStyles from "./Switch.module.scss";
3
-
4
- export interface SwitchProps {
5
- active: string;
6
- fluid?: boolean;
7
- onClick?: (option: string) => void;
8
- options: string[];
9
- }
10
-
11
- export const Switch = ({
12
- active,
13
- fluid = true,
14
- onClick,
15
- options,
16
- }: SwitchProps) => {
17
- return (
18
- <div
19
- className={`${switchStyles.switch} switch ${
20
- !!fluid ? switchStyles.fluid : ""
21
- }`}
22
- >
23
- {options.map((option, index) => (
24
- <div
25
- key={"switch-option-" + index.toString(36)}
26
- className={active === option ? "active" : "inactive"}
27
- onClick={() => onClick && onClick(option)}
28
- >
29
- {option}
30
- </div>
31
- ))}
32
- </div>
33
- );
34
- };
@@ -1 +0,0 @@
1
- export { Switch, type SwitchProps } from "./Switch";
@@ -1,5 +0,0 @@
1
- export { Button, type ButtonProps } from "./Button";
2
- export { Dropdown, type DropdownProps } from "./Dropdown";
3
- export { Dropzone, type DropzoneProps } from "./Dropzone";
4
- export { Rate, type RateProps } from "./Rate";
5
- export { Switch, type SwitchProps } from "./Switch";
@@ -1,219 +0,0 @@
1
- @use "@soul-refiner/styles/mixins";
2
-
3
- .coursecard {
4
- position: relative;
5
- display: block;
6
- cursor: pointer;
7
-
8
- [class~="thumbnail"] {
9
- width: 100%;
10
- object-fit: cover;
11
- object-position: center center;
12
- filter: drop-shadow(0px 4px 7px rgba(0, 0, 0, 0.25));
13
- border-radius: 12px;
14
- }
15
-
16
- [class~="preview-content"] {
17
- @include mixins.flex($align: flex-end, $justify: space-between);
18
- z-index: 5;
19
- width: 100%;
20
- position: relative;
21
- & > h2 {
22
- font-weight: 800;
23
- }
24
- & > p {
25
- color: var(--color-grey-3);
26
- font-size: 12px;
27
- line-height: 24px;
28
- display: block;
29
- }
30
- & > div {
31
- gap: 8px;
32
- & > button {
33
- height: 36px;
34
- }
35
- }
36
- }
37
-
38
- [class~="header"] {
39
- & > div > h2 {
40
- @include mixins.font-clamp(1);
41
- }
42
- }
43
-
44
- [class~="subtitle"] {
45
- font-size: 13px;
46
- line-height: 13px;
47
- color: var(--color-grey-0);
48
- &::before {
49
- content: "by ";
50
- font-style: italic;
51
- font-weight: 200;
52
- color: var(--color-grey-5);
53
- }
54
- }
55
-
56
- [class~="hover-content"] {
57
- display: none;
58
- background-color: transparent;
59
- border-bottom-left-radius: 16px;
60
- border-bottom-right-radius: 16px;
61
- position: relative;
62
- z-index: 5;
63
- width: 100%;
64
- padding: 8px;
65
- [class~="header"] {
66
- @include mixins.flex();
67
- width: 100%;
68
- & > div:first-child {
69
- margin-right: auto;
70
- }
71
- & > div:last-child {
72
- @include mixins.flex($gap: 10px);
73
- }
74
- & > div > h2 {
75
- color: var(--color-blue-4);
76
- line-height: 28px;
77
- }
78
- }
79
- [class~="header"] + div {
80
- gap: 8px;
81
- & > button {
82
- height: 36px;
83
- }
84
- }
85
- [class~="rating"] {
86
- @include mixins.flex($align: center, $gap: 6px);
87
- p {
88
- @include mixins.font(400, 12px, 16px);
89
- color: var(--color-grey-4);
90
- }
91
- }
92
- }
93
-
94
- &[class~="video"] {
95
- width: 394px;
96
- [class~="preview-content"] {
97
- padding: 8px;
98
- & > h2 {
99
- padding-left: 8px;
100
- }
101
- & > p {
102
- padding-right: 13px;
103
- }
104
- }
105
- [class~="thumbnail"] {
106
- height: 202px;
107
- }
108
- [class~="hover-content"] {
109
- padding: 0px 24px 26px;
110
- margin-top: -24px;
111
- & > p {
112
- @include mixins.font-clamp(3);
113
- }
114
- }
115
- &:hover {
116
- width: 426px;
117
- transform: translate(-16px, -64px);
118
- [class~="thumbnail"] {
119
- height: 240px;
120
- }
121
- &::after {
122
- background: linear-gradient(
123
- 0deg,
124
- #ffffff 50%,
125
- rgba(255, 255, 255, 0.85) 55%,
126
- rgba(255, 255, 255, 0.1) 80%
127
- );
128
- }
129
- }
130
- }
131
-
132
- &[class~="audio"],
133
- &[class~="written"] {
134
- width: 195px;
135
-
136
- [class~="preview-content"] {
137
- padding: 11px 0px;
138
- & > p {
139
- white-space: nowrap;
140
- position: relative;
141
- top: 2px;
142
- }
143
- & > div > div > p {
144
- width: 100px;
145
- @include mixins.font-clamp();
146
- }
147
- }
148
- [class~="thumbnail"] {
149
- height: 202px;
150
- }
151
- [class~="hover-content"] {
152
- [class~="header"] {
153
- & > div > h2:first-of-type {
154
- position: absolute;
155
- top: -24px;
156
- }
157
- }
158
- margin-top: -24px;
159
- padding-bottom: 24px;
160
- & > p {
161
- @include mixins.font-clamp(5);
162
- }
163
- }
164
- &:hover {
165
- width: 286px;
166
- transform: translate(-45px, -64px);
167
- &::after {
168
- background: linear-gradient(
169
- 0deg,
170
- #ffffff 44%,
171
- rgba(255, 255, 255, 1) 58%,
172
- rgba(255, 255, 255, 0.1) 100%
173
- );
174
- }
175
- }
176
- }
177
-
178
- &[class~="written"] {
179
- [class~="actions-top"] {
180
- position: absolute;
181
- top: -180px;
182
- right: 0;
183
- padding: 4px 8px;
184
- border-radius: 12px;
185
- background-color: #ffffff75;
186
- }
187
- [class~="hover-content"] {
188
- [class~="header"] {
189
- & > div > h2:first-of-type {
190
- position: unset;
191
- top: unset;
192
- }
193
- }
194
- }
195
- }
196
-
197
- &:hover {
198
- border-radius: 16px;
199
- box-shadow: 0px 3.87273px 14.5227px rgba(0, 0, 0, 0.33);
200
-
201
- &::after {
202
- content: "";
203
- position: absolute;
204
- bottom: 0;
205
- right: 0;
206
- width: 100%;
207
- height: 100%;
208
- border-radius: 16px;
209
- }
210
-
211
- [class~="preview-content"] {
212
- display: none;
213
- }
214
-
215
- [class~="hover-content"] {
216
- @include mixins.flex($dir: column, $gap: 8px);
217
- }
218
- }
219
- }
@@ -1,60 +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 { CourseCard } from "./CourseCard";
7
-
8
- const props = {
9
- description: "The Conquer Series, unrivaled in its scope and authority, lays out the process to permanently stop watching porn with proven strategies and tools that have helped thousands of people around the world.",
10
- episodes: 6,
11
- onFavorite: jest.fn(),
12
- onAddToCollection: jest.fn(),
13
- owner: {
14
- id: 76,
15
- avatar: "https://source.unsplash.com/random/64x64/?christian",
16
- firstName: "Soul",
17
- lastName: "Refiner",
18
- url: "",
19
- },
20
- plans: [
21
- {
22
- type: "rent",
23
- price: 129,
24
- },
25
- ],
26
- ratings: [4, 2, 4, 5, 3, 5, 3, 5, 3, 3, 4, 5, 4],
27
- showAuthor: true,
28
- title: "Conquer Series",
29
- thumbnail: "https://source.unsplash.com/random/300x300/?christian",
30
- type: "video"
31
- }
32
-
33
- describe("Course Card", () => {
34
- it("renders", () => {
35
- render(<CourseCard {...props} />);
36
- expect(screen.getAllByText("Conquer Series"));
37
- expect(screen.getAllByText("Soul Refiner"));
38
- expect(screen.getByText("Rent $129"));
39
- expect(screen.getByText("6 episodes"));
40
- });
41
-
42
- it("calculates the right rating", () => {
43
- render(<CourseCard {...props} />);
44
- expect(screen.getByText("(13)"));
45
- });
46
-
47
- it("fires the onFavorite handler", () => {
48
- render(<CourseCard {...props} />);
49
- const favoriteButton = screen.getByTestId("favorite-icon");
50
- fireEvent.click(favoriteButton);
51
- expect(props.onFavorite).toHaveBeenCalled();
52
- });
53
-
54
- it("fires the onAddToCollection handler", () => {
55
- render(<CourseCard {...props} />);
56
- const joinButton = screen.getByTestId("plus-icon");
57
- fireEvent.click(joinButton);
58
- expect(props.onAddToCollection).toHaveBeenCalled();
59
- });
60
- })
@@ -1,145 +0,0 @@
1
- import React from "react";
2
- import { User } from "@soul-refiner/models";
3
- import { capitalize } from "@soul-refiner/utils/src";
4
- import { PlayOutline, Plus, Star, StarOutline } from "@soul-refiner/icons/src";
5
- import courseCardStyles from "./CourseCard.module.scss";
6
- import { Avatar, StarRating } from "../../iconography";
7
-
8
- export interface CourseCardProps {
9
- description: string;
10
- episodes: number;
11
- favorited: boolean;
12
- href: string;
13
- onAddToCollection: () => void;
14
- onFavorite: () => void;
15
- owner: Partial<User>;
16
- plans: Partial<
17
- {
18
- price: number;
19
- type: "rent" | "buy";
20
- }[]
21
- >;
22
- ratings: number[];
23
- type: "video" | "audio" | "written";
24
- showAuthor: boolean;
25
- style: React.CSSProperties;
26
- thumbnail: string;
27
- title: string;
28
- }
29
-
30
- export const CourseCard = ({
31
- description,
32
- episodes,
33
- favorited,
34
- href,
35
- onAddToCollection,
36
- onFavorite,
37
- owner,
38
- plans,
39
- ratings,
40
- type = "video",
41
- showAuthor,
42
- style,
43
- thumbnail,
44
- title,
45
- }: CourseCardProps) => {
46
- const additionalStyles = {};
47
- const episodePhrase = `${episodes} ${type === "video" ? "episode" : "ep"}${
48
- episodes !== 1 && type === "video" ? "s" : ""
49
- }`;
50
- const rating = Number(
51
- ratings
52
- .reduce((prev, curr) => {
53
- return prev + curr / ratings.length;
54
- }, 0)
55
- .toPrecision(2)
56
- );
57
-
58
- return (
59
- <a
60
- className={`${courseCardStyles.coursecard} ${type}`}
61
- href={href}
62
- style={{ ...additionalStyles, ...style }}
63
- >
64
- <img
65
- alt={title}
66
- className="thumbnail"
67
- src={thumbnail}
68
- title={`${title} by ${owner?.firstName} ${owner?.lastName}`}
69
- />
70
- <div className="preview-content">
71
- {showAuthor ? (
72
- <Avatar
73
- size={36}
74
- url={owner.avatar ?? ""}
75
- subtitle={`${owner?.firstName} ${owner?.lastName}`}
76
- title={title}
77
- />
78
- ) : (
79
- <h2 className="body body-large">{title}</h2>
80
- )}
81
- {!!episodes && <p>{episodePhrase}</p>}
82
- </div>
83
- <div className="hover-content">
84
- <div className="header">
85
- <div>
86
- <h2 className="bold body body-large">
87
- {type === "video"
88
- ? "Watch"
89
- : type === "audio"
90
- ? "Listen"
91
- : "Read"}{" "}
92
- with {owner?.firstName} {owner?.lastName}
93
- </h2>
94
- <h2 className="bold body body-large">
95
- {capitalize(plans[0]?.type ?? "")} ${plans[0]?.price}
96
- </h2>
97
- </div>
98
- <div className={type === "written" ? "actions-top" : ""}>
99
- <PlayOutline
100
- fill="var(--color-grey-0)"
101
- iconSize={17}
102
- onClick={() => {}}
103
- size={24}
104
- />
105
- <Plus
106
- data-testid="plus-icon"
107
- fill="var(--color-grey-0)"
108
- iconSize={19}
109
- onClick={onAddToCollection}
110
- size={24}
111
- />
112
- {favorited ? (
113
- <Star
114
- data-testid="favorite-icon"
115
- fill="var(--color-grey-0)"
116
- iconSize={19}
117
- onClick={onFavorite}
118
- size={24}
119
- />
120
- ) : (
121
- <StarOutline
122
- data-testid="favorite-icon"
123
- fill="var(--color-grey-0)"
124
- iconSize={19}
125
- onClick={onFavorite}
126
- size={24}
127
- />
128
- )}
129
- </div>
130
- </div>
131
- <Avatar
132
- size={36}
133
- url={owner.avatar ?? ""}
134
- subtitle={`${owner?.firstName} ${owner?.lastName}`}
135
- title={title}
136
- />
137
- <p>{description}</p>
138
- <div className="rating">
139
- <StarRating rating={rating} width={80} />
140
- <p>({ratings.length})</p>
141
- </div>
142
- </div>
143
- </a>
144
- );
145
- };
@@ -1 +0,0 @@
1
- export { CourseCard, type CourseCardProps } from "./CourseCard";
@@ -1,69 +0,0 @@
1
- @use "@soul-refiner/styles/mixins";
2
-
3
- .episodecard {
4
- @include mixins.flex($gap: 32px);
5
- height: 196px;
6
- width: 1000px;
7
- padding: 18px 40px 18px 16px;
8
- box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);
9
- border-radius: var(--border-radius-normal);
10
- background-color: #ffffff;
11
- cursor: pointer;
12
-
13
- & > div:first-of-type {
14
- height: 100%;
15
- position: relative;
16
- & > img {
17
- height: 100%;
18
- border-radius: 6.6px;
19
- }
20
- & > progress {
21
- -webkit-appearance: none;
22
- -moz-appearance: none;
23
- appearance: none;
24
- position: absolute;
25
- bottom: -0.5px;
26
- left: 2px;
27
- width: calc(100% - 4px);
28
- height: 4px;
29
- border: none;
30
- clip-path: inset(0rem 0% round 0rem 0rem 10px 10px);
31
- }
32
- & > progress::-webkit-progress-bar {
33
- background-color: var(--color-grey-0);
34
- }
35
- & > progress::-webkit-progress-value {
36
- background-color: #ffa724;
37
- }
38
- }
39
-
40
- & > div:last-of-type {
41
- @include mixins.flex($dir: column, $gap: 23px);
42
- width: 100%;
43
- div {
44
- width: 100%;
45
- @include mixins.flex($gap: 8px, $align: center);
46
- h2 {
47
- @include mixins.font(700, 22px, 24px);
48
- color: var(--color-grey-5);
49
- &:last-of-type {
50
- margin-right: auto;
51
- }
52
- }
53
- p {
54
- margin-right: 18px;
55
- color: var(--color-grey-5);
56
- }
57
- }
58
-
59
- & > p {
60
- @include mixins.font(400, 16px, 24px);
61
- @include mixins.font-clamp(4);
62
- color: var(--color-grey-4);
63
- }
64
- }
65
-
66
- &:hover {
67
- background-color: var(--color-grey-9);
68
- }
69
- }
@@ -1,53 +0,0 @@
1
- import React from "react";
2
- import styles from "./EpisodeCard.module.scss";
3
- import { Audio, Video } from "@soul-refiner/icons/src";
4
- import { abbrTimeLength } from "@soul-refiner/utils/src/dates";
5
-
6
- export interface EpisodeCardProps {
7
- description: string;
8
- index: number;
9
- /**
10
- * The length of the episode in seconds
11
- */
12
- length: number;
13
- /**
14
- * Enter the progress in seconds watched
15
- * A falsy value does not render the progress bar
16
- */
17
- progress: number;
18
- thumbnail: string;
19
- title: string;
20
- type: "audio" | "video";
21
- }
22
-
23
- export const EpisodeCard = ({
24
- description,
25
- index,
26
- length,
27
- progress,
28
- thumbnail,
29
- title,
30
- type,
31
- }: EpisodeCardProps) => {
32
- return (
33
- <div className={`${styles.episodecard}`}>
34
- <div>
35
- <img src={thumbnail} alt={title} title={title} />
36
- {!!progress && <progress value={progress} max={length} />}
37
- </div>
38
- <div>
39
- <div>
40
- <h2>{index}.</h2>
41
- <h2>{title}</h2>
42
- {type === "video" ? (
43
- <Video fill="var(--color-grey-5)" iconSize={16} size={24} />
44
- ) : (
45
- <Audio fill="var(--color-grey-5)" iconSize={16} size={24} />
46
- )}
47
- <p>{abbrTimeLength(length)}</p>
48
- </div>
49
- <p>{description}</p>
50
- </div>
51
- </div>
52
- );
53
- };
@@ -1 +0,0 @@
1
- export { EpisodeCard, type EpisodeCardProps } from "./EpisodeCard";
@@ -1,116 +0,0 @@
1
- @use "@soul-refiner/styles/_mixins";
2
-
3
- .featurecard {
4
- background-color: var(--color-grey-9);
5
- display: block;
6
- padding: 16px;
7
- border-radius: 12px;
8
- position: relative;
9
- width: fit-content;
10
-
11
- &[class~="not-editing"] {
12
- @include mixins.hover-editable();
13
- cursor: pointer;
14
- }
15
-
16
- figure {
17
- img {
18
- border-radius: 12px;
19
- width: 352px;
20
- height: 352px;
21
- display: block;
22
- }
23
-
24
- figcaption {
25
- @include mixins.font(700, 20px, 25px);
26
- @include mixins.font-clamp();
27
- width: 352px;
28
- padding: 19px 0px 4px;
29
- }
30
-
31
- p {
32
- @include mixins.font(400, 13px, 20px);
33
- @include mixins.font-clamp();
34
- width: 352px;
35
- }
36
-
37
- input {
38
- width: 100%;
39
- display: block;
40
- box-sizing: border-box;
41
- box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.1);
42
- background-color: #f2f8ff;
43
- border: none;
44
- border-radius: var(--border-radius-small);
45
- margin: 6px 0px;
46
- padding: 5px 16px;
47
- &:focus {
48
- outline: none;
49
- }
50
- }
51
-
52
- input:first-of-type {
53
- @include mixins.font(700, 20px, 25px);
54
- margin-top: 12px;
55
- padding: 13px 16px;
56
- }
57
-
58
- button {
59
- position: absolute;
60
-
61
- &:hover {
62
- background-color: var(--color-blue-9);
63
- }
64
-
65
- &:active {
66
- background-color: var(--color-grey-4);
67
- color: var(--color-grey-10);
68
- svg {
69
- fill: var(--color-grey-10);
70
- }
71
- }
72
- }
73
-
74
- [class~="photo-edit"] {
75
- display: none;
76
- right: 32px;
77
- top: 321px;
78
- padding: 8px 14px;
79
- }
80
-
81
- [class~="text-edit"] {
82
- @at-root button#{&} {
83
- right: 16px;
84
- }
85
- }
86
- }
87
-
88
- &:hover {
89
- figure > button {
90
- display: flex !important;
91
- }
92
- }
93
-
94
- [class~="actions"] {
95
- @include mixins.flex($justify: flex-end, $gap: 4px);
96
- width: 100%;
97
- button {
98
- background-color: var(--color-grey-10);
99
- box-shadow: 0px 3px 5px rgba(9, 30, 66, 0.2),
100
- 0px 0px 1px rgba(9, 30, 66, 0.31);
101
- border-radius: 3px;
102
-
103
- &:hover {
104
- background-color: var(--color-blue-9);
105
- }
106
-
107
- &:active {
108
- background-color: var(--color-grey-4);
109
- color: var(--color-grey-10);
110
- svg {
111
- fill: var(--color-grey-10);
112
- }
113
- }
114
- }
115
- }
116
- }