@veracity/vui 2.14.0-beta.0 → 2.14.0
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/cjs/calendar/calendar.d.ts +5 -0
- package/dist/cjs/calendar/calendar.d.ts.map +1 -0
- package/dist/cjs/calendar/calendar.js +130 -0
- package/dist/cjs/calendar/calendar.styles.d.ts +14 -0
- package/dist/cjs/calendar/calendar.styles.d.ts.map +1 -0
- package/dist/cjs/calendar/calendar.styles.js +71 -0
- package/dist/cjs/calendar/calendar.types.d.ts +81 -0
- package/dist/cjs/calendar/calendar.types.d.ts.map +1 -0
- package/dist/cjs/calendar/calendar.types.js +2 -0
- package/dist/cjs/calendar/components/calendarHeader.d.ts +16 -0
- package/dist/cjs/calendar/components/calendarHeader.d.ts.map +1 -0
- package/dist/cjs/calendar/components/calendarHeader.js +22 -0
- package/dist/cjs/calendar/components/dayPicker.d.ts +9 -0
- package/dist/cjs/calendar/components/dayPicker.d.ts.map +1 -0
- package/dist/cjs/calendar/components/dayPicker.js +29 -0
- package/dist/cjs/calendar/components/index.d.ts +6 -0
- package/dist/cjs/calendar/components/index.d.ts.map +1 -0
- package/dist/cjs/calendar/components/index.js +21 -0
- package/dist/cjs/calendar/components/monthPicker.d.ts +9 -0
- package/dist/cjs/calendar/components/monthPicker.d.ts.map +1 -0
- package/dist/cjs/calendar/components/monthPicker.js +12 -0
- package/dist/cjs/calendar/components/timeUnitHeader.d.ts +13 -0
- package/dist/cjs/calendar/components/timeUnitHeader.d.ts.map +1 -0
- package/dist/cjs/calendar/components/timeUnitHeader.js +26 -0
- package/dist/cjs/calendar/components/yearPicker.d.ts +9 -0
- package/dist/cjs/calendar/components/yearPicker.d.ts.map +1 -0
- package/dist/cjs/calendar/components/yearPicker.js +10 -0
- package/dist/cjs/calendar/consts.d.ts +7 -0
- package/dist/cjs/calendar/consts.d.ts.map +1 -0
- package/dist/cjs/calendar/consts.js +22 -0
- package/dist/cjs/calendar/hooks/index.d.ts +5 -0
- package/dist/cjs/calendar/hooks/index.d.ts.map +1 -0
- package/dist/cjs/calendar/hooks/index.js +20 -0
- package/dist/cjs/calendar/hooks/useBoundaries.d.ts +12 -0
- package/dist/cjs/calendar/hooks/useBoundaries.d.ts.map +1 -0
- package/dist/cjs/calendar/hooks/useBoundaries.js +16 -0
- package/dist/cjs/calendar/hooks/useCalendar.d.ts +8 -0
- package/dist/cjs/calendar/hooks/useCalendar.d.ts.map +1 -0
- package/dist/cjs/calendar/hooks/useCalendar.js +143 -0
- package/dist/cjs/calendar/hooks/useDefaultViewMonth.d.ts +8 -0
- package/dist/cjs/calendar/hooks/useDefaultViewMonth.d.ts.map +1 -0
- package/dist/cjs/calendar/hooks/useDefaultViewMonth.js +21 -0
- package/dist/cjs/calendar/hooks/useSelectedDate.d.ts +15 -0
- package/dist/cjs/calendar/hooks/useSelectedDate.d.ts.map +1 -0
- package/dist/cjs/calendar/hooks/useSelectedDate.js +20 -0
- package/dist/cjs/calendar/index.d.ts +5 -0
- package/dist/cjs/calendar/index.d.ts.map +1 -0
- package/dist/cjs/calendar/index.js +25 -0
- package/dist/cjs/calendar/theme.d.ts +8 -0
- package/dist/cjs/calendar/theme.d.ts.map +1 -0
- package/dist/cjs/calendar/theme.js +12 -0
- package/dist/cjs/calendar/utils.d.ts +26 -0
- package/dist/cjs/calendar/utils.d.ts.map +1 -0
- package/dist/cjs/calendar/utils.js +95 -0
- package/dist/cjs/core/theme.d.ts.map +1 -1
- package/dist/cjs/core/theme.js +2 -4
- package/dist/cjs/datePicker/components/pickerPanel.d.ts +6 -0
- package/dist/cjs/datePicker/components/pickerPanel.d.ts.map +1 -0
- package/dist/cjs/datePicker/components/pickerPanel.js +25 -0
- package/dist/cjs/datePicker/dateInput.d.ts +11 -0
- package/dist/cjs/datePicker/dateInput.d.ts.map +1 -0
- package/dist/cjs/datePicker/dateInput.js +92 -0
- package/dist/cjs/datePicker/datePicker.d.ts +5 -0
- package/dist/cjs/datePicker/datePicker.d.ts.map +1 -0
- package/dist/cjs/datePicker/datePicker.js +138 -0
- package/dist/cjs/datePicker/datePicker.types.d.ts +22 -0
- package/dist/cjs/datePicker/datePicker.types.d.ts.map +1 -0
- package/dist/cjs/datePicker/datePicker.types.js +2 -0
- package/dist/cjs/datePicker/index.d.ts +4 -0
- package/dist/cjs/datePicker/index.d.ts.map +1 -0
- package/dist/cjs/datePicker/index.js +24 -0
- package/dist/cjs/datePicker/theme.d.ts +8 -0
- package/dist/cjs/datePicker/theme.d.ts.map +1 -0
- package/dist/cjs/datePicker/theme.js +12 -0
- package/dist/cjs/footer/footer.js +1 -1
- package/dist/cjs/header/loggedInHeader.d.ts.map +1 -1
- package/dist/cjs/icons/baseIcons/conc/conAnalytics.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conAnalytics.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conAnalytics.js +8 -0
- package/dist/cjs/icons/baseIcons/conc/conCircularEconomy.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conCircularEconomy.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conCircularEconomy.js +8 -0
- package/dist/cjs/icons/baseIcons/conc/conCleanAir.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conCleanAir.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conCleanAir.js +7 -0
- package/dist/cjs/icons/baseIcons/conc/conCleanWater.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conCleanWater.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conCleanWater.js +7 -0
- package/dist/cjs/icons/baseIcons/conc/conDataFabric.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conDataFabric.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conDataFabric.js +7 -0
- package/dist/cjs/icons/baseIcons/conc/conDeepSearch.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conDeepSearch.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conDeepSearch.js +8 -0
- package/dist/cjs/icons/baseIcons/conc/conElectricCar.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conElectricCar.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conElectricCar.js +8 -0
- package/dist/cjs/icons/baseIcons/conc/conEnergyEfficiency.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conEnergyEfficiency.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conEnergyEfficiency.js +7 -0
- package/dist/cjs/icons/baseIcons/conc/conIdentitySafe.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conIdentitySafe.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conIdentitySafe.js +7 -0
- package/dist/cjs/icons/baseIcons/conc/conMarketplace.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conMarketplace.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conMarketplace.js +7 -0
- package/dist/cjs/icons/baseIcons/conc/conNetwork.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conNetwork.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conNetwork.js +7 -0
- package/dist/cjs/icons/baseIcons/conc/conNotifications.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conNotifications.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conNotifications.js +7 -0
- package/dist/cjs/icons/baseIcons/conc/conNotifications2.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conNotifications2.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conNotifications2.js +7 -0
- package/dist/cjs/icons/baseIcons/conc/conRecycling.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conRecycling.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conRecycling.js +8 -0
- package/dist/cjs/icons/baseIcons/conc/conRenewableCertificateWater.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conRenewableCertificateWater.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conRenewableCertificateWater.js +8 -0
- package/dist/cjs/icons/baseIcons/conc/conRenewableCertificateWind.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conRenewableCertificateWind.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conRenewableCertificateWind.js +8 -0
- package/dist/cjs/icons/baseIcons/conc/conServices.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conServices.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conServices.js +7 -0
- package/dist/cjs/icons/baseIcons/conc/conSmartPowerGrid.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conSmartPowerGrid.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conSmartPowerGrid.js +8 -0
- package/dist/cjs/icons/baseIcons/conc/conSustainableForestry.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conSustainableForestry.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conSustainableForestry.js +7 -0
- package/dist/cjs/icons/baseIcons/conc/conVeracityAdapter.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conVeracityAdapter.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conVeracityAdapter.js +7 -0
- package/dist/cjs/icons/baseIcons/conc/conWindmill.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/conc/conWindmill.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/conc/conWindmill.js +8 -0
- package/dist/cjs/icons/baseIcons/icons.d.ts +24 -3
- package/dist/cjs/icons/baseIcons/icons.d.ts.map +1 -1
- package/dist/cjs/icons/baseIcons/icons.js +57 -14
- package/dist/cjs/icons/baseIcons/types.d.ts +1 -1
- package/dist/cjs/icons/baseIcons/types.d.ts.map +1 -1
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/input/consts.js +1 -1
- package/dist/cjs/input/helpText.d.ts.map +1 -1
- package/dist/cjs/input/helpText.js +1 -1
- package/dist/cjs/input/input.d.ts.map +1 -1
- package/dist/cjs/input/input.js +5 -1
- package/dist/cjs/input/inputInput.d.ts.map +1 -1
- package/dist/cjs/input/inputInput.js +1 -0
- package/dist/cjs/tabs/tabs.d.ts.map +1 -1
- package/dist/cjs/tabs/tabs.js +8 -5
- package/dist/cjs/tabs/tabsNavBar.d.ts.map +1 -1
- package/dist/cjs/tabs/tabsNavBar.js +1 -1
- package/dist/cjs/tabs/theme.d.ts.map +1 -1
- package/dist/cjs/tabs/theme.js +0 -1
- package/dist/cjs/theme/components.d.ts +12 -0
- package/dist/cjs/theme/components.d.ts.map +1 -1
- package/dist/cjs/theme/components.js +78 -74
- package/dist/cjs/theme/defaultTheme.d.ts +12 -0
- package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
- package/dist/cjs/utils/dates.d.ts +20 -0
- package/dist/cjs/utils/dates.d.ts.map +1 -1
- package/dist/cjs/utils/dates.js +60 -1
- package/dist/cjs/utils/formatDate.d.ts +15 -0
- package/dist/cjs/utils/formatDate.d.ts.map +1 -0
- package/dist/cjs/utils/formatDate.js +51 -0
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +1 -0
- package/dist/esm/calendar/calendar.d.ts +5 -0
- package/dist/esm/calendar/calendar.d.ts.map +1 -0
- package/dist/esm/calendar/calendar.js +89 -0
- package/dist/esm/calendar/calendar.styles.d.ts +14 -0
- package/dist/esm/calendar/calendar.styles.d.ts.map +1 -0
- package/dist/esm/calendar/calendar.styles.js +65 -0
- package/dist/esm/calendar/calendar.types.d.ts +81 -0
- package/dist/esm/calendar/calendar.types.d.ts.map +1 -0
- package/dist/esm/calendar/calendar.types.js +1 -0
- package/dist/esm/calendar/components/calendarHeader.d.ts +16 -0
- package/dist/esm/calendar/components/calendarHeader.d.ts.map +1 -0
- package/dist/esm/calendar/components/calendarHeader.js +15 -0
- package/dist/esm/calendar/components/dayPicker.d.ts +9 -0
- package/dist/esm/calendar/components/dayPicker.d.ts.map +1 -0
- package/dist/esm/calendar/components/dayPicker.js +22 -0
- package/dist/esm/calendar/components/index.d.ts +6 -0
- package/dist/esm/calendar/components/index.d.ts.map +1 -0
- package/dist/esm/calendar/components/index.js +5 -0
- package/dist/esm/calendar/components/monthPicker.d.ts +9 -0
- package/dist/esm/calendar/components/monthPicker.d.ts.map +1 -0
- package/dist/esm/calendar/components/monthPicker.js +5 -0
- package/dist/esm/calendar/components/timeUnitHeader.d.ts +13 -0
- package/dist/esm/calendar/components/timeUnitHeader.d.ts.map +1 -0
- package/dist/esm/calendar/components/timeUnitHeader.js +19 -0
- package/dist/esm/calendar/components/yearPicker.d.ts +9 -0
- package/dist/esm/calendar/components/yearPicker.d.ts.map +1 -0
- package/dist/esm/calendar/components/yearPicker.js +3 -0
- package/dist/esm/calendar/consts.d.ts +7 -0
- package/dist/esm/calendar/consts.d.ts.map +1 -0
- package/dist/esm/calendar/consts.js +19 -0
- package/dist/esm/calendar/hooks/index.d.ts +5 -0
- package/dist/esm/calendar/hooks/index.d.ts.map +1 -0
- package/dist/esm/calendar/hooks/index.js +4 -0
- package/dist/esm/calendar/hooks/useBoundaries.d.ts +12 -0
- package/dist/esm/calendar/hooks/useBoundaries.d.ts.map +1 -0
- package/dist/esm/calendar/hooks/useBoundaries.js +12 -0
- package/dist/esm/calendar/hooks/useCalendar.d.ts +8 -0
- package/dist/esm/calendar/hooks/useCalendar.d.ts.map +1 -0
- package/dist/esm/calendar/hooks/useCalendar.js +139 -0
- package/dist/esm/calendar/hooks/useDefaultViewMonth.d.ts +8 -0
- package/dist/esm/calendar/hooks/useDefaultViewMonth.d.ts.map +1 -0
- package/dist/esm/calendar/hooks/useDefaultViewMonth.js +17 -0
- package/dist/esm/calendar/hooks/useSelectedDate.d.ts +15 -0
- package/dist/esm/calendar/hooks/useSelectedDate.d.ts.map +1 -0
- package/dist/esm/calendar/hooks/useSelectedDate.js +16 -0
- package/dist/esm/calendar/index.d.ts +5 -0
- package/dist/esm/calendar/index.d.ts.map +1 -0
- package/dist/esm/calendar/index.js +4 -0
- package/dist/esm/calendar/theme.d.ts +8 -0
- package/dist/esm/calendar/theme.d.ts.map +1 -0
- package/dist/esm/calendar/theme.js +10 -0
- package/dist/esm/calendar/utils.d.ts +26 -0
- package/dist/esm/calendar/utils.d.ts.map +1 -0
- package/dist/esm/calendar/utils.js +81 -0
- package/dist/esm/core/theme.d.ts.map +1 -1
- package/dist/esm/core/theme.js +2 -4
- package/dist/esm/datePicker/components/pickerPanel.d.ts +6 -0
- package/dist/esm/datePicker/components/pickerPanel.d.ts.map +1 -0
- package/dist/esm/datePicker/components/pickerPanel.js +19 -0
- package/dist/esm/datePicker/dateInput.d.ts +11 -0
- package/dist/esm/datePicker/dateInput.d.ts.map +1 -0
- package/dist/esm/datePicker/dateInput.js +53 -0
- package/dist/esm/datePicker/datePicker.d.ts +5 -0
- package/dist/esm/datePicker/datePicker.d.ts.map +1 -0
- package/dist/esm/datePicker/datePicker.js +98 -0
- package/dist/esm/datePicker/datePicker.types.d.ts +22 -0
- package/dist/esm/datePicker/datePicker.types.d.ts.map +1 -0
- package/dist/esm/datePicker/datePicker.types.js +1 -0
- package/dist/esm/datePicker/index.d.ts +4 -0
- package/dist/esm/datePicker/index.d.ts.map +1 -0
- package/dist/esm/datePicker/index.js +3 -0
- package/dist/esm/datePicker/theme.d.ts +8 -0
- package/dist/esm/datePicker/theme.d.ts.map +1 -0
- package/dist/esm/datePicker/theme.js +10 -0
- package/dist/esm/footer/footer.js +1 -1
- package/dist/esm/header/loggedInHeader.d.ts.map +1 -1
- package/dist/esm/icons/baseIcons/conc/conAnalytics.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conAnalytics.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conAnalytics.js +6 -0
- package/dist/esm/icons/baseIcons/conc/conCircularEconomy.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conCircularEconomy.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conCircularEconomy.js +6 -0
- package/dist/esm/icons/baseIcons/conc/conCleanAir.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conCleanAir.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conCleanAir.js +5 -0
- package/dist/esm/icons/baseIcons/conc/conCleanWater.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conCleanWater.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conCleanWater.js +5 -0
- package/dist/esm/icons/baseIcons/conc/conDataFabric.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conDataFabric.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conDataFabric.js +5 -0
- package/dist/esm/icons/baseIcons/conc/conDeepSearch.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conDeepSearch.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conDeepSearch.js +6 -0
- package/dist/esm/icons/baseIcons/conc/conElectricCar.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conElectricCar.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conElectricCar.js +6 -0
- package/dist/esm/icons/baseIcons/conc/conEnergyEfficiency.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conEnergyEfficiency.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conEnergyEfficiency.js +5 -0
- package/dist/esm/icons/baseIcons/conc/conIdentitySafe.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conIdentitySafe.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conIdentitySafe.js +5 -0
- package/dist/esm/icons/baseIcons/conc/conMarketplace.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conMarketplace.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conMarketplace.js +5 -0
- package/dist/esm/icons/baseIcons/conc/conNetwork.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conNetwork.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conNetwork.js +5 -0
- package/dist/esm/icons/baseIcons/conc/conNotifications.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conNotifications.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conNotifications.js +5 -0
- package/dist/esm/icons/baseIcons/conc/conNotifications2.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conNotifications2.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conNotifications2.js +5 -0
- package/dist/esm/icons/baseIcons/conc/conRecycling.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conRecycling.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conRecycling.js +6 -0
- package/dist/esm/icons/baseIcons/conc/conRenewableCertificateWater.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conRenewableCertificateWater.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conRenewableCertificateWater.js +6 -0
- package/dist/esm/icons/baseIcons/conc/conRenewableCertificateWind.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conRenewableCertificateWind.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conRenewableCertificateWind.js +6 -0
- package/dist/esm/icons/baseIcons/conc/conServices.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conServices.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conServices.js +5 -0
- package/dist/esm/icons/baseIcons/conc/conSmartPowerGrid.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conSmartPowerGrid.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conSmartPowerGrid.js +6 -0
- package/dist/esm/icons/baseIcons/conc/conSustainableForestry.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conSustainableForestry.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conSustainableForestry.js +5 -0
- package/dist/esm/icons/baseIcons/conc/conVeracityAdapter.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conVeracityAdapter.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conVeracityAdapter.js +5 -0
- package/dist/esm/icons/baseIcons/conc/conWindmill.d.ts +4 -0
- package/dist/esm/icons/baseIcons/conc/conWindmill.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/conc/conWindmill.js +6 -0
- package/dist/esm/icons/baseIcons/icons.d.ts +24 -3
- package/dist/esm/icons/baseIcons/icons.d.ts.map +1 -1
- package/dist/esm/icons/baseIcons/icons.js +24 -3
- package/dist/esm/icons/baseIcons/types.d.ts +1 -1
- package/dist/esm/icons/baseIcons/types.d.ts.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/input/consts.js +1 -1
- package/dist/esm/input/helpText.d.ts.map +1 -1
- package/dist/esm/input/helpText.js +1 -1
- package/dist/esm/input/input.d.ts.map +1 -1
- package/dist/esm/input/input.js +5 -1
- package/dist/esm/input/inputInput.d.ts.map +1 -1
- package/dist/esm/input/inputInput.js +1 -0
- package/dist/esm/tabs/tabs.d.ts.map +1 -1
- package/dist/esm/tabs/tabs.js +7 -4
- package/dist/esm/tabs/tabsNavBar.d.ts.map +1 -1
- package/dist/esm/tabs/tabsNavBar.js +1 -1
- package/dist/esm/tabs/theme.d.ts.map +1 -1
- package/dist/esm/tabs/theme.js +0 -1
- package/dist/esm/theme/components.d.ts +12 -0
- package/dist/esm/theme/components.d.ts.map +1 -1
- package/dist/esm/theme/components.js +4 -0
- package/dist/esm/theme/defaultTheme.d.ts +12 -0
- package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
- package/dist/esm/utils/dates.d.ts +20 -0
- package/dist/esm/utils/dates.d.ts.map +1 -1
- package/dist/esm/utils/dates.js +51 -0
- package/dist/esm/utils/formatDate.d.ts +15 -0
- package/dist/esm/utils/formatDate.d.ts.map +1 -0
- package/dist/esm/utils/formatDate.js +36 -0
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -0
- package/package.json +1 -1
- package/src/calendar/calendar.styles.ts +75 -0
- package/src/calendar/calendar.tsx +145 -0
- package/src/calendar/calendar.types.ts +91 -0
- package/src/calendar/components/calendarHeader.tsx +56 -0
- package/src/calendar/components/dayPicker.tsx +55 -0
- package/src/calendar/components/index.ts +5 -0
- package/src/calendar/components/monthPicker.tsx +26 -0
- package/src/calendar/components/timeUnitHeader.tsx +47 -0
- package/src/calendar/components/yearPicker.tsx +24 -0
- package/src/calendar/consts.ts +24 -0
- package/src/calendar/hooks/index.ts +4 -0
- package/src/calendar/hooks/useBoundaries.ts +16 -0
- package/src/calendar/hooks/useCalendar.ts +181 -0
- package/src/calendar/hooks/useDefaultViewMonth.ts +18 -0
- package/src/calendar/hooks/useSelectedDate.ts +20 -0
- package/src/calendar/index.ts +4 -0
- package/src/calendar/theme.ts +14 -0
- package/src/calendar/utils.ts +100 -0
- package/src/core/theme.ts +2 -4
- package/src/datePicker/components/pickerPanel.tsx +22 -0
- package/src/datePicker/dateInput.tsx +77 -0
- package/src/datePicker/datePicker.tsx +172 -0
- package/src/datePicker/datePicker.types.ts +25 -0
- package/src/datePicker/index.ts +3 -0
- package/src/datePicker/theme.ts +14 -0
- package/src/footer/footer.tsx +1 -1
- package/src/header/loggedInHeader.tsx +0 -1
- package/src/icons/baseIcons/conc/conAnalytics.ts +9 -0
- package/src/icons/baseIcons/conc/conCircularEconomy.ts +9 -0
- package/src/icons/baseIcons/conc/conCleanAir.ts +8 -0
- package/src/icons/baseIcons/conc/conCleanWater.ts +8 -0
- package/src/icons/baseIcons/conc/conDataFabric.ts +8 -0
- package/src/icons/baseIcons/conc/conDeepSearch.ts +9 -0
- package/src/icons/baseIcons/conc/conElectricCar.ts +9 -0
- package/src/icons/baseIcons/conc/conEnergyEfficiency.ts +8 -0
- package/src/icons/baseIcons/conc/conIdentitySafe.ts +8 -0
- package/src/icons/baseIcons/conc/conMarketplace.ts +8 -0
- package/src/icons/baseIcons/conc/conNetwork.ts +8 -0
- package/src/icons/baseIcons/conc/conNotifications.ts +8 -0
- package/src/icons/baseIcons/conc/conNotifications2.ts +8 -0
- package/src/icons/baseIcons/conc/conRecycling.ts +9 -0
- package/src/icons/baseIcons/conc/conRenewableCertificateWater.ts +9 -0
- package/src/icons/baseIcons/conc/conRenewableCertificateWind.ts +9 -0
- package/src/icons/baseIcons/conc/conServices.ts +8 -0
- package/src/icons/baseIcons/conc/conSmartPowerGrid.ts +9 -0
- package/src/icons/baseIcons/conc/conSustainableForestry.ts +8 -0
- package/src/icons/baseIcons/conc/conVeracityAdapter.ts +8 -0
- package/src/icons/baseIcons/conc/conWindmill.ts +9 -0
- package/src/icons/baseIcons/icons.ts +24 -3
- package/src/icons/baseIcons/types.ts +24 -3
- package/src/index.ts +2 -0
- package/src/input/consts.ts +1 -1
- package/src/input/helpText.tsx +1 -0
- package/src/input/input.tsx +5 -1
- package/src/input/inputInput.tsx +1 -0
- package/src/tabs/tabs.tsx +7 -4
- package/src/tabs/tabsNavBar.tsx +3 -1
- package/src/tabs/theme.ts +0 -1
- package/src/theme/components.ts +4 -0
- package/src/utils/dates.ts +60 -0
- package/src/utils/formatDate.ts +63 -0
- package/src/utils/index.ts +1 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { useMemo } from 'react'
|
|
2
|
+
|
|
3
|
+
import { generateDateByUTCValue, getDateUTCValue, sameDate, sameYear, sameYearSameMonth } from '../../utils'
|
|
4
|
+
import { MonthProps, TimeItem, TimeResult } from '../calendar.types'
|
|
5
|
+
import { viewYears } from '../consts'
|
|
6
|
+
import { getNextDate, isDay, isExact, isFrom, isMonth, isRange, isTo, isYear } from '../utils'
|
|
7
|
+
import { useBoundaries } from './useBoundaries'
|
|
8
|
+
import { useSelectedDate } from './useSelectedDate'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Main hook for doing calendar calculations
|
|
12
|
+
* Calculates for all time unit modes: day, month and year
|
|
13
|
+
* Depends on useBoundaries and useSelectedDate to do initial setup
|
|
14
|
+
*/
|
|
15
|
+
export const useCalendar = ({
|
|
16
|
+
boundaries,
|
|
17
|
+
selectedDates,
|
|
18
|
+
mode = 'exact',
|
|
19
|
+
timeUnitMode,
|
|
20
|
+
viewDate,
|
|
21
|
+
fixedNumberOfWeeks
|
|
22
|
+
}: MonthProps) => {
|
|
23
|
+
const boundariesProcessed = useBoundaries({ boundaries })
|
|
24
|
+
const selectedProcessed = useSelectedDate({ selectedDates, mode })
|
|
25
|
+
|
|
26
|
+
return useMemo(() => {
|
|
27
|
+
const { maxDateTime, minDateTime } = boundariesProcessed
|
|
28
|
+
const { currentDateTime, maxSelectedDateTime, minSelectedDateTime } = selectedProcessed
|
|
29
|
+
const { utcYear: viewDateYear, utcMonth: viewDateMonth } = getDateUTCValue(viewDate)
|
|
30
|
+
|
|
31
|
+
let calendarFirstDay: Date
|
|
32
|
+
let calendarLastDay: Date
|
|
33
|
+
let nextFirstDay: Date
|
|
34
|
+
let prevLastDay: Date
|
|
35
|
+
let firstDay: Date
|
|
36
|
+
let lastDay: Date
|
|
37
|
+
|
|
38
|
+
if (isDay(timeUnitMode)) {
|
|
39
|
+
firstDay = generateDateByUTCValue(viewDateYear, viewDateMonth, 1)
|
|
40
|
+
lastDay = generateDateByUTCValue(viewDateYear, viewDateMonth + 1, 0) // lastDay
|
|
41
|
+
|
|
42
|
+
nextFirstDay = generateDateByUTCValue(viewDateYear, viewDateMonth + 1, 1)
|
|
43
|
+
prevLastDay = generateDateByUTCValue(viewDateYear, viewDateMonth, 0)
|
|
44
|
+
|
|
45
|
+
const weekdayFirst = firstDay.getUTCDay()
|
|
46
|
+
const weekdayLast = lastDay.getUTCDay()
|
|
47
|
+
|
|
48
|
+
// Monday preceding the month (or first day of the month if it's on a Monday)
|
|
49
|
+
calendarFirstDay =
|
|
50
|
+
weekdayFirst === 0
|
|
51
|
+
? new Date(Date.UTC(viewDateYear, viewDateMonth, 2 - 7))
|
|
52
|
+
: new Date(Date.UTC(viewDateYear, viewDateMonth, 2 - weekdayFirst))
|
|
53
|
+
|
|
54
|
+
// Sunday after the month (or last day of the month if it's on a Sunday)
|
|
55
|
+
calendarLastDay =
|
|
56
|
+
weekdayLast === 0
|
|
57
|
+
? new Date(Date.UTC(viewDateYear, viewDateMonth + 1, 0))
|
|
58
|
+
: new Date(Date.UTC(viewDateYear, viewDateMonth + 1, 8 - weekdayLast))
|
|
59
|
+
|
|
60
|
+
// If calendar must contain constant number of weeks (6 weeks)
|
|
61
|
+
// Missing weeks will be added to the end of the month
|
|
62
|
+
const numberOfWeeks = Math.round((+calendarLastDay - +calendarFirstDay) / (7 * 24 * 60 * 60 * 1000))
|
|
63
|
+
if (fixedNumberOfWeeks) {
|
|
64
|
+
for (let week = numberOfWeeks; week < 6; week++) {
|
|
65
|
+
calendarLastDay = generateDateByUTCValue(
|
|
66
|
+
calendarLastDay.getUTCFullYear(),
|
|
67
|
+
calendarLastDay.getUTCMonth(),
|
|
68
|
+
calendarLastDay.getUTCDate() + 7
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
} else if (isMonth(timeUnitMode)) {
|
|
73
|
+
calendarFirstDay = firstDay = generateDateByUTCValue(viewDateYear, 0, 1)
|
|
74
|
+
calendarLastDay = lastDay = generateDateByUTCValue(viewDateYear, 11, 31)
|
|
75
|
+
nextFirstDay = generateDateByUTCValue(viewDateYear + 1, 0, 1)
|
|
76
|
+
prevLastDay = generateDateByUTCValue(viewDateYear - 1, 11, 31)
|
|
77
|
+
} else {
|
|
78
|
+
const calendarStartYear = new Date().getUTCFullYear() - viewYears / 2
|
|
79
|
+
const diffYears = calendarStartYear - viewDateYear
|
|
80
|
+
|
|
81
|
+
const startYear = calendarStartYear - Math.ceil(diffYears / viewYears) * viewYears
|
|
82
|
+
const endYear = startYear + viewYears - 1
|
|
83
|
+
|
|
84
|
+
if (startYear === 1753) calendarFirstDay = firstDay = generateDateByUTCValue(startYear, 0, 2)
|
|
85
|
+
else calendarFirstDay = firstDay = generateDateByUTCValue(startYear, 0, 1)
|
|
86
|
+
|
|
87
|
+
calendarLastDay = lastDay = generateDateByUTCValue(endYear, 11, 31)
|
|
88
|
+
nextFirstDay = generateDateByUTCValue(endYear + 1, 0, 1)
|
|
89
|
+
prevLastDay = generateDateByUTCValue(startYear - 1, 11, 31)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const items: TimeItem[] = []
|
|
93
|
+
|
|
94
|
+
// Loops between first and last date
|
|
95
|
+
let dateItem = calendarFirstDay
|
|
96
|
+
do {
|
|
97
|
+
const isHidden = dateItem < firstDay || dateItem >= lastDay
|
|
98
|
+
const isToday = sameDate(dateItem, new Date())
|
|
99
|
+
const { utcYear: minDateYear, utcMonth: minDateMonth } = getDateUTCValue(minDateTime)
|
|
100
|
+
|
|
101
|
+
let minUnitModeDate = minDateTime
|
|
102
|
+
if (isMonth(timeUnitMode))
|
|
103
|
+
// Need to compare with the first day of the month to decide if the month is disabled in the month overview
|
|
104
|
+
minUnitModeDate = generateDateByUTCValue(minDateYear, minDateMonth, 1)
|
|
105
|
+
else if (isYear(timeUnitMode))
|
|
106
|
+
// Need to compare with the first day of the year to decide if the year is disabled in the year overview
|
|
107
|
+
minUnitModeDate = generateDateByUTCValue(minDateYear, 0, 1)
|
|
108
|
+
|
|
109
|
+
const isDisabled = dateItem < minUnitModeDate || dateItem > maxDateTime ? true : false
|
|
110
|
+
|
|
111
|
+
// The calendar only select a single date
|
|
112
|
+
const isExactSelected = isExact(mode) && minSelectedDateTime && +dateItem === +minSelectedDateTime
|
|
113
|
+
|
|
114
|
+
// The calendar selects a range
|
|
115
|
+
const inRangeLow = minSelectedDateTime && dateItem >= minSelectedDateTime
|
|
116
|
+
const inRangeHigh = maxSelectedDateTime && dateItem <= maxSelectedDateTime
|
|
117
|
+
|
|
118
|
+
const inRange =
|
|
119
|
+
!isExact(mode) &&
|
|
120
|
+
((!isDisabled && inRangeLow && (!maxSelectedDateTime || inRangeHigh)) ||
|
|
121
|
+
(inRangeHigh && (!minSelectedDateTime || inRangeLow)))
|
|
122
|
+
|
|
123
|
+
const isRangeSelected = isRange(mode) && inRange
|
|
124
|
+
const isFromSelected = isFrom(mode) && inRangeLow
|
|
125
|
+
const isToSelected = isTo(mode) && inRangeHigh
|
|
126
|
+
|
|
127
|
+
const isSelected = !!(isExactSelected || isFromSelected || isToSelected || isRangeSelected)
|
|
128
|
+
|
|
129
|
+
let maxSelectedCheck = maxSelectedDateTime
|
|
130
|
+
let minSelectedCheck = minSelectedDateTime
|
|
131
|
+
|
|
132
|
+
if (isYear(timeUnitMode)) {
|
|
133
|
+
if (maxSelectedCheck) maxSelectedCheck = generateDateByUTCValue(maxSelectedCheck.getUTCFullYear(), 0, 1)
|
|
134
|
+
if (minSelectedCheck) minSelectedCheck = generateDateByUTCValue(minSelectedCheck.getUTCFullYear(), 0, 1)
|
|
135
|
+
}
|
|
136
|
+
if (isMonth(timeUnitMode)) {
|
|
137
|
+
if (maxSelectedCheck)
|
|
138
|
+
maxSelectedCheck = generateDateByUTCValue(
|
|
139
|
+
maxSelectedCheck.getUTCFullYear(),
|
|
140
|
+
maxSelectedCheck.getUTCMonth(),
|
|
141
|
+
1
|
|
142
|
+
)
|
|
143
|
+
if (minSelectedCheck)
|
|
144
|
+
minSelectedCheck = generateDateByUTCValue(
|
|
145
|
+
minSelectedCheck.getUTCFullYear(),
|
|
146
|
+
minSelectedCheck.getUTCMonth(),
|
|
147
|
+
1
|
|
148
|
+
)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const boundary = !isTo(mode) && sameDate(dateItem, minSelectedCheck)
|
|
152
|
+
|
|
153
|
+
let current: boolean
|
|
154
|
+
if (isDay(timeUnitMode)) current = sameDate(dateItem, currentDateTime)
|
|
155
|
+
else if (isMonth(timeUnitMode)) current = sameYearSameMonth(dateItem, currentDateTime)
|
|
156
|
+
else current = sameYear(dateItem, currentDateTime)
|
|
157
|
+
|
|
158
|
+
items.push({
|
|
159
|
+
date: dateItem,
|
|
160
|
+
isHidden,
|
|
161
|
+
isToday,
|
|
162
|
+
isDisabled: boundary ? false : isDisabled,
|
|
163
|
+
isSelected,
|
|
164
|
+
boundary,
|
|
165
|
+
current
|
|
166
|
+
})
|
|
167
|
+
|
|
168
|
+
dateItem = getNextDate(dateItem, timeUnitMode)
|
|
169
|
+
} while (dateItem <= calendarLastDay)
|
|
170
|
+
|
|
171
|
+
// Disables next/prev buttons
|
|
172
|
+
const prevDisabled = minDateTime > prevLastDay
|
|
173
|
+
const nextDisabled = maxDateTime < nextFirstDay
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
items,
|
|
177
|
+
prevDisabled,
|
|
178
|
+
nextDisabled
|
|
179
|
+
} as TimeResult
|
|
180
|
+
}, [boundaries, selectedDates, mode, timeUnitMode, viewDate])
|
|
181
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DefaultViewMonthProps } from '../calendar.types'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Calculates the default view date, either using selected date, current date or boundaries
|
|
5
|
+
* Used when initializing, after that viewDate will be set
|
|
6
|
+
* Memoized so will only recalculate when boundaries or selectedDate changes
|
|
7
|
+
*/
|
|
8
|
+
export const useDefaultViewMonth = ({ boundaries, selectedDate, isStartDate }: DefaultViewMonthProps) => {
|
|
9
|
+
if (selectedDate) return selectedDate
|
|
10
|
+
|
|
11
|
+
const currentDate = new Date()
|
|
12
|
+
if (!boundaries) return currentDate
|
|
13
|
+
|
|
14
|
+
if (boundaries.endDate && currentDate > boundaries.endDate && !isStartDate) return boundaries.endDate
|
|
15
|
+
if (boundaries.startDate && currentDate > boundaries.startDate && isStartDate) return boundaries.startDate
|
|
16
|
+
|
|
17
|
+
return currentDate
|
|
18
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CalendarMode, DateRange } from '../calendar.types'
|
|
2
|
+
import { isExact, isFrom } from '../utils'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Calculate the selected dates
|
|
6
|
+
* If we are in single calendar mode, will use the startDate as selected date
|
|
7
|
+
* Memoized so will only recalculate when selectedDates or mode changes
|
|
8
|
+
*/
|
|
9
|
+
export const useSelectedDate = ({ selectedDates, mode }: { mode: CalendarMode; selectedDates?: DateRange }) => {
|
|
10
|
+
const currentDateTime = isFrom(mode) || isExact(mode) ? selectedDates?.startDate : selectedDates?.endDate
|
|
11
|
+
|
|
12
|
+
const minSelectedDateTime = selectedDates?.startDate || undefined
|
|
13
|
+
const maxSelectedDateTime = selectedDates?.endDate || undefined
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
currentDateTime,
|
|
17
|
+
maxSelectedDateTime,
|
|
18
|
+
minSelectedDateTime
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { generateDateByUTCValue, getDateUTCValue, sameYear, sameYearSameMonth } from '../utils'
|
|
2
|
+
import { CalendarMode, DateRange, FlowDirection, TimeItem, TimeUnitMode } from './calendar.types'
|
|
3
|
+
import { minDateTimestamp, viewYears } from './consts'
|
|
4
|
+
|
|
5
|
+
export const isExact = (mode?: CalendarMode) => mode === 'exact'
|
|
6
|
+
export const isFrom = (mode?: CalendarMode) => mode === 'from'
|
|
7
|
+
export const isTo = (mode?: CalendarMode) => mode === 'to'
|
|
8
|
+
export const isRange = (mode?: CalendarMode) => mode === 'range'
|
|
9
|
+
|
|
10
|
+
export const isDay = (timeUnitMode?: TimeUnitMode) => timeUnitMode === 'day'
|
|
11
|
+
export const isMonth = (timeUnitMode?: TimeUnitMode) => timeUnitMode === 'month'
|
|
12
|
+
export const isYear = (timeUnitMode?: TimeUnitMode) => timeUnitMode === 'year'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Helper to get the next date item when iterating between two dates
|
|
16
|
+
* @param date current date in the iteration
|
|
17
|
+
* @param timeUnitMode time unit mode for day, month, year
|
|
18
|
+
*/
|
|
19
|
+
export const getNextDate = (date: Date, timeUnitMode?: TimeUnitMode) => {
|
|
20
|
+
const { utcYear, utcMonth, utcDate } = getDateUTCValue(date)
|
|
21
|
+
if (isDay(timeUnitMode)) return generateDateByUTCValue(utcYear, utcMonth, utcDate + 1)
|
|
22
|
+
if (isMonth(timeUnitMode)) return generateDateByUTCValue(utcYear, utcMonth + 1, utcDate)
|
|
23
|
+
|
|
24
|
+
return generateDateByUTCValue(utcYear + 1, utcMonth, utcDate)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const processSelectMonth = (clickedDate: Date, mode: CalendarMode, boundaries?: DateRange) => {
|
|
28
|
+
const date = clickedDate
|
|
29
|
+
const minDateTime = new Date(minDateTimestamp)
|
|
30
|
+
const { utcYear, utcMonth } = getDateUTCValue(clickedDate)
|
|
31
|
+
if (isTo(mode)) {
|
|
32
|
+
const selectDayInMonth = generateDateByUTCValue(utcYear, utcMonth + 1, 0).getUTCDate()
|
|
33
|
+
|
|
34
|
+
if (boundaries?.endDate && sameYearSameMonth(clickedDate, boundaries?.endDate)) return boundaries?.endDate
|
|
35
|
+
|
|
36
|
+
return generateDateByUTCValue(utcYear, utcMonth, selectDayInMonth)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (isFrom(mode) && boundaries?.startDate && sameYearSameMonth(clickedDate, boundaries?.startDate))
|
|
40
|
+
return boundaries?.startDate
|
|
41
|
+
|
|
42
|
+
if (isExact(mode) && sameYear(clickedDate, minDateTime)) return minDateTime
|
|
43
|
+
|
|
44
|
+
return boundaries?.startDate && date < boundaries?.startDate ? boundaries.startDate : date
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Helper that calcs what new date we should set as viewDate when a year is clicked
|
|
49
|
+
*
|
|
50
|
+
* @param clickedDate date of year clicked
|
|
51
|
+
* @param newDate pre-processed potential new view date
|
|
52
|
+
* @param mode calendar mode
|
|
53
|
+
* @param boundaries boundaries of date range
|
|
54
|
+
*/
|
|
55
|
+
export const processSelectYear = (clickedData: Date, mode: CalendarMode, boundaries?: DateRange) => {
|
|
56
|
+
const { utcYear, utcMonth } = getDateUTCValue(clickedData)
|
|
57
|
+
const minDateTime = new Date(minDateTimestamp)
|
|
58
|
+
const date = clickedData
|
|
59
|
+
|
|
60
|
+
if (isTo(mode)) {
|
|
61
|
+
const selectDayInMonth = generateDateByUTCValue(utcYear, utcMonth + 1, 0).getUTCDate()
|
|
62
|
+
const selectMonthInYear = 11
|
|
63
|
+
|
|
64
|
+
if (boundaries?.endDate && sameYear(clickedData, boundaries?.endDate)) return boundaries.endDate
|
|
65
|
+
|
|
66
|
+
return generateDateByUTCValue(clickedData.getUTCFullYear(), selectMonthInYear, selectDayInMonth)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (isFrom(mode) && boundaries?.startDate && sameYear(clickedData, boundaries?.startDate)) return boundaries.startDate
|
|
70
|
+
|
|
71
|
+
if (isExact(mode) && sameYear(clickedData, minDateTime)) return minDateTime
|
|
72
|
+
|
|
73
|
+
return boundaries?.startDate && date < boundaries?.startDate ? boundaries.startDate : date
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const processViewDate = (
|
|
77
|
+
viewDate: Date,
|
|
78
|
+
direction: FlowDirection,
|
|
79
|
+
timeUnitMode: TimeUnitMode,
|
|
80
|
+
calendarItems?: TimeItem[]
|
|
81
|
+
) => {
|
|
82
|
+
const { utcYear, utcMonth } = getDateUTCValue(viewDate)
|
|
83
|
+
if (isDay(timeUnitMode)) {
|
|
84
|
+
const newMonth = generateDateByUTCValue(utcYear, utcMonth + (direction === 'next' ? 1 : -1))
|
|
85
|
+
return newMonth
|
|
86
|
+
}
|
|
87
|
+
if (isMonth(timeUnitMode)) {
|
|
88
|
+
const newMonth = generateDateByUTCValue(utcYear + (direction === 'next' ? 1 : -1), 0)
|
|
89
|
+
return newMonth
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (calendarItems) {
|
|
93
|
+
const date = calendarItems[direction === 'next' ? calendarItems.length - 1 : 0].date
|
|
94
|
+
const year = date.getUTCFullYear()
|
|
95
|
+
const newViewDate = generateDateByUTCValue(year + (direction === 'next' ? 1 : -viewYears), 0)
|
|
96
|
+
return newViewDate
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return null
|
|
100
|
+
}
|
package/src/core/theme.ts
CHANGED
|
@@ -72,13 +72,11 @@ export function useStyleConfig(component: keyof VuiTheme['components'], props: a
|
|
|
72
72
|
|
|
73
73
|
let styles: Dict = {}
|
|
74
74
|
|
|
75
|
-
if (parts.length > 0)
|
|
75
|
+
if (parts.length > 0)
|
|
76
76
|
parts.forEach((part: string) => {
|
|
77
77
|
styles[part] = merge(baseStyles[part] ?? {}, sizeStyles[part] ?? {}, variantStyles[part] ?? {})
|
|
78
78
|
})
|
|
79
|
-
|
|
80
|
-
styles = merge(baseStyles, sizeStyles, variantStyles)
|
|
81
|
-
}
|
|
79
|
+
else styles = merge(baseStyles, sizeStyles, variantStyles)
|
|
82
80
|
|
|
83
81
|
return styles
|
|
84
82
|
}, [colorScheme, size, variant])
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { css, styled } from '../../core'
|
|
2
|
+
import Panel from '../../panel'
|
|
3
|
+
import { DatePickerPopupPosition } from '../datePicker.types'
|
|
4
|
+
|
|
5
|
+
export const PickerPanel = styled(Panel)<{ popupPosition: DatePickerPopupPosition; showPopupBelow: boolean }>`
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
padding: 0px;
|
|
9
|
+
position: absolute;
|
|
10
|
+
z-index: 999;
|
|
11
|
+
${p => (p.popupPosition === 'right' ? 'right: 0;' : 'left: 0;')}
|
|
12
|
+
${p =>
|
|
13
|
+
p.showPopupBelow
|
|
14
|
+
? css`
|
|
15
|
+
margin-top: 50px;
|
|
16
|
+
top: 0;
|
|
17
|
+
`
|
|
18
|
+
: css`
|
|
19
|
+
bottom: 0;
|
|
20
|
+
margin-bottom: 50px;
|
|
21
|
+
`}
|
|
22
|
+
`
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react'
|
|
2
|
+
|
|
3
|
+
import { Input, InputProps } from '../input'
|
|
4
|
+
import { T } from '../t'
|
|
5
|
+
import { formatDate, parseIsoDate, validateDateFormat } from '../utils'
|
|
6
|
+
|
|
7
|
+
type Props = InputProps & {
|
|
8
|
+
initialDate?: Date
|
|
9
|
+
onChange: (date?: Date) => void
|
|
10
|
+
onValidate: (date?: Date) => string
|
|
11
|
+
setValidateStatus: (inValid: boolean) => void
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const DateInput = ({ initialDate, onChange, onValidate, setValidateStatus, ...rest }: Props) => {
|
|
15
|
+
const formattedInitialDate = initialDate ? formatDate(initialDate, 'YYYY-MM-DD', { timeZone: 'UTC' }) : ''
|
|
16
|
+
const [dateInput, setDateInput] = useState<string>(formattedInitialDate)
|
|
17
|
+
const [dateInputValidated, setDateInputValidated] = useState<boolean>(true)
|
|
18
|
+
const [errorMessage, setErrorMessage] = useState<string>('')
|
|
19
|
+
|
|
20
|
+
const isValidDate = (dateString: string) => {
|
|
21
|
+
if (!validateDateFormat(dateString)) return false
|
|
22
|
+
if (!parseIsoDate(dateString)) return false
|
|
23
|
+
return true
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const handleOnBlur = () => {
|
|
27
|
+
setDateInputValidated(!dateInput)
|
|
28
|
+
const parsedDate = parseIsoDate(dateInput)
|
|
29
|
+
if (parsedDate) {
|
|
30
|
+
setDateInput(formatDate(parsedDate, 'YYYY-MM-DD', { timeZone: 'UTC' }))
|
|
31
|
+
const validateMessage = onValidate(parsedDate)
|
|
32
|
+
!validateMessage && onChange(parsedDate)
|
|
33
|
+
setDateInputValidated(!validateMessage)
|
|
34
|
+
setErrorMessage(validateMessage)
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
setDateInput(formattedInitialDate)
|
|
40
|
+
const validation = onValidate(initialDate)
|
|
41
|
+
setDateInputValidated(!validation)
|
|
42
|
+
setValidateStatus(!validation)
|
|
43
|
+
setErrorMessage(validation)
|
|
44
|
+
}, [initialDate])
|
|
45
|
+
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (dateInput) {
|
|
48
|
+
const isValidDateString = isValidDate(dateInput)
|
|
49
|
+
setValidateStatus(isValidDateString)
|
|
50
|
+
if (!validateDateFormat(dateInput)) setErrorMessage('Supported format is YYYY-MM-DD')
|
|
51
|
+
else if (!parseIsoDate(dateInput)) setErrorMessage('Invalid date')
|
|
52
|
+
else {
|
|
53
|
+
const parsedDate = parseIsoDate(dateInput)
|
|
54
|
+
const validateMessage = onValidate(parsedDate)
|
|
55
|
+
!validateMessage && onChange(parsedDate)
|
|
56
|
+
setDateInputValidated(!validateMessage)
|
|
57
|
+
setErrorMessage(validateMessage)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}, [dateInput])
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<Input
|
|
64
|
+
borderColor={dateInputValidated ? 'sandstone.main' : 'energyRed.main'}
|
|
65
|
+
className="dateInput"
|
|
66
|
+
data-testid="test-date-input"
|
|
67
|
+
errorText={!dateInputValidated && <T size="md">{errorMessage}</T>}
|
|
68
|
+
onBlur={handleOnBlur}
|
|
69
|
+
onChange={e => setDateInput(e.target.value)}
|
|
70
|
+
placeholder="YYYY-MM-DD"
|
|
71
|
+
size="md"
|
|
72
|
+
state={!dateInputValidated && !errorMessage ? 'error' : 'default'}
|
|
73
|
+
value={dateInput}
|
|
74
|
+
{...rest}
|
|
75
|
+
/>
|
|
76
|
+
)
|
|
77
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import React, { useEffect, useRef, useState } from 'react'
|
|
2
|
+
|
|
3
|
+
import Box from '../box'
|
|
4
|
+
import Button, { LineButton } from '../button'
|
|
5
|
+
import Calendar, { DateRange, maxDateTimestamp, minDateTimestamp } from '../calendar'
|
|
6
|
+
import { omitThemingProps, styled, useStyleConfig, vui } from '../core'
|
|
7
|
+
import { cs, useClickOutside } from '../utils'
|
|
8
|
+
import { PickerPanel } from './components/pickerPanel'
|
|
9
|
+
import { DateInput } from './dateInput'
|
|
10
|
+
import { DatePickerProps } from './datePicker.types'
|
|
11
|
+
|
|
12
|
+
const DatePickerPanel = styled(PickerPanel)`
|
|
13
|
+
width: 320px;
|
|
14
|
+
`
|
|
15
|
+
|
|
16
|
+
/** [Beta] Select or input a date. */
|
|
17
|
+
export const DatePicker = vui<'span', DatePickerProps>((props, ref) => {
|
|
18
|
+
const {
|
|
19
|
+
autoOpened,
|
|
20
|
+
boundaries,
|
|
21
|
+
popupPosition = 'left',
|
|
22
|
+
selectedDate: selectedDateProps,
|
|
23
|
+
showClearButton,
|
|
24
|
+
slotBottom,
|
|
25
|
+
slotTop,
|
|
26
|
+
onSelected,
|
|
27
|
+
children,
|
|
28
|
+
className,
|
|
29
|
+
...rest
|
|
30
|
+
} = omitThemingProps(props)
|
|
31
|
+
const styles = useStyleConfig('DatePicker', props)
|
|
32
|
+
|
|
33
|
+
const [selectedDate, setSelectedDate] = useState<any>(selectedDateProps)
|
|
34
|
+
const [isOpen, setIsOpen] = useState(!selectedDate && autoOpened)
|
|
35
|
+
const [isInvalidInputDate, setIsInvalidInputDate] = useState(true)
|
|
36
|
+
const [isInvalidSelectedDate, setIsInvalidSelectedDate] = useState(!selectedDate)
|
|
37
|
+
const initialDateRef = useRef<Date | undefined>(selectedDateProps)
|
|
38
|
+
const buttonRef = useRef<HTMLDivElement>(null)
|
|
39
|
+
const popupRef = useRef<HTMLDivElement>(null)
|
|
40
|
+
const isClearButtonVisible = showClearButton && initialDateRef.current
|
|
41
|
+
|
|
42
|
+
useClickOutside([buttonRef, popupRef], () => setIsOpen(false))
|
|
43
|
+
|
|
44
|
+
const isStartDateInRange = (date: Date) =>
|
|
45
|
+
!!boundaries?.startDate && !!date ? date.getTime() - boundaries.startDate.getTime() >= 0 : true
|
|
46
|
+
|
|
47
|
+
const isEndDateInRange = (date: Date) =>
|
|
48
|
+
!!boundaries?.endDate && !!date ? date.getTime() - boundaries.endDate.getTime() <= 0 : true
|
|
49
|
+
|
|
50
|
+
const isValidDateRange = (date: Date) => {
|
|
51
|
+
const minDateTime = new Date(minDateTimestamp)
|
|
52
|
+
const maxDateTime = new Date(maxDateTimestamp)
|
|
53
|
+
return date >= minDateTime || date <= maxDateTime
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
if (!isOpen) {
|
|
58
|
+
setSelectedDate(selectedDateProps)
|
|
59
|
+
initialDateRef.current = selectedDateProps
|
|
60
|
+
}
|
|
61
|
+
}, [isOpen, selectedDateProps])
|
|
62
|
+
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
setIsInvalidSelectedDate(
|
|
65
|
+
(selectedDate && !isStartDateInRange(selectedDate)) ||
|
|
66
|
+
(selectedDate && !isEndDateInRange(selectedDate)) ||
|
|
67
|
+
(selectedDate && !isValidDateRange(selectedDate)) ||
|
|
68
|
+
!selectedDate
|
|
69
|
+
)
|
|
70
|
+
}, [selectedDate])
|
|
71
|
+
|
|
72
|
+
const onApplyDates = (date?: Date) => {
|
|
73
|
+
onSelected?.(date)
|
|
74
|
+
initialDateRef.current = date
|
|
75
|
+
setIsOpen(false)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const onClear = () => {
|
|
79
|
+
onClose()
|
|
80
|
+
onSelected?.(undefined)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const onClose = () => {
|
|
84
|
+
setSelectedDate(undefined)
|
|
85
|
+
setIsOpen(false)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const onToggle = () => {
|
|
89
|
+
if (isOpen) onClose()
|
|
90
|
+
setIsOpen(!isOpen)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const selectDate = (range: DateRange) => setSelectedDate(range?.startDate)
|
|
94
|
+
|
|
95
|
+
const onDateInputValidate = (date?: Date) => {
|
|
96
|
+
const minDateTime = new Date(minDateTimestamp)
|
|
97
|
+
const maxDateTime = new Date(maxDateTimestamp)
|
|
98
|
+
|
|
99
|
+
if (date) {
|
|
100
|
+
const conditions: [boolean, string][] = [
|
|
101
|
+
[isNaN(date.getTime()), 'Supported format is YYYY-MM-DD'],
|
|
102
|
+
[date < minDateTime, 'Invalid date, the minimum date time is 1753-01-02'],
|
|
103
|
+
[date > maxDateTime, 'Invalid date, the maximum date time is 9000-12-31'],
|
|
104
|
+
[!!boundaries?.startDate && !isStartDateInRange(date), 'Invalid date'],
|
|
105
|
+
[!!boundaries?.endDate && !isEndDateInRange(date), 'Invalid date']
|
|
106
|
+
]
|
|
107
|
+
const [validateErrorPair] = conditions.filter(([result]) => result)
|
|
108
|
+
|
|
109
|
+
if (validateErrorPair) {
|
|
110
|
+
const [_, message] = validateErrorPair
|
|
111
|
+
setIsInvalidInputDate(true)
|
|
112
|
+
return message
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return ''
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return (
|
|
119
|
+
<Box className={cs('vui-datePicker', className)} position="relative" ref={ref} {...styles} {...rest}>
|
|
120
|
+
<Box onClick={onToggle}>{children}</Box>
|
|
121
|
+
{isOpen && (
|
|
122
|
+
<DatePickerPanel popupPosition={popupPosition} ref={popupRef} showPopupBelow>
|
|
123
|
+
{!!slotTop && <Box px={2}>{slotTop}</Box>}
|
|
124
|
+
<Box display="block" mb={0} mt={2} mx={2}>
|
|
125
|
+
<DateInput
|
|
126
|
+
autoFocus
|
|
127
|
+
initialDate={selectedDate}
|
|
128
|
+
onChange={newDate => setSelectedDate(newDate)}
|
|
129
|
+
onValidate={onDateInputValidate}
|
|
130
|
+
setValidateStatus={inValid => setIsInvalidInputDate(!inValid)}
|
|
131
|
+
/>
|
|
132
|
+
</Box>
|
|
133
|
+
<Box mx={2} my={1}>
|
|
134
|
+
<Calendar
|
|
135
|
+
boundaries={boundaries ?? { startDate: undefined, endDate: undefined }}
|
|
136
|
+
fixedNumberOfWeeks
|
|
137
|
+
fontWeight={500}
|
|
138
|
+
minH={310}
|
|
139
|
+
mode="exact"
|
|
140
|
+
onSelectDates={range => selectDate(range)}
|
|
141
|
+
selectedDates={{ startDate: selectedDate, endDate: undefined }}
|
|
142
|
+
w="100%"
|
|
143
|
+
/>
|
|
144
|
+
</Box>
|
|
145
|
+
<Box overflow="unset" pt={0.5}>
|
|
146
|
+
<Box alignItems="center" flex={1} ml="auto" pb={2} px={2}>
|
|
147
|
+
{isClearButtonVisible && (
|
|
148
|
+
<LineButton flex={1} onClick={onClear} size="md">
|
|
149
|
+
Clear
|
|
150
|
+
</LineButton>
|
|
151
|
+
)}
|
|
152
|
+
<Button
|
|
153
|
+
disabled={isInvalidSelectedDate || isInvalidInputDate}
|
|
154
|
+
flex={1}
|
|
155
|
+
ml={isClearButtonVisible ? 1 : 0}
|
|
156
|
+
onClick={() => onApplyDates(selectedDate)}
|
|
157
|
+
size="md"
|
|
158
|
+
>
|
|
159
|
+
Apply
|
|
160
|
+
</Button>
|
|
161
|
+
</Box>
|
|
162
|
+
</Box>
|
|
163
|
+
{!!slotBottom && <Box px={2}>{slotBottom}</Box>}
|
|
164
|
+
</DatePickerPanel>
|
|
165
|
+
)}
|
|
166
|
+
</Box>
|
|
167
|
+
)
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
DatePicker.displayName = 'DatePicker'
|
|
171
|
+
|
|
172
|
+
export default DatePicker
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ReactNode } from 'react'
|
|
2
|
+
|
|
3
|
+
import { BoxProps } from '../box'
|
|
4
|
+
import { DateRange } from '../calendar'
|
|
5
|
+
import { ThemingProps } from '../theme'
|
|
6
|
+
|
|
7
|
+
export type DatePickerPopupPosition = 'left' | 'right'
|
|
8
|
+
|
|
9
|
+
export type DatePickerProps = Omit<BoxProps, 'size' | 'variant'> &
|
|
10
|
+
ThemingProps<'DatePicker'> & {
|
|
11
|
+
/** Auto opened without value, used with dynamic adding of the filter (user clicks on "+ Add filter" button) */
|
|
12
|
+
autoOpened?: boolean
|
|
13
|
+
/** Available date range for the Calendar */
|
|
14
|
+
boundaries?: DateRange
|
|
15
|
+
/** Should the popup be anchored to the left or right of the button */
|
|
16
|
+
popupPosition?: DatePickerPopupPosition
|
|
17
|
+
selectedDate?: Date
|
|
18
|
+
showClearButton?: boolean
|
|
19
|
+
/** Custom content displayed at the bottom of the panel */
|
|
20
|
+
slotBottom?: ReactNode
|
|
21
|
+
/** Custom content displayed at the top of the panel */
|
|
22
|
+
slotTop?: ReactNode
|
|
23
|
+
/** Date selected */
|
|
24
|
+
onSelected?: (date?: Date) => void
|
|
25
|
+
}
|