@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,224 +0,0 @@
1
- import React from "react";
2
- import dropdownStyles from "./Dropdown.module.scss";
3
-
4
- export interface DropdownProps
5
- extends Partial<Omit<HTMLSelectElement, "options" | "style" | "children">>,
6
- React.PropsWithChildren {
7
- className?: string;
8
- closeOnChange?: boolean;
9
- closeOnBlur?: boolean;
10
- defaultValue?: string;
11
- disabled?: boolean;
12
- maintainState?: boolean;
13
- offset?: [number, number];
14
- onChange?: (event: React.MouseEvent, value: string) => void;
15
- open?: "right" | "left";
16
- options?: React.ReactNode[] | Omit<DropdownOptionProps, "selected">[];
17
- style?: React.CSSProperties;
18
- trigger: React.ReactElement;
19
- }
20
-
21
- const Dropdown = ({
22
- className,
23
- children,
24
- closeOnChange = true,
25
- closeOnBlur = true,
26
- defaultValue = "",
27
- disabled = false,
28
- maintainState = true,
29
- offset,
30
- onChange,
31
- open: openDirection = "right",
32
- options,
33
- style,
34
- trigger,
35
- }: DropdownProps) => {
36
- const wrapperRef = React.useRef<HTMLDivElement>(null);
37
- const optionsRef = React.useRef<HTMLDivElement>(null);
38
- const [open, setOpen] = React.useState(false);
39
- const [selected, setSelected] = React.useState(defaultValue);
40
-
41
- const handleOpen = () => {
42
- if (disabled) {
43
- return;
44
- }
45
- setOpen((prev) => !prev);
46
- };
47
-
48
- const handleChange = (event: React.MouseEvent) => {
49
- event.stopPropagation();
50
- const value =
51
- (event.target as HTMLOptionElement).getAttribute("data-value") ?? "";
52
- if (selected !== value) {
53
- setSelected(value);
54
- } else {
55
- setSelected("");
56
- }
57
- if (closeOnChange) {
58
- setOpen(false);
59
- }
60
- if (onChange) onChange(event, value);
61
- };
62
-
63
- const handleBlur = (event: React.FocusEvent) => {
64
- if (
65
- closeOnBlur &&
66
- wrapperRef?.current &&
67
- !wrapperRef?.current?.contains(event.relatedTarget)
68
- ) {
69
- setOpen(false);
70
- }
71
- };
72
-
73
- React.useEffect(() => {
74
- if (disabled) {
75
- setOpen(false);
76
- }
77
- }, [disabled]);
78
-
79
- let dropdownElements;
80
- if (
81
- !children &&
82
- options &&
83
- !(
84
- typeof (options[0] as unknown as { $$typeof: symbol | undefined })
85
- .$$typeof === "symbol"
86
- )
87
- ) {
88
- dropdownElements = (
89
- options as Omit<DropdownOptionProps, "selected" | "onClick">[]
90
- ).map(({ value, ...rest }, index) => {
91
- return (
92
- <Option
93
- key={index + (value ?? "")}
94
- selected={value === selected}
95
- onClick={handleChange}
96
- value={value}
97
- {...rest}
98
- />
99
- );
100
- });
101
- } else if (!children) {
102
- dropdownElements = React.Children.map(
103
- options as unknown as React.ReactElement[],
104
- (child, index) => (
105
- <Option
106
- key={index + child.props.value}
107
- selected={child.props.value === selected}
108
- onClick={handleChange}
109
- {...child.props}
110
- />
111
- )
112
- );
113
- }
114
-
115
- return (
116
- <div
117
- className={`dropdown ${dropdownStyles.dropdown} ${
118
- disabled ? "disabled" : ""
119
- } ${className ? className : ""}`}
120
- tabIndex={0}
121
- ref={wrapperRef}
122
- style={style}
123
- onBlurCapture={handleBlur}
124
- >
125
- {React.cloneElement(
126
- trigger,
127
- typeof trigger.type === "string"
128
- ? { onClick: handleOpen }
129
- : { dropdownOpen: open, onClick: handleOpen }
130
- )}
131
- {open && (
132
- <div
133
- className={`options${openDirection === "left" ? " open-left" : ""}`}
134
- data-testid="options-wrapper"
135
- ref={optionsRef}
136
- >
137
- {!children && (dropdownElements as React.ReactElement[])}
138
- {children &&
139
- React.Children.map(children, (child, index) => {
140
- let props = {};
141
- if (React.isValidElement(child)) {
142
- const { className, onClick, ...possibleProps } = child.props;
143
- props = possibleProps;
144
- }
145
- return (
146
- <div
147
- key={index + (child as React.ReactElement).props.value}
148
- className={`${dropdownStyles.option} ${
149
- maintainState &&
150
- (child as React.ReactElement).props["data-value"] ===
151
- selected
152
- ? "selected"
153
- : ""
154
- }`}
155
- data-value={(child as React.ReactElement).props["data-value"]}
156
- onClick={onChange ? handleChange : undefined}
157
- {...props}
158
- >
159
- {child as React.ReactElement}
160
- </div>
161
- );
162
- })}
163
- </div>
164
- )}
165
- </div>
166
- );
167
- };
168
-
169
- export interface DropdownOptionProps
170
- extends Partial<Omit<HTMLOptionElement, "className" | "style" | "selected">> {
171
- checkbox?: boolean;
172
- color?: string;
173
- icon?: React.ReactNode;
174
- onClick: (event: React.MouseEvent) => void;
175
- selected?: boolean;
176
- style?: React.CSSProperties;
177
- }
178
-
179
- const Option = ({
180
- checkbox,
181
- color,
182
- disabled,
183
- icon,
184
- label,
185
- onClick,
186
- selected,
187
- style,
188
- value,
189
- }: DropdownOptionProps) => {
190
- return (
191
- <div
192
- className={`${dropdownStyles.option} ${disabled ? "disabled" : ""} ${
193
- selected ? "selected" : ""
194
- }`}
195
- data-value={value}
196
- onClick={onClick}
197
- style={
198
- {
199
- "--option-color": color,
200
- ...style,
201
- } as React.CSSProperties
202
- }
203
- >
204
- {checkbox ? <input readOnly type="checkbox" checked={selected} /> : icon}
205
- {label}
206
- </div>
207
- );
208
- };
209
-
210
- Option.displayName = "Dropdown.Option";
211
- Dropdown.Option = Option;
212
-
213
- export interface DropdownSpacerProps {
214
- style?: React.CSSProperties;
215
- }
216
-
217
- const Spacer = ({ style }: DropdownSpacerProps) => {
218
- return <div className={dropdownStyles.spacer} style={style} />;
219
- };
220
-
221
- Spacer.displayName = "Dropdown.Spacer";
222
- Dropdown.Spacer = Spacer;
223
-
224
- export { Dropdown };
@@ -1,6 +0,0 @@
1
- export {
2
- Dropdown,
3
- type DropdownProps,
4
- type DropdownOptionProps,
5
- type DropdownSpacerProps,
6
- } from "./Dropdown";
@@ -1,48 +0,0 @@
1
- @use "@soul-refiner/styles/mixins";
2
-
3
- .dropzone {
4
- display: flex;
5
- flex-direction: column;
6
- place-items: center;
7
- place-content: center;
8
- gap: 16px;
9
- padding: 32px;
10
- border-radius: var(--border-radius-normal);
11
- border: 2px dashed var(--border);
12
- background-color: var(--background);
13
- width: 100%;
14
-
15
- &[class~="dragover"] {
16
- border: 2px solid var(--icon);
17
- }
18
-
19
- input[type="file"] {
20
- display: none;
21
- }
22
-
23
- .textContainer {
24
- @include mixins.font(400, 16px, 24px);
25
- display: flex;
26
- justify-items: center;
27
- flex-flow: row wrap;
28
- gap: 8px;
29
- place-items: center;
30
- & > button {
31
- @include mixins.font(700, 16px, 24px);
32
- color: var(--icon);
33
- }
34
- }
35
-
36
- p {
37
- justify-content: center;
38
- }
39
-
40
- [class~="icon"] {
41
- max-width: fit-content;
42
- max-height: fit-content;
43
-
44
- svg {
45
- fill: var(--icon);
46
- }
47
- }
48
- }
@@ -1,60 +0,0 @@
1
- import React from "react";
2
- import "@testing-library/jest-dom";
3
- import { fireEvent, render, screen, waitFor } from "@testing-library/react";
4
-
5
- import { Dropzone } from "./Dropzone";
6
-
7
- const generateMockProps = props => ({
8
- ...props,
9
- });
10
-
11
- describe("Dropzone", () => {
12
- it("restricts the acceptable file type to images", () => {
13
- const props = generateMockProps({
14
- fileType: "image",
15
- });
16
- render(<Dropzone {...props} />);
17
- const input = screen.getByTestId("dropzone-upload-input");
18
- expect(input).toHaveAttribute("accept", "image/*");
19
- });
20
-
21
- it("restricts the acceptable file type to videos", () => {
22
- const props = generateMockProps({
23
- fileType: "video",
24
- });
25
- render(<Dropzone {...props} />);
26
- const input = screen.getByTestId("dropzone-upload-input");
27
- expect(input).toHaveAttribute("accept", "video/*");
28
- });
29
-
30
- it("restricts the acceptable file type audio", () => {
31
- const props = generateMockProps({
32
- fileType: "audio",
33
- });
34
- render(<Dropzone {...props} />);
35
- const input = screen.getByTestId("dropzone-upload-input");
36
- expect(input).toHaveAttribute("accept", "audio/*");
37
- });
38
-
39
- it("restricts the acceptable file type to documents", () => {
40
- const props = generateMockProps({
41
- fileType: "document",
42
- });
43
- render(<Dropzone {...props} />);
44
- const input = screen.getByTestId("dropzone-upload-input");
45
- expect(input).toHaveAttribute("accept", ".xlsx, .xls, .doc, .docx, .ppt, .pptx, .txt, .pdf, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, text/plain, application/pdf,");
46
- });
47
-
48
- it("calls the onDrop handler", async () => {
49
- const file = new File(["test"], "test.png", { type: "image/png" });
50
- const props = generateMockProps({
51
- onDrop: jest.fn(),
52
- });
53
- render(<Dropzone {...props} />);
54
- const input = screen.getByTestId("dropzone-upload-input");
55
- await waitFor(() => {
56
- fireEvent.change(input, { target: { files: [file] } });
57
- });
58
- expect(props.onDrop).toHaveBeenCalled();
59
- });
60
- });
@@ -1,191 +0,0 @@
1
- import React, { DragEvent, useState, useRef, CSSProperties } from "react";
2
- import dropStyles from "./Dropzone.module.scss";
3
- import { Button } from "../Button";
4
- import {
5
- UploadAudio,
6
- UploadDocument,
7
- UploadImage,
8
- UploadVideo,
9
- } from "@soul-refiner/icons/src";
10
-
11
- export interface DropzoneProps extends React.PropsWithChildren {
12
- color?:
13
- | "turquoise"
14
- | "green"
15
- | "blue"
16
- | "purple"
17
- | "yellow"
18
- | "orange"
19
- | "red"
20
- | "grey";
21
- id?: string;
22
- fileType?: "video" | "audio" | "image" | "document";
23
- multiple?: boolean;
24
- showGraphic?: boolean;
25
- subtext?: string;
26
- text?: React.ReactNode;
27
- fluid?: boolean;
28
- style?: CSSProperties;
29
- onDrop?: (files: FileList) => void;
30
- ref?: React.RefObject<HTMLInputElement>;
31
- showBrowse?: boolean;
32
- }
33
-
34
- export const Dropzone = ({
35
- children,
36
- id,
37
- color = "purple",
38
- fileType,
39
- multiple = false,
40
- showGraphic = true,
41
- subtext,
42
- text,
43
- style,
44
- onDrop,
45
- showBrowse = true,
46
- ...rest
47
- }: DropzoneProps) => {
48
- const filesRef = useRef<HTMLInputElement>(null);
49
- const [draggingOver, setDraggingOver] = useState(false);
50
-
51
- const acceptableFiletypes = () => {
52
- switch (fileType) {
53
- case "video":
54
- return "video/*";
55
- case "audio":
56
- return "audio/*";
57
- case "image":
58
- return "image/*";
59
- case "document":
60
- return ".xlsx, .xls, .doc, .docx, .ppt, .pptx, .txt, .pdf, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, text/plain, application/pdf,";
61
- }
62
- };
63
-
64
- const getImage = () => {
65
- switch (fileType) {
66
- case "video":
67
- return (
68
- <UploadVideo iconColor="transparent" iconSize={146} size={146} />
69
- );
70
- case "audio":
71
- return (
72
- <UploadAudio iconColor="transparent" iconSize={146} size={146} />
73
- );
74
- case "image":
75
- return (
76
- <UploadImage iconColor="transparent" iconSize={146} size={146} />
77
- );
78
- case "document":
79
- return (
80
- <UploadDocument iconColor="transparent" iconSize={146} size={146} />
81
- );
82
- }
83
- };
84
-
85
- const handleDragOver = (e: DragEvent<HTMLDivElement>) => {
86
- e.preventDefault();
87
- setDraggingOver(true);
88
- };
89
-
90
- const handleDragLeave = (e: DragEvent<HTMLDivElement>) => {
91
- e.preventDefault();
92
- setDraggingOver(false);
93
- };
94
-
95
- const handleDrop = (e: DragEvent<HTMLDivElement>) => {
96
- e.preventDefault();
97
- setDraggingOver(false);
98
-
99
- const files = e.dataTransfer.files;
100
- const dataTransfer: DataTransfer = new DataTransfer();
101
-
102
- for (let i = 0; i < files.length; i++) {
103
- const file: File | null = files.item(i);
104
-
105
- if (file !== null) {
106
- dataTransfer.items.add(file);
107
- }
108
- }
109
-
110
- const fileInput: HTMLInputElement | null = filesRef.current;
111
-
112
- if (fileInput !== null) {
113
- fileInput.files = dataTransfer.files;
114
-
115
- if (onDrop) {
116
- onDrop(fileInput.files);
117
- }
118
- }
119
- };
120
-
121
- const handleFileChange = () => {
122
- const fileInput: HTMLInputElement | null = filesRef.current;
123
-
124
- if (fileInput !== null) {
125
- if (onDrop && fileInput.files && fileInput.files.length) {
126
- onDrop(fileInput.files);
127
- }
128
- }
129
- };
130
-
131
- const removeFileFromState = () => {
132
- if (filesRef.current) filesRef.current.value = "";
133
- };
134
-
135
- return (
136
- <>
137
- <div
138
- style={
139
- {
140
- "--background": `var(--color-${color}-10)`,
141
- "--border": `var(--color-${color}-7)`,
142
- "--icon": `var(--color-${color}-5)`,
143
- ...style,
144
- } as React.CSSProperties
145
- }
146
- className={`${dropStyles.dropzone} ${draggingOver ? "dragover" : ""}`}
147
- id={id}
148
- onDragOver={handleDragOver}
149
- onDragLeave={handleDragLeave}
150
- onDrop={handleDrop}
151
- {...rest}
152
- >
153
- {showGraphic && <div className={dropStyles.graphic}>{getImage()}</div>}
154
- <div>
155
- <div className={dropStyles.textContainer}>
156
- {text}
157
- {showBrowse && (
158
- <Button
159
- size="small"
160
- buttonColor="transparent"
161
- onClick={() => filesRef.current?.click()}
162
- padded={false}
163
- >
164
- Browse
165
- </Button>
166
- )}
167
- </div>
168
- {subtext && <p className={dropStyles.textContainer}>{subtext}</p>}
169
- </div>
170
- <input
171
- data-testid="dropzone-upload-input"
172
- ref={filesRef}
173
- type="file"
174
- multiple={multiple}
175
- accept={acceptableFiletypes()}
176
- name="Files"
177
- onChange={handleFileChange}
178
- />
179
- </div>
180
- {React.Children.map(children, (child) => {
181
- if (React.isValidElement(child)) {
182
- return React.cloneElement(child, {
183
- handleUpload: () => filesRef.current?.click(),
184
- removeFileFromState,
185
- } as Partial<unknown> & React.Attributes);
186
- }
187
- return child;
188
- })}
189
- </>
190
- );
191
- };
@@ -1 +0,0 @@
1
- export { Dropzone, type DropzoneProps } from "./Dropzone"
@@ -1,17 +0,0 @@
1
- .rate {
2
- display: flex;
3
- flex-direction: row;
4
- place-content: center;
5
- place-items: center;
6
-
7
- font-size: var(--size-12);
8
- font-weight: var(--weight-inter-semibold);
9
- color: var(--color-grey-5);
10
-
11
- .stars {
12
- cursor: pointer;
13
- display: flex;
14
- flex-direction: row;
15
- gap: 2px;
16
- }
17
- }
@@ -1,53 +0,0 @@
1
- import React, { CSSProperties, useState } from "react";
2
- import { Star } from "@soul-refiner/icons/src";
3
- import rateStyles from "./Rate.module.scss";
4
-
5
- export interface RateProps {
6
- ownRating?: number;
7
- label?: string;
8
- direction?: "vertical" | "horizontal";
9
- onClickRating: (rating: number) => void;
10
- }
11
-
12
- export const Rate = ({
13
- ownRating = 0,
14
- label,
15
- direction = "vertical",
16
- onClickRating,
17
- }: RateProps) => {
18
- const [starsHover, setStarsHover] = useState<number>(ownRating);
19
-
20
- const stars: number[] = [1, 2, 3, 4, 5];
21
-
22
- const style: CSSProperties = {
23
- flexDirection: direction === "vertical" ? "column" : "row",
24
- };
25
-
26
- return (
27
- <div
28
- className={rateStyles.rate}
29
- style={style}
30
- onMouseLeave={() => setStarsHover(ownRating)}
31
- >
32
- {label && label}
33
- <div className={rateStyles.stars}>
34
- {stars.map((star, index) => {
35
- const active = index + 1 <= starsHover;
36
- const fills = active
37
- ? `hsl(${40 - star * 2.3}deg 100% 50%)`
38
- : undefined;
39
- return (
40
- <Star
41
- key={index}
42
- style={{ height: "auto", width: "auto", padding: 0 }}
43
- fill={fills}
44
- className={index + 1 <= starsHover ? "hover" : ""}
45
- onMouseOver={() => setStarsHover(star)}
46
- onClick={() => onClickRating(star)}
47
- />
48
- );
49
- })}
50
- </div>
51
- </div>
52
- );
53
- };
@@ -1 +0,0 @@
1
- export { Rate, type RateProps } from "./Rate"
@@ -1,35 +0,0 @@
1
- .switch {
2
- display: flex;
3
- flex-direction: row;
4
- padding: 4px;
5
- border-radius: 35px;
6
- background-color: var(--color-blue-9);
7
-
8
- &> div {
9
- padding: 4px 16px;
10
- border-radius: 1vw;
11
- font-weight: var(--weight-inter-semibold);
12
- user-select: none;
13
- flex-grow: 1;
14
- display: flex;
15
- justify-content: center;
16
-
17
- }
18
-
19
- [class~=active] {
20
- background-color: #FFF;
21
- color: var(--color-blue-3);
22
- }
23
-
24
- [class~=inactive] {
25
- color: var(--color-blue-6);
26
- cursor: pointer;
27
- }
28
-
29
-
30
- }
31
-
32
- .fluid {
33
- align-self: stretch;
34
- place-content: center;
35
- }
@@ -1,31 +0,0 @@
1
- import React from "react";
2
- import "@testing-library/jest-dom";
3
- import { render, screen } from "@testing-library/react";
4
-
5
- import { Switch } from "./Switch";
6
-
7
- const generateMockProps = props => ({
8
- ...props,
9
- });
10
-
11
- describe("Switch", () => {
12
- it("renders the switch", () => {
13
- const props = generateMockProps({
14
- optionA: "Option A",
15
- optionB: "Option B"
16
- });
17
- render(<Switch {...props} />);
18
- expect(screen.getByText("Option A"));
19
- expect(screen.getByText("Option B"));
20
- });
21
-
22
- it("changes the active index", () => {
23
- const props = generateMockProps({
24
- optionA: "Option A",
25
- optionB: "Option B",
26
- active: 1,
27
- });
28
- render(<Switch {...props} />);
29
- expect(screen.getByText("Option B")).toHaveClass("active");
30
- });
31
- });