@rotki/ui-library 2.12.1 → 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 +7 -17
- 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 +7 -8
- 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 +20 -18
- 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 +3 -4
- 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 +48 -40
- 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 +1 -1
- 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 +19 -19
- 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 +17 -14
- package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -1
- package/dist/components/color-picker/RuiColorInput.vue.js +9 -7
- 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 +23 -14
- 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 +75 -79
- package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -1
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js +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 +6 -3
- package/dist/components/divider/RuiDivider.vue.js.map +1 -1
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +10 -1138
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +153 -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 +32 -32
- package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -1
- package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +2 -2
- package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +19 -22
- 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 +4 -2
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +13 -16
- 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 +7 -13
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +10 -9
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -1
- package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +10 -785
- package/dist/components/forms/select/RuiMenuSelect.vue2.js +60 -56
- package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -1
- package/dist/components/forms/select/RuiSimpleSelect.vue.d.ts +11 -10
- package/dist/components/forms/select/RuiSimpleSelect.vue2.js +21 -26
- 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 +45 -48
- 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 +22 -21
- 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 +47 -83
- package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -1
- package/dist/components/forms/text-field/RuiTextField.vue.d.ts +10 -30
- package/dist/components/forms/text-field/RuiTextField.vue2.js +36 -67
- 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 +11 -14
- package/dist/components/icons/RuiIcon.vue2.js.map +1 -1
- package/dist/components/index.d.ts +4 -4
- package/dist/components/loaders/RuiSkeletonBase.vue.d.ts +1 -3
- package/dist/components/loaders/RuiSkeletonBase.vue2.js +2 -2
- 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 +2 -2
- 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 +13 -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 +22 -27
- package/dist/components/overlays/dialog/RuiDialog.vue2.js +90 -67
- 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 +71 -78
- package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -1
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +23 -30
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +78 -49
- 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 +27 -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 +16 -9
- 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 +33 -26
- 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 +39 -36
- 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 +2 -2
- 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 +2 -2
- 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 +196 -601
- 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 +4 -2
- 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 +20 -20
- 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 +27 -19
- 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 +84 -52
- 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 +3 -2
- package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -1
- package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +2 -5
- 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 +88 -38
- 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/icons.js +1 -1
- package/dist/composables/icons.js.map +1 -1
- package/dist/composables/popper.js +63 -49
- 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 +5 -21
- 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.d.ts +15 -15
- package/dist/icons/icons_1.js +123 -123
- package/dist/icons/icons_1.js.map +1 -1
- package/dist/icons/icons_2.d.ts +46 -46
- package/dist/icons/icons_2.js +301 -301
- package/dist/icons/icons_2.js.map +1 -1
- package/dist/icons/icons_3.d.ts +43 -43
- package/dist/icons/icons_3.js +252 -252
- package/dist/icons/icons_3.js.map +1 -1
- package/dist/icons/icons_4.d.ts +72 -2
- package/dist/icons/icons_4.js +368 -18
- 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 +105 -42
- 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/vite-plugin/index.js +4 -4
- package/dist/vite-plugin/index.js.map +1 -1
- package/dist/vite-plugin/scanner.js +3 -3
- package/dist/vite-plugin/scanner.js.map +1 -1
- package/dist/web-types.json +390 -371
- package/package.json +47 -44
- 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,18 +1,17 @@
|
|
|
1
|
-
import { defineComponent,
|
|
1
|
+
import { defineComponent, useModel, ref, useTemplateRef, toRef, computed, watch, openBlock, createElementBlock, withKeys, withModifiers, unref, createElementVNode, normalizeClass, renderSlot, normalizeProps, guardReactiveProps, createBlock, Teleport, createVNode, TransitionGroup, withCtx, mergeProps, createCommentVNode, mergeModels, nextTick } from "vue";
|
|
2
2
|
import _sfc_main$1 from "../../helpers/RuiFormTextDetail.vue.js";
|
|
3
3
|
import { usePopper } from "../../../composables/popper.js";
|
|
4
|
-
import { useElementSize, onClickOutside } from "@vueuse/core";
|
|
5
|
-
import { set, get } from "@vueuse/shared";
|
|
6
4
|
import { useFormTextDetail } from "../../../utils/form-text-detail.js";
|
|
7
|
-
|
|
5
|
+
import { useElementSize, onClickOutside } from "@vueuse/core";
|
|
6
|
+
import { get, set } from "@vueuse/shared";
|
|
7
|
+
const _hoisted_1 = ["data-menu-disabled", "aria-expanded"];
|
|
8
8
|
const FOCUSABLE_ELEMENTS_SELECTOR = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
|
|
9
9
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
10
10
|
...{
|
|
11
11
|
name: "RuiMenu"
|
|
12
12
|
},
|
|
13
13
|
__name: "RuiMenu",
|
|
14
|
-
props: {
|
|
15
|
-
modelValue: { type: Boolean, default: false },
|
|
14
|
+
props: /* @__PURE__ */ mergeModels({
|
|
16
15
|
openOnHover: { type: Boolean, default: false },
|
|
17
16
|
fullWidth: { type: Boolean, default: false },
|
|
18
17
|
disabled: { type: Boolean, default: false },
|
|
@@ -23,32 +22,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
23
22
|
menuClass: { default: "" },
|
|
24
23
|
closeOnContentClick: { type: Boolean, default: false },
|
|
25
24
|
persistOnActivatorClick: { type: Boolean, default: false },
|
|
26
|
-
hint: {
|
|
25
|
+
hint: {},
|
|
27
26
|
errorMessages: { default: () => [] },
|
|
28
27
|
successMessages: { default: () => [] },
|
|
29
|
-
showDetails: { type: Boolean },
|
|
30
|
-
dense: { type: Boolean },
|
|
28
|
+
showDetails: { type: Boolean, default: false },
|
|
29
|
+
dense: { type: Boolean, default: false },
|
|
31
30
|
persistent: { type: Boolean, default: false },
|
|
32
31
|
disableAutoFocus: { type: Boolean, default: false }
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
popper,
|
|
43
|
-
disabled,
|
|
44
|
-
persistOnActivatorClick,
|
|
45
|
-
closeOnContentClick,
|
|
46
|
-
openOnHover,
|
|
47
|
-
errorMessages,
|
|
48
|
-
successMessages,
|
|
49
|
-
persistent,
|
|
50
|
-
disableAutoFocus
|
|
51
|
-
} = toRefs(props);
|
|
32
|
+
}, {
|
|
33
|
+
"modelValue": { type: Boolean, ...{ default: false } },
|
|
34
|
+
"modelModifiers": {}
|
|
35
|
+
}),
|
|
36
|
+
emits: ["update:modelValue"],
|
|
37
|
+
setup(__props) {
|
|
38
|
+
const modelValue = useModel(__props, "modelValue");
|
|
39
|
+
const click = ref(false);
|
|
40
|
+
const menuContent = useTemplateRef("menuContent");
|
|
52
41
|
const {
|
|
53
42
|
reference: activator,
|
|
54
43
|
popper: menu,
|
|
@@ -60,12 +49,39 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
60
49
|
onClose,
|
|
61
50
|
onPopperLeave,
|
|
62
51
|
updatePopper
|
|
63
|
-
} = usePopper(
|
|
52
|
+
} = usePopper(
|
|
53
|
+
toRef(() => __props.popper),
|
|
54
|
+
toRef(() => __props.disabled),
|
|
55
|
+
toRef(() => __props.openDelay),
|
|
56
|
+
toRef(() => __props.closeDelay)
|
|
57
|
+
);
|
|
64
58
|
const { width } = useElementSize(activator);
|
|
65
|
-
const
|
|
66
|
-
|
|
59
|
+
const { hasError, hasSuccess } = useFormTextDetail(
|
|
60
|
+
toRef(() => __props.errorMessages),
|
|
61
|
+
toRef(() => __props.successMessages)
|
|
62
|
+
);
|
|
63
|
+
const baseMenuAttrs = computed(() => {
|
|
64
|
+
if (__props.disabled)
|
|
65
|
+
return {};
|
|
66
|
+
const clickVal = get(click);
|
|
67
|
+
return {
|
|
68
|
+
onMouseover: () => {
|
|
69
|
+
if (__props.openOnHover)
|
|
70
|
+
onOpen();
|
|
71
|
+
},
|
|
72
|
+
onMouseleave: () => {
|
|
73
|
+
if (__props.openOnHover && !clickVal)
|
|
74
|
+
onClose();
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
const menuAttrs = computed(() => {
|
|
79
|
+
if (__props.disabled)
|
|
80
|
+
return {};
|
|
81
|
+
return { ...get(baseMenuAttrs), onClick: checkClick };
|
|
82
|
+
});
|
|
67
83
|
function focusMenu() {
|
|
68
|
-
if (
|
|
84
|
+
if (__props.disableAutoFocus)
|
|
69
85
|
return;
|
|
70
86
|
nextTick(() => {
|
|
71
87
|
const content = get(menuContent);
|
|
@@ -79,13 +95,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
79
95
|
return;
|
|
80
96
|
onClose();
|
|
81
97
|
set(click, false);
|
|
82
|
-
if (!
|
|
98
|
+
if (!__props.disableAutoFocus) {
|
|
83
99
|
nextTick(() => {
|
|
84
100
|
const activatorEl = get(activator);
|
|
85
101
|
if (activatorEl) {
|
|
86
|
-
const focusableEl = activatorEl.querySelector(
|
|
87
|
-
FOCUSABLE_ELEMENTS_SELECTOR
|
|
88
|
-
);
|
|
102
|
+
const focusableEl = activatorEl.querySelector(FOCUSABLE_ELEMENTS_SELECTOR);
|
|
89
103
|
if (focusableEl) {
|
|
90
104
|
focusableEl.focus();
|
|
91
105
|
}
|
|
@@ -95,7 +109,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
95
109
|
}
|
|
96
110
|
function checkClick() {
|
|
97
111
|
if (get(open) && get(click)) {
|
|
98
|
-
if (!
|
|
112
|
+
if (!__props.persistOnActivatorClick)
|
|
99
113
|
onLeave();
|
|
100
114
|
} else {
|
|
101
115
|
onOpen();
|
|
@@ -103,6 +117,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
103
117
|
}
|
|
104
118
|
}
|
|
105
119
|
watch(modelValue, (value) => {
|
|
120
|
+
if (get(open) === value)
|
|
121
|
+
return;
|
|
106
122
|
if (value) {
|
|
107
123
|
onOpen();
|
|
108
124
|
set(click, true);
|
|
@@ -111,56 +127,37 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
111
127
|
}
|
|
112
128
|
});
|
|
113
129
|
watch(open, (open2) => {
|
|
114
|
-
|
|
130
|
+
set(modelValue, open2);
|
|
115
131
|
if (open2) {
|
|
116
132
|
focusMenu();
|
|
117
133
|
}
|
|
118
134
|
});
|
|
119
|
-
onClickOutside(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
const openOnHoverVal = get(openOnHover);
|
|
127
|
-
const clickVal = get(click);
|
|
128
|
-
return {
|
|
129
|
-
onMouseover: () => {
|
|
130
|
-
if (openOnHoverVal)
|
|
131
|
-
onOpen();
|
|
132
|
-
},
|
|
133
|
-
onMouseleave: () => {
|
|
134
|
-
if (openOnHoverVal && !clickVal)
|
|
135
|
-
onClose();
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
});
|
|
139
|
-
const menuAttrs = computed(() => {
|
|
140
|
-
if (get(disabled))
|
|
141
|
-
return {};
|
|
142
|
-
return { ...get(baseMenuAttrs), onClick: checkClick };
|
|
143
|
-
});
|
|
144
|
-
const { hasError, hasSuccess } = useFormTextDetail(
|
|
145
|
-
errorMessages,
|
|
146
|
-
successMessages
|
|
135
|
+
onClickOutside(
|
|
136
|
+
menu,
|
|
137
|
+
() => {
|
|
138
|
+
if (get(open) && !__props.persistent)
|
|
139
|
+
onLeave();
|
|
140
|
+
},
|
|
141
|
+
{ ignore: [activator] }
|
|
147
142
|
);
|
|
148
143
|
return (_ctx, _cache) => {
|
|
149
144
|
return openBlock(), createElementBlock("div", {
|
|
150
145
|
onKeydown: [
|
|
151
146
|
_cache[5] || (_cache[5] = withKeys(withModifiers(($event) => onLeave(), ["stop"]), ["esc"])),
|
|
152
|
-
_cache[6] || (_cache[6] = withKeys(($event) => !
|
|
147
|
+
_cache[6] || (_cache[6] = withKeys(($event) => !__props.disableAutoFocus && unref(open) ? void 0 : null, ["tab"]))
|
|
153
148
|
]
|
|
154
149
|
}, [
|
|
155
150
|
createElementVNode("div", {
|
|
156
151
|
ref_key: "activator",
|
|
157
152
|
ref: activator,
|
|
158
153
|
class: normalizeClass([_ctx.$style.wrapper, __props.wrapperClass, { "w-full": __props.fullWidth }]),
|
|
159
|
-
"data-menu-disabled":
|
|
154
|
+
"data-menu-disabled": __props.disabled,
|
|
155
|
+
"aria-haspopup": "true",
|
|
156
|
+
"aria-expanded": unref(open)
|
|
160
157
|
}, [
|
|
161
|
-
renderSlot(_ctx.$slots, "activator", normalizeProps(guardReactiveProps({ attrs: unref(menuAttrs), open: unref(open), disabled:
|
|
158
|
+
renderSlot(_ctx.$slots, "activator", normalizeProps(guardReactiveProps({ attrs: unref(menuAttrs), open: unref(open), disabled: __props.disabled, hasError: unref(hasError), hasSuccess: unref(hasSuccess) })))
|
|
162
159
|
], 10, _hoisted_1),
|
|
163
|
-
!
|
|
160
|
+
!__props.disabled ? (openBlock(), createBlock(Teleport, {
|
|
164
161
|
key: 0,
|
|
165
162
|
to: "body"
|
|
166
163
|
}, [
|
|
@@ -168,13 +165,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
168
165
|
key: 0,
|
|
169
166
|
ref_key: "menu",
|
|
170
167
|
ref: menu,
|
|
171
|
-
class: normalizeClass([
|
|
172
|
-
_ctx.$style.menu,
|
|
173
|
-
__props.menuClass,
|
|
174
|
-
_ctx.$style[`menu__${unref(popper)?.strategy ?? "absolute"}`]
|
|
175
|
-
]),
|
|
168
|
+
class: normalizeClass([_ctx.$style.menu, __props.menuClass, _ctx.$style[`menu__${__props.popper?.strategy ?? "absolute"}`]]),
|
|
176
169
|
role: "menu",
|
|
177
|
-
onClick: _cache[3] || (_cache[3] = ($event) =>
|
|
170
|
+
onClick: _cache[3] || (_cache[3] = ($event) => __props.closeOnContentClick ? onLeave() : void 0),
|
|
178
171
|
onKeydown: _cache[4] || (_cache[4] = withKeys(withModifiers(($event) => onLeave(), ["stop"]), ["esc"]))
|
|
179
172
|
}, [
|
|
180
173
|
createVNode(TransitionGroup, {
|
|
@@ -207,8 +200,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
207
200
|
__props.showDetails ? (openBlock(), createBlock(_sfc_main$1, {
|
|
208
201
|
key: 1,
|
|
209
202
|
class: normalizeClass(["pt-1", [__props.dense ? "px-2" : "px-4"]]),
|
|
210
|
-
"error-messages":
|
|
211
|
-
"success-messages":
|
|
203
|
+
"error-messages": __props.errorMessages,
|
|
204
|
+
"success-messages": __props.successMessages,
|
|
212
205
|
hint: __props.hint
|
|
213
206
|
}, null, 8, ["class", "error-messages", "success-messages", "hint"])) : createCommentVNode("", true)
|
|
214
207
|
], 32);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiMenu.vue2.js","sources":["../../../../src/components/overlays/menu/RuiMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport { type PopperOptions, usePopper } from '@/composables/popper';\n\nexport interface MenuProps {\n modelValue?: boolean;\n openOnHover?: boolean;\n fullWidth?: boolean;\n disabled?: boolean;\n openDelay?: number;\n closeDelay?: number;\n popper?: PopperOptions;\n wrapperClass?: string | object | string[];\n menuClass?: string | object | string[];\n closeOnContentClick?: boolean;\n persistOnActivatorClick?: boolean;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n showDetails?: boolean;\n dense?: boolean;\n persistent?: boolean;\n disableAutoFocus?: boolean;\n}\n\ndefineOptions({\n name: 'RuiMenu',\n});\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n modelValue: false,\n openOnHover: false,\n disabled: false,\n fullWidth: false,\n openDelay: 0,\n closeDelay: 0,\n popper: () => ({}),\n wrapperClass: '',\n menuClass: '',\n closeOnContentClick: false,\n persistOnActivatorClick: false,\n hint: undefined,\n errorMessages: () => [],\n successMessages: () => [],\n persistent: false,\n disableAutoFocus: false,\n});\n\nconst emit = defineEmits<{\n (e: 'update:model-value', value: boolean): void;\n}>();\n\nconst {\n modelValue,\n closeDelay,\n openDelay,\n popper,\n disabled,\n persistOnActivatorClick,\n closeOnContentClick,\n openOnHover,\n errorMessages,\n successMessages,\n persistent,\n disableAutoFocus,\n} = toRefs(props);\n\nconst {\n reference: activator,\n popper: menu,\n open,\n popperEnter,\n leavePending,\n onLeavePending,\n onOpen,\n onClose,\n onPopperLeave,\n updatePopper,\n} = usePopper(popper, disabled, openDelay, closeDelay);\n\nconst { width } = useElementSize(activator);\n\nconst click = ref<boolean>(false);\nconst menuContent = ref<HTMLElement>();\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nfunction focusMenu() {\n if (get(disableAutoFocus))\n return;\n\n nextTick(() => {\n const content = get(menuContent);\n if (!content)\n return;\n\n // Focus on the menu container itself\n content.focus();\n });\n}\n\nfunction onLeave(event?: KeyboardEvent) {\n if (!get(open))\n return;\n onClose();\n set(click, false);\n event?.stopPropagation();\n\n // Return focus to activator when menu closes\n if (!get(disableAutoFocus)) {\n nextTick(() => {\n const activatorEl = get(activator);\n if (activatorEl) {\n const focusableEl = activatorEl.querySelector<HTMLElement>(\n FOCUSABLE_ELEMENTS_SELECTOR,\n );\n if (focusableEl) {\n focusableEl.focus();\n }\n }\n });\n }\n}\n\nfunction checkClick() {\n if (get(open) && get(click)) {\n if (!get(persistOnActivatorClick))\n onLeave();\n }\n else {\n onOpen();\n set(click, true);\n }\n}\n\nwatch(modelValue, (value) => {\n if (value) {\n onOpen();\n set(click, true);\n }\n else {\n onLeave();\n }\n});\n\nwatch(open, (open) => {\n emit('update:model-value', open);\n if (open) {\n focusMenu();\n }\n});\n\nonClickOutside(menu, () => {\n if (get(open) && !get(persistent))\n onLeave();\n}, { ignore: [activator] });\n\nconst baseMenuAttrs = computed(() => {\n if (get(disabled))\n return {};\n\n const openOnHoverVal = get(openOnHover);\n const clickVal = get(click);\n return {\n onMouseover: () => {\n if (openOnHoverVal)\n onOpen();\n },\n onMouseleave: () => {\n if (openOnHoverVal && !clickVal)\n onClose();\n },\n };\n});\n\nconst menuAttrs = computed(() => {\n if (get(disabled))\n return {};\n\n return { ...get(baseMenuAttrs), onClick: checkClick };\n});\n\nconst { hasError, hasSuccess } = useFormTextDetail(\n errorMessages,\n successMessages,\n);\n</script>\n\n<template>\n <div\n @keydown.esc.stop=\"onLeave()\"\n @keydown.tab=\"!disableAutoFocus && open ? undefined : null\"\n >\n <div\n ref=\"activator\"\n :class=\"[$style.wrapper, wrapperClass, { 'w-full': fullWidth }]\"\n :data-menu-disabled=\"disabled\"\n >\n <slot\n name=\"activator\"\n v-bind=\"{ attrs: menuAttrs, open, disabled, hasError, hasSuccess }\"\n />\n </div>\n <Teleport\n v-if=\"!disabled\"\n to=\"body\"\n >\n <div\n v-if=\"popperEnter\"\n ref=\"menu\"\n :class=\"[\n $style.menu,\n menuClass,\n $style[`menu__${popper?.strategy ?? 'absolute'}`],\n ]\"\n role=\"menu\"\n @click=\"closeOnContentClick ? onLeave() : undefined\"\n @keydown.esc.stop=\"onLeave()\"\n >\n <TransitionGroup\n enter-active-class=\"transition ease-out duration-200\"\n enter-from-class=\"opacity-0 translate-y-1\"\n enter-to-class=\"opacity-100 translate-y-0\"\n leave-active-class=\"transition ease-in duration-150\"\n leave-from-class=\"opacity-100 translate-y-0\"\n leave-to-class=\"opacity-0 translate-y-1\"\n @before-enter=\"updatePopper()\"\n @after-leave=\"leavePending ? onPopperLeave() : undefined\"\n @before-leave=\"onLeavePending()\"\n >\n <div\n v-if=\"open\"\n ref=\"menuContent\"\n key=\"menu\"\n role=\"menu-content\"\n :class=\"$style.base\"\n tabindex=\"-1\"\n v-bind=\"baseMenuAttrs\"\n >\n <slot v-bind=\"{ width }\" />\n </div>\n </TransitionGroup>\n </div>\n </Teleport>\n <RuiFormTextDetail\n v-if=\"showDetails\"\n class=\"pt-1\"\n :class=\"[dense ? 'px-2' : 'px-4']\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.wrapper {\n @apply relative inline-flex max-w-full;\n}\n\n.menu {\n @apply w-max transform transition-opacity delay-0 z-[9999];\n\n &__fixed {\n @apply fixed;\n }\n\n &__absolute {\n @apply absolute;\n }\n\n .base {\n @apply rounded overflow-hidden shadow-8;\n @apply bg-white text-rui-text;\n\n &:focus {\n @apply outline-none;\n }\n }\n}\n\n:global(.dark) {\n .menu {\n .base {\n @apply bg-[#2E2E2E];\n }\n }\n}\n</style>\n"],"names":["open","_createElementBlock","_unref","_createElementVNode","$style","_renderSlot","_normalizeProps","_guardReactiveProps","_createBlock","_Teleport","_normalizeClass","_createVNode","_TransitionGroup","_openBlock","_mergeProps","RuiFormTextDetail"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RuiMenu.vue2.js","sources":["../../../../src/components/overlays/menu/RuiMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport RuiFormTextDetail from '@/components/helpers/RuiFormTextDetail.vue';\nimport { type PopperOptions, usePopper } from '@/composables/popper';\nimport { useFormTextDetail } from '@/utils/form-text-detail';\n\nexport interface MenuProps {\n openOnHover?: boolean;\n fullWidth?: boolean;\n disabled?: boolean;\n openDelay?: number;\n closeDelay?: number;\n popper?: PopperOptions;\n wrapperClass?: string | object | string[];\n menuClass?: string | object | string[];\n closeOnContentClick?: boolean;\n persistOnActivatorClick?: boolean;\n hint?: string;\n errorMessages?: string | string[];\n successMessages?: string | string[];\n showDetails?: boolean;\n dense?: boolean;\n persistent?: boolean;\n disableAutoFocus?: boolean;\n}\n\ndefineOptions({\n name: 'RuiMenu',\n});\n\nconst modelValue = defineModel<boolean>({ default: false });\n\nconst {\n openOnHover = false,\n disabled = false,\n fullWidth = false,\n openDelay = 0,\n closeDelay = 0,\n popper = {},\n wrapperClass = '',\n menuClass = '',\n closeOnContentClick = false,\n persistOnActivatorClick = false,\n hint,\n errorMessages = [],\n successMessages = [],\n showDetails = false,\n dense = false,\n persistent = false,\n disableAutoFocus = false,\n} = defineProps<MenuProps>();\n\ndefineSlots<{\n activator?: (props: {\n attrs: { onMouseover?: () => void; onMouseleave?: () => void; onClick?: () => void };\n open: boolean;\n disabled: boolean;\n hasError: boolean;\n hasSuccess: boolean;\n }) => any;\n default?: (props: { width: number }) => any;\n}>();\n\nconst click = ref<boolean>(false);\nconst menuContent = useTemplateRef<HTMLElement>('menuContent');\n\nconst FOCUSABLE_ELEMENTS_SELECTOR =\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nconst {\n reference: activator,\n popper: menu,\n open,\n popperEnter,\n leavePending,\n onLeavePending,\n onOpen,\n onClose,\n onPopperLeave,\n updatePopper,\n} = usePopper(\n toRef(() => popper),\n toRef(() => disabled),\n toRef(() => openDelay),\n toRef(() => closeDelay),\n);\n\nconst { width } = useElementSize(activator);\n\nconst { hasError, hasSuccess } = useFormTextDetail(\n toRef(() => errorMessages),\n toRef(() => successMessages),\n);\n\nconst baseMenuAttrs = computed<{ onMouseover?: () => void; onMouseleave?: () => void }>(() => {\n if (disabled)\n return {};\n\n const clickVal = get(click);\n return {\n onMouseover: () => {\n if (openOnHover)\n onOpen();\n },\n onMouseleave: () => {\n if (openOnHover && !clickVal)\n onClose();\n },\n };\n});\n\nconst menuAttrs = computed<{\n onMouseover?: () => void;\n onMouseleave?: () => void;\n onClick?: () => void;\n}>(() => {\n if (disabled)\n return {};\n\n return { ...get(baseMenuAttrs), onClick: checkClick };\n});\n\nfunction focusMenu(): void {\n if (disableAutoFocus)\n return;\n\n nextTick(() => {\n const content = get(menuContent);\n if (!content)\n return;\n\n // Focus on the menu container itself\n content.focus();\n });\n}\n\nfunction onLeave(event?: KeyboardEvent): void {\n if (!get(open))\n return;\n onClose();\n set(click, false);\n event?.stopPropagation();\n\n // Return focus to activator when menu closes\n if (!disableAutoFocus) {\n nextTick(() => {\n const activatorEl = get(activator);\n if (activatorEl) {\n const focusableEl = activatorEl.querySelector<HTMLElement>(FOCUSABLE_ELEMENTS_SELECTOR);\n if (focusableEl) {\n focusableEl.focus();\n }\n }\n });\n }\n}\n\nfunction checkClick(): void {\n if (get(open) && get(click)) {\n if (!persistOnActivatorClick)\n onLeave();\n }\n else {\n onOpen();\n set(click, true);\n }\n}\n\nwatch(modelValue, (value) => {\n if (get(open) === value)\n return;\n\n if (value) {\n onOpen();\n set(click, true);\n }\n else {\n onLeave();\n }\n});\n\nwatch(open, (open) => {\n set(modelValue, open);\n if (open) {\n focusMenu();\n }\n});\n\nonClickOutside(\n menu,\n () => {\n if (get(open) && !persistent)\n onLeave();\n },\n { ignore: [activator] },\n);\n</script>\n\n<template>\n <div\n @keydown.esc.stop=\"onLeave()\"\n @keydown.tab=\"!disableAutoFocus && open ? undefined : null\"\n >\n <div\n ref=\"activator\"\n :class=\"[$style.wrapper, wrapperClass, { 'w-full': fullWidth }]\"\n :data-menu-disabled=\"disabled\"\n aria-haspopup=\"true\"\n :aria-expanded=\"open\"\n >\n <slot\n name=\"activator\"\n v-bind=\"{ attrs: menuAttrs, open, disabled, hasError, hasSuccess }\"\n />\n </div>\n <Teleport\n v-if=\"!disabled\"\n to=\"body\"\n >\n <div\n v-if=\"popperEnter\"\n ref=\"menu\"\n :class=\"[$style.menu, menuClass, $style[`menu__${popper?.strategy ?? 'absolute'}`]]\"\n role=\"menu\"\n @click=\"closeOnContentClick ? onLeave() : undefined\"\n @keydown.esc.stop=\"onLeave()\"\n >\n <TransitionGroup\n enter-active-class=\"transition ease-out duration-200\"\n enter-from-class=\"opacity-0 translate-y-1\"\n enter-to-class=\"opacity-100 translate-y-0\"\n leave-active-class=\"transition ease-in duration-150\"\n leave-from-class=\"opacity-100 translate-y-0\"\n leave-to-class=\"opacity-0 translate-y-1\"\n @before-enter=\"updatePopper()\"\n @after-leave=\"leavePending ? onPopperLeave() : undefined\"\n @before-leave=\"onLeavePending()\"\n >\n <div\n v-if=\"open\"\n ref=\"menuContent\"\n key=\"menu\"\n role=\"menu-content\"\n :class=\"$style.base\"\n tabindex=\"-1\"\n v-bind=\"baseMenuAttrs\"\n >\n <slot v-bind=\"{ width }\" />\n </div>\n </TransitionGroup>\n </div>\n </Teleport>\n <RuiFormTextDetail\n v-if=\"showDetails\"\n class=\"pt-1\"\n :class=\"[dense ? 'px-2' : 'px-4']\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :hint=\"hint\"\n />\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.wrapper {\n @apply relative inline-flex max-w-full;\n}\n\n.menu {\n @apply w-max transform transition-opacity delay-0 z-[9999];\n\n &__fixed {\n @apply fixed;\n }\n\n &__absolute {\n @apply absolute;\n }\n\n .base {\n @apply rounded overflow-hidden shadow-8;\n @apply bg-white text-rui-text;\n\n &:focus {\n @apply outline-none;\n }\n }\n}\n\n:global(.dark) {\n .menu {\n .base {\n @apply bg-[#2E2E2E];\n }\n }\n}\n</style>\n"],"names":["_useModel","open","_createElementBlock","_unref","_createElementVNode","$style","_renderSlot","_normalizeProps","_guardReactiveProps","_createBlock","_Teleport","_normalizeClass","_createVNode","_TransitionGroup","_openBlock","_mergeProps","RuiFormTextDetail"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export interface NavigationDrawerProps {
|
|
2
|
-
modelValue?: boolean;
|
|
3
2
|
temporary?: boolean;
|
|
4
3
|
stateless?: boolean;
|
|
5
4
|
width?: string | number;
|
|
@@ -7,40 +6,34 @@ export interface NavigationDrawerProps {
|
|
|
7
6
|
overlay?: boolean;
|
|
8
7
|
position?: 'left' | 'right';
|
|
9
8
|
contentClass?: string | object | string[];
|
|
9
|
+
ariaLabel?: string;
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
type __VLS_Props = NavigationDrawerProps;
|
|
12
|
+
type __VLS_Slots = {
|
|
13
|
+
activator?: (props: {
|
|
14
|
+
open: boolean;
|
|
15
|
+
attrs: {
|
|
16
|
+
onClick: () => void;
|
|
17
|
+
};
|
|
18
|
+
}) => any;
|
|
19
|
+
default?: (props: {
|
|
20
|
+
attrs: {
|
|
21
|
+
onClick: () => void;
|
|
22
|
+
};
|
|
23
|
+
close: () => void;
|
|
24
|
+
}) => any;
|
|
22
25
|
};
|
|
23
|
-
type
|
|
24
|
-
|
|
25
|
-
} & {
|
|
26
|
-
default?: (props: typeof __VLS_15) => any;
|
|
26
|
+
type __VLS_ModelProps = {
|
|
27
|
+
modelValue?: boolean;
|
|
27
28
|
};
|
|
28
|
-
|
|
29
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
30
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
31
|
+
"update:modelValue": (value: boolean) => any;
|
|
29
32
|
closed: () => any;
|
|
30
|
-
|
|
31
|
-
|
|
33
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
34
|
+
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
32
35
|
onClosed?: (() => any) | undefined;
|
|
33
|
-
|
|
34
|
-
}>, {
|
|
35
|
-
width: string | number;
|
|
36
|
-
modelValue: boolean;
|
|
37
|
-
contentClass: string | object | string[];
|
|
38
|
-
overlay: boolean;
|
|
39
|
-
position: "left" | "right";
|
|
40
|
-
temporary: boolean;
|
|
41
|
-
stateless: boolean;
|
|
42
|
-
miniVariant: boolean;
|
|
43
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
36
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
44
37
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
45
38
|
declare const _default: typeof __VLS_export;
|
|
46
39
|
export default _default;
|
|
@@ -1,91 +1,117 @@
|
|
|
1
|
-
import { defineComponent,
|
|
1
|
+
import { defineComponent, useModel, ref, useTemplateRef, computed, watch, nextTick, onBeforeUnmount, openBlock, createElementBlock, renderSlot, normalizeProps, guardReactiveProps, unref, createBlock, Teleport, Transition, withCtx, withModifiers, normalizeClass, createCommentVNode, mergeProps, mergeModels } from "vue";
|
|
2
2
|
import { transformPropsUnit, getRootAttrs } from "../../../utils/helpers.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { get, set } from "@vueuse/shared";
|
|
4
|
+
import { onClickOutside } from "@vueuse/core";
|
|
5
|
+
const _hoisted_1 = ["aria-label", "aria-hidden"];
|
|
5
6
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
6
7
|
...{
|
|
7
8
|
name: "RuiNavigationDrawer",
|
|
8
9
|
inheritAttrs: false
|
|
9
10
|
},
|
|
10
11
|
__name: "RuiNavigationDrawer",
|
|
11
|
-
props: {
|
|
12
|
-
modelValue: { type: Boolean, default: false },
|
|
12
|
+
props: /* @__PURE__ */ mergeModels({
|
|
13
13
|
temporary: { type: Boolean, default: false },
|
|
14
14
|
stateless: { type: Boolean, default: false },
|
|
15
15
|
width: { default: 360 },
|
|
16
16
|
miniVariant: { type: Boolean, default: false },
|
|
17
17
|
overlay: { type: Boolean, default: false },
|
|
18
18
|
position: { default: "left" },
|
|
19
|
-
contentClass: { default: "" }
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
contentClass: { default: "" },
|
|
20
|
+
ariaLabel: {}
|
|
21
|
+
}, {
|
|
22
|
+
"modelValue": { type: Boolean, ...{ default: false } },
|
|
23
|
+
"modelModifiers": {}
|
|
24
|
+
}),
|
|
25
|
+
emits: /* @__PURE__ */ mergeModels(["closed"], ["update:modelValue"]),
|
|
22
26
|
setup(__props, { emit: __emit }) {
|
|
23
|
-
const
|
|
27
|
+
const modelValue = useModel(__props, "modelValue");
|
|
24
28
|
const emit = __emit;
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
width
|
|
30
|
-
}
|
|
29
|
+
const internalValue = ref(false);
|
|
30
|
+
const isOpen = ref(false);
|
|
31
|
+
const content = useTemplateRef("content");
|
|
32
|
+
const style = computed(() => ({
|
|
33
|
+
width: transformPropsUnit(__props.width)
|
|
34
|
+
}));
|
|
35
|
+
const activatorAttrs = computed(() => ({
|
|
36
|
+
onClick: () => {
|
|
37
|
+
const newValue = !get(internalValue);
|
|
38
|
+
set(internalValue, newValue);
|
|
39
|
+
onUpdateModelValue(newValue);
|
|
40
|
+
}
|
|
41
|
+
}));
|
|
31
42
|
function onUpdateModelValue(value) {
|
|
32
|
-
|
|
43
|
+
set(modelValue, value);
|
|
33
44
|
if (!value)
|
|
34
45
|
emit("closed");
|
|
35
46
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
47
|
+
function close() {
|
|
48
|
+
set(isOpen, false);
|
|
49
|
+
}
|
|
50
|
+
watch(
|
|
51
|
+
modelValue,
|
|
52
|
+
(value) => {
|
|
53
|
+
nextTick(() => {
|
|
54
|
+
set(internalValue, value);
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
{ immediate: true }
|
|
58
|
+
);
|
|
59
|
+
let internalValueTimeoutId;
|
|
60
|
+
let isOpenTimeoutId;
|
|
61
|
+
let clickOutsideTimeoutId;
|
|
43
62
|
watch(internalValue, (value) => {
|
|
63
|
+
if (internalValueTimeoutId !== void 0) {
|
|
64
|
+
clearTimeout(internalValueTimeoutId);
|
|
65
|
+
internalValueTimeoutId = void 0;
|
|
66
|
+
}
|
|
44
67
|
if (value) {
|
|
45
68
|
window.requestAnimationFrame(() => {
|
|
46
69
|
set(isOpen, value);
|
|
47
70
|
});
|
|
48
71
|
} else {
|
|
49
|
-
setTimeout(() => {
|
|
72
|
+
internalValueTimeoutId = setTimeout(() => {
|
|
50
73
|
set(isOpen, value);
|
|
74
|
+
internalValueTimeoutId = void 0;
|
|
51
75
|
}, 150);
|
|
52
76
|
}
|
|
53
77
|
});
|
|
54
78
|
watch(isOpen, (isOpen2) => {
|
|
79
|
+
if (isOpenTimeoutId !== void 0) {
|
|
80
|
+
clearTimeout(isOpenTimeoutId);
|
|
81
|
+
isOpenTimeoutId = void 0;
|
|
82
|
+
}
|
|
55
83
|
if (isOpen2) {
|
|
56
84
|
onUpdateModelValue(isOpen2);
|
|
57
85
|
set(internalValue, isOpen2);
|
|
58
86
|
} else {
|
|
59
|
-
setTimeout(() => {
|
|
87
|
+
isOpenTimeoutId = setTimeout(() => {
|
|
60
88
|
onUpdateModelValue(isOpen2);
|
|
61
89
|
set(internalValue, isOpen2);
|
|
90
|
+
isOpenTimeoutId = void 0;
|
|
62
91
|
}, 150);
|
|
63
92
|
}
|
|
64
93
|
});
|
|
65
|
-
function close() {
|
|
66
|
-
set(isOpen, false);
|
|
67
|
-
}
|
|
68
|
-
const style = computed(() => ({
|
|
69
|
-
width: transformPropsUnit(get(width))
|
|
70
|
-
}));
|
|
71
|
-
const content = ref(null);
|
|
72
94
|
onClickOutside(content, () => {
|
|
73
|
-
if (get(isOpen) &&
|
|
74
|
-
|
|
95
|
+
if (get(isOpen) && __props.temporary && !__props.stateless) {
|
|
96
|
+
if (clickOutsideTimeoutId !== void 0)
|
|
97
|
+
clearTimeout(clickOutsideTimeoutId);
|
|
98
|
+
clickOutsideTimeoutId = setTimeout(() => {
|
|
75
99
|
close();
|
|
100
|
+
clickOutsideTimeoutId = void 0;
|
|
76
101
|
}, 50);
|
|
77
102
|
}
|
|
78
103
|
});
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
104
|
+
onBeforeUnmount(() => {
|
|
105
|
+
if (internalValueTimeoutId !== void 0)
|
|
106
|
+
clearTimeout(internalValueTimeoutId);
|
|
107
|
+
if (isOpenTimeoutId !== void 0)
|
|
108
|
+
clearTimeout(isOpenTimeoutId);
|
|
109
|
+
if (clickOutsideTimeoutId !== void 0)
|
|
110
|
+
clearTimeout(clickOutsideTimeoutId);
|
|
111
|
+
});
|
|
86
112
|
return (_ctx, _cache) => {
|
|
87
113
|
return openBlock(), createElementBlock("div", null, [
|
|
88
|
-
renderSlot(_ctx.$slots, "activator", normalizeProps(guardReactiveProps({ open: internalValue
|
|
114
|
+
renderSlot(_ctx.$slots, "activator", normalizeProps(guardReactiveProps({ open: unref(internalValue), attrs: unref(activatorAttrs) }))),
|
|
89
115
|
(openBlock(), createBlock(Teleport, { to: "body" }, [
|
|
90
116
|
__props.overlay ? (openBlock(), createBlock(Transition, {
|
|
91
117
|
key: 0,
|
|
@@ -97,15 +123,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
97
123
|
"leave-to-class": "opacity-0"
|
|
98
124
|
}, {
|
|
99
125
|
default: withCtx(() => [
|
|
100
|
-
isOpen
|
|
126
|
+
unref(isOpen) && unref(internalValue) ? (openBlock(), createElementBlock("div", {
|
|
101
127
|
key: 0,
|
|
128
|
+
"data-id": "overlay",
|
|
102
129
|
class: normalizeClass(_ctx.$style.overlay),
|
|
103
130
|
onClick: _cache[0] || (_cache[0] = withModifiers(($event) => close(), ["stop"]))
|
|
104
131
|
}, null, 2)) : createCommentVNode("", true)
|
|
105
132
|
]),
|
|
106
133
|
_: 1
|
|
107
134
|
})) : createCommentVNode("", true),
|
|
108
|
-
isOpen
|
|
135
|
+
unref(isOpen) || unref(internalValue) || __props.miniVariant ? (openBlock(), createElementBlock("aside", mergeProps({
|
|
109
136
|
key: 1,
|
|
110
137
|
ref_key: "content",
|
|
111
138
|
ref: content,
|
|
@@ -114,16 +141,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
114
141
|
_ctx.$style.content,
|
|
115
142
|
__props.contentClass,
|
|
116
143
|
{
|
|
117
|
-
[_ctx.$style.visible]: isOpen
|
|
118
|
-
[_ctx.$style[
|
|
119
|
-
[_ctx.$style.mini]:
|
|
144
|
+
[_ctx.$style.visible]: unref(isOpen) && unref(internalValue),
|
|
145
|
+
[_ctx.$style[__props.position]]: __props.position,
|
|
146
|
+
[_ctx.$style.mini]: __props.miniVariant,
|
|
120
147
|
[_ctx.$style.temporary]: __props.temporary,
|
|
121
148
|
[_ctx.$style["with-overlay"]]: __props.overlay
|
|
122
149
|
}
|
|
123
|
-
]
|
|
150
|
+
],
|
|
151
|
+
"aria-label": __props.ariaLabel,
|
|
152
|
+
"aria-hidden": __props.miniVariant && !(unref(isOpen) && unref(internalValue)) ? "true" : void 0
|
|
124
153
|
}, unref(getRootAttrs)(_ctx.$attrs)), [
|
|
125
154
|
renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({ attrs: unref(activatorAttrs), close })))
|
|
126
|
-
], 16)) : createCommentVNode("", true)
|
|
155
|
+
], 16, _hoisted_1)) : createCommentVNode("", true)
|
|
127
156
|
]))
|
|
128
157
|
]);
|
|
129
158
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuiNavigationDrawer.vue2.js","sources":["../../../../src/components/overlays/navigation-drawer/RuiNavigationDrawer.vue"],"sourcesContent":["<script setup lang
|
|
1
|
+
{"version":3,"file":"RuiNavigationDrawer.vue2.js","sources":["../../../../src/components/overlays/navigation-drawer/RuiNavigationDrawer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { MaybeElement } from '@vueuse/core';\nimport { getRootAttrs, transformPropsUnit } from '@/utils/helpers';\n\nexport interface NavigationDrawerProps {\n temporary?: boolean;\n stateless?: boolean;\n width?: string | number;\n miniVariant?: boolean;\n overlay?: boolean;\n position?: 'left' | 'right';\n contentClass?: string | object | string[];\n ariaLabel?: string;\n}\n\ndefineOptions({\n name: 'RuiNavigationDrawer',\n inheritAttrs: false,\n});\n\nconst modelValue = defineModel<boolean>({ default: false });\n\nconst {\n temporary = false,\n stateless = false,\n width = 360,\n miniVariant = false,\n overlay = false,\n position = 'left',\n contentClass = '',\n ariaLabel,\n} = defineProps<NavigationDrawerProps>();\n\nconst emit = defineEmits<{\n closed: [];\n}>();\n\ndefineSlots<{\n activator?: (props: { open: boolean; attrs: { onClick: () => void } }) => any;\n default?: (props: { attrs: { onClick: () => void }; close: () => void }) => any;\n}>();\n\nconst internalValue = ref<boolean>(false);\nconst isOpen = ref<boolean>(false);\nconst content = useTemplateRef<MaybeElement>('content');\n\nconst style = computed<{ width: string | undefined }>(() => ({\n width: transformPropsUnit(width),\n}));\n\nconst activatorAttrs = computed<{ onClick: () => void }>(() => ({\n onClick: () => {\n const newValue = !get(internalValue);\n set(internalValue, newValue);\n onUpdateModelValue(newValue);\n },\n}));\n\nfunction onUpdateModelValue(value: boolean): void {\n set(modelValue, value);\n\n if (!value)\n emit('closed');\n}\n\nfunction close(): void {\n set(isOpen, false);\n}\n\nwatch(\n modelValue,\n (value) => {\n nextTick(() => {\n set(internalValue, value);\n });\n },\n { immediate: true },\n);\n\nlet internalValueTimeoutId: ReturnType<typeof setTimeout> | undefined;\nlet isOpenTimeoutId: ReturnType<typeof setTimeout> | undefined;\nlet clickOutsideTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\nwatch(internalValue, (value) => {\n if (internalValueTimeoutId !== undefined) {\n clearTimeout(internalValueTimeoutId);\n internalValueTimeoutId = undefined;\n }\n if (value) {\n window.requestAnimationFrame(() => {\n set(isOpen, value);\n });\n }\n else {\n internalValueTimeoutId = setTimeout(() => {\n set(isOpen, value);\n internalValueTimeoutId = undefined;\n }, 150);\n }\n});\n\nwatch(isOpen, (isOpen) => {\n if (isOpenTimeoutId !== undefined) {\n clearTimeout(isOpenTimeoutId);\n isOpenTimeoutId = undefined;\n }\n if (isOpen) {\n onUpdateModelValue(isOpen);\n set(internalValue, isOpen);\n }\n else {\n isOpenTimeoutId = setTimeout(() => {\n onUpdateModelValue(isOpen);\n set(internalValue, isOpen);\n isOpenTimeoutId = undefined;\n }, 150);\n }\n});\n\nonClickOutside(content, () => {\n if (get(isOpen) && temporary && !stateless) {\n if (clickOutsideTimeoutId !== undefined)\n clearTimeout(clickOutsideTimeoutId);\n\n clickOutsideTimeoutId = setTimeout(() => {\n close();\n clickOutsideTimeoutId = undefined;\n }, 50);\n }\n});\n\nonBeforeUnmount(() => {\n if (internalValueTimeoutId !== undefined)\n clearTimeout(internalValueTimeoutId);\n if (isOpenTimeoutId !== undefined)\n clearTimeout(isOpenTimeoutId);\n if (clickOutsideTimeoutId !== undefined)\n clearTimeout(clickOutsideTimeoutId);\n});\n</script>\n\n<template>\n <div>\n <slot\n name=\"activator\"\n v-bind=\"{ open: internalValue, attrs: activatorAttrs }\"\n />\n <Teleport to=\"body\">\n <Transition\n v-if=\"overlay\"\n enter-from-class=\"opacity-0\"\n enter-active-class=\"ease-out duration-150\"\n enter-to-class=\"opacity-100\"\n leave-from-class=\"opacity-100\"\n leave-active-class=\"ease-in duration-150\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"isOpen && internalValue\"\n data-id=\"overlay\"\n :class=\"$style.overlay\"\n @click.stop=\"close()\"\n />\n </Transition>\n <aside\n v-if=\"isOpen || internalValue || miniVariant\"\n ref=\"content\"\n :style=\"style\"\n :class=\"[\n $style.content,\n contentClass,\n {\n [$style.visible]: isOpen && internalValue,\n [$style[position]]: position,\n [$style.mini]: miniVariant,\n [$style.temporary]: temporary,\n [$style['with-overlay']]: overlay,\n },\n ]\"\n :aria-label=\"ariaLabel\"\n :aria-hidden=\"miniVariant && !(isOpen && internalValue) ? 'true' : undefined\"\n v-bind=\"getRootAttrs($attrs)\"\n >\n <slot v-bind=\"{ attrs: activatorAttrs, close }\" />\n </aside>\n </Teleport>\n </div>\n</template>\n\n<style lang=\"scss\" module>\n.overlay {\n @apply absolute top-0 left-0 w-full h-full backdrop-blur bg-rui-grey-500/[0.5] z-[10000];\n}\n\n.content {\n @apply transition-all duration-150 ease-in-out top-0 h-full fixed text-rui-text bg-white z-[7];\n\n &.left {\n @apply -translate-x-full left-0;\n }\n\n &.right {\n @apply translate-x-full right-0;\n }\n\n &.with-overlay {\n @apply z-[10000];\n }\n\n &.visible {\n @apply translate-x-0;\n }\n\n &.temporary {\n &.visible {\n @apply shadow-5;\n }\n }\n\n &.mini {\n @apply translate-x-0;\n\n &:not(.visible) {\n @apply w-14 #{!important};\n }\n }\n}\n\n:global(.dark) {\n .overlay {\n @apply bg-black/[0.5];\n }\n\n .content {\n @apply bg-[#363636];\n }\n}\n</style>\n"],"names":["_useModel","isOpen","_createElementBlock","_renderSlot","_normalizeProps","_guardReactiveProps","_unref","_createBlock","_Teleport","_Transition","_normalizeClass","$style","_openBlock","_mergeProps","$attrs"],"mappings":"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"}
|