@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,8 +1,7 @@
|
|
|
1
1
|
import { get, set } from "@vueuse/shared";
|
|
2
2
|
import { assert } from "../../../utils/assert.js";
|
|
3
|
-
import { computed } from "vue";
|
|
3
|
+
import { computed, watch } from "vue";
|
|
4
4
|
function useAutoCompleteValue(modelValue, options, opts, deps) {
|
|
5
|
-
const multiple = computed(() => Array.isArray(get(modelValue)));
|
|
6
5
|
const optionsMap = computed(() => {
|
|
7
6
|
const map = /* @__PURE__ */ new Map();
|
|
8
7
|
const optionsData = get(options);
|
|
@@ -12,7 +11,7 @@ function useAutoCompleteValue(modelValue, options, opts, deps) {
|
|
|
12
11
|
return map;
|
|
13
12
|
});
|
|
14
13
|
function convertModelValueToArray(modelValueData) {
|
|
15
|
-
if (
|
|
14
|
+
if (modelValueData === null || modelValueData === void 0)
|
|
16
15
|
return [];
|
|
17
16
|
return Array.isArray(modelValueData) ? modelValueData : [modelValueData];
|
|
18
17
|
}
|
|
@@ -23,7 +22,7 @@ function useAutoCompleteValue(modelValue, options, opts, deps) {
|
|
|
23
22
|
for (const val of valueArray) {
|
|
24
23
|
const identifier = deps.getIdentifier(val);
|
|
25
24
|
const inOptions = optionsMapData.get(identifier);
|
|
26
|
-
if (inOptions) {
|
|
25
|
+
if (inOptions !== void 0) {
|
|
27
26
|
filtered[index++] = inOptions;
|
|
28
27
|
} else if (customValue) {
|
|
29
28
|
filtered[index++] = deps.textValueToProperValue(val, returnObject);
|
|
@@ -38,7 +37,7 @@ function useAutoCompleteValue(modelValue, options, opts, deps) {
|
|
|
38
37
|
let index = 0;
|
|
39
38
|
for (const val of valueArray) {
|
|
40
39
|
const inOptions = optionsMapData.get(val);
|
|
41
|
-
if (inOptions) {
|
|
40
|
+
if (inOptions !== void 0) {
|
|
42
41
|
filtered[index++] = inOptions;
|
|
43
42
|
} else if (customValue) {
|
|
44
43
|
filtered[index++] = deps.textValueToProperValue(val, returnObject);
|
|
@@ -47,34 +46,19 @@ function useAutoCompleteValue(modelValue, options, opts, deps) {
|
|
|
47
46
|
filtered.length = index;
|
|
48
47
|
return filtered;
|
|
49
48
|
}
|
|
50
|
-
function processReturnObjectValue(modelValueData, optionsMapData, returnObject, customValue
|
|
49
|
+
function processReturnObjectValue(modelValueData, optionsMapData, returnObject, customValue) {
|
|
51
50
|
const multipleValue = Array.isArray(modelValueData);
|
|
52
51
|
const valueArray = convertModelValueToArray(modelValueData);
|
|
53
52
|
const filtered = filterValuesByOptions(valueArray, optionsMapData, customValue, returnObject);
|
|
54
|
-
if (multipleValue || filtered.length === 0)
|
|
55
|
-
if (shouldUpdateInternalSearch)
|
|
56
|
-
deps.updateInternalSearch();
|
|
53
|
+
if (multipleValue || filtered.length === 0)
|
|
57
54
|
return filtered;
|
|
58
|
-
}
|
|
59
55
|
const val = filtered[0];
|
|
60
56
|
assert(val);
|
|
61
|
-
if (shouldUpdateInternalSearch)
|
|
62
|
-
deps.updateInternalSearch(deps.getText(val));
|
|
63
57
|
return [val];
|
|
64
58
|
}
|
|
65
|
-
function processStandardValue(modelValueData, optionsMapData, returnObject, customValue
|
|
59
|
+
function processStandardValue(modelValueData, optionsMapData, returnObject, customValue) {
|
|
66
60
|
const valueArray = convertModelValueToArray(modelValueData);
|
|
67
|
-
|
|
68
|
-
if (shouldUpdateInternalSearch) {
|
|
69
|
-
if (filtered.length > 0) {
|
|
70
|
-
const firstItem = filtered[0];
|
|
71
|
-
assert(firstItem);
|
|
72
|
-
deps.updateInternalSearch(deps.getText(firstItem));
|
|
73
|
-
} else {
|
|
74
|
-
deps.updateInternalSearch();
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return filtered;
|
|
61
|
+
return filterValuesByIdentifier(valueArray, optionsMapData, customValue, returnObject);
|
|
78
62
|
}
|
|
79
63
|
function onUpdateModelValue(value2) {
|
|
80
64
|
set(modelValue, value2);
|
|
@@ -83,7 +67,7 @@ function useAutoCompleteValue(modelValue, options, opts, deps) {
|
|
|
83
67
|
const keyAttr = get(opts.keyAttr);
|
|
84
68
|
const returnObject = get(opts.returnObject);
|
|
85
69
|
const selection = keyAttr && !returnObject ? selected.map((item) => item[keyAttr]) : selected;
|
|
86
|
-
if (get(multiple))
|
|
70
|
+
if (get(deps.multiple))
|
|
87
71
|
return onUpdateModelValue(selection);
|
|
88
72
|
if (selection.length === 0)
|
|
89
73
|
return onUpdateModelValue(void 0);
|
|
@@ -96,28 +80,26 @@ function useAutoCompleteValue(modelValue, options, opts, deps) {
|
|
|
96
80
|
const returnObject = get(opts.returnObject) ?? false;
|
|
97
81
|
const customValue = get(opts.customValue) ?? false;
|
|
98
82
|
const optionsMapData = get(optionsMap);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
modelValueData,
|
|
103
|
-
optionsMapData,
|
|
104
|
-
returnObject,
|
|
105
|
-
customValue,
|
|
106
|
-
shouldUpdateInternalSearch
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
return processStandardValue(
|
|
110
|
-
modelValueData,
|
|
111
|
-
optionsMapData,
|
|
112
|
-
returnObject,
|
|
113
|
-
customValue,
|
|
114
|
-
shouldUpdateInternalSearch
|
|
115
|
-
);
|
|
83
|
+
if (keyAttr && returnObject)
|
|
84
|
+
return processReturnObjectValue(modelValueData, optionsMapData, returnObject, customValue);
|
|
85
|
+
return processStandardValue(modelValueData, optionsMapData, returnObject, customValue);
|
|
116
86
|
},
|
|
117
87
|
set: (selected) => {
|
|
118
88
|
setSelected(selected);
|
|
119
89
|
}
|
|
120
90
|
});
|
|
91
|
+
watch([modelValue, () => get(deps.isOpen)], () => {
|
|
92
|
+
if (get(deps.isOpen) || !get(deps.shouldApplyValueAsSearch))
|
|
93
|
+
return;
|
|
94
|
+
const currentValue = get(value);
|
|
95
|
+
if (get(deps.multiple) || currentValue.length === 0) {
|
|
96
|
+
deps.updateInternalSearch();
|
|
97
|
+
} else {
|
|
98
|
+
const firstItem = currentValue[0];
|
|
99
|
+
assert(firstItem);
|
|
100
|
+
deps.updateInternalSearch(deps.getText(firstItem));
|
|
101
|
+
}
|
|
102
|
+
}, { immediate: true });
|
|
121
103
|
return {
|
|
122
104
|
setSelected,
|
|
123
105
|
value
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value.js","sources":["../../../../src/composables/forms/auto-complete/value.ts"],"sourcesContent":["import type { ComputedRef, MaybeRef, Ref } from 'vue';\nimport { get, set } from '@vueuse/shared';\nimport { assert } from '@/utils/assert';\n\nexport interface UseAutoCompleteValueOptions<TItem> {\n keyAttr?: MaybeRef<keyof TItem | undefined>;\n returnObject?: MaybeRef<boolean>;\n customValue?: MaybeRef<boolean>;\n}\n\nexport interface UseAutoCompleteValueReturn<TItem> {\n value: ComputedRef<TItem[]>;\n setSelected: (selected: TItem[]) => void;\n}\n\nexport interface UseAutoCompleteValueDeps<TItem> {\n getIdentifier: (item: TItem) => any;\n getText: (item: TItem) => string | undefined;\n textValueToProperValue: (val: any, returnObject?: boolean) => TItem;\n shouldApplyValueAsSearch: MaybeRef<boolean>;\n isOpen: MaybeRef<boolean>;\n updateInternalSearch: (value?: string) => void;\n}\n\nexport function useAutoCompleteValue<TValue, TItem>(\n modelValue: Ref<TValue | undefined>,\n options: MaybeRef<TItem[]>,\n opts: UseAutoCompleteValueOptions<TItem>,\n deps: UseAutoCompleteValueDeps<TItem>,\n): UseAutoCompleteValueReturn<TItem> {\n
|
|
1
|
+
{"version":3,"file":"value.js","sources":["../../../../src/composables/forms/auto-complete/value.ts"],"sourcesContent":["import type { ComputedRef, MaybeRef, Ref } from 'vue';\nimport { get, set } from '@vueuse/shared';\nimport { assert } from '@/utils/assert';\n\nexport interface UseAutoCompleteValueOptions<TItem> {\n /** The property used as the unique identifier for each item. */\n keyAttr?: MaybeRef<keyof TItem | undefined>;\n /** Whether to return the full item object instead of just the key. */\n returnObject?: MaybeRef<boolean>;\n /** Whether custom (free-text) values are allowed. */\n customValue?: MaybeRef<boolean>;\n}\n\nexport interface UseAutoCompleteValueReturn<TItem> {\n value: ComputedRef<TItem[]>;\n setSelected: (selected: TItem[]) => void;\n}\n\nexport interface UseAutoCompleteValueDeps<TItem> {\n getIdentifier: (item: TItem) => any;\n getText: (item: TItem) => string | undefined;\n textValueToProperValue: (val: any, returnObject?: boolean) => TItem;\n shouldApplyValueAsSearch: MaybeRef<boolean>;\n isOpen: MaybeRef<boolean>;\n multiple: MaybeRef<boolean>;\n updateInternalSearch: (value?: string) => void;\n}\n\nexport function useAutoCompleteValue<TValue, TItem>(\n modelValue: Ref<TValue | undefined>,\n options: MaybeRef<TItem[]>,\n opts: UseAutoCompleteValueOptions<TItem>,\n deps: UseAutoCompleteValueDeps<TItem>,\n): UseAutoCompleteValueReturn<TItem> {\n // Create maps for O(1) lookup performance\n const optionsMap = computed<Map<any, TItem>>(() => {\n const map = new Map<any, TItem>();\n const optionsData = get(options);\n for (const item of optionsData) {\n map.set(deps.getIdentifier(item), item);\n }\n return map;\n });\n\n function convertModelValueToArray(modelValueData: TValue | undefined): any[] {\n if (modelValueData === null || modelValueData === undefined)\n return [];\n return Array.isArray(modelValueData) ? modelValueData : [modelValueData];\n }\n\n function filterValuesByOptions(\n valueArray: any[],\n optionsMapData: Map<any, TItem>,\n customValue: boolean,\n returnObject: boolean,\n ): TItem[] {\n const filtered: TItem[] = [];\n filtered.length = valueArray.length; // Pre-allocate array size\n let index = 0;\n\n for (const val of valueArray) {\n const identifier = deps.getIdentifier(val);\n const inOptions = optionsMapData.get(identifier);\n\n if (inOptions !== undefined) {\n filtered[index++] = inOptions;\n }\n else if (customValue) {\n filtered[index++] = deps.textValueToProperValue(val, returnObject);\n }\n }\n\n filtered.length = index; // Trim to actual size\n return filtered;\n }\n\n function filterValuesByIdentifier(\n valueArray: any[],\n optionsMapData: Map<any, TItem>,\n customValue: boolean,\n returnObject: boolean,\n ): TItem[] {\n const filtered: TItem[] = [];\n filtered.length = valueArray.length; // Pre-allocate array size\n let index = 0;\n\n for (const val of valueArray) {\n const inOptions = optionsMapData.get(val);\n\n if (inOptions !== undefined) {\n filtered[index++] = inOptions;\n }\n else if (customValue) {\n filtered[index++] = deps.textValueToProperValue(val, returnObject);\n }\n }\n\n filtered.length = index; // Trim to actual size\n return filtered;\n }\n\n function processReturnObjectValue(\n modelValueData: TValue | undefined,\n optionsMapData: Map<any, TItem>,\n returnObject: boolean,\n customValue: boolean,\n ): TItem[] {\n const multipleValue = Array.isArray(modelValueData);\n const valueArray = convertModelValueToArray(modelValueData);\n const filtered = filterValuesByOptions(valueArray, optionsMapData, customValue, returnObject);\n\n if (multipleValue || filtered.length === 0)\n return filtered;\n\n const val = filtered[0];\n assert(val);\n return [val];\n }\n\n function processStandardValue(\n modelValueData: TValue | undefined,\n optionsMapData: Map<any, TItem>,\n returnObject: boolean,\n customValue: boolean,\n ): TItem[] {\n const valueArray = convertModelValueToArray(modelValueData);\n return filterValuesByIdentifier(valueArray, optionsMapData, customValue, returnObject);\n }\n\n function onUpdateModelValue(value: TValue | undefined): void {\n set(modelValue, value);\n }\n\n function setSelected(selected: TItem[]): void {\n const keyAttr = get(opts.keyAttr);\n const returnObject = get(opts.returnObject);\n const selection = keyAttr && !returnObject ? selected.map(item => item[keyAttr]) : selected;\n\n if (get(deps.multiple))\n return onUpdateModelValue(selection as TValue);\n\n if (selection.length === 0)\n return onUpdateModelValue(undefined);\n\n return onUpdateModelValue(selection[0] as TValue);\n }\n\n const value = computed<TItem[]>({\n get: () => {\n const modelValueData = get(modelValue);\n const keyAttr = get(opts.keyAttr);\n const returnObject = get(opts.returnObject) ?? false;\n const customValue = get(opts.customValue) ?? false;\n const optionsMapData = get(optionsMap);\n\n if (keyAttr && returnObject)\n return processReturnObjectValue(modelValueData, optionsMapData, returnObject, customValue);\n\n return processStandardValue(modelValueData, optionsMapData, returnObject, customValue);\n },\n set: (selected: TItem[]): void => {\n setSelected(selected);\n },\n });\n\n // Sync search text when menu is closed and value changes\n watch([modelValue, () => get(deps.isOpen)], () => {\n if (get(deps.isOpen) || !get(deps.shouldApplyValueAsSearch))\n return;\n\n const currentValue = get(value);\n if (get(deps.multiple) || currentValue.length === 0) {\n deps.updateInternalSearch();\n }\n else {\n const firstItem = currentValue[0];\n assert(firstItem);\n deps.updateInternalSearch(deps.getText(firstItem));\n }\n }, { immediate: true });\n\n return {\n setSelected,\n value,\n };\n}\n"],"names":["value"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { computed } from "vue";
|
|
2
|
+
function useLabelWithQuote(label, required) {
|
|
3
|
+
return computed(() => {
|
|
4
|
+
const labelVal = label();
|
|
5
|
+
if (!labelVal)
|
|
6
|
+
return '"\\200B"';
|
|
7
|
+
const asterisk = required() ? "﹡" : "";
|
|
8
|
+
return `' ${labelVal}${asterisk} '`;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
useLabelWithQuote
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=use-label-with-quote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-label-with-quote.js","sources":["../../../src/composables/forms/use-label-with-quote.ts"],"sourcesContent":["import type { ComputedRef } from 'vue';\n\nexport function useLabelWithQuote(\n label: () => string,\n required: () => boolean,\n): ComputedRef<string> {\n return computed<string>(() => {\n const labelVal = label();\n if (!labelVal)\n return '\"\\\\200B\"';\n\n const asterisk = required() ? '﹡' : '';\n return `' ${labelVal}${asterisk} '`;\n });\n}\n"],"names":[],"mappings":";AAEO,SAAS,kBACd,OACA,UACqB;AACrB,SAAO,SAAiB,MAAM;AAC5B,UAAM,WAAW,MAAA;AACjB,QAAI,CAAC;AACH,aAAO;AAET,UAAM,WAAW,aAAa,MAAM;AACpC,WAAO,MAAM,QAAQ,GAAG,QAAQ;AAAA,EAClC,CAAC;AACH;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Ref, ShallowRef } from 'vue';
|
|
2
|
+
export interface PrependAppendWidth {
|
|
3
|
+
prependWidth: Ref<string>;
|
|
4
|
+
appendWidth: Ref<string>;
|
|
5
|
+
}
|
|
6
|
+
export declare function usePrependAppendWidth(prepend: Readonly<ShallowRef<HTMLDivElement | null>>, append: Readonly<ShallowRef<HTMLDivElement | null>>, offset?: number): PrependAppendWidth;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { assert } from "../../utils/assert.js";
|
|
2
|
+
import { shallowRef } from "vue";
|
|
3
|
+
import { useResizeObserver } from "@vueuse/core";
|
|
4
|
+
import { set } from "@vueuse/shared";
|
|
5
|
+
function usePrependAppendWidth(prepend, append, offset = 0) {
|
|
6
|
+
const prependWidth = shallowRef("0px");
|
|
7
|
+
const appendWidth = shallowRef("0px");
|
|
8
|
+
useResizeObserver(prepend, (entries) => {
|
|
9
|
+
const [entry] = entries;
|
|
10
|
+
assert(entry);
|
|
11
|
+
const { width, left } = entry.contentRect;
|
|
12
|
+
set(prependWidth, `${width + left + offset}px`);
|
|
13
|
+
});
|
|
14
|
+
useResizeObserver(append, (entries) => {
|
|
15
|
+
const [entry] = entries;
|
|
16
|
+
assert(entry);
|
|
17
|
+
const { width, right } = entry.contentRect;
|
|
18
|
+
set(appendWidth, `${width + right + offset}px`);
|
|
19
|
+
});
|
|
20
|
+
return { prependWidth, appendWidth };
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
usePrependAppendWidth
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=use-prepend-append-width.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-prepend-append-width.js","sources":["../../../src/composables/forms/use-prepend-append-width.ts"],"sourcesContent":["import type { Ref, ShallowRef } from 'vue';\nimport { assert } from '@/utils/assert';\n\nexport interface PrependAppendWidth {\n prependWidth: Ref<string>;\n appendWidth: Ref<string>;\n}\n\nexport function usePrependAppendWidth(\n prepend: Readonly<ShallowRef<HTMLDivElement | null>>,\n append: Readonly<ShallowRef<HTMLDivElement | null>>,\n offset: number = 0,\n): PrependAppendWidth {\n const prependWidth = shallowRef<string>('0px');\n const appendWidth = shallowRef<string>('0px');\n\n useResizeObserver(prepend, (entries) => {\n const [entry] = entries;\n assert(entry);\n const { width, left } = entry.contentRect;\n set(prependWidth, `${width + left + offset}px`);\n });\n\n useResizeObserver(append, (entries) => {\n const [entry] = entries;\n assert(entry);\n const { width, right } = entry.contentRect;\n set(appendWidth, `${width + right + offset}px`);\n });\n\n return { prependWidth, appendWidth };\n}\n"],"names":[],"mappings":";;;;AAQO,SAAS,sBACd,SACA,QACA,SAAiB,GACG;AACpB,QAAM,eAAe,WAAmB,KAAK;AAC7C,QAAM,cAAc,WAAmB,KAAK;AAE5C,oBAAkB,SAAS,CAAC,YAAY;AACtC,UAAM,CAAC,KAAK,IAAI;AAChB,WAAO,KAAK;AACZ,UAAM,EAAE,OAAO,KAAA,IAAS,MAAM;AAC9B,QAAI,cAAc,GAAG,QAAQ,OAAO,MAAM,IAAI;AAAA,EAChD,CAAC;AAED,oBAAkB,QAAQ,CAAC,YAAY;AACrC,UAAM,CAAC,KAAK,IAAI;AAChB,WAAO,KAAK;AACZ,UAAM,EAAE,OAAO,MAAA,IAAU,MAAM;AAC/B,QAAI,aAAa,GAAG,QAAQ,QAAQ,MAAM,IAAI;AAAA,EAChD,CAAC;AAED,SAAO,EAAE,cAAc,YAAA;AACzB;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { LuChevronsUpDown, LuArrowUp, LuArrowDown, LuArrowLeft, LuArrowRight, LuChevronUp, LuChevronDown, LuChevronLeft, LuChevronRight, LuChevronsLeft, LuChevronsRight, LuCircleAlert, LuCheck, LuCircleX, LuCircleCheck, LuCheckboxBlank, LuCheckboxFill, LuCheckboxIndeterminateFill, LuCheckboxBlankCircle, LuCheckboxBlankCircleFill, LuRadioButtonFill, LuClock } from "../icons/icons_1.js";
|
|
2
2
|
import { LuEllipsis, LuInfo, LuEye, LuEyeOff } from "../icons/icons_2.js";
|
|
3
3
|
import { LuTriangleAlert, LuX } from "../icons/icons_4.js";
|
|
4
|
-
import { inject } from "vue";
|
|
5
4
|
import { assert } from "../utils/assert.js";
|
|
5
|
+
import { inject } from "vue";
|
|
6
6
|
const requiredIcons = [
|
|
7
7
|
LuChevronsUpDown,
|
|
8
8
|
LuEllipsis,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.js","sources":["../../src/composables/icons.ts"],"sourcesContent":["import type { InjectionKey } from 'vue';\nimport type { GeneratedIcon } from '@/types/icons';\nimport {\n LuArrowDown,\n LuArrowLeft,\n LuArrowRight,\n LuArrowUp,\n LuCheck,\n LuCheckboxBlank,\n LuCheckboxBlankCircle,\n LuCheckboxBlankCircleFill,\n LuCheckboxFill,\n LuCheckboxIndeterminateFill,\n LuChevronDown,\n LuChevronLeft,\n LuChevronRight,\n LuChevronsLeft,\n LuChevronsRight,\n LuChevronsUpDown,\n LuChevronUp,\n LuCircleAlert,\n LuCircleCheck,\n LuCircleX,\n LuClock,\n LuEllipsis,\n LuEye,\n LuEyeOff,\n LuInfo,\n LuRadioButtonFill,\n LuTriangleAlert,\n LuX,\n} from '@/icons';\n\nconst requiredIcons: GeneratedIcon[] = [\n LuChevronsUpDown,\n LuEllipsis,\n LuTriangleAlert,\n LuX,\n LuInfo,\n LuArrowUp,\n LuArrowDown,\n LuArrowLeft,\n LuArrowRight,\n LuChevronUp,\n LuChevronDown,\n LuChevronLeft,\n LuChevronRight,\n LuChevronsLeft,\n LuChevronsRight,\n LuCircleAlert,\n LuEye,\n LuEyeOff,\n LuCheck,\n LuCircleX,\n LuCircleCheck,\n LuCheckboxBlank,\n LuCheckboxFill,\n LuCheckboxIndeterminateFill,\n LuCheckboxBlankCircle,\n LuCheckboxBlankCircleFill,\n LuRadioButtonFill,\n LuClock,\n];\n\nexport interface IconsOptions {\n registeredIcons: GeneratedIcon[];\n}\n\nexport interface UseIconsReturn {\n registeredIcons: Readonly<Record<string, [string, Record<string, string>][]>>;\n}\n\nexport const IconsSymbol: InjectionKey<UseIconsReturn> = Symbol.for('rui:icons');\n\nexport function createIconDefaults(options?: Partial<IconsOptions>): UseIconsReturn {\n const iconsToAdd = options?.registeredIcons || [];\n return {\n registeredIcons: {\n ...Object.fromEntries(\n [\n ...requiredIcons,\n ...iconsToAdd,\n ].map(({ components, name }) => [name, components]),\n ),\n },\n };\n}\n\nexport function useIcons(): UseIconsReturn {\n const icons = inject(IconsSymbol);\n assert(icons, 'Could not find icons injection');\n return icons;\n}\n"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"icons.js","sources":["../../src/composables/icons.ts"],"sourcesContent":["import type { InjectionKey } from 'vue';\nimport type { GeneratedIcon } from '@/types/icons';\nimport {\n LuArrowDown,\n LuArrowLeft,\n LuArrowRight,\n LuArrowUp,\n LuCheck,\n LuCheckboxBlank,\n LuCheckboxBlankCircle,\n LuCheckboxBlankCircleFill,\n LuCheckboxFill,\n LuCheckboxIndeterminateFill,\n LuChevronDown,\n LuChevronLeft,\n LuChevronRight,\n LuChevronsLeft,\n LuChevronsRight,\n LuChevronsUpDown,\n LuChevronUp,\n LuCircleAlert,\n LuCircleCheck,\n LuCircleX,\n LuClock,\n LuEllipsis,\n LuEye,\n LuEyeOff,\n LuInfo,\n LuRadioButtonFill,\n LuTriangleAlert,\n LuX,\n} from '@/icons';\nimport { assert } from '@/utils/assert';\n\nconst requiredIcons: GeneratedIcon[] = [\n LuChevronsUpDown,\n LuEllipsis,\n LuTriangleAlert,\n LuX,\n LuInfo,\n LuArrowUp,\n LuArrowDown,\n LuArrowLeft,\n LuArrowRight,\n LuChevronUp,\n LuChevronDown,\n LuChevronLeft,\n LuChevronRight,\n LuChevronsLeft,\n LuChevronsRight,\n LuCircleAlert,\n LuEye,\n LuEyeOff,\n LuCheck,\n LuCircleX,\n LuCircleCheck,\n LuCheckboxBlank,\n LuCheckboxFill,\n LuCheckboxIndeterminateFill,\n LuCheckboxBlankCircle,\n LuCheckboxBlankCircleFill,\n LuRadioButtonFill,\n LuClock,\n];\n\nexport interface IconsOptions {\n registeredIcons: GeneratedIcon[];\n}\n\nexport interface UseIconsReturn {\n registeredIcons: Readonly<Record<string, [string, Record<string, string>][]>>;\n}\n\nexport const IconsSymbol: InjectionKey<UseIconsReturn> = Symbol.for('rui:icons');\n\nexport function createIconDefaults(options?: Partial<IconsOptions>): UseIconsReturn {\n const iconsToAdd = options?.registeredIcons || [];\n return {\n registeredIcons: {\n ...Object.fromEntries(\n [\n ...requiredIcons,\n ...iconsToAdd,\n ].map(({ components, name }) => [name, components]),\n ),\n },\n };\n}\n\nexport function useIcons(): UseIconsReturn {\n const icons = inject(IconsSymbol);\n assert(icons, 'Could not find icons injection');\n return icons;\n}\n"],"names":[],"mappings":";;;;;AAkCA,MAAM,gBAAiC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAUO,MAAM,cAA4C,uBAAO,IAAI,WAAW;AAExE,SAAS,mBAAmB,SAAiD;AAClF,QAAM,aAAa,SAAS,mBAAmB,CAAA;AAC/C,SAAO;AAAA,IACL,iBAAiB;AAAA,MACf,GAAG,OAAO;AAAA,QACR;AAAA,UACE,GAAG;AAAA,UACH,GAAG;AAAA,QAAA,EACH,IAAI,CAAC,EAAE,YAAY,WAAW,CAAC,MAAM,UAAU,CAAC;AAAA,MAAA;AAAA,IACpD;AAAA,EACF;AAEJ;AAEO,SAAS,WAA2B;AACzC,QAAM,QAAQ,OAAO,WAAW;AAChC,SAAO,OAAO,gCAAgC;AAC9C,SAAO;AACT;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createPopper } from "@popperjs/core";
|
|
2
2
|
import { useResizeObserver, isDefined, unrefElement } from "@vueuse/core";
|
|
3
|
-
import { ref, computed, onMounted, watchEffect } from "vue";
|
|
3
|
+
import { ref, shallowRef, computed, onMounted, watchEffect } from "vue";
|
|
4
4
|
import { useTimeoutManager } from "./timeout-manager.js";
|
|
5
5
|
import { get, set } from "@vueuse/shared";
|
|
6
6
|
const DEFAULT_POPPER_OPTIONS = {
|
|
@@ -15,13 +15,13 @@ const DEFAULT_POPPER_OPTIONS = {
|
|
|
15
15
|
scroll: true,
|
|
16
16
|
strategy: "absolute"
|
|
17
17
|
};
|
|
18
|
-
function usePopper(options, disabled =
|
|
19
|
-
const reference = ref(
|
|
20
|
-
const popper = ref(
|
|
21
|
-
const instance = ref(
|
|
22
|
-
const open =
|
|
23
|
-
const popperEnter =
|
|
24
|
-
const leavePending =
|
|
18
|
+
function usePopper(options, disabled = shallowRef(false), openDelay = shallowRef(0), closeDelay = shallowRef(0), virtualReference) {
|
|
19
|
+
const reference = ref();
|
|
20
|
+
const popper = ref();
|
|
21
|
+
const instance = ref();
|
|
22
|
+
const open = shallowRef(false);
|
|
23
|
+
const popperEnter = shallowRef(false);
|
|
24
|
+
const leavePending = shallowRef(false);
|
|
25
25
|
const openTimeoutManager = useTimeoutManager();
|
|
26
26
|
const closeTimeoutManager = useTimeoutManager();
|
|
27
27
|
const onPopperLeave = () => {
|
|
@@ -37,9 +37,12 @@ function usePopper(options, disabled = ref(false), openDelay = ref(0), closeDela
|
|
|
37
37
|
set(leavePending, false);
|
|
38
38
|
if (!openTimeoutManager.isActive()) {
|
|
39
39
|
set(popperEnter, true);
|
|
40
|
-
openTimeoutManager.create(
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
openTimeoutManager.create(
|
|
41
|
+
() => {
|
|
42
|
+
set(open, true);
|
|
43
|
+
},
|
|
44
|
+
immediate ? 0 : get(openDelay)
|
|
45
|
+
);
|
|
43
46
|
}
|
|
44
47
|
};
|
|
45
48
|
const onClose = (immediate = false) => {
|
|
@@ -47,11 +50,14 @@ function usePopper(options, disabled = ref(false), openDelay = ref(0), closeDela
|
|
|
47
50
|
return;
|
|
48
51
|
openTimeoutManager.clear();
|
|
49
52
|
if (!closeTimeoutManager.isActive()) {
|
|
50
|
-
closeTimeoutManager.create(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
closeTimeoutManager.create(
|
|
54
|
+
() => {
|
|
55
|
+
if (!get(open))
|
|
56
|
+
onPopperLeave();
|
|
57
|
+
set(open, false);
|
|
58
|
+
},
|
|
59
|
+
immediate ? 0 : get(closeDelay)
|
|
60
|
+
);
|
|
55
61
|
}
|
|
56
62
|
};
|
|
57
63
|
const onLeavePending = () => {
|
|
@@ -68,40 +74,48 @@ function usePopper(options, disabled = ref(false), openDelay = ref(0), closeDela
|
|
|
68
74
|
resize = DEFAULT_POPPER_OPTIONS.resize,
|
|
69
75
|
scroll = DEFAULT_POPPER_OPTIONS.scroll
|
|
70
76
|
} = get(options);
|
|
71
|
-
return [
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
return [
|
|
78
|
+
{
|
|
79
|
+
enabled: false,
|
|
80
|
+
name: "hide"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
enabled: !locked,
|
|
84
|
+
name: "flip"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: "preventOverflow",
|
|
88
|
+
options: {
|
|
89
|
+
padding: overflowPadding
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: "offset",
|
|
94
|
+
options: {
|
|
95
|
+
offset: [offsetSkid, offsetDistance]
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "computeStyles",
|
|
100
|
+
options: {
|
|
101
|
+
adaptive,
|
|
102
|
+
gpuAcceleration
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: "eventListeners",
|
|
107
|
+
options: {
|
|
108
|
+
resize,
|
|
109
|
+
scroll
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: "arrow",
|
|
114
|
+
options: {
|
|
115
|
+
padding: 4
|
|
116
|
+
}
|
|
81
117
|
}
|
|
82
|
-
|
|
83
|
-
name: "offset",
|
|
84
|
-
options: {
|
|
85
|
-
offset: [offsetSkid, offsetDistance]
|
|
86
|
-
}
|
|
87
|
-
}, {
|
|
88
|
-
name: "computeStyles",
|
|
89
|
-
options: {
|
|
90
|
-
adaptive,
|
|
91
|
-
gpuAcceleration
|
|
92
|
-
}
|
|
93
|
-
}, {
|
|
94
|
-
name: "eventListeners",
|
|
95
|
-
options: {
|
|
96
|
-
resize,
|
|
97
|
-
scroll
|
|
98
|
-
}
|
|
99
|
-
}, {
|
|
100
|
-
name: "arrow",
|
|
101
|
-
options: {
|
|
102
|
-
padding: 4
|
|
103
|
-
}
|
|
104
|
-
}];
|
|
118
|
+
];
|
|
105
119
|
});
|
|
106
120
|
const popperConfig = computed(() => {
|
|
107
121
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popper.js","sources":["../../src/composables/popper.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"popper.js","sources":["../../src/composables/popper.ts"],"sourcesContent":["import {\n createPopper,\n type Instance,\n type Placement,\n type PositioningStrategy,\n type StrictModifiers,\n type VirtualElement,\n} from '@popperjs/core';\nimport { type MaybeElement, unrefElement } from '@vueuse/core';\nimport { onMounted, type Ref, ref, watchEffect } from 'vue';\nimport { useTimeoutManager } from './timeout-manager';\n\nexport interface PopperOptions {\n locked?: boolean;\n overflowPadding?: number;\n offsetDistance?: number;\n offsetSkid?: number;\n placement?: Placement;\n strategy?: PositioningStrategy;\n gpuAcceleration?: boolean;\n adaptive?: boolean;\n scroll?: boolean;\n resize?: boolean;\n}\n\nexport const DEFAULT_POPPER_OPTIONS: PopperOptions = {\n adaptive: true,\n gpuAcceleration: true,\n locked: false,\n offsetDistance: 8,\n offsetSkid: 0,\n overflowPadding: 8,\n placement: 'bottom',\n resize: true,\n scroll: true,\n strategy: 'absolute',\n};\n\ninterface UsePopperReturn {\n instance: Ref<Instance | undefined>;\n leavePending: Ref<boolean>;\n onClose: (immediate?: boolean) => void;\n onLeavePending: () => void;\n onOpen: (immediate?: boolean) => void;\n onPopperLeave: () => void;\n open: Ref<boolean, boolean>;\n popper: Ref<MaybeElement>;\n popperEnter: Ref<boolean>;\n reference: Ref<HTMLElement | undefined>;\n updatePopper: () => Promise<void>;\n}\n\nexport function usePopper(\n options: Ref<PopperOptions>,\n disabled: Ref<boolean> = shallowRef(false),\n openDelay: Ref<number> = shallowRef(0),\n closeDelay: Ref<number> = shallowRef(0),\n virtualReference?: Ref<Element | VirtualElement>,\n): UsePopperReturn {\n const reference = ref<HTMLElement>();\n const popper = ref<MaybeElement>();\n const instance = ref<Instance>();\n const open = shallowRef<boolean>(false);\n const popperEnter = shallowRef<boolean>(false);\n const leavePending = shallowRef<boolean>(false);\n\n const openTimeoutManager = useTimeoutManager();\n const closeTimeoutManager = useTimeoutManager();\n\n const onPopperLeave = (): void => {\n set(popperEnter, false);\n };\n\n const updatePopper = async (): Promise<void> => {\n await get(instance)?.update();\n };\n\n const onOpen = (immediate: boolean = false): void => {\n if (get(disabled))\n return;\n\n closeTimeoutManager.clear();\n\n set(leavePending, false);\n if (!openTimeoutManager.isActive()) {\n set(popperEnter, true);\n\n openTimeoutManager.create(\n () => {\n set(open, true);\n },\n immediate ? 0 : get(openDelay),\n );\n }\n };\n\n const onClose = (immediate: boolean = false): void => {\n if (get(disabled))\n return;\n\n openTimeoutManager.clear();\n\n if (!closeTimeoutManager.isActive()) {\n closeTimeoutManager.create(\n () => {\n if (!get(open))\n onPopperLeave();\n\n set(open, false);\n },\n immediate ? 0 : get(closeDelay),\n );\n }\n };\n\n const onLeavePending = (): void => {\n set(leavePending, true);\n };\n\n const modifiers = computed<StrictModifiers[]>(() => {\n const {\n adaptive = DEFAULT_POPPER_OPTIONS.adaptive,\n gpuAcceleration = DEFAULT_POPPER_OPTIONS.gpuAcceleration,\n locked = DEFAULT_POPPER_OPTIONS.locked,\n offsetDistance = DEFAULT_POPPER_OPTIONS.offsetDistance,\n offsetSkid = DEFAULT_POPPER_OPTIONS.offsetSkid,\n overflowPadding = DEFAULT_POPPER_OPTIONS.overflowPadding,\n resize = DEFAULT_POPPER_OPTIONS.resize,\n scroll = DEFAULT_POPPER_OPTIONS.scroll,\n } = get(options);\n\n return [\n {\n enabled: false,\n name: 'hide',\n },\n {\n enabled: !locked,\n name: 'flip',\n },\n {\n name: 'preventOverflow',\n options: {\n padding: overflowPadding,\n },\n },\n {\n name: 'offset',\n options: {\n offset: [offsetSkid, offsetDistance],\n },\n },\n {\n name: 'computeStyles',\n options: {\n adaptive,\n gpuAcceleration,\n },\n },\n {\n name: 'eventListeners',\n options: {\n resize,\n scroll,\n },\n },\n {\n name: 'arrow',\n options: {\n padding: 4,\n },\n },\n ];\n });\n\n const popperConfig = computed<{\n modifiers: StrictModifiers[];\n placement: Placement | undefined;\n strategy: PositioningStrategy | undefined;\n }>(() => {\n const {\n placement = DEFAULT_POPPER_OPTIONS.placement,\n strategy = DEFAULT_POPPER_OPTIONS.strategy,\n } = get(options);\n\n return {\n modifiers: get(modifiers),\n placement,\n strategy,\n };\n });\n\n function getValidElements(): {\n popperEl: HTMLElement;\n referenceEl: Element | VirtualElement;\n } | null {\n if (!get(popper) || (!get(reference) && !get(virtualReference))) {\n return null;\n }\n\n const popperEl = unrefElement(popper);\n const referenceEl = get(virtualReference) || unrefElement(reference);\n\n if (!(popperEl instanceof HTMLElement) || !referenceEl) {\n return null;\n }\n\n return { popperEl, referenceEl };\n }\n\n function initializePopper(onInvalidate: (cleanupFn: () => void) => void): void {\n const elements = getValidElements();\n if (!elements)\n return;\n\n const { popperEl, referenceEl } = elements;\n\n const value = createPopper(referenceEl, popperEl, get(popperConfig));\n\n set(instance, value);\n onInvalidate(value.destroy);\n }\n\n useResizeObserver([reference, popper], async () => {\n if (isDefined(instance))\n await get(instance).update();\n });\n\n onMounted(() => {\n watchEffect((onInvalidate) => {\n initializePopper(onInvalidate);\n });\n });\n\n return {\n instance,\n leavePending,\n onClose,\n onLeavePending,\n onOpen,\n onPopperLeave,\n open,\n popper,\n popperEnter,\n reference,\n updatePopper,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { MaybeRef } from 'vue';
|
|
1
|
+
import type { MaybeRef, ShallowRef } from 'vue';
|
|
2
|
+
export interface UseStickyTableHeaderRefs {
|
|
3
|
+
table: Readonly<ShallowRef<HTMLTableElement | null>>;
|
|
4
|
+
tableScroller: Readonly<ShallowRef<HTMLElement | null>>;
|
|
5
|
+
}
|
|
2
6
|
/**
|
|
3
7
|
* Setup sticky table header
|
|
4
8
|
*/
|
|
5
|
-
export declare function useStickyTableHeader(sticky
|
|
6
|
-
stick:
|
|
7
|
-
table: globalThis.Ref<HTMLTableElement | null, HTMLTableElement | null>;
|
|
8
|
-
tableScroller: globalThis.Ref<HTMLElement | null, HTMLElement | null>;
|
|
9
|
+
export declare function useStickyTableHeader(sticky: MaybeRef<boolean> | undefined, offsetTop: MaybeRef<number | undefined>, refs: UseStickyTableHeaderRefs): {
|
|
10
|
+
stick: ShallowRef<boolean>;
|
|
9
11
|
};
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { assert } from "../utils/assert.js";
|
|
2
|
-
import {
|
|
2
|
+
import { shallowRef, onMounted } from "vue";
|
|
3
3
|
import { get, set } from "@vueuse/shared";
|
|
4
4
|
import { useEventListener, useMutationObserver, useResizeObserver } from "@vueuse/core";
|
|
5
|
-
function useStickyTableHeader(sticky =
|
|
6
|
-
const table =
|
|
7
|
-
const
|
|
8
|
-
const stick = ref(false);
|
|
5
|
+
function useStickyTableHeader(sticky = shallowRef(false), offsetTop, refs) {
|
|
6
|
+
const { table, tableScroller } = refs;
|
|
7
|
+
const stick = shallowRef(false);
|
|
9
8
|
const borderPrecision = -0.5;
|
|
10
9
|
const selectors = {
|
|
11
10
|
head: ":scope > thead[data-id=head-main]",
|
|
@@ -17,17 +16,18 @@ function useStickyTableHeader(sticky = ref(false), offsetTop) {
|
|
|
17
16
|
const root = get(table);
|
|
18
17
|
if (!get(sticky) || !root)
|
|
19
18
|
return;
|
|
20
|
-
const theadClone = root.querySelector(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const head = root.querySelector(`${selectors.head} > tr`) ?? null;
|
|
19
|
+
const theadClone = root.querySelector(`${selectors.headClone} > tr`);
|
|
20
|
+
const head = root.querySelector(`${selectors.head} > tr`);
|
|
21
|
+
let resizeCleanups = [];
|
|
24
22
|
const observeChildTh = () => {
|
|
25
|
-
|
|
23
|
+
resizeCleanups.forEach((cleanup) => cleanup());
|
|
24
|
+
resizeCleanups = [];
|
|
25
|
+
const columns = head?.querySelectorAll(selectors.th);
|
|
26
|
+
const clonedColumns = theadClone?.querySelectorAll(
|
|
26
27
|
selectors.th
|
|
27
28
|
);
|
|
28
|
-
const clonedColumns = theadClone?.querySelectorAll(selectors.th);
|
|
29
29
|
clonedColumns?.forEach((th, i) => {
|
|
30
|
-
useResizeObserver(th, (entries) => {
|
|
30
|
+
const { stop } = useResizeObserver(th, (entries) => {
|
|
31
31
|
const entry = entries[0];
|
|
32
32
|
assert(entry);
|
|
33
33
|
const cellRect = entry.target.getBoundingClientRect();
|
|
@@ -35,18 +35,23 @@ function useStickyTableHeader(sticky = ref(false), offsetTop) {
|
|
|
35
35
|
if (column)
|
|
36
36
|
column.style.width = `${cellRect.width}px`;
|
|
37
37
|
});
|
|
38
|
+
resizeCleanups.push(stop);
|
|
38
39
|
});
|
|
39
40
|
};
|
|
40
|
-
useMutationObserver(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
useMutationObserver(
|
|
42
|
+
theadClone,
|
|
43
|
+
(mutationsList) => {
|
|
44
|
+
for (const mutation of mutationsList) {
|
|
45
|
+
if (mutation.type === "childList" || mutation.type === "attributes")
|
|
46
|
+
observeChildTh();
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
attributes: true,
|
|
51
|
+
childList: true,
|
|
52
|
+
subtree: true
|
|
44
53
|
}
|
|
45
|
-
|
|
46
|
-
attributes: true,
|
|
47
|
-
childList: true,
|
|
48
|
-
subtree: true
|
|
49
|
-
});
|
|
54
|
+
);
|
|
50
55
|
observeChildTh();
|
|
51
56
|
};
|
|
52
57
|
const toggleStickyClass = () => {
|
|
@@ -54,49 +59,54 @@ function useStickyTableHeader(sticky = ref(false), offsetTop) {
|
|
|
54
59
|
if (!get(sticky) || !root)
|
|
55
60
|
return;
|
|
56
61
|
const rect = root.getBoundingClientRect();
|
|
57
|
-
const theadClone = root.querySelector(
|
|
58
|
-
selectors.headClone
|
|
59
|
-
);
|
|
62
|
+
const theadClone = root.querySelector(selectors.headClone);
|
|
60
63
|
const clonedRect = theadClone?.getBoundingClientRect();
|
|
61
|
-
const head = root.querySelector(selectors.head)
|
|
62
|
-
|
|
63
|
-
if (!rect || !clonedRect || !head || !theadClone || !headRect)
|
|
64
|
+
const head = root.querySelector(selectors.head);
|
|
65
|
+
if (!clonedRect || !head || !theadClone)
|
|
64
66
|
return;
|
|
65
|
-
const {
|
|
66
|
-
height: theadHeight,
|
|
67
|
-
left: theadLeft,
|
|
68
|
-
width: theadWidth
|
|
69
|
-
} = clonedRect;
|
|
67
|
+
const { height: theadHeight, left: theadLeft, width: theadWidth } = clonedRect;
|
|
70
68
|
const { bottom: tableBottom, top: tableTop } = rect;
|
|
71
69
|
const top = get(offsetTop) ?? 0;
|
|
72
70
|
head.style.width = `${theadWidth}px`;
|
|
73
71
|
const rows = root.querySelectorAll(selectors.row);
|
|
72
|
+
if (rows.length <= 1) {
|
|
73
|
+
set(stick, false);
|
|
74
|
+
head.style.left = `${borderPrecision}px`;
|
|
75
|
+
head.style.top = "0";
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
74
78
|
const lastRowRect = rows.item(rows.length - 1)?.getBoundingClientRect();
|
|
75
|
-
if (tableTop <= top && tableBottom > top
|
|
79
|
+
if (tableTop <= top && tableBottom > top) {
|
|
76
80
|
set(stick, true);
|
|
77
81
|
head.style.left = `${theadLeft + borderPrecision}px`;
|
|
78
82
|
const lastRowHeight = lastRowRect?.height ?? 0;
|
|
79
83
|
if (tableBottom <= lastRowHeight + theadHeight + top)
|
|
80
84
|
head.style.top = `${tableBottom - lastRowHeight - theadHeight}px`;
|
|
81
|
-
else
|
|
82
|
-
head.style.top = `${top}px`;
|
|
85
|
+
else head.style.top = `${top}px`;
|
|
83
86
|
} else {
|
|
84
87
|
set(stick, false);
|
|
85
88
|
head.style.left = `${borderPrecision}px`;
|
|
86
89
|
head.style.top = "0";
|
|
87
90
|
}
|
|
88
91
|
};
|
|
92
|
+
let rafId = null;
|
|
93
|
+
function throttledToggleStickyClass() {
|
|
94
|
+
if (rafId !== null)
|
|
95
|
+
return;
|
|
96
|
+
rafId = requestAnimationFrame(() => {
|
|
97
|
+
toggleStickyClass();
|
|
98
|
+
rafId = null;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
89
101
|
onMounted(() => {
|
|
90
102
|
toggleStickyClass();
|
|
91
|
-
useEventListener(tableScroller, "scroll",
|
|
92
|
-
useEventListener(document.body, "scroll",
|
|
93
|
-
useEventListener(window, "resize",
|
|
103
|
+
useEventListener(tableScroller, "scroll", throttledToggleStickyClass);
|
|
104
|
+
useEventListener(document.body, "scroll", throttledToggleStickyClass);
|
|
105
|
+
useEventListener(window, "resize", throttledToggleStickyClass);
|
|
94
106
|
watchCellWidth();
|
|
95
107
|
});
|
|
96
108
|
return {
|
|
97
|
-
stick
|
|
98
|
-
table,
|
|
99
|
-
tableScroller
|
|
109
|
+
stick
|
|
100
110
|
};
|
|
101
111
|
}
|
|
102
112
|
export {
|