@navikt/ds-react 7.13.0 → 7.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/cjs/date/{parts/DateWrapper.d.ts → Date.Dialog.d.ts} +3 -3
- package/cjs/date/{parts/DateWrapper.js → Date.Dialog.js} +13 -13
- package/cjs/date/Date.Dialog.js.map +1 -0
- package/{esm/date/parts/DateInput.d.ts → cjs/date/Date.Input.d.ts} +23 -1
- package/cjs/date/{parts/DateInput.js → Date.Input.js} +14 -9
- package/cjs/date/Date.Input.js.map +1 -0
- package/cjs/date/{utils/locale.d.ts → Date.locale.d.ts} +8 -0
- package/cjs/date/{utils/locale.js → Date.locale.js} +7 -4
- package/cjs/date/Date.locale.js.map +1 -0
- package/cjs/date/Date.typeutils.d.ts +14 -0
- package/cjs/date/Date.typeutils.js +15 -0
- package/cjs/date/Date.typeutils.js.map +1 -0
- package/cjs/date/date-utils/calendar-range.d.ts +11 -0
- package/cjs/date/date-utils/calendar-range.js +30 -0
- package/cjs/date/date-utils/calendar-range.js.map +1 -0
- package/cjs/date/date-utils/check-dates.js.map +1 -0
- package/cjs/date/date-utils/clamp-dates.d.ts +19 -0
- package/cjs/date/date-utils/clamp-dates.js +41 -0
- package/cjs/date/date-utils/clamp-dates.js.map +1 -0
- package/cjs/date/{utils → date-utils}/dates-disabled.js +2 -3
- package/cjs/date/date-utils/dates-disabled.js.map +1 -0
- package/cjs/date/date-utils/dropdown-options.d.ts +13 -0
- package/cjs/date/date-utils/dropdown-options.js +45 -0
- package/cjs/date/date-utils/dropdown-options.js.map +1 -0
- package/cjs/date/date-utils/format-date.js.map +1 -0
- package/cjs/date/date-utils/index.d.ts +8 -0
- package/cjs/date/date-utils/index.js +26 -0
- package/cjs/date/date-utils/index.js.map +1 -0
- package/cjs/date/date-utils/is-match.d.ts +3 -0
- package/cjs/date/{utils → date-utils}/is-match.js +4 -4
- package/cjs/date/date-utils/is-match.js.map +1 -0
- package/cjs/date/date-utils/parse-date.js.map +1 -0
- package/cjs/date/datepicker/DatePicker.d.ts +3 -3
- package/cjs/date/datepicker/DatePicker.js +47 -63
- package/cjs/date/datepicker/DatePicker.js.map +1 -1
- package/cjs/date/datepicker/{types.d.ts → DatePicker.types.d.ts} +6 -3
- package/cjs/date/datepicker/{types.js → DatePicker.types.js} +1 -1
- package/cjs/date/datepicker/DatePicker.types.js.map +1 -0
- package/cjs/date/{hooks → datepicker/hooks}/useDatepicker.d.ts +2 -2
- package/cjs/date/{hooks → datepicker/hooks}/useDatepicker.js +18 -17
- package/cjs/date/datepicker/hooks/useDatepicker.js.map +1 -0
- package/cjs/date/{hooks → datepicker/hooks}/useRangeDatepicker.d.ts +3 -3
- package/cjs/date/{hooks → datepicker/hooks}/useRangeDatepicker.js +41 -38
- package/cjs/date/datepicker/hooks/useRangeDatepicker.js.map +1 -0
- package/cjs/date/datepicker/index.d.ts +4 -3
- package/cjs/date/datepicker/index.js +8 -7
- package/cjs/date/datepicker/index.js.map +1 -1
- package/cjs/date/datepicker/parts/DatePicker.DayButton.d.ts +9 -0
- package/cjs/date/datepicker/parts/DatePicker.DayButton.js +70 -0
- package/cjs/date/datepicker/parts/DatePicker.DayButton.js.map +1 -0
- package/cjs/date/datepicker/parts/DatePicker.Months.d.ts +11 -0
- package/cjs/date/datepicker/parts/DatePicker.Months.js +84 -0
- package/cjs/date/datepicker/parts/DatePicker.Months.js.map +1 -0
- package/cjs/date/datepicker/parts/DatePicker.RDP.d.ts +15 -0
- package/cjs/date/datepicker/parts/DatePicker.RDP.js +106 -0
- package/cjs/date/datepicker/parts/DatePicker.RDP.js.map +1 -0
- package/cjs/date/datepicker/{DatePickerStandalone.d.ts → parts/DatePicker.Standalone.d.ts} +1 -1
- package/cjs/date/datepicker/parts/DatePicker.Standalone.js +60 -0
- package/cjs/date/datepicker/parts/DatePicker.Standalone.js.map +1 -0
- package/cjs/date/datepicker/parts/DatePicker.WeekNumber.d.ts +9 -0
- package/cjs/date/datepicker/parts/DatePicker.WeekNumber.js +64 -0
- package/cjs/date/datepicker/parts/DatePicker.WeekNumber.js.map +1 -0
- package/cjs/date/datepicker/parts/DatePicker.WeekRow.d.ts +8 -0
- package/cjs/date/datepicker/parts/{WeekRow.js → DatePicker.WeekRow.js} +9 -17
- package/cjs/date/datepicker/parts/DatePicker.WeekRow.js.map +1 -0
- package/cjs/date/monthpicker/MonthPicker.context.d.ts +21 -0
- package/cjs/date/monthpicker/MonthPicker.context.js +48 -0
- package/cjs/date/monthpicker/MonthPicker.context.js.map +1 -0
- package/cjs/date/monthpicker/MonthPicker.d.ts +3 -3
- package/cjs/date/monthpicker/MonthPicker.js +34 -43
- package/cjs/date/monthpicker/MonthPicker.js.map +1 -1
- package/cjs/date/monthpicker/{types.d.ts → MonthPicker.types.d.ts} +1 -1
- package/cjs/date/monthpicker/{types.js → MonthPicker.types.js} +1 -1
- package/cjs/date/monthpicker/MonthPicker.types.js.map +1 -0
- package/cjs/date/{utils/navigation.d.ts → monthpicker/MonthPicker.util.d.ts} +1 -1
- package/cjs/date/{utils/navigation.js → monthpicker/MonthPicker.util.js} +7 -7
- package/cjs/date/monthpicker/MonthPicker.util.js.map +1 -0
- package/cjs/date/{hooks → monthpicker/hooks}/useMonthPicker.d.ts +2 -2
- package/cjs/date/{hooks → monthpicker/hooks}/useMonthPicker.js +22 -17
- package/cjs/date/monthpicker/hooks/useMonthPicker.js.map +1 -0
- package/cjs/date/monthpicker/index.d.ts +4 -4
- package/cjs/date/monthpicker/index.js +6 -6
- package/cjs/date/monthpicker/index.js.map +1 -1
- package/cjs/date/monthpicker/{MonthButton.js → parts/MonthPicker.Button.js} +10 -10
- package/cjs/date/monthpicker/parts/MonthPicker.Button.js.map +1 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Caption.d.ts +3 -0
- package/cjs/date/monthpicker/{MonthCaption.js → parts/MonthPicker.Caption.js} +18 -18
- package/cjs/date/monthpicker/parts/MonthPicker.Caption.js.map +1 -0
- package/cjs/date/monthpicker/{MonthPickerStandalone.d.ts → parts/MonthPicker.Standalone.d.ts} +1 -2
- package/cjs/date/monthpicker/{MonthPickerStandalone.js → parts/MonthPicker.Standalone.js} +11 -25
- package/cjs/date/monthpicker/parts/MonthPicker.Standalone.js.map +1 -0
- package/cjs/date/monthpicker/parts/MonthPicker.Table.d.ts +3 -0
- package/cjs/date/monthpicker/{MonthSelector.js → parts/MonthPicker.Table.js} +12 -13
- package/cjs/date/monthpicker/parts/MonthPicker.Table.js.map +1 -0
- package/cjs/modal/Modal.js +2 -2
- package/cjs/modal/Modal.js.map +1 -1
- package/cjs/popover/Popover.js +3 -3
- package/cjs/popover/Popover.js.map +1 -1
- package/cjs/tooltip/Tooltip.js +2 -5
- package/cjs/tooltip/Tooltip.js.map +1 -1
- package/esm/date/{parts/DateWrapper.d.ts → Date.Dialog.d.ts} +3 -3
- package/esm/date/{parts/DateWrapper.js → Date.Dialog.js} +11 -10
- package/esm/date/Date.Dialog.js.map +1 -0
- package/{cjs/date/parts/DateInput.d.ts → esm/date/Date.Input.d.ts} +23 -1
- package/esm/date/{parts/DateInput.js → Date.Input.js} +10 -6
- package/esm/date/{parts/DateInput.js.map → Date.Input.js.map} +1 -1
- package/esm/date/{utils/locale.d.ts → Date.locale.d.ts} +8 -0
- package/esm/date/{utils/locale.js → Date.locale.js} +5 -3
- package/esm/date/Date.locale.js.map +1 -0
- package/esm/date/Date.typeutils.d.ts +14 -0
- package/esm/date/Date.typeutils.js +10 -0
- package/esm/date/Date.typeutils.js.map +1 -0
- package/esm/date/date-utils/calendar-range.d.ts +11 -0
- package/esm/date/date-utils/calendar-range.js +27 -0
- package/esm/date/date-utils/calendar-range.js.map +1 -0
- package/esm/date/date-utils/check-dates.js.map +1 -0
- package/esm/date/date-utils/clamp-dates.d.ts +19 -0
- package/esm/date/date-utils/clamp-dates.js +37 -0
- package/esm/date/date-utils/clamp-dates.js.map +1 -0
- package/esm/date/{utils → date-utils}/dates-disabled.js +1 -2
- package/esm/date/date-utils/dates-disabled.js.map +1 -0
- package/esm/date/date-utils/dropdown-options.d.ts +13 -0
- package/esm/date/date-utils/dropdown-options.js +41 -0
- package/esm/date/date-utils/dropdown-options.js.map +1 -0
- package/esm/date/date-utils/format-date.js.map +1 -0
- package/esm/date/date-utils/index.d.ts +8 -0
- package/esm/date/{utils → date-utils}/index.js +3 -4
- package/esm/date/date-utils/index.js.map +1 -0
- package/esm/date/date-utils/is-match.d.ts +3 -0
- package/esm/date/{utils → date-utils}/is-match.js +1 -1
- package/esm/date/date-utils/is-match.js.map +1 -0
- package/esm/date/date-utils/parse-date.js.map +1 -0
- package/esm/date/datepicker/DatePicker.d.ts +3 -3
- package/esm/date/datepicker/DatePicker.js +46 -62
- package/esm/date/datepicker/DatePicker.js.map +1 -1
- package/esm/date/datepicker/{types.d.ts → DatePicker.types.d.ts} +6 -3
- package/esm/date/datepicker/DatePicker.types.js +2 -0
- package/esm/date/datepicker/DatePicker.types.js.map +1 -0
- package/esm/date/{hooks → datepicker/hooks}/useDatepicker.d.ts +2 -2
- package/esm/date/{hooks → datepicker/hooks}/useDatepicker.js +6 -5
- package/esm/date/datepicker/hooks/useDatepicker.js.map +1 -0
- package/esm/date/{hooks → datepicker/hooks}/useRangeDatepicker.d.ts +3 -3
- package/esm/date/{hooks → datepicker/hooks}/useRangeDatepicker.js +16 -13
- package/esm/date/datepicker/hooks/useRangeDatepicker.js.map +1 -0
- package/esm/date/datepicker/index.d.ts +4 -3
- package/esm/date/datepicker/index.js +4 -3
- package/esm/date/datepicker/index.js.map +1 -1
- package/esm/date/datepicker/parts/DatePicker.DayButton.d.ts +9 -0
- package/esm/date/datepicker/parts/DatePicker.DayButton.js +41 -0
- package/esm/date/datepicker/parts/DatePicker.DayButton.js.map +1 -0
- package/esm/date/datepicker/parts/DatePicker.Months.d.ts +11 -0
- package/esm/date/datepicker/parts/DatePicker.Months.js +58 -0
- package/esm/date/datepicker/parts/DatePicker.Months.js.map +1 -0
- package/esm/date/datepicker/parts/DatePicker.RDP.d.ts +15 -0
- package/esm/date/datepicker/parts/DatePicker.RDP.js +77 -0
- package/esm/date/datepicker/parts/DatePicker.RDP.js.map +1 -0
- package/esm/date/datepicker/{DatePickerStandalone.d.ts → parts/DatePicker.Standalone.d.ts} +1 -1
- package/esm/date/datepicker/parts/DatePicker.Standalone.js +31 -0
- package/esm/date/datepicker/parts/DatePicker.Standalone.js.map +1 -0
- package/esm/date/datepicker/parts/DatePicker.WeekNumber.d.ts +9 -0
- package/esm/date/datepicker/parts/DatePicker.WeekNumber.js +35 -0
- package/esm/date/datepicker/parts/DatePicker.WeekNumber.js.map +1 -0
- package/esm/date/datepicker/parts/DatePicker.WeekRow.d.ts +8 -0
- package/esm/date/datepicker/parts/DatePicker.WeekRow.js +22 -0
- package/esm/date/datepicker/parts/DatePicker.WeekRow.js.map +1 -0
- package/esm/date/monthpicker/MonthPicker.context.d.ts +21 -0
- package/esm/date/monthpicker/MonthPicker.context.js +41 -0
- package/esm/date/monthpicker/MonthPicker.context.js.map +1 -0
- package/esm/date/monthpicker/MonthPicker.d.ts +3 -3
- package/esm/date/monthpicker/MonthPicker.js +31 -40
- package/esm/date/monthpicker/MonthPicker.js.map +1 -1
- package/esm/date/monthpicker/{types.d.ts → MonthPicker.types.d.ts} +1 -1
- package/esm/date/monthpicker/MonthPicker.types.js +2 -0
- package/esm/date/monthpicker/MonthPicker.types.js.map +1 -0
- package/esm/date/{utils/navigation.d.ts → monthpicker/MonthPicker.util.d.ts} +1 -1
- package/esm/date/{utils/navigation.js → monthpicker/MonthPicker.util.js} +2 -2
- package/esm/date/monthpicker/MonthPicker.util.js.map +1 -0
- package/esm/date/{hooks → monthpicker/hooks}/useMonthPicker.d.ts +2 -2
- package/esm/date/{hooks → monthpicker/hooks}/useMonthPicker.js +10 -5
- package/esm/date/monthpicker/hooks/useMonthPicker.js.map +1 -0
- package/esm/date/monthpicker/index.d.ts +4 -4
- package/esm/date/monthpicker/index.js +3 -3
- package/esm/date/monthpicker/index.js.map +1 -1
- package/esm/date/monthpicker/{MonthButton.js → parts/MonthPicker.Button.js} +9 -9
- package/esm/date/monthpicker/parts/MonthPicker.Button.js.map +1 -0
- package/esm/date/monthpicker/parts/MonthPicker.Caption.d.ts +3 -0
- package/esm/date/monthpicker/{MonthCaption.js → parts/MonthPicker.Caption.js} +17 -16
- package/esm/date/monthpicker/parts/MonthPicker.Caption.js.map +1 -0
- package/esm/date/monthpicker/{MonthPickerStandalone.d.ts → parts/MonthPicker.Standalone.d.ts} +1 -2
- package/esm/date/monthpicker/parts/MonthPicker.Standalone.js +22 -0
- package/esm/date/monthpicker/parts/MonthPicker.Standalone.js.map +1 -0
- package/esm/date/monthpicker/parts/MonthPicker.Table.d.ts +3 -0
- package/esm/date/monthpicker/{MonthSelector.js → parts/MonthPicker.Table.js} +8 -8
- package/esm/date/monthpicker/parts/MonthPicker.Table.js.map +1 -0
- package/esm/modal/Modal.js +3 -3
- package/esm/modal/Modal.js.map +1 -1
- package/esm/popover/Popover.js +4 -4
- package/esm/popover/Popover.js.map +1 -1
- package/esm/tooltip/Tooltip.js +2 -5
- package/esm/tooltip/Tooltip.js.map +1 -1
- package/package.json +5 -5
- package/src/date/{parts/DateWrapper.tsx → Date.Dialog.tsx} +12 -9
- package/src/date/{parts/DateInput.tsx → Date.Input.tsx} +30 -5
- package/src/date/{utils/locale.ts → Date.locale.ts} +11 -2
- package/src/date/Date.typeutils.ts +32 -0
- package/src/date/date-utils/calendar-range.test.ts +54 -0
- package/src/date/date-utils/calendar-range.ts +46 -0
- package/src/date/date-utils/check-dates.test.ts +49 -0
- package/src/date/date-utils/clamp-dates.test.ts +73 -0
- package/src/date/date-utils/clamp-dates.ts +63 -0
- package/src/date/{utils/__tests__ → date-utils}/dates-disabled.test.ts +1 -1
- package/src/date/{utils → date-utils}/dates-disabled.ts +1 -2
- package/src/date/date-utils/dropdown-options.test.ts +143 -0
- package/src/date/date-utils/dropdown-options.ts +79 -0
- package/src/date/{utils/__tests__ → date-utils}/format-dates.test.ts +2 -2
- package/src/date/date-utils/index.ts +12 -0
- package/src/date/{utils/__tests__ → date-utils}/is-match.test.ts +1 -1
- package/src/date/{utils → date-utils}/is-match.ts +2 -11
- package/src/date/{utils/__tests__ → date-utils}/parse-dates.test.ts +2 -1
- package/src/date/datepicker/DatePicker.tsx +67 -92
- package/src/date/datepicker/{types.ts → DatePicker.types.ts} +10 -4
- package/src/date/{hooks → datepicker/hooks}/useDatepicker.tsx +12 -13
- package/src/date/{hooks → datepicker/hooks}/useRangeDatepicker.test.tsx +1 -1
- package/src/date/{hooks → datepicker/hooks}/useRangeDatepicker.tsx +19 -19
- package/src/date/datepicker/index.ts +4 -5
- package/src/date/datepicker/parts/DatePicker.DayButton.tsx +56 -0
- package/src/date/datepicker/parts/DatePicker.Months.tsx +149 -0
- package/src/date/datepicker/parts/DatePicker.RDP.tsx +175 -0
- package/src/date/datepicker/parts/DatePicker.Standalone.tsx +93 -0
- package/src/date/datepicker/parts/DatePicker.WeekNumber.tsx +86 -0
- package/src/date/datepicker/parts/{WeekRow.tsx → DatePicker.WeekRow.tsx} +20 -21
- package/src/date/monthpicker/MonthPicker.context.tsx +103 -0
- package/src/date/monthpicker/MonthPicker.tsx +63 -68
- package/src/date/monthpicker/{types.ts → MonthPicker.types.ts} +1 -1
- package/src/date/{utils/navigation.ts → monthpicker/MonthPicker.util.ts} +2 -1
- package/src/date/{hooks → monthpicker/hooks}/useMonthPicker.tsx +14 -13
- package/src/date/monthpicker/index.ts +4 -4
- package/src/date/monthpicker/{MonthButton.tsx → parts/MonthPicker.Button.tsx} +21 -10
- package/src/date/monthpicker/{MonthCaption.tsx → parts/MonthPicker.Caption.tsx} +20 -21
- package/src/date/monthpicker/parts/MonthPicker.Standalone.tsx +86 -0
- package/src/date/monthpicker/{MonthSelector.tsx → parts/MonthPicker.Table.tsx} +7 -7
- package/src/modal/Modal.tsx +3 -3
- package/src/popover/Popover.tsx +4 -4
- package/src/tooltip/Tooltip.tsx +2 -6
- package/cjs/date/context/index.d.ts +0 -3
- package/cjs/date/context/index.js +0 -13
- package/cjs/date/context/index.js.map +0 -1
- package/cjs/date/context/useDateInputContext.d.ts +0 -21
- package/cjs/date/context/useDateInputContext.js +0 -14
- package/cjs/date/context/useDateInputContext.js.map +0 -1
- package/cjs/date/context/useDateTranslationContext.d.ts +0 -8
- package/cjs/date/context/useDateTranslationContext.js +0 -7
- package/cjs/date/context/useDateTranslationContext.js.map +0 -1
- package/cjs/date/context/useSharedMonthContext.d.ts +0 -21
- package/cjs/date/context/useSharedMonthContext.js +0 -64
- package/cjs/date/context/useSharedMonthContext.js.map +0 -1
- package/cjs/date/datepicker/DatePickerStandalone.js +0 -86
- package/cjs/date/datepicker/DatePickerStandalone.js.map +0 -1
- package/cjs/date/datepicker/parts/Caption.d.ts +0 -7
- package/cjs/date/datepicker/parts/Caption.js +0 -30
- package/cjs/date/datepicker/parts/Caption.js.map +0 -1
- package/cjs/date/datepicker/parts/DayButton.d.ts +0 -4
- package/cjs/date/datepicker/parts/DayButton.js +0 -43
- package/cjs/date/datepicker/parts/DayButton.js.map +0 -1
- package/cjs/date/datepicker/parts/DropdownCaption.d.ts +0 -7
- package/cjs/date/datepicker/parts/DropdownCaption.js +0 -46
- package/cjs/date/datepicker/parts/DropdownCaption.js.map +0 -1
- package/cjs/date/datepicker/parts/HeadRow.d.ts +0 -10
- package/cjs/date/datepicker/parts/HeadRow.js +0 -36
- package/cjs/date/datepicker/parts/HeadRow.js.map +0 -1
- package/cjs/date/datepicker/parts/Row.d.ts +0 -16
- package/cjs/date/datepicker/parts/Row.js +0 -25
- package/cjs/date/datepicker/parts/Row.js.map +0 -1
- package/cjs/date/datepicker/parts/TableHead.d.ts +0 -5
- package/cjs/date/datepicker/parts/TableHead.js +0 -19
- package/cjs/date/datepicker/parts/TableHead.js.map +0 -1
- package/cjs/date/datepicker/parts/WeekNumber.d.ts +0 -11
- package/cjs/date/datepicker/parts/WeekNumber.js +0 -33
- package/cjs/date/datepicker/parts/WeekNumber.js.map +0 -1
- package/cjs/date/datepicker/parts/WeekRow.d.ts +0 -5
- package/cjs/date/datepicker/parts/WeekRow.js.map +0 -1
- package/cjs/date/datepicker/types.js.map +0 -1
- package/cjs/date/hooks/index.d.ts +0 -6
- package/cjs/date/hooks/index.js +0 -10
- package/cjs/date/hooks/index.js.map +0 -1
- package/cjs/date/hooks/useDatepicker.js.map +0 -1
- package/cjs/date/hooks/useMonthPicker.js.map +0 -1
- package/cjs/date/hooks/useRangeDatepicker.js.map +0 -1
- package/cjs/date/monthpicker/MonthButton.js.map +0 -1
- package/cjs/date/monthpicker/MonthCaption.d.ts +0 -3
- package/cjs/date/monthpicker/MonthCaption.js.map +0 -1
- package/cjs/date/monthpicker/MonthPickerStandalone.js.map +0 -1
- package/cjs/date/monthpicker/MonthSelector.d.ts +0 -3
- package/cjs/date/monthpicker/MonthSelector.js.map +0 -1
- package/cjs/date/monthpicker/types.js.map +0 -1
- package/cjs/date/parts/DateInput.js.map +0 -1
- package/cjs/date/parts/DateWrapper.js.map +0 -1
- package/cjs/date/utils/check-dates.js.map +0 -1
- package/cjs/date/utils/dates-disabled.js.map +0 -1
- package/cjs/date/utils/format-date.js.map +0 -1
- package/cjs/date/utils/get-dates.d.ts +0 -2
- package/cjs/date/utils/get-dates.js +0 -52
- package/cjs/date/utils/get-dates.js.map +0 -1
- package/cjs/date/utils/get-initial-year.d.ts +0 -5
- package/cjs/date/utils/get-initial-year.js +0 -21
- package/cjs/date/utils/get-initial-year.js.map +0 -1
- package/cjs/date/utils/get-month-weeks.d.ts +0 -16
- package/cjs/date/utils/get-month-weeks.js +0 -46
- package/cjs/date/utils/get-month-weeks.js.map +0 -1
- package/cjs/date/utils/index.d.ts +0 -9
- package/cjs/date/utils/index.js +0 -29
- package/cjs/date/utils/index.js.map +0 -1
- package/cjs/date/utils/is-match.d.ts +0 -4
- package/cjs/date/utils/is-match.js.map +0 -1
- package/cjs/date/utils/locale.js.map +0 -1
- package/cjs/date/utils/navigation.js.map +0 -1
- package/cjs/date/utils/parse-date.js.map +0 -1
- package/esm/date/context/index.d.ts +0 -3
- package/esm/date/context/index.js +0 -4
- package/esm/date/context/index.js.map +0 -1
- package/esm/date/context/useDateInputContext.d.ts +0 -21
- package/esm/date/context/useDateInputContext.js +0 -10
- package/esm/date/context/useDateInputContext.js.map +0 -1
- package/esm/date/context/useDateTranslationContext.d.ts +0 -8
- package/esm/date/context/useDateTranslationContext.js +0 -3
- package/esm/date/context/useDateTranslationContext.js.map +0 -1
- package/esm/date/context/useSharedMonthContext.d.ts +0 -21
- package/esm/date/context/useSharedMonthContext.js +0 -36
- package/esm/date/context/useSharedMonthContext.js.map +0 -1
- package/esm/date/datepicker/DatePickerStandalone.js +0 -57
- package/esm/date/datepicker/DatePickerStandalone.js.map +0 -1
- package/esm/date/datepicker/parts/Caption.d.ts +0 -7
- package/esm/date/datepicker/parts/Caption.js +0 -23
- package/esm/date/datepicker/parts/Caption.js.map +0 -1
- package/esm/date/datepicker/parts/DayButton.d.ts +0 -4
- package/esm/date/datepicker/parts/DayButton.js +0 -18
- package/esm/date/datepicker/parts/DayButton.js.map +0 -1
- package/esm/date/datepicker/parts/DropdownCaption.d.ts +0 -7
- package/esm/date/datepicker/parts/DropdownCaption.js +0 -39
- package/esm/date/datepicker/parts/DropdownCaption.js.map +0 -1
- package/esm/date/datepicker/parts/HeadRow.d.ts +0 -10
- package/esm/date/datepicker/parts/HeadRow.js +0 -29
- package/esm/date/datepicker/parts/HeadRow.js.map +0 -1
- package/esm/date/datepicker/parts/Row.d.ts +0 -16
- package/esm/date/datepicker/parts/Row.js +0 -20
- package/esm/date/datepicker/parts/Row.js.map +0 -1
- package/esm/date/datepicker/parts/TableHead.d.ts +0 -5
- package/esm/date/datepicker/parts/TableHead.js +0 -14
- package/esm/date/datepicker/parts/TableHead.js.map +0 -1
- package/esm/date/datepicker/parts/WeekNumber.d.ts +0 -11
- package/esm/date/datepicker/parts/WeekNumber.js +0 -28
- package/esm/date/datepicker/parts/WeekNumber.js.map +0 -1
- package/esm/date/datepicker/parts/WeekRow.d.ts +0 -5
- package/esm/date/datepicker/parts/WeekRow.js +0 -31
- package/esm/date/datepicker/parts/WeekRow.js.map +0 -1
- package/esm/date/datepicker/types.js +0 -2
- package/esm/date/datepicker/types.js.map +0 -1
- package/esm/date/hooks/index.d.ts +0 -6
- package/esm/date/hooks/index.js +0 -4
- package/esm/date/hooks/index.js.map +0 -1
- package/esm/date/hooks/useDatepicker.js.map +0 -1
- package/esm/date/hooks/useMonthPicker.js.map +0 -1
- package/esm/date/hooks/useRangeDatepicker.js.map +0 -1
- package/esm/date/monthpicker/MonthButton.js.map +0 -1
- package/esm/date/monthpicker/MonthCaption.d.ts +0 -3
- package/esm/date/monthpicker/MonthCaption.js.map +0 -1
- package/esm/date/monthpicker/MonthPickerStandalone.js +0 -36
- package/esm/date/monthpicker/MonthPickerStandalone.js.map +0 -1
- package/esm/date/monthpicker/MonthSelector.d.ts +0 -3
- package/esm/date/monthpicker/MonthSelector.js.map +0 -1
- package/esm/date/monthpicker/types.js +0 -2
- package/esm/date/monthpicker/types.js.map +0 -1
- package/esm/date/parts/DateWrapper.js.map +0 -1
- package/esm/date/utils/check-dates.js.map +0 -1
- package/esm/date/utils/dates-disabled.js.map +0 -1
- package/esm/date/utils/format-date.js.map +0 -1
- package/esm/date/utils/get-dates.d.ts +0 -2
- package/esm/date/utils/get-dates.js +0 -47
- package/esm/date/utils/get-dates.js.map +0 -1
- package/esm/date/utils/get-initial-year.d.ts +0 -5
- package/esm/date/utils/get-initial-year.js +0 -18
- package/esm/date/utils/get-initial-year.js.map +0 -1
- package/esm/date/utils/get-month-weeks.d.ts +0 -16
- package/esm/date/utils/get-month-weeks.js +0 -42
- package/esm/date/utils/get-month-weeks.js.map +0 -1
- package/esm/date/utils/index.d.ts +0 -9
- package/esm/date/utils/index.js.map +0 -1
- package/esm/date/utils/is-match.d.ts +0 -4
- package/esm/date/utils/is-match.js.map +0 -1
- package/esm/date/utils/locale.js.map +0 -1
- package/esm/date/utils/navigation.js.map +0 -1
- package/esm/date/utils/parse-date.js.map +0 -1
- package/src/date/context/index.ts +0 -9
- package/src/date/context/useDateInputContext.tsx +0 -34
- package/src/date/context/useDateTranslationContext.ts +0 -9
- package/src/date/context/useSharedMonthContext.tsx +0 -68
- package/src/date/datepicker/DatePickerStandalone.tsx +0 -136
- package/src/date/datepicker/datepicker.test.tsx +0 -28
- package/src/date/datepicker/parts/Caption.tsx +0 -54
- package/src/date/datepicker/parts/DayButton.tsx +0 -32
- package/src/date/datepicker/parts/DropdownCaption.tsx +0 -110
- package/src/date/datepicker/parts/HeadRow.tsx +0 -56
- package/src/date/datepicker/parts/Row.tsx +0 -48
- package/src/date/datepicker/parts/TableHead.tsx +0 -17
- package/src/date/datepicker/parts/WeekNumber.tsx +0 -75
- package/src/date/hooks/index.ts +0 -6
- package/src/date/monthpicker/MonthPickerStandalone.tsx +0 -102
- package/src/date/utils/__tests__/check-dates.test.ts +0 -22
- package/src/date/utils/__tests__/get-dates.test.ts +0 -121
- package/src/date/utils/__tests__/get-initial-year.test.ts +0 -83
- package/src/date/utils/__tests__/get-month-weeks.test.ts +0 -116
- package/src/date/utils/get-dates.ts +0 -60
- package/src/date/utils/get-initial-year.ts +0 -25
- package/src/date/utils/get-month-weeks.ts +0 -93
- package/src/date/utils/index.ts +0 -18
- /package/cjs/date/{utils → date-utils}/check-dates.d.ts +0 -0
- /package/cjs/date/{utils → date-utils}/check-dates.js +0 -0
- /package/cjs/date/{utils → date-utils}/dates-disabled.d.ts +0 -0
- /package/cjs/date/{utils → date-utils}/format-date.d.ts +0 -0
- /package/cjs/date/{utils → date-utils}/format-date.js +0 -0
- /package/cjs/date/{utils → date-utils}/parse-date.d.ts +0 -0
- /package/cjs/date/{utils → date-utils}/parse-date.js +0 -0
- /package/cjs/date/monthpicker/{MonthButton.d.ts → parts/MonthPicker.Button.d.ts} +0 -0
- /package/esm/date/{utils → date-utils}/check-dates.d.ts +0 -0
- /package/esm/date/{utils → date-utils}/check-dates.js +0 -0
- /package/esm/date/{utils → date-utils}/dates-disabled.d.ts +0 -0
- /package/esm/date/{utils → date-utils}/format-date.d.ts +0 -0
- /package/esm/date/{utils → date-utils}/format-date.js +0 -0
- /package/esm/date/{utils → date-utils}/parse-date.d.ts +0 -0
- /package/esm/date/{utils → date-utils}/parse-date.js +0 -0
- /package/esm/date/monthpicker/{MonthButton.d.ts → parts/MonthPicker.Button.d.ts} +0 -0
- /package/src/date/{utils → date-utils}/check-dates.ts +0 -0
- /package/src/date/{utils → date-utils}/format-date.ts +0 -0
- /package/src/date/{utils → date-utils}/parse-date.ts +0 -0
|
@@ -1,11 +1,36 @@
|
|
|
1
1
|
import cl from "clsx";
|
|
2
2
|
import React, { InputHTMLAttributes, forwardRef, useRef } from "react";
|
|
3
3
|
import { CalendarIcon } from "@navikt/aksel-icons";
|
|
4
|
-
import { ReadOnlyIcon } from "
|
|
5
|
-
import { FormFieldProps, useFormField } from "
|
|
6
|
-
import { BodyShort, ErrorMessage, Label } from "
|
|
7
|
-
import { omit } from "
|
|
8
|
-
import {
|
|
4
|
+
import { ReadOnlyIcon } from "../form/ReadOnlyIcon";
|
|
5
|
+
import { FormFieldProps, useFormField } from "../form/useFormField";
|
|
6
|
+
import { BodyShort, ErrorMessage, Label } from "../typography";
|
|
7
|
+
import { omit } from "../util";
|
|
8
|
+
import { createContext } from "../util/create-context";
|
|
9
|
+
import { useDateTranslationContext } from "./Date.locale";
|
|
10
|
+
|
|
11
|
+
interface DateInputContextProps {
|
|
12
|
+
/**
|
|
13
|
+
* Open state for popover
|
|
14
|
+
*/
|
|
15
|
+
open: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Callback for onOpen toggle
|
|
18
|
+
*/
|
|
19
|
+
onOpen: () => void;
|
|
20
|
+
/**
|
|
21
|
+
* Aria-connected ID
|
|
22
|
+
*/
|
|
23
|
+
ariaId?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Flag for enabled-check
|
|
26
|
+
*/
|
|
27
|
+
defined: boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const [DateInputContextProvider, useDateInputContext] =
|
|
31
|
+
createContext<DateInputContextProps>({
|
|
32
|
+
errorMessage: "useDateInputContext must be used with DateInputContext",
|
|
33
|
+
});
|
|
9
34
|
|
|
10
35
|
export interface DateInputProps
|
|
11
36
|
extends FormFieldProps,
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { enGB, nb, nn } from "date-fns/locale";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import { createContext } from "../util/create-context";
|
|
3
|
+
import { TFunction } from "../util/i18n/i18n.types";
|
|
4
|
+
import en_translations from "../util/i18n/locales/en";
|
|
5
|
+
import nn_translations from "../util/i18n/locales/nn";
|
|
4
6
|
|
|
5
7
|
/** @private */
|
|
6
8
|
export const getLocaleFromString = (locale: "nb" | "nn" | "en" = "nb") => {
|
|
@@ -45,3 +47,10 @@ export const getGlobalTranslations = (locale: string | undefined) => {
|
|
|
45
47
|
return undefined;
|
|
46
48
|
}
|
|
47
49
|
};
|
|
50
|
+
|
|
51
|
+
interface DateTranslationContextProps {
|
|
52
|
+
translate: TFunction<"DatePicker">;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export const [DateTranslationContextProvider, useDateTranslationContext] =
|
|
56
|
+
createContext<DateTranslationContextProps>();
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type DateRange = {
|
|
2
|
+
from: Date | undefined;
|
|
3
|
+
to?: Date | undefined;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export type DateBefore = {
|
|
7
|
+
before: Date;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export type DateAfter = {
|
|
11
|
+
after: Date;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export function isDateAfterType(value: unknown): value is DateAfter {
|
|
15
|
+
return Boolean(value && typeof value === "object" && "after" in value);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function isDateBeforeType(value: unknown): value is DateBefore {
|
|
19
|
+
return Boolean(value && typeof value === "object" && "before" in value);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function isDateRange(value: unknown): value is DateRange {
|
|
23
|
+
return Boolean(value && typeof value === "object" && "from" in value);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type Matcher =
|
|
27
|
+
| ((date: Date) => boolean)
|
|
28
|
+
| Date
|
|
29
|
+
| Date[]
|
|
30
|
+
| DateRange
|
|
31
|
+
| DateBefore
|
|
32
|
+
| DateAfter;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {
|
|
2
|
+
addYears,
|
|
3
|
+
endOfMonth,
|
|
4
|
+
endOfYear,
|
|
5
|
+
startOfDay,
|
|
6
|
+
startOfMonth,
|
|
7
|
+
startOfYear,
|
|
8
|
+
} from "date-fns";
|
|
9
|
+
import { describe, expect, test } from "vitest";
|
|
10
|
+
import { calendarRange } from "./calendar-range";
|
|
11
|
+
|
|
12
|
+
describe("calendarRange", () => {
|
|
13
|
+
test("should return start and end of the given months", () => {
|
|
14
|
+
const startMonth = new Date(2023, 0, 15);
|
|
15
|
+
const endMonth = new Date(2023, 11, 15);
|
|
16
|
+
const result = calendarRange({ startMonth, endMonth });
|
|
17
|
+
|
|
18
|
+
expect(result[0]).toEqual(startOfDay(startOfMonth(startMonth)));
|
|
19
|
+
expect(result[1]).toEqual(startOfDay(endOfMonth(endMonth)));
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test("should return start of the year 100 years ago and end of the current year if captionLayout is dropdown", () => {
|
|
23
|
+
const today = new Date(2023, 6, 15);
|
|
24
|
+
const result = calendarRange({ captionLayout: "dropdown", today });
|
|
25
|
+
|
|
26
|
+
expect(result[0]).toEqual(startOfDay(startOfYear(addYears(today, -100))));
|
|
27
|
+
expect(result[1]).toEqual(startOfDay(endOfYear(today)));
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("should return undefined if no startMonth and endMonth are provided", () => {
|
|
31
|
+
const today = new Date(2023, 6, 15);
|
|
32
|
+
const result = calendarRange({ today });
|
|
33
|
+
|
|
34
|
+
expect(result[0]).toBeUndefined();
|
|
35
|
+
expect(result[1]).toBeUndefined();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test("should handle undefined today date", () => {
|
|
39
|
+
const result = calendarRange({ captionLayout: "dropdown" });
|
|
40
|
+
|
|
41
|
+
const today = new Date();
|
|
42
|
+
expect(result[0]).toEqual(startOfDay(startOfYear(addYears(today, -100))));
|
|
43
|
+
expect(result[1]).toEqual(startOfDay(endOfYear(today)));
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test("should handle undefined captionLayout", () => {
|
|
47
|
+
const startMonth = new Date(2023, 0, 15);
|
|
48
|
+
const endMonth = new Date(2023, 11, 15);
|
|
49
|
+
const result = calendarRange({ startMonth, endMonth });
|
|
50
|
+
|
|
51
|
+
expect(result[0]).toEqual(startOfDay(startOfMonth(startMonth)));
|
|
52
|
+
expect(result[1]).toEqual(startOfDay(endOfMonth(endMonth)));
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {
|
|
2
|
+
addYears,
|
|
3
|
+
endOfMonth,
|
|
4
|
+
endOfYear,
|
|
5
|
+
startOfDay,
|
|
6
|
+
startOfMonth,
|
|
7
|
+
startOfYear,
|
|
8
|
+
} from "date-fns";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Generates the min and max-dates possible to show and navigate to in the calendar.
|
|
12
|
+
* In the cases there is not a startMonth or endMonth, and layout is "label" no min or max dates are set.
|
|
13
|
+
* @returns Return the start and end months for the calendar navigation.
|
|
14
|
+
*/
|
|
15
|
+
export function calendarRange({
|
|
16
|
+
captionLayout,
|
|
17
|
+
startMonth,
|
|
18
|
+
endMonth,
|
|
19
|
+
today,
|
|
20
|
+
}: {
|
|
21
|
+
captionLayout?: "label" | "dropdown";
|
|
22
|
+
startMonth?: Date;
|
|
23
|
+
endMonth?: Date;
|
|
24
|
+
today?: Date;
|
|
25
|
+
}) {
|
|
26
|
+
const hasYearDropdown = captionLayout === "dropdown";
|
|
27
|
+
|
|
28
|
+
const todayDate = today ?? new Date();
|
|
29
|
+
|
|
30
|
+
if (startMonth) {
|
|
31
|
+
startMonth = startOfMonth(startMonth);
|
|
32
|
+
} else if (!startMonth && hasYearDropdown) {
|
|
33
|
+
startMonth = startOfYear(addYears(todayDate, -100));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (endMonth) {
|
|
37
|
+
endMonth = endOfMonth(endMonth);
|
|
38
|
+
} else if (!endMonth && hasYearDropdown) {
|
|
39
|
+
endMonth = endOfYear(todayDate);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return [
|
|
43
|
+
startMonth ? startOfDay(startMonth) : startMonth,
|
|
44
|
+
endMonth ? startOfDay(endMonth) : endMonth,
|
|
45
|
+
];
|
|
46
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { setYear } from "date-fns";
|
|
2
|
+
import { describe, expect, test } from "vitest";
|
|
3
|
+
import { dateIsInCurrentMonth, isValidDate } from "./check-dates";
|
|
4
|
+
|
|
5
|
+
describe("dateIsInCurrentMonth", () => {
|
|
6
|
+
test("should return true if the date is in the same month and year as the date to compare", () => {
|
|
7
|
+
const date = new Date();
|
|
8
|
+
const dateToCompare = new Date();
|
|
9
|
+
expect(dateIsInCurrentMonth(date, dateToCompare)).toBe(true);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test("should return false if the date is not in the same month as the date to compare", () => {
|
|
13
|
+
const date = new Date();
|
|
14
|
+
const dateToCompare = new Date(2023, 9, 1); // October 1, 2023
|
|
15
|
+
expect(dateIsInCurrentMonth(date, dateToCompare)).toBe(false);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
test("should return false if the date is in the same month but different year as the date to compare", () => {
|
|
19
|
+
const date = new Date();
|
|
20
|
+
const dateToCompare = new Date();
|
|
21
|
+
expect(
|
|
22
|
+
dateIsInCurrentMonth(
|
|
23
|
+
date,
|
|
24
|
+
setYear(dateToCompare, dateToCompare.getFullYear() + 1),
|
|
25
|
+
),
|
|
26
|
+
).toBe(false);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
describe("isValidDate", () => {
|
|
31
|
+
test("should return true for a valid date", () => {
|
|
32
|
+
const date = new Date(2023, 9, 15); // October 15, 2023
|
|
33
|
+
expect(isValidDate(date)).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("should return false for an invalid date", () => {
|
|
37
|
+
const date = new Date("invalid date");
|
|
38
|
+
expect(isValidDate(date)).toBe(false);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test("should return false for a date with year less than 1000", () => {
|
|
42
|
+
const date = new Date(999, 9, 15); // October 15, 999
|
|
43
|
+
expect(isValidDate(date)).toBe(false);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test("should return false for undefined", () => {
|
|
47
|
+
expect(isValidDate(undefined)).toBe(false);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { startOfMonth, startOfYear } from "date-fns";
|
|
2
|
+
import { describe, expect, test } from "vitest";
|
|
3
|
+
import { clampDisplayMonth, clampDisplayYear } from "./clamp-dates";
|
|
4
|
+
|
|
5
|
+
describe("clampDisplayMonth", () => {
|
|
6
|
+
test("should return undefined if month is not provided", () => {
|
|
7
|
+
expect(
|
|
8
|
+
clampDisplayMonth({ start: new Date(), end: new Date() }),
|
|
9
|
+
).toBeUndefined();
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test("should return the start of the month if month is before start", () => {
|
|
13
|
+
const start = new Date(2023, 5, 1);
|
|
14
|
+
const month = new Date(2023, 4, 1);
|
|
15
|
+
expect(clampDisplayMonth({ month, start, end: new Date() })).toEqual(
|
|
16
|
+
startOfMonth(start),
|
|
17
|
+
);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test("should return the start of end month if month is after end", () => {
|
|
21
|
+
const end = new Date(2023, 5, 1);
|
|
22
|
+
const month = new Date(2023, 6, 1);
|
|
23
|
+
expect(clampDisplayMonth({ month, start: new Date(), end })).toEqual(
|
|
24
|
+
startOfMonth(end),
|
|
25
|
+
);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test("should return the start of the month if month is within range", () => {
|
|
29
|
+
const month = new Date(2023, 5, 1);
|
|
30
|
+
expect(
|
|
31
|
+
clampDisplayMonth({
|
|
32
|
+
month,
|
|
33
|
+
start: new Date(2023, 4, 1),
|
|
34
|
+
end: new Date(2023, 6, 1),
|
|
35
|
+
}),
|
|
36
|
+
).toEqual(startOfMonth(month));
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe("clampDisplayYear", () => {
|
|
41
|
+
test("should return undefined if month is not provided", () => {
|
|
42
|
+
expect(
|
|
43
|
+
clampDisplayYear({ start: new Date(), end: new Date() }),
|
|
44
|
+
).toBeUndefined();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test("should return the start of the year if month is before start year", () => {
|
|
48
|
+
const start = new Date(2023, 0, 1);
|
|
49
|
+
const month = new Date(2022, 11, 1);
|
|
50
|
+
expect(clampDisplayYear({ month, start, end: new Date() })).toEqual(
|
|
51
|
+
startOfYear(start),
|
|
52
|
+
);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test("should return the start of the year if month is after end year", () => {
|
|
56
|
+
const end = new Date(2023, 0, 1);
|
|
57
|
+
const month = new Date(2024, 0, 1);
|
|
58
|
+
expect(clampDisplayYear({ month, start: new Date(), end })).toEqual(
|
|
59
|
+
startOfYear(end),
|
|
60
|
+
);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test("should return the start of the year if month is within range", () => {
|
|
64
|
+
const month = new Date(2023, 5, 1);
|
|
65
|
+
expect(
|
|
66
|
+
clampDisplayYear({
|
|
67
|
+
month,
|
|
68
|
+
start: new Date(2022, 0, 1),
|
|
69
|
+
end: new Date(2024, 0, 1),
|
|
70
|
+
}),
|
|
71
|
+
).toEqual(startOfYear(month));
|
|
72
|
+
});
|
|
73
|
+
});
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { isAfter, isBefore, startOfMonth, startOfYear } from "date-fns";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Makes sure the month is within the min and max daterange to avoid showing disabled months
|
|
5
|
+
* @note We do not warn the user if start > end now
|
|
6
|
+
*/
|
|
7
|
+
const clampDisplayMonth = ({
|
|
8
|
+
month,
|
|
9
|
+
start,
|
|
10
|
+
end,
|
|
11
|
+
}: {
|
|
12
|
+
month?: Date;
|
|
13
|
+
start?: Date;
|
|
14
|
+
end?: Date;
|
|
15
|
+
}): Date | undefined => {
|
|
16
|
+
if (!month) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let monthToShow = month;
|
|
21
|
+
|
|
22
|
+
if (start && isBefore(monthToShow, start)) {
|
|
23
|
+
monthToShow = start;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (end && isAfter(monthToShow, end)) {
|
|
27
|
+
monthToShow = end;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return startOfMonth(monthToShow);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Makes sure the month is within the min and max daterange to avoid showing disabled months
|
|
35
|
+
* @note We do not warn the user if start > end now
|
|
36
|
+
*/
|
|
37
|
+
const clampDisplayYear = ({
|
|
38
|
+
month,
|
|
39
|
+
start,
|
|
40
|
+
end,
|
|
41
|
+
}: {
|
|
42
|
+
month?: Date;
|
|
43
|
+
start?: Date;
|
|
44
|
+
end?: Date;
|
|
45
|
+
}): Date | undefined => {
|
|
46
|
+
if (!month) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
let monthToShow = month;
|
|
51
|
+
|
|
52
|
+
if (start && monthToShow.getFullYear() < start.getFullYear()) {
|
|
53
|
+
monthToShow = start;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (end && monthToShow.getFullYear() > end.getFullYear()) {
|
|
57
|
+
monthToShow = end;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return startOfYear(monthToShow);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export { clampDisplayYear, clampDisplayMonth };
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { nb } from "date-fns/locale";
|
|
2
|
+
import { describe, expect, test } from "vitest";
|
|
3
|
+
import { getMonthOptions, getYearOptions } from "./dropdown-options";
|
|
4
|
+
|
|
5
|
+
describe("getYearOptions", () => {
|
|
6
|
+
test("should return undefined if navStart is undefined", () => {
|
|
7
|
+
const result = getYearOptions(undefined, new Date(), nb);
|
|
8
|
+
expect(result).toBeUndefined();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test("should return undefined if navEnd is undefined", () => {
|
|
12
|
+
const result = getYearOptions(new Date(), undefined, nb);
|
|
13
|
+
expect(result).toBeUndefined();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test("should return the correct year options within the interval", () => {
|
|
17
|
+
const navStart = new Date(2020, 0, 1); // Januar 1, 2020
|
|
18
|
+
const navEnd = new Date(2022, 11, 31); // Desember 31, 2022
|
|
19
|
+
const result = getYearOptions(navStart, navEnd, nb);
|
|
20
|
+
|
|
21
|
+
const expected = [
|
|
22
|
+
{ value: 2020, label: "2020", disabled: false },
|
|
23
|
+
{ value: 2021, label: "2021", disabled: false },
|
|
24
|
+
{ value: 2022, label: "2022", disabled: false },
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
expect(result).toEqual(expected);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("should return the correct year options for a single year", () => {
|
|
31
|
+
const navStart = new Date(2021, 0, 1); // Januar 1, 2021
|
|
32
|
+
const navEnd = new Date(2021, 11, 31); // Desember 31, 2021
|
|
33
|
+
const result = getYearOptions(navStart, navEnd, nb);
|
|
34
|
+
|
|
35
|
+
const expected = [{ value: 2021, label: "2021", disabled: false }];
|
|
36
|
+
|
|
37
|
+
expect(result).toEqual(expected);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test("should return the correct year options when navStart and navEnd are the same date", () => {
|
|
41
|
+
const navStart = new Date(2021, 0, 1); // Januar 1, 2021
|
|
42
|
+
const navEnd = new Date(2021, 0, 1); // Januar 1, 2021
|
|
43
|
+
const result = getYearOptions(navStart, navEnd, nb);
|
|
44
|
+
|
|
45
|
+
const expected = [{ value: 2021, label: "2021", disabled: false }];
|
|
46
|
+
|
|
47
|
+
expect(result).toEqual(expected);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
describe("getMonthOptions", () => {
|
|
52
|
+
test("should return the correct month options for the given year", () => {
|
|
53
|
+
const displayMonth = new Date(2021, 0, 1); // Januar 1, 2021
|
|
54
|
+
const result = getMonthOptions(displayMonth, undefined, undefined, nb);
|
|
55
|
+
|
|
56
|
+
const expected = [
|
|
57
|
+
{ value: 0, label: "januar", disabled: false },
|
|
58
|
+
{ value: 1, label: "februar", disabled: false },
|
|
59
|
+
{ value: 2, label: "mars", disabled: false },
|
|
60
|
+
{ value: 3, label: "april", disabled: false },
|
|
61
|
+
{ value: 4, label: "mai", disabled: false },
|
|
62
|
+
{ value: 5, label: "juni", disabled: false },
|
|
63
|
+
{ value: 6, label: "juli", disabled: false },
|
|
64
|
+
{ value: 7, label: "august", disabled: false },
|
|
65
|
+
{ value: 8, label: "september", disabled: false },
|
|
66
|
+
{ value: 9, label: "oktober", disabled: false },
|
|
67
|
+
{ value: 10, label: "november", disabled: false },
|
|
68
|
+
{ value: 11, label: "desember", disabled: false },
|
|
69
|
+
];
|
|
70
|
+
|
|
71
|
+
expect(result).toEqual(expected);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
test("should disable months before navStart", () => {
|
|
75
|
+
const displayMonth = new Date(2021, 0, 1); // Januar 1, 2021
|
|
76
|
+
const navStart = new Date(2021, 5, 1); // Juni 1, 2021
|
|
77
|
+
const result = getMonthOptions(displayMonth, navStart, undefined, nb);
|
|
78
|
+
|
|
79
|
+
const expected = [
|
|
80
|
+
{ value: 0, label: "januar", disabled: true },
|
|
81
|
+
{ value: 1, label: "februar", disabled: true },
|
|
82
|
+
{ value: 2, label: "mars", disabled: true },
|
|
83
|
+
{ value: 3, label: "april", disabled: true },
|
|
84
|
+
{ value: 4, label: "mai", disabled: true },
|
|
85
|
+
{ value: 5, label: "juni", disabled: false },
|
|
86
|
+
{ value: 6, label: "juli", disabled: false },
|
|
87
|
+
{ value: 7, label: "august", disabled: false },
|
|
88
|
+
{ value: 8, label: "september", disabled: false },
|
|
89
|
+
{ value: 9, label: "oktober", disabled: false },
|
|
90
|
+
{ value: 10, label: "november", disabled: false },
|
|
91
|
+
{ value: 11, label: "desember", disabled: false },
|
|
92
|
+
];
|
|
93
|
+
|
|
94
|
+
expect(result).toEqual(expected);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test("should disable months after navEnd", () => {
|
|
98
|
+
const displayMonth = new Date(2021, 0, 1); // Januar 1, 2021
|
|
99
|
+
const navEnd = new Date(2021, 5, 1); // Juni 1, 2021
|
|
100
|
+
const result = getMonthOptions(displayMonth, undefined, navEnd, nb);
|
|
101
|
+
|
|
102
|
+
const expected = [
|
|
103
|
+
{ value: 0, label: "januar", disabled: false },
|
|
104
|
+
{ value: 1, label: "februar", disabled: false },
|
|
105
|
+
{ value: 2, label: "mars", disabled: false },
|
|
106
|
+
{ value: 3, label: "april", disabled: false },
|
|
107
|
+
{ value: 4, label: "mai", disabled: false },
|
|
108
|
+
{ value: 5, label: "juni", disabled: false },
|
|
109
|
+
{ value: 6, label: "juli", disabled: true },
|
|
110
|
+
{ value: 7, label: "august", disabled: true },
|
|
111
|
+
{ value: 8, label: "september", disabled: true },
|
|
112
|
+
{ value: 9, label: "oktober", disabled: true },
|
|
113
|
+
{ value: 10, label: "november", disabled: true },
|
|
114
|
+
{ value: 11, label: "desember", disabled: true },
|
|
115
|
+
];
|
|
116
|
+
|
|
117
|
+
expect(result).toEqual(expected);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
test("should disable months before navStart and after navEnd", () => {
|
|
121
|
+
const displayMonth = new Date(2021, 0, 1); // Januar 1, 2021
|
|
122
|
+
const navStart = new Date(2021, 3, 1); // April 1, 2021
|
|
123
|
+
const navEnd = new Date(2021, 8, 1); // September 1, 2021
|
|
124
|
+
const result = getMonthOptions(displayMonth, navStart, navEnd, nb);
|
|
125
|
+
|
|
126
|
+
const expected = [
|
|
127
|
+
{ value: 0, label: "januar", disabled: true },
|
|
128
|
+
{ value: 1, label: "februar", disabled: true },
|
|
129
|
+
{ value: 2, label: "mars", disabled: true },
|
|
130
|
+
{ value: 3, label: "april", disabled: false },
|
|
131
|
+
{ value: 4, label: "mai", disabled: false },
|
|
132
|
+
{ value: 5, label: "juni", disabled: false },
|
|
133
|
+
{ value: 6, label: "juli", disabled: false },
|
|
134
|
+
{ value: 7, label: "august", disabled: false },
|
|
135
|
+
{ value: 8, label: "september", disabled: false },
|
|
136
|
+
{ value: 9, label: "oktober", disabled: true },
|
|
137
|
+
{ value: 10, label: "november", disabled: true },
|
|
138
|
+
{ value: 11, label: "desember", disabled: true },
|
|
139
|
+
];
|
|
140
|
+
|
|
141
|
+
expect(result).toEqual(expected);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Locale,
|
|
3
|
+
addYears,
|
|
4
|
+
eachMonthOfInterval,
|
|
5
|
+
endOfYear,
|
|
6
|
+
format,
|
|
7
|
+
getMonth,
|
|
8
|
+
getYear,
|
|
9
|
+
isBefore,
|
|
10
|
+
isSameYear,
|
|
11
|
+
startOfMonth,
|
|
12
|
+
startOfYear,
|
|
13
|
+
} from "date-fns";
|
|
14
|
+
|
|
15
|
+
/** Return the months to show in the dropdown. */
|
|
16
|
+
export function getMonthOptions(
|
|
17
|
+
displayMonth: Date,
|
|
18
|
+
navStart: Date | undefined,
|
|
19
|
+
navEnd: Date | undefined,
|
|
20
|
+
locale: Locale,
|
|
21
|
+
):
|
|
22
|
+
| {
|
|
23
|
+
value: number;
|
|
24
|
+
label: string;
|
|
25
|
+
disabled: boolean;
|
|
26
|
+
}[]
|
|
27
|
+
| undefined {
|
|
28
|
+
const months = eachMonthOfInterval({
|
|
29
|
+
start: startOfYear(displayMonth),
|
|
30
|
+
end: endOfYear(displayMonth),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const options = months.map((month) => {
|
|
34
|
+
const label = format(month, "LLLL", { locale });
|
|
35
|
+
const value = getMonth(month);
|
|
36
|
+
const disabled =
|
|
37
|
+
(navStart && month < startOfMonth(navStart)) ||
|
|
38
|
+
(navEnd && month > startOfMonth(navEnd)) ||
|
|
39
|
+
false;
|
|
40
|
+
return { value, label, disabled };
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return options;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Return the years to show in the dropdown. */
|
|
47
|
+
export function getYearOptions(
|
|
48
|
+
navStart: Date | undefined,
|
|
49
|
+
navEnd: Date | undefined,
|
|
50
|
+
locale: Locale,
|
|
51
|
+
):
|
|
52
|
+
| {
|
|
53
|
+
value: number;
|
|
54
|
+
label: string;
|
|
55
|
+
disabled: boolean;
|
|
56
|
+
}[]
|
|
57
|
+
| undefined {
|
|
58
|
+
if (!navStart) return undefined;
|
|
59
|
+
if (!navEnd) return undefined;
|
|
60
|
+
|
|
61
|
+
const firstNavYear = startOfYear(navStart);
|
|
62
|
+
const lastNavYear = endOfYear(navEnd);
|
|
63
|
+
const years: Date[] = [];
|
|
64
|
+
|
|
65
|
+
let year = firstNavYear;
|
|
66
|
+
while (isBefore(year, lastNavYear) || isSameYear(year, lastNavYear)) {
|
|
67
|
+
years.push(year);
|
|
68
|
+
year = addYears(year, 1);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return years.map((_year) => {
|
|
72
|
+
const label = format(_year, "yyyy", { locale });
|
|
73
|
+
return {
|
|
74
|
+
value: getYear(_year),
|
|
75
|
+
label,
|
|
76
|
+
disabled: false,
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { nb } from "date-fns/locale";
|
|
2
2
|
import { describe, expect, test } from "vitest";
|
|
3
|
-
import { formatDateForInput } from "
|
|
4
|
-
import { parseDate } from "
|
|
3
|
+
import { formatDateForInput } from "./format-date";
|
|
4
|
+
import { parseDate } from "./parse-date";
|
|
5
5
|
|
|
6
6
|
const parse = (inp: string) => parseDate(inp, new Date(), nb, "date", false);
|
|
7
7
|
const parseTwoDigit = (inp: string) =>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { formatDateForInput } from "./format-date";
|
|
2
|
+
export {
|
|
3
|
+
INPUT_DATE_STRING_FORMAT_DATE,
|
|
4
|
+
INPUT_DATE_STRING_FORMAT_MONTH,
|
|
5
|
+
parseDate,
|
|
6
|
+
} from "./parse-date";
|
|
7
|
+
export { disableDate } from "./dates-disabled";
|
|
8
|
+
export { dateIsInCurrentMonth, isValidDate } from "./check-dates";
|
|
9
|
+
export { isMatch, isDateInRange } from "./is-match";
|
|
10
|
+
export { clampDisplayMonth, clampDisplayYear } from "./clamp-dates";
|
|
11
|
+
export { getMonthOptions, getYearOptions } from "./dropdown-options";
|
|
12
|
+
export { calendarRange } from "./calendar-range";
|
|
@@ -5,21 +5,12 @@ import {
|
|
|
5
5
|
isSameMonth,
|
|
6
6
|
} from "date-fns";
|
|
7
7
|
import {
|
|
8
|
-
DateAfter,
|
|
9
|
-
DateBefore,
|
|
10
8
|
DateRange,
|
|
9
|
+
Matcher,
|
|
11
10
|
isDateAfterType,
|
|
12
11
|
isDateBeforeType,
|
|
13
12
|
isDateRange,
|
|
14
|
-
} from "
|
|
15
|
-
|
|
16
|
-
export type Matcher =
|
|
17
|
-
| ((date: Date) => boolean)
|
|
18
|
-
| Date
|
|
19
|
-
| Date[]
|
|
20
|
-
| DateRange
|
|
21
|
-
| DateBefore
|
|
22
|
-
| DateAfter;
|
|
13
|
+
} from "../Date.typeutils";
|
|
23
14
|
|
|
24
15
|
function isDateType(value: unknown): value is Date {
|
|
25
16
|
return isDate(value);
|