@rotki/ui-library 2.21.0 → 2.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/accordions/accordion/RuiAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordions/accordions/RuiAccordions.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/accordions/accordions/RuiAccordions.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/alerts/RuiAlert.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/avatars/RuiAvatar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/avatars/RuiAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/avatars/RuiAvatarGroup.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/avatars/RuiAvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/avatars/avatar-props.js +1 -1
- package/dist/components/avatars/avatar-props.js.map +1 -1
- package/dist/components/avatars/use-avatar-group.js.map +1 -1
- package/dist/components/buttons/button/RuiButton.js.map +1 -1
- package/dist/components/buttons/button/RuiButton.vue.d.ts +2 -2
- package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/buttons/button/RuiButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/buttons/button/button-props.js.map +1 -1
- package/dist/components/buttons/button/button-styles.js.map +1 -1
- package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/buttons/button-group/RuiButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/calendar/RuiCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/calendar/RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/calendar/RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/calendar/state.js.map +1 -1
- package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/cards/RuiCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/cards/RuiCardHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/chips/RuiChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chips/chip-props.js.map +1 -1
- package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-picker/RuiColorDisplay.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/color-picker/RuiColorDisplay.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/color-picker/RuiColorHue.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-picker/RuiColorInput.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/color-picker/RuiColorInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/color-picker/RuiColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-picker/utils.js.map +1 -1
- package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/date-time-picker/RuiDateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-time-picker/RuiTimezoneSelect.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/date-time-picker/RuiTimezoneSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-styles.js.map +1 -1
- package/dist/components/date-time-picker/dayjs-setup.js.map +1 -1
- package/dist/components/date-time-picker/segment-config.js.map +1 -1
- package/dist/components/date-time-picker/segment-utils.js.map +1 -1
- package/dist/components/date-time-picker/timezones.js.map +1 -1
- package/dist/components/date-time-picker/types.js +1 -1
- package/dist/components/date-time-picker/types.js.map +1 -1
- package/dist/components/date-time-picker/use-date-time-selection.js +2 -2
- package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -1
- package/dist/components/date-time-picker/use-input-handler.js.map +1 -1
- package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
- package/dist/components/date-time-picker/utils.js.map +1 -1
- package/dist/components/divider/RuiDivider.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/divider/RuiDivider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/auto-complete/RuiAutoComplete.js.map +1 -1
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +14 -1
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js +15 -5
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/auto-complete/auto-complete-styles.js.map +1 -1
- package/dist/components/forms/category-picker/RuiCategoryPicker.js +7 -0
- package/dist/components/forms/category-picker/RuiCategoryPicker.js.map +1 -0
- package/dist/components/forms/category-picker/RuiCategoryPicker.vue.d.ts +134 -0
- package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js +561 -0
- package/dist/components/forms/category-picker/RuiCategoryPicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/forms/category-picker/category-picker-styles.d.ts +432 -0
- package/dist/components/forms/category-picker/category-picker-styles.js +59 -0
- package/dist/components/forms/category-picker/category-picker-styles.js.map +1 -0
- package/dist/components/forms/check-control-styles.js.map +1 -1
- package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/forms/checkbox/RuiCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/forms/checkbox/checkbox-group/RuiCheckboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/checkbox/checkbox-group/context.js.map +1 -1
- package/dist/components/forms/file-upload/RuiFileUpload.js.map +1 -1
- package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/forms/file-upload/RuiFileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/forms/radio-button/radio/RuiRadio.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/forms/select/RuiMenuSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/forms/select/RuiSimpleSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/select/menu-select-styles.js.map +1 -1
- package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/forms/slider/RuiSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/slider/slider-styles.js.map +1 -1
- package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/forms/switch/RuiSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/forms/text-area/RuiTextArea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/text-area/text-area-styles.js.map +1 -1
- package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/forms/text-field/RuiTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/forms/text-field/text-field-styles.js.map +1 -1
- package/dist/components/forms/text-input-styles.js.map +1 -1
- package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/helpers/RuiFormTextDetail.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/icons/RuiIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/index.d.ts +3 -2
- package/dist/components/index.js +3 -2
- package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/loaders/RuiSkeletonBase.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/loaders/RuiSkeletonLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/loaders/skeleton-type.js.map +1 -1
- package/dist/components/logos/RuiLogo.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/logos/RuiLogo.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/logos/use-logo-sources.js.map +1 -1
- package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/overlays/badge/RuiBadge.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/overlays/badge/badge-props.js.map +1 -1
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/overlays/dialog/RuiDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/overlays/menu/RuiMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/overlays/notification/RuiNotification.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/overlays/tooltip/RuiTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/overlays/tooltip/tooltip-styles.js.map +1 -1
- package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/progress/RuiProgress.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/progress/progress-props.js.map +1 -1
- package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/steppers/RuiFooterStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/steppers/RuiStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/steppers/RuiStepperCustomIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/steppers/RuiStepperIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/steppers/footer-stepper-variant.js.map +1 -1
- package/dist/components/tables/RuiDataTable.js.map +1 -1
- package/dist/components/tables/RuiDataTable.vue.d.ts +23 -2
- package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js +186 -217
- package/dist/components/tables/RuiDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/tables/RuiExpandButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/tables/RuiTableEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/RuiTableHead.js.map +1 -1
- package/dist/components/tables/RuiTableHead.vue.d.ts +11 -1
- package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/components/tables/RuiTableHead.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/RuiTablePagination.js.map +1 -1
- package/dist/components/tables/RuiTablePagination.vue.d.ts +5 -0
- package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js +24 -8
- package/dist/components/tables/RuiTablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tables/data-table/RuiDataTableBody.js +7 -0
- package/dist/components/tables/data-table/RuiDataTableBody.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableBody.vue.d.ts +55 -0
- package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js +78 -0
- package/dist/components/tables/data-table/RuiDataTableBody.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableCell.js +7 -0
- package/dist/components/tables/data-table/RuiDataTableCell.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableCell.vue.d.ts +30 -0
- package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js +54 -0
- package/dist/components/tables/data-table/RuiDataTableCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableEmptyRow.js +7 -0
- package/dist/components/tables/data-table/RuiDataTableEmptyRow.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue.d.ts +19 -0
- package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue_vue_type_script_setup_true_lang.js +43 -0
- package/dist/components/tables/data-table/RuiDataTableEmptyRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableExpandedRow.js +7 -0
- package/dist/components/tables/data-table/RuiDataTableExpandedRow.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue.d.ts +26 -0
- package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/components/tables/data-table/RuiDataTableExpandedRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableGroupRow.js +7 -0
- package/dist/components/tables/data-table/RuiDataTableGroupRow.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableGroupRow.vue.d.ts +32 -0
- package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js +85 -0
- package/dist/components/tables/data-table/RuiDataTableGroupRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableLoadingRow.js +7 -0
- package/dist/components/tables/data-table/RuiDataTableLoadingRow.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue.d.ts +3 -0
- package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue_vue_type_script_setup_true_lang.js +26 -0
- package/dist/components/tables/data-table/RuiDataTableLoadingRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableMobileSort.js +7 -0
- package/dist/components/tables/data-table/RuiDataTableMobileSort.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableMobileSort.vue.d.ts +33 -0
- package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js +101 -0
- package/dist/components/tables/data-table/RuiDataTableMobileSort.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableRow.js +7 -0
- package/dist/components/tables/data-table/RuiDataTableRow.js.map +1 -0
- package/dist/components/tables/data-table/RuiDataTableRow.vue.d.ts +31 -0
- package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js +142 -0
- package/dist/components/tables/data-table/RuiDataTableRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/tables/data-table/context.d.ts +73 -0
- package/dist/components/tables/data-table/context.js +100 -0
- package/dist/components/tables/data-table/context.js.map +1 -0
- package/dist/components/tables/data-table-styles.d.ts +30 -1
- package/dist/components/tables/data-table-styles.js +9 -2
- package/dist/components/tables/data-table-styles.js.map +1 -1
- package/dist/components/tables/table-props.d.ts +5 -0
- package/dist/components/tables/table-props.js +5 -1
- package/dist/components/tables/table-props.js.map +1 -1
- package/dist/components/tables/use-pagination-navigation.js.map +1 -1
- package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/tabs/tab/RuiTab.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/tab/use-tab-link.js.map +1 -1
- package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/tabs/tab-item/RuiTabItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/tab-items/RuiTabItems.js.map +1 -1
- package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/tabs/tab-items/RuiTabItems.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/tab-props.js.map +1 -1
- package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/tabs/tabs/RuiTabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/tabs/use-tab-routing.js +1 -1
- package/dist/components/tabs/tabs/use-tab-routing.js.map +1 -1
- package/dist/components/tabs/tabs/use-tab-scroll.js.map +1 -1
- package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/time-picker/RuiTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/time-picker/time-picker-styles.js.map +1 -1
- package/dist/composables/breakpoint.js.map +1 -1
- package/dist/composables/defaults/table.d.ts +12 -0
- package/dist/composables/defaults/table.js.map +1 -1
- package/dist/composables/dropdown-menu.js.map +1 -1
- package/dist/composables/floating.js +1 -1
- package/dist/composables/floating.js.map +1 -1
- package/dist/composables/forms/auto-complete/focus.js.map +1 -1
- package/dist/composables/forms/auto-complete/index.js +5 -4
- package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
- package/dist/composables/forms/auto-complete/search.d.ts +6 -1
- package/dist/composables/forms/auto-complete/search.js +12 -1
- package/dist/composables/forms/auto-complete/search.js.map +1 -1
- package/dist/composables/forms/auto-complete/value.js.map +1 -1
- package/dist/composables/forms/category-picker/use-category-picker.d.ts +76 -0
- package/dist/composables/forms/category-picker/use-category-picker.js +141 -0
- package/dist/composables/forms/category-picker/use-category-picker.js.map +1 -0
- package/dist/composables/forms/use-prepend-append-width.js.map +1 -1
- package/dist/composables/icons.js.map +1 -1
- package/dist/composables/popper.js.map +1 -1
- package/dist/composables/sticky-header.js.map +1 -1
- package/dist/composables/tables/data-table/columns.d.ts +7 -1
- package/dist/composables/tables/data-table/columns.js +18 -10
- package/dist/composables/tables/data-table/columns.js.map +1 -1
- package/dist/composables/tables/data-table/expansion.js.map +1 -1
- package/dist/composables/tables/data-table/grouping.d.ts +4 -6
- package/dist/composables/tables/data-table/grouping.js +38 -24
- package/dist/composables/tables/data-table/grouping.js.map +1 -1
- package/dist/composables/tables/data-table/pagination.d.ts +4 -4
- package/dist/composables/tables/data-table/pagination.js +63 -21
- package/dist/composables/tables/data-table/pagination.js.map +1 -1
- package/dist/composables/tables/data-table/selection.js +16 -6
- package/dist/composables/tables/data-table/selection.js.map +1 -1
- package/dist/composables/tables/data-table/sort.d.ts +4 -3
- package/dist/composables/tables/data-table/sort.js +78 -40
- package/dist/composables/tables/data-table/sort.js.map +1 -1
- package/dist/composables/tables/data-table/types.d.ts +3 -1
- package/dist/composables/tables/data-table/types.js +6 -2
- package/dist/composables/tables/data-table/types.js.map +1 -1
- package/dist/composables/theme.js.map +1 -1
- package/dist/composables/timeout-manager.js.map +1 -1
- package/dist/composables/use-rui-i18n.js.map +1 -1
- package/dist/consts/colors.js.map +1 -1
- package/dist/consts/time-accuracy.js.map +1 -1
- package/dist/i18n/keys.js.map +1 -1
- package/dist/icons/icons_1.d.ts +12 -12
- package/dist/icons/icons_1.js +140 -157
- package/dist/icons/icons_1.js.map +1 -1
- package/dist/icons/icons_2.d.ts +13 -13
- package/dist/icons/icons_2.js +128 -149
- package/dist/icons/icons_2.js.map +1 -1
- package/dist/icons/icons_3.d.ts +18 -18
- package/dist/icons/icons_3.js +244 -282
- package/dist/icons/icons_3.js.map +1 -1
- package/dist/icons/icons_4.d.ts +251 -6
- package/dist/icons/icons_4.js +3016 -75
- package/dist/icons/icons_4.js.map +1 -1
- package/dist/icons/icons_5.d.ts +20 -0
- package/dist/icons/icons_5.js +221 -0
- package/dist/icons/icons_5.js.map +1 -0
- package/dist/icons/index.d.ts +2 -1
- package/dist/icons/index.js +297 -32
- package/dist/icons/index.js.map +1 -1
- package/dist/index.js +8 -6
- package/dist/index.js.map +1 -1
- package/dist/library-icons.json +1 -0
- package/dist/style.css +152 -0
- package/dist/theme/index.js.map +1 -1
- package/dist/types/stepper.js.map +1 -1
- package/dist/types/theme.js.map +1 -1
- package/dist/utils/assert.js.map +1 -1
- package/dist/utils/blockie.js.map +1 -1
- package/dist/utils/form-text-detail.js.map +1 -1
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/is-equal.js.map +1 -1
- package/dist/utils/tv.js.map +1 -1
- package/dist/vite-plugin/index.js +6 -5
- package/dist/vite-plugin/index.js.map +1 -1
- package/dist/vite-plugin/scanner.d.ts +1 -1
- package/dist/vite-plugin/scanner.js +10 -7
- package/dist/vite-plugin/scanner.js.map +1 -1
- package/dist/vite-plugin/types.d.ts +9 -0
- package/dist/web-types.json +2042 -1108
- package/package.json +35 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiButtonGroup.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../../src/components/buttons/button-group/RuiButtonGroup.vue"],"sourcesContent":["<script lang=\"ts\" generic=\"T = undefined\" setup>\nimport type { ButtonSize } from '@/components/buttons/button/button-props';\nimport type { ContextColorsType } from '@/consts/colors';\nimport { Fragment, isVNode } from 'vue';\nimport { tv } from '@/utils/tv';\n\nexport interface Props {\n vertical?: boolean;\n color?: ContextColorsType;\n activeColor?: ContextColorsType;\n variant?: 'default' | 'outlined' | 'text';\n size?: ButtonSize;\n gap?: 'sm' | 'md' | 'lg';\n required?: boolean;\n disabled?: boolean;\n}\n\ndefineOptions({\n name: 'RuiButtonGroup',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<T | T[]>();\n\nconst {\n vertical = false,\n color,\n activeColor,\n variant = 'default',\n size,\n gap,\n required = false,\n disabled = false,\n} = defineProps<Props>();\n\nconst slots = useSlots();\n\nconst buttonGroupStyles = tv({\n slots: {\n root: 'inline-flex rounded divide-x divide-rui-grey-400 outline outline-1 outline-transparent outline-offset-[-1px]',\n button: 'border-0 outline-0 focus:z-[1]',\n },\n variants: {\n vertical: {\n true: {\n root: 'flex-col items-start divide-x-0 divide-y',\n button: 'w-full',\n },\n false: {},\n },\n gap: {\n none: {\n button: '!rounded-none',\n },\n sm: {\n root: 'divide-x-0 divide-y-0 outline-0 gap-2',\n button: 'outline-1',\n },\n md: {\n root: 'divide-x-0 divide-y-0 outline-0 gap-4',\n button: 'outline-1',\n },\n lg: {\n root: 'divide-x-0 divide-y-0 outline-0 gap-6',\n button: 'outline-1',\n },\n },\n variant: {\n default: {},\n outlined: {\n root: 'outline-rui-text divide-rui-text',\n },\n text: {},\n },\n color: {\n primary: {},\n secondary: {},\n error: {},\n warning: {},\n info: {},\n success: {},\n },\n },\n compoundVariants: [\n // First/last child rounding when not separated (! needed to override RuiButton's CSS module border-radius)\n { gap: 'none', vertical: false, class: { button: 'first:!rounded-l last:!rounded-r' } },\n { gap: 'none', vertical: true, class: { button: 'first:!rounded-t last:!rounded-b' } },\n\n // Color dividers (default variant)\n { color: 'primary', class: { root: 'divide-rui-primary-darker' } },\n { color: 'secondary', class: { root: 'divide-rui-secondary-darker' } },\n { color: 'error', class: { root: 'divide-rui-error-darker' } },\n { color: 'warning', class: { root: 'divide-rui-warning-darker' } },\n { color: 'info', class: { root: 'divide-rui-info-darker' } },\n { color: 'success', class: { root: 'divide-rui-success-darker' } },\n\n // Color dividers for outlined/text (overrides darker dividers above)\n { color: 'primary', variant: ['outlined', 'text'], class: { root: 'divide-rui-primary/[0.5]' } },\n { color: 'secondary', variant: ['outlined', 'text'], class: { root: 'divide-rui-secondary/[0.5]' } },\n { color: 'error', variant: ['outlined', 'text'], class: { root: 'divide-rui-error/[0.5]' } },\n { color: 'warning', variant: ['outlined', 'text'], class: { root: 'divide-rui-warning/[0.5]' } },\n { color: 'info', variant: ['outlined', 'text'], class: { root: 'divide-rui-info/[0.5]' } },\n { color: 'success', variant: ['outlined', 'text'], class: { root: 'divide-rui-success/[0.5]' } },\n\n // Color outline for outlined variant\n { color: 'primary', variant: 'outlined', class: { root: 'outline-rui-primary/[0.5]' } },\n { color: 'secondary', variant: 'outlined', class: { root: 'outline-rui-secondary/[0.5]' } },\n { color: 'error', variant: 'outlined', class: { root: 'outline-rui-error/[0.5]' } },\n { color: 'warning', variant: 'outlined', class: { root: 'outline-rui-warning/[0.5]' } },\n { color: 'info', variant: 'outlined', class: { root: 'outline-rui-info/[0.5]' } },\n { color: 'success', variant: 'outlined', class: { root: 'outline-rui-success/[0.5]' } },\n ],\n defaultVariants: {\n vertical: false,\n gap: 'none',\n variant: 'default',\n },\n});\n\nconst ui = computed<ReturnType<typeof buttonGroupStyles>>(() => buttonGroupStyles({\n vertical,\n gap: gap ?? 'none',\n variant,\n color,\n}));\n\nconst children = computed<VNode[]>(() => {\n const selectedValue: T | T[] | undefined = get(modelValue);\n const slotContent = slots.default?.() ?? [];\n const resolved = flattenSlotContent(slotContent);\n\n return resolved.map((child, i) => {\n // child props are in kebab-case\n const value = child.props?.['model-value'];\n const active = isActive(value ?? i, selectedValue);\n const resolvedColor = active && activeColor ? activeColor : color;\n\n // Only fall back to the group's size when the child did not set one itself.\n // This lets consumers override size per-button while still benefiting from\n // the group-level default.\n const childSize = child.props?.size;\n\n child.props = {\n ...child.props,\n active,\n ...(disabled && { disabled: true }),\n ...(resolvedColor && { color: resolvedColor }),\n ...(!childSize && size && { size }),\n };\n\n return child;\n });\n});\n\n/**\n * Flattens slot content by unwrapping Fragments (created by v-for).\n * Returns only actual VNode children.\n */\nfunction flattenSlotContent(nodes: VNode[]): VNode[] {\n return nodes.flatMap((node) => {\n if (node.type === Fragment && Array.isArray(node.children) && node.children.length > 0)\n return flattenSlotContent(node.children.filter(isVNode));\n\n return [node];\n });\n}\n\nfunction isActive(id: T, selected?: T | T[]): boolean {\n if (Array.isArray(selected))\n return selected.includes(id);\n\n return selected === id;\n}\n\nfunction onClick(id: T): void {\n const selected = get(modelValue);\n\n if (Array.isArray(selected)) {\n const index = selected.indexOf(id);\n if (index >= 0) {\n if (required && selected.length === 1)\n return;\n\n set(modelValue, selected.filter((_, i) => i !== index));\n }\n else {\n set(modelValue, [...selected, id]);\n }\n }\n else if (required) {\n set(modelValue, id);\n }\n else {\n set(modelValue, isActive(id, selected) ? undefined : id);\n }\n}\n</script>\n\n<template>\n <div\n :class=\"ui.root()\"\n v-bind=\"$attrs\"\n >\n <Component\n :is=\"child\"\n v-for=\"(child, i) in children\"\n :key=\"i\"\n :class=\"ui.button()\"\n :variant=\"variant\"\n @update:model-value=\"onClick($event ?? i)\"\n />\n </div>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RuiButtonGroup.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../../src/components/buttons/button-group/RuiButtonGroup.vue"],"sourcesContent":["<script lang=\"ts\" generic=\"T = undefined\" setup>\nimport type { ButtonSize } from '@/components/buttons/button/button-props';\nimport type { ContextColorsType } from '@/consts/colors';\nimport { Fragment, isVNode } from 'vue';\nimport { tv } from '@/utils/tv';\n\nexport interface Props {\n vertical?: boolean;\n color?: ContextColorsType;\n activeColor?: ContextColorsType;\n variant?: 'default' | 'outlined' | 'text';\n size?: ButtonSize;\n gap?: 'sm' | 'md' | 'lg';\n required?: boolean;\n disabled?: boolean;\n}\n\ndefineOptions({\n name: 'RuiButtonGroup',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<T | T[]>();\n\nconst {\n vertical = false,\n color,\n activeColor,\n variant = 'default',\n size,\n gap,\n required = false,\n disabled = false,\n} = defineProps<Props>();\n\nconst slots = useSlots();\n\nconst buttonGroupStyles = tv({\n slots: {\n root: 'inline-flex rounded divide-x divide-rui-grey-400 outline outline-1 outline-transparent outline-offset-[-1px]',\n button: 'border-0 outline-0 focus:z-[1]',\n },\n variants: {\n vertical: {\n true: {\n root: 'flex-col items-start divide-x-0 divide-y',\n button: 'w-full',\n },\n false: {},\n },\n gap: {\n none: {\n button: '!rounded-none',\n },\n sm: {\n root: 'divide-x-0 divide-y-0 outline-0 gap-2',\n button: 'outline-1',\n },\n md: {\n root: 'divide-x-0 divide-y-0 outline-0 gap-4',\n button: 'outline-1',\n },\n lg: {\n root: 'divide-x-0 divide-y-0 outline-0 gap-6',\n button: 'outline-1',\n },\n },\n variant: {\n default: {},\n outlined: {\n root: 'outline-rui-text divide-rui-text',\n },\n text: {},\n },\n color: {\n primary: {},\n secondary: {},\n error: {},\n warning: {},\n info: {},\n success: {},\n },\n },\n compoundVariants: [\n // First/last child rounding when not separated (! needed to override RuiButton's CSS module border-radius)\n { gap: 'none', vertical: false, class: { button: 'first:!rounded-l last:!rounded-r' } },\n { gap: 'none', vertical: true, class: { button: 'first:!rounded-t last:!rounded-b' } },\n\n // Color dividers (default variant)\n { color: 'primary', class: { root: 'divide-rui-primary-darker' } },\n { color: 'secondary', class: { root: 'divide-rui-secondary-darker' } },\n { color: 'error', class: { root: 'divide-rui-error-darker' } },\n { color: 'warning', class: { root: 'divide-rui-warning-darker' } },\n { color: 'info', class: { root: 'divide-rui-info-darker' } },\n { color: 'success', class: { root: 'divide-rui-success-darker' } },\n\n // Color dividers for outlined/text (overrides darker dividers above)\n { color: 'primary', variant: ['outlined', 'text'], class: { root: 'divide-rui-primary/[0.5]' } },\n { color: 'secondary', variant: ['outlined', 'text'], class: { root: 'divide-rui-secondary/[0.5]' } },\n { color: 'error', variant: ['outlined', 'text'], class: { root: 'divide-rui-error/[0.5]' } },\n { color: 'warning', variant: ['outlined', 'text'], class: { root: 'divide-rui-warning/[0.5]' } },\n { color: 'info', variant: ['outlined', 'text'], class: { root: 'divide-rui-info/[0.5]' } },\n { color: 'success', variant: ['outlined', 'text'], class: { root: 'divide-rui-success/[0.5]' } },\n\n // Color outline for outlined variant\n { color: 'primary', variant: 'outlined', class: { root: 'outline-rui-primary/[0.5]' } },\n { color: 'secondary', variant: 'outlined', class: { root: 'outline-rui-secondary/[0.5]' } },\n { color: 'error', variant: 'outlined', class: { root: 'outline-rui-error/[0.5]' } },\n { color: 'warning', variant: 'outlined', class: { root: 'outline-rui-warning/[0.5]' } },\n { color: 'info', variant: 'outlined', class: { root: 'outline-rui-info/[0.5]' } },\n { color: 'success', variant: 'outlined', class: { root: 'outline-rui-success/[0.5]' } },\n ],\n defaultVariants: {\n vertical: false,\n gap: 'none',\n variant: 'default',\n },\n});\n\nconst ui = computed<ReturnType<typeof buttonGroupStyles>>(() => buttonGroupStyles({\n vertical,\n gap: gap ?? 'none',\n variant,\n color,\n}));\n\nconst children = computed<VNode[]>(() => {\n const selectedValue: T | T[] | undefined = get(modelValue);\n const slotContent = slots.default?.() ?? [];\n const resolved = flattenSlotContent(slotContent);\n\n return resolved.map((child, i) => {\n // child props are in kebab-case\n const value = child.props?.['model-value'];\n const active = isActive(value ?? i, selectedValue);\n const resolvedColor = active && activeColor ? activeColor : color;\n\n // Only fall back to the group's size when the child did not set one itself.\n // This lets consumers override size per-button while still benefiting from\n // the group-level default.\n const childSize = child.props?.size;\n\n child.props = {\n ...child.props,\n active,\n ...(disabled && { disabled: true }),\n ...(resolvedColor && { color: resolvedColor }),\n ...(!childSize && size && { size }),\n };\n\n return child;\n });\n});\n\n/**\n * Flattens slot content by unwrapping Fragments (created by v-for).\n * Returns only actual VNode children.\n */\nfunction flattenSlotContent(nodes: VNode[]): VNode[] {\n return nodes.flatMap((node) => {\n if (node.type === Fragment && Array.isArray(node.children) && node.children.length > 0)\n return flattenSlotContent(node.children.filter(isVNode));\n\n return [node];\n });\n}\n\nfunction isActive(id: T, selected?: T | T[]): boolean {\n if (Array.isArray(selected))\n return selected.includes(id);\n\n return selected === id;\n}\n\nfunction onClick(id: T): void {\n const selected = get(modelValue);\n\n if (Array.isArray(selected)) {\n const index = selected.indexOf(id);\n if (index >= 0) {\n if (required && selected.length === 1)\n return;\n\n set(modelValue, selected.filter((_, i) => i !== index));\n }\n else {\n set(modelValue, [...selected, id]);\n }\n }\n else if (required) {\n set(modelValue, id);\n }\n else {\n set(modelValue, isActive(id, selected) ? undefined : id);\n }\n}\n</script>\n\n<template>\n <div\n :class=\"ui.root()\"\n v-bind=\"$attrs\"\n >\n <Component\n :is=\"child\"\n v-for=\"(child, i) in children\"\n :key=\"i\"\n :class=\"ui.button()\"\n :variant=\"variant\"\n @update:model-value=\"onClick($event ?? i)\"\n />\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -6,11 +6,11 @@ import RuiCalendarHeader_default from "./RuiCalendarHeader.js";
|
|
|
6
6
|
import { computed, createElementBlock, createVNode, defineComponent, mergeModels, normalizeClass, openBlock, provide, ref, useModel, watch } from "vue";
|
|
7
7
|
import { get, isDefined, set } from "@vueuse/core";
|
|
8
8
|
//#region src/components/calendar/RuiCalendar.vue?vue&type=script&setup=true&lang.ts
|
|
9
|
-
var RuiCalendar_vue_vue_type_script_setup_true_lang_default =
|
|
9
|
+
var RuiCalendar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
10
10
|
name: "RuiCalendar",
|
|
11
11
|
inheritAttrs: false,
|
|
12
12
|
__name: "RuiCalendar",
|
|
13
|
-
props:
|
|
13
|
+
props: /*@__PURE__*/ mergeModels({
|
|
14
14
|
maxDate: {},
|
|
15
15
|
minDate: {},
|
|
16
16
|
allowEmpty: {
|
|
@@ -31,7 +31,7 @@ var RuiCalendar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
31
31
|
},
|
|
32
32
|
"menu-openModifiers": {}
|
|
33
33
|
}),
|
|
34
|
-
emits:
|
|
34
|
+
emits: /*@__PURE__*/ mergeModels(["update:pages"], ["update:modelValue", "update:menu-open"]),
|
|
35
35
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
36
36
|
const model = useModel(__props, "modelValue");
|
|
37
37
|
const isMenuOpen = useModel(__props, "menu-open");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiCalendar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/calendar/RuiCalendar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { computed, provide, ref, watch } from 'vue';\nimport {\n CalendarStateSymbol,\n type MonthYearSelection,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport { useRotkiTheme } from '@/composables/theme';\nimport { tv } from '@/utils/tv';\nimport RuiCalendarGrid from './RuiCalendarGrid.vue';\nimport RuiCalendarHeader from './RuiCalendarHeader.vue';\n\nexport interface CalendarProps {\n maxDate?: Date | number;\n minDate?: Date | number;\n allowEmpty?: boolean;\n borderless?: boolean;\n}\n\ndefineOptions({\n name: 'RuiCalendar',\n inheritAttrs: false,\n});\n\nconst model = defineModel<Date | undefined>({ required: false });\nconst isMenuOpen = defineModel<boolean>('menu-open', { required: false, default: false });\n\nconst { maxDate, minDate, allowEmpty = false, borderless = false } = defineProps<CalendarProps>();\n\nconst emit = defineEmits<{\n 'update:pages': [{ title: string }[]];\n}>();\n\nconst currentDate = ref<Date>(isDefined(model) ? new Date(get(model)) : new Date());\nconst selectedDate = ref<Date | undefined>(isDefined(model) ? new Date(get(model)) : undefined);\nconst viewMonth = ref<number>(get(currentDate).getMonth());\nconst viewYear = ref<number>(get(currentDate).getFullYear());\n\nconst { isDark } = useRotkiTheme();\n\nconst calendarStyles = tv({\n base: 'w-[18.75rem] bg-white dark:bg-rui-grey-900 overflow-hidden',\n variants: {\n bordered: {\n true: 'rounded-md shadow-sm border border-rui-grey-200 dark:border-rui-grey-800',\n },\n },\n});\n\nconst ui = computed<string>(() => calendarStyles({ bordered: !borderless }));\n\nconst monthTitle = computed<string>(() => {\n const date = new Date(get(viewYear), get(viewMonth));\n return date.toLocaleString('default', { month: 'long', year: 'numeric' });\n});\n\nprovide(CalendarStateSymbol.valueOf(), {\n viewMonth,\n viewYear,\n selectedDate,\n maxDate: computed(() => (maxDate ? new Date(maxDate) : undefined)),\n minDate: computed(() => (minDate ? new Date(minDate) : undefined)),\n isDark,\n allowEmpty,\n} satisfies RuiCalendarState);\n\nfunction moveMonth(delta: number): void {\n let newMonth = get(viewMonth) + delta;\n let newYear = get(viewYear);\n\n if (newMonth > 11) {\n newMonth = 0;\n newYear++;\n }\n else if (newMonth < 0) {\n newMonth = 11;\n newYear--;\n }\n\n set(viewMonth, newMonth);\n set(viewYear, newYear);\n\n emit('update:pages', [{ title: get(monthTitle) }]);\n}\n\nfunction move(date: Date | number): void {\n const newDate = new Date(date);\n set(viewMonth, newDate.getMonth());\n set(viewYear, newDate.getFullYear());\n}\n\nfunction selectMonth(selection: MonthYearSelection): void {\n set(viewMonth, selection.month);\n set(viewYear, selection.year);\n\n // If there's a selected date, update it with the new year/month\n if (isDefined(selectedDate)) {\n const current = get(selectedDate);\n const currentDay = current.getDate();\n // Handle day overflow (e.g., Jan 31 -> Feb 28) by checking BEFORE setting month\n const daysInNewMonth = new Date(selection.year, selection.month + 1, 0).getDate();\n const adjustedDay = Math.min(currentDay, daysInNewMonth);\n\n const newDate = new Date(current);\n newDate.setFullYear(selection.year);\n newDate.setDate(1); // Set to 1st to avoid overflow when changing month\n newDate.setMonth(selection.month);\n newDate.setDate(adjustedDay);\n set(selectedDate, newDate);\n }\n}\n\nwatch(selectedDate, (date) => {\n if (!date && !allowEmpty)\n return;\n\n if (date) {\n set(model, new Date(date));\n\n if (get(viewMonth) !== date.getMonth()) {\n set(viewMonth, date.getMonth());\n }\n\n if (get(viewYear) !== date.getFullYear()) {\n set(viewYear, date.getFullYear());\n }\n }\n else {\n set(model, undefined);\n }\n});\n\nwatch(model, (newValue) => {\n if (newValue === undefined) {\n set(selectedDate, undefined);\n return;\n }\n\n const date = new Date(newValue);\n\n if (isDefined(selectedDate) && get(selectedDate).getTime() !== date.getTime()) {\n set(selectedDate, new Date(newValue));\n set(viewMonth, date.getMonth());\n set(viewYear, date.getFullYear());\n }\n});\n\ndefineExpose({\n move,\n});\n</script>\n\n<template>\n <div :class=\"ui\">\n <RuiCalendarHeader\n v-model:menu-open=\"isMenuOpen\"\n :title=\"monthTitle\"\n :view-month=\"viewMonth\"\n :view-year=\"viewYear\"\n @prev-month=\"moveMonth(-1)\"\n @next-month=\"moveMonth(1)\"\n @select-month=\"selectMonth($event)\"\n />\n\n <RuiCalendarGrid\n v-model=\"selectedDate\"\n :view-month=\"viewMonth\"\n :view-year=\"viewYear\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBA,MAAM,QAAQ,SAA6B,SAAA,
|
|
1
|
+
{"version":3,"file":"RuiCalendar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/calendar/RuiCalendar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { computed, provide, ref, watch } from 'vue';\nimport {\n CalendarStateSymbol,\n type MonthYearSelection,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport { useRotkiTheme } from '@/composables/theme';\nimport { tv } from '@/utils/tv';\nimport RuiCalendarGrid from './RuiCalendarGrid.vue';\nimport RuiCalendarHeader from './RuiCalendarHeader.vue';\n\nexport interface CalendarProps {\n maxDate?: Date | number;\n minDate?: Date | number;\n allowEmpty?: boolean;\n borderless?: boolean;\n}\n\ndefineOptions({\n name: 'RuiCalendar',\n inheritAttrs: false,\n});\n\nconst model = defineModel<Date | undefined>({ required: false });\nconst isMenuOpen = defineModel<boolean>('menu-open', { required: false, default: false });\n\nconst { maxDate, minDate, allowEmpty = false, borderless = false } = defineProps<CalendarProps>();\n\nconst emit = defineEmits<{\n 'update:pages': [{ title: string }[]];\n}>();\n\nconst currentDate = ref<Date>(isDefined(model) ? new Date(get(model)) : new Date());\nconst selectedDate = ref<Date | undefined>(isDefined(model) ? new Date(get(model)) : undefined);\nconst viewMonth = ref<number>(get(currentDate).getMonth());\nconst viewYear = ref<number>(get(currentDate).getFullYear());\n\nconst { isDark } = useRotkiTheme();\n\nconst calendarStyles = tv({\n base: 'w-[18.75rem] bg-white dark:bg-rui-grey-900 overflow-hidden',\n variants: {\n bordered: {\n true: 'rounded-md shadow-sm border border-rui-grey-200 dark:border-rui-grey-800',\n },\n },\n});\n\nconst ui = computed<string>(() => calendarStyles({ bordered: !borderless }));\n\nconst monthTitle = computed<string>(() => {\n const date = new Date(get(viewYear), get(viewMonth));\n return date.toLocaleString('default', { month: 'long', year: 'numeric' });\n});\n\nprovide(CalendarStateSymbol.valueOf(), {\n viewMonth,\n viewYear,\n selectedDate,\n maxDate: computed(() => (maxDate ? new Date(maxDate) : undefined)),\n minDate: computed(() => (minDate ? new Date(minDate) : undefined)),\n isDark,\n allowEmpty,\n} satisfies RuiCalendarState);\n\nfunction moveMonth(delta: number): void {\n let newMonth = get(viewMonth) + delta;\n let newYear = get(viewYear);\n\n if (newMonth > 11) {\n newMonth = 0;\n newYear++;\n }\n else if (newMonth < 0) {\n newMonth = 11;\n newYear--;\n }\n\n set(viewMonth, newMonth);\n set(viewYear, newYear);\n\n emit('update:pages', [{ title: get(monthTitle) }]);\n}\n\nfunction move(date: Date | number): void {\n const newDate = new Date(date);\n set(viewMonth, newDate.getMonth());\n set(viewYear, newDate.getFullYear());\n}\n\nfunction selectMonth(selection: MonthYearSelection): void {\n set(viewMonth, selection.month);\n set(viewYear, selection.year);\n\n // If there's a selected date, update it with the new year/month\n if (isDefined(selectedDate)) {\n const current = get(selectedDate);\n const currentDay = current.getDate();\n // Handle day overflow (e.g., Jan 31 -> Feb 28) by checking BEFORE setting month\n const daysInNewMonth = new Date(selection.year, selection.month + 1, 0).getDate();\n const adjustedDay = Math.min(currentDay, daysInNewMonth);\n\n const newDate = new Date(current);\n newDate.setFullYear(selection.year);\n newDate.setDate(1); // Set to 1st to avoid overflow when changing month\n newDate.setMonth(selection.month);\n newDate.setDate(adjustedDay);\n set(selectedDate, newDate);\n }\n}\n\nwatch(selectedDate, (date) => {\n if (!date && !allowEmpty)\n return;\n\n if (date) {\n set(model, new Date(date));\n\n if (get(viewMonth) !== date.getMonth()) {\n set(viewMonth, date.getMonth());\n }\n\n if (get(viewYear) !== date.getFullYear()) {\n set(viewYear, date.getFullYear());\n }\n }\n else {\n set(model, undefined);\n }\n});\n\nwatch(model, (newValue) => {\n if (newValue === undefined) {\n set(selectedDate, undefined);\n return;\n }\n\n const date = new Date(newValue);\n\n if (isDefined(selectedDate) && get(selectedDate).getTime() !== date.getTime()) {\n set(selectedDate, new Date(newValue));\n set(viewMonth, date.getMonth());\n set(viewYear, date.getFullYear());\n }\n});\n\ndefineExpose({\n move,\n});\n</script>\n\n<template>\n <div :class=\"ui\">\n <RuiCalendarHeader\n v-model:menu-open=\"isMenuOpen\"\n :title=\"monthTitle\"\n :view-month=\"viewMonth\"\n :view-year=\"viewYear\"\n @prev-month=\"moveMonth(-1)\"\n @next-month=\"moveMonth(1)\"\n @select-month=\"selectMonth($event)\"\n />\n\n <RuiCalendarGrid\n v-model=\"selectedDate\"\n :view-month=\"viewMonth\"\n :view-year=\"viewYear\"\n />\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -14,11 +14,11 @@ var _hoisted_4 = [
|
|
|
14
14
|
"disabled",
|
|
15
15
|
"onClick"
|
|
16
16
|
];
|
|
17
|
-
var RuiCalendarGrid_vue_vue_type_script_setup_true_lang_default =
|
|
17
|
+
var RuiCalendarGrid_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
18
18
|
name: "RuiCalendarGrid",
|
|
19
19
|
inheritAttrs: false,
|
|
20
20
|
__name: "RuiCalendarGrid",
|
|
21
|
-
props:
|
|
21
|
+
props: /*@__PURE__*/ mergeModels({
|
|
22
22
|
viewMonth: {},
|
|
23
23
|
viewYear: {}
|
|
24
24
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js","names":[],"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 {\n CalendarStateSymbol,\n getDaysOfWeek,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport { tv } from '@/utils/tv';\n\ndefineOptions({\n name: 'RuiCalendarGrid',\n inheritAttrs: false,\n});\n\nconst model = defineModel<Date | undefined>();\n\nconst { viewMonth, viewYear } = 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\nconst dayButton = tv({\n base: '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 variants: {\n selected: {\n true: 'bg-rui-primary text-white hover:bg-rui-primary/90 dark:hover:bg-rui-primary/90',\n },\n currentMonth: {\n true: 'text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700',\n false: 'text-gray-400 dark:text-gray-600',\n },\n inRange: {\n false: 'opacity-50 cursor-not-allowed hover:bg-transparent',\n },\n today: {\n true: `relative after:content-[''] after:absolute after:size-1 after:rounded-full after:bottom-1 after:left-1/2 after:-translate-x-1/2 after:bg-rui-primary`,\n },\n },\n compoundVariants: [\n {\n selected: true,\n class: 'text-white dark:text-white',\n },\n ],\n});\n\n// Pre-calculated arrays for performance - using refs for better control\nconst calendarDays = ref<\n Array<{\n date: Date;\n isCurrentMonth: boolean;\n isInRange: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n dayNumber: number;\n }>\n>([]);\n\nfunction createDayData(\n date: Date,\n isCurrentMonth: boolean,\n modelValue: Date | null | undefined,\n maxDateValue: Date | null,\n minDateValue: Date | null,\n): {\n date: Date;\n isCurrentMonth: boolean;\n isInRange: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n dayNumber: number;\n} {\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(): void {\n const firstDayOfMonth = new Date(viewYear, viewMonth, 1);\n const lastDayOfMonth = new Date(viewYear, 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(viewYear, viewMonth, 0).getDate();\n for (let i = startingDayOfWeek - 1; i >= 0; i--) {\n const date = new Date(viewYear, 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(viewYear, 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(viewYear, 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(\n date: Date,\n maxDateValue: Date | null,\n minDateValue: Date | null,\n): 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 (\n date.getFullYear() === modelValue.getFullYear() &&\n date.getMonth() === modelValue.getMonth() &&\n date.getDate() === modelValue.getDate()\n );\n}\n\nfunction selectDate(dayData: { date: Date; isInRange: boolean; isSelected: boolean }): void {\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\n// Initial calculation\ncalculateCalendarDays();\n\n// Watchers for recalculation only when needed\nwatch([() => viewMonth, () => viewYear], () => {\n calculateCalendarDays();\n});\n\nwatch(model, () => {\n calculateCalendarDays();\n});\n\nwatch(\n [() => calendarState.maxDate, () => calendarState.minDate],\n () => {\n calculateCalendarDays();\n },\n);\n</script>\n\n<template>\n <div class=\"w-full p-2 pt-0\">\n <div class=\"grid grid-cols-7 pb-2\">\n <span\n v-for=\"day in daysOfWeek\"\n :key=\"day\"\n class=\"py-2 text-xs font-medium text-center text-gray-500 dark:text-gray-400\"\n >\n {{ day }}\n </span>\n </div>\n\n <div class=\"grid grid-cols-7 gap-0.5\">\n <button\n v-for=\"dayData in get(calendarDays)\"\n :key=\"dayData.key\"\n type=\"button\"\n :data-id=\"dayData.key\"\n :data-current-month=\"dayData.isCurrentMonth || undefined\"\n :data-selected=\"dayData.isSelected || undefined\"\n :data-today=\"(dayData.isToday && !dayData.isSelected) || undefined\"\n :class=\"dayButton({\n selected: dayData.isSelected,\n currentMonth: !dayData.isSelected && dayData.isCurrentMonth,\n inRange: dayData.isInRange,\n today: dayData.isToday && !dayData.isSelected,\n })\"\n :disabled=\"!dayData.isInRange\"\n @click.stop=\"selectDate(dayData)\"\n >\n {{ dayData.dayNumber }}\n </button>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RuiCalendarGrid.vue_vue_type_script_setup_true_lang.js","names":[],"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 {\n CalendarStateSymbol,\n getDaysOfWeek,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport { tv } from '@/utils/tv';\n\ndefineOptions({\n name: 'RuiCalendarGrid',\n inheritAttrs: false,\n});\n\nconst model = defineModel<Date | undefined>();\n\nconst { viewMonth, viewYear } = 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\nconst dayButton = tv({\n base: '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 variants: {\n selected: {\n true: 'bg-rui-primary text-white hover:bg-rui-primary/90 dark:hover:bg-rui-primary/90',\n },\n currentMonth: {\n true: 'text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700',\n false: 'text-gray-400 dark:text-gray-600',\n },\n inRange: {\n false: 'opacity-50 cursor-not-allowed hover:bg-transparent',\n },\n today: {\n true: `relative after:content-[''] after:absolute after:size-1 after:rounded-full after:bottom-1 after:left-1/2 after:-translate-x-1/2 after:bg-rui-primary`,\n },\n },\n compoundVariants: [\n {\n selected: true,\n class: 'text-white dark:text-white',\n },\n ],\n});\n\n// Pre-calculated arrays for performance - using refs for better control\nconst calendarDays = ref<\n Array<{\n date: Date;\n isCurrentMonth: boolean;\n isInRange: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n dayNumber: number;\n }>\n>([]);\n\nfunction createDayData(\n date: Date,\n isCurrentMonth: boolean,\n modelValue: Date | null | undefined,\n maxDateValue: Date | null,\n minDateValue: Date | null,\n): {\n date: Date;\n isCurrentMonth: boolean;\n isInRange: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n dayNumber: number;\n} {\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(): void {\n const firstDayOfMonth = new Date(viewYear, viewMonth, 1);\n const lastDayOfMonth = new Date(viewYear, 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(viewYear, viewMonth, 0).getDate();\n for (let i = startingDayOfWeek - 1; i >= 0; i--) {\n const date = new Date(viewYear, 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(viewYear, 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(viewYear, 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(\n date: Date,\n maxDateValue: Date | null,\n minDateValue: Date | null,\n): 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 (\n date.getFullYear() === modelValue.getFullYear() &&\n date.getMonth() === modelValue.getMonth() &&\n date.getDate() === modelValue.getDate()\n );\n}\n\nfunction selectDate(dayData: { date: Date; isInRange: boolean; isSelected: boolean }): void {\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\n// Initial calculation\ncalculateCalendarDays();\n\n// Watchers for recalculation only when needed\nwatch([() => viewMonth, () => viewYear], () => {\n calculateCalendarDays();\n});\n\nwatch(model, () => {\n calculateCalendarDays();\n});\n\nwatch(\n [() => calendarState.maxDate, () => calendarState.minDate],\n () => {\n calculateCalendarDays();\n },\n);\n</script>\n\n<template>\n <div class=\"w-full p-2 pt-0\">\n <div class=\"grid grid-cols-7 pb-2\">\n <span\n v-for=\"day in daysOfWeek\"\n :key=\"day\"\n class=\"py-2 text-xs font-medium text-center text-gray-500 dark:text-gray-400\"\n >\n {{ day }}\n </span>\n </div>\n\n <div class=\"grid grid-cols-7 gap-0.5\">\n <button\n v-for=\"dayData in get(calendarDays)\"\n :key=\"dayData.key\"\n type=\"button\"\n :data-id=\"dayData.key\"\n :data-current-month=\"dayData.isCurrentMonth || undefined\"\n :data-selected=\"dayData.isSelected || undefined\"\n :data-today=\"(dayData.isToday && !dayData.isSelected) || undefined\"\n :class=\"dayButton({\n selected: dayData.isSelected,\n currentMonth: !dayData.isSelected && dayData.isCurrentMonth,\n inRange: dayData.isInRange,\n today: dayData.isToday && !dayData.isSelected,\n })\"\n :disabled=\"!dayData.isInRange\"\n @click.stop=\"selectDate(dayData)\"\n >\n {{ dayData.dayNumber }}\n </button>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -7,11 +7,11 @@ import { get, isDefined, set } from "@vueuse/core";
|
|
|
7
7
|
//#region src/components/calendar/RuiCalendarHeader.vue?vue&type=script&setup=true&lang.ts
|
|
8
8
|
var _hoisted_1 = { class: "flex items-center justify-between px-4 py-3" };
|
|
9
9
|
var navButtonClass = "p-1 rounded-full text-gray-500 hover:text-rui-primary hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-rui-primary";
|
|
10
|
-
var RuiCalendarHeader_vue_vue_type_script_setup_true_lang_default =
|
|
10
|
+
var RuiCalendarHeader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
11
11
|
name: "RuiCalendarHeader",
|
|
12
12
|
inheritAttrs: false,
|
|
13
13
|
__name: "RuiCalendarHeader",
|
|
14
|
-
props:
|
|
14
|
+
props: /*@__PURE__*/ mergeModels({
|
|
15
15
|
title: {},
|
|
16
16
|
viewMonth: {},
|
|
17
17
|
viewYear: {}
|
|
@@ -22,7 +22,7 @@ var RuiCalendarHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
22
22
|
},
|
|
23
23
|
"menu-openModifiers": {}
|
|
24
24
|
}),
|
|
25
|
-
emits:
|
|
25
|
+
emits: /*@__PURE__*/ mergeModels([
|
|
26
26
|
"prev-month",
|
|
27
27
|
"next-month",
|
|
28
28
|
"select-month"
|
package/dist/components/calendar/RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js","names":[],"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 {\n CalendarStateSymbol,\n type MonthYearSelection,\n type RuiCalendarState,\n} 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 { viewMonth, viewYear } = 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 navButtonClass = 'p-1 rounded-full text-gray-500 hover:text-rui-primary hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-rui-primary';\n\nconst canGoToNext = computed<boolean>(() => {\n const { maxDate } = calendarState;\n if (!isDefined(maxDate)) {\n return true;\n }\n\n const date = new Date(viewYear, 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(viewYear, viewMonth);\n return date.getTime() > get(minDate).getTime();\n});\n\nfunction handleTitleClick(e: Event): void {\n set(anchorEl, (e.currentTarget as HTMLElement) ?? undefined);\n set(isMenuOpen, true);\n}\n\nfunction handleDateSelection(selection: MonthYearSelection): void {\n emit('select-month', selection);\n}\n</script>\n\n<template>\n <div class=\"flex items-center justify-between px-4 py-3\">\n <RuiButton\n type=\"button\"\n :class=\"navButtonClass\"\n icon\n data-id=\"nav-prev\"\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=\"font-medium text-gray-800 dark:text-gray-200 flex items-center cursor-pointer pl-8\"\n data-id=\"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=\"navButtonClass\"\n variant=\"text\"\n icon\n data-id=\"nav-next\"\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"],"mappings":";;;;;;;;AAmCA,IAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;EAlBvB,MAAM,aAAa,SAAoB,SAAC,
|
|
1
|
+
{"version":3,"file":"RuiCalendarHeader.vue_vue_type_script_setup_true_lang.js","names":[],"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 {\n CalendarStateSymbol,\n type MonthYearSelection,\n type RuiCalendarState,\n} 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 { viewMonth, viewYear } = 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 navButtonClass = 'p-1 rounded-full text-gray-500 hover:text-rui-primary hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-rui-primary';\n\nconst canGoToNext = computed<boolean>(() => {\n const { maxDate } = calendarState;\n if (!isDefined(maxDate)) {\n return true;\n }\n\n const date = new Date(viewYear, 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(viewYear, viewMonth);\n return date.getTime() > get(minDate).getTime();\n});\n\nfunction handleTitleClick(e: Event): void {\n set(anchorEl, (e.currentTarget as HTMLElement) ?? undefined);\n set(isMenuOpen, true);\n}\n\nfunction handleDateSelection(selection: MonthYearSelection): void {\n emit('select-month', selection);\n}\n</script>\n\n<template>\n <div class=\"flex items-center justify-between px-4 py-3\">\n <RuiButton\n type=\"button\"\n :class=\"navButtonClass\"\n icon\n data-id=\"nav-prev\"\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=\"font-medium text-gray-800 dark:text-gray-200 flex items-center cursor-pointer pl-8\"\n data-id=\"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=\"navButtonClass\"\n variant=\"text\"\n icon\n data-id=\"nav-next\"\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"],"mappings":";;;;;;;;AAmCA,IAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;EAlBvB,MAAM,aAAa,SAAoB,SAAC,WAA+B;EAQvE,MAAM,OAAO;EAMb,MAAM,WAAW,IAAiB;EAElC,MAAM,gBAAgB,OAAyB,mBAAmB;EAIlE,MAAM,cAAc,eAAwB;GAC1C,MAAM,EAAE,YAAY;GACpB,IAAI,CAAC,UAAU,OAAO,GACpB,OAAO;GAIT,OAAO,IADU,KAAK,QAAA,UAAU,QAAA,SACzB,CAAA,CAAK,QAAQ,IAAI,IAAI,OAAO,CAAC,CAAC,QAAQ;EAC/C,CAAC;EAED,MAAM,cAAc,eAAwB;GAC1C,MAAM,EAAE,YAAY;GACpB,IAAI,CAAC,UAAU,OAAO,GACpB,OAAO;GAIT,OAAO,IADU,KAAK,QAAA,UAAU,QAAA,SACzB,CAAA,CAAK,QAAQ,IAAI,IAAI,OAAO,CAAC,CAAC,QAAQ;EAC/C,CAAC;EAED,SAAS,iBAAiB,GAAgB;GACxC,IAAI,UAAW,EAAE,iBAAiC,KAAA,CAAS;GAC3D,IAAI,YAAY,IAAI;EACtB;EAEA,SAAS,oBAAoB,WAAqC;GAChE,KAAK,gBAAgB,SAAS;EAChC;;uBAIE,mBAmDM,OAnDN,YAmDM;IAlDJ,YAaY,mBAAA;KAZV,MAAK;KACJ,OAAK,eAAE,cAAc;KACtB,MAAA;KACA,WAAQ;KACP,UAAQ,CAAG,YAAA;KACZ,SAAQ;KACP,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAO,KAAI,YAAA,GAAA,CAAA,MAAA,CAAA;;4BAKf,CAHF,YAGE,iBAAA;MAFA,MAAK;MACL,MAAK;;;;IAIT,mBAWK,MAAA;KAVH,OAAM;KACN,WAAQ;KACP,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAO,iBAAiB,MAAM,GAAA,CAAA,MAAA,CAAA;wCAEjC,QAAA,KAAK,IAAG,KACX,CAAA,GAAA,YAIE,iBAAA;KAHA,MAAK;KACL,MAAK;KACL,OAAM;;IAIV,YAME,yBAAA;iBALS,WAAA;6EAAU,QAAA;KAClB,aAAW,SAAA;KACX,cAAY,QAAA;KACZ,aAAW,QAAA;KACX,UAAM,OAAA,OAAA,OAAA,MAAA,WAAE,oBAAoB,MAAM;;;;;;;IAGrC,YAaY,mBAAA;KAZV,MAAK;KACJ,OAAK,eAAE,cAAc;KACtB,SAAQ;KACR,MAAA;KACA,WAAQ;KACP,UAAQ,CAAG,YAAA;KACX,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAO,KAAI,YAAA,GAAA,CAAA,MAAA,CAAA;;4BAKf,CAHF,YAGE,iBAAA;MAFA,MAAK;MACL,MAAK"}
|
|
@@ -20,11 +20,11 @@ var _hoisted_5 = {
|
|
|
20
20
|
};
|
|
21
21
|
var _hoisted_6 = ["disabled", "onClick"];
|
|
22
22
|
var navButtonClass = "p-1 rounded-full text-gray-500 hover:text-rui-primary hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-rui-primary";
|
|
23
|
-
var RuiCalendarMenu_vue_vue_type_script_setup_true_lang_default =
|
|
23
|
+
var RuiCalendarMenu_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
24
24
|
name: "RuiCalendarMenu",
|
|
25
25
|
inheritAttrs: false,
|
|
26
26
|
__name: "RuiCalendarMenu",
|
|
27
|
-
props:
|
|
27
|
+
props: /*@__PURE__*/ mergeModels({
|
|
28
28
|
anchorEl: {},
|
|
29
29
|
viewMonth: {},
|
|
30
30
|
viewYear: {}
|
|
@@ -32,7 +32,7 @@ var RuiCalendarMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
|
|
|
32
32
|
"modelValue": { type: Boolean },
|
|
33
33
|
"modelModifiers": {}
|
|
34
34
|
}),
|
|
35
|
-
emits:
|
|
35
|
+
emits: /*@__PURE__*/ mergeModels(["select"], ["update:modelValue"]),
|
|
36
36
|
setup(__props, { emit: __emit }) {
|
|
37
37
|
const modelValue = useModel(__props, "modelValue");
|
|
38
38
|
const emit = __emit;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js","names":[],"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 { type FloatingOptions, Placement } from '@/composables/floating';\nimport { tv } from '@/utils/tv';\nimport RuiButton from '../buttons/button/RuiButton.vue';\n\ndefineOptions({\n name: 'RuiCalendarMenu',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<boolean>();\n\nconst { viewMonth, viewYear } = defineProps<{\n anchorEl: HTMLElement | undefined;\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst emit = defineEmits<{\n select: [MonthYearSelection];\n}>();\n\nconst MENU_OPTIONS: FloatingOptions = { placement: Placement.bottomStart };\n\n// Core reactive state - minimal\nconst viewMode = ref<'months' | 'years'>('months');\nconst startYear = ref<number>(viewYear - 6);\n\n// Pre-calculated constants\nconst months = getShortMonthNames();\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\nconst navButtonClass = 'p-1 rounded-full text-gray-500 hover:text-rui-primary hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-rui-primary';\n\nconst cellButton = tv({\n base: '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 variants: {\n selected: {\n true: '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',\n },\n inRange: {\n true: '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',\n false: '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',\n },\n selectedOutOfRange: {\n true: 'bg-gray-300 text-gray-500 dark:bg-gray-600 dark:text-gray-400',\n },\n },\n});\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(): void {\n const start = get(startYear);\n set(\n yearRange,\n Array.from({ length: 12 }, (_, i) => start + i),\n );\n}\n\nfunction calculateTitle(): void {\n if (get(viewMode) === 'months') {\n set(title, viewYear.toString());\n }\n else {\n const range = get(yearRange);\n set(title, `${range[0]} - ${range.at(-1)}`);\n }\n}\n\nfunction calculateNavigation(): void {\n const { maxDate, minDate } = calendarState;\n const mode = get(viewMode);\n\n if (mode === 'months') {\n const nextYear = viewYear + 1;\n const previousYear = 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(): void {\n const { minDate, maxDate } = calendarState;\n const currentYear = 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(): void {\n const { minDate, maxDate } = calendarState;\n const range = get(yearRange);\n const currentMonth = 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\nfunction toggleSelection(): void {\n set(viewMode, get(viewMode) === 'months' ? 'years' : 'months');\n}\n\nfunction selectMonth(month: number): void {\n if (!get(monthsInRange)[month])\n return;\n emit('select', { month, year: viewYear });\n set(modelValue, false);\n}\n\nfunction selectYear(year: number): void {\n const yearIndex = get(yearRange).indexOf(year);\n if (yearIndex === -1 || !get(yearsInRange)[yearIndex])\n return;\n\n emit('select', { month: viewMonth, year });\n set(viewMode, 'months');\n}\n\nfunction handleNext(): void {\n if (get(viewMode) === 'months') {\n const nextYear = viewYear + 1;\n // Emit directly - navigation is already constrained by canGoToNext\n emit('select', { month: viewMonth, year: nextYear });\n }\n else {\n const lastYearInRange = get(startYear) + 11;\n set(startYear, lastYearInRange + 1);\n }\n}\n\nfunction handlePrev(): void {\n if (get(viewMode) === 'months') {\n const previousYear = viewYear - 1;\n // Emit directly - navigation is already constrained by canGoToPrev\n emit('select', { month: viewMonth, year: previousYear });\n }\n else {\n const firstYearInRange = get(startYear);\n set(startYear, firstYearInRange - 12);\n }\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(\n () => viewYear,\n () => {\n calculateTitle();\n calculateNavigation();\n calculateMonthsInRange();\n calculateYearsInRange();\n },\n);\n\nwatch(\n () => viewMonth,\n () => {\n calculateYearsInRange();\n },\n);\n</script>\n\n<template>\n <RuiMenu\n v-model=\"modelValue\"\n :anchor-el=\"anchorEl\"\n :options=\"MENU_OPTIONS\"\n >\n <div class=\"w-64 shadow-lg overflow-hidden\">\n <div class=\"flex items-center justify-center p-1 font-medium text-gray-800 dark:text-gray-200 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 <RuiButton\n type=\"button\"\n :class=\"navButtonClass\"\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=\"navButtonClass\"\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=\"grid grid-cols-3 gap-1 p-2\"\n >\n <button\n v-for=\"(month, index) in months\"\n :key=\"month\"\n type=\"button\"\n :class=\"cellButton({\n selected: index === viewMonth && get(monthsInRange)[index],\n selectedOutOfRange: index === viewMonth && !get(monthsInRange)[index],\n inRange: index !== viewMonth ? get(monthsInRange)[index] : undefined,\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=\"grid grid-cols-3 gap-1 p-2\"\n >\n <button\n v-for=\"(year, index) in yearRange\"\n :key=\"year\"\n type=\"button\"\n :class=\"cellButton({\n selected: year === viewYear && get(yearsInRange)[index],\n selectedOutOfRange: year === viewYear && !get(yearsInRange)[index],\n inRange: year !== viewYear ? get(yearsInRange)[index] : undefined,\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RuiCalendarMenu.vue_vue_type_script_setup_true_lang.js","names":[],"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 { type FloatingOptions, Placement } from '@/composables/floating';\nimport { tv } from '@/utils/tv';\nimport RuiButton from '../buttons/button/RuiButton.vue';\n\ndefineOptions({\n name: 'RuiCalendarMenu',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<boolean>();\n\nconst { viewMonth, viewYear } = defineProps<{\n anchorEl: HTMLElement | undefined;\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst emit = defineEmits<{\n select: [MonthYearSelection];\n}>();\n\nconst MENU_OPTIONS: FloatingOptions = { placement: Placement.bottomStart };\n\n// Core reactive state - minimal\nconst viewMode = ref<'months' | 'years'>('months');\nconst startYear = ref<number>(viewYear - 6);\n\n// Pre-calculated constants\nconst months = getShortMonthNames();\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\nconst navButtonClass = 'p-1 rounded-full text-gray-500 hover:text-rui-primary hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-rui-primary';\n\nconst cellButton = tv({\n base: '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 variants: {\n selected: {\n true: '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',\n },\n inRange: {\n true: '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',\n false: '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',\n },\n selectedOutOfRange: {\n true: 'bg-gray-300 text-gray-500 dark:bg-gray-600 dark:text-gray-400',\n },\n },\n});\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(): void {\n const start = get(startYear);\n set(\n yearRange,\n Array.from({ length: 12 }, (_, i) => start + i),\n );\n}\n\nfunction calculateTitle(): void {\n if (get(viewMode) === 'months') {\n set(title, viewYear.toString());\n }\n else {\n const range = get(yearRange);\n set(title, `${range[0]} - ${range.at(-1)}`);\n }\n}\n\nfunction calculateNavigation(): void {\n const { maxDate, minDate } = calendarState;\n const mode = get(viewMode);\n\n if (mode === 'months') {\n const nextYear = viewYear + 1;\n const previousYear = 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(): void {\n const { minDate, maxDate } = calendarState;\n const currentYear = 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(): void {\n const { minDate, maxDate } = calendarState;\n const range = get(yearRange);\n const currentMonth = 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\nfunction toggleSelection(): void {\n set(viewMode, get(viewMode) === 'months' ? 'years' : 'months');\n}\n\nfunction selectMonth(month: number): void {\n if (!get(monthsInRange)[month])\n return;\n emit('select', { month, year: viewYear });\n set(modelValue, false);\n}\n\nfunction selectYear(year: number): void {\n const yearIndex = get(yearRange).indexOf(year);\n if (yearIndex === -1 || !get(yearsInRange)[yearIndex])\n return;\n\n emit('select', { month: viewMonth, year });\n set(viewMode, 'months');\n}\n\nfunction handleNext(): void {\n if (get(viewMode) === 'months') {\n const nextYear = viewYear + 1;\n // Emit directly - navigation is already constrained by canGoToNext\n emit('select', { month: viewMonth, year: nextYear });\n }\n else {\n const lastYearInRange = get(startYear) + 11;\n set(startYear, lastYearInRange + 1);\n }\n}\n\nfunction handlePrev(): void {\n if (get(viewMode) === 'months') {\n const previousYear = viewYear - 1;\n // Emit directly - navigation is already constrained by canGoToPrev\n emit('select', { month: viewMonth, year: previousYear });\n }\n else {\n const firstYearInRange = get(startYear);\n set(startYear, firstYearInRange - 12);\n }\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(\n () => viewYear,\n () => {\n calculateTitle();\n calculateNavigation();\n calculateMonthsInRange();\n calculateYearsInRange();\n },\n);\n\nwatch(\n () => viewMonth,\n () => {\n calculateYearsInRange();\n },\n);\n</script>\n\n<template>\n <RuiMenu\n v-model=\"modelValue\"\n :anchor-el=\"anchorEl\"\n :options=\"MENU_OPTIONS\"\n >\n <div class=\"w-64 shadow-lg overflow-hidden\">\n <div class=\"flex items-center justify-center p-1 font-medium text-gray-800 dark:text-gray-200 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 <RuiButton\n type=\"button\"\n :class=\"navButtonClass\"\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=\"navButtonClass\"\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=\"grid grid-cols-3 gap-1 p-2\"\n >\n <button\n v-for=\"(month, index) in months\"\n :key=\"month\"\n type=\"button\"\n :class=\"cellButton({\n selected: index === viewMonth && get(monthsInRange)[index],\n selectedOutOfRange: index === viewMonth && !get(monthsInRange)[index],\n inRange: index !== viewMonth ? get(monthsInRange)[index] : undefined,\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=\"grid grid-cols-3 gap-1 p-2\"\n >\n <button\n v-for=\"(year, index) in yearRange\"\n :key=\"year\"\n type=\"button\"\n :class=\"cellButton({\n selected: year === viewYear && get(yearsInRange)[index],\n selectedOutOfRange: year === viewYear && !get(yearsInRange)[index],\n inRange: year !== viewYear ? get(yearsInRange)[index] : undefined,\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"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","names":[],"sources":["../../../src/components/calendar/state.ts"],"sourcesContent":["import type { ComputedRef, InjectionKey, Ref } from 'vue';\n\nexport const CalendarStateSymbol: InjectionKey<RuiCalendarState> = Symbol.for('rui:calendar');\n\nexport interface RuiCalendarState {\n viewMonth: Ref<number>;\n viewYear: Ref<number>;\n selectedDate: Ref<Date | undefined>;\n maxDate: ComputedRef<Date | undefined>;\n minDate: ComputedRef<Date | undefined>;\n isDark: ComputedRef<boolean>;\n allowEmpty: boolean;\n}\n\nexport interface MonthYearSelection {\n month: number;\n year: number;\n}\n\nexport function getDaysOfWeek(locale: Intl.LocalesArgument = 'en-US', format: 'narrow' | 'short' = 'narrow'): string[] {\n const daysOfWeek: string[] = [];\n for (let i = 0; i < 7; i++) {\n const date = new Date(2021, 0, 3 + i); // Jan 3, 2021 was a Sunday\n const dayName = new Intl.DateTimeFormat(locale, { weekday: format }).format(date);\n daysOfWeek.push(format === 'narrow' ? dayName : dayName.charAt(0));\n }\n return daysOfWeek;\n}\n\nexport function getShortMonthNames(locale: Intl.LocalesArgument = 'en-US'): string[] {\n const monthNames: string[] = [];\n for (let month = 0; month < 12; month++) {\n const date = new Date(2021, month, 1);\n const monthName = new Intl.DateTimeFormat(locale, { month: 'short' }).format(date);\n monthNames.push(monthName);\n }\n return monthNames;\n}\n"],"mappings":";AAEA,IAAa,sBAAsD,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"state.js","names":[],"sources":["../../../src/components/calendar/state.ts"],"sourcesContent":["import type { ComputedRef, InjectionKey, Ref } from 'vue';\n\nexport const CalendarStateSymbol: InjectionKey<RuiCalendarState> = Symbol.for('rui:calendar');\n\nexport interface RuiCalendarState {\n viewMonth: Ref<number>;\n viewYear: Ref<number>;\n selectedDate: Ref<Date | undefined>;\n maxDate: ComputedRef<Date | undefined>;\n minDate: ComputedRef<Date | undefined>;\n isDark: ComputedRef<boolean>;\n allowEmpty: boolean;\n}\n\nexport interface MonthYearSelection {\n month: number;\n year: number;\n}\n\nexport function getDaysOfWeek(locale: Intl.LocalesArgument = 'en-US', format: 'narrow' | 'short' = 'narrow'): string[] {\n const daysOfWeek: string[] = [];\n for (let i = 0; i < 7; i++) {\n const date = new Date(2021, 0, 3 + i); // Jan 3, 2021 was a Sunday\n const dayName = new Intl.DateTimeFormat(locale, { weekday: format }).format(date);\n daysOfWeek.push(format === 'narrow' ? dayName : dayName.charAt(0));\n }\n return daysOfWeek;\n}\n\nexport function getShortMonthNames(locale: Intl.LocalesArgument = 'en-US'): string[] {\n const monthNames: string[] = [];\n for (let month = 0; month < 12; month++) {\n const date = new Date(2021, month, 1);\n const monthName = new Intl.DateTimeFormat(locale, { month: 'short' }).format(date);\n monthNames.push(monthName);\n }\n return monthNames;\n}\n"],"mappings":";AAEA,IAAa,sBAAsD,OAAO,IAAI,cAAc;AAiB5F,SAAgB,cAAc,SAA+B,SAAS,SAA6B,UAAoB;CACrH,MAAM,aAAuB,CAAC;CAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,OAAO,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC;EACpC,MAAM,UAAU,IAAI,KAAK,eAAe,QAAQ,EAAE,SAAS,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI;EAChF,WAAW,KAAK,WAAW,WAAW,UAAU,QAAQ,OAAO,CAAC,CAAC;CACnE;CACA,OAAO;AACT;AAEA,SAAgB,mBAAmB,SAA+B,SAAmB;CACnF,MAAM,aAAuB,CAAC;CAC9B,KAAK,IAAI,QAAQ,GAAG,QAAQ,IAAI,SAAS;EACvC,MAAM,OAAO,IAAI,KAAK,MAAM,OAAO,CAAC;EACpC,MAAM,YAAY,IAAI,KAAK,eAAe,QAAQ,EAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,IAAI;EACjF,WAAW,KAAK,SAAS;CAC3B;CACA,OAAO;AACT"}
|
|
@@ -2,7 +2,7 @@ import { cn, tv } from "../../utils/tv.js";
|
|
|
2
2
|
import RuiCardHeader_default from "./RuiCardHeader.js";
|
|
3
3
|
import { computed, createBlock, createCommentVNode, createElementBlock, createSlots, defineComponent, mergeProps, normalizeClass, openBlock, renderSlot, unref, useSlots, withCtx } from "vue";
|
|
4
4
|
//#region src/components/cards/RuiCard.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
-
var RuiCard_vue_vue_type_script_setup_true_lang_default =
|
|
5
|
+
var RuiCard_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
6
6
|
name: "RuiCard",
|
|
7
7
|
inheritAttrs: false,
|
|
8
8
|
__name: "RuiCard",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiCard.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../src/components/cards/RuiCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { VueClassValue } from '@/types/class-value';\nimport { computed } from 'vue';\nimport RuiCardHeader from '@/components/cards/RuiCardHeader.vue';\nimport { cn, tv } from '@/utils/tv';\n\nexport interface RuiCardClassNames {\n root?: VueClassValue;\n content?: VueClassValue;\n footer?: VueClassValue;\n image?: VueClassValue;\n}\n\nexport interface Props {\n dense?: boolean;\n divide?: boolean;\n elevation?: number;\n variant?: 'flat' | 'outlined';\n rounded?: 'sm' | 'md' | 'lg';\n noPadding?: boolean;\n classNames?: RuiCardClassNames;\n /** @deprecated Use `classNames.content` instead */\n contentClass?: string;\n}\n\ndefineOptions({\n name: 'RuiCard',\n inheritAttrs: false,\n});\n\nconst {\n divide = false,\n dense = false,\n elevation = 0,\n variant: cardVariant = 'outlined',\n rounded = 'md',\n noPadding = false,\n classNames,\n contentClass = '',\n} = defineProps<Props>();\n\nconst slots = defineSlots<{\n 'image'?: () => any;\n 'custom-header'?: () => any;\n 'prepend'?: () => any;\n 'header'?: () => any;\n 'subheader'?: () => any;\n 'default'?: () => any;\n 'footer'?: () => any;\n}>();\n\nconst card = tv({\n slots: {\n root: 'flex flex-col h-full w-full bg-white dark:bg-[#1E1E1E]',\n image: 'overflow-hidden',\n content: 'text-body-1 text-rui-light-text dark:text-rui-dark-text overflow-y-auto',\n footer: 'flex space-x-2 items-center justify-start mt-auto',\n },\n variants: {\n variant: {\n flat: { root: '' },\n outlined: { root: 'border border-black/[0.12] dark:border-white/[0.12]' },\n },\n rounded: {\n sm: { root: 'rounded-[.25rem]', image: 'rounded-t-[.25rem]' },\n md: { root: 'rounded-[.5rem]', image: 'rounded-t-[.5rem]' },\n lg: { root: 'rounded-[1rem]', image: 'rounded-t-[1rem]' },\n },\n divide: {\n true: { root: 'divide-y divide-black/[0.12] dark:divide-white/[0.12]' },\n },\n padding: {\n none: { content: 'p-0' },\n dense: { content: 'p-3' },\n normal: { content: 'p-4' },\n },\n dense: {\n true: { footer: 'py-1' },\n false: { footer: 'p-4 pt-2' },\n },\n },\n defaultVariants: { variant: 'outlined', rounded: 'md', padding: 'normal', dense: false },\n});\n\nconst hasHeadContent = computed<boolean>(() => !!slots.header || !!slots.subheader);\n\nconst contentPadding = computed<'none' | 'dense' | 'normal'>(() => {\n if (noPadding)\n return 'none';\n return dense ? 'dense' : 'normal';\n});\n\nconst ui = computed<ReturnType<typeof card>>(() => card({ variant: cardVariant, rounded, divide, dense, padding: contentPadding.value }));\n</script>\n\n<template>\n <div\n :class=\"ui.root({ class: [`shadow-${elevation}`, cn(classNames?.root ?? $attrs.class)] })\"\n v-bind=\"{ ...$attrs, class: undefined }\"\n >\n <div\n v-if=\"slots.image\"\n data-id=\"card-image\"\n :class=\"ui.image({ class: cn(classNames?.image) })\"\n >\n <slot name=\"image\" />\n </div>\n <slot name=\"custom-header\">\n <RuiCardHeader\n v-if=\"hasHeadContent\"\n :dense=\"dense\"\n >\n <template\n v-if=\"slots.prepend\"\n #prepend\n >\n <slot name=\"prepend\" />\n </template>\n <template\n v-if=\"slots.header\"\n #header\n >\n <slot name=\"header\" />\n </template>\n <template\n v-if=\"slots.subheader\"\n #subheader\n >\n <slot name=\"subheader\" />\n </template>\n </RuiCardHeader>\n </slot>\n <div\n v-if=\"slots.default\"\n data-id=\"card-content\"\n :class=\"ui.content({ class: cn(classNames?.content) ?? contentClass })\"\n >\n <slot />\n </div>\n <div\n v-if=\"slots.footer\"\n data-id=\"card-footer\"\n :class=\"ui.footer({ class: cn(classNames?.footer) })\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCA,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"RuiCard.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../src/components/cards/RuiCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { VueClassValue } from '@/types/class-value';\nimport { computed } from 'vue';\nimport RuiCardHeader from '@/components/cards/RuiCardHeader.vue';\nimport { cn, tv } from '@/utils/tv';\n\nexport interface RuiCardClassNames {\n root?: VueClassValue;\n content?: VueClassValue;\n footer?: VueClassValue;\n image?: VueClassValue;\n}\n\nexport interface Props {\n dense?: boolean;\n divide?: boolean;\n elevation?: number;\n variant?: 'flat' | 'outlined';\n rounded?: 'sm' | 'md' | 'lg';\n noPadding?: boolean;\n classNames?: RuiCardClassNames;\n /** @deprecated Use `classNames.content` instead */\n contentClass?: string;\n}\n\ndefineOptions({\n name: 'RuiCard',\n inheritAttrs: false,\n});\n\nconst {\n divide = false,\n dense = false,\n elevation = 0,\n variant: cardVariant = 'outlined',\n rounded = 'md',\n noPadding = false,\n classNames,\n contentClass = '',\n} = defineProps<Props>();\n\nconst slots = defineSlots<{\n 'image'?: () => any;\n 'custom-header'?: () => any;\n 'prepend'?: () => any;\n 'header'?: () => any;\n 'subheader'?: () => any;\n 'default'?: () => any;\n 'footer'?: () => any;\n}>();\n\nconst card = tv({\n slots: {\n root: 'flex flex-col h-full w-full bg-white dark:bg-[#1E1E1E]',\n image: 'overflow-hidden',\n content: 'text-body-1 text-rui-light-text dark:text-rui-dark-text overflow-y-auto',\n footer: 'flex space-x-2 items-center justify-start mt-auto',\n },\n variants: {\n variant: {\n flat: { root: '' },\n outlined: { root: 'border border-black/[0.12] dark:border-white/[0.12]' },\n },\n rounded: {\n sm: { root: 'rounded-[.25rem]', image: 'rounded-t-[.25rem]' },\n md: { root: 'rounded-[.5rem]', image: 'rounded-t-[.5rem]' },\n lg: { root: 'rounded-[1rem]', image: 'rounded-t-[1rem]' },\n },\n divide: {\n true: { root: 'divide-y divide-black/[0.12] dark:divide-white/[0.12]' },\n },\n padding: {\n none: { content: 'p-0' },\n dense: { content: 'p-3' },\n normal: { content: 'p-4' },\n },\n dense: {\n true: { footer: 'py-1' },\n false: { footer: 'p-4 pt-2' },\n },\n },\n defaultVariants: { variant: 'outlined', rounded: 'md', padding: 'normal', dense: false },\n});\n\nconst hasHeadContent = computed<boolean>(() => !!slots.header || !!slots.subheader);\n\nconst contentPadding = computed<'none' | 'dense' | 'normal'>(() => {\n if (noPadding)\n return 'none';\n return dense ? 'dense' : 'normal';\n});\n\nconst ui = computed<ReturnType<typeof card>>(() => card({ variant: cardVariant, rounded, divide, dense, padding: contentPadding.value }));\n</script>\n\n<template>\n <div\n :class=\"ui.root({ class: [`shadow-${elevation}`, cn(classNames?.root ?? $attrs.class)] })\"\n v-bind=\"{ ...$attrs, class: undefined }\"\n >\n <div\n v-if=\"slots.image\"\n data-id=\"card-image\"\n :class=\"ui.image({ class: cn(classNames?.image) })\"\n >\n <slot name=\"image\" />\n </div>\n <slot name=\"custom-header\">\n <RuiCardHeader\n v-if=\"hasHeadContent\"\n :dense=\"dense\"\n >\n <template\n v-if=\"slots.prepend\"\n #prepend\n >\n <slot name=\"prepend\" />\n </template>\n <template\n v-if=\"slots.header\"\n #header\n >\n <slot name=\"header\" />\n </template>\n <template\n v-if=\"slots.subheader\"\n #subheader\n >\n <slot name=\"subheader\" />\n </template>\n </RuiCardHeader>\n </slot>\n <div\n v-if=\"slots.default\"\n data-id=\"card-content\"\n :class=\"ui.content({ class: cn(classNames?.content) ?? contentClass })\"\n >\n <slot />\n </div>\n <div\n v-if=\"slots.footer\"\n data-id=\"card-footer\"\n :class=\"ui.footer({ class: cn(classNames?.footer) })\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCA,MAAM,QAAQ,SAAA;EAUd,MAAM,OAAO,GAAG;GACd,OAAO;IACL,MAAM;IACN,OAAO;IACP,SAAS;IACT,QAAQ;GACV;GACA,UAAU;IACR,SAAS;KACP,MAAM,EAAE,MAAM,GAAG;KACjB,UAAU,EAAE,MAAM,sDAAsD;IAC1E;IACA,SAAS;KACP,IAAI;MAAE,MAAM;MAAoB,OAAO;KAAqB;KAC5D,IAAI;MAAE,MAAM;MAAmB,OAAO;KAAoB;KAC1D,IAAI;MAAE,MAAM;MAAkB,OAAO;KAAmB;IAC1D;IACA,QAAQ,EACN,MAAM,EAAE,MAAM,wDAAwD,EACxE;IACA,SAAS;KACP,MAAM,EAAE,SAAS,MAAM;KACvB,OAAO,EAAE,SAAS,MAAM;KACxB,QAAQ,EAAE,SAAS,MAAM;IAC3B;IACA,OAAO;KACL,MAAM,EAAE,QAAQ,OAAO;KACvB,OAAO,EAAE,QAAQ,WAAW;IAC9B;GACF;GACA,iBAAiB;IAAE,SAAS;IAAY,SAAS;IAAM,SAAS;IAAU,OAAO;GAAM;EACzF,CAAC;EAED,MAAM,iBAAiB,eAAwB,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,MAAM,SAAS;EAElF,MAAM,iBAAiB,eAA4C;GACjE,IAAI,QAAA,WACF,OAAO;GACT,OAAO,QAAA,QAAQ,UAAU;EAC3B,CAAC;EAED,MAAM,KAAK,eAAwC,KAAK;GAAE,SAAS,QAAA;GAAa,SAAM,QAAA;GAAG,QAAK,QAAA;GAAG,OAAI,QAAA;GAAG,SAAS,eAAe;EAAM,CAAC,CAAC;;uBAItI,mBAkDM,OAlDN,WAkDM,EAjDH,OAAO,GAAA,MAAG,KAAI,EAAA,OAAA,CAAA,UAAqB,QAAA,aAAa,MAAA,EAAA,CAAE,CAAC,QAAA,YAAY,QAAQA,KAAAA,OAAO,KAAK,CAAA,EAAA,CAAA,EAAA,GAAA;OACvEA,KAAAA;IAAM,OAAS,KAAA;GAAS,CAAA,GAAA;IAG7B,MAAM,SAAA,UAAA,GADd,mBAMM,OAAA;;KAJJ,WAAQ;KACP,OAAK,eAAE,GAAA,MAAG,MAAK,EAAA,OAAU,MAAA,EAAA,CAAE,CAAC,QAAA,YAAY,KAAK,EAAA,CAAA,CAAA;QAE9C,WAAqB,KAAA,QAAA,OAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;IAEvB,WAwBO,KAAA,QAAA,iBAAA,CAAA,SAAA,CAtBG,eAAA,SAAA,UAAA,GADR,YAsBgB,uBAAA;;KApBb,OAAO,QAAA;;KAGA,MAAM,UAAA;YACX;wBAEsB,CAAvB,WAAuB,KAAA,QAAA,SAAA,CAAA,CAAA;;;KAGjB,MAAM,SAAA;YACX;wBAEqB,CAAtB,WAAsB,KAAA,QAAA,QAAA,CAAA,CAAA;;;KAGhB,MAAM,YAAA;YACX;wBAEwB,CAAzB,WAAyB,KAAA,QAAA,WAAA,CAAA,CAAA;;;;IAKvB,MAAM,WAAA,UAAA,GADd,mBAMM,OAAA;;KAJJ,WAAQ;KACP,OAAK,eAAE,GAAA,MAAG,QAAO,EAAA,OAAU,MAAA,EAAA,CAAE,CAAC,QAAA,YAAY,OAAO,KAAK,QAAA,aAAY,CAAA,CAAA;QAEnE,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA;IAGF,MAAM,UAAA,UAAA,GADd,mBAMM,OAAA;;KAJJ,WAAQ;KACP,OAAK,eAAE,GAAA,MAAG,OAAM,EAAA,OAAU,MAAA,EAAA,CAAE,CAAC,QAAA,YAAY,MAAM,EAAA,CAAA,CAAA;QAEhD,WAAsB,KAAA,QAAA,QAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA"}
|
|
@@ -7,7 +7,7 @@ var _hoisted_2 = {
|
|
|
7
7
|
"data-id": "subheader",
|
|
8
8
|
class: "text-rui-text-secondary dark:text-rui-dark-text-secondary text-body-2 mb-0"
|
|
9
9
|
};
|
|
10
|
-
var RuiCardHeader_vue_vue_type_script_setup_true_lang_default =
|
|
10
|
+
var RuiCardHeader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
11
11
|
name: "RuiCardHeader",
|
|
12
12
|
inheritAttrs: false,
|
|
13
13
|
__name: "RuiCardHeader",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiCardHeader.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../src/components/cards/RuiCardHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { tv } from '@/utils/tv';\n\nexport interface Props {\n dense?: boolean;\n}\n\ndefineOptions({\n name: 'RuiCardHeader',\n inheritAttrs: false,\n});\n\nconst { dense = false } = defineProps<Props>();\n\nconst slots = defineSlots<{\n prepend?: () => any;\n header?: () => any;\n subheader?: () => any;\n}>();\n\nconst cardHeader = tv({\n slots: {\n root: 'flex',\n prepend: 'rounded-full flex items-center justify-center text-white bg-rui-grey-400 dark:bg-rui-grey-700 dark:text-black/90 overflow-hidden',\n header: 'text-rui-text dark:text-rui-dark-text',\n },\n variants: {\n dense: {\n true: {\n root: 'p-3 space-x-2',\n prepend: 'text-base p-[0.08rem] w-9 h-9',\n },\n false: {\n root: 'p-4 space-x-4',\n prepend: 'text-[1.25rem] w-10 h-10',\n },\n },\n hasPrepend: {\n true: { header: 'text-body-1' },\n false: { header: 'text-h6' },\n },\n },\n defaultVariants: { dense: false, hasPrepend: false },\n});\n\nconst ui = computed<ReturnType<typeof cardHeader>>(() => cardHeader({ dense, hasPrepend: !!slots.prepend }));\n</script>\n\n<template>\n <div\n :class=\"ui.root()\"\n v-bind=\"$attrs\"\n >\n <div\n v-if=\"slots.prepend\"\n data-id=\"prepend\"\n :class=\"ui.prepend()\"\n >\n <slot name=\"prepend\" />\n </div>\n <div class=\"flex flex-col justify-center\">\n <h5\n v-if=\"slots.header\"\n data-id=\"header\"\n :class=\"ui.header()\"\n >\n <slot name=\"header\" />\n </h5>\n <p\n v-if=\"slots.subheader\"\n data-id=\"subheader\"\n class=\"text-rui-text-secondary dark:text-rui-dark-text-secondary text-body-2 mb-0\"\n >\n <slot name=\"subheader\" />\n </p>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAcA,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"RuiCardHeader.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../src/components/cards/RuiCardHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { tv } from '@/utils/tv';\n\nexport interface Props {\n dense?: boolean;\n}\n\ndefineOptions({\n name: 'RuiCardHeader',\n inheritAttrs: false,\n});\n\nconst { dense = false } = defineProps<Props>();\n\nconst slots = defineSlots<{\n prepend?: () => any;\n header?: () => any;\n subheader?: () => any;\n}>();\n\nconst cardHeader = tv({\n slots: {\n root: 'flex',\n prepend: 'rounded-full flex items-center justify-center text-white bg-rui-grey-400 dark:bg-rui-grey-700 dark:text-black/90 overflow-hidden',\n header: 'text-rui-text dark:text-rui-dark-text',\n },\n variants: {\n dense: {\n true: {\n root: 'p-3 space-x-2',\n prepend: 'text-base p-[0.08rem] w-9 h-9',\n },\n false: {\n root: 'p-4 space-x-4',\n prepend: 'text-[1.25rem] w-10 h-10',\n },\n },\n hasPrepend: {\n true: { header: 'text-body-1' },\n false: { header: 'text-h6' },\n },\n },\n defaultVariants: { dense: false, hasPrepend: false },\n});\n\nconst ui = computed<ReturnType<typeof cardHeader>>(() => cardHeader({ dense, hasPrepend: !!slots.prepend }));\n</script>\n\n<template>\n <div\n :class=\"ui.root()\"\n v-bind=\"$attrs\"\n >\n <div\n v-if=\"slots.prepend\"\n data-id=\"prepend\"\n :class=\"ui.prepend()\"\n >\n <slot name=\"prepend\" />\n </div>\n <div class=\"flex flex-col justify-center\">\n <h5\n v-if=\"slots.header\"\n data-id=\"header\"\n :class=\"ui.header()\"\n >\n <slot name=\"header\" />\n </h5>\n <p\n v-if=\"slots.subheader\"\n data-id=\"subheader\"\n class=\"text-rui-text-secondary dark:text-rui-dark-text-secondary text-body-2 mb-0\"\n >\n <slot name=\"subheader\" />\n </p>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAcA,MAAM,QAAQ,SAAA;EAMd,MAAM,aAAa,GAAG;GACpB,OAAO;IACL,MAAM;IACN,SAAS;IACT,QAAQ;GACV;GACA,UAAU;IACR,OAAO;KACL,MAAM;MACJ,MAAM;MACN,SAAS;KACX;KACA,OAAO;MACL,MAAM;MACN,SAAS;KACX;IACF;IACA,YAAY;KACV,MAAM,EAAE,QAAQ,cAAc;KAC9B,OAAO,EAAE,QAAQ,UAAU;IAC7B;GACF;GACA,iBAAiB;IAAE,OAAO;IAAO,YAAY;GAAM;EACrD,CAAC;EAED,MAAM,KAAK,eAA8C,WAAW;GAAE,OAAI,QAAA;GAAG,YAAY,CAAC,CAAC,MAAM;EAAQ,CAAC,CAAC;;uBAIzG,mBA2BM,OA3BN,WA2BM,EA1BH,OAAO,MAAA,EAAA,CAAE,CAAC,KAAI,EAAA,GACPA,KAAAA,MAAM,GAAA,CAGN,MAAM,WAAA,UAAA,GADd,mBAMM,OAAA;;IAJJ,WAAQ;IACP,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,QAAO,CAAA;OAElB,WAAuB,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,GAEzB,mBAeM,OAfN,YAeM,CAbI,MAAM,UAAA,UAAA,GADd,mBAMK,MAAA;;IAJH,WAAQ;IACP,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,OAAM,CAAA;OAEjB,WAAsB,KAAA,QAAA,QAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,GAGhB,MAAM,aAAA,UAAA,GADd,mBAMI,KANJ,YAMI,CADF,WAAyB,KAAA,QAAA,WAAA,CAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA,CAAA,GAAA,EAAA"}
|
|
@@ -10,7 +10,7 @@ var _hoisted_1 = [
|
|
|
10
10
|
"data-disabled"
|
|
11
11
|
];
|
|
12
12
|
var _hoisted_2 = ["disabled"];
|
|
13
|
-
var RuiChip_vue_vue_type_script_setup_true_lang_default =
|
|
13
|
+
var RuiChip_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
14
14
|
name: "RuiChip",
|
|
15
15
|
inheritAttrs: false,
|
|
16
16
|
__name: "RuiChip",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiChip.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../src/components/chips/RuiChip.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { StyleValue } from 'vue';\nimport type { ContextColorsType } from '@/consts/colors';\nimport type { RuiIcons } from '@/icons';\nimport type { VueClassValue } from '@/types/class-value';\nimport { objectOmit } from '@vueuse/shared';\nimport { CHIP_CLOSE_ICON_SIZES, ChipSize, ChipVariant } from '@/components/chips/chip-props';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { cn, tv } from '@/utils/tv';\n\nexport interface RuiChipClassNames {\n root?: VueClassValue;\n content?: VueClassValue;\n}\n\nexport interface Props {\n tile?: boolean;\n clickable?: boolean;\n closeable?: boolean;\n disabled?: boolean;\n size?: ChipSize;\n variant?: ChipVariant;\n color?: 'grey' | ContextColorsType;\n closeIcon?: RuiIcons;\n bgColor?: string;\n textColor?: string;\n classNames?: RuiChipClassNames;\n /** @deprecated Use `classNames.content` instead */\n contentClass?: string;\n}\n\ndefineOptions({\n name: 'RuiChip',\n inheritAttrs: false,\n});\n\nconst {\n tile = false,\n size = ChipSize.md,\n color = 'grey',\n clickable = false,\n closeable = false,\n disabled = false,\n variant = ChipVariant.filled,\n closeIcon = 'lu-circle-x',\n bgColor = undefined,\n textColor = undefined,\n classNames,\n contentClass = '',\n} = defineProps<Props>();\n\nconst emit = defineEmits<{\n 'click:close': [];\n 'click': [e: MouseEvent];\n}>();\n\ndefineSlots<{\n prepend?: () => any;\n default?: () => any;\n}>();\n\nconst chipStyles = tv({\n slots: {\n root: 'inline-flex items-center justify-between px-2 py-1 transition-all cursor-default outline-none max-w-full truncate',\n prepend: 'rounded-full flex items-center justify-center pr-0 w-6 h-6 text-[0.6rem] text-white bg-rui-grey-400 dark:bg-rui-grey-700 overflow-hidden',\n label: 'truncate px-2 text-[0.8125rem]',\n close: 'rounded-full flex items-center p-[0.13rem] pl-0 inset-y-0 focus:outline-none',\n closeIcon: 'opacity-50 hover:opacity-80 dark:hover:text-rui-grey-300 transition-opacity',\n },\n variants: {\n tile: {\n true: { root: 'rounded-lg' },\n false: { root: 'rounded-full' },\n },\n size: {\n md: { root: 'min-h-8' },\n sm: {\n root: 'py-[0.19rem]',\n prepend: 'text-[0.5rem] p-[0.08rem] w-4 h-4',\n label: 'px-1.5 text-[0.7rem]',\n close: 'p-[0.08rem]',\n },\n },\n disabled: {\n true: { root: 'opacity-40 cursor-default', close: 'cursor-default' },\n false: {},\n },\n clickable: {\n true: { root: 'cursor-pointer' },\n false: { root: 'cursor-default', close: 'cursor-default' },\n },\n variant: {\n filled: {},\n outlined: {},\n },\n color: {\n grey: { root: 'text-rui-text' },\n primary: {},\n secondary: {},\n error: {},\n warning: {},\n info: {},\n success: {},\n },\n },\n compoundVariants: [\n // Interactive states (clickable + not disabled)\n { clickable: true, disabled: false, class: { root: 'hover:brightness-90 focus:brightness-75 dark:hover:brightness-110' } },\n\n // Grey filled/outlined\n { color: 'grey', variant: 'filled', class: { root: 'bg-rui-grey-200 dark:bg-rui-grey-800' } },\n { color: 'grey', variant: 'outlined', class: { root: 'border border-black/[0.26] bg-transparent dark:border-white/[0.26]' } },\n { color: 'grey', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-black/[0.04] focus:bg-black/[0.12] dark:hover:bg-white/[0.04] dark:focus:bg-white/[0.12]' } },\n\n // Context colors — filled bg\n { color: 'primary', variant: 'filled', class: { root: 'bg-rui-primary' } },\n { color: 'secondary', variant: 'filled', class: { root: 'bg-rui-secondary' } },\n { color: 'error', variant: 'filled', class: { root: 'bg-rui-error' } },\n { color: 'warning', variant: 'filled', class: { root: 'bg-rui-warning' } },\n { color: 'info', variant: 'filled', class: { root: 'bg-rui-info' } },\n { color: 'success', variant: 'filled', class: { root: 'bg-rui-success' } },\n\n // Context colors — outlined base\n { color: 'primary', variant: 'outlined', class: { root: 'border text-rui-primary border-rui-primary/50 bg-transparent' } },\n { color: 'secondary', variant: 'outlined', class: { root: 'border text-rui-secondary border-rui-secondary/50 bg-transparent' } },\n { color: 'error', variant: 'outlined', class: { root: 'border text-rui-error border-rui-error/50 bg-transparent' } },\n { color: 'warning', variant: 'outlined', class: { root: 'border text-rui-warning border-rui-warning/50 bg-transparent' } },\n { color: 'info', variant: 'outlined', class: { root: 'border text-rui-info border-rui-info/50 bg-transparent' } },\n { color: 'success', variant: 'outlined', class: { root: 'border text-rui-success border-rui-success/50 bg-transparent' } },\n\n // Context colors — outlined interactive\n { color: 'primary', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-rui-primary/[0.04] focus:bg-rui-primary/[0.12]' } },\n { color: 'secondary', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-rui-secondary/[0.04] focus:bg-rui-secondary/[0.12]' } },\n { color: 'error', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-rui-error/[0.04] focus:bg-rui-error/[0.12]' } },\n { color: 'warning', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-rui-warning/[0.04] focus:bg-rui-warning/[0.12]' } },\n { color: 'info', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-rui-info/[0.04] focus:bg-rui-info/[0.12]' } },\n { color: 'success', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-rui-success/[0.04] focus:bg-rui-success/[0.12]' } },\n ],\n compoundSlots: [\n // All context colors filled share dark text\n { slots: ['root'], color: ['primary', 'secondary', 'error', 'warning', 'info', 'success'], variant: 'filled', class: 'text-rui-dark-text' },\n // Dark mode: warning/success/info filled use light text\n { slots: ['root'], color: ['warning', 'success', 'info'], variant: 'filled', class: 'dark:text-rui-light-text' },\n ],\n defaultVariants: {\n tile: false,\n size: 'md',\n disabled: false,\n clickable: false,\n variant: 'filled',\n color: 'grey',\n },\n});\n\nconst ui = computed<ReturnType<typeof chipStyles>>(() => chipStyles({\n tile,\n size,\n color,\n variant,\n disabled,\n clickable,\n}));\n\nconst style = computed<Partial<StyleValue>>(() => {\n const s: Partial<StyleValue> = {};\n if (bgColor)\n s.backgroundColor = bgColor;\n if (textColor)\n s.color = textColor;\n return s;\n});\n\nfunction click(e: MouseEvent): void {\n if (!clickable || disabled)\n return;\n\n emit('click', e);\n}\n</script>\n\n<template>\n <div\n :class=\"ui.root({ class: cn(classNames?.root) })\"\n :style=\"style\"\n :data-variant=\"variant\"\n :data-color=\"color\"\n :data-disabled=\"disabled || undefined\"\n role=\"button\"\n tabindex=\"0\"\n v-bind=\"objectOmit($attrs, ['onClick'])\"\n @click=\"click($event)\"\n >\n <div\n v-if=\"$slots.prepend\"\n :class=\"ui.prepend()\"\n >\n <slot name=\"prepend\" />\n </div>\n <span :class=\"ui.label({ class: cn(classNames?.content) ?? contentClass })\">\n <slot />\n </span>\n <button\n v-if=\"closeable\"\n :class=\"ui.close()\"\n :disabled=\"disabled\"\n type=\"button\"\n @click.stop=\"emit('click:close')\"\n >\n <RuiIcon\n :class=\"ui.closeIcon()\"\n :size=\"CHIP_CLOSE_ICON_SIZES[size]\"\n :name=\"closeIcon\"\n />\n </button>\n </div>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RuiChip.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../src/components/chips/RuiChip.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { StyleValue } from 'vue';\nimport type { ContextColorsType } from '@/consts/colors';\nimport type { RuiIcons } from '@/icons';\nimport type { VueClassValue } from '@/types/class-value';\nimport { objectOmit } from '@vueuse/shared';\nimport { CHIP_CLOSE_ICON_SIZES, ChipSize, ChipVariant } from '@/components/chips/chip-props';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport { cn, tv } from '@/utils/tv';\n\nexport interface RuiChipClassNames {\n root?: VueClassValue;\n content?: VueClassValue;\n}\n\nexport interface Props {\n tile?: boolean;\n clickable?: boolean;\n closeable?: boolean;\n disabled?: boolean;\n size?: ChipSize;\n variant?: ChipVariant;\n color?: 'grey' | ContextColorsType;\n closeIcon?: RuiIcons;\n bgColor?: string;\n textColor?: string;\n classNames?: RuiChipClassNames;\n /** @deprecated Use `classNames.content` instead */\n contentClass?: string;\n}\n\ndefineOptions({\n name: 'RuiChip',\n inheritAttrs: false,\n});\n\nconst {\n tile = false,\n size = ChipSize.md,\n color = 'grey',\n clickable = false,\n closeable = false,\n disabled = false,\n variant = ChipVariant.filled,\n closeIcon = 'lu-circle-x',\n bgColor = undefined,\n textColor = undefined,\n classNames,\n contentClass = '',\n} = defineProps<Props>();\n\nconst emit = defineEmits<{\n 'click:close': [];\n 'click': [e: MouseEvent];\n}>();\n\ndefineSlots<{\n prepend?: () => any;\n default?: () => any;\n}>();\n\nconst chipStyles = tv({\n slots: {\n root: 'inline-flex items-center justify-between px-2 py-1 transition-all cursor-default outline-none max-w-full truncate',\n prepend: 'rounded-full flex items-center justify-center pr-0 w-6 h-6 text-[0.6rem] text-white bg-rui-grey-400 dark:bg-rui-grey-700 overflow-hidden',\n label: 'truncate px-2 text-[0.8125rem]',\n close: 'rounded-full flex items-center p-[0.13rem] pl-0 inset-y-0 focus:outline-none',\n closeIcon: 'opacity-50 hover:opacity-80 dark:hover:text-rui-grey-300 transition-opacity',\n },\n variants: {\n tile: {\n true: { root: 'rounded-lg' },\n false: { root: 'rounded-full' },\n },\n size: {\n md: { root: 'min-h-8' },\n sm: {\n root: 'py-[0.19rem]',\n prepend: 'text-[0.5rem] p-[0.08rem] w-4 h-4',\n label: 'px-1.5 text-[0.7rem]',\n close: 'p-[0.08rem]',\n },\n },\n disabled: {\n true: { root: 'opacity-40 cursor-default', close: 'cursor-default' },\n false: {},\n },\n clickable: {\n true: { root: 'cursor-pointer' },\n false: { root: 'cursor-default', close: 'cursor-default' },\n },\n variant: {\n filled: {},\n outlined: {},\n },\n color: {\n grey: { root: 'text-rui-text' },\n primary: {},\n secondary: {},\n error: {},\n warning: {},\n info: {},\n success: {},\n },\n },\n compoundVariants: [\n // Interactive states (clickable + not disabled)\n { clickable: true, disabled: false, class: { root: 'hover:brightness-90 focus:brightness-75 dark:hover:brightness-110' } },\n\n // Grey filled/outlined\n { color: 'grey', variant: 'filled', class: { root: 'bg-rui-grey-200 dark:bg-rui-grey-800' } },\n { color: 'grey', variant: 'outlined', class: { root: 'border border-black/[0.26] bg-transparent dark:border-white/[0.26]' } },\n { color: 'grey', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-black/[0.04] focus:bg-black/[0.12] dark:hover:bg-white/[0.04] dark:focus:bg-white/[0.12]' } },\n\n // Context colors — filled bg\n { color: 'primary', variant: 'filled', class: { root: 'bg-rui-primary' } },\n { color: 'secondary', variant: 'filled', class: { root: 'bg-rui-secondary' } },\n { color: 'error', variant: 'filled', class: { root: 'bg-rui-error' } },\n { color: 'warning', variant: 'filled', class: { root: 'bg-rui-warning' } },\n { color: 'info', variant: 'filled', class: { root: 'bg-rui-info' } },\n { color: 'success', variant: 'filled', class: { root: 'bg-rui-success' } },\n\n // Context colors — outlined base\n { color: 'primary', variant: 'outlined', class: { root: 'border text-rui-primary border-rui-primary/50 bg-transparent' } },\n { color: 'secondary', variant: 'outlined', class: { root: 'border text-rui-secondary border-rui-secondary/50 bg-transparent' } },\n { color: 'error', variant: 'outlined', class: { root: 'border text-rui-error border-rui-error/50 bg-transparent' } },\n { color: 'warning', variant: 'outlined', class: { root: 'border text-rui-warning border-rui-warning/50 bg-transparent' } },\n { color: 'info', variant: 'outlined', class: { root: 'border text-rui-info border-rui-info/50 bg-transparent' } },\n { color: 'success', variant: 'outlined', class: { root: 'border text-rui-success border-rui-success/50 bg-transparent' } },\n\n // Context colors — outlined interactive\n { color: 'primary', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-rui-primary/[0.04] focus:bg-rui-primary/[0.12]' } },\n { color: 'secondary', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-rui-secondary/[0.04] focus:bg-rui-secondary/[0.12]' } },\n { color: 'error', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-rui-error/[0.04] focus:bg-rui-error/[0.12]' } },\n { color: 'warning', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-rui-warning/[0.04] focus:bg-rui-warning/[0.12]' } },\n { color: 'info', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-rui-info/[0.04] focus:bg-rui-info/[0.12]' } },\n { color: 'success', variant: 'outlined', clickable: true, disabled: false, class: { root: 'hover:bg-rui-success/[0.04] focus:bg-rui-success/[0.12]' } },\n ],\n compoundSlots: [\n // All context colors filled share dark text\n { slots: ['root'], color: ['primary', 'secondary', 'error', 'warning', 'info', 'success'], variant: 'filled', class: 'text-rui-dark-text' },\n // Dark mode: warning/success/info filled use light text\n { slots: ['root'], color: ['warning', 'success', 'info'], variant: 'filled', class: 'dark:text-rui-light-text' },\n ],\n defaultVariants: {\n tile: false,\n size: 'md',\n disabled: false,\n clickable: false,\n variant: 'filled',\n color: 'grey',\n },\n});\n\nconst ui = computed<ReturnType<typeof chipStyles>>(() => chipStyles({\n tile,\n size,\n color,\n variant,\n disabled,\n clickable,\n}));\n\nconst style = computed<Partial<StyleValue>>(() => {\n const s: Partial<StyleValue> = {};\n if (bgColor)\n s.backgroundColor = bgColor;\n if (textColor)\n s.color = textColor;\n return s;\n});\n\nfunction click(e: MouseEvent): void {\n if (!clickable || disabled)\n return;\n\n emit('click', e);\n}\n</script>\n\n<template>\n <div\n :class=\"ui.root({ class: cn(classNames?.root) })\"\n :style=\"style\"\n :data-variant=\"variant\"\n :data-color=\"color\"\n :data-disabled=\"disabled || undefined\"\n role=\"button\"\n tabindex=\"0\"\n v-bind=\"objectOmit($attrs, ['onClick'])\"\n @click=\"click($event)\"\n >\n <div\n v-if=\"$slots.prepend\"\n :class=\"ui.prepend()\"\n >\n <slot name=\"prepend\" />\n </div>\n <span :class=\"ui.label({ class: cn(classNames?.content) ?? contentClass })\">\n <slot />\n </span>\n <button\n v-if=\"closeable\"\n :class=\"ui.close()\"\n :disabled=\"disabled\"\n type=\"button\"\n @click.stop=\"emit('click:close')\"\n >\n <RuiIcon\n :class=\"ui.closeIcon()\"\n :size=\"CHIP_CLOSE_ICON_SIZES[size]\"\n :name=\"closeIcon\"\n />\n </button>\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chip-props.js","names":[],"sources":["../../../src/components/chips/chip-props.ts"],"sourcesContent":["export const ChipSize = {\n sm: 'sm',\n md: 'md',\n} as const;\n\nexport type ChipSize = (typeof ChipSize)[keyof typeof ChipSize];\n\nexport const ChipVariant = {\n filled: 'filled',\n outlined: 'outlined',\n} as const;\n\nexport type ChipVariant = (typeof ChipVariant)[keyof typeof ChipVariant];\n\nexport const CHIP_CLOSE_ICON_SIZES: Record<ChipSize, number> = {\n sm: 16,\n md: 24,\n};\n"],"mappings":";AAAA,IAAa,WAAW;CACtB,IAAI;CACJ,IAAI;
|
|
1
|
+
{"version":3,"file":"chip-props.js","names":[],"sources":["../../../src/components/chips/chip-props.ts"],"sourcesContent":["export const ChipSize = {\n sm: 'sm',\n md: 'md',\n} as const;\n\nexport type ChipSize = (typeof ChipSize)[keyof typeof ChipSize];\n\nexport const ChipVariant = {\n filled: 'filled',\n outlined: 'outlined',\n} as const;\n\nexport type ChipVariant = (typeof ChipVariant)[keyof typeof ChipVariant];\n\nexport const CHIP_CLOSE_ICON_SIZES: Record<ChipSize, number> = {\n sm: 16,\n md: 24,\n};\n"],"mappings":";AAAA,IAAa,WAAW;CACtB,IAAI;CACJ,IAAI;AACN;AAIA,IAAa,cAAc;CACzB,QAAQ;CACR,UAAU;AACZ;AAIA,IAAa,wBAAkD;CAC7D,IAAI;CACJ,IAAI;AACN"}
|
|
@@ -5,7 +5,7 @@ import { clamp, get, set } from "@vueuse/shared";
|
|
|
5
5
|
import tinycolor from "tinycolor2";
|
|
6
6
|
//#region src/components/color-picker/RuiColorBoard.vue?vue&type=script&setup=true&lang.ts
|
|
7
7
|
var _hoisted_1 = ["aria-valuetext"];
|
|
8
|
-
var RuiColorBoard_vue_vue_type_script_setup_true_lang_default =
|
|
8
|
+
var RuiColorBoard_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
9
9
|
name: "RuiColorBoard",
|
|
10
10
|
inheritAttrs: false,
|
|
11
11
|
__name: "RuiColorBoard",
|
package/dist/components/color-picker/RuiColorBoard.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiColorBoard.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../src/components/color-picker/RuiColorBoard.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { clamp } from '@vueuse/shared';\nimport tinycolor from 'tinycolor2';\nimport { cn, tv } from '@/utils/tv';\nimport { type Color, useElementDrag } from './utils';\n\ndefineOptions({\n name: 'RuiColorBoard',\n inheritAttrs: false,\n});\n\nconst { color } = defineProps<{\n color: Color;\n}>();\n\nconst emit = defineEmits<{\n 'update:board': [event: { saturation: number; brightness: number }];\n}>();\n\nconst wrapper = useTemplateRef<HTMLElement>('wrapper');\n\nconst state = reactive({\n hexString: hueToHex(color.hue),\n saturation: color.saturation,\n brightness: color.brightness,\n});\n\nconst cursorTop = ref<number>(0);\nconst cursorLeft = ref<number>(0);\n\nconst { handleClick, onMouseDown, onTouchStart } = useElementDrag(emitColor);\n\nconst cursorStyle = computed<{ top: string; left: string }>(() => ({\n top: `${get(cursorTop) * 100}%`,\n left: `${get(cursorLeft) * 100}%`,\n}));\n\nfunction hueToHex(hue: number): string {\n return tinycolor({ h: hue, s: 1, v: 1 }).toHexString();\n}\n\nfunction updatePosition(): void {\n set(cursorLeft, state.saturation);\n set(cursorTop, 1 - state.brightness);\n}\n\nfunction emitColor(x: number, y: number): void {\n const el = get(wrapper);\n if (!el)\n return;\n\n const rect = el.getBoundingClientRect();\n const { width, height, left, top } = rect;\n let calculatedX = x - left;\n let calculatedY = y - top;\n\n calculatedX = clamp(calculatedX, 0, width);\n calculatedY = clamp(calculatedY, 0, height);\n\n const saturation = calculatedX / width;\n const brightness = clamp(-(calculatedY / height) + 1, 0, 1);\n\n set(cursorLeft, calculatedX / width);\n set(cursorTop, calculatedY / height);\n\n state.saturation = saturation;\n state.brightness = brightness;\n\n emit('update:board', { saturation, brightness });\n}\n\nwatch(\n () => [color.hue, color.saturation, color.brightness] as const,\n ([hue, saturation, brightness]) => {\n state.hexString = hueToHex(hue);\n state.saturation = saturation;\n state.brightness = brightness;\n updatePosition();\n },\n);\n\nonMounted(() => {\n updatePosition();\n});\n\nconst rootStyle = tv({ base: 'relative w-full h-40 overflow-hidden cursor-pointer' });\n</script>\n\n<template>\n <div\n ref=\"wrapper\"\n role=\"slider\"\n aria-label=\"Color saturation and brightness\"\n :aria-valuetext=\"`Saturation ${Math.round(state.saturation * 100)}%, Brightness ${Math.round(state.brightness * 100)}%`\"\n data-id=\"color-board\"\n :class=\"rootStyle({ class: cn($attrs.class) })\"\n v-bind=\"{ ...$attrs, class: undefined }\"\n :style=\"{ backgroundColor: state.hexString }\"\n @click=\"handleClick($event)\"\n @mousedown=\"onMouseDown($event)\"\n @touchstart=\"onTouchStart($event)\"\n >\n <div class=\"absolute inset-0 to-transparent bg-gradient-to-r from-white\" />\n <div class=\"absolute inset-0 to-transparent bg-gradient-to-t from-black\" />\n <div\n data-id=\"cursor\"\n class=\"absolute w-5 h-5 -translate-x-1/2 -translate-y-1/2 border-2 border-white shadow rounded-full after:content-[''] after:absolute after:inset-0 after:rounded-full after:border-2 after:border-black/15\"\n :style=\"cursorStyle\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAeA,MAAM,OAAO;EAIb,MAAM,UAAU,eAA4B,
|
|
1
|
+
{"version":3,"file":"RuiColorBoard.vue_vue_type_script_setup_true_lang.js","names":["$attrs"],"sources":["../../../src/components/color-picker/RuiColorBoard.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { clamp } from '@vueuse/shared';\nimport tinycolor from 'tinycolor2';\nimport { cn, tv } from '@/utils/tv';\nimport { type Color, useElementDrag } from './utils';\n\ndefineOptions({\n name: 'RuiColorBoard',\n inheritAttrs: false,\n});\n\nconst { color } = defineProps<{\n color: Color;\n}>();\n\nconst emit = defineEmits<{\n 'update:board': [event: { saturation: number; brightness: number }];\n}>();\n\nconst wrapper = useTemplateRef<HTMLElement>('wrapper');\n\nconst state = reactive({\n hexString: hueToHex(color.hue),\n saturation: color.saturation,\n brightness: color.brightness,\n});\n\nconst cursorTop = ref<number>(0);\nconst cursorLeft = ref<number>(0);\n\nconst { handleClick, onMouseDown, onTouchStart } = useElementDrag(emitColor);\n\nconst cursorStyle = computed<{ top: string; left: string }>(() => ({\n top: `${get(cursorTop) * 100}%`,\n left: `${get(cursorLeft) * 100}%`,\n}));\n\nfunction hueToHex(hue: number): string {\n return tinycolor({ h: hue, s: 1, v: 1 }).toHexString();\n}\n\nfunction updatePosition(): void {\n set(cursorLeft, state.saturation);\n set(cursorTop, 1 - state.brightness);\n}\n\nfunction emitColor(x: number, y: number): void {\n const el = get(wrapper);\n if (!el)\n return;\n\n const rect = el.getBoundingClientRect();\n const { width, height, left, top } = rect;\n let calculatedX = x - left;\n let calculatedY = y - top;\n\n calculatedX = clamp(calculatedX, 0, width);\n calculatedY = clamp(calculatedY, 0, height);\n\n const saturation = calculatedX / width;\n const brightness = clamp(-(calculatedY / height) + 1, 0, 1);\n\n set(cursorLeft, calculatedX / width);\n set(cursorTop, calculatedY / height);\n\n state.saturation = saturation;\n state.brightness = brightness;\n\n emit('update:board', { saturation, brightness });\n}\n\nwatch(\n () => [color.hue, color.saturation, color.brightness] as const,\n ([hue, saturation, brightness]) => {\n state.hexString = hueToHex(hue);\n state.saturation = saturation;\n state.brightness = brightness;\n updatePosition();\n },\n);\n\nonMounted(() => {\n updatePosition();\n});\n\nconst rootStyle = tv({ base: 'relative w-full h-40 overflow-hidden cursor-pointer' });\n</script>\n\n<template>\n <div\n ref=\"wrapper\"\n role=\"slider\"\n aria-label=\"Color saturation and brightness\"\n :aria-valuetext=\"`Saturation ${Math.round(state.saturation * 100)}%, Brightness ${Math.round(state.brightness * 100)}%`\"\n data-id=\"color-board\"\n :class=\"rootStyle({ class: cn($attrs.class) })\"\n v-bind=\"{ ...$attrs, class: undefined }\"\n :style=\"{ backgroundColor: state.hexString }\"\n @click=\"handleClick($event)\"\n @mousedown=\"onMouseDown($event)\"\n @touchstart=\"onTouchStart($event)\"\n >\n <div class=\"absolute inset-0 to-transparent bg-gradient-to-r from-white\" />\n <div class=\"absolute inset-0 to-transparent bg-gradient-to-t from-black\" />\n <div\n data-id=\"cursor\"\n class=\"absolute w-5 h-5 -translate-x-1/2 -translate-y-1/2 border-2 border-white shadow rounded-full after:content-[''] after:absolute after:inset-0 after:rounded-full after:border-2 after:border-black/15\"\n :style=\"cursorStyle\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAeA,MAAM,OAAO;EAIb,MAAM,UAAU,eAA4B,SAAS;EAErD,MAAM,QAAQ,SAAS;GACrB,WAAW,SAAS,QAAA,MAAM,GAAG;GAC7B,YAAY,QAAA,MAAM;GAClB,YAAY,QAAA,MAAM;EACpB,CAAC;EAED,MAAM,YAAY,IAAY,CAAC;EAC/B,MAAM,aAAa,IAAY,CAAC;EAEhC,MAAM,EAAE,aAAa,aAAa,iBAAiB,eAAe,SAAS;EAE3E,MAAM,cAAc,gBAA+C;GACjE,KAAK,GAAG,IAAI,SAAS,IAAI,IAAI;GAC7B,MAAM,GAAG,IAAI,UAAU,IAAI,IAAI;EACjC,EAAE;EAEF,SAAS,SAAS,KAAqB;GACrC,OAAO,UAAU;IAAE,GAAG;IAAK,GAAG;IAAG,GAAG;GAAE,CAAC,CAAC,CAAC,YAAY;EACvD;EAEA,SAAS,iBAAuB;GAC9B,IAAI,YAAY,MAAM,UAAU;GAChC,IAAI,WAAW,IAAI,MAAM,UAAU;EACrC;EAEA,SAAS,UAAU,GAAW,GAAiB;GAC7C,MAAM,KAAK,IAAI,OAAO;GACtB,IAAI,CAAC,IACH;GAGF,MAAM,EAAE,OAAO,QAAQ,MAAM,QADhB,GAAG,sBACqB;GACrC,IAAI,cAAc,IAAI;GACtB,IAAI,cAAc,IAAI;GAEtB,cAAc,MAAM,aAAa,GAAG,KAAK;GACzC,cAAc,MAAM,aAAa,GAAG,MAAM;GAE1C,MAAM,aAAa,cAAc;GACjC,MAAM,aAAa,MAAM,EAAE,cAAc,UAAU,GAAG,GAAG,CAAC;GAE1D,IAAI,YAAY,cAAc,KAAK;GACnC,IAAI,WAAW,cAAc,MAAM;GAEnC,MAAM,aAAa;GACnB,MAAM,aAAa;GAEnB,KAAK,gBAAgB;IAAE;IAAY;GAAW,CAAC;EACjD;EAEA,YACQ;GAAC,QAAA,MAAM;GAAK,QAAA,MAAM;GAAY,QAAA,MAAM;EAAU,IACnD,CAAC,KAAK,YAAY,gBAAgB;GACjC,MAAM,YAAY,SAAS,GAAG;GAC9B,MAAM,aAAa;GACnB,MAAM,aAAa;GACnB,eAAe;EACjB,CACF;EAEA,gBAAgB;GACd,eAAe;EACjB,CAAC;EAED,MAAM,YAAY,GAAG,EAAE,MAAM,sDAAsD,CAAC;;uBAIlF,mBAoBM,OApBN,WAoBM;aAnBA;IAAJ,KAAI;IACJ,MAAK;IACL,cAAW;IACV,kBAAc,cAAgB,KAAK,MAAM,MAAA,KAAA,CAAK,CAAC,aAAU,GAAA,EAAA,gBAAwB,KAAK,MAAM,MAAA,KAAA,CAAK,CAAC,aAAU,GAAA,EAAA;IAC7G,WAAQ;IACP,OAAO,MAAA,SAAA,CAAS,CAAA,EAAA,OAAU,MAAA,EAAA,CAAE,CAACA,KAAAA,OAAO,KAAK,EAAA,CAAA;;OAC7BA,KAAAA;IAAM,OAAS,KAAA;GAAS,GAAA;IACpC,OAAK,EAAA,iBAAqB,MAAA,KAAA,CAAK,CAAC,UAAS;IACzC,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,WAAA,CAAW,CAAC,MAAM;IACzB,aAAS,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,WAAA,CAAW,CAAC,MAAM;IAC7B,cAAU,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,YAAA,CAAY,CAAC,MAAM;;8BAEhC,mBAA2E,OAAA,EAAtE,OAAM,8DAA6D,GAAA,MAAA,EAAA;8BACxE,mBAA2E,OAAA,EAAtE,OAAM,8DAA6D,GAAA,MAAA,EAAA;IACxE,mBAIE,OAAA;KAHA,WAAQ;KACR,OAAM;KACL,OAAK,eAAE,MAAA,WAAA,CAAW"}
|