@rotki/ui-library 2.12.2 → 2.13.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.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
|
@@ -1,38 +1,32 @@
|
|
|
1
|
-
import { defineComponent, useSlots,
|
|
2
|
-
import { get } from "@vueuse/shared";
|
|
1
|
+
import { defineComponent, useModel, useSlots, useCssModule, computed, Fragment, isVNode, openBlock, createElementBlock, mergeProps, unref, renderList, createBlock, resolveDynamicComponent, normalizeClass, mergeModels } from "vue";
|
|
2
|
+
import { get, set } from "@vueuse/shared";
|
|
3
3
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
4
4
|
...{
|
|
5
5
|
name: "RuiButtonGroup",
|
|
6
6
|
inheritAttrs: false
|
|
7
7
|
},
|
|
8
8
|
__name: "RuiButtonGroup",
|
|
9
|
-
props: {
|
|
9
|
+
props: /* @__PURE__ */ mergeModels({
|
|
10
10
|
vertical: { type: Boolean, default: false },
|
|
11
|
-
color: {
|
|
12
|
-
activeColor: {
|
|
11
|
+
color: {},
|
|
12
|
+
activeColor: {},
|
|
13
13
|
variant: { default: "default" },
|
|
14
|
-
size: {
|
|
15
|
-
gap: {
|
|
14
|
+
size: {},
|
|
15
|
+
gap: {},
|
|
16
16
|
required: { type: Boolean, default: false },
|
|
17
|
-
modelValue: { default: void 0 },
|
|
18
17
|
disabled: { type: Boolean, default: false }
|
|
19
|
-
},
|
|
18
|
+
}, {
|
|
19
|
+
"modelValue": {},
|
|
20
|
+
"modelModifiers": {}
|
|
21
|
+
}),
|
|
20
22
|
emits: ["update:modelValue"],
|
|
21
|
-
setup(__props
|
|
22
|
-
const
|
|
23
|
-
const emit = __emit;
|
|
23
|
+
setup(__props) {
|
|
24
|
+
const modelValue = useModel(__props, "modelValue");
|
|
24
25
|
const slots = useSlots();
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (item.type === Fragment && Array.isArray(item.children) && item.children.length > 0)
|
|
29
|
-
return getChildren(item.children.filter(isVNode));
|
|
30
|
-
return [item];
|
|
31
|
-
}).flat();
|
|
32
|
-
}
|
|
26
|
+
const css = useCssModule();
|
|
27
|
+
const colorClass = computed(() => __props.color ? css[__props.color] : void 0);
|
|
28
|
+
const variantClass = computed(() => __props.variant ? css[__props.variant] : void 0);
|
|
33
29
|
const children = computed(() => {
|
|
34
|
-
const isDisabled = get(disabled);
|
|
35
|
-
const rootColor = get(color);
|
|
36
30
|
const selectedValue = get(modelValue);
|
|
37
31
|
const slotContent = slots.default?.() ?? [];
|
|
38
32
|
const children2 = getChildren(slotContent);
|
|
@@ -42,15 +36,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
42
36
|
...child.props,
|
|
43
37
|
active: activeItem(value ?? i, selectedValue)
|
|
44
38
|
};
|
|
45
|
-
if (
|
|
39
|
+
if (__props.disabled)
|
|
46
40
|
child.props.disabled = true;
|
|
47
|
-
if (
|
|
48
|
-
child.props.color =
|
|
49
|
-
if (child.props.active &&
|
|
50
|
-
child.props.color =
|
|
41
|
+
if (__props.color)
|
|
42
|
+
child.props.color = __props.color;
|
|
43
|
+
if (child.props.active && __props.activeColor)
|
|
44
|
+
child.props.color = __props.activeColor;
|
|
51
45
|
return child;
|
|
52
46
|
});
|
|
53
47
|
});
|
|
48
|
+
function getChildren(children2) {
|
|
49
|
+
return children2.flatMap((item) => {
|
|
50
|
+
if (item.type === Fragment && Array.isArray(item.children) && item.children.length > 0)
|
|
51
|
+
return getChildren(item.children.filter(isVNode));
|
|
52
|
+
return [item];
|
|
53
|
+
}).flat();
|
|
54
|
+
}
|
|
54
55
|
function activeItem(id, selected) {
|
|
55
56
|
if (Array.isArray(selected))
|
|
56
57
|
return selected.includes(id);
|
|
@@ -58,27 +59,27 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
58
59
|
}
|
|
59
60
|
function onClick(id) {
|
|
60
61
|
const selected = get(modelValue);
|
|
61
|
-
const mandatory =
|
|
62
|
+
const mandatory = __props.required;
|
|
62
63
|
if (Array.isArray(selected)) {
|
|
63
64
|
const index = selected.indexOf(id);
|
|
64
65
|
if (index >= 0) {
|
|
65
|
-
if (!mandatory || selected.length !== 1)
|
|
66
|
-
|
|
66
|
+
if (!mandatory || selected.length !== 1) {
|
|
67
|
+
set(
|
|
68
|
+
modelValue,
|
|
69
|
+
selected.filter((_, i) => i !== index)
|
|
70
|
+
);
|
|
71
|
+
} else {
|
|
72
|
+
set(modelValue, [...selected]);
|
|
73
|
+
}
|
|
67
74
|
} else {
|
|
68
|
-
selected
|
|
75
|
+
set(modelValue, [...selected, id]);
|
|
69
76
|
}
|
|
70
|
-
emit("update:modelValue", selected);
|
|
71
77
|
} else if (mandatory) {
|
|
72
|
-
|
|
78
|
+
set(modelValue, id);
|
|
73
79
|
} else {
|
|
74
|
-
|
|
80
|
+
set(modelValue, activeItem(id, selected) ? void 0 : id);
|
|
75
81
|
}
|
|
76
82
|
}
|
|
77
|
-
const css = useCssModule();
|
|
78
|
-
const colorClass = computed(() => props.color ? css[props.color] : void 0);
|
|
79
|
-
const variantClass = computed(
|
|
80
|
-
() => props.variant ? css[props.variant] : void 0
|
|
81
|
-
);
|
|
82
83
|
return (_ctx, _cache) => {
|
|
83
84
|
return openBlock(), createElementBlock("div", mergeProps({
|
|
84
85
|
class: [
|
|
@@ -97,8 +98,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
97
98
|
return openBlock(), createBlock(resolveDynamicComponent(child), {
|
|
98
99
|
key: i,
|
|
99
100
|
class: normalizeClass(unref(css).button),
|
|
100
|
-
size:
|
|
101
|
-
variant:
|
|
101
|
+
size: __props.size,
|
|
102
|
+
variant: __props.variant,
|
|
102
103
|
"onUpdate:modelValue": ($event) => onClick($event ?? i)
|
|
103
104
|
}, null, 8, ["class", "size", "variant", "onUpdate:modelValue"]);
|
|
104
105
|
}), 128))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiButtonGroup.vue2.js","sources":["../../../../src/components/buttons/button-group/RuiButtonGroup.vue"],"sourcesContent":["<script lang=\"ts\" generic=\"T = undefined\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport { Fragment, isVNode } from 'vue';\n\nexport interface Props
|
|
1
|
+
{"version":3,"file":"RuiButtonGroup.vue2.js","sources":["../../../../src/components/buttons/button-group/RuiButtonGroup.vue"],"sourcesContent":["<script lang=\"ts\" generic=\"T = undefined\" setup>\nimport type { ContextColorsType } from '@/consts/colors';\nimport { Fragment, isVNode } from 'vue';\n\nexport interface Props {\n vertical?: boolean;\n color?: ContextColorsType;\n activeColor?: ContextColorsType;\n variant?: 'default' | 'outlined' | 'text';\n size?: 'sm' | 'lg';\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();\nconst css = useCssModule();\n\nconst colorClass = computed<string | undefined>(() => (color ? css[color] : undefined));\nconst variantClass = computed<string | undefined>(() => (variant ? css[variant] : undefined));\n\nconst children = computed<VNode[]>(() => {\n // if group is disabled, disable child buttons\n const selectedValue: T | T[] | undefined = get(modelValue);\n\n const slotContent = slots.default?.() ?? [];\n\n // When using dynamic content with v-for the slot content is a single fragment\n // containing the children components.\n const children = getChildren(slotContent);\n\n return children.map((child, i) => {\n // child props are in kebab-case it seems\n const value = child.props?.['model-value'];\n\n child.props = {\n ...child.props,\n active: activeItem(value ?? i, selectedValue),\n };\n\n if (disabled)\n child.props.disabled = true;\n\n // if given root color, use it\n if (color)\n child.props.color = color;\n\n if (child.props.active && activeColor)\n child.props.color = activeColor;\n\n return child;\n });\n});\n\n// When using dynamic content with v-for the slot content can contain fragment,\n// Go through the fragment and always return RuiButton only\nfunction getChildren(children: VNode[]): VNode[] {\n return children\n .flatMap((item) => {\n if (item.type === Fragment && Array.isArray(item.children) && item.children.length > 0)\n return getChildren(item.children.filter(isVNode));\n\n return [item];\n })\n .flat();\n}\n\nfunction activeItem(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 const mandatory = required;\n if (Array.isArray(selected)) {\n const index = selected.indexOf(id);\n if (index >= 0) {\n if (!mandatory || selected.length !== 1) {\n set(\n modelValue,\n selected.filter((_, i) => i !== index),\n );\n }\n else {\n set(modelValue, [...selected]);\n }\n }\n else {\n set(modelValue, [...selected, id]);\n }\n }\n else if (mandatory) {\n set(modelValue, id);\n }\n else {\n set(modelValue, activeItem(id, selected) ? undefined : id);\n }\n}\n</script>\n\n<template>\n <div\n :class=\"[\n css.wrapper,\n colorClass,\n variantClass,\n {\n [css.wrapper__vertical ?? '']: vertical,\n [css.wrapper__horizontal ?? '']: !vertical,\n [css.separated ?? '']: !!gap,\n [css[`separated__${gap}`] ?? '']: !!gap,\n },\n ]\"\n v-bind=\"$attrs\"\n >\n <Component\n :is=\"child\"\n v-for=\"(child, i) in children\"\n :key=\"i\"\n :class=\"css.button\"\n :size=\"size\"\n :variant=\"variant\"\n @update:model-value=\"onClick($event ?? i)\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" module>\n@use '@/styles/colors.scss' as c;\n\n.wrapper {\n @apply inline-flex rounded divide-x divide-rui-grey-400;\n @apply outline outline-1 outline-transparent outline-offset-[-1px];\n\n &:not(.separated) {\n .button {\n @apply rounded-none;\n }\n }\n\n &__vertical {\n @apply inline-flex flex-col items-start divide-x-0 divide-y;\n\n .button {\n @apply w-full;\n }\n\n &:not(.separated) .button {\n &:first-child {\n @apply rounded-t;\n }\n\n &:last-child {\n @apply rounded-b;\n }\n }\n }\n\n &__horizontal {\n &:not(.separated) .button {\n &:first-child {\n @apply rounded-l;\n }\n\n &:last-child {\n @apply rounded-r;\n }\n }\n }\n\n &.separated {\n @apply divide-x-0 divide-y-0 outline-0;\n &__sm {\n @apply gap-2;\n }\n\n &__md {\n @apply gap-4;\n }\n\n &__lg {\n @apply gap-6;\n }\n\n .button {\n @apply outline-1;\n }\n }\n\n .button {\n @apply border-0 outline-0;\n\n &:focus {\n @apply z-[1];\n }\n }\n\n @each $color in c.$context-colors {\n &.#{$color} {\n @apply divide-rui-#{$color}-darker;\n\n &.outlined,\n &.text {\n @apply divide-rui-#{$color}/[0.5];\n }\n\n &.outlined {\n @apply outline-rui-#{$color}/[0.5];\n }\n }\n }\n\n &.outlined {\n @apply outline-rui-text divide-rui-text;\n }\n}\n</style>\n"],"names":["_useModel","children","_openBlock","_createElementBlock","_mergeProps","_unref","$attrs","_Fragment","_renderList","_createBlock","_resolveDynamicComponent","_normalizeClass"],"mappings":"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"}
|
|
@@ -25,11 +25,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {
|
|
|
25
25
|
"onUpdate:pages"?: ((args_0: {
|
|
26
26
|
title: string;
|
|
27
27
|
}[]) => any) | undefined;
|
|
28
|
-
}>, {
|
|
29
|
-
maxDate: Date | number;
|
|
30
|
-
minDate: Date | number;
|
|
31
|
-
allowEmpty: boolean;
|
|
32
|
-
borderless: boolean;
|
|
33
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
28
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
34
29
|
declare const _default: typeof __VLS_export;
|
|
35
30
|
export default _default;
|
|
@@ -11,8 +11,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
11
11
|
},
|
|
12
12
|
__name: "RuiCalendar",
|
|
13
13
|
props: /* @__PURE__ */ mergeModels({
|
|
14
|
-
maxDate: {
|
|
15
|
-
minDate: {
|
|
14
|
+
maxDate: {},
|
|
15
|
+
minDate: {},
|
|
16
16
|
allowEmpty: { type: Boolean, default: false },
|
|
17
17
|
borderless: { type: Boolean, default: false }
|
|
18
18
|
}, {
|
|
@@ -25,7 +25,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
25
25
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
26
26
|
const model = useModel(__props, "modelValue");
|
|
27
27
|
const isMenuOpen = useModel(__props, "menu-open");
|
|
28
|
-
const props = __props;
|
|
29
28
|
const emit = __emit;
|
|
30
29
|
const currentDate = ref(isDefined(model) ? new Date(get(model)) : /* @__PURE__ */ new Date());
|
|
31
30
|
const selectedDate = ref(isDefined(model) ? new Date(get(model)) : void 0);
|
|
@@ -40,10 +39,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
40
39
|
viewMonth,
|
|
41
40
|
viewYear,
|
|
42
41
|
selectedDate,
|
|
43
|
-
maxDate: computed(() =>
|
|
44
|
-
minDate: computed(() =>
|
|
42
|
+
maxDate: computed(() => __props.maxDate ? new Date(__props.maxDate) : void 0),
|
|
43
|
+
minDate: computed(() => __props.minDate ? new Date(__props.minDate) : void 0),
|
|
45
44
|
isDark,
|
|
46
|
-
allowEmpty:
|
|
45
|
+
allowEmpty: __props.allowEmpty
|
|
47
46
|
});
|
|
48
47
|
function moveMonth(delta) {
|
|
49
48
|
let newMonth = get(viewMonth) + delta;
|
|
@@ -81,7 +80,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
81
80
|
}
|
|
82
81
|
}
|
|
83
82
|
watch([selectedDate], ([date]) => {
|
|
84
|
-
if (!date && !
|
|
83
|
+
if (!date && !__props.allowEmpty)
|
|
85
84
|
return;
|
|
86
85
|
if (date) {
|
|
87
86
|
set(model, new Date(date));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiCalendar.vue.js","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 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
|
|
1
|
+
{"version":3,"file":"RuiCalendar.vue.js","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 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 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\n class=\"rui-calendar\"\n :class=\"{ dark: isDark, bordered: !borderless }\"\n >\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\n<style lang=\"scss\">\n.rui-calendar {\n @apply w-[18.75rem] bg-white overflow-hidden;\n\n &.bordered {\n @apply rounded-md shadow-sm border border-rui-grey-200;\n }\n\n &.dark {\n @apply bg-rui-grey-900;\n\n &.bordered {\n @apply border-rui-grey-800;\n }\n }\n}\n</style>\n"],"names":["_useModel","_createElementBlock","_normalizeClass","_unref","_createVNode"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _sfc_main from "./RuiCalendarGrid.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const RuiCalendarGrid = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
4
|
+
const RuiCalendarGrid = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4ddd1ff1"]]);
|
|
5
5
|
export {
|
|
6
6
|
RuiCalendarGrid as default
|
|
7
7
|
};
|
|
@@ -21,7 +21,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
21
21
|
emits: ["update:modelValue"],
|
|
22
22
|
setup(__props) {
|
|
23
23
|
const model = useModel(__props, "modelValue");
|
|
24
|
-
const props = __props;
|
|
25
24
|
const calendarState = inject(CalendarStateSymbol);
|
|
26
25
|
function createDateKey(date) {
|
|
27
26
|
return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}`;
|
|
@@ -43,8 +42,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
43
42
|
};
|
|
44
43
|
}
|
|
45
44
|
function calculateCalendarDays() {
|
|
46
|
-
const firstDayOfMonth = new Date(
|
|
47
|
-
const lastDayOfMonth = new Date(
|
|
45
|
+
const firstDayOfMonth = new Date(__props.viewYear, __props.viewMonth, 1);
|
|
46
|
+
const lastDayOfMonth = new Date(__props.viewYear, __props.viewMonth + 1, 0);
|
|
48
47
|
const daysInMonth = lastDayOfMonth.getDate();
|
|
49
48
|
const startingDayOfWeek = firstDayOfMonth.getDay();
|
|
50
49
|
const { maxDate, minDate } = calendarState;
|
|
@@ -53,20 +52,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
53
52
|
const minDateValue = isDefined(minDate) ? get(minDate) : null;
|
|
54
53
|
const result = [];
|
|
55
54
|
if (startingDayOfWeek > 0) {
|
|
56
|
-
const prevMonthLastDay = new Date(
|
|
55
|
+
const prevMonthLastDay = new Date(__props.viewYear, __props.viewMonth, 0).getDate();
|
|
57
56
|
for (let i = startingDayOfWeek - 1; i >= 0; i--) {
|
|
58
|
-
const date = new Date(
|
|
57
|
+
const date = new Date(__props.viewYear, __props.viewMonth - 1, prevMonthLastDay - i, 12, 0, 0, 0);
|
|
59
58
|
result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));
|
|
60
59
|
}
|
|
61
60
|
}
|
|
62
61
|
for (let i = 1; i <= daysInMonth; i++) {
|
|
63
|
-
const date = new Date(
|
|
62
|
+
const date = new Date(__props.viewYear, __props.viewMonth, i, 12, 0, 0, 0);
|
|
64
63
|
result.push(createDayData(date, true, modelValue, maxDateValue, minDateValue));
|
|
65
64
|
}
|
|
66
65
|
const totalDaysSoFar = result.length;
|
|
67
66
|
const daysToAdd = 42 - totalDaysSoFar;
|
|
68
67
|
for (let i = 1; i <= daysToAdd; i++) {
|
|
69
|
-
const date = new Date(
|
|
68
|
+
const date = new Date(__props.viewYear, __props.viewMonth + 1, i, 12, 0, 0, 0);
|
|
70
69
|
result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));
|
|
71
70
|
}
|
|
72
71
|
set(calendarDays, result);
|
|
@@ -81,16 +80,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
81
80
|
function isDateSelectedCheck(date, modelValue) {
|
|
82
81
|
return date.getFullYear() === modelValue.getFullYear() && date.getMonth() === modelValue.getMonth() && date.getDate() === modelValue.getDate();
|
|
83
82
|
}
|
|
84
|
-
calculateCalendarDays();
|
|
85
|
-
watch([() => props.viewMonth, () => props.viewYear], () => {
|
|
86
|
-
calculateCalendarDays();
|
|
87
|
-
});
|
|
88
|
-
watch(model, () => {
|
|
89
|
-
calculateCalendarDays();
|
|
90
|
-
});
|
|
91
|
-
watch([() => calendarState.maxDate, () => calendarState.minDate], () => {
|
|
92
|
-
calculateCalendarDays();
|
|
93
|
-
}, { deep: true });
|
|
94
83
|
function selectDate(dayData) {
|
|
95
84
|
if (!dayData.isInRange)
|
|
96
85
|
return;
|
|
@@ -109,6 +98,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
109
98
|
}
|
|
110
99
|
set(model, updateModel);
|
|
111
100
|
}
|
|
101
|
+
calculateCalendarDays();
|
|
102
|
+
watch([() => __props.viewMonth, () => __props.viewYear], () => {
|
|
103
|
+
calculateCalendarDays();
|
|
104
|
+
});
|
|
105
|
+
watch(model, () => {
|
|
106
|
+
calculateCalendarDays();
|
|
107
|
+
});
|
|
108
|
+
watch(
|
|
109
|
+
[() => calendarState.maxDate, () => calendarState.minDate],
|
|
110
|
+
() => {
|
|
111
|
+
calculateCalendarDays();
|
|
112
|
+
}
|
|
113
|
+
);
|
|
112
114
|
return (_ctx, _cache) => {
|
|
113
115
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
114
116
|
createElementVNode("div", _hoisted_2, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiCalendarGrid.vue2.js","sources":["../../../src/components/calendar/RuiCalendarGrid.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { inject, ref, watch } from 'vue';\nimport { CalendarStateSymbol, getDaysOfWeek, type RuiCalendarState } from '@/components/calendar/state';\n\ndefineOptions({\n name: 'RuiCalendarGrid',\n inheritAttrs: false,\n});\n\nconst model = defineModel<Date | undefined>();\n\nconst props = defineProps<{\n viewMonth: number;\n viewYear: number;\n}>();\n\nconst calendarState = inject<RuiCalendarState>(CalendarStateSymbol) as RuiCalendarState;\n\n// Helper functions to reduce duplication\nfunction createDateKey(date: Date): string {\n return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;\n}\n\n// Pre-calculated constants\nconst daysOfWeek = getDaysOfWeek();\nconst today = new Date();\nconst todayKey = createDateKey(today);\n\n// Pre-calculated arrays for performance - using refs for better control\nconst calendarDays = ref<Array<{\n date: Date;\n isCurrentMonth: boolean;\n isInRange: boolean;\n isSelected: boolean;\n isToday: boolean;\n key: string;\n dayNumber: number;\n}>>([]);\n\nfunction createDayData(date: Date, isCurrentMonth: boolean, modelValue: Date | null | undefined, maxDateValue: Date | null, minDateValue: Date | null) {\n const key = createDateKey(date);\n return {\n date,\n isCurrentMonth,\n isInRange: isDateInRangeCheck(date, maxDateValue, minDateValue),\n isSelected: modelValue ? isDateSelectedCheck(date, modelValue) : false,\n isToday: key === todayKey,\n key,\n dayNumber: date.getDate(),\n };\n}\n\n// Pre-calculation functions using VueUse get/set\nfunction calculateCalendarDays() {\n const firstDayOfMonth = new Date(props.viewYear, props.viewMonth, 1);\n const lastDayOfMonth = new Date(props.viewYear, props.viewMonth + 1, 0);\n const daysInMonth = lastDayOfMonth.getDate();\n const startingDayOfWeek = firstDayOfMonth.getDay();\n\n const { maxDate, minDate } = calendarState;\n const modelValue = get(model);\n const maxDateValue = isDefined(maxDate) ? get(maxDate) : null;\n const minDateValue = isDefined(minDate) ? get(minDate) : null;\n\n const result = [];\n\n // Previous month days\n if (startingDayOfWeek > 0) {\n const prevMonthLastDay = new Date(props.viewYear, props.viewMonth, 0).getDate();\n for (let i = startingDayOfWeek - 1; i >= 0; i--) {\n const date = new Date(props.viewYear, props.viewMonth - 1, prevMonthLastDay - i, 12, 0, 0, 0);\n result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));\n }\n }\n\n // Current month days\n for (let i = 1; i <= daysInMonth; i++) {\n const date = new Date(props.viewYear, props.viewMonth, i, 12, 0, 0, 0);\n result.push(createDayData(date, true, modelValue, maxDateValue, minDateValue));\n }\n\n // Next month days\n const totalDaysSoFar = result.length;\n const daysToAdd = 42 - totalDaysSoFar;\n for (let i = 1; i <= daysToAdd; i++) {\n const date = new Date(props.viewYear, props.viewMonth + 1, i, 12, 0, 0, 0);\n result.push(createDayData(date, false, modelValue, maxDateValue, minDateValue));\n }\n\n set(calendarDays, result);\n}\n\nfunction isDateInRangeCheck(date: Date, maxDateValue: Date | null, minDateValue: Date | null): boolean {\n if (maxDateValue && date > maxDateValue)\n return false;\n if (minDateValue && date < minDateValue)\n return false;\n return true;\n}\n\nfunction isDateSelectedCheck(date: Date, modelValue: Date): boolean {\n return date.getFullYear() === modelValue.getFullYear()\n && date.getMonth() === modelValue.getMonth()\n && date.getDate() === modelValue.getDate();\n}\n\n// Initial calculation\ncalculateCalendarDays();\n\n// Watchers for recalculation only when needed\nwatch([() => props.viewMonth, () => props.viewYear], () => {\n calculateCalendarDays();\n});\n\nwatch(model, () => {\n calculateCalendarDays();\n});\n\nwatch([() => calendarState.maxDate, () => calendarState.minDate], () => {\n calculateCalendarDays();\n}, { deep: true });\n\nfunction selectDate(dayData: { date: Date; isInRange: boolean; isSelected: boolean }) {\n if (!dayData.isInRange)\n return;\n\n let updateModel: Date | undefined;\n\n if (dayData.isSelected && calendarState.allowEmpty) {\n updateModel = undefined;\n }\n else if (isDefined(model)) {\n const modelValue = get(model);\n const newDate = new Date(dayData.date);\n newDate.setHours(modelValue.getHours());\n newDate.setMinutes(modelValue.getMinutes());\n newDate.setSeconds(modelValue.getSeconds());\n updateModel = newDate;\n }\n else {\n updateModel = new Date(dayData.date);\n }\n set(model, updateModel);\n}\n</script>\n\n<template>\n <div class=\"calendar-grid\">\n <div class=\"calendar-weekdays\">\n <span\n v-for=\"day in daysOfWeek\"\n :key=\"day\"\n class=\"weekday-label\"\n >\n {{ day }}\n </span>\n </div>\n\n <div class=\"calendar-days\">\n <button\n v-for=\"dayData in get(calendarDays)\"\n :key=\"dayData.key\"\n type=\"button\"\n :data-id=\"dayData.key\"\n class=\"h-9 w-full flex items-center justify-center text-sm rounded-full mx-auto max-w-[2.25rem] transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50\"\n :class=\"[\n {\n 'bg-rui-primary text-white hover:bg-rui-primary/90 dark:hover:bg-rui-primary/90': dayData.isSelected,\n 'text-gray-400 dark:text-gray-600': !dayData.isCurrentMonth && !dayData.isSelected,\n 'text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700': dayData.isCurrentMonth && !dayData.isSelected && dayData.isInRange,\n 'opacity-50 cursor-not-allowed hover:bg-transparent': !dayData.isInRange,\n 'today-indicator': dayData.isToday && !dayData.isSelected,\n },\n ]\"\n :disabled=\"!dayData.isInRange\"\n @click.stop=\"selectDate(dayData)\"\n >\n {{ dayData.dayNumber }}\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>\n.calendar-grid {\n @apply w-full p-2 pt-0;\n}\n\n.calendar-weekdays {\n @apply grid grid-cols-7 pb-2;\n}\n\n.weekday-label {\n @apply py-2 text-xs font-medium text-center text-gray-500 dark:text-gray-400;\n}\n\n.calendar-days {\n @apply grid grid-cols-7 gap-0.5;\n}\n\n.today-indicator {\n @apply relative;\n\n &:after {\n content: '';\n @apply absolute size-1 rounded-full bottom-1 left-1/2 transform -translate-x-1/2 bg-rui-primary;\n }\n}\n</style>\n"],"names":["_useModel","_openBlock","_createElementBlock","_createElementVNode","_Fragment","_renderList","_unref","_withModifiers","_toDisplayString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RuiCalendarGrid.vue2.js","sources":["../../../src/components/calendar/RuiCalendarGrid.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { inject, ref, watch } from 'vue';\nimport {\n CalendarStateSymbol,\n getDaysOfWeek,\n type RuiCalendarState,\n} from '@/components/calendar/state';\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\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=\"calendar-grid\">\n <div class=\"calendar-weekdays\">\n <span\n v-for=\"day in daysOfWeek\"\n :key=\"day\"\n class=\"weekday-label\"\n >\n {{ day }}\n </span>\n </div>\n\n <div class=\"calendar-days\">\n <button\n v-for=\"dayData in get(calendarDays)\"\n :key=\"dayData.key\"\n type=\"button\"\n :data-id=\"dayData.key\"\n class=\"h-9 w-full flex items-center justify-center text-sm rounded-full mx-auto max-w-[2.25rem] transition-colors duration-150 ease-in-out border-none outline-none cursor-pointer focus:ring-2 focus:ring-rui-primary focus:ring-opacity-50\"\n :class=\"[\n {\n 'bg-rui-primary text-white hover:bg-rui-primary/90 dark:hover:bg-rui-primary/90':\n dayData.isSelected,\n 'text-gray-400 dark:text-gray-600': !dayData.isCurrentMonth && !dayData.isSelected,\n 'text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700':\n dayData.isCurrentMonth && !dayData.isSelected && dayData.isInRange,\n 'opacity-50 cursor-not-allowed hover:bg-transparent': !dayData.isInRange,\n 'today-indicator': dayData.isToday && !dayData.isSelected,\n },\n ]\"\n :disabled=\"!dayData.isInRange\"\n @click.stop=\"selectDate(dayData)\"\n >\n {{ dayData.dayNumber }}\n </button>\n </div>\n </div>\n</template>\n\n<style scoped>\n.calendar-grid {\n @apply w-full p-2 pt-0;\n}\n\n.calendar-weekdays {\n @apply grid grid-cols-7 pb-2;\n}\n\n.weekday-label {\n @apply py-2 text-xs font-medium text-center text-gray-500 dark:text-gray-400;\n}\n\n.calendar-days {\n @apply grid grid-cols-7 gap-0.5;\n}\n\n.today-indicator {\n @apply relative;\n\n &:after {\n content: '';\n @apply absolute size-1 rounded-full bottom-1 left-1/2 transform -translate-x-1/2 bg-rui-primary;\n }\n}\n</style>\n"],"names":["_useModel","_openBlock","_createElementBlock","_createElementVNode","_Fragment","_renderList","_unref","_withModifiers","_toDisplayString"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _sfc_main from "./RuiCalendarHeader.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const RuiCalendarHeader = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
4
|
+
const RuiCalendarHeader = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a104415a"]]);
|
|
5
5
|
export {
|
|
6
6
|
RuiCalendarHeader as default
|
|
7
7
|
};
|
|
@@ -22,7 +22,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
22
22
|
emits: /* @__PURE__ */ mergeModels(["prev-month", "next-month", "select-month"], ["update:menu-open"]),
|
|
23
23
|
setup(__props, { emit: __emit }) {
|
|
24
24
|
const isMenuOpen = useModel(__props, "menu-open");
|
|
25
|
-
const props = __props;
|
|
26
25
|
const emit = __emit;
|
|
27
26
|
const anchorEl = ref();
|
|
28
27
|
const calendarState = inject(CalendarStateSymbol);
|
|
@@ -31,7 +30,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
31
30
|
if (!isDefined(maxDate)) {
|
|
32
31
|
return true;
|
|
33
32
|
}
|
|
34
|
-
const date = new Date(
|
|
33
|
+
const date = new Date(__props.viewYear, __props.viewMonth);
|
|
35
34
|
return date.getTime() < get(maxDate).getTime();
|
|
36
35
|
});
|
|
37
36
|
const canGoToPrev = computed(() => {
|
|
@@ -39,7 +38,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
39
38
|
if (!isDefined(minDate)) {
|
|
40
39
|
return true;
|
|
41
40
|
}
|
|
42
|
-
const date = new Date(
|
|
41
|
+
const date = new Date(__props.viewYear, __props.viewMonth);
|
|
43
42
|
return date.getTime() > get(minDate).getTime();
|
|
44
43
|
});
|
|
45
44
|
function handleTitleClick(e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiCalendarHeader.vue2.js","sources":["../../../src/components/calendar/RuiCalendarHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { computed, inject, ref } from 'vue';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport {
|
|
1
|
+
{"version":3,"file":"RuiCalendarHeader.vue2.js","sources":["../../../src/components/calendar/RuiCalendarHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { get, isDefined, set } from '@vueuse/core';\nimport { computed, inject, ref } from 'vue';\nimport RuiButton from '@/components/buttons/button/RuiButton.vue';\nimport {\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 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=\"calendar-header\">\n <RuiButton\n type=\"button\"\n class=\"nav-button\"\n icon\n :disabled=\"!canGoToPrev\"\n variant=\"text\"\n @click.stop=\"emit('prev-month')\"\n >\n <RuiIcon\n name=\"lu-chevron-left\"\n size=\"20\"\n />\n </RuiButton>\n\n <h3\n class=\"header-title\"\n @click.stop=\"handleTitleClick($event)\"\n >\n {{ title }}\n <RuiIcon\n name=\"lu-chevron-down\"\n size=\"16\"\n class=\"ml-1\"\n />\n </h3>\n\n <RuiCalendarMenu\n v-model=\"isMenuOpen\"\n :anchor-el=\"anchorEl\"\n :view-month=\"viewMonth\"\n :view-year=\"viewYear\"\n @select=\"handleDateSelection($event)\"\n />\n\n <RuiButton\n type=\"button\"\n class=\"nav-button\"\n variant=\"text\"\n icon\n :disabled=\"!canGoToNext\"\n @click.stop=\"emit('next-month')\"\n >\n <RuiIcon\n name=\"lu-chevron-right\"\n size=\"20\"\n />\n </RuiButton>\n </div>\n</template>\n\n<style scoped>\n.calendar-header {\n @apply flex items-center justify-between px-4 py-3;\n}\n\n.header-title {\n @apply font-medium text-gray-800 dark:text-gray-200 flex items-center cursor-pointer pl-8;\n}\n\n.nav-button {\n @apply p-1 rounded-full text-gray-500 hover:text-rui-primary hover:bg-gray-100;\n @apply dark:text-gray-400 dark:hover:bg-gray-600 dark:hover:text-rui-primary;\n}\n</style>\n"],"names":["_useModel","_openBlock","_createElementBlock","_createVNode","_createElementVNode","_withModifiers","_createTextVNode","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAiBA,UAAM,aAAaA,kBAAqB,WAA+B;AAQvE,UAAM,OAAO;AAMb,UAAM,WAAW,IAAA;AAEjB,UAAM,gBAAgB,OAAyB,mBAAmB;AAElE,UAAM,cAAc,SAAkB,MAAM;AAC1C,YAAM,EAAE,YAAY;AACpB,UAAI,CAAC,UAAU,OAAO,GAAG;AACvB,eAAO;AAAA,MACT;AAEA,YAAM,OAAO,IAAI,KAAK,QAAA,UAAU,QAAA,SAAS;AACzC,aAAO,KAAK,QAAA,IAAY,IAAI,OAAO,EAAE,QAAA;AAAA,IACvC,CAAC;AAED,UAAM,cAAc,SAAkB,MAAM;AAC1C,YAAM,EAAE,YAAY;AACpB,UAAI,CAAC,UAAU,OAAO,GAAG;AACvB,eAAO;AAAA,MACT;AAEA,YAAM,OAAO,IAAI,KAAK,QAAA,UAAU,QAAA,SAAS;AACzC,aAAO,KAAK,QAAA,IAAY,IAAI,OAAO,EAAE,QAAA;AAAA,IACvC,CAAC;AAED,aAAS,iBAAiB,GAAgB;AACxC,UAAI,UAAW,EAAE,iBAAiC,MAAS;AAC3D,UAAI,YAAY,IAAI;AAAA,IACtB;AAEA,aAAS,oBAAoB,WAAqC;AAChE,WAAK,gBAAgB,SAAS;AAAA,IAChC;;AAIE,aAAAC,UAAA,GAAAC,mBAgDM,OAhDN,YAgDM;AAAA,QA/CJC,YAYY,WAAA;AAAA,UAXV,MAAK;AAAA,UACL,OAAM;AAAA,UACN,MAAA;AAAA,UACC,WAAW,YAAA;AAAA,UACZ,SAAQ;AAAA,UACP,6DAAY,KAAI,YAAA,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;2BAEjB,MAGE;AAAA,YAHFA,YAGE,SAAA;AAAA,cAFA,MAAK;AAAA,cACL,MAAK;AAAA,YAAA;;;;QAITC,mBAUK,MAAA;AAAA,UATH,OAAM;AAAA,UACL,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAC,cAAA,CAAA,WAAO,iBAAiB,MAAM,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;UAEjCC,gBAAAC,gBAAA,QAAA,KAAK,IAAG,KACX,CAAA;AAAA,UAAAJ,YAIE,SAAA;AAAA,YAHA,MAAK;AAAA,YACL,MAAK;AAAA,YACL,OAAM;AAAA,UAAA;;QAIVA,YAME,iBAAA;AAAA,sBALS,WAAA;AAAA,uEAAA,WAAU,QAAA;AAAA,UAClB,aAAW,SAAA;AAAA,UACX,cAAY,QAAA;AAAA,UACZ,aAAW,QAAA;AAAA,UACX,UAAM,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,oBAAoB,MAAM;AAAA,QAAA;QAGrCA,YAYY,WAAA;AAAA,UAXV,MAAK;AAAA,UACL,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,MAAA;AAAA,UACC,WAAW,YAAA;AAAA,UACX,6DAAY,KAAI,YAAA,GAAA,CAAA,MAAA,CAAA;AAAA,QAAA;2BAEjB,MAGE;AAAA,YAHFA,YAGE,SAAA;AAAA,cAFA,MAAK;AAAA,cACL,MAAK;AAAA,YAAA;;;;;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _sfc_main from "./RuiCalendarMenu.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const RuiCalendarMenu = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
4
|
+
const RuiCalendarMenu = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-764fe061"]]);
|
|
5
5
|
export {
|
|
6
6
|
RuiCalendarMenu as default
|
|
7
7
|
};
|