@rotki/ui-library 2.8.1 → 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,129 @@
|
|
|
1
|
+
import { get, set } from "@vueuse/shared";
|
|
2
|
+
import { assert } from "../../../utils/assert.js";
|
|
3
|
+
import { computed } from "vue";
|
|
4
|
+
function useAutoCompleteValue(modelValue, options, opts, deps) {
|
|
5
|
+
const multiple = computed(() => Array.isArray(get(modelValue)));
|
|
6
|
+
const optionsMap = computed(() => {
|
|
7
|
+
const map = /* @__PURE__ */ new Map();
|
|
8
|
+
const optionsData = get(options);
|
|
9
|
+
for (const item of optionsData) {
|
|
10
|
+
map.set(deps.getIdentifier(item), item);
|
|
11
|
+
}
|
|
12
|
+
return map;
|
|
13
|
+
});
|
|
14
|
+
function convertModelValueToArray(modelValueData) {
|
|
15
|
+
if (!modelValueData)
|
|
16
|
+
return [];
|
|
17
|
+
return Array.isArray(modelValueData) ? modelValueData : [modelValueData];
|
|
18
|
+
}
|
|
19
|
+
function filterValuesByOptions(valueArray, optionsMapData, customValue, returnObject) {
|
|
20
|
+
const filtered = [];
|
|
21
|
+
filtered.length = valueArray.length;
|
|
22
|
+
let index = 0;
|
|
23
|
+
for (const val of valueArray) {
|
|
24
|
+
const identifier = deps.getIdentifier(val);
|
|
25
|
+
const inOptions = optionsMapData.get(identifier);
|
|
26
|
+
if (inOptions) {
|
|
27
|
+
filtered[index++] = inOptions;
|
|
28
|
+
} else if (customValue) {
|
|
29
|
+
filtered[index++] = deps.textValueToProperValue(val, returnObject);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
filtered.length = index;
|
|
33
|
+
return filtered;
|
|
34
|
+
}
|
|
35
|
+
function filterValuesByIdentifier(valueArray, optionsMapData, customValue, returnObject) {
|
|
36
|
+
const filtered = [];
|
|
37
|
+
filtered.length = valueArray.length;
|
|
38
|
+
let index = 0;
|
|
39
|
+
for (const val of valueArray) {
|
|
40
|
+
const inOptions = optionsMapData.get(val);
|
|
41
|
+
if (inOptions) {
|
|
42
|
+
filtered[index++] = inOptions;
|
|
43
|
+
} else if (customValue) {
|
|
44
|
+
filtered[index++] = deps.textValueToProperValue(val, returnObject);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
filtered.length = index;
|
|
48
|
+
return filtered;
|
|
49
|
+
}
|
|
50
|
+
function processReturnObjectValue(modelValueData, optionsMapData, returnObject, customValue, shouldUpdateInternalSearch) {
|
|
51
|
+
const multipleValue = Array.isArray(modelValueData);
|
|
52
|
+
const valueArray = convertModelValueToArray(modelValueData);
|
|
53
|
+
const filtered = filterValuesByOptions(valueArray, optionsMapData, customValue, returnObject);
|
|
54
|
+
if (multipleValue || filtered.length === 0) {
|
|
55
|
+
if (shouldUpdateInternalSearch)
|
|
56
|
+
deps.updateInternalSearch();
|
|
57
|
+
return filtered;
|
|
58
|
+
}
|
|
59
|
+
const val = filtered[0];
|
|
60
|
+
assert(val);
|
|
61
|
+
if (shouldUpdateInternalSearch)
|
|
62
|
+
deps.updateInternalSearch(deps.getText(val));
|
|
63
|
+
return [val];
|
|
64
|
+
}
|
|
65
|
+
function processStandardValue(modelValueData, optionsMapData, returnObject, customValue, shouldUpdateInternalSearch) {
|
|
66
|
+
const valueArray = convertModelValueToArray(modelValueData);
|
|
67
|
+
const filtered = filterValuesByIdentifier(valueArray, optionsMapData, customValue, returnObject);
|
|
68
|
+
if (shouldUpdateInternalSearch) {
|
|
69
|
+
if (filtered.length > 0) {
|
|
70
|
+
const firstItem = filtered[0];
|
|
71
|
+
assert(firstItem);
|
|
72
|
+
deps.updateInternalSearch(deps.getText(firstItem));
|
|
73
|
+
} else {
|
|
74
|
+
deps.updateInternalSearch();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return filtered;
|
|
78
|
+
}
|
|
79
|
+
function onUpdateModelValue(value2) {
|
|
80
|
+
set(modelValue, value2);
|
|
81
|
+
}
|
|
82
|
+
function setSelected(selected) {
|
|
83
|
+
const keyAttr = get(opts.keyAttr);
|
|
84
|
+
const returnObject = get(opts.returnObject);
|
|
85
|
+
const selection = keyAttr && !returnObject ? selected.map((item) => item[keyAttr]) : selected;
|
|
86
|
+
if (get(multiple))
|
|
87
|
+
return onUpdateModelValue(selection);
|
|
88
|
+
if (selection.length === 0)
|
|
89
|
+
return onUpdateModelValue(void 0);
|
|
90
|
+
return onUpdateModelValue(selection[0]);
|
|
91
|
+
}
|
|
92
|
+
const value = computed({
|
|
93
|
+
get: () => {
|
|
94
|
+
const modelValueData = get(modelValue);
|
|
95
|
+
const keyAttr = get(opts.keyAttr);
|
|
96
|
+
const returnObject = get(opts.returnObject) ?? false;
|
|
97
|
+
const customValue = get(opts.customValue) ?? false;
|
|
98
|
+
const optionsMapData = get(optionsMap);
|
|
99
|
+
const shouldUpdateInternalSearch = get(deps.shouldApplyValueAsSearch) && !get(deps.isOpen);
|
|
100
|
+
if (keyAttr && returnObject) {
|
|
101
|
+
return processReturnObjectValue(
|
|
102
|
+
modelValueData,
|
|
103
|
+
optionsMapData,
|
|
104
|
+
returnObject,
|
|
105
|
+
customValue,
|
|
106
|
+
shouldUpdateInternalSearch
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
return processStandardValue(
|
|
110
|
+
modelValueData,
|
|
111
|
+
optionsMapData,
|
|
112
|
+
returnObject,
|
|
113
|
+
customValue,
|
|
114
|
+
shouldUpdateInternalSearch
|
|
115
|
+
);
|
|
116
|
+
},
|
|
117
|
+
set: (selected) => {
|
|
118
|
+
setSelected(selected);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
return {
|
|
122
|
+
setSelected,
|
|
123
|
+
value
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export {
|
|
127
|
+
useAutoCompleteValue
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value.js","sources":["../../../../src/composables/forms/auto-complete/value.ts"],"sourcesContent":["import type { ComputedRef, MaybeRef, Ref } from 'vue';\nimport { get, set } from '@vueuse/shared';\nimport { assert } from '@/utils/assert';\n\nexport interface UseAutoCompleteValueOptions<TItem> {\n keyAttr?: MaybeRef<keyof TItem | undefined>;\n returnObject?: MaybeRef<boolean>;\n customValue?: MaybeRef<boolean>;\n}\n\nexport interface UseAutoCompleteValueReturn<TItem> {\n value: ComputedRef<TItem[]>;\n setSelected: (selected: TItem[]) => void;\n}\n\nexport interface UseAutoCompleteValueDeps<TItem> {\n getIdentifier: (item: TItem) => any;\n getText: (item: TItem) => string | undefined;\n textValueToProperValue: (val: any, returnObject?: boolean) => TItem;\n shouldApplyValueAsSearch: MaybeRef<boolean>;\n isOpen: MaybeRef<boolean>;\n updateInternalSearch: (value?: string) => void;\n}\n\nexport function useAutoCompleteValue<TValue, TItem>(\n modelValue: Ref<TValue | undefined>,\n options: MaybeRef<TItem[]>,\n opts: UseAutoCompleteValueOptions<TItem>,\n deps: UseAutoCompleteValueDeps<TItem>,\n): UseAutoCompleteValueReturn<TItem> {\n const multiple = computed<boolean>(() => Array.isArray(get(modelValue)));\n\n // Create maps for O(1) lookup performance\n const optionsMap = computed<Map<any, TItem>>(() => {\n const map = new Map<any, TItem>();\n const optionsData = get(options);\n for (const item of optionsData) {\n map.set(deps.getIdentifier(item), item);\n }\n return map;\n });\n\n function convertModelValueToArray(modelValueData: TValue | undefined): any[] {\n if (!modelValueData)\n return [];\n return Array.isArray(modelValueData) ? modelValueData : [modelValueData];\n }\n\n function filterValuesByOptions(\n valueArray: any[],\n optionsMapData: Map<any, TItem>,\n customValue: boolean,\n returnObject: boolean,\n ): TItem[] {\n const filtered: TItem[] = [];\n filtered.length = valueArray.length; // Pre-allocate array size\n let index = 0;\n\n for (const val of valueArray) {\n const identifier = deps.getIdentifier(val);\n const inOptions = optionsMapData.get(identifier);\n\n if (inOptions) {\n filtered[index++] = inOptions;\n }\n else if (customValue) {\n filtered[index++] = deps.textValueToProperValue(val, returnObject);\n }\n }\n\n filtered.length = index; // Trim to actual size\n return filtered;\n }\n\n function filterValuesByIdentifier(\n valueArray: any[],\n optionsMapData: Map<any, TItem>,\n customValue: boolean,\n returnObject: boolean,\n ): TItem[] {\n const filtered: TItem[] = [];\n filtered.length = valueArray.length; // Pre-allocate array size\n let index = 0;\n\n for (const val of valueArray) {\n const inOptions = optionsMapData.get(val);\n\n if (inOptions) {\n filtered[index++] = inOptions;\n }\n else if (customValue) {\n filtered[index++] = deps.textValueToProperValue(val, returnObject);\n }\n }\n\n filtered.length = index; // Trim to actual size\n return filtered;\n }\n\n function processReturnObjectValue(\n modelValueData: TValue | undefined,\n optionsMapData: Map<any, TItem>,\n returnObject: boolean,\n customValue: boolean,\n shouldUpdateInternalSearch: boolean,\n ): TItem[] {\n const multipleValue = Array.isArray(modelValueData);\n const valueArray = convertModelValueToArray(modelValueData);\n const filtered = filterValuesByOptions(valueArray, optionsMapData, customValue, returnObject);\n\n if (multipleValue || filtered.length === 0) {\n if (shouldUpdateInternalSearch)\n deps.updateInternalSearch();\n return filtered;\n }\n\n const val = filtered[0];\n assert(val);\n if (shouldUpdateInternalSearch)\n deps.updateInternalSearch(deps.getText(val));\n return [val];\n }\n\n function processStandardValue(\n modelValueData: TValue | undefined,\n optionsMapData: Map<any, TItem>,\n returnObject: boolean,\n customValue: boolean,\n shouldUpdateInternalSearch: boolean,\n ): TItem[] {\n const valueArray = convertModelValueToArray(modelValueData);\n const filtered = filterValuesByIdentifier(valueArray, optionsMapData, customValue, returnObject);\n\n if (shouldUpdateInternalSearch) {\n if (filtered.length > 0) {\n const firstItem = filtered[0];\n assert(firstItem);\n deps.updateInternalSearch(deps.getText(firstItem));\n }\n else {\n deps.updateInternalSearch();\n }\n }\n\n return filtered;\n }\n\n function onUpdateModelValue(value: TValue | undefined): void {\n set(modelValue, value);\n }\n\n function setSelected(selected: TItem[]): void {\n const keyAttr = get(opts.keyAttr);\n const returnObject = get(opts.returnObject);\n const selection = keyAttr && !returnObject ? selected.map(item => item[keyAttr]) : selected;\n\n if (get(multiple))\n return onUpdateModelValue(selection as TValue);\n\n if (selection.length === 0)\n return onUpdateModelValue(undefined);\n\n return onUpdateModelValue(selection[0] as TValue);\n }\n\n const value = computed<TItem[]>({\n get: () => {\n const modelValueData = get(modelValue);\n const keyAttr = get(opts.keyAttr);\n const returnObject = get(opts.returnObject) ?? false;\n const customValue = get(opts.customValue) ?? false;\n const optionsMapData = get(optionsMap);\n const shouldUpdateInternalSearch = get(deps.shouldApplyValueAsSearch) && !get(deps.isOpen);\n\n if (keyAttr && returnObject) {\n return processReturnObjectValue(\n modelValueData,\n optionsMapData,\n returnObject,\n customValue,\n shouldUpdateInternalSearch,\n );\n }\n\n return processStandardValue(\n modelValueData,\n optionsMapData,\n returnObject,\n customValue,\n shouldUpdateInternalSearch,\n );\n },\n set: (selected: TItem[]): void => {\n setSelected(selected);\n },\n });\n\n return {\n setSelected,\n value,\n };\n}\n"],"names":["value"],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { LuChevronsUpDown, LuArrowUp, LuArrowDown, LuArrowLeft, LuArrowRight, LuChevronUp, LuChevronDown, LuChevronLeft, LuChevronRight, LuChevronsLeft, LuChevronsRight, LuCircleAlert, LuCheck, LuCircleX, LuCircleCheck, LuCheckboxBlank, LuCheckboxFill, LuCheckboxIndeterminateFill, LuCheckboxBlankCircle, LuCheckboxBlankCircleFill, LuRadioButtonFill, LuClock } from "../icons/icons_1.js";
|
|
2
|
+
import { LuEllipsis, LuInfo, LuEye, LuEyeOff } from "../icons/icons_2.js";
|
|
3
|
+
import { LuTriangleAlert, LuX } from "../icons/icons_4.js";
|
|
4
|
+
import { inject } from "vue";
|
|
5
|
+
import { assert } from "../utils/assert.js";
|
|
6
|
+
const requiredIcons = [
|
|
7
|
+
LuChevronsUpDown,
|
|
8
|
+
LuEllipsis,
|
|
9
|
+
LuTriangleAlert,
|
|
10
|
+
LuX,
|
|
11
|
+
LuInfo,
|
|
12
|
+
LuArrowUp,
|
|
13
|
+
LuArrowDown,
|
|
14
|
+
LuArrowLeft,
|
|
15
|
+
LuArrowRight,
|
|
16
|
+
LuChevronUp,
|
|
17
|
+
LuChevronDown,
|
|
18
|
+
LuChevronLeft,
|
|
19
|
+
LuChevronRight,
|
|
20
|
+
LuChevronsLeft,
|
|
21
|
+
LuChevronsRight,
|
|
22
|
+
LuCircleAlert,
|
|
23
|
+
LuEye,
|
|
24
|
+
LuEyeOff,
|
|
25
|
+
LuCheck,
|
|
26
|
+
LuCircleX,
|
|
27
|
+
LuCircleCheck,
|
|
28
|
+
LuCheckboxBlank,
|
|
29
|
+
LuCheckboxFill,
|
|
30
|
+
LuCheckboxIndeterminateFill,
|
|
31
|
+
LuCheckboxBlankCircle,
|
|
32
|
+
LuCheckboxBlankCircleFill,
|
|
33
|
+
LuRadioButtonFill,
|
|
34
|
+
LuClock
|
|
35
|
+
];
|
|
36
|
+
const IconsSymbol = Symbol.for("rui:icons");
|
|
37
|
+
function createIconDefaults(options) {
|
|
38
|
+
const iconsToAdd = options?.registeredIcons || [];
|
|
39
|
+
return {
|
|
40
|
+
registeredIcons: {
|
|
41
|
+
...Object.fromEntries(
|
|
42
|
+
[
|
|
43
|
+
...requiredIcons,
|
|
44
|
+
...iconsToAdd
|
|
45
|
+
].map(({ components, name }) => [name, components])
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function useIcons() {
|
|
51
|
+
const icons = inject(IconsSymbol);
|
|
52
|
+
assert(icons, "Could not find icons injection");
|
|
53
|
+
return icons;
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
IconsSymbol,
|
|
57
|
+
createIconDefaults,
|
|
58
|
+
useIcons
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.js","sources":["../../src/composables/icons.ts"],"sourcesContent":["import type { InjectionKey } from 'vue';\nimport type { GeneratedIcon } from '@/types/icons';\nimport {\n LuArrowDown,\n LuArrowLeft,\n LuArrowRight,\n LuArrowUp,\n LuCheck,\n LuCheckboxBlank,\n LuCheckboxBlankCircle,\n LuCheckboxBlankCircleFill,\n LuCheckboxFill,\n LuCheckboxIndeterminateFill,\n LuChevronDown,\n LuChevronLeft,\n LuChevronRight,\n LuChevronsLeft,\n LuChevronsRight,\n LuChevronsUpDown,\n LuChevronUp,\n LuCircleAlert,\n LuCircleCheck,\n LuCircleX,\n LuClock,\n LuEllipsis,\n LuEye,\n LuEyeOff,\n LuInfo,\n LuRadioButtonFill,\n LuTriangleAlert,\n LuX,\n} from '@/icons';\n\nconst requiredIcons: GeneratedIcon[] = [\n LuChevronsUpDown,\n LuEllipsis,\n LuTriangleAlert,\n LuX,\n LuInfo,\n LuArrowUp,\n LuArrowDown,\n LuArrowLeft,\n LuArrowRight,\n LuChevronUp,\n LuChevronDown,\n LuChevronLeft,\n LuChevronRight,\n LuChevronsLeft,\n LuChevronsRight,\n LuCircleAlert,\n LuEye,\n LuEyeOff,\n LuCheck,\n LuCircleX,\n LuCircleCheck,\n LuCheckboxBlank,\n LuCheckboxFill,\n LuCheckboxIndeterminateFill,\n LuCheckboxBlankCircle,\n LuCheckboxBlankCircleFill,\n LuRadioButtonFill,\n LuClock,\n];\n\nexport interface IconsOptions {\n registeredIcons: GeneratedIcon[];\n}\n\nexport interface UseIconsReturn {\n registeredIcons: Readonly<Record<string, [string, Record<string, string>][]>>;\n}\n\nexport const IconsSymbol: InjectionKey<UseIconsReturn> = Symbol.for('rui:icons');\n\nexport function createIconDefaults(options?: Partial<IconsOptions>): UseIconsReturn {\n const iconsToAdd = options?.registeredIcons || [];\n return {\n registeredIcons: {\n ...Object.fromEntries(\n [\n ...requiredIcons,\n ...iconsToAdd,\n ].map(({ components, name }) => [name, components]),\n ),\n },\n };\n}\n\nexport function useIcons(): UseIconsReturn {\n const icons = inject(IconsSymbol);\n assert(icons, 'Could not find icons injection');\n return icons;\n}\n"],"names":[],"mappings":";;;;;AAiCA,MAAM,gBAAiC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAUO,MAAM,cAA4C,OAAO,IAAI,WAAW;AAExE,SAAS,mBAAmB,SAAiD;AAClF,QAAM,aAAa,SAAS,mBAAmB,CAAA;AAC/C,SAAO;AAAA,IACL,iBAAiB;AAAA,MACf,GAAG,OAAO;AAAA,QACR;AAAA,UACE,GAAG;AAAA,UACH,GAAG;AAAA,QAAA,EACH,IAAI,CAAC,EAAE,YAAY,WAAW,CAAC,MAAM,UAAU,CAAC;AAAA,MAAA;AAAA,IACpD;AAAA,EACF;AAEJ;AAEO,SAAS,WAA2B;AACzC,QAAM,QAAQ,OAAO,WAAW;AAChC,SAAO,OAAO,gCAAgC;AAC9C,SAAO;AACT;"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { useBreakpoint } from '../composables/breakpoint';
|
|
2
|
-
export { useIcons } from '../composables/icons';
|
|
3
|
-
export { useRotkiTheme } from '../composables/theme';
|
|
1
|
+
export { useBreakpoint } from '../composables/breakpoint.js';
|
|
2
|
+
export { useIcons } from '../composables/icons.js';
|
|
3
|
+
export { useRotkiTheme } from '../composables/theme.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { createPopper } from "@popperjs/core";
|
|
2
|
+
import { useResizeObserver, isDefined, unrefElement } from "@vueuse/core";
|
|
3
|
+
import { ref, computed, onMounted, watchEffect } from "vue";
|
|
4
|
+
import { useTimeoutManager } from "./timeout-manager.js";
|
|
5
|
+
import { get, set } from "@vueuse/shared";
|
|
6
|
+
const DEFAULT_POPPER_OPTIONS = {
|
|
7
|
+
adaptive: true,
|
|
8
|
+
gpuAcceleration: true,
|
|
9
|
+
locked: false,
|
|
10
|
+
offsetDistance: 8,
|
|
11
|
+
offsetSkid: 0,
|
|
12
|
+
overflowPadding: 8,
|
|
13
|
+
placement: "bottom",
|
|
14
|
+
resize: true,
|
|
15
|
+
scroll: true,
|
|
16
|
+
strategy: "absolute"
|
|
17
|
+
};
|
|
18
|
+
function usePopper(options, disabled = ref(false), openDelay = ref(0), closeDelay = ref(0), virtualReference) {
|
|
19
|
+
const reference = ref(void 0);
|
|
20
|
+
const popper = ref(void 0);
|
|
21
|
+
const instance = ref(void 0);
|
|
22
|
+
const open = ref(false);
|
|
23
|
+
const popperEnter = ref(false);
|
|
24
|
+
const leavePending = ref(false);
|
|
25
|
+
const openTimeoutManager = useTimeoutManager();
|
|
26
|
+
const closeTimeoutManager = useTimeoutManager();
|
|
27
|
+
const onPopperLeave = () => {
|
|
28
|
+
set(popperEnter, false);
|
|
29
|
+
};
|
|
30
|
+
const updatePopper = async () => {
|
|
31
|
+
await get(instance)?.update();
|
|
32
|
+
};
|
|
33
|
+
const onOpen = (immediate = false) => {
|
|
34
|
+
if (get(disabled))
|
|
35
|
+
return;
|
|
36
|
+
closeTimeoutManager.clear();
|
|
37
|
+
set(leavePending, false);
|
|
38
|
+
if (!openTimeoutManager.isActive()) {
|
|
39
|
+
set(popperEnter, true);
|
|
40
|
+
openTimeoutManager.create(() => {
|
|
41
|
+
set(open, true);
|
|
42
|
+
}, immediate ? 0 : get(openDelay));
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const onClose = (immediate = false) => {
|
|
46
|
+
if (get(disabled))
|
|
47
|
+
return;
|
|
48
|
+
openTimeoutManager.clear();
|
|
49
|
+
if (!closeTimeoutManager.isActive()) {
|
|
50
|
+
closeTimeoutManager.create(() => {
|
|
51
|
+
if (!get(open))
|
|
52
|
+
onPopperLeave();
|
|
53
|
+
set(open, false);
|
|
54
|
+
}, immediate ? 0 : get(closeDelay));
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const onLeavePending = () => {
|
|
58
|
+
set(leavePending, true);
|
|
59
|
+
};
|
|
60
|
+
const modifiers = computed(() => {
|
|
61
|
+
const {
|
|
62
|
+
adaptive = DEFAULT_POPPER_OPTIONS.adaptive,
|
|
63
|
+
gpuAcceleration = DEFAULT_POPPER_OPTIONS.gpuAcceleration,
|
|
64
|
+
locked = DEFAULT_POPPER_OPTIONS.locked,
|
|
65
|
+
offsetDistance = DEFAULT_POPPER_OPTIONS.offsetDistance,
|
|
66
|
+
offsetSkid = DEFAULT_POPPER_OPTIONS.offsetSkid,
|
|
67
|
+
overflowPadding = DEFAULT_POPPER_OPTIONS.overflowPadding,
|
|
68
|
+
resize = DEFAULT_POPPER_OPTIONS.resize,
|
|
69
|
+
scroll = DEFAULT_POPPER_OPTIONS.scroll
|
|
70
|
+
} = get(options);
|
|
71
|
+
return [{
|
|
72
|
+
enabled: false,
|
|
73
|
+
name: "hide"
|
|
74
|
+
}, {
|
|
75
|
+
enabled: !locked,
|
|
76
|
+
name: "flip"
|
|
77
|
+
}, {
|
|
78
|
+
name: "preventOverflow",
|
|
79
|
+
options: {
|
|
80
|
+
padding: overflowPadding
|
|
81
|
+
}
|
|
82
|
+
}, {
|
|
83
|
+
name: "offset",
|
|
84
|
+
options: {
|
|
85
|
+
offset: [offsetSkid, offsetDistance]
|
|
86
|
+
}
|
|
87
|
+
}, {
|
|
88
|
+
name: "computeStyles",
|
|
89
|
+
options: {
|
|
90
|
+
adaptive,
|
|
91
|
+
gpuAcceleration
|
|
92
|
+
}
|
|
93
|
+
}, {
|
|
94
|
+
name: "eventListeners",
|
|
95
|
+
options: {
|
|
96
|
+
resize,
|
|
97
|
+
scroll
|
|
98
|
+
}
|
|
99
|
+
}, {
|
|
100
|
+
name: "arrow",
|
|
101
|
+
options: {
|
|
102
|
+
padding: 4
|
|
103
|
+
}
|
|
104
|
+
}];
|
|
105
|
+
});
|
|
106
|
+
const popperConfig = computed(() => {
|
|
107
|
+
const {
|
|
108
|
+
placement = DEFAULT_POPPER_OPTIONS.placement,
|
|
109
|
+
strategy = DEFAULT_POPPER_OPTIONS.strategy
|
|
110
|
+
} = get(options);
|
|
111
|
+
return {
|
|
112
|
+
modifiers: get(modifiers),
|
|
113
|
+
placement,
|
|
114
|
+
strategy
|
|
115
|
+
};
|
|
116
|
+
});
|
|
117
|
+
function getValidElements() {
|
|
118
|
+
if (!get(popper) || !get(reference) && !get(virtualReference)) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
const popperEl = unrefElement(popper);
|
|
122
|
+
const referenceEl = get(virtualReference) || unrefElement(reference);
|
|
123
|
+
if (!(popperEl instanceof HTMLElement) || !referenceEl) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
return { popperEl, referenceEl };
|
|
127
|
+
}
|
|
128
|
+
function initializePopper(onInvalidate) {
|
|
129
|
+
const elements = getValidElements();
|
|
130
|
+
if (!elements)
|
|
131
|
+
return;
|
|
132
|
+
const { popperEl, referenceEl } = elements;
|
|
133
|
+
const value = createPopper(referenceEl, popperEl, get(popperConfig));
|
|
134
|
+
set(instance, value);
|
|
135
|
+
onInvalidate(value.destroy);
|
|
136
|
+
}
|
|
137
|
+
useResizeObserver([reference, popper], async () => {
|
|
138
|
+
if (isDefined(instance))
|
|
139
|
+
await get(instance).update();
|
|
140
|
+
});
|
|
141
|
+
onMounted(() => {
|
|
142
|
+
watchEffect((onInvalidate) => {
|
|
143
|
+
initializePopper(onInvalidate);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
return {
|
|
147
|
+
instance,
|
|
148
|
+
leavePending,
|
|
149
|
+
onClose,
|
|
150
|
+
onLeavePending,
|
|
151
|
+
onOpen,
|
|
152
|
+
onPopperLeave,
|
|
153
|
+
open,
|
|
154
|
+
popper,
|
|
155
|
+
popperEnter,
|
|
156
|
+
reference,
|
|
157
|
+
updatePopper
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
export {
|
|
161
|
+
DEFAULT_POPPER_OPTIONS,
|
|
162
|
+
usePopper
|
|
163
|
+
};
|
|
164
|
+
//# sourceMappingURL=popper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popper.js","sources":["../../src/composables/popper.ts"],"sourcesContent":["import { createPopper, type Instance, type Placement, type PositioningStrategy, type VirtualElement } from '@popperjs/core';\nimport { type MaybeElement, unrefElement } from '@vueuse/core';\nimport { onMounted, type Ref, ref, watchEffect } from 'vue';\nimport { useTimeoutManager } from './timeout-manager';\n\nexport interface PopperOptions {\n locked?: boolean;\n overflowPadding?: number;\n offsetDistance?: number;\n offsetSkid?: number;\n placement?: Placement;\n strategy?: PositioningStrategy;\n gpuAcceleration?: boolean;\n adaptive?: boolean;\n scroll?: boolean;\n resize?: boolean;\n}\n\nexport const DEFAULT_POPPER_OPTIONS: PopperOptions = {\n adaptive: true,\n gpuAcceleration: true,\n locked: false,\n offsetDistance: 8,\n offsetSkid: 0,\n overflowPadding: 8,\n placement: 'bottom',\n resize: true,\n scroll: true,\n strategy: 'absolute',\n};\n\ninterface UsePopperReturn {\n instance: Ref<Instance | undefined>;\n leavePending: Ref<boolean>;\n onClose: (immediate?: boolean) => void;\n onLeavePending: () => void;\n onOpen: (immediate?: boolean) => void;\n onPopperLeave: () => void;\n open: Ref<boolean, boolean>;\n popper: Ref<MaybeElement>;\n popperEnter: Ref<boolean>;\n reference: Ref<HTMLElement | undefined>;\n updatePopper: () => Promise<void>;\n}\n\nexport function usePopper(\n options: Ref<PopperOptions>,\n disabled: Ref<boolean> = ref(false),\n openDelay: Ref<number> = ref(0),\n closeDelay: Ref<number> = ref(0),\n virtualReference?: Ref<Element | VirtualElement>,\n): UsePopperReturn {\n const reference = ref<HTMLElement | undefined>(undefined);\n const popper = ref<MaybeElement | undefined>(undefined);\n const instance = ref<Instance | undefined>(undefined);\n const open = ref<boolean>(false);\n const popperEnter = ref<boolean>(false);\n const leavePending = ref<boolean>(false);\n\n const openTimeoutManager = useTimeoutManager();\n const closeTimeoutManager = useTimeoutManager();\n\n const onPopperLeave = () => {\n set(popperEnter, false);\n };\n\n const updatePopper = async (): Promise<void> => {\n await get(instance)?.update();\n };\n\n const onOpen = (immediate = false) => {\n if (get(disabled))\n return;\n\n closeTimeoutManager.clear();\n\n set(leavePending, false);\n if (!openTimeoutManager.isActive()) {\n set(popperEnter, true);\n\n openTimeoutManager.create(() => {\n set(open, true);\n }, immediate ? 0 : get(openDelay));\n }\n };\n\n const onClose = (immediate = false) => {\n if (get(disabled))\n return;\n\n openTimeoutManager.clear();\n\n if (!closeTimeoutManager.isActive()) {\n closeTimeoutManager.create(() => {\n if (!get(open))\n onPopperLeave();\n\n set(open, false);\n }, immediate ? 0 : get(closeDelay));\n }\n };\n\n const onLeavePending = () => {\n set(leavePending, true);\n };\n\n const modifiers = computed(() => {\n const {\n adaptive = DEFAULT_POPPER_OPTIONS.adaptive,\n gpuAcceleration = DEFAULT_POPPER_OPTIONS.gpuAcceleration,\n locked = DEFAULT_POPPER_OPTIONS.locked,\n offsetDistance = DEFAULT_POPPER_OPTIONS.offsetDistance,\n offsetSkid = DEFAULT_POPPER_OPTIONS.offsetSkid,\n overflowPadding = DEFAULT_POPPER_OPTIONS.overflowPadding,\n resize = DEFAULT_POPPER_OPTIONS.resize,\n scroll = DEFAULT_POPPER_OPTIONS.scroll,\n } = get(options);\n\n return [{\n enabled: false,\n name: 'hide',\n }, {\n enabled: !locked,\n name: 'flip',\n }, {\n name: 'preventOverflow',\n options: {\n padding: overflowPadding,\n },\n }, {\n name: 'offset',\n options: {\n offset: [offsetSkid, offsetDistance],\n },\n }, {\n name: 'computeStyles',\n options: {\n adaptive,\n gpuAcceleration,\n },\n }, {\n name: 'eventListeners',\n options: {\n resize,\n scroll,\n },\n }, {\n name: 'arrow',\n options: {\n padding: 4,\n },\n }];\n });\n\n const popperConfig = computed(() => {\n const {\n placement = DEFAULT_POPPER_OPTIONS.placement,\n strategy = DEFAULT_POPPER_OPTIONS.strategy,\n } = get(options);\n\n return {\n modifiers: get(modifiers),\n placement,\n strategy,\n };\n });\n\n function getValidElements(): { popperEl: HTMLElement; referenceEl: Element | VirtualElement } | null {\n if (!get(popper) || (!get(reference) && !get(virtualReference))) {\n return null;\n }\n\n const popperEl = unrefElement(popper);\n const referenceEl = get(virtualReference) || unrefElement(reference);\n\n if (!(popperEl instanceof HTMLElement) || !referenceEl) {\n return null;\n }\n\n return { popperEl, referenceEl };\n }\n\n function initializePopper(onInvalidate: (cleanupFn: () => void) => void) {\n const elements = getValidElements();\n if (!elements)\n return;\n\n const { popperEl, referenceEl } = elements;\n\n const value = createPopper(referenceEl, popperEl, get(popperConfig));\n\n set(instance, value);\n onInvalidate(value.destroy);\n }\n\n useResizeObserver([reference, popper], async () => {\n if (isDefined(instance))\n await get(instance).update();\n });\n\n onMounted(() => {\n watchEffect((onInvalidate) => {\n initializePopper(onInvalidate);\n });\n });\n\n return {\n instance,\n leavePending,\n onClose,\n onLeavePending,\n onOpen,\n onPopperLeave,\n open,\n popper,\n popperEnter,\n reference,\n updatePopper,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { assert } from "../utils/assert.js";
|
|
2
|
+
import { ref, onMounted } from "vue";
|
|
3
|
+
import { get, set } from "@vueuse/shared";
|
|
4
|
+
import { useEventListener, useMutationObserver, useResizeObserver } from "@vueuse/core";
|
|
5
|
+
function useStickyTableHeader(sticky = ref(false), offsetTop) {
|
|
6
|
+
const table = ref(null);
|
|
7
|
+
const tableScroller = ref(null);
|
|
8
|
+
const stick = ref(false);
|
|
9
|
+
const borderPrecision = -0.5;
|
|
10
|
+
const selectors = {
|
|
11
|
+
head: ":scope > thead[data-id=head-main]",
|
|
12
|
+
headClone: ":scope > thead[data-id=head-clone]",
|
|
13
|
+
row: ":scope > tbody > tr:not([hidden])",
|
|
14
|
+
th: ":scope > th"
|
|
15
|
+
};
|
|
16
|
+
const watchCellWidth = () => {
|
|
17
|
+
const root = get(table);
|
|
18
|
+
if (!get(sticky) || !root)
|
|
19
|
+
return;
|
|
20
|
+
const theadClone = root.querySelector(
|
|
21
|
+
`${selectors.headClone} > tr`
|
|
22
|
+
);
|
|
23
|
+
const head = root.querySelector(`${selectors.head} > tr`) ?? null;
|
|
24
|
+
const observeChildTh = () => {
|
|
25
|
+
const columns = head?.querySelectorAll(
|
|
26
|
+
selectors.th
|
|
27
|
+
);
|
|
28
|
+
const clonedColumns = theadClone?.querySelectorAll(selectors.th);
|
|
29
|
+
clonedColumns?.forEach((th, i) => {
|
|
30
|
+
useResizeObserver(th, (entries) => {
|
|
31
|
+
const entry = entries[0];
|
|
32
|
+
assert(entry);
|
|
33
|
+
const cellRect = entry.target.getBoundingClientRect();
|
|
34
|
+
const column = columns?.item(i);
|
|
35
|
+
if (column)
|
|
36
|
+
column.style.width = `${cellRect.width}px`;
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
useMutationObserver(theadClone, (mutationsList) => {
|
|
41
|
+
for (const mutation of mutationsList) {
|
|
42
|
+
if (mutation.type === "childList" || mutation.type === "attributes")
|
|
43
|
+
observeChildTh();
|
|
44
|
+
}
|
|
45
|
+
}, {
|
|
46
|
+
attributes: true,
|
|
47
|
+
childList: true,
|
|
48
|
+
subtree: true
|
|
49
|
+
});
|
|
50
|
+
observeChildTh();
|
|
51
|
+
};
|
|
52
|
+
const toggleStickyClass = () => {
|
|
53
|
+
const root = get(table);
|
|
54
|
+
if (!get(sticky) || !root)
|
|
55
|
+
return;
|
|
56
|
+
const rect = root.getBoundingClientRect();
|
|
57
|
+
const theadClone = root.querySelector(
|
|
58
|
+
selectors.headClone
|
|
59
|
+
);
|
|
60
|
+
const clonedRect = theadClone?.getBoundingClientRect();
|
|
61
|
+
const head = root.querySelector(selectors.head) ?? null;
|
|
62
|
+
const headRect = head?.getBoundingClientRect();
|
|
63
|
+
if (!rect || !clonedRect || !head || !theadClone || !headRect)
|
|
64
|
+
return;
|
|
65
|
+
const {
|
|
66
|
+
height: theadHeight,
|
|
67
|
+
left: theadLeft,
|
|
68
|
+
width: theadWidth
|
|
69
|
+
} = clonedRect;
|
|
70
|
+
const { bottom: tableBottom, top: tableTop } = rect;
|
|
71
|
+
const top = get(offsetTop) ?? 0;
|
|
72
|
+
head.style.width = `${theadWidth}px`;
|
|
73
|
+
const rows = root.querySelectorAll(selectors.row);
|
|
74
|
+
const lastRowRect = rows.item(rows.length - 1)?.getBoundingClientRect();
|
|
75
|
+
if (tableTop <= top && tableBottom > top && rows.length > 1) {
|
|
76
|
+
set(stick, true);
|
|
77
|
+
head.style.left = `${theadLeft + borderPrecision}px`;
|
|
78
|
+
const lastRowHeight = lastRowRect?.height ?? 0;
|
|
79
|
+
if (tableBottom <= lastRowHeight + theadHeight + top)
|
|
80
|
+
head.style.top = `${tableBottom - lastRowHeight - theadHeight}px`;
|
|
81
|
+
else
|
|
82
|
+
head.style.top = `${top}px`;
|
|
83
|
+
} else {
|
|
84
|
+
set(stick, false);
|
|
85
|
+
head.style.left = `${borderPrecision}px`;
|
|
86
|
+
head.style.top = "0";
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
onMounted(() => {
|
|
90
|
+
toggleStickyClass();
|
|
91
|
+
useEventListener(tableScroller, "scroll", toggleStickyClass);
|
|
92
|
+
useEventListener(document.body, "scroll", toggleStickyClass);
|
|
93
|
+
useEventListener(window, "resize", toggleStickyClass);
|
|
94
|
+
watchCellWidth();
|
|
95
|
+
});
|
|
96
|
+
return {
|
|
97
|
+
stick,
|
|
98
|
+
table,
|
|
99
|
+
tableScroller
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export {
|
|
103
|
+
useStickyTableHeader
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=sticky-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sticky-header.js","sources":["../../src/composables/sticky-header.ts"],"sourcesContent":["import type { MaybeRef } from 'vue';\nimport { assert } from '@/utils/assert';\n\n/**\n * Setup sticky table header\n */\nexport function useStickyTableHeader(sticky: MaybeRef<boolean> = ref(false), offsetTop?: MaybeRef<number>) {\n const table: Ref<HTMLTableElement | null> = ref(null);\n const tableScroller: Ref<HTMLElement | null> = ref(null);\n const stick: Ref<boolean> = ref(false);\n const borderPrecision = -0.5;\n const selectors = {\n head: ':scope > thead[data-id=head-main]',\n headClone: ':scope > thead[data-id=head-clone]',\n row: ':scope > tbody > tr:not([hidden])',\n th: ':scope > th',\n };\n\n const watchCellWidth = () => {\n const root = get(table);\n\n if (!get(sticky) || !root)\n return;\n\n const theadClone: HTMLHeadElement | null = root.querySelector(\n `${selectors.headClone} > tr`,\n );\n\n const head: HTMLHeadElement | null\n = root.querySelector(`${selectors.head} > tr`) ?? null;\n\n const observeChildTh = () => {\n const columns: NodeListOf<HTMLElement> | undefined = head?.querySelectorAll(\n selectors.th,\n );\n\n const clonedColumns: NodeListOf<HTMLElement> | undefined\n = theadClone?.querySelectorAll(selectors.th);\n\n clonedColumns?.forEach((th: HTMLElement, i: number) => {\n useResizeObserver(th, (entries) => {\n const entry = entries[0];\n assert(entry);\n const cellRect = entry.target.getBoundingClientRect();\n const column = columns?.item(i);\n if (column)\n column.style.width = `${cellRect.width}px`;\n });\n });\n };\n\n useMutationObserver(theadClone, (mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList' || mutation.type === 'attributes')\n observeChildTh();\n }\n }, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n\n // Initial setup to observe the existing th elements\n observeChildTh();\n };\n\n const toggleStickyClass = () => {\n const root = get(table);\n\n if (!get(sticky) || !root)\n return;\n\n const rect = root.getBoundingClientRect();\n const theadClone: HTMLHeadElement | null = root.querySelector(\n selectors.headClone,\n );\n\n const clonedRect: DOMRect | undefined = theadClone?.getBoundingClientRect();\n\n const head: HTMLHeadElement | null\n = root.querySelector(selectors.head) ?? null;\n\n const headRect: DOMRect | undefined = head?.getBoundingClientRect();\n\n if (!rect || !clonedRect || !head || !theadClone || !headRect)\n return;\n\n const {\n height: theadHeight,\n left: theadLeft,\n width: theadWidth,\n } = clonedRect;\n\n const { bottom: tableBottom, top: tableTop } = rect;\n const top = get(offsetTop) ?? 0;\n\n head.style.width = `${theadWidth}px`;\n\n const rows = root.querySelectorAll(selectors.row);\n\n const lastRowRect: DOMRect | undefined = rows\n .item(rows.length - 1)\n ?.getBoundingClientRect();\n\n if (tableTop <= top && tableBottom > top && rows.length > 1) {\n set(stick, true);\n head.style.left = `${theadLeft + borderPrecision}px`;\n\n const lastRowHeight = lastRowRect?.height ?? 0;\n if (tableBottom <= lastRowHeight + theadHeight + top)\n head.style.top = `${tableBottom - lastRowHeight - theadHeight}px`;\n else\n head.style.top = `${top}px`;\n }\n else {\n set(stick, false);\n head.style.left = `${borderPrecision}px`;\n head.style.top = '0';\n }\n };\n\n onMounted(() => {\n toggleStickyClass();\n useEventListener(tableScroller, 'scroll', toggleStickyClass);\n useEventListener(document.body, 'scroll', toggleStickyClass);\n useEventListener(window, 'resize', toggleStickyClass);\n watchCellWidth();\n });\n\n return {\n stick,\n table,\n tableScroller,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { createSharedComposable, useColorMode } from "@vueuse/core";
|
|
2
|
+
import { ref, watch, computed } from "vue";
|
|
3
|
+
import { defaultTheme, ThemeMode } from "../types/theme.js";
|
|
4
|
+
import { set, get } from "@vueuse/shared";
|
|
5
|
+
const config = ref({ ...defaultTheme });
|
|
6
|
+
const useRotkiTheme = createSharedComposable(() => {
|
|
7
|
+
const { state, store } = useColorMode();
|
|
8
|
+
const { state: attributeState } = useColorMode({
|
|
9
|
+
attribute: "data-theme"
|
|
10
|
+
});
|
|
11
|
+
watch(state, (newState) => {
|
|
12
|
+
set(attributeState, newState);
|
|
13
|
+
});
|
|
14
|
+
const isAutoControlled = computed(() => get(store) === ThemeMode.auto);
|
|
15
|
+
const isLight = computed(() => get(state) === ThemeMode.light);
|
|
16
|
+
const isDark = computed(() => get(state) === ThemeMode.dark);
|
|
17
|
+
const theme = computed(() => {
|
|
18
|
+
if (get(isLight))
|
|
19
|
+
return get(config).light;
|
|
20
|
+
return get(config).dark;
|
|
21
|
+
});
|
|
22
|
+
const switchThemeScheme = (mode) => {
|
|
23
|
+
set(store, mode || ThemeMode.auto);
|
|
24
|
+
};
|
|
25
|
+
const toggleThemeMode = () => {
|
|
26
|
+
if (get(isAutoControlled))
|
|
27
|
+
switchThemeScheme(ThemeMode.light);
|
|
28
|
+
else if (get(isLight))
|
|
29
|
+
switchThemeScheme(ThemeMode.dark);
|
|
30
|
+
else if (get(isDark))
|
|
31
|
+
switchThemeScheme(ThemeMode.auto);
|
|
32
|
+
};
|
|
33
|
+
const setThemeConfig = (newConfig) => {
|
|
34
|
+
set(config, newConfig);
|
|
35
|
+
};
|
|
36
|
+
const init = (options) => {
|
|
37
|
+
switchThemeScheme(options.mode ?? ThemeMode.auto);
|
|
38
|
+
setThemeConfig(options.config ?? { ...defaultTheme });
|
|
39
|
+
if (typeof window !== "undefined") {
|
|
40
|
+
watch([isLight, theme], ([isLight2, theme2]) => {
|
|
41
|
+
const styleVariables = /* @__PURE__ */ new Map();
|
|
42
|
+
Object.entries(theme2).forEach(([context, contextObject]) => {
|
|
43
|
+
styleVariables.set(`--rui-${context}-darker`, contextObject.darker);
|
|
44
|
+
styleVariables.set(`--rui-${context}-lighter`, contextObject.lighter);
|
|
45
|
+
styleVariables.set(`--rui-${context}-main`, contextObject.DEFAULT);
|
|
46
|
+
});
|
|
47
|
+
const state2 = isLight2 ? ThemeMode.light : ThemeMode.dark;
|
|
48
|
+
styleVariables.set("--rui-text-disabled", `var(--rui-${state2}-text-disabled)`);
|
|
49
|
+
styleVariables.set("--rui-text-primary", `var(--rui-${state2}-text-primary)`);
|
|
50
|
+
styleVariables.set("--rui-text-secondary", `var(--rui-${state2}-text-secondary)`);
|
|
51
|
+
const rootStyle = document.documentElement.style;
|
|
52
|
+
styleVariables.forEach((value, variableName) => {
|
|
53
|
+
rootStyle.setProperty(variableName, value);
|
|
54
|
+
});
|
|
55
|
+
}, { immediate: true });
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
return {
|
|
59
|
+
config,
|
|
60
|
+
init,
|
|
61
|
+
isAutoControlled,
|
|
62
|
+
isDark,
|
|
63
|
+
isLight,
|
|
64
|
+
setThemeConfig,
|
|
65
|
+
state,
|
|
66
|
+
store,
|
|
67
|
+
switchThemeScheme,
|
|
68
|
+
theme,
|
|
69
|
+
toggleThemeMode
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
export {
|
|
73
|
+
useRotkiTheme
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sources":["../../src/composables/theme.ts"],"sourcesContent":["import { useColorMode } from '@vueuse/core';\nimport { computed, type ComputedRef, type Ref, ref } from 'vue';\nimport {\n type ColorIntensity,\n defaultTheme,\n type InitThemeOptions,\n type ThemeConfig,\n type ThemeContent,\n type ThemeData,\n ThemeMode,\n} from '@/types/theme';\n\nconst config: Ref<ThemeConfig> = ref({ ...defaultTheme });\n\n/**\n * Theme manager\n * @returns {ThemeContent}\n */\nexport const useRotkiTheme = createSharedComposable<() => ThemeContent>(() => {\n const { state, store } = useColorMode<ThemeMode>();\n\n const { state: attributeState } = useColorMode<ThemeMode>({\n attribute: 'data-theme',\n });\n\n // Keep attributeState in sync with state\n watch(state, (newState) => {\n set(attributeState, newState);\n });\n\n /**\n * whether the current theme is controlled by system or user\n * @type {ComputedRef<boolean>}\n */\n const isAutoControlled: ComputedRef<boolean> = computed(() => get(store) === ThemeMode.auto);\n\n /**\n * truthy for light theme\n * @type {ComputedRef<boolean>}\n */\n const isLight: ComputedRef<boolean> = computed(() => get(state) === ThemeMode.light);\n\n /**\n * truthy for dark theme\n * @type {ComputedRef<boolean>}\n */\n const isDark: ComputedRef<boolean> = computed(() => get(state) === ThemeMode.dark);\n\n /**\n * current theme based on light or dark mode\n * @type {ComputedRef<ThemeData>}\n */\n const theme: ComputedRef<ThemeData> = computed(() => {\n if (get(isLight))\n return get(config).light;\n\n return get(config).dark;\n });\n\n /**\n * switch theme through dark/light/auto modes\n * @param {ThemeMode} mode\n */\n const switchThemeScheme = (mode: ThemeMode) => {\n set(store, mode || ThemeMode.auto);\n };\n\n /**\n * toggle between auto|light|dark\n */\n const toggleThemeMode = () => {\n if (get(isAutoControlled))\n switchThemeScheme(ThemeMode.light);\n else if (get(isLight))\n switchThemeScheme(ThemeMode.dark);\n else if (get(isDark))\n switchThemeScheme(ThemeMode.auto);\n };\n\n /**\n * sets the configuration for the theme\n * @param {ThemeConfig} newConfig\n */\n const setThemeConfig = (newConfig: ThemeConfig) => {\n set(config, newConfig);\n };\n\n /**\n * theme initializer, must be called once from the app's entry\n * @param {InitThemeOptions} options\n */\n const init = (options: InitThemeOptions) => {\n switchThemeScheme(options.mode ?? ThemeMode.auto);\n setThemeConfig(options.config ?? { ...defaultTheme });\n\n if (typeof window !== 'undefined') {\n watch([isLight, theme], ([isLight, theme]) => {\n const styleVariables = new Map();\n\n // Compute context variables\n Object.entries(theme).forEach(([context, contextObject]: [string, ColorIntensity]) => {\n styleVariables.set(`--rui-${context}-darker`, contextObject.darker);\n styleVariables.set(`--rui-${context}-lighter`, contextObject.lighter);\n styleVariables.set(`--rui-${context}-main`, contextObject.DEFAULT);\n });\n\n // Determine the theme mode\n const state = isLight ? ThemeMode.light : ThemeMode.dark;\n\n // Add text color variables\n styleVariables.set('--rui-text-disabled', `var(--rui-${state}-text-disabled)`);\n styleVariables.set('--rui-text-primary', `var(--rui-${state}-text-primary)`);\n styleVariables.set('--rui-text-secondary', `var(--rui-${state}-text-secondary)`);\n\n // Apply all style variables in one operation\n const rootStyle = document.documentElement.style;\n styleVariables.forEach((value, variableName) => {\n rootStyle.setProperty(variableName, value);\n });\n }, { immediate: true });\n }\n };\n\n return {\n config,\n init,\n isAutoControlled,\n isDark,\n isLight,\n setThemeConfig,\n state,\n store,\n switchThemeScheme,\n theme,\n toggleThemeMode,\n };\n});\n"],"names":["isLight","theme","state"],"mappings":";;;;AAYA,MAAM,SAA2B,IAAI,EAAE,GAAG,cAAc;AAMjD,MAAM,gBAAgB,uBAA2C,MAAM;AAC5E,QAAM,EAAE,OAAO,MAAA,IAAU,aAAA;AAEzB,QAAM,EAAE,OAAO,eAAA,IAAmB,aAAwB;AAAA,IACxD,WAAW;AAAA,EAAA,CACZ;AAGD,QAAM,OAAO,CAAC,aAAa;AACzB,QAAI,gBAAgB,QAAQ;AAAA,EAC9B,CAAC;AAMD,QAAM,mBAAyC,SAAS,MAAM,IAAI,KAAK,MAAM,UAAU,IAAI;AAM3F,QAAM,UAAgC,SAAS,MAAM,IAAI,KAAK,MAAM,UAAU,KAAK;AAMnF,QAAM,SAA+B,SAAS,MAAM,IAAI,KAAK,MAAM,UAAU,IAAI;AAMjF,QAAM,QAAgC,SAAS,MAAM;AACnD,QAAI,IAAI,OAAO;AACb,aAAO,IAAI,MAAM,EAAE;AAErB,WAAO,IAAI,MAAM,EAAE;AAAA,EACrB,CAAC;AAMD,QAAM,oBAAoB,CAAC,SAAoB;AAC7C,QAAI,OAAO,QAAQ,UAAU,IAAI;AAAA,EACnC;AAKA,QAAM,kBAAkB,MAAM;AAC5B,QAAI,IAAI,gBAAgB;AACtB,wBAAkB,UAAU,KAAK;AAAA,aAC1B,IAAI,OAAO;AAClB,wBAAkB,UAAU,IAAI;AAAA,aACzB,IAAI,MAAM;AACjB,wBAAkB,UAAU,IAAI;AAAA,EACpC;AAMA,QAAM,iBAAiB,CAAC,cAA2B;AACjD,QAAI,QAAQ,SAAS;AAAA,EACvB;AAMA,QAAM,OAAO,CAAC,YAA8B;AAC1C,sBAAkB,QAAQ,QAAQ,UAAU,IAAI;AAChD,mBAAe,QAAQ,UAAU,EAAE,GAAG,cAAc;AAEpD,QAAI,OAAO,WAAW,aAAa;AACjC,YAAM,CAAC,SAAS,KAAK,GAAG,CAAC,CAACA,UAASC,MAAK,MAAM;AAC5C,cAAM,qCAAqB,IAAA;AAG3B,eAAO,QAAQA,MAAK,EAAE,QAAQ,CAAC,CAAC,SAAS,aAAa,MAAgC;AACpF,yBAAe,IAAI,SAAS,OAAO,WAAW,cAAc,MAAM;AAClE,yBAAe,IAAI,SAAS,OAAO,YAAY,cAAc,OAAO;AACpE,yBAAe,IAAI,SAAS,OAAO,SAAS,cAAc,OAAO;AAAA,QACnE,CAAC;AAGD,cAAMC,SAAQF,WAAU,UAAU,QAAQ,UAAU;AAGpD,uBAAe,IAAI,uBAAuB,aAAaE,MAAK,iBAAiB;AAC7E,uBAAe,IAAI,sBAAsB,aAAaA,MAAK,gBAAgB;AAC3E,uBAAe,IAAI,wBAAwB,aAAaA,MAAK,kBAAkB;AAG/E,cAAM,YAAY,SAAS,gBAAgB;AAC3C,uBAAe,QAAQ,CAAC,OAAO,iBAAiB;AAC9C,oBAAU,YAAY,cAAc,KAAK;AAAA,QAC3C,CAAC;AAAA,MACH,GAAG,EAAE,WAAW,MAAM;AAAA,IACxB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,CAAC;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { get, set } from "@vueuse/shared";
|
|
2
|
+
import { ref } from "vue";
|
|
3
|
+
function useTimeoutManager() {
|
|
4
|
+
const timeout = ref();
|
|
5
|
+
const clear = () => {
|
|
6
|
+
if (get(timeout)) {
|
|
7
|
+
clearTimeout(get(timeout));
|
|
8
|
+
set(timeout, void 0);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
const create = (callback, delay) => {
|
|
12
|
+
clear();
|
|
13
|
+
set(timeout, setTimeout(callback, delay));
|
|
14
|
+
};
|
|
15
|
+
const isActive = () => !!get(timeout);
|
|
16
|
+
return { clear, create, isActive };
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
useTimeoutManager
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=timeout-manager.js.map
|