@helpwave/hightide 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/coloring/{shading.d.cts → shading.d.mts} +1 -1
- package/dist/coloring/shading.js +14 -3329
- package/dist/coloring/shading.js.map +1 -1
- package/dist/coloring/shading.mjs +47 -0
- package/dist/coloring/shading.mjs.map +1 -0
- package/dist/coloring/types.js +26 -2
- package/dist/coloring/types.js.map +1 -1
- package/dist/coloring/types.mjs +6 -0
- package/dist/coloring/{types.cjs.map → types.mjs.map} +1 -1
- package/dist/components/branding/HelpwaveBadge.js +59 -25
- package/dist/components/branding/HelpwaveBadge.js.map +1 -1
- package/dist/components/branding/HelpwaveBadge.mjs +122 -0
- package/dist/components/branding/HelpwaveBadge.mjs.map +1 -0
- package/dist/components/date/{DatePicker.d.cts → DatePicker.d.mts} +5 -5
- package/dist/components/date/DatePicker.js +119 -83
- package/dist/components/date/DatePicker.js.map +1 -1
- package/dist/components/date/{DatePicker.cjs → DatePicker.mjs} +85 -120
- package/dist/components/date/DatePicker.mjs.map +1 -0
- package/dist/components/date/{DayPicker.d.cts → DayPicker.d.mts} +1 -1
- package/dist/components/date/DayPicker.js +55 -18
- package/dist/components/date/DayPicker.js.map +1 -1
- package/dist/components/date/{DayPicker.cjs → DayPicker.mjs} +19 -57
- package/dist/components/date/DayPicker.mjs.map +1 -0
- package/dist/components/date/{TimeDisplay.d.cts → TimeDisplay.d.mts} +2 -2
- package/dist/components/date/TimeDisplay.js +35 -9
- package/dist/components/date/TimeDisplay.js.map +1 -1
- package/dist/components/date/{TimeDisplay.cjs → TimeDisplay.mjs} +10 -37
- package/dist/components/date/TimeDisplay.mjs.map +1 -0
- package/dist/components/date/TimePicker.js +57 -22
- package/dist/components/date/TimePicker.js.map +1 -1
- package/dist/components/date/{TimePicker.cjs → TimePicker.mjs} +23 -59
- package/dist/components/date/TimePicker.mjs.map +1 -0
- package/dist/components/date/{YearMonthPicker.d.cts → YearMonthPicker.d.mts} +1 -1
- package/dist/components/date/YearMonthPicker.d.ts +1 -1
- package/dist/components/date/YearMonthPicker.js +73 -38
- package/dist/components/date/YearMonthPicker.js.map +1 -1
- package/dist/components/date/{YearMonthPicker.cjs → YearMonthPicker.mjs} +39 -75
- package/dist/components/date/YearMonthPicker.mjs.map +1 -0
- package/dist/components/dialogs/{ConfirmDialog.d.cts → ConfirmDialog.d.mts} +4 -4
- package/dist/components/dialogs/ConfirmDialog.js +98 -62
- package/dist/components/dialogs/ConfirmDialog.js.map +1 -1
- package/dist/components/dialogs/{ConfirmDialog.cjs → ConfirmDialog.mjs} +63 -100
- package/dist/components/dialogs/ConfirmDialog.mjs.map +1 -0
- package/dist/components/icons-and-geometry/Avatar.js +47 -10
- package/dist/components/icons-and-geometry/Avatar.js.map +1 -1
- package/dist/components/icons-and-geometry/Avatar.mjs +81 -0
- package/dist/components/icons-and-geometry/{Avatar.cjs.map → Avatar.mjs.map} +1 -1
- package/dist/components/icons-and-geometry/Circle.js +40 -6
- package/dist/components/icons-and-geometry/Circle.js.map +1 -1
- package/dist/components/icons-and-geometry/Circle.mjs +27 -0
- package/dist/components/icons-and-geometry/{Circle.cjs.map → Circle.mjs.map} +1 -1
- package/dist/components/icons-and-geometry/Helpwave.js +38 -14
- package/dist/components/icons-and-geometry/Helpwave.js.map +1 -1
- package/dist/components/icons-and-geometry/Helpwave.mjs +75 -0
- package/dist/components/icons-and-geometry/{Helpwave.cjs.map → Helpwave.mjs.map} +1 -1
- package/dist/components/icons-and-geometry/Ring.js +74 -37
- package/dist/components/icons-and-geometry/Ring.js.map +1 -1
- package/dist/components/icons-and-geometry/{Ring.cjs → Ring.mjs} +38 -76
- package/dist/components/icons-and-geometry/{Ring.cjs.map → Ring.mjs.map} +1 -1
- package/dist/components/icons-and-geometry/Tag.js +28 -4
- package/dist/components/icons-and-geometry/Tag.js.map +1 -1
- package/dist/components/icons-and-geometry/Tag.mjs +22 -0
- package/dist/components/icons-and-geometry/{Tag.cjs.map → Tag.mjs.map} +1 -1
- package/dist/components/layout-and-navigation/BreadCrumb.js +195 -191
- package/dist/components/layout-and-navigation/BreadCrumb.js.map +1 -1
- package/dist/components/layout-and-navigation/{BreadCrumb.cjs → BreadCrumb.mjs} +191 -198
- package/dist/components/layout-and-navigation/{BreadCrumb.cjs.map → BreadCrumb.mjs.map} +1 -1
- package/dist/components/layout-and-navigation/Carousel.js +68 -34
- package/dist/components/layout-and-navigation/Carousel.js.map +1 -1
- package/dist/components/layout-and-navigation/{Carousel.cjs → Carousel.mjs} +35 -70
- package/dist/components/layout-and-navigation/{Carousel.cjs.map → Carousel.mjs.map} +1 -1
- package/dist/components/layout-and-navigation/Chip.js +43 -8
- package/dist/components/layout-and-navigation/Chip.js.map +1 -1
- package/dist/components/layout-and-navigation/Chip.mjs +69 -0
- package/dist/components/layout-and-navigation/{Chip.cjs.map → Chip.mjs.map} +1 -1
- package/dist/components/layout-and-navigation/DividerInserter.js +39 -5
- package/dist/components/layout-and-navigation/DividerInserter.js.map +1 -1
- package/dist/components/layout-and-navigation/DividerInserter.mjs +25 -0
- package/dist/components/layout-and-navigation/{DividerInserter.cjs.map → DividerInserter.mjs.map} +1 -1
- package/dist/components/layout-and-navigation/Expandable.js +52 -17
- package/dist/components/layout-and-navigation/Expandable.js.map +1 -1
- package/dist/components/layout-and-navigation/Expandable.mjs +81 -0
- package/dist/components/layout-and-navigation/Expandable.mjs.map +1 -0
- package/dist/components/layout-and-navigation/{FAQSection.d.cts → FAQSection.d.mts} +1 -1
- package/dist/components/layout-and-navigation/FAQSection.js +75 -41
- package/dist/components/layout-and-navigation/FAQSection.js.map +1 -1
- package/dist/components/layout-and-navigation/{FAQSection.cjs → FAQSection.mjs} +42 -77
- package/dist/components/layout-and-navigation/FAQSection.mjs.map +1 -0
- package/dist/components/layout-and-navigation/{MarkdownInterpreter.d.cts → MarkdownInterpreter.d.mts} +1 -1
- package/dist/components/layout-and-navigation/MarkdownInterpreter.d.ts +1 -1
- package/dist/components/layout-and-navigation/MarkdownInterpreter.js +43 -18
- package/dist/components/layout-and-navigation/MarkdownInterpreter.js.map +1 -1
- package/dist/components/layout-and-navigation/{MarkdownInterpreter.cjs → MarkdownInterpreter.mjs} +19 -45
- package/dist/components/layout-and-navigation/{MarkdownInterpreter.cjs.map → MarkdownInterpreter.mjs.map} +1 -1
- package/dist/components/layout-and-navigation/{Overlay.d.cts → Overlay.d.mts} +3 -3
- package/dist/components/layout-and-navigation/Overlay.d.ts +1 -1
- package/dist/components/layout-and-navigation/Overlay.js +91 -54
- package/dist/components/layout-and-navigation/Overlay.js.map +1 -1
- package/dist/components/layout-and-navigation/{Overlay.cjs → Overlay.mjs} +55 -93
- package/dist/components/layout-and-navigation/Overlay.mjs.map +1 -0
- package/dist/components/layout-and-navigation/{Pagination.d.cts → Pagination.d.mts} +2 -2
- package/dist/components/layout-and-navigation/Pagination.js +53 -19
- package/dist/components/layout-and-navigation/Pagination.js.map +1 -1
- package/dist/components/layout-and-navigation/Pagination.mjs +82 -0
- package/dist/components/layout-and-navigation/Pagination.mjs.map +1 -0
- package/dist/components/layout-and-navigation/{SearchableList.d.cts → SearchableList.d.mts} +2 -2
- package/dist/components/layout-and-navigation/SearchableList.js +76 -42
- package/dist/components/layout-and-navigation/SearchableList.js.map +1 -1
- package/dist/components/layout-and-navigation/SearchableList.mjs +252 -0
- package/dist/components/layout-and-navigation/SearchableList.mjs.map +1 -0
- package/dist/components/layout-and-navigation/{StepperBar.d.cts → StepperBar.d.mts} +3 -3
- package/dist/components/layout-and-navigation/StepperBar.d.ts +1 -1
- package/dist/components/layout-and-navigation/StepperBar.js +69 -34
- package/dist/components/layout-and-navigation/StepperBar.js.map +1 -1
- package/dist/components/layout-and-navigation/{StepperBar.cjs → StepperBar.mjs} +35 -71
- package/dist/components/layout-and-navigation/StepperBar.mjs.map +1 -0
- package/dist/components/layout-and-navigation/{Table.d.cts → Table.d.mts} +4 -4
- package/dist/components/layout-and-navigation/Table.d.ts +3 -3
- package/dist/components/layout-and-navigation/Table.js +111 -68
- package/dist/components/layout-and-navigation/Table.js.map +1 -1
- package/dist/components/layout-and-navigation/{Table.cjs → Table.mjs} +69 -113
- package/dist/components/layout-and-navigation/Table.mjs.map +1 -0
- package/dist/components/layout-and-navigation/{TextImage.d.cts → TextImage.d.mts} +2 -2
- package/dist/components/layout-and-navigation/TextImage.js +54 -18
- package/dist/components/layout-and-navigation/TextImage.js.map +1 -1
- package/dist/components/layout-and-navigation/TextImage.mjs +101 -0
- package/dist/components/layout-and-navigation/TextImage.mjs.map +1 -0
- package/dist/components/layout-and-navigation/Tile.js +42 -8
- package/dist/components/layout-and-navigation/Tile.js.map +1 -1
- package/dist/components/layout-and-navigation/Tile.mjs +23 -0
- package/dist/components/layout-and-navigation/{Tile.cjs.map → Tile.mjs.map} +1 -1
- package/dist/components/layout-and-navigation/VerticalDivider.js +33 -9
- package/dist/components/layout-and-navigation/VerticalDivider.js.map +1 -1
- package/dist/components/layout-and-navigation/VerticalDivider.mjs +56 -0
- package/dist/components/layout-and-navigation/{VerticalDivider.cjs.map → VerticalDivider.mjs.map} +1 -1
- package/dist/components/loading-states/{ErrorComponent.d.cts → ErrorComponent.d.mts} +2 -2
- package/dist/components/loading-states/ErrorComponent.js +46 -12
- package/dist/components/loading-states/ErrorComponent.js.map +1 -1
- package/dist/components/loading-states/ErrorComponent.mjs +68 -0
- package/dist/components/loading-states/ErrorComponent.mjs.map +1 -0
- package/dist/components/loading-states/{LoadingAndErrorComponent.d.cts → LoadingAndErrorComponent.d.mts} +5 -5
- package/dist/components/loading-states/LoadingAndErrorComponent.d.ts +1 -1
- package/dist/components/loading-states/LoadingAndErrorComponent.js +68 -34
- package/dist/components/loading-states/LoadingAndErrorComponent.js.map +1 -1
- package/dist/components/loading-states/LoadingAndErrorComponent.mjs +194 -0
- package/dist/components/loading-states/LoadingAndErrorComponent.mjs.map +1 -0
- package/dist/components/loading-states/{LoadingAnimation.d.cts → LoadingAnimation.d.mts} +2 -2
- package/dist/components/loading-states/LoadingAnimation.js +59 -23
- package/dist/components/loading-states/LoadingAnimation.js.map +1 -1
- package/dist/components/loading-states/LoadingAnimation.mjs +139 -0
- package/dist/components/loading-states/LoadingAnimation.mjs.map +1 -0
- package/dist/components/loading-states/{LoadingButton.d.cts → LoadingButton.d.mts} +1 -1
- package/dist/components/loading-states/LoadingButton.js +62 -28
- package/dist/components/loading-states/LoadingButton.js.map +1 -1
- package/dist/components/loading-states/{LoadingButton.cjs → LoadingButton.mjs} +29 -64
- package/dist/components/loading-states/LoadingButton.mjs.map +1 -0
- package/dist/components/loading-states/ProgressIndicator.js +30 -6
- package/dist/components/loading-states/ProgressIndicator.js.map +1 -1
- package/dist/components/loading-states/ProgressIndicator.mjs +59 -0
- package/dist/components/loading-states/{ProgressIndicator.cjs.map → ProgressIndicator.mjs.map} +1 -1
- package/dist/components/modals/{ConfirmModal.d.cts → ConfirmModal.d.mts} +4 -4
- package/dist/components/modals/ConfirmModal.js +99 -63
- package/dist/components/modals/ConfirmModal.js.map +1 -1
- package/dist/components/modals/{ConfirmModal.cjs → ConfirmModal.mjs} +64 -101
- package/dist/components/modals/ConfirmModal.mjs.map +1 -0
- package/dist/components/modals/{DiscardChangesModal.d.cts → DiscardChangesModal.d.mts} +5 -5
- package/dist/components/modals/DiscardChangesModal.js +101 -65
- package/dist/components/modals/DiscardChangesModal.js.map +1 -1
- package/dist/components/modals/{DiscardChangesModal.cjs → DiscardChangesModal.mjs} +66 -103
- package/dist/components/modals/DiscardChangesModal.mjs.map +1 -0
- package/dist/components/modals/{InputModal.d.cts → InputModal.d.mts} +7 -7
- package/dist/components/modals/InputModal.js +124 -88
- package/dist/components/modals/InputModal.js.map +1 -1
- package/dist/components/modals/{InputModal.cjs → InputModal.mjs} +89 -126
- package/dist/components/modals/InputModal.mjs.map +1 -0
- package/dist/components/modals/{LanguageModal.d.cts → LanguageModal.d.mts} +3 -3
- package/dist/components/modals/LanguageModal.js +130 -95
- package/dist/components/modals/LanguageModal.js.map +1 -1
- package/dist/components/modals/{LanguageModal.cjs → LanguageModal.mjs} +95 -133
- package/dist/components/modals/LanguageModal.mjs.map +1 -0
- package/dist/components/modals/{ThemeModal.d.cts → ThemeModal.d.mts} +4 -4
- package/dist/components/modals/ThemeModal.js +134 -99
- package/dist/components/modals/ThemeModal.js.map +1 -1
- package/dist/components/modals/{ThemeModal.cjs → ThemeModal.mjs} +99 -137
- package/dist/components/modals/ThemeModal.mjs.map +1 -0
- package/dist/components/properties/{CheckboxProperty.d.cts → CheckboxProperty.d.mts} +3 -3
- package/dist/components/properties/CheckboxProperty.js +87 -53
- package/dist/components/properties/CheckboxProperty.js.map +1 -1
- package/dist/components/properties/{CheckboxProperty.cjs → CheckboxProperty.mjs} +54 -89
- package/dist/components/properties/CheckboxProperty.mjs.map +1 -0
- package/dist/components/properties/{DateProperty.d.cts → DateProperty.d.mts} +3 -3
- package/dist/components/properties/DateProperty.js +94 -60
- package/dist/components/properties/DateProperty.js.map +1 -1
- package/dist/components/properties/{DateProperty.cjs → DateProperty.mjs} +61 -96
- package/dist/components/properties/DateProperty.mjs.map +1 -0
- package/dist/components/properties/{MultiSelectProperty.d.cts → MultiSelectProperty.d.mts} +5 -5
- package/dist/components/properties/MultiSelectProperty.js +157 -123
- package/dist/components/properties/MultiSelectProperty.js.map +1 -1
- package/dist/components/properties/{MultiSelectProperty.cjs → MultiSelectProperty.mjs} +124 -159
- package/dist/components/properties/MultiSelectProperty.mjs.map +1 -0
- package/dist/components/properties/{NumberProperty.d.cts → NumberProperty.d.mts} +3 -3
- package/dist/components/properties/NumberProperty.js +95 -61
- package/dist/components/properties/NumberProperty.js.map +1 -1
- package/dist/components/properties/{NumberProperty.cjs → NumberProperty.mjs} +62 -97
- package/dist/components/properties/NumberProperty.mjs.map +1 -0
- package/dist/components/properties/{PropertyBase.d.cts → PropertyBase.d.mts} +2 -2
- package/dist/components/properties/PropertyBase.js +63 -29
- package/dist/components/properties/PropertyBase.js.map +1 -1
- package/dist/components/properties/PropertyBase.mjs +188 -0
- package/dist/components/properties/PropertyBase.mjs.map +1 -0
- package/dist/components/properties/{SelectProperty.d.cts → SelectProperty.d.mts} +5 -5
- package/dist/components/properties/SelectProperty.js +119 -86
- package/dist/components/properties/SelectProperty.js.map +1 -1
- package/dist/components/properties/{SelectProperty.cjs → SelectProperty.mjs} +86 -122
- package/dist/components/properties/SelectProperty.mjs.map +1 -0
- package/dist/components/properties/{TextProperty.d.cts → TextProperty.d.mts} +3 -3
- package/dist/components/properties/TextProperty.js +92 -58
- package/dist/components/properties/TextProperty.js.map +1 -1
- package/dist/components/properties/{TextProperty.cjs → TextProperty.mjs} +59 -94
- package/dist/components/properties/TextProperty.mjs.map +1 -0
- package/dist/components/user-action/Button.js +67 -28
- package/dist/components/user-action/Button.js.map +1 -1
- package/dist/components/user-action/{Button.cjs → Button.mjs} +29 -69
- package/dist/components/user-action/{Button.cjs.map → Button.mjs.map} +1 -1
- package/dist/components/user-action/{Checkbox.d.cts → Checkbox.d.mts} +1 -1
- package/dist/components/user-action/Checkbox.js +58 -23
- package/dist/components/user-action/Checkbox.js.map +1 -1
- package/dist/components/user-action/Checkbox.mjs +122 -0
- package/dist/components/user-action/Checkbox.mjs.map +1 -0
- package/dist/components/user-action/{DateAndTimePicker.d.cts → DateAndTimePicker.d.mts} +7 -7
- package/dist/components/user-action/DateAndTimePicker.js +142 -107
- package/dist/components/user-action/DateAndTimePicker.js.map +1 -1
- package/dist/components/user-action/{DateAndTimePicker.cjs → DateAndTimePicker.mjs} +109 -143
- package/dist/components/user-action/DateAndTimePicker.mjs.map +1 -0
- package/dist/components/user-action/{Input.d.cts → Input.d.mts} +1 -1
- package/dist/components/user-action/Input.js +62 -26
- package/dist/components/user-action/Input.js.map +1 -1
- package/dist/components/user-action/Input.mjs +186 -0
- package/dist/components/user-action/Input.mjs.map +1 -0
- package/dist/components/user-action/Label.js +39 -5
- package/dist/components/user-action/Label.js.map +1 -1
- package/dist/components/user-action/Label.mjs +21 -0
- package/dist/components/user-action/{Label.cjs.map → Label.mjs.map} +1 -1
- package/dist/components/user-action/Menu.js +54 -19
- package/dist/components/user-action/Menu.js.map +1 -1
- package/dist/components/user-action/Menu.mjs +127 -0
- package/dist/components/user-action/Menu.mjs.map +1 -0
- package/dist/components/user-action/{MultiSelect.d.cts → MultiSelect.d.mts} +3 -3
- package/dist/components/user-action/MultiSelect.js +118 -84
- package/dist/components/user-action/MultiSelect.js.map +1 -1
- package/dist/components/user-action/{MultiSelect.cjs → MultiSelect.mjs} +85 -120
- package/dist/components/user-action/MultiSelect.mjs.map +1 -0
- package/dist/components/user-action/ScrollPicker.js +50 -16
- package/dist/components/user-action/ScrollPicker.js.map +1 -1
- package/dist/components/user-action/{ScrollPicker.cjs → ScrollPicker.mjs} +17 -52
- package/dist/components/user-action/ScrollPicker.mjs.map +1 -0
- package/dist/components/user-action/{Select.d.cts → Select.d.mts} +2 -2
- package/dist/components/user-action/Select.d.ts +1 -1
- package/dist/components/user-action/Select.js +88 -53
- package/dist/components/user-action/Select.js.map +1 -1
- package/dist/components/user-action/{Select.cjs → Select.mjs} +53 -91
- package/dist/components/user-action/Select.mjs.map +1 -0
- package/dist/components/user-action/{Textarea.d.cts → Textarea.d.mts} +1 -1
- package/dist/components/user-action/Textarea.js +60 -25
- package/dist/components/user-action/Textarea.js.map +1 -1
- package/dist/components/user-action/Textarea.mjs +163 -0
- package/dist/components/user-action/Textarea.mjs.map +1 -0
- package/dist/components/user-action/ToggleableInput.js +61 -26
- package/dist/components/user-action/ToggleableInput.js.map +1 -1
- package/dist/components/user-action/ToggleableInput.mjs +156 -0
- package/dist/components/user-action/ToggleableInput.mjs.map +1 -0
- package/dist/components/user-action/Tooltip.js +41 -15
- package/dist/components/user-action/Tooltip.js.map +1 -1
- package/dist/components/user-action/{Tooltip.cjs → Tooltip.mjs} +16 -43
- package/dist/components/user-action/Tooltip.mjs.map +1 -0
- package/dist/css/globals.css +33 -24
- package/dist/css/uncompiled/globals.css +19 -7
- package/dist/hooks/useHoverState.js +31 -7
- package/dist/hooks/useHoverState.js.map +1 -1
- package/dist/hooks/useHoverState.mjs +47 -0
- package/dist/hooks/{useHoverState.cjs.map → useHoverState.mjs.map} +1 -1
- package/dist/hooks/useLocalStorage.js +31 -7
- package/dist/hooks/useLocalStorage.js.map +1 -1
- package/dist/hooks/useLocalStorage.mjs +58 -0
- package/dist/hooks/{useLocalStorage.cjs.map → useLocalStorage.mjs.map} +1 -1
- package/dist/hooks/useOutsideClick.js +28 -4
- package/dist/hooks/useOutsideClick.js.map +1 -1
- package/dist/hooks/useOutsideClick.mjs +23 -0
- package/dist/hooks/{useOutsideClick.cjs.map → useOutsideClick.mjs.map} +1 -1
- package/dist/hooks/useSaveDelay.js +30 -6
- package/dist/hooks/useSaveDelay.js.map +1 -1
- package/dist/hooks/useSaveDelay.mjs +43 -0
- package/dist/hooks/{useSaveDelay.cjs.map → useSaveDelay.mjs.map} +1 -1
- package/dist/{index.d.cts → index.d.mts} +78 -78
- package/dist/index.js +1038 -885
- package/dist/index.js.map +1 -1
- package/dist/{index.cjs → index.mjs} +886 -1038
- package/dist/index.mjs.map +1 -0
- package/dist/localization/{LanguageProvider.d.cts → LanguageProvider.d.mts} +1 -1
- package/dist/localization/LanguageProvider.js +43 -16
- package/dist/localization/LanguageProvider.js.map +1 -1
- package/dist/localization/{LanguageProvider.cjs → LanguageProvider.mjs} +17 -45
- package/dist/localization/LanguageProvider.mjs.map +1 -0
- package/dist/localization/{useTranslation.d.cts → useTranslation.d.mts} +1 -1
- package/dist/localization/useTranslation.js +33 -7
- package/dist/localization/useTranslation.js.map +1 -1
- package/dist/localization/useTranslation.mjs +42 -0
- package/dist/localization/useTranslation.mjs.map +1 -0
- package/dist/localization/util.js +26 -2
- package/dist/localization/util.js.map +1 -1
- package/dist/localization/util.mjs +16 -0
- package/dist/localization/{util.cjs.map → util.mjs.map} +1 -1
- package/dist/theming/{useTheme.d.cts → useTheme.d.mts} +2 -2
- package/dist/theming/useTheme.js +37 -10
- package/dist/theming/useTheme.js.map +1 -1
- package/dist/theming/useTheme.mjs +48 -0
- package/dist/theming/useTheme.mjs.map +1 -0
- package/dist/util/array.js +32 -2
- package/dist/util/array.js.map +1 -1
- package/dist/util/{array.cjs → array.mjs} +3 -34
- package/dist/util/{array.cjs.map → array.mjs.map} +1 -1
- package/dist/util/builder.js +26 -2
- package/dist/util/builder.js.map +1 -1
- package/dist/util/builder.mjs +9 -0
- package/dist/util/{builder.cjs.map → builder.mjs.map} +1 -1
- package/dist/util/date.js +39 -2
- package/dist/util/date.js.map +1 -1
- package/dist/util/{date.cjs → date.mjs} +3 -41
- package/dist/util/date.mjs.map +1 -0
- package/dist/util/easeFunctions.js +28 -2
- package/dist/util/easeFunctions.js.map +1 -1
- package/dist/util/easeFunctions.mjs +36 -0
- package/dist/util/easeFunctions.mjs.map +1 -0
- package/dist/util/emailValidation.js +26 -2
- package/dist/util/emailValidation.js.map +1 -1
- package/dist/util/emailValidation.mjs +8 -0
- package/dist/util/{emailValidation.cjs.map → emailValidation.mjs.map} +1 -1
- package/dist/util/loopingArray.js +26 -2
- package/dist/util/loopingArray.js.map +1 -1
- package/dist/util/{loopingArray.cjs → loopingArray.mjs} +3 -28
- package/dist/util/{loopingArray.cjs.map → loopingArray.mjs.map} +1 -1
- package/dist/util/math.js +26 -2
- package/dist/util/math.js.map +1 -1
- package/dist/util/math.mjs +8 -0
- package/dist/util/{math.cjs.map → math.mjs.map} +1 -1
- package/dist/util/news.d.mts +101 -0
- package/dist/util/news.d.ts +54 -54
- package/dist/util/news.js +39 -12
- package/dist/util/news.js.map +1 -1
- package/dist/util/news.mjs +49 -0
- package/dist/util/news.mjs.map +1 -0
- package/dist/util/noop.d.mts +3 -0
- package/dist/util/noop.d.ts +1 -1
- package/dist/util/noop.js +26 -2
- package/dist/util/noop.js.map +1 -1
- package/dist/util/noop.mjs +6 -0
- package/dist/util/noop.mjs.map +1 -0
- package/dist/util/simpleSearch.js +29 -2
- package/dist/util/simpleSearch.js.map +1 -1
- package/dist/util/simpleSearch.mjs +26 -0
- package/dist/util/{simpleSearch.cjs.map → simpleSearch.mjs.map} +1 -1
- package/dist/util/storage.js +27 -2
- package/dist/util/storage.js.map +1 -1
- package/dist/util/storage.mjs +38 -0
- package/dist/util/{storage.cjs.map → storage.mjs.map} +1 -1
- package/dist/util/types.js +17 -0
- package/dist/util/types.js.map +1 -1
- package/dist/util/types.mjs +1 -0
- package/dist/util/types.mjs.map +1 -0
- package/package.json +5 -7
- package/dist/coloring/shading.cjs +0 -3402
- package/dist/coloring/shading.cjs.map +0 -1
- package/dist/coloring/types.cjs +0 -31
- package/dist/components/branding/HelpwaveBadge.cjs +0 -157
- package/dist/components/branding/HelpwaveBadge.cjs.map +0 -1
- package/dist/components/date/DatePicker.cjs.map +0 -1
- package/dist/components/date/DayPicker.cjs.map +0 -1
- package/dist/components/date/TimeDisplay.cjs.map +0 -1
- package/dist/components/date/TimePicker.cjs.map +0 -1
- package/dist/components/date/YearMonthPicker.cjs.map +0 -1
- package/dist/components/dialogs/ConfirmDialog.cjs.map +0 -1
- package/dist/components/icons-and-geometry/Avatar.cjs +0 -119
- package/dist/components/icons-and-geometry/Circle.cjs +0 -62
- package/dist/components/icons-and-geometry/Helpwave.cjs +0 -100
- package/dist/components/icons-and-geometry/Tag.cjs +0 -47
- package/dist/components/layout-and-navigation/Chip.cjs +0 -105
- package/dist/components/layout-and-navigation/DividerInserter.cjs +0 -60
- package/dist/components/layout-and-navigation/Expandable.cjs +0 -117
- package/dist/components/layout-and-navigation/Expandable.cjs.map +0 -1
- package/dist/components/layout-and-navigation/FAQSection.cjs.map +0 -1
- package/dist/components/layout-and-navigation/Overlay.cjs.map +0 -1
- package/dist/components/layout-and-navigation/Pagination.cjs +0 -117
- package/dist/components/layout-and-navigation/Pagination.cjs.map +0 -1
- package/dist/components/layout-and-navigation/SearchableList.cjs +0 -287
- package/dist/components/layout-and-navigation/SearchableList.cjs.map +0 -1
- package/dist/components/layout-and-navigation/StepperBar.cjs.map +0 -1
- package/dist/components/layout-and-navigation/Table.cjs.map +0 -1
- package/dist/components/layout-and-navigation/TextImage.cjs +0 -138
- package/dist/components/layout-and-navigation/TextImage.cjs.map +0 -1
- package/dist/components/layout-and-navigation/Tile.cjs +0 -58
- package/dist/components/layout-and-navigation/VerticalDivider.cjs +0 -81
- package/dist/components/loading-states/ErrorComponent.cjs +0 -103
- package/dist/components/loading-states/ErrorComponent.cjs.map +0 -1
- package/dist/components/loading-states/LoadingAndErrorComponent.cjs +0 -229
- package/dist/components/loading-states/LoadingAndErrorComponent.cjs.map +0 -1
- package/dist/components/loading-states/LoadingAnimation.cjs +0 -176
- package/dist/components/loading-states/LoadingAnimation.cjs.map +0 -1
- package/dist/components/loading-states/LoadingButton.cjs.map +0 -1
- package/dist/components/loading-states/ProgressIndicator.cjs +0 -84
- package/dist/components/modals/ConfirmModal.cjs.map +0 -1
- package/dist/components/modals/DiscardChangesModal.cjs.map +0 -1
- package/dist/components/modals/InputModal.cjs.map +0 -1
- package/dist/components/modals/LanguageModal.cjs.map +0 -1
- package/dist/components/modals/ThemeModal.cjs.map +0 -1
- package/dist/components/properties/CheckboxProperty.cjs.map +0 -1
- package/dist/components/properties/DateProperty.cjs.map +0 -1
- package/dist/components/properties/MultiSelectProperty.cjs.map +0 -1
- package/dist/components/properties/NumberProperty.cjs.map +0 -1
- package/dist/components/properties/PropertyBase.cjs +0 -223
- package/dist/components/properties/PropertyBase.cjs.map +0 -1
- package/dist/components/properties/SelectProperty.cjs.map +0 -1
- package/dist/components/properties/TextProperty.cjs.map +0 -1
- package/dist/components/user-action/Checkbox.cjs +0 -158
- package/dist/components/user-action/Checkbox.cjs.map +0 -1
- package/dist/components/user-action/DateAndTimePicker.cjs.map +0 -1
- package/dist/components/user-action/Input.cjs +0 -223
- package/dist/components/user-action/Input.cjs.map +0 -1
- package/dist/components/user-action/Label.cjs +0 -56
- package/dist/components/user-action/Menu.cjs +0 -163
- package/dist/components/user-action/Menu.cjs.map +0 -1
- package/dist/components/user-action/MultiSelect.cjs.map +0 -1
- package/dist/components/user-action/ScrollPicker.cjs.map +0 -1
- package/dist/components/user-action/Select.cjs.map +0 -1
- package/dist/components/user-action/Textarea.cjs +0 -199
- package/dist/components/user-action/Textarea.cjs.map +0 -1
- package/dist/components/user-action/ToggleableInput.cjs +0 -192
- package/dist/components/user-action/ToggleableInput.cjs.map +0 -1
- package/dist/components/user-action/Tooltip.cjs.map +0 -1
- package/dist/hooks/useHoverState.cjs +0 -72
- package/dist/hooks/useLocalStorage.cjs +0 -83
- package/dist/hooks/useOutsideClick.cjs +0 -48
- package/dist/hooks/useSaveDelay.cjs +0 -68
- package/dist/index.cjs.map +0 -1
- package/dist/localization/LanguageProvider.cjs.map +0 -1
- package/dist/localization/useTranslation.cjs +0 -69
- package/dist/localization/useTranslation.cjs.map +0 -1
- package/dist/localization/util.cjs +0 -41
- package/dist/theming/useTheme.cjs +0 -76
- package/dist/theming/useTheme.cjs.map +0 -1
- package/dist/util/builder.cjs +0 -34
- package/dist/util/date.cjs.map +0 -1
- package/dist/util/easeFunctions.cjs +0 -63
- package/dist/util/easeFunctions.cjs.map +0 -1
- package/dist/util/emailValidation.cjs +0 -33
- package/dist/util/math.cjs +0 -33
- package/dist/util/news.cjs +0 -77
- package/dist/util/news.cjs.map +0 -1
- package/dist/util/news.d.cts +0 -101
- package/dist/util/noop.cjs +0 -31
- package/dist/util/noop.cjs.map +0 -1
- package/dist/util/noop.d.cts +0 -3
- package/dist/util/simpleSearch.cjs +0 -54
- package/dist/util/storage.cjs +0 -64
- package/dist/util/types.cjs +0 -19
- package/dist/util/types.cjs.map +0 -1
- /package/dist/coloring/{types.d.cts → types.d.mts} +0 -0
- /package/dist/components/branding/{HelpwaveBadge.d.cts → HelpwaveBadge.d.mts} +0 -0
- /package/dist/components/date/{TimePicker.d.cts → TimePicker.d.mts} +0 -0
- /package/dist/components/icons-and-geometry/{Avatar.d.cts → Avatar.d.mts} +0 -0
- /package/dist/components/icons-and-geometry/{Circle.d.cts → Circle.d.mts} +0 -0
- /package/dist/components/icons-and-geometry/{Helpwave.d.cts → Helpwave.d.mts} +0 -0
- /package/dist/components/icons-and-geometry/{Ring.d.cts → Ring.d.mts} +0 -0
- /package/dist/components/icons-and-geometry/{Tag.d.cts → Tag.d.mts} +0 -0
- /package/dist/components/layout-and-navigation/{BreadCrumb.d.cts → BreadCrumb.d.mts} +0 -0
- /package/dist/components/layout-and-navigation/{Carousel.d.cts → Carousel.d.mts} +0 -0
- /package/dist/components/layout-and-navigation/{Chip.d.cts → Chip.d.mts} +0 -0
- /package/dist/components/layout-and-navigation/{DividerInserter.d.cts → DividerInserter.d.mts} +0 -0
- /package/dist/components/layout-and-navigation/{Expandable.d.cts → Expandable.d.mts} +0 -0
- /package/dist/components/layout-and-navigation/{Tile.d.cts → Tile.d.mts} +0 -0
- /package/dist/components/layout-and-navigation/{VerticalDivider.d.cts → VerticalDivider.d.mts} +0 -0
- /package/dist/components/loading-states/{ProgressIndicator.d.cts → ProgressIndicator.d.mts} +0 -0
- /package/dist/components/user-action/{Button.d.cts → Button.d.mts} +0 -0
- /package/dist/components/user-action/{Label.d.cts → Label.d.mts} +0 -0
- /package/dist/components/user-action/{Menu.d.cts → Menu.d.mts} +0 -0
- /package/dist/components/user-action/{ScrollPicker.d.cts → ScrollPicker.d.mts} +0 -0
- /package/dist/components/user-action/{ToggleableInput.d.cts → ToggleableInput.d.mts} +0 -0
- /package/dist/components/user-action/{Tooltip.d.cts → Tooltip.d.mts} +0 -0
- /package/dist/hooks/{useHoverState.d.cts → useHoverState.d.mts} +0 -0
- /package/dist/hooks/{useLocalStorage.d.cts → useLocalStorage.d.mts} +0 -0
- /package/dist/hooks/{useOutsideClick.d.cts → useOutsideClick.d.mts} +0 -0
- /package/dist/hooks/{useSaveDelay.d.cts → useSaveDelay.d.mts} +0 -0
- /package/dist/localization/{util.d.cts → util.d.mts} +0 -0
- /package/dist/util/{array.d.cts → array.d.mts} +0 -0
- /package/dist/util/{builder.d.cts → builder.d.mts} +0 -0
- /package/dist/util/{date.d.cts → date.d.mts} +0 -0
- /package/dist/util/{easeFunctions.d.cts → easeFunctions.d.mts} +0 -0
- /package/dist/util/{emailValidation.d.cts → emailValidation.d.mts} +0 -0
- /package/dist/util/{loopingArray.d.cts → loopingArray.d.mts} +0 -0
- /package/dist/util/{math.d.cts → math.d.mts} +0 -0
- /package/dist/util/{simpleSearch.d.cts → simpleSearch.d.mts} +0 -0
- /package/dist/util/{storage.d.cts → storage.d.mts} +0 -0
- /package/dist/util/{types.d.cts → types.d.mts} +0 -0
|
@@ -1,6 +1,39 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
1
29
|
// src/components/properties/DateProperty.tsx
|
|
2
|
-
|
|
3
|
-
|
|
30
|
+
var DateProperty_exports = {};
|
|
31
|
+
__export(DateProperty_exports, {
|
|
32
|
+
DateProperty: () => DateProperty
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(DateProperty_exports);
|
|
35
|
+
var import_lucide_react2 = require("lucide-react");
|
|
36
|
+
var import_clsx5 = __toESM(require("clsx"));
|
|
4
37
|
|
|
5
38
|
// src/util/date.ts
|
|
6
39
|
var formatDate = (date) => {
|
|
@@ -20,14 +53,14 @@ var formatDateTime = (date) => {
|
|
|
20
53
|
var noop = () => void 0;
|
|
21
54
|
|
|
22
55
|
// src/components/user-action/Input.tsx
|
|
23
|
-
|
|
24
|
-
|
|
56
|
+
var import_react2 = require("react");
|
|
57
|
+
var import_clsx2 = __toESM(require("clsx"));
|
|
25
58
|
|
|
26
59
|
// src/hooks/useSaveDelay.ts
|
|
27
|
-
|
|
60
|
+
var import_react = require("react");
|
|
28
61
|
function useSaveDelay(setNotificationStatus, delay) {
|
|
29
|
-
const [updateTimer, setUpdateTimer] = useState(void 0);
|
|
30
|
-
const [notificationTimer, setNotificationTimer] = useState(void 0);
|
|
62
|
+
const [updateTimer, setUpdateTimer] = (0, import_react.useState)(void 0);
|
|
63
|
+
const [notificationTimer, setNotificationTimer] = (0, import_react.useState)(void 0);
|
|
31
64
|
const restartTimer = (onSave) => {
|
|
32
65
|
clearTimeout(updateTimer);
|
|
33
66
|
setUpdateTimer(setTimeout(() => {
|
|
@@ -54,7 +87,7 @@ function useSaveDelay(setNotificationStatus, delay) {
|
|
|
54
87
|
setNotificationStatus(false);
|
|
55
88
|
}
|
|
56
89
|
};
|
|
57
|
-
useEffect(() => {
|
|
90
|
+
(0, import_react.useEffect)(() => {
|
|
58
91
|
return () => {
|
|
59
92
|
clearTimeout(updateTimer);
|
|
60
93
|
clearTimeout(notificationTimer);
|
|
@@ -64,8 +97,8 @@ function useSaveDelay(setNotificationStatus, delay) {
|
|
|
64
97
|
}
|
|
65
98
|
|
|
66
99
|
// src/components/user-action/Label.tsx
|
|
67
|
-
|
|
68
|
-
|
|
100
|
+
var import_clsx = __toESM(require("clsx"));
|
|
101
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
69
102
|
var styleMapping = {
|
|
70
103
|
labelSmall: "textstyle-label-sm",
|
|
71
104
|
labelMedium: "textstyle-label-md",
|
|
@@ -78,11 +111,11 @@ var Label = ({
|
|
|
78
111
|
className,
|
|
79
112
|
...props
|
|
80
113
|
}) => {
|
|
81
|
-
return /* @__PURE__ */ jsx("label", { ...props, className:
|
|
114
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { ...props, className: (0, import_clsx.default)(styleMapping[labelType], className), children: children ? children : name });
|
|
82
115
|
};
|
|
83
116
|
|
|
84
117
|
// src/components/user-action/Input.tsx
|
|
85
|
-
|
|
118
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
86
119
|
var Input = ({
|
|
87
120
|
id,
|
|
88
121
|
type = "text",
|
|
@@ -102,15 +135,15 @@ var Input = ({
|
|
|
102
135
|
restartTimer,
|
|
103
136
|
clearUpdateTimer
|
|
104
137
|
} = useSaveDelay(() => void 0, 3e3);
|
|
105
|
-
const ref = useRef(null);
|
|
106
|
-
|
|
138
|
+
const ref = (0, import_react2.useRef)(null);
|
|
139
|
+
(0, import_react2.useEffect)(() => {
|
|
107
140
|
if (autoFocus) {
|
|
108
141
|
ref.current?.focus();
|
|
109
142
|
}
|
|
110
143
|
}, [autoFocus]);
|
|
111
|
-
return /* @__PURE__ */ jsxs("div", { className:
|
|
112
|
-
label && /* @__PURE__ */
|
|
113
|
-
/* @__PURE__ */
|
|
144
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: (0, import_clsx2.default)({ "w-full": expanded }, containerClassName), children: [
|
|
145
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Label, { ...label, htmlFor: id, className: (0, import_clsx2.default)("mb-1", label.className) }),
|
|
146
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
114
147
|
"input",
|
|
115
148
|
{
|
|
116
149
|
ref,
|
|
@@ -143,7 +176,7 @@ var Input = ({
|
|
|
143
176
|
)
|
|
144
177
|
] });
|
|
145
178
|
};
|
|
146
|
-
var FormInput = forwardRef(function FormInput2({
|
|
179
|
+
var FormInput = (0, import_react2.forwardRef)(function FormInput2({
|
|
147
180
|
id,
|
|
148
181
|
labelText,
|
|
149
182
|
errorText,
|
|
@@ -154,13 +187,13 @@ var FormInput = forwardRef(function FormInput2({
|
|
|
154
187
|
required,
|
|
155
188
|
...restProps
|
|
156
189
|
}, ref) {
|
|
157
|
-
const input = /* @__PURE__ */
|
|
190
|
+
const input = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
158
191
|
"input",
|
|
159
192
|
{
|
|
160
193
|
ref,
|
|
161
194
|
id,
|
|
162
195
|
...restProps,
|
|
163
|
-
className:
|
|
196
|
+
className: (0, import_clsx2.default)(
|
|
164
197
|
{
|
|
165
198
|
"focus:border-primary focus:ring-primary": !errorText,
|
|
166
199
|
"focus:border-negative focus:ring-negative text-negative": !!errorText
|
|
@@ -169,23 +202,23 @@ var FormInput = forwardRef(function FormInput2({
|
|
|
169
202
|
)
|
|
170
203
|
}
|
|
171
204
|
);
|
|
172
|
-
return /* @__PURE__ */ jsxs("div", { className:
|
|
173
|
-
labelText && /* @__PURE__ */ jsxs("label", { htmlFor: id, className:
|
|
205
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: (0, import_clsx2.default)("flex flex-col gap-y-1", containerClassName), children: [
|
|
206
|
+
labelText && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("label", { htmlFor: id, className: (0, import_clsx2.default)("textstyle-label-md", labelClassName), children: [
|
|
174
207
|
labelText,
|
|
175
|
-
required && /* @__PURE__ */
|
|
208
|
+
required && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "text-primary font-bold", children: "*" })
|
|
176
209
|
] }),
|
|
177
210
|
input,
|
|
178
|
-
errorText && /* @__PURE__ */
|
|
211
|
+
errorText && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("label", { htmlFor: id, className: (0, import_clsx2.default)("text-negative", errorClassName), children: errorText })
|
|
179
212
|
] });
|
|
180
213
|
});
|
|
181
214
|
|
|
182
215
|
// src/components/properties/PropertyBase.tsx
|
|
183
|
-
|
|
184
|
-
|
|
216
|
+
var import_lucide_react = require("lucide-react");
|
|
217
|
+
var import_clsx4 = __toESM(require("clsx"));
|
|
185
218
|
|
|
186
219
|
// src/components/user-action/Button.tsx
|
|
187
|
-
|
|
188
|
-
|
|
220
|
+
var import_clsx3 = __toESM(require("clsx"));
|
|
221
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
189
222
|
var paddingMapping = {
|
|
190
223
|
small: "btn-sm",
|
|
191
224
|
medium: "btn-md",
|
|
@@ -221,25 +254,25 @@ var TextButton = ({
|
|
|
221
254
|
negative: "text-button-text-negative-icon",
|
|
222
255
|
neutral: "text-button-text-neutral-icon"
|
|
223
256
|
}[color];
|
|
224
|
-
return /* @__PURE__ */
|
|
257
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
225
258
|
"button",
|
|
226
259
|
{
|
|
227
260
|
onClick: disabled ? void 0 : onClick,
|
|
228
261
|
disabled: disabled || onClick === void 0,
|
|
229
|
-
className:
|
|
262
|
+
className: (0, import_clsx3.default)(
|
|
230
263
|
{
|
|
231
264
|
"text-disabled-text cursor-not-allowed": disabled,
|
|
232
|
-
[
|
|
265
|
+
[(0, import_clsx3.default)(colorClasses, "hover:bg-button-text-hover-background rounded-full")]: !disabled
|
|
233
266
|
},
|
|
234
267
|
ButtonUtil.paddingMapping[size],
|
|
235
268
|
className
|
|
236
269
|
),
|
|
237
270
|
...restProps,
|
|
238
271
|
children: [
|
|
239
|
-
startIcon && /* @__PURE__ */
|
|
272
|
+
startIcon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
240
273
|
"span",
|
|
241
274
|
{
|
|
242
|
-
className:
|
|
275
|
+
className: (0, import_clsx3.default)({
|
|
243
276
|
[iconColorClasses]: !disabled,
|
|
244
277
|
[`text-disabled-icon`]: disabled
|
|
245
278
|
}),
|
|
@@ -247,10 +280,10 @@ var TextButton = ({
|
|
|
247
280
|
}
|
|
248
281
|
),
|
|
249
282
|
children,
|
|
250
|
-
endIcon && /* @__PURE__ */
|
|
283
|
+
endIcon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
251
284
|
"span",
|
|
252
285
|
{
|
|
253
|
-
className:
|
|
286
|
+
className: (0, import_clsx3.default)({
|
|
254
287
|
[iconColorClasses]: !disabled,
|
|
255
288
|
[`text-disabled-icon`]: disabled
|
|
256
289
|
}),
|
|
@@ -263,10 +296,10 @@ var TextButton = ({
|
|
|
263
296
|
};
|
|
264
297
|
|
|
265
298
|
// src/localization/LanguageProvider.tsx
|
|
266
|
-
|
|
299
|
+
var import_react4 = require("react");
|
|
267
300
|
|
|
268
301
|
// src/hooks/useLocalStorage.ts
|
|
269
|
-
|
|
302
|
+
var import_react3 = require("react");
|
|
270
303
|
|
|
271
304
|
// src/localization/util.ts
|
|
272
305
|
var languages = ["en", "de"];
|
|
@@ -282,12 +315,12 @@ var LanguageUtil = {
|
|
|
282
315
|
};
|
|
283
316
|
|
|
284
317
|
// src/localization/LanguageProvider.tsx
|
|
285
|
-
|
|
286
|
-
var LanguageContext = createContext({
|
|
318
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
319
|
+
var LanguageContext = (0, import_react4.createContext)({
|
|
287
320
|
language: LanguageUtil.DEFAULT_LANGUAGE,
|
|
288
321
|
setLanguage: (v) => v
|
|
289
322
|
});
|
|
290
|
-
var useLanguage = () => useContext(LanguageContext);
|
|
323
|
+
var useLanguage = () => (0, import_react4.useContext)(LanguageContext);
|
|
291
324
|
|
|
292
325
|
// src/localization/useTranslation.ts
|
|
293
326
|
var useTranslation = (defaults, translationOverwrite = {}) => {
|
|
@@ -302,7 +335,7 @@ var useTranslation = (defaults, translationOverwrite = {}) => {
|
|
|
302
335
|
};
|
|
303
336
|
|
|
304
337
|
// src/components/properties/PropertyBase.tsx
|
|
305
|
-
|
|
338
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
306
339
|
var defaultPropertyBaseTranslation = {
|
|
307
340
|
en: {
|
|
308
341
|
remove: "Remove"
|
|
@@ -324,12 +357,12 @@ var PropertyBase = ({
|
|
|
324
357
|
}) => {
|
|
325
358
|
const translation = useTranslation(defaultPropertyBaseTranslation, overwriteTranslation);
|
|
326
359
|
const requiredAndNoValue = softRequired && !hasValue;
|
|
327
|
-
return /* @__PURE__ */
|
|
328
|
-
/* @__PURE__ */
|
|
360
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: (0, import_clsx4.default)("row gap-x-0 group", className), children: [
|
|
361
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
329
362
|
"div",
|
|
330
363
|
{
|
|
331
|
-
className:
|
|
332
|
-
"bg-
|
|
364
|
+
className: (0, import_clsx4.default)("row gap-x-2 !w-[200px] px-4 py-2 items-center rounded-l-xl border-2 border-r-0", {
|
|
365
|
+
"bg-property-title-background property-title-text group-hover:border-primary": !requiredAndNoValue,
|
|
333
366
|
"bg-warning text-surface-warning group-hover:border-warning border-warning/90": requiredAndNoValue
|
|
334
367
|
}, className),
|
|
335
368
|
children: [
|
|
@@ -338,22 +371,22 @@ var PropertyBase = ({
|
|
|
338
371
|
]
|
|
339
372
|
}
|
|
340
373
|
),
|
|
341
|
-
/* @__PURE__ */
|
|
374
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
342
375
|
"div",
|
|
343
376
|
{
|
|
344
|
-
className:
|
|
345
|
-
"bg-
|
|
377
|
+
className: (0, import_clsx4.default)("row grow justify-between items-center rounded-r-xl border-2 border-l-0", {
|
|
378
|
+
"bg-surface group-hover:border-primary": !requiredAndNoValue,
|
|
346
379
|
"bg-surface-warning group-hover:border-warning border-warning/90": requiredAndNoValue
|
|
347
380
|
}, className),
|
|
348
381
|
children: [
|
|
349
382
|
input({ softRequired, hasValue }),
|
|
350
|
-
requiredAndNoValue && /* @__PURE__ */
|
|
351
|
-
onRemove && /* @__PURE__ */
|
|
383
|
+
requiredAndNoValue && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "text-warning pr-4", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.AlertTriangle, { size: 24 }) }),
|
|
384
|
+
onRemove && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
352
385
|
TextButton,
|
|
353
386
|
{
|
|
354
387
|
onClick: onRemove,
|
|
355
388
|
color: "negative",
|
|
356
|
-
className:
|
|
389
|
+
className: (0, import_clsx4.default)("pr-4 items-center", { "!text-transparent": !hasValue || readOnly }),
|
|
357
390
|
disabled: !hasValue || readOnly,
|
|
358
391
|
children: translation.remove
|
|
359
392
|
}
|
|
@@ -365,7 +398,7 @@ var PropertyBase = ({
|
|
|
365
398
|
};
|
|
366
399
|
|
|
367
400
|
// src/components/properties/DateProperty.tsx
|
|
368
|
-
|
|
401
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
369
402
|
var DateProperty = ({
|
|
370
403
|
value,
|
|
371
404
|
onChange = noop,
|
|
@@ -376,20 +409,20 @@ var DateProperty = ({
|
|
|
376
409
|
}) => {
|
|
377
410
|
const hasValue = !!value;
|
|
378
411
|
const dateText = value ? type === "dateTime" ? formatDateTime(value) : formatDate(value) : "";
|
|
379
|
-
return /* @__PURE__ */
|
|
412
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
380
413
|
PropertyBase,
|
|
381
414
|
{
|
|
382
415
|
...baseProps,
|
|
383
416
|
hasValue,
|
|
384
|
-
icon: /* @__PURE__ */
|
|
385
|
-
input: ({ softRequired }) => /* @__PURE__ */
|
|
417
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.CalendarDays, { size: 16 }),
|
|
418
|
+
input: ({ softRequired }) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
386
419
|
"div",
|
|
387
420
|
{
|
|
388
|
-
className:
|
|
389
|
-
children: /* @__PURE__ */
|
|
421
|
+
className: (0, import_clsx5.default)("row grow py-2 px-4 cursor-pointer", { "text-warning": softRequired && !hasValue }),
|
|
422
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
390
423
|
Input,
|
|
391
424
|
{
|
|
392
|
-
className:
|
|
425
|
+
className: (0, import_clsx5.default)("!ring-0 !border-0 !outline-0 !p-0 !m-0 !shadow-none !w-fit !rounded-none", { "bg-surface-warning": softRequired && !hasValue }),
|
|
393
426
|
value: dateText,
|
|
394
427
|
type: type === "dateTime" ? "datetime-local" : "date",
|
|
395
428
|
readOnly,
|
|
@@ -410,7 +443,8 @@ var DateProperty = ({
|
|
|
410
443
|
}
|
|
411
444
|
);
|
|
412
445
|
};
|
|
413
|
-
export
|
|
446
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
447
|
+
0 && (module.exports = {
|
|
414
448
|
DateProperty
|
|
415
|
-
};
|
|
449
|
+
});
|
|
416
450
|
//# sourceMappingURL=DateProperty.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/properties/DateProperty.tsx","../../../src/util/date.ts","../../../src/util/noop.ts","../../../src/components/user-action/Input.tsx","../../../src/hooks/useSaveDelay.ts","../../../src/components/user-action/Label.tsx","../../../src/components/properties/PropertyBase.tsx","../../../src/components/user-action/Button.tsx","../../../src/localization/LanguageProvider.tsx","../../../src/hooks/useLocalStorage.ts","../../../src/localization/util.ts","../../../src/localization/useTranslation.ts"],"sourcesContent":["import { CalendarDays } from 'lucide-react'\nimport clsx from 'clsx'\nimport { formatDate, formatDateTime } from '@/util/date'\nimport { noop } from '@/util/noop'\nimport { Input } from '../user-action/Input'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\nexport type DatePropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue'> & {\n value?: Date,\n onChange?: (date: Date) => void,\n onEditComplete?: (value: Date) => void,\n type?: 'dateTime' | 'date',\n}\n\n/**\n * An Input for date properties\n */\nexport const DateProperty = ({\n value,\n onChange = noop,\n onEditComplete = noop,\n readOnly,\n type = 'dateTime',\n ...baseProps\n }: DatePropertyProps) => {\n const hasValue = !!value\n\n const dateText = value ? (type === 'dateTime' ? formatDateTime(value) : formatDate(value)) : ''\n return (\n <PropertyBase\n {...baseProps}\n hasValue={hasValue}\n icon={<CalendarDays size={16}/>}\n input={({ softRequired }) => (\n <div\n className={clsx('row grow py-2 px-4 cursor-pointer', { 'text-warning': softRequired && !hasValue })}\n >\n <Input\n className={clsx('!ring-0 !border-0 !outline-0 !p-0 !m-0 !shadow-none !w-fit !rounded-none', { 'bg-surface-warning': softRequired && !hasValue })}\n value={dateText}\n type={type === 'dateTime' ? 'datetime-local' : 'date'}\n readOnly={readOnly}\n onChange={(event) => {\n const value = event.target.value\n if (!value) {\n event.preventDefault()\n return\n }\n const dueDate = new Date(value)\n onChange(dueDate)\n }}\n onEditCompleted={(value) => onEditComplete(new Date(value))}\n />\n </div>\n )}\n />\n )\n}\n","import { equalSizeGroups } from './array'\n\nexport const monthsList = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'] as const\nexport type Month = typeof monthsList[number]\n\nexport const weekDayList = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] as const\nexport type WeekDay = typeof weekDayList[number]\n\nexport const formatDate = (date: Date) => {\n const year = date.getFullYear().toString().padStart(4, '0')\n const month = (date.getMonth() + 1).toString().padStart(2, '0')\n const day = (date.getDate()).toString().padStart(2, '0')\n return `${year}-${month}-${day}`\n}\n\nexport const formatDateTime = (date: Date) => {\n const dateString = formatDate(date)\n const hours = date.getHours().toString().padStart(2, '0')\n const minutes = date.getMinutes().toString().padStart(2, '0')\n return `${dateString}T${hours}:${minutes}`\n}\n\nexport const getDaysInMonth = (year: number, month: number): number => {\n const lastDayOfMonth = new Date(year, month + 1, 0)\n return lastDayOfMonth.getDate()\n}\n\nexport type Duration = {\n years?: number,\n months?: number,\n days?: number,\n hours?: number,\n minutes?: number,\n seconds?: number,\n milliseconds?: number,\n}\n\nexport const changeDuration = (date: Date, duration: Duration, isAdding?: boolean): Date => {\n const {\n years = 0,\n months = 0,\n days = 0,\n hours = 0,\n minutes = 0,\n seconds = 0,\n milliseconds = 0,\n } = duration\n\n // Check ranges\n if (years < 0) {\n console.error(`Range error years must be greater than 0: received ${years}`)\n return new Date(date)\n }\n if (months < 0 || months > 11) {\n console.error(`Range error month must be 0 <= month <= 11: received ${months}`)\n return new Date(date)\n }\n if (days < 0) {\n console.error(`Range error days must be greater than 0: received ${days}`)\n return new Date(date)\n }\n if (hours < 0 || hours > 23) {\n console.error(`Range error hours must be 0 <= hours <= 23: received ${hours}`)\n return new Date(date)\n }\n if (minutes < 0 || minutes > 59) {\n console.error(`Range error minutes must be 0 <= minutes <= 59: received ${minutes}`)\n return new Date(date)\n }\n if (seconds < 0 || seconds > 59) {\n console.error(`Range error seconds must be 0 <= seconds <= 59: received ${seconds}`)\n return new Date(date)\n }\n if (milliseconds < 0) {\n console.error(`Range error seconds must be greater than 0: received ${milliseconds}`)\n return new Date(date)\n }\n\n const multiplier = isAdding ? 1 : -1\n\n const newDate = new Date(date)\n\n newDate.setFullYear(newDate.getFullYear() + multiplier * years)\n\n newDate.setMonth(newDate.getMonth() + multiplier * months)\n\n newDate.setDate(newDate.getDate() + multiplier * days)\n\n newDate.setHours(newDate.getHours() + multiplier * hours)\n\n newDate.setMinutes(newDate.getMinutes() + multiplier * minutes)\n\n newDate.setSeconds(newDate.getSeconds() + multiplier * seconds)\n\n newDate.setMilliseconds(newDate.getMilliseconds() + multiplier * milliseconds)\n\n return newDate\n}\n\nexport const addDuration = (date: Date, duration: Duration): Date => {\n return changeDuration(date, duration, true)\n}\n\nexport const subtractDuration = (date: Date, duration: Duration): Date => {\n return changeDuration(date, duration, false)\n}\n\nexport const getBetweenDuration = (startDate: Date, endDate: Date): Duration => {\n const durationInMilliseconds = endDate.getTime() - startDate.getTime()\n\n const millisecondsInSecond = 1000\n const millisecondsInMinute = 60 * millisecondsInSecond\n const millisecondsInHour = 60 * millisecondsInMinute\n const millisecondsInDay = 24 * millisecondsInHour\n const millisecondsInMonth = 30 * millisecondsInDay // Rough estimation, can be adjusted\n\n const years = Math.floor(durationInMilliseconds / (365.25 * millisecondsInDay))\n const months = Math.floor(durationInMilliseconds / millisecondsInMonth)\n const days = Math.floor(durationInMilliseconds / millisecondsInDay)\n const hours = Math.floor((durationInMilliseconds % millisecondsInDay) / millisecondsInHour)\n const seconds = Math.floor((durationInMilliseconds % millisecondsInHour) / millisecondsInSecond)\n const milliseconds = durationInMilliseconds % millisecondsInSecond\n\n return {\n years,\n months,\n days,\n hours,\n seconds,\n milliseconds,\n }\n}\n\n/** Checks if a given date is in the range of two dates\n *\n * An undefined value for startDate or endDate means no bound for the start or end respectively\n */\nexport const isInTimeSpan = (value: Date, startDate?: Date, endDate?: Date): boolean => {\n if (startDate && endDate) {\n console.assert(startDate <= endDate)\n return startDate <= value && value <= endDate\n } else if (startDate) {\n return startDate <= value\n } else if (endDate) {\n return endDate >= value\n } else {\n return true\n }\n}\n\n/** Compare two dates on the year, month, day */\nexport const equalDate = (date1: Date, date2: Date) => {\n return date1.getFullYear() === date2.getFullYear()\n && date1.getMonth() === date2.getMonth()\n && date1.getDate() === date2.getDate()\n}\n\nexport const getWeeksForCalenderMonth = (date: Date, weekStart: WeekDay, weeks: number = 6) => {\n const month = date.getMonth()\n const year = date.getFullYear()\n\n const dayList: Date[] = []\n let currentDate = new Date(year, month, 1) // Start of month\n const weekStartIndex = weekDayList.indexOf(weekStart)\n\n // Move the current day to the week before\n while (currentDate.getDay() !== weekStartIndex) {\n currentDate = subtractDuration(currentDate, { days: 1 })\n }\n\n while (dayList.length < 7 * weeks) {\n const date = new Date(currentDate)\n date.setHours(date.getHours(), date.getMinutes()) // To make sure we are not overwriting the time\n dayList.push(date)\n currentDate = addDuration(currentDate, { days: 1 })\n }\n\n // weeks\n return equalSizeGroups(dayList, 7)\n}\n","export const noop = () => undefined\n","import React, { forwardRef, type InputHTMLAttributes, useEffect, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport { useSaveDelay } from '@/hooks/useSaveDelay'\nimport { noop } from '@/util/noop'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\n\nexport type InputProps = {\n /**\n * used for the label's `for` attribute\n */\n label?: Omit<LabelProps, 'id'>,\n /**\n * Callback for when the input's value changes\n * This is pretty much required but made optional for the rare cases where it actually isn't need such as when used with disabled\n * That could be enforced through a union type but that seems a bit overkill\n * @default noop\n */\n onChangeText?: (text: string) => void,\n className?: string,\n onEditCompleted?: (text: string) => void,\n expanded?: boolean,\n containerClassName?: string,\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'label'>\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed must be managed by the parent\n */\nconst Input = ({\n id,\n type = 'text',\n value,\n label,\n onChange = noop,\n onChangeText = noop,\n onEditCompleted,\n className = '',\n expanded = true,\n autoFocus,\n onBlur,\n containerClassName,\n ...restProps\n }: InputProps) => {\n const {\n restartTimer,\n clearUpdateTimer\n } = useSaveDelay(() => undefined, 3000)\n const ref = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if(autoFocus) {\n ref.current?.focus()\n }\n }, [autoFocus])\n\n return (\n <div className={clsx({ 'w-full': expanded }, containerClassName)}>\n {label && <Label {...label} htmlFor={id} className={clsx('mb-1', label.className)}/>}\n <input\n ref={ref}\n value={value}\n id={id}\n type={type}\n className={className}\n onBlur={event => {\n if (onBlur) {\n onBlur(event)\n }\n if (onEditCompleted) {\n onEditCompleted(event.target.value)\n clearUpdateTimer()\n }\n }}\n onChange={e => {\n const value = e.target.value\n if (onEditCompleted) {\n restartTimer(() => {\n onEditCompleted(value)\n clearUpdateTimer()\n })\n }\n onChange(e)\n onChangeText(value)\n }}\n {...restProps}\n />\n </div>\n )\n}\n\ntype InputUncontrolledProps = Omit<InputProps, 'value'> & {\n /**\n * @default ''\n */\n defaultValue?: string,\n}\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed by the component itself\n */\nconst InputUncontrolled = ({\n defaultValue = '',\n onChangeText = noop,\n ...props\n }: InputUncontrolledProps) => {\n const [value, setValue] = useState(defaultValue)\n\n return (\n <Input\n {...props}\n value={value}\n onChangeText={text => {\n setValue(text)\n onChangeText(text)\n }}\n />\n )\n}\n\nexport type FormInputProps = InputHTMLAttributes<HTMLInputElement> & {\n id: string,\n labelText?: string,\n errorText?: string,\n labelClassName?: string,\n errorClassName?: string,\n containerClassName?: string,\n}\n\nconst FormInput = forwardRef<HTMLInputElement, FormInputProps>(function FormInput({\n id,\n labelText,\n errorText,\n className,\n labelClassName,\n errorClassName,\n containerClassName,\n required,\n ...restProps\n }, ref) {\n const input = (\n <input\n ref={ref}\n id={id}\n {...restProps}\n className={clsx(\n {\n 'focus:border-primary focus:ring-primary': !errorText,\n 'focus:border-negative focus:ring-negative text-negative': !!errorText,\n },\n className\n )}\n />\n )\n\n return (\n <div className={clsx('flex flex-col gap-y-1', containerClassName)}>\n {labelText && (\n <label htmlFor={id} className={clsx('textstyle-label-md', labelClassName)}>\n {labelText}\n {required && <span className=\"text-primary font-bold\">*</span>}\n </label>\n )}\n {input}\n {errorText && <label htmlFor={id} className={clsx('text-negative', errorClassName)}>{errorText}</label>}\n </div>\n )\n})\n\nexport {\n InputUncontrolled,\n Input,\n FormInput\n}\n","import { useEffect, useState } from 'react'\n\nexport function useSaveDelay(setNotificationStatus: (isShowing: boolean) => void, delay: number) {\n const [updateTimer, setUpdateTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n const [notificationTimer, setNotificationTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n\n const restartTimer = (onSave: () => void) => {\n clearTimeout(updateTimer)\n setUpdateTimer(setTimeout(() => {\n onSave()\n setNotificationStatus(true)\n // Show Saved Notification for fade animation duration\n clearTimeout(notificationTimer)\n setNotificationTimer(setTimeout(() => {\n setNotificationStatus(false)\n clearTimeout(notificationTimer)\n }, delay))\n clearTimeout(updateTimer)\n }, delay))\n }\n\n const clearUpdateTimer = (hasSaved = true) => {\n clearTimeout(updateTimer)\n if (hasSaved) {\n setNotificationStatus(true)\n clearTimeout(notificationTimer)\n setNotificationTimer(setTimeout(() => {\n setNotificationStatus(false)\n clearTimeout(notificationTimer)\n }, delay))\n } else {\n setNotificationStatus(false)\n }\n }\n\n useEffect(() => {\n return () => {\n clearTimeout(updateTimer)\n clearTimeout(notificationTimer)\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return { restartTimer, clearUpdateTimer }\n}","import type { LabelHTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\nexport type LabelType = 'labelSmall' | 'labelMedium' | 'labelBig'\n\nconst styleMapping: Record<LabelType, string> = {\n labelSmall: 'textstyle-label-sm',\n labelMedium: 'textstyle-label-md',\n labelBig: 'textstyle-label-lg',\n}\n\nexport type LabelProps = {\n /** The text for the label */\n name?: string,\n /** The styling for the label */\n labelType?: LabelType,\n} & LabelHTMLAttributes<HTMLLabelElement>\n\n/**\n * A Label component\n */\nexport const Label = ({\n children,\n name,\n labelType = 'labelSmall',\n className,\n ...props\n }: LabelProps) => {\n return (\n <label {...props} className={clsx(styleMapping[labelType], className)}>\n {children ? children : name}\n </label>\n )\n}\n","import type { ReactNode } from 'react'\nimport { AlertTriangle } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { Language } from '../../localization/util'\nimport { TextButton } from '../user-action/Button'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\n\ntype PropertyBaseTranslation = {\n remove: string,\n}\n\nconst defaultPropertyBaseTranslation: Record<Language, PropertyBaseTranslation> = {\n en: {\n remove: 'Remove'\n },\n de: {\n remove: 'Entfernen'\n }\n}\n\nexport type PropertyBaseProps = {\n name: string,\n input: (props: { softRequired: boolean, hasValue: boolean }) => ReactNode,\n onRemove?: () => void,\n hasValue: boolean,\n softRequired?: boolean,\n readOnly?: boolean,\n icon?: ReactNode,\n className?: string,\n}\n\n/**\n * A component for showing a properties with uniform styling\n */\nexport const PropertyBase = ({\n overwriteTranslation,\n name,\n input,\n softRequired = false,\n hasValue,\n icon,\n readOnly,\n onRemove,\n className = '',\n }: PropsForTranslation<PropertyBaseTranslation, PropertyBaseProps>) => {\n const translation = useTranslation(defaultPropertyBaseTranslation, overwriteTranslation)\n const requiredAndNoValue = softRequired && !hasValue\n return (\n <div className={clsx('row gap-x-0 group', className)}>\n <div\n className={\n clsx('row gap-x-2 !w-[200px] px-4 py-2 items-center rounded-l-xl border-2 border-r-0', {\n 'bg-gray-100 text-black group-hover:border-primary border-gray-400': !requiredAndNoValue,\n 'bg-warning text-surface-warning group-hover:border-warning border-warning/90': requiredAndNoValue,\n }, className)}\n >\n {icon}\n {name}\n </div>\n <div className={\n clsx('row grow justify-between items-center rounded-r-xl border-2 border-l-0', {\n 'bg-white group-hover:border-primary border-gray-400': !requiredAndNoValue,\n 'bg-surface-warning group-hover:border-warning border-warning/90': requiredAndNoValue,\n }, className)}\n >\n {input({ softRequired, hasValue })}\n {requiredAndNoValue && (\n <div className=\"text-warning pr-4\"><AlertTriangle size={24}/></div>\n )}\n {onRemove && (\n <TextButton\n onClick={onRemove}\n color=\"negative\"\n className={clsx('pr-4 items-center', { '!text-transparent': !hasValue || readOnly })}\n disabled={!hasValue || readOnly}\n >\n {translation.remove}\n </TextButton>\n )}\n </div>\n </div>\n )\n}\n","import type { ButtonHTMLAttributes, PropsWithChildren, ReactNode } from 'react'\nimport clsx from 'clsx'\n\n\nexport const ButtonColorUtil = {\n solid: ['primary', 'secondary', 'tertiary', 'positive', 'warning', 'negative', 'neutral'] as const,\n text: ['primary', 'negative', 'neutral'] as const,\n outline: ['primary'] as const,\n}\n\n\n/**\n * The allowed colors for the SolidButton and IconButton\n */\nexport type SolidButtonColor = typeof ButtonColorUtil.solid[number]\n/**\n * The allowed colors for the OutlineButton\n */\nexport type OutlineButtonColor = typeof ButtonColorUtil.outline[number]\n/**\n * The allowed colors for the TextButton\n */\nexport type TextButtonColor = typeof ButtonColorUtil.text[number]\n\n/**\n * The different sizes for a button\n */\ntype ButtonSizes = 'small' | 'medium' | 'large'\n\n/**\n * The shard properties between all button types\n */\nexport type ButtonProps = PropsWithChildren<{\n /**\n * @default 'medium'\n */\n size?: ButtonSizes,\n}> & ButtonHTMLAttributes<Element>\n\nconst paddingMapping: Record<ButtonSizes, string> = {\n small: 'btn-sm',\n medium: 'btn-md',\n large: 'btn-lg'\n}\n\nconst iconPaddingMapping: Record<ButtonSizes, string> = {\n small: 'icon-btn-sm',\n medium: 'icon-btn-md',\n large: 'icon-btn-lg'\n}\n\nexport const ButtonUtil = {\n paddingMapping,\n iconPaddingMapping\n}\n\ntype ButtonWithIconsProps = ButtonProps & {\n startIcon?: ReactNode,\n endIcon?: ReactNode,\n}\n\nexport type SolidButtonProps = ButtonWithIconsProps & {\n color?: SolidButtonColor,\n}\n\nexport type OutlineButtonProps = ButtonWithIconsProps & {\n color?: OutlineButtonColor,\n}\n\nexport type TextButtonProps = ButtonWithIconsProps & {\n color?: TextButtonColor,\n}\n\nexport type IconButtonProps = ButtonProps & {\n color?: SolidButtonColor,\n}\n\n/**\n * A button with a solid background and different sizes\n */\nconst SolidButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: SolidButtonProps) => {\n const colorClasses = {\n primary: 'bg-button-solid-primary-background text-button-solid-primary-text',\n secondary: 'bg-button-solid-secondary-background text-button-solid-secondary-text',\n tertiary: 'bg-button-solid-tertiary-background text-button-solid-tertiary-text',\n positive: 'bg-button-solid-positive-background text-button-solid-positive-text',\n warning: 'bg-button-solid-warning-background text-button-solid-warning-text',\n negative: 'bg-button-solid-negative-background text-button-solid-negative-text',\n neutral: 'bg-button-solid-neutral-background text-button-solid-neutral-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-solid-primary-icon',\n secondary: 'text-button-solid-secondary-icon',\n tertiary: 'text-button-solid-tertiary-icon',\n positive: 'text-button-solid-positive-icon',\n warning: 'text-button-solid-warning-icon',\n negative: 'text-button-solid-negative-icon',\n neutral: 'text-button-solid-neutral-icon',\n }[color]\n\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled || onClick === undefined}\n className={clsx(\n {\n 'text-disabled-text bg-disabled-background cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:brightness-90')]: !disabled\n },\n ButtonUtil.paddingMapping[size],\n className\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n/**\n * A button with an outline border and different sizes\n */\nconst OutlineButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: OutlineButtonProps) => {\n const colorClasses = {\n primary: 'bg-transparent border-2 border-button-outline-primary-text text-button-outline-primary-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-outline-primary-icon',\n }[color]\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled || onClick === undefined}\n className={clsx(\n {\n 'text-disabled-text border-disabled-outline cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:brightness-80')]: !disabled,\n },\n ButtonUtil.paddingMapping[size],\n className\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n/**\n * A text that is a button that can have different sizes\n */\nconst TextButton = ({\n children,\n disabled = false,\n color = 'neutral',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: TextButtonProps) => {\n const colorClasses = {\n primary: 'bg-transparent text-button-text-primary-text',\n negative: 'bg-transparent text-button-text-negative-text',\n neutral: 'bg-transparent text-button-text-neutral-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-text-primary-icon',\n negative: 'text-button-text-negative-icon',\n neutral: 'text-button-text-neutral-icon',\n }[color]\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled || onClick === undefined}\n className={clsx(\n {\n 'text-disabled-text cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:bg-button-text-hover-background rounded-full')]: !disabled,\n },\n ButtonUtil.paddingMapping[size],\n className\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n\n/**\n * A button for icons with a solid background and different sizes\n */\nconst IconButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n onClick,\n className,\n ...restProps\n }: IconButtonProps) => {\n const colorClasses = {\n primary: 'bg-button-solid-primary-background text-button-solid-primary-text',\n secondary: 'bg-button-solid-secondary-background text-button-solid-secondary-text',\n tertiary: 'bg-button-solid-tertiary-background text-button-solid-tertiary-text',\n positive: 'bg-button-solid-positive-background text-button-solid-positive-text',\n warning: 'bg-button-solid-warning-background text-button-solid-warning-text',\n negative: 'bg-button-solid-negative-background text-button-solid-negative-text',\n neutral: 'bg-button-solid-neutral-background text-button-solid-neutral-text',\n }[color]\n\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled || onClick === undefined}\n className={clsx(\n {\n 'text-disabled-text bg-disabled-background cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:brightness-90')]: !disabled\n },\n ButtonUtil.iconPaddingMapping[size],\n className\n )}\n {...restProps}\n >\n {children}\n </button>\n )\n}\n\nexport { SolidButton, OutlineButton, TextButton, IconButton }\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocalStorage } from '@/hooks/useLocalStorage'\nimport type { Language } from './util'\nimport { LanguageUtil } from './util'\n\nexport type LanguageContextValue = {\n language: Language,\n setLanguage: Dispatch<SetStateAction<Language>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({\n language: LanguageUtil.DEFAULT_LANGUAGE,\n setLanguage: (v) => v\n})\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Language) => {\n const { language } = useLanguage()\n const mapping: Record<Language, string> = {\n en: 'en-US',\n de: 'de-DE'\n }\n return mapping[overWriteLanguage ?? language]\n}\n\ntype LanguageProviderProps = {\n initialLanguage?: Language,\n}\n\nexport const LanguageProvider = ({ initialLanguage, children }: PropsWithChildren<LanguageProviderProps>) => {\n const [language, setLanguage] = useState<Language>(initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n const [storedLanguage, setStoredLanguage] = useLocalStorage<Language>('language', initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n\n useEffect(() => {\n if (language !== initialLanguage && initialLanguage) {\n console.warn('LanguageProvider initial state changed: Prefer using languageProvider\\'s setLanguage instead')\n setLanguage(initialLanguage)\n }\n }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // TODO set locale of html tag here as well\n setStoredLanguage(language)\n }, [language, setStoredLanguage])\n\n useEffect(() => {\n if (storedLanguage !== null) {\n setLanguage(storedLanguage)\n return\n }\n\n const LanguageToTestAgainst = Object.values(LanguageUtil.languages)\n\n const matchingBrowserLanguage = window.navigator.languages\n .map(language => LanguageToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n .filter(entry => entry !== undefined)\n\n if (matchingBrowserLanguage.length === 0) return\n\n const firstMatch = matchingBrowserLanguage[0] as Language\n setLanguage(firstMatch)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <LanguageContext.Provider value={{\n language,\n setLanguage\n }}>\n {children}\n </LanguageContext.Provider>\n )\n}","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nexport const useLocalStorage = <T>(key: string, initValue: T): [T, SetValue<T>] => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return initValue\n }\n const storageService = new LocalStorageService()\n const value = storageService.get<T>(key)\n return value || initValue\n }, [initValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(value => {\n const newValue = value instanceof Function ? value(storedValue) : value\n const storageService = new LocalStorageService()\n storageService.set(key, value)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n useEffect(() => {\n setStoredValue(get())\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return [storedValue, setValue]\n}","/**\n * The supported languages\n */\nconst languages = ['en', 'de'] as const\n\n/**\n * The supported languages\n */\nexport type Language = typeof languages[number]\n\n/**\n * The supported languages' names in their respective language\n */\nconst languagesLocalNames: Record<Language, string> = {\n en: 'English',\n de: 'Deutsch',\n}\n\n/**\n * The default language\n */\nconst DEFAULT_LANGUAGE: Language = 'en'\n\n/**\n * A constant definition for holding data regarding languages\n */\nexport const LanguageUtil = {\n languages,\n DEFAULT_LANGUAGE,\n languagesLocalNames,\n}","import { useLanguage } from './LanguageProvider'\nimport type { Language } from './util'\n\nexport type Translation<T> = Record<Language, T>\n\ntype OverwriteTranslationType<Translation extends Record<string, unknown>> = {\n language?: Language,\n translation?: Partial<Record<Language, Partial<Translation>>>,\n}\n\n/**\n * Adds the `language` prop to the component props.\n *\n * @param Translation the type of the translation object\n *\n * @param Props the type of the component props, defaults to `Record<string, never>`,\n * if you don't expect any other props other than `language` and get an\n * error when using your component (because it uses `forwardRef` etc.)\n * you can try out `Record<string, unknown>`, this might resolve your\n * problem as `SomeType & never` is still `never` but `SomeType & unknown`\n * is `SomeType` which means that adding back props (like `ref` etc.)\n * works properly\n */\nexport type PropsForTranslation<\n Translation extends Record<string, unknown>,\n Props = Record<string, never>\n> = Props & {\n overwriteTranslation?: OverwriteTranslationType<Translation>,\n};\n\nexport const useTranslation = <Translation extends Record<string, unknown>>(\n defaults: Record<Language, Translation>,\n translationOverwrite: OverwriteTranslationType<Translation> = {}\n): Translation => {\n const { language: languageProp, translation: overwrite } = translationOverwrite\n const { language: inferredLanguage } = useLanguage()\n const usedLanguage = languageProp ?? inferredLanguage\n let defaultValues: Translation = defaults[usedLanguage]\n if (overwrite && overwrite[usedLanguage]) {\n defaultValues = { ...defaultValues, ...overwrite[usedLanguage] }\n }\n return defaultValues\n}\n"],"mappings":"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","names":["clsx","useEffect","useState","clsx","jsx","useEffect","clsx","value","FormInput","jsx","clsx","clsx","clsx","jsx","jsxs","jsxs","clsx","jsx","useEffect","useState","useEffect","useState","jsx","jsx","jsxs","clsx","jsx","clsx","value"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/properties/DateProperty.tsx","../../../src/util/date.ts","../../../src/util/noop.ts","../../../src/components/user-action/Input.tsx","../../../src/hooks/useSaveDelay.ts","../../../src/components/user-action/Label.tsx","../../../src/components/properties/PropertyBase.tsx","../../../src/components/user-action/Button.tsx","../../../src/localization/LanguageProvider.tsx","../../../src/hooks/useLocalStorage.ts","../../../src/localization/util.ts","../../../src/localization/useTranslation.ts"],"sourcesContent":["import { CalendarDays } from 'lucide-react'\nimport clsx from 'clsx'\nimport { formatDate, formatDateTime } from '../../util/date'\nimport { noop } from '../../util/noop'\nimport { Input } from '../user-action/Input'\nimport type { PropertyBaseProps } from './PropertyBase'\nimport { PropertyBase } from './PropertyBase'\n\nexport type DatePropertyProps = Omit<PropertyBaseProps, 'icon' | 'input' | 'hasValue'> & {\n value?: Date,\n onChange?: (date: Date) => void,\n onEditComplete?: (value: Date) => void,\n type?: 'dateTime' | 'date',\n}\n\n/**\n * An Input for date properties\n */\nexport const DateProperty = ({\n value,\n onChange = noop,\n onEditComplete = noop,\n readOnly,\n type = 'dateTime',\n ...baseProps\n }: DatePropertyProps) => {\n const hasValue = !!value\n\n const dateText = value ? (type === 'dateTime' ? formatDateTime(value) : formatDate(value)) : ''\n return (\n <PropertyBase\n {...baseProps}\n hasValue={hasValue}\n icon={<CalendarDays size={16}/>}\n input={({ softRequired }) => (\n <div\n className={clsx('row grow py-2 px-4 cursor-pointer', { 'text-warning': softRequired && !hasValue })}\n >\n <Input\n className={clsx('!ring-0 !border-0 !outline-0 !p-0 !m-0 !shadow-none !w-fit !rounded-none', { 'bg-surface-warning': softRequired && !hasValue })}\n value={dateText}\n type={type === 'dateTime' ? 'datetime-local' : 'date'}\n readOnly={readOnly}\n onChange={(event) => {\n const value = event.target.value\n if (!value) {\n event.preventDefault()\n return\n }\n const dueDate = new Date(value)\n onChange(dueDate)\n }}\n onEditCompleted={(value) => onEditComplete(new Date(value))}\n />\n </div>\n )}\n />\n )\n}\n","import { equalSizeGroups } from './array'\n\nexport const monthsList = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'] as const\nexport type Month = typeof monthsList[number]\n\nexport const weekDayList = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] as const\nexport type WeekDay = typeof weekDayList[number]\n\nexport const formatDate = (date: Date) => {\n const year = date.getFullYear().toString().padStart(4, '0')\n const month = (date.getMonth() + 1).toString().padStart(2, '0')\n const day = (date.getDate()).toString().padStart(2, '0')\n return `${year}-${month}-${day}`\n}\n\nexport const formatDateTime = (date: Date) => {\n const dateString = formatDate(date)\n const hours = date.getHours().toString().padStart(2, '0')\n const minutes = date.getMinutes().toString().padStart(2, '0')\n return `${dateString}T${hours}:${minutes}`\n}\n\nexport const getDaysInMonth = (year: number, month: number): number => {\n const lastDayOfMonth = new Date(year, month + 1, 0)\n return lastDayOfMonth.getDate()\n}\n\nexport type Duration = {\n years?: number,\n months?: number,\n days?: number,\n hours?: number,\n minutes?: number,\n seconds?: number,\n milliseconds?: number,\n}\n\nexport const changeDuration = (date: Date, duration: Duration, isAdding?: boolean): Date => {\n const {\n years = 0,\n months = 0,\n days = 0,\n hours = 0,\n minutes = 0,\n seconds = 0,\n milliseconds = 0,\n } = duration\n\n // Check ranges\n if (years < 0) {\n console.error(`Range error years must be greater than 0: received ${years}`)\n return new Date(date)\n }\n if (months < 0 || months > 11) {\n console.error(`Range error month must be 0 <= month <= 11: received ${months}`)\n return new Date(date)\n }\n if (days < 0) {\n console.error(`Range error days must be greater than 0: received ${days}`)\n return new Date(date)\n }\n if (hours < 0 || hours > 23) {\n console.error(`Range error hours must be 0 <= hours <= 23: received ${hours}`)\n return new Date(date)\n }\n if (minutes < 0 || minutes > 59) {\n console.error(`Range error minutes must be 0 <= minutes <= 59: received ${minutes}`)\n return new Date(date)\n }\n if (seconds < 0 || seconds > 59) {\n console.error(`Range error seconds must be 0 <= seconds <= 59: received ${seconds}`)\n return new Date(date)\n }\n if (milliseconds < 0) {\n console.error(`Range error seconds must be greater than 0: received ${milliseconds}`)\n return new Date(date)\n }\n\n const multiplier = isAdding ? 1 : -1\n\n const newDate = new Date(date)\n\n newDate.setFullYear(newDate.getFullYear() + multiplier * years)\n\n newDate.setMonth(newDate.getMonth() + multiplier * months)\n\n newDate.setDate(newDate.getDate() + multiplier * days)\n\n newDate.setHours(newDate.getHours() + multiplier * hours)\n\n newDate.setMinutes(newDate.getMinutes() + multiplier * minutes)\n\n newDate.setSeconds(newDate.getSeconds() + multiplier * seconds)\n\n newDate.setMilliseconds(newDate.getMilliseconds() + multiplier * milliseconds)\n\n return newDate\n}\n\nexport const addDuration = (date: Date, duration: Duration): Date => {\n return changeDuration(date, duration, true)\n}\n\nexport const subtractDuration = (date: Date, duration: Duration): Date => {\n return changeDuration(date, duration, false)\n}\n\nexport const getBetweenDuration = (startDate: Date, endDate: Date): Duration => {\n const durationInMilliseconds = endDate.getTime() - startDate.getTime()\n\n const millisecondsInSecond = 1000\n const millisecondsInMinute = 60 * millisecondsInSecond\n const millisecondsInHour = 60 * millisecondsInMinute\n const millisecondsInDay = 24 * millisecondsInHour\n const millisecondsInMonth = 30 * millisecondsInDay // Rough estimation, can be adjusted\n\n const years = Math.floor(durationInMilliseconds / (365.25 * millisecondsInDay))\n const months = Math.floor(durationInMilliseconds / millisecondsInMonth)\n const days = Math.floor(durationInMilliseconds / millisecondsInDay)\n const hours = Math.floor((durationInMilliseconds % millisecondsInDay) / millisecondsInHour)\n const seconds = Math.floor((durationInMilliseconds % millisecondsInHour) / millisecondsInSecond)\n const milliseconds = durationInMilliseconds % millisecondsInSecond\n\n return {\n years,\n months,\n days,\n hours,\n seconds,\n milliseconds,\n }\n}\n\n/** Checks if a given date is in the range of two dates\n *\n * An undefined value for startDate or endDate means no bound for the start or end respectively\n */\nexport const isInTimeSpan = (value: Date, startDate?: Date, endDate?: Date): boolean => {\n if (startDate && endDate) {\n console.assert(startDate <= endDate)\n return startDate <= value && value <= endDate\n } else if (startDate) {\n return startDate <= value\n } else if (endDate) {\n return endDate >= value\n } else {\n return true\n }\n}\n\n/** Compare two dates on the year, month, day */\nexport const equalDate = (date1: Date, date2: Date) => {\n return date1.getFullYear() === date2.getFullYear()\n && date1.getMonth() === date2.getMonth()\n && date1.getDate() === date2.getDate()\n}\n\nexport const getWeeksForCalenderMonth = (date: Date, weekStart: WeekDay, weeks: number = 6) => {\n const month = date.getMonth()\n const year = date.getFullYear()\n\n const dayList: Date[] = []\n let currentDate = new Date(year, month, 1) // Start of month\n const weekStartIndex = weekDayList.indexOf(weekStart)\n\n // Move the current day to the week before\n while (currentDate.getDay() !== weekStartIndex) {\n currentDate = subtractDuration(currentDate, { days: 1 })\n }\n\n while (dayList.length < 7 * weeks) {\n const date = new Date(currentDate)\n date.setHours(date.getHours(), date.getMinutes()) // To make sure we are not overwriting the time\n dayList.push(date)\n currentDate = addDuration(currentDate, { days: 1 })\n }\n\n // weeks\n return equalSizeGroups(dayList, 7)\n}\n","export const noop = () => undefined\n","import React, { forwardRef, type InputHTMLAttributes, useEffect, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport { useSaveDelay } from '../../hooks/useSaveDelay'\nimport { noop } from '../../util/noop'\nimport type { LabelProps } from './Label'\nimport { Label } from './Label'\n\nexport type InputProps = {\n /**\n * used for the label's `for` attribute\n */\n label?: Omit<LabelProps, 'id'>,\n /**\n * Callback for when the input's value changes\n * This is pretty much required but made optional for the rare cases where it actually isn't need such as when used with disabled\n * That could be enforced through a union type but that seems a bit overkill\n * @default noop\n */\n onChangeText?: (text: string) => void,\n className?: string,\n onEditCompleted?: (text: string) => void,\n expanded?: boolean,\n containerClassName?: string,\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'label'>\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed must be managed by the parent\n */\nconst Input = ({\n id,\n type = 'text',\n value,\n label,\n onChange = noop,\n onChangeText = noop,\n onEditCompleted,\n className = '',\n expanded = true,\n autoFocus,\n onBlur,\n containerClassName,\n ...restProps\n }: InputProps) => {\n const {\n restartTimer,\n clearUpdateTimer\n } = useSaveDelay(() => undefined, 3000)\n const ref = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if(autoFocus) {\n ref.current?.focus()\n }\n }, [autoFocus])\n\n return (\n <div className={clsx({ 'w-full': expanded }, containerClassName)}>\n {label && <Label {...label} htmlFor={id} className={clsx('mb-1', label.className)}/>}\n <input\n ref={ref}\n value={value}\n id={id}\n type={type}\n className={className}\n onBlur={event => {\n if (onBlur) {\n onBlur(event)\n }\n if (onEditCompleted) {\n onEditCompleted(event.target.value)\n clearUpdateTimer()\n }\n }}\n onChange={e => {\n const value = e.target.value\n if (onEditCompleted) {\n restartTimer(() => {\n onEditCompleted(value)\n clearUpdateTimer()\n })\n }\n onChange(e)\n onChangeText(value)\n }}\n {...restProps}\n />\n </div>\n )\n}\n\ntype InputUncontrolledProps = Omit<InputProps, 'value'> & {\n /**\n * @default ''\n */\n defaultValue?: string,\n}\n\n/**\n * A Component for inputting text or other information\n *\n * Its state is managed by the component itself\n */\nconst InputUncontrolled = ({\n defaultValue = '',\n onChangeText = noop,\n ...props\n }: InputUncontrolledProps) => {\n const [value, setValue] = useState(defaultValue)\n\n return (\n <Input\n {...props}\n value={value}\n onChangeText={text => {\n setValue(text)\n onChangeText(text)\n }}\n />\n )\n}\n\nexport type FormInputProps = InputHTMLAttributes<HTMLInputElement> & {\n id: string,\n labelText?: string,\n errorText?: string,\n labelClassName?: string,\n errorClassName?: string,\n containerClassName?: string,\n}\n\nconst FormInput = forwardRef<HTMLInputElement, FormInputProps>(function FormInput({\n id,\n labelText,\n errorText,\n className,\n labelClassName,\n errorClassName,\n containerClassName,\n required,\n ...restProps\n }, ref) {\n const input = (\n <input\n ref={ref}\n id={id}\n {...restProps}\n className={clsx(\n {\n 'focus:border-primary focus:ring-primary': !errorText,\n 'focus:border-negative focus:ring-negative text-negative': !!errorText,\n },\n className\n )}\n />\n )\n\n return (\n <div className={clsx('flex flex-col gap-y-1', containerClassName)}>\n {labelText && (\n <label htmlFor={id} className={clsx('textstyle-label-md', labelClassName)}>\n {labelText}\n {required && <span className=\"text-primary font-bold\">*</span>}\n </label>\n )}\n {input}\n {errorText && <label htmlFor={id} className={clsx('text-negative', errorClassName)}>{errorText}</label>}\n </div>\n )\n})\n\nexport {\n InputUncontrolled,\n Input,\n FormInput\n}\n","import { useEffect, useState } from 'react'\n\nexport function useSaveDelay(setNotificationStatus: (isShowing: boolean) => void, delay: number) {\n const [updateTimer, setUpdateTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n const [notificationTimer, setNotificationTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n\n const restartTimer = (onSave: () => void) => {\n clearTimeout(updateTimer)\n setUpdateTimer(setTimeout(() => {\n onSave()\n setNotificationStatus(true)\n // Show Saved Notification for fade animation duration\n clearTimeout(notificationTimer)\n setNotificationTimer(setTimeout(() => {\n setNotificationStatus(false)\n clearTimeout(notificationTimer)\n }, delay))\n clearTimeout(updateTimer)\n }, delay))\n }\n\n const clearUpdateTimer = (hasSaved = true) => {\n clearTimeout(updateTimer)\n if (hasSaved) {\n setNotificationStatus(true)\n clearTimeout(notificationTimer)\n setNotificationTimer(setTimeout(() => {\n setNotificationStatus(false)\n clearTimeout(notificationTimer)\n }, delay))\n } else {\n setNotificationStatus(false)\n }\n }\n\n useEffect(() => {\n return () => {\n clearTimeout(updateTimer)\n clearTimeout(notificationTimer)\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return { restartTimer, clearUpdateTimer }\n}","import type { LabelHTMLAttributes } from 'react'\nimport clsx from 'clsx'\n\nexport type LabelType = 'labelSmall' | 'labelMedium' | 'labelBig'\n\nconst styleMapping: Record<LabelType, string> = {\n labelSmall: 'textstyle-label-sm',\n labelMedium: 'textstyle-label-md',\n labelBig: 'textstyle-label-lg',\n}\n\nexport type LabelProps = {\n /** The text for the label */\n name?: string,\n /** The styling for the label */\n labelType?: LabelType,\n} & LabelHTMLAttributes<HTMLLabelElement>\n\n/**\n * A Label component\n */\nexport const Label = ({\n children,\n name,\n labelType = 'labelSmall',\n className,\n ...props\n }: LabelProps) => {\n return (\n <label {...props} className={clsx(styleMapping[labelType], className)}>\n {children ? children : name}\n </label>\n )\n}\n","import type { ReactNode } from 'react'\nimport { AlertTriangle } from 'lucide-react'\nimport clsx from 'clsx'\nimport type { Language } from '../../localization/util'\nimport { TextButton } from '../user-action/Button'\nimport type { PropsForTranslation } from '../../localization/useTranslation'\nimport { useTranslation } from '../../localization/useTranslation'\n\ntype PropertyBaseTranslation = {\n remove: string,\n}\n\nconst defaultPropertyBaseTranslation: Record<Language, PropertyBaseTranslation> = {\n en: {\n remove: 'Remove'\n },\n de: {\n remove: 'Entfernen'\n }\n}\n\nexport type PropertyBaseProps = {\n name: string,\n input: (props: { softRequired: boolean, hasValue: boolean }) => ReactNode,\n onRemove?: () => void,\n hasValue: boolean,\n softRequired?: boolean,\n readOnly?: boolean,\n icon?: ReactNode,\n className?: string,\n}\n\n/**\n * A component for showing a properties with uniform styling\n */\nexport const PropertyBase = ({\n overwriteTranslation,\n name,\n input,\n softRequired = false,\n hasValue,\n icon,\n readOnly,\n onRemove,\n className = '',\n }: PropsForTranslation<PropertyBaseTranslation, PropertyBaseProps>) => {\n const translation = useTranslation(defaultPropertyBaseTranslation, overwriteTranslation)\n const requiredAndNoValue = softRequired && !hasValue\n return (\n <div className={clsx('row gap-x-0 group', className)}>\n <div\n className={\n clsx('row gap-x-2 !w-[200px] px-4 py-2 items-center rounded-l-xl border-2 border-r-0', {\n 'bg-property-title-background property-title-text group-hover:border-primary': !requiredAndNoValue,\n 'bg-warning text-surface-warning group-hover:border-warning border-warning/90': requiredAndNoValue,\n }, className)}\n >\n {icon}\n {name}\n </div>\n <div className={\n clsx('row grow justify-between items-center rounded-r-xl border-2 border-l-0', {\n 'bg-surface group-hover:border-primary': !requiredAndNoValue,\n 'bg-surface-warning group-hover:border-warning border-warning/90': requiredAndNoValue,\n }, className)}\n >\n {input({ softRequired, hasValue })}\n {requiredAndNoValue && (\n <div className=\"text-warning pr-4\"><AlertTriangle size={24}/></div>\n )}\n {onRemove && (\n <TextButton\n onClick={onRemove}\n color=\"negative\"\n className={clsx('pr-4 items-center', { '!text-transparent': !hasValue || readOnly })}\n disabled={!hasValue || readOnly}\n >\n {translation.remove}\n </TextButton>\n )}\n </div>\n </div>\n )\n}\n","import type { ButtonHTMLAttributes, PropsWithChildren, ReactNode } from 'react'\nimport clsx from 'clsx'\n\n\nexport const ButtonColorUtil = {\n solid: ['primary', 'secondary', 'tertiary', 'positive', 'warning', 'negative', 'neutral'] as const,\n text: ['primary', 'negative', 'neutral'] as const,\n outline: ['primary'] as const,\n}\n\n\n/**\n * The allowed colors for the SolidButton and IconButton\n */\nexport type SolidButtonColor = typeof ButtonColorUtil.solid[number]\n/**\n * The allowed colors for the OutlineButton\n */\nexport type OutlineButtonColor = typeof ButtonColorUtil.outline[number]\n/**\n * The allowed colors for the TextButton\n */\nexport type TextButtonColor = typeof ButtonColorUtil.text[number]\n\n/**\n * The different sizes for a button\n */\ntype ButtonSizes = 'small' | 'medium' | 'large'\n\n/**\n * The shard properties between all button types\n */\nexport type ButtonProps = PropsWithChildren<{\n /**\n * @default 'medium'\n */\n size?: ButtonSizes,\n}> & ButtonHTMLAttributes<Element>\n\nconst paddingMapping: Record<ButtonSizes, string> = {\n small: 'btn-sm',\n medium: 'btn-md',\n large: 'btn-lg'\n}\n\nconst iconPaddingMapping: Record<ButtonSizes, string> = {\n small: 'icon-btn-sm',\n medium: 'icon-btn-md',\n large: 'icon-btn-lg'\n}\n\nexport const ButtonUtil = {\n paddingMapping,\n iconPaddingMapping\n}\n\ntype ButtonWithIconsProps = ButtonProps & {\n startIcon?: ReactNode,\n endIcon?: ReactNode,\n}\n\nexport type SolidButtonProps = ButtonWithIconsProps & {\n color?: SolidButtonColor,\n}\n\nexport type OutlineButtonProps = ButtonWithIconsProps & {\n color?: OutlineButtonColor,\n}\n\nexport type TextButtonProps = ButtonWithIconsProps & {\n color?: TextButtonColor,\n}\n\nexport type IconButtonProps = ButtonProps & {\n color?: SolidButtonColor,\n}\n\n/**\n * A button with a solid background and different sizes\n */\nconst SolidButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: SolidButtonProps) => {\n const colorClasses = {\n primary: 'bg-button-solid-primary-background text-button-solid-primary-text',\n secondary: 'bg-button-solid-secondary-background text-button-solid-secondary-text',\n tertiary: 'bg-button-solid-tertiary-background text-button-solid-tertiary-text',\n positive: 'bg-button-solid-positive-background text-button-solid-positive-text',\n warning: 'bg-button-solid-warning-background text-button-solid-warning-text',\n negative: 'bg-button-solid-negative-background text-button-solid-negative-text',\n neutral: 'bg-button-solid-neutral-background text-button-solid-neutral-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-solid-primary-icon',\n secondary: 'text-button-solid-secondary-icon',\n tertiary: 'text-button-solid-tertiary-icon',\n positive: 'text-button-solid-positive-icon',\n warning: 'text-button-solid-warning-icon',\n negative: 'text-button-solid-negative-icon',\n neutral: 'text-button-solid-neutral-icon',\n }[color]\n\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled || onClick === undefined}\n className={clsx(\n {\n 'text-disabled-text bg-disabled-background cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:brightness-90')]: !disabled\n },\n ButtonUtil.paddingMapping[size],\n className\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n/**\n * A button with an outline border and different sizes\n */\nconst OutlineButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: OutlineButtonProps) => {\n const colorClasses = {\n primary: 'bg-transparent border-2 border-button-outline-primary-text text-button-outline-primary-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-outline-primary-icon',\n }[color]\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled || onClick === undefined}\n className={clsx(\n {\n 'text-disabled-text border-disabled-outline cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:brightness-80')]: !disabled,\n },\n ButtonUtil.paddingMapping[size],\n className\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n/**\n * A text that is a button that can have different sizes\n */\nconst TextButton = ({\n children,\n disabled = false,\n color = 'neutral',\n size = 'medium',\n startIcon,\n endIcon,\n onClick,\n className,\n ...restProps\n }: TextButtonProps) => {\n const colorClasses = {\n primary: 'bg-transparent text-button-text-primary-text',\n negative: 'bg-transparent text-button-text-negative-text',\n neutral: 'bg-transparent text-button-text-neutral-text',\n }[color]\n\n const iconColorClasses = {\n primary: 'text-button-text-primary-icon',\n negative: 'text-button-text-negative-icon',\n neutral: 'text-button-text-neutral-icon',\n }[color]\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled || onClick === undefined}\n className={clsx(\n {\n 'text-disabled-text cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:bg-button-text-hover-background rounded-full')]: !disabled,\n },\n ButtonUtil.paddingMapping[size],\n className\n )}\n {...restProps}\n >\n {startIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n className={clsx({\n [iconColorClasses]: !disabled,\n [`text-disabled-icon`]: disabled\n })}\n >\n {endIcon}\n </span>\n )}\n </button>\n )\n}\n\n\n/**\n * A button for icons with a solid background and different sizes\n */\nconst IconButton = ({\n children,\n disabled = false,\n color = 'primary',\n size = 'medium',\n onClick,\n className,\n ...restProps\n }: IconButtonProps) => {\n const colorClasses = {\n primary: 'bg-button-solid-primary-background text-button-solid-primary-text',\n secondary: 'bg-button-solid-secondary-background text-button-solid-secondary-text',\n tertiary: 'bg-button-solid-tertiary-background text-button-solid-tertiary-text',\n positive: 'bg-button-solid-positive-background text-button-solid-positive-text',\n warning: 'bg-button-solid-warning-background text-button-solid-warning-text',\n negative: 'bg-button-solid-negative-background text-button-solid-negative-text',\n neutral: 'bg-button-solid-neutral-background text-button-solid-neutral-text',\n }[color]\n\n return (\n <button\n onClick={disabled ? undefined : onClick}\n disabled={disabled || onClick === undefined}\n className={clsx(\n {\n 'text-disabled-text bg-disabled-background cursor-not-allowed': disabled,\n [clsx(colorClasses, 'hover:brightness-90')]: !disabled\n },\n ButtonUtil.iconPaddingMapping[size],\n className\n )}\n {...restProps}\n >\n {children}\n </button>\n )\n}\n\nexport { SolidButton, OutlineButton, TextButton, IconButton }\n","import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'\nimport { createContext, useContext, useEffect, useState } from 'react'\nimport { useLocalStorage } from '../hooks/useLocalStorage'\nimport type { Language } from './util'\nimport { LanguageUtil } from './util'\n\nexport type LanguageContextValue = {\n language: Language,\n setLanguage: Dispatch<SetStateAction<Language>>,\n}\n\nexport const LanguageContext = createContext<LanguageContextValue>({\n language: LanguageUtil.DEFAULT_LANGUAGE,\n setLanguage: (v) => v\n})\n\nexport const useLanguage = () => useContext(LanguageContext)\n\nexport const useLocale = (overWriteLanguage?: Language) => {\n const { language } = useLanguage()\n const mapping: Record<Language, string> = {\n en: 'en-US',\n de: 'de-DE'\n }\n return mapping[overWriteLanguage ?? language]\n}\n\ntype LanguageProviderProps = {\n initialLanguage?: Language,\n}\n\nexport const LanguageProvider = ({ initialLanguage, children }: PropsWithChildren<LanguageProviderProps>) => {\n const [language, setLanguage] = useState<Language>(initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n const [storedLanguage, setStoredLanguage] = useLocalStorage<Language>('language', initialLanguage ?? LanguageUtil.DEFAULT_LANGUAGE)\n\n useEffect(() => {\n if (language !== initialLanguage && initialLanguage) {\n console.warn('LanguageProvider initial state changed: Prefer using languageProvider\\'s setLanguage instead')\n setLanguage(initialLanguage)\n }\n }, [initialLanguage]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // TODO set locale of html tag here as well\n setStoredLanguage(language)\n }, [language, setStoredLanguage])\n\n useEffect(() => {\n if (storedLanguage !== null) {\n setLanguage(storedLanguage)\n return\n }\n\n const LanguageToTestAgainst = Object.values(LanguageUtil.languages)\n\n const matchingBrowserLanguage = window.navigator.languages\n .map(language => LanguageToTestAgainst.find((test) => language === test || language.split('-')[0] === test))\n .filter(entry => entry !== undefined)\n\n if (matchingBrowserLanguage.length === 0) return\n\n const firstMatch = matchingBrowserLanguage[0] as Language\n setLanguage(firstMatch)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <LanguageContext.Provider value={{\n language,\n setLanguage\n }}>\n {children}\n </LanguageContext.Provider>\n )\n}","import type { Dispatch, SetStateAction } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport { LocalStorageService } from '../util/storage'\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>\nexport const useLocalStorage = <T>(key: string, initValue: T): [T, SetValue<T>] => {\n const get = useCallback((): T => {\n if (typeof window === 'undefined') {\n return initValue\n }\n const storageService = new LocalStorageService()\n const value = storageService.get<T>(key)\n return value || initValue\n }, [initValue, key])\n\n const [storedValue, setStoredValue] = useState<T>(get)\n\n const setValue: SetValue<T> = useCallback(value => {\n const newValue = value instanceof Function ? value(storedValue) : value\n const storageService = new LocalStorageService()\n storageService.set(key, value)\n\n setStoredValue(newValue)\n }, [storedValue, setStoredValue, key])\n\n useEffect(() => {\n setStoredValue(get())\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return [storedValue, setValue]\n}","/**\n * The supported languages\n */\nconst languages = ['en', 'de'] as const\n\n/**\n * The supported languages\n */\nexport type Language = typeof languages[number]\n\n/**\n * The supported languages' names in their respective language\n */\nconst languagesLocalNames: Record<Language, string> = {\n en: 'English',\n de: 'Deutsch',\n}\n\n/**\n * The default language\n */\nconst DEFAULT_LANGUAGE: Language = 'en'\n\n/**\n * A constant definition for holding data regarding languages\n */\nexport const LanguageUtil = {\n languages,\n DEFAULT_LANGUAGE,\n languagesLocalNames,\n}","import { useLanguage } from './LanguageProvider'\nimport type { Language } from './util'\n\nexport type Translation<T> = Record<Language, T>\n\ntype OverwriteTranslationType<Translation extends Record<string, unknown>> = {\n language?: Language,\n translation?: Partial<Record<Language, Partial<Translation>>>,\n}\n\n/**\n * Adds the `language` prop to the component props.\n *\n * @param Translation the type of the translation object\n *\n * @param Props the type of the component props, defaults to `Record<string, never>`,\n * if you don't expect any other props other than `language` and get an\n * error when using your component (because it uses `forwardRef` etc.)\n * you can try out `Record<string, unknown>`, this might resolve your\n * problem as `SomeType & never` is still `never` but `SomeType & unknown`\n * is `SomeType` which means that adding back props (like `ref` etc.)\n * works properly\n */\nexport type PropsForTranslation<\n Translation extends Record<string, unknown>,\n Props = Record<string, never>\n> = Props & {\n overwriteTranslation?: OverwriteTranslationType<Translation>,\n};\n\nexport const useTranslation = <Translation extends Record<string, unknown>>(\n defaults: Record<Language, Translation>,\n translationOverwrite: OverwriteTranslationType<Translation> = {}\n): Translation => {\n const { language: languageProp, translation: overwrite } = translationOverwrite\n const { language: inferredLanguage } = useLanguage()\n const usedLanguage = languageProp ?? inferredLanguage\n let defaultValues: Translation = defaults[usedLanguage]\n if (overwrite && overwrite[usedLanguage]) {\n defaultValues = { ...defaultValues, ...overwrite[usedLanguage] }\n }\n return defaultValues\n}\n"],"mappings":"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","names":["import_lucide_react","import_clsx","import_react","import_clsx","clsx","import_jsx_runtime","clsx","value","FormInput","clsx","import_clsx","import_clsx","import_jsx_runtime","clsx","import_react","import_react","import_jsx_runtime","import_jsx_runtime","clsx","import_jsx_runtime","clsx","value"]}
|