@helpwave/hightide 0.0.9 → 0.0.12

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 (301) hide show
  1. package/README.md +1 -1
  2. package/dist/coloring/shading.d.ts +2 -0
  3. package/dist/coloring/shading.js +40 -0
  4. package/dist/coloring/types.d.ts +11 -0
  5. package/dist/coloring/types.js +1 -0
  6. package/dist/components/Avatar.d.ts +14 -0
  7. package/dist/components/Avatar.js +35 -0
  8. package/dist/components/AvatarGroup.d.ts +10 -0
  9. package/dist/components/AvatarGroup.js +13 -0
  10. package/dist/components/BreadCrumb.d.ts +16 -0
  11. package/dist/components/BreadCrumb.js +12 -0
  12. package/dist/components/Button.d.ts +41 -0
  13. package/dist/components/Button.js +84 -0
  14. package/dist/components/ChipList.d.ts +21 -0
  15. package/dist/components/ChipList.js +38 -0
  16. package/dist/components/Circle.d.ts +6 -0
  17. package/dist/components/Circle.js +10 -0
  18. package/dist/components/ErrorComponent.d.ts +13 -0
  19. package/dist/components/ErrorComponent.js +19 -0
  20. package/dist/components/Expandable.d.ts +30 -0
  21. package/dist/components/Expandable.js +16 -0
  22. package/dist/components/HelpwaveBadge.d.ts +11 -0
  23. package/dist/components/HelpwaveBadge.js +14 -0
  24. package/dist/components/HideableContentSection.d.ts +10 -0
  25. package/dist/components/HideableContentSection.js +15 -0
  26. package/dist/components/InputGroup.d.ts +13 -0
  27. package/dist/components/InputGroup.js +33 -0
  28. package/dist/components/LoadingAndErrorComponent.d.ts +17 -0
  29. package/dist/components/LoadingAndErrorComponent.js +25 -0
  30. package/dist/components/LoadingAnimation.d.ts +13 -0
  31. package/dist/components/LoadingAnimation.js +19 -0
  32. package/dist/components/LoadingButton.d.ts +6 -0
  33. package/dist/components/LoadingButton.js +10 -0
  34. package/dist/components/MarkdownInterpreter.d.ts +25 -0
  35. package/dist/components/MarkdownInterpreter.js +190 -0
  36. package/dist/components/Pagination.d.ts +14 -0
  37. package/dist/components/Pagination.js +25 -0
  38. package/dist/components/Profile.d.ts +28 -0
  39. package/dist/components/Profile.js +45 -0
  40. package/dist/components/ProgressIndicator.d.ts +21 -0
  41. package/dist/components/ProgressIndicator.js +24 -0
  42. package/dist/components/Ring.d.ts +31 -0
  43. package/dist/components/Ring.js +113 -0
  44. package/dist/components/SearchableList.d.ts +18 -0
  45. package/dist/components/SearchableList.js +27 -0
  46. package/dist/components/SortButton.d.ts +10 -0
  47. package/dist/components/SortButton.js +9 -0
  48. package/dist/components/Span.js +1 -0
  49. package/dist/components/StepperBar.d.ts +23 -0
  50. package/dist/components/StepperBar.js +47 -0
  51. package/dist/components/Table.d.ts +87 -0
  52. package/dist/components/Table.js +187 -0
  53. package/dist/components/TechRadar.d.ts +36 -0
  54. package/dist/components/TechRadar.js +191 -0
  55. package/dist/components/TextImage.d.ts +20 -0
  56. package/dist/components/TextImage.js +31 -0
  57. package/dist/components/TimeDisplay.d.ts +30 -0
  58. package/dist/components/TimeDisplay.js +83 -0
  59. package/dist/components/Tooltip.d.ts +34 -0
  60. package/dist/components/Tooltip.js +38 -0
  61. package/dist/components/VerticalDivider.d.ts +11 -0
  62. package/dist/components/VerticalDivider.js +7 -0
  63. package/dist/components/date/DatePicker.d.ts +26 -0
  64. package/dist/components/date/DatePicker.js +58 -0
  65. package/dist/components/date/DayPicker.d.ts +16 -0
  66. package/dist/components/date/DayPicker.js +37 -0
  67. package/dist/components/date/TimePicker.d.ts +12 -0
  68. package/dist/components/date/TimePicker.js +79 -0
  69. package/dist/components/date/YearMonthPicker.d.ts +11 -0
  70. package/dist/components/date/YearMonthPicker.js +59 -0
  71. package/dist/components/examples/InputGroupExample.d.ts +6 -0
  72. package/dist/components/examples/InputGroupExample.js +21 -0
  73. package/dist/components/examples/MultiSelectExample.d.ts +7 -0
  74. package/dist/components/examples/MultiSelectExample.js +27 -0
  75. package/dist/components/examples/SearchableSelectExample.d.ts +6 -0
  76. package/dist/components/examples/SearchableSelectExample.js +17 -0
  77. package/dist/components/examples/SelectExample.d.ts +4 -0
  78. package/dist/components/examples/SelectExample.js +15 -0
  79. package/dist/components/examples/StackingModals.d.ts +4 -0
  80. package/dist/components/examples/StackingModals.js +15 -0
  81. package/dist/components/examples/TableExample.d.ts +9 -0
  82. package/dist/components/examples/TableExample.js +92 -0
  83. package/dist/components/examples/TextareaExample.d.ts +6 -0
  84. package/dist/components/examples/TextareaExample.js +10 -0
  85. package/dist/components/examples/TileExample.d.ts +9 -0
  86. package/dist/components/examples/TileExample.js +9 -0
  87. package/dist/components/examples/Title.js +1 -0
  88. package/dist/components/examples/date/DateTimePickerExample.d.ts +10 -0
  89. package/dist/components/examples/date/DateTimePickerExample.js +21 -0
  90. package/dist/components/examples/properties/CheckboxPropertyExample.d.ts +8 -0
  91. package/dist/components/examples/properties/CheckboxPropertyExample.js +13 -0
  92. package/dist/components/examples/properties/DatePropertyExample.d.ts +8 -0
  93. package/dist/components/examples/properties/DatePropertyExample.js +23 -0
  94. package/dist/components/examples/properties/MultiSelectPropertyExample.d.ts +8 -0
  95. package/dist/components/examples/properties/MultiSelectPropertyExample.js +16 -0
  96. package/dist/components/examples/properties/NumberPropertyExample.d.ts +6 -0
  97. package/dist/components/examples/properties/NumberPropertyExample.js +13 -0
  98. package/dist/components/examples/properties/SelectPropertyExample.d.ts +6 -0
  99. package/dist/components/examples/properties/SelectPropertyExample.js +18 -0
  100. package/dist/components/examples/properties/TextPropertyExample.d.ts +8 -0
  101. package/dist/components/examples/properties/TextPropertyExample.js +13 -0
  102. package/dist/components/icons/Helpwave.d.ts +10 -0
  103. package/dist/components/icons/Helpwave.js +20 -0
  104. package/dist/components/icons/Tag.d.ts +10 -0
  105. package/dist/components/icons/Tag.js +12 -0
  106. package/dist/components/layout/Carousel.d.ts +22 -0
  107. package/dist/components/layout/Carousel.js +233 -0
  108. package/dist/components/layout/DividerInserter.d.ts +11 -0
  109. package/dist/components/layout/DividerInserter.js +20 -0
  110. package/dist/components/layout/FAQSection.d.ts +23 -0
  111. package/dist/components/layout/FAQSection.js +14 -0
  112. package/dist/components/layout/Tile.d.ts +34 -0
  113. package/dist/components/layout/Tile.js +18 -0
  114. package/dist/components/modals/ConfirmDialog.d.ts +34 -0
  115. package/dist/components/modals/ConfirmDialog.js +31 -0
  116. package/dist/components/modals/DiscardChangesDialog.d.ts +19 -0
  117. package/dist/components/modals/DiscardChangesDialog.js +24 -0
  118. package/dist/components/modals/InputModal.d.ts +9 -0
  119. package/dist/components/modals/InputModal.js +9 -0
  120. package/dist/components/modals/LanguageModal.d.ts +17 -0
  121. package/dist/components/modals/LanguageModal.js +35 -0
  122. package/dist/components/modals/Modal.d.ts +38 -0
  123. package/dist/components/modals/Modal.js +57 -0
  124. package/dist/components/modals/ModalRegister.d.ts +11 -0
  125. package/dist/components/modals/ModalRegister.js +28 -0
  126. package/dist/components/properties/CheckboxProperty.d.ts +15 -0
  127. package/dist/components/properties/CheckboxProperty.js +27 -0
  128. package/dist/components/properties/DateProperty.d.ts +11 -0
  129. package/dist/components/properties/DateProperty.js +22 -0
  130. package/dist/components/properties/MultiSelectProperty.d.ts +12 -0
  131. package/dist/components/properties/MultiSelectProperty.js +33 -0
  132. package/dist/components/properties/NumberProperty.d.ts +16 -0
  133. package/dist/components/properties/NumberProperty.js +42 -0
  134. package/dist/components/properties/PropertyBase.d.ts +23 -0
  135. package/dist/components/properties/PropertyBase.js +27 -0
  136. package/dist/components/properties/SelectProperty.d.ts +12 -0
  137. package/dist/components/properties/SelectProperty.js +22 -0
  138. package/dist/components/properties/TextProperty.d.ts +15 -0
  139. package/dist/components/properties/TextProperty.js +37 -0
  140. package/dist/components/user-input/Checkbox.d.ts +37 -0
  141. package/dist/components/user-input/Checkbox.js +63 -0
  142. package/dist/components/user-input/DateAndTimePicker.d.ts +39 -0
  143. package/dist/components/user-input/DateAndTimePicker.js +65 -0
  144. package/dist/components/user-input/Input.d.ts +61 -0
  145. package/dist/components/user-input/Input.js +61 -0
  146. package/dist/components/user-input/Label.d.ts +12 -0
  147. package/dist/components/user-input/Label.js +12 -0
  148. package/dist/components/user-input/Menu.d.ts +21 -0
  149. package/dist/components/user-input/Menu.js +26 -0
  150. package/dist/components/user-input/MultiSelect.d.ts +39 -0
  151. package/dist/components/user-input/MultiSelect.js +57 -0
  152. package/dist/components/user-input/ScrollPicker.d.ts +11 -0
  153. package/dist/components/user-input/ScrollPicker.js +151 -0
  154. package/dist/components/user-input/SearchableSelect.d.ts +8 -0
  155. package/dist/components/user-input/SearchableSelect.js +14 -0
  156. package/dist/components/user-input/Select.d.ts +32 -0
  157. package/dist/components/user-input/Select.js +48 -0
  158. package/dist/components/user-input/Textarea.d.ts +20 -0
  159. package/dist/components/user-input/Textarea.js +33 -0
  160. package/dist/components/user-input/ToggleableInput.d.ts +32 -0
  161. package/dist/components/user-input/ToggleableInput.js +40 -0
  162. package/dist/css/globals.css +2450 -0
  163. package/dist/hooks/useHoverState.d.ts +40 -0
  164. package/dist/hooks/useHoverState.js +46 -0
  165. package/dist/hooks/useLanguage.d.ts +17 -0
  166. package/dist/hooks/useLanguage.js +51 -0
  167. package/dist/hooks/useLocalStorage.d.ts +4 -0
  168. package/dist/hooks/useLocalStorage.js +24 -0
  169. package/dist/hooks/useOutsideClick.d.ts +2 -0
  170. package/dist/hooks/useOutsideClick.js +22 -0
  171. package/dist/hooks/useSaveDelay.d.ts +5 -0
  172. package/dist/hooks/useSaveDelay.js +41 -0
  173. package/dist/hooks/useTheme.d.ts +16 -0
  174. package/dist/hooks/useTheme.js +32 -0
  175. package/dist/hooks/useTranslation.d.ts +24 -0
  176. package/dist/hooks/useTranslation.js +11 -0
  177. package/dist/util/array.d.ts +23 -0
  178. package/dist/util/array.js +103 -0
  179. package/{util/builder.ts → dist/util/builder.d.ts} +1 -4
  180. package/dist/util/builder.js +9 -0
  181. package/dist/util/date.d.ts +28 -0
  182. package/dist/util/date.js +133 -0
  183. package/dist/util/easeFunctions.d.ts +9 -0
  184. package/dist/util/easeFunctions.js +30 -0
  185. package/dist/util/emailValidation.d.ts +1 -0
  186. package/dist/util/emailValidation.js +3 -0
  187. package/dist/util/loopingArray.d.ts +23 -0
  188. package/dist/util/loopingArray.js +67 -0
  189. package/dist/util/math.d.ts +1 -0
  190. package/dist/util/math.js +3 -0
  191. package/dist/util/news.d.ts +98 -0
  192. package/dist/util/news.js +27 -0
  193. package/dist/util/noop.d.ts +1 -0
  194. package/dist/util/noop.js +1 -0
  195. package/{util/simpleSearch.ts → dist/util/simpleSearch.d.ts} +4 -21
  196. package/dist/util/simpleSearch.js +62 -0
  197. package/dist/util/storage.d.ts +15 -0
  198. package/dist/util/storage.js +32 -0
  199. package/dist/util/types.d.ts +1 -0
  200. package/dist/util/types.js +1 -0
  201. package/package.json +7 -8
  202. package/coloring/shading.ts +0 -46
  203. package/coloring/types.ts +0 -13
  204. package/components/Avatar.tsx +0 -58
  205. package/components/AvatarGroup.tsx +0 -48
  206. package/components/BreadCrumb.tsx +0 -35
  207. package/components/Button.tsx +0 -236
  208. package/components/ChipList.tsx +0 -89
  209. package/components/Circle.tsx +0 -27
  210. package/components/ErrorComponent.tsx +0 -40
  211. package/components/Expandable.tsx +0 -61
  212. package/components/HelpwaveBadge.tsx +0 -35
  213. package/components/HideableContentSection.tsx +0 -43
  214. package/components/InputGroup.tsx +0 -72
  215. package/components/LoadingAndErrorComponent.tsx +0 -47
  216. package/components/LoadingAnimation.tsx +0 -40
  217. package/components/LoadingButton.tsx +0 -27
  218. package/components/MarkdownInterpreter.tsx +0 -278
  219. package/components/Pagination.tsx +0 -65
  220. package/components/Profile.tsx +0 -124
  221. package/components/ProgressIndicator.tsx +0 -58
  222. package/components/Ring.tsx +0 -286
  223. package/components/SearchableList.tsx +0 -69
  224. package/components/SortButton.tsx +0 -33
  225. package/components/StepperBar.tsx +0 -124
  226. package/components/Table.tsx +0 -330
  227. package/components/TechRadar.tsx +0 -247
  228. package/components/TextImage.tsx +0 -86
  229. package/components/TimeDisplay.tsx +0 -121
  230. package/components/Tooltip.tsx +0 -92
  231. package/components/VerticalDivider.tsx +0 -51
  232. package/components/date/DatePicker.tsx +0 -164
  233. package/components/date/DayPicker.tsx +0 -95
  234. package/components/date/TimePicker.tsx +0 -167
  235. package/components/date/YearMonthPicker.tsx +0 -130
  236. package/components/examples/InputGroupExample.tsx +0 -58
  237. package/components/examples/MultiSelectExample.tsx +0 -57
  238. package/components/examples/SearchableSelectExample.tsx +0 -34
  239. package/components/examples/SelectExample.tsx +0 -28
  240. package/components/examples/StackingModals.tsx +0 -54
  241. package/components/examples/TableExample.tsx +0 -159
  242. package/components/examples/TextareaExample.tsx +0 -23
  243. package/components/examples/TileExample.tsx +0 -25
  244. package/components/examples/date/DateTimePickerExample.tsx +0 -53
  245. package/components/examples/properties/CheckboxPropertyExample.tsx +0 -29
  246. package/components/examples/properties/DatePropertyExample.tsx +0 -44
  247. package/components/examples/properties/MultiSelectPropertyExample.tsx +0 -39
  248. package/components/examples/properties/NumberPropertyExample.tsx +0 -28
  249. package/components/examples/properties/SelectPropertyExample.tsx +0 -39
  250. package/components/examples/properties/TextPropertyExample.tsx +0 -30
  251. package/components/icons/Helpwave.tsx +0 -51
  252. package/components/icons/Tag.tsx +0 -29
  253. package/components/layout/Carousel.tsx +0 -396
  254. package/components/layout/DividerInserter.tsx +0 -37
  255. package/components/layout/FAQSection.tsx +0 -57
  256. package/components/layout/Tile.tsx +0 -67
  257. package/components/modals/ConfirmDialog.tsx +0 -105
  258. package/components/modals/DiscardChangesDialog.tsx +0 -71
  259. package/components/modals/InputModal.tsx +0 -26
  260. package/components/modals/LanguageModal.tsx +0 -76
  261. package/components/modals/Modal.tsx +0 -149
  262. package/components/modals/ModalRegister.tsx +0 -45
  263. package/components/properties/CheckboxProperty.tsx +0 -62
  264. package/components/properties/DateProperty.tsx +0 -58
  265. package/components/properties/MultiSelectProperty.tsx +0 -82
  266. package/components/properties/NumberProperty.tsx +0 -86
  267. package/components/properties/PropertyBase.tsx +0 -84
  268. package/components/properties/SelectProperty.tsx +0 -67
  269. package/components/properties/TextProperty.tsx +0 -81
  270. package/components/user-input/Checkbox.tsx +0 -139
  271. package/components/user-input/DateAndTimePicker.tsx +0 -156
  272. package/components/user-input/Input.tsx +0 -192
  273. package/components/user-input/Label.tsx +0 -32
  274. package/components/user-input/Menu.tsx +0 -75
  275. package/components/user-input/MultiSelect.tsx +0 -158
  276. package/components/user-input/ScrollPicker.tsx +0 -240
  277. package/components/user-input/SearchableSelect.tsx +0 -36
  278. package/components/user-input/Select.tsx +0 -132
  279. package/components/user-input/Textarea.tsx +0 -86
  280. package/components/user-input/ToggleableInput.tsx +0 -115
  281. package/globals.css +0 -488
  282. package/hooks/useHoverState.ts +0 -88
  283. package/hooks/useLanguage.tsx +0 -78
  284. package/hooks/useLocalStorage.tsx +0 -33
  285. package/hooks/useOutsideClick.ts +0 -25
  286. package/hooks/useSaveDelay.ts +0 -46
  287. package/hooks/useTheme.tsx +0 -57
  288. package/hooks/useTranslation.ts +0 -43
  289. package/index.ts +0 -0
  290. package/util/array.ts +0 -115
  291. package/util/date.ts +0 -180
  292. package/util/easeFunctions.ts +0 -37
  293. package/util/emailValidation.ts +0 -3
  294. package/util/loopingArray.ts +0 -94
  295. package/util/math.ts +0 -3
  296. package/util/news.ts +0 -43
  297. package/util/noop.ts +0 -1
  298. package/util/storage.ts +0 -37
  299. package/util/types.ts +0 -4
  300. /package/{components/Span.tsx → dist/components/Span.d.ts} +0 -0
  301. /package/{components/examples/Title.tsx → dist/components/examples/Title.d.ts} +0 -0
@@ -1,46 +0,0 @@
1
- import { useEffect, useState } from 'react'
2
-
3
- function useSaveDelay(setNotificationStatus: (isShowing: boolean) => void, delay: number) {
4
- const [updateTimer, setUpdateTimer] = useState<NodeJS.Timeout | undefined>(undefined)
5
- const [notificationTimer, setNotificationTimer] = useState<NodeJS.Timeout | undefined>(undefined)
6
-
7
- const restartTimer = (onSave: () => void) => {
8
- clearTimeout(updateTimer)
9
- setUpdateTimer(setTimeout(() => {
10
- onSave()
11
- setNotificationStatus(true)
12
- // Show Saved Notification for fade animation duration
13
- clearTimeout(notificationTimer)
14
- setNotificationTimer(setTimeout(() => {
15
- setNotificationStatus(false)
16
- clearTimeout(notificationTimer)
17
- }, delay))
18
- clearTimeout(updateTimer)
19
- }, delay))
20
- }
21
-
22
- const clearUpdateTimer = (hasSaved = true) => {
23
- clearTimeout(updateTimer)
24
- if (hasSaved) {
25
- setNotificationStatus(true)
26
- clearTimeout(notificationTimer)
27
- setNotificationTimer(setTimeout(() => {
28
- setNotificationStatus(false)
29
- clearTimeout(notificationTimer)
30
- }, delay))
31
- } else {
32
- setNotificationStatus(false)
33
- }
34
- }
35
-
36
- useEffect(() => {
37
- return () => {
38
- clearTimeout(updateTimer)
39
- clearTimeout(notificationTimer)
40
- }
41
- }, []) // eslint-disable-line react-hooks/exhaustive-deps
42
-
43
- return { restartTimer, clearUpdateTimer }
44
- }
45
-
46
- export default useSaveDelay
@@ -1,57 +0,0 @@
1
- import { useContext } from 'react'
2
- import type { Dispatch, SetStateAction, PropsWithChildren } from 'react'
3
- import { createContext, useState, useEffect } from 'react'
4
- import type { Translation } from './useTranslation'
5
-
6
- export type ThemeType = 'light' | 'dark'
7
-
8
- export type ThemeTypeTranslation = Record<ThemeType, string>
9
- export const defaultThemeTypeTranslation: Translation<ThemeTypeTranslation> = {
10
- en: {
11
- dark: 'Dark',
12
- light: 'Light'
13
- },
14
- de: {
15
- dark: 'Dunkel',
16
- light: 'Hell'
17
- }
18
- }
19
-
20
- type ThemeContextType = {
21
- theme: ThemeType,
22
- setTheme: Dispatch<SetStateAction<ThemeType>>,
23
- }
24
-
25
- export const ThemeContext = createContext<ThemeContextType>({
26
- theme: 'light',
27
- setTheme: (_: SetStateAction<ThemeType>) => {
28
- },
29
- })
30
-
31
- type ThemeProviderProps = {
32
- initialTheme?: ThemeType,
33
- }
34
-
35
- export const ThemeProvider = ({ children, initialTheme = 'light' }: PropsWithChildren<ThemeProviderProps>) => {
36
- const [theme, setTheme] = useState<ThemeType>(initialTheme)
37
-
38
- useEffect(() => {
39
- if (theme !== initialTheme) {
40
- console.warn('ThemeProvider initial state changed: Prefer using useTheme\'s setTheme instead')
41
- setTheme(initialTheme)
42
- }
43
- }, [initialTheme]) // eslint-disable-line react-hooks/exhaustive-deps
44
-
45
- useEffect(() => {
46
- document.documentElement.setAttribute('data-theme', theme)
47
- }, [theme])
48
-
49
- return (
50
- <ThemeContext.Provider value={{ theme, setTheme }}>
51
- {children}
52
- </ThemeContext.Provider>
53
- )
54
- }
55
-
56
-
57
- export const useTheme = () => useContext(ThemeContext)
@@ -1,43 +0,0 @@
1
- import type { Languages } from './useLanguage'
2
- import { useLanguage } from './useLanguage'
3
-
4
- export type Translation<T> = Record<Languages, T>
5
-
6
- type OverwriteTranslationType<Translation extends Record<string, unknown>> = {
7
- language?: Languages,
8
- translation?: Partial<Record<Languages, Partial<Translation>>>,
9
- }
10
-
11
- /**
12
- * Adds the `language` prop to the component props.
13
- *
14
- * @param Translation the type of the translation object
15
- *
16
- * @param Props the type of the component props, defaults to `Record<string, never>`,
17
- * if you don't expect any other props other than `language` and get an
18
- * error when using your component (because it uses `forwardRef` etc.)
19
- * you can try out `Record<string, unknown>`, this might resolve your
20
- * problem as `SomeType & never` is still `never` but `SomeType & unknown`
21
- * is `SomeType` which means that adding back props (like `ref` etc.)
22
- * works properly
23
- */
24
- export type PropsForTranslation<
25
- Translation extends Record<string, unknown>,
26
- Props = Record<string, never>
27
- > = Props & {
28
- overwriteTranslation?: OverwriteTranslationType<Translation>,
29
- };
30
-
31
- export const useTranslation = <Translation extends Record<string, unknown>>(
32
- defaults: Record<Languages, Translation>,
33
- translationOverwrite: OverwriteTranslationType<Translation> = {}
34
- ) : Translation => {
35
- const { language: languageProp, translation: overwrite } = translationOverwrite
36
- const { language: inferredLanguage } = useLanguage()
37
- const usedLanguage = languageProp ?? inferredLanguage
38
- let defaultValues: Translation = defaults[usedLanguage]
39
- if (overwrite && overwrite[usedLanguage]) {
40
- defaultValues = { ...defaultValues, ...overwrite[usedLanguage] }
41
- }
42
- return defaultValues
43
- }
package/index.ts DELETED
File without changes
package/util/array.ts DELETED
@@ -1,115 +0,0 @@
1
- export const equalSizeGroups = <T >(array: T[], groupSize: number): T[][] => {
2
- if (groupSize <= 0) {
3
- console.warn(`group size should be greater than 0: groupSize = ${groupSize}`)
4
- return [[...array]]
5
- }
6
-
7
- const groups = []
8
- for (let i = 0; i < array.length; i += groupSize) {
9
- groups.push(array.slice(i, Math.min(i + groupSize, array.length)))
10
- }
11
- return groups
12
- }
13
-
14
- /**
15
- * @param start
16
- * @param end inclusive
17
- * @param allowEmptyRange Whether the range can be defined empty via end < start
18
- */
19
- export const range = (start: number, end: number, allowEmptyRange: boolean = false): number[] => {
20
- if (end < start) {
21
- if (!allowEmptyRange) {
22
- console.warn(`range: end (${end}) < start (${start}) should be allowed explicitly, set allowEmptyRange to true`)
23
- }
24
- return []
25
- }
26
- return Array.from({ length: end - start + 1 }, (_, index) => index + start)
27
- }
28
-
29
- /** Finds the closest match
30
- * @param list The list of all possible matches
31
- * @param firstCloser Return whether item1 is closer than item2
32
- */
33
- export const closestMatch = <T >(list: T[], firstCloser: (item1: T, item2: T) => boolean) => {
34
- return list.reduce((item1, item2) => {
35
- return firstCloser(item1, item2) ? item1 : item2
36
- })
37
- }
38
-
39
- /**
40
- * returns the item in middle of a list and its neighbours before and after
41
- * e.g. [1,2,3,4,5,6] for item = 1 would return [5,6,1,2,3]
42
- */
43
- export const getNeighbours = <T >(list: T[], item: T, neighbourDistance: number = 2) => {
44
- const index = list.indexOf(item)
45
- const totalItems = neighbourDistance * 2 + 1
46
- if (list.length < totalItems) {
47
- console.warn('List is to short')
48
- return list
49
- }
50
-
51
- if (index === -1) {
52
- console.error('item not found in list')
53
- return list.splice(0, totalItems)
54
- }
55
-
56
- let start = index - neighbourDistance
57
- if (start < 0) {
58
- start += list.length
59
- }
60
- const end = (index + neighbourDistance + 1) % list.length
61
-
62
- const result: T[] = []
63
- let ignoreOnce = list.length === totalItems
64
- for (let i = start; i !== end || ignoreOnce; i = (i + 1) % list.length) {
65
- result.push(list[i]!)
66
- if (end === i && ignoreOnce) {
67
- ignoreOnce = false
68
- }
69
- }
70
- return result
71
- }
72
-
73
- export const createLoopingListWithIndex = <T >(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {
74
- if (length < 0) {
75
- console.warn(`createLoopingList: length must be >= 0, given ${length}`)
76
- } else if (length === 0) {
77
- length = list.length
78
- }
79
-
80
- const returnList: [number, T][] = []
81
-
82
- if (forwards) {
83
- for (let i = startIndex; returnList.length < length; i = (i + 1) % list.length) {
84
- returnList.push([i, list[i]!])
85
- }
86
- } else {
87
- for (let i = startIndex; returnList.length < length; i = i === 0 ? i = list.length - 1 : i - 1) {
88
- returnList.push([i, list[i]!])
89
- }
90
- }
91
-
92
- return returnList
93
- }
94
-
95
- export const createLoopingList = <T >(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {
96
- return createLoopingListWithIndex(list, startIndex, length, forwards).map(([_, item]) => item)
97
- }
98
-
99
- export const ArrayUtil = {
100
- unique: <T>(list: T[]): T[] => {
101
- const seen = new Set<T>()
102
- return list.filter((item) => {
103
- if (seen.has(item)) {
104
- return false
105
- }
106
- seen.add(item)
107
- return true
108
- })
109
- },
110
-
111
- difference: <T>(list: T[], removeList: T[]): T[] => {
112
- const remove = new Set<T>(removeList)
113
- return list.filter((item) => !remove.has(item))
114
- }
115
- }
package/util/date.ts DELETED
@@ -1,180 +0,0 @@
1
- import { equalSizeGroups } from './array'
2
-
3
- export const monthsList = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'] as const
4
- export type Month = typeof monthsList[number]
5
-
6
- export const weekDayList = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] as const
7
- export type WeekDay = typeof weekDayList[number]
8
-
9
- export const formatDate = (date: Date) => {
10
- const year = date.getFullYear().toString().padStart(4, '0')
11
- const month = (date.getMonth() + 1).toString().padStart(2, '0')
12
- const day = (date.getDate()).toString().padStart(2, '0')
13
- return `${year}-${month}-${day}`
14
- }
15
-
16
- export const formatDateTime = (date: Date) => {
17
- const dateString = formatDate(date)
18
- const hours = date.getHours().toString().padStart(2, '0')
19
- const minutes = date.getMinutes().toString().padStart(2, '0')
20
- return `${dateString}T${hours}:${minutes}`
21
- }
22
-
23
- export const getDaysInMonth = (year: number, month: number): number => {
24
- const lastDayOfMonth = new Date(year, month + 1, 0)
25
- return lastDayOfMonth.getDate()
26
- }
27
-
28
- export type Duration = {
29
- years?: number,
30
- months?: number,
31
- days?: number,
32
- hours?: number,
33
- minutes?: number,
34
- seconds?: number,
35
- milliseconds?: number,
36
- }
37
-
38
- export const changeDuration = (date: Date, duration: Duration, isAdding?: boolean): Date => {
39
- const {
40
- years = 0,
41
- months = 0,
42
- days = 0,
43
- hours = 0,
44
- minutes = 0,
45
- seconds = 0,
46
- milliseconds = 0,
47
- } = duration
48
-
49
- // Check ranges
50
- if (years < 0) {
51
- console.error(`Range error years must be greater than 0: received ${years}`)
52
- return new Date(date)
53
- }
54
- if (months < 0 || months > 11) {
55
- console.error(`Range error month must be 0 <= month <= 11: received ${months}`)
56
- return new Date(date)
57
- }
58
- if (days < 0) {
59
- console.error(`Range error days must be greater than 0: received ${days}`)
60
- return new Date(date)
61
- }
62
- if (hours < 0 || hours > 23) {
63
- console.error(`Range error hours must be 0 <= hours <= 23: received ${hours}`)
64
- return new Date(date)
65
- }
66
- if (minutes < 0 || minutes > 59) {
67
- console.error(`Range error minutes must be 0 <= minutes <= 59: received ${minutes}`)
68
- return new Date(date)
69
- }
70
- if (seconds < 0 || seconds > 59) {
71
- console.error(`Range error seconds must be 0 <= seconds <= 59: received ${seconds}`)
72
- return new Date(date)
73
- }
74
- if (milliseconds < 0) {
75
- console.error(`Range error seconds must be greater than 0: received ${milliseconds}`)
76
- return new Date(date)
77
- }
78
-
79
- const multiplier = isAdding ? 1 : -1
80
-
81
- const newDate = new Date(date)
82
-
83
- newDate.setFullYear(newDate.getFullYear() + multiplier * years)
84
-
85
- newDate.setMonth(newDate.getMonth() + multiplier * months)
86
-
87
- newDate.setDate(newDate.getDate() + multiplier * days)
88
-
89
- newDate.setHours(newDate.getHours() + multiplier * hours)
90
-
91
- newDate.setMinutes(newDate.getMinutes() + multiplier * minutes)
92
-
93
- newDate.setSeconds(newDate.getSeconds() + multiplier * seconds)
94
-
95
- newDate.setMilliseconds(newDate.getMilliseconds() + multiplier * milliseconds)
96
-
97
- return newDate
98
- }
99
-
100
- export const addDuration = (date: Date, duration: Duration): Date => {
101
- return changeDuration(date, duration, true)
102
- }
103
-
104
- export const subtractDuration = (date: Date, duration: Duration): Date => {
105
- return changeDuration(date, duration, false)
106
- }
107
-
108
- export const getBetweenDuration = (startDate: Date, endDate: Date): Duration => {
109
- const durationInMilliseconds = endDate.getTime() - startDate.getTime()
110
-
111
- const millisecondsInSecond = 1000
112
- const millisecondsInMinute = 60 * millisecondsInSecond
113
- const millisecondsInHour = 60 * millisecondsInMinute
114
- const millisecondsInDay = 24 * millisecondsInHour
115
- const millisecondsInMonth = 30 * millisecondsInDay // Rough estimation, can be adjusted
116
-
117
- const years = Math.floor(durationInMilliseconds / (365.25 * millisecondsInDay))
118
- const months = Math.floor(durationInMilliseconds / millisecondsInMonth)
119
- const days = Math.floor(durationInMilliseconds / millisecondsInDay)
120
- const hours = Math.floor((durationInMilliseconds % millisecondsInDay) / millisecondsInHour)
121
- const seconds = Math.floor((durationInMilliseconds % millisecondsInHour) / millisecondsInSecond)
122
- const milliseconds = durationInMilliseconds % millisecondsInSecond
123
-
124
- return {
125
- years,
126
- months,
127
- days,
128
- hours,
129
- seconds,
130
- milliseconds,
131
- }
132
- }
133
-
134
- /** Checks if a given date is in the range of two dates
135
- *
136
- * An undefined value for startDate or endDate means no bound for the start or end respectively
137
- */
138
- export const isInTimeSpan = (value: Date, startDate?: Date, endDate?: Date): boolean => {
139
- if(startDate && endDate) {
140
- console.assert(startDate <= endDate)
141
- return startDate <= value && value <= endDate
142
- } else if (startDate) {
143
- return startDate <= value
144
- } else if(endDate) {
145
- return endDate >= value
146
- } else {
147
- return true
148
- }
149
- }
150
-
151
- /** Compare two dates on the year, month, day */
152
- export const equalDate = (date1: Date, date2: Date) => {
153
- return date1.getFullYear() === date2.getFullYear()
154
- && date1.getMonth() === date2.getMonth()
155
- && date1.getDate() === date2.getDate()
156
- }
157
-
158
- export const getWeeksForCalenderMonth = (date: Date, weekStart: WeekDay, weeks: number = 6) => {
159
- const month = date.getMonth()
160
- const year = date.getFullYear()
161
-
162
- const dayList: Date[] = []
163
- let currentDate = new Date(year, month, 1) // Start of month
164
- const weekStartIndex = weekDayList.indexOf(weekStart)
165
-
166
- // Move the current day to the week before
167
- while (currentDate.getDay() !== weekStartIndex) {
168
- currentDate = subtractDuration(currentDate, { days: 1 })
169
- }
170
-
171
- while (dayList.length < 7 * weeks) {
172
- const date = new Date(currentDate)
173
- date.setHours(date.getHours(), date.getMinutes()) // To make sure we are not overwriting the time
174
- dayList.push(date)
175
- currentDate = addDuration(currentDate, { days: 1 })
176
- }
177
-
178
- // weeks
179
- return equalSizeGroups(dayList, 7)
180
- }
@@ -1,37 +0,0 @@
1
- import { clamp } from './math'
2
-
3
- export type EaseFunction = (t: number) => number
4
-
5
- export class EaseFunctions {
6
- static cubicBezierGeneric(x1: number, y1: number, x2: number, y2: number): { x: EaseFunction, y: EaseFunction } {
7
- // Calculate the x and y coordinates using the cubic Bézier formula
8
- const cx = 3 * x1
9
- const bx = 3 * (x2 - x1) - cx
10
- const ax = 1 - cx - bx
11
-
12
- const cy = 3 * y1
13
- const by = 3 * (y2 - y1) - cy
14
- const ay = 1 - cy - by
15
-
16
- // Compute x and y values at parameter t
17
- const x = (t: number) => ((ax * t + bx) * t + cx) * t
18
- const y = (t: number) => ((ay * t + by) * t + cy) * t
19
-
20
- return {
21
- x,
22
- y
23
- }
24
- }
25
-
26
- static cubicBezier(x1: number, y1: number, x2: number, y2: number): EaseFunction {
27
- const { y } = EaseFunctions.cubicBezierGeneric(x1, y1, x2, y2)
28
- return (t: number) => {
29
- t = clamp(t)
30
- return y(t) // <= equal to x(t) * 0 + y(t) * 1
31
- }
32
- }
33
-
34
- static easeInEaseOut(t: number): number {
35
- return EaseFunctions.cubicBezier(0.65, 0, 0.35, 1)(t)
36
- };
37
- }
@@ -1,3 +0,0 @@
1
- export const validateEmail = (email: string): boolean => {
2
- return /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(email)
3
- }
@@ -1,94 +0,0 @@
1
- /**
2
- * 1 is forwards
3
- *
4
- * -1 is backwards
5
- */
6
- export type Direction = 1 | -1
7
-
8
- export class LoopingArrayCalculator {
9
- length: number
10
- isLooping: boolean
11
- allowedOverScroll: number
12
-
13
- constructor(length: number, isLooping: boolean = true, allowedOverScroll: number = 0.1) {
14
- if (allowedOverScroll < 0 || length < 1) {
15
- throw new Error('Invalid parameters: allowedOverScroll >= 0 and length >= 1 must be true')
16
- }
17
-
18
- this.length = length
19
- this.isLooping = isLooping
20
- this.allowedOverScroll = allowedOverScroll
21
- }
22
-
23
- getCorrectedPosition(position: number): number {
24
- if (!this.isLooping) {
25
- return Math.max(-this.allowedOverScroll, Math.min(this.allowedOverScroll + this.length - 1, position))
26
- }
27
- if (position >= this.length) {
28
- return position % this.length
29
- }
30
- if (position < 0) {
31
- return this.length - (Math.abs(position) % this.length)
32
- }
33
- return position
34
- }
35
-
36
- static withoutOffset(position: number): number {
37
- return position + LoopingArrayCalculator.getOffset(position)
38
- }
39
-
40
- static getOffset(position: number): number {
41
- return Math.round(position) - position // For example: 45.5 => 46 - 45.5 = 0.5
42
- }
43
-
44
- /**
45
- * @return absolute distance forwards or Infinity when the target cannot be reached (only possible when not isLooping)
46
- */
47
- getDistanceDirectional(position: number, target: number, direction: Direction): number {
48
- if (!this.isLooping && (position < -this.allowedOverScroll || position > this.allowedOverScroll + this.length - 1)) {
49
- throw new Error('Invalid parameters: position is out of bounds.')
50
- }
51
-
52
- const isForwardInvalid = (direction === 1 && position > target)
53
- const isBackwardInvalid = (direction === -1 && target < position)
54
-
55
- if (!this.isLooping && (isForwardInvalid || isBackwardInvalid)) {
56
- return Infinity
57
- }
58
-
59
- if (direction === -1) {
60
- return this.getDistanceDirectional(target, position, 1)
61
- }
62
-
63
- position = this.getCorrectedPosition(position)
64
- target = this.getCorrectedPosition(target)
65
-
66
- let distance = (target - position) * direction
67
- if (distance < 0) {
68
- distance = this.length - (Math.abs(position) % this.length) + target
69
- }
70
-
71
- return distance
72
- }
73
-
74
- getDistanceForward(position: number, target: number): number {
75
- return this.getDistanceDirectional(position, target, 1)
76
- }
77
-
78
- getDistanceBackward(position: number, target: number): number {
79
- return this.getDistanceDirectional(position, target, -1)
80
- }
81
-
82
- getDistance(position: number, target: number): number {
83
- const forwardDistance = this.getDistanceForward(position, target)
84
- const backwardDistance = this.getDistanceBackward(position, target)
85
-
86
- return Math.min(forwardDistance, backwardDistance)
87
- }
88
-
89
- getBestDirection(position: number, target: number): Direction {
90
- const forwardDistance = this.getDistanceForward(position, target)
91
- const backwardDistance = this.getDistanceBackward(position, target)
92
- return forwardDistance < backwardDistance ? 1 : -1
93
- }
94
- }
package/util/math.ts DELETED
@@ -1,3 +0,0 @@
1
- export const clamp = (value: number, min: number = 0, max: number = 1): number => {
2
- return Math.min(Math.max(value, min), max)
3
- }
package/util/news.ts DELETED
@@ -1,43 +0,0 @@
1
- import { z } from 'zod'
2
- import type { Languages } from '../hooks/useLanguage'
3
- import { languages } from '../hooks/useLanguage'
4
-
5
- export type News = {
6
- title: string,
7
- date: Date,
8
- description: (string | URL)[],
9
- externalResource?: URL,
10
- keys: string[],
11
- }
12
-
13
- export type LocalizedNews = Record<Languages, News[]>
14
-
15
- export const newsSchema = z.object({
16
- title: z.string(),
17
- description: z.string(),
18
- date: z.string(),
19
- image: z.string().url().optional(),
20
- externalResource: z.string().url().optional(),
21
- keys: z.array(z.string())
22
- }).transform<News>((obj) => {
23
- let description: (string | URL)[] = [obj.description]
24
- if (obj.image) {
25
- description = [new URL(obj.image), ...description]
26
- }
27
-
28
- return {
29
- title: obj.title,
30
- date: new Date(obj.date),
31
- description,
32
- externalResource: obj.externalResource ? new URL(obj.externalResource) : undefined,
33
- keys: obj.keys
34
- }
35
- })
36
-
37
- export const newsListSchema = z.array(newsSchema)
38
-
39
- export const localizedNewsSchema = z.record(z.enum(languages), newsListSchema)
40
-
41
- export const filterNews = (localizedNews: News[], requiredKeys: string[]) => {
42
- return localizedNews.filter(news => requiredKeys.every(value => news.keys.includes(value)))
43
- }
package/util/noop.ts DELETED
@@ -1 +0,0 @@
1
- export const noop = () => undefined
package/util/storage.ts DELETED
@@ -1,37 +0,0 @@
1
- class StorageService {
2
- // this seems to be a bug in eslint as 'paramter-properties' is a special syntax of typescript
3
-
4
- constructor(private storage: Storage) {}
5
-
6
- public get<T>(key: string): T | null {
7
- const value = this.storage.getItem(key)
8
- if (value === null) {
9
- return null
10
- }
11
- return JSON.parse(value)
12
- }
13
-
14
- public set<T>(key: string, value: T) {
15
- this.storage.setItem(key, JSON.stringify(value))
16
- }
17
-
18
- public delete(key: string) {
19
- this.storage.removeItem(key)
20
- }
21
-
22
- public deleteAll() {
23
- this.storage.clear()
24
- }
25
- }
26
-
27
- export class LocalStorageService extends StorageService {
28
- constructor() {
29
- super(window.localStorage)
30
- }
31
- }
32
-
33
- export class SessionStorageService extends StorageService {
34
- constructor() {
35
- super(window.sessionStorage)
36
- }
37
- }
package/util/types.ts DELETED
@@ -1,4 +0,0 @@
1
- export type NativeProps<
2
- NativeElement extends keyof React.ReactHTML,
3
- OmittedKeys extends string | number | symbol | undefined = undefined
4
- > = Omit<React.JSX.IntrinsicElements[NativeElement], OmittedKeys extends undefined ? 'ref' : 'ref' | OmittedKeys>