@helpwave/hightide 0.0.9 → 0.0.11
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.
- package/README.md +1 -1
- package/dist/coloring/shading.d.ts +2 -0
- package/dist/coloring/shading.js +40 -0
- package/dist/coloring/types.d.ts +11 -0
- package/dist/coloring/types.js +1 -0
- package/dist/components/Avatar.d.ts +14 -0
- package/dist/components/Avatar.js +35 -0
- package/dist/components/AvatarGroup.d.ts +10 -0
- package/dist/components/AvatarGroup.js +13 -0
- package/dist/components/BreadCrumb.d.ts +16 -0
- package/dist/components/BreadCrumb.js +12 -0
- package/dist/components/Button.d.ts +41 -0
- package/dist/components/Button.js +84 -0
- package/dist/components/ChipList.d.ts +21 -0
- package/dist/components/ChipList.js +38 -0
- package/dist/components/Circle.d.ts +6 -0
- package/dist/components/Circle.js +10 -0
- package/dist/components/ErrorComponent.d.ts +13 -0
- package/dist/components/ErrorComponent.js +19 -0
- package/dist/components/Expandable.d.ts +30 -0
- package/dist/components/Expandable.js +16 -0
- package/dist/components/HelpwaveBadge.d.ts +11 -0
- package/dist/components/HelpwaveBadge.js +14 -0
- package/dist/components/HideableContentSection.d.ts +10 -0
- package/dist/components/HideableContentSection.js +15 -0
- package/dist/components/InputGroup.d.ts +13 -0
- package/dist/components/InputGroup.js +33 -0
- package/dist/components/LoadingAndErrorComponent.d.ts +17 -0
- package/dist/components/LoadingAndErrorComponent.js +25 -0
- package/dist/components/LoadingAnimation.d.ts +13 -0
- package/dist/components/LoadingAnimation.js +19 -0
- package/dist/components/LoadingButton.d.ts +6 -0
- package/dist/components/LoadingButton.js +10 -0
- package/dist/components/MarkdownInterpreter.d.ts +25 -0
- package/dist/components/MarkdownInterpreter.js +190 -0
- package/dist/components/Pagination.d.ts +14 -0
- package/dist/components/Pagination.js +25 -0
- package/dist/components/Profile.d.ts +28 -0
- package/dist/components/Profile.js +45 -0
- package/dist/components/ProgressIndicator.d.ts +21 -0
- package/dist/components/ProgressIndicator.js +24 -0
- package/dist/components/Ring.d.ts +31 -0
- package/dist/components/Ring.js +113 -0
- package/dist/components/SearchableList.d.ts +18 -0
- package/dist/components/SearchableList.js +27 -0
- package/dist/components/SortButton.d.ts +10 -0
- package/dist/components/SortButton.js +9 -0
- package/dist/components/Span.js +1 -0
- package/dist/components/StepperBar.d.ts +23 -0
- package/dist/components/StepperBar.js +47 -0
- package/dist/components/Table.d.ts +87 -0
- package/dist/components/Table.js +187 -0
- package/dist/components/TechRadar.d.ts +36 -0
- package/dist/components/TechRadar.js +191 -0
- package/dist/components/TextImage.d.ts +20 -0
- package/dist/components/TextImage.js +31 -0
- package/dist/components/TimeDisplay.d.ts +30 -0
- package/dist/components/TimeDisplay.js +83 -0
- package/dist/components/Tooltip.d.ts +34 -0
- package/dist/components/Tooltip.js +38 -0
- package/dist/components/VerticalDivider.d.ts +11 -0
- package/dist/components/VerticalDivider.js +7 -0
- package/dist/components/date/DatePicker.d.ts +26 -0
- package/dist/components/date/DatePicker.js +58 -0
- package/dist/components/date/DayPicker.d.ts +16 -0
- package/dist/components/date/DayPicker.js +37 -0
- package/dist/components/date/TimePicker.d.ts +12 -0
- package/dist/components/date/TimePicker.js +79 -0
- package/dist/components/date/YearMonthPicker.d.ts +11 -0
- package/dist/components/date/YearMonthPicker.js +59 -0
- package/dist/components/examples/InputGroupExample.d.ts +6 -0
- package/dist/components/examples/InputGroupExample.js +21 -0
- package/dist/components/examples/MultiSelectExample.d.ts +7 -0
- package/dist/components/examples/MultiSelectExample.js +27 -0
- package/dist/components/examples/SearchableSelectExample.d.ts +6 -0
- package/dist/components/examples/SearchableSelectExample.js +17 -0
- package/dist/components/examples/SelectExample.d.ts +4 -0
- package/dist/components/examples/SelectExample.js +15 -0
- package/dist/components/examples/StackingModals.d.ts +4 -0
- package/dist/components/examples/StackingModals.js +15 -0
- package/dist/components/examples/TableExample.d.ts +9 -0
- package/dist/components/examples/TableExample.js +92 -0
- package/dist/components/examples/TextareaExample.d.ts +6 -0
- package/dist/components/examples/TextareaExample.js +10 -0
- package/dist/components/examples/TileExample.d.ts +9 -0
- package/dist/components/examples/TileExample.js +9 -0
- package/dist/components/examples/Title.js +1 -0
- package/dist/components/examples/date/DateTimePickerExample.d.ts +10 -0
- package/dist/components/examples/date/DateTimePickerExample.js +21 -0
- package/dist/components/examples/properties/CheckboxPropertyExample.d.ts +8 -0
- package/dist/components/examples/properties/CheckboxPropertyExample.js +13 -0
- package/dist/components/examples/properties/DatePropertyExample.d.ts +8 -0
- package/dist/components/examples/properties/DatePropertyExample.js +23 -0
- package/dist/components/examples/properties/MultiSelectPropertyExample.d.ts +8 -0
- package/dist/components/examples/properties/MultiSelectPropertyExample.js +16 -0
- package/dist/components/examples/properties/NumberPropertyExample.d.ts +6 -0
- package/dist/components/examples/properties/NumberPropertyExample.js +13 -0
- package/dist/components/examples/properties/SelectPropertyExample.d.ts +6 -0
- package/dist/components/examples/properties/SelectPropertyExample.js +18 -0
- package/dist/components/examples/properties/TextPropertyExample.d.ts +8 -0
- package/dist/components/examples/properties/TextPropertyExample.js +13 -0
- package/dist/components/icons/Helpwave.d.ts +10 -0
- package/dist/components/icons/Helpwave.js +20 -0
- package/dist/components/icons/Tag.d.ts +10 -0
- package/dist/components/icons/Tag.js +12 -0
- package/dist/components/layout/Carousel.d.ts +22 -0
- package/dist/components/layout/Carousel.js +233 -0
- package/dist/components/layout/DividerInserter.d.ts +11 -0
- package/dist/components/layout/DividerInserter.js +20 -0
- package/dist/components/layout/FAQSection.d.ts +23 -0
- package/dist/components/layout/FAQSection.js +14 -0
- package/dist/components/layout/Tile.d.ts +34 -0
- package/dist/components/layout/Tile.js +18 -0
- package/dist/components/modals/ConfirmDialog.d.ts +34 -0
- package/dist/components/modals/ConfirmDialog.js +31 -0
- package/dist/components/modals/DiscardChangesDialog.d.ts +19 -0
- package/dist/components/modals/DiscardChangesDialog.js +24 -0
- package/dist/components/modals/InputModal.d.ts +9 -0
- package/dist/components/modals/InputModal.js +9 -0
- package/dist/components/modals/LanguageModal.d.ts +17 -0
- package/dist/components/modals/LanguageModal.js +35 -0
- package/dist/components/modals/Modal.d.ts +38 -0
- package/dist/components/modals/Modal.js +57 -0
- package/dist/components/modals/ModalRegister.d.ts +11 -0
- package/dist/components/modals/ModalRegister.js +28 -0
- package/dist/components/properties/CheckboxProperty.d.ts +15 -0
- package/dist/components/properties/CheckboxProperty.js +27 -0
- package/dist/components/properties/DateProperty.d.ts +11 -0
- package/dist/components/properties/DateProperty.js +22 -0
- package/dist/components/properties/MultiSelectProperty.d.ts +12 -0
- package/dist/components/properties/MultiSelectProperty.js +33 -0
- package/dist/components/properties/NumberProperty.d.ts +16 -0
- package/dist/components/properties/NumberProperty.js +42 -0
- package/dist/components/properties/PropertyBase.d.ts +23 -0
- package/dist/components/properties/PropertyBase.js +27 -0
- package/dist/components/properties/SelectProperty.d.ts +12 -0
- package/dist/components/properties/SelectProperty.js +22 -0
- package/dist/components/properties/TextProperty.d.ts +15 -0
- package/dist/components/properties/TextProperty.js +37 -0
- package/dist/components/user-input/Checkbox.d.ts +37 -0
- package/dist/components/user-input/Checkbox.js +63 -0
- package/dist/components/user-input/DateAndTimePicker.d.ts +39 -0
- package/dist/components/user-input/DateAndTimePicker.js +65 -0
- package/dist/components/user-input/Input.d.ts +61 -0
- package/dist/components/user-input/Input.js +61 -0
- package/dist/components/user-input/Label.d.ts +12 -0
- package/dist/components/user-input/Label.js +12 -0
- package/dist/components/user-input/Menu.d.ts +21 -0
- package/dist/components/user-input/Menu.js +26 -0
- package/dist/components/user-input/MultiSelect.d.ts +39 -0
- package/dist/components/user-input/MultiSelect.js +57 -0
- package/dist/components/user-input/ScrollPicker.d.ts +11 -0
- package/dist/components/user-input/ScrollPicker.js +151 -0
- package/dist/components/user-input/SearchableSelect.d.ts +8 -0
- package/dist/components/user-input/SearchableSelect.js +14 -0
- package/dist/components/user-input/Select.d.ts +32 -0
- package/dist/components/user-input/Select.js +48 -0
- package/dist/components/user-input/Textarea.d.ts +20 -0
- package/dist/components/user-input/Textarea.js +33 -0
- package/dist/components/user-input/ToggleableInput.d.ts +32 -0
- package/dist/components/user-input/ToggleableInput.js +40 -0
- package/{globals.css → dist/css/globals.css} +1 -1
- package/dist/hooks/useHoverState.d.ts +40 -0
- package/dist/hooks/useHoverState.js +46 -0
- package/dist/hooks/useLanguage.d.ts +17 -0
- package/dist/hooks/useLanguage.js +51 -0
- package/dist/hooks/useLocalStorage.d.ts +4 -0
- package/dist/hooks/useLocalStorage.js +24 -0
- package/dist/hooks/useOutsideClick.d.ts +2 -0
- package/dist/hooks/useOutsideClick.js +22 -0
- package/dist/hooks/useSaveDelay.d.ts +5 -0
- package/dist/hooks/useSaveDelay.js +41 -0
- package/dist/hooks/useTheme.d.ts +16 -0
- package/dist/hooks/useTheme.js +32 -0
- package/dist/hooks/useTranslation.d.ts +24 -0
- package/dist/hooks/useTranslation.js +11 -0
- package/dist/util/array.d.ts +23 -0
- package/dist/util/array.js +103 -0
- package/{util/builder.ts → dist/util/builder.d.ts} +1 -4
- package/dist/util/builder.js +9 -0
- package/dist/util/date.d.ts +28 -0
- package/dist/util/date.js +133 -0
- package/dist/util/easeFunctions.d.ts +9 -0
- package/dist/util/easeFunctions.js +30 -0
- package/dist/util/emailValidation.d.ts +1 -0
- package/dist/util/emailValidation.js +3 -0
- package/dist/util/loopingArray.d.ts +23 -0
- package/dist/util/loopingArray.js +67 -0
- package/dist/util/math.d.ts +1 -0
- package/dist/util/math.js +3 -0
- package/dist/util/news.d.ts +98 -0
- package/dist/util/news.js +27 -0
- package/dist/util/noop.d.ts +1 -0
- package/dist/util/noop.js +1 -0
- package/{util/simpleSearch.ts → dist/util/simpleSearch.d.ts} +4 -21
- package/dist/util/simpleSearch.js +62 -0
- package/dist/util/storage.d.ts +15 -0
- package/dist/util/storage.js +32 -0
- package/dist/util/types.d.ts +1 -0
- package/dist/util/types.js +1 -0
- package/package.json +7 -8
- package/coloring/shading.ts +0 -46
- package/coloring/types.ts +0 -13
- package/components/Avatar.tsx +0 -58
- package/components/AvatarGroup.tsx +0 -48
- package/components/BreadCrumb.tsx +0 -35
- package/components/Button.tsx +0 -236
- package/components/ChipList.tsx +0 -89
- package/components/Circle.tsx +0 -27
- package/components/ErrorComponent.tsx +0 -40
- package/components/Expandable.tsx +0 -61
- package/components/HelpwaveBadge.tsx +0 -35
- package/components/HideableContentSection.tsx +0 -43
- package/components/InputGroup.tsx +0 -72
- package/components/LoadingAndErrorComponent.tsx +0 -47
- package/components/LoadingAnimation.tsx +0 -40
- package/components/LoadingButton.tsx +0 -27
- package/components/MarkdownInterpreter.tsx +0 -278
- package/components/Pagination.tsx +0 -65
- package/components/Profile.tsx +0 -124
- package/components/ProgressIndicator.tsx +0 -58
- package/components/Ring.tsx +0 -286
- package/components/SearchableList.tsx +0 -69
- package/components/SortButton.tsx +0 -33
- package/components/StepperBar.tsx +0 -124
- package/components/Table.tsx +0 -330
- package/components/TechRadar.tsx +0 -247
- package/components/TextImage.tsx +0 -86
- package/components/TimeDisplay.tsx +0 -121
- package/components/Tooltip.tsx +0 -92
- package/components/VerticalDivider.tsx +0 -51
- package/components/date/DatePicker.tsx +0 -164
- package/components/date/DayPicker.tsx +0 -95
- package/components/date/TimePicker.tsx +0 -167
- package/components/date/YearMonthPicker.tsx +0 -130
- package/components/examples/InputGroupExample.tsx +0 -58
- package/components/examples/MultiSelectExample.tsx +0 -57
- package/components/examples/SearchableSelectExample.tsx +0 -34
- package/components/examples/SelectExample.tsx +0 -28
- package/components/examples/StackingModals.tsx +0 -54
- package/components/examples/TableExample.tsx +0 -159
- package/components/examples/TextareaExample.tsx +0 -23
- package/components/examples/TileExample.tsx +0 -25
- package/components/examples/date/DateTimePickerExample.tsx +0 -53
- package/components/examples/properties/CheckboxPropertyExample.tsx +0 -29
- package/components/examples/properties/DatePropertyExample.tsx +0 -44
- package/components/examples/properties/MultiSelectPropertyExample.tsx +0 -39
- package/components/examples/properties/NumberPropertyExample.tsx +0 -28
- package/components/examples/properties/SelectPropertyExample.tsx +0 -39
- package/components/examples/properties/TextPropertyExample.tsx +0 -30
- package/components/icons/Helpwave.tsx +0 -51
- package/components/icons/Tag.tsx +0 -29
- package/components/layout/Carousel.tsx +0 -396
- package/components/layout/DividerInserter.tsx +0 -37
- package/components/layout/FAQSection.tsx +0 -57
- package/components/layout/Tile.tsx +0 -67
- package/components/modals/ConfirmDialog.tsx +0 -105
- package/components/modals/DiscardChangesDialog.tsx +0 -71
- package/components/modals/InputModal.tsx +0 -26
- package/components/modals/LanguageModal.tsx +0 -76
- package/components/modals/Modal.tsx +0 -149
- package/components/modals/ModalRegister.tsx +0 -45
- package/components/properties/CheckboxProperty.tsx +0 -62
- package/components/properties/DateProperty.tsx +0 -58
- package/components/properties/MultiSelectProperty.tsx +0 -82
- package/components/properties/NumberProperty.tsx +0 -86
- package/components/properties/PropertyBase.tsx +0 -84
- package/components/properties/SelectProperty.tsx +0 -67
- package/components/properties/TextProperty.tsx +0 -81
- package/components/user-input/Checkbox.tsx +0 -139
- package/components/user-input/DateAndTimePicker.tsx +0 -156
- package/components/user-input/Input.tsx +0 -192
- package/components/user-input/Label.tsx +0 -32
- package/components/user-input/Menu.tsx +0 -75
- package/components/user-input/MultiSelect.tsx +0 -158
- package/components/user-input/ScrollPicker.tsx +0 -240
- package/components/user-input/SearchableSelect.tsx +0 -36
- package/components/user-input/Select.tsx +0 -132
- package/components/user-input/Textarea.tsx +0 -86
- package/components/user-input/ToggleableInput.tsx +0 -115
- package/hooks/useHoverState.ts +0 -88
- package/hooks/useLanguage.tsx +0 -78
- package/hooks/useLocalStorage.tsx +0 -33
- package/hooks/useOutsideClick.ts +0 -25
- package/hooks/useSaveDelay.ts +0 -46
- package/hooks/useTheme.tsx +0 -57
- package/hooks/useTranslation.ts +0 -43
- package/index.ts +0 -0
- package/util/array.ts +0 -115
- package/util/date.ts +0 -180
- package/util/easeFunctions.ts +0 -37
- package/util/emailValidation.ts +0 -3
- package/util/loopingArray.ts +0 -94
- package/util/math.ts +0 -3
- package/util/news.ts +0 -43
- package/util/noop.ts +0 -1
- package/util/storage.ts +0 -37
- package/util/types.ts +0 -4
- /package/{components/Span.tsx → dist/components/Span.d.ts} +0 -0
- /package/{components/examples/Title.tsx → dist/components/examples/Title.d.ts} +0 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { equalSizeGroups } from './array';
|
|
2
|
+
export const monthsList = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];
|
|
3
|
+
export const weekDayList = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
|
|
4
|
+
export const formatDate = (date) => {
|
|
5
|
+
const year = date.getFullYear().toString().padStart(4, '0');
|
|
6
|
+
const month = (date.getMonth() + 1).toString().padStart(2, '0');
|
|
7
|
+
const day = (date.getDate()).toString().padStart(2, '0');
|
|
8
|
+
return `${year}-${month}-${day}`;
|
|
9
|
+
};
|
|
10
|
+
export const formatDateTime = (date) => {
|
|
11
|
+
const dateString = formatDate(date);
|
|
12
|
+
const hours = date.getHours().toString().padStart(2, '0');
|
|
13
|
+
const minutes = date.getMinutes().toString().padStart(2, '0');
|
|
14
|
+
return `${dateString}T${hours}:${minutes}`;
|
|
15
|
+
};
|
|
16
|
+
export const getDaysInMonth = (year, month) => {
|
|
17
|
+
const lastDayOfMonth = new Date(year, month + 1, 0);
|
|
18
|
+
return lastDayOfMonth.getDate();
|
|
19
|
+
};
|
|
20
|
+
export const changeDuration = (date, duration, isAdding) => {
|
|
21
|
+
const { years = 0, months = 0, days = 0, hours = 0, minutes = 0, seconds = 0, milliseconds = 0, } = duration;
|
|
22
|
+
// Check ranges
|
|
23
|
+
if (years < 0) {
|
|
24
|
+
console.error(`Range error years must be greater than 0: received ${years}`);
|
|
25
|
+
return new Date(date);
|
|
26
|
+
}
|
|
27
|
+
if (months < 0 || months > 11) {
|
|
28
|
+
console.error(`Range error month must be 0 <= month <= 11: received ${months}`);
|
|
29
|
+
return new Date(date);
|
|
30
|
+
}
|
|
31
|
+
if (days < 0) {
|
|
32
|
+
console.error(`Range error days must be greater than 0: received ${days}`);
|
|
33
|
+
return new Date(date);
|
|
34
|
+
}
|
|
35
|
+
if (hours < 0 || hours > 23) {
|
|
36
|
+
console.error(`Range error hours must be 0 <= hours <= 23: received ${hours}`);
|
|
37
|
+
return new Date(date);
|
|
38
|
+
}
|
|
39
|
+
if (minutes < 0 || minutes > 59) {
|
|
40
|
+
console.error(`Range error minutes must be 0 <= minutes <= 59: received ${minutes}`);
|
|
41
|
+
return new Date(date);
|
|
42
|
+
}
|
|
43
|
+
if (seconds < 0 || seconds > 59) {
|
|
44
|
+
console.error(`Range error seconds must be 0 <= seconds <= 59: received ${seconds}`);
|
|
45
|
+
return new Date(date);
|
|
46
|
+
}
|
|
47
|
+
if (milliseconds < 0) {
|
|
48
|
+
console.error(`Range error seconds must be greater than 0: received ${milliseconds}`);
|
|
49
|
+
return new Date(date);
|
|
50
|
+
}
|
|
51
|
+
const multiplier = isAdding ? 1 : -1;
|
|
52
|
+
const newDate = new Date(date);
|
|
53
|
+
newDate.setFullYear(newDate.getFullYear() + multiplier * years);
|
|
54
|
+
newDate.setMonth(newDate.getMonth() + multiplier * months);
|
|
55
|
+
newDate.setDate(newDate.getDate() + multiplier * days);
|
|
56
|
+
newDate.setHours(newDate.getHours() + multiplier * hours);
|
|
57
|
+
newDate.setMinutes(newDate.getMinutes() + multiplier * minutes);
|
|
58
|
+
newDate.setSeconds(newDate.getSeconds() + multiplier * seconds);
|
|
59
|
+
newDate.setMilliseconds(newDate.getMilliseconds() + multiplier * milliseconds);
|
|
60
|
+
return newDate;
|
|
61
|
+
};
|
|
62
|
+
export const addDuration = (date, duration) => {
|
|
63
|
+
return changeDuration(date, duration, true);
|
|
64
|
+
};
|
|
65
|
+
export const subtractDuration = (date, duration) => {
|
|
66
|
+
return changeDuration(date, duration, false);
|
|
67
|
+
};
|
|
68
|
+
export const getBetweenDuration = (startDate, endDate) => {
|
|
69
|
+
const durationInMilliseconds = endDate.getTime() - startDate.getTime();
|
|
70
|
+
const millisecondsInSecond = 1000;
|
|
71
|
+
const millisecondsInMinute = 60 * millisecondsInSecond;
|
|
72
|
+
const millisecondsInHour = 60 * millisecondsInMinute;
|
|
73
|
+
const millisecondsInDay = 24 * millisecondsInHour;
|
|
74
|
+
const millisecondsInMonth = 30 * millisecondsInDay; // Rough estimation, can be adjusted
|
|
75
|
+
const years = Math.floor(durationInMilliseconds / (365.25 * millisecondsInDay));
|
|
76
|
+
const months = Math.floor(durationInMilliseconds / millisecondsInMonth);
|
|
77
|
+
const days = Math.floor(durationInMilliseconds / millisecondsInDay);
|
|
78
|
+
const hours = Math.floor((durationInMilliseconds % millisecondsInDay) / millisecondsInHour);
|
|
79
|
+
const seconds = Math.floor((durationInMilliseconds % millisecondsInHour) / millisecondsInSecond);
|
|
80
|
+
const milliseconds = durationInMilliseconds % millisecondsInSecond;
|
|
81
|
+
return {
|
|
82
|
+
years,
|
|
83
|
+
months,
|
|
84
|
+
days,
|
|
85
|
+
hours,
|
|
86
|
+
seconds,
|
|
87
|
+
milliseconds,
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
/** Checks if a given date is in the range of two dates
|
|
91
|
+
*
|
|
92
|
+
* An undefined value for startDate or endDate means no bound for the start or end respectively
|
|
93
|
+
*/
|
|
94
|
+
export const isInTimeSpan = (value, startDate, endDate) => {
|
|
95
|
+
if (startDate && endDate) {
|
|
96
|
+
console.assert(startDate <= endDate);
|
|
97
|
+
return startDate <= value && value <= endDate;
|
|
98
|
+
}
|
|
99
|
+
else if (startDate) {
|
|
100
|
+
return startDate <= value;
|
|
101
|
+
}
|
|
102
|
+
else if (endDate) {
|
|
103
|
+
return endDate >= value;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
/** Compare two dates on the year, month, day */
|
|
110
|
+
export const equalDate = (date1, date2) => {
|
|
111
|
+
return date1.getFullYear() === date2.getFullYear()
|
|
112
|
+
&& date1.getMonth() === date2.getMonth()
|
|
113
|
+
&& date1.getDate() === date2.getDate();
|
|
114
|
+
};
|
|
115
|
+
export const getWeeksForCalenderMonth = (date, weekStart, weeks = 6) => {
|
|
116
|
+
const month = date.getMonth();
|
|
117
|
+
const year = date.getFullYear();
|
|
118
|
+
const dayList = [];
|
|
119
|
+
let currentDate = new Date(year, month, 1); // Start of month
|
|
120
|
+
const weekStartIndex = weekDayList.indexOf(weekStart);
|
|
121
|
+
// Move the current day to the week before
|
|
122
|
+
while (currentDate.getDay() !== weekStartIndex) {
|
|
123
|
+
currentDate = subtractDuration(currentDate, { days: 1 });
|
|
124
|
+
}
|
|
125
|
+
while (dayList.length < 7 * weeks) {
|
|
126
|
+
const date = new Date(currentDate);
|
|
127
|
+
date.setHours(date.getHours(), date.getMinutes()); // To make sure we are not overwriting the time
|
|
128
|
+
dayList.push(date);
|
|
129
|
+
currentDate = addDuration(currentDate, { days: 1 });
|
|
130
|
+
}
|
|
131
|
+
// weeks
|
|
132
|
+
return equalSizeGroups(dayList, 7);
|
|
133
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type EaseFunction = (t: number) => number;
|
|
2
|
+
export declare class EaseFunctions {
|
|
3
|
+
static cubicBezierGeneric(x1: number, y1: number, x2: number, y2: number): {
|
|
4
|
+
x: EaseFunction;
|
|
5
|
+
y: EaseFunction;
|
|
6
|
+
};
|
|
7
|
+
static cubicBezier(x1: number, y1: number, x2: number, y2: number): EaseFunction;
|
|
8
|
+
static easeInEaseOut(t: number): number;
|
|
9
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { clamp } from './math';
|
|
2
|
+
export class EaseFunctions {
|
|
3
|
+
static cubicBezierGeneric(x1, y1, x2, y2) {
|
|
4
|
+
// Calculate the x and y coordinates using the cubic Bézier formula
|
|
5
|
+
const cx = 3 * x1;
|
|
6
|
+
const bx = 3 * (x2 - x1) - cx;
|
|
7
|
+
const ax = 1 - cx - bx;
|
|
8
|
+
const cy = 3 * y1;
|
|
9
|
+
const by = 3 * (y2 - y1) - cy;
|
|
10
|
+
const ay = 1 - cy - by;
|
|
11
|
+
// Compute x and y values at parameter t
|
|
12
|
+
const x = (t) => ((ax * t + bx) * t + cx) * t;
|
|
13
|
+
const y = (t) => ((ay * t + by) * t + cy) * t;
|
|
14
|
+
return {
|
|
15
|
+
x,
|
|
16
|
+
y
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
static cubicBezier(x1, y1, x2, y2) {
|
|
20
|
+
const { y } = EaseFunctions.cubicBezierGeneric(x1, y1, x2, y2);
|
|
21
|
+
return (t) => {
|
|
22
|
+
t = clamp(t);
|
|
23
|
+
return y(t); // <= equal to x(t) * 0 + y(t) * 1
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
static easeInEaseOut(t) {
|
|
27
|
+
return EaseFunctions.cubicBezier(0.65, 0, 0.35, 1)(t);
|
|
28
|
+
}
|
|
29
|
+
;
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const validateEmail: (email: string) => boolean;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 1 is forwards
|
|
3
|
+
*
|
|
4
|
+
* -1 is backwards
|
|
5
|
+
*/
|
|
6
|
+
export type Direction = 1 | -1;
|
|
7
|
+
export declare class LoopingArrayCalculator {
|
|
8
|
+
length: number;
|
|
9
|
+
isLooping: boolean;
|
|
10
|
+
allowedOverScroll: number;
|
|
11
|
+
constructor(length: number, isLooping?: boolean, allowedOverScroll?: number);
|
|
12
|
+
getCorrectedPosition(position: number): number;
|
|
13
|
+
static withoutOffset(position: number): number;
|
|
14
|
+
static getOffset(position: number): number;
|
|
15
|
+
/**
|
|
16
|
+
* @return absolute distance forwards or Infinity when the target cannot be reached (only possible when not isLooping)
|
|
17
|
+
*/
|
|
18
|
+
getDistanceDirectional(position: number, target: number, direction: Direction): number;
|
|
19
|
+
getDistanceForward(position: number, target: number): number;
|
|
20
|
+
getDistanceBackward(position: number, target: number): number;
|
|
21
|
+
getDistance(position: number, target: number): number;
|
|
22
|
+
getBestDirection(position: number, target: number): Direction;
|
|
23
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export class LoopingArrayCalculator {
|
|
2
|
+
constructor(length, isLooping = true, allowedOverScroll = 0.1) {
|
|
3
|
+
if (allowedOverScroll < 0 || length < 1) {
|
|
4
|
+
throw new Error('Invalid parameters: allowedOverScroll >= 0 and length >= 1 must be true');
|
|
5
|
+
}
|
|
6
|
+
this.length = length;
|
|
7
|
+
this.isLooping = isLooping;
|
|
8
|
+
this.allowedOverScroll = allowedOverScroll;
|
|
9
|
+
}
|
|
10
|
+
getCorrectedPosition(position) {
|
|
11
|
+
if (!this.isLooping) {
|
|
12
|
+
return Math.max(-this.allowedOverScroll, Math.min(this.allowedOverScroll + this.length - 1, position));
|
|
13
|
+
}
|
|
14
|
+
if (position >= this.length) {
|
|
15
|
+
return position % this.length;
|
|
16
|
+
}
|
|
17
|
+
if (position < 0) {
|
|
18
|
+
return this.length - (Math.abs(position) % this.length);
|
|
19
|
+
}
|
|
20
|
+
return position;
|
|
21
|
+
}
|
|
22
|
+
static withoutOffset(position) {
|
|
23
|
+
return position + LoopingArrayCalculator.getOffset(position);
|
|
24
|
+
}
|
|
25
|
+
static getOffset(position) {
|
|
26
|
+
return Math.round(position) - position; // For example: 45.5 => 46 - 45.5 = 0.5
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @return absolute distance forwards or Infinity when the target cannot be reached (only possible when not isLooping)
|
|
30
|
+
*/
|
|
31
|
+
getDistanceDirectional(position, target, direction) {
|
|
32
|
+
if (!this.isLooping && (position < -this.allowedOverScroll || position > this.allowedOverScroll + this.length - 1)) {
|
|
33
|
+
throw new Error('Invalid parameters: position is out of bounds.');
|
|
34
|
+
}
|
|
35
|
+
const isForwardInvalid = (direction === 1 && position > target);
|
|
36
|
+
const isBackwardInvalid = (direction === -1 && target < position);
|
|
37
|
+
if (!this.isLooping && (isForwardInvalid || isBackwardInvalid)) {
|
|
38
|
+
return Infinity;
|
|
39
|
+
}
|
|
40
|
+
if (direction === -1) {
|
|
41
|
+
return this.getDistanceDirectional(target, position, 1);
|
|
42
|
+
}
|
|
43
|
+
position = this.getCorrectedPosition(position);
|
|
44
|
+
target = this.getCorrectedPosition(target);
|
|
45
|
+
let distance = (target - position) * direction;
|
|
46
|
+
if (distance < 0) {
|
|
47
|
+
distance = this.length - (Math.abs(position) % this.length) + target;
|
|
48
|
+
}
|
|
49
|
+
return distance;
|
|
50
|
+
}
|
|
51
|
+
getDistanceForward(position, target) {
|
|
52
|
+
return this.getDistanceDirectional(position, target, 1);
|
|
53
|
+
}
|
|
54
|
+
getDistanceBackward(position, target) {
|
|
55
|
+
return this.getDistanceDirectional(position, target, -1);
|
|
56
|
+
}
|
|
57
|
+
getDistance(position, target) {
|
|
58
|
+
const forwardDistance = this.getDistanceForward(position, target);
|
|
59
|
+
const backwardDistance = this.getDistanceBackward(position, target);
|
|
60
|
+
return Math.min(forwardDistance, backwardDistance);
|
|
61
|
+
}
|
|
62
|
+
getBestDirection(position, target) {
|
|
63
|
+
const forwardDistance = this.getDistanceForward(position, target);
|
|
64
|
+
const backwardDistance = this.getDistanceBackward(position, target);
|
|
65
|
+
return forwardDistance < backwardDistance ? 1 : -1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const clamp: (value: number, min?: number, max?: number) => number;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { Languages } from '../hooks/useLanguage';
|
|
3
|
+
export type News = {
|
|
4
|
+
title: string;
|
|
5
|
+
date: Date;
|
|
6
|
+
description: (string | URL)[];
|
|
7
|
+
externalResource?: URL;
|
|
8
|
+
keys: string[];
|
|
9
|
+
};
|
|
10
|
+
export type LocalizedNews = Record<Languages, News[]>;
|
|
11
|
+
export declare const newsSchema: z.ZodEffects<z.ZodObject<{
|
|
12
|
+
title: z.ZodString;
|
|
13
|
+
description: z.ZodString;
|
|
14
|
+
date: z.ZodString;
|
|
15
|
+
image: z.ZodOptional<z.ZodString>;
|
|
16
|
+
externalResource: z.ZodOptional<z.ZodString>;
|
|
17
|
+
keys: z.ZodArray<z.ZodString, "many">;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
title: string;
|
|
20
|
+
date: string;
|
|
21
|
+
description: string;
|
|
22
|
+
keys: string[];
|
|
23
|
+
image?: string | undefined;
|
|
24
|
+
externalResource?: string | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
title: string;
|
|
27
|
+
date: string;
|
|
28
|
+
description: string;
|
|
29
|
+
keys: string[];
|
|
30
|
+
image?: string | undefined;
|
|
31
|
+
externalResource?: string | undefined;
|
|
32
|
+
}>, News, {
|
|
33
|
+
title: string;
|
|
34
|
+
date: string;
|
|
35
|
+
description: string;
|
|
36
|
+
keys: string[];
|
|
37
|
+
image?: string | undefined;
|
|
38
|
+
externalResource?: string | undefined;
|
|
39
|
+
}>;
|
|
40
|
+
export declare const newsListSchema: z.ZodArray<z.ZodEffects<z.ZodObject<{
|
|
41
|
+
title: z.ZodString;
|
|
42
|
+
description: z.ZodString;
|
|
43
|
+
date: z.ZodString;
|
|
44
|
+
image: z.ZodOptional<z.ZodString>;
|
|
45
|
+
externalResource: z.ZodOptional<z.ZodString>;
|
|
46
|
+
keys: z.ZodArray<z.ZodString, "many">;
|
|
47
|
+
}, "strip", z.ZodTypeAny, {
|
|
48
|
+
title: string;
|
|
49
|
+
date: string;
|
|
50
|
+
description: string;
|
|
51
|
+
keys: string[];
|
|
52
|
+
image?: string | undefined;
|
|
53
|
+
externalResource?: string | undefined;
|
|
54
|
+
}, {
|
|
55
|
+
title: string;
|
|
56
|
+
date: string;
|
|
57
|
+
description: string;
|
|
58
|
+
keys: string[];
|
|
59
|
+
image?: string | undefined;
|
|
60
|
+
externalResource?: string | undefined;
|
|
61
|
+
}>, News, {
|
|
62
|
+
title: string;
|
|
63
|
+
date: string;
|
|
64
|
+
description: string;
|
|
65
|
+
keys: string[];
|
|
66
|
+
image?: string | undefined;
|
|
67
|
+
externalResource?: string | undefined;
|
|
68
|
+
}>, "many">;
|
|
69
|
+
export declare const localizedNewsSchema: z.ZodRecord<z.ZodEnum<["en", "de"]>, z.ZodArray<z.ZodEffects<z.ZodObject<{
|
|
70
|
+
title: z.ZodString;
|
|
71
|
+
description: z.ZodString;
|
|
72
|
+
date: z.ZodString;
|
|
73
|
+
image: z.ZodOptional<z.ZodString>;
|
|
74
|
+
externalResource: z.ZodOptional<z.ZodString>;
|
|
75
|
+
keys: z.ZodArray<z.ZodString, "many">;
|
|
76
|
+
}, "strip", z.ZodTypeAny, {
|
|
77
|
+
title: string;
|
|
78
|
+
date: string;
|
|
79
|
+
description: string;
|
|
80
|
+
keys: string[];
|
|
81
|
+
image?: string | undefined;
|
|
82
|
+
externalResource?: string | undefined;
|
|
83
|
+
}, {
|
|
84
|
+
title: string;
|
|
85
|
+
date: string;
|
|
86
|
+
description: string;
|
|
87
|
+
keys: string[];
|
|
88
|
+
image?: string | undefined;
|
|
89
|
+
externalResource?: string | undefined;
|
|
90
|
+
}>, News, {
|
|
91
|
+
title: string;
|
|
92
|
+
date: string;
|
|
93
|
+
description: string;
|
|
94
|
+
keys: string[];
|
|
95
|
+
image?: string | undefined;
|
|
96
|
+
externalResource?: string | undefined;
|
|
97
|
+
}>, "many">>;
|
|
98
|
+
export declare const filterNews: (localizedNews: News[], requiredKeys: string[]) => News[];
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { languages } from '../hooks/useLanguage';
|
|
3
|
+
export const newsSchema = z.object({
|
|
4
|
+
title: z.string(),
|
|
5
|
+
description: z.string(),
|
|
6
|
+
date: z.string(),
|
|
7
|
+
image: z.string().url().optional(),
|
|
8
|
+
externalResource: z.string().url().optional(),
|
|
9
|
+
keys: z.array(z.string())
|
|
10
|
+
}).transform((obj) => {
|
|
11
|
+
let description = [obj.description];
|
|
12
|
+
if (obj.image) {
|
|
13
|
+
description = [new URL(obj.image), ...description];
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
title: obj.title,
|
|
17
|
+
date: new Date(obj.date),
|
|
18
|
+
description,
|
|
19
|
+
externalResource: obj.externalResource ? new URL(obj.externalResource) : undefined,
|
|
20
|
+
keys: obj.keys
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
export const newsListSchema = z.array(newsSchema);
|
|
24
|
+
export const localizedNewsSchema = z.record(z.enum(languages), newsListSchema);
|
|
25
|
+
export const filterNews = (localizedNews, requiredKeys) => {
|
|
26
|
+
return localizedNews.filter(news => requiredKeys.every(value => news.keys.includes(value)));
|
|
27
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const noop: () => undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const noop = () => undefined;
|
|
@@ -10,13 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @return The list of objects that match all search strings
|
|
12
12
|
*/
|
|
13
|
-
export const MultiSubjectSearchWithMapping
|
|
14
|
-
return objects.filter(object => {
|
|
15
|
-
const mappedSearchKeywords = mapping(object).map(value => value ? value.toLowerCase().trim() : undefined)
|
|
16
|
-
return search.every(searchValue => !!mappedSearchKeywords.find(value => !!value && value.includes(searchValue.toLowerCase().trim())))
|
|
17
|
-
})
|
|
18
|
-
}
|
|
19
|
-
|
|
13
|
+
export declare const MultiSubjectSearchWithMapping: <T>(search: string[], objects: T[], mapping: (value: T) => (string | undefined)[]) => T[];
|
|
20
14
|
/**
|
|
21
15
|
* Finds all values matching the search value by first mapping the values to a string array and then checking each entry for matches.
|
|
22
16
|
* Returns the list of all matches.
|
|
@@ -29,13 +23,7 @@ export const MultiSubjectSearchWithMapping = <T>(search: string[], objects: T[],
|
|
|
29
23
|
*
|
|
30
24
|
* @return The list of objects that match the search string
|
|
31
25
|
*/
|
|
32
|
-
export const MultiSearchWithMapping
|
|
33
|
-
return objects.filter(object => {
|
|
34
|
-
const mappedSearchKeywords = mapping(object).map(value => value.toLowerCase().trim())
|
|
35
|
-
return !!mappedSearchKeywords.find(value => value.includes(search.toLowerCase().trim()))
|
|
36
|
-
})
|
|
37
|
-
}
|
|
38
|
-
|
|
26
|
+
export declare const MultiSearchWithMapping: <T>(search: string, objects: T[], mapping: (value: T) => string[]) => T[];
|
|
39
27
|
/**
|
|
40
28
|
* Finds all values matching the search value by first mapping the values to a string and returns the list of all matches.
|
|
41
29
|
*
|
|
@@ -47,10 +35,7 @@ export const MultiSearchWithMapping = <T>(search: string, objects: T[], mapping:
|
|
|
47
35
|
*
|
|
48
36
|
* @return The list of objects that match the search string
|
|
49
37
|
*/
|
|
50
|
-
export const SimpleSearchWithMapping
|
|
51
|
-
return MultiSearchWithMapping(search, objects, value => [mapping(value)])
|
|
52
|
-
}
|
|
53
|
-
|
|
38
|
+
export declare const SimpleSearchWithMapping: <T>(search: string, objects: T[], mapping: (value: T) => string) => T[];
|
|
54
39
|
/**
|
|
55
40
|
* Finds all values matching the search value and returns the list of all matches.
|
|
56
41
|
*
|
|
@@ -60,6 +45,4 @@ export const SimpleSearchWithMapping = <T>(search: string, objects: T[], mapping
|
|
|
60
45
|
*
|
|
61
46
|
* @return The list of objects that match the search string
|
|
62
47
|
*/
|
|
63
|
-
export const SimpleSearch
|
|
64
|
-
return SimpleSearchWithMapping(search, objects, value => value)
|
|
65
|
-
}
|
|
48
|
+
export declare const SimpleSearch: (search: string, objects: string[]) => string[];
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds all values matching the search values by first mapping the values to a string array and then checking each entry for matches.
|
|
3
|
+
* Returns the list of all matches.
|
|
4
|
+
*
|
|
5
|
+
* @param search The list of search strings e.g. `[name, type]`
|
|
6
|
+
*
|
|
7
|
+
* @param objects The list of objects to be searched in
|
|
8
|
+
*
|
|
9
|
+
* @param mapping The mapping of objects to the string properties they fulfil
|
|
10
|
+
*
|
|
11
|
+
* @return The list of objects that match all search strings
|
|
12
|
+
*/
|
|
13
|
+
export const MultiSubjectSearchWithMapping = (search, objects, mapping) => {
|
|
14
|
+
return objects.filter(object => {
|
|
15
|
+
const mappedSearchKeywords = mapping(object).map(value => value ? value.toLowerCase().trim() : undefined);
|
|
16
|
+
return search.every(searchValue => !!mappedSearchKeywords.find(value => !!value && value.includes(searchValue.toLowerCase().trim())));
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Finds all values matching the search value by first mapping the values to a string array and then checking each entry for matches.
|
|
21
|
+
* Returns the list of all matches.
|
|
22
|
+
*
|
|
23
|
+
* @param search The search string e.g `name`
|
|
24
|
+
*
|
|
25
|
+
* @param objects The list of objects to be searched in
|
|
26
|
+
*
|
|
27
|
+
* @param mapping The mapping of objects to the string properties they fulfil
|
|
28
|
+
*
|
|
29
|
+
* @return The list of objects that match the search string
|
|
30
|
+
*/
|
|
31
|
+
export const MultiSearchWithMapping = (search, objects, mapping) => {
|
|
32
|
+
return objects.filter(object => {
|
|
33
|
+
const mappedSearchKeywords = mapping(object).map(value => value.toLowerCase().trim());
|
|
34
|
+
return !!mappedSearchKeywords.find(value => value.includes(search.toLowerCase().trim()));
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Finds all values matching the search value by first mapping the values to a string and returns the list of all matches.
|
|
39
|
+
*
|
|
40
|
+
* @param search The search string e.g `name`
|
|
41
|
+
*
|
|
42
|
+
* @param objects The list of objects to be searched in
|
|
43
|
+
*
|
|
44
|
+
* @param mapping The mapping of objects to a string that is compared to the search
|
|
45
|
+
*
|
|
46
|
+
* @return The list of objects that match the search string
|
|
47
|
+
*/
|
|
48
|
+
export const SimpleSearchWithMapping = (search, objects, mapping) => {
|
|
49
|
+
return MultiSearchWithMapping(search, objects, value => [mapping(value)]);
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Finds all values matching the search value and returns the list of all matches.
|
|
53
|
+
*
|
|
54
|
+
* @param search The search string e.g `name`
|
|
55
|
+
*
|
|
56
|
+
* @param objects The list of objects to be searched in
|
|
57
|
+
*
|
|
58
|
+
* @return The list of objects that match the search string
|
|
59
|
+
*/
|
|
60
|
+
export const SimpleSearch = (search, objects) => {
|
|
61
|
+
return SimpleSearchWithMapping(search, objects, value => value);
|
|
62
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
declare class StorageService {
|
|
2
|
+
private storage;
|
|
3
|
+
constructor(storage: Storage);
|
|
4
|
+
get<T>(key: string): T | null;
|
|
5
|
+
set<T>(key: string, value: T): void;
|
|
6
|
+
delete(key: string): void;
|
|
7
|
+
deleteAll(): void;
|
|
8
|
+
}
|
|
9
|
+
export declare class LocalStorageService extends StorageService {
|
|
10
|
+
constructor();
|
|
11
|
+
}
|
|
12
|
+
export declare class SessionStorageService extends StorageService {
|
|
13
|
+
constructor();
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
class StorageService {
|
|
2
|
+
// this seems to be a bug in eslint as 'paramter-properties' is a special syntax of typescript
|
|
3
|
+
constructor(storage) {
|
|
4
|
+
this.storage = storage;
|
|
5
|
+
}
|
|
6
|
+
get(key) {
|
|
7
|
+
const value = this.storage.getItem(key);
|
|
8
|
+
if (value === null) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
return JSON.parse(value);
|
|
12
|
+
}
|
|
13
|
+
set(key, value) {
|
|
14
|
+
this.storage.setItem(key, JSON.stringify(value));
|
|
15
|
+
}
|
|
16
|
+
delete(key) {
|
|
17
|
+
this.storage.removeItem(key);
|
|
18
|
+
}
|
|
19
|
+
deleteAll() {
|
|
20
|
+
this.storage.clear();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class LocalStorageService extends StorageService {
|
|
24
|
+
constructor() {
|
|
25
|
+
super(window.localStorage);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class SessionStorageService extends StorageService {
|
|
29
|
+
constructor() {
|
|
30
|
+
super(window.sessionStorage);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type NativeProps<NativeElement extends keyof React.ReactHTML, OmittedKeys extends string | number | symbol | undefined = undefined> = Omit<React.JSX.IntrinsicElements[NativeElement], OmittedKeys extends undefined ? 'ref' : 'ref' | OmittedKeys>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -7,21 +7,20 @@
|
|
|
7
7
|
"url": "git+https://github.com/helpwave/hightide.git"
|
|
8
8
|
},
|
|
9
9
|
"license": "MPL-2.0",
|
|
10
|
-
"version": "0.0.
|
|
11
|
-
"main": "index.ts",
|
|
10
|
+
"version": "0.0.11",
|
|
12
11
|
"type": "module",
|
|
12
|
+
"main": "dist/index.js",
|
|
13
|
+
"types": "dist/index.d.ts",
|
|
13
14
|
"scripts": {
|
|
15
|
+
"clean": "rm -rf dist",
|
|
16
|
+
"copy-css": "cp -R src/css dist/css",
|
|
17
|
+
"build": "npm run clean && tsc && npm run copy-css",
|
|
14
18
|
"storybook": "storybook dev -p 6006",
|
|
15
19
|
"build-storybook": "storybook build",
|
|
16
20
|
"lint": "tsc --noEmit && eslint ."
|
|
17
21
|
},
|
|
18
22
|
"files": [
|
|
19
|
-
"
|
|
20
|
-
"globals.css",
|
|
21
|
-
"coloring/",
|
|
22
|
-
"components/",
|
|
23
|
-
"hooks/",
|
|
24
|
-
"util/"
|
|
23
|
+
"dist"
|
|
25
24
|
],
|
|
26
25
|
"dependencies": {
|
|
27
26
|
"@headlessui/react": "1.7.19",
|
package/coloring/shading.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import tinycolor from 'tinycolor2'
|
|
2
|
-
import type { ShadedColors } from './types'
|
|
3
|
-
import { shadingColorValues } from './types'
|
|
4
|
-
|
|
5
|
-
// Function to generate a full shading of several colors
|
|
6
|
-
export const generateShadingColors = (partialShading: Omit<Partial<ShadedColors>, '0' | '1000'>): ShadedColors => {
|
|
7
|
-
const shading: ShadedColors = {
|
|
8
|
-
0: '#FFFFFF',
|
|
9
|
-
1000: '#000000'
|
|
10
|
-
} as ShadedColors
|
|
11
|
-
|
|
12
|
-
let index = 1
|
|
13
|
-
while (index < shadingColorValues.length - 1) {
|
|
14
|
-
const previous = shadingColorValues[index - 1]!
|
|
15
|
-
const current = shadingColorValues[index]!
|
|
16
|
-
|
|
17
|
-
if (partialShading[current] !== undefined) {
|
|
18
|
-
shading[current] = partialShading[current]
|
|
19
|
-
index++
|
|
20
|
-
continue
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
let j: number = index + 1
|
|
24
|
-
while (j < shadingColorValues.length) {
|
|
25
|
-
if (partialShading[shadingColorValues[j]!] !== undefined) {
|
|
26
|
-
break
|
|
27
|
-
}
|
|
28
|
-
j++
|
|
29
|
-
}
|
|
30
|
-
if (j === shadingColorValues.length) {
|
|
31
|
-
j = shadingColorValues.length - 1
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const nextFound = shadingColorValues[j]!
|
|
35
|
-
const interval = nextFound - previous
|
|
36
|
-
for (let k = index; k < j; k++) {
|
|
37
|
-
const current = shadingColorValues[k]!
|
|
38
|
-
const previousValue = partialShading[previous] ?? shading[previous]
|
|
39
|
-
const nextValue = partialShading[nextFound] ?? shading[nextFound]
|
|
40
|
-
shading[current] = tinycolor.mix(tinycolor(previousValue), tinycolor(nextValue), (current - previous) / interval * 100).toHexString()
|
|
41
|
-
}
|
|
42
|
-
index = j
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return shading
|
|
46
|
-
}
|
package/coloring/types.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export const shadingColorValues = [0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000] as const
|
|
2
|
-
export type ColorShadingValue = typeof shadingColorValues[number]
|
|
3
|
-
export type ShadedColors = Record<ColorShadingValue, string>
|
|
4
|
-
|
|
5
|
-
export type ColoringStyle = 'background' | 'tonal' | 'tonal-opaque' | 'text' | 'text-border'
|
|
6
|
-
export type ColorMode = 'light' | 'dark'
|
|
7
|
-
|
|
8
|
-
export type Coloring = {
|
|
9
|
-
color: '',
|
|
10
|
-
style?: ColoringStyle,
|
|
11
|
-
mode?: ColorMode,
|
|
12
|
-
hover?: boolean,
|
|
13
|
-
}
|