@rotki/ui-library 2.8.0 → 2.8.2
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/README.md +276 -0
- package/dist/_virtual/_plugin-vue_export-helper.js +11 -0
- package/dist/_virtual/_plugin-vue_export-helper.js.map +1 -0
- package/dist/components/accordions/accordion/RuiAccordion.vue.js +11 -0
- package/dist/components/accordions/accordion/RuiAccordion.vue.js.map +1 -0
- package/dist/components/accordions/accordion/RuiAccordion.vue2.js +66 -0
- package/dist/components/accordions/accordion/RuiAccordion.vue2.js.map +1 -0
- package/dist/components/accordions/accordion/RuiAccordion.vue3.js +18 -0
- package/dist/components/accordions/accordion/RuiAccordion.vue3.js.map +1 -0
- package/dist/components/accordions/accordions/RuiAccordions.vue.js +78 -0
- package/dist/components/accordions/accordions/RuiAccordions.vue.js.map +1 -0
- package/dist/components/accordions/accordions/RuiAccordions.vue2.js +5 -0
- package/dist/components/accordions/accordions/RuiAccordions.vue2.js.map +1 -0
- package/dist/components/alerts/RuiAlert.vue.d.ts +2 -2
- package/dist/components/alerts/RuiAlert.vue.js +11 -0
- package/dist/components/alerts/RuiAlert.vue.js.map +1 -0
- package/dist/components/alerts/RuiAlert.vue2.js +123 -0
- package/dist/components/alerts/RuiAlert.vue2.js.map +1 -0
- package/dist/components/alerts/RuiAlert.vue3.js +50 -0
- package/dist/components/alerts/RuiAlert.vue3.js.map +1 -0
- package/dist/components/buttons/button/RuiButton.vue.d.ts +1 -1
- package/dist/components/buttons/button/RuiButton.vue.js +11 -0
- package/dist/components/buttons/button/RuiButton.vue.js.map +1 -0
- package/dist/components/buttons/button/RuiButton.vue2.js +94 -0
- package/dist/components/buttons/button/RuiButton.vue2.js.map +1 -0
- package/dist/components/buttons/button/RuiButton.vue3.js +74 -0
- package/dist/components/buttons/button/RuiButton.vue3.js.map +1 -0
- package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +1 -1
- package/dist/components/buttons/button-group/RuiButtonGroup.vue.js +11 -0
- package/dist/components/buttons/button-group/RuiButtonGroup.vue.js.map +1 -0
- package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js +112 -0
- package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js.map +1 -0
- package/dist/components/buttons/button-group/RuiButtonGroup.vue3.js +58 -0
- package/dist/components/buttons/button-group/RuiButtonGroup.vue3.js.map +1 -0
- package/dist/components/calendar/RuiCalendar.vue.js +128 -0
- package/dist/components/calendar/RuiCalendar.vue.js.map +1 -0
- package/dist/components/calendar/RuiCalendar.vue3.js +6 -0
- package/dist/components/calendar/RuiCalendar.vue3.js.map +1 -0
- package/dist/components/calendar/RuiCalendarGrid.vue.js +8 -0
- package/dist/components/calendar/RuiCalendarGrid.vue.js.map +1 -0
- package/dist/components/calendar/RuiCalendarGrid.vue2.js +149 -0
- package/dist/components/calendar/RuiCalendarGrid.vue2.js.map +1 -0
- package/dist/components/calendar/RuiCalendarHeader.vue.d.ts +1 -1
- package/dist/components/calendar/RuiCalendarHeader.vue.js +8 -0
- package/dist/components/calendar/RuiCalendarHeader.vue.js.map +1 -0
- package/dist/components/calendar/RuiCalendarHeader.vue2.js +112 -0
- package/dist/components/calendar/RuiCalendarHeader.vue2.js.map +1 -0
- package/dist/components/calendar/RuiCalendarMenu.vue.d.ts +1 -1
- package/dist/components/calendar/RuiCalendarMenu.vue.js +8 -0
- package/dist/components/calendar/RuiCalendarMenu.vue.js.map +1 -0
- package/dist/components/calendar/RuiCalendarMenu.vue2.js +261 -0
- package/dist/components/calendar/RuiCalendarMenu.vue2.js.map +1 -0
- package/dist/components/calendar/state.js +25 -0
- package/dist/components/calendar/state.js.map +1 -0
- package/dist/components/cards/RuiCard.vue.js +11 -0
- package/dist/components/cards/RuiCard.vue.js.map +1 -0
- package/dist/components/cards/RuiCard.vue2.js +88 -0
- package/dist/components/cards/RuiCard.vue2.js.map +1 -0
- package/dist/components/cards/RuiCard.vue3.js +40 -0
- package/dist/components/cards/RuiCard.vue3.js.map +1 -0
- package/dist/components/cards/RuiCardHeader.vue.js +11 -0
- package/dist/components/cards/RuiCardHeader.vue.js.map +1 -0
- package/dist/components/cards/RuiCardHeader.vue2.js +51 -0
- package/dist/components/cards/RuiCardHeader.vue2.js.map +1 -0
- package/dist/components/cards/RuiCardHeader.vue3.js +27 -0
- package/dist/components/cards/RuiCardHeader.vue3.js.map +1 -0
- package/dist/components/chips/RuiChip.vue.d.ts +2 -2
- package/dist/components/chips/RuiChip.vue.js +11 -0
- package/dist/components/chips/RuiChip.vue.js.map +1 -0
- package/dist/components/chips/RuiChip.vue2.js +95 -0
- package/dist/components/chips/RuiChip.vue2.js.map +1 -0
- package/dist/components/chips/RuiChip.vue3.js +88 -0
- package/dist/components/chips/RuiChip.vue3.js.map +1 -0
- package/dist/components/color-picker/RuiColorBoard.vue.d.ts +1 -1
- package/dist/components/color-picker/RuiColorBoard.vue.js +11 -0
- package/dist/components/color-picker/RuiColorBoard.vue.js.map +1 -0
- package/dist/components/color-picker/RuiColorBoard.vue2.js +102 -0
- package/dist/components/color-picker/RuiColorBoard.vue2.js.map +1 -0
- package/dist/components/color-picker/RuiColorBoard.vue3.js +18 -0
- package/dist/components/color-picker/RuiColorBoard.vue3.js.map +1 -0
- package/dist/components/color-picker/RuiColorDisplay.vue.js +49 -0
- package/dist/components/color-picker/RuiColorDisplay.vue.js.map +1 -0
- package/dist/components/color-picker/RuiColorDisplay.vue2.js +5 -0
- package/dist/components/color-picker/RuiColorDisplay.vue2.js.map +1 -0
- package/dist/components/color-picker/RuiColorHue.vue.js +11 -0
- package/dist/components/color-picker/RuiColorHue.vue.js.map +1 -0
- package/dist/components/color-picker/RuiColorHue.vue2.js +89 -0
- package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -0
- package/dist/components/color-picker/RuiColorHue.vue3.js +12 -0
- package/dist/components/color-picker/RuiColorHue.vue3.js.map +1 -0
- package/dist/components/color-picker/RuiColorInput.vue.d.ts +1 -1
- package/dist/components/color-picker/RuiColorInput.vue.js +139 -0
- package/dist/components/color-picker/RuiColorInput.vue.js.map +1 -0
- package/dist/components/color-picker/RuiColorInput.vue2.js +5 -0
- package/dist/components/color-picker/RuiColorInput.vue2.js.map +1 -0
- package/dist/components/color-picker/RuiColorPicker.vue.js +72 -0
- package/dist/components/color-picker/RuiColorPicker.vue.js.map +1 -0
- package/dist/components/color-picker/RuiColorPicker.vue2.js +5 -0
- package/dist/components/color-picker/RuiColorPicker.vue2.js.map +1 -0
- package/dist/components/color-picker/utils.js +182 -0
- package/dist/components/color-picker/utils.js.map +1 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +1 -1
- package/dist/components/date-time-picker/RuiDateTimePicker.vue.js +11 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue.js.map +1 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +570 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue3.js +66 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue3.js.map +1 -0
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.d.ts +2 -2
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js +120 -0
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js.map +1 -0
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue2.js +5 -0
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue2.js.map +1 -0
- package/dist/components/date-time-picker/timezones.js +601 -0
- package/dist/components/date-time-picker/timezones.js.map +1 -0
- package/dist/components/date-time-picker/types.js +17 -0
- package/dist/components/date-time-picker/types.js.map +1 -0
- package/dist/components/date-time-picker/use-input-handler.d.ts +2 -2
- package/dist/components/date-time-picker/use-input-handler.js +31 -0
- package/dist/components/date-time-picker/use-input-handler.js.map +1 -0
- package/dist/components/date-time-picker/use-keyboard-handler.d.ts +2 -2
- package/dist/components/date-time-picker/use-keyboard-handler.js +308 -0
- package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -0
- package/dist/components/date-time-picker/utils.d.ts +1 -1
- package/dist/components/date-time-picker/utils.js +19 -0
- package/dist/components/date-time-picker/utils.js.map +1 -0
- package/dist/components/divider/RuiDivider.vue.js +22 -0
- package/dist/components/divider/RuiDivider.vue.js.map +1 -0
- package/dist/components/divider/RuiDivider.vue2.js +5 -0
- package/dist/components/divider/RuiDivider.vue2.js.map +1 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +2 -2
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.js +11 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.js.map +1 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +585 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue3.js +60 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue3.js.map +1 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +1 -1
- package/dist/components/forms/checkbox/RuiCheckbox.vue.js +11 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue.js.map +1 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +137 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue3.js +54 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue3.js.map +1 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +1 -1
- package/dist/components/forms/radio-button/radio/RuiRadio.vue.js +11 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue.js.map +1 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +115 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue3.js +54 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue3.js.map +1 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +1 -1
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.js +11 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.js.map +1 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +78 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +1 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue3.js +9 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue3.js.map +1 -0
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +5 -5
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +82 -0
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -0
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue2.js +5 -0
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue2.js.map +1 -0
- package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +2 -2
- package/dist/components/forms/select/RuiMenuSelect.vue.js +11 -0
- package/dist/components/forms/select/RuiMenuSelect.vue.js.map +1 -0
- package/dist/components/forms/select/RuiMenuSelect.vue2.js +297 -0
- package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -0
- package/dist/components/forms/select/RuiMenuSelect.vue3.js +60 -0
- package/dist/components/forms/select/RuiMenuSelect.vue3.js.map +1 -0
- package/dist/components/forms/select/RuiSimpleSelect.vue.js +11 -0
- package/dist/components/forms/select/RuiSimpleSelect.vue.js.map +1 -0
- package/dist/components/forms/select/RuiSimpleSelect.vue2.js +67 -0
- package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +1 -0
- package/dist/components/forms/select/RuiSimpleSelect.vue3.js +21 -0
- package/dist/components/forms/select/RuiSimpleSelect.vue3.js.map +1 -0
- package/dist/components/forms/slider/RuiSlider.vue.d.ts +1 -1
- package/dist/components/forms/slider/RuiSlider.vue.js +11 -0
- package/dist/components/forms/slider/RuiSlider.vue.js.map +1 -0
- package/dist/components/forms/slider/RuiSlider.vue2.js +165 -0
- package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -0
- package/dist/components/forms/slider/RuiSlider.vue3.js +80 -0
- package/dist/components/forms/slider/RuiSlider.vue3.js.map +1 -0
- package/dist/components/forms/switch/RuiSwitch.vue.d.ts +1 -1
- package/dist/components/forms/switch/RuiSwitch.vue.js +11 -0
- package/dist/components/forms/switch/RuiSwitch.vue.js.map +1 -0
- package/dist/components/forms/switch/RuiSwitch.vue2.js +89 -0
- package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -0
- package/dist/components/forms/switch/RuiSwitch.vue3.js +54 -0
- package/dist/components/forms/switch/RuiSwitch.vue3.js.map +1 -0
- package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +2 -2
- package/dist/components/forms/text-area/RuiTextArea.vue.js +11 -0
- package/dist/components/forms/text-area/RuiTextArea.vue.js.map +1 -0
- package/dist/components/forms/text-area/RuiTextArea.vue2.js +252 -0
- package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -0
- package/dist/components/forms/text-area/RuiTextArea.vue3.js +92 -0
- package/dist/components/forms/text-area/RuiTextArea.vue3.js.map +1 -0
- package/dist/components/forms/text-field/RuiTextField.vue.d.ts +2 -2
- package/dist/components/forms/text-field/RuiTextField.vue.js +11 -0
- package/dist/components/forms/text-field/RuiTextField.vue.js.map +1 -0
- package/dist/components/forms/text-field/RuiTextField.vue2.js +220 -0
- package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -0
- package/dist/components/forms/text-field/RuiTextField.vue3.js +89 -0
- package/dist/components/forms/text-field/RuiTextField.vue3.js.map +1 -0
- package/dist/components/helpers/RuiFormTextDetail.vue.js +54 -0
- package/dist/components/helpers/RuiFormTextDetail.vue.js.map +1 -0
- package/dist/components/helpers/RuiFormTextDetail.vue2.js +5 -0
- package/dist/components/helpers/RuiFormTextDetail.vue2.js.map +1 -0
- package/dist/components/icons/RuiIcon.vue.d.ts +2 -2
- package/dist/components/icons/RuiIcon.vue.js +11 -0
- package/dist/components/icons/RuiIcon.vue.js.map +1 -0
- package/dist/components/icons/RuiIcon.vue2.js +60 -0
- package/dist/components/icons/RuiIcon.vue2.js.map +1 -0
- package/dist/components/icons/RuiIcon.vue3.js +29 -0
- package/dist/components/icons/RuiIcon.vue3.js.map +1 -0
- package/dist/components/index.d.ts +45 -45
- package/dist/components/index.js +92 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/loaders/RuiSkeletonBase.vue.js +11 -0
- package/dist/components/loaders/RuiSkeletonBase.vue.js.map +1 -0
- package/dist/components/loaders/RuiSkeletonBase.vue2.js +22 -0
- package/dist/components/loaders/RuiSkeletonBase.vue2.js.map +1 -0
- package/dist/components/loaders/RuiSkeletonBase.vue3.js +12 -0
- package/dist/components/loaders/RuiSkeletonBase.vue3.js.map +1 -0
- package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +1 -1
- package/dist/components/loaders/RuiSkeletonLoader.vue.js +11 -0
- package/dist/components/loaders/RuiSkeletonLoader.vue.js.map +1 -0
- package/dist/components/loaders/RuiSkeletonLoader.vue2.js +47 -0
- package/dist/components/loaders/RuiSkeletonLoader.vue2.js.map +1 -0
- package/dist/components/loaders/RuiSkeletonLoader.vue3.js +33 -0
- package/dist/components/loaders/RuiSkeletonLoader.vue3.js.map +1 -0
- package/dist/components/logos/RuiLogo.vue.js +114 -0
- package/dist/components/logos/RuiLogo.vue.js.map +1 -0
- package/dist/components/logos/RuiLogo.vue2.js +5 -0
- package/dist/components/logos/RuiLogo.vue2.js.map +1 -0
- package/dist/components/logos/logo.svg.js +5 -0
- package/dist/components/logos/logo.svg.js.map +1 -0
- package/dist/components/overlays/badge/RuiBadge.vue.d.ts +2 -2
- package/dist/components/overlays/badge/RuiBadge.vue.js +11 -0
- package/dist/components/overlays/badge/RuiBadge.vue.js.map +1 -0
- package/dist/components/overlays/badge/RuiBadge.vue2.js +95 -0
- package/dist/components/overlays/badge/RuiBadge.vue2.js.map +1 -0
- package/dist/components/overlays/badge/RuiBadge.vue3.js +77 -0
- package/dist/components/overlays/badge/RuiBadge.vue3.js.map +1 -0
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +34 -0
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js.map +1 -0
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue2.js +5 -0
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue2.js.map +1 -0
- package/dist/components/overlays/dialog/RuiDialog.vue.js +11 -0
- package/dist/components/overlays/dialog/RuiDialog.vue.js.map +1 -0
- package/dist/components/overlays/dialog/RuiDialog.vue2.js +172 -0
- package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +1 -0
- package/dist/components/overlays/dialog/RuiDialog.vue3.js +18 -0
- package/dist/components/overlays/dialog/RuiDialog.vue3.js.map +1 -0
- package/dist/components/overlays/menu/RuiMenu.vue.d.ts +1 -1
- package/dist/components/overlays/menu/RuiMenu.vue.js +11 -0
- package/dist/components/overlays/menu/RuiMenu.vue.js.map +1 -0
- package/dist/components/overlays/menu/RuiMenu.vue2.js +221 -0
- package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -0
- package/dist/components/overlays/menu/RuiMenu.vue3.js +21 -0
- package/dist/components/overlays/menu/RuiMenu.vue3.js.map +1 -0
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.js +11 -0
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.js.map +1 -0
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +112 -0
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +1 -0
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue3.js +28 -0
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue3.js.map +1 -0
- package/dist/components/overlays/notification/RuiNotification.vue.js +74 -0
- package/dist/components/overlays/notification/RuiNotification.vue.js.map +1 -0
- package/dist/components/overlays/notification/RuiNotification.vue2.js +5 -0
- package/dist/components/overlays/notification/RuiNotification.vue2.js.map +1 -0
- package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +1 -1
- package/dist/components/overlays/tooltip/RuiTooltip.vue.js +11 -0
- package/dist/components/overlays/tooltip/RuiTooltip.vue.js.map +1 -0
- package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +105 -0
- package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +1 -0
- package/dist/components/overlays/tooltip/RuiTooltip.vue3.js +27 -0
- package/dist/components/overlays/tooltip/RuiTooltip.vue3.js.map +1 -0
- package/dist/components/progress/RuiProgress.vue.d.ts +1 -1
- package/dist/components/progress/RuiProgress.vue.js +11 -0
- package/dist/components/progress/RuiProgress.vue.js.map +1 -0
- package/dist/components/progress/RuiProgress.vue2.js +98 -0
- package/dist/components/progress/RuiProgress.vue2.js.map +1 -0
- package/dist/components/progress/RuiProgress.vue3.js +48 -0
- package/dist/components/progress/RuiProgress.vue3.js.map +1 -0
- package/dist/components/steppers/RuiFooterStepper.vue.js +11 -0
- package/dist/components/steppers/RuiFooterStepper.vue.js.map +1 -0
- package/dist/components/steppers/RuiFooterStepper.vue2.js +143 -0
- package/dist/components/steppers/RuiFooterStepper.vue2.js.map +1 -0
- package/dist/components/steppers/RuiFooterStepper.vue3.js +31 -0
- package/dist/components/steppers/RuiFooterStepper.vue3.js.map +1 -0
- package/dist/components/steppers/RuiStepper.vue.d.ts +1 -1
- package/dist/components/steppers/RuiStepper.vue.js +11 -0
- package/dist/components/steppers/RuiStepper.vue.js.map +1 -0
- package/dist/components/steppers/RuiStepper.vue2.js +130 -0
- package/dist/components/steppers/RuiStepper.vue2.js.map +1 -0
- package/dist/components/steppers/RuiStepper.vue3.js +58 -0
- package/dist/components/steppers/RuiStepper.vue3.js.map +1 -0
- package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +1 -1
- package/dist/components/steppers/RuiStepperCustomIcon.vue.js +11 -0
- package/dist/components/steppers/RuiStepperCustomIcon.vue.js.map +1 -0
- package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +38 -0
- package/dist/components/steppers/RuiStepperCustomIcon.vue2.js.map +1 -0
- package/dist/components/steppers/RuiStepperCustomIcon.vue3.js +15 -0
- package/dist/components/steppers/RuiStepperCustomIcon.vue3.js.map +1 -0
- package/dist/components/steppers/RuiStepperIcon.vue.d.ts +1 -1
- package/dist/components/steppers/RuiStepperIcon.vue.js +11 -0
- package/dist/components/steppers/RuiStepperIcon.vue.js.map +1 -0
- package/dist/components/steppers/RuiStepperIcon.vue2.js +43 -0
- package/dist/components/steppers/RuiStepperIcon.vue2.js.map +1 -0
- package/dist/components/steppers/RuiStepperIcon.vue3.js +21 -0
- package/dist/components/steppers/RuiStepperIcon.vue3.js.map +1 -0
- package/dist/components/tables/RuiDataTable.vue.d.ts +2 -2
- package/dist/components/tables/RuiDataTable.vue.js +11 -0
- package/dist/components/tables/RuiDataTable.vue.js.map +1 -0
- package/dist/components/tables/RuiDataTable.vue2.js +943 -0
- package/dist/components/tables/RuiDataTable.vue2.js.map +1 -0
- package/dist/components/tables/RuiDataTable.vue3.js +79 -0
- package/dist/components/tables/RuiDataTable.vue3.js.map +1 -0
- package/dist/components/tables/RuiExpandButton.vue.d.ts +1 -1
- package/dist/components/tables/RuiExpandButton.vue.js +11 -0
- package/dist/components/tables/RuiExpandButton.vue.js.map +1 -0
- package/dist/components/tables/RuiExpandButton.vue2.js +42 -0
- package/dist/components/tables/RuiExpandButton.vue2.js.map +1 -0
- package/dist/components/tables/RuiExpandButton.vue3.js +15 -0
- package/dist/components/tables/RuiExpandButton.vue3.js.map +1 -0
- package/dist/components/tables/RuiTableHead.vue.js +11 -0
- package/dist/components/tables/RuiTableHead.vue.js.map +1 -0
- package/dist/components/tables/RuiTableHead.vue2.js +195 -0
- package/dist/components/tables/RuiTableHead.vue2.js.map +1 -0
- package/dist/components/tables/RuiTableHead.vue3.js +69 -0
- package/dist/components/tables/RuiTableHead.vue3.js.map +1 -0
- package/dist/components/tables/RuiTablePagination.vue.js +11 -0
- package/dist/components/tables/RuiTablePagination.vue.js.map +1 -0
- package/dist/components/tables/RuiTablePagination.vue2.js +196 -0
- package/dist/components/tables/RuiTablePagination.vue2.js.map +1 -0
- package/dist/components/tables/RuiTablePagination.vue3.js +28 -0
- package/dist/components/tables/RuiTablePagination.vue3.js.map +1 -0
- package/dist/components/tables/table_no_data_placeholder.svg.js +5 -0
- package/dist/components/tables/table_no_data_placeholder.svg.js.map +1 -0
- package/dist/components/tables/table_no_data_placeholder_dark.svg.js +5 -0
- package/dist/components/tables/table_no_data_placeholder_dark.svg.js.map +1 -0
- package/dist/components/tabs/tab/RuiTab.vue.d.ts +1 -1
- package/dist/components/tabs/tab/RuiTab.vue.js +11 -0
- package/dist/components/tabs/tab/RuiTab.vue.js.map +1 -0
- package/dist/components/tabs/tab/RuiTab.vue2.js +135 -0
- package/dist/components/tabs/tab/RuiTab.vue2.js.map +1 -0
- package/dist/components/tabs/tab/RuiTab.vue3.js +17 -0
- package/dist/components/tabs/tab/RuiTab.vue3.js.map +1 -0
- package/dist/components/tabs/tab-item/RuiTabItem.vue.js +11 -0
- package/dist/components/tabs/tab-item/RuiTabItem.vue.js.map +1 -0
- package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +51 -0
- package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -0
- package/dist/components/tabs/tab-item/RuiTabItem.vue3.js +9 -0
- package/dist/components/tabs/tab-item/RuiTabItem.vue3.js.map +1 -0
- package/dist/components/tabs/tab-items/RuiTabItems.vue.js +11 -0
- package/dist/components/tabs/tab-items/RuiTabItems.vue.js.map +1 -0
- package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +90 -0
- package/dist/components/tabs/tab-items/RuiTabItems.vue2.js.map +1 -0
- package/dist/components/tabs/tab-items/RuiTabItems.vue3.js +9 -0
- package/dist/components/tabs/tab-items/RuiTabItems.vue3.js.map +1 -0
- package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +1 -1
- package/dist/components/tabs/tabs/RuiTabs.vue.js +11 -0
- package/dist/components/tabs/tabs/RuiTabs.vue.js.map +1 -0
- package/dist/components/tabs/tabs/RuiTabs.vue2.js +281 -0
- package/dist/components/tabs/tabs/RuiTabs.vue2.js.map +1 -0
- package/dist/components/tabs/tabs/RuiTabs.vue3.js +20 -0
- package/dist/components/tabs/tabs/RuiTabs.vue3.js.map +1 -0
- package/dist/components/time-picker/RuiTimePicker.vue.d.ts +1 -1
- package/dist/components/time-picker/RuiTimePicker.vue.js +11 -0
- package/dist/components/time-picker/RuiTimePicker.vue.js.map +1 -0
- package/dist/components/time-picker/RuiTimePicker.vue2.js +414 -0
- package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -0
- package/dist/components/time-picker/RuiTimePicker.vue3.js +21 -0
- package/dist/components/time-picker/RuiTimePicker.vue3.js.map +1 -0
- package/dist/composables/breakpoint.js +49 -0
- package/dist/composables/breakpoint.js.map +1 -0
- package/dist/composables/defaults/table.js +23 -0
- package/dist/composables/defaults/table.js.map +1 -0
- package/dist/composables/dropdown-menu.js +218 -0
- package/dist/composables/dropdown-menu.js.map +1 -0
- package/dist/composables/forms/auto-complete/focus.js +71 -0
- package/dist/composables/forms/auto-complete/focus.js.map +1 -0
- package/dist/composables/forms/auto-complete/index.d.ts +4 -4
- package/dist/composables/forms/auto-complete/keyboard-navigation.js +133 -0
- package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -0
- package/dist/composables/forms/auto-complete/search.js +93 -0
- package/dist/composables/forms/auto-complete/search.js.map +1 -0
- package/dist/composables/forms/auto-complete/value.js +129 -0
- package/dist/composables/forms/auto-complete/value.js.map +1 -0
- package/dist/composables/icons.js +60 -0
- package/dist/composables/icons.js.map +1 -0
- package/dist/composables/index.d.ts +3 -3
- package/dist/composables/index.js +9 -0
- package/dist/composables/index.js.map +1 -0
- package/dist/composables/popper.js +164 -0
- package/dist/composables/popper.js.map +1 -0
- package/dist/composables/sticky-header.js +105 -0
- package/dist/composables/sticky-header.js.map +1 -0
- package/dist/composables/theme.d.ts +1 -1
- package/dist/composables/theme.js +75 -0
- package/dist/composables/theme.js.map +1 -0
- package/dist/composables/timeout-manager.js +21 -0
- package/dist/composables/timeout-manager.js.map +1 -0
- package/dist/composables/use-rui-i18n.js +24 -0
- package/dist/composables/use-rui-i18n.js.map +1 -0
- package/dist/consts/colors.js +50 -0
- package/dist/consts/colors.js.map +1 -0
- package/dist/consts/time-accuracy.js +9 -0
- package/dist/consts/time-accuracy.js.map +1 -0
- package/dist/i18n/keys.js +20 -0
- package/dist/i18n/keys.js.map +1 -0
- package/dist/icons/icons_1.js +2503 -0
- package/dist/icons/icons_1.js.map +1 -0
- package/dist/icons/icons_2.js +2503 -0
- package/dist/icons/icons_2.js.map +1 -0
- package/dist/icons/icons_3.js +2503 -0
- package/dist/icons/icons_3.js.map +1 -0
- package/dist/icons/icons_4.js +923 -0
- package/dist/icons/icons_4.js.map +1 -0
- package/dist/icons/index.d.ts +4 -4
- package/dist/icons/index.js +9 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +11 -11
- package/dist/index.js +1852 -0
- package/dist/index.js.map +1 -0
- package/dist/style.css +12852 -1
- package/dist/theme/index.js +185 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/types/stepper.js +17 -0
- package/dist/types/stepper.js.map +1 -0
- package/dist/types/theme.js +27 -0
- package/dist/types/theme.js.map +1 -0
- package/dist/utils/assert.js +14 -0
- package/dist/utils/assert.js.map +1 -0
- package/dist/utils/blockie.js +79 -0
- package/dist/utils/blockie.js.map +1 -0
- package/dist/utils/form-text-detail.js +31 -0
- package/dist/utils/form-text-detail.js.map +1 -0
- package/dist/utils/generate-id.js +21 -0
- package/dist/utils/generate-id.js.map +1 -0
- package/dist/utils/helpers.js +51 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/is-equal.js +33 -0
- package/dist/utils/is-equal.js.map +1 -0
- package/dist/web-types.json +1 -1
- package/package.json +16 -14
- package/dist/components/index.es.js +0 -8030
- package/dist/composables/index-CC7A7CEh.js +0 -737
- package/dist/composables/index.es.js +0 -7
- package/dist/consts/colors-D563Ic3q.js +0 -48
- package/dist/consts/forms/auto-complete/index-l0sNRNKZ.js +0 -2
- package/dist/consts/time-accuracy-BnKA5GyT.js +0 -9
- package/dist/i18n/keys-CNGXWOJX.js +0 -20
- package/dist/icons/icons_1.es.js +0 -2004
- package/dist/icons/icons_2.es.js +0 -2004
- package/dist/icons/icons_3.es.js +0 -2004
- package/dist/icons/icons_4.es.js +0 -740
- package/dist/icons/index.es.js +0 -1697
- package/dist/index-D7l4d7N2.js +0 -54
- package/dist/index.es.js +0 -1757
- package/dist/theme/index.es.js +0 -177
- package/dist/types/index-CN6Ip1GL.js +0 -39
- package/dist/utils/index-DJ-ueLCs.js +0 -158
- package/dist/vendor-Hqbg5uCG.js +0 -1931
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { defineComponent, mergeModels, useModel, inject, ref, watch, createElementBlock, openBlock, createElementVNode, Fragment, renderList, unref, toDisplayString, withModifiers, normalizeClass } from "vue";
|
|
2
|
+
import { get, isDefined, set } from "@vueuse/core";
|
|
3
|
+
import { CalendarStateSymbol, getDaysOfWeek } from "./state.js";
|
|
4
|
+
const _hoisted_1 = { class: "calendar-grid" };
|
|
5
|
+
const _hoisted_2 = { class: "calendar-weekdays" };
|
|
6
|
+
const _hoisted_3 = { class: "calendar-days" };
|
|
7
|
+
const _hoisted_4 = ["data-id", "disabled", "onClick"];
|
|
8
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
9
|
+
...{
|
|
10
|
+
name: "RuiCalendarGrid",
|
|
11
|
+
inheritAttrs: false
|
|
12
|
+
},
|
|
13
|
+
__name: "RuiCalendarGrid",
|
|
14
|
+
props: /* @__PURE__ */ mergeModels({
|
|
15
|
+
viewMonth: {},
|
|
16
|
+
viewYear: {}
|
|
17
|
+
}, {
|
|
18
|
+
"modelValue": {},
|
|
19
|
+
"modelModifiers": {}
|
|
20
|
+
}),
|
|
21
|
+
emits: ["update:modelValue"],
|
|
22
|
+
setup(__props) {
|
|
23
|
+
const model = useModel(__props, "modelValue");
|
|
24
|
+
const props = __props;
|
|
25
|
+
const calendarState = inject(CalendarStateSymbol);
|
|
26
|
+
function createDateKey(date) {
|
|
27
|
+
return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}`;
|
|
28
|
+
}
|
|
29
|
+
const daysOfWeek = getDaysOfWeek();
|
|
30
|
+
const today = /* @__PURE__ */ new Date();
|
|
31
|
+
const todayKey = createDateKey(today);
|
|
32
|
+
const calendarDays = ref([]);
|
|
33
|
+
function createDayData(date, isCurrentMonth, modelValue, maxDateValue, minDateValue) {
|
|
34
|
+
const key = createDateKey(date);
|
|
35
|
+
return {
|
|
36
|
+
date,
|
|
37
|
+
isCurrentMonth,
|
|
38
|
+
isInRange: isDateInRangeCheck(date, maxDateValue, minDateValue),
|
|
39
|
+
isSelected: modelValue ? isDateSelectedCheck(date, modelValue) : false,
|
|
40
|
+
isToday: key === todayKey,
|
|
41
|
+
key,
|
|
42
|
+
dayNumber: date.getDate()
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function calculateCalendarDays() {
|
|
46
|
+
const firstDayOfMonth = new Date(props.viewYear, props.viewMonth, 1);
|
|
47
|
+
const lastDayOfMonth = new Date(props.viewYear, props.viewMonth + 1, 0);
|
|
48
|
+
const daysInMonth = lastDayOfMonth.getDate();
|
|
49
|
+
const startingDayOfWeek = firstDayOfMonth.getDay();
|
|
50
|
+
const { maxDate, minDate } = calendarState;
|
|
51
|
+
const modelValue = get(model);
|
|
52
|
+
const maxDateValue = isDefined(maxDate) ? get(maxDate) : null;
|
|
53
|
+
const minDateValue = isDefined(minDate) ? get(minDate) : null;
|
|
54
|
+
const result = [];
|
|
55
|
+
if (startingDayOfWeek > 0) {
|
|
56
|
+
const prevMonthLastDay = new Date(props.viewYear, props.viewMonth, 0).getDate();
|
|
57
|
+
for (let i = startingDayOfWeek - 1; i >= 0; i--) {
|
|
58
|
+
const date = new Date(props.viewYear, props.viewMonth - 1, prevMonthLastDay - i, 12, 0, 0, 0);
|
|
59
|
+
result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
for (let i = 1; i <= daysInMonth; i++) {
|
|
63
|
+
const date = new Date(props.viewYear, props.viewMonth, i, 12, 0, 0, 0);
|
|
64
|
+
result.push(createDayData(date, true, modelValue, maxDateValue, minDateValue));
|
|
65
|
+
}
|
|
66
|
+
const totalDaysSoFar = result.length;
|
|
67
|
+
const daysToAdd = 42 - totalDaysSoFar;
|
|
68
|
+
for (let i = 1; i <= daysToAdd; i++) {
|
|
69
|
+
const date = new Date(props.viewYear, props.viewMonth + 1, i, 12, 0, 0, 0);
|
|
70
|
+
result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));
|
|
71
|
+
}
|
|
72
|
+
set(calendarDays, result);
|
|
73
|
+
}
|
|
74
|
+
function isDateInRangeCheck(date, maxDateValue, minDateValue) {
|
|
75
|
+
if (maxDateValue && date > maxDateValue)
|
|
76
|
+
return false;
|
|
77
|
+
if (minDateValue && date < minDateValue)
|
|
78
|
+
return false;
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
function isDateSelectedCheck(date, modelValue) {
|
|
82
|
+
return date.getFullYear() === modelValue.getFullYear() && date.getMonth() === modelValue.getMonth() && date.getDate() === modelValue.getDate();
|
|
83
|
+
}
|
|
84
|
+
calculateCalendarDays();
|
|
85
|
+
watch([() => props.viewMonth, () => props.viewYear], () => {
|
|
86
|
+
calculateCalendarDays();
|
|
87
|
+
});
|
|
88
|
+
watch(model, () => {
|
|
89
|
+
calculateCalendarDays();
|
|
90
|
+
});
|
|
91
|
+
watch([() => calendarState.maxDate, () => calendarState.minDate], () => {
|
|
92
|
+
calculateCalendarDays();
|
|
93
|
+
}, { deep: true });
|
|
94
|
+
function selectDate(dayData) {
|
|
95
|
+
if (!dayData.isInRange)
|
|
96
|
+
return;
|
|
97
|
+
let updateModel;
|
|
98
|
+
if (dayData.isSelected && calendarState.allowEmpty) {
|
|
99
|
+
updateModel = void 0;
|
|
100
|
+
} else if (isDefined(model)) {
|
|
101
|
+
const modelValue = get(model);
|
|
102
|
+
const newDate = new Date(dayData.date);
|
|
103
|
+
newDate.setHours(modelValue.getHours());
|
|
104
|
+
newDate.setMinutes(modelValue.getMinutes());
|
|
105
|
+
newDate.setSeconds(modelValue.getSeconds());
|
|
106
|
+
updateModel = newDate;
|
|
107
|
+
} else {
|
|
108
|
+
updateModel = new Date(dayData.date);
|
|
109
|
+
}
|
|
110
|
+
set(model, updateModel);
|
|
111
|
+
}
|
|
112
|
+
return (_ctx, _cache) => {
|
|
113
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
114
|
+
createElementVNode("div", _hoisted_2, [
|
|
115
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(daysOfWeek), (day) => {
|
|
116
|
+
return openBlock(), createElementBlock("span", {
|
|
117
|
+
key: day,
|
|
118
|
+
class: "weekday-label"
|
|
119
|
+
}, toDisplayString(day), 1);
|
|
120
|
+
}), 128))
|
|
121
|
+
]),
|
|
122
|
+
createElementVNode("div", _hoisted_3, [
|
|
123
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(get)(calendarDays.value), (dayData) => {
|
|
124
|
+
return openBlock(), createElementBlock("button", {
|
|
125
|
+
key: dayData.key,
|
|
126
|
+
type: "button",
|
|
127
|
+
"data-id": dayData.key,
|
|
128
|
+
class: normalizeClass(["h-9 w-full flex items-center justify-center text-sm rounded-full mx-auto max-w-[2.25rem] transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50", [
|
|
129
|
+
{
|
|
130
|
+
"bg-rui-primary text-white hover:bg-rui-primary/90 dark:hover:bg-rui-primary/90": dayData.isSelected,
|
|
131
|
+
"text-gray-400 dark:text-gray-600": !dayData.isCurrentMonth && !dayData.isSelected,
|
|
132
|
+
"text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700": dayData.isCurrentMonth && !dayData.isSelected && dayData.isInRange,
|
|
133
|
+
"opacity-50 cursor-not-allowed hover:bg-transparent": !dayData.isInRange,
|
|
134
|
+
"today-indicator": dayData.isToday && !dayData.isSelected
|
|
135
|
+
}
|
|
136
|
+
]]),
|
|
137
|
+
disabled: !dayData.isInRange,
|
|
138
|
+
onClick: withModifiers(($event) => selectDate(dayData), ["stop"])
|
|
139
|
+
}, toDisplayString(dayData.dayNumber), 11, _hoisted_4);
|
|
140
|
+
}), 128))
|
|
141
|
+
])
|
|
142
|
+
]);
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
export {
|
|
147
|
+
_sfc_main as default
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=RuiCalendarGrid.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuiCalendarGrid.vue2.js","sources":["../../../src/components/calendar/RuiCalendarGrid.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { inject, ref, watch } from 'vue';\nimport { CalendarStateSymbol, getDaysOfWeek, type RuiCalendarState } from '@/components/calendar/state';\n\ndefineOptions({\n name: 'RuiCalendarGrid',\n inheritAttrs: false,\n});\n\nconst model = defineModel<Date | undefined>();\n\nconst props = defineProps<{\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\n// Helper functions to reduce duplication\nfunction createDateKey(date: Date): string {\n return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;\n}\n\n// Pre-calculated constants\nconst daysOfWeek = getDaysOfWeek();\nconst today = new Date();\nconst todayKey = createDateKey(today);\n\n// Pre-calculated arrays for performance - using refs for better control\nconst calendarDays = ref<Array<{\n date: Date;\n isCurrentMonth: boolean;\n isInRange: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n dayNumber: number;\n}>>([]);\n\nfunction createDayData(date: Date, isCurrentMonth: boolean, modelValue: Date | null | undefined, maxDateValue: Date | null, minDateValue: Date | null) {\n const key = createDateKey(date);\n return {\n date,\n isCurrentMonth,\n isInRange: isDateInRangeCheck(date, maxDateValue, minDateValue),\n isSelected: modelValue ? isDateSelectedCheck(date, modelValue) : false,\n isToday: key === todayKey,\n key,\n dayNumber: date.getDate(),\n };\n}\n\n// Pre-calculation functions using VueUse get/set\nfunction calculateCalendarDays() {\n const firstDayOfMonth = new Date(props.viewYear, props.viewMonth, 1);\n const lastDayOfMonth = new Date(props.viewYear, props.viewMonth + 1, 0);\n const daysInMonth = lastDayOfMonth.getDate();\n const startingDayOfWeek = firstDayOfMonth.getDay();\n\n const { maxDate, minDate } = calendarState;\n const modelValue = get(model);\n const maxDateValue = isDefined(maxDate) ? get(maxDate) : null;\n const minDateValue = isDefined(minDate) ? get(minDate) : null;\n\n const result = [];\n\n // Previous month days\n if (startingDayOfWeek > 0) {\n const prevMonthLastDay = new Date(props.viewYear, props.viewMonth, 0).getDate();\n for (let i = startingDayOfWeek - 1; i >= 0; i--) {\n const date = new Date(props.viewYear, props.viewMonth - 1, prevMonthLastDay - i, 12, 0, 0, 0);\n result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));\n }\n }\n\n // Current month days\n for (let i = 1; i <= daysInMonth; i++) {\n const date = new Date(props.viewYear, props.viewMonth, i, 12, 0, 0, 0);\n result.push(createDayData(date, true, modelValue, maxDateValue, minDateValue));\n }\n\n // Next month days\n const totalDaysSoFar = result.length;\n const daysToAdd = 42 - totalDaysSoFar;\n for (let i = 1; i <= daysToAdd; i++) {\n const date = new Date(props.viewYear, props.viewMonth + 1, i, 12, 0, 0, 0);\n result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));\n }\n\n set(calendarDays, result);\n}\n\nfunction isDateInRangeCheck(date: Date, maxDateValue: Date | null, minDateValue: Date | null): boolean {\n if (maxDateValue && date > maxDateValue)\n return false;\n if (minDateValue && date < minDateValue)\n return false;\n return true;\n}\n\nfunction isDateSelectedCheck(date: Date, modelValue: Date): boolean {\n return date.getFullYear() === modelValue.getFullYear()\n && date.getMonth() === modelValue.getMonth()\n && date.getDate() === modelValue.getDate();\n}\n\n// Initial calculation\ncalculateCalendarDays();\n\n// Watchers for recalculation only when needed\nwatch([() => props.viewMonth, () => props.viewYear], () => {\n calculateCalendarDays();\n});\n\nwatch(model, () => {\n calculateCalendarDays();\n});\n\nwatch([() => calendarState.maxDate, () => calendarState.minDate], () => {\n calculateCalendarDays();\n}, { deep: true });\n\nfunction selectDate(dayData: { date: Date; isInRange: boolean; isSelected: boolean }) {\n if (!dayData.isInRange)\n return;\n\n let updateModel: Date | undefined;\n\n if (dayData.isSelected && calendarState.allowEmpty) {\n updateModel = undefined;\n }\n else if (isDefined(model)) {\n const modelValue = get(model);\n const newDate = new Date(dayData.date);\n newDate.setHours(modelValue.getHours());\n newDate.setMinutes(modelValue.getMinutes());\n newDate.setSeconds(modelValue.getSeconds());\n updateModel = newDate;\n }\n else {\n updateModel = new Date(dayData.date);\n }\n set(model, updateModel);\n}\n</script>\n\n<template>\n <div class=\"calendar-grid\">\n <div class=\"calendar-weekdays\">\n <span\n v-for=\"day in daysOfWeek\"\n :key=\"day\"\n class=\"weekday-label\"\n >\n {{ day }}\n </span>\n </div>\n\n <div class=\"calendar-days\">\n <button\n v-for=\"dayData in get(calendarDays)\"\n :key=\"dayData.key\"\n type=\"button\"\n :data-id=\"dayData.key\"\n class=\"h-9 w-full flex items-center justify-center text-sm rounded-full mx-auto max-w-[2.25rem] transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50\"\n :class=\"[\n {\n 'bg-rui-primary text-white hover:bg-rui-primary/90 dark:hover:bg-rui-primary/90': dayData.isSelected,\n 'text-gray-400 dark:text-gray-600': !dayData.isCurrentMonth && !dayData.isSelected,\n 'text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700': dayData.isCurrentMonth && !dayData.isSelected && dayData.isInRange,\n 'opacity-50 cursor-not-allowed hover:bg-transparent': !dayData.isInRange,\n 'today-indicator': dayData.isToday && !dayData.isSelected,\n },\n ]\"\n :disabled=\"!dayData.isInRange\"\n @click.stop=\"selectDate(dayData)\"\n >\n {{ dayData.dayNumber }}\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>\n.calendar-grid {\n @apply w-full p-2 pt-0;\n}\n\n.calendar-weekdays {\n @apply grid grid-cols-7 pb-2;\n}\n\n.weekday-label {\n @apply py-2 text-xs font-medium text-center text-gray-500 dark:text-gray-400;\n}\n\n.calendar-days {\n @apply grid grid-cols-7 gap-0.5;\n}\n\n.today-indicator {\n @apply relative;\n\n &:after {\n content: '';\n @apply absolute size-1 rounded-full bottom-1 left-1/2 transform -translate-x-1/2 bg-rui-primary;\n }\n}\n</style>\n"],"names":["_useModel","_openBlock","_createElementBlock","_createElementVNode","_Fragment","_renderList","_unref","_withModifiers","_toDisplayString"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import _sfc_main from "./RuiCalendarHeader.vue2.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const RuiCalendarHeader = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-b6256f59"]]);
|
|
5
|
+
export {
|
|
6
|
+
RuiCalendarHeader as default
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=RuiCalendarHeader.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuiCalendarHeader.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { defineComponent, mergeModels, useModel, ref, inject, computed, createElementBlock, openBlock, createVNode, createElementVNode, withModifiers, withCtx, createTextVNode, toDisplayString } from "vue";
|
|
2
|
+
import { isDefined, get, set } from "@vueuse/core";
|
|
3
|
+
import RuiButton from "../buttons/button/RuiButton.vue.js";
|
|
4
|
+
import { CalendarStateSymbol } from "./state.js";
|
|
5
|
+
import RuiIcon from "../icons/RuiIcon.vue.js";
|
|
6
|
+
import RuiCalendarMenu from "./RuiCalendarMenu.vue.js";
|
|
7
|
+
const _hoisted_1 = { class: "calendar-header" };
|
|
8
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
9
|
+
...{
|
|
10
|
+
name: "RuiCalendarHeader",
|
|
11
|
+
inheritAttrs: false
|
|
12
|
+
},
|
|
13
|
+
__name: "RuiCalendarHeader",
|
|
14
|
+
props: /* @__PURE__ */ mergeModels({
|
|
15
|
+
title: {},
|
|
16
|
+
viewMonth: {},
|
|
17
|
+
viewYear: {}
|
|
18
|
+
}, {
|
|
19
|
+
"menu-open": { type: Boolean, ...{ required: true } },
|
|
20
|
+
"menu-openModifiers": {}
|
|
21
|
+
}),
|
|
22
|
+
emits: /* @__PURE__ */ mergeModels(["prev-month", "next-month", "select-month"], ["update:menu-open"]),
|
|
23
|
+
setup(__props, { emit: __emit }) {
|
|
24
|
+
const isMenuOpen = useModel(__props, "menu-open");
|
|
25
|
+
const props = __props;
|
|
26
|
+
const emit = __emit;
|
|
27
|
+
const anchorEl = ref();
|
|
28
|
+
const calendarState = inject(CalendarStateSymbol);
|
|
29
|
+
const canGoToNext = computed(() => {
|
|
30
|
+
const { maxDate } = calendarState;
|
|
31
|
+
if (!isDefined(maxDate)) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
const date = new Date(props.viewYear, props.viewMonth);
|
|
35
|
+
return date.getTime() < get(maxDate).getTime();
|
|
36
|
+
});
|
|
37
|
+
const canGoToPrev = computed(() => {
|
|
38
|
+
const { minDate } = calendarState;
|
|
39
|
+
if (!isDefined(minDate)) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
const date = new Date(props.viewYear, props.viewMonth);
|
|
43
|
+
return date.getTime() > get(minDate).getTime();
|
|
44
|
+
});
|
|
45
|
+
function handleTitleClick(e) {
|
|
46
|
+
set(anchorEl, e.currentTarget ?? void 0);
|
|
47
|
+
set(isMenuOpen, true);
|
|
48
|
+
}
|
|
49
|
+
function handleDateSelection(selection) {
|
|
50
|
+
emit("select-month", selection);
|
|
51
|
+
}
|
|
52
|
+
return (_ctx, _cache) => {
|
|
53
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
54
|
+
createVNode(RuiButton, {
|
|
55
|
+
type: "button",
|
|
56
|
+
class: "nav-button",
|
|
57
|
+
icon: "",
|
|
58
|
+
disabled: !canGoToPrev.value,
|
|
59
|
+
variant: "text",
|
|
60
|
+
onClick: _cache[0] || (_cache[0] = withModifiers(($event) => emit("prev-month"), ["stop"]))
|
|
61
|
+
}, {
|
|
62
|
+
default: withCtx(() => [
|
|
63
|
+
createVNode(RuiIcon, {
|
|
64
|
+
name: "lu-chevron-left",
|
|
65
|
+
size: "20"
|
|
66
|
+
})
|
|
67
|
+
]),
|
|
68
|
+
_: 1
|
|
69
|
+
}, 8, ["disabled"]),
|
|
70
|
+
createElementVNode("h3", {
|
|
71
|
+
class: "header-title",
|
|
72
|
+
onClick: _cache[1] || (_cache[1] = withModifiers(($event) => handleTitleClick($event), ["stop"]))
|
|
73
|
+
}, [
|
|
74
|
+
createTextVNode(toDisplayString(__props.title) + " ", 1),
|
|
75
|
+
createVNode(RuiIcon, {
|
|
76
|
+
name: "lu-chevron-down",
|
|
77
|
+
size: "16",
|
|
78
|
+
class: "ml-1"
|
|
79
|
+
})
|
|
80
|
+
]),
|
|
81
|
+
createVNode(RuiCalendarMenu, {
|
|
82
|
+
modelValue: isMenuOpen.value,
|
|
83
|
+
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => isMenuOpen.value = $event),
|
|
84
|
+
"anchor-el": anchorEl.value,
|
|
85
|
+
"view-month": __props.viewMonth,
|
|
86
|
+
"view-year": __props.viewYear,
|
|
87
|
+
onSelect: _cache[3] || (_cache[3] = ($event) => handleDateSelection($event))
|
|
88
|
+
}, null, 8, ["modelValue", "anchor-el", "view-month", "view-year"]),
|
|
89
|
+
createVNode(RuiButton, {
|
|
90
|
+
type: "button",
|
|
91
|
+
class: "nav-button",
|
|
92
|
+
variant: "text",
|
|
93
|
+
icon: "",
|
|
94
|
+
disabled: !canGoToNext.value,
|
|
95
|
+
onClick: _cache[4] || (_cache[4] = withModifiers(($event) => emit("next-month"), ["stop"]))
|
|
96
|
+
}, {
|
|
97
|
+
default: withCtx(() => [
|
|
98
|
+
createVNode(RuiIcon, {
|
|
99
|
+
name: "lu-chevron-right",
|
|
100
|
+
size: "20"
|
|
101
|
+
})
|
|
102
|
+
]),
|
|
103
|
+
_: 1
|
|
104
|
+
}, 8, ["disabled"])
|
|
105
|
+
]);
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
export {
|
|
110
|
+
_sfc_main as default
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=RuiCalendarHeader.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuiCalendarHeader.vue2.js","sources":["../../../src/components/calendar/RuiCalendarHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { computed, inject, ref } from 'vue';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport { CalendarStateSymbol, type MonthYearSelection, type RuiCalendarState } from '@/components/calendar/state';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiCalendarMenu from './RuiCalendarMenu.vue';\n\ndefineOptions({\n name: 'RuiCalendarHeader',\n inheritAttrs: false,\n});\n\nconst isMenuOpen = defineModel<boolean>('menu-open', { required: true });\n\nconst props = defineProps<{\n title: string;\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst emit = defineEmits<{\n 'prev-month': [];\n 'next-month': [];\n 'select-month': [MonthYearSelection];\n}>();\n\nconst anchorEl = ref<HTMLElement>();\n\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\nconst canGoToNext = computed<boolean>(() => {\n const { maxDate } = calendarState;\n if (!isDefined(maxDate)) {\n return true;\n }\n\n const date = new Date(props.viewYear, props.viewMonth);\n return date.getTime() < get(maxDate).getTime();\n});\n\nconst canGoToPrev = computed<boolean>(() => {\n const { minDate } = calendarState;\n if (!isDefined(minDate)) {\n return true;\n }\n\n const date = new Date(props.viewYear, props.viewMonth);\n return date.getTime() > get(minDate).getTime();\n});\n\nfunction handleTitleClick(e: Event) {\n set(anchorEl, e.currentTarget as HTMLElement ?? undefined);\n set(isMenuOpen, true);\n}\n\nfunction handleDateSelection(selection: MonthYearSelection) {\n emit('select-month', selection);\n}\n</script>\n\n<template>\n <div class=\"calendar-header\">\n <RuiButton\n type=\"button\"\n class=\"nav-button\"\n icon\n :disabled=\"!canGoToPrev\"\n variant=\"text\"\n @click.stop=\"emit('prev-month')\"\n >\n <RuiIcon\n name=\"lu-chevron-left\"\n size=\"20\"\n />\n </RuiButton>\n\n <h3\n class=\"header-title\"\n @click.stop=\"handleTitleClick($event)\"\n >\n {{ title }}\n <RuiIcon\n name=\"lu-chevron-down\"\n size=\"16\"\n class=\"ml-1\"\n />\n </h3>\n\n <RuiCalendarMenu\n v-model=\"isMenuOpen\"\n :anchor-el=\"anchorEl\"\n :view-month=\"viewMonth\"\n :view-year=\"viewYear\"\n @select=\"handleDateSelection($event)\"\n />\n\n <RuiButton\n type=\"button\"\n class=\"nav-button\"\n variant=\"text\"\n icon\n :disabled=\"!canGoToNext\"\n @click.stop=\"emit('next-month')\"\n >\n <RuiIcon\n name=\"lu-chevron-right\"\n size=\"20\"\n />\n </RuiButton>\n </div>\n</template>\n\n<style scoped>\n.calendar-header {\n @apply flex items-center justify-between px-4 py-3;\n}\n\n.header-title {\n @apply font-medium text-gray-800 dark:text-gray-200 flex items-center cursor-pointer pl-8;\n}\n\n.nav-button {\n @apply p-1 rounded-full text-gray-500 hover:text-rui-primary hover:bg-gray-100;\n @apply dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-rui-primary;\n}\n</style>\n"],"names":["_useModel","_openBlock","_createElementBlock","_createVNode","_createElementVNode","_withModifiers","_createTextVNode","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAaA,UAAM,aAAaA,kBAAqB,WAA+B;AAEvE,UAAM,QAAQ;AAMd,UAAM,OAAO;AAMb,UAAM,WAAW,IAAA;AAEjB,UAAM,gBAAgB,OAAyB,mBAAmB;AAElE,UAAM,cAAc,SAAkB,MAAM;AAC1C,YAAM,EAAE,YAAY;AACpB,UAAI,CAAC,UAAU,OAAO,GAAG;AACvB,eAAO;AAAA,MACT;AAEA,YAAM,OAAO,IAAI,KAAK,MAAM,UAAU,MAAM,SAAS;AACrD,aAAO,KAAK,QAAA,IAAY,IAAI,OAAO,EAAE,QAAA;AAAA,IACvC,CAAC;AAED,UAAM,cAAc,SAAkB,MAAM;AAC1C,YAAM,EAAE,YAAY;AACpB,UAAI,CAAC,UAAU,OAAO,GAAG;AACvB,eAAO;AAAA,MACT;AAEA,YAAM,OAAO,IAAI,KAAK,MAAM,UAAU,MAAM,SAAS;AACrD,aAAO,KAAK,QAAA,IAAY,IAAI,OAAO,EAAE,QAAA;AAAA,IACvC,CAAC;AAED,aAAS,iBAAiB,GAAU;AAClC,UAAI,UAAU,EAAE,iBAAgC,MAAS;AACzD,UAAI,YAAY,IAAI;AAAA,IACtB;AAEA,aAAS,oBAAoB,WAA+B;AAC1D,WAAK,gBAAgB,SAAS;AAAA,IAChC;;AAIE,aAAAC,UAAA,GAAAC,mBAgDM,OAhDN,YAgDM;AAAA,QA/CJC,YAYY,WAAA;AAAA,UAXV,MAAK;AAAA,UACL,OAAM;AAAA,UACN,MAAA;AAAA,UACC,WAAW,YAAA;AAAA,UACZ,SAAQ;AAAA,UACP,6DAAY,KAAI,YAAA,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;2BAEjB,MAGE;AAAA,YAHFA,YAGE,SAAA;AAAA,cAFA,MAAK;AAAA,cACL,MAAK;AAAA,YAAA;;;;QAITC,mBAUK,MAAA;AAAA,UATH,OAAM;AAAA,UACL,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAC,cAAA,CAAA,WAAO,iBAAiB,MAAM,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;UAEjCC,gBAAAC,gBAAA,QAAA,KAAK,IAAG,KACX,CAAA;AAAA,UAAAJ,YAIE,SAAA;AAAA,YAHA,MAAK;AAAA,YACL,MAAK;AAAA,YACL,OAAM;AAAA,UAAA;;QAIVA,YAME,iBAAA;AAAA,sBALS,WAAA;AAAA,uEAAA,WAAU,QAAA;AAAA,UAClB,aAAW,SAAA;AAAA,UACX,cAAY,QAAA;AAAA,UACZ,aAAW,QAAA;AAAA,UACX,UAAM,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,oBAAoB,MAAM;AAAA,QAAA;QAGrCA,YAYY,WAAA;AAAA,UAXV,MAAK;AAAA,UACL,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,MAAA;AAAA,UACC,WAAW,YAAA;AAAA,UACX,6DAAY,KAAI,YAAA,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;2BAEjB,MAGE;AAAA,YAHFA,YAGE,SAAA;AAAA,cAFA,MAAK;AAAA,cACL,MAAK;AAAA,YAAA;;;;;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import _sfc_main from "./RuiCalendarMenu.vue2.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const RuiCalendarMenu = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-649d1d22"]]);
|
|
5
|
+
export {
|
|
6
|
+
RuiCalendarMenu as default
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=RuiCalendarMenu.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuiCalendarMenu.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { defineComponent, mergeModels, useModel, ref, inject, watch, createBlock, openBlock, withCtx, createElementVNode, createElementBlock, createCommentVNode, createVNode, withModifiers, unref, toDisplayString, Fragment, renderList, normalizeClass } from "vue";
|
|
2
|
+
import { get, set, isDefined } from "@vueuse/core";
|
|
3
|
+
import { getShortMonthNames, CalendarStateSymbol } from "./state.js";
|
|
4
|
+
import RuiIcon from "../icons/RuiIcon.vue.js";
|
|
5
|
+
import RuiMenu from "../overlays/menu/RuiMenu.vue.js";
|
|
6
|
+
import RuiButton from "../buttons/button/RuiButton.vue.js";
|
|
7
|
+
const _hoisted_1 = { class: "menu-container" };
|
|
8
|
+
const _hoisted_2 = { class: "menu-header" };
|
|
9
|
+
const _hoisted_3 = {
|
|
10
|
+
key: 0,
|
|
11
|
+
class: "month-grid"
|
|
12
|
+
};
|
|
13
|
+
const _hoisted_4 = ["disabled", "onClick"];
|
|
14
|
+
const _hoisted_5 = {
|
|
15
|
+
key: 1,
|
|
16
|
+
class: "year-grid"
|
|
17
|
+
};
|
|
18
|
+
const _hoisted_6 = ["disabled", "onClick"];
|
|
19
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
20
|
+
...{
|
|
21
|
+
name: "RuiCalendarMenu",
|
|
22
|
+
inheritAttrs: false
|
|
23
|
+
},
|
|
24
|
+
__name: "RuiCalendarMenu",
|
|
25
|
+
props: /* @__PURE__ */ mergeModels({
|
|
26
|
+
anchorEl: {},
|
|
27
|
+
viewMonth: {},
|
|
28
|
+
viewYear: {}
|
|
29
|
+
}, {
|
|
30
|
+
"modelValue": { type: Boolean },
|
|
31
|
+
"modelModifiers": {}
|
|
32
|
+
}),
|
|
33
|
+
emits: /* @__PURE__ */ mergeModels(["select"], ["update:modelValue"]),
|
|
34
|
+
setup(__props, { emit: __emit }) {
|
|
35
|
+
const modelValue = useModel(__props, "modelValue");
|
|
36
|
+
const props = __props;
|
|
37
|
+
const emit = __emit;
|
|
38
|
+
const viewMode = ref("months");
|
|
39
|
+
const startYear = ref(props.viewYear - 6);
|
|
40
|
+
const months = getShortMonthNames();
|
|
41
|
+
const calendarState = inject(CalendarStateSymbol);
|
|
42
|
+
const yearRange = ref([]);
|
|
43
|
+
const monthsInRange = ref([]);
|
|
44
|
+
const yearsInRange = ref([]);
|
|
45
|
+
const title = ref("");
|
|
46
|
+
const canGoToNext = ref(true);
|
|
47
|
+
const canGoToPrev = ref(true);
|
|
48
|
+
function calculateYearRange() {
|
|
49
|
+
const start = get(startYear);
|
|
50
|
+
set(yearRange, Array.from({ length: 12 }, (_, i) => start + i));
|
|
51
|
+
}
|
|
52
|
+
function calculateTitle() {
|
|
53
|
+
if (get(viewMode) === "months") {
|
|
54
|
+
set(title, props.viewYear.toString());
|
|
55
|
+
} else {
|
|
56
|
+
const range = get(yearRange);
|
|
57
|
+
set(title, `${range[0]} - ${range.at(-1)}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function calculateNavigation() {
|
|
61
|
+
const { maxDate, minDate } = calendarState;
|
|
62
|
+
const mode = get(viewMode);
|
|
63
|
+
if (mode === "months") {
|
|
64
|
+
const nextYear = props.viewYear + 1;
|
|
65
|
+
const previousYear = props.viewYear - 1;
|
|
66
|
+
set(canGoToNext, !isDefined(maxDate) || nextYear <= get(maxDate).getFullYear());
|
|
67
|
+
set(canGoToPrev, !isDefined(minDate) || previousYear >= get(minDate).getFullYear());
|
|
68
|
+
} else {
|
|
69
|
+
const lastYearInRange = get(startYear) + 11;
|
|
70
|
+
const firstYearInRange = get(startYear);
|
|
71
|
+
const nextRangeStart = lastYearInRange + 1;
|
|
72
|
+
set(canGoToNext, !isDefined(maxDate) || nextRangeStart <= get(maxDate).getFullYear());
|
|
73
|
+
const prevRangeEnd = firstYearInRange - 1;
|
|
74
|
+
set(canGoToPrev, !isDefined(minDate) || prevRangeEnd >= get(minDate).getFullYear());
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function calculateMonthsInRange() {
|
|
78
|
+
const { minDate, maxDate } = calendarState;
|
|
79
|
+
const currentYear = props.viewYear;
|
|
80
|
+
const result = new Array(12).fill(true);
|
|
81
|
+
if (isDefined(minDate) || isDefined(maxDate)) {
|
|
82
|
+
for (let month = 0; month < 12; month++) {
|
|
83
|
+
const date = new Date(currentYear, month);
|
|
84
|
+
if (isDefined(maxDate) && date > get(maxDate)) {
|
|
85
|
+
result[month] = false;
|
|
86
|
+
}
|
|
87
|
+
if (isDefined(minDate) && date < get(minDate)) {
|
|
88
|
+
result[month] = false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
set(monthsInRange, result);
|
|
93
|
+
}
|
|
94
|
+
function calculateYearsInRange() {
|
|
95
|
+
const { minDate, maxDate } = calendarState;
|
|
96
|
+
const range = get(yearRange);
|
|
97
|
+
const currentMonth = props.viewMonth;
|
|
98
|
+
if (!isDefined(minDate) && !isDefined(maxDate)) {
|
|
99
|
+
set(yearsInRange, new Array(range.length).fill(true));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const result = range.map((year) => {
|
|
103
|
+
const date = new Date(year, currentMonth);
|
|
104
|
+
if (isDefined(maxDate) && date > get(maxDate)) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return !isDefined(minDate) || date >= get(minDate);
|
|
108
|
+
});
|
|
109
|
+
set(yearsInRange, result);
|
|
110
|
+
}
|
|
111
|
+
calculateYearRange();
|
|
112
|
+
calculateTitle();
|
|
113
|
+
calculateNavigation();
|
|
114
|
+
calculateMonthsInRange();
|
|
115
|
+
calculateYearsInRange();
|
|
116
|
+
watch(startYear, () => {
|
|
117
|
+
calculateYearRange();
|
|
118
|
+
calculateTitle();
|
|
119
|
+
calculateNavigation();
|
|
120
|
+
calculateYearsInRange();
|
|
121
|
+
});
|
|
122
|
+
watch(viewMode, () => {
|
|
123
|
+
calculateTitle();
|
|
124
|
+
calculateNavigation();
|
|
125
|
+
});
|
|
126
|
+
watch(() => props.viewYear, () => {
|
|
127
|
+
calculateTitle();
|
|
128
|
+
calculateNavigation();
|
|
129
|
+
calculateMonthsInRange();
|
|
130
|
+
calculateYearsInRange();
|
|
131
|
+
});
|
|
132
|
+
watch(() => props.viewMonth, () => {
|
|
133
|
+
calculateYearsInRange();
|
|
134
|
+
});
|
|
135
|
+
function toggleSelection() {
|
|
136
|
+
set(viewMode, get(viewMode) === "months" ? "years" : "months");
|
|
137
|
+
}
|
|
138
|
+
function selectMonth(month) {
|
|
139
|
+
if (!get(monthsInRange)[month])
|
|
140
|
+
return;
|
|
141
|
+
emit("select", { month, year: props.viewYear });
|
|
142
|
+
set(modelValue, false);
|
|
143
|
+
}
|
|
144
|
+
function selectYear(year) {
|
|
145
|
+
const yearIndex = get(yearRange).indexOf(year);
|
|
146
|
+
if (yearIndex === -1 || !get(yearsInRange)[yearIndex])
|
|
147
|
+
return;
|
|
148
|
+
emit("select", { month: props.viewMonth, year });
|
|
149
|
+
set(viewMode, "months");
|
|
150
|
+
}
|
|
151
|
+
function handleNext() {
|
|
152
|
+
if (get(viewMode) === "months") {
|
|
153
|
+
const nextYear = props.viewYear + 1;
|
|
154
|
+
selectYear(nextYear);
|
|
155
|
+
} else {
|
|
156
|
+
const lastYearInRange = get(startYear) + 11;
|
|
157
|
+
set(startYear, lastYearInRange + 1);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function handlePrev() {
|
|
161
|
+
if (get(viewMode) === "months") {
|
|
162
|
+
const previousYear = props.viewYear - 1;
|
|
163
|
+
selectYear(previousYear);
|
|
164
|
+
} else {
|
|
165
|
+
const firstYearInRange = get(startYear);
|
|
166
|
+
set(startYear, firstYearInRange - 12);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return (_ctx, _cache) => {
|
|
170
|
+
return openBlock(), createBlock(RuiMenu, {
|
|
171
|
+
modelValue: modelValue.value,
|
|
172
|
+
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => modelValue.value = $event),
|
|
173
|
+
"anchor-el": __props.anchorEl,
|
|
174
|
+
placement: "bottom-start"
|
|
175
|
+
}, {
|
|
176
|
+
default: withCtx(() => [
|
|
177
|
+
createElementVNode("div", _hoisted_1, [
|
|
178
|
+
createElementVNode("div", _hoisted_2, [
|
|
179
|
+
createVNode(RuiButton, {
|
|
180
|
+
type: "button",
|
|
181
|
+
class: "nav-button",
|
|
182
|
+
icon: "",
|
|
183
|
+
disabled: !unref(get)(canGoToPrev.value),
|
|
184
|
+
variant: "text",
|
|
185
|
+
onClick: _cache[0] || (_cache[0] = withModifiers(($event) => handlePrev(), ["stop"]))
|
|
186
|
+
}, {
|
|
187
|
+
default: withCtx(() => [
|
|
188
|
+
createVNode(RuiIcon, {
|
|
189
|
+
name: "lu-chevron-left",
|
|
190
|
+
size: "20"
|
|
191
|
+
})
|
|
192
|
+
]),
|
|
193
|
+
_: 1
|
|
194
|
+
}, 8, ["disabled"]),
|
|
195
|
+
createElementVNode("div", {
|
|
196
|
+
class: "flex-1 text-center cursor-pointer",
|
|
197
|
+
onClick: _cache[1] || (_cache[1] = withModifiers(($event) => toggleSelection(), ["stop"]))
|
|
198
|
+
}, toDisplayString(unref(get)(title.value)), 1),
|
|
199
|
+
createVNode(RuiButton, {
|
|
200
|
+
type: "button",
|
|
201
|
+
class: "nav-button",
|
|
202
|
+
icon: "",
|
|
203
|
+
disabled: !unref(get)(canGoToNext.value),
|
|
204
|
+
variant: "text",
|
|
205
|
+
onClick: _cache[2] || (_cache[2] = withModifiers(($event) => handleNext(), ["stop"]))
|
|
206
|
+
}, {
|
|
207
|
+
default: withCtx(() => [
|
|
208
|
+
createVNode(RuiIcon, {
|
|
209
|
+
name: "lu-chevron-right",
|
|
210
|
+
size: "20"
|
|
211
|
+
})
|
|
212
|
+
]),
|
|
213
|
+
_: 1
|
|
214
|
+
}, 8, ["disabled"])
|
|
215
|
+
]),
|
|
216
|
+
viewMode.value === "months" ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
|
217
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(months), (month, index) => {
|
|
218
|
+
return openBlock(), createElementBlock("button", {
|
|
219
|
+
key: index,
|
|
220
|
+
type: "button",
|
|
221
|
+
class: normalizeClass(["h-9 w-full flex items-center justify-center text-sm font-medium rounded-md transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50", [
|
|
222
|
+
{
|
|
223
|
+
"bg-rui-primary text-white hover:bg-rui-primary-darker active:bg-rui-primary-darker dark:bg-rui-primary dark:text-white dark:hover:bg-rui-primary-darker": index === __props.viewMonth && unref(get)(monthsInRange.value)[index],
|
|
224
|
+
"bg-gray-300 text-gray-500 dark:bg-gray-600 dark:text-gray-400": index === __props.viewMonth && !unref(get)(monthsInRange.value)[index],
|
|
225
|
+
"text-gray-700 bg-transparent hover:bg-gray-100 active:bg-gray-200 dark:text-gray-300 dark:hover:bg-gray-700 dark:active:bg-gray-600": index !== __props.viewMonth && unref(get)(monthsInRange.value)[index],
|
|
226
|
+
"opacity-50 cursor-not-allowed bg-transparent hover:bg-transparent active:bg-transparent dark:hover:bg-transparent dark:active:bg-transparent pointer-events-none text-gray-400 dark:text-gray-600": !unref(get)(monthsInRange.value)[index]
|
|
227
|
+
}
|
|
228
|
+
]]),
|
|
229
|
+
disabled: !unref(get)(monthsInRange.value)[index],
|
|
230
|
+
onClick: withModifiers(($event) => selectMonth(index), ["stop"])
|
|
231
|
+
}, toDisplayString(month.substring(0, 3)), 11, _hoisted_4);
|
|
232
|
+
}), 128))
|
|
233
|
+
])) : viewMode.value === "years" ? (openBlock(), createElementBlock("div", _hoisted_5, [
|
|
234
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(yearRange.value, (year, index) => {
|
|
235
|
+
return openBlock(), createElementBlock("button", {
|
|
236
|
+
key: year,
|
|
237
|
+
type: "button",
|
|
238
|
+
class: normalizeClass(["h-9 w-full flex items-center justify-center text-sm font-medium rounded-md transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50", [
|
|
239
|
+
{
|
|
240
|
+
"bg-rui-primary text-white hover:bg-rui-primary-darker active:bg-rui-primary-darker dark:bg-rui-primary dark:text-white dark:hover:bg-rui-primary-darker": year === __props.viewYear && unref(get)(yearsInRange.value)[index],
|
|
241
|
+
"bg-gray-300 text-gray-500 dark:bg-gray-600 dark:text-gray-400": year === __props.viewYear && !unref(get)(yearsInRange.value)[index],
|
|
242
|
+
"text-gray-700 bg-transparent hover:bg-gray-100 active:bg-gray-200 dark:text-gray-300 dark:hover:bg-gray-700 dark:active:bg-gray-600": year !== __props.viewYear && unref(get)(yearsInRange.value)[index],
|
|
243
|
+
"opacity-50 cursor-not-allowed bg-transparent hover:bg-transparent active:bg-transparent dark:hover:bg-transparent dark:active:bg-transparent pointer-events-none text-gray-400 dark:text-gray-600": !unref(get)(yearsInRange.value)[index]
|
|
244
|
+
}
|
|
245
|
+
]]),
|
|
246
|
+
disabled: !unref(get)(yearsInRange.value)[index],
|
|
247
|
+
onClick: withModifiers(($event) => selectYear(year), ["stop"])
|
|
248
|
+
}, toDisplayString(year), 11, _hoisted_6);
|
|
249
|
+
}), 128))
|
|
250
|
+
])) : createCommentVNode("", true)
|
|
251
|
+
])
|
|
252
|
+
]),
|
|
253
|
+
_: 1
|
|
254
|
+
}, 8, ["modelValue", "anchor-el"]);
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
export {
|
|
259
|
+
_sfc_main as default
|
|
260
|
+
};
|
|
261
|
+
//# sourceMappingURL=RuiCalendarMenu.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuiCalendarMenu.vue2.js","sources":["../../../src/components/calendar/RuiCalendarMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { ref, watch } from 'vue';\nimport {\n CalendarStateSymbol,\n getShortMonthNames,\n type MonthYearSelection,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiMenu from '@/components/overlays/menu/RuiMenu.vue';\nimport RuiButton from '../buttons/button/RuiButton.vue';\n\ndefineOptions({\n name: 'RuiCalendarMenu',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<boolean>();\n\nconst props = defineProps<{\n anchorEl: HTMLElement | undefined;\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst emit = defineEmits<{\n select: [MonthYearSelection];\n}>();\n\n// Core reactive state - minimal\nconst viewMode = ref<'months' | 'years'>('months');\nconst startYear = ref<number>(props.viewYear - 6);\n\n// Pre-calculated constants\nconst months = getShortMonthNames();\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\n// Pre-calculated arrays for performance - using refs for better control\nconst yearRange = ref<number[]>([]);\nconst monthsInRange = ref<boolean[]>([]);\nconst yearsInRange = ref<boolean[]>([]);\nconst title = ref<string>('');\nconst canGoToNext = ref<boolean>(true);\nconst canGoToPrev = ref<boolean>(true);\n\n// Pre-calculation functions using VueUse get/set\nfunction calculateYearRange() {\n const start = get(startYear);\n set(yearRange, Array.from({ length: 12 }, (_, i) => start + i));\n}\n\nfunction calculateTitle() {\n if (get(viewMode) === 'months') {\n set(title, props.viewYear.toString());\n }\n else {\n const range = get(yearRange);\n set(title, `${range[0]} - ${range.at(-1)}`);\n }\n}\n\nfunction calculateNavigation() {\n const { maxDate, minDate } = calendarState;\n const mode = get(viewMode);\n\n if (mode === 'months') {\n const nextYear = props.viewYear + 1;\n const previousYear = props.viewYear - 1;\n\n set(canGoToNext, !isDefined(maxDate) || nextYear <= get(maxDate).getFullYear());\n set(canGoToPrev, !isDefined(minDate) || previousYear >= get(minDate).getFullYear());\n }\n else {\n const lastYearInRange = get(startYear) + 11;\n const firstYearInRange = get(startYear);\n\n // Check if we can navigate to the next range of years\n const nextRangeStart = lastYearInRange + 1;\n set(canGoToNext, !isDefined(maxDate) || nextRangeStart <= get(maxDate).getFullYear());\n\n // Check if we can navigate to the previous range of years\n const prevRangeEnd = firstYearInRange - 1;\n set(canGoToPrev, !isDefined(minDate) || prevRangeEnd >= get(minDate).getFullYear());\n }\n}\n\nfunction calculateMonthsInRange() {\n const { minDate, maxDate } = calendarState;\n const currentYear = props.viewYear;\n const result = new Array(12).fill(true);\n\n if (isDefined(minDate) || isDefined(maxDate)) {\n for (let month = 0; month < 12; month++) {\n const date = new Date(currentYear, month);\n if (isDefined(maxDate) && date > get(maxDate)) {\n result[month] = false;\n }\n if (isDefined(minDate) && date < get(minDate)) {\n result[month] = false;\n }\n }\n }\n\n set(monthsInRange, result);\n}\n\nfunction calculateYearsInRange() {\n const { minDate, maxDate } = calendarState;\n const range = get(yearRange);\n const currentMonth = props.viewMonth;\n\n if (!isDefined(minDate) && !isDefined(maxDate)) {\n set(yearsInRange, new Array(range.length).fill(true));\n return;\n }\n\n const result = range.map((year) => {\n const date = new Date(year, currentMonth);\n if (isDefined(maxDate) && date > get(maxDate)) {\n return false;\n }\n return !isDefined(minDate) || date >= get(minDate);\n });\n\n set(yearsInRange, result);\n}\n\n// Initial calculations\ncalculateYearRange();\ncalculateTitle();\ncalculateNavigation();\ncalculateMonthsInRange();\ncalculateYearsInRange();\n\n// Watchers for recalculation only when needed\nwatch(startYear, () => {\n calculateYearRange();\n calculateTitle();\n calculateNavigation();\n calculateYearsInRange();\n});\n\nwatch(viewMode, () => {\n calculateTitle();\n calculateNavigation();\n});\n\nwatch(() => props.viewYear, () => {\n calculateTitle();\n calculateNavigation();\n calculateMonthsInRange();\n calculateYearsInRange();\n});\n\nwatch(() => props.viewMonth, () => {\n calculateYearsInRange();\n});\n\nfunction toggleSelection() {\n set(viewMode, get(viewMode) === 'months' ? 'years' : 'months');\n}\n\nfunction selectMonth(month: number) {\n if (!get(monthsInRange)[month])\n return;\n emit('select', { month, year: props.viewYear });\n set(modelValue, false);\n}\n\nfunction selectYear(year: number) {\n const yearIndex = get(yearRange).indexOf(year);\n if (yearIndex === -1 || !get(yearsInRange)[yearIndex])\n return;\n\n emit('select', { month: props.viewMonth, year });\n set(viewMode, 'months');\n}\n\nfunction handleNext() {\n if (get(viewMode) === 'months') {\n const nextYear = props.viewYear + 1;\n selectYear(nextYear);\n }\n else {\n const lastYearInRange = get(startYear) + 11;\n set(startYear, lastYearInRange + 1);\n }\n}\n\nfunction handlePrev() {\n if (get(viewMode) === 'months') {\n const previousYear = props.viewYear - 1;\n selectYear(previousYear);\n }\n else {\n const firstYearInRange = get(startYear);\n set(startYear, firstYearInRange - 12);\n }\n}\n</script>\n\n<template>\n <RuiMenu\n v-model=\"modelValue\"\n :anchor-el=\"anchorEl\"\n placement=\"bottom-start\"\n >\n <div class=\"menu-container\">\n <div class=\"menu-header\">\n <RuiButton\n type=\"button\"\n class=\"nav-button\"\n icon\n :disabled=\"!get(canGoToPrev)\"\n variant=\"text\"\n @click.stop=\"handlePrev()\"\n >\n <RuiIcon\n name=\"lu-chevron-left\"\n size=\"20\"\n />\n </RuiButton>\n\n <div\n class=\"flex-1 text-center cursor-pointer\"\n @click.stop=\"toggleSelection()\"\n >\n {{ get(title) }}\n </div>\n\n <RuiButton\n type=\"button\"\n class=\"nav-button\"\n icon\n :disabled=\"!get(canGoToNext)\"\n variant=\"text\"\n @click.stop=\"handleNext()\"\n >\n <RuiIcon\n name=\"lu-chevron-right\"\n size=\"20\"\n />\n </RuiButton>\n </div>\n\n <div\n v-if=\"viewMode === 'months'\"\n class=\"month-grid\"\n >\n <button\n v-for=\"(month, index) in months\"\n :key=\"index\"\n type=\"button\"\n class=\"h-9 w-full flex items-center justify-center text-sm font-medium rounded-md transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50\"\n :class=\"[\n {\n 'bg-rui-primary text-white hover:bg-rui-primary-darker active:bg-rui-primary-darker dark:bg-rui-primary dark:text-white dark:hover:bg-rui-primary-darker': index === viewMonth && get(monthsInRange)[index],\n 'bg-gray-300 text-gray-500 dark:bg-gray-600 dark:text-gray-400': index === viewMonth && !get(monthsInRange)[index],\n 'text-gray-700 bg-transparent hover:bg-gray-100 active:bg-gray-200 dark:text-gray-300 dark:hover:bg-gray-700 dark:active:bg-gray-600': index !== viewMonth && get(monthsInRange)[index],\n 'opacity-50 cursor-not-allowed bg-transparent hover:bg-transparent active:bg-transparent dark:hover:bg-transparent dark:active:bg-transparent pointer-events-none text-gray-400 dark:text-gray-600': !get(monthsInRange)[index],\n },\n ]\"\n :disabled=\"!get(monthsInRange)[index]\"\n @click.stop=\"selectMonth(index)\"\n >\n {{ month.substring(0, 3) }}\n </button>\n </div>\n\n <div\n v-else-if=\"viewMode === 'years'\"\n class=\"year-grid\"\n >\n <button\n v-for=\"(year, index) in yearRange\"\n :key=\"year\"\n type=\"button\"\n class=\"h-9 w-full flex items-center justify-center text-sm font-medium rounded-md transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50\"\n :class=\"[\n {\n 'bg-rui-primary text-white hover:bg-rui-primary-darker active:bg-rui-primary-darker dark:bg-rui-primary dark:text-white dark:hover:bg-rui-primary-darker': year === viewYear && get(yearsInRange)[index],\n 'bg-gray-300 text-gray-500 dark:bg-gray-600 dark:text-gray-400': year === viewYear && !get(yearsInRange)[index],\n 'text-gray-700 bg-transparent hover:bg-gray-100 active:bg-gray-200 dark:text-gray-300 dark:hover:bg-gray-700 dark:active:bg-gray-600': year !== viewYear && get(yearsInRange)[index],\n 'opacity-50 cursor-not-allowed bg-transparent hover:bg-transparent active:bg-transparent dark:hover:bg-transparent dark:active:bg-transparent pointer-events-none text-gray-400 dark:text-gray-600': !get(yearsInRange)[index],\n },\n ]\"\n :disabled=\"!get(yearsInRange)[index]\"\n @click.stop=\"selectYear(year)\"\n >\n {{ year }}\n </button>\n </div>\n </div>\n </RuiMenu>\n</template>\n\n<style scoped>\n.menu-container {\n @apply w-64 shadow-lg overflow-hidden;\n}\n\n.menu-header {\n @apply flex items-center justify-center p-1 font-medium text-gray-800 dark:text-gray-200;\n @apply border-b border-rui-grey-200 dark:border-rui-grey-800 cursor-pointer hover:bg-rui-grey-100 dark:hover:bg-rui-grey-800;\n}\n\n.month-grid {\n @apply grid grid-cols-3 gap-1 p-2;\n}\n\n.year-grid {\n @apply grid grid-cols-3 gap-1 p-2;\n}\n</style>\n"],"names":["_useModel","_createBlock","_createElementVNode","_createVNode","_unref","_toDisplayString","_openBlock","_createElementBlock","_Fragment","_renderList","_withModifiers"],"mappings":"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"}
|