@rotki/ui-library 2.12.2 → 2.13.1
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.d.ts +6 -14
- package/dist/components/accordions/accordion/RuiAccordion.vue.js +3 -4
- package/dist/components/accordions/accordion/RuiAccordion.vue.js.map +1 -1
- package/dist/components/accordions/accordions/RuiAccordions.vue.d.ts +10 -9
- package/dist/components/accordions/accordions/RuiAccordions.vue.js +27 -26
- package/dist/components/accordions/accordions/RuiAccordions.vue.js.map +1 -1
- package/dist/components/alerts/RuiAlert.vue.d.ts +5 -15
- package/dist/components/alerts/RuiAlert.vue2.js +8 -16
- package/dist/components/alerts/RuiAlert.vue2.js.map +1 -1
- package/dist/components/buttons/button/RuiButton.vue.d.ts +5 -7
- package/dist/components/buttons/button/RuiButton.vue2.js +19 -20
- package/dist/components/buttons/button/RuiButton.vue2.js.map +1 -1
- package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +6 -5
- package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js +42 -41
- package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js.map +1 -1
- package/dist/components/calendar/RuiCalendar.vue.d.ts +1 -6
- package/dist/components/calendar/RuiCalendar.vue.js +6 -7
- package/dist/components/calendar/RuiCalendar.vue.js.map +1 -1
- package/dist/components/calendar/RuiCalendarGrid.vue.js +1 -1
- package/dist/components/calendar/RuiCalendarGrid.vue2.js +19 -17
- package/dist/components/calendar/RuiCalendarGrid.vue2.js.map +1 -1
- package/dist/components/calendar/RuiCalendarHeader.vue.js +1 -1
- package/dist/components/calendar/RuiCalendarHeader.vue2.js +2 -3
- package/dist/components/calendar/RuiCalendarHeader.vue2.js.map +1 -1
- package/dist/components/calendar/RuiCalendarMenu.vue.js +1 -1
- package/dist/components/calendar/RuiCalendarMenu.vue2.js +47 -39
- package/dist/components/calendar/RuiCalendarMenu.vue2.js.map +1 -1
- package/dist/components/cards/RuiCard.vue.d.ts +9 -24
- package/dist/components/cards/RuiCard.vue2.js +7 -7
- package/dist/components/cards/RuiCard.vue2.js.map +1 -1
- package/dist/components/cards/RuiCardHeader.vue.d.ts +5 -10
- package/dist/components/cards/RuiCardHeader.vue2.js.map +1 -1
- package/dist/components/chips/RuiChip.vue.d.ts +7 -21
- package/dist/components/chips/RuiChip.vue2.js +16 -21
- package/dist/components/chips/RuiChip.vue2.js.map +1 -1
- package/dist/components/color-picker/RuiColorBoard.vue.d.ts +1 -1
- package/dist/components/color-picker/RuiColorBoard.vue2.js +14 -18
- package/dist/components/color-picker/RuiColorBoard.vue2.js.map +1 -1
- package/dist/components/color-picker/RuiColorDisplay.vue.js +3 -5
- package/dist/components/color-picker/RuiColorDisplay.vue.js.map +1 -1
- package/dist/components/color-picker/RuiColorHue.vue2.js +10 -13
- package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -1
- package/dist/components/color-picker/RuiColorInput.vue.js +8 -6
- package/dist/components/color-picker/RuiColorInput.vue.js.map +1 -1
- package/dist/components/color-picker/RuiColorPicker.vue.d.ts +7 -9
- package/dist/components/color-picker/RuiColorPicker.vue.js +18 -13
- package/dist/components/color-picker/RuiColorPicker.vue.js.map +1 -1
- package/dist/components/color-picker/utils.js +22 -5
- package/dist/components/color-picker/utils.js.map +1 -1
- package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +2 -44
- package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +73 -77
- package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -1
- package/dist/components/date-time-picker/dayjs-setup.d.ts +1 -0
- package/dist/components/date-time-picker/dayjs-setup.js +8 -0
- package/dist/components/date-time-picker/dayjs-setup.js.map +1 -0
- package/dist/components/date-time-picker/segment-config.d.ts +14 -0
- package/dist/components/date-time-picker/segment-config.js +23 -0
- package/dist/components/date-time-picker/segment-config.js.map +1 -0
- package/dist/components/date-time-picker/segment-utils.d.ts +5 -0
- package/dist/components/date-time-picker/segment-utils.js +36 -0
- package/dist/components/date-time-picker/segment-utils.js.map +1 -0
- package/dist/components/date-time-picker/use-date-time-selection.d.ts +1 -0
- package/dist/components/date-time-picker/use-date-time-selection.js +1 -0
- package/dist/components/date-time-picker/use-date-time-selection.js.map +1 -1
- package/dist/components/date-time-picker/use-keyboard-handler.d.ts +4 -8
- package/dist/components/date-time-picker/use-keyboard-handler.js +9 -54
- package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -1
- package/dist/components/date-time-picker/utils.d.ts +1 -0
- package/dist/components/date-time-picker/utils.js +1 -0
- package/dist/components/date-time-picker/utils.js.map +1 -1
- package/dist/components/divider/RuiDivider.vue.d.ts +1 -3
- package/dist/components/divider/RuiDivider.vue.js.map +1 -1
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +9 -1120
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +144 -160
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -1
- package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +15 -24
- package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +31 -31
- package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -1
- package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +1 -1
- package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +18 -21
- package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -1
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +3 -1
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +12 -15
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +1 -1
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +5 -11
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +6 -7
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -1
- package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +9 -784
- package/dist/components/forms/select/RuiMenuSelect.vue2.js +48 -51
- package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -1
- package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +10 -11
- package/dist/components/forms/select/RuiSimpleSelect.vue2.js +15 -24
- package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +1 -1
- package/dist/components/forms/slider/RuiSlider.vue.d.ts +10 -26
- package/dist/components/forms/slider/RuiSlider.vue2.js +41 -46
- package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -1
- package/dist/components/forms/switch/RuiSwitch.vue.d.ts +12 -20
- package/dist/components/forms/switch/RuiSwitch.vue2.js +21 -20
- package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -1
- package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +5 -30
- package/dist/components/forms/text-area/RuiTextArea.vue2.js +43 -79
- package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -1
- package/dist/components/forms/text-field/RuiTextField.vue.d.ts +7 -27
- package/dist/components/forms/text-field/RuiTextField.vue2.js +35 -66
- package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -1
- package/dist/components/helpers/RuiFormTextDetail.vue.d.ts +1 -5
- package/dist/components/helpers/RuiFormTextDetail.vue.js +5 -9
- package/dist/components/helpers/RuiFormTextDetail.vue.js.map +1 -1
- package/dist/components/icons/LazyIcon.vue.d.ts +1 -3
- package/dist/components/icons/RuiIcon.vue.d.ts +1 -4
- package/dist/components/icons/RuiIcon.vue2.js +8 -8
- package/dist/components/icons/RuiIcon.vue2.js.map +1 -1
- package/dist/components/index.d.ts +3 -3
- package/dist/components/loaders/RuiSkeletonBase.vue.d.ts +1 -3
- package/dist/components/loaders/RuiSkeletonBase.vue2.js +1 -1
- package/dist/components/loaders/RuiSkeletonBase.vue2.js.map +1 -1
- package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +1 -4
- package/dist/components/loaders/RuiSkeletonLoader.vue2.js +1 -1
- package/dist/components/loaders/RuiSkeletonLoader.vue2.js.map +1 -1
- package/dist/components/logos/RuiLogo.vue.d.ts +1 -7
- package/dist/components/logos/RuiLogo.vue.js +11 -13
- package/dist/components/logos/RuiLogo.vue.js.map +1 -1
- package/dist/components/overlays/badge/RuiBadge.vue.d.ts +5 -20
- package/dist/components/overlays/badge/RuiBadge.vue2.js +11 -13
- package/dist/components/overlays/badge/RuiBadge.vue2.js.map +1 -1
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +10 -5
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +18 -7
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js.map +1 -1
- package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +21 -27
- package/dist/components/overlays/dialog/RuiDialog.vue2.js +80 -63
- package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +1 -1
- package/dist/components/overlays/menu/RuiMenu.vue.d.ts +24 -35
- package/dist/components/overlays/menu/RuiMenu.vue2.js +67 -76
- package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -1
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +22 -30
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +71 -47
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +1 -1
- package/dist/components/overlays/notification/RuiNotification.vue.d.ts +12 -12
- package/dist/components/overlays/notification/RuiNotification.vue.js +25 -22
- package/dist/components/overlays/notification/RuiNotification.vue.js.map +1 -1
- package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +7 -18
- package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +11 -8
- package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +1 -1
- package/dist/components/progress/RuiProgress.vue.d.ts +8 -10
- package/dist/components/progress/RuiProgress.vue2.js +18 -24
- package/dist/components/progress/RuiProgress.vue2.js.map +1 -1
- package/dist/components/steppers/RuiFooterStepper.vue.d.ts +10 -11
- package/dist/components/steppers/RuiFooterStepper.vue2.js +21 -21
- package/dist/components/steppers/RuiFooterStepper.vue2.js.map +1 -1
- package/dist/components/steppers/RuiStepper.vue.d.ts +6 -15
- package/dist/components/steppers/RuiStepper.vue2.js +31 -33
- package/dist/components/steppers/RuiStepper.vue2.js.map +1 -1
- package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +1 -3
- package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +1 -1
- package/dist/components/steppers/RuiStepperCustomIcon.vue2.js.map +1 -1
- package/dist/components/steppers/RuiStepperIcon.vue.d.ts +1 -3
- package/dist/components/steppers/RuiStepperIcon.vue2.js +1 -1
- package/dist/components/steppers/RuiStepperIcon.vue2.js.map +1 -1
- package/dist/components/tables/RuiDataTable.vue.d.ts +29 -81
- package/dist/components/tables/RuiDataTable.vue2.js +173 -582
- package/dist/components/tables/RuiDataTable.vue2.js.map +1 -1
- package/dist/components/tables/RuiDataTable.vue3.js +24 -27
- package/dist/components/tables/RuiDataTable.vue3.js.map +1 -1
- package/dist/components/tables/RuiExpandButton.vue.d.ts +3 -6
- package/dist/components/tables/RuiExpandButton.vue2.js +1 -0
- package/dist/components/tables/RuiExpandButton.vue2.js.map +1 -1
- package/dist/components/tables/RuiTableHead.vue.d.ts +4 -7
- package/dist/components/tables/RuiTableHead.vue2.js +19 -19
- package/dist/components/tables/RuiTableHead.vue2.js.map +1 -1
- package/dist/components/tables/RuiTablePagination.vue.d.ts +10 -10
- package/dist/components/tables/RuiTablePagination.vue2.js +17 -16
- package/dist/components/tables/RuiTablePagination.vue2.js.map +1 -1
- package/dist/components/tabs/tab/RuiTab.vue.d.ts +3 -18
- package/dist/components/tabs/tab/RuiTab.vue2.js +80 -51
- package/dist/components/tabs/tab/RuiTab.vue2.js.map +1 -1
- package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +3 -11
- package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +1 -1
- package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -1
- package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +1 -4
- package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +18 -18
- package/dist/components/tabs/tab-items/RuiTabItems.vue2.js.map +1 -1
- package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +10 -14
- package/dist/components/tabs/tabs/RuiTabs.vue2.js +101 -94
- package/dist/components/tabs/tabs/RuiTabs.vue2.js.map +1 -1
- package/dist/components/time-picker/RuiTimePicker.vue.d.ts +1 -4
- package/dist/components/time-picker/RuiTimePicker.vue2.js +68 -35
- package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -1
- package/dist/composables/breakpoint.js +8 -13
- package/dist/composables/breakpoint.js.map +1 -1
- package/dist/composables/dropdown-menu.d.ts +7 -4
- package/dist/composables/dropdown-menu.js +73 -50
- package/dist/composables/dropdown-menu.js.map +1 -1
- package/dist/composables/forms/auto-complete/focus.d.ts +7 -5
- package/dist/composables/forms/auto-complete/focus.js +28 -17
- package/dist/composables/forms/auto-complete/focus.js.map +1 -1
- package/dist/composables/forms/auto-complete/index.d.ts +0 -9
- package/dist/composables/forms/auto-complete/keyboard-navigation.d.ts +8 -3
- package/dist/composables/forms/auto-complete/keyboard-navigation.js +11 -5
- package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -1
- package/dist/composables/forms/auto-complete/search.d.ts +7 -0
- package/dist/composables/forms/auto-complete/search.js +10 -8
- package/dist/composables/forms/auto-complete/search.js.map +1 -1
- package/dist/composables/forms/auto-complete/value.d.ts +4 -0
- package/dist/composables/forms/auto-complete/value.js +24 -42
- package/dist/composables/forms/auto-complete/value.js.map +1 -1
- package/dist/composables/forms/use-label-with-quote.d.ts +2 -0
- package/dist/composables/forms/use-label-with-quote.js +14 -0
- package/dist/composables/forms/use-label-with-quote.js.map +1 -0
- package/dist/composables/forms/use-prepend-append-width.d.ts +6 -0
- package/dist/composables/forms/use-prepend-append-width.js +25 -0
- package/dist/composables/forms/use-prepend-append-width.js.map +1 -0
- package/dist/composables/popper.js +60 -46
- package/dist/composables/popper.js.map +1 -1
- package/dist/composables/sticky-header.d.ts +7 -5
- package/dist/composables/sticky-header.js +51 -41
- package/dist/composables/sticky-header.js.map +1 -1
- package/dist/composables/tables/data-table/columns.d.ts +25 -0
- package/dist/composables/tables/data-table/columns.js +54 -0
- package/dist/composables/tables/data-table/columns.js.map +1 -0
- package/dist/composables/tables/data-table/expansion.d.ts +17 -0
- package/dist/composables/tables/data-table/expansion.js +38 -0
- package/dist/composables/tables/data-table/expansion.js.map +1 -0
- package/dist/composables/tables/data-table/grouping.d.ts +29 -0
- package/dist/composables/tables/data-table/grouping.js +136 -0
- package/dist/composables/tables/data-table/grouping.js.map +1 -0
- package/dist/composables/tables/data-table/pagination.d.ts +33 -0
- package/dist/composables/tables/data-table/pagination.js +119 -0
- package/dist/composables/tables/data-table/pagination.js.map +1 -0
- package/dist/composables/tables/data-table/selection.d.ts +29 -0
- package/dist/composables/tables/data-table/selection.js +164 -0
- package/dist/composables/tables/data-table/selection.js.map +1 -0
- package/dist/composables/tables/data-table/sort.d.ts +32 -0
- package/dist/composables/tables/data-table/sort.js +136 -0
- package/dist/composables/tables/data-table/sort.js.map +1 -0
- package/dist/composables/tables/data-table/types.d.ts +14 -0
- package/dist/composables/tables/data-table/types.js +11 -0
- package/dist/composables/tables/data-table/types.js.map +1 -0
- package/dist/composables/theme.js +1 -20
- package/dist/composables/theme.js.map +1 -1
- package/dist/composables/timeout-manager.d.ts +4 -2
- package/dist/composables/timeout-manager.js +2 -1
- package/dist/composables/timeout-manager.js.map +1 -1
- package/dist/icons/icons_1.js +28 -28
- package/dist/icons/icons_1.js.map +1 -1
- package/dist/icons/icons_2.d.ts +8 -8
- package/dist/icons/icons_2.js +52 -52
- package/dist/icons/icons_2.js.map +1 -1
- package/dist/icons/icons_3.d.ts +18 -18
- package/dist/icons/icons_3.js +108 -108
- package/dist/icons/icons_3.js.map +1 -1
- package/dist/icons/icons_4.d.ts +35 -0
- package/dist/icons/icons_4.js +176 -1
- package/dist/icons/icons_4.js.map +1 -1
- package/dist/icons/index.d.ts +1 -1
- package/dist/icons/index.js +1 -1
- package/dist/icons/index.js.map +1 -1
- package/dist/index.js +43 -15
- package/dist/index.js.map +1 -1
- package/dist/style.css +189 -162
- package/dist/theme/index.js +15 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/utils/assert.d.ts +1 -1
- package/dist/utils/assert.js.map +1 -1
- package/dist/utils/form-text-detail.d.ts +9 -8
- package/dist/utils/form-text-detail.js +1 -2
- package/dist/utils/form-text-detail.js.map +1 -1
- package/dist/utils/helpers.d.ts +4 -32
- package/dist/utils/helpers.js +8 -9
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/is-equal.d.ts +1 -1
- package/dist/utils/is-equal.js +5 -3
- package/dist/utils/is-equal.js.map +1 -1
- package/dist/web-types.json +359 -359
- package/package.json +44 -35
- package/dist/utils/generate-id.d.ts +0 -5
- package/dist/utils/generate-id.js +0 -21
- package/dist/utils/generate-id.js.map +0 -1
|
@@ -33,10 +33,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
33
33
|
emits: /* @__PURE__ */ mergeModels(["select"], ["update:modelValue"]),
|
|
34
34
|
setup(__props, { emit: __emit }) {
|
|
35
35
|
const modelValue = useModel(__props, "modelValue");
|
|
36
|
-
const props = __props;
|
|
37
36
|
const emit = __emit;
|
|
38
37
|
const viewMode = ref("months");
|
|
39
|
-
const startYear = ref(
|
|
38
|
+
const startYear = ref(__props.viewYear - 6);
|
|
40
39
|
const months = getShortMonthNames();
|
|
41
40
|
const calendarState = inject(CalendarStateSymbol);
|
|
42
41
|
const yearRange = ref([]);
|
|
@@ -47,11 +46,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
47
46
|
const canGoToPrev = ref(true);
|
|
48
47
|
function calculateYearRange() {
|
|
49
48
|
const start = get(startYear);
|
|
50
|
-
set(
|
|
49
|
+
set(
|
|
50
|
+
yearRange,
|
|
51
|
+
Array.from({ length: 12 }, (_, i) => start + i)
|
|
52
|
+
);
|
|
51
53
|
}
|
|
52
54
|
function calculateTitle() {
|
|
53
55
|
if (get(viewMode) === "months") {
|
|
54
|
-
set(title,
|
|
56
|
+
set(title, __props.viewYear.toString());
|
|
55
57
|
} else {
|
|
56
58
|
const range = get(yearRange);
|
|
57
59
|
set(title, `${range[0]} - ${range.at(-1)}`);
|
|
@@ -61,8 +63,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
61
63
|
const { maxDate, minDate } = calendarState;
|
|
62
64
|
const mode = get(viewMode);
|
|
63
65
|
if (mode === "months") {
|
|
64
|
-
const nextYear =
|
|
65
|
-
const previousYear =
|
|
66
|
+
const nextYear = __props.viewYear + 1;
|
|
67
|
+
const previousYear = __props.viewYear - 1;
|
|
66
68
|
set(canGoToNext, !isDefined(maxDate) || nextYear <= get(maxDate).getFullYear());
|
|
67
69
|
set(canGoToPrev, !isDefined(minDate) || previousYear >= get(minDate).getFullYear());
|
|
68
70
|
} else {
|
|
@@ -76,7 +78,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
76
78
|
}
|
|
77
79
|
function calculateMonthsInRange() {
|
|
78
80
|
const { minDate, maxDate } = calendarState;
|
|
79
|
-
const currentYear =
|
|
81
|
+
const currentYear = __props.viewYear;
|
|
80
82
|
const result = new Array(12).fill(true);
|
|
81
83
|
if (isDefined(minDate) || isDefined(maxDate)) {
|
|
82
84
|
for (let month = 0; month < 12; month++) {
|
|
@@ -94,7 +96,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
94
96
|
function calculateYearsInRange() {
|
|
95
97
|
const { minDate, maxDate } = calendarState;
|
|
96
98
|
const range = get(yearRange);
|
|
97
|
-
const currentMonth =
|
|
99
|
+
const currentMonth = __props.viewMonth;
|
|
98
100
|
if (!isDefined(minDate) && !isDefined(maxDate)) {
|
|
99
101
|
set(yearsInRange, new Array(range.length).fill(true));
|
|
100
102
|
return;
|
|
@@ -108,50 +110,26 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
108
110
|
});
|
|
109
111
|
set(yearsInRange, result);
|
|
110
112
|
}
|
|
111
|
-
calculateYearRange();
|
|
112
|
-
calculateTitle();
|
|
113
|
-
calculateNavigation();
|
|
114
|
-
calculateMonthsInRange();
|
|
115
|
-
calculateYearsInRange();
|
|
116
|
-
watch(startYear, () => {
|
|
117
|
-
calculateYearRange();
|
|
118
|
-
calculateTitle();
|
|
119
|
-
calculateNavigation();
|
|
120
|
-
calculateYearsInRange();
|
|
121
|
-
});
|
|
122
|
-
watch(viewMode, () => {
|
|
123
|
-
calculateTitle();
|
|
124
|
-
calculateNavigation();
|
|
125
|
-
});
|
|
126
|
-
watch(() => props.viewYear, () => {
|
|
127
|
-
calculateTitle();
|
|
128
|
-
calculateNavigation();
|
|
129
|
-
calculateMonthsInRange();
|
|
130
|
-
calculateYearsInRange();
|
|
131
|
-
});
|
|
132
|
-
watch(() => props.viewMonth, () => {
|
|
133
|
-
calculateYearsInRange();
|
|
134
|
-
});
|
|
135
113
|
function toggleSelection() {
|
|
136
114
|
set(viewMode, get(viewMode) === "months" ? "years" : "months");
|
|
137
115
|
}
|
|
138
116
|
function selectMonth(month) {
|
|
139
117
|
if (!get(monthsInRange)[month])
|
|
140
118
|
return;
|
|
141
|
-
emit("select", { month, year:
|
|
119
|
+
emit("select", { month, year: __props.viewYear });
|
|
142
120
|
set(modelValue, false);
|
|
143
121
|
}
|
|
144
122
|
function selectYear(year) {
|
|
145
123
|
const yearIndex = get(yearRange).indexOf(year);
|
|
146
124
|
if (yearIndex === -1 || !get(yearsInRange)[yearIndex])
|
|
147
125
|
return;
|
|
148
|
-
emit("select", { month:
|
|
126
|
+
emit("select", { month: __props.viewMonth, year });
|
|
149
127
|
set(viewMode, "months");
|
|
150
128
|
}
|
|
151
129
|
function handleNext() {
|
|
152
130
|
if (get(viewMode) === "months") {
|
|
153
|
-
const nextYear =
|
|
154
|
-
emit("select", { month:
|
|
131
|
+
const nextYear = __props.viewYear + 1;
|
|
132
|
+
emit("select", { month: __props.viewMonth, year: nextYear });
|
|
155
133
|
} else {
|
|
156
134
|
const lastYearInRange = get(startYear) + 11;
|
|
157
135
|
set(startYear, lastYearInRange + 1);
|
|
@@ -159,13 +137,43 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
159
137
|
}
|
|
160
138
|
function handlePrev() {
|
|
161
139
|
if (get(viewMode) === "months") {
|
|
162
|
-
const previousYear =
|
|
163
|
-
emit("select", { month:
|
|
140
|
+
const previousYear = __props.viewYear - 1;
|
|
141
|
+
emit("select", { month: __props.viewMonth, year: previousYear });
|
|
164
142
|
} else {
|
|
165
143
|
const firstYearInRange = get(startYear);
|
|
166
144
|
set(startYear, firstYearInRange - 12);
|
|
167
145
|
}
|
|
168
146
|
}
|
|
147
|
+
calculateYearRange();
|
|
148
|
+
calculateTitle();
|
|
149
|
+
calculateNavigation();
|
|
150
|
+
calculateMonthsInRange();
|
|
151
|
+
calculateYearsInRange();
|
|
152
|
+
watch(startYear, () => {
|
|
153
|
+
calculateYearRange();
|
|
154
|
+
calculateTitle();
|
|
155
|
+
calculateNavigation();
|
|
156
|
+
calculateYearsInRange();
|
|
157
|
+
});
|
|
158
|
+
watch(viewMode, () => {
|
|
159
|
+
calculateTitle();
|
|
160
|
+
calculateNavigation();
|
|
161
|
+
});
|
|
162
|
+
watch(
|
|
163
|
+
() => __props.viewYear,
|
|
164
|
+
() => {
|
|
165
|
+
calculateTitle();
|
|
166
|
+
calculateNavigation();
|
|
167
|
+
calculateMonthsInRange();
|
|
168
|
+
calculateYearsInRange();
|
|
169
|
+
}
|
|
170
|
+
);
|
|
171
|
+
watch(
|
|
172
|
+
() => __props.viewMonth,
|
|
173
|
+
() => {
|
|
174
|
+
calculateYearsInRange();
|
|
175
|
+
}
|
|
176
|
+
);
|
|
169
177
|
return (_ctx, _cache) => {
|
|
170
178
|
return openBlock(), createBlock(RuiMenu, {
|
|
171
179
|
modelValue: modelValue.value,
|
|
@@ -216,7 +224,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
216
224
|
viewMode.value === "months" ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
|
217
225
|
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(months), (month, index) => {
|
|
218
226
|
return openBlock(), createElementBlock("button", {
|
|
219
|
-
key:
|
|
227
|
+
key: month,
|
|
220
228
|
type: "button",
|
|
221
229
|
class: normalizeClass(["h-9 w-full flex items-center justify-center text-sm font-medium rounded-md transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50", [
|
|
222
230
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiCalendarMenu.vue2.js","sources":["../../../src/components/calendar/RuiCalendarMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { ref, watch } from 'vue';\nimport {\n CalendarStateSymbol,\n getShortMonthNames,\n type MonthYearSelection,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiMenu from '@/components/overlays/menu/RuiMenu.vue';\nimport RuiButton from '../buttons/button/RuiButton.vue';\n\ndefineOptions({\n name: 'RuiCalendarMenu',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<boolean>();\n\nconst props = defineProps<{\n anchorEl: HTMLElement | undefined;\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst emit = defineEmits<{\n select: [MonthYearSelection];\n}>();\n\n// Core reactive state - minimal\nconst viewMode = ref<'months' | 'years'>('months');\nconst startYear = ref<number>(props.viewYear - 6);\n\n// Pre-calculated constants\nconst months = getShortMonthNames();\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\n// Pre-calculated arrays for performance - using refs for better control\nconst yearRange = ref<number[]>([]);\nconst monthsInRange = ref<boolean[]>([]);\nconst yearsInRange = ref<boolean[]>([]);\nconst title = ref<string>('');\nconst canGoToNext = ref<boolean>(true);\nconst canGoToPrev = ref<boolean>(true);\n\n// Pre-calculation functions using VueUse get/set\nfunction calculateYearRange() {\n const start = get(startYear);\n set(yearRange, Array.from({ length: 12 }, (_, i) => start + i));\n}\n\nfunction calculateTitle() {\n if (get(viewMode) === 'months') {\n set(title, props.viewYear.toString());\n }\n else {\n const range = get(yearRange);\n set(title, `${range[0]} - ${range.at(-1)}`);\n }\n}\n\nfunction calculateNavigation() {\n const { maxDate, minDate } = calendarState;\n const mode = get(viewMode);\n\n if (mode === 'months') {\n const nextYear = props.viewYear + 1;\n const previousYear = props.viewYear - 1;\n\n set(canGoToNext, !isDefined(maxDate) || nextYear <= get(maxDate).getFullYear());\n set(canGoToPrev, !isDefined(minDate) || previousYear >= get(minDate).getFullYear());\n }\n else {\n const lastYearInRange = get(startYear) + 11;\n const firstYearInRange = get(startYear);\n\n // Check if we can navigate to the next range of years\n const nextRangeStart = lastYearInRange + 1;\n set(canGoToNext, !isDefined(maxDate) || nextRangeStart <= get(maxDate).getFullYear());\n\n // Check if we can navigate to the previous range of years\n const prevRangeEnd = firstYearInRange - 1;\n set(canGoToPrev, !isDefined(minDate) || prevRangeEnd >= get(minDate).getFullYear());\n }\n}\n\nfunction calculateMonthsInRange() {\n const { minDate, maxDate } = calendarState;\n const currentYear = props.viewYear;\n const result = new Array(12).fill(true);\n\n if (isDefined(minDate) || isDefined(maxDate)) {\n for (let month = 0; month < 12; month++) {\n const date = new Date(currentYear, month);\n if (isDefined(maxDate) && date > get(maxDate)) {\n result[month] = false;\n }\n if (isDefined(minDate) && date < get(minDate)) {\n result[month] = false;\n }\n }\n }\n\n set(monthsInRange, result);\n}\n\nfunction calculateYearsInRange() {\n const { minDate, maxDate } = calendarState;\n const range = get(yearRange);\n const currentMonth = props.viewMonth;\n\n if (!isDefined(minDate) && !isDefined(maxDate)) {\n set(yearsInRange, new Array(range.length).fill(true));\n return;\n }\n\n const result = range.map((year) => {\n const date = new Date(year, currentMonth);\n if (isDefined(maxDate) && date > get(maxDate)) {\n return false;\n }\n return !isDefined(minDate) || date >= get(minDate);\n });\n\n set(yearsInRange, result);\n}\n\n// Initial calculations\ncalculateYearRange();\ncalculateTitle();\ncalculateNavigation();\ncalculateMonthsInRange();\ncalculateYearsInRange();\n\n// Watchers for recalculation only when needed\nwatch(startYear, () => {\n calculateYearRange();\n calculateTitle();\n calculateNavigation();\n calculateYearsInRange();\n});\n\nwatch(viewMode, () => {\n calculateTitle();\n calculateNavigation();\n});\n\nwatch(() => props.viewYear, () => {\n calculateTitle();\n calculateNavigation();\n calculateMonthsInRange();\n calculateYearsInRange();\n});\n\nwatch(() => props.viewMonth, () => {\n calculateYearsInRange();\n});\n\nfunction toggleSelection() {\n set(viewMode, get(viewMode) === 'months' ? 'years' : 'months');\n}\n\nfunction selectMonth(month: number) {\n if (!get(monthsInRange)[month])\n return;\n emit('select', { month, year: props.viewYear });\n set(modelValue, false);\n}\n\nfunction selectYear(year: number) {\n const yearIndex = get(yearRange).indexOf(year);\n if (yearIndex === -1 || !get(yearsInRange)[yearIndex])\n return;\n\n emit('select', { month: props.viewMonth, year });\n set(viewMode, 'months');\n}\n\nfunction handleNext() {\n if (get(viewMode) === 'months') {\n const nextYear = props.viewYear + 1;\n // Emit directly - navigation is already constrained by canGoToNext\n emit('select', { month: props.viewMonth, year: nextYear });\n }\n else {\n const lastYearInRange = get(startYear) + 11;\n set(startYear, lastYearInRange + 1);\n }\n}\n\nfunction handlePrev() {\n if (get(viewMode) === 'months') {\n const previousYear = props.viewYear - 1;\n // Emit directly - navigation is already constrained by canGoToPrev\n emit('select', { month: props.viewMonth, year: previousYear });\n }\n else {\n const firstYearInRange = get(startYear);\n set(startYear, firstYearInRange - 12);\n }\n}\n</script>\n\n<template>\n <RuiMenu\n v-model=\"modelValue\"\n :anchor-el=\"anchorEl\"\n placement=\"bottom-start\"\n >\n <div class=\"menu-container\">\n <div class=\"menu-header\">\n <RuiButton\n type=\"button\"\n class=\"nav-button\"\n icon\n :disabled=\"!get(canGoToPrev)\"\n variant=\"text\"\n @click.stop=\"handlePrev()\"\n >\n <RuiIcon\n name=\"lu-chevron-left\"\n size=\"20\"\n />\n </RuiButton>\n\n <div\n class=\"flex-1 text-center cursor-pointer\"\n @click.stop=\"toggleSelection()\"\n >\n {{ get(title) }}\n </div>\n\n <RuiButton\n type=\"button\"\n class=\"nav-button\"\n icon\n :disabled=\"!get(canGoToNext)\"\n variant=\"text\"\n @click.stop=\"handleNext()\"\n >\n <RuiIcon\n name=\"lu-chevron-right\"\n size=\"20\"\n />\n </RuiButton>\n </div>\n\n <div\n v-if=\"viewMode === 'months'\"\n class=\"month-grid\"\n >\n <button\n v-for=\"(month, index) in months\"\n :key=\"index\"\n type=\"button\"\n class=\"h-9 w-full flex items-center justify-center text-sm font-medium rounded-md transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50\"\n :class=\"[\n {\n 'bg-rui-primary text-white hover:bg-rui-primary-darker active:bg-rui-primary-darker dark:bg-rui-primary dark:text-white dark:hover:bg-rui-primary-darker': index === viewMonth && get(monthsInRange)[index],\n 'bg-gray-300 text-gray-500 dark:bg-gray-600 dark:text-gray-400': index === viewMonth && !get(monthsInRange)[index],\n 'text-gray-700 bg-transparent hover:bg-gray-100 active:bg-gray-200 dark:text-gray-300 dark:hover:bg-gray-700 dark:active:bg-gray-600': index !== viewMonth && get(monthsInRange)[index],\n 'opacity-50 cursor-not-allowed bg-transparent hover:bg-transparent active:bg-transparent dark:hover:bg-transparent dark:active:bg-transparent pointer-events-none text-gray-400 dark:text-gray-600': !get(monthsInRange)[index],\n },\n ]\"\n :disabled=\"!get(monthsInRange)[index]\"\n @click.stop=\"selectMonth(index)\"\n >\n {{ month.substring(0, 3) }}\n </button>\n </div>\n\n <div\n v-else-if=\"viewMode === 'years'\"\n class=\"year-grid\"\n >\n <button\n v-for=\"(year, index) in yearRange\"\n :key=\"year\"\n type=\"button\"\n class=\"h-9 w-full flex items-center justify-center text-sm font-medium rounded-md transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50\"\n :class=\"[\n {\n 'bg-rui-primary text-white hover:bg-rui-primary-darker active:bg-rui-primary-darker dark:bg-rui-primary dark:text-white dark:hover:bg-rui-primary-darker': year === viewYear && get(yearsInRange)[index],\n 'bg-gray-300 text-gray-500 dark:bg-gray-600 dark:text-gray-400': year === viewYear && !get(yearsInRange)[index],\n 'text-gray-700 bg-transparent hover:bg-gray-100 active:bg-gray-200 dark:text-gray-300 dark:hover:bg-gray-700 dark:active:bg-gray-600': year !== viewYear && get(yearsInRange)[index],\n 'opacity-50 cursor-not-allowed bg-transparent hover:bg-transparent active:bg-transparent dark:hover:bg-transparent dark:active:bg-transparent pointer-events-none text-gray-400 dark:text-gray-600': !get(yearsInRange)[index],\n },\n ]\"\n :disabled=\"!get(yearsInRange)[index]\"\n @click.stop=\"selectYear(year)\"\n >\n {{ year }}\n </button>\n </div>\n </div>\n </RuiMenu>\n</template>\n\n<style scoped>\n.menu-container {\n @apply w-64 shadow-lg overflow-hidden;\n}\n\n.menu-header {\n @apply flex items-center justify-center p-1 font-medium text-gray-800 dark:text-gray-200;\n @apply border-b border-rui-grey-200 dark:border-rui-grey-800 cursor-pointer hover:bg-rui-grey-100 dark:hover:bg-rui-grey-800;\n}\n\n.month-grid {\n @apply grid grid-cols-3 gap-1 p-2;\n}\n\n.year-grid {\n @apply grid grid-cols-3 gap-1 p-2;\n}\n</style>\n"],"names":["_useModel","_createBlock","_createElementVNode","_createVNode","_unref","_toDisplayString","_openBlock","_createElementBlock","_Fragment","_renderList","_withModifiers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RuiCalendarMenu.vue2.js","sources":["../../../src/components/calendar/RuiCalendarMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { ref, watch } from 'vue';\nimport {\n CalendarStateSymbol,\n getShortMonthNames,\n type MonthYearSelection,\n type RuiCalendarState,\n} from '@/components/calendar/state';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\nimport RuiMenu from '@/components/overlays/menu/RuiMenu.vue';\nimport RuiButton from '../buttons/button/RuiButton.vue';\n\ndefineOptions({\n name: 'RuiCalendarMenu',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<boolean>();\n\nconst { viewMonth, viewYear } = defineProps<{\n anchorEl: HTMLElement | undefined;\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst emit = defineEmits<{\n select: [MonthYearSelection];\n}>();\n\n// Core reactive state - minimal\nconst viewMode = ref<'months' | 'years'>('months');\nconst startYear = ref<number>(viewYear - 6);\n\n// Pre-calculated constants\nconst months = getShortMonthNames();\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\n// Pre-calculated arrays for performance - using refs for better control\nconst yearRange = ref<number[]>([]);\nconst monthsInRange = ref<boolean[]>([]);\nconst yearsInRange = ref<boolean[]>([]);\nconst title = ref<string>('');\nconst canGoToNext = ref<boolean>(true);\nconst canGoToPrev = ref<boolean>(true);\n\n// Pre-calculation functions using VueUse get/set\nfunction calculateYearRange(): 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 placement=\"bottom-start\"\n >\n <div class=\"menu-container\">\n <div class=\"menu-header\">\n <RuiButton\n type=\"button\"\n class=\"nav-button\"\n icon\n :disabled=\"!get(canGoToPrev)\"\n variant=\"text\"\n @click.stop=\"handlePrev()\"\n >\n <RuiIcon\n name=\"lu-chevron-left\"\n size=\"20\"\n />\n </RuiButton>\n\n <div\n class=\"flex-1 text-center cursor-pointer\"\n @click.stop=\"toggleSelection()\"\n >\n {{ get(title) }}\n </div>\n\n <RuiButton\n type=\"button\"\n class=\"nav-button\"\n icon\n :disabled=\"!get(canGoToNext)\"\n variant=\"text\"\n @click.stop=\"handleNext()\"\n >\n <RuiIcon\n name=\"lu-chevron-right\"\n size=\"20\"\n />\n </RuiButton>\n </div>\n\n <div\n v-if=\"viewMode === 'months'\"\n class=\"month-grid\"\n >\n <button\n v-for=\"(month, index) in months\"\n :key=\"month\"\n type=\"button\"\n class=\"h-9 w-full flex items-center justify-center text-sm font-medium rounded-md transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50\"\n :class=\"[\n {\n 'bg-rui-primary text-white hover:bg-rui-primary-darker active:bg-rui-primary-darker dark:bg-rui-primary dark:text-white dark:hover:bg-rui-primary-darker':\n index === viewMonth && get(monthsInRange)[index],\n 'bg-gray-300 text-gray-500 dark:bg-gray-600 dark:text-gray-400':\n index === viewMonth && !get(monthsInRange)[index],\n 'text-gray-700 bg-transparent hover:bg-gray-100 active:bg-gray-200 dark:text-gray-300 dark:hover:bg-gray-700 dark:active:bg-gray-600':\n index !== viewMonth && get(monthsInRange)[index],\n 'opacity-50 cursor-not-allowed bg-transparent hover:bg-transparent active:bg-transparent dark:hover:bg-transparent dark:active:bg-transparent pointer-events-none text-gray-400 dark:text-gray-600':\n !get(monthsInRange)[index],\n },\n ]\"\n :disabled=\"!get(monthsInRange)[index]\"\n @click.stop=\"selectMonth(index)\"\n >\n {{ month.substring(0, 3) }}\n </button>\n </div>\n\n <div\n v-else-if=\"viewMode === 'years'\"\n class=\"year-grid\"\n >\n <button\n v-for=\"(year, index) in yearRange\"\n :key=\"year\"\n type=\"button\"\n class=\"h-9 w-full flex items-center justify-center text-sm font-medium rounded-md transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50\"\n :class=\"[\n {\n 'bg-rui-primary text-white hover:bg-rui-primary-darker active:bg-rui-primary-darker dark:bg-rui-primary dark:text-white dark:hover:bg-rui-primary-darker':\n year === viewYear && get(yearsInRange)[index],\n 'bg-gray-300 text-gray-500 dark:bg-gray-600 dark:text-gray-400':\n year === viewYear && !get(yearsInRange)[index],\n 'text-gray-700 bg-transparent hover:bg-gray-100 active:bg-gray-200 dark:text-gray-300 dark:hover:bg-gray-700 dark:active:bg-gray-600':\n year !== viewYear && get(yearsInRange)[index],\n 'opacity-50 cursor-not-allowed bg-transparent hover:bg-transparent active:bg-transparent dark:hover:bg-transparent dark:active:bg-transparent pointer-events-none text-gray-400 dark:text-gray-600':\n !get(yearsInRange)[index],\n },\n ]\"\n :disabled=\"!get(yearsInRange)[index]\"\n @click.stop=\"selectYear(year)\"\n >\n {{ year }}\n </button>\n </div>\n </div>\n </RuiMenu>\n</template>\n\n<style scoped>\n.menu-container {\n @apply w-64 shadow-lg overflow-hidden;\n}\n\n.menu-header {\n @apply flex items-center justify-center p-1 font-medium text-gray-800 dark:text-gray-200;\n @apply border-b border-rui-grey-200 dark:border-rui-grey-800 cursor-pointer hover:bg-rui-grey-100 dark:hover:bg-rui-grey-800;\n}\n\n.month-grid {\n @apply grid grid-cols-3 gap-1 p-2;\n}\n\n.year-grid {\n @apply grid grid-cols-3 gap-1 p-2;\n}\n</style>\n"],"names":["_useModel","_createBlock","_createElementVNode","_createVNode","_unref","_toDisplayString","_openBlock","_createElementBlock","_Fragment","_renderList","_withModifiers"],"mappings":"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"}
|
|
@@ -7,31 +7,16 @@ export interface Props {
|
|
|
7
7
|
noPadding?: boolean;
|
|
8
8
|
contentClass?: string;
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
'
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
header?: (props: typeof __VLS_15) => any;
|
|
19
|
-
} & {
|
|
20
|
-
subheader?: (props: typeof __VLS_18) => any;
|
|
21
|
-
} & {
|
|
22
|
-
default?: (props: typeof __VLS_20) => any;
|
|
23
|
-
} & {
|
|
24
|
-
footer?: (props: typeof __VLS_22) => any;
|
|
10
|
+
type __VLS_Slots = {
|
|
11
|
+
'image'?: () => any;
|
|
12
|
+
'custom-header'?: () => any;
|
|
13
|
+
'prepend'?: () => any;
|
|
14
|
+
'header'?: () => any;
|
|
15
|
+
'subheader'?: () => any;
|
|
16
|
+
'default'?: () => any;
|
|
17
|
+
'footer'?: () => any;
|
|
25
18
|
};
|
|
26
|
-
declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
27
|
-
variant: "flat" | "outlined";
|
|
28
|
-
rounded: "sm" | "md" | "lg";
|
|
29
|
-
elevation: number;
|
|
30
|
-
dense: boolean;
|
|
31
|
-
contentClass: string;
|
|
32
|
-
divide: boolean;
|
|
33
|
-
noPadding: boolean;
|
|
34
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
|
+
declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
35
20
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
36
21
|
declare const _default: typeof __VLS_export;
|
|
37
22
|
export default _default;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent, useSlots, computed, openBlock, createElementBlock, mergeProps,
|
|
1
|
+
import { defineComponent, useSlots, computed, openBlock, createElementBlock, mergeProps, normalizeClass, renderSlot, createCommentVNode, createBlock, createSlots, withCtx } from "vue";
|
|
2
2
|
import RuiCardHeader from "./RuiCardHeader.vue.js";
|
|
3
3
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
4
4
|
...{
|
|
@@ -32,7 +32,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
32
32
|
}
|
|
33
33
|
]
|
|
34
34
|
}, _ctx.$attrs), [
|
|
35
|
-
|
|
35
|
+
slots.image ? (openBlock(), createElementBlock("div", {
|
|
36
36
|
key: 0,
|
|
37
37
|
class: normalizeClass(_ctx.$style.image)
|
|
38
38
|
}, [
|
|
@@ -43,21 +43,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
43
43
|
key: 0,
|
|
44
44
|
dense: __props.dense
|
|
45
45
|
}, createSlots({ _: 2 }, [
|
|
46
|
-
|
|
46
|
+
slots.prepend ? {
|
|
47
47
|
name: "prepend",
|
|
48
48
|
fn: withCtx(() => [
|
|
49
49
|
renderSlot(_ctx.$slots, "prepend")
|
|
50
50
|
]),
|
|
51
51
|
key: "0"
|
|
52
52
|
} : void 0,
|
|
53
|
-
|
|
53
|
+
slots.header ? {
|
|
54
54
|
name: "header",
|
|
55
55
|
fn: withCtx(() => [
|
|
56
56
|
renderSlot(_ctx.$slots, "header")
|
|
57
57
|
]),
|
|
58
58
|
key: "1"
|
|
59
59
|
} : void 0,
|
|
60
|
-
|
|
60
|
+
slots.subheader ? {
|
|
61
61
|
name: "subheader",
|
|
62
62
|
fn: withCtx(() => [
|
|
63
63
|
renderSlot(_ctx.$slots, "subheader")
|
|
@@ -66,13 +66,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
66
66
|
} : void 0
|
|
67
67
|
]), 1032, ["dense"])) : createCommentVNode("", true)
|
|
68
68
|
]),
|
|
69
|
-
|
|
69
|
+
slots.default ? (openBlock(), createElementBlock("div", {
|
|
70
70
|
key: 1,
|
|
71
71
|
class: normalizeClass([_ctx.$style.content, __props.contentClass])
|
|
72
72
|
}, [
|
|
73
73
|
renderSlot(_ctx.$slots, "default")
|
|
74
74
|
], 2)) : createCommentVNode("", true),
|
|
75
|
-
|
|
75
|
+
slots.footer ? (openBlock(), createElementBlock("div", {
|
|
76
76
|
key: 2,
|
|
77
77
|
class: normalizeClass(_ctx.$style.footer)
|
|
78
78
|
}, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiCard.vue2.js","sources":["../../../src/components/cards/RuiCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport RuiCardHeader from '@/components/cards/RuiCardHeader.vue';\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 contentClass?: string;\n}\n\ndefineOptions({\n name: 'RuiCard',\n inheritAttrs: false,\n});\n\
|
|
1
|
+
{"version":3,"file":"RuiCard.vue2.js","sources":["../../../src/components/cards/RuiCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport RuiCardHeader from '@/components/cards/RuiCardHeader.vue';\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 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 = 'outlined',\n rounded = 'md',\n noPadding = false,\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 hasHeadContent = computed<boolean>(() => !!slots.header || !!slots.subheader);\n</script>\n\n<template>\n <div\n :class=\"[\n $style.card,\n `shadow-${elevation}`,\n $style[`rounded__${rounded}`],\n {\n [$style.outlined]: variant === 'outlined',\n [$style.dense]: dense,\n [$style.divide]: divide,\n [$style['no-padding']]: noPadding,\n },\n ]\"\n v-bind=\"$attrs\"\n >\n <div\n v-if=\"slots.image\"\n :class=\"$style.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 :class=\"[$style.content, contentClass]\"\n >\n <slot />\n </div>\n <div\n v-if=\"slots.footer\"\n :class=\"$style.footer\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.card {\n @apply flex flex-col h-full w-full bg-white;\n &.rounded__sm {\n @apply rounded-[.25rem];\n\n .image {\n @apply rounded-t-[.25rem];\n }\n }\n\n &.rounded__md {\n @apply rounded-[.5rem];\n\n .image {\n @apply rounded-t-[.5rem];\n }\n }\n\n &.rounded__lg {\n @apply rounded-[1rem];\n\n .image {\n @apply rounded-t-[1rem];\n }\n }\n\n .image {\n @apply overflow-hidden;\n }\n\n .content {\n @apply p-4 text-body-1 text-rui-light-text overflow-y-auto;\n }\n\n .footer {\n @apply p-4 pt-2 flex space-x-2 items-center justify-start mt-auto;\n }\n\n &.flat {\n @apply border-none;\n }\n\n &.outlined {\n @apply border border-black/[0.12];\n }\n\n &.divide {\n @apply divide-y divide-black/[0.12];\n }\n\n &.dense {\n > .content {\n @apply p-3;\n }\n\n > .footer {\n @apply py-1 flex space-x-2;\n }\n }\n\n &.no-padding {\n > .content {\n @apply p-0;\n }\n }\n}\n\n:global(.dark) {\n .card {\n @apply bg-[#1E1E1E];\n\n .content {\n @apply text-rui-dark-text;\n }\n\n &.outlined {\n @apply border-white/[0.12];\n }\n\n &.divide {\n @apply divide-white/[0.12];\n }\n }\n}\n</style>\n"],"names":["_useSlots","_openBlock","_createElementBlock","_mergeProps","$style","$attrs","_normalizeClass","_renderSlot","_createBlock"],"mappings":";;;;;;;;;;;;;;;;;;AA6BA,UAAM,QAAQA,SAAA;AAUd,UAAM,iBAAiB,SAAkB,MAAM,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,MAAM,SAAS;;AAIhF,aAAAC,UAAA,GAAAC,mBAyDM,OAzDNC,WAyDM;AAAA,QAxDH,OAAK;AAAA,UAAUC,KAAAA,OAAO;AAAA,oBAAsB,QAAA,SAAS;AAAA,UAAUA,KAAAA,mBAAmB,QAAA,OAAO,EAAA;AAAA;aAAsBA,KAAAA,OAAO,QAAQ,GAAG,QAAA,YAAO;AAAA,aAA0BA,KAAAA,OAAO,KAAK,GAAG,QAAA;AAAA,aAAgBA,KAAAA,OAAO,MAAM,GAAG,QAAA;AAAA,YAAiBA,CAAAA,KAAAA,uBAAuB,QAAA;AAAA,UAAA;AAAA;SAWlPC,KAAAA,MAAM,GAAA;AAAA,QAGN,MAAM,sBADdH,mBAKM,OAAA;AAAA;UAHH,OAAKI,eAAEF,KAAAA,OAAO,KAAK;AAAA,QAAA;UAEpBG,WAAqB,KAAA,QAAA,OAAA;AAAA,QAAA;QAEvBA,WAwBO,kCAxBP,MAwBO;AAAA,UAtBG,eAAA,sBADRC,YAsBgB,eAAA;AAAA;YApBb,OAAO,QAAA;AAAA,UAAA;YAGA,MAAM;oBACX;AAAA,0BAED,MAAuB;AAAA,gBAAvBD,WAAuB,KAAA,QAAA,SAAA;AAAA,cAAA;;;YAGjB,MAAM;oBACX;AAAA,0BAED,MAAsB;AAAA,gBAAtBA,WAAsB,KAAA,QAAA,QAAA;AAAA,cAAA;;;YAGhB,MAAM;oBACX;AAAA,0BAED,MAAyB;AAAA,gBAAzBA,WAAyB,KAAA,QAAA,WAAA;AAAA,cAAA;;;;;QAKvB,MAAM,wBADdL,mBAKM,OAAA;AAAA;UAHH,OAAKI,eAAA,CAAGF,KAAAA,OAAO,SAAS,QAAA,YAAY,CAAA;AAAA,QAAA;UAErCG,WAAQ,KAAA,QAAA,SAAA;AAAA,QAAA;QAGF,MAAM,uBADdL,mBAKM,OAAA;AAAA;UAHH,OAAKI,eAAEF,KAAAA,OAAO,MAAM;AAAA,QAAA;UAErBG,WAAsB,KAAA,QAAA,QAAA;AAAA,QAAA;;;;;"}
|
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
export interface Props {
|
|
2
2
|
dense?: boolean;
|
|
3
3
|
}
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
header?: (props: typeof __VLS_3) => any;
|
|
9
|
-
} & {
|
|
10
|
-
subheader?: (props: typeof __VLS_5) => any;
|
|
4
|
+
type __VLS_Slots = {
|
|
5
|
+
prepend?: () => any;
|
|
6
|
+
header?: () => any;
|
|
7
|
+
subheader?: () => any;
|
|
11
8
|
};
|
|
12
|
-
declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
13
|
-
dense: boolean;
|
|
14
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
9
|
+
declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
10
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
16
11
|
declare const _default: typeof __VLS_export;
|
|
17
12
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiCardHeader.vue2.js","sources":["../../../src/components/cards/RuiCardHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nexport interface Props {\n dense?: boolean;\n}\n\ndefineOptions({\n name: 'RuiCardHeader',\n inheritAttrs: false,\n});\n\
|
|
1
|
+
{"version":3,"file":"RuiCardHeader.vue2.js","sources":["../../../src/components/cards/RuiCardHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nexport interface Props {\n dense?: boolean;\n}\n\ndefineOptions({\n name: 'RuiCardHeader',\n inheritAttrs: false,\n});\n\nconst { dense = false } = defineProps<Props>();\n\ndefineSlots<{\n prepend?: () => any;\n header?: () => any;\n subheader?: () => any;\n}>();\n</script>\n\n<template>\n <div\n :class=\"[\n $style.head,\n {\n [$style.dense]: dense,\n [$style.has_prepend]: !!$slots.prepend,\n },\n ]\"\n v-bind=\"$attrs\"\n >\n <div\n v-if=\"$slots.prepend\"\n :class=\"$style.prepend\"\n >\n <slot name=\"prepend\" />\n </div>\n <div :class=\"$style.headers\">\n <h5\n v-if=\"$slots.header\"\n :class=\"$style.header\"\n >\n <slot name=\"header\" />\n </h5>\n <p\n v-if=\"$slots.subheader\"\n :class=\"$style.subheader\"\n >\n <slot name=\"subheader\" />\n </p>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.head {\n @apply p-4 flex space-x-4;\n\n .prepend {\n @apply rounded-full flex items-center justify-center w-10 h-10;\n @apply text-[1.25rem] text-white bg-rui-grey-400 overflow-hidden;\n }\n\n .headers {\n @apply flex flex-col justify-center;\n }\n\n .header {\n @apply text-rui-text text-h6;\n }\n\n .subheader {\n @apply text-rui-text-secondary text-body-2 mb-0;\n }\n\n &.has_prepend {\n .header {\n @apply text-body-1;\n }\n }\n\n &.dense {\n @apply p-3 space-x-2;\n\n .prepend {\n @apply text-base p-[0.08rem] w-9 h-9;\n }\n }\n}\n\n:global(.dark) {\n .head {\n .prepend {\n @apply bg-rui-grey-700 text-black/90;\n }\n\n .header {\n @apply text-rui-dark-text;\n }\n\n .subheader {\n @apply text-rui-dark-text-secondary;\n }\n }\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_mergeProps","$style","$slots","$attrs","_normalizeClass","_renderSlot","_createElementVNode"],"mappings":";;;;;;;;;;;;AAoBE,aAAAA,UAAA,GAAAC,mBA8BM,OA9BNC,WA8BM;AAAA,QA7BH,OAAK;AAAA,UAAUC,KAAAA,OAAO;AAAA;aAAuBA,KAAAA,OAAO,KAAK,GAAG,QAAA;AAAA,YAAgBA,CAAAA,KAAAA,OAAO,WAAW,GAAA,CAAA,CAAKC,KAAAA,OAAO;AAAA,UAAA;AAAA;SAOnGC,KAAAA,MAAM,GAAA;AAAA,QAGND,KAAAA,OAAO,wBADfH,mBAKM,OAAA;AAAA;UAHH,OAAKK,eAAEH,KAAAA,OAAO,OAAO;AAAA,QAAA;UAEtBI,WAAuB,KAAA,QAAA,SAAA;AAAA,QAAA;QAEzBC,mBAaM,OAAA;AAAA,UAbA,OAAKF,eAAEH,KAAAA,OAAO,OAAO;AAAA,QAAA;UAEjBC,KAAAA,OAAO,uBADfH,mBAKK,MAAA;AAAA;YAHF,OAAKK,eAAEH,KAAAA,OAAO,MAAM;AAAA,UAAA;YAErBI,WAAsB,KAAA,QAAA,QAAA;AAAA,UAAA;UAGhBH,KAAAA,OAAO,0BADfH,mBAKI,KAAA;AAAA;YAHD,OAAKK,eAAEH,KAAAA,OAAO,SAAS;AAAA,UAAA;YAExBI,WAAyB,KAAA,QAAA,WAAA;AAAA,UAAA;;;;;;"}
|
|
@@ -13,31 +13,17 @@ export interface Props {
|
|
|
13
13
|
textColor?: string;
|
|
14
14
|
contentClass?: string;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} & {
|
|
20
|
-
default?: (props: typeof __VLS_3) => any;
|
|
16
|
+
type __VLS_Slots = {
|
|
17
|
+
prepend?: () => any;
|
|
18
|
+
default?: () => any;
|
|
21
19
|
};
|
|
22
|
-
declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
23
|
-
click: (e:
|
|
20
|
+
declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
21
|
+
click: (e: MouseEvent) => any;
|
|
24
22
|
"click:close": () => any;
|
|
25
23
|
}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
|
|
26
|
-
onClick?: ((e:
|
|
24
|
+
onClick?: ((e: MouseEvent) => any) | undefined;
|
|
27
25
|
"onClick:close"?: (() => any) | undefined;
|
|
28
|
-
}>, {
|
|
29
|
-
size: "sm" | "md";
|
|
30
|
-
variant: "filled" | "outlined";
|
|
31
|
-
color: "grey" | ContextColorsType;
|
|
32
|
-
disabled: boolean;
|
|
33
|
-
contentClass: string;
|
|
34
|
-
closeable: boolean;
|
|
35
|
-
tile: boolean;
|
|
36
|
-
clickable: boolean;
|
|
37
|
-
closeIcon: RuiIcons;
|
|
38
|
-
bgColor: string;
|
|
39
|
-
textColor: string;
|
|
40
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
26
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
41
27
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
42
28
|
declare const _default: typeof __VLS_export;
|
|
43
29
|
export default _default;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { defineComponent,
|
|
2
|
-
import {
|
|
3
|
-
import { get, objectOmit } from "@vueuse/shared";
|
|
1
|
+
import { defineComponent, computed, openBlock, createElementBlock, mergeProps, unref, normalizeClass, renderSlot, createCommentVNode, createElementVNode, withModifiers, createVNode } from "vue";
|
|
2
|
+
import { objectOmit } from "@vueuse/shared";
|
|
4
3
|
import RuiIcon from "../icons/RuiIcon.vue.js";
|
|
5
4
|
const _hoisted_1 = ["disabled"];
|
|
6
5
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
@@ -18,30 +17,26 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
18
17
|
variant: { default: "filled" },
|
|
19
18
|
color: { default: "grey" },
|
|
20
19
|
closeIcon: { default: "lu-circle-x" },
|
|
21
|
-
bgColor: { default: void 0 },
|
|
22
|
-
textColor: { default: void 0 },
|
|
20
|
+
bgColor: { default: () => void 0 },
|
|
21
|
+
textColor: { default: () => void 0 },
|
|
23
22
|
contentClass: { default: "" }
|
|
24
23
|
},
|
|
25
24
|
emits: ["click:close", "click"],
|
|
26
25
|
setup(__props, { emit: __emit }) {
|
|
27
|
-
const props = __props;
|
|
28
26
|
const emit = __emit;
|
|
29
|
-
const { clickable, disabled, bgColor, textColor } = toRefs(props);
|
|
30
|
-
function click(e) {
|
|
31
|
-
if (get(logicOr(logicNot(clickable), disabled)))
|
|
32
|
-
return;
|
|
33
|
-
emit("click", e);
|
|
34
|
-
}
|
|
35
27
|
const style = computed(() => {
|
|
36
28
|
const style2 = {};
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (
|
|
40
|
-
style2.
|
|
41
|
-
if (text)
|
|
42
|
-
style2.color = text;
|
|
29
|
+
if (__props.bgColor)
|
|
30
|
+
style2.backgroundColor = __props.bgColor;
|
|
31
|
+
if (__props.textColor)
|
|
32
|
+
style2.color = __props.textColor;
|
|
43
33
|
return style2;
|
|
44
34
|
});
|
|
35
|
+
function click(e) {
|
|
36
|
+
if (!__props.clickable || __props.disabled)
|
|
37
|
+
return;
|
|
38
|
+
emit("click", e);
|
|
39
|
+
}
|
|
45
40
|
return (_ctx, _cache) => {
|
|
46
41
|
return openBlock(), createElementBlock("div", mergeProps({
|
|
47
42
|
class: [
|
|
@@ -50,9 +45,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
50
45
|
_ctx.$style[__props.size ?? ""],
|
|
51
46
|
_ctx.$style[__props.variant ?? ""],
|
|
52
47
|
{
|
|
53
|
-
[_ctx.$style.disabled]:
|
|
48
|
+
[_ctx.$style.disabled]: __props.disabled,
|
|
54
49
|
[_ctx.$style.tile]: __props.tile,
|
|
55
|
-
[_ctx.$style.readonly]: !
|
|
50
|
+
[_ctx.$style.readonly]: !__props.clickable
|
|
56
51
|
}
|
|
57
52
|
],
|
|
58
53
|
style: unref(style),
|
|
@@ -75,7 +70,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
75
70
|
__props.closeable ? (openBlock(), createElementBlock("button", {
|
|
76
71
|
key: 1,
|
|
77
72
|
class: normalizeClass(_ctx.$style.chip__close),
|
|
78
|
-
disabled:
|
|
73
|
+
disabled: __props.disabled,
|
|
79
74
|
type: "button",
|
|
80
75
|
onClick: _cache[0] || (_cache[0] = withModifiers(($event) => emit("click:close"), ["stop"]))
|
|
81
76
|
}, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiChip.vue2.js","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 {
|
|
1
|
+
{"version":3,"file":"RuiChip.vue2.js","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 { objectOmit } from '@vueuse/shared';\nimport RuiIcon from '@/components/icons/RuiIcon.vue';\n\nexport interface Props {\n tile?: boolean;\n clickable?: boolean;\n closeable?: boolean;\n disabled?: boolean;\n size?: 'sm' | 'md';\n variant?: 'filled' | 'outlined';\n color?: 'grey' | ContextColorsType;\n closeIcon?: RuiIcons;\n bgColor?: string;\n textColor?: string;\n contentClass?: string;\n}\n\ndefineOptions({\n name: 'RuiChip',\n inheritAttrs: false,\n});\n\nconst {\n tile = false,\n size = 'md',\n color = 'grey',\n clickable = false,\n closeable = false,\n disabled = false,\n variant = 'filled',\n closeIcon = 'lu-circle-x',\n bgColor = undefined,\n textColor = undefined,\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 style = computed<Partial<StyleValue>>(() => {\n const style: Partial<StyleValue> = {};\n if (bgColor)\n style.backgroundColor = bgColor;\n\n if (textColor)\n style.color = textColor;\n\n return style;\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=\"[\n $style.chip,\n $style[color ?? ''],\n $style[size ?? ''],\n $style[variant ?? ''],\n {\n [$style.disabled]: disabled,\n [$style.tile]: tile,\n [$style.readonly]: !clickable,\n },\n ]\"\n :style=\"style\"\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=\"$style.chip__prepend\"\n >\n <slot name=\"prepend\" />\n </div>\n <span :class=\"[$style.chip__label, contentClass]\">\n <slot />\n </span>\n <button\n v-if=\"closeable\"\n :class=\"$style.chip__close\"\n :disabled=\"disabled\"\n type=\"button\"\n @click.stop=\"emit('click:close')\"\n >\n <RuiIcon\n :class=\"$style.chip__close_icon\"\n :size=\"size === 'sm' ? 16 : 24\"\n :name=\"closeIcon\"\n />\n </button>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n@use '@/styles/colors.scss' as c;\n\n.chip {\n @apply inline-flex items-center justify-between rounded-full px-1.5 py-[0.25rem] transition-all cursor-default outline-none;\n @apply max-w-full truncate;\n\n &.tile {\n @apply rounded-sm;\n }\n\n &:not(.readonly):not(.disabled) {\n @apply hover:brightness-90 focus:brightness-75;\n }\n\n &.grey {\n @apply text-rui-text;\n\n &.filled {\n @apply bg-rui-grey-200;\n }\n\n &.outlined {\n @apply border border-black/[0.26] bg-transparent;\n\n &:not(.readonly):not(.disabled) {\n @apply hover:bg-black/[0.04] focus:bg-black/[0.12];\n }\n }\n }\n\n @each $color in c.$context-colors {\n &.#{$color} {\n &.filled {\n @apply text-rui-dark-text bg-rui-#{$color};\n }\n\n &.outlined {\n @apply border text-rui-#{$color} border-rui-#{$color}/50 bg-transparent;\n\n &:not(.readonly):not(.disabled) {\n @apply hover:bg-rui-#{$color}/[0.04] focus:bg-rui-#{$color}/[0.12];\n }\n }\n }\n }\n\n &__prepend {\n @apply rounded-full flex items-center justify-center pr-0 w-6 h-6;\n @apply text-[0.6rem] text-white bg-rui-grey-400 -ml-0.5 overflow-hidden;\n }\n\n &__label {\n @apply truncate px-[0.375rem] text-[0.8125rem];\n }\n\n &__close {\n @apply rounded-full flex items-center p-[0.13rem] pl-0;\n @apply inset-y-0 focus:outline-none -mr-1;\n\n &_icon {\n @apply opacity-50 hover:opacity-80 transition-opacity;\n }\n }\n\n &.md {\n @apply min-h-[2.26rem];\n }\n\n &.sm {\n @apply py-[0.19rem];\n\n &__prepend {\n @apply text-[0.5rem] p-[0.08rem] w-4 h-4 -ml-1;\n }\n\n &__label {\n @apply px-[0.3rem] text-[0.7rem];\n }\n\n &__close {\n @apply p-[0.08rem];\n @apply -mr-1.5;\n }\n }\n\n &.disabled,\n &.readonly {\n @apply cursor-default;\n\n &__close {\n @apply cursor-default;\n\n &_icon {\n @apply opacity-50;\n }\n }\n }\n\n &.disabled {\n @apply opacity-40;\n }\n}\n\n:global(.dark) {\n .chip {\n &:not(.readonly):not(.disabled) {\n @apply hover:brightness-110 focus:brightness-75;\n }\n\n &.grey {\n &.filled {\n @apply bg-rui-grey-800;\n }\n\n &.outlined {\n @apply border-white/[0.26];\n\n &:not(.readonly):not(.disabled) {\n @apply hover:bg-white/[0.04] focus:bg-white/[0.12];\n }\n }\n }\n\n @each $color in (warning, success, info) {\n &.#{$color} {\n &.filled {\n @apply text-rui-light-text;\n }\n }\n }\n\n &__prepend {\n @apply bg-rui-grey-700;\n }\n\n &__close {\n &_icon {\n @apply hover:text-rui-grey-300;\n }\n }\n }\n}\n</style>\n"],"names":["style","_openBlock","_createElementBlock","_mergeProps","$style","_unref","$attrs","$slots","_normalizeClass","_renderSlot","_createElementVNode","_createVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,UAAM,OAAO;AAUb,UAAM,QAAQ,SAA8B,MAAM;AAChD,YAAMA,SAA6B,CAAA;AACnC,UAAI,QAAA;AACFA,eAAM,kBAAkB,QAAA;AAE1B,UAAI,QAAA;AACFA,eAAM,QAAQ,QAAA;AAEhB,aAAOA;AAAAA,IACT,CAAC;AAED,aAAS,MAAM,GAAqB;AAClC,UAAI,CAAC,QAAA,aAAa,QAAA;AAChB;AAEF,WAAK,SAAS,CAAC;AAAA,IACjB;;AAIE,aAAAC,UAAA,GAAAC,mBAwCM,OAxCNC,WAwCM;AAAA,QAvCH,OAAK;AAAA,UAAUC,KAAAA,OAAO;AAAA,UAAYA,KAAAA,OAAO,QAAA,SAAK,EAAA;AAAA,UAAeA,KAAAA,OAAO,QAAA,QAAI,EAAA;AAAA,UAAeA,KAAAA,OAAO,QAAA,WAAO,EAAA;AAAA;aAA0BA,KAAAA,OAAO,QAAQ,GAAG,QAAA;AAAA,aAAmBA,KAAAA,OAAO,IAAI,GAAG,QAAA;AAAA,aAAeA,KAAAA,OAAO,QAAQ,GAAA,CAAI,QAAA;AAAA,UAAA;AAAA;QAWpN,OAAOC,MAAA,KAAA;AAAA,QACR,MAAK;AAAA,QACL,UAAS;AAAA,MAAA,GACDA,MAAA,UAAA,EAAWC,KAAAA,QAAM,CAAA,SAAA,CAAA,GAAA;AAAA,QACxB,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,MAAM,MAAM;AAAA,MAAA;QAGZC,KAAAA,OAAO,wBADfL,mBAKM,OAAA;AAAA;UAHH,OAAKM,eAAEJ,KAAAA,OAAO,aAAa;AAAA,QAAA;UAE5BK,WAAuB,KAAA,QAAA,SAAA;AAAA,QAAA;QAEzBC,mBAEO,QAAA;AAAA,UAFA,OAAKF,eAAA,CAAGJ,KAAAA,OAAO,aAAa,QAAA,YAAY,CAAA;AAAA,QAAA;UAC7CK,WAAQ,KAAA,QAAA,SAAA;AAAA,QAAA;QAGF,QAAA,0BADRP,mBAYS,UAAA;AAAA;UAVN,OAAKM,eAAEJ,KAAAA,OAAO,WAAW;AAAA,UACzB,UAAU,QAAA;AAAA,UACX,MAAK;AAAA,UACJ,6DAAY,KAAI,aAAA,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;UAEjBO,YAIE,SAAA;AAAA,YAHC,OAAKH,eAAEJ,KAAAA,OAAO,gBAAgB;AAAA,YAC9B,MAAM,QAAA,SAAI,OAAA,KAAA;AAAA,YACV,MAAM,QAAA;AAAA,UAAA;;;;;;"}
|
|
@@ -2,7 +2,7 @@ import { Color } from './utils.js';
|
|
|
2
2
|
type __VLS_Props = {
|
|
3
3
|
color: Color;
|
|
4
4
|
};
|
|
5
|
-
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
5
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
6
|
"update:board": (event: {
|
|
7
7
|
saturation: number;
|
|
8
8
|
brightness: number;
|