@evance/evance-ui 1.1.10 → 1.1.11
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/esm/EvApp.mjs +1 -7
- package/dist/esm/EvApp.mjs.map +1 -1
- package/dist/esm/EvAvatar.mjs +1 -7
- package/dist/esm/EvAvatar.mjs.map +1 -1
- package/dist/esm/EvBadge.mjs +1 -7
- package/dist/esm/EvBadge.mjs.map +1 -1
- package/dist/esm/EvBanner.mjs +1 -7
- package/dist/esm/EvBanner.mjs.map +1 -1
- package/dist/esm/EvBlock.mjs +1 -7
- package/dist/esm/EvBlock.mjs.map +1 -1
- package/dist/esm/EvButton.mjs +1 -7
- package/dist/esm/EvButton.mjs.map +1 -1
- package/dist/esm/EvButtonGroup.mjs +1 -7
- package/dist/esm/EvButtonGroup.mjs.map +1 -1
- package/dist/esm/EvButtonSelect.mjs +1 -8
- package/dist/esm/EvButtonSelect.mjs.map +1 -1
- package/dist/esm/EvButtonSwitch.mjs +1 -8
- package/dist/esm/EvButtonSwitch.mjs.map +1 -1
- package/dist/esm/EvCard.mjs +1 -15
- package/dist/esm/EvCard.mjs.map +1 -1
- package/dist/esm/EvCardActions.mjs +1 -7
- package/dist/esm/EvCardActions.mjs.map +1 -1
- package/dist/esm/EvCardContent.mjs +1 -7
- package/dist/esm/EvCardContent.mjs.map +1 -1
- package/dist/esm/EvCheckbox.mjs +1 -8
- package/dist/esm/EvCheckbox.mjs.map +1 -1
- package/dist/esm/EvCode.mjs +1 -7
- package/dist/esm/EvCode.mjs.map +1 -1
- package/dist/esm/EvContainer.mjs +1 -7
- package/dist/esm/EvContainer.mjs.map +1 -1
- package/dist/esm/EvDataTable.mjs +1 -19
- package/dist/esm/EvDataTable.mjs.map +1 -1
- package/dist/esm/EvDataTableCell.mjs +1 -7
- package/dist/esm/EvDataTableCell.mjs.map +1 -1
- package/dist/esm/EvDataTableRow.mjs +1 -7
- package/dist/esm/EvDataTableRow.mjs.map +1 -1
- package/dist/esm/EvDataTableSearch.mjs +1 -7
- package/dist/esm/EvDataTableSearch.mjs.map +1 -1
- package/dist/esm/EvDateField.mjs +1 -7
- package/dist/esm/EvDateField.mjs.map +1 -1
- package/dist/esm/EvDatePicker.mjs +1 -7
- package/dist/esm/EvDatePicker.mjs.map +1 -1
- package/dist/esm/EvDatePickerMonth.mjs +1 -7
- package/dist/esm/EvDatePickerMonth.mjs.map +1 -1
- package/dist/esm/EvDatePickerMonths.mjs +1 -7
- package/dist/esm/EvDatePickerMonths.mjs.map +1 -1
- package/dist/esm/EvDatePickerYears.mjs +1 -7
- package/dist/esm/EvDatePickerYears.mjs.map +1 -1
- package/dist/esm/EvDefaultsProvider.mjs +1 -7
- package/dist/esm/EvDefaultsProvider.mjs.map +1 -1
- package/dist/esm/EvDialog.mjs +1 -9
- package/dist/esm/EvDialog.mjs.map +1 -1
- package/dist/esm/EvDivider.mjs +1 -6
- package/dist/esm/EvDivider.mjs.map +1 -1
- package/dist/esm/EvDrawer.mjs +1 -7
- package/dist/esm/EvDrawer.mjs.map +1 -1
- package/dist/esm/EvEditOnClick.mjs +1 -7
- package/dist/esm/EvEditOnClick.mjs.map +1 -1
- package/dist/esm/EvEmptyState.mjs +1 -7
- package/dist/esm/EvEmptyState.mjs.map +1 -1
- package/dist/esm/EvErrors.mjs +1 -7
- package/dist/esm/EvErrors.mjs.map +1 -1
- package/dist/esm/EvEyebrow.mjs +1 -7
- package/dist/esm/EvEyebrow.mjs.map +1 -1
- package/dist/esm/EvFieldHelp.mjs +1 -7
- package/dist/esm/EvFieldHelp.mjs.map +1 -1
- package/dist/esm/EvFilterButton.mjs +1 -7
- package/dist/esm/EvFilterButton.mjs.map +1 -1
- package/dist/esm/EvForm.mjs +1 -7
- package/dist/esm/EvForm.mjs.map +1 -1
- package/dist/esm/EvFormHelp.mjs +1 -7
- package/dist/esm/EvFormHelp.mjs.map +1 -1
- package/dist/esm/EvHeading.mjs +1 -11
- package/dist/esm/EvHeading.mjs.map +1 -1
- package/dist/esm/EvHotkey.mjs +1 -8
- package/dist/esm/EvHotkey.mjs.map +1 -1
- package/dist/esm/EvIcon.mjs +1 -10
- package/dist/esm/EvIcon.mjs.map +1 -1
- package/dist/esm/EvImg.mjs +1 -7
- package/dist/esm/EvImg.mjs.map +1 -1
- package/dist/esm/EvInfiniteScroll.mjs +1 -7
- package/dist/esm/EvInfiniteScroll.mjs.map +1 -1
- package/dist/esm/EvKbd.mjs +1 -8
- package/dist/esm/EvKbd.mjs.map +1 -1
- package/dist/esm/EvLabel.mjs +1 -8
- package/dist/esm/EvLabel.mjs.map +1 -1
- package/dist/esm/EvLayout.mjs +1 -7
- package/dist/esm/EvLayout.mjs.map +1 -1
- package/dist/esm/EvLink.mjs +1 -7
- package/dist/esm/EvLink.mjs.map +1 -1
- package/dist/esm/EvList.mjs +1 -8
- package/dist/esm/EvList.mjs.map +1 -1
- package/dist/esm/EvListItem.mjs +1 -7
- package/dist/esm/EvListItem.mjs.map +1 -1
- package/dist/esm/EvLozenge.mjs +1 -7
- package/dist/esm/EvLozenge.mjs.map +1 -1
- package/dist/esm/EvMenu.mjs +1 -9
- package/dist/esm/EvMenu.mjs.map +1 -1
- package/dist/esm/EvMenuTransition.mjs +1 -9
- package/dist/esm/EvMenuTransition.mjs.map +1 -1
- package/dist/esm/EvMessage.mjs +1 -7
- package/dist/esm/EvMessage.mjs.map +1 -1
- package/dist/esm/EvNotification.mjs +1 -7
- package/dist/esm/EvNotification.mjs.map +1 -1
- package/dist/esm/EvNotifications.mjs +1 -7
- package/dist/esm/EvNotifications.mjs.map +1 -1
- package/dist/esm/EvNumber.mjs +1 -7
- package/dist/esm/EvNumber.mjs.map +1 -1
- package/dist/esm/EvNumberField.mjs +1 -8
- package/dist/esm/EvNumberField.mjs.map +1 -1
- package/dist/esm/EvOverlay.mjs +1 -16
- package/dist/esm/EvOverlay.mjs.map +1 -1
- package/dist/esm/EvProgress.mjs +1 -5
- package/dist/esm/EvProgress.mjs.map +1 -1
- package/dist/esm/EvProgressCircular.mjs +1 -5
- package/dist/esm/EvProgressCircular.mjs.map +1 -1
- package/dist/esm/EvQuickfind.mjs +1 -5
- package/dist/esm/EvQuickfind.mjs.map +1 -1
- package/dist/esm/EvRadio.mjs +1 -7
- package/dist/esm/EvRadio.mjs.map +1 -1
- package/dist/esm/EvRadioGroup.mjs +1 -8
- package/dist/esm/EvRadioGroup.mjs.map +1 -1
- package/dist/esm/EvResponsive.mjs +1 -7
- package/dist/esm/EvResponsive.mjs.map +1 -1
- package/dist/esm/EvSection.mjs +1 -7
- package/dist/esm/EvSection.mjs.map +1 -1
- package/dist/esm/EvSelect.mjs +1 -7
- package/dist/esm/EvSelect.mjs.map +1 -1
- package/dist/esm/EvSkeleton.mjs +1 -8
- package/dist/esm/EvSkeleton.mjs.map +1 -1
- package/dist/esm/EvSlideGroup.mjs +1 -10
- package/dist/esm/EvSlideGroup.mjs.map +1 -1
- package/dist/esm/EvSlideGroupItem.mjs +1 -10
- package/dist/esm/EvSlideGroupItem.mjs.map +1 -1
- package/dist/esm/EvSpacer.mjs +1 -7
- package/dist/esm/EvSpacer.mjs.map +1 -1
- package/dist/esm/EvSurface.mjs +1 -8
- package/dist/esm/EvSurface.mjs.map +1 -1
- package/dist/esm/EvSwatch.mjs +1 -8
- package/dist/esm/EvSwatch.mjs.map +1 -1
- package/dist/esm/EvSwitch.mjs +1 -7
- package/dist/esm/EvSwitch.mjs.map +1 -1
- package/dist/esm/EvTab.mjs +1 -7
- package/dist/esm/EvTab.mjs.map +1 -1
- package/dist/esm/EvTabs.mjs +1 -12
- package/dist/esm/EvTabs.mjs.map +1 -1
- package/dist/esm/EvTag.mjs +1 -7
- package/dist/esm/EvTag.mjs.map +1 -1
- package/dist/esm/EvTagGroup.mjs +1 -8
- package/dist/esm/EvTagGroup.mjs.map +1 -1
- package/dist/esm/EvText.mjs +1 -10
- package/dist/esm/EvText.mjs.map +1 -1
- package/dist/esm/EvTextarea.mjs +1 -7
- package/dist/esm/EvTextarea.mjs.map +1 -1
- package/dist/esm/EvTextfield.mjs +1 -7
- package/dist/esm/EvTextfield.mjs.map +1 -1
- package/dist/esm/EvThumbnail.mjs +1 -8
- package/dist/esm/EvThumbnail.mjs.map +1 -1
- package/dist/esm/EvTimeField.mjs +1 -7
- package/dist/esm/EvTimeField.mjs.map +1 -1
- package/dist/esm/EvTimePicker.mjs +1 -7
- package/dist/esm/EvTimePicker.mjs.map +1 -1
- package/dist/esm/EvTimePickerHours.mjs +1 -7
- package/dist/esm/EvTimePickerHours.mjs.map +1 -1
- package/dist/esm/EvTimePickerMinutes.mjs +1 -7
- package/dist/esm/EvTimePickerMinutes.mjs.map +1 -1
- package/dist/esm/EvToolbar.mjs +1 -7
- package/dist/esm/EvToolbar.mjs.map +1 -1
- package/dist/esm/EvTooltip.mjs +1 -7
- package/dist/esm/EvTooltip.mjs.map +1 -1
- package/dist/esm/EvTransitionExpand.mjs +1 -15
- package/dist/esm/EvTransitionExpand.mjs.map +1 -1
- package/dist/esm/EvTransitionExpandX.mjs +1 -8
- package/dist/esm/EvTransitionExpandX.mjs.map +1 -1
- package/dist/esm/EvVirtualScroll.mjs +1 -8
- package/dist/esm/EvVirtualScroll.mjs.map +1 -1
- package/dist/esm/EvWindow.mjs +1 -13
- package/dist/esm/EvWindow.mjs.map +1 -1
- package/dist/esm/EvWindowItem.mjs +1 -7
- package/dist/esm/EvWindowItem.mjs.map +1 -1
- package/dist/esm/_virtual/_plugin-vue_export-helper.mjs +1 -11
- package/dist/esm/_virtual/_plugin-vue_export-helper.mjs.map +1 -1
- package/dist/esm/components/EvApp/EvApp.mjs +1 -18
- package/dist/esm/components/EvApp/EvApp.mjs.map +1 -1
- package/dist/esm/components/EvApp/EvApp.vue.mjs +1 -45
- package/dist/esm/components/EvApp/EvApp.vue.mjs.map +1 -1
- package/dist/esm/components/EvApp/EvApp.vue2.mjs +1 -5
- package/dist/esm/components/EvApp/EvApp.vue2.mjs.map +1 -1
- package/dist/esm/components/EvAvatar/EvAvatar.mjs +1 -23
- package/dist/esm/components/EvAvatar/EvAvatar.mjs.map +1 -1
- package/dist/esm/components/EvAvatar/EvAvatar.vue.mjs +1 -52
- package/dist/esm/components/EvAvatar/EvAvatar.vue.mjs.map +1 -1
- package/dist/esm/components/EvAvatar/EvAvatar.vue2.mjs +1 -5
- package/dist/esm/components/EvAvatar/EvAvatar.vue2.mjs.map +1 -1
- package/dist/esm/components/EvBadge/EvBadge.mjs +1 -38
- package/dist/esm/components/EvBadge/EvBadge.mjs.map +1 -1
- package/dist/esm/components/EvBadge/EvBadge.vue.mjs +1 -90
- package/dist/esm/components/EvBadge/EvBadge.vue.mjs.map +1 -1
- package/dist/esm/components/EvBadge/EvBadge.vue2.mjs +1 -5
- package/dist/esm/components/EvBadge/EvBadge.vue2.mjs.map +1 -1
- package/dist/esm/components/EvBanner/EvBanner.mjs +1 -29
- package/dist/esm/components/EvBanner/EvBanner.mjs.map +1 -1
- package/dist/esm/components/EvBanner/EvBanner.vue.mjs +1 -115
- package/dist/esm/components/EvBanner/EvBanner.vue.mjs.map +1 -1
- package/dist/esm/components/EvBanner/EvBanner.vue2.mjs +1 -5
- package/dist/esm/components/EvBanner/EvBanner.vue2.mjs.map +1 -1
- package/dist/esm/components/EvButton/EvButton.mjs +1 -49
- package/dist/esm/components/EvButton/EvButton.mjs.map +1 -1
- package/dist/esm/components/EvButton/EvButton.vue.mjs +1 -188
- package/dist/esm/components/EvButton/EvButton.vue.mjs.map +1 -1
- package/dist/esm/components/EvButton/EvButton.vue2.mjs +1 -5
- package/dist/esm/components/EvButton/EvButton.vue2.mjs.map +1 -1
- package/dist/esm/components/EvButtonGroup/EvButtonGroup.mjs +1 -34
- package/dist/esm/components/EvButtonGroup/EvButtonGroup.mjs.map +1 -1
- package/dist/esm/components/EvButtonGroup/EvButtonGroup.vue.mjs +1 -78
- package/dist/esm/components/EvButtonGroup/EvButtonGroup.vue.mjs.map +1 -1
- package/dist/esm/components/EvButtonGroup/EvButtonGroup.vue2.mjs +1 -5
- package/dist/esm/components/EvButtonGroup/EvButtonGroup.vue2.mjs.map +1 -1
- package/dist/esm/components/EvButtonSelect/EvButtonSelect.mjs +1 -23
- package/dist/esm/components/EvButtonSelect/EvButtonSelect.mjs.map +1 -1
- package/dist/esm/components/EvButtonSelect/EvButtonSelect.scss.mjs +1 -1
- package/dist/esm/components/EvButtonSelect/EvButtonSelect.scss.mjs.map +1 -1
- package/dist/esm/components/EvButtonSelect/EvButtonSelect.vue.mjs +1 -42
- package/dist/esm/components/EvButtonSelect/EvButtonSelect.vue.mjs.map +1 -1
- package/dist/esm/components/EvButtonSelect/EvButtonSelect.vue2.mjs +1 -5
- package/dist/esm/components/EvButtonSelect/EvButtonSelect.vue2.mjs.map +1 -1
- package/dist/esm/components/EvButtonSwitch/EvButtonSwitch.mjs +1 -24
- package/dist/esm/components/EvButtonSwitch/EvButtonSwitch.mjs.map +1 -1
- package/dist/esm/components/EvButtonSwitch/EvButtonSwitch.scss.mjs +1 -1
- package/dist/esm/components/EvButtonSwitch/EvButtonSwitch.scss.mjs.map +1 -1
- package/dist/esm/components/EvButtonSwitch/EvButtonSwitch.vue.mjs +1 -58
- package/dist/esm/components/EvButtonSwitch/EvButtonSwitch.vue.mjs.map +1 -1
- package/dist/esm/components/EvButtonSwitch/EvButtonSwitch.vue2.mjs +1 -5
- package/dist/esm/components/EvButtonSwitch/EvButtonSwitch.vue2.mjs.map +1 -1
- package/dist/esm/components/EvCard/EvCard.mjs +1 -55
- package/dist/esm/components/EvCard/EvCard.mjs.map +1 -1
- package/dist/esm/components/EvCard/EvCard.vue.mjs +1 -122
- package/dist/esm/components/EvCard/EvCard.vue.mjs.map +1 -1
- package/dist/esm/components/EvCard/EvCard.vue2.mjs +1 -5
- package/dist/esm/components/EvCard/EvCard.vue2.mjs.map +1 -1
- package/dist/esm/components/EvCard/EvCardActions/EvCardActions.mjs +1 -24
- package/dist/esm/components/EvCard/EvCardActions/EvCardActions.mjs.map +1 -1
- package/dist/esm/components/EvCard/EvCardActions/EvCardActions.vue.mjs +1 -37
- package/dist/esm/components/EvCard/EvCardActions/EvCardActions.vue.mjs.map +1 -1
- package/dist/esm/components/EvCard/EvCardActions/EvCardActions.vue2.mjs +1 -5
- package/dist/esm/components/EvCard/EvCardActions/EvCardActions.vue2.mjs.map +1 -1
- package/dist/esm/components/EvCard/EvCardContent/EvCardContent.mjs +1 -22
- package/dist/esm/components/EvCard/EvCardContent/EvCardContent.mjs.map +1 -1
- package/dist/esm/components/EvCard/EvCardContent/EvCardContent.vue.mjs +1 -104
- package/dist/esm/components/EvCard/EvCardContent/EvCardContent.vue.mjs.map +1 -1
- package/dist/esm/components/EvCard/EvCardContent/EvCardContent.vue2.mjs +1 -5
- package/dist/esm/components/EvCard/EvCardContent/EvCardContent.vue2.mjs.map +1 -1
- package/dist/esm/components/EvCheckbox/EvCheckbox.mjs +1 -66
- package/dist/esm/components/EvCheckbox/EvCheckbox.mjs.map +1 -1
- package/dist/esm/components/EvCheckbox/EvCheckbox.vue.mjs +1 -122
- package/dist/esm/components/EvCheckbox/EvCheckbox.vue.mjs.map +1 -1
- package/dist/esm/components/EvCheckbox/EvCheckbox.vue2.mjs +1 -5
- package/dist/esm/components/EvCheckbox/EvCheckbox.vue2.mjs.map +1 -1
- package/dist/esm/components/EvCode/EvCode.mjs +1 -13
- package/dist/esm/components/EvCode/EvCode.mjs.map +1 -1
- package/dist/esm/components/EvCode/EvCode.vue.mjs +1 -25
- package/dist/esm/components/EvCode/EvCode.vue.mjs.map +1 -1
- package/dist/esm/components/EvCode/EvCode.vue2.mjs +1 -5
- package/dist/esm/components/EvCode/EvCode.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/EvDataTable.mjs +1 -35
- package/dist/esm/components/EvDataTable/EvDataTable.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/EvDataTable.vue.mjs +1 -322
- package/dist/esm/components/EvDataTable/EvDataTable.vue.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/EvDataTable.vue2.mjs +1 -5
- package/dist/esm/components/EvDataTable/EvDataTable.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/EvDataTableCell/EvDataTableCell.mjs +1 -21
- package/dist/esm/components/EvDataTable/EvDataTableCell/EvDataTableCell.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/EvDataTableCell/EvDataTableCell.vue.mjs +1 -37
- package/dist/esm/components/EvDataTable/EvDataTableCell/EvDataTableCell.vue.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/EvDataTableCell/EvDataTableCell.vue2.mjs +1 -5
- package/dist/esm/components/EvDataTable/EvDataTableCell/EvDataTableCell.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/EvDataTableRow/EvDataTableRow.mjs +1 -18
- package/dist/esm/components/EvDataTable/EvDataTableRow/EvDataTableRow.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/EvDataTableRow/EvDataTableRow.vue.mjs +1 -122
- package/dist/esm/components/EvDataTable/EvDataTableRow/EvDataTableRow.vue.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/EvDataTableRow/EvDataTableRow.vue2.mjs +1 -5
- package/dist/esm/components/EvDataTable/EvDataTableRow/EvDataTableRow.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.mjs +1 -25
- package/dist/esm/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.vue.mjs +1 -332
- package/dist/esm/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.vue.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.vue2.mjs +1 -5
- package/dist/esm/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/composables/headers.mjs +1 -236
- package/dist/esm/components/EvDataTable/composables/headers.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/composables/items.mjs +1 -60
- package/dist/esm/components/EvDataTable/composables/items.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/composables/select.mjs +1 -193
- package/dist/esm/components/EvDataTable/composables/select.mjs.map +1 -1
- package/dist/esm/components/EvDataTable/composables/sort.mjs +1 -113
- package/dist/esm/components/EvDataTable/composables/sort.mjs.map +1 -1
- package/dist/esm/components/EvDateField/EvDateField.mjs +1 -21
- package/dist/esm/components/EvDateField/EvDateField.mjs.map +1 -1
- package/dist/esm/components/EvDateField/EvDateField.vue.mjs +1 -158
- package/dist/esm/components/EvDateField/EvDateField.vue.mjs.map +1 -1
- package/dist/esm/components/EvDateField/EvDateField.vue2.mjs +1 -5
- package/dist/esm/components/EvDateField/EvDateField.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDatePicker/EvDatePicker.mjs +1 -19
- package/dist/esm/components/EvDatePicker/EvDatePicker.mjs.map +1 -1
- package/dist/esm/components/EvDatePicker/EvDatePicker.vue.mjs +1 -181
- package/dist/esm/components/EvDatePicker/EvDatePicker.vue.mjs.map +1 -1
- package/dist/esm/components/EvDatePicker/EvDatePicker.vue2.mjs +1 -5
- package/dist/esm/components/EvDatePicker/EvDatePicker.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.mjs +1 -24
- package/dist/esm/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.mjs.map +1 -1
- package/dist/esm/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.vue.mjs +1 -224
- package/dist/esm/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.vue.mjs.map +1 -1
- package/dist/esm/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.vue2.mjs +1 -5
- package/dist/esm/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.mjs +1 -11
- package/dist/esm/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.mjs.map +1 -1
- package/dist/esm/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.vue.mjs +1 -60
- package/dist/esm/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.vue.mjs.map +1 -1
- package/dist/esm/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.vue2.mjs +1 -5
- package/dist/esm/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.mjs +1 -13
- package/dist/esm/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.mjs.map +1 -1
- package/dist/esm/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.vue.mjs +1 -84
- package/dist/esm/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.vue.mjs.map +1 -1
- package/dist/esm/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.vue2.mjs +1 -5
- package/dist/esm/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDefaultsProvider/EvDefaultsProvider.mjs +1 -15
- package/dist/esm/components/EvDefaultsProvider/EvDefaultsProvider.mjs.map +1 -1
- package/dist/esm/components/EvDefaultsProvider/EvDefaultsProvider.vue.mjs +1 -26
- package/dist/esm/components/EvDefaultsProvider/EvDefaultsProvider.vue.mjs.map +1 -1
- package/dist/esm/components/EvDefaultsProvider/EvDefaultsProvider.vue2.mjs +1 -5
- package/dist/esm/components/EvDefaultsProvider/EvDefaultsProvider.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialog.mjs +1 -68
- package/dist/esm/components/EvDialog/EvDialog.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialog.vue.mjs +1 -298
- package/dist/esm/components/EvDialog/EvDialog.vue.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialog.vue2.mjs +1 -5
- package/dist/esm/components/EvDialog/EvDialog.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialogBody.vue.mjs +1 -35
- package/dist/esm/components/EvDialog/EvDialogBody.vue.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialogBody.vue2.mjs +1 -7
- package/dist/esm/components/EvDialog/EvDialogBody.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialogFooter.vue.mjs +1 -14
- package/dist/esm/components/EvDialog/EvDialogFooter.vue.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialogHeader.vue.mjs +1 -56
- package/dist/esm/components/EvDialog/EvDialogHeader.vue.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialogHeader.vue2.mjs +1 -7
- package/dist/esm/components/EvDialog/EvDialogHeader.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialogInstance.mjs +1 -18
- package/dist/esm/components/EvDialog/EvDialogInstance.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialogRenderer.mjs +1 -120
- package/dist/esm/components/EvDialog/EvDialogRenderer.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialogServiceOpener.mjs +1 -27
- package/dist/esm/components/EvDialog/EvDialogServiceOpener.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialogTransition.vue.mjs +1 -141
- package/dist/esm/components/EvDialog/EvDialogTransition.vue.mjs.map +1 -1
- package/dist/esm/components/EvDialog/EvDialogTransition.vue2.mjs +1 -7
- package/dist/esm/components/EvDialog/EvDialogTransition.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDivider/EvDivider.vue.mjs +1 -82
- package/dist/esm/components/EvDivider/EvDivider.vue.mjs.map +1 -1
- package/dist/esm/components/EvDivider/EvDivider.vue3.mjs +1 -6
- package/dist/esm/components/EvDivider/EvDivider.vue3.mjs.map +1 -1
- package/dist/esm/components/EvDrawer/EvDrawer.mjs +1 -17
- package/dist/esm/components/EvDrawer/EvDrawer.mjs.map +1 -1
- package/dist/esm/components/EvDrawer/EvDrawer.vue.mjs +1 -66
- package/dist/esm/components/EvDrawer/EvDrawer.vue.mjs.map +1 -1
- package/dist/esm/components/EvDrawer/EvDrawer.vue2.mjs +1 -5
- package/dist/esm/components/EvDrawer/EvDrawer.vue2.mjs.map +1 -1
- package/dist/esm/components/EvDrawer/EvDrawerInstance.mjs +1 -18
- package/dist/esm/components/EvDrawer/EvDrawerInstance.mjs.map +1 -1
- package/dist/esm/components/EvDrawer/EvDrawerRenderer.mjs +1 -120
- package/dist/esm/components/EvDrawer/EvDrawerRenderer.mjs.map +1 -1
- package/dist/esm/components/EvDrawer/EvDrawerServiceOpener.mjs +1 -27
- package/dist/esm/components/EvDrawer/EvDrawerServiceOpener.mjs.map +1 -1
- package/dist/esm/components/EvEditOnClick/EvEditOnClick.mjs +1 -15
- package/dist/esm/components/EvEditOnClick/EvEditOnClick.mjs.map +1 -1
- package/dist/esm/components/EvEditOnClick/EvEditOnClick.vue.mjs +1 -109
- package/dist/esm/components/EvEditOnClick/EvEditOnClick.vue.mjs.map +1 -1
- package/dist/esm/components/EvEditOnClick/EvEditOnClick.vue2.mjs +1 -5
- package/dist/esm/components/EvEditOnClick/EvEditOnClick.vue2.mjs.map +1 -1
- package/dist/esm/components/EvEmptyState/EvEmptyState.mjs +1 -41
- package/dist/esm/components/EvEmptyState/EvEmptyState.mjs.map +1 -1
- package/dist/esm/components/EvEmptyState/EvEmptyState.vue.mjs +1 -122
- package/dist/esm/components/EvEmptyState/EvEmptyState.vue.mjs.map +1 -1
- package/dist/esm/components/EvEmptyState/EvEmptyState.vue2.mjs +1 -5
- package/dist/esm/components/EvEmptyState/EvEmptyState.vue2.mjs.map +1 -1
- package/dist/esm/components/EvErrors/EvErrors.mjs +1 -17
- package/dist/esm/components/EvErrors/EvErrors.mjs.map +1 -1
- package/dist/esm/components/EvErrors/EvErrors.vue.mjs +1 -42
- package/dist/esm/components/EvErrors/EvErrors.vue.mjs.map +1 -1
- package/dist/esm/components/EvErrors/EvErrors.vue2.mjs +1 -5
- package/dist/esm/components/EvErrors/EvErrors.vue2.mjs.map +1 -1
- package/dist/esm/components/EvEyebrow/EvEyebrow.mjs +1 -19
- package/dist/esm/components/EvEyebrow/EvEyebrow.mjs.map +1 -1
- package/dist/esm/components/EvEyebrow/EvEyebrow.scss.mjs +1 -1
- package/dist/esm/components/EvEyebrow/EvEyebrow.scss.mjs.map +1 -1
- package/dist/esm/components/EvEyebrow/EvEyebrow.vue.mjs +1 -30
- package/dist/esm/components/EvEyebrow/EvEyebrow.vue.mjs.map +1 -1
- package/dist/esm/components/EvEyebrow/EvEyebrow.vue2.mjs +1 -5
- package/dist/esm/components/EvEyebrow/EvEyebrow.vue2.mjs.map +1 -1
- package/dist/esm/components/EvFieldHelp/EvFieldHelp.mjs +1 -13
- package/dist/esm/components/EvFieldHelp/EvFieldHelp.mjs.map +1 -1
- package/dist/esm/components/EvFieldHelp/EvFieldHelp.vue.mjs +1 -56
- package/dist/esm/components/EvFieldHelp/EvFieldHelp.vue.mjs.map +1 -1
- package/dist/esm/components/EvFieldHelp/EvFieldHelp.vue2.mjs +1 -5
- package/dist/esm/components/EvFieldHelp/EvFieldHelp.vue2.mjs.map +1 -1
- package/dist/esm/components/EvFilterButton/EvFilterButton.mjs +1 -22
- package/dist/esm/components/EvFilterButton/EvFilterButton.mjs.map +1 -1
- package/dist/esm/components/EvFilterButton/EvFilterButton.vue.mjs +1 -58
- package/dist/esm/components/EvFilterButton/EvFilterButton.vue.mjs.map +1 -1
- package/dist/esm/components/EvFilterButton/EvFilterButton.vue2.mjs +1 -5
- package/dist/esm/components/EvFilterButton/EvFilterButton.vue2.mjs.map +1 -1
- package/dist/esm/components/EvForm/EvForm.mjs +1 -14
- package/dist/esm/components/EvForm/EvForm.mjs.map +1 -1
- package/dist/esm/components/EvForm/EvForm.vue.mjs +1 -56
- package/dist/esm/components/EvForm/EvForm.vue.mjs.map +1 -1
- package/dist/esm/components/EvForm/EvForm.vue2.mjs +1 -5
- package/dist/esm/components/EvForm/EvForm.vue2.mjs.map +1 -1
- package/dist/esm/components/EvFormHelp/EvFormHelp.mjs +1 -16
- package/dist/esm/components/EvFormHelp/EvFormHelp.mjs.map +1 -1
- package/dist/esm/components/EvFormHelp/EvFormHelp.vue.mjs +1 -35
- package/dist/esm/components/EvFormHelp/EvFormHelp.vue.mjs.map +1 -1
- package/dist/esm/components/EvFormHelp/EvFormHelp.vue2.mjs +1 -5
- package/dist/esm/components/EvFormHelp/EvFormHelp.vue2.mjs.map +1 -1
- package/dist/esm/components/EvGrid/EvBlock/EvBlock.mjs +1 -22
- package/dist/esm/components/EvGrid/EvBlock/EvBlock.mjs.map +1 -1
- package/dist/esm/components/EvGrid/EvBlock/EvBlock.vue.mjs +1 -63
- package/dist/esm/components/EvGrid/EvBlock/EvBlock.vue.mjs.map +1 -1
- package/dist/esm/components/EvGrid/EvBlock/EvBlock.vue2.mjs +1 -5
- package/dist/esm/components/EvGrid/EvBlock/EvBlock.vue2.mjs.map +1 -1
- package/dist/esm/components/EvGrid/EvContainer/EvContainer.mjs +1 -22
- package/dist/esm/components/EvGrid/EvContainer/EvContainer.mjs.map +1 -1
- package/dist/esm/components/EvGrid/EvContainer/EvContainer.vue.mjs +1 -56
- package/dist/esm/components/EvGrid/EvContainer/EvContainer.vue.mjs.map +1 -1
- package/dist/esm/components/EvGrid/EvContainer/EvContainer.vue2.mjs +1 -5
- package/dist/esm/components/EvGrid/EvContainer/EvContainer.vue2.mjs.map +1 -1
- package/dist/esm/components/EvGrid/EvLayout/EvLayout.mjs +1 -24
- package/dist/esm/components/EvGrid/EvLayout/EvLayout.mjs.map +1 -1
- package/dist/esm/components/EvGrid/EvLayout/EvLayout.vue.mjs +1 -70
- package/dist/esm/components/EvGrid/EvLayout/EvLayout.vue.mjs.map +1 -1
- package/dist/esm/components/EvGrid/EvLayout/EvLayout.vue2.mjs +1 -5
- package/dist/esm/components/EvGrid/EvLayout/EvLayout.vue2.mjs.map +1 -1
- package/dist/esm/components/EvGrid/EvSpacer/EvSpacer.mjs +1 -12
- package/dist/esm/components/EvGrid/EvSpacer/EvSpacer.mjs.map +1 -1
- package/dist/esm/components/EvGrid/EvSpacer/EvSpacer.vue.mjs +1 -24
- package/dist/esm/components/EvGrid/EvSpacer/EvSpacer.vue.mjs.map +1 -1
- package/dist/esm/components/EvGrid/EvSpacer/EvSpacer.vue2.mjs +1 -5
- package/dist/esm/components/EvGrid/EvSpacer/EvSpacer.vue2.mjs.map +1 -1
- package/dist/esm/components/EvHeading/EvHeading.mjs +1 -50
- package/dist/esm/components/EvHeading/EvHeading.mjs.map +1 -1
- package/dist/esm/components/EvHeading/EvHeading.vue.mjs +1 -59
- package/dist/esm/components/EvHeading/EvHeading.vue.mjs.map +1 -1
- package/dist/esm/components/EvHeading/EvHeading.vue3.mjs +1 -6
- package/dist/esm/components/EvHeading/EvHeading.vue3.mjs.map +1 -1
- package/dist/esm/components/EvHotkey/EvHotkey.mjs +1 -96
- package/dist/esm/components/EvHotkey/EvHotkey.mjs.map +1 -1
- package/dist/esm/components/EvHotkey/EvHotkey.vue.mjs +1 -153
- package/dist/esm/components/EvHotkey/EvHotkey.vue.mjs.map +1 -1
- package/dist/esm/components/EvHotkey/EvHotkey.vue2.mjs +1 -5
- package/dist/esm/components/EvHotkey/EvHotkey.vue2.mjs.map +1 -1
- package/dist/esm/components/EvIcon/EvIcon.mjs +1 -30
- package/dist/esm/components/EvIcon/EvIcon.mjs.map +1 -1
- package/dist/esm/components/EvIcon/EvIcon.vue.mjs +1 -49
- package/dist/esm/components/EvIcon/EvIcon.vue.mjs.map +1 -1
- package/dist/esm/components/EvIcon/EvIcon.vue3.mjs +1 -6
- package/dist/esm/components/EvIcon/EvIcon.vue3.mjs.map +1 -1
- package/dist/esm/components/EvImg/EvImg.mjs +1 -44
- package/dist/esm/components/EvImg/EvImg.mjs.map +1 -1
- package/dist/esm/components/EvImg/EvImg.vue.mjs +1 -357
- package/dist/esm/components/EvImg/EvImg.vue.mjs.map +1 -1
- package/dist/esm/components/EvImg/EvImg.vue2.mjs +1 -5
- package/dist/esm/components/EvImg/EvImg.vue2.mjs.map +1 -1
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScroll.mjs +1 -47
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScroll.mjs.map +1 -1
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScroll.vue.mjs +1 -267
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScroll.vue.mjs.map +1 -1
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScroll.vue2.mjs +1 -5
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScroll.vue2.mjs.map +1 -1
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScrollIntersect.vue.mjs +1 -46
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScrollIntersect.vue.mjs.map +1 -1
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScrollIntersect.vue2.mjs +1 -5
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScrollIntersect.vue2.mjs.map +1 -1
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScrollSide.vue.mjs +1 -85
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScrollSide.vue.mjs.map +1 -1
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScrollSide.vue2.mjs +1 -5
- package/dist/esm/components/EvInfiniteScroll/EvInfiniteScrollSide.vue2.mjs.map +1 -1
- package/dist/esm/components/EvKbd/EvKbd.mjs +1 -22
- package/dist/esm/components/EvKbd/EvKbd.mjs.map +1 -1
- package/dist/esm/components/EvKbd/EvKbd.vue.mjs +1 -34
- package/dist/esm/components/EvKbd/EvKbd.vue.mjs.map +1 -1
- package/dist/esm/components/EvKbd/EvKbd.vue2.mjs +1 -5
- package/dist/esm/components/EvKbd/EvKbd.vue2.mjs.map +1 -1
- package/dist/esm/components/EvLabel/EvLabel.mjs +1 -23
- package/dist/esm/components/EvLabel/EvLabel.mjs.map +1 -1
- package/dist/esm/components/EvLabel/EvLabel.vue.mjs +1 -42
- package/dist/esm/components/EvLabel/EvLabel.vue.mjs.map +1 -1
- package/dist/esm/components/EvLabel/EvLabel.vue2.mjs +1 -5
- package/dist/esm/components/EvLabel/EvLabel.vue2.mjs.map +1 -1
- package/dist/esm/components/EvLink/EvLink.mjs +1 -23
- package/dist/esm/components/EvLink/EvLink.mjs.map +1 -1
- package/dist/esm/components/EvLink/EvLink.vue.mjs +1 -60
- package/dist/esm/components/EvLink/EvLink.vue.mjs.map +1 -1
- package/dist/esm/components/EvLink/EvLink.vue2.mjs +1 -5
- package/dist/esm/components/EvLink/EvLink.vue2.mjs.map +1 -1
- package/dist/esm/components/EvList/EvList.mjs +1 -37
- package/dist/esm/components/EvList/EvList.mjs.map +1 -1
- package/dist/esm/components/EvList/EvList.vue.mjs +1 -102
- package/dist/esm/components/EvList/EvList.vue.mjs.map +1 -1
- package/dist/esm/components/EvList/EvList.vue2.mjs +1 -5
- package/dist/esm/components/EvList/EvList.vue2.mjs.map +1 -1
- package/dist/esm/components/EvList/EvListChildren.vue.mjs +1 -60
- package/dist/esm/components/EvList/EvListChildren.vue.mjs.map +1 -1
- package/dist/esm/components/EvList/EvListChildren.vue2.mjs +1 -5
- package/dist/esm/components/EvList/EvListChildren.vue2.mjs.map +1 -1
- package/dist/esm/components/EvListItem/EvListItem.mjs +1 -56
- package/dist/esm/components/EvListItem/EvListItem.mjs.map +1 -1
- package/dist/esm/components/EvListItem/EvListItem.vue.mjs +1 -282
- package/dist/esm/components/EvListItem/EvListItem.vue.mjs.map +1 -1
- package/dist/esm/components/EvListItem/EvListItem.vue2.mjs +1 -5
- package/dist/esm/components/EvListItem/EvListItem.vue2.mjs.map +1 -1
- package/dist/esm/components/EvLozenge/EvLozenge.mjs +1 -27
- package/dist/esm/components/EvLozenge/EvLozenge.mjs.map +1 -1
- package/dist/esm/components/EvLozenge/EvLozenge.vue.mjs +1 -59
- package/dist/esm/components/EvLozenge/EvLozenge.vue.mjs.map +1 -1
- package/dist/esm/components/EvLozenge/EvLozenge.vue2.mjs +1 -5
- package/dist/esm/components/EvLozenge/EvLozenge.vue2.mjs.map +1 -1
- package/dist/esm/components/EvMenu/EvMenu.mjs +1 -23
- package/dist/esm/components/EvMenu/EvMenu.mjs.map +1 -1
- package/dist/esm/components/EvMenu/EvMenu.vue.mjs +1 -128
- package/dist/esm/components/EvMenu/EvMenu.vue.mjs.map +1 -1
- package/dist/esm/components/EvMenu/EvMenu.vue2.mjs +1 -5
- package/dist/esm/components/EvMenu/EvMenu.vue2.mjs.map +1 -1
- package/dist/esm/components/EvMenu/EvMenuTransition.vue.mjs +1 -149
- package/dist/esm/components/EvMenu/EvMenuTransition.vue.mjs.map +1 -1
- package/dist/esm/components/EvMenu/EvMenuTransition.vue2.mjs +1 -5
- package/dist/esm/components/EvMenu/EvMenuTransition.vue2.mjs.map +1 -1
- package/dist/esm/components/EvMenu/shared.mjs +1 -5
- package/dist/esm/components/EvMenu/shared.mjs.map +1 -1
- package/dist/esm/components/EvMessage/EvMessage.mjs +1 -35
- package/dist/esm/components/EvMessage/EvMessage.mjs.map +1 -1
- package/dist/esm/components/EvMessage/EvMessage.vue.mjs +1 -207
- package/dist/esm/components/EvMessage/EvMessage.vue.mjs.map +1 -1
- package/dist/esm/components/EvMessage/EvMessage.vue2.mjs +1 -5
- package/dist/esm/components/EvMessage/EvMessage.vue2.mjs.map +1 -1
- package/dist/esm/components/EvNotification/EvNotification.mjs +1 -22
- package/dist/esm/components/EvNotification/EvNotification.mjs.map +1 -1
- package/dist/esm/components/EvNotification/EvNotification.vue.mjs +1 -80
- package/dist/esm/components/EvNotification/EvNotification.vue.mjs.map +1 -1
- package/dist/esm/components/EvNotification/EvNotification.vue2.mjs +1 -5
- package/dist/esm/components/EvNotification/EvNotification.vue2.mjs.map +1 -1
- package/dist/esm/components/EvNotifications/EvNotifications.vue.mjs +1 -57
- package/dist/esm/components/EvNotifications/EvNotifications.vue.mjs.map +1 -1
- package/dist/esm/components/EvNotifications/EvNotifications.vue2.mjs +1 -5
- package/dist/esm/components/EvNotifications/EvNotifications.vue2.mjs.map +1 -1
- package/dist/esm/components/EvNotifications/EvNotificationsManager.mjs +1 -80
- package/dist/esm/components/EvNotifications/EvNotificationsManager.mjs.map +1 -1
- package/dist/esm/components/EvNumber/EvNumber.mjs +1 -17
- package/dist/esm/components/EvNumber/EvNumber.mjs.map +1 -1
- package/dist/esm/components/EvNumber/EvNumber.vue.mjs +1 -70
- package/dist/esm/components/EvNumber/EvNumber.vue.mjs.map +1 -1
- package/dist/esm/components/EvNumber/EvNumber.vue2.mjs +1 -5
- package/dist/esm/components/EvNumber/EvNumber.vue2.mjs.map +1 -1
- package/dist/esm/components/EvNumber/EvNumberDigit.vue.mjs +1 -55
- package/dist/esm/components/EvNumber/EvNumberDigit.vue.mjs.map +1 -1
- package/dist/esm/components/EvNumber/EvNumberDigit.vue2.mjs +1 -5
- package/dist/esm/components/EvNumber/EvNumberDigit.vue2.mjs.map +1 -1
- package/dist/esm/components/EvNumberField/EvNumberField.mjs +1 -330
- package/dist/esm/components/EvNumberField/EvNumberField.mjs.map +1 -1
- package/dist/esm/components/EvNumberField/EvNumberField.vue.mjs +1 -295
- package/dist/esm/components/EvNumberField/EvNumberField.vue.mjs.map +1 -1
- package/dist/esm/components/EvNumberField/EvNumberField.vue2.mjs +1 -5
- package/dist/esm/components/EvNumberField/EvNumberField.vue2.mjs.map +1 -1
- package/dist/esm/components/EvOverlay/EvOverlay.mjs +1 -42
- package/dist/esm/components/EvOverlay/EvOverlay.mjs.map +1 -1
- package/dist/esm/components/EvOverlay/EvOverlay.vue.mjs +1 -302
- package/dist/esm/components/EvOverlay/EvOverlay.vue.mjs.map +1 -1
- package/dist/esm/components/EvOverlay/EvOverlay.vue2.mjs +1 -5
- package/dist/esm/components/EvOverlay/EvOverlay.vue2.mjs.map +1 -1
- package/dist/esm/components/EvOverlay/activator.mjs +1 -401
- package/dist/esm/components/EvOverlay/activator.mjs.map +1 -1
- package/dist/esm/components/EvOverlay/position-strategy/connected-position.mjs +1 -626
- package/dist/esm/components/EvOverlay/position-strategy/connected-position.mjs.map +1 -1
- package/dist/esm/components/EvOverlay/position-strategy/static-position.mjs +1 -6
- package/dist/esm/components/EvOverlay/position-strategy/static-position.mjs.map +1 -1
- package/dist/esm/components/EvOverlay/position.mjs +1 -82
- package/dist/esm/components/EvOverlay/position.mjs.map +1 -1
- package/dist/esm/components/EvOverlay/scroll-strategy/block-scroll.mjs +1 -69
- package/dist/esm/components/EvOverlay/scroll-strategy/block-scroll.mjs.map +1 -1
- package/dist/esm/components/EvOverlay/scroll-strategy/close-scroll.mjs +1 -14
- package/dist/esm/components/EvOverlay/scroll-strategy/close-scroll.mjs.map +1 -1
- package/dist/esm/components/EvOverlay/scroll-strategy/reposition-scroll.mjs +1 -44
- package/dist/esm/components/EvOverlay/scroll-strategy/reposition-scroll.mjs.map +1 -1
- package/dist/esm/components/EvOverlay/scroll.mjs +1 -57
- package/dist/esm/components/EvOverlay/scroll.mjs.map +1 -1
- package/dist/esm/components/EvProgress/EvProgress.vue.mjs +1 -70
- package/dist/esm/components/EvProgress/EvProgress.vue.mjs.map +1 -1
- package/dist/esm/components/EvProgress/EvProgress.vue2.mjs +1 -5
- package/dist/esm/components/EvProgress/EvProgress.vue2.mjs.map +1 -1
- package/dist/esm/components/EvProgressCircular/EvProgressCircular.vue.mjs +1 -110
- package/dist/esm/components/EvProgressCircular/EvProgressCircular.vue.mjs.map +1 -1
- package/dist/esm/components/EvProgressCircular/EvProgressCircular.vue2.mjs +1 -5
- package/dist/esm/components/EvProgressCircular/EvProgressCircular.vue2.mjs.map +1 -1
- package/dist/esm/components/EvQuickfind/EvQuickfind.vue.mjs +1 -50
- package/dist/esm/components/EvQuickfind/EvQuickfind.vue.mjs.map +1 -1
- package/dist/esm/components/EvQuickfind/EvQuickfind.vue2.mjs +1 -5
- package/dist/esm/components/EvQuickfind/EvQuickfind.vue2.mjs.map +1 -1
- package/dist/esm/components/EvRadio/EvRadio.mjs +1 -18
- package/dist/esm/components/EvRadio/EvRadio.mjs.map +1 -1
- package/dist/esm/components/EvRadio/EvRadio.vue.mjs +1 -130
- package/dist/esm/components/EvRadio/EvRadio.vue.mjs.map +1 -1
- package/dist/esm/components/EvRadio/EvRadio.vue2.mjs +1 -5
- package/dist/esm/components/EvRadio/EvRadio.vue2.mjs.map +1 -1
- package/dist/esm/components/EvRadioGroup/EvRadioGroup.mjs +1 -19
- package/dist/esm/components/EvRadioGroup/EvRadioGroup.mjs.map +1 -1
- package/dist/esm/components/EvRadioGroup/EvRadioGroup.vue.mjs +1 -74
- package/dist/esm/components/EvRadioGroup/EvRadioGroup.vue.mjs.map +1 -1
- package/dist/esm/components/EvRadioGroup/EvRadioGroup.vue2.mjs +1 -5
- package/dist/esm/components/EvRadioGroup/EvRadioGroup.vue2.mjs.map +1 -1
- package/dist/esm/components/EvResponsive/EvResponsive.mjs +1 -22
- package/dist/esm/components/EvResponsive/EvResponsive.mjs.map +1 -1
- package/dist/esm/components/EvResponsive/EvResponsive.vue.mjs +1 -45
- package/dist/esm/components/EvResponsive/EvResponsive.vue.mjs.map +1 -1
- package/dist/esm/components/EvResponsive/EvResponsive.vue2.mjs +1 -5
- package/dist/esm/components/EvResponsive/EvResponsive.vue2.mjs.map +1 -1
- package/dist/esm/components/EvSection/EvSection.mjs +1 -15
- package/dist/esm/components/EvSection/EvSection.mjs.map +1 -1
- package/dist/esm/components/EvSection/EvSection.vue.mjs +1 -47
- package/dist/esm/components/EvSection/EvSection.vue.mjs.map +1 -1
- package/dist/esm/components/EvSection/EvSection.vue2.mjs +1 -5
- package/dist/esm/components/EvSection/EvSection.vue2.mjs.map +1 -1
- package/dist/esm/components/EvSelect/EvSelect.mjs +1 -49
- package/dist/esm/components/EvSelect/EvSelect.mjs.map +1 -1
- package/dist/esm/components/EvSelect/EvSelect.vue.mjs +1 -556
- package/dist/esm/components/EvSelect/EvSelect.vue.mjs.map +1 -1
- package/dist/esm/components/EvSelect/EvSelect.vue2.mjs +1 -5
- package/dist/esm/components/EvSelect/EvSelect.vue2.mjs.map +1 -1
- package/dist/esm/components/EvSelect/useScrolling.mjs +1 -78
- package/dist/esm/components/EvSelect/useScrolling.mjs.map +1 -1
- package/dist/esm/components/EvSkeleton/EvSkeleton.mjs +1 -116
- package/dist/esm/components/EvSkeleton/EvSkeleton.mjs.map +1 -1
- package/dist/esm/components/EvSkeleton/EvSkeleton.vue.mjs +1 -58
- package/dist/esm/components/EvSkeleton/EvSkeleton.vue.mjs.map +1 -1
- package/dist/esm/components/EvSkeleton/EvSkeleton.vue2.mjs +1 -5
- package/dist/esm/components/EvSkeleton/EvSkeleton.vue2.mjs.map +1 -1
- package/dist/esm/components/EvSlideGroup/EvSlideGroup.mjs +1 -37
- package/dist/esm/components/EvSlideGroup/EvSlideGroup.mjs.map +1 -1
- package/dist/esm/components/EvSlideGroup/EvSlideGroup.vue.mjs +1 -354
- package/dist/esm/components/EvSlideGroup/EvSlideGroup.vue.mjs.map +1 -1
- package/dist/esm/components/EvSlideGroup/EvSlideGroup.vue2.mjs +1 -5
- package/dist/esm/components/EvSlideGroup/EvSlideGroup.vue2.mjs.map +1 -1
- package/dist/esm/components/EvSlideGroup/EvSlideGroupItem.vue.mjs +1 -32
- package/dist/esm/components/EvSlideGroup/EvSlideGroupItem.vue.mjs.map +1 -1
- package/dist/esm/components/EvSlideGroup/EvSlideGroupItem.vue2.mjs +1 -5
- package/dist/esm/components/EvSlideGroup/EvSlideGroupItem.vue2.mjs.map +1 -1
- package/dist/esm/components/EvSlideGroup/helpers.mjs +1 -50
- package/dist/esm/components/EvSlideGroup/helpers.mjs.map +1 -1
- package/dist/esm/components/EvSurface/EvSurface.mjs +1 -35
- package/dist/esm/components/EvSurface/EvSurface.mjs.map +1 -1
- package/dist/esm/components/EvSurface/EvSurface.vue.mjs +1 -65
- package/dist/esm/components/EvSurface/EvSurface.vue.mjs.map +1 -1
- package/dist/esm/components/EvSurface/EvSurface.vue2.mjs +1 -5
- package/dist/esm/components/EvSurface/EvSurface.vue2.mjs.map +1 -1
- package/dist/esm/components/EvSwatch/EvSwatch.mjs +1 -70
- package/dist/esm/components/EvSwatch/EvSwatch.mjs.map +1 -1
- package/dist/esm/components/EvSwatch/EvSwatch.vue.mjs +1 -39
- package/dist/esm/components/EvSwatch/EvSwatch.vue.mjs.map +1 -1
- package/dist/esm/components/EvSwatch/EvSwatch.vue2.mjs +1 -5
- package/dist/esm/components/EvSwatch/EvSwatch.vue2.mjs.map +1 -1
- package/dist/esm/components/EvSwitch/EvSwitch.mjs +1 -12
- package/dist/esm/components/EvSwitch/EvSwitch.mjs.map +1 -1
- package/dist/esm/components/EvSwitch/EvSwitch.vue.mjs +1 -116
- package/dist/esm/components/EvSwitch/EvSwitch.vue.mjs.map +1 -1
- package/dist/esm/components/EvSwitch/EvSwitch.vue2.mjs +1 -5
- package/dist/esm/components/EvSwitch/EvSwitch.vue2.mjs.map +1 -1
- package/dist/esm/components/EvTabs/EvTab/EvTab.mjs +1 -25
- package/dist/esm/components/EvTabs/EvTab/EvTab.mjs.map +1 -1
- package/dist/esm/components/EvTabs/EvTab/EvTab.vue.mjs +1 -111
- package/dist/esm/components/EvTabs/EvTab/EvTab.vue.mjs.map +1 -1
- package/dist/esm/components/EvTabs/EvTab/EvTab.vue2.mjs +1 -5
- package/dist/esm/components/EvTabs/EvTab/EvTab.vue2.mjs.map +1 -1
- package/dist/esm/components/EvTabs/EvTabs.mjs +1 -26
- package/dist/esm/components/EvTabs/EvTabs.mjs.map +1 -1
- package/dist/esm/components/EvTabs/EvTabs.scss.mjs +1 -1
- package/dist/esm/components/EvTabs/EvTabs.scss.mjs.map +1 -1
- package/dist/esm/components/EvTabs/EvTabs.vue.mjs +1 -72
- package/dist/esm/components/EvTabs/EvTabs.vue.mjs.map +1 -1
- package/dist/esm/components/EvTabs/EvTabs.vue2.mjs +1 -5
- package/dist/esm/components/EvTabs/EvTabs.vue2.mjs.map +1 -1
- package/dist/esm/components/EvTag/EvTag.mjs +1 -53
- package/dist/esm/components/EvTag/EvTag.mjs.map +1 -1
- package/dist/esm/components/EvTag/EvTag.vue.mjs +1 -243
- package/dist/esm/components/EvTag/EvTag.vue.mjs.map +1 -1
- package/dist/esm/components/EvTag/EvTag.vue2.mjs +1 -5
- package/dist/esm/components/EvTag/EvTag.vue2.mjs.map +1 -1
- package/dist/esm/components/EvTagGroup/EvTagGroup.mjs +1 -31
- package/dist/esm/components/EvTagGroup/EvTagGroup.mjs.map +1 -1
- package/dist/esm/components/EvTagGroup/EvTagGroup.vue.mjs +1 -59
- package/dist/esm/components/EvTagGroup/EvTagGroup.vue.mjs.map +1 -1
- package/dist/esm/components/EvTagGroup/EvTagGroup.vue2.mjs +1 -5
- package/dist/esm/components/EvTagGroup/EvTagGroup.vue2.mjs.map +1 -1
- package/dist/esm/components/EvText/EvText.mjs +1 -36
- package/dist/esm/components/EvText/EvText.mjs.map +1 -1
- package/dist/esm/components/EvText/EvText.vue.mjs +1 -70
- package/dist/esm/components/EvText/EvText.vue.mjs.map +1 -1
- package/dist/esm/components/EvText/EvText.vue3.mjs +1 -6
- package/dist/esm/components/EvText/EvText.vue3.mjs.map +1 -1
- package/dist/esm/components/EvTextarea/EvTextarea.mjs +1 -28
- package/dist/esm/components/EvTextarea/EvTextarea.mjs.map +1 -1
- package/dist/esm/components/EvTextarea/EvTextarea.vue.mjs +1 -223
- package/dist/esm/components/EvTextarea/EvTextarea.vue.mjs.map +1 -1
- package/dist/esm/components/EvTextarea/EvTextarea.vue2.mjs +1 -5
- package/dist/esm/components/EvTextarea/EvTextarea.vue2.mjs.map +1 -1
- package/dist/esm/components/EvTextfield/EvTextfield.mjs +1 -39
- package/dist/esm/components/EvTextfield/EvTextfield.mjs.map +1 -1
- package/dist/esm/components/EvTextfield/EvTextfield.vue.mjs +1 -273
- package/dist/esm/components/EvTextfield/EvTextfield.vue.mjs.map +1 -1
- package/dist/esm/components/EvTextfield/EvTextfield.vue2.mjs +1 -5
- package/dist/esm/components/EvTextfield/EvTextfield.vue2.mjs.map +1 -1
- package/dist/esm/components/EvThumbnail/EvThumbnail.mjs +1 -52
- package/dist/esm/components/EvThumbnail/EvThumbnail.mjs.map +1 -1
- package/dist/esm/components/EvThumbnail/EvThumbnail.vue.mjs +1 -81
- package/dist/esm/components/EvThumbnail/EvThumbnail.vue.mjs.map +1 -1
- package/dist/esm/components/EvThumbnail/EvThumbnail.vue2.mjs +1 -5
- package/dist/esm/components/EvThumbnail/EvThumbnail.vue2.mjs.map +1 -1
- package/dist/esm/components/EvTimeField/EvTimeField.mjs +1 -19
- package/dist/esm/components/EvTimeField/EvTimeField.mjs.map +1 -1
- package/dist/esm/components/EvTimeField/EvTimeField.vue.mjs +1 -245
- package/dist/esm/components/EvTimeField/EvTimeField.vue.mjs.map +1 -1
- package/dist/esm/components/EvTimeField/EvTimeField.vue2.mjs +1 -5
- package/dist/esm/components/EvTimeField/EvTimeField.vue2.mjs.map +1 -1
- package/dist/esm/components/EvTimePicker/EvTimePicker.mjs +1 -16
- package/dist/esm/components/EvTimePicker/EvTimePicker.mjs.map +1 -1
- package/dist/esm/components/EvTimePicker/EvTimePicker.vue.mjs +1 -153
- package/dist/esm/components/EvTimePicker/EvTimePicker.vue.mjs.map +1 -1
- package/dist/esm/components/EvTimePicker/EvTimePicker.vue2.mjs +1 -5
- package/dist/esm/components/EvTimePicker/EvTimePicker.vue2.mjs.map +1 -1
- package/dist/esm/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.mjs +1 -13
- package/dist/esm/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.mjs.map +1 -1
- package/dist/esm/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.vue.mjs +1 -87
- package/dist/esm/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.vue.mjs.map +1 -1
- package/dist/esm/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.vue2.mjs +1 -5
- package/dist/esm/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.vue2.mjs.map +1 -1
- package/dist/esm/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.mjs +1 -12
- package/dist/esm/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.mjs.map +1 -1
- package/dist/esm/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.vue.mjs +1 -81
- package/dist/esm/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.vue.mjs.map +1 -1
- package/dist/esm/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.vue2.mjs +1 -5
- package/dist/esm/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.vue2.mjs.map +1 -1
- package/dist/esm/components/EvToolbar/EvToolbar.mjs +1 -25
- package/dist/esm/components/EvToolbar/EvToolbar.mjs.map +1 -1
- package/dist/esm/components/EvToolbar/EvToolbar.vue.mjs +1 -186
- package/dist/esm/components/EvToolbar/EvToolbar.vue.mjs.map +1 -1
- package/dist/esm/components/EvToolbar/EvToolbar.vue2.mjs +1 -5
- package/dist/esm/components/EvToolbar/EvToolbar.vue2.mjs.map +1 -1
- package/dist/esm/components/EvTooltip/EvTooltip.mjs +1 -31
- package/dist/esm/components/EvTooltip/EvTooltip.mjs.map +1 -1
- package/dist/esm/components/EvTooltip/EvTooltip.vue.mjs +1 -85
- package/dist/esm/components/EvTooltip/EvTooltip.vue.mjs.map +1 -1
- package/dist/esm/components/EvTooltip/EvTooltip.vue2.mjs +1 -5
- package/dist/esm/components/EvTooltip/EvTooltip.vue2.mjs.map +1 -1
- package/dist/esm/components/EvTransition/EvTransition.mjs +1 -43
- package/dist/esm/components/EvTransition/EvTransition.mjs.map +1 -1
- package/dist/esm/components/EvTransition/transitions/createTransition.mjs +1 -18
- package/dist/esm/components/EvTransition/transitions/createTransition.mjs.map +1 -1
- package/dist/esm/components/EvTransition/transitions/expandTransition.mjs +1 -85
- package/dist/esm/components/EvTransition/transitions/expandTransition.mjs.map +1 -1
- package/dist/esm/components/EvVirtualScroll/EvVirtualScroll.mjs +1 -29
- package/dist/esm/components/EvVirtualScroll/EvVirtualScroll.mjs.map +1 -1
- package/dist/esm/components/EvVirtualScroll/EvVirtualScroll.vue.mjs +1 -131
- package/dist/esm/components/EvVirtualScroll/EvVirtualScroll.vue.mjs.map +1 -1
- package/dist/esm/components/EvVirtualScroll/EvVirtualScroll.vue2.mjs +1 -5
- package/dist/esm/components/EvVirtualScroll/EvVirtualScroll.vue2.mjs.map +1 -1
- package/dist/esm/components/EvVirtualScroll/EvVirtualScrollItem.vue.mjs +1 -49
- package/dist/esm/components/EvVirtualScroll/EvVirtualScrollItem.vue.mjs.map +1 -1
- package/dist/esm/components/EvVirtualScroll/EvVirtualScrollItem.vue2.mjs +1 -5
- package/dist/esm/components/EvVirtualScroll/EvVirtualScrollItem.vue2.mjs.map +1 -1
- package/dist/esm/components/EvWindow/EvWindow.mjs +1 -54
- package/dist/esm/components/EvWindow/EvWindow.mjs.map +1 -1
- package/dist/esm/components/EvWindow/EvWindow.vue.mjs +1 -154
- package/dist/esm/components/EvWindow/EvWindow.vue.mjs.map +1 -1
- package/dist/esm/components/EvWindow/EvWindow.vue2.mjs +1 -5
- package/dist/esm/components/EvWindow/EvWindow.vue2.mjs.map +1 -1
- package/dist/esm/components/EvWindow/EvWindowItem/EvWindowItem.mjs +1 -24
- package/dist/esm/components/EvWindow/EvWindowItem/EvWindowItem.mjs.map +1 -1
- package/dist/esm/components/EvWindow/EvWindowItem/EvWindowItem.vue.mjs +1 -106
- package/dist/esm/components/EvWindow/EvWindowItem/EvWindowItem.vue.mjs.map +1 -1
- package/dist/esm/components/EvWindow/EvWindowItem/EvWindowItem.vue2.mjs +1 -5
- package/dist/esm/components/EvWindow/EvWindowItem/EvWindowItem.vue2.mjs.map +1 -1
- package/dist/esm/components/index.mjs +1 -354
- package/dist/esm/components/index.mjs.map +1 -1
- package/dist/esm/composables/aspectRatio.mjs +1 -43
- package/dist/esm/composables/aspectRatio.mjs.map +1 -1
- package/dist/esm/composables/component.mjs +1 -15
- package/dist/esm/composables/component.mjs.map +1 -1
- package/dist/esm/composables/date/DefaultDateAdapter.mjs +1 -518
- package/dist/esm/composables/date/DefaultDateAdapter.mjs.map +1 -1
- package/dist/esm/composables/date/date.mjs +1 -36
- package/dist/esm/composables/date/date.mjs.map +1 -1
- package/dist/esm/composables/defaults.mjs +1 -129
- package/dist/esm/composables/defaults.mjs.map +1 -1
- package/dist/esm/composables/delay.mjs +1 -38
- package/dist/esm/composables/delay.mjs.map +1 -1
- package/dist/esm/composables/dialog.mjs +1 -24
- package/dist/esm/composables/dialog.mjs.map +1 -1
- package/dist/esm/composables/dimensions.mjs +1 -29
- package/dist/esm/composables/dimensions.mjs.map +1 -1
- package/dist/esm/composables/display.mjs +1 -301
- package/dist/esm/composables/display.mjs.map +1 -1
- package/dist/esm/composables/drawer.mjs +1 -24
- package/dist/esm/composables/drawer.mjs.map +1 -1
- package/dist/esm/composables/filter.mjs +1 -128
- package/dist/esm/composables/filter.mjs.map +1 -1
- package/dist/esm/composables/focus.mjs +1 -23
- package/dist/esm/composables/focus.mjs.map +1 -1
- package/dist/esm/composables/form.mjs +1 -35
- package/dist/esm/composables/form.mjs.map +1 -1
- package/dist/esm/composables/group.mjs +1 -181
- package/dist/esm/composables/group.mjs.map +1 -1
- package/dist/esm/composables/groupItem.mjs +1 -80
- package/dist/esm/composables/groupItem.mjs.map +1 -1
- package/dist/esm/composables/hasSlotWithContent.mjs +1 -20
- package/dist/esm/composables/hasSlotWithContent.mjs.map +1 -1
- package/dist/esm/composables/hotkey/hotkey-parsing.mjs +1 -135
- package/dist/esm/composables/hotkey/hotkey-parsing.mjs.map +1 -1
- package/dist/esm/composables/hotkey/hotkey.mjs +1 -110
- package/dist/esm/composables/hotkey/hotkey.mjs.map +1 -1
- package/dist/esm/composables/hotkey/key-aliases.mjs +1 -29
- package/dist/esm/composables/hotkey/key-aliases.mjs.map +1 -1
- package/dist/esm/composables/icons.mjs +1 -33
- package/dist/esm/composables/icons.mjs.map +1 -1
- package/dist/esm/composables/intersectionObserver.mjs +1 -39
- package/dist/esm/composables/intersectionObserver.mjs.map +1 -1
- package/dist/esm/composables/lazy.mjs +1 -26
- package/dist/esm/composables/lazy.mjs.map +1 -1
- package/dist/esm/composables/lists/list-items.mjs +1 -95
- package/dist/esm/composables/lists/list-items.mjs.map +1 -1
- package/dist/esm/composables/lists/list.mjs +1 -28
- package/dist/esm/composables/lists/list.mjs.map +1 -1
- package/dist/esm/composables/lists/nested.mjs +1 -220
- package/dist/esm/composables/lists/nested.mjs.map +1 -1
- package/dist/esm/composables/lists/open-strategies.mjs +1 -34
- package/dist/esm/composables/lists/open-strategies.mjs.map +1 -1
- package/dist/esm/composables/lists/open-strategy/list.mjs +1 -20
- package/dist/esm/composables/lists/open-strategy/list.mjs.map +1 -1
- package/dist/esm/composables/lists/open-strategy/multiple.mjs +1 -20
- package/dist/esm/composables/lists/open-strategy/multiple.mjs.map +1 -1
- package/dist/esm/composables/lists/open-strategy/single.mjs +1 -21
- package/dist/esm/composables/lists/open-strategy/single.mjs.map +1 -1
- package/dist/esm/composables/lists/select-strategies.mjs +1 -53
- package/dist/esm/composables/lists/select-strategies.mjs.map +1 -1
- package/dist/esm/composables/lists/select-strategy/cascade-leaf.mjs +1 -69
- package/dist/esm/composables/lists/select-strategy/cascade-leaf.mjs.map +1 -1
- package/dist/esm/composables/lists/select-strategy/multi-any.mjs +1 -46
- package/dist/esm/composables/lists/select-strategy/multi-any.mjs.map +1 -1
- package/dist/esm/composables/lists/select-strategy/multi-leaf.mjs +1 -20
- package/dist/esm/composables/lists/select-strategy/multi-leaf.mjs.map +1 -1
- package/dist/esm/composables/lists/select-strategy/single-any.mjs +1 -33
- package/dist/esm/composables/lists/select-strategy/single-any.mjs.map +1 -1
- package/dist/esm/composables/lists/select-strategy/single-leaf.mjs +1 -20
- package/dist/esm/composables/lists/select-strategy/single-leaf.mjs.map +1 -1
- package/dist/esm/composables/locale.mjs +1 -40
- package/dist/esm/composables/locale.mjs.map +1 -1
- package/dist/esm/composables/modelProxy.mjs +1 -60
- package/dist/esm/composables/modelProxy.mjs.map +1 -1
- package/dist/esm/composables/notification.mjs +1 -28
- package/dist/esm/composables/notification.mjs.map +1 -1
- package/dist/esm/composables/position.mjs +1 -71
- package/dist/esm/composables/position.mjs.map +1 -1
- package/dist/esm/composables/resizeObserver.mjs +1 -47
- package/dist/esm/composables/resizeObserver.mjs.map +1 -1
- package/dist/esm/composables/rounded.mjs +1 -31
- package/dist/esm/composables/rounded.mjs.map +1 -1
- package/dist/esm/composables/router.mjs +1 -96
- package/dist/esm/composables/router.mjs.map +1 -1
- package/dist/esm/composables/scopeId.mjs +1 -12
- package/dist/esm/composables/scopeId.mjs.map +1 -1
- package/dist/esm/composables/selectLink.mjs +1 -23
- package/dist/esm/composables/selectLink.mjs.map +1 -1
- package/dist/esm/composables/size.mjs +1 -43
- package/dist/esm/composables/size.mjs.map +1 -1
- package/dist/esm/composables/ssrBoot.mjs +1 -19
- package/dist/esm/composables/ssrBoot.mjs.map +1 -1
- package/dist/esm/composables/stack.mjs +1 -66
- package/dist/esm/composables/stack.mjs.map +1 -1
- package/dist/esm/composables/tag.mjs +1 -14
- package/dist/esm/composables/tag.mjs.map +1 -1
- package/dist/esm/composables/teleport.mjs +1 -37
- package/dist/esm/composables/teleport.mjs.map +1 -1
- package/dist/esm/composables/theme.mjs +1 -57
- package/dist/esm/composables/theme.mjs.map +1 -1
- package/dist/esm/composables/time.mjs +1 -70
- package/dist/esm/composables/time.mjs.map +1 -1
- package/dist/esm/composables/toggleScope.mjs +1 -32
- package/dist/esm/composables/toggleScope.mjs.map +1 -1
- package/dist/esm/composables/validation.mjs +1 -32
- package/dist/esm/composables/validation.mjs.map +1 -1
- package/dist/esm/composables/virtual.mjs +1 -256
- package/dist/esm/composables/virtual.mjs.map +1 -1
- package/dist/esm/directives/click-outside.mjs +1 -96
- package/dist/esm/directives/click-outside.mjs.map +1 -1
- package/dist/esm/directives/index.mjs +1 -11
- package/dist/esm/directives/index.mjs.map +1 -1
- package/dist/esm/directives/intersect.mjs +1 -51
- package/dist/esm/directives/intersect.mjs.map +1 -1
- package/dist/esm/directives/slots.mjs +1 -17
- package/dist/esm/directives/slots.mjs.map +1 -1
- package/dist/esm/directives/touch.mjs +1 -100
- package/dist/esm/directives/touch.mjs.map +1 -1
- package/dist/esm/evance-ui.css +1 -20606
- package/dist/esm/framework.mjs +1 -75
- package/dist/esm/framework.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/AmazonIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/AmazonIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/AppleIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/AppleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/BehanceIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/BehanceIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/BitbucketIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/BitbucketIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/DiscordIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/DiscordIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/DribbbleIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/DribbbleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/FacebookIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/FacebookIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/FlickrIcon.svg.mjs +1 -24
- package/dist/esm/icons/brand/glyph/FlickrIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/GitHubIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/GitHubIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/GoogleIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/GoogleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/HubSpotIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/HubSpotIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/InstagramIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/InstagramIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/LinkedInIcon.svg.mjs +1 -24
- package/dist/esm/icons/brand/glyph/LinkedInIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/MessengerIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/MessengerIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/PayPalIcon.svg.mjs +1 -24
- package/dist/esm/icons/brand/glyph/PayPalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/PinterestIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/PinterestIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/RedditIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/RedditIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/SlackIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/SlackIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/TikTokIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/TikTokIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/TwitchIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/TwitchIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/TwitterIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/TwitterIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/VimeoIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/VimeoIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/WeChatIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/WeChatIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/WhatsAppIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/WhatsAppIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/XIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/XIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand/glyph/YouTubeIcon.svg.mjs +1 -20
- package/dist/esm/icons/brand/glyph/YouTubeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/brand.mjs +1 -55
- package/dist/esm/icons/brand.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/AlignItemsBottomIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/AlignItemsBottomIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/AlignItemsMiddleIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/AlignItemsMiddleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/AlignItemsTopIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/AlignItemsTopIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/BoldIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/BoldIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/CellMergeIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/CellMergeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/CellSplitIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/CellSplitIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ClearFormattingIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ClearFormattingIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/CodeFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/CodeFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/CodeIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/CodeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColorBucketIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColorBucketIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColorDropletFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColorDropletFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColorDropletHalfIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColorDropletHalfIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColorDropletIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColorDropletIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColorDropletOffIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColorDropletOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColorGradientIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/ColorGradientIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColorPaletteIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColorPaletteIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColorPipetteIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColorPipetteIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColorSolidIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColorSolidIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColumnAddAfterIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColumnAddAfterIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColumnAddBeforeIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColumnAddBeforeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColumnMoveLeftIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColumnMoveLeftIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColumnMoveRightIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColumnMoveRightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ColumnsIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ColumnsIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ComponentFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ComponentFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ComponentIcon.svg.mjs +1 -23
- package/dist/esm/icons/editor/glyph/ComponentIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/CurlyBracketsIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/CurlyBracketsIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/DesignIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/DesignIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/DesktopIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/DesktopIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/DevicesIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/DevicesIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/DimensionAngleIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/DimensionAngleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/DimensionHeightIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/DimensionHeightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/DimensionWidthIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/DimensionWidthIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/DistributeHorizontalIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/DistributeHorizontalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/DistributeVerticalIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/DistributeVerticalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FlowHorizontalIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/FlowHorizontalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FlowVerticalIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/FlowVerticalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontDisplayIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontDisplayIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontDisplayLowerIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontDisplayLowerIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontDisplayUpperIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontDisplayUpperIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontMonoIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontMonoIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontMonoLowerIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontMonoLowerIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontMonoUpperIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontMonoUpperIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontSansIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontSansIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontSansLowerIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontSansLowerIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontSansUpperIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontSansUpperIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontScriptIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontScriptIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontScriptLowerIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontScriptLowerIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontScriptUpperIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontScriptUpperIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontSerifIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontSerifIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontSerifLowerIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontSerifLowerIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontSerifUpperIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontSerifUpperIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontSizeIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontSizeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/FontSizeScalingIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/FontSizeScalingIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/GapHorizontalIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/GapHorizontalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/GapVerticalIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/GapVerticalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/HeadingFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/HeadingFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ImageBrightnessIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/ImageBrightnessIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ImageContrastIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/ImageContrastIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ImageCropIcon.svg.mjs +1 -22
- package/dist/esm/icons/editor/glyph/ImageCropIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ImageFlipHIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/ImageFlipHIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ImageFlipVIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/ImageFlipVIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ImageIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ImageIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ImageRotateIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/ImageRotateIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ImageScaleIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/ImageScaleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ItalicsIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ItalicsIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ItalicsOffIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ItalicsOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/JustifyContentCenterIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/JustifyContentCenterIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/JustifyContentLeftIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/JustifyContentLeftIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/JustifyContentRightIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/JustifyContentRightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/KeyframeAddIcon.svg.mjs +1 -26
- package/dist/esm/icons/editor/glyph/KeyframeAddIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/LaptopIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/LaptopIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/LetterSpacingIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/LetterSpacingIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/LineHeightIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/LineHeightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/LineThicknessIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/LineThicknessIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/LinkExternalIcon.svg.mjs +1 -22
- package/dist/esm/icons/editor/glyph/LinkExternalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/LinkIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/LinkIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ListBulletIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/ListBulletIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ListNumberedIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/ListNumberedIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/LowercaseIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/LowercaseIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/MagicWandIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/MagicWandIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/MobileIcon.svg.mjs +1 -26
- package/dist/esm/icons/editor/glyph/MobileIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/MobileLandscapeIcon.svg.mjs +1 -26
- package/dist/esm/icons/editor/glyph/MobileLandscapeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/OverlineIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/OverlineIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/PaddingBottomIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/PaddingBottomIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/PaddingHorizontalIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/PaddingHorizontalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/PaddingIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/PaddingIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/PaddingLeftIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/PaddingLeftIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/PaddingRightIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/PaddingRightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/PaddingTopIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/PaddingTopIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/PaddingVerticalIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/PaddingVerticalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ParagraphFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/ParagraphFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ParagraphSpacingIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/ParagraphSpacingIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/PauseIcon.svg.mjs +1 -22
- package/dist/esm/icons/editor/glyph/PauseIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/PlayIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/PlayIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/PositionXIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/PositionXIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/PositionYIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/PositionYIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/QuoteIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/QuoteIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/RadiusBottomLeftIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/RadiusBottomLeftIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/RadiusBottomRightIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/RadiusBottomRightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/RadiusIcon.svg.mjs +1 -26
- package/dist/esm/icons/editor/glyph/RadiusIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/RadiusTopLeftIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/RadiusTopLeftIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/RadiusTopRightIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/RadiusTopRightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/ReplayIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/ReplayIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/RowAddAfterIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/RowAddAfterIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/RowAddBeforeIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/RowAddBeforeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/RowMoveDownIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/RowMoveDownIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/RowMoveUpIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/RowMoveUpIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/RowsIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/RowsIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/SkipNextIcon.svg.mjs +1 -22
- package/dist/esm/icons/editor/glyph/SkipNextIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/SkipPreviousIcon.svg.mjs +1 -22
- package/dist/esm/icons/editor/glyph/SkipPreviousIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/StopIcon.svg.mjs +1 -26
- package/dist/esm/icons/editor/glyph/StopIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/StrikethroughIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/StrikethroughIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TableIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/TableIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TabletIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/TabletIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TabletLandscapeIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/TabletLandscapeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TemplateIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/TemplateIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TextCenterIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/TextCenterIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TextIndentIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/TextIndentIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TextJustifyIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/TextJustifyIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TextLeftIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/TextLeftIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TextOutdentIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/TextOutdentIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TextRightIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/TextRightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TextTruncateIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/TextTruncateIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TidyHorizontalIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/TidyHorizontalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TidyIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/TidyIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TidyVerticalIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/TidyVerticalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TitlecaseIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/TitlecaseIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/TypographyIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/TypographyIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/UnderlineIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/UnderlineIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/UnlinkIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/UnlinkIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/UppercaseIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/UppercaseIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/VectorPathIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/VectorPathIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/VerticalAlignBottomIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/VerticalAlignBottomIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/VerticalAlignMiddleIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/VerticalAlignMiddleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/VerticalAlignTopIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/VerticalAlignTopIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/VideoIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/VideoIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/WidescreenIcon.svg.mjs +1 -24
- package/dist/esm/icons/editor/glyph/WidescreenIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor/glyph/WrapIcon.svg.mjs +1 -20
- package/dist/esm/icons/editor/glyph/WrapIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/editor.mjs +1 -279
- package/dist/esm/icons/editor.mjs.map +1 -1
- package/dist/esm/icons/glyph/AddressFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/AddressFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/AddressIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/AddressIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/AjaxIcon.svg.mjs +1 -22
- package/dist/esm/icons/glyph/AjaxIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/AlarmIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/AlarmIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ApiIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ApiIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/AppsAddIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/AppsAddIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/AppsFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/AppsFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/AppsIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/AppsIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ArrowBackIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ArrowBackIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ArrowContinueIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ArrowContinueIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ArrowDownIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ArrowDownIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ArrowLeftIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ArrowLeftIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ArrowMergeIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ArrowMergeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ArrowReturnIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ArrowReturnIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ArrowRightIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ArrowRightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ArrowShuffleIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ArrowShuffleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ArrowSplitIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ArrowSplitIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ArrowUpIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ArrowUpIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/AsideClosedIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/AsideClosedIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/AsideOpenIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/AsideOpenIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/AtIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/AtIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/AttachmentIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/AttachmentIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/AudioIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/AudioIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/BankIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/BankIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/BarcodeIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/BarcodeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/BellFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/BellFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/BellIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/BellIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/BelowRightIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/BelowRightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/BookmarkFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/BookmarkFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/BookmarkIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/BookmarkIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/BookmarkPlusIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/BookmarkPlusIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/BoxFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/BoxFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/BoxIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/BoxIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/BugIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/BugIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/BuyXGetYIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/BuyXGetYIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CalculateIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CalculateIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CalendarIcon.svg.mjs +1 -22
- package/dist/esm/icons/glyph/CalendarIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CancelCircleIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CancelCircleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CancelIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/CancelIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CartFillIcon.svg.mjs +1 -28
- package/dist/esm/icons/glyph/CartFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CartIcon.svg.mjs +1 -28
- package/dist/esm/icons/glyph/CartIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CartOffIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CartOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CategoriesFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/CategoriesFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CategoriesIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CategoriesIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CategoriesOffIcon.svg.mjs +1 -28
- package/dist/esm/icons/glyph/CategoriesOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ChartBandsIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ChartBandsIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ChartBarIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ChartBarIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ChartLineIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ChartLineIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ChartPieFillIcon.svg.mjs +1 -22
- package/dist/esm/icons/glyph/ChartPieFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ChartPieIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/ChartPieIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CheckCircleIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CheckCircleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CheckIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/CheckIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ChevronDownIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ChevronDownIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ChevronLeftIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ChevronLeftIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ChevronRightIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ChevronRightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ChevronUpIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ChevronUpIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CloudFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CloudFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CloudIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CloudIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CollapseIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CollapseIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CollapseXIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CollapseXIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CollapseYIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CollapseYIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CommentFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/CommentFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CommentIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/CommentIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CompanyIcon.svg.mjs +1 -30
- package/dist/esm/icons/glyph/CompanyIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ComponentsIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ComponentsIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ConfigureIcon.svg.mjs +1 -30
- package/dist/esm/icons/glyph/ConfigureIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ConnectionIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ConnectionIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ConnectionOffIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ConnectionOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ContactsFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ContactsFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ContactsIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ContactsIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CopyIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/CopyIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CouponFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CouponFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CouponIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CouponIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CrownIcon.svg.mjs +1 -22
- package/dist/esm/icons/glyph/CrownIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CurrencyDollarIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/CurrencyDollarIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CurrencyEuroIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CurrencyEuroIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CurrencyPoundIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CurrencyPoundIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CurrencyYenIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CurrencyYenIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/CycleIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/CycleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/DangerIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/DangerIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/DeleteFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/DeleteFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/DeleteIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/DeleteIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/DiscountFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/DiscountFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/DiscountIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/DiscountIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/DotIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/DotIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/DownloadIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/DownloadIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/DownloadableIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/DownloadableIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/DragIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/DragIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/DraggableIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/DraggableIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/DropMenuIcon.svg.mjs +1 -30
- package/dist/esm/icons/glyph/DropMenuIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/EditIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/EditIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/EllipsisIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/EllipsisIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/EmailFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/EmailFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/EmailIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/EmailIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/EvanceCircleIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/EvanceCircleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/EvanceIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/EvanceIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ExitIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ExitIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ExpandIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ExpandIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ExpandXIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ExpandXIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ExpandYIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ExpandYIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ExportIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ExportIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceDissatisfiedFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FaceDissatisfiedFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceDissatisfiedIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/FaceDissatisfiedIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceHappyFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FaceHappyFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceHappyIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/FaceHappyIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceNeutralFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FaceNeutralFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceNeutralIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/FaceNeutralIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceSadFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FaceSadFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceSadIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/FaceSadIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceSatisfiedFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FaceSatisfiedFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceSatisfiedIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/FaceSatisfiedIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceVeryHappyFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FaceVeryHappyFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceVeryHappyIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/FaceVeryHappyIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceWonderingFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FaceWonderingFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FaceWonderingIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FaceWonderingIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FieldInputIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FieldInputIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FileIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FileIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FilterIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FilterIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FlagFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/FlagFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FlagIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FlagIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FolderAddIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FolderAddIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FolderFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/FolderFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FolderIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FolderIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FolderOpenIcon.svg.mjs +1 -22
- package/dist/esm/icons/glyph/FolderOpenIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FontIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FontIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ForbiddenIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ForbiddenIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FormIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FormIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/FrameIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/FrameIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/GiftIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/GiftIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/HashtagIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/HashtagIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/HeartFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/HeartFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/HeartIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/HeartIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/HelpIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/HelpIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/HistoryIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/HistoryIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/HomeFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/HomeFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/HomeIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/HomeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ImageFramesIcon.svg.mjs +1 -28
- package/dist/esm/icons/glyph/ImageFramesIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ImageIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ImageIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ImportIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ImportIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ImportantFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ImportantFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ImportantIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ImportantIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/InboxFillIcon.svg.mjs +1 -22
- package/dist/esm/icons/glyph/InboxFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/InboxIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/InboxIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/InfoIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/InfoIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/InventoryFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/InventoryFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/InventoryIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/InventoryIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/InvoiceFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/InvoiceFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/InvoiceIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/InvoiceIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KbdArrowDownIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/KbdArrowDownIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KbdArrowLeftIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/KbdArrowLeftIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KbdArrowRightIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/KbdArrowRightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KbdArrowUpIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/KbdArrowUpIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KbdBackspaceIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/KbdBackspaceIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KbdCommandIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/KbdCommandIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KbdControlIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/KbdControlIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KbdOptionIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/KbdOptionIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KbdReturnIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/KbdReturnIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KbdShiftIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/KbdShiftIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KbdSpaceIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/KbdSpaceIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KbdTabIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/KbdTabIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/KeyIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/KeyIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/LaunchIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/LaunchIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/LightningBoltIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/LightningBoltIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/LoadingIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/LoadingIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/LockFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/LockFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/LockIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/LockIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/LockOffFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/LockOffFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/LockOffIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/LockOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/LockOpenIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/LockOpenIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ManufacturerIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ManufacturerIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ManufacturerOffIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ManufacturerOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/MediaLibraryIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/MediaLibraryIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/MenuIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/MenuIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/MetafieldIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/MetafieldIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/MinusCircleFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/MinusCircleFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/MinusCircleIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/MinusCircleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/MinusIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/MinusIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/MoveDownIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/MoveDownIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/MoveLeftIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/MoveLeftIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/MoveRightIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/MoveRightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/MoveUpIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/MoveUpIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/NoteIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/NoteIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PackingIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/PackingIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PagesFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/PagesFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PagesIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/PagesIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PaymentsFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/PaymentsFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PaymentsIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/PaymentsIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PaymentsOffIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/PaymentsOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PaymentsRecurringIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/PaymentsRecurringIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PdfIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/PdfIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PercentIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/PercentIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PhoneIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/PhoneIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PlaneIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/PlaneIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PlusCircleFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/PlusCircleFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PlusCircleIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/PlusCircleIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PlusIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/PlusIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PrintIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/PrintIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ProductsFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ProductsFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ProductsIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/ProductsIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ProductsOffIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ProductsOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PublicIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/PublicIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/PulseIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/PulseIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/QrCodeIcon.svg.mjs +1 -32
- package/dist/esm/icons/glyph/QrCodeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/QuestionIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/QuestionIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/QuickfindIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/QuickfindIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ReceiptFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ReceiptFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ReceiptIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/ReceiptIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/RedirectIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/RedirectIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/RedoIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/RedoIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ReloadIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ReloadIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/RepeatIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/RepeatIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ReplyIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ReplyIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ResultsGridFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ResultsGridFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ResultsGridIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ResultsGridIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ResultsStackedFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ResultsStackedFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ResultsStackedIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ResultsStackedIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ReviewFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ReviewFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ReviewHalfIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ReviewHalfIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ReviewIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ReviewIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/RocketIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/RocketIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SalesEnquiryFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/SalesEnquiryFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SalesEnquiryIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/SalesEnquiryIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SalesOrderFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/SalesOrderFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SalesOrderIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/SalesOrderIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SalesQuotationFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/SalesQuotationFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SalesQuotationIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/SalesQuotationIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SaveFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/SaveFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SaveIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/SaveIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SearchIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/SearchIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SearchOffIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/SearchOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SendFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/SendFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SendIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/SendIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SettingsFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/SettingsFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SettingsIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/SettingsIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ShareIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ShareIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ShieldFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ShieldFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ShieldIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ShieldIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ShieldTickFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ShieldTickFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ShieldTickIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ShieldTickIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ShippingFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ShippingFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ShippingIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ShippingIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ShippingOffIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ShippingOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SignupIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/SignupIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SpannerIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/SpannerIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/StampIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/StampIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/StorefrontIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/StorefrontIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SwapHorizontalIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/SwapHorizontalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/SwapVerticalIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/SwapVerticalIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TagFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/TagFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TagIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/TagIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TagOffIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/TagOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TargetIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/TargetIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TargetOffIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/TargetOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TeamIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/TeamIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TelesalesIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/TelesalesIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ThemeDarkFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ThemeDarkFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ThemeDarkIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ThemeDarkIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ThemeLightFillIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ThemeLightFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ThemeLightIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/ThemeLightIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ThemeOsIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/ThemeOsIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ThumbsDownFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ThumbsDownFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ThumbsDownIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ThumbsDownIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ThumbsUpFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ThumbsUpFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ThumbsUpIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ThumbsUpIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TicketFillIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/TicketFillIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TicketIcon.svg.mjs +1 -26
- package/dist/esm/icons/glyph/TicketIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TimeIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/TimeIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TranslateIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/TranslateIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TrayInIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/TrayInIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TrayOutIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/TrayOutIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/TrophyIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/TrophyIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/UndoIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/UndoIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/UploadIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/UploadIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/UserIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/UserIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/UserOffIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/UserOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/VectorImageIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/VectorImageIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/VideoIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/VideoIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/VisibilityHiddenIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/VisibilityHiddenIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/VisibilityIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/VisibilityIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/VisibilityOffIcon.svg.mjs +1 -28
- package/dist/esm/icons/glyph/VisibilityOffIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/WalletIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/WalletIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/WarningIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/WarningIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/WebhookIcon.svg.mjs +1 -20
- package/dist/esm/icons/glyph/WebhookIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/WorkflowIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/WorkflowIcon.svg.mjs.map +1 -1
- package/dist/esm/icons/glyph/ZipArchiveIcon.svg.mjs +1 -24
- package/dist/esm/icons/glyph/ZipArchiveIcon.svg.mjs.map +1 -1
- package/dist/esm/icons.mjs +1 -573
- package/dist/esm/icons.mjs.map +1 -1
- package/dist/esm/index.mjs +1 -565
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/locale/en.mjs +1 -110
- package/dist/esm/locale/en.mjs.map +1 -1
- package/dist/esm/modules/Form/Form.mjs +1 -127
- package/dist/esm/modules/Form/Form.mjs.map +1 -1
- package/dist/esm/modules/Form/FormField.mjs +1 -278
- package/dist/esm/modules/Form/FormField.mjs.map +1 -1
- package/dist/esm/modules/Locale/LocaleCode.mjs +1 -26
- package/dist/esm/modules/Locale/LocaleCode.mjs.map +1 -1
- package/dist/esm/modules/Locale/LocaleManager.mjs +1 -44
- package/dist/esm/modules/Locale/LocaleManager.mjs.map +1 -1
- package/dist/esm/modules/Locale/Localized.mjs +1 -54
- package/dist/esm/modules/Locale/Localized.mjs.map +1 -1
- package/dist/esm/modules/NumberFormatter.mjs +1 -16
- package/dist/esm/modules/NumberFormatter.mjs.map +1 -1
- package/dist/esm/modules/Translation/LanguagePack.mjs +1 -39
- package/dist/esm/modules/Translation/LanguagePack.mjs.map +1 -1
- package/dist/esm/modules/Translation/Pluralization.mjs +1 -26
- package/dist/esm/modules/Translation/Pluralization.mjs.map +1 -1
- package/dist/esm/modules/Translation/Translatable.mjs +1 -70
- package/dist/esm/modules/Translation/Translatable.mjs.map +1 -1
- package/dist/esm/modules/Translation/TranslationCode.mjs +1 -42
- package/dist/esm/modules/Translation/TranslationCode.mjs.map +1 -1
- package/dist/esm/modules/Translation/Translator.mjs +1 -114
- package/dist/esm/modules/Translation/Translator.mjs.map +1 -1
- package/dist/esm/services/dialog.mjs +1 -13
- package/dist/esm/services/dialog.mjs.map +1 -1
- package/dist/esm/services/drawer.mjs +1 -13
- package/dist/esm/services/drawer.mjs.map +1 -1
- package/dist/esm/services/index.mjs +1 -9
- package/dist/esm/services/index.mjs.map +1 -1
- package/dist/esm/services/notification.mjs +1 -13
- package/dist/esm/services/notification.mjs.map +1 -1
- package/dist/esm/util/anchor.mjs +1 -97
- package/dist/esm/util/anchor.mjs.map +1 -1
- package/dist/esm/util/animate.mjs +1 -87
- package/dist/esm/util/animate.mjs.map +1 -1
- package/dist/esm/util/appearance.mjs +1 -145
- package/dist/esm/util/appearance.mjs.map +1 -1
- package/dist/esm/util/array.mjs +1 -11
- package/dist/esm/util/array.mjs.map +1 -1
- package/dist/esm/util/bindProps.mjs +1 -56
- package/dist/esm/util/bindProps.mjs.map +1 -1
- package/dist/esm/util/browser.mjs +1 -21
- package/dist/esm/util/browser.mjs.map +1 -1
- package/dist/esm/util/children.mjs +1 -54
- package/dist/esm/util/children.mjs.map +1 -1
- package/dist/esm/util/components.mjs +1 -12
- package/dist/esm/util/components.mjs.map +1 -1
- package/dist/esm/util/console.mjs +1 -11
- package/dist/esm/util/console.mjs.map +1 -1
- package/dist/esm/util/dimensions.mjs +1 -109
- package/dist/esm/util/dimensions.mjs.map +1 -1
- package/dist/esm/util/dom/getOuterHeight.mjs +1 -16
- package/dist/esm/util/dom/getOuterHeight.mjs.map +1 -1
- package/dist/esm/util/dom/getOuterWidth.mjs +1 -16
- package/dist/esm/util/dom/getOuterWidth.mjs.map +1 -1
- package/dist/esm/util/dom/getViewport.mjs +1 -8
- package/dist/esm/util/dom/getViewport.mjs.map +1 -1
- package/dist/esm/util/events.mjs +1 -105
- package/dist/esm/util/events.mjs.map +1 -1
- package/dist/esm/util/helpers.mjs +1 -219
- package/dist/esm/util/helpers.mjs.map +1 -1
- package/dist/esm/util/injectSelf.mjs +1 -12
- package/dist/esm/util/injectSelf.mjs.map +1 -1
- package/dist/esm/util/is-functions.mjs +1 -115
- package/dist/esm/util/is-functions.mjs.map +1 -1
- package/dist/esm/util/isFixedPosition.mjs +1 -13
- package/dist/esm/util/isFixedPosition.mjs.map +1 -1
- package/dist/esm/util/keyboard.mjs +1 -50
- package/dist/esm/util/keyboard.mjs.map +1 -1
- package/dist/esm/util/math.mjs +1 -83
- package/dist/esm/util/math.mjs.map +1 -1
- package/dist/esm/util/modifiers.mjs +1 -33
- package/dist/esm/util/modifiers.mjs.map +1 -1
- package/dist/esm/util/numbers.mjs +1 -80
- package/dist/esm/util/numbers.mjs.map +1 -1
- package/dist/esm/util/plugins.mjs +1 -17
- package/dist/esm/util/plugins.mjs.map +1 -1
- package/dist/esm/util/props.mjs +1 -24
- package/dist/esm/util/props.mjs.map +1 -1
- package/dist/esm/util/scroll.mjs +1 -49
- package/dist/esm/util/scroll.mjs.map +1 -1
- package/dist/esm/util/strings.mjs +1 -64
- package/dist/esm/util/strings.mjs.map +1 -1
- package/dist/esm/util/style.mjs +1 -11
- package/dist/esm/util/style.mjs.map +1 -1
- package/dist/esm/util/units.mjs +1 -37
- package/dist/esm/util/units.mjs.map +1 -1
- package/dist/types/components/EvOverlay/activator.d.ts.map +1 -1
- package/package.json +9 -11
- package/dist/assets/evance-ui-logo.svg +0 -5
- package/dist/assets/favicon.svg +0 -3
- package/dist/cjs/EvApp.cjs +0 -8
- package/dist/cjs/EvApp.cjs.map +0 -1
- package/dist/cjs/EvAvatar.cjs +0 -8
- package/dist/cjs/EvAvatar.cjs.map +0 -1
- package/dist/cjs/EvBadge.cjs +0 -8
- package/dist/cjs/EvBadge.cjs.map +0 -1
- package/dist/cjs/EvBanner.cjs +0 -8
- package/dist/cjs/EvBanner.cjs.map +0 -1
- package/dist/cjs/EvBlock.cjs +0 -8
- package/dist/cjs/EvBlock.cjs.map +0 -1
- package/dist/cjs/EvButton.cjs +0 -8
- package/dist/cjs/EvButton.cjs.map +0 -1
- package/dist/cjs/EvButtonGroup.cjs +0 -8
- package/dist/cjs/EvButtonGroup.cjs.map +0 -1
- package/dist/cjs/EvButtonSelect.cjs +0 -9
- package/dist/cjs/EvButtonSelect.cjs.map +0 -1
- package/dist/cjs/EvButtonSwitch.cjs +0 -9
- package/dist/cjs/EvButtonSwitch.cjs.map +0 -1
- package/dist/cjs/EvCard.cjs +0 -16
- package/dist/cjs/EvCard.cjs.map +0 -1
- package/dist/cjs/EvCardActions.cjs +0 -8
- package/dist/cjs/EvCardActions.cjs.map +0 -1
- package/dist/cjs/EvCardContent.cjs +0 -8
- package/dist/cjs/EvCardContent.cjs.map +0 -1
- package/dist/cjs/EvCheckbox.cjs +0 -9
- package/dist/cjs/EvCheckbox.cjs.map +0 -1
- package/dist/cjs/EvCode.cjs +0 -8
- package/dist/cjs/EvCode.cjs.map +0 -1
- package/dist/cjs/EvContainer.cjs +0 -8
- package/dist/cjs/EvContainer.cjs.map +0 -1
- package/dist/cjs/EvDataTable.cjs +0 -20
- package/dist/cjs/EvDataTable.cjs.map +0 -1
- package/dist/cjs/EvDataTableCell.cjs +0 -8
- package/dist/cjs/EvDataTableCell.cjs.map +0 -1
- package/dist/cjs/EvDataTableRow.cjs +0 -8
- package/dist/cjs/EvDataTableRow.cjs.map +0 -1
- package/dist/cjs/EvDataTableSearch.cjs +0 -8
- package/dist/cjs/EvDataTableSearch.cjs.map +0 -1
- package/dist/cjs/EvDateField.cjs +0 -8
- package/dist/cjs/EvDateField.cjs.map +0 -1
- package/dist/cjs/EvDatePicker.cjs +0 -8
- package/dist/cjs/EvDatePicker.cjs.map +0 -1
- package/dist/cjs/EvDatePickerMonth.cjs +0 -8
- package/dist/cjs/EvDatePickerMonth.cjs.map +0 -1
- package/dist/cjs/EvDatePickerMonths.cjs +0 -8
- package/dist/cjs/EvDatePickerMonths.cjs.map +0 -1
- package/dist/cjs/EvDatePickerYears.cjs +0 -8
- package/dist/cjs/EvDatePickerYears.cjs.map +0 -1
- package/dist/cjs/EvDefaultsProvider.cjs +0 -8
- package/dist/cjs/EvDefaultsProvider.cjs.map +0 -1
- package/dist/cjs/EvDialog.cjs +0 -10
- package/dist/cjs/EvDialog.cjs.map +0 -1
- package/dist/cjs/EvDivider.cjs +0 -7
- package/dist/cjs/EvDivider.cjs.map +0 -1
- package/dist/cjs/EvDrawer.cjs +0 -8
- package/dist/cjs/EvDrawer.cjs.map +0 -1
- package/dist/cjs/EvEditOnClick.cjs +0 -8
- package/dist/cjs/EvEditOnClick.cjs.map +0 -1
- package/dist/cjs/EvEmptyState.cjs +0 -8
- package/dist/cjs/EvEmptyState.cjs.map +0 -1
- package/dist/cjs/EvErrors.cjs +0 -8
- package/dist/cjs/EvErrors.cjs.map +0 -1
- package/dist/cjs/EvEyebrow.cjs +0 -8
- package/dist/cjs/EvEyebrow.cjs.map +0 -1
- package/dist/cjs/EvFieldHelp.cjs +0 -8
- package/dist/cjs/EvFieldHelp.cjs.map +0 -1
- package/dist/cjs/EvFilterButton.cjs +0 -8
- package/dist/cjs/EvFilterButton.cjs.map +0 -1
- package/dist/cjs/EvForm.cjs +0 -8
- package/dist/cjs/EvForm.cjs.map +0 -1
- package/dist/cjs/EvFormHelp.cjs +0 -8
- package/dist/cjs/EvFormHelp.cjs.map +0 -1
- package/dist/cjs/EvHeading.cjs +0 -12
- package/dist/cjs/EvHeading.cjs.map +0 -1
- package/dist/cjs/EvHotkey.cjs +0 -9
- package/dist/cjs/EvHotkey.cjs.map +0 -1
- package/dist/cjs/EvIcon.cjs +0 -11
- package/dist/cjs/EvIcon.cjs.map +0 -1
- package/dist/cjs/EvImg.cjs +0 -8
- package/dist/cjs/EvImg.cjs.map +0 -1
- package/dist/cjs/EvInfiniteScroll.cjs +0 -8
- package/dist/cjs/EvInfiniteScroll.cjs.map +0 -1
- package/dist/cjs/EvKbd.cjs +0 -9
- package/dist/cjs/EvKbd.cjs.map +0 -1
- package/dist/cjs/EvLabel.cjs +0 -9
- package/dist/cjs/EvLabel.cjs.map +0 -1
- package/dist/cjs/EvLayout.cjs +0 -8
- package/dist/cjs/EvLayout.cjs.map +0 -1
- package/dist/cjs/EvLink.cjs +0 -8
- package/dist/cjs/EvLink.cjs.map +0 -1
- package/dist/cjs/EvList.cjs +0 -9
- package/dist/cjs/EvList.cjs.map +0 -1
- package/dist/cjs/EvListItem.cjs +0 -8
- package/dist/cjs/EvListItem.cjs.map +0 -1
- package/dist/cjs/EvLozenge.cjs +0 -8
- package/dist/cjs/EvLozenge.cjs.map +0 -1
- package/dist/cjs/EvMenu.cjs +0 -10
- package/dist/cjs/EvMenu.cjs.map +0 -1
- package/dist/cjs/EvMenuTransition.cjs +0 -10
- package/dist/cjs/EvMenuTransition.cjs.map +0 -1
- package/dist/cjs/EvMessage.cjs +0 -8
- package/dist/cjs/EvMessage.cjs.map +0 -1
- package/dist/cjs/EvNotification.cjs +0 -8
- package/dist/cjs/EvNotification.cjs.map +0 -1
- package/dist/cjs/EvNotifications.cjs +0 -8
- package/dist/cjs/EvNotifications.cjs.map +0 -1
- package/dist/cjs/EvNumber.cjs +0 -8
- package/dist/cjs/EvNumber.cjs.map +0 -1
- package/dist/cjs/EvNumberField.cjs +0 -9
- package/dist/cjs/EvNumberField.cjs.map +0 -1
- package/dist/cjs/EvOverlay.cjs +0 -17
- package/dist/cjs/EvOverlay.cjs.map +0 -1
- package/dist/cjs/EvProgress.cjs +0 -6
- package/dist/cjs/EvProgress.cjs.map +0 -1
- package/dist/cjs/EvProgressCircular.cjs +0 -6
- package/dist/cjs/EvProgressCircular.cjs.map +0 -1
- package/dist/cjs/EvQuickfind.cjs +0 -6
- package/dist/cjs/EvQuickfind.cjs.map +0 -1
- package/dist/cjs/EvRadio.cjs +0 -8
- package/dist/cjs/EvRadio.cjs.map +0 -1
- package/dist/cjs/EvRadioGroup.cjs +0 -9
- package/dist/cjs/EvRadioGroup.cjs.map +0 -1
- package/dist/cjs/EvResponsive.cjs +0 -8
- package/dist/cjs/EvResponsive.cjs.map +0 -1
- package/dist/cjs/EvSection.cjs +0 -8
- package/dist/cjs/EvSection.cjs.map +0 -1
- package/dist/cjs/EvSelect.cjs +0 -8
- package/dist/cjs/EvSelect.cjs.map +0 -1
- package/dist/cjs/EvSkeleton.cjs +0 -9
- package/dist/cjs/EvSkeleton.cjs.map +0 -1
- package/dist/cjs/EvSlideGroup.cjs +0 -11
- package/dist/cjs/EvSlideGroup.cjs.map +0 -1
- package/dist/cjs/EvSlideGroupItem.cjs +0 -11
- package/dist/cjs/EvSlideGroupItem.cjs.map +0 -1
- package/dist/cjs/EvSpacer.cjs +0 -8
- package/dist/cjs/EvSpacer.cjs.map +0 -1
- package/dist/cjs/EvSurface.cjs +0 -9
- package/dist/cjs/EvSurface.cjs.map +0 -1
- package/dist/cjs/EvSwatch.cjs +0 -9
- package/dist/cjs/EvSwatch.cjs.map +0 -1
- package/dist/cjs/EvSwitch.cjs +0 -8
- package/dist/cjs/EvSwitch.cjs.map +0 -1
- package/dist/cjs/EvTab.cjs +0 -8
- package/dist/cjs/EvTab.cjs.map +0 -1
- package/dist/cjs/EvTabs.cjs +0 -13
- package/dist/cjs/EvTabs.cjs.map +0 -1
- package/dist/cjs/EvTag.cjs +0 -8
- package/dist/cjs/EvTag.cjs.map +0 -1
- package/dist/cjs/EvTagGroup.cjs +0 -9
- package/dist/cjs/EvTagGroup.cjs.map +0 -1
- package/dist/cjs/EvText.cjs +0 -11
- package/dist/cjs/EvText.cjs.map +0 -1
- package/dist/cjs/EvTextarea.cjs +0 -8
- package/dist/cjs/EvTextarea.cjs.map +0 -1
- package/dist/cjs/EvTextfield.cjs +0 -8
- package/dist/cjs/EvTextfield.cjs.map +0 -1
- package/dist/cjs/EvThumbnail.cjs +0 -9
- package/dist/cjs/EvThumbnail.cjs.map +0 -1
- package/dist/cjs/EvTimeField.cjs +0 -8
- package/dist/cjs/EvTimeField.cjs.map +0 -1
- package/dist/cjs/EvTimePicker.cjs +0 -8
- package/dist/cjs/EvTimePicker.cjs.map +0 -1
- package/dist/cjs/EvTimePickerHours.cjs +0 -8
- package/dist/cjs/EvTimePickerHours.cjs.map +0 -1
- package/dist/cjs/EvTimePickerMinutes.cjs +0 -8
- package/dist/cjs/EvTimePickerMinutes.cjs.map +0 -1
- package/dist/cjs/EvToolbar.cjs +0 -8
- package/dist/cjs/EvToolbar.cjs.map +0 -1
- package/dist/cjs/EvTooltip.cjs +0 -8
- package/dist/cjs/EvTooltip.cjs.map +0 -1
- package/dist/cjs/EvTransitionExpand.cjs +0 -16
- package/dist/cjs/EvTransitionExpand.cjs.map +0 -1
- package/dist/cjs/EvTransitionExpandX.cjs +0 -9
- package/dist/cjs/EvTransitionExpandX.cjs.map +0 -1
- package/dist/cjs/EvVirtualScroll.cjs +0 -9
- package/dist/cjs/EvVirtualScroll.cjs.map +0 -1
- package/dist/cjs/EvWindow.cjs +0 -14
- package/dist/cjs/EvWindow.cjs.map +0 -1
- package/dist/cjs/EvWindowItem.cjs +0 -8
- package/dist/cjs/EvWindowItem.cjs.map +0 -1
- package/dist/cjs/_virtual/_plugin-vue_export-helper.cjs +0 -12
- package/dist/cjs/_virtual/_plugin-vue_export-helper.cjs.map +0 -1
- package/dist/cjs/assets/evance-ui-logo.svg +0 -5
- package/dist/cjs/assets/favicon.svg +0 -3
- package/dist/cjs/components/EvApp/EvApp.cjs +0 -19
- package/dist/cjs/components/EvApp/EvApp.cjs.map +0 -1
- package/dist/cjs/components/EvApp/EvApp.vue.cjs +0 -46
- package/dist/cjs/components/EvApp/EvApp.vue.cjs.map +0 -1
- package/dist/cjs/components/EvApp/EvApp.vue2.cjs +0 -6
- package/dist/cjs/components/EvApp/EvApp.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvAvatar/EvAvatar.cjs +0 -24
- package/dist/cjs/components/EvAvatar/EvAvatar.cjs.map +0 -1
- package/dist/cjs/components/EvAvatar/EvAvatar.vue.cjs +0 -53
- package/dist/cjs/components/EvAvatar/EvAvatar.vue.cjs.map +0 -1
- package/dist/cjs/components/EvAvatar/EvAvatar.vue2.cjs +0 -6
- package/dist/cjs/components/EvAvatar/EvAvatar.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvBadge/EvBadge.cjs +0 -39
- package/dist/cjs/components/EvBadge/EvBadge.cjs.map +0 -1
- package/dist/cjs/components/EvBadge/EvBadge.vue.cjs +0 -91
- package/dist/cjs/components/EvBadge/EvBadge.vue.cjs.map +0 -1
- package/dist/cjs/components/EvBadge/EvBadge.vue2.cjs +0 -6
- package/dist/cjs/components/EvBadge/EvBadge.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvBanner/EvBanner.cjs +0 -30
- package/dist/cjs/components/EvBanner/EvBanner.cjs.map +0 -1
- package/dist/cjs/components/EvBanner/EvBanner.vue.cjs +0 -116
- package/dist/cjs/components/EvBanner/EvBanner.vue.cjs.map +0 -1
- package/dist/cjs/components/EvBanner/EvBanner.vue2.cjs +0 -6
- package/dist/cjs/components/EvBanner/EvBanner.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvButton/EvButton.cjs +0 -50
- package/dist/cjs/components/EvButton/EvButton.cjs.map +0 -1
- package/dist/cjs/components/EvButton/EvButton.vue.cjs +0 -189
- package/dist/cjs/components/EvButton/EvButton.vue.cjs.map +0 -1
- package/dist/cjs/components/EvButton/EvButton.vue2.cjs +0 -6
- package/dist/cjs/components/EvButton/EvButton.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvButtonGroup/EvButtonGroup.cjs +0 -35
- package/dist/cjs/components/EvButtonGroup/EvButtonGroup.cjs.map +0 -1
- package/dist/cjs/components/EvButtonGroup/EvButtonGroup.vue.cjs +0 -79
- package/dist/cjs/components/EvButtonGroup/EvButtonGroup.vue.cjs.map +0 -1
- package/dist/cjs/components/EvButtonGroup/EvButtonGroup.vue2.cjs +0 -6
- package/dist/cjs/components/EvButtonGroup/EvButtonGroup.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvButtonSelect/EvButtonSelect.cjs +0 -24
- package/dist/cjs/components/EvButtonSelect/EvButtonSelect.cjs.map +0 -1
- package/dist/cjs/components/EvButtonSelect/EvButtonSelect.scss.cjs +0 -3
- package/dist/cjs/components/EvButtonSelect/EvButtonSelect.scss.cjs.map +0 -1
- package/dist/cjs/components/EvButtonSelect/EvButtonSelect.vue.cjs +0 -43
- package/dist/cjs/components/EvButtonSelect/EvButtonSelect.vue.cjs.map +0 -1
- package/dist/cjs/components/EvButtonSelect/EvButtonSelect.vue2.cjs +0 -6
- package/dist/cjs/components/EvButtonSelect/EvButtonSelect.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvButtonSwitch/EvButtonSwitch.cjs +0 -25
- package/dist/cjs/components/EvButtonSwitch/EvButtonSwitch.cjs.map +0 -1
- package/dist/cjs/components/EvButtonSwitch/EvButtonSwitch.scss.cjs +0 -3
- package/dist/cjs/components/EvButtonSwitch/EvButtonSwitch.scss.cjs.map +0 -1
- package/dist/cjs/components/EvButtonSwitch/EvButtonSwitch.vue.cjs +0 -59
- package/dist/cjs/components/EvButtonSwitch/EvButtonSwitch.vue.cjs.map +0 -1
- package/dist/cjs/components/EvButtonSwitch/EvButtonSwitch.vue2.cjs +0 -6
- package/dist/cjs/components/EvButtonSwitch/EvButtonSwitch.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvCard/EvCard.cjs +0 -56
- package/dist/cjs/components/EvCard/EvCard.cjs.map +0 -1
- package/dist/cjs/components/EvCard/EvCard.vue.cjs +0 -123
- package/dist/cjs/components/EvCard/EvCard.vue.cjs.map +0 -1
- package/dist/cjs/components/EvCard/EvCard.vue2.cjs +0 -6
- package/dist/cjs/components/EvCard/EvCard.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvCard/EvCardActions/EvCardActions.cjs +0 -25
- package/dist/cjs/components/EvCard/EvCardActions/EvCardActions.cjs.map +0 -1
- package/dist/cjs/components/EvCard/EvCardActions/EvCardActions.vue.cjs +0 -38
- package/dist/cjs/components/EvCard/EvCardActions/EvCardActions.vue.cjs.map +0 -1
- package/dist/cjs/components/EvCard/EvCardActions/EvCardActions.vue2.cjs +0 -6
- package/dist/cjs/components/EvCard/EvCardActions/EvCardActions.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvCard/EvCardContent/EvCardContent.cjs +0 -23
- package/dist/cjs/components/EvCard/EvCardContent/EvCardContent.cjs.map +0 -1
- package/dist/cjs/components/EvCard/EvCardContent/EvCardContent.vue.cjs +0 -105
- package/dist/cjs/components/EvCard/EvCardContent/EvCardContent.vue.cjs.map +0 -1
- package/dist/cjs/components/EvCard/EvCardContent/EvCardContent.vue2.cjs +0 -6
- package/dist/cjs/components/EvCard/EvCardContent/EvCardContent.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvCheckbox/EvCheckbox.cjs +0 -67
- package/dist/cjs/components/EvCheckbox/EvCheckbox.cjs.map +0 -1
- package/dist/cjs/components/EvCheckbox/EvCheckbox.vue.cjs +0 -123
- package/dist/cjs/components/EvCheckbox/EvCheckbox.vue.cjs.map +0 -1
- package/dist/cjs/components/EvCheckbox/EvCheckbox.vue2.cjs +0 -6
- package/dist/cjs/components/EvCheckbox/EvCheckbox.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvCode/EvCode.cjs +0 -14
- package/dist/cjs/components/EvCode/EvCode.cjs.map +0 -1
- package/dist/cjs/components/EvCode/EvCode.vue.cjs +0 -26
- package/dist/cjs/components/EvCode/EvCode.vue.cjs.map +0 -1
- package/dist/cjs/components/EvCode/EvCode.vue2.cjs +0 -6
- package/dist/cjs/components/EvCode/EvCode.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/EvDataTable.cjs +0 -36
- package/dist/cjs/components/EvDataTable/EvDataTable.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/EvDataTable.vue.cjs +0 -323
- package/dist/cjs/components/EvDataTable/EvDataTable.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/EvDataTable.vue2.cjs +0 -6
- package/dist/cjs/components/EvDataTable/EvDataTable.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/EvDataTableCell/EvDataTableCell.cjs +0 -22
- package/dist/cjs/components/EvDataTable/EvDataTableCell/EvDataTableCell.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/EvDataTableCell/EvDataTableCell.vue.cjs +0 -38
- package/dist/cjs/components/EvDataTable/EvDataTableCell/EvDataTableCell.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/EvDataTableCell/EvDataTableCell.vue2.cjs +0 -6
- package/dist/cjs/components/EvDataTable/EvDataTableCell/EvDataTableCell.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/EvDataTableRow/EvDataTableRow.cjs +0 -19
- package/dist/cjs/components/EvDataTable/EvDataTableRow/EvDataTableRow.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/EvDataTableRow/EvDataTableRow.vue.cjs +0 -123
- package/dist/cjs/components/EvDataTable/EvDataTableRow/EvDataTableRow.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/EvDataTableRow/EvDataTableRow.vue2.cjs +0 -6
- package/dist/cjs/components/EvDataTable/EvDataTableRow/EvDataTableRow.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.cjs +0 -26
- package/dist/cjs/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.vue.cjs +0 -333
- package/dist/cjs/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.vue2.cjs +0 -6
- package/dist/cjs/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/composables/headers.cjs +0 -237
- package/dist/cjs/components/EvDataTable/composables/headers.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/composables/items.cjs +0 -61
- package/dist/cjs/components/EvDataTable/composables/items.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/composables/select.cjs +0 -194
- package/dist/cjs/components/EvDataTable/composables/select.cjs.map +0 -1
- package/dist/cjs/components/EvDataTable/composables/sort.cjs +0 -114
- package/dist/cjs/components/EvDataTable/composables/sort.cjs.map +0 -1
- package/dist/cjs/components/EvDateField/EvDateField.cjs +0 -22
- package/dist/cjs/components/EvDateField/EvDateField.cjs.map +0 -1
- package/dist/cjs/components/EvDateField/EvDateField.vue.cjs +0 -159
- package/dist/cjs/components/EvDateField/EvDateField.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDateField/EvDateField.vue2.cjs +0 -6
- package/dist/cjs/components/EvDateField/EvDateField.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDatePicker/EvDatePicker.cjs +0 -20
- package/dist/cjs/components/EvDatePicker/EvDatePicker.cjs.map +0 -1
- package/dist/cjs/components/EvDatePicker/EvDatePicker.vue.cjs +0 -182
- package/dist/cjs/components/EvDatePicker/EvDatePicker.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDatePicker/EvDatePicker.vue2.cjs +0 -6
- package/dist/cjs/components/EvDatePicker/EvDatePicker.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.cjs +0 -25
- package/dist/cjs/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.cjs.map +0 -1
- package/dist/cjs/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.vue.cjs +0 -225
- package/dist/cjs/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.vue2.cjs +0 -6
- package/dist/cjs/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.cjs +0 -12
- package/dist/cjs/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.cjs.map +0 -1
- package/dist/cjs/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.vue.cjs +0 -61
- package/dist/cjs/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.vue2.cjs +0 -6
- package/dist/cjs/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.cjs +0 -14
- package/dist/cjs/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.cjs.map +0 -1
- package/dist/cjs/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.vue.cjs +0 -85
- package/dist/cjs/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.vue2.cjs +0 -6
- package/dist/cjs/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDefaultsProvider/EvDefaultsProvider.cjs +0 -16
- package/dist/cjs/components/EvDefaultsProvider/EvDefaultsProvider.cjs.map +0 -1
- package/dist/cjs/components/EvDefaultsProvider/EvDefaultsProvider.vue.cjs +0 -27
- package/dist/cjs/components/EvDefaultsProvider/EvDefaultsProvider.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDefaultsProvider/EvDefaultsProvider.vue2.cjs +0 -6
- package/dist/cjs/components/EvDefaultsProvider/EvDefaultsProvider.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialog.cjs +0 -69
- package/dist/cjs/components/EvDialog/EvDialog.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialog.vue.cjs +0 -299
- package/dist/cjs/components/EvDialog/EvDialog.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialog.vue2.cjs +0 -6
- package/dist/cjs/components/EvDialog/EvDialog.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialogBody.vue.cjs +0 -36
- package/dist/cjs/components/EvDialog/EvDialogBody.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialogBody.vue2.cjs +0 -7
- package/dist/cjs/components/EvDialog/EvDialogBody.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialogFooter.vue.cjs +0 -15
- package/dist/cjs/components/EvDialog/EvDialogFooter.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialogHeader.vue.cjs +0 -57
- package/dist/cjs/components/EvDialog/EvDialogHeader.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialogHeader.vue2.cjs +0 -7
- package/dist/cjs/components/EvDialog/EvDialogHeader.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialogInstance.cjs +0 -19
- package/dist/cjs/components/EvDialog/EvDialogInstance.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialogRenderer.cjs +0 -121
- package/dist/cjs/components/EvDialog/EvDialogRenderer.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialogServiceOpener.cjs +0 -28
- package/dist/cjs/components/EvDialog/EvDialogServiceOpener.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialogTransition.vue.cjs +0 -142
- package/dist/cjs/components/EvDialog/EvDialogTransition.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDialog/EvDialogTransition.vue2.cjs +0 -7
- package/dist/cjs/components/EvDialog/EvDialogTransition.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDivider/EvDivider.vue.cjs +0 -83
- package/dist/cjs/components/EvDivider/EvDivider.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDivider/EvDivider.vue3.cjs +0 -7
- package/dist/cjs/components/EvDivider/EvDivider.vue3.cjs.map +0 -1
- package/dist/cjs/components/EvDrawer/EvDrawer.cjs +0 -18
- package/dist/cjs/components/EvDrawer/EvDrawer.cjs.map +0 -1
- package/dist/cjs/components/EvDrawer/EvDrawer.vue.cjs +0 -67
- package/dist/cjs/components/EvDrawer/EvDrawer.vue.cjs.map +0 -1
- package/dist/cjs/components/EvDrawer/EvDrawer.vue2.cjs +0 -6
- package/dist/cjs/components/EvDrawer/EvDrawer.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvDrawer/EvDrawerInstance.cjs +0 -19
- package/dist/cjs/components/EvDrawer/EvDrawerInstance.cjs.map +0 -1
- package/dist/cjs/components/EvDrawer/EvDrawerRenderer.cjs +0 -121
- package/dist/cjs/components/EvDrawer/EvDrawerRenderer.cjs.map +0 -1
- package/dist/cjs/components/EvDrawer/EvDrawerServiceOpener.cjs +0 -28
- package/dist/cjs/components/EvDrawer/EvDrawerServiceOpener.cjs.map +0 -1
- package/dist/cjs/components/EvEditOnClick/EvEditOnClick.cjs +0 -16
- package/dist/cjs/components/EvEditOnClick/EvEditOnClick.cjs.map +0 -1
- package/dist/cjs/components/EvEditOnClick/EvEditOnClick.vue.cjs +0 -110
- package/dist/cjs/components/EvEditOnClick/EvEditOnClick.vue.cjs.map +0 -1
- package/dist/cjs/components/EvEditOnClick/EvEditOnClick.vue2.cjs +0 -6
- package/dist/cjs/components/EvEditOnClick/EvEditOnClick.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvEmptyState/EvEmptyState.cjs +0 -42
- package/dist/cjs/components/EvEmptyState/EvEmptyState.cjs.map +0 -1
- package/dist/cjs/components/EvEmptyState/EvEmptyState.vue.cjs +0 -123
- package/dist/cjs/components/EvEmptyState/EvEmptyState.vue.cjs.map +0 -1
- package/dist/cjs/components/EvEmptyState/EvEmptyState.vue2.cjs +0 -6
- package/dist/cjs/components/EvEmptyState/EvEmptyState.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvErrors/EvErrors.cjs +0 -18
- package/dist/cjs/components/EvErrors/EvErrors.cjs.map +0 -1
- package/dist/cjs/components/EvErrors/EvErrors.vue.cjs +0 -43
- package/dist/cjs/components/EvErrors/EvErrors.vue.cjs.map +0 -1
- package/dist/cjs/components/EvErrors/EvErrors.vue2.cjs +0 -6
- package/dist/cjs/components/EvErrors/EvErrors.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvEyebrow/EvEyebrow.cjs +0 -20
- package/dist/cjs/components/EvEyebrow/EvEyebrow.cjs.map +0 -1
- package/dist/cjs/components/EvEyebrow/EvEyebrow.scss.cjs +0 -3
- package/dist/cjs/components/EvEyebrow/EvEyebrow.scss.cjs.map +0 -1
- package/dist/cjs/components/EvEyebrow/EvEyebrow.vue.cjs +0 -31
- package/dist/cjs/components/EvEyebrow/EvEyebrow.vue.cjs.map +0 -1
- package/dist/cjs/components/EvEyebrow/EvEyebrow.vue2.cjs +0 -6
- package/dist/cjs/components/EvEyebrow/EvEyebrow.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvFieldHelp/EvFieldHelp.cjs +0 -14
- package/dist/cjs/components/EvFieldHelp/EvFieldHelp.cjs.map +0 -1
- package/dist/cjs/components/EvFieldHelp/EvFieldHelp.vue.cjs +0 -57
- package/dist/cjs/components/EvFieldHelp/EvFieldHelp.vue.cjs.map +0 -1
- package/dist/cjs/components/EvFieldHelp/EvFieldHelp.vue2.cjs +0 -6
- package/dist/cjs/components/EvFieldHelp/EvFieldHelp.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvFilterButton/EvFilterButton.cjs +0 -23
- package/dist/cjs/components/EvFilterButton/EvFilterButton.cjs.map +0 -1
- package/dist/cjs/components/EvFilterButton/EvFilterButton.vue.cjs +0 -59
- package/dist/cjs/components/EvFilterButton/EvFilterButton.vue.cjs.map +0 -1
- package/dist/cjs/components/EvFilterButton/EvFilterButton.vue2.cjs +0 -6
- package/dist/cjs/components/EvFilterButton/EvFilterButton.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvForm/EvForm.cjs +0 -15
- package/dist/cjs/components/EvForm/EvForm.cjs.map +0 -1
- package/dist/cjs/components/EvForm/EvForm.vue.cjs +0 -57
- package/dist/cjs/components/EvForm/EvForm.vue.cjs.map +0 -1
- package/dist/cjs/components/EvForm/EvForm.vue2.cjs +0 -6
- package/dist/cjs/components/EvForm/EvForm.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvFormHelp/EvFormHelp.cjs +0 -17
- package/dist/cjs/components/EvFormHelp/EvFormHelp.cjs.map +0 -1
- package/dist/cjs/components/EvFormHelp/EvFormHelp.vue.cjs +0 -36
- package/dist/cjs/components/EvFormHelp/EvFormHelp.vue.cjs.map +0 -1
- package/dist/cjs/components/EvFormHelp/EvFormHelp.vue2.cjs +0 -6
- package/dist/cjs/components/EvFormHelp/EvFormHelp.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvGrid/EvBlock/EvBlock.cjs +0 -23
- package/dist/cjs/components/EvGrid/EvBlock/EvBlock.cjs.map +0 -1
- package/dist/cjs/components/EvGrid/EvBlock/EvBlock.vue.cjs +0 -64
- package/dist/cjs/components/EvGrid/EvBlock/EvBlock.vue.cjs.map +0 -1
- package/dist/cjs/components/EvGrid/EvBlock/EvBlock.vue2.cjs +0 -6
- package/dist/cjs/components/EvGrid/EvBlock/EvBlock.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvGrid/EvContainer/EvContainer.cjs +0 -23
- package/dist/cjs/components/EvGrid/EvContainer/EvContainer.cjs.map +0 -1
- package/dist/cjs/components/EvGrid/EvContainer/EvContainer.vue.cjs +0 -57
- package/dist/cjs/components/EvGrid/EvContainer/EvContainer.vue.cjs.map +0 -1
- package/dist/cjs/components/EvGrid/EvContainer/EvContainer.vue2.cjs +0 -6
- package/dist/cjs/components/EvGrid/EvContainer/EvContainer.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvGrid/EvLayout/EvLayout.cjs +0 -25
- package/dist/cjs/components/EvGrid/EvLayout/EvLayout.cjs.map +0 -1
- package/dist/cjs/components/EvGrid/EvLayout/EvLayout.vue.cjs +0 -71
- package/dist/cjs/components/EvGrid/EvLayout/EvLayout.vue.cjs.map +0 -1
- package/dist/cjs/components/EvGrid/EvLayout/EvLayout.vue2.cjs +0 -6
- package/dist/cjs/components/EvGrid/EvLayout/EvLayout.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvGrid/EvSpacer/EvSpacer.cjs +0 -13
- package/dist/cjs/components/EvGrid/EvSpacer/EvSpacer.cjs.map +0 -1
- package/dist/cjs/components/EvGrid/EvSpacer/EvSpacer.vue.cjs +0 -25
- package/dist/cjs/components/EvGrid/EvSpacer/EvSpacer.vue.cjs.map +0 -1
- package/dist/cjs/components/EvGrid/EvSpacer/EvSpacer.vue2.cjs +0 -6
- package/dist/cjs/components/EvGrid/EvSpacer/EvSpacer.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvHeading/EvHeading.cjs +0 -51
- package/dist/cjs/components/EvHeading/EvHeading.cjs.map +0 -1
- package/dist/cjs/components/EvHeading/EvHeading.vue.cjs +0 -60
- package/dist/cjs/components/EvHeading/EvHeading.vue.cjs.map +0 -1
- package/dist/cjs/components/EvHeading/EvHeading.vue3.cjs +0 -7
- package/dist/cjs/components/EvHeading/EvHeading.vue3.cjs.map +0 -1
- package/dist/cjs/components/EvHotkey/EvHotkey.cjs +0 -97
- package/dist/cjs/components/EvHotkey/EvHotkey.cjs.map +0 -1
- package/dist/cjs/components/EvHotkey/EvHotkey.vue.cjs +0 -154
- package/dist/cjs/components/EvHotkey/EvHotkey.vue.cjs.map +0 -1
- package/dist/cjs/components/EvHotkey/EvHotkey.vue2.cjs +0 -6
- package/dist/cjs/components/EvHotkey/EvHotkey.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvIcon/EvIcon.cjs +0 -31
- package/dist/cjs/components/EvIcon/EvIcon.cjs.map +0 -1
- package/dist/cjs/components/EvIcon/EvIcon.vue.cjs +0 -50
- package/dist/cjs/components/EvIcon/EvIcon.vue.cjs.map +0 -1
- package/dist/cjs/components/EvIcon/EvIcon.vue3.cjs +0 -7
- package/dist/cjs/components/EvIcon/EvIcon.vue3.cjs.map +0 -1
- package/dist/cjs/components/EvImg/EvImg.cjs +0 -45
- package/dist/cjs/components/EvImg/EvImg.cjs.map +0 -1
- package/dist/cjs/components/EvImg/EvImg.vue.cjs +0 -358
- package/dist/cjs/components/EvImg/EvImg.vue.cjs.map +0 -1
- package/dist/cjs/components/EvImg/EvImg.vue2.cjs +0 -6
- package/dist/cjs/components/EvImg/EvImg.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScroll.cjs +0 -48
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScroll.cjs.map +0 -1
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScroll.vue.cjs +0 -268
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScroll.vue.cjs.map +0 -1
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScroll.vue2.cjs +0 -6
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScroll.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScrollIntersect.vue.cjs +0 -47
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScrollIntersect.vue.cjs.map +0 -1
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScrollIntersect.vue2.cjs +0 -6
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScrollIntersect.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScrollSide.vue.cjs +0 -86
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScrollSide.vue.cjs.map +0 -1
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScrollSide.vue2.cjs +0 -6
- package/dist/cjs/components/EvInfiniteScroll/EvInfiniteScrollSide.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvKbd/EvKbd.cjs +0 -23
- package/dist/cjs/components/EvKbd/EvKbd.cjs.map +0 -1
- package/dist/cjs/components/EvKbd/EvKbd.vue.cjs +0 -35
- package/dist/cjs/components/EvKbd/EvKbd.vue.cjs.map +0 -1
- package/dist/cjs/components/EvKbd/EvKbd.vue2.cjs +0 -6
- package/dist/cjs/components/EvKbd/EvKbd.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvLabel/EvLabel.cjs +0 -24
- package/dist/cjs/components/EvLabel/EvLabel.cjs.map +0 -1
- package/dist/cjs/components/EvLabel/EvLabel.vue.cjs +0 -43
- package/dist/cjs/components/EvLabel/EvLabel.vue.cjs.map +0 -1
- package/dist/cjs/components/EvLabel/EvLabel.vue2.cjs +0 -6
- package/dist/cjs/components/EvLabel/EvLabel.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvLink/EvLink.cjs +0 -24
- package/dist/cjs/components/EvLink/EvLink.cjs.map +0 -1
- package/dist/cjs/components/EvLink/EvLink.vue.cjs +0 -61
- package/dist/cjs/components/EvLink/EvLink.vue.cjs.map +0 -1
- package/dist/cjs/components/EvLink/EvLink.vue2.cjs +0 -6
- package/dist/cjs/components/EvLink/EvLink.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvList/EvList.cjs +0 -38
- package/dist/cjs/components/EvList/EvList.cjs.map +0 -1
- package/dist/cjs/components/EvList/EvList.vue.cjs +0 -103
- package/dist/cjs/components/EvList/EvList.vue.cjs.map +0 -1
- package/dist/cjs/components/EvList/EvList.vue2.cjs +0 -6
- package/dist/cjs/components/EvList/EvList.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvList/EvListChildren.vue.cjs +0 -61
- package/dist/cjs/components/EvList/EvListChildren.vue.cjs.map +0 -1
- package/dist/cjs/components/EvList/EvListChildren.vue2.cjs +0 -6
- package/dist/cjs/components/EvList/EvListChildren.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvListItem/EvListItem.cjs +0 -57
- package/dist/cjs/components/EvListItem/EvListItem.cjs.map +0 -1
- package/dist/cjs/components/EvListItem/EvListItem.vue.cjs +0 -283
- package/dist/cjs/components/EvListItem/EvListItem.vue.cjs.map +0 -1
- package/dist/cjs/components/EvListItem/EvListItem.vue2.cjs +0 -6
- package/dist/cjs/components/EvListItem/EvListItem.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvLozenge/EvLozenge.cjs +0 -28
- package/dist/cjs/components/EvLozenge/EvLozenge.cjs.map +0 -1
- package/dist/cjs/components/EvLozenge/EvLozenge.vue.cjs +0 -60
- package/dist/cjs/components/EvLozenge/EvLozenge.vue.cjs.map +0 -1
- package/dist/cjs/components/EvLozenge/EvLozenge.vue2.cjs +0 -6
- package/dist/cjs/components/EvLozenge/EvLozenge.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvMenu/EvMenu.cjs +0 -24
- package/dist/cjs/components/EvMenu/EvMenu.cjs.map +0 -1
- package/dist/cjs/components/EvMenu/EvMenu.vue.cjs +0 -129
- package/dist/cjs/components/EvMenu/EvMenu.vue.cjs.map +0 -1
- package/dist/cjs/components/EvMenu/EvMenu.vue2.cjs +0 -6
- package/dist/cjs/components/EvMenu/EvMenu.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvMenu/EvMenuTransition.vue.cjs +0 -150
- package/dist/cjs/components/EvMenu/EvMenuTransition.vue.cjs.map +0 -1
- package/dist/cjs/components/EvMenu/EvMenuTransition.vue2.cjs +0 -6
- package/dist/cjs/components/EvMenu/EvMenuTransition.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvMenu/shared.cjs +0 -6
- package/dist/cjs/components/EvMenu/shared.cjs.map +0 -1
- package/dist/cjs/components/EvMessage/EvMessage.cjs +0 -36
- package/dist/cjs/components/EvMessage/EvMessage.cjs.map +0 -1
- package/dist/cjs/components/EvMessage/EvMessage.vue.cjs +0 -208
- package/dist/cjs/components/EvMessage/EvMessage.vue.cjs.map +0 -1
- package/dist/cjs/components/EvMessage/EvMessage.vue2.cjs +0 -6
- package/dist/cjs/components/EvMessage/EvMessage.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvNotification/EvNotification.cjs +0 -23
- package/dist/cjs/components/EvNotification/EvNotification.cjs.map +0 -1
- package/dist/cjs/components/EvNotification/EvNotification.vue.cjs +0 -81
- package/dist/cjs/components/EvNotification/EvNotification.vue.cjs.map +0 -1
- package/dist/cjs/components/EvNotification/EvNotification.vue2.cjs +0 -6
- package/dist/cjs/components/EvNotification/EvNotification.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvNotifications/EvNotifications.vue.cjs +0 -58
- package/dist/cjs/components/EvNotifications/EvNotifications.vue.cjs.map +0 -1
- package/dist/cjs/components/EvNotifications/EvNotifications.vue2.cjs +0 -6
- package/dist/cjs/components/EvNotifications/EvNotifications.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvNotifications/EvNotificationsManager.cjs +0 -81
- package/dist/cjs/components/EvNotifications/EvNotificationsManager.cjs.map +0 -1
- package/dist/cjs/components/EvNumber/EvNumber.cjs +0 -18
- package/dist/cjs/components/EvNumber/EvNumber.cjs.map +0 -1
- package/dist/cjs/components/EvNumber/EvNumber.vue.cjs +0 -71
- package/dist/cjs/components/EvNumber/EvNumber.vue.cjs.map +0 -1
- package/dist/cjs/components/EvNumber/EvNumber.vue2.cjs +0 -6
- package/dist/cjs/components/EvNumber/EvNumber.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvNumber/EvNumberDigit.vue.cjs +0 -56
- package/dist/cjs/components/EvNumber/EvNumberDigit.vue.cjs.map +0 -1
- package/dist/cjs/components/EvNumber/EvNumberDigit.vue2.cjs +0 -6
- package/dist/cjs/components/EvNumber/EvNumberDigit.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvNumberField/EvNumberField.cjs +0 -331
- package/dist/cjs/components/EvNumberField/EvNumberField.cjs.map +0 -1
- package/dist/cjs/components/EvNumberField/EvNumberField.vue.cjs +0 -296
- package/dist/cjs/components/EvNumberField/EvNumberField.vue.cjs.map +0 -1
- package/dist/cjs/components/EvNumberField/EvNumberField.vue2.cjs +0 -6
- package/dist/cjs/components/EvNumberField/EvNumberField.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvOverlay/EvOverlay.cjs +0 -43
- package/dist/cjs/components/EvOverlay/EvOverlay.cjs.map +0 -1
- package/dist/cjs/components/EvOverlay/EvOverlay.vue.cjs +0 -303
- package/dist/cjs/components/EvOverlay/EvOverlay.vue.cjs.map +0 -1
- package/dist/cjs/components/EvOverlay/EvOverlay.vue2.cjs +0 -6
- package/dist/cjs/components/EvOverlay/EvOverlay.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvOverlay/activator.cjs +0 -402
- package/dist/cjs/components/EvOverlay/activator.cjs.map +0 -1
- package/dist/cjs/components/EvOverlay/position-strategy/connected-position.cjs +0 -627
- package/dist/cjs/components/EvOverlay/position-strategy/connected-position.cjs.map +0 -1
- package/dist/cjs/components/EvOverlay/position-strategy/static-position.cjs +0 -7
- package/dist/cjs/components/EvOverlay/position-strategy/static-position.cjs.map +0 -1
- package/dist/cjs/components/EvOverlay/position.cjs +0 -83
- package/dist/cjs/components/EvOverlay/position.cjs.map +0 -1
- package/dist/cjs/components/EvOverlay/scroll-strategy/block-scroll.cjs +0 -70
- package/dist/cjs/components/EvOverlay/scroll-strategy/block-scroll.cjs.map +0 -1
- package/dist/cjs/components/EvOverlay/scroll-strategy/close-scroll.cjs +0 -15
- package/dist/cjs/components/EvOverlay/scroll-strategy/close-scroll.cjs.map +0 -1
- package/dist/cjs/components/EvOverlay/scroll-strategy/reposition-scroll.cjs +0 -45
- package/dist/cjs/components/EvOverlay/scroll-strategy/reposition-scroll.cjs.map +0 -1
- package/dist/cjs/components/EvOverlay/scroll.cjs +0 -58
- package/dist/cjs/components/EvOverlay/scroll.cjs.map +0 -1
- package/dist/cjs/components/EvProgress/EvProgress.vue.cjs +0 -71
- package/dist/cjs/components/EvProgress/EvProgress.vue.cjs.map +0 -1
- package/dist/cjs/components/EvProgress/EvProgress.vue2.cjs +0 -6
- package/dist/cjs/components/EvProgress/EvProgress.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvProgressCircular/EvProgressCircular.vue.cjs +0 -111
- package/dist/cjs/components/EvProgressCircular/EvProgressCircular.vue.cjs.map +0 -1
- package/dist/cjs/components/EvProgressCircular/EvProgressCircular.vue2.cjs +0 -6
- package/dist/cjs/components/EvProgressCircular/EvProgressCircular.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvQuickfind/EvQuickfind.vue.cjs +0 -51
- package/dist/cjs/components/EvQuickfind/EvQuickfind.vue.cjs.map +0 -1
- package/dist/cjs/components/EvQuickfind/EvQuickfind.vue2.cjs +0 -6
- package/dist/cjs/components/EvQuickfind/EvQuickfind.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvRadio/EvRadio.cjs +0 -19
- package/dist/cjs/components/EvRadio/EvRadio.cjs.map +0 -1
- package/dist/cjs/components/EvRadio/EvRadio.vue.cjs +0 -131
- package/dist/cjs/components/EvRadio/EvRadio.vue.cjs.map +0 -1
- package/dist/cjs/components/EvRadio/EvRadio.vue2.cjs +0 -6
- package/dist/cjs/components/EvRadio/EvRadio.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvRadioGroup/EvRadioGroup.cjs +0 -20
- package/dist/cjs/components/EvRadioGroup/EvRadioGroup.cjs.map +0 -1
- package/dist/cjs/components/EvRadioGroup/EvRadioGroup.vue.cjs +0 -75
- package/dist/cjs/components/EvRadioGroup/EvRadioGroup.vue.cjs.map +0 -1
- package/dist/cjs/components/EvRadioGroup/EvRadioGroup.vue2.cjs +0 -6
- package/dist/cjs/components/EvRadioGroup/EvRadioGroup.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvResponsive/EvResponsive.cjs +0 -23
- package/dist/cjs/components/EvResponsive/EvResponsive.cjs.map +0 -1
- package/dist/cjs/components/EvResponsive/EvResponsive.vue.cjs +0 -46
- package/dist/cjs/components/EvResponsive/EvResponsive.vue.cjs.map +0 -1
- package/dist/cjs/components/EvResponsive/EvResponsive.vue2.cjs +0 -6
- package/dist/cjs/components/EvResponsive/EvResponsive.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvSection/EvSection.cjs +0 -16
- package/dist/cjs/components/EvSection/EvSection.cjs.map +0 -1
- package/dist/cjs/components/EvSection/EvSection.vue.cjs +0 -48
- package/dist/cjs/components/EvSection/EvSection.vue.cjs.map +0 -1
- package/dist/cjs/components/EvSection/EvSection.vue2.cjs +0 -6
- package/dist/cjs/components/EvSection/EvSection.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvSelect/EvSelect.cjs +0 -50
- package/dist/cjs/components/EvSelect/EvSelect.cjs.map +0 -1
- package/dist/cjs/components/EvSelect/EvSelect.vue.cjs +0 -557
- package/dist/cjs/components/EvSelect/EvSelect.vue.cjs.map +0 -1
- package/dist/cjs/components/EvSelect/EvSelect.vue2.cjs +0 -6
- package/dist/cjs/components/EvSelect/EvSelect.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvSelect/useScrolling.cjs +0 -79
- package/dist/cjs/components/EvSelect/useScrolling.cjs.map +0 -1
- package/dist/cjs/components/EvSkeleton/EvSkeleton.cjs +0 -117
- package/dist/cjs/components/EvSkeleton/EvSkeleton.cjs.map +0 -1
- package/dist/cjs/components/EvSkeleton/EvSkeleton.vue.cjs +0 -59
- package/dist/cjs/components/EvSkeleton/EvSkeleton.vue.cjs.map +0 -1
- package/dist/cjs/components/EvSkeleton/EvSkeleton.vue2.cjs +0 -6
- package/dist/cjs/components/EvSkeleton/EvSkeleton.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvSlideGroup/EvSlideGroup.cjs +0 -38
- package/dist/cjs/components/EvSlideGroup/EvSlideGroup.cjs.map +0 -1
- package/dist/cjs/components/EvSlideGroup/EvSlideGroup.vue.cjs +0 -355
- package/dist/cjs/components/EvSlideGroup/EvSlideGroup.vue.cjs.map +0 -1
- package/dist/cjs/components/EvSlideGroup/EvSlideGroup.vue2.cjs +0 -6
- package/dist/cjs/components/EvSlideGroup/EvSlideGroup.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvSlideGroup/EvSlideGroupItem.vue.cjs +0 -33
- package/dist/cjs/components/EvSlideGroup/EvSlideGroupItem.vue.cjs.map +0 -1
- package/dist/cjs/components/EvSlideGroup/EvSlideGroupItem.vue2.cjs +0 -6
- package/dist/cjs/components/EvSlideGroup/EvSlideGroupItem.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvSlideGroup/helpers.cjs +0 -51
- package/dist/cjs/components/EvSlideGroup/helpers.cjs.map +0 -1
- package/dist/cjs/components/EvSurface/EvSurface.cjs +0 -36
- package/dist/cjs/components/EvSurface/EvSurface.cjs.map +0 -1
- package/dist/cjs/components/EvSurface/EvSurface.vue.cjs +0 -66
- package/dist/cjs/components/EvSurface/EvSurface.vue.cjs.map +0 -1
- package/dist/cjs/components/EvSurface/EvSurface.vue2.cjs +0 -6
- package/dist/cjs/components/EvSurface/EvSurface.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvSwatch/EvSwatch.cjs +0 -71
- package/dist/cjs/components/EvSwatch/EvSwatch.cjs.map +0 -1
- package/dist/cjs/components/EvSwatch/EvSwatch.vue.cjs +0 -40
- package/dist/cjs/components/EvSwatch/EvSwatch.vue.cjs.map +0 -1
- package/dist/cjs/components/EvSwatch/EvSwatch.vue2.cjs +0 -6
- package/dist/cjs/components/EvSwatch/EvSwatch.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvSwitch/EvSwitch.cjs +0 -13
- package/dist/cjs/components/EvSwitch/EvSwitch.cjs.map +0 -1
- package/dist/cjs/components/EvSwitch/EvSwitch.vue.cjs +0 -117
- package/dist/cjs/components/EvSwitch/EvSwitch.vue.cjs.map +0 -1
- package/dist/cjs/components/EvSwitch/EvSwitch.vue2.cjs +0 -6
- package/dist/cjs/components/EvSwitch/EvSwitch.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvTabs/EvTab/EvTab.cjs +0 -26
- package/dist/cjs/components/EvTabs/EvTab/EvTab.cjs.map +0 -1
- package/dist/cjs/components/EvTabs/EvTab/EvTab.vue.cjs +0 -112
- package/dist/cjs/components/EvTabs/EvTab/EvTab.vue.cjs.map +0 -1
- package/dist/cjs/components/EvTabs/EvTab/EvTab.vue2.cjs +0 -6
- package/dist/cjs/components/EvTabs/EvTab/EvTab.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvTabs/EvTabs.cjs +0 -27
- package/dist/cjs/components/EvTabs/EvTabs.cjs.map +0 -1
- package/dist/cjs/components/EvTabs/EvTabs.scss.cjs +0 -3
- package/dist/cjs/components/EvTabs/EvTabs.scss.cjs.map +0 -1
- package/dist/cjs/components/EvTabs/EvTabs.vue.cjs +0 -73
- package/dist/cjs/components/EvTabs/EvTabs.vue.cjs.map +0 -1
- package/dist/cjs/components/EvTabs/EvTabs.vue2.cjs +0 -6
- package/dist/cjs/components/EvTabs/EvTabs.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvTag/EvTag.cjs +0 -54
- package/dist/cjs/components/EvTag/EvTag.cjs.map +0 -1
- package/dist/cjs/components/EvTag/EvTag.vue.cjs +0 -244
- package/dist/cjs/components/EvTag/EvTag.vue.cjs.map +0 -1
- package/dist/cjs/components/EvTag/EvTag.vue2.cjs +0 -6
- package/dist/cjs/components/EvTag/EvTag.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvTagGroup/EvTagGroup.cjs +0 -32
- package/dist/cjs/components/EvTagGroup/EvTagGroup.cjs.map +0 -1
- package/dist/cjs/components/EvTagGroup/EvTagGroup.vue.cjs +0 -60
- package/dist/cjs/components/EvTagGroup/EvTagGroup.vue.cjs.map +0 -1
- package/dist/cjs/components/EvTagGroup/EvTagGroup.vue2.cjs +0 -6
- package/dist/cjs/components/EvTagGroup/EvTagGroup.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvText/EvText.cjs +0 -37
- package/dist/cjs/components/EvText/EvText.cjs.map +0 -1
- package/dist/cjs/components/EvText/EvText.vue.cjs +0 -71
- package/dist/cjs/components/EvText/EvText.vue.cjs.map +0 -1
- package/dist/cjs/components/EvText/EvText.vue3.cjs +0 -7
- package/dist/cjs/components/EvText/EvText.vue3.cjs.map +0 -1
- package/dist/cjs/components/EvTextarea/EvTextarea.cjs +0 -29
- package/dist/cjs/components/EvTextarea/EvTextarea.cjs.map +0 -1
- package/dist/cjs/components/EvTextarea/EvTextarea.vue.cjs +0 -224
- package/dist/cjs/components/EvTextarea/EvTextarea.vue.cjs.map +0 -1
- package/dist/cjs/components/EvTextarea/EvTextarea.vue2.cjs +0 -6
- package/dist/cjs/components/EvTextarea/EvTextarea.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvTextfield/EvTextfield.cjs +0 -40
- package/dist/cjs/components/EvTextfield/EvTextfield.cjs.map +0 -1
- package/dist/cjs/components/EvTextfield/EvTextfield.vue.cjs +0 -274
- package/dist/cjs/components/EvTextfield/EvTextfield.vue.cjs.map +0 -1
- package/dist/cjs/components/EvTextfield/EvTextfield.vue2.cjs +0 -6
- package/dist/cjs/components/EvTextfield/EvTextfield.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvThumbnail/EvThumbnail.cjs +0 -53
- package/dist/cjs/components/EvThumbnail/EvThumbnail.cjs.map +0 -1
- package/dist/cjs/components/EvThumbnail/EvThumbnail.vue.cjs +0 -82
- package/dist/cjs/components/EvThumbnail/EvThumbnail.vue.cjs.map +0 -1
- package/dist/cjs/components/EvThumbnail/EvThumbnail.vue2.cjs +0 -6
- package/dist/cjs/components/EvThumbnail/EvThumbnail.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvTimeField/EvTimeField.cjs +0 -20
- package/dist/cjs/components/EvTimeField/EvTimeField.cjs.map +0 -1
- package/dist/cjs/components/EvTimeField/EvTimeField.vue.cjs +0 -246
- package/dist/cjs/components/EvTimeField/EvTimeField.vue.cjs.map +0 -1
- package/dist/cjs/components/EvTimeField/EvTimeField.vue2.cjs +0 -6
- package/dist/cjs/components/EvTimeField/EvTimeField.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvTimePicker/EvTimePicker.cjs +0 -17
- package/dist/cjs/components/EvTimePicker/EvTimePicker.cjs.map +0 -1
- package/dist/cjs/components/EvTimePicker/EvTimePicker.vue.cjs +0 -154
- package/dist/cjs/components/EvTimePicker/EvTimePicker.vue.cjs.map +0 -1
- package/dist/cjs/components/EvTimePicker/EvTimePicker.vue2.cjs +0 -6
- package/dist/cjs/components/EvTimePicker/EvTimePicker.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.cjs +0 -14
- package/dist/cjs/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.cjs.map +0 -1
- package/dist/cjs/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.vue.cjs +0 -88
- package/dist/cjs/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.vue.cjs.map +0 -1
- package/dist/cjs/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.vue2.cjs +0 -6
- package/dist/cjs/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.cjs +0 -13
- package/dist/cjs/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.cjs.map +0 -1
- package/dist/cjs/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.vue.cjs +0 -82
- package/dist/cjs/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.vue.cjs.map +0 -1
- package/dist/cjs/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.vue2.cjs +0 -6
- package/dist/cjs/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvToolbar/EvToolbar.cjs +0 -26
- package/dist/cjs/components/EvToolbar/EvToolbar.cjs.map +0 -1
- package/dist/cjs/components/EvToolbar/EvToolbar.vue.cjs +0 -187
- package/dist/cjs/components/EvToolbar/EvToolbar.vue.cjs.map +0 -1
- package/dist/cjs/components/EvToolbar/EvToolbar.vue2.cjs +0 -6
- package/dist/cjs/components/EvToolbar/EvToolbar.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvTooltip/EvTooltip.cjs +0 -32
- package/dist/cjs/components/EvTooltip/EvTooltip.cjs.map +0 -1
- package/dist/cjs/components/EvTooltip/EvTooltip.vue.cjs +0 -86
- package/dist/cjs/components/EvTooltip/EvTooltip.vue.cjs.map +0 -1
- package/dist/cjs/components/EvTooltip/EvTooltip.vue2.cjs +0 -6
- package/dist/cjs/components/EvTooltip/EvTooltip.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvTransition/EvTransition.cjs +0 -44
- package/dist/cjs/components/EvTransition/EvTransition.cjs.map +0 -1
- package/dist/cjs/components/EvTransition/transitions/createTransition.cjs +0 -19
- package/dist/cjs/components/EvTransition/transitions/createTransition.cjs.map +0 -1
- package/dist/cjs/components/EvTransition/transitions/expandTransition.cjs +0 -86
- package/dist/cjs/components/EvTransition/transitions/expandTransition.cjs.map +0 -1
- package/dist/cjs/components/EvVirtualScroll/EvVirtualScroll.cjs +0 -30
- package/dist/cjs/components/EvVirtualScroll/EvVirtualScroll.cjs.map +0 -1
- package/dist/cjs/components/EvVirtualScroll/EvVirtualScroll.vue.cjs +0 -132
- package/dist/cjs/components/EvVirtualScroll/EvVirtualScroll.vue.cjs.map +0 -1
- package/dist/cjs/components/EvVirtualScroll/EvVirtualScroll.vue2.cjs +0 -6
- package/dist/cjs/components/EvVirtualScroll/EvVirtualScroll.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvVirtualScroll/EvVirtualScrollItem.vue.cjs +0 -50
- package/dist/cjs/components/EvVirtualScroll/EvVirtualScrollItem.vue.cjs.map +0 -1
- package/dist/cjs/components/EvVirtualScroll/EvVirtualScrollItem.vue2.cjs +0 -6
- package/dist/cjs/components/EvVirtualScroll/EvVirtualScrollItem.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvWindow/EvWindow.cjs +0 -55
- package/dist/cjs/components/EvWindow/EvWindow.cjs.map +0 -1
- package/dist/cjs/components/EvWindow/EvWindow.vue.cjs +0 -155
- package/dist/cjs/components/EvWindow/EvWindow.vue.cjs.map +0 -1
- package/dist/cjs/components/EvWindow/EvWindow.vue2.cjs +0 -6
- package/dist/cjs/components/EvWindow/EvWindow.vue2.cjs.map +0 -1
- package/dist/cjs/components/EvWindow/EvWindowItem/EvWindowItem.cjs +0 -25
- package/dist/cjs/components/EvWindow/EvWindowItem/EvWindowItem.cjs.map +0 -1
- package/dist/cjs/components/EvWindow/EvWindowItem/EvWindowItem.vue.cjs +0 -107
- package/dist/cjs/components/EvWindow/EvWindowItem/EvWindowItem.vue.cjs.map +0 -1
- package/dist/cjs/components/EvWindow/EvWindowItem/EvWindowItem.vue2.cjs +0 -6
- package/dist/cjs/components/EvWindow/EvWindowItem/EvWindowItem.vue2.cjs.map +0 -1
- package/dist/cjs/components/index.cjs +0 -355
- package/dist/cjs/components/index.cjs.map +0 -1
- package/dist/cjs/composables/aspectRatio.cjs +0 -44
- package/dist/cjs/composables/aspectRatio.cjs.map +0 -1
- package/dist/cjs/composables/component.cjs +0 -16
- package/dist/cjs/composables/component.cjs.map +0 -1
- package/dist/cjs/composables/date/DefaultDateAdapter.cjs +0 -519
- package/dist/cjs/composables/date/DefaultDateAdapter.cjs.map +0 -1
- package/dist/cjs/composables/date/date.cjs +0 -37
- package/dist/cjs/composables/date/date.cjs.map +0 -1
- package/dist/cjs/composables/defaults.cjs +0 -130
- package/dist/cjs/composables/defaults.cjs.map +0 -1
- package/dist/cjs/composables/delay.cjs +0 -39
- package/dist/cjs/composables/delay.cjs.map +0 -1
- package/dist/cjs/composables/dialog.cjs +0 -25
- package/dist/cjs/composables/dialog.cjs.map +0 -1
- package/dist/cjs/composables/dimensions.cjs +0 -30
- package/dist/cjs/composables/dimensions.cjs.map +0 -1
- package/dist/cjs/composables/display.cjs +0 -302
- package/dist/cjs/composables/display.cjs.map +0 -1
- package/dist/cjs/composables/drawer.cjs +0 -25
- package/dist/cjs/composables/drawer.cjs.map +0 -1
- package/dist/cjs/composables/filter.cjs +0 -129
- package/dist/cjs/composables/filter.cjs.map +0 -1
- package/dist/cjs/composables/focus.cjs +0 -24
- package/dist/cjs/composables/focus.cjs.map +0 -1
- package/dist/cjs/composables/form.cjs +0 -36
- package/dist/cjs/composables/form.cjs.map +0 -1
- package/dist/cjs/composables/group.cjs +0 -182
- package/dist/cjs/composables/group.cjs.map +0 -1
- package/dist/cjs/composables/groupItem.cjs +0 -81
- package/dist/cjs/composables/groupItem.cjs.map +0 -1
- package/dist/cjs/composables/hasSlotWithContent.cjs +0 -21
- package/dist/cjs/composables/hasSlotWithContent.cjs.map +0 -1
- package/dist/cjs/composables/hotkey/hotkey-parsing.cjs +0 -136
- package/dist/cjs/composables/hotkey/hotkey-parsing.cjs.map +0 -1
- package/dist/cjs/composables/hotkey/hotkey.cjs +0 -111
- package/dist/cjs/composables/hotkey/hotkey.cjs.map +0 -1
- package/dist/cjs/composables/hotkey/key-aliases.cjs +0 -30
- package/dist/cjs/composables/hotkey/key-aliases.cjs.map +0 -1
- package/dist/cjs/composables/icons.cjs +0 -34
- package/dist/cjs/composables/icons.cjs.map +0 -1
- package/dist/cjs/composables/intersectionObserver.cjs +0 -40
- package/dist/cjs/composables/intersectionObserver.cjs.map +0 -1
- package/dist/cjs/composables/lazy.cjs +0 -27
- package/dist/cjs/composables/lazy.cjs.map +0 -1
- package/dist/cjs/composables/lists/list-items.cjs +0 -96
- package/dist/cjs/composables/lists/list-items.cjs.map +0 -1
- package/dist/cjs/composables/lists/list.cjs +0 -29
- package/dist/cjs/composables/lists/list.cjs.map +0 -1
- package/dist/cjs/composables/lists/nested.cjs +0 -221
- package/dist/cjs/composables/lists/nested.cjs.map +0 -1
- package/dist/cjs/composables/lists/open-strategies.cjs +0 -35
- package/dist/cjs/composables/lists/open-strategies.cjs.map +0 -1
- package/dist/cjs/composables/lists/open-strategy/list.cjs +0 -21
- package/dist/cjs/composables/lists/open-strategy/list.cjs.map +0 -1
- package/dist/cjs/composables/lists/open-strategy/multiple.cjs +0 -21
- package/dist/cjs/composables/lists/open-strategy/multiple.cjs.map +0 -1
- package/dist/cjs/composables/lists/open-strategy/single.cjs +0 -22
- package/dist/cjs/composables/lists/open-strategy/single.cjs.map +0 -1
- package/dist/cjs/composables/lists/select-strategies.cjs +0 -54
- package/dist/cjs/composables/lists/select-strategies.cjs.map +0 -1
- package/dist/cjs/composables/lists/select-strategy/cascade-leaf.cjs +0 -70
- package/dist/cjs/composables/lists/select-strategy/cascade-leaf.cjs.map +0 -1
- package/dist/cjs/composables/lists/select-strategy/multi-any.cjs +0 -47
- package/dist/cjs/composables/lists/select-strategy/multi-any.cjs.map +0 -1
- package/dist/cjs/composables/lists/select-strategy/multi-leaf.cjs +0 -21
- package/dist/cjs/composables/lists/select-strategy/multi-leaf.cjs.map +0 -1
- package/dist/cjs/composables/lists/select-strategy/single-any.cjs +0 -34
- package/dist/cjs/composables/lists/select-strategy/single-any.cjs.map +0 -1
- package/dist/cjs/composables/lists/select-strategy/single-leaf.cjs +0 -21
- package/dist/cjs/composables/lists/select-strategy/single-leaf.cjs.map +0 -1
- package/dist/cjs/composables/locale.cjs +0 -41
- package/dist/cjs/composables/locale.cjs.map +0 -1
- package/dist/cjs/composables/modelProxy.cjs +0 -61
- package/dist/cjs/composables/modelProxy.cjs.map +0 -1
- package/dist/cjs/composables/notification.cjs +0 -29
- package/dist/cjs/composables/notification.cjs.map +0 -1
- package/dist/cjs/composables/position.cjs +0 -72
- package/dist/cjs/composables/position.cjs.map +0 -1
- package/dist/cjs/composables/resizeObserver.cjs +0 -48
- package/dist/cjs/composables/resizeObserver.cjs.map +0 -1
- package/dist/cjs/composables/rounded.cjs +0 -32
- package/dist/cjs/composables/rounded.cjs.map +0 -1
- package/dist/cjs/composables/router.cjs +0 -97
- package/dist/cjs/composables/router.cjs.map +0 -1
- package/dist/cjs/composables/scopeId.cjs +0 -13
- package/dist/cjs/composables/scopeId.cjs.map +0 -1
- package/dist/cjs/composables/selectLink.cjs +0 -24
- package/dist/cjs/composables/selectLink.cjs.map +0 -1
- package/dist/cjs/composables/size.cjs +0 -44
- package/dist/cjs/composables/size.cjs.map +0 -1
- package/dist/cjs/composables/ssrBoot.cjs +0 -20
- package/dist/cjs/composables/ssrBoot.cjs.map +0 -1
- package/dist/cjs/composables/stack.cjs +0 -67
- package/dist/cjs/composables/stack.cjs.map +0 -1
- package/dist/cjs/composables/tag.cjs +0 -15
- package/dist/cjs/composables/tag.cjs.map +0 -1
- package/dist/cjs/composables/teleport.cjs +0 -38
- package/dist/cjs/composables/teleport.cjs.map +0 -1
- package/dist/cjs/composables/theme.cjs +0 -58
- package/dist/cjs/composables/theme.cjs.map +0 -1
- package/dist/cjs/composables/time.cjs +0 -71
- package/dist/cjs/composables/time.cjs.map +0 -1
- package/dist/cjs/composables/toggleScope.cjs +0 -33
- package/dist/cjs/composables/toggleScope.cjs.map +0 -1
- package/dist/cjs/composables/validation.cjs +0 -33
- package/dist/cjs/composables/validation.cjs.map +0 -1
- package/dist/cjs/composables/virtual.cjs +0 -257
- package/dist/cjs/composables/virtual.cjs.map +0 -1
- package/dist/cjs/directives/click-outside.cjs +0 -97
- package/dist/cjs/directives/click-outside.cjs.map +0 -1
- package/dist/cjs/directives/index.cjs +0 -12
- package/dist/cjs/directives/index.cjs.map +0 -1
- package/dist/cjs/directives/intersect.cjs +0 -52
- package/dist/cjs/directives/intersect.cjs.map +0 -1
- package/dist/cjs/directives/slots.cjs +0 -18
- package/dist/cjs/directives/slots.cjs.map +0 -1
- package/dist/cjs/directives/touch.cjs +0 -101
- package/dist/cjs/directives/touch.cjs.map +0 -1
- package/dist/cjs/evance-ui.css +0 -20606
- package/dist/cjs/fonts/Inter/Inter-Bold.woff2 +0 -0
- package/dist/cjs/fonts/Inter/Inter-Medium.woff2 +0 -0
- package/dist/cjs/fonts/Inter/Inter-Regular.woff2 +0 -0
- package/dist/cjs/fonts/Inter/Inter-SemiBold.woff2 +0 -0
- package/dist/cjs/fonts/JetBrainsMono/JetBrainsMono-Bold.woff2 +0 -0
- package/dist/cjs/fonts/JetBrainsMono/JetBrainsMono-Medium.woff2 +0 -0
- package/dist/cjs/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 +0 -0
- package/dist/cjs/fonts/JetBrainsMono/JetBrainsMono-SemiBold.woff2 +0 -0
- package/dist/cjs/framework.cjs +0 -71
- package/dist/cjs/framework.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/AmazonIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/AmazonIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/AppleIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/AppleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/BehanceIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/BehanceIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/BitbucketIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/BitbucketIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/DiscordIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/DiscordIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/DribbbleIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/DribbbleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/FacebookIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/FacebookIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/FlickrIcon.svg.cjs +0 -25
- package/dist/cjs/icons/brand/glyph/FlickrIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/GitHubIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/GitHubIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/GoogleIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/GoogleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/HubSpotIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/HubSpotIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/InstagramIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/InstagramIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/LinkedInIcon.svg.cjs +0 -25
- package/dist/cjs/icons/brand/glyph/LinkedInIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/MessengerIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/MessengerIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/PayPalIcon.svg.cjs +0 -25
- package/dist/cjs/icons/brand/glyph/PayPalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/PinterestIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/PinterestIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/RedditIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/RedditIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/SlackIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/SlackIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/TikTokIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/TikTokIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/TwitchIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/TwitchIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/TwitterIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/TwitterIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/VimeoIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/VimeoIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/WeChatIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/WeChatIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/WhatsAppIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/WhatsAppIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/XIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/XIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand/glyph/YouTubeIcon.svg.cjs +0 -21
- package/dist/cjs/icons/brand/glyph/YouTubeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/brand.cjs +0 -56
- package/dist/cjs/icons/brand.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/AlignItemsBottomIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/AlignItemsBottomIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/AlignItemsMiddleIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/AlignItemsMiddleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/AlignItemsTopIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/AlignItemsTopIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/BoldIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/BoldIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/CellMergeIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/CellMergeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/CellSplitIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/CellSplitIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ClearFormattingIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ClearFormattingIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/CodeFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/CodeFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/CodeIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/CodeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColorBucketIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColorBucketIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColorDropletFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColorDropletFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColorDropletHalfIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColorDropletHalfIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColorDropletIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColorDropletIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColorDropletOffIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColorDropletOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColorGradientIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/ColorGradientIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColorPaletteIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColorPaletteIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColorPipetteIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColorPipetteIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColorSolidIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColorSolidIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColumnAddAfterIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColumnAddAfterIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColumnAddBeforeIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColumnAddBeforeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColumnMoveLeftIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColumnMoveLeftIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColumnMoveRightIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColumnMoveRightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ColumnsIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ColumnsIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ComponentFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ComponentFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ComponentIcon.svg.cjs +0 -24
- package/dist/cjs/icons/editor/glyph/ComponentIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/CurlyBracketsIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/CurlyBracketsIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/DesignIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/DesignIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/DesktopIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/DesktopIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/DevicesIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/DevicesIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/DimensionAngleIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/DimensionAngleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/DimensionHeightIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/DimensionHeightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/DimensionWidthIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/DimensionWidthIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/DistributeHorizontalIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/DistributeHorizontalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/DistributeVerticalIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/DistributeVerticalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FlowHorizontalIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/FlowHorizontalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FlowVerticalIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/FlowVerticalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontDisplayIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontDisplayIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontDisplayLowerIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontDisplayLowerIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontDisplayUpperIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontDisplayUpperIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontMonoIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontMonoIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontMonoLowerIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontMonoLowerIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontMonoUpperIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontMonoUpperIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontSansIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontSansIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontSansLowerIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontSansLowerIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontSansUpperIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontSansUpperIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontScriptIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontScriptIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontScriptLowerIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontScriptLowerIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontScriptUpperIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontScriptUpperIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontSerifIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontSerifIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontSerifLowerIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontSerifLowerIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontSerifUpperIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontSerifUpperIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontSizeIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontSizeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/FontSizeScalingIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/FontSizeScalingIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/GapHorizontalIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/GapHorizontalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/GapVerticalIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/GapVerticalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/HeadingFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/HeadingFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ImageBrightnessIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/ImageBrightnessIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ImageContrastIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/ImageContrastIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ImageCropIcon.svg.cjs +0 -23
- package/dist/cjs/icons/editor/glyph/ImageCropIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ImageFlipHIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/ImageFlipHIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ImageFlipVIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/ImageFlipVIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ImageIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ImageIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ImageRotateIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/ImageRotateIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ImageScaleIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/ImageScaleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ItalicsIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ItalicsIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ItalicsOffIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ItalicsOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/JustifyContentCenterIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/JustifyContentCenterIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/JustifyContentLeftIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/JustifyContentLeftIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/JustifyContentRightIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/JustifyContentRightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/KeyframeAddIcon.svg.cjs +0 -27
- package/dist/cjs/icons/editor/glyph/KeyframeAddIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/LaptopIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/LaptopIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/LetterSpacingIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/LetterSpacingIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/LineHeightIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/LineHeightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/LineThicknessIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/LineThicknessIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/LinkExternalIcon.svg.cjs +0 -23
- package/dist/cjs/icons/editor/glyph/LinkExternalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/LinkIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/LinkIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ListBulletIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/ListBulletIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ListNumberedIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/ListNumberedIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/LowercaseIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/LowercaseIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/MagicWandIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/MagicWandIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/MobileIcon.svg.cjs +0 -27
- package/dist/cjs/icons/editor/glyph/MobileIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/MobileLandscapeIcon.svg.cjs +0 -27
- package/dist/cjs/icons/editor/glyph/MobileLandscapeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/OverlineIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/OverlineIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/PaddingBottomIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/PaddingBottomIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/PaddingHorizontalIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/PaddingHorizontalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/PaddingIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/PaddingIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/PaddingLeftIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/PaddingLeftIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/PaddingRightIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/PaddingRightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/PaddingTopIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/PaddingTopIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/PaddingVerticalIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/PaddingVerticalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ParagraphFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/ParagraphFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ParagraphSpacingIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/ParagraphSpacingIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/PauseIcon.svg.cjs +0 -23
- package/dist/cjs/icons/editor/glyph/PauseIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/PlayIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/PlayIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/PositionXIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/PositionXIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/PositionYIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/PositionYIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/QuoteIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/QuoteIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/RadiusBottomLeftIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/RadiusBottomLeftIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/RadiusBottomRightIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/RadiusBottomRightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/RadiusIcon.svg.cjs +0 -27
- package/dist/cjs/icons/editor/glyph/RadiusIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/RadiusTopLeftIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/RadiusTopLeftIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/RadiusTopRightIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/RadiusTopRightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/ReplayIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/ReplayIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/RowAddAfterIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/RowAddAfterIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/RowAddBeforeIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/RowAddBeforeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/RowMoveDownIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/RowMoveDownIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/RowMoveUpIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/RowMoveUpIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/RowsIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/RowsIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/SkipNextIcon.svg.cjs +0 -23
- package/dist/cjs/icons/editor/glyph/SkipNextIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/SkipPreviousIcon.svg.cjs +0 -23
- package/dist/cjs/icons/editor/glyph/SkipPreviousIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/StopIcon.svg.cjs +0 -27
- package/dist/cjs/icons/editor/glyph/StopIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/StrikethroughIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/StrikethroughIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TableIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/TableIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TabletIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/TabletIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TabletLandscapeIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/TabletLandscapeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TemplateIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/TemplateIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TextCenterIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/TextCenterIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TextIndentIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/TextIndentIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TextJustifyIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/TextJustifyIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TextLeftIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/TextLeftIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TextOutdentIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/TextOutdentIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TextRightIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/TextRightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TextTruncateIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/TextTruncateIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TidyHorizontalIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/TidyHorizontalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TidyIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/TidyIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TidyVerticalIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/TidyVerticalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TitlecaseIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/TitlecaseIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/TypographyIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/TypographyIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/UnderlineIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/UnderlineIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/UnlinkIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/UnlinkIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/UppercaseIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/UppercaseIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/VectorPathIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/VectorPathIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/VerticalAlignBottomIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/VerticalAlignBottomIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/VerticalAlignMiddleIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/VerticalAlignMiddleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/VerticalAlignTopIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/VerticalAlignTopIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/VideoIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/VideoIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/WidescreenIcon.svg.cjs +0 -25
- package/dist/cjs/icons/editor/glyph/WidescreenIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor/glyph/WrapIcon.svg.cjs +0 -21
- package/dist/cjs/icons/editor/glyph/WrapIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/editor.cjs +0 -280
- package/dist/cjs/icons/editor.cjs.map +0 -1
- package/dist/cjs/icons/glyph/AddressFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/AddressFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/AddressIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/AddressIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/AjaxIcon.svg.cjs +0 -23
- package/dist/cjs/icons/glyph/AjaxIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/AlarmIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/AlarmIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ApiIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ApiIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/AppsAddIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/AppsAddIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/AppsFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/AppsFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/AppsIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/AppsIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ArrowBackIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ArrowBackIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ArrowContinueIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ArrowContinueIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ArrowDownIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ArrowDownIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ArrowLeftIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ArrowLeftIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ArrowMergeIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ArrowMergeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ArrowReturnIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ArrowReturnIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ArrowRightIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ArrowRightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ArrowShuffleIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ArrowShuffleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ArrowSplitIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ArrowSplitIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ArrowUpIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ArrowUpIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/AsideClosedIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/AsideClosedIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/AsideOpenIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/AsideOpenIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/AtIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/AtIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/AttachmentIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/AttachmentIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/AudioIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/AudioIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/BankIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/BankIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/BarcodeIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/BarcodeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/BellFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/BellFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/BellIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/BellIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/BelowRightIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/BelowRightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/BookmarkFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/BookmarkFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/BookmarkIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/BookmarkIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/BookmarkPlusIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/BookmarkPlusIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/BoxFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/BoxFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/BoxIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/BoxIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/BugIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/BugIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/BuyXGetYIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/BuyXGetYIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CalculateIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CalculateIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CalendarIcon.svg.cjs +0 -23
- package/dist/cjs/icons/glyph/CalendarIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CancelCircleIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CancelCircleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CancelIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/CancelIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CartFillIcon.svg.cjs +0 -29
- package/dist/cjs/icons/glyph/CartFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CartIcon.svg.cjs +0 -29
- package/dist/cjs/icons/glyph/CartIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CartOffIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CartOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CategoriesFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/CategoriesFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CategoriesIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CategoriesIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CategoriesOffIcon.svg.cjs +0 -29
- package/dist/cjs/icons/glyph/CategoriesOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ChartBandsIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ChartBandsIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ChartBarIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ChartBarIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ChartLineIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ChartLineIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ChartPieFillIcon.svg.cjs +0 -23
- package/dist/cjs/icons/glyph/ChartPieFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ChartPieIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/ChartPieIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CheckCircleIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CheckCircleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CheckIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/CheckIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ChevronDownIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ChevronDownIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ChevronLeftIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ChevronLeftIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ChevronRightIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ChevronRightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ChevronUpIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ChevronUpIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CloudFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CloudFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CloudIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CloudIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CollapseIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CollapseIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CollapseXIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CollapseXIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CollapseYIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CollapseYIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CommentFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/CommentFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CommentIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/CommentIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CompanyIcon.svg.cjs +0 -31
- package/dist/cjs/icons/glyph/CompanyIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ComponentsIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ComponentsIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ConfigureIcon.svg.cjs +0 -31
- package/dist/cjs/icons/glyph/ConfigureIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ConnectionIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ConnectionIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ConnectionOffIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ConnectionOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ContactsFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ContactsFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ContactsIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ContactsIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CopyIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/CopyIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CouponFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CouponFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CouponIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CouponIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CrownIcon.svg.cjs +0 -23
- package/dist/cjs/icons/glyph/CrownIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CurrencyDollarIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/CurrencyDollarIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CurrencyEuroIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CurrencyEuroIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CurrencyPoundIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CurrencyPoundIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CurrencyYenIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CurrencyYenIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/CycleIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/CycleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/DangerIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/DangerIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/DeleteFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/DeleteFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/DeleteIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/DeleteIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/DiscountFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/DiscountFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/DiscountIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/DiscountIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/DotIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/DotIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/DownloadIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/DownloadIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/DownloadableIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/DownloadableIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/DragIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/DragIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/DraggableIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/DraggableIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/DropMenuIcon.svg.cjs +0 -31
- package/dist/cjs/icons/glyph/DropMenuIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/EditIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/EditIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/EllipsisIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/EllipsisIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/EmailFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/EmailFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/EmailIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/EmailIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/EvanceCircleIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/EvanceCircleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/EvanceIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/EvanceIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ExitIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ExitIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ExpandIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ExpandIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ExpandXIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ExpandXIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ExpandYIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ExpandYIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ExportIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ExportIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceDissatisfiedFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FaceDissatisfiedFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceDissatisfiedIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/FaceDissatisfiedIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceHappyFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FaceHappyFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceHappyIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/FaceHappyIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceNeutralFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FaceNeutralFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceNeutralIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/FaceNeutralIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceSadFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FaceSadFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceSadIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/FaceSadIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceSatisfiedFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FaceSatisfiedFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceSatisfiedIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/FaceSatisfiedIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceVeryHappyFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FaceVeryHappyFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceVeryHappyIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/FaceVeryHappyIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceWonderingFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FaceWonderingFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FaceWonderingIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FaceWonderingIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FieldInputIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FieldInputIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FileIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FileIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FilterIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FilterIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FlagFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/FlagFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FlagIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FlagIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FolderAddIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FolderAddIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FolderFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/FolderFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FolderIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FolderIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FolderOpenIcon.svg.cjs +0 -23
- package/dist/cjs/icons/glyph/FolderOpenIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FontIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FontIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ForbiddenIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ForbiddenIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FormIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FormIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/FrameIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/FrameIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/GiftIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/GiftIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/HashtagIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/HashtagIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/HeartFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/HeartFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/HeartIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/HeartIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/HelpIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/HelpIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/HistoryIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/HistoryIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/HomeFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/HomeFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/HomeIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/HomeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ImageFramesIcon.svg.cjs +0 -29
- package/dist/cjs/icons/glyph/ImageFramesIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ImageIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ImageIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ImportIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ImportIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ImportantFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ImportantFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ImportantIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ImportantIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/InboxFillIcon.svg.cjs +0 -23
- package/dist/cjs/icons/glyph/InboxFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/InboxIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/InboxIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/InfoIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/InfoIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/InventoryFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/InventoryFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/InventoryIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/InventoryIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/InvoiceFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/InvoiceFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/InvoiceIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/InvoiceIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KbdArrowDownIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/KbdArrowDownIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KbdArrowLeftIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/KbdArrowLeftIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KbdArrowRightIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/KbdArrowRightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KbdArrowUpIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/KbdArrowUpIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KbdBackspaceIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/KbdBackspaceIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KbdCommandIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/KbdCommandIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KbdControlIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/KbdControlIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KbdOptionIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/KbdOptionIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KbdReturnIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/KbdReturnIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KbdShiftIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/KbdShiftIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KbdSpaceIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/KbdSpaceIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KbdTabIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/KbdTabIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/KeyIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/KeyIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/LaunchIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/LaunchIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/LightningBoltIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/LightningBoltIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/LoadingIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/LoadingIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/LockFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/LockFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/LockIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/LockIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/LockOffFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/LockOffFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/LockOffIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/LockOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/LockOpenIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/LockOpenIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ManufacturerIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ManufacturerIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ManufacturerOffIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ManufacturerOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/MediaLibraryIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/MediaLibraryIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/MenuIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/MenuIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/MetafieldIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/MetafieldIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/MinusCircleFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/MinusCircleFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/MinusCircleIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/MinusCircleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/MinusIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/MinusIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/MoveDownIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/MoveDownIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/MoveLeftIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/MoveLeftIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/MoveRightIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/MoveRightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/MoveUpIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/MoveUpIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/NoteIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/NoteIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PackingIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/PackingIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PagesFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/PagesFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PagesIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/PagesIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PaymentsFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/PaymentsFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PaymentsIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/PaymentsIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PaymentsOffIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/PaymentsOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PaymentsRecurringIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/PaymentsRecurringIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PdfIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/PdfIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PercentIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/PercentIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PhoneIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/PhoneIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PlaneIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/PlaneIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PlusCircleFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/PlusCircleFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PlusCircleIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/PlusCircleIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PlusIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/PlusIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PrintIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/PrintIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ProductsFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ProductsFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ProductsIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/ProductsIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ProductsOffIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ProductsOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PublicIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/PublicIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/PulseIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/PulseIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/QrCodeIcon.svg.cjs +0 -33
- package/dist/cjs/icons/glyph/QrCodeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/QuestionIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/QuestionIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/QuickfindIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/QuickfindIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ReceiptFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ReceiptFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ReceiptIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/ReceiptIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/RedirectIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/RedirectIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/RedoIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/RedoIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ReloadIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ReloadIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/RepeatIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/RepeatIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ReplyIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ReplyIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ResultsGridFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ResultsGridFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ResultsGridIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ResultsGridIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ResultsStackedFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ResultsStackedFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ResultsStackedIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ResultsStackedIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ReviewFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ReviewFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ReviewHalfIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ReviewHalfIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ReviewIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ReviewIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/RocketIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/RocketIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SalesEnquiryFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/SalesEnquiryFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SalesEnquiryIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/SalesEnquiryIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SalesOrderFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/SalesOrderFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SalesOrderIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/SalesOrderIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SalesQuotationFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/SalesQuotationFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SalesQuotationIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/SalesQuotationIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SaveFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/SaveFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SaveIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/SaveIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SearchIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/SearchIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SearchOffIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/SearchOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SendFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/SendFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SendIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/SendIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SettingsFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/SettingsFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SettingsIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/SettingsIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ShareIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ShareIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ShieldFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ShieldFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ShieldIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ShieldIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ShieldTickFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ShieldTickFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ShieldTickIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ShieldTickIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ShippingFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ShippingFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ShippingIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ShippingIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ShippingOffIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ShippingOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SignupIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/SignupIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SpannerIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/SpannerIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/StampIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/StampIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/StorefrontIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/StorefrontIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SwapHorizontalIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/SwapHorizontalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/SwapVerticalIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/SwapVerticalIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TagFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/TagFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TagIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/TagIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TagOffIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/TagOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TargetIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/TargetIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TargetOffIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/TargetOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TeamIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/TeamIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TelesalesIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/TelesalesIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ThemeDarkFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ThemeDarkFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ThemeDarkIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ThemeDarkIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ThemeLightFillIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ThemeLightFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ThemeLightIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/ThemeLightIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ThemeOsIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/ThemeOsIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ThumbsDownFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ThumbsDownFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ThumbsDownIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ThumbsDownIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ThumbsUpFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ThumbsUpFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ThumbsUpIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ThumbsUpIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TicketFillIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/TicketFillIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TicketIcon.svg.cjs +0 -27
- package/dist/cjs/icons/glyph/TicketIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TimeIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/TimeIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TranslateIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/TranslateIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TrayInIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/TrayInIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TrayOutIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/TrayOutIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/TrophyIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/TrophyIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/UndoIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/UndoIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/UploadIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/UploadIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/UserIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/UserIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/UserOffIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/UserOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/VectorImageIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/VectorImageIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/VideoIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/VideoIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/VisibilityHiddenIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/VisibilityHiddenIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/VisibilityIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/VisibilityIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/VisibilityOffIcon.svg.cjs +0 -29
- package/dist/cjs/icons/glyph/VisibilityOffIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/WalletIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/WalletIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/WarningIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/WarningIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/WebhookIcon.svg.cjs +0 -21
- package/dist/cjs/icons/glyph/WebhookIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/WorkflowIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/WorkflowIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons/glyph/ZipArchiveIcon.svg.cjs +0 -25
- package/dist/cjs/icons/glyph/ZipArchiveIcon.svg.cjs.map +0 -1
- package/dist/cjs/icons.cjs +0 -574
- package/dist/cjs/icons.cjs.map +0 -1
- package/dist/cjs/index.cjs +0 -569
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/locale/en.cjs +0 -111
- package/dist/cjs/locale/en.cjs.map +0 -1
- package/dist/cjs/modules/Form/Form.cjs +0 -128
- package/dist/cjs/modules/Form/Form.cjs.map +0 -1
- package/dist/cjs/modules/Form/FormField.cjs +0 -279
- package/dist/cjs/modules/Form/FormField.cjs.map +0 -1
- package/dist/cjs/modules/Locale/LocaleCode.cjs +0 -27
- package/dist/cjs/modules/Locale/LocaleCode.cjs.map +0 -1
- package/dist/cjs/modules/Locale/LocaleManager.cjs +0 -45
- package/dist/cjs/modules/Locale/LocaleManager.cjs.map +0 -1
- package/dist/cjs/modules/Locale/Localized.cjs +0 -55
- package/dist/cjs/modules/Locale/Localized.cjs.map +0 -1
- package/dist/cjs/modules/NumberFormatter.cjs +0 -17
- package/dist/cjs/modules/NumberFormatter.cjs.map +0 -1
- package/dist/cjs/modules/Translation/LanguagePack.cjs +0 -40
- package/dist/cjs/modules/Translation/LanguagePack.cjs.map +0 -1
- package/dist/cjs/modules/Translation/Pluralization.cjs +0 -27
- package/dist/cjs/modules/Translation/Pluralization.cjs.map +0 -1
- package/dist/cjs/modules/Translation/Translatable.cjs +0 -71
- package/dist/cjs/modules/Translation/Translatable.cjs.map +0 -1
- package/dist/cjs/modules/Translation/TranslationCode.cjs +0 -43
- package/dist/cjs/modules/Translation/TranslationCode.cjs.map +0 -1
- package/dist/cjs/modules/Translation/Translator.cjs +0 -115
- package/dist/cjs/modules/Translation/Translator.cjs.map +0 -1
- package/dist/cjs/services/dialog.cjs +0 -14
- package/dist/cjs/services/dialog.cjs.map +0 -1
- package/dist/cjs/services/drawer.cjs +0 -14
- package/dist/cjs/services/drawer.cjs.map +0 -1
- package/dist/cjs/services/index.cjs +0 -10
- package/dist/cjs/services/index.cjs.map +0 -1
- package/dist/cjs/services/notification.cjs +0 -14
- package/dist/cjs/services/notification.cjs.map +0 -1
- package/dist/cjs/util/anchor.cjs +0 -98
- package/dist/cjs/util/anchor.cjs.map +0 -1
- package/dist/cjs/util/animate.cjs +0 -88
- package/dist/cjs/util/animate.cjs.map +0 -1
- package/dist/cjs/util/appearance.cjs +0 -146
- package/dist/cjs/util/appearance.cjs.map +0 -1
- package/dist/cjs/util/array.cjs +0 -12
- package/dist/cjs/util/array.cjs.map +0 -1
- package/dist/cjs/util/bindProps.cjs +0 -57
- package/dist/cjs/util/bindProps.cjs.map +0 -1
- package/dist/cjs/util/browser.cjs +0 -22
- package/dist/cjs/util/browser.cjs.map +0 -1
- package/dist/cjs/util/children.cjs +0 -55
- package/dist/cjs/util/children.cjs.map +0 -1
- package/dist/cjs/util/components.cjs +0 -13
- package/dist/cjs/util/components.cjs.map +0 -1
- package/dist/cjs/util/console.cjs +0 -12
- package/dist/cjs/util/console.cjs.map +0 -1
- package/dist/cjs/util/dimensions.cjs +0 -110
- package/dist/cjs/util/dimensions.cjs.map +0 -1
- package/dist/cjs/util/dom/getOuterHeight.cjs +0 -17
- package/dist/cjs/util/dom/getOuterHeight.cjs.map +0 -1
- package/dist/cjs/util/dom/getOuterWidth.cjs +0 -17
- package/dist/cjs/util/dom/getOuterWidth.cjs.map +0 -1
- package/dist/cjs/util/dom/getViewport.cjs +0 -9
- package/dist/cjs/util/dom/getViewport.cjs.map +0 -1
- package/dist/cjs/util/events.cjs +0 -106
- package/dist/cjs/util/events.cjs.map +0 -1
- package/dist/cjs/util/helpers.cjs +0 -220
- package/dist/cjs/util/helpers.cjs.map +0 -1
- package/dist/cjs/util/injectSelf.cjs +0 -13
- package/dist/cjs/util/injectSelf.cjs.map +0 -1
- package/dist/cjs/util/is-functions.cjs +0 -116
- package/dist/cjs/util/is-functions.cjs.map +0 -1
- package/dist/cjs/util/isFixedPosition.cjs +0 -14
- package/dist/cjs/util/isFixedPosition.cjs.map +0 -1
- package/dist/cjs/util/keyboard.cjs +0 -51
- package/dist/cjs/util/keyboard.cjs.map +0 -1
- package/dist/cjs/util/math.cjs +0 -84
- package/dist/cjs/util/math.cjs.map +0 -1
- package/dist/cjs/util/modifiers.cjs +0 -34
- package/dist/cjs/util/modifiers.cjs.map +0 -1
- package/dist/cjs/util/numbers.cjs +0 -81
- package/dist/cjs/util/numbers.cjs.map +0 -1
- package/dist/cjs/util/plugins.cjs +0 -17
- package/dist/cjs/util/plugins.cjs.map +0 -1
- package/dist/cjs/util/props.cjs +0 -25
- package/dist/cjs/util/props.cjs.map +0 -1
- package/dist/cjs/util/scroll.cjs +0 -50
- package/dist/cjs/util/scroll.cjs.map +0 -1
- package/dist/cjs/util/strings.cjs +0 -65
- package/dist/cjs/util/strings.cjs.map +0 -1
- package/dist/cjs/util/style.cjs +0 -12
- package/dist/cjs/util/style.cjs.map +0 -1
- package/dist/cjs/util/units.cjs +0 -38
- package/dist/cjs/util/units.cjs.map +0 -1
- package/dist/evance-ui.css +0 -1
- package/dist/evance-ui.js +0 -2
- package/dist/evance-ui.js.map +0 -1
- package/dist/evance-ui.mjs +0 -16567
- package/dist/evance-ui.mjs.map +0 -1
- package/dist/fonts/Inter/Inter-Bold.woff2 +0 -0
- package/dist/fonts/Inter/Inter-Medium.woff2 +0 -0
- package/dist/fonts/Inter/Inter-Regular.woff2 +0 -0
- package/dist/fonts/Inter/Inter-SemiBold.woff2 +0 -0
- package/dist/fonts/JetBrainsMono/JetBrainsMono-Bold.woff2 +0 -0
- package/dist/fonts/JetBrainsMono/JetBrainsMono-Medium.woff2 +0 -0
- package/dist/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 +0 -0
- package/dist/fonts/JetBrainsMono/JetBrainsMono-SemiBold.woff2 +0 -0
package/dist/evance-ui.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evance-ui.js","sources":["../src/util/anchor.ts","../src/util/is-functions.ts","../src/util/animate.ts","../src/util/props.ts","../src/util/modifiers.ts","../src/util/appearance.ts","../src/util/array.ts","../src/util/scroll.ts","../src/util/events.ts","../src/util/bindProps.ts","../src/util/browser.ts","../src/util/children.ts","../src/util/components.ts","../src/util/console.ts","../src/util/dimensions.ts","../src/util/dom/getOuterHeight.ts","../src/util/dom/getOuterWidth.ts","../src/util/dom/getViewport.ts","../src/util/helpers.ts","../src/util/injectSelf.ts","../src/util/isFixedPosition.ts","../src/util/keyboard.ts","../src/util/math.ts","../src/util/numbers.ts","../src/util/plugins.ts","../src/util/strings.ts","../src/util/style.ts","../src/util/units.ts","../src/composables/component.ts","../src/modules/Translation/TranslationCode.ts","../src/modules/Locale/LocaleCode.ts","../src/composables/date/DefaultDateAdapter.ts","../src/composables/date/date.ts","../src/composables/defaults.ts","../src/composables/dialog.ts","../src/composables/dimensions.ts","../src/composables/display.ts","../src/composables/drawer.ts","../src/icons/glyph/ArrowBackIcon.svg","../src/icons/glyph/ArrowContinueIcon.svg","../src/icons/glyph/ArrowDownIcon.svg","../src/icons/glyph/ArrowUpIcon.svg","../src/icons/glyph/CalendarIcon.svg","../src/icons/glyph/CancelIcon.svg","../src/icons/glyph/CheckCircleIcon.svg","../src/icons/glyph/CheckIcon.svg","../src/icons/glyph/ChevronDownIcon.svg","../src/icons/glyph/ChevronLeftIcon.svg","../src/icons/glyph/ChevronRightIcon.svg","../src/icons/glyph/ChevronUpIcon.svg","../src/icons/glyph/DangerIcon.svg","../src/icons/glyph/DotIcon.svg","../src/icons/glyph/FilterIcon.svg","../src/icons/glyph/HelpIcon.svg","../src/icons/glyph/ImageIcon.svg","../src/icons/glyph/InfoIcon.svg","../src/icons/glyph/KbdArrowDownIcon.svg","../src/icons/glyph/KbdArrowLeftIcon.svg","../src/icons/glyph/KbdArrowRightIcon.svg","../src/icons/glyph/KbdArrowUpIcon.svg","../src/icons/glyph/KbdBackspaceIcon.svg","../src/icons/glyph/KbdCommandIcon.svg","../src/icons/glyph/KbdControlIcon.svg","../src/icons/glyph/KbdOptionIcon.svg","../src/icons/glyph/KbdReturnIcon.svg","../src/icons/glyph/KbdShiftIcon.svg","../src/icons/glyph/KbdSpaceIcon.svg","../src/icons/glyph/KbdTabIcon.svg","../src/icons/glyph/MinusIcon.svg","../src/icons/glyph/NoteIcon.svg","../src/icons/glyph/PlusIcon.svg","../src/icons/glyph/QuickfindIcon.svg","../src/icons/glyph/SearchIcon.svg","../src/icons/glyph/TimeIcon.svg","../src/icons/glyph/WarningIcon.svg","../src/composables/icons.ts","../src/modules/Locale/Localized.ts","../src/modules/NumberFormatter.ts","../src/modules/Translation/Pluralization.ts","../src/modules/Translation/Translatable.ts","../src/modules/Translation/LanguagePack.ts","../src/modules/Translation/Translator.ts","../src/locale/en.ts","../src/modules/Locale/LocaleManager.ts","../src/composables/locale.ts","../src/composables/toggleScope.ts","../src/composables/modelProxy.ts","../src/composables/notification.ts","../src/composables/tag.ts","../src/composables/theme.ts","../src/composables/hotkey/key-aliases.ts","../src/composables/hotkey/hotkey-parsing.ts","../src/composables/hotkey/hotkey.ts","../src/components/EvApp/EvApp.ts","../src/components/EvApp/EvApp.vue","../src/composables/size.ts","../src/composables/rounded.ts","../src/components/EvAvatar/EvAvatar.ts","../src/components/EvIcon/EvIcon.ts","../src/components/EvIcon/EvIcon.vue","../src/composables/aspectRatio.ts","../src/components/EvResponsive/EvResponsive.ts","../src/components/EvTransition/EvTransition.ts","../src/components/EvImg/EvImg.ts","../src/components/EvResponsive/EvResponsive.vue","../src/components/EvImg/EvImg.vue","../src/components/EvAvatar/EvAvatar.vue","../src/composables/position.ts","../src/components/EvBadge/EvBadge.ts","../src/components/EvBadge/EvBadge.vue","../src/components/EvBanner/EvBanner.ts","../src/composables/router.ts","../src/composables/group.ts","../src/components/EvButtonGroup/EvButtonGroup.ts","../src/components/EvButtonSelect/EvButtonSelect.ts","../src/composables/groupItem.ts","../src/components/EvButton/EvButton.ts","../src/components/EvProgressCircular/EvProgressCircular.vue","../src/composables/selectLink.ts","../src/components/EvButton/EvButton.vue","../src/components/EvButtonGroup/EvButtonGroup.vue","../src/components/EvText/EvText.ts","../src/components/EvText/EvText.vue","../src/components/EvBanner/EvBanner.vue","../src/components/EvButtonSelect/EvButtonSelect.vue","../src/components/EvButtonSwitch/EvButtonSwitch.ts","../src/components/EvButtonSwitch/EvButtonSwitch.vue","../src/components/EvCard/EvCardActions/EvCardActions.ts","../src/components/EvCard/EvCardActions/EvCardActions.vue","../src/components/EvCard/EvCardContent/EvCardContent.ts","../src/components/EvHeading/EvHeading.ts","../src/components/EvHeading/EvHeading.vue","../src/components/EvEyebrow/EvEyebrow.ts","../src/components/EvEyebrow/EvEyebrow.vue","../src/components/EvCard/EvCardContent/EvCardContent.vue","../src/components/EvCard/EvCard.ts","../src/components/EvSurface/EvSurface.ts","../src/components/EvSurface/EvSurface.vue","../src/components/EvCard/EvCard.vue","../src/composables/focus.ts","../src/modules/Form/Form.ts","../src/composables/form.ts","../src/modules/Form/FormField.ts","../src/composables/validation.ts","../src/components/EvLabel/EvLabel.ts","../src/components/EvLabel/EvLabel.vue","../src/components/EvCheckbox/EvCheckbox.ts","../src/components/EvErrors/EvErrors.ts","../src/components/EvErrors/EvErrors.vue","../src/components/EvCheckbox/EvCheckbox.vue","../src/components/EvCode/EvCode.ts","../src/components/EvCode/EvCode.vue","../src/components/EvDataTable/EvDataTableRow/EvDataTableRow.ts","../src/components/EvDataTable/EvDataTableCell/EvDataTableCell.ts","../src/components/EvDataTable/EvDataTableCell/EvDataTableCell.vue","../src/components/EvDataTable/composables/select.ts","../src/components/EvDataTable/composables/headers.ts","../src/components/EvDataTable/EvDataTableRow/EvDataTableRow.vue","../src/components/EvDataTable/composables/sort.ts","../src/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.ts","../src/components/EvDefaultsProvider/EvDefaultsProvider.ts","../src/components/EvDefaultsProvider/EvDefaultsProvider.vue","../src/composables/hasSlotWithContent.ts","../src/components/EvDivider/EvDivider.vue","../src/composables/lists/list.ts","../src/composables/lists/list-items.ts","../src/composables/lists/select-strategy/cascade-leaf.ts","../src/composables/lists/select-strategy/multi-any.ts","../src/composables/lists/select-strategy/multi-leaf.ts","../src/composables/lists/select-strategy/single-any.ts","../src/composables/lists/select-strategy/single-leaf.ts","../src/composables/lists/select-strategies.ts","../src/composables/lists/open-strategy/single.ts","../src/composables/lists/open-strategy/multiple.ts","../src/composables/lists/open-strategy/list.ts","../src/composables/lists/open-strategies.ts","../src/composables/lists/nested.ts","../src/components/EvList/EvList.ts","../src/components/EvListItem/EvListItem.ts","../src/components/EvTransition/transitions/expandTransition.ts","../src/components/EvListItem/EvListItem.vue","../src/components/EvSection/EvSection.ts","../src/components/EvSection/EvSection.vue","../src/components/EvList/EvListChildren.vue","../src/components/EvList/EvList.vue","../src/composables/delay.ts","../src/components/EvMenu/shared.ts","../src/components/EvOverlay/activator.ts","../src/components/EvOverlay/position-strategy/connected-position.ts","../src/components/EvOverlay/position-strategy/static-position.ts","../src/components/EvOverlay/position.ts","../src/components/EvOverlay/scroll-strategy/block-scroll.ts","../src/components/EvOverlay/scroll-strategy/close-scroll.ts","../src/components/EvOverlay/scroll-strategy/reposition-scroll.ts","../src/components/EvOverlay/scroll.ts","../src/components/EvOverlay/EvOverlay.ts","../src/components/EvMenu/EvMenuTransition.vue","../src/components/EvMenu/EvMenu.ts","../src/composables/teleport.ts","../src/composables/stack.ts","../src/composables/scopeId.ts","../src/components/EvOverlay/EvOverlay.vue","../src/components/EvMenu/EvMenu.vue","../src/components/EvSlideGroup/EvSlideGroup.ts","../src/composables/resizeObserver.ts","../src/components/EvSlideGroup/helpers.ts","../src/components/EvSlideGroup/EvSlideGroup.vue","../src/components/EvSlideGroup/EvSlideGroupItem.vue","../src/components/EvTextfield/EvTextfield.ts","../src/components/EvProgress/EvProgress.vue","../src/components/EvTextfield/EvTextfield.vue","../src/components/EvTooltip/EvTooltip.ts","../src/components/EvTooltip/EvTooltip.vue","../src/components/EvTransition/transitions/createTransition.ts","../src/components/EvTransition/transitions/index.ts","../src/components/EvDataTable/EvDataTableSearch/EvDataTableSearch.vue","../src/composables/virtual.ts","../src/components/EvDataTable/composables/items.ts","../src/components/EvDataTable/EvDataTable.ts","../src/components/EvVirtualScroll/EvVirtualScroll.ts","../src/components/EvVirtualScroll/EvVirtualScrollItem.vue","../src/components/EvInfiniteScroll/EvInfiniteScroll.ts","../src/components/EvInfiniteScroll/EvInfiniteScrollSide.vue","../src/composables/intersectionObserver.ts","../src/components/EvInfiniteScroll/EvInfiniteScrollIntersect.vue","../src/components/EvInfiniteScroll/EvInfiniteScroll.vue","../src/components/EvDataTable/EvDataTable.vue","../src/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.ts","../src/components/EvDatePicker/EvDatePickerMonth/EvDatePickerMonth.vue","../src/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.ts","../src/components/EvDatePicker/EvDatePickerYears/EvDatePickerYears.vue","../src/components/EvDatePicker/EvDatePicker.ts","../src/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.ts","../src/components/EvDatePicker/EvDatePickerMonths/EvDatePickerMonths.vue","../src/components/EvGrid/EvContainer/EvContainer.ts","../src/components/EvGrid/EvContainer/EvContainer.vue","../src/components/EvGrid/EvLayout/EvLayout.ts","../src/components/EvGrid/EvLayout/EvLayout.vue","../src/components/EvGrid/EvBlock/EvBlock.ts","../src/components/EvGrid/EvBlock/EvBlock.vue","../src/components/EvGrid/EvSpacer/EvSpacer.ts","../src/components/EvDatePicker/EvDatePicker.vue","../src/components/EvDateField/EvDateField.ts","../src/components/EvDateField/EvDateField.vue","../src/components/EvDialog/EvDialogTransition.vue","../src/components/EvDialog/EvDialog.ts","../src/components/EvDialog/EvDialogBody.vue","../src/components/EvDialog/EvDialogFooter.vue","../src/components/EvToolbar/EvToolbar.ts","../src/components/EvTabs/EvTab/EvTab.ts","../src/components/EvTabs/EvTabs.ts","../src/components/EvTabs/EvTab/EvTab.vue","../src/components/EvTabs/EvTabs.vue","../src/components/EvToolbar/EvToolbar.vue","../src/components/EvDialog/EvDialogHeader.vue","../src/components/EvDialog/EvDialog.vue","../src/components/EvDrawer/EvDrawer.ts","../src/components/EvDrawer/EvDrawer.vue","../src/components/EvEmptyState/EvEmptyState.ts","../src/components/EvEmptyState/EvEmptyState.vue","../src/components/EvFieldHelp/EvFieldHelp.ts","../src/components/EvFieldHelp/EvFieldHelp.vue","../src/components/EvFilterButton/EvFilterButton.ts","../src/components/EvFilterButton/EvFilterButton.vue","../src/components/EvForm/EvForm.ts","../src/components/EvForm/EvForm.vue","../src/components/EvFormHelp/EvFormHelp.ts","../src/components/EvFormHelp/EvFormHelp.vue","../src/components/EvHotkey/EvHotkey.ts","../src/components/EvKbd/EvKbd.ts","../src/components/EvKbd/EvKbd.vue","../src/components/EvHotkey/EvHotkey.vue","../src/components/EvLink/EvLink.ts","../src/icons/editor/glyph/LinkExternalIcon.svg","../src/components/EvLink/EvLink.vue","../src/components/EvLozenge/EvLozenge.ts","../src/components/EvLozenge/EvLozenge.vue","../src/components/EvMessage/EvMessage.ts","../src/components/EvMessage/EvMessage.vue","../src/components/EvNotification/EvNotification.ts","../src/components/EvNotification/EvNotification.vue","../src/components/EvNotifications/EvNotificationsManager.ts","../src/components/EvNotifications/EvNotifications.vue","../src/components/EvNumber/EvNumber.ts","../src/components/EvNumber/EvNumberDigit.vue","../src/components/EvNumber/EvNumber.vue","../src/components/EvNumberField/EvNumberField.ts","../src/components/EvNumberField/EvNumberField.vue","../src/components/EvQuickfind/EvQuickfind.vue","../src/components/EvRadio/EvRadio.ts","../src/components/EvRadioGroup/EvRadioGroup.ts","../src/components/EvRadioGroup/EvRadioGroup.vue","../src/components/EvRadio/EvRadio.vue","../src/composables/filter.ts","../src/components/EvSelect/EvSelect.ts","../src/components/EvSelect/useScrolling.ts","../src/components/EvVirtualScroll/EvVirtualScroll.vue","../src/components/EvTag/EvTag.ts","../src/components/EvTagGroup/EvTagGroup.ts","../src/components/EvTagGroup/EvTagGroup.vue","../src/components/EvTag/EvTag.vue","../src/components/EvSelect/EvSelect.vue","../src/components/EvSwitch/EvSwitch.ts","../src/components/EvSwitch/EvSwitch.vue","../src/components/EvTextarea/EvTextarea.ts","../src/components/EvTextarea/EvTextarea.vue","../src/components/EvThumbnail/EvThumbnail.ts","../src/components/EvSkeleton/EvSkeleton.ts","../src/components/EvSkeleton/EvSkeleton.vue","../src/components/EvThumbnail/EvThumbnail.vue","../src/components/EvTimeField/EvTimeField.ts","../src/components/EvTimePicker/EvTimePicker.ts","../src/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.ts","../src/components/EvTimePicker/EvTimePickerHours/EvTimePickerHours.vue","../src/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.ts","../src/components/EvTimePicker/EvTimePickerMinutes/EvTimePickerMinutes.vue","../src/composables/time.ts","../src/components/EvTimePicker/EvTimePicker.vue","../src/components/EvTimeField/EvTimeField.vue","../src/components/EvWindow/EvWindow.ts","../src/directives/click-outside.ts","../src/directives/intersect.ts","../src/directives/slots.ts","../src/directives/touch.ts","../src/components/EvWindow/EvWindow.vue","../src/composables/lazy.ts","../src/components/EvWindow/EvWindowItem/EvWindowItem.ts","../src/composables/ssrBoot.ts","../src/components/EvWindow/EvWindowItem/EvWindowItem.vue","../src/components/EvDialog/EvDialogInstance.ts","../src/components/EvDialog/EvDialogRenderer.ts","../src/components/EvDialog/EvDialogServiceOpener.ts","../src/services/dialog.ts","../src/components/EvDrawer/EvDrawerInstance.ts","../src/components/EvDrawer/EvDrawerRenderer.ts","../src/components/EvDrawer/EvDrawerServiceOpener.ts","../src/services/drawer.ts","../src/services/notification.ts","../src/framework.ts","../src/index.ts"],"sourcesContent":["import { Axis } from \"@/util/dimensions\";\n\n/**\n * # Anchors\n *\n */\ntype VerticalSide = \"top\" | \"bottom\";\ntype EdgeAlignment = \"start\" | \"end\" | \"center\";\ntype HorizontalSide = \"left\" | \"right\";\ntype SelectorSeparator = \" \" | \"-\";\n\nexport type AnchorSelector =\n | VerticalSide\n | HorizontalSide\n | `${VerticalSide}${SelectorSeparator}${EdgeAlignment}`\n | `${HorizontalSide}${SelectorSeparator}${EdgeAlignment}`\n | \"auto\"\n | `auto${SelectorSeparator}${EdgeAlignment | \"auto\"}`\n | \"center\"\n | `center${SelectorSeparator}center`;\n\nexport type AnchorSide = VerticalSide | HorizontalSide | \"auto\" | \"center\";\nexport type AnchorAlignment = EdgeAlignment | \"auto\";\nexport type PhysicalAlignment = \"left\" | \"right\" | \"center\";\nexport type PhysicalSide = HorizontalSide | VerticalSide;\n\n/**\n * # Anchor\n *\n * - `alignment`: 'start', 'end', 'center', 'auto'\n * - `side`: 'top', 'bottom', 'left', 'right', 'center', 'auto'\n *\n */\nexport class Anchor {\n public constructor(\n public side: AnchorSide,\n public alignment: AnchorAlignment,\n ) {}\n\n /**\n * ## Get Axis\n * Returns either x or y axis.\n */\n public get axis(): Axis {\n return [\"left\", \"right\"].includes(this.side) ? \"x\" : \"y\";\n }\n\n /**\n * ## Physical Alignment\n */\n public get physicalAlignment(): PhysicalAlignment {\n if (this.alignment === \"auto\") {\n throw new Error(\n \"Evance UI: Cannot convert `auto` to a physical alignment\",\n );\n }\n return {\n center: \"center\",\n start: \"left\",\n end: \"right\",\n }[this.alignment] as PhysicalAlignment;\n }\n\n /**\n * ## Center Align\n */\n public centerAlign() {\n return new Anchor(this.side, \"center\");\n }\n\n /**\n * ## Flip Alignment\n */\n public flipAlignment() {\n const alignment = {\n auto: \"auto\",\n center: \"center\",\n end: \"start\",\n start: \"end\",\n }[this.alignment];\n return new Anchor(this.side, alignment as AnchorAlignment);\n }\n\n /**\n * ## Flip Corner\n */\n public flipCorner() {\n return this.flipAlignment().flipSide();\n }\n\n /**\n * ## Flip Side\n */\n public flipSide(): Anchor {\n const side = {\n auto: \"auto\",\n center: \"center\",\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n }[this.side];\n return new Anchor(side as AnchorSide, this.alignment);\n }\n\n /**\n * ## Parse Selector\n * @param selector\n * @param isRtl\n * @private\n */\n public static fromSelector(\n selector: AnchorSelector,\n isRtl: boolean = false,\n ): Anchor {\n let [side, alignment] = selector.split(/[\\s\\-]/) as [\n AnchorSide,\n AnchorAlignment | undefined,\n ];\n if (!alignment) {\n alignment = side === \"auto\" ? \"auto\" : \"center\";\n }\n const anchor = new Anchor(side, alignment);\n if (isRtl) {\n if (anchor.side === \"left\") {\n anchor.side = \"right\";\n } else if (anchor.side === \"right\") {\n anchor.side = \"left\";\n }\n }\n return anchor;\n }\n\n public toCssValue(): string {\n return `${this.side} ${this.physicalAlignment}`;\n }\n\n public toString(): string {\n return `${this.side} ${this.alignment}`;\n }\n}\n","/**\n * # Is (equal)\n * I had written a polyfill for this, but since we're only interested in modern browsers\n * let's reduce code and simply return the result from Object.is();\n * @param a\n * @param b\n */\nexport function is(a?: any, b?: any): boolean {\n return Object.is(a, b);\n}\n\n/**\n * # Is Array?\n * @param value\n */\nexport function isArray(value: unknown): boolean {\n return Array.isArray(value);\n}\n\n/**\n * # Is Boolean?\n * @param value\n */\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === \"boolean\";\n}\n\n/**\n * # Is CSS Variable\n * @param value\n */\nexport function isCssVariable(value: unknown): boolean {\n if (!isString(value)) {\n return false;\n }\n return /^--[\\w-]+$/.test(value as string);\n}\n\n/**\n * # Is Date?\n * @param value\n */\nexport function isDate(value: unknown): value is Date {\n return value instanceof Date;\n}\n\n/**\n * # Is Date Equal\n *\n * Evaluates whether one date equals another date.\n *\n * @param a\n * @param b\n */\nexport function isDateEqual(a: Date, b: Date): boolean {\n return a.getTime() === b.getTime();\n}\n\n/**\n * # Is Deep Equal?\n *\n * I could have used the `deep-equal` npm package, but decided to keep things as light-weight\n * as possible and this suits our needs for now:\n *\n * @link https://www.npmjs.com/package/deep-equal\n *\n * @param a\n * @param b\n */\nexport function isDeepEqual(a: any, b: any): boolean {\n if (a === b) {\n return true;\n }\n // Check types\n if (typeof a !== typeof b) {\n return false;\n }\n if (a == null || b == null) {\n return false;\n }\n\n // Check dates\n if (isDate(a) && isDate(b) && !isDateEqual(a, b)) {\n return false;\n }\n // Check array\n if (isArray(a) !== isArray(b)) {\n return false;\n }\n\n if (a !== Object(a) || b !== Object(b)) {\n return false;\n }\n\n const keysInA = Object.keys(a);\n const keysInB = Object.keys(b);\n if (keysInA.length !== keysInB.length) {\n return false;\n }\n return keysInA.every((key) => isDeepEqual(a[key], b[key]));\n}\n\nexport function isElement(el: unknown): el is Element {\n return !!el && el instanceof Element && el.nodeType === Node.ELEMENT_NODE;\n}\n\n/**\n * # Is Empty\n * @param value\n */\nexport function isEmpty(value: any): boolean {\n return (\n value === null ||\n value === undefined ||\n (typeof value === \"string\" && value.trim() === \"\")\n );\n}\n\n/**\n * # Is Equal NaN\n *\n * Check if a value is NaN - the only value in JavaScript that is not equal to itself.\n *\n * @param value\n */\nexport function isEqualNaN(value: unknown): boolean {\n return value !== value;\n}\n\n/**\n * # Is Function?\n * @param value\n */\nexport function isFunction(value: unknown): value is Function {\n return typeof value === \"function\";\n}\n\n/**\n * # Is Number\n * @param value\n */\nexport function isNumber(value: unknown): value is number {\n return typeof value === \"number\";\n}\n\n/**\n * # Is Object?\n * @param value\n */\nexport function isObject(value: unknown): value is object {\n return typeof value === \"object\";\n}\n\n/**\n * # Is Object Not Array\n * @param value\n */\nexport function isObjectNotArray(value: any): boolean {\n return value !== null && isObject(value) && !isArray(value);\n}\n\nconst isOnPattern = /^on[^a-z]/;\nexport const isOn = (key: string) => isOnPattern.test(key);\n\n/**\n *\n * @param value\n */\nexport function isPrimitive(\n value: unknown,\n): value is string | number | boolean {\n return Object(value) !== value;\n}\n\n/**\n * # Is ShadowRoot\n * @param value\n */\nexport function isShadowRoot(value: unknown): value is ShadowRoot {\n return typeof ShadowRoot !== \"undefined\" && value instanceof ShadowRoot;\n}\n\n/**\n * # Is String?\n * @param value\n */\nexport function isString(value: unknown): value is string {\n if (typeof value === \"string\") {\n return true;\n }\n if (typeof value !== \"object\") {\n return false;\n }\n try {\n String.prototype.valueOf.call(value);\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport function isTypeOf(value: unknown, accept: string[]): boolean {\n return accept.includes(typeof value);\n}\n","import { isEmpty } from \"./is-functions\";\n\n/**\n * # Animate\n *\n * We take advantage of the Element interface's animate() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/animate\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API/Keyframe_Formats\n *\n * @param el The element we wish to animate\n * @param keyframes The keyframes to use during animation (see the Keyframes format)\n * @param options An integer duration (in milliseconds), OR an Object containing timing properties\n */\nexport function animate(\n el: Element,\n keyframes: Keyframe[] | PropertyIndexedKeyframes | null,\n options?: number | KeyframeAnimationOptions,\n) {\n if (typeof Animation === \"undefined\" || isEmpty(el.animate)) {\n return animateFinished;\n }\n let animation: Animation;\n try {\n animation = el.animate(keyframes, options);\n } catch (e) {\n return animateFinished;\n }\n // Polyfill if `finished` is unavailable\n if (!(\"finished\" in Animation.prototype) || isEmpty(animation.finished)) {\n (animation as any).finished = new Promise((resolve) => {\n animation.onfinish = () => {\n resolve(animation);\n };\n });\n }\n // Polyfill if `cancel` is unavailable\n if (!(\"cancel\" in Animation.prototype) || isEmpty(animation.cancel)) {\n (animation as any).cancel = new Promise((resolve, reject) => {\n animation.oncancel = () => {\n reject(animation);\n };\n });\n }\n return animation;\n}\n\n/**\n * ## Animate Finished\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Animation/finished\n */\nexport const animateFinished = {\n finished: Promise.resolve(),\n} as const;\n\n/**\n * # Click Blocked Animation\n * @param el\n */\nexport function clickBlockedAnimation(el: HTMLElement | null | undefined) {\n if (isEmpty(el)) {\n return null;\n }\n return animate(\n el!,\n [\n { transformOrigin: \"center\" },\n { transform: \"scale(1.05) translateY(-3px)\" },\n { transformOrigin: \"center\" },\n ],\n {\n duration: 250,\n easing: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n );\n}\n\nlet clean = true;\nconst frames = [] as any[];\n\n/**\n * Schedule a task to run in an animation frame on its own\n * This is useful for heavy tasks that may cause jank if all ran together\n */\nexport function requestNewFrame(callback: () => void) {\n if (!clean || frames.length) {\n frames.push(callback);\n run();\n } else {\n clean = false;\n callback();\n run();\n }\n}\n\nlet raf = -1;\nfunction run() {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n const frame = frames.shift();\n if (frame) {\n frame();\n }\n if (frames.length) {\n run();\n } else {\n clean = true;\n }\n });\n}\n\nexport const easingStandard = \"cubic-bezier(0.4, 0, 0.2, 1)\";\nexport const easingDecelerate = \"cubic-bezier(0.0, 0, 0.2, 1)\"; // Entering\nexport const easingAccelerate = \"cubic-bezier(0.4, 0, 1, 1)\"; // Leaving\n","import type { IfAny } from \"@vue/shared\"; // eslint-disable-line vue/prefer-import-from-vue\nimport type { ComponentObjectPropsOptions, Prop, PropType } from \"vue\";\n\n/**\n * # Props Factory\n *\n * Creates a factory function for props definitions.\n * This is used to define props in a composable then override\n * default values in an implementing component.\n *\n * @example Simplified signature\n * (props: Props) => (defaults?: Record<keyof props, any>) => Props\n *\n * @example Usage\n * const makeProps = propsFactory({\n * foo: String,\n * })\n *\n * defineComponent({\n * props: {\n * ...makeProps({\n * foo: 'a',\n * }),\n * },\n * setup (props) {\n * // would be \"string | undefined\", now \"string\" because a default has been provided\n * props.foo\n * },\n * }\n *\n * Copied from Vuetify\n * @see https://github.com/vuetifyjs/vuetify/blob/master/packages/vuetify/src/util/propsFactory.ts\n */\nexport function propsFactory<PropsOptions extends ComponentObjectPropsOptions>(\n props: PropsOptions,\n source: string,\n) {\n return <Defaults extends PartialKeys<PropsOptions> = {}>(\n defaults?: Defaults,\n ): AppendDefault<PropsOptions, Defaults> => {\n return Object.keys(props).reduce<any>((obj, prop) => {\n const isObjectDefinition =\n typeof props[prop] === \"object\" &&\n props[prop] != null &&\n !Array.isArray(props[prop]);\n const definition = isObjectDefinition\n ? props[prop]\n : { type: props[prop] };\n\n if (defaults && prop in defaults) {\n obj[prop] = {\n ...definition,\n default: defaults[prop],\n };\n } else {\n obj[prop] = definition;\n }\n\n if (source && !obj[prop].source) {\n obj[prop].source = source;\n }\n\n return obj;\n }, {});\n };\n}\n\ntype AppendDefault<\n T extends ComponentObjectPropsOptions,\n D extends PartialKeys<T>,\n> = {\n [P in keyof T]-?: unknown extends D[P]\n ? T[P]\n : T[P] extends Record<string, unknown>\n ? Omit<T[P], \"type\" | \"default\"> & {\n type: PropType<MergeDefault<T[P], D[P]>>;\n default: MergeDefault<T[P], D[P]>;\n }\n : {\n type: PropType<MergeDefault<T[P], D[P]>>;\n default: MergeDefault<T[P], D[P]>;\n };\n};\n\ntype MergeDefault<T, D> = unknown extends D\n ? InferPropType<T>\n : NonNullable<InferPropType<T>> | D;\n\n/**\n * Like `Partial<T>` but doesn't care what the value is\n */\ntype PartialKeys<T> = { [P in keyof T]?: unknown };\n\n// Copied from Vue\ntype InferPropType<T> = [T] extends [null]\n ? any // null & true would fail to infer\n : [T] extends [{ type: null | true }]\n ? // As TS issue https://github.com/Microsoft/TypeScript/issues/14829\n // somehow `ObjectConstructor` when inferred from { (): T } becomes `any`\n // `BooleanConstructor` when inferred from PropConstructor(with PropMethod) becomes `Boolean`\n any\n : [T] extends [ObjectConstructor | { type: ObjectConstructor }]\n ? Record<string, any>\n : [T] extends [BooleanConstructor | { type: BooleanConstructor }]\n ? boolean\n : [T] extends [DateConstructor | { type: DateConstructor }]\n ? Date\n : [T] extends [(infer U)[] | { type: (infer U)[] }]\n ? U extends DateConstructor\n ? Date | InferPropType<U>\n : InferPropType<U>\n : [T] extends [Prop<infer V, infer D>]\n ? unknown extends V\n ? IfAny<V, V, D>\n : V\n : T;\n","import { isString, toKebabCase } from \"../util\";\n\n/**\n * ## Make Class Name\n * Accepts a string `value` and a `prefix` to be combined and separated by a dash (\"-\").\n * The value will be converted into \"kebab-case\".\n * @param value\n * @param prefix\n * @param exclude\n */\nexport function makeClassName(\n value?: string,\n prefix: string = \"\",\n exclude: (string | RegExp)[] = [],\n): string | undefined {\n if (\n !value ||\n exclude.some((exclusion) => {\n if (exclusion instanceof RegExp) {\n return exclusion.test(value);\n }\n return value === exclusion;\n })\n ) {\n return undefined;\n }\n const kebabValue = toKebabCase(value);\n return `${prefix}-${kebabValue}`;\n}\n\n/**\n * ## Make a Size Modifier Class Name\n * @param value\n * @param exclude\n */\nexport function sizeModifier(\n value?: string | number,\n exclude: (string | RegExp)[] = [],\n): string | undefined {\n if (!isString(value)) {\n return undefined;\n }\n return makeClassName(value, \"is-size\", exclude);\n}\n\n/**\n * ## Make an Appearance Modifier Class Name\n * @param value\n * @param exclude\n */\nexport function appearanceModifier(\n value: string,\n exclude: (string | RegExp)[] = [],\n): string | undefined {\n return makeClassName(value, \"is-appearance\", exclude);\n}\n\n/**\n * ## Make a Variant Modifier Class Name\n * @param value\n * @param exclude\n */\nexport function variantModifier(\n value: string,\n exclude: (string | RegExp)[] = [],\n): string | undefined {\n return makeClassName(value, \"is-variant\", exclude);\n}\n","import { propsFactory } from \"./props\";\r\nimport { computed, MaybeRef, PropType, Ref, unref } from \"vue\";\r\nimport {\r\n appearanceModifier,\r\n makeClassName,\r\n variantModifier,\r\n} from \"@/util/modifiers\";\r\nimport { GroupItemProvide } from \"@/composables/groupItem\";\r\n\r\n/**\r\n * # Appearance\r\n *\r\n * Default appearance keys for\r\n *\r\n */\r\nexport const Appearance = {\r\n default: \"default\",\r\n danger: \"danger\",\r\n information: \"information\",\r\n notice: \"notice\",\r\n primary: \"primary\",\r\n success: \"success\",\r\n warning: \"warning\",\r\n} as const;\r\n\r\nexport type AppearanceProp = (typeof Appearance)[keyof typeof Appearance];\r\n\r\nexport const Variant = {\r\n default: \"default\",\r\n bold: \"bold\",\r\n outlined: \"outlined\",\r\n subtle: \"subtle\",\r\n tonal: \"tonal\",\r\n} as const;\r\n\r\nexport type VariantProp = (typeof Variant)[keyof typeof Variant];\r\n\r\nexport interface AppearanceProps {\r\n appearance: AppearanceProp;\r\n variant?: VariantProp;\r\n}\r\n\r\nexport const makeAppearanceProps = propsFactory(\r\n {\r\n appearance: {\r\n type: String as PropType<AppearanceProp>,\r\n default: Appearance.default,\r\n },\r\n variant: {\r\n type: String as PropType<VariantProp>,\r\n default: Variant.default,\r\n },\r\n },\r\n \"Appearance\",\r\n);\r\n\r\n/**\r\n * # useAppearance\r\n *\r\n * @param props\r\n * @param group\r\n * @param isActive\r\n * @param defaultVariant\r\n */\r\nexport function useAppearance(\r\n props: MaybeRef<Partial<AppearanceProps>>,\r\n group: GroupItemProvide | null = null,\r\n isActive: Ref<boolean | undefined> | null = null,\r\n defaultVariant: string = Variant.default,\r\n) {\r\n const appearanceName = computed(() => {\r\n const { appearance } = unref(props);\r\n const value = isActive?.value\r\n ? group?.selectedAppearance.value ?? appearance\r\n : appearance;\r\n return value ?? Appearance.default;\r\n });\r\n\r\n // Appearance modifier classes\r\n const appearanceClass = computed(() => {\r\n return appearanceModifier(appearanceName.value);\r\n });\r\n\r\n const variantName = computed(() => {\r\n const { variant } = unref(props);\r\n let value = isActive?.value\r\n ? group?.selectedVariant.value ?? variant\r\n : variant;\r\n value = value ?? Variant.default;\r\n if (\r\n appearanceName.value !== Appearance.default &&\r\n value === Variant.default\r\n ) {\r\n value = defaultVariant;\r\n }\r\n return value;\r\n });\r\n\r\n const variantClass = computed(() => {\r\n return variantModifier(variantName.value);\r\n });\r\n\r\n return {\r\n appearance: appearanceName,\r\n appearanceClass,\r\n variant: variantName,\r\n variantClass,\r\n };\r\n}\r\n\r\n/**\r\n * # Input Appearance\r\n */\r\nexport const InputAppearance = {\r\n default: Appearance.default,\r\n button: \"button\",\r\n none: \"none\",\r\n subtle: \"subtle\",\r\n} as const;\r\n\r\nexport type InputAppearanceProp =\r\n (typeof InputAppearance)[keyof typeof InputAppearance];\r\n\r\nexport const makeInputAppearanceProps = propsFactory(\r\n {\r\n appearance: {\r\n type: String as PropType<InputAppearanceProp>,\r\n default: InputAppearance.default,\r\n },\r\n },\r\n \"InputAppearance\",\r\n);\r\n\r\n/**\r\n * # Input Sizes\r\n */\r\nexport const InputSize = {\r\n default: \"medium\",\r\n xSmall: \"x-small\",\r\n small: \"small\",\r\n medium: \"medium\",\r\n large: \"large\",\r\n xLarge: \"x-large\",\r\n} as const;\r\n\r\nexport type InputSizeProp = (typeof InputSize)[keyof typeof InputSize];\r\nexport const makeInputSizeProps = propsFactory(\r\n {\r\n size: {\r\n type: String as PropType<InputSizeProp>,\r\n default: InputSize.default,\r\n },\r\n },\r\n \"InputSize\",\r\n);\r\n\r\n/**\r\n * # Text Align\r\n */\r\nexport const TextAlign = {\r\n default: \"left\",\r\n left: \"left\",\r\n center: \"center\",\r\n right: \"right\",\r\n} as const;\r\nexport type TextAlignProp = (typeof TextAlign)[keyof typeof TextAlign];\r\nexport const makeTextAlignProps = propsFactory(\r\n {\r\n align: {\r\n type: String as PropType<TextAlignProp>,\r\n default: TextAlign.default,\r\n },\r\n },\r\n \"TextAlign\",\r\n);\r\n\r\n/**\r\n * Text Appearance\r\n */\r\nexport const TextAppearance = {\r\n ...Appearance,\r\n inverse: \"inverse\",\r\n subtle: \"subtle\",\r\n} as const;\r\n\r\nexport type TextAppearanceProp =\r\n (typeof TextAppearance)[keyof typeof TextAppearance];\r\n\r\nexport const makeTextAppearanceProps = propsFactory(\r\n {\r\n appearance: {\r\n type: String as PropType<TextAppearanceProp>,\r\n default: TextAppearance.default,\r\n },\r\n },\r\n \"TextAppearance\",\r\n);\r\n\r\nexport interface TextAppearanceProps {\r\n appearance: TextAppearanceProp;\r\n}\r\n\r\nexport function useTextAppearance(\r\n props: TextAppearanceProps,\r\n) {\r\n const appearanceClass = computed(() => {\r\n return makeClassName(props.appearance, \"color\", [\"default\"]);\r\n });\r\n return {\r\n appearanceClass,\r\n };\r\n}\r\n","/**\n * # randomArrayItem\n *\n * Returns a random element from any array, or `undefined` if the array is empty.\n *\n * You can change the value returned if the array is empty by supplying the `emptyValue`.\n *\n * @param array\n * @param emptyValue\n */\nexport function randomArrayItem(array: any[], emptyValue?: any) {\n if (array.length === 0) {\n return emptyValue;\n }\n const randomIndex = Math.floor(Math.random() * array.length);\n return array[randomIndex];\n}\n","import { isElement } from \"./is-functions\";\nimport { Axis } from \"./dimensions\";\n\n/**\n * # Get Scroll Parent\n *\n * Get the closest parent element which is scrollable.\n *\n * @param el\n * @param isIncludeHidden\n * @param axis\n */\nexport function getScrollParent(\n el?: Element,\n isIncludeHidden = false,\n axis: Axis | null = \"y\",\n): HTMLElement {\n while (el) {\n if (isIncludeHidden ? isScrollable(el, axis) : hasScrollbar(el, axis)) {\n return el as HTMLElement;\n }\n el = el.parentElement!;\n }\n return document.scrollingElement as HTMLElement;\n}\n\n/**\n * # Get Scroll Parents\n *\n * Get all parent elements with a scrollbar in either the x-axis, y-axis,\n * or either if `axis` is supplied as `null`.\n *\n * Defaults to y-axis, since that's the most common use-case.\n *\n * @param el\n * @param stopAt\n * @param axis\n */\nexport function getScrollParents(\n el: Element | undefined,\n stopAt?: Element | null,\n axis: Axis | null = \"y\",\n): HTMLElement[] {\n const elements: HTMLElement[] = [];\n if (isElement(el) && isElement(stopAt) && !stopAt!.contains(el)) {\n return elements;\n }\n while (el) {\n if (hasScrollbar(el, axis)) {\n elements.push(el as HTMLElement);\n }\n if (el === stopAt) {\n break;\n }\n el = el.parentElement!;\n }\n return elements;\n}\n\n/**\n * # Has Scrollbar?\n *\n * Determine whether an Element has a Scrollbar in either the x-axis, y-axis,\n * or either if `axis` is supplied as `null`.\n *\n * This does not necessarily mean it has a scroll amount.\n *\n * Defaults to y-axis, since that's the most common use-case.\n *\n * @param el\n * @param axis\n */\nexport function hasScrollbar(\n el?: Element | null,\n axis: Axis | null = \"y\",\n): boolean {\n if (!isElement(el)) {\n return false;\n }\n const style = window.getComputedStyle(el!);\n const hasScrollbarX =\n style.overflowX === \"scroll\" ||\n (style.overflowX === \"auto\" && el!.scrollWidth > el!.clientWidth);\n const hasScrollbarY =\n style.overflowY === \"scroll\" ||\n (style.overflowY === \"auto\" && el!.scrollHeight > el!.clientHeight);\n return (\n ((!axis || axis === \"x\") && hasScrollbarX) ||\n ((!axis || axis === \"y\") && hasScrollbarY)\n );\n}\n\n/**\n * # Is Scrollable?\n *\n * Determines whether an Element is scrollable in either the x-axis, y-axis,\n * or either if `axis` is supplied as `null`.\n *\n * Defaults to y-axis, since that's the most common use-case.\n *\n * @param el\n * @param axis\n */\nexport function isScrollable(\n el: Element | null,\n axis: Axis | null = \"y\",\n): boolean {\n if (!isElement(el)) {\n return false;\n }\n const style = window.getComputedStyle(el!);\n return (\n ((!axis || axis === \"x\") &&\n [\"scroll\", \"auto\"].includes(style.overflowX)) ||\n ((!axis || axis === \"y\") &&\n [\"scroll\", \"auto\"].includes(style.overflowY))\n );\n}\n","import { capitalize, onScopeDispose, PropType } from \"vue\";\nimport { getScrollParents } from \"./scroll\";\nimport { isFunction, isOn } from \"@/util/is-functions\";\n\n/**\n * # Click Event Listeners\n * Standard listeners for click events.\n */\nexport interface ClickEventListeners {\n onClick?: EventProp | undefined;\n onClickOnce?: EventProp | undefined;\n}\n\nexport type EventProp<T extends any[] = any[], F = (...args: T) => void> = F;\nexport const EventProp = <T extends any[] = any[]>() =>\n [Function, Array] as PropType<EventProp<T>>;\n\n/**\n * # Call Event\n * @param eventHandler\n * @param args\n */\nexport function callEvent<T extends any[]>(\n eventHandler: EventProp<T> | undefined,\n ...args: T\n) {\n if (Array.isArray(eventHandler)) {\n for (const handlerElement of eventHandler) {\n handlerElement(...args);\n }\n } else if (typeof eventHandler === \"function\") {\n eventHandler(...args);\n }\n}\n\n/**\n * # Event Name\n * @param propName\n */\nexport function eventName(propName: string) {\n return propName[2].toLowerCase() + propName.slice(3);\n}\n\n/**\n * # Focusable Elements\n * A list of elements we can focus on dynamically.\n */\nexport const focusableElements = [\n \"button\",\n \"[href]\",\n 'input:not([type=\"hidden\"])',\n \"select\",\n \"[tabindex]\",\n \"textarea\",\n];\n\n/**\n * # Focus Position\n */\nexport type FocusPosition = \"next\" | \"previous\" | \"first\" | \"last\";\n\n/**\n * # Focus Child\n * @param el\n * @param position\n */\nexport function focusChild(\n el?: Element,\n position?: FocusPosition,\n): HTMLElement | undefined {\n if (!el) {\n return undefined;\n }\n\n let focusedElement: HTMLElement | undefined;\n const focusableElements = getFocusableChildren(el);\n const index = focusableElements.indexOf(\n document.activeElement as HTMLElement,\n );\n\n if (!position) {\n if (\n el === document.activeElement ||\n !el.contains(document.activeElement)\n ) {\n focusedElement = focusableElements[0];\n }\n } else if (position === \"first\") {\n focusedElement = focusableElements[0];\n } else if (position === \"last\") {\n focusedElement = focusableElements.at(-1)!;\n } else {\n let lastElement;\n let lastIndex = index;\n const increment = position === \"next\" ? 1 : -1;\n do {\n lastIndex += increment;\n lastElement = focusableElements[lastIndex];\n } while (\n (!lastElement || lastElement.offsetParent == null) &&\n lastIndex < focusableElements.length &&\n lastIndex >= 0\n );\n if (lastElement) {\n focusedElement = lastElement;\n } else {\n return focusChild(el, position === \"next\" ? \"first\" : \"last\");\n }\n }\n if (focusedElement) {\n focusedElement.focus();\n return focusedElement;\n }\n return undefined;\n}\n\n/**\n * # Get Focusable Children\n *\n * Find and return any focusable elements within the supplied element,\n * unless they're disabled or have a negative `tabindex` of -1.\n *\n * @param el\n * @param filterByTabIndex\n */\nexport function getFocusableChildren(\n el: Element,\n filterByTabIndex = true,\n): HTMLElement[] {\n const selectors = focusableElements\n .map(\n (selector) =>\n `${selector}${filterByTabIndex ? ':not([tabindex=\"-1\"])' : \"\"}:not([disabled])`,\n )\n .join(\", \");\n return [...el.querySelectorAll(selectors)] as HTMLElement[];\n}\n\n/**\n * # Has Event Listener\n *\n * Determines whether the `props` supplied includes an event listener, or\n * any variations of the event listener. For example, 'click' events may have:\n * - 'onClick'\n * - 'onClickOnce'\n * - 'onClickOnceCapture'\n * - 'onClickCaptureOnce'\n *\n * @param props\n * @param name\n */\nexport function hasEventListener(\n props: Record<string, any>,\n name: string,\n): boolean {\n name = \"on\" + capitalize(name);\n return !!(\n props[name] ||\n props[`${name}Once`] ||\n props[`${name}Capture`] ||\n props[`${name}OnceCapture`] ||\n props[`${name}CaptureOnce`]\n );\n}\n\n/**\n * ## Add Scroll Event Listeners to Element (and its parents)\n * @param el\n * @param onScroll\n */\nexport function addScrollEventListener(\n el: HTMLElement | undefined,\n onScroll: (e: Event) => void,\n) {\n const scrollElements = [document, ...getScrollParents(el)];\n scrollElements.forEach((el) => {\n el.addEventListener(\"scroll\", onScroll, { passive: true });\n });\n onScopeDispose(() => {\n scrollElements.forEach((el) => {\n el.removeEventListener(\"scroll\", onScroll);\n });\n });\n}\n\ntype EventHandler = (event: Event) => any;\n\nexport function getPrefixedEventHandlers<T extends `:${string}`>(\n attrs: Record<string, any>,\n suffix: T,\n getData: EventHandler,\n): Record<`${string}${T}`, EventHandler> {\n return Object.keys(attrs)\n .filter(\n (key: string) =>\n isOn(key) && key.endsWith(suffix) && isFunction(attrs[key]),\n )\n .reduce(\n (acc: any, key) => {\n acc[key.slice(0, -suffix.length)] = (event: Event) =>\n attrs[key](event, getData(event));\n return acc;\n },\n {} as Record<`${string}${T}`, EventHandler>,\n );\n}\n","import { isOn } from \"./is-functions\";\nimport { eventName } from \"./events\";\n\n/**\n * @todo: Move into events at some point\n */\n\nconst handlers = new WeakMap<HTMLElement, Set<[string, () => void]>>();\n\n/**\n * # Bind Props\n * @param el\n * @param props\n */\nexport function bindProps(el: HTMLElement, props: Record<string, any>) {\n Object.keys(props).forEach((k) => {\n if (isOn(k)) {\n const name = eventName(k);\n const handler = handlers.get(el);\n if (props[k] == null) {\n handler?.forEach((v) => {\n const [n, fn] = v;\n if (n === name) {\n el.removeEventListener(name, fn);\n handler.delete(v);\n }\n });\n } else if (\n !handler ||\n ![...handler]?.some((v) => v[0] === name && v[1] === props[k])\n ) {\n el.addEventListener(name, props[k]);\n const _handler = handler || new Set();\n _handler.add([name, props[k]]);\n if (!handlers.has(el)) {\n handlers.set(el, _handler);\n }\n }\n } else {\n if (props[k] == null) {\n el.removeAttribute(k);\n } else {\n el.setAttribute(k, props[k]);\n }\n }\n });\n}\n\n/**\n * # Unbind Props\n * @param el\n * @param props\n */\nexport function unbindProps(el: HTMLElement, props: Record<string, any>) {\n Object.keys(props).forEach((k) => {\n if (isOn(k)) {\n const name = eventName(k);\n const handler = handlers.get(el);\n handler?.forEach((v) => {\n const [n, fn] = v;\n if (n === name) {\n el.removeEventListener(name, fn);\n handler.delete(v);\n }\n });\n } else {\n el.removeAttribute(k);\n }\n });\n}\n","/**\n * # Browser\n */\nexport class Browser {\n public static readonly hasWindow: boolean = typeof window !== \"undefined\";\n\n public static readonly supportsIntersection: boolean =\n this.hasWindow && \"IntersectionObserver\" in window;\n\n /**\n * ## Supports Touch\n * Added into a static getter method to avoid issues during development when switching between emulators.\n */\n public static get supportsTouch(): boolean {\n return (\n this.hasWindow &&\n (\"ontouchstart\" in window || window.navigator.maxTouchPoints > 0)\n );\n }\n\n public static readonly supportsFocusVisible: boolean =\n this.hasWindow && window.CSS?.supports?.(\"selector(:focus-visible)\");\n}\n","import { ComponentInternalInstance, InjectionKey, VNodeChild } from \"vue\";\n\n/**\n * # findChildren\n *\n * @param vnode\n */\nexport function findChildren(vnode?: VNodeChild): ComponentInternalInstance[] {\n if (!vnode || typeof vnode !== \"object\") {\n return [];\n }\n if (Array.isArray(vnode)) {\n return vnode\n .map((child) => findChildren(child))\n .filter((v) => v)\n .flat(1);\n } else if (Array.isArray(vnode.children)) {\n return vnode.children\n .map((child) => findChildren(child))\n .filter((v) => v)\n .flat(1);\n } else if (vnode.component) {\n return [vnode.component, ...findChildren(vnode.component?.subTree)]\n .filter((v) => v)\n .flat(1);\n }\n return [];\n}\n\n/**\n * # findChildrenWithProvide\n *\n * @param key\n * @param vnode\n */\nexport function findChildrenWithProvide(\n key: InjectionKey<any> | symbol,\n vnode?: VNodeChild,\n): ComponentInternalInstance[] {\n if (!vnode || typeof vnode !== \"object\") {\n return [];\n }\n if (Array.isArray(vnode)) {\n return vnode\n .map((child) => findChildrenWithProvide(key, child))\n .flat(1);\n } else if (Array.isArray(vnode.children)) {\n return vnode.children\n .map((child) => findChildrenWithProvide(key, child))\n .flat(1);\n } else if (vnode.component) {\n if (\n Object.getOwnPropertySymbols(vnode.component.provides).includes(\n key as symbol,\n )\n ) {\n return [vnode.component];\n } else if (vnode.component.subTree) {\n return findChildrenWithProvide(key, vnode.component.subTree).flat(\n 1,\n );\n }\n }\n return [];\n}\n\n/**\n * # focusableChildren\n *\n * Find children within the supplied `el` we focus to.\n *\n * @param el\n * @param filterByTabIndex\n */\nexport function focusableChildren(el: Element, filterByTabIndex = true) {\n const targets = [\n \"button\",\n \"[href]\",\n 'input:not([type=\"hidden\"])',\n \"select\",\n \"textarea\",\n \"[tabindex]\",\n ]\n .map(\n (s) =>\n `${s}${filterByTabIndex ? ':not([tabindex=\"-1\"])' : \"\"}:not([disabled])`,\n )\n .join(\", \");\n return [...el.querySelectorAll(targets)] as HTMLElement[];\n}\n","import { ComponentInternalInstance, getCurrentInstance } from \"vue\";\n\n/**\n * # Get Current Component\n *\n * Gets the current instance of component from vue.\n *\n * @param callee\n */\nexport function getCurrentComponent(callee: string): ComponentInternalInstance {\n const component = getCurrentInstance();\n if (!component) {\n throw new Error(`Evance UI: ${callee} requires a component instance`);\n }\n return component;\n}\n","/**\n * # Console Warn\n * @param message\n */\nexport function consoleWarn(message: string): void {\n console.warn(`Evance UI: ${message}`);\n}\n\n/**\n * # Console Error\n * @param message\n */\nexport function consoleError(message: string): void {\n console.error(`Evance UI: ${message}`);\n}\n","export const axes = [\"x\", \"y\"] as const;\nexport type Axis = (typeof axes)[number];\n\n/**\n * # Coordinates\n * Two-dimensional coordinates (x,y).\n */\nexport interface Coordinates {\n x: number;\n y: number;\n}\n\n/**\n * # Dimensions\n */\nexport interface Dimensions {\n width: number;\n height: number;\n}\n\n/**\n * # Position\n * Representative of an element's position attributes describing the bounding area of a box.\n */\nexport interface Position {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\n/**\n * # Margins\n * Essentially the same as Position, but is intended to describe areas outside the box\n * (same as CSS `margin`).\n */\nexport type Margins = Position;\n\nexport interface RectProps extends Coordinates, Dimensions {}\n\n/**\n * # Rect\n *\n * Describes a bounding rectangle a bit like DOMRect, but not readonly.\n */\nexport class Rect implements Coordinates, Dimensions, Position {\n constructor(\n public x: number,\n public y: number,\n public width: number,\n public height: number,\n ) {}\n\n get top() {\n return this.y;\n }\n\n get bottom() {\n return this.y + this.height;\n }\n\n get left() {\n return this.x;\n }\n\n get right() {\n return this.x + this.width;\n }\n\n /**\n * ## Add Offset\n * @param offset\n */\n public addOffset(offset: Coordinates): Rect {\n const rect = Rect.fromRect(this);\n rect.x += offset.x;\n rect.y += offset.y;\n return rect;\n }\n\n /**\n * ## From Element\n * @param el\n * @param beforeTransforms\n */\n public static fromElement(\n el: HTMLElement,\n beforeTransforms: boolean = false,\n ): Rect {\n if (!beforeTransforms) {\n return Rect.fromRect(el.getBoundingClientRect());\n }\n return adjustedBoundingRect(el);\n }\n\n /**\n * ## From Rect\n * Kind of replicates DOMRect.fromRect()\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMRect/fromRect_static\n * @param rect\n */\n public static fromRect(rect: DOMRect | Rect | RectProps): Rect {\n return new Rect(rect.x, rect.y, rect.width, rect.height);\n }\n\n /**\n * ## Get Overflow\n * Returns the overflow margins based on a second Rect.\n * @param b\n */\n public getOverflow(b: Rect): Margins {\n return {\n top: Math.max(0, b.top - this.top),\n right: Math.max(0, this.right - b.right),\n bottom: Math.max(0, this.bottom - b.bottom),\n left: Math.max(0, b.left - this.left),\n };\n }\n}\n\n/**\n * # Adjust Bounding Rect\n *\n * Calculate Bounding Rect before being transformed.\n *\n * This doesn't account for skew or rotate translations, but at least it produces correct edge positions\n * when scale is used and does not impose much of a performance penalty when there is no transform.\n *\n * @see https://stackoverflow.com/a/57876601/2074736\n */\nexport function adjustedBoundingRect(el: HTMLElement): Rect {\n const rect = el.getBoundingClientRect();\n const style = getComputedStyle(el);\n const tx = style.transform;\n\n if (tx) {\n let ta, sx, sy, dx, dy;\n if (tx.startsWith(\"matrix3d(\")) {\n ta = tx.slice(9, -1).split(/, /);\n sx = +ta[0];\n sy = +ta[5];\n dx = +ta[12];\n dy = +ta[13];\n } else if (tx.startsWith(\"matrix(\")) {\n ta = tx.slice(7, -1).split(/, /);\n sx = +ta[0];\n sy = +ta[3];\n dx = +ta[4];\n dy = +ta[5];\n } else {\n return Rect.fromRect(rect);\n }\n\n const to = style.transformOrigin;\n const x = rect.x - dx - (1 - sx) * parseFloat(to);\n const y =\n rect.y - dy - (1 - sy) * parseFloat(to.slice(to.indexOf(\" \") + 1));\n const w = sx ? rect.width / sx : el.offsetWidth;\n const h = sy ? rect.height / sy : el.offsetHeight;\n\n return new Rect(x, y, w, h);\n } else {\n return Rect.fromRect(rect);\n }\n}\n\n/**\n * # getTargetRect\n *\n * @param target\n */\nexport function getTargetRect(target: HTMLElement | [x: number, y: number]) {\n if (Array.isArray(target)) {\n return new Rect(target[0], target[1], 0, 0);\n } else {\n return target.getBoundingClientRect();\n }\n}\n","export default function getOuterHeight(\n element: HTMLElement,\n margin?: boolean,\n): number {\n if (element) {\n let height = element.offsetHeight;\n if (margin) {\n const style = getComputedStyle(element);\n height += parseFloat(style.marginTop);\n height += parseFloat(style.marginBottom);\n }\n return height;\n }\n return 0;\n}\n","export default function getOuterWidth(\n element: unknown,\n margin?: boolean,\n): number {\n if (element instanceof HTMLElement) {\n let width = element.offsetWidth;\n if (margin) {\n const style = getComputedStyle(element);\n width += parseFloat(style.marginLeft);\n width += parseFloat(style.marginRight);\n }\n return width;\n }\n return 0;\n}\n","export default function getViewport(): { width: number; height: number } {\n const win = window,\n d = document,\n e = d.documentElement,\n g = d.getElementsByTagName(\"body\")[0],\n w = win.innerWidth || e.clientWidth || g.clientWidth,\n h = win.innerHeight || e.clientHeight || g.clientHeight;\n\n return { width: w, height: h };\n}\n","import {\r\n ComponentInternalInstance,\r\n ComponentOptions,\r\n ComponentPublicInstance,\r\n computed,\r\n ComputedGetter, MaybeRef,\r\n reactive,\r\n toRefs,\r\n ToRefs, unref,\r\n watchEffect,\r\n} from \"vue\";\r\nimport {\r\n Browser,\r\n getCurrentComponent,\r\n isArray,\r\n isFunction,\r\n isObjectNotArray,\r\n} from \"../util\";\r\n\r\n/**\r\n * # Get Next ID\r\n */\r\nlet currentId: number = 0;\r\nlet assignedIds = new WeakMap<ComponentInternalInstance, number>();\r\nexport function getNextId(): number {\r\n const component = getCurrentComponent(\"getNextId()\");\r\n if (assignedIds.has(component)) {\r\n return assignedIds.get(component)!;\r\n }\r\n const id = ++currentId;\r\n assignedIds.set(component, id);\r\n return id;\r\n}\r\ngetNextId.reset = () => {\r\n currentId = 0;\r\n assignedIds = new WeakMap();\r\n};\r\n\r\n/**\r\n * # Getter Property Key\r\n *\r\n * Defines where to look for Property information within getter functions.\r\n *\r\n * For example: an object might have a `title` property.\r\n * So a property key may represent either an array index, or an object property.\r\n *\r\n * - `boolean`, `null`, `undefined` - Ignored\r\n * - `string` - Property name, or use Object path notation.\r\n * - `array` of strings or numbers represent nested lookup - each array element represents a key in the hierarchy\r\n * - A callback function accepting `item` and `fallback` arguments.\r\n */\r\nexport type GetterPropertyKey<T = Record<string, any>> =\r\n | boolean\r\n | null\r\n | undefined\r\n | string\r\n | (string | number)[]\r\n | ((item: T, fallback?: any) => any);\r\n\r\n/**\r\n * # Get Property\r\n *\r\n * A getter function, which gets a property from the `subject`, which may be\r\n * any kind of object.\r\n *\r\n */\r\nexport function getPropertyValue(\r\n subject: any,\r\n property: GetterPropertyKey,\r\n fallback?: any,\r\n): any {\r\n if (property === true) {\r\n return subject === undefined ? fallback : subject;\r\n }\r\n if (property == null || typeof property === \"boolean\") {\r\n return fallback;\r\n }\r\n if (subject !== Object(subject)) {\r\n if (typeof property !== \"function\") {\r\n return fallback;\r\n }\r\n const value = property(subject, fallback);\r\n return typeof value === \"undefined\" ? fallback : value;\r\n }\r\n if (typeof property === \"string\") {\r\n return getPropertyValueByPath(subject, property, fallback);\r\n }\r\n if (Array.isArray(property)) {\r\n return getNestedPropertyValue(subject, property, fallback);\r\n }\r\n if (!isFunction(property)) {\r\n return fallback;\r\n }\r\n const value = property(subject, fallback);\r\n return typeof value === \"undefined\" ? fallback : value;\r\n}\r\n\r\n/**\r\n * # Get Property from Path\r\n *\r\n * This is a rough copy of Evance's `EvObjectPathGetter` functionality.\r\n *\r\n * @param subject\r\n * @param objectPath\r\n * @param fallback\r\n */\r\nexport function getPropertyValueByPath(\r\n subject: any,\r\n objectPath: string,\r\n fallback?: any,\r\n) {\r\n if (subject == null || !objectPath) {\r\n return fallback;\r\n }\r\n const propertyKeys = objectPathToPropertyKeys(objectPath);\r\n return getNestedPropertyValue(subject, propertyKeys, fallback);\r\n}\r\n\r\n/**\r\n *\r\n * @param subject\r\n * @param objectPath\r\n * @param value\r\n */\r\nexport function setPropertyValueByPath(\r\n subject: any,\r\n objectPath: string,\r\n value: any,\r\n) {\r\n if (subject == null || !objectPath) {\r\n return;\r\n }\r\n const propertyKeys = objectPathToPropertyKeys(objectPath);\r\n let obj = subject;\r\n while (propertyKeys.length > 1) {\r\n obj = obj[propertyKeys.shift()];\r\n }\r\n obj[propertyKeys[0]] = value;\r\n}\r\n\r\n/**\r\n * # Get Nested Property Value\r\n *\r\n * @param subject\r\n * @param propertyKeys\r\n * @param fallback\r\n */\r\nexport function getNestedPropertyValue(\r\n subject: any,\r\n propertyKeys: PropertyKey[],\r\n fallback?: any,\r\n): any {\r\n let lastValue = subject;\r\n for (const property of propertyKeys) {\r\n if (lastValue === undefined) {\r\n break;\r\n }\r\n lastValue = lastValue[property];\r\n }\r\n return lastValue === undefined ? fallback : lastValue;\r\n}\r\n\r\n/**\r\n * # Object Path To Array\r\n *\r\n * This is a rough copy of Evance's `EvObjectPath` functionality.\r\n *\r\n * @param path\r\n */\r\nexport function objectPathToPropertyKeys(path: string): PropertyKey[] {\r\n return path.split(/[.\\[\\]\\/]+/).filter(Boolean);\r\n}\r\n\r\n/**\r\n * # Ref Element\r\n * @param obj\r\n */\r\nexport function refElement<T extends object | undefined>(\r\n obj: T,\r\n): Exclude<T, ComponentPublicInstance> | HTMLElement {\r\n return obj && \"$el\" in obj\r\n ? (obj.$el as HTMLElement)\r\n : (obj as HTMLElement);\r\n}\r\n\r\n/**\r\n * # Split Object\r\n *\r\n * Split an object into two using an Array of keys or RegExp to test keys against.\r\n *\r\n * This results an array containing an object containing only matching keys,\r\n * and an object containing the remaining keys.\r\n *\r\n * @param subject\r\n * @param paths\r\n * @param exclude\r\n */\r\nexport function splitObject<\r\n Subject extends object,\r\n SubjectKey extends Extract<keyof Subject, string>,\r\n Exclusions extends Extract<keyof Subject, string>,\r\n>(\r\n subject: Subject,\r\n paths: (SubjectKey | RegExp)[],\r\n exclude?: Exclusions[],\r\n): [matched: Partial<Subject>, unmatched: Partial<Subject>] {\r\n const matching = Object.create(null);\r\n const remaining = Object.create(null);\r\n for (const key in subject) {\r\n if (\r\n paths.some((path) =>\r\n path instanceof RegExp ? path.test(key) : path === key,\r\n ) &&\r\n !exclude?.some((path) => path === key)\r\n ) {\r\n matching[key] = subject[key];\r\n } else {\r\n remaining[key] = subject[key];\r\n }\r\n }\r\n return [matching, remaining];\r\n}\r\n\r\n/**\r\n * ## Split Input Attrs\r\n *\r\n * Filter/split an attributes objects into two objects:\r\n * 1. Attributes not intended for an input field.\r\n * 2. Attributes for an input field.\r\n *\r\n * @param attrs\r\n */\r\nexport function splitInputAttrs(attrs: Record<string, unknown>) {\r\n return splitObject(attrs, [\"class\", \"style\", \"id\", /^data-/]);\r\n}\r\n\r\n/**\r\n * # Clamp\r\n *\r\n * @param value\r\n * @param min\r\n * @param max\r\n */\r\nexport function clamp(value: number, min = 0, max = 1) {\r\n return Math.max(min, Math.min(max, value));\r\n}\r\n\r\n// Only allow a single return type\r\ntype NotAUnion<T> = [T] extends [infer U] ? _NotAUnion<U, U> : never;\r\ntype _NotAUnion<T, U> = U extends any\r\n ? [T] extends [U]\r\n ? unknown\r\n : never\r\n : never;\r\n\r\n/**\r\n * # Destruct Computed\r\n *\r\n * Convert a computed ref to a record of refs.\r\n * The getter function must always return an object with the same keys.\r\n */\r\nexport function destructComputed<T extends object>(\r\n getter: ComputedGetter<T & NotAUnion<T>>,\r\n): ToRefs<T>;\r\nexport function destructComputed<T extends object>(getter: ComputedGetter<T>) {\r\n const refs = reactive({}) as T;\r\n const base = computed(getter);\r\n watchEffect(\r\n () => {\r\n for (const key in base.value) {\r\n refs[key] = base.value[key];\r\n }\r\n },\r\n { flush: \"sync\" },\r\n );\r\n return toRefs(refs);\r\n}\r\n\r\n/**\r\n * # Union To Intersection\r\n *\r\n * Intersection `I` of all types in the union `U` - transform a union of object types into an intersection of those types.\r\n * This can be helpful when you want to combine multiple types into a single type, where all properties from each type\r\n * become part of the resulting type.\r\n */\r\nexport type UnionToIntersection<U> = (\r\n U extends any ? (k: U) => void : never\r\n) extends (k: infer I) => void\r\n ? I\r\n : never;\r\n\r\n/**\r\n * # Get Descriptor\r\n *\r\n * Returns the closest property descriptor for an object.\r\n *\r\n * @param obj\r\n * @param key\r\n */\r\nexport function getPropertyDescriptor(obj: any, key: PropertyKey) {\r\n let currentObj = obj;\r\n while (currentObj) {\r\n const descriptor = Reflect.getOwnPropertyDescriptor(currentObj, key);\r\n if (descriptor) {\r\n return descriptor;\r\n }\r\n currentObj = Object.getPrototypeOf(currentObj);\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * # Filter Component Props\r\n *\r\n * Extracts the component's props from a props record.\r\n *\r\n * Excludes `class` and `style`.\r\n *\r\n * @param component\r\n * @param props\r\n */\r\nexport function filterComponentProps(\r\n component: ComponentOptions<any>,\r\n props: Record<string, any>,\r\n) {\r\n return splitObject(props, Object.keys(component.props), [\r\n \"class\",\r\n \"style\",\r\n ])[0];\r\n}\r\n\r\n/**\r\n * # If Any\r\n */\r\ntype IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;\r\n\r\n/**\r\n * # Wrap In Array\r\n * @param value\r\n */\r\nexport function wrapInArray<T>(\r\n value: T | null | undefined,\r\n): T extends readonly any[] ? IfAny<T, T[], T> : NonNullable<T>[] {\r\n return value == null ? [] : isArray(value) ? (value as any) : [value];\r\n}\r\n\r\nexport function mergeDeep(\r\n source: Record<string, any> = {},\r\n target: Record<string, any> = {},\r\n arrayFn?: (a: unknown[], b: unknown[]) => unknown[],\r\n) {\r\n const out: Record<string, any> = {};\r\n\r\n for (const key in source) {\r\n out[key] = source[key];\r\n }\r\n\r\n for (const key in target) {\r\n const sourceProperty = source[key];\r\n const targetProperty = target[key];\r\n\r\n // Only continue deep merging if\r\n // both properties are objects\r\n if (\r\n isObjectNotArray(sourceProperty) &&\r\n isObjectNotArray(targetProperty)\r\n ) {\r\n out[key] = mergeDeep(sourceProperty, targetProperty, arrayFn);\r\n continue;\r\n }\r\n\r\n if (isArray(sourceProperty) && isArray(targetProperty) && arrayFn) {\r\n out[key] = arrayFn(sourceProperty, targetProperty);\r\n continue;\r\n }\r\n\r\n out[key] = targetProperty;\r\n }\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * # Create Range\r\n *\r\n * @param length\r\n * @param start\r\n */\r\nexport function createRange(length: number, start = 0): number[] {\r\n return Array.from({ length }, (v, k) => start + k);\r\n}\r\n\r\n/**\r\n * # Omit\r\n *\r\n * Clones an object, whilst omitting excluded properties.\r\n *\r\n * @param obj\r\n * @param exclude\r\n */\r\nexport function omit<T extends object, U extends Extract<keyof T, string>>(\r\n obj: T,\r\n exclude: U[],\r\n): Omit<T, U> {\r\n const clone = { ...obj };\r\n\r\n exclude.forEach((prop) => delete clone[prop]);\r\n\r\n return clone;\r\n}\r\n\r\n/**\r\n * # matchesSelector\r\n * Returns `null` if the CSS selector is not supported, or can't be checked.\r\n * @param el\r\n * @param selector\r\n */\r\nexport function matchesSelector(\r\n el: Element | undefined,\r\n selector: string,\r\n): boolean | null {\r\n const supportsSelector =\r\n Browser.hasWindow &&\r\n typeof CSS !== \"undefined\" &&\r\n typeof CSS.supports !== \"undefined\" &&\r\n CSS.supports(`selector(${selector})`);\r\n\r\n if (!supportsSelector) {\r\n return null;\r\n }\r\n\r\n try {\r\n return !!el && el.matches(selector);\r\n } catch (err) {\r\n return null;\r\n }\r\n}\r\n\r\nexport function keys<O extends {}>(o: O) {\r\n return Object.keys(o) as (keyof O)[];\r\n}\r\n\r\ntype DebouncedFunction<T extends (...args: any[]) => any> = {\r\n (...args: Parameters<T>): void;\r\n clear: () => void;\r\n immediate: T;\r\n};\r\n\r\n/**\r\n * ## debounce\r\n *\r\n * @param fn The function to debounce\r\n * @param delay The debounce delay (either a number or a ref of a number)\r\n * @returns A debounced version of the function with `clear` and `immediate` methods\r\n */\r\nexport function debounce<T extends (...args: any[]) => any>(\r\n fn: T,\r\n delay: MaybeRef<number>,\r\n): DebouncedFunction<T> {\r\n let timeoutId = 0 as any;\r\n const wrap = (...args: any[]) => {\r\n clearTimeout(timeoutId);\r\n timeoutId = setTimeout(() => fn(...args), unref(delay));\r\n };\r\n wrap.clear = () => {\r\n clearTimeout(timeoutId);\r\n };\r\n wrap.immediate = fn;\r\n return wrap;\r\n}\r\n\r\nexport function applyDefaults<T extends Record<string, any>>(\r\n props: T,\r\n defaults: Partial<T>,\r\n): T {\r\n const result = { ...props };\r\n for (const key in defaults) {\r\n if (result[key] === undefined) {\r\n result[key] = defaults[key];\r\n }\r\n }\r\n return result as T;\r\n}\r\n","// Utilities\n\n// Types\nimport type { ComponentInternalInstance, InjectionKey } from \"vue\";\nimport { getCurrentComponent } from \"@/util/components\";\n\nexport function injectSelf<T>(\n key: InjectionKey<T> | string,\n vm?: ComponentInternalInstance,\n): T | undefined;\nexport function injectSelf(\n key: InjectionKey<any> | string,\n component = getCurrentComponent(\"injectSelf\"),\n) {\n const { provides } = component as { provides?: any };\n\n if (provides && (key as string | symbol) in provides) {\n // TS doesn't allow symbol as index type\n return provides[key as string];\n }\n return undefined;\n}\n","export function isFixedPosition(el?: HTMLElement) {\n while (el) {\n if (window.getComputedStyle(el).position === \"fixed\") {\n return true;\n }\n el = el.offsetParent as HTMLElement;\n }\n return false;\n}\n","/**\n * # Key Logger\n */\nexport class KeyLogger {\n public lastTime: number = 0;\n\n public timeToKeep: number = 1000;\n\n public value: string = \"\";\n\n /**\n * ## Log\n * @param e\n */\n public log(e: KeyboardEvent): boolean {\n if (!isKeyEventLoggable(e)) {\n return false;\n }\n const now = performance.now();\n if (now - this.lastTime > this.timeToKeep) {\n this.value = \"\";\n }\n this.value += e.key.toLowerCase();\n this.lastTime = now;\n return true;\n }\n}\n\n/**\n * # Is Key Event Loggable?\n * @param e\n */\nexport function isKeyEventLoggable(e: KeyboardEvent): boolean {\n const isPrintableChar = e.key.length === 1;\n const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;\n return isPrintableChar && noModifier;\n}\n\n/**\n * # compositionIgnoreKeys\n * Keys to ignore whilst the keyboard is in a composing sequence,\n * which is often used to input characters in languages that have complex character systems,\n * such as Chinese, Japanese, or Korean.\n */\nconst compositionIgnoreKeys = [\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowRight\",\n \"ArrowLeft\",\n \"Enter\",\n \"Escape\",\n \"Tab\",\n \" \",\n];\n\n/**\n * # isComposingIgnoreKey\n * Returns `true` if the keyboard event is within a composing sequence,\n * and the key pressed is included within `compositionIgnoreKeys`.\n */\nexport function isComposingIgnoreKey(e: KeyboardEvent): boolean {\n return e.isComposing && compositionIgnoreKeys.includes(e.key);\n}\n","/**\n * # `mathEval()`\n *\n * Basic mathematical string expression evaluation.\n *\n * This avoids unsafe use of `eval()` and supports basic math expressions such as:\n *\n * * 2 + 3 * 4\n * * -(3 + 2)\n * * 3 + (-4 * 2)\n * * ((1600 - (3 * 32)) / 4)\n * * 1 + -2\n * * 10*1.2\n *\n * @param expression\n */\nexport function mathEval(expression: string): number | null {\n const ops: Record<\n string,\n {\n precedence: number;\n associativity: \"left\" | \"right\";\n fn: (a: number, b: number) => number;\n }\n > = {\n \"+\": { precedence: 1, associativity: \"left\", fn: (a, b) => a + b },\n \"-\": { precedence: 1, associativity: \"left\", fn: (a, b) => a - b },\n \"*\": { precedence: 2, associativity: \"left\", fn: (a, b) => a * b },\n \"/\": { precedence: 2, associativity: \"left\", fn: (a, b) => a / b },\n };\n\n const output: (number | string)[] = [];\n const operators: string[] = [];\n const tokens: string[] = [];\n\n // Tokenize manually to handle negative numbers\n const regex = /\\d+(\\.\\d+)?|[()+\\-*/]/g;\n let match: RegExpExecArray | null;\n while ((match = regex.exec(expression.replace(/\\s+/g, \"\")))) {\n tokens.push(match[0]);\n }\n\n if (!tokens.length) {\n return null;\n }\n\n let prevToken: string | undefined;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // Handle unary minus by converting to (0 - number)\n if (\n token === \"-\" &&\n (i === 0 || (prevToken && (prevToken in ops || prevToken === \"(\")))\n ) {\n const next = tokens[i + 1];\n if (next && /^\\d+(\\.\\d+)?$/.test(next)) {\n output.push(0);\n output.push(Number(next));\n output.push(\"-\");\n i++; // Skip the number token\n prevToken = next;\n continue;\n } else if (next === \"(\") {\n // Support unary minus before parentheses: `-(3 + 2)`\n output.push(0);\n operators.push(\"-\");\n continue;\n }\n }\n\n if (/^\\d+(\\.\\d+)?$/.test(token)) {\n output.push(Number(token));\n } else if (token in ops) {\n while (\n operators.length &&\n operators[operators.length - 1] in ops &&\n ((ops[token].associativity === \"left\" &&\n ops[token].precedence <=\n ops[operators[operators.length - 1]].precedence) ||\n (ops[token].associativity === \"right\" &&\n ops[token].precedence <\n ops[operators[operators.length - 1]].precedence))\n ) {\n output.push(operators.pop()!);\n }\n operators.push(token);\n } else if (token === \"(\") {\n operators.push(token);\n } else if (token === \")\") {\n while (\n operators.length &&\n operators[operators.length - 1] !== \"(\"\n ) {\n output.push(operators.pop()!);\n }\n if (operators[operators.length - 1] === \"(\") {\n operators.pop();\n } else {\n return null; // mismatched parentheses\n }\n } else {\n return null; // invalid token\n }\n\n prevToken = token;\n }\n\n while (operators.length) {\n const op = operators.pop()!;\n if (op === \"(\" || op === \")\") {\n return null;\n }\n output.push(op);\n }\n\n const stack: number[] = [];\n for (const token of output) {\n if (typeof token === \"number\") {\n stack.push(token);\n } else if (token in ops) {\n const b = stack.pop();\n const a = stack.pop();\n if (a === undefined || b === undefined) return null;\n stack.push(ops[token].fn(a, b));\n }\n }\n\n return stack.length === 1 ? stack[0] : null;\n}\n","/**\n * # Integerish Pattern\n */\nexport const IntegerishPattern: RegExp = /^\\d+$/;\n\n/**\n * # Is Integerish\n * @param value\n */\nexport function isIntegerish(value: string | number): boolean {\n return IntegerishPattern.test(value.toString());\n}\n\nexport type NumberPartType =\n | Exclude<Intl.NumberFormatPartTypes, \"minusSign\" | \"plusSign\">\n | \"sign\"\n | \"prefix\"\n | \"suffix\";\n\ntype IntegerPart = {\n type: NumberPartType & \"integer\";\n value: number;\n};\n\ntype FractionPart = {\n type: NumberPartType & \"fraction\";\n value: number;\n};\n\ntype DigitPart = IntegerPart | FractionPart;\n\ntype SymbolPart = {\n type: Exclude<NumberPartType, \"integer\" | \"fraction\">;\n value: string;\n};\n\nexport type NumberPartKey = string;\ntype KeyedPart = { key: NumberPartKey };\nexport type KeyedDigitPart = DigitPart & KeyedPart & { pos: number };\nexport type KeyedSymbolPart = SymbolPart & KeyedPart;\nexport type KeyedNumberPart = KeyedDigitPart | KeyedSymbolPart;\n\nexport type NumberFormat = Omit<Intl.NumberFormatOptions, \"notation\"> & {\n notation?: Exclude<\n Intl.NumberFormatOptions[\"notation\"],\n \"scientific\" | \"engineering\"\n >;\n};\n\nexport type NumberValue = Exclude<\n Parameters<typeof Intl.NumberFormat.prototype.formatToParts>[0],\n bigint | undefined\n>;\n\nexport function splitNumberToParts(\n value: NumberValue,\n formatter: Intl.NumberFormat,\n prefix?: string,\n suffix?: string,\n) {\n const parts: Array<\n Omit<Intl.NumberFormatPart, \"type\"> & {\n type: Intl.NumberFormatPartTypes | \"prefix\" | \"suffix\";\n }\n > = formatter.formatToParts(value);\n\n if (prefix) {\n parts.unshift({ type: \"prefix\", value: prefix });\n }\n if (suffix) {\n parts.push({ type: \"suffix\", value: suffix });\n }\n\n const start: KeyedNumberPart[] = [];\n const integers: Array<IntegerPart | SymbolPart> = []; // we do a second pass to key these from RTL\n const fraction: KeyedNumberPart[] = [];\n const end: KeyedNumberPart[] = [];\n const counts: Partial<Record<NumberPartType, number>> = {};\n\n const nextIndex = (type: NumberPartType) => {\n return (counts[type] = (counts[type] ?? -1) + 1);\n };\n const generateKey = (type: NumberPartType) => `${type}:${nextIndex(type)}`;\n\n let valueAsString = \"\";\n let parsedInteger = false;\n let parsedDecimal = false;\n\n for (const part of parts) {\n valueAsString += part.value;\n\n const type: NumberPartType =\n part.type === \"minusSign\" || part.type === \"plusSign\"\n ? \"sign\"\n : part.type;\n\n if (type === \"integer\") {\n parsedInteger = true;\n integers.push(\n ...part.value\n .split(\"\")\n .map((d) => ({ type, value: parseInt(d) })),\n );\n } else if (type === \"group\") {\n integers.push({ type, value: part.value });\n } else if (type === \"decimal\") {\n parsedDecimal = true;\n fraction.push({ type, value: part.value, key: generateKey(type) });\n } else if (type === \"fraction\") {\n fraction.push(\n ...part.value.split(\"\").map((d) => ({\n type,\n value: parseInt(d),\n key: generateKey(type),\n pos: -1 - counts[type]!,\n })),\n );\n } else {\n (parsedInteger || parsedDecimal ? end : start).push({\n type,\n value: part.value,\n key: generateKey(type),\n });\n }\n }\n\n const integer: KeyedNumberPart[] = [];\n\n // Key the integer parts RTL, for better layout animations\n for (let i = integers.length - 1; i >= 0; i--) {\n const integerPart = integers[i]!;\n integer.unshift(\n integerPart.type === \"integer\"\n ? {\n ...integerPart,\n key: generateKey(integerPart.type),\n pos: counts[integerPart.type]!,\n }\n : { ...integerPart, key: generateKey(integerPart.type) },\n );\n }\n\n return {\n start,\n integer,\n fraction,\n end,\n valueAsString,\n value: typeof value == \"string\" ? parseFloat(value) : value,\n };\n}\n","import { App, Component, Plugin } from \"vue\";\n\nexport let VueInstance: App;\n\n/**\n * # setVueInstance\n *\n * Set the global vue instance\n *\n * @param Vue\n */\nexport const setVueInstance = (Vue: App): void => {\n VueInstance = Vue;\n};\n\n/**\n * # registerPlugin\n *\n * Register a plugin to the vue app instance.\n *\n * @param app\n * @param plugin\n */\nexport const registerPlugin = (app: App, plugin: Plugin): void => {\n app.use(plugin);\n};\n\n/**\n * # registerComponent\n *\n * Register a component to the vue app instance.\n *\n * @param app\n * @param component\n */\nexport const registerComponent = (app: App, component: Component): void => {\n app.component(component.name, component);\n};","export declare type HintedString<T extends string> = string | T;\n\n/**\n * # spaceSeparatedValues\n *\n * Accepts a string and converts it into an array of values.\n *\n * @param values\n */\nexport function spaceSeparatedValues(values: string = \"\"): string[] {\n if (spaceSeparatedValues.cache.has(values)) {\n return spaceSeparatedValues.cache.get(values)!;\n }\n return values.split(\" \").map((value) => value.trim());\n}\nspaceSeparatedValues.cache = new Map<string, string[]>();\n\n/**\n * # To Kebab Case\n *\n * Converts a string to `kebab-case` by replacing each space or letter capitalization with a dash (-).\n *\n * @param value\n */\nexport function toKebabCase(value: string = \"\"): string {\n if (toKebabCase.cache.has(value)) {\n return toKebabCase.cache.get(value)!;\n }\n const kebabValue = value\n .replace(/[^a-z]/gi, \"-\")\n .replace(/\\B([A-Z])/g, \"-$1\")\n .toLowerCase();\n toKebabCase.cache.set(value, kebabValue);\n return kebabValue;\n}\ntoKebabCase.cache = new Map<string, string>();\n\n/**\n * # To Camel Case\n *\n * Converts a string from `kebab-case` to `camelCase`.\n *\n * @param value\n */\nexport function toCamelCase(value: string = \"\"): string {\n if (toCamelCase.cache.has(value)) {\n return toCamelCase.cache.get(value)!;\n }\n const camelValue = value.replace(/-([a-z])/g, (_, match) =>\n match.toUpperCase(),\n );\n toCamelCase.cache.set(value, camelValue);\n return camelValue;\n}\ntoCamelCase.cache = new Map<string, string>();\n\n/**\n * ## Template Variables\n *\n * May be supplied to `createStringTemplate()` either as default variable replacements\n * or during template execution for variable replacement.\n *\n * @see createStringTemplate\n */\nexport type TemplateVariables = {\n [variable: string]: number | string;\n};\n\n/**\n * # Template Function\n *\n * A template function is returned from `createStringTemplate`, which converts the template\n * into a string, replacing any variables with those contained within the variables supplied.\n *\n * @see createStringTemplate\n */\nexport type TemplateFunction = (variables?: TemplateVariables) => string;\n\n/**\n * # String Template\n *\n * An approximation of Evance's String Templates.\n *\n * Allows us to build strings as a template with replacement variables.\n *\n * This is inspired by the output tags of EVML and behaves similarly. However, unlike EVML\n * which is compiled this is a simple find and replace template format and variables are only\n * wrapped within single curly brackets e.g. 'Hello { name }'.\n *\n * @param template\n * @param defaultVariables\n */\nexport function createStringTemplate(\n template: string,\n defaultVariables: TemplateVariables = {},\n): TemplateFunction {\n /** Variable lookup pattern */\n const variablePattern = /{([\\s\\S]+?)}/g;\n\n return (variables: TemplateVariables = {}) => {\n const dictionary = { ...defaultVariables, ...variables };\n\n return template.replaceAll(variablePattern, (match, raw): string => {\n const variable = raw.trim();\n if (dictionary[variable] === undefined) {\n console.warn(`Unrecognized template variable '${variable}'.`);\n return `\"${variable}\"`;\n }\n return dictionary[variable] as string;\n });\n };\n}\n\n/**\n * # Pad End\n *\n * @param str\n * @param length\n * @param char\n */\nexport function padEnd(str: string, length: number, char = \"0\") {\n return str + char.repeat(Math.max(0, length - str.length));\n}\n\n/**\n * # Pad Start\n *\n * @param str\n * @param length\n * @param char\n */\nexport function padStart(str: string, length: number, char = \"0\") {\n return char.repeat(Math.max(0, length - str.length)) + str;\n}\n\n/**\n * # Trim End\n *\n * @param targetString\n * @param trimChars\n */\nexport function trimEnd(targetString: string, trimChars: string): string {\n if (!targetString.endsWith(trimChars)) {\n return targetString;\n }\n return targetString.substring(0, targetString.length - trimChars.length);\n}\n","export type StyleProp = Record<string, string>;\n\n/**\n * # Set Fixed Position\n * @param style\n * @param isRtl\n */\nexport function toFixedPosition(style: StyleProp, isRtl: boolean = false) {\n Object.assign(style, {\n position: \"fixed\",\n top: 0,\n [isRtl ? \"right\" : \"left\"]: 0,\n });\n}\n","import { isEmpty } from \"./is-functions\";\n\n/**\n * # To Web Unit\n * @param value\n * @param unit\n */\nexport function toWebUnit(\n value?: string | number,\n unit: string = \"px\",\n): string | undefined {\n if (isEmpty(value)) {\n return undefined;\n }\n if (isNaN(+value!)) {\n return String(value);\n }\n if (!isFinite(+value!)) {\n return undefined;\n }\n return `${value}${unit}`;\n}\n\n/**\n * # Pixel Round\n * @param value\n */\nexport function pixelRound(value: number): number {\n return Math.round(value * devicePixelRatio) / devicePixelRatio;\n}\n\n/**\n * # Pixel Ceil\n * @param value\n */\nexport function pixelCeil(value: number): number {\n return Math.round(value * devicePixelRatio) / devicePixelRatio;\n}\n\n/**\n * # extractWebUnit\n * @param value\n */\nexport function extractWebUnit(value: string) {\n const regex = /^(-?\\d+(?:\\.\\d+)?)\\s*([a-zA-Z%]*)$/;\n const match = value.match(regex);\n if (!match) {\n return undefined;\n }\n return {\n value: parseFloat(match[1]),\n unit: match[2] ?? \"px\",\n };\n}\n","// Composables\nimport { propsFactory } from \"@/util\";\nimport { PropType, StyleValue } from \"vue\";\n\nexport type ClassValue = any;\n\nexport interface ComponentProps {\n class?: ClassValue;\n style?: StyleValue | undefined;\n}\n\nexport const makeComponentProps = propsFactory(\n {\n class: [String, Array] as PropType<ClassValue>,\n style: {\n type: [String, Array, Object] as PropType<StyleValue>,\n default: null,\n },\n },\n \"component\",\n);\n","/**\n * # Translation Code\n *\n * Language Code: ISO 639-1 codes (required)\n * Country Code: ISO 3166-1 Alpha-2 country code (optional)\n */\nexport class TranslationCode {\n /**\n * @param languageCode\n * @param countryCode\n */\n constructor(\n public languageCode: string,\n public countryCode: string | null = null,\n ) {}\n\n get isRegional(): boolean {\n return !(this.countryCode === null);\n }\n\n /**\n * ## From String\n *\n * Accepts an Evance Locale Code string e.g. 'en-gb'.\n * But will also accept 'en_GB'.\n * @param code\n */\n public static fromString(code: string) {\n const matches = code.match(/^([a-zA-Z]{2,3})(?:[_-]([a-zA-Z]{2,3}))?$/);\n if (!matches) {\n throw new Error(\n `Evance UI: The string '${code}' is not a valid Locale string`,\n );\n }\n const languageCode = matches[1].toLowerCase();\n const countryCode = matches[2]?.toUpperCase() || null;\n return new this(languageCode, countryCode);\n }\n\n /**\n * ## To String\n */\n public toString(): string {\n return (\n this.languageCode + (this.isRegional ? \"-\" + this.countryCode : \"\")\n );\n }\n}\n","import { TranslationCode } from \"@/modules/Translation/TranslationCode\";\n\n/**\n * # Locale Code\n */\nexport class LocaleCode extends TranslationCode {\n /**\n * @param languageCode\n * @param countryCode\n */\n constructor(\n public languageCode: string,\n public countryCode: string,\n ) {\n super(languageCode, countryCode);\n }\n\n /**\n * ## To Translation Codes\n */\n public toTranslationCodes(): string[] {\n const codes = [this.toString()];\n if (this.isRegional) {\n codes.push(this.languageCode);\n }\n return codes;\n }\n}\n","import { DateAdapter } from \"@/composables/date/DateAdapter\";\nimport { createRange, isFunction, isString, padStart } from \"@/util\";\nimport { LocaleCode } from \"@/modules/Locale/LocaleCode\";\n\ntype CustomDateFormat =\n | Intl.DateTimeFormatOptions\n | ((date: Date, formatString: string, locale: string) => string);\n\n/**\n * # Default Date Adapter\n */\nexport class DefaultDateAdapter implements DateAdapter<Date> {\n protected static readonly PATTERN_ISO =\n /([12]\\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\\d|3[01]))/;\n protected static readonly firstDayOfWeek: Record<string, number> = {\n \"001\": 1,\n AD: 1,\n AE: 6,\n AF: 6,\n AG: 0,\n AI: 1,\n AL: 1,\n AM: 1,\n AN: 1,\n AR: 1,\n AS: 0,\n AT: 1,\n AU: 1,\n AX: 1,\n AZ: 1,\n BA: 1,\n BD: 0,\n BE: 1,\n BG: 1,\n BH: 6,\n BM: 1,\n BN: 1,\n BR: 0,\n BS: 0,\n BT: 0,\n BW: 0,\n BY: 1,\n BZ: 0,\n CA: 0,\n CH: 1,\n CL: 1,\n CM: 1,\n CN: 1,\n CO: 0,\n CR: 1,\n CY: 1,\n CZ: 1,\n DE: 1,\n DJ: 6,\n DK: 1,\n DM: 0,\n DO: 0,\n DZ: 6,\n EC: 1,\n EE: 1,\n EG: 6,\n ES: 1,\n ET: 0,\n FI: 1,\n FJ: 1,\n FO: 1,\n FR: 1,\n GB: 1,\n GE: 1,\n GF: 1,\n GP: 1,\n GR: 1,\n GT: 0,\n GU: 0,\n HK: 0,\n HN: 0,\n HR: 1,\n HU: 1,\n ID: 0,\n IE: 1,\n IL: 0,\n IN: 0,\n IQ: 6,\n IR: 6,\n IS: 1,\n IT: 1,\n JM: 0,\n JO: 6,\n JP: 0,\n KE: 0,\n KG: 1,\n KH: 0,\n KR: 0,\n KW: 6,\n KZ: 1,\n LA: 0,\n LB: 1,\n LI: 1,\n LK: 1,\n LT: 1,\n LU: 1,\n LV: 1,\n LY: 6,\n MC: 1,\n MD: 1,\n ME: 1,\n MH: 0,\n MK: 1,\n MM: 0,\n MN: 1,\n MO: 0,\n MQ: 1,\n MT: 0,\n MV: 5,\n MX: 0,\n MY: 1,\n MZ: 0,\n NI: 0,\n NL: 1,\n NO: 1,\n NP: 0,\n NZ: 1,\n OM: 6,\n PA: 0,\n PE: 0,\n PH: 0,\n PK: 0,\n PL: 1,\n PR: 0,\n PT: 0,\n PY: 0,\n QA: 6,\n RE: 1,\n RO: 1,\n RS: 1,\n RU: 1,\n SA: 0,\n SD: 6,\n SE: 1,\n SG: 0,\n SI: 1,\n SK: 1,\n SM: 1,\n SV: 0,\n SY: 6,\n TH: 0,\n TJ: 1,\n TM: 1,\n TR: 1,\n TT: 0,\n TW: 0,\n UA: 1,\n UM: 0,\n US: 0,\n UY: 1,\n UZ: 1,\n VA: 1,\n VE: 0,\n VI: 0,\n VN: 1,\n WS: 0,\n XK: 1,\n YE: 0,\n ZA: 0,\n ZW: 0,\n };\n protected static readonly formatOptions: Record<\n string,\n Intl.DateTimeFormatOptions\n > = {\n fullDateWithWeekday: {\n weekday: \"long\",\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n },\n normalDateWithWeekday: {\n weekday: \"short\",\n day: \"numeric\",\n month: \"short\",\n },\n keyboardDate: { day: \"2-digit\", month: \"2-digit\", year: \"numeric\" },\n monthAndDate: { month: \"long\", day: \"numeric\" },\n monthAndYear: { month: \"long\", year: \"numeric\" },\n month: { month: \"long\" },\n monthShort: { month: \"short\" },\n dayOfMonth: { day: \"numeric\" },\n shortDate: { year: \"2-digit\", month: \"numeric\", day: \"numeric\" },\n year: { year: \"numeric\" },\n displayDate: { day: \"2-digit\", month: \"short\", year: \"numeric\" },\n };\n\n public locale: string;\n public formats?: Record<string, CustomDateFormat>;\n\n /**\n * @param options\n */\n constructor(options: {\n locale: string;\n formats?: Record<string, CustomDateFormat>;\n }) {\n this.locale = options.locale;\n this.formats = options.formats;\n }\n\n /**\n * ## Add Days\n * @param date\n * @param amount\n */\n public addDays(date: Date, amount: number): Date {\n const d = new Date(date);\n d.setDate(d.getDate() + amount);\n return d;\n }\n\n /**\n * ## Add Months\n * @param date\n * @param amount\n */\n public addMonths(date: Date, amount: number): Date {\n const d = new Date(date);\n d.setMonth(d.getMonth() + amount);\n return d;\n }\n\n /**\n * ## Date\n * @param value\n */\n public date(value?: any) {\n if (value == null) {\n return new Date();\n }\n if (value instanceof Date) {\n return value;\n }\n if (isString(value)) {\n if (this.isISO(value)) {\n return this.parseISO(value);\n }\n const parsed = Date.parse(value);\n if (!isNaN(parsed)) {\n return new Date(parsed);\n }\n }\n return null;\n }\n\n /**\n * ## End of Day\n * @param date\n */\n public endOfDay(date: Date) {\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n 23,\n 59,\n 59,\n 999,\n );\n }\n\n /**\n * ## End of Month\n * @param date\n */\n public endOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n }\n\n /**\n * ## End of Year\n * @param date\n */\n public endOfYear(date: Date): Date {\n return new Date(date.getFullYear(), 11, 31);\n }\n\n /**\n * ## Format\n * @param date\n * @param formatString\n */\n public format(date: Date, formatString: string): string {\n const newDate = this.date(date) ?? new Date();\n const customFormat = this.formats?.[formatString];\n if (isFunction(customFormat)) {\n return customFormat(newDate, formatString, this.locale);\n }\n const options: Intl.DateTimeFormatOptions =\n DefaultDateAdapter.formatOptions[formatString] ||\n (customFormat ?? { timeZone: \"UTC\", timeZoneName: \"short\" });\n return new Intl.DateTimeFormat(this.locale, options).format(newDate);\n }\n\n /**\n * ## Get Country Code\n * Returns the country code portion of the locale code.\n * @private\n */\n private getCountryCode(): string {\n return LocaleCode.fromString(this.locale).countryCode!;\n }\n\n /**\n * ## Get Diff\n * @param date\n * @param comparing\n * @param unit\n */\n public getDiff(\n date: Date,\n comparing: string | Date,\n unit?: string,\n ): number {\n const d = new Date(date);\n const c = new Date(comparing);\n if (unit === \"month\") {\n return (\n d.getMonth() -\n c.getMonth() +\n (d.getFullYear() - c.getFullYear()) * 12\n );\n }\n return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));\n }\n\n /**\n * ## Get First Day of Week\n * @private\n */\n private getFirstDayOfWeek(): number {\n return DefaultDateAdapter.firstDayOfWeek[this.getCountryCode()] ?? 1;\n }\n\n /**\n * ## Get Month\n * @param date\n */\n public getMonth(date: Date): number {\n return date.getMonth();\n }\n\n /**\n * ## Get Next Month\n * @param date\n */\n public getNextMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth() + 1, 1);\n }\n\n /**\n * ## Get Week Array\n * @param date\n */\n public getWeekArray(date: Date): Date[][] {\n const weeks = [];\n let currentWeek = [];\n const firstDayOfMonth = this.startOfMonth(date);\n const lastDayOfMonth = this.endOfMonth(date);\n const firstDayWeekIndex =\n (firstDayOfMonth.getDay() - this.getFirstDayOfWeek() + 7) % 7;\n const lastDayWeekIndex =\n (lastDayOfMonth.getDay() - this.getFirstDayOfWeek() + 7) % 7;\n\n for (let i = 0; i < firstDayWeekIndex; i++) {\n const adjacentDay = new Date(firstDayOfMonth);\n adjacentDay.setDate(\n adjacentDay.getDate() - (firstDayWeekIndex - i),\n );\n currentWeek.push(adjacentDay);\n }\n\n for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {\n const day = new Date(date.getFullYear(), date.getMonth(), i);\n\n // Add the day to the current week\n currentWeek.push(day);\n\n // If the current week has 7 days, add it to the weeks array and start a new week\n if (currentWeek.length === 7) {\n weeks.push(currentWeek);\n currentWeek = [];\n }\n }\n\n for (let i = 1; i < 7 - lastDayWeekIndex; i++) {\n const adjacentDay = new Date(lastDayOfMonth);\n adjacentDay.setDate(adjacentDay.getDate() + i);\n currentWeek.push(adjacentDay);\n }\n\n weeks.push(currentWeek);\n\n return weeks;\n }\n\n /**\n * ## Get Weekdays\n */\n public getWeekdays(): string[] {\n const firstSundayOf2023 = new Date(2023, 0, 1);\n const daysFromSunday = this.getFirstDayOfWeek();\n return createRange(7).map((index) => {\n // Start with a known Sunday (2023-01-01)\n const weekday = new Date(firstSundayOf2023);\n weekday.setDate(\n firstSundayOf2023.getDate() + daysFromSunday + index,\n );\n return new Intl.DateTimeFormat(this.locale, {\n weekday: \"narrow\",\n }).format(weekday);\n });\n }\n\n /**\n * ## Get Year\n * @param date\n */\n public getYear(date: Date): number {\n return date.getFullYear();\n }\n\n /**\n * ## Is After\n * @param date\n * @param comparing\n */\n public isAfter(date: Date, comparing: Date): boolean {\n return date.getTime() > comparing.getTime();\n }\n\n /**\n * ## Is Before\n * @param date\n * @param comparing\n */\n public isBefore(date: Date, comparing: Date): boolean {\n return date.getTime() < comparing.getTime();\n }\n\n /**\n * ## Is Equal\n * @param date\n * @param comparing\n */\n public isEqual(date: Date, comparing: Date): boolean {\n return date.getTime() === comparing.getTime();\n }\n\n /**\n * ## Is ISO?\n * @param value\n * @protected\n */\n protected isISO(value: string): boolean {\n return DefaultDateAdapter.PATTERN_ISO.test(value);\n }\n\n /**\n * ## Is Same Day\n * @param date\n * @param comparing\n */\n public isSameDay(date: Date, comparing: Date): boolean {\n return (\n date.getDate() === comparing.getDate() &&\n date.getMonth() === comparing.getMonth() &&\n date.getFullYear() === comparing.getFullYear()\n );\n }\n\n /**\n * ## Is Same Month\n * @param date\n * @param comparing\n */\n public isSameMonth(date: Date, comparing: Date): boolean {\n return (\n date.getMonth() === comparing.getMonth() &&\n date.getFullYear() === comparing.getFullYear()\n );\n }\n\n /**\n * ## Is Valid\n * @param date\n */\n public isValid(date: any): boolean {\n const d = new Date(date);\n return d instanceof Date && !isNaN(d.getTime());\n }\n\n /**\n * ## Is Within Range\n * @param date\n * @param range\n */\n public isWithinRange(date: Date, range: [Date, Date]): boolean {\n return this.isAfter(date, range[0]) && this.isBefore(date, range[1]);\n }\n\n /**\n * ## Parse YYYY-MM-DD strings\n *\n * Uses local time zone when passing individual date component values.\n *\n * @param value\n * @protected\n */\n public parseISO(value: string): Date {\n const [year, month, day] = value.split(\"-\").map(Number);\n return new Date(year, month - 1, day);\n }\n\n /**\n * ## Set Month\n * @param date\n * @param month\n */\n public setMonth(date: Date, month: number): Date {\n const d = new Date(date);\n d.setMonth(month);\n return d;\n }\n\n /**\n * ## Set Year\n * @param date\n * @param year\n */\n public setYear(date: Date, year: number) {\n const d = new Date(date);\n d.setFullYear(year);\n return d;\n }\n\n /**\n * ## Start of Day\n * @param date\n */\n public startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n }\n\n /**\n * ## Start of Month\n * @param date\n */\n public startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n\n /**\n * ## Start of Year\n * @param date\n */\n public startOfYear(date: Date): Date {\n return new Date(date.getFullYear(), 0, 1);\n }\n\n /**\n * ## To ISO\n * @param date\n */\n public toISO(date: Date): string {\n const year = date.getFullYear();\n const month = padStart(String(date.getMonth() + 1), 2, \"0\");\n const day = padStart(String(date.getDate()), 2, \"0\");\n return `${year}-${month}-${day}`;\n }\n\n /**\n * ## To JS Date\n * @param value\n */\n public toJsDate(value: Date): Date {\n return value;\n }\n}\n","import { inject, InjectionKey, reactive, watch } from \"vue\";\nimport { DateAdapter } from \"@/composables/date/DateAdapter\";\nimport { LocaleManager } from \"@/modules/Locale/LocaleManager\";\nimport { isFunction, mergeDeep } from \"@/util\";\nimport { DefaultDateAdapter } from \"@/composables/date/DefaultDateAdapter\";\n\n/**\n * # Date Adapter Instance\n */\nexport interface DateAdapterInstance<\n T = DateAdapterInstanceType[\"instanceType\"],\n> extends DateAdapter<T> {\n locale?: any;\n}\n\n/**\n * # Date Adapter Instance Type\n * Supports module augmentation to specify date object types\n */\nexport interface DateAdapterInstanceType {\n instanceType: unknown;\n}\n\nexport const DateAdapterSymbol: InjectionKey<DateAdapterInstance> =\n Symbol.for(\"ev:date-adapter\");\n\nexport type InternalDateOptions<T = unknown> = {\n adapter:\n | (new (options: {\n locale: any;\n formats?: any;\n }) => DateAdapterInstance<T>)\n | DateAdapterInstance<T>;\n formats?: Record<string, any>;\n locale: Record<string, any>;\n};\n\nexport type DateOptions<T = any> = Partial<InternalDateOptions<T>>;\n\n/**\n * # Create Date\n *\n * @param options\n * @param locale\n */\nexport function createDate(\n options: DateOptions | undefined,\n locale: LocaleManager,\n) {\n const date = mergeDeep(\n {\n adapter: DefaultDateAdapter,\n },\n options,\n ) as InternalDateOptions;\n\n const instance = reactive(\n isFunction(date.adapter)\n ? new date.adapter({\n locale: locale.currentLocale.value,\n formats: date.formats,\n })\n : date.adapter,\n );\n\n watch(locale.currentLocale, (value) => {\n instance.locale = value;\n });\n\n return instance;\n}\n\n/**\n * # Use Date\n */\nexport function useDate() {\n const instance = inject(DateAdapterSymbol);\n if (!instance) {\n throw new Error(\"Evance UI: Unable to find injected date adapter.\");\n }\n return instance;\n}\n","import {\n computed,\n ComputedRef,\n inject,\n InjectionKey,\n MaybeRef,\n provide,\n ref,\n Ref,\n shallowRef,\n unref,\n VNode,\n watchEffect,\n} from \"vue\";\nimport {\n getCurrentComponent,\n injectSelf,\n mergeDeep,\n toKebabCase,\n} from \"@/util\";\n\nexport type DefaultsInstance =\n | undefined\n | {\n [key: string]: undefined | Record<string, unknown>;\n global?: Record<string, unknown>;\n };\n\nexport type DefaultsOptions = Partial<DefaultsInstance>;\n\nexport const DefaultsSymbol: InjectionKey<Ref<DefaultsInstance>> =\n Symbol.for(\"ev:defaults\");\n\n/**\n * # createDefaults\n * @param options\n */\nexport function createDefaults(\n options?: DefaultsInstance,\n): Ref<DefaultsInstance> {\n return ref(options);\n}\n\n/**\n * # injectDefaults\n */\nexport function injectDefaults() {\n const defaults = inject(DefaultsSymbol);\n if (!defaults) {\n throw new Error(\"Evance UI: Could not find defaults instance\");\n }\n return defaults;\n}\n\n/**\n * # provideDefaults\n * @param defaults\n * @param options\n */\nexport function provideDefaults(\n defaults?: MaybeRef<DefaultsInstance | undefined>,\n options?: {\n disabled?: MaybeRef<boolean | undefined>;\n reset?: MaybeRef<number | string | undefined>;\n root?: MaybeRef<boolean | string | undefined>;\n scoped?: MaybeRef<boolean | undefined>;\n },\n) {\n const injectedDefaults = injectDefaults();\n const providedDefaults = ref(defaults);\n\n const newDefaults = computed(() => {\n const disabled = unref(options?.disabled);\n if (disabled) {\n return injectedDefaults.value;\n }\n\n const scoped = unref(options?.scoped);\n const reset = unref(options?.reset);\n const root = unref(options?.root);\n\n if (providedDefaults.value == null && !(scoped || reset || root)) {\n return injectedDefaults.value;\n }\n\n let properties = mergeDeep(providedDefaults.value, {\n previous: injectedDefaults.value,\n });\n\n if (scoped) {\n return properties;\n }\n\n if (reset || root) {\n const len = Number(reset || Infinity);\n\n for (let i = 0; i <= len; i++) {\n if (!properties || !(\"previous\" in properties)) {\n break;\n }\n properties = properties.previous;\n }\n\n if (properties && typeof root === \"string\" && root in properties) {\n properties = mergeDeep(\n mergeDeep(properties, { previous: properties }),\n properties[root],\n );\n }\n\n return properties;\n }\n\n return properties.previous\n ? mergeDeep(properties.previous, properties)\n : properties;\n }) as ComputedRef<DefaultsInstance>;\n\n provide(DefaultsSymbol, newDefaults);\n return newDefaults;\n}\n\n/**\n * # propIsDefined\n * @param vnode\n * @param prop\n */\nfunction propIsDefined(vnode: VNode, prop: string) {\n return (\n typeof vnode.props?.[prop] !== \"undefined\" ||\n typeof vnode.props?.[toKebabCase(prop)] !== \"undefined\"\n );\n}\n\n/**\n * # internalUseDefaults\n * @param props\n * @param name\n * @param defaults\n */\nexport function internalUseDefaults(\n props: Record<string, any> = {},\n name?: string,\n defaults = injectDefaults(),\n) {\n const component = getCurrentComponent(\"useDefaults\");\n\n name = name ?? component.type.name ?? component.type.__name;\n if (!name) {\n throw new Error(\"Evance UI: Could not determine component name\");\n }\n\n const componentDefaults = computed(\n () => defaults.value?.[props._as ?? name],\n );\n const internalProps = new Proxy(props, {\n get(target, prop) {\n const propValue = Reflect.get(target, prop);\n if (prop === \"class\" || prop === \"style\") {\n return [componentDefaults.value?.[prop], propValue].filter(\n (v) => v != null,\n );\n } else if (\n typeof prop === \"string\" &&\n !propIsDefined(component.vnode, prop)\n ) {\n return (\n componentDefaults.value?.[prop] ??\n defaults.value?.global?.[prop] ??\n propValue\n );\n }\n return propValue;\n },\n });\n\n const subcomponentDefaults = shallowRef();\n watchEffect(() => {\n if (componentDefaults.value) {\n const subComponents = Object.entries(\n componentDefaults.value,\n ).filter(([key]) => key.startsWith(key[0].toUpperCase()));\n subcomponentDefaults.value = subComponents.length\n ? Object.fromEntries(subComponents)\n : undefined;\n } else {\n subcomponentDefaults.value = undefined;\n }\n });\n\n function provideSubDefaults() {\n const injected = injectSelf(DefaultsSymbol, component);\n provide(\n DefaultsSymbol,\n computed(() => {\n return subcomponentDefaults.value\n ? mergeDeep(\n injected?.value ?? {},\n subcomponentDefaults.value,\n )\n : injected?.value;\n }),\n );\n }\n\n return { props: internalProps, provideSubDefaults };\n}\n\n/**\n * # useDefaults\n *\n * @param props\n * @param name\n */\nexport function useDefaults<T extends Record<string, any>>(\n props: T,\n name?: string,\n): T;\nexport function useDefaults(\n props?: undefined,\n name?: string,\n): Record<string, any>;\nexport function useDefaults(props: Record<string, any> = {}, name?: string) {\n const { props: _props, provideSubDefaults } = internalUseDefaults(\n props,\n name,\n );\n provideSubDefaults();\n return _props;\n}\n","import { inject, InjectionKey, provide } from \"vue\";\nimport { EvDialogInstance } from \"@/components/EvDialog/EvDialogInstance\";\nimport { EvDialogServiceOpener } from \"@/components/EvDialog/EvDialogServiceOpener\";\n\nexport const EvDialogServiceSymbol: InjectionKey<EvDialogServiceOpener> =\n Symbol.for(\"ev:dialog-service\");\nexport const EvDialogInstanceSymbol: InjectionKey<\n EvDialogInstance | undefined\n> = Symbol.for(\"ev:dialog-instance\");\n\n/**\n * # useDialog\n *\n * Requires that the App has provided `EvDialogService`.\n */\nexport function useDialog(): EvDialogServiceOpener {\n const dialogService = inject(EvDialogServiceSymbol);\n if (!dialogService) {\n throw new Error(\"Evance UI: Unable to find injected dialog service\");\n }\n return dialogService;\n}\n\n/**\n * # injectDialog\n */\nexport function injectDialog(): EvDialogInstance | undefined {\n return inject(EvDialogInstanceSymbol);\n}\n\n/**\n * # provideDialog\n * @param instance\n */\nexport function provideDialog(instance: EvDialogInstance | undefined) {\n provide(EvDialogInstanceSymbol, instance);\n}\n","import { propsFactory, toWebUnit } from \"../util\";\nimport { computed } from \"vue\";\n\n/**\n * # Dimensions Props\n */\nexport interface DimensionsProps {\n height?: number | string;\n maxHeight?: number | string;\n maxWidth?: number | string;\n minHeight?: number | string;\n minWidth?: number | string;\n width?: number | string;\n}\n\n/**\n * # Make Dimensions Props\n */\nexport const makeDimensionsProps = propsFactory(\n {\n height: [Number, String],\n maxHeight: [Number, String],\n maxWidth: [Number, String],\n minHeight: [Number, String],\n minWidth: [Number, String],\n width: [Number, String],\n },\n \"dimensions\",\n);\n\n/**\n * # Use Dimensions\n * @param props\n */\nexport function useDimensions(props: DimensionsProps) {\n return computed(() => ({\n height: toWebUnit(props.height),\n maxHeight: toWebUnit(props.maxHeight),\n maxWidth: toWebUnit(props.maxWidth),\n minHeight: toWebUnit(props.minHeight),\n minWidth: toWebUnit(props.minWidth),\n width: toWebUnit(props.width),\n }));\n}\n","import {\n computed,\n inject,\n InjectionKey,\n isRef,\n reactive,\n Ref,\n shallowRef,\n toRefs,\n watchEffect,\n} from \"vue\";\nimport {\n Browser,\n consoleWarn,\n isBoolean,\n isObject,\n isString,\n mergeDeep,\n spaceSeparatedValues,\n toCamelCase,\n toKebabCase,\n toWebUnit,\n trimEnd,\n} from \"@/util\";\nimport { ResponsiveProp, ResponsivePropObject } from \"@/components\";\n\n/**\n * # Breakpoints\n * Excludes `xs` as this is the smallest size - not really a breakpoint.\n */\nexport const breakpoints = [\"sm\", \"md\", \"lg\", \"xl\", \"xxl\"] as const;\n\nexport type Breakpoint = (typeof breakpoints)[number];\n\nexport type DisplayBreakpoint = \"xs\" | Breakpoint;\n\nexport type DisplayThresholds = {\n [key in DisplayBreakpoint]: number;\n};\n\nexport interface DisplayOptions {\n mobileBreakpoint?: number | DisplayBreakpoint;\n thresholds?: Partial<DisplayThresholds>;\n}\n\nexport interface InternalDisplayOptions {\n mobileBreakpoint: number | DisplayBreakpoint;\n thresholds: DisplayThresholds;\n}\n\nexport type SSROptions =\n | boolean\n | {\n clientWidth: number;\n clientHeight?: number;\n };\n\nexport interface DisplayPlatform {\n android: boolean;\n ios: boolean;\n cordova: boolean;\n electron: boolean;\n chrome: boolean;\n edge: boolean;\n firefox: boolean;\n opera: boolean;\n win: boolean;\n mac: boolean;\n linux: boolean;\n touch: boolean;\n ssr: boolean;\n}\n\nexport interface DisplayInstance {\n xs: Ref<boolean>;\n sm: Ref<boolean>;\n md: Ref<boolean>;\n lg: Ref<boolean>;\n xl: Ref<boolean>;\n xxl: Ref<boolean>;\n xsUp: Ref<boolean>;\n smUp: Ref<boolean>;\n mdUp: Ref<boolean>;\n lgUp: Ref<boolean>;\n xlUp: Ref<boolean>;\n xxlUp: Ref<boolean>;\n smDown: Ref<boolean>;\n mdDown: Ref<boolean>;\n lgDown: Ref<boolean>;\n xlDown: Ref<boolean>;\n name: Ref<DisplayBreakpoint>;\n height: Ref<number>;\n width: Ref<number>;\n mobile: Ref<boolean>;\n mobileBreakpoint: Ref<number | DisplayBreakpoint>;\n platform: Ref<DisplayPlatform>;\n thresholds: Ref<DisplayThresholds>;\n\n /** @internal */\n ssr: boolean;\n\n hasActiveRule(rules: DisplayRuleListProp): boolean;\n\n update(): void;\n}\n\nconst parseDisplayOptions = (\n options: DisplayOptions = defaultDisplayOptions,\n) => {\n return mergeDeep(defaultDisplayOptions, options) as InternalDisplayOptions;\n};\n\nfunction getClientWidth(ssr?: SSROptions) {\n return Browser.hasWindow && !ssr\n ? window.innerWidth\n : (isObject(ssr) && ssr.clientWidth) || 0;\n}\n\nfunction getClientHeight(ssr?: SSROptions) {\n return Browser.hasWindow && !ssr\n ? window.innerHeight\n : (isObject(ssr) && ssr.clientHeight) || 0;\n}\n\nfunction getPlatform(ssr?: SSROptions): DisplayPlatform {\n const userAgent =\n Browser.hasWindow && !ssr ? window.navigator.userAgent : \"ssr\";\n\n function isUserAgent(regexp: RegExp) {\n return Boolean(userAgent.match(regexp));\n }\n\n return {\n android: isUserAgent(/android/i),\n ios: isUserAgent(/iphone|ipad|ipod/i),\n cordova: isUserAgent(/cordova/i),\n electron: isUserAgent(/electron/i),\n chrome: isUserAgent(/chrome/i),\n edge: isUserAgent(/edge/i),\n firefox: isUserAgent(/firefox/i),\n opera: isUserAgent(/opera/i),\n win: isUserAgent(/win/i),\n mac: isUserAgent(/mac/i),\n linux: isUserAgent(/linux/i),\n touch: Browser.supportsTouch,\n ssr: userAgent === \"ssr\",\n };\n}\n\nexport const DisplaySymbol: InjectionKey<DisplayInstance> =\n Symbol.for(\"ev:display\");\n\nexport const defaultDisplayOptions: DisplayOptions = {\n mobileBreakpoint: \"lg\",\n thresholds: {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1200,\n xl: 1600,\n xxl: 2400,\n },\n};\n\n/**\n * # Create Display\n * @param options\n * @param ssr\n */\nexport function createDisplay(\n options?: DisplayOptions,\n ssr?: SSROptions,\n): DisplayInstance {\n const { thresholds, mobileBreakpoint } = parseDisplayOptions(options);\n\n const height = shallowRef(getClientHeight(ssr));\n const platform = shallowRef(getPlatform(ssr));\n const state = reactive({} as DisplayInstance);\n const width = shallowRef(getClientWidth(ssr));\n\n function updateSize() {\n height.value = getClientHeight();\n width.value = getClientWidth();\n }\n\n function update() {\n updateSize();\n platform.value = getPlatform();\n }\n\n function hasActiveRule(rules: DisplayRuleListProp): boolean\n {\n const rulesInternal = toDisplayRuleArray(rules);\n for (const rule of rulesInternal) {\n if (!isString(rule)) {\n continue;\n }\n if (!isDisplayRule(rule)) {\n consoleWarn(\n `The display rule '${rule}' is not valid and will be ignored.`,\n );\n continue;\n }\n const displayKey = toDisplayStateKey(rule);\n const displayState = state[displayKey as keyof DisplayInstance];\n if (displayState) {\n return true;\n }\n }\n return false;\n }\n\n // eslint-disable-next-line max-statements\n watchEffect(() => {\n const xs = width.value < thresholds.sm;\n const sm = width.value < thresholds.md && !xs;\n const md = width.value < thresholds.lg && !(sm || xs);\n const lg = width.value < thresholds.xl && !(md || sm || xs);\n const xl = width.value < thresholds.xxl && !(lg || md || sm || xs);\n const xxl = width.value >= thresholds.xxl;\n const name = xs\n ? \"xs\"\n : sm\n ? \"sm\"\n : md\n ? \"md\"\n : lg\n ? \"lg\"\n : xl\n ? \"xl\"\n : \"xxl\";\n const breakpointValue =\n typeof mobileBreakpoint === \"number\"\n ? mobileBreakpoint\n : thresholds[mobileBreakpoint];\n const mobile = width.value < breakpointValue;\n\n state.xs = xs;\n state.sm = sm;\n state.md = md;\n state.lg = lg;\n state.xl = xl;\n state.xxl = xxl;\n state.xsUp = true;\n state.smUp = !xs;\n state.mdUp = !(xs || sm);\n state.lgUp = !(xs || sm || md);\n state.xlUp = !(xs || sm || md || lg);\n state.xxlUp = !(xs || sm || md || lg || xl);\n state.smDown = !(md || lg || xl || xxl);\n state.mdDown = !(lg || xl || xxl);\n state.lgDown = !(xl || xxl);\n state.xlDown = !xxl;\n state.name = name;\n state.height = height.value;\n state.width = width.value;\n state.mobile = mobile;\n state.mobileBreakpoint = mobileBreakpoint;\n state.platform = platform.value;\n state.thresholds = thresholds;\n });\n\n if (Browser.hasWindow) {\n window.addEventListener(\"resize\", updateSize, { passive: true });\n }\n\n return {\n ...toRefs(state),\n update,\n hasActiveRule,\n ssr: !!ssr,\n };\n}\n\n/**\n * # Use Display (from Symbol);\n */\nexport function useDisplay() {\n const display = inject(DisplaySymbol);\n if (!display) {\n throw new Error(\n \"Evance UI: Could not find `ev:display` injection symbol\",\n );\n }\n return display;\n}\n\n/**\n * # Display Point Options\n *\n * These are listed in order of calculation priority.\n */\nexport const displayRules = [\n \"xxl\",\n \"xl\",\n \"lg\",\n \"md\",\n \"sm\",\n \"xs\",\n \"xxlOnly\",\n \"xlOnly\",\n \"lgOnly\",\n \"mdOnly\",\n \"smOnly\",\n \"xsOnly\",\n \"xxlUp\",\n \"xlUp\",\n \"lgUp\",\n \"mdUp\",\n \"smUp\",\n \"xsUp\",\n \"smDown\",\n \"mdDown\",\n \"lgDown\",\n \"xlDown\",\n] as const;\nexport const displayRulesKebab = [\n \"xxl-only\",\n \"xl-only\",\n \"lg-only\",\n \"md-only\",\n \"sm-only\",\n \"xs-only\",\n \"xxl-up\",\n \"xl-up\",\n \"lg-up\",\n \"md-up\",\n \"sm-up\",\n \"xs-up\",\n \"sm-down\",\n \"md-down\",\n \"lg-down\",\n \"xl-down\",\n] as const;\n\nexport type DisplayRuleSuffix = \"only\" | \"up\" | \"down\";\nexport type DisplayRuleKey = (typeof displayRules)[number];\nexport type DisplayRuleKebab = (typeof displayRulesKebab)[number];\nexport type DisplayRuleValue = number | string;\nexport type DisplayRuleObject = {\n [key in DisplayRuleKey]?: DisplayRuleValue;\n};\nexport type DisplayRuleProp = DisplayRuleValue | DisplayRuleObject;\nexport type DisplayRuleListProp =\n | DisplayRuleKey\n | DisplayRuleKey[]\n | DisplayRuleKebab\n | DisplayRuleKebab[]\n | { [key in DisplayRuleKey]?: DisplayRuleSuffix };\n\n/** Visibility props */\nexport type VisibilityRuleProp = DisplayRuleListProp | boolean;\n\n/**\n * # calculateDisplayRuleValue\n *\n * @param rules\n */\nexport function calculateDisplayRuleValue(\n rules?: DisplayRuleObject | DisplayRuleValue,\n) {\n const display = useDisplay();\n if (!isObject(rules)) {\n return toWebUnit(rules);\n }\n for (const ruleKey of displayRules) {\n const displayKey = toDisplayStateKey(ruleKey);\n const displayState = display[displayKey as keyof DisplayInstance];\n if (isRef(displayState) && displayState.value && !!rules[ruleKey]) {\n return toWebUnit(rules[ruleKey]);\n }\n }\n return undefined;\n}\n\n/**\n * # To Display Key\n *\n * @param displayRule\n */\nexport function toDisplayStateKey(displayRule: string): string {\n if (toDisplayStateKey.cache.has(displayRule)) {\n return toDisplayStateKey.cache.get(displayRule)!;\n }\n let value = toCamelCase(displayRule);\n if (isDisplayBreakpoint(value)) {\n value = `${value}Up`;\n }\n value = trimEnd(value, \"Only\");\n toKebabCase.cache.set(displayRule, value);\n return value;\n}\ntoDisplayStateKey.cache = new Map<string, string>();\n\n/**\n * # To Display Rule Kebab\n *\n * @param displayRule\n */\nexport function toDisplayRuleKebab(displayRule: string): string {\n if (toDisplayRuleKebab.cache.has(displayRule)) {\n return toDisplayRuleKebab.cache.get(displayRule)!;\n }\n let value = toKebabCase(displayRule);\n if (isDisplayBreakpoint(value)) {\n value = `${value}-up`;\n }\n toDisplayRuleKebab.cache.set(displayRule, value);\n return value;\n}\ntoDisplayRuleKebab.cache = new Map<string, string>();\n\n/**\n * # isDisplayRule\n *\n * @param value\n * @param acceptKebabs\n */\nexport function isDisplayRule(\n value: unknown,\n acceptKebabs: boolean = true,\n): value is DisplayRuleKey | DisplayRuleKebab {\n return (\n displayRules.includes(value as DisplayRuleKey) ||\n (acceptKebabs && displayRulesKebab.includes(value as DisplayRuleKebab))\n );\n}\n\n/**\n * # isDisplayBreakpoint\n *\n * @param value\n */\nexport function isDisplayBreakpoint(\n value: unknown,\n): value is DisplayBreakpoint {\n return [\"xs\", ...breakpoints].includes(value as DisplayBreakpoint);\n}\n\n/**\n * # createBreakpointClasses\n *\n * @param props\n * @param propName\n * @param prefix\n * @param useXs\n */\nexport function useBreakpointClasses<\n PropsObject extends object,\n PropName extends Extract<keyof PropsObject, string>,\n Prefix extends string | undefined,\n UseXs extends boolean,\n>(\n props: PropsObject,\n propName: PropName,\n prefix: Prefix = undefined as Prefix,\n useXs: UseXs = false as UseXs,\n) {\n return computed(() => {\n const prop = props[propName] as ResponsiveProp;\n if (!prop) {\n return [];\n }\n const classes = [];\n const values =\n typeof prop !== \"object\"\n ? ({ xs: prop } as ResponsivePropObject)\n : prop;\n for (const [breakpoint, value] of Object.entries(values)) {\n const className = [];\n if (prefix) {\n className.push(prefix);\n }\n if (useXs || breakpoint !== \"xs\") {\n className.push(breakpoint);\n }\n className.push(value);\n classes.push(className.join(\"-\"));\n }\n return classes;\n });\n}\n\n/**\n * # useDisplayRuleClasses\n *\n * @param props\n * @param propName\n * @param prefix\n */\nexport function useDisplayRuleClasses<\n PropsObject extends object,\n PropName extends Extract<keyof PropsObject, string>,\n Prefix extends string | undefined,\n>(\n props: PropsObject,\n propName: PropName,\n prefix: Prefix = undefined as Prefix,\n) {\n return computed(() => {\n const classes = [];\n const rules = toDisplayRuleArray(props[propName]);\n for (const rule of rules) {\n if (!isString(rule)) {\n // Gracefully ignore anything that is not a string.\n continue;\n }\n if (!isDisplayRule(rule)) {\n consoleWarn(\n `The display rule '${rule}' is not valid and will be ignored.`,\n );\n continue;\n }\n const suffix = toDisplayRuleKebab(rule);\n classes.push(`${prefix}-${suffix}`);\n }\n return classes;\n });\n}\n\n/**\n * # toDisplayRuleArray\n *\n * @param prop\n */\nexport function toDisplayRuleArray(prop: unknown): string[] {\n if (Array.isArray(prop)) {\n return prop;\n }\n if (isString(prop)) {\n return spaceSeparatedValues(prop as string);\n }\n if (isObject(prop)) {\n return <string[]>Object.entries(prop)\n .map(([key, value]) => {\n if (isBoolean(value)) {\n return value ? key : undefined;\n }\n return isString(value)\n ? `${key}-${value.toLowerCase()}`\n : undefined;\n })\n .filter((value) => value !== undefined);\n }\n return [];\n}","import { inject, InjectionKey, provide } from \"vue\";\nimport { EvDrawerInstance } from \"@/components/EvDrawer/EvDrawerInstance\";\nimport { EvDrawerServiceOpener } from \"@/components/EvDrawer/EvDrawerServiceOpener\";\n\nexport const EvDrawerServiceSymbol: InjectionKey<EvDrawerServiceOpener> =\n Symbol.for(\"ev:drawer-service\");\nexport const EvDrawerInstanceSymbol: InjectionKey<\n EvDrawerInstance | undefined\n> = Symbol.for(\"ev:drawer-instance\");\n\n/**\n * # useDrawer\n *\n * Requires that the App has provided `EvDrawerService`.\n */\nexport function useDrawer(): EvDrawerServiceOpener {\n const service = inject(EvDrawerServiceSymbol);\n if (!service) {\n throw new Error(\"Evance UI: Unable to find injected drawer service\");\n }\n return service;\n}\n\n/**\n * # injectDrawer\n */\nexport function injectDrawer(): EvDrawerInstance | undefined {\n return inject(EvDrawerInstanceSymbol);\n}\n\n/**\n * # provideDrawer\n * @param instance\n */\nexport function provideDrawer(instance: EvDrawerInstance | undefined) {\n provide(EvDrawerInstanceSymbol, instance);\n}\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M12 6L13.414 7.414L9.828 11H18V13H9.828L13.414 16.586L12 18L6 12L12 6Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M12 6L10.586 7.414L14.172 11H6V13H14.172L10.586 16.586L12 18L18 12L12 6Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M20.0156 12L12 20.0156L3.98438 12L5.39063 10.5938L11.0156 16.1719L11.0156 3.98438L12.9844 3.98438L12.9844 16.1719L18.6094 10.5938L20.0156 12Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M4 12.0156L12.0156 4L20.0313 12.0156L18.625 13.4219L13 7.84375L13 20.0313L11.0312 20.0313L11.0313 7.84375L5.40625 13.4219L4 12.0156Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M20 4H19V2H17V4H7V2H5V4H4C2.9 4 2 4.81818 2 5.81818V20.1818C2 21.1818 2.9 22 4 22H20C21.1 22 22 21.1818 22 20.1818V5.81818C22 4.81818 21.1 4 20 4ZM20 20H4V9H20V20Z\" }, null, -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M14 12H17V15H14V12Z\" }, null, -1)\nconst _hoisted_4 = [\n _hoisted_2,\n _hoisted_3\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_4))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M18.9844 6.42188L13.4062 12L18.9844 17.5781L17.5781 18.9844L12 13.4062L6.42188 18.9844L5.01562 17.5781L10.5938 12L5.01562 6.42188L6.42188 5.01562L12 10.5938L17.5781 5.01562L18.9844 6.42188Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21ZM15.4852 8.68629L16.8994 10.1005L11 16L7.34326 12.3431L8.75748 10.9289L11 13.1715L15.4852 8.68629Z\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M19.8996 7.60051L18.4854 6.18629L10.0002 14.6715L5.7576 10.4289L4.34338 11.8431L10.0001 17.5L19.8996 7.60051Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M16 9L12 13L8 9L7 10L12 15L17 10L16 9Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M15 16L11 12L15 8L14 7L9 12L14 17L15 16Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M9 8L13 12L9 16L10 17L15 12L10 7L9 8Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M8 15L12 11L16 15L17 14L12 9L7 14L8 15Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M2.41416 10.5858C1.63311 11.3668 1.63311 12.6332 2.41416 13.4142L10.5858 21.5858C11.3668 22.3669 12.6332 22.3669 13.4142 21.5858L21.5858 13.4142C22.3669 12.6332 22.3669 11.3668 21.5858 10.5858L13.4142 2.41416C12.6332 1.63311 11.3668 1.63311 10.5858 2.41416L2.41416 10.5858ZM11.0001 6.99999H13.0001V13H11.0001V6.99999ZM11.0001 15H13.0001V17H11.0001V15Z\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"2\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M3 6H21V8H3V6ZM6 11H18V13H6V11ZM14 16H10V18H14V16Z\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M12 2C6.47708 2 2 6.47708 2 12C2 17.5229 6.47708 22 12 22C17.5219 22 22 17.5229 22 11.999C22 6.47708 17.5219 2 12 2ZM11.8427 17.8323H11.7896C10.975 17.8083 10.4 17.2073 10.424 16.4042C10.4469 15.6146 11.0354 15.0406 11.8229 15.0406L11.8708 15.0427C12.7083 15.0667 13.2771 15.6615 13.2531 16.4875C13.2292 17.2792 12.651 17.8323 11.8427 17.8323ZM15.2708 11.0292C15.0792 11.3 14.6583 11.6396 14.1271 12.0531L13.5417 12.4562C13.2208 12.7062 13.0271 12.9427 12.9552 13.1729C12.8969 13.3542 12.8698 13.4031 12.8646 13.7729V13.8667H10.6302L10.6365 13.6771C10.6646 12.9021 10.6833 12.4437 11.0052 12.0656C11.5104 11.474 12.625 10.7552 12.6719 10.725C12.8323 10.6052 12.9667 10.4687 13.0667 10.3219C13.301 9.99792 13.4042 9.74375 13.4042 9.49583C13.4042 9.14792 13.3021 8.82604 13.099 8.54167C12.9031 8.26458 12.5312 8.12708 11.9938 8.12708C11.4604 8.12708 11.0948 8.29583 10.8771 8.64375C10.6521 8.99896 10.5385 9.37292 10.5385 9.75521V9.85104H8.23542L8.23958 9.75104C8.29896 8.34167 8.80312 7.32604 9.73437 6.73333C10.3208 6.35729 11.051 6.16667 11.9021 6.16667C13.0146 6.16667 13.9563 6.4375 14.6958 6.97083C15.4469 7.51146 15.8271 8.32187 15.8271 9.37812C15.826 9.96875 15.6396 10.524 15.2708 11.0292Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M5 2C3.34315 2 2 3.34315 2 5V19C2 20.6569 3.34315 22 5 22H19C20.6569 22 22 20.6569 22 19V5C22 3.34315 20.6569 2 19 2H5ZM13.7426 8L19.2427 15H8.24262L8.24265 15H5L9.24265 9.60027L10.864 11.6638L13.7426 8Z\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M11.8663 2.00091C6.34444 2.07484 1.92695 6.61185 2.00092 12.1348C2.07484 17.6545 6.61185 22.073 12.1337 21.9991C17.6555 21.9252 22.073 17.3881 21.9991 11.8652C21.9263 6.34444 17.3881 1.92699 11.8663 2.00091H11.8663ZM12.975 5.33355C13.9913 5.33355 14.2913 5.92269 14.2913 6.59771C14.2913 7.44012 13.6163 8.21947 12.4652 8.21947C11.5022 8.21947 11.0445 7.73471 11.0717 6.93468C11.0717 6.25965 11.6369 5.33355 12.975 5.33355ZM10.3685 18.2501C9.6739 18.2501 9.16518 17.8283 9.65105 15.974L10.4478 12.6869C10.5859 12.1598 10.6087 11.9489 10.4478 11.9489C10.2402 11.9489 9.33804 12.313 8.80432 12.6717L8.45759 12.1032C10.1478 10.6923 12.0914 9.86407 12.9239 9.86407C13.6185 9.86407 13.7337 10.6858 13.387 11.95L12.474 15.4065C12.3131 16.0174 12.3826 16.2283 12.5436 16.2283C12.7511 16.2283 13.4349 15.9761 14.1066 15.4478L14.499 15.975C12.8566 17.6174 11.0642 18.25 10.3685 18.25L10.3685 18.2501Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"m12 15.4-6-6L7.4 8l4.6 4.6L16.6 8 18 9.4l-6 6Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"m14 18-6-6 6-6 1.4 1.4-4.6 4.6 4.6 4.6L14 18Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M12.6 12 8 7.4 9.4 6l6 6-6 6L8 16.6l4.6-4.6Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"m12 10.8-4.6 4.6L6 14l6-6 6 6-1.4 1.4-4.6-4.6Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"m11.4 16 2.6-2.6 2.6 2.6 1.4-1.4-2.6-2.6L18 9.4 16.6 8 14 10.6 11.4 8 10 9.4l2.6 2.6-2.6 2.6 1.4 1.4ZM9 20a1.985 1.985 0 0 1-1.6-.8L2 12l5.4-7.2a1.91 1.91 0 0 1 .7-.587C8.383 4.07 8.683 4 9 4h11c.55 0 1.02.196 1.413.588.391.391.587.862.587 1.412v12c0 .55-.196 1.02-.587 1.413A1.926 1.926 0 0 1 20 20H9Zm-4.5-8L9 18h11V6H9l-4.5 6Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M6.5 21a3.372 3.372 0 0 1-2.475-1.025A3.372 3.372 0 0 1 3 17.5c0-.967.342-1.792 1.025-2.475A3.372 3.372 0 0 1 6.5 14H8v-4H6.5a3.372 3.372 0 0 1-2.475-1.025A3.372 3.372 0 0 1 3 6.5c0-.967.342-1.792 1.025-2.475A3.372 3.372 0 0 1 6.5 3c.967 0 1.792.342 2.475 1.025A3.372 3.372 0 0 1 10 6.5V8h4V6.5c0-.967.342-1.792 1.025-2.475A3.372 3.372 0 0 1 17.5 3c.967 0 1.792.342 2.475 1.025A3.372 3.372 0 0 1 21 6.5c0 .967-.342 1.792-1.025 2.475A3.372 3.372 0 0 1 17.5 10H16v4h1.5c.967 0 1.792.342 2.475 1.025A3.372 3.372 0 0 1 21 17.5c0 .967-.342 1.792-1.025 2.475A3.372 3.372 0 0 1 17.5 21a3.372 3.372 0 0 1-2.475-1.025A3.372 3.372 0 0 1 14 17.5V16h-4v1.5c0 .967-.342 1.792-1.025 2.475A3.372 3.372 0 0 1 6.5 21Zm0-2c.417 0 .77-.146 1.063-.438.291-.291.437-.645.437-1.062V16H6.5c-.417 0-.77.146-1.063.438A1.447 1.447 0 0 0 5 17.5c0 .417.146.77.438 1.063.291.291.645.437 1.062.437Zm11 0c.417 0 .77-.146 1.063-.438.291-.291.437-.645.437-1.062 0-.417-.146-.77-.438-1.063A1.446 1.446 0 0 0 17.5 16H16v1.5c0 .417.146.77.438 1.063.291.291.645.437 1.062.437ZM10 14h4v-4h-4v4ZM6.5 8H8V6.5c0-.417-.146-.77-.438-1.063A1.447 1.447 0 0 0 6.5 5c-.417 0-.77.146-1.063.438A1.447 1.447 0 0 0 5 6.5c0 .417.146.77.438 1.063.291.291.645.437 1.062.437ZM16 8h1.5c.417 0 .77-.146 1.063-.438.291-.291.437-.645.437-1.062 0-.417-.146-.77-.438-1.063A1.447 1.447 0 0 0 17.5 5c-.417 0-.77.146-1.063.438A1.446 1.446 0 0 0 16 6.5V8Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M6.4 13.4 5 12l7-7 7 7-1.4 1.4L12 7.825 6.4 13.4Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M14.775 19 7.85 7H3V5h6l6.925 12H21v2h-6.225ZM15 7V5h6v2h-6Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"m9 18-6-6 6-6 1.4 1.4L6.8 11H19V7h2v6H6.8l3.6 3.6L9 18Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M8 21v-8H3l9-11 9 11h-5v8H8Zm2-2h4v-8h2.775L12 5.15 7.225 11H10v8Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M4 15V9h2v4h12V9h2v6H4Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M20 18V6h2v12h-2Zm-8 0-1.425-1.4 3.6-3.6H2v-2h12.175L10.6 7.4 12 6l6 6-6 6Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M19 13H5V11H19V13Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM14 17H7V15H14V17ZM17 13H7V11H17V13ZM17 9H7V7H17V9Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M19 13H13V19H11V13H5C5.00005 12.3333 5.00005 11.6667 5 11H11V5H13V11H19V13Z\" }, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M13.1253 14.4981C14.246 13.8497 15 12.6379 15 11.25C15 9.17893 13.3211 7.5 11.25 7.5C9.17893 7.5 7.5 9.17893 7.5 11.25C7.5 13.2507 9.06682 14.8855 11.0404 14.9942L12.6872 17.8467C12.2241 17.9471 11.7432 18 11.25 18C7.52208 18 4.5 14.9779 4.5 11.25C4.5 7.52208 7.52208 4.5 11.25 4.5C14.9779 4.5 18 7.52208 18 11.25C18 12.6321 17.5846 13.9172 16.8719 14.9872L19.4773 19.5H16.0132L14.6256 17.0966C14.6256 17.0966 14.6256 17.0966 14.6256 17.0966L13.1253 14.4981Z\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M16 11C16 13.7614 13.7614 16 11 16C8.23858 16 6 13.7614 6 11C6 8.23858 8.23858 6 11 6C13.7614 6 16 8.23858 16 11ZM15.1922 16.6064C14.0236 17.4816 12.5723 18 11 18C7.13401 18 4 14.866 4 11C4 7.13401 7.13401 4 11 4C14.866 4 18 7.13401 18 11C18 12.5723 17.4816 14.0236 16.6064 15.1922L20.7213 19.3071L19.3071 20.7213L15.1922 16.6064Z\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M20 12C20 16.4183 16.4183 20 12 20C7.58172 20 4 16.4183 4 12C4 7.58172 7.58172 4 12 4C16.4183 4 20 7.58172 20 12ZM22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM11 7H13V11.8454L15.8609 13.4971L14.8609 15.2291L11 13.0001L11 13V7Z\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M12.8762 2.59316C12.4963 1.90238 11.5037 1.90238 11.1238 2.59315L1.81503 19.5181C1.44848 20.1846 1.93064 21 2.69124 21H21.3087C22.0693 21 22.5515 20.1846 22.1849 19.5181L12.8762 2.59316ZM11 8.00004H13V14H11V8.00004ZM11 16H13V18H11V16Z\"\n}, null, -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}\nexport default { render: render }","import { ComponentPublicInstance, FunctionalComponent, PropType } from \"vue\";\nimport { Appearance } from \"@/util\";\nimport {\n CheckCircleIcon,\n DangerIcon,\n HelpIcon,\n InfoIcon,\n NoteIcon,\n WarningIcon,\n} from \"@/icons\";\n\nexport type JsxComponent<Props = any> =\n | { new (): ComponentPublicInstance<Props> }\n | FunctionalComponent<Props>;\n\nexport type IconValue =\n | string\n | (string | [path: string, opacity: number])[]\n | JsxComponent;\n\nexport const IconProp = [\n String,\n Function,\n Object,\n Array,\n] as PropType<IconValue>;\n\n/**\n * # appearanceIcon\n *\n * Returns the default icon associated with an appearance value.\n *\n * @param appearance\n */\nexport function appearanceIcon(appearance?: string) {\n switch (appearance) {\n case Appearance.danger:\n return DangerIcon;\n case Appearance.information:\n return InfoIcon;\n case Appearance.success:\n return CheckCircleIcon;\n case Appearance.notice:\n return NoteIcon;\n case Appearance.warning:\n return WarningIcon;\n }\n return HelpIcon;\n}\n","import { Ref } from \"vue\";\nimport { LocaleCode } from \"@/modules/Locale/LocaleCode\";\n\n/**\n * # Localized\n */\nexport class Localized {\n /**\n * @param defaultLocale\n * @param currentLocale\n */\n constructor(\n public readonly defaultLocale: Ref<string>,\n public readonly currentLocale: Ref<string>,\n ) {}\n\n /**\n * ## Get Translation Codes\n *\n * Returns all the translation codes for the Locale we should use when getting a translatable.\n * This includes a fallback to our default TranslationCode.\n *\n * @param locale\n */\n public getTranslationCodes(locale: string): string[] {\n const localeCode = LocaleCode.fromString(locale) as LocaleCode;\n const translationCodes = localeCode.toTranslationCodes();\n // Add our default if it is not in the list\n if (\n !translationCodes.find(\n (code: string) => code === this.defaultLocale.value,\n )\n ) {\n translationCodes.push(this.defaultLocale.value);\n }\n return translationCodes;\n }\n\n /**\n * ## Set Current Locale\n *\n * Set the current locale so that we don't have to use it in each translate call,\n * unless we want to.\n *\n * @param locale\n */\n public setCurrentLocale(locale: string): void {\n this.currentLocale.value = locale;\n }\n\n /**\n * ## Set Default Locale\n *\n * The default locale to use if translations are unavailable for the current locale.\n *\n * @param locale\n */\n public setDefaultLocale(locale: string): void {\n this.defaultLocale.value = locale;\n }\n}\n","import { Localized } from \"@/modules/Locale/Localized\";\n\n/**\n * # Number Formatter\n */\nexport class NumberFormatter extends Localized {\n public format(\n value: number,\n options?: Intl.NumberFormatOptions,\n locale?: string,\n ) {\n return this.formatter(options, locale).format(value);\n }\n\n public formatter(options?: Intl.NumberFormatOptions, locale?: string) {\n if (!locale) {\n locale = this.currentLocale.value ?? this.defaultLocale.value;\n }\n return new Intl.NumberFormat(this.getTranslationCodes(locale), options);\n }\n}\n","import { isBoolean, isObject, isString } from \"@/util\";\n\n/**\n * # Pluralization\n *\n * Pluralization supports cardinal and ordinal values.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/PluralRules\n */\nexport const pluralizationRuleKeys = [\n \"zero\",\n \"one\",\n \"two\",\n \"few\",\n \"many\",\n \"other\",\n] as const;\n\nexport type PluralizationRuleKey = (typeof pluralizationRuleKeys)[number];\n\nexport type PluralizationRules = {\n [K in PluralizationRuleKey]?: string;\n} & {\n ordinal?: boolean;\n};\n\n/**\n * ## Is Pluralization Key\n *\n * Determines whether the value supplied represents a valid pluralization rule key.\n *\n * @param key\n */\nexport function isPluralizationKey(key: any): key is PluralizationRuleKey {\n return pluralizationRuleKeys.includes(key);\n}\n\n/**\n * # Is Pluralization Rules\n *\n * Determines whether a value contains an object with pluralization rules within it.\n *\n * @param value\n */\nexport function isPluralizationRules(value: any): value is PluralizationRules {\n if (isObject(value)) {\n return Object.entries(value).every(([key, val]) => {\n return (\n (isPluralizationKey(key) && isString(val)) ||\n (key === \"ordinal\" && isBoolean(val))\n );\n });\n }\n return false;\n}\n","import {\n isPluralizationRules,\n PluralizationRuleKey,\n PluralizationRules,\n} from \"@/modules/Translation/Pluralization\";\nimport { TranslationVariables } from \"@/modules/Translation/Translator\";\nimport {\n createStringTemplate,\n isNumber,\n isString,\n TemplateVariables,\n} from \"@/util\";\n\n/**\n * # Translatable\n */\nexport class Translatable {\n constructor(\n public translationCode: string,\n public reference: string,\n public data: string | PluralizationRules,\n ) {}\n\n get defaultText(): string {\n if (typeof this.data === \"string\") {\n return this.data;\n }\n return this.getText(\"other\") ?? \"\";\n }\n\n get isString(): boolean {\n return isString(this.data);\n }\n\n get isPluralization() {\n return isPluralizationRules(this.data);\n }\n\n public getText(rule: PluralizationRuleKey): string | null {\n if (typeof this.data === \"string\") {\n return this.data;\n }\n const value = this.data[rule] ?? null;\n return value === null ? this.data[\"other\"] ?? null : value;\n }\n\n /**\n * ## Translate\n * @param variables\n */\n public translate(variables: TranslationVariables = {}): string | undefined {\n if (isString(this.data)) {\n return createStringTemplate(\n this.defaultText,\n variables as TemplateVariables,\n )();\n }\n // If the translatable is a set of pluralization rules then we expect at least one number value\n if (isPluralizationRules(this.data)) {\n // Find the first number in the options\n const keyToPluralize = Object.keys(variables).find((key) =>\n isNumber(variables[key]),\n );\n if (keyToPluralize === undefined) {\n console.error(\n `Could not find a number to pluralize in translation options for '${this.reference}'.`,\n );\n return undefined;\n }\n const rules = new Intl.PluralRules(this.translationCode, {\n type: this.data.ordinal || false ? \"ordinal\" : \"cardinal\",\n });\n const rule = rules.select(variables[keyToPluralize] as number);\n const text = this.getText(rule);\n if (text === null) {\n console.error(\n `Pluralization rule '${rule}' or 'other' unavailable for '${this.reference}'.`,\n );\n return undefined;\n }\n return createStringTemplate(text, variables as TemplateVariables)();\n }\n console.error(`Invalid translatable for '${this.reference}'.`);\n return undefined;\n }\n}\n","import { getPropertyValueByPath } from \"@/util\";\nimport { Translatable } from \"@/modules/Translation/Translatable\";\nimport { PluralizationRules } from \"@/modules/Translation/Pluralization\";\n\n/**\n * # Language Pack\n */\nexport class LanguagePack {\n /**\n * @param translationCode\n * @param data\n */\n constructor(\n public translationCode: string,\n public data: LanguagePackData = {},\n ) {}\n\n /**\n * ## Get Translatable\n * @param reference\n */\n public getTranslatable(reference: string): Translatable | null {\n try {\n const translationData = getPropertyValueByPath(\n this.data,\n reference,\n null,\n );\n if (!translationData) {\n return null;\n }\n return new Translatable(\n this.translationCode,\n reference,\n translationData,\n );\n } catch (e) {\n return null;\n }\n }\n}\n\n/**\n * # Language Pack Data\n */\nexport interface LanguagePackData {\n [key: string]: LanguagePackData | PluralizationRules | string;\n}\n","import {\n LanguagePack,\n LanguagePackData,\n} from \"@/modules/Translation/LanguagePack\";\nimport { Translatable } from \"@/modules/Translation/Translatable\";\nimport { Localized } from \"@/modules/Locale/Localized\";\n\n/**\n * # Translation Options\n *\n * When requesting a translation you may supply an object with keys matching\n * the variable names of the string template within a Language Pack.\n *\n * The only reserved key term is `ordinal`, which is reserved for telling the\n * translator that we should expect an ordinal, not a cardinal translation\n * from a pluralization rule set.\n *\n */\nexport type TranslationVariables = {\n [key: string]: string | number | boolean;\n};\n\n/**\n * # Translator\n */\nexport class Translator extends Localized {\n private languagePacks: LanguagePack[] = [];\n\n private translatables: Map<string, Translatable> = new Map();\n\n /**\n * ## Add Language Pack\n *\n * The new language pack is added to the beginning of the array of available language packs.\n * This makes it possible for subsequent language packs to override references.\n *\n * @param locale\n * @param messages\n */\n public addLanguagePack(locale: string, messages: LanguagePackData): void {\n this.languagePacks.unshift(new LanguagePack(locale, messages));\n }\n\n /**\n * ## Get Closest Translatable\n *\n * Returns the closest available translatable object matching the reference supplied across all\n * language packs matching translation codes from the locale, or the default.\n *\n * For example if a locale was supplied of \"de-de\", and our default translations were in \"en\",\n * then we would search for language packs \"de-de\", \"de\" and \"en\" in sequence.\n *\n * @param locale\n * @param reference\n */\n private getClosestTranslatable(\n locale: string,\n reference: string,\n ): Translatable | undefined {\n const translatableKey = `${locale}:${reference}`;\n\n if (this.translatables.has(translatableKey)) {\n return this.translatables.get(translatableKey);\n }\n\n const translationCodes = this.getTranslationCodes(locale);\n for (const translationCode of translationCodes) {\n const translatable = this.getTranslatable(\n translationCode,\n reference,\n );\n if (translatable) {\n this.translatables.set(translatableKey, translatable);\n return translatable;\n }\n }\n return undefined;\n }\n\n /**\n * ## Get Language Packs\n */\n public getLanguagePacks(): LanguagePack[] {\n return this.languagePacks;\n }\n\n /**\n * # Get Language Packs for TranslationCode\n *\n * Returns the all available language pack matching the translation code.\n *\n * @param translationCode\n */\n private getLanguagePacksForTranslationCode(\n translationCode: string,\n ): LanguagePack[] {\n return this.languagePacks.filter((languagePack) => {\n return languagePack.translationCode === translationCode;\n });\n }\n\n /**\n * ## Get Translatable\n *\n * Returns a translatable item from a language pack matching the supplied translation code.\n * Returns `null` if either the language pack is unavailable, or if the\n *\n * @param translationCode\n * @param reference\n */\n private getTranslatable(\n translationCode: string,\n reference: string,\n ): Translatable | null {\n const packs = this.getLanguagePacksForTranslationCode(translationCode);\n for (const pack of packs) {\n const translatable = pack.getTranslatable(reference);\n if (translatable) {\n return translatable;\n }\n }\n return null;\n }\n\n /**\n * ## Translate\n *\n * @param locale\n * @param reference\n * @param variables\n */\n public translate(\n reference: string,\n variables: TranslationVariables = {},\n locale: string | undefined = undefined,\n ): string | undefined {\n if (!locale) {\n locale = this.currentLocale.value ?? this.defaultLocale.value;\n }\n const translatable = this.getClosestTranslatable(locale, reference);\n if (translatable) {\n return translatable.translate(variables);\n }\n const fallback = new Translatable(locale, reference, reference);\n return fallback.translate(variables);\n }\n}\n","export default {\n carousel: {\n next: \"Next\",\n previous: \"Previous\",\n },\n close: \"Close\",\n dismiss: \"Dismiss\",\n expand: \"Expand\",\n greeting: \"Hello { name }\",\n hotkey: {\n then: \"then\",\n ctrl: \"Ctrl\",\n command: \"Command\",\n space: \"Space\",\n shift: \"Shift\",\n alt: \"Alt\",\n enter: \"Enter\",\n escape: \"Escape\",\n arrowUp: \"Up Arrow\",\n arrowDown: \"Down Arrow\",\n arrowLeft: \"Left Arrow\",\n arrowRight: \"Right Arrow\",\n backspace: \"Backspace\",\n option: \"Option\",\n plus: \"plus\",\n shortcut: \"Keyboard shortcut: { value }\",\n or: \"or\",\n tab: \"Tab\",\n },\n infiniteScroll: {\n more: \"Load more\",\n finished: \"No more\",\n },\n placement: {\n one: \"{ value }st\",\n two: \"{ value }nd\",\n few: \"{ value }rd\",\n other: \"{ value }th\",\n ordinal: true,\n },\n search: {\n filter: \"Filter\",\n placeholder: \"Search...\",\n },\n sort: {\n label: \"Sort\",\n heading: \"Sort by\",\n direction: \"Direction\",\n ascending: \"Ascending\",\n descending: \"Descending\",\n },\n select: {\n noItemsText: \"No items available\",\n },\n table: {\n empty: \"No results\",\n },\n time: {\n years: {\n title: \"Years\",\n value: {\n one: \"{ value } year\",\n other: \"{ value } years\",\n },\n },\n months: {\n title: \"Months\",\n value: {\n one: \"{ value } month\",\n other: \"{ value } months\",\n },\n },\n days: {\n title: \"Days\",\n value: {\n one: \"{ value } day\",\n other: \"{ value } days\",\n },\n },\n hours: {\n title: \"Hours\",\n value: {\n one: \"{ value } hour\",\n other: \"{ value } hours\",\n },\n },\n minutes: {\n title: \"Minutes\",\n value: {\n one: \"{ value } minute\",\n other: \"{ value } minutes\",\n },\n },\n seconds: {\n title: \"Seconds\",\n value: {\n one: \"{ value } second\",\n other: \"{ value } seconds\",\n },\n },\n },\n months: {\n one: \"{ value } month\",\n other: \"{ value } months\",\n },\n};\n","import { Localized } from \"@/modules/Locale/Localized\";\nimport { NumberFormatter } from \"@/modules/NumberFormatter\";\nimport { Translator } from \"@/modules/Translation/Translator\";\n\nimport en from \"@/locale/en\";\nimport { shallowRef } from \"vue\";\nimport { LanguagePackData } from \"@/modules/Translation/LanguagePack\";\n\n/**\n * # Locale Manager\n *\n * Note: in Evance 'en' is always the default locale.\n */\nexport class LocaleManager extends Localized {\n public readonly numberFormatter: NumberFormatter;\n\n public readonly translator: Translator;\n\n constructor(localeOptions: LocaleOptions) {\n const currentLocale = shallowRef(localeOptions?.locale ?? \"en-GB\");\n const defaultLocale = shallowRef(\"en-GB\");\n super(defaultLocale, currentLocale);\n\n this.numberFormatter = new NumberFormatter(\n this.defaultLocale,\n this.currentLocale,\n );\n this.translator = new Translator(\n this.defaultLocale,\n this.currentLocale,\n );\n this.translator.addLanguagePack(this.defaultLocale.value, en);\n\n if (localeOptions?.languagePack) {\n this.translator.addLanguagePack(\n this.currentLocale.value,\n localeOptions.languagePack,\n );\n }\n }\n\n /**\n * # Add Language Pack\n * @param localeCode\n * @param messages\n */\n public addLanguagePack(localeCode: string, messages: LanguagePackData) {\n this.translator.addLanguagePack(localeCode, messages);\n }\n}\n\n/**\n * # Locale Options\n */\nexport interface LocaleOptions {\n locale?: string;\n languagePack?: LanguagePackData;\n}\n","import { inject, InjectionKey, shallowRef } from \"vue\";\nimport {\n LocaleManager,\n LocaleOptions,\n} from \"@/modules/Locale/LocaleManager.ts\";\nimport { TranslationVariables } from \"@/modules/Translation/Translator\";\n\n/**\n * # Locale Symbol\n */\nexport const LocaleSymbol: InjectionKey<LocaleManager> =\n Symbol.for(\"ev:locale\");\n\n/**\n * # Create Locale Manager\n * @todo: we need a lot more settings and options.\n */\nexport function createLocaleManager(localeOptions: LocaleOptions) {\n return new LocaleManager(localeOptions);\n}\n\n/**\n * # Use Locale Manager\n */\nexport function useLocaleManager(): LocaleManager {\n const localeManager: LocaleManager | undefined = inject(LocaleSymbol);\n if (!localeManager) {\n throw new Error(\"Evance UI: Could not find injected locale instance.\");\n }\n return localeManager;\n}\n\n/**\n * # Use Locale Functions\n */\nexport function useLocaleFunctions() {\n const manager = useLocaleManager();\n return {\n t: (\n reference: string,\n variables?: TranslationVariables,\n locale?: string,\n ): string | undefined => {\n return manager.translator.translate(reference, variables, locale);\n },\n n: (\n value: number,\n options?: Intl.NumberFormatOptions,\n locale?: string,\n ) => {\n return manager.numberFormatter.format(value, options, locale);\n },\n };\n}\n\n/**\n *\n */\nexport function useRtl() {\n // @todo: Implement RTL in Locale Manager\n const isRtl = shallowRef(false);\n const rtlClasses = shallowRef([]);\n return {\n isRtl,\n rtlClasses,\n };\n}\n","/**\n * # Toggle Scope Utility\n *\n * Manage an effect scope based on changes in a watched source.\n *\n * We use effectScope() to capture the reactive effects of reactive/computed property.\n * @see https://vuejs.org/api/reactivity-advanced.html#effectscope\n */\n// Utilities\nimport { effectScope, onScopeDispose, watch } from \"vue\";\n\n// Types\nimport type { EffectScope, WatchSource } from \"vue\";\n\nexport function useToggleScope(\n source: WatchSource<boolean>,\n fn: (reset: () => void) => void,\n): void {\n let scope: EffectScope | undefined;\n\n function start(): void {\n scope = effectScope();\n scope.run(() => {\n return fn.length\n ? fn(() => {\n scope?.stop();\n start();\n })\n : (fn as any)();\n });\n }\n\n function watchCallback(active: boolean): void {\n if (active && !scope) {\n start();\n } else if (!active) {\n scope?.stop();\n scope = undefined;\n }\n }\n\n const watchOptions = {\n immediate: true,\n };\n\n watch(source, watchCallback, watchOptions);\n\n onScopeDispose(() => {\n scope?.stop();\n });\n}\n","import { ComponentInternalInstance, computed, ref, toRaw, watch } from \"vue\";\nimport type { Ref } from \"vue\";\nimport { EventProp, getCurrentComponent, toKebabCase } from \"@/util\";\nimport { useToggleScope } from \"./toggleScope\";\n\ntype InnerVal<T> = T extends any[] ? Readonly<T> : T;\n\n/**\n * ## Has Prop\n *\n * Returns `true` if the `vueInstance` supplied has the `propName` in its list of props.\n *\n * @param vueInstance\n * @param propName\n */\nfunction hasProp(\n vueInstance: ComponentInternalInstance,\n propName: string,\n): boolean {\n return !!vueInstance.props?.hasOwnProperty(propName);\n}\n\n/**\n * # Model Proxy\n */\nexport function useModelProxy<\n PropsObject extends object &\n Partial<{\n [key in ModelName as `onUpdate:${ModelName}`]:\n | EventProp\n | undefined;\n }>,\n ModelName extends Extract<keyof PropsObject, string>,\n Inner = PropsObject[ModelName],\n>(\n props: PropsObject,\n modelName: ModelName,\n defaultValue?: PropsObject[ModelName],\n transformIn: (modelValue?: PropsObject[ModelName]) => Inner = (\n value: any,\n ) => value,\n transformOut: (modelValue: Inner) => PropsObject[ModelName] = (\n value: any,\n ) => value,\n) {\n const component: ComponentInternalInstance =\n getCurrentComponent(\"useModelProxy\");\n const modelRef: Ref<PropsObject[ModelName]> = ref(\n props[modelName] !== undefined ? props[modelName] : defaultValue,\n ) as Ref<PropsObject[ModelName]>;\n const modelNameKebab: string = toKebabCase(modelName);\n const isCheckKebabName: boolean = modelName !== modelNameKebab;\n const isModelAvailable = computed(() => {\n // Ignore evaluation of props[modelName]\n void props[modelName];\n return (\n (hasProp(component, modelName) &&\n hasProp(component, `onUpdate:${modelName}`)) ||\n (isCheckKebabName &&\n hasProp(component, modelNameKebab) &&\n hasProp(component, `onUpdate:${modelNameKebab}`))\n );\n });\n\n // Watch changes on the original model\n useToggleScope(\n () => !isModelAvailable.value,\n () => {\n watch(\n () => props[modelName],\n (value) => {\n modelRef.value = value;\n },\n );\n },\n );\n\n // Define a computed model\n const model = computed({\n get(): any {\n const externalValue = props[modelName];\n return transformIn(\n isModelAvailable.value ? externalValue : modelRef.value,\n );\n },\n set(internalValue): void {\n const newValue = transformOut(internalValue);\n const value = toRaw(\n isModelAvailable.value ? props[modelName] : modelRef.value,\n );\n // Ignore if the value has not changed\n if (value === newValue || transformIn(value) === internalValue) {\n return;\n }\n modelRef.value = newValue;\n component.emit(`update:${modelName}`, newValue);\n },\n }) as any as Ref<InnerVal<any>> & {\n readonly externalValue: PropsObject[ModelName];\n };\n\n // Define an externalValue property to our model\n Object.defineProperty(model, \"externalValue\", {\n get: () => {\n return isModelAvailable.value ? props[modelName] : modelRef.value;\n },\n });\n\n return model;\n}\n","import { inject, InjectionKey } from \"vue\";\nimport { EvNotificationsManager } from \"@/components/EvNotifications\";\nimport { EvNotificationProps, EvNotificationSlots } from \"@/components\";\n\nexport const EvNotificationServiceSymbol: InjectionKey<EvNotificationsManager> =\n Symbol.for(\"ev:notification-service\");\n\n/**\n * # injectNotifications\n */\nexport function injectNotifications() {\n const service = inject(EvNotificationServiceSymbol);\n if (!service) {\n throw new Error(\n \"Evance UI: Unable to find inject notification service.\",\n );\n }\n return service;\n}\n\n/**\n * # useNotification\n */\nexport function useNotification() {\n const service = injectNotifications();\n return {\n add: (props: EvNotificationProps, slots?: EvNotificationSlots) => {\n return service.add(props, slots);\n },\n dismiss: (id: number) => {\n return service.dismiss(id);\n },\n };\n}\n","// Utilities\nimport { propsFactory } from \"@/util\";\n\n// Types\nexport interface TagProps {\n tag?: string;\n}\n\n// Tag Props\nexport const makeTagProps = propsFactory(\n {\n tag: {\n type: String,\n default: \"div\",\n },\n },\n \"tag\",\n);\n","import {\n computed,\n inject,\n InjectionKey,\n PropType,\n provide,\n Ref,\n ref,\n} from \"vue\";\nimport { getCurrentComponent, mergeDeep, propsFactory } from \"@/util\";\n\nexport type Theme = \"system\" | \"light\" | \"dark\";\n\nexport type ThemeOptions = {\n defaultTheme?: Theme;\n};\n\nexport interface ThemeInstance {\n readonly name: Readonly<Ref<Theme>>;\n readonly themeClasses: Readonly<Ref<string | undefined>>;\n}\n\nexport const ThemeSymbol: InjectionKey<ThemeInstance> = Symbol.for(\"ev:theme\");\n\nexport const makeThemeProps = propsFactory(\n {\n theme: String as PropType<Theme>,\n },\n \"theme\",\n);\n\nconst defaultThemeOptions: ThemeOptions = {\n defaultTheme: \"system\",\n};\n\nfunction parseThemeOptions(\n options: ThemeOptions = defaultThemeOptions,\n): ThemeOptions {\n return !options\n ? defaultThemeOptions\n : mergeDeep(defaultThemeOptions, options);\n}\n\nexport function createTheme(options?: ThemeOptions): ThemeInstance {\n const parsedOptions = parseThemeOptions(options);\n const name = ref<Theme>(parsedOptions.defaultTheme);\n const themeClasses = computed(() => `ev-theme-${name.value}`);\n\n return {\n name,\n themeClasses,\n };\n}\n\n/**\n * # `provideTheme`\n *\n * @param props\n */\nexport function provideTheme(props: { theme?: Theme }) {\n getCurrentComponent(\"provideTheme\");\n const theme = inject(ThemeSymbol, null);\n if (!theme) {\n throw new Error(\"Unable to find theme provider.\");\n }\n const name = computed(() => props.theme ?? theme.name.value);\n const themeClasses = computed(() => `ev-theme-${name.value}`);\n const newTheme: ThemeInstance = {\n name,\n themeClasses,\n };\n provide(ThemeSymbol, newTheme);\n return newTheme;\n}\n\nexport function useTheme() {\n getCurrentComponent(\"useTheme\");\n const theme = inject(ThemeSymbol, null);\n if (!theme) {\n throw new Error(\"Unable to find theme provider.\");\n }\n return theme;\n}\n","/**\n * Centralized key alias mapping for consistent key normalization across the hotkey system.\n *\n * This maps various user-friendly aliases to canonical key names that match\n * KeyboardEvent.key values (in lowercase) where possible.\n */\nexport const keyAliasMap: Record<string, string> = {\n // Modifier aliases (from vue-use, other libraries, and current implementation)\n control: \"ctrl\",\n command: \"cmd\",\n option: \"alt\",\n\n // Arrow key aliases (common abbreviations)\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\",\n\n // Other common key aliases\n esc: \"escape\",\n spacebar: \" \",\n space: \" \",\n return: \"enter\",\n del: \"delete\",\n\n // Symbol aliases (existing from hotkey-parsing.ts)\n minus: \"-\",\n hyphen: \"-\",\n};\n\n/**\n * Normalizes a key string to its canonical form using the alias map.\n *\n * @param key - The key string to normalize\n * @returns The canonical key name in lowercase\n */\nexport function normalizeKey(key: string): string {\n const lowerKey = key.toLowerCase();\n return keyAliasMap[lowerKey] || lowerKey;\n}\n","import { consoleWarn } from \"@/util\";\nimport { normalizeKey } from \"@/composables/hotkey/key-aliases\";\n\n/**\n * Splits a single combination string into individual key parts.\n *\n * A combination is a set of keys that must be pressed simultaneously.\n * e.g. `ctrl+k`, `shift--`\n */\nexport function splitKeyCombination(\n combination: string,\n isInternal = false,\n): { keys: string[]; separators: string[] } {\n const emptyResult = { keys: [], separators: [] };\n if (!combination) {\n if (!isInternal) consoleWarn(\"Empty hotkey combination provided\");\n return emptyResult;\n }\n\n const hasInvalidLeadingSeparator =\n combination.length > 1 &&\n // Starts with a single separator followed by a non-separator character (e.g. '+a', '_a')\n [\"+\", \"/\", \"_\"].some((v) => combination.startsWith(v)) &&\n ![\"++\", \"//\", \"__\"].some((v) => combination.startsWith(v));\n\n const hasInvalidStructure =\n hasInvalidLeadingSeparator ||\n // Disallow literal + or _ keys (they require shift)\n combination.includes(\"++\") ||\n combination.includes(\"__\") ||\n combination === \"+\" ||\n combination === \"_\" ||\n // Ends with a separator that is not part of a doubled literal\n (combination.length > 1 &&\n (combination.endsWith(\"+\") || combination.endsWith(\"_\")) &&\n combination.at(-2) !== combination.at(-1)) ||\n // Stand-alone doubled separators (dangling)\n combination === \"++\" ||\n combination === \"--\" ||\n combination === \"__\";\n\n if (hasInvalidStructure) {\n if (!isInternal) {\n consoleWarn(\n `Invalid hotkey combination: \"${combination}\" has invalid structure`,\n );\n }\n return emptyResult;\n }\n\n const keys: string[] = [];\n const separators: string[] = [];\n let buffer = \"\";\n\n const flushBuffer = (separator?: string) => {\n if (buffer) {\n separator && separators.push(separator);\n keys.push(normalizeKey(buffer));\n buffer = \"\";\n }\n };\n\n for (let i = 0; i < combination.length; i++) {\n const char = combination[i];\n const nextChar = combination[i + 1];\n\n if ([\"+\", \"/\", \"_\", \"-\"].includes(char)) {\n if (char === nextChar) {\n flushBuffer(char);\n keys.push(char);\n i++;\n } else if ([\"+\", \"/\", \"_\"].includes(char)) {\n flushBuffer(char);\n } else {\n buffer += char;\n }\n } else {\n buffer += char;\n }\n }\n flushBuffer();\n\n // Within a combination, `-` is only valid as a literal key (e.g., `ctrl+-`).\n // `-` cannot be part of a longer key name within a combination.\n const hasInvalidMinus = keys.some(\n (key) => key.length > 1 && key.includes(\"-\") && key !== \"--\",\n );\n if (hasInvalidMinus) {\n if (!isInternal) {\n consoleWarn(\n `Invalid hotkey combination: \"${combination}\" has invalid structure`,\n );\n }\n return emptyResult;\n }\n\n if (keys.length === 0 && combination) {\n return { keys: [normalizeKey(combination)], separators };\n }\n\n return { keys, separators };\n}\n\n\n/**\n * Splits a hotkey string into its constituent combination groups.\n *\n * A sequence is a series of combinations that must be pressed in order.\n * e.g. `a-b`, `ctrl+k-p`\n */\nexport function splitKeySequence(str: string): string[] {\n if (!str) {\n consoleWarn(\"Invalid hotkey sequence: empty string provided\");\n return [];\n }\n\n // A sequence is invalid if it starts or ends with a separator,\n // unless it is part of a combination (e.g., `shift+-`).\n const hasInvalidStart =\n str.startsWith(\"-\") && ![\"---\", \"--+\"].includes(str);\n const hasInvalidEnd =\n str.endsWith(\"-\") &&\n !str.endsWith(\"+-\") &&\n !str.endsWith(\"_-\") &&\n str !== \"-\" &&\n str !== \"---\";\n\n if (hasInvalidStart || hasInvalidEnd) {\n consoleWarn(\n `Invalid hotkey sequence: \"${str}\" contains invalid combinations`,\n );\n return [];\n }\n\n const result: string[] = [];\n let buffer = \"\";\n let i = 0;\n\n while (i < str.length) {\n const char = str[i];\n\n if (char === \"-\") {\n // Determine if this hyphen is part of the current combination\n const prevChar = str[i - 1];\n const prevPrevChar = i > 1 ? str[i - 2] : undefined;\n\n const precededBySeparator =\n [\"+\", \"_\"].includes(prevChar) &&\n ![\"+\", \"/\"].includes(prevPrevChar ?? \"\");\n\n if (precededBySeparator) {\n // Treat as part of the combination (e.g., 'ctrl+-')\n buffer += char;\n i++;\n } else {\n // Treat as sequence separator\n if (buffer) {\n result.push(buffer);\n buffer = \"\";\n } else {\n // Empty buffer means we have a literal '-' key\n result.push(\"-\");\n }\n i++;\n }\n } else {\n buffer += char;\n i++;\n }\n }\n\n // Add final buffer if it exists\n if (buffer) {\n result.push(buffer);\n }\n\n // Collapse runs of '-' so that every second '-' is removed\n const collapsed: string[] = [];\n let minusCount = 0\n for (const part of result) {\n if (part === \"-\") {\n if (minusCount % 2 === 0) collapsed.push(\"-\");\n minusCount++;\n } else {\n minusCount = 0;\n collapsed.push(part);\n }\n }\n\n // Validate that each part of the sequence is a valid combination\n const areAllValid = collapsed.every(\n (s) => splitKeyCombination(s, true).keys.length > 0,\n );\n\n if (!areAllValid) {\n consoleWarn(\n `Invalid hotkey sequence: \"${str}\" contains invalid combinations`,\n );\n return [];\n }\n\n return collapsed;\n}\n","import { MaybeRef, onScopeDispose, toValue, watch } from \"vue\";\nimport { Browser } from \"@/util\";\nimport {\n splitKeyCombination,\n splitKeySequence,\n} from \"@/composables/hotkey/hotkey-parsing\";\n\ninterface HotkeyOptions {\n event?: MaybeRef<\"keydown\" | \"keyup\">;\n inputs?: MaybeRef<boolean>;\n preventDefault?: MaybeRef<boolean>;\n sequenceTimeout?: MaybeRef<number>;\n}\n\nexport function useHotkey(\n keys: MaybeRef<string | undefined>,\n callback: (e: KeyboardEvent) => void,\n options: HotkeyOptions = {},\n) {\n if (!Browser.hasWindow) return () => {};\n\n const {\n event = \"keydown\",\n inputs = false,\n preventDefault = true,\n sequenceTimeout = 1000,\n } = options;\n\n const isMac = navigator?.userAgent?.includes(\"Macintosh\") ?? false;\n let timeout = 0;\n let keyGroups: string[];\n let isSequence = false;\n let groupIndex = 0;\n\n function isInputFocused() {\n if (toValue(inputs)) return false;\n const activeElement = document.activeElement as HTMLElement;\n return (\n activeElement &&\n (activeElement.tagName === \"INPUT\" ||\n activeElement.tagName === \"TEXTAREA\" ||\n activeElement.isContentEditable ||\n activeElement.contentEditable === \"true\")\n );\n }\n\n function resetSequence() {\n groupIndex = 0;\n clearTimeout(timeout);\n }\n\n function handler(e: KeyboardEvent) {\n const group = keyGroups[groupIndex];\n\n if (!group || isInputFocused()) return;\n\n if (!matchesKeyGroup(e, group, isMac)) {\n if (isSequence) resetSequence();\n return;\n }\n\n if (toValue(preventDefault)) e.preventDefault();\n\n if (!isSequence) {\n callback(e);\n return;\n }\n\n clearTimeout(timeout);\n groupIndex++;\n\n if (groupIndex === keyGroups.length) {\n callback(e);\n resetSequence();\n return;\n }\n\n timeout = window.setTimeout(resetSequence, toValue(sequenceTimeout));\n }\n\n function cleanup() {\n window.removeEventListener(toValue(event), handler);\n clearTimeout(timeout);\n }\n\n watch(\n () => toValue(keys),\n (newKeys) => {\n cleanup();\n\n if (newKeys) {\n const groups = splitKeySequence(newKeys.toLowerCase());\n isSequence = groups.length > 1;\n keyGroups = groups;\n resetSequence();\n window.addEventListener(toValue(event), handler);\n }\n },\n { immediate: true },\n );\n\n // Watch for changes in the event type to re-register the listener\n watch(\n () => toValue(event),\n (newEvent, oldEvent) => {\n if (oldEvent && keyGroups && keyGroups.length > 0) {\n window.removeEventListener(oldEvent, handler);\n window.addEventListener(newEvent, handler);\n }\n },\n );\n\n onScopeDispose(cleanup);\n\n return cleanup;\n}\n\nfunction matchesKeyGroup(e: KeyboardEvent, group: string, isMac: boolean) {\n const { modifiers, actualKey } = parseKeyGroup(group);\n const expectCtrl =\n modifiers.ctrl || (!isMac && (modifiers.cmd || modifiers.meta));\n const expectMeta = isMac && (modifiers.cmd || modifiers.meta);\n return (\n e.ctrlKey === expectCtrl &&\n e.metaKey === expectMeta &&\n e.shiftKey === modifiers.shift &&\n e.altKey === modifiers.alt &&\n e.key.toLowerCase() === actualKey?.toLowerCase()\n );\n}\n\nfunction parseKeyGroup(group: string) {\n const MODIFIERS = [\"ctrl\", \"shift\", \"alt\", \"meta\", \"cmd\"];\n\n // Use the shared combination splitting logic\n const { keys: parts } = splitKeyCombination(group.toLowerCase());\n\n // If the combination is invalid, return empty result\n if (parts.length === 0) {\n return {\n modifiers: Object.fromEntries(MODIFIERS.map((m) => [m, false])),\n actualKey: undefined,\n };\n }\n\n const modifiers = Object.fromEntries(\n MODIFIERS.map((m) => [m, false]),\n ) as Record<string, boolean>;\n let actualKey: string | undefined;\n\n for (const part of parts) {\n if (MODIFIERS.includes(part)) {\n modifiers[part] = true;\n } else {\n actualKey = part;\n }\n }\n\n return { modifiers, actualKey };\n}","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables\";\nimport { makeThemeProps } from \"@/composables/theme\";\nimport { PropType } from \"vue\";\n\nexport type ThemeScope = \"body\" | \"app\";\n\nexport const makeEvAppProps = propsFactory(\n {\n themeScope: {\n type: String as PropType<ThemeScope>,\n default: \"body\",\n },\n ...makeComponentProps(),\n ...makeThemeProps(),\n },\n \"EvApp\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvApp.scss\";\nimport { makeEvAppProps } from \"./EvApp\";\nimport { provideTheme } from \"@/composables/theme\";\nimport { computed, onMounted, watch } from \"vue\";\n\nconst props = defineProps({ ...makeEvAppProps() });\nconst { themeClasses } = provideTheme(props);\n\nconst appThemeClasses = computed(() => {\n return props.themeScope === \"app\" ? themeClasses.value : undefined;\n});\n\nconst bodyThemeClasses = computed(() => {\n return props.themeScope === \"body\" ? themeClasses.value : undefined;\n});\n\nwatch(bodyThemeClasses, (newValue, oldValue) => {\n if (oldValue) {\n document.body.classList.remove(oldValue);\n }\n if (newValue) {\n document.body.classList.add(newValue);\n }\n});\n\nonMounted(() => {\n if (bodyThemeClasses.value) {\n document.body.classList.add(bodyThemeClasses.value);\n }\n});\n</script>\n\n<template>\n <div :class=\"['ev-application', appThemeClasses, props.class]\">\n <div class=\"ev-application--container\">\n <slot />\n </div>\n </div>\n</template>\n","import { destructComputed, propsFactory, toWebUnit } from \"@/util\";\nimport { PropType } from \"vue\";\n\nexport const Size = {\n default: \"medium\",\n xSmall: \"x-small\",\n small: \"small\",\n medium: \"medium\",\n large: \"large\",\n xLarge: \"x-large\",\n} as const;\n\ntype SizeValue = (typeof Size)[keyof typeof Size];\n\nexport const predefinedSizes = Array.from(new Set(Object.values(Size)));\n\nexport type SizeProp = SizeValue | number;\n\nexport interface SizeProps {\n size?: SizeProp;\n}\n\nexport const makeSizeProps = propsFactory(\n {\n size: {\n type: [String, Number] as PropType<SizeProp>,\n default: Size.default,\n },\n },\n \"size\",\n);\n\nexport function useSize(props: SizeProps) {\n return destructComputed(() => {\n let sizeClasses: string;\n let sizeStyles = {};\n\n if (predefinedSizes.includes(props.size as SizeValue)) {\n sizeClasses = `is-size-${props.size}`;\n } else if (props.size) {\n sizeStyles = {\n width: toWebUnit(props.size),\n height: toWebUnit(props.size),\n };\n }\n return { sizeClasses, sizeStyles };\n });\n}\n","import { computed, isRef, Ref } from \"vue\";\nimport { propsFactory } from \"@/util\";\n\ntype RoundedValue = boolean | string | number | null | undefined;\n\nexport interface RoundedProps {\n rounded?: RoundedValue;\n}\n\ntype RoundedData = {\n roundedClasses: Ref<string[]>;\n};\n\nexport const makeRoundedProps = propsFactory(\n {\n rounded: {\n type: [Boolean, Number, String],\n default: undefined,\n },\n },\n \"rounded\",\n);\n\nexport function useRounded(\n props: RoundedProps | Ref<RoundedValue>,\n): RoundedData {\n const roundedClasses = computed(() => {\n const rounded = isRef(props) ? props.value : props.rounded;\n const classes: string[] = [];\n\n if (rounded === true || rounded === \"\") {\n classes.push(\"is-rounded\");\n } else if (typeof rounded === \"string\" || rounded === 0) {\n for (const value of String(rounded).split(\" \")) {\n classes.push(`is-rounded-${value}`);\n }\n }\n\n return classes;\n });\n\n return { roundedClasses };\n}\n","import { makeAppearanceProps, propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { IconProp } from \"@/composables/icons\";\nimport { makeSizeProps } from \"@/composables/size\";\nimport { makeRoundedProps } from \"@/composables/rounded\";\n\nexport const makeEvAvatarProps = propsFactory(\n {\n icon: IconProp,\n image: String,\n text: String,\n bold: Boolean,\n\n ...makeComponentProps(),\n ...makeAppearanceProps(),\n ...makeSizeProps(),\n ...makeRoundedProps(),\n },\n \"EvAvatar\",\n);\n","import { computed, PropType, toRaw } from \"vue\";\nimport { Appearance, propsFactory } from \"@/util\";\nimport { IconProp, IconValue } from \"@/composables/icons\";\n\n/**\n * ## Icon Size\n */\nexport type IconSize = \"small\" | \"medium\" | \"large\" | \"x-large\";\n\nexport const IconAppearance = {\n ...Appearance,\n subtle: \"subtle\",\n} as const;\n\n/**\n * ## Icon Appearance\n */\nexport type IconAppearanceProp =\n (typeof IconAppearance)[keyof typeof IconAppearance];\n\n/**\n * # Use Icon\n * @param props\n * @param name\n */\nexport function useIcon(props: any, name: string) {\n return computed(() => {\n return toRaw(props[name]);\n });\n}\n\nexport interface EvIconProps {\n glyph?: IconValue;\n size?: IconSize;\n appearance?: IconAppearanceProp;\n}\n\nexport const makeEvIconProps = propsFactory(\n {\n glyph: IconProp,\n size: String as PropType<IconSize>,\n appearance: {\n type: String as PropType<IconAppearanceProp>,\n default: Appearance.default,\n },\n },\n \"EvIcon\",\n);\n","<script setup lang=\"ts\">\n/**\n * # EvIcon\n *\n * Uses `glyph` to render an SVG-based icon.\n */\nimport \"./EvIcon.scss\";\nimport { makeEvIconProps } from \"./EvIcon\";\nimport { computed, toRaw, useAttrs } from \"vue\";\nimport { Appearance, appearanceModifier, sizeModifier } from \"@/util\";\nimport { useDefaults } from \"@/composables\";\n\nconst definedProps = defineProps({\n ...makeEvIconProps(),\n});\nconst props = useDefaults(definedProps);\nconst attrs = useAttrs();\n\nconst iconColor = computed(() => {\n if (!props.appearance || props.appearance === \"default\") {\n return null;\n }\n if (props.appearance === \"primary\") {\n return `var(--text-brand)`;\n }\n return `var(--text-${props.appearance})`;\n});\n\nconst iconGlyph = computed(() => {\n return toRaw(props.glyph) as string;\n});\n</script>\n\n<template>\n <i\n class=\"ev-icon\"\n :class=\"[\n {\n 'is-clickable': !!attrs.onClick,\n },\n appearanceModifier(props.appearance, [Appearance.default]),\n sizeModifier(props.size, ['medium']),\n ]\">\n <component :is=\"iconGlyph\"></component>\n </i>\n</template>\n\n<style>\n.ev-icon {\n --icon-color: v-bind(iconColor);\n}\n</style>\n","import { computed } from \"vue\";\nimport { propsFactory } from \"@/util\";\n\nexport type AspectRatioProps = {\n aspectRatio?: string | number;\n};\n\nexport const makeAspectRatioProps = propsFactory(\n {\n aspectRatio: [String, Number],\n },\n \"aspectRatio\",\n);\n\n/**\n * # useAspectStyles\n *\n * Aspect ratio notation is permitted as a number or a string where aspects such as '16:9' is\n * converted to a division '16/9'.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio\n * @param props\n */\nexport function useAspectStyles(props: AspectRatioProps) {\n return {\n aspectStyles: computed(() => {\n if (!props.aspectRatio) {\n return undefined;\n }\n const ratio = String(props.aspectRatio);\n return {\n aspectRatio: ratio.replace(\":\", \"/\"),\n };\n }),\n };\n}\n\nexport function parseAspectRatio(\n value: string | number | undefined,\n): number | undefined {\n if (typeof value === \"number\") {\n return value;\n }\n if (typeof value === \"string\") {\n const match = value.match(/^(\\d+(?:\\.\\d+)?)[/:](\\d+(?:\\.\\d+)?)$/);\n if (match) {\n const [, w, h] = match;\n const ratio = parseFloat(w) / parseFloat(h);\n return isFinite(ratio) && ratio > 0 ? ratio : undefined;\n }\n const num = parseFloat(value);\n return isFinite(num) && num > 0 ? num : undefined;\n }\n return undefined;\n}\n","import { propsFactory } from \"@/util\";\nimport { ComponentProps, makeComponentProps } from \"@/composables/component\";\nimport { DimensionsProps, makeDimensionsProps } from \"@/composables/dimensions\";\nimport {\n AspectRatioProps,\n makeAspectRatioProps,\n} from \"@/composables/aspectRatio\";\n\nexport type EvResponsiveSlots = {\n default: never;\n content: never;\n};\n\nexport interface EvResponsiveProps\n extends AspectRatioProps,\n DimensionsProps,\n ComponentProps {\n contentClass?: string;\n inline?: boolean;\n}\n\nexport const makeEvResponsiveProps = propsFactory(\n {\n contentClass: String,\n inline: {\n type: Boolean,\n default: undefined,\n required: false,\n },\n\n ...makeAspectRatioProps(),\n ...makeComponentProps(),\n ...makeDimensionsProps(),\n },\n \"EvResponsive\",\n);\n","import {\n Component,\n computed,\n FunctionalComponent,\n mergeProps,\n PropType,\n Transition,\n TransitionProps,\n h,\n} from \"vue\";\nimport { isBoolean, isEmpty, isObject, isString, propsFactory } from \"@/util\";\n\nexport type EvTransitionProp =\n | string\n | boolean\n | (TransitionProps & { component?: Component });\n\nexport interface EvTransitionProps {\n appear?: boolean;\n transition?: EvTransitionProp;\n disabled?: boolean;\n}\n\n/**\n * # Make Transition Props\n */\nexport const makeEvTransitionProps = propsFactory(\n {\n transition: {\n type: [Boolean, String, Object] as PropType<EvTransitionProp>,\n default: true,\n },\n },\n \"EvTransition\",\n);\n\n/**\n * # Use Transition\n *\n * Prepares `transition` props for use\n *\n * @param props\n * @param defaultTransition\n */\nexport function useEvTransition(\n props: EvTransitionProps,\n defaultTransition: string = \"transition-fade\",\n) {\n return computed(() => {\n if (isEmpty(props.transition) || isBoolean(props.transition)) {\n return {\n name:\n !!props.transition && !props.disabled\n ? defaultTransition\n : \"\",\n };\n }\n if (isString(props.transition)) {\n return {\n name: props.disabled ? \"\" : props.transition,\n };\n }\n return props.transition;\n });\n}\n\n/**\n * # EvTransition\n *\n * A functional component for handling transitions, which can either be a name, object or component.\n *\n * There is no `.vue` component file for this component.\n *\n * @param props\n * @param slots\n * @constructor\n */\nexport const EvTransition: FunctionalComponent = (\n props: EvTransitionProps,\n { slots },\n) => {\n const { transition, disabled, ...remainingProps } = props;\n const { component = Transition, ...customProps } =\n isObject(transition) ? transition : {};\n const transitionProps = isString(transition)\n ? { name: disabled ? \"\" : transition }\n : (customProps as any);\n\n return h(\n component,\n mergeProps(transitionProps, remainingProps as any, { disabled }),\n slots,\n );\n};\n","import { propsFactory } from \"@/util\";\nimport { ComponentProps, makeComponentProps } from \"@/composables/component\";\nimport {\n EvResponsiveProps,\n makeEvResponsiveProps,\n} from \"@/components/EvResponsive/EvResponsive\";\nimport { makeEvTransitionProps } from \"@/components/EvTransition\";\nimport { PropType } from \"vue\";\n\ntype ReferrerPolicy =\n | \"no-referrer\"\n | \"no-referrer-when-downgrade\"\n | \"origin\"\n | \"origin-when-cross-origin\"\n | \"same-origin\"\n | \"strict-origin\"\n | \"strict-origin-when-cross-origin\"\n | \"unsafe-url\";\n\nexport interface EvImgProps extends ComponentProps, EvResponsiveProps {\n alt?: string;\n cover?: boolean;\n crossorigin?: \"\" | \"anonymous\" | \"use-credentials\";\n draggable?: boolean | \"true\" | \"false\";\n eager?: boolean;\n gradient?: string;\n lazySrc?: string;\n options?: IntersectionObserverInit;\n position?: string;\n referrerpolicy?: ReferrerPolicy;\n sizes?: string;\n src?: string | EvImgSrcObject;\n srcset?: string;\n}\n\nexport const makeEvImgProps = propsFactory(\n {\n alt: String,\n cover: Boolean,\n crossorigin: String as PropType<EvImgProps[\"crossorigin\"]>,\n draggable: {\n type: [Boolean, String] as PropType<EvImgProps[\"draggable\"]>,\n default: undefined,\n },\n eager: Boolean,\n gradient: String,\n lazySrc: String,\n options: {\n type: Object as PropType<IntersectionObserverInit>,\n // For more information on types, navigate to:\n // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n default: () => ({\n root: undefined,\n rootMargin: undefined,\n threshold: undefined,\n }),\n },\n position: String,\n referrerpolicy: String as PropType<EvImgProps[\"referrerpolicy\"]>,\n sizes: String,\n src: {\n type: [String, Object] as PropType<string | EvImgSrcObject>,\n default: \"\",\n },\n srcset: String,\n\n ...makeEvResponsiveProps(),\n ...makeComponentProps(),\n ...makeEvTransitionProps(),\n },\n \"EvImg\",\n);\n\nexport interface EvImgSrcObject {\n src?: string;\n srcset?: string;\n lazySrc?: string;\n aspect?: string | number;\n}\n\nexport type EvImgSlots = {\n default: never;\n placeholder: never;\n error: never;\n sources: never;\n};\n","<script setup lang=\"ts\">\n/**\n * '<ev-responsive>`\n */\nimport \"./EvResponsive.scss\";\nimport { makeEvResponsiveProps } from \"./EvResponsive\";\nimport { useDimensions } from \"@/composables/dimensions\";\nimport { useAspectStyles } from \"@/composables/aspectRatio\";\n\nconst props = defineProps({\n ...makeEvResponsiveProps(),\n});\nconst slots = defineSlots<{\n additional(): never;\n default(): never;\n}>();\n\nconst { aspectStyles } = useAspectStyles(props);\nconst dimensionStyles = useDimensions(props);\n</script>\n\n<template>\n <div\n :class=\"[\n 'ev-responsive',\n {\n 'is-inline': props.inline,\n },\n props.class,\n ]\"\n :style=\"[dimensionStyles, props.style]\">\n <div class=\"ev-responsive--sizer\" :style=\"aspectStyles\"></div>\n <slot name=\"additional\" />\n <div\n v-if=\"slots.default\"\n :class=\"['ev-responsive--content', props.contentClass]\">\n <slot name=\"default\" />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\r\n/**\r\n * `<ev-img>`\r\n */\r\nimport \"./EvImg.scss\";\r\nimport { makeEvImgProps, EvImgSrcObject } from \"./EvImg\";\r\nimport { EvResponsive } from \"@/components/EvResponsive\";\r\nimport { EvTransition, useEvTransition } from \"@/components/EvTransition\";\r\nimport {\r\n computed,\r\n ComputedRef,\r\n nextTick,\r\n onBeforeMount,\r\n onBeforeUnmount,\r\n onMounted,\r\n ref,\r\n shallowRef,\r\n watch,\r\n} from \"vue\";\r\nimport {Browser, filterComponentProps, isObject, makeClassName, toWebUnit} from \"@/util\";\r\n\r\nconst props = defineProps({\r\n ...makeEvImgProps(),\r\n});\r\nconst slots = defineSlots<{\r\n default(): never;\r\n error(): never;\r\n loading(): never;\r\n placeholder(): never;\r\n sources(): never;\r\n}>();\r\nconst emit = defineEmits([\"loadstart\", \"load\", \"error\"]);\r\n\r\nconst currentSrc = shallowRef(\"\");\r\nconst image = ref<HTMLImageElement>();\r\nconst state = shallowRef<\"idle\" | \"loading\" | \"loaded\" | \"error\">(\r\n props.eager ? \"loading\" : \"idle\",\r\n);\r\nconst naturalWidth = shallowRef<number>();\r\nconst naturalHeight = shallowRef<number>();\r\nconst transition = useEvTransition(props);\r\n\r\nconst normalisedSrc: ComputedRef<EvImgSrcObject> = computed(() => {\r\n const imgSrc = props as EvImgSrcObject | { src: EvImgSrcObject };\r\n\r\n return isObject(imgSrc.src)\r\n ? {\r\n src: imgSrc.src.src,\r\n srcset: props.srcset || imgSrc.src.srcset,\r\n lazySrc: props.lazySrc || imgSrc.src.lazySrc,\r\n aspect: props.aspectRatio || imgSrc.src.aspect || 0,\r\n }\r\n : {\r\n src: props.src,\r\n srcset: props.srcset,\r\n lazySrc: props.lazySrc,\r\n aspect: props.aspectRatio || 0,\r\n };\r\n});\r\n\r\nconst aspectRatio = computed(() => {\r\n return (\r\n normalisedSrc.value.aspect ||\r\n naturalWidth.value! / naturalHeight.value! ||\r\n 0\r\n );\r\n});\r\n\r\nconst objectFitClasses = computed(() => {\r\n return {\r\n \"is-object-cover\": props.cover,\r\n \"is-object-contain\": !props.cover,\r\n };\r\n});\r\n\r\n/**\r\n * ## getSrc\r\n */\r\nfunction getSrc() {\r\n const img = image.value;\r\n if (img) {\r\n currentSrc.value = img.currentSrc || img.src;\r\n }\r\n}\r\n\r\n/**\r\n * ## init\r\n *\r\n * @param isIntersecting\r\n */\r\nfunction init(isIntersecting?: boolean) {\r\n if (props.eager && isIntersecting) {\r\n return;\r\n }\r\n if (Browser.supportsIntersection && !isIntersecting && !props.eager) {\r\n return;\r\n }\r\n state.value = \"loading\";\r\n\r\n if (normalisedSrc.value.lazySrc) {\r\n const lazyImg = new Image();\r\n lazyImg.src = normalisedSrc.value.lazySrc;\r\n pollForSize(lazyImg, null);\r\n }\r\n\r\n if (!normalisedSrc.value.src) {\r\n return;\r\n }\r\n\r\n nextTick(() => {\r\n emit(\"loadstart\", image.value?.currentSrc || normalisedSrc.value.src);\r\n setTimeout(() => {\r\n if (image.value?.complete) {\r\n if (!image.value.naturalWidth) {\r\n onError();\r\n }\r\n if (state.value === \"error\") {\r\n return;\r\n }\r\n if (!aspectRatio.value) {\r\n pollForSize(image.value, null);\r\n }\r\n if (state.value === \"loading\") {\r\n onLoad();\r\n }\r\n } else {\r\n if (!aspectRatio.value) {\r\n pollForSize(image.value!);\r\n }\r\n getSrc();\r\n }\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * ## onError\r\n */\r\nfunction onError() {\r\n state.value = \"error\";\r\n emit(\"error\", image.value?.currentSrc || normalisedSrc.value.src);\r\n}\r\n\r\n/**\r\n * ## onLoad\r\n */\r\nfunction onLoad() {\r\n getSrc();\r\n pollForSize(image.value!);\r\n state.value = \"loaded\";\r\n emit(\"load\", image.value?.currentSrc || normalisedSrc.value.src);\r\n}\r\n\r\nlet timer = -1;\r\nfunction pollForSize(img: HTMLImageElement, timeout: number | null = 100) {\r\n const poll = () => {\r\n clearTimeout(timer);\r\n if (!img) {\r\n return;\r\n }\r\n if (!img?.complete && state.value === \"loading\" && timeout != null) {\r\n timer = window.setTimeout(poll, timeout);\r\n return;\r\n }\r\n const { naturalHeight: imgHeight, naturalWidth: imgWidth } = img;\r\n if (imgHeight || imgWidth) {\r\n naturalWidth.value = imgWidth;\r\n naturalHeight.value = imgHeight;\r\n } else if (\r\n img.currentSrc.endsWith(\".svg\") ||\r\n img.currentSrc.startsWith(\"data:image/svg+xml\")\r\n ) {\r\n naturalWidth.value = 1;\r\n naturalHeight.value = 1;\r\n }\r\n };\r\n poll();\r\n}\r\n\r\nwatch(\r\n () => props.src,\r\n () => {\r\n if (state.value !== \"idle\") {\r\n state.value = \"idle\";\r\n nextTick(() => {\r\n init(true);\r\n });\r\n }\r\n },\r\n);\r\n\r\nwatch(aspectRatio, (val, oldVal) => {\r\n if (!val && oldVal && image.value) {\r\n pollForSize(image.value);\r\n }\r\n});\r\n\r\nonBeforeMount(() => init());\r\n\r\nif (Browser.hasWindow) {\r\n const windowWidth = ref(window.innerWidth);\r\n const onWindowResize = () => {\r\n windowWidth.value = window.innerWidth;\r\n };\r\n onMounted(() => {\r\n window.addEventListener(\"resize\", onWindowResize);\r\n onWindowResize();\r\n });\r\n\r\n onBeforeUnmount(() => {\r\n window.removeEventListener(\"resize\", onWindowResize);\r\n });\r\n\r\n watch(windowWidth, (newWidth, oldWidth) => {\r\n if (newWidth != oldWidth) {\r\n getSrc();\r\n }\r\n });\r\n}\r\n\r\nconst isBooted = shallowRef(false);\r\n{\r\n const stop = watch(aspectRatio, (val) => {\r\n if (val) {\r\n // Doesn't work with nextTick, idk why\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n isBooted.value = true;\r\n });\r\n });\r\n stop();\r\n }\r\n });\r\n}\r\n\r\nconst isLoaded = computed(() => {\r\n return state.value === \"loaded\";\r\n});\r\n\r\nconst isEmpty = computed(() => {\r\n return !normalisedSrc.value.src && !normalisedSrc.value.lazySrc;\r\n});\r\n\r\nconst responsiveProps = computed(() =>\r\n filterComponentProps(EvResponsive, props),\r\n);\r\n\r\nconst imgProps = computed(() => ({\r\n src: normalisedSrc.value.src,\r\n srcset: normalisedSrc.value.srcset,\r\n alt: props.alt,\r\n crossorigin: props.crossorigin,\r\n referrerpolicy: props.referrerpolicy,\r\n draggable: props.draggable,\r\n sizes: props.sizes,\r\n}));\r\n\r\nconst stateClass = computed(() => makeClassName(state.value, \"is-state\"));\r\n</script>\r\n\r\n<template>\r\n <ev-responsive\r\n v-intersect.once=\"{\r\n handler: init,\r\n options: props.options,\r\n }\"\r\n :class=\"[\r\n 'ev-img',\r\n {\r\n 'is-booting': !isBooted,\r\n },\r\n stateClass,\r\n props.class,\r\n ]\"\r\n :style=\"[\r\n {\r\n width: toWebUnit(\r\n props.width === 'auto' ? naturalWidth : props.width,\r\n ),\r\n },\r\n props.style,\r\n ]\"\r\n v-bind=\"responsiveProps\"\r\n :aria-label=\"props.alt\"\r\n :aspect-ratio=\"aspectRatio\"\r\n :role=\"props.alt ? 'img' : undefined\">\r\n <template #additional>\r\n <ev-transition\r\n v-if=\"normalisedSrc.src && state !== 'idle'\"\r\n :transition=\"transition\"\r\n appear>\r\n <picture\r\n v-if=\"slots.sources\"\r\n v-show=\"isLoaded\"\r\n class=\"ev-img--picture\">\r\n <slot name=\"sources\" />\r\n <img\r\n ref=\"image\"\r\n :class=\"['ev-img--img', objectFitClasses]\"\r\n :style=\"{ objectPosition: props.position }\"\r\n v-bind=\"imgProps\"\r\n @load=\"onLoad\"\r\n @error=\"onError\" />\r\n </picture>\r\n <img\r\n v-else\r\n v-show=\"isLoaded\"\r\n ref=\"image\"\r\n :class=\"['ev-img--img', objectFitClasses]\"\r\n :style=\"{ objectPosition: props.position }\"\r\n v-bind=\"imgProps\"\r\n @load=\"onLoad\"\r\n @error=\"onError\" />\r\n </ev-transition>\r\n\r\n <ev-transition\r\n v-if=\"normalisedSrc.lazySrc && state !== 'loaded'\"\r\n :transition=\"transition\">\r\n <img\r\n :class=\"[\r\n 'ev-img--img',\r\n 'ev-img--preload',\r\n objectFitClasses,\r\n ]\"\r\n :style=\"{ objectPosition: props.position }\"\r\n :src=\"normalisedSrc.lazySrc\"\r\n :alt=\"props.alt\"\r\n :crossorigin=\"props.crossorigin\"\r\n :referrerpolicy=\"props.referrerpolicy\"\r\n :draggable=\"props.draggable\" />\r\n </ev-transition>\r\n\r\n <div\r\n v-if=\"props.gradient\"\r\n class=\"ev-img--gradient\"\r\n :style=\"{\r\n backgroundImage: `linear-gradient(${props.gradient})`,\r\n }\"></div>\r\n\r\n <ev-transition\r\n v-if=\"slots.placeholder && isEmpty\"\r\n :transition=\"transition\"\r\n appear>\r\n <div class=\"ev-img--placeholder\">\r\n <slot name=\"placeholder\" />\r\n </div>\r\n </ev-transition>\r\n <ev-transition\r\n v-else-if=\"slots.loading && state === 'loading'\"\r\n :transition=\"transition\"\r\n appear>\r\n <div class=\"ev-img--loading\">\r\n <slot name=\"loading\" />\r\n </div>\r\n </ev-transition>\r\n <ev-transition\r\n v-else-if=\"slots.error && state === 'error'\"\r\n :transition=\"transition\"\r\n appear>\r\n <div class=\"ev-img--error\">\r\n <slot name=\"error\" />\r\n </div>\r\n </ev-transition>\r\n </template>\r\n <template v-if=\"slots.default\" #default>\r\n <slot name=\"default\" />\r\n </template>\r\n </ev-responsive>\r\n</template>\r\n","<script setup lang=\"ts\">\n/**\n * `<ev-avatar>`\n */\nimport \"./EvAvatar.scss\";\nimport { makeEvAvatarProps } from \"./EvAvatar\";\nimport { useAppearance } from \"@/util\";\nimport { EvIcon } from \"@/components/EvIcon\";\nimport { EvImg } from \"@/components/EvImg\";\nimport { useSize } from \"@/composables/size\";\nimport { useRounded } from \"@/composables/rounded\";\nimport { useDefaults } from \"@/composables\";\n\nconst definedProps = defineProps({\n ...makeEvAvatarProps(),\n});\nconst props = useDefaults(definedProps);\nconst { appearanceClass, variantClass } = useAppearance(props);\nconst { sizeClasses, sizeStyles } = useSize(props);\nconst { roundedClasses } = useRounded(props);\n\ndefineSlots<{\n default(): never;\n}>();\n\n// @todo: color styles\n</script>\n\n<template>\n <div\n :class=\"[\n 'ev-avatar',\n appearanceClass,\n variantClass,\n sizeClasses,\n roundedClasses,\n props.class,\n ]\"\n :style=\"[sizeStyles, props.style]\">\n <ev-img\n v-if=\"props.image\"\n key=\"image\"\n alt=\"\"\n cover\n :src=\"props.image\" />\n <ev-icon v-else-if=\"props.icon\" :glyph=\"props.icon\" />\n <slot v-else name=\"default\">{{ props.text }}</slot>\n </div>\n</template>\n","import { Anchor, AnchorSelector, propsFactory } from \"@/util\";\nimport { computed, CSSProperties, PropType } from \"vue\";\nimport { useRtl } from \"@/composables/locale\";\n\nexport interface PositionProps {\n position?: AnchorSelector;\n}\n\nexport const makePositionProps = propsFactory(\n {\n position: String as PropType<AnchorSelector>,\n },\n \"position\",\n);\n\nconst oppositeMap = {\n center: \"center\",\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n} as const;\n\nexport type Position = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type Alignment = \"left\" | \"right\" | \"center\";\n\nexport function usePosition(\n props: PositionProps,\n opposite = false,\n offset?: (side: string) => number,\n) {\n const { isRtl } = useRtl();\n\n const positionStyles = computed(() => {\n if (!props.position) {\n return {};\n }\n const anchor = Anchor.fromSelector(props.position, isRtl.value);\n\n function getOffset(side: string) {\n return offset ? offset(side) : 0;\n }\n\n const styles = {} as CSSProperties;\n\n if (anchor.side !== \"center\" && anchor.side !== \"auto\") {\n if (opposite) {\n styles[oppositeMap[anchor.side]] =\n `calc(100% - ${getOffset(anchor.side)}px)`;\n } else {\n styles[anchor.side] = 0;\n }\n }\n\n if (anchor.physicalAlignment !== \"center\") {\n if (opposite) {\n styles[oppositeMap[anchor.physicalAlignment]] =\n `calc(100% - ${getOffset(anchor.physicalAlignment)}px)`;\n } else {\n styles[anchor.physicalAlignment] = 0;\n }\n } else {\n if (anchor.side === \"center\") {\n styles.top = styles.left = \"50%\";\n } else {\n styles[\n (\n {\n top: \"left\",\n bottom: \"left\",\n left: \"top\",\n right: \"top\",\n } as const\n )[anchor.side as Position]\n ] = \"50%\";\n }\n if (anchor.side !== \"auto\") {\n styles.transform = {\n top: \"translateX(-50%)\",\n bottom: \"translateX(-50%)\",\n left: \"translateY(-50%)\",\n right: \"translateY(-50%)\",\n center: \"translate(-50%, -50%)\",\n }[anchor.side];\n }\n }\n\n return styles;\n });\n\n return { positionStyles };\n}\n","import { makeAppearanceProps, propsFactory } from \"@/util\";\nimport { IconProp } from \"@/composables/icons\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makePositionProps } from \"@/composables/position\";\nimport { makeEvTransitionProps } from \"@/components/EvTransition\";\n\nexport const makeEvBadgeProps = propsFactory(\n {\n icon: IconProp,\n bordered: Boolean,\n content: [Number, String],\n dot: Boolean,\n floating: Boolean,\n max: [Number, String],\n bold: Boolean,\n inline: Boolean,\n modelValue: {\n type: Boolean,\n default: true,\n },\n offsetX: [Number, String],\n offsetY: [Number, String],\n pulsate: Boolean,\n\n ...makeComponentProps(),\n ...makePositionProps({\n position: \"top end\",\n } as const),\n ...makeAppearanceProps(),\n ...makeEvTransitionProps({\n transition: \"scale-rotate-transition\",\n }),\n },\n \"EvBadge\",\n);\n","<script setup lang=\"ts\">\n/**\n * `<ev-badge>`\n */\nimport \"./EvBadge.scss\";\nimport { makeEvBadgeProps } from \"./EvBadge\";\nimport { computed } from \"vue\";\nimport { appearanceModifier } from \"@/util\";\nimport { EvTransition } from \"@/components/EvTransition\";\nimport { EvIcon } from \"@/components/EvIcon\";\nimport { usePosition } from \"@/composables/position\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { useDefaults } from \"@/composables\";\n\nconst definedProps = defineProps({\n ...makeEvBadgeProps(),\n});\nconst props = useDefaults(definedProps);\nconst slots = defineSlots<{\n default(): never;\n content(): never;\n}>();\n\nconst modelValue = useModelProxy(props, \"modelValue\");\n\nconst contentNumber = computed(() => {\n return Number(props.content);\n});\n\nconst content = computed(() => {\n return !props.max || isNaN(contentNumber.value)\n ? props.content\n : contentNumber.value <= +props.max\n ? contentNumber.value\n : `${props.max}+`;\n});\n\nconst { positionStyles } = usePosition(props, true, (side) => {\n const base = props.floating ? (props.dot ? 2 : 4) : props.dot ? 8 : 16;\n\n return (\n base +\n ([\"top\", \"bottom\"].includes(side)\n ? +(props.offsetY ?? 0)\n : [\"left\", \"right\"].includes(side)\n ? +(props.offsetX ?? 0)\n : 0)\n );\n});\n\nconst isInline = computed(() => {\n return props.inline ? true : !slots.default;\n});\n</script>\n\n<template>\n <div\n :class=\"[\n 'ev-badge',\n {\n 'is-inline': isInline,\n 'is-dot': props.dot,\n 'is-bordered': props.bordered,\n 'is-floating': props.floating,\n },\n props.class,\n ]\"\n :style=\"props.style\">\n <slot />\n\n <ev-transition appear :transition=\"props.transition\">\n <div\n v-show=\"modelValue\"\n :class=\"[\n 'ev-badge--content',\n appearanceModifier(props.appearance),\n {\n 'is-variant-bold': props.bold,\n 'is-pulsate': props.pulsate,\n },\n ]\"\n :style=\"[isInline ? {} : positionStyles]\"\n aria-atomic=\"true\"\n :aria-label=\"contentNumber.toString()\"\n aria-live=\"polite\"\n role=\"status\">\n <slot v-if=\"!props.dot && slots.content\" name=\"content\" />\n <ev-icon v-if=\"!props.dot && props.icon\" :glyph=\"props.icon\" />\n <template v-else-if=\"!props.dot\">{{ content }}</template>\n </div>\n </ev-transition>\n </div>\n</template>\n","import { AppearanceProp, makeAppearanceProps, propsFactory } from \"@/util\";\nimport {\n IconProp,\n IconValue,\n makeComponentProps,\n makeTagProps,\n} from \"@/composables\";\nimport { PropType, Ref } from \"vue\";\nimport { EvButtonProps } from \"@/components/EvButton\";\n\ntype ModelValueProp = boolean | Ref<boolean>;\n\nexport interface EvBannerProps {\n actions?: EvButtonProps[];\n appearance?: AppearanceProp;\n dismissible?: boolean;\n icon?: IconValue;\n modelValue?: Ref<boolean>;\n onDismiss?: () => void;\n text?: string;\n}\n\nexport interface EvBannerSlots {\n icon?: any;\n default?: any;\n actions?: any;\n}\n\nexport const makeEvBannerProps = propsFactory(\n {\n actions: Array as PropType<EvButtonProps[]>,\n dismissible: [Boolean, Object] as PropType<ModelValueProp>,\n icon: IconProp,\n modelValue: {\n type: [Boolean, Object] as PropType<ModelValueProp>,\n default: true,\n },\n text: String,\n ...makeAppearanceProps({\n variant: \"bold\",\n }),\n ...makeTagProps({\n tag: \"section\",\n }),\n ...makeComponentProps(),\n },\n \"EvBanner\",\n);","import {\n NavigationGuardNext,\n RouteLocationRaw,\n Router,\n RouterLink,\n useLink,\n UseLinkOptions,\n} from \"vue-router\";\nimport {\n computed,\n ComputedRef,\n nextTick,\n onScopeDispose,\n PropType,\n Ref,\n resolveDynamicComponent,\n SetupContext,\n toRef,\n} from \"vue\";\nimport {\n Browser,\n ClickEventListeners,\n hasEventListener,\n isString,\n propsFactory,\n} from \"@/util\";\n\n/**\n * # RouterLink or Href Props\n *\n * We need to be able to accommodate `<a href=\"\">` links\n * as well as `<router-link to=\"...\">` links.\n *\n * This is an important distinction in Evance since we use both.\n *\n */\nexport interface RouterLinkOrHrefProps {\n href?: string;\n replace?: boolean;\n to?: RouteLocationRaw;\n exact?: boolean;\n}\n\n/**\n * # Use RouterLink or Href\n */\nexport interface UseRouterLinkOrHref\n extends Omit<Partial<ReturnType<typeof useLink>>, \"href\"> {\n isLink: ComputedRef<boolean>;\n isClickable: ComputedRef<boolean>;\n href: Ref<string | undefined>;\n}\n\n/**\n * # Is Clickable Link\n * @param props\n * @param attrs\n */\nexport function isClickableLink(\n props: RouterLinkOrHrefProps & ClickEventListeners,\n attrs: SetupContext[\"attrs\"],\n): ComputedRef<boolean> {\n return computed(() => {\n return (\n !!(props.href || props.to) ||\n hasEventListener(attrs, \"click\") ||\n hasEventListener(props, \"click\")\n );\n });\n}\n\n/**\n * # Is RouterLink or Href\n * @param props\n */\nexport function isRouterLinkOrHref(\n props: RouterLinkOrHrefProps,\n): ComputedRef<boolean> {\n return computed(() => {\n return !!(props.href || props.to);\n });\n}\n\n/**\n * # Make Router Props\n */\nexport const makeRouterLinkOrHrefProps = propsFactory(\n {\n href: String,\n replace: Boolean,\n to: [String, Object] as PropType<RouteLocationRaw>,\n exact: Boolean,\n },\n \"router\",\n);\n\n/**\n * # Use Router Link or Href\n *\n * This is heavily \"inspired\" by Vuetify.\n * https://github.com/vuetifyjs/vuetify/blob/master/packages/vuetify/src/composables/router.tsx\n *\n * @param props\n * @param attrs\n */\nexport function useRouterLinkOrHref(\n props: RouterLinkOrHrefProps,\n attrs: SetupContext[\"attrs\"],\n): UseRouterLinkOrHref {\n const routerLink = resolveDynamicComponent(\"RouterLink\") as\n | typeof RouterLink\n | string;\n const isLink = isRouterLinkOrHref(props);\n const isClickable = isClickableLink(props, attrs);\n if (isString(routerLink)) {\n return {\n isLink,\n isClickable,\n href: toRef(props, \"href\"),\n };\n }\n const link = props.to\n ? routerLink.useLink(props as UseLinkOptions)\n : undefined;\n return {\n isLink,\n isClickable,\n route: link?.route,\n navigate: link?.navigate,\n isActive:\n link &&\n computed(() =>\n props.exact ? link.isExactActive?.value : link.isActive?.value,\n ),\n isExactActive: link?.isExactActive,\n href: computed(() => (props.to ? link?.route.value.href : props.href)),\n };\n}\n\n/**\n * # Use Back Button\n *\n * Listen to PopStateEvents dispatched to the window every time the\n * active history entry changes between two history entries for the same document.\n *\n * We need this for navigation on single page apps.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PopStateEvent\n */\nlet isTransitioning = false;\nexport function useBackButton(\n router: Router | undefined,\n callback: (next: NavigationGuardNext) => void,\n) {\n let isPopped = false;\n let removeBefore: (() => void) | undefined;\n let removeAfter: (() => void) | undefined;\n\n function onPopState(e: PopStateEvent) {\n if (e.state?.replaced) {\n return;\n }\n isPopped = true;\n // Use setTimeout to be asynchronous\n setTimeout(() => (isPopped = false));\n }\n\n if (Browser.hasWindow) {\n nextTick(() => {\n window.addEventListener(\"popstate\", onPopState);\n removeBefore = router?.beforeEach((to, from, next) => {\n if (!isTransitioning) {\n // Use setTimeout to be asynchronous\n setTimeout(() => {\n return isPopped ? callback(next) : next();\n });\n } else {\n isPopped ? callback(next) : next();\n }\n isTransitioning = true;\n });\n removeAfter = router?.afterEach(() => {\n isTransitioning = false;\n });\n });\n\n onScopeDispose(() => {\n window.removeEventListener(\"popstate\", onPopState);\n removeBefore?.();\n removeAfter?.();\n });\n }\n}\n","import {\n consoleWarn,\n EventProp,\n findChildrenWithProvide,\n getCurrentComponent,\n isDeepEqual,\n propsFactory,\n wrapInArray,\n} from \"@/util\";\nimport {\n ComponentInternalInstance,\n computed,\n ComputedRef,\n InjectionKey,\n onBeforeUnmount,\n onMounted,\n PropType,\n provide,\n reactive,\n Ref,\n toRef,\n UnwrapRef,\n} from \"vue\";\nimport { GroupItem } from \"@/composables/groupItem\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\n\n/**\n * # GroupProps\n */\nexport interface GroupProps {\n disabled: boolean;\n modelValue: unknown;\n multiple?: boolean;\n mandatory?: boolean | \"force\" | undefined;\n max?: number | undefined;\n selectedClass: string | undefined;\n selectedAppearance: string | undefined;\n selectedVariant: string | undefined;\n \"onUpdate:modelValue\": EventProp<[unknown]> | undefined;\n}\n\n/**\n * # GroupProvide\n */\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void;\n unregister: (id: number) => void;\n select: (id: number, value: boolean) => void;\n selected: Ref<Readonly<number[]>>;\n isSelected: (id: number) => boolean;\n previous: () => void;\n next: () => void;\n selectedClass: Ref<string | undefined>;\n selectedAppearance: Ref<string | undefined>;\n selectedVariant: Ref<string | undefined>;\n items: ComputedRef<\n {\n id: number;\n value: unknown;\n disabled: boolean | undefined;\n }[]\n >;\n disabled: Ref<boolean | undefined>;\n getItemIndex: (value: unknown) => number;\n}\n\n/**\n * # makeGroupProps\n */\nexport const makeGroupProps = propsFactory(\n {\n modelValue: {\n type: null,\n default: undefined,\n },\n multiple: Boolean,\n mandatory: [Boolean, String] as PropType<boolean | \"force\">,\n max: Number,\n selectedClass: String,\n selectedAppearance: String,\n selectedVariant: String,\n disabled: Boolean,\n },\n \"group\",\n);\n\n/**\n * # getItemIndex\n *\n * @param items\n * @param value\n */\nfunction getItemIndex(items: UnwrapRef<GroupItem[]>, value: unknown): number {\n const ids = getIds(items, [value]);\n if (!ids.length) {\n return -1;\n }\n return items.findIndex((item) => item.id === ids[0]);\n}\n\n/**\n * ## getIds\n *\n * @param items\n * @param modelValue\n */\nfunction getIds(items: UnwrapRef<GroupItem[]>, modelValue: any[]): number[] {\n const ids: number[] = [];\n modelValue.forEach((value) => {\n const item = items.find((item) => isDeepEqual(value, item.value));\n const itemByIndex = items[value];\n if (item?.value != null) {\n ids.push(item.id);\n } else if (itemByIndex != null) {\n ids.push(itemByIndex.id);\n }\n });\n return ids;\n}\n\n/**\n * ## getValues\n *\n * @param items\n * @param ids\n */\nfunction getValues(items: UnwrapRef<GroupItem[]>, ids: any[]): unknown[] {\n const values: unknown[] = [];\n ids.forEach((id) => {\n const itemIndex = items.findIndex((item) => item.id === id);\n if (~itemIndex) {\n const item = items[itemIndex];\n values.push(item.value != null ? item.value : itemIndex);\n }\n });\n return values;\n}\n\n/**\n * # useGroup\n *\n * @param props\n * @param injectKey\n */\nexport function useGroup(\n props: GroupProps,\n injectKey: InjectionKey<GroupProvide>,\n) {\n let isUnmounted = false;\n const items = reactive<GroupItem[]>([]);\n\n const selected = useModelProxy(\n props,\n \"modelValue\",\n [],\n (value) => {\n return value == null ? [] : getIds(items, wrapInArray(value));\n },\n (value) => {\n const values = getValues(items, value);\n return props.multiple ? values : values[0];\n },\n );\n\n const groupComponent = getCurrentComponent(\"useGroup\");\n\n function register(\n item: GroupItem,\n itemComponent: ComponentInternalInstance,\n ) {\n // Is there a better way to fix this typing?\n const unwrapped = item as unknown as UnwrapRef<GroupItem>;\n const key = Symbol.for(`${injectKey.description}:id`);\n const children = findChildrenWithProvide(key, groupComponent?.vnode);\n const index = children.indexOf(itemComponent);\n\n if (index > -1) {\n items.splice(index, 0, unwrapped);\n } else {\n items.push(unwrapped);\n }\n }\n\n function unregister(id: number) {\n if (isUnmounted) {\n return;\n }\n // TODO: re-evaluate this line's importance in the future\n // should we only modify the model if mandatory is set.\n // selected.value = selected.value.filter(v => v !== id)\n forceMandatoryValue();\n\n const index = items.findIndex((item) => item.id === id);\n items.splice(index, 1);\n }\n\n // If mandatory and nothing is selected, then select first non-disabled item\n function forceMandatoryValue() {\n const item = items.find((item) => !item.disabled);\n if (item && props.mandatory === \"force\" && !selected.value.length) {\n selected.value = [item.id];\n }\n }\n\n onMounted(() => {\n forceMandatoryValue();\n });\n\n onBeforeUnmount(() => {\n isUnmounted = true;\n });\n\n function select(id: number, value?: boolean) {\n const item = items.find((item) => item.id === id);\n if (value && item?.disabled) {\n return;\n }\n\n if (props.multiple) {\n const internalValue = selected.value.slice();\n const index = internalValue.findIndex((v: number) => v === id);\n const isSelected = ~index;\n value = value ?? !isSelected;\n\n // We can't remove value if group is mandatory, value already exists, and it is the only value\n if (isSelected && props.mandatory && internalValue.length <= 1) {\n return;\n }\n\n // We can't add value if it would cause max limit to be exceeded\n if (\n !isSelected &&\n props.max != null &&\n internalValue.length + 1 > props.max\n ) {\n return;\n }\n\n if (index < 0 && value) {\n internalValue.push(id);\n } else if (index >= 0 && !value) {\n internalValue.splice(index, 1);\n }\n\n selected.value = internalValue;\n } else {\n const isSelected = selected.value.includes(id);\n if (props.mandatory && isSelected) {\n return;\n }\n selected.value = value ?? !isSelected ? [id] : [];\n }\n }\n\n function step(offset: number) {\n // getting an offset from selected value obviously won't work with multiple values\n if (props.multiple) {\n consoleWarn(\n 'This method is not supported when using \"multiple\" prop',\n );\n }\n\n if (!selected.value.length) {\n const item = items.find((item) => !item.disabled);\n if (item) {\n selected.value = [item.id];\n }\n } else {\n const currentId = selected.value[0];\n const currentIndex = items.findIndex((i) => i.id === currentId);\n\n let newIndex = (currentIndex + offset) % items.length;\n let newItem = items[newIndex];\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length;\n newItem = items[newIndex];\n }\n\n if (newItem.disabled) {\n return;\n }\n selected.value = [items[newIndex].id];\n }\n }\n\n const state: GroupProvide = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(props, \"disabled\"),\n previous: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: number) => selected.value.includes(id),\n selectedClass: computed(() => props.selectedClass),\n selectedAppearance: computed(() => props.selectedAppearance),\n selectedVariant: computed(() => props.selectedVariant),\n items: computed(() => items),\n getItemIndex: (value: unknown) => getItemIndex(items, value),\n };\n\n provide(injectKey, state);\n\n return state;\n}\n","import { Appearance, InputSizeProp, propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport { PropType } from \"vue\";\nimport {\n ButtonAppearanceProp,\n ButtonVariantProp,\n EvButtonProps,\n} from \"@/components/EvButton\";\n\nexport type ButtonGroupGap =\n | \"none\"\n | \"auto\"\n | \"x-small\"\n | \"small\"\n | \"medium\"\n | \"large\"\n | \"x-large\";\n\nexport const makeEvButtonGroupProps = propsFactory(\n {\n items: {\n type: Array as PropType<readonly EvButtonProps[]>,\n default: () => [],\n },\n appearance: {\n type: String as PropType<ButtonAppearanceProp>,\n default: Appearance.default,\n },\n gap: {\n type: String as PropType<ButtonGroupGap>,\n default: \"auto\",\n },\n grow: Boolean,\n rounded: Boolean,\n size: String as PropType<InputSizeProp>,\n variant: {\n type: String as PropType<ButtonVariantProp>,\n default: \"default\",\n },\n\n ...makeComponentProps(),\n ...makeTagProps(),\n },\n \"EvButtonGroup\",\n);\n","import { GroupProvide, makeGroupProps } from \"@/composables/group\";\nimport { InjectionKey } from \"vue\";\nimport { propsFactory } from \"@/util\";\nimport { makeEvButtonGroupProps } from \"@/components/EvButtonGroup/EvButtonGroup\";\n\nexport type SelectButtonSlotProps =\n | \"isSelected\"\n | \"select\"\n | \"selected\"\n | \"next\"\n | \"previous\";\nexport interface DefaultSelectButtonSlot\n extends Pick<GroupProvide, SelectButtonSlotProps> {}\n\nexport const EvButtonSelectSymbol: InjectionKey<GroupProvide> =\n Symbol.for(\"ev:button-select\");\n\nexport type EvButtonSelectSlots = {\n default: DefaultSelectButtonSlot;\n};\n\n/**\n * # makeEvButtonSelectProps\n */\nexport const makeEvButtonSelectProps = propsFactory(\n {\n ...makeEvButtonGroupProps({\n gap: \"none\",\n appearance: \"default\",\n variant: \"outlined\",\n }),\n ...makeGroupProps({\n selectedAppearance: \"primary\",\n selectedVariant: \"outlined\",\n }),\n },\n \"EvButtonSelect\",\n);\n","import {\n EventProp,\n getCurrentComponent,\n getNextId,\n propsFactory,\n} from \"@/util\";\nimport {\n computed,\n ExtractPropTypes,\n inject,\n InjectionKey,\n onBeforeUnmount,\n provide,\n Ref,\n toRef,\n watch,\n} from \"vue\";\nimport { GroupProvide } from \"@/composables/group\";\n\n/**\n * # GroupItem\n */\nexport interface GroupItem {\n id: number;\n value: Ref<unknown>;\n disabled: Ref<boolean | undefined>;\n}\n\n/**\n * # GroupItemProvide\n */\nexport interface GroupItemProvide {\n id: number;\n isSelected: Ref<boolean>;\n toggle: () => void;\n select: (value: boolean) => void;\n selectedClass: Ref<(string | undefined)[] | false>;\n selectedAppearance: Ref<string | undefined>;\n selectedVariant: Ref<string | undefined>;\n value: Ref<unknown>;\n disabled: Ref<boolean | undefined>;\n group: GroupProvide;\n}\n\n/**\n * # makeGroupItemProps\n */\nexport const makeGroupItemProps = propsFactory(\n {\n value: null,\n disabled: Boolean,\n selectedClass: String,\n selectedAppearance: String,\n selectedVariant: String,\n },\n \"group-item\",\n);\n\n/**\n * # GroupItemProps\n */\nexport interface GroupItemProps\n extends ExtractPropTypes<ReturnType<typeof makeGroupItemProps>> {\n \"onGroup:selected\"?: EventProp<[{ value: boolean }]> | undefined;\n}\n\n/**\n * # useGroupItem\n */\nexport function useGroupItem(\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: boolean,\n): GroupItemProvide | undefined {\n const component = getCurrentComponent(\"useGroupItem\");\n if (!component) {\n throw new Error(\n \"Evance UI: `useGroupItem()` composable must be used inside a component setup function\",\n );\n }\n const id = getNextId();\n provide(Symbol.for(`${injectKey.description}:id`), id);\n\n const group = inject(injectKey, null);\n if (!group) {\n if (!required) {\n return undefined;\n }\n throw new Error(\n `Evance UI: Could not find \\`useGroup()\\` injection with symbol '${injectKey.description}'.`,\n );\n }\n\n const value = toRef(props, \"value\");\n const disabled = computed(() => {\n return !!(group.disabled.value || props.disabled);\n });\n const isSelected = computed(() => {\n return group.isSelected(id);\n });\n const selectedClass = computed(() => {\n return (\n isSelected.value && [group.selectedClass.value, props.selectedClass]\n );\n });\n const selectedAppearance = computed(() => {\n return isSelected.value\n ? props.selectedAppearance ?? group?.selectedAppearance.value\n : undefined;\n });\n const selectedVariant = computed(() => {\n return isSelected.value\n ? props.selectedVariant ?? group?.selectedVariant.value\n : undefined;\n });\n\n group.register(\n {\n id,\n value,\n disabled,\n },\n component,\n );\n\n onBeforeUnmount(() => {\n group.unregister(id);\n });\n\n watch(isSelected, (value) => {\n component.emit(\"group:selected\", { value });\n });\n\n return {\n id,\n isSelected,\n toggle: () => group.select(id, !isSelected.value),\n select: (value: boolean) => group.select(id, value),\n selectedClass,\n selectedAppearance,\n selectedVariant,\n value,\n disabled,\n group,\n };\n}\n","import {\n Appearance,\n AppearanceProp,\n InputSizeProp,\n propsFactory,\n VariantProp,\n} from \"@/util\";\nimport { IconProp, IconValue } from \"@/composables/icons\";\nimport {\n makeRouterLinkOrHrefProps,\n RouterLinkOrHrefProps,\n} from \"@/composables/router\";\nimport { PropType } from \"vue\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { EvButtonSelectSymbol } from \"@/components/EvButtonSelect/EvButtonSelect\";\nimport { makeGroupItemProps } from \"@/composables/groupItem\";\nimport { makeThemeProps } from \"@/composables/theme\";\n\n/**\n * ## Button Appearance\n */\nexport type ButtonAppearanceProp = AppearanceProp | \"inverse\";\nexport type ButtonVariantProp = VariantProp | \"link\";\n\n/**\n * # EvButtonProps\n */\nexport interface EvButtonProps extends RouterLinkOrHrefProps {\n appearance?: ButtonAppearanceProp;\n disabled?: boolean;\n icon?: IconValue | boolean;\n iconStart?: IconValue;\n iconEnd?: IconValue;\n rounded?: boolean;\n size?: InputSizeProp;\n fullWidth?: boolean;\n text?: string;\n loading?: boolean;\n onClick?: () => void;\n variant?: ButtonVariantProp;\n}\n\n/**\n * # EvButton Props\n */\nexport const makeEvButtonProps = propsFactory(\n {\n active: {\n type: Boolean,\n default: undefined,\n },\n symbol: {\n type: null,\n default: EvButtonSelectSymbol,\n },\n appearance: {\n type: String as PropType<ButtonAppearanceProp>,\n default: Appearance.default,\n },\n icon: [Boolean, String, Function, Object] as PropType<\n boolean | IconValue\n >,\n iconStart: IconProp,\n iconEnd: IconProp,\n rounded: Boolean,\n size: String as PropType<InputSizeProp>,\n fullWidth: Boolean,\n readonly: Boolean,\n selectedIcon: IconProp,\n selectedIconStart: IconProp,\n selectedIconEnd: IconProp,\n text: String,\n loading: Boolean,\n variant: {\n type: String as PropType<ButtonVariantProp>,\n default: \"default\",\n },\n ...makeThemeProps(),\n ...makeComponentProps(),\n ...makeRouterLinkOrHrefProps(),\n ...makeGroupItemProps(),\n },\n \"EvButton\",\n);\n","<script setup lang=\"ts\">\n/**\n * # EvProgressCircular\n */\nimport \"./EvProgressCircular.scss\";\nimport { appearanceModifier, AppearanceProp, toWebUnit } from \"@/util\";\nimport { ref } from \"vue\";\n\ntype Size = \"default\";\n\ninterface ProgressProps {\n appearance?: AppearanceProp;\n indeterminate?: boolean;\n percentage?: number;\n rotate?: number;\n size?: Size | number;\n thickness?: number;\n}\nconst props = withDefaults(defineProps<ProgressProps>(), {\n appearance: \"default\",\n size: \"default\",\n indeterminate: false,\n percentage: 0,\n rotate: 0,\n thickness: 2,\n});\n\nconst container = ref<HTMLElement | null>(null);\nconst defaultSize = 48;\nconst defaultRadius = defaultSize / 2;\nconst defaultRotation = -90;\n\n/**\n * ## Get Size with Units\n * The default units is `px` when only a number is supplied.\n */\nfunction getSizeWithUnits() {\n if (props.size === \"default\") {\n return undefined;\n }\n return toWebUnit(props.size);\n}\n\n/**\n * ## Get Circumference\n * Calculate the circumference of the inner circles.\n */\nfunction getCircumference() {\n return Math.PI * (getRadius() * 2);\n}\n\n/**\n * ## Get Width\n * Returns the width of the container.\n */\nfunction getContainerWidth() {\n return !container.value ? defaultSize : container.value.clientWidth;\n}\n\n/**\n * ## Get Progress Offset\n * Calculate progress offset based on the percentage of the circumference.\n */\nfunction getProgressOffset() {\n return props.indeterminate\n ? 0\n : getCircumference() * (1 - props.percentage / 100);\n}\n\n/**\n * ## Get Radius\n * Calculate the radius of the\n */\nfunction getRadius() {\n return defaultRadius - getThickness() / 2;\n}\n\n/**\n * ## Get Rotation\n * Returns the starting point rotation style.\n */\nfunction getRotation() {\n const rotation = defaultRotation + props.rotate;\n return `rotate(${rotation}deg)`;\n}\n\n/**\n * ## Get Thickness (Stroke Width)\n * Calculate the requested stroke width as this will be different from\n * the actual stroke-width attribute.\n */\nfunction getThickness() {\n const maxThickness = defaultSize / 2;\n const thickness = (props.thickness / getContainerWidth()) * defaultSize;\n return thickness > maxThickness ? maxThickness : thickness;\n}\n</script>\n\n<template>\n <span\n ref=\"container\"\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n :aria-valuenow=\"percentage\"\n class=\"ev-progress-circular\"\n :class=\"[\n {\n 'is-indeterminate': props.indeterminate,\n 'is-size-default': props.size === 'default',\n },\n appearanceModifier(props.appearance, ['default']),\n ]\"\n :style=\"{\n width: getSizeWithUnits(),\n height: getSizeWithUnits(),\n }\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 48 48\"\n :style=\"{\n transform: getRotation(),\n }\">\n <circle\n class=\"ev-progress-circular--track\"\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n :r=\"getRadius()\"\n :stroke-width=\"getThickness()\"\n :stroke-dasharray=\"getCircumference()\"\n stroke-dashoffset=\"0\"></circle>\n <circle\n class=\"ev-progress-circular--bar\"\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n :r=\"getRadius()\"\n :stroke-width=\"getThickness()\"\n :stroke-dasharray=\"getCircumference()\"\n :stroke-dashoffset=\"getProgressOffset()\"></circle>\n </svg>\n <span class=\"ev-progress-circular--content\">\n <slot />\n </span>\n </span>\n</template>\n","import { UseRouterLinkOrHref } from \"@/composables/router\";\nimport { nextTick, watch } from \"vue\";\n\n/**\n * # useSelectLink\n *\n * @param link\n * @param select\n */\nexport function useSelectLink(\n link: UseRouterLinkOrHref,\n select?: (value: boolean, e?: Event) => void,\n) {\n watch(\n () => link.isActive?.value,\n (isActive) => {\n if (link.isLink.value && isActive && select) {\n nextTick(() => {\n select(true);\n });\n }\n },\n {\n immediate: true,\n },\n );\n}\n","<script setup lang=\"ts\">\n/**\n * # EvButton\n */\nimport \"./EvButton.scss\";\nimport { makeEvButtonProps } from \"./EvButton\";\nimport { computed, useAttrs } from \"vue\";\nimport { EvIcon } from \"@/components/EvIcon\";\nimport { EvProgressCircular } from \"@/components/EvProgressCircular\";\nimport {\n AppearanceProps,\n InputSize,\n isBoolean,\n sizeModifier,\n useAppearance,\n Variant,\n} from \"@/util\";\nimport {\n RouterLinkOrHrefProps,\n useRouterLinkOrHref,\n} from \"@/composables/router.ts\";\nimport { useDefaults } from \"@/composables/defaults\";\nimport { useGroupItem } from \"@/composables/groupItem\";\nimport { useSelectLink } from \"@/composables/selectLink\";\nimport { provideTheme } from \"@/composables/theme\";\n\nconst definedProps = defineProps({\n ...makeEvButtonProps(),\n});\nconst props = useDefaults(definedProps);\n\ndefineEmits([\"group:selected\"]);\n\nconst attrs = useAttrs();\nconst slots = defineSlots<{\n default(): never;\n icon(): never;\n \"icon-end\"(): never;\n \"icon-start\"(): never;\n prefix(): never;\n suffix(): never;\n additional(): never;\n}>();\nconst group = useGroupItem(props, props.symbol, false);\nconst link = useRouterLinkOrHref(props as RouterLinkOrHrefProps, attrs);\n\nconst isActive = computed(() => {\n if (props.active !== undefined) {\n return props.active;\n }\n if (link.isLink.value) {\n return link.isActive?.value;\n }\n return group?.isSelected.value;\n});\n\nconst isDisabled = computed(() => {\n // we'll add groups later\n return group?.disabled.value || props.disabled;\n});\n\nconst isClickable = computed(() => {\n return !isDisabled.value && !props.loading;\n});\n\n/**\n * ## Is Icon Like?\n *\n * Used to determine whether to apply `is-icon` modifier class.\n *\n * Returns `true` if only one icon is applied, the button is not full-width\n * and no text has been supplied.\n *\n * OR, the `icon` prop is supplied as `true`.\n */\nconst isIconLike = computed(() => {\n const icons = [props.icon, props.iconStart, props.iconEnd].filter(\n (icon) => !!icon,\n );\n return (\n ((icons.length === 1 && !slots.default && !props.text) ||\n props.icon === true) &&\n !props.fullWidth\n );\n});\n\n/**\n * ## Is Link?\n * Returns `true` if an `href` was supplied AND is NOT an empty string.\n */\nconst isLink = computed(() => {\n return link.isLink.value;\n});\n\n/**\n * ## Component Element\n *\n * An `<ev-button>` may render as:\n * - `<a>` when an `href` is supplied\n * - `<button>` when `href` is NOT supplied, or is an empty string\n */\nconst componentElement = computed(() => {\n return isLink.value ? \"a\" : \"button\";\n});\n\n/**\n * # On Click\n * @param e\n */\nfunction onClick(e: MouseEvent): void {\n if (\n isDisabled.value ||\n (isLink.value &&\n (e.metaKey ||\n e.ctrlKey ||\n e.shiftKey ||\n e.button !== 0 ||\n attrs.target === \"_blank\"))\n ) {\n return;\n }\n link.navigate?.(e);\n group?.toggle();\n}\n\nuseSelectLink(link, group?.select);\n\nconst { appearanceClass, variantClass } = useAppearance(\n props as AppearanceProps,\n group,\n isActive,\n Variant.bold,\n);\nconst { themeClasses } = provideTheme(props);\n\nconst valueAttr = computed(() => {\n if (props.value === undefined || typeof props.value === \"symbol\") {\n return undefined;\n }\n return Object(props.value) === props.value\n ? JSON.stringify(props.value, null, 0)\n : props.value;\n});\n\ndefineExpose({\n group,\n});\n\nconst icon = computed(() => {\n return group?.isSelected.value\n ? props.selectedIcon ?? props.icon\n : props.icon;\n});\n\nconst iconStart = computed(() => {\n return group?.isSelected.value\n ? props.selectedIconStart ?? props.iconStart\n : props.iconStart;\n});\n\nconst iconEnd = computed(() => {\n return group?.isSelected.value\n ? props.selectedIconEnd ?? props.iconEnd\n : props.iconEnd;\n});\n</script>\n\n<template>\n <component\n :is=\"componentElement\"\n :href=\"link.href.value\"\n :class=\"[\n 'ev-button',\n group?.selectedClass.value,\n themeClasses,\n appearanceClass,\n variantClass,\n sizeModifier(props.size as string, [InputSize.default]),\n {\n 'is-active': isActive,\n 'is-disabled': isDisabled,\n 'is-icon': isIconLike,\n 'is-fullwidth': props.fullWidth,\n 'is-loading': props.loading,\n 'is-readonly': props.readonly,\n 'is-rounded': props.rounded,\n 'is-clickable': isClickable,\n },\n props.class,\n ]\"\n :style=\"props.style\"\n :tabindex=\"props.readonly ? -1 : 0\"\n :disabled=\"isDisabled || undefined\"\n :value=\"valueAttr\"\n @click=\"onClick\">\n <span\n v-if=\"iconStart || slots['icon-start']\"\n class=\"ev-button--icon-start\">\n <slot name=\"icon-start\">\n <ev-icon :glyph=\"iconStart\" />\n </slot>\n </span>\n <span v-if=\"slots.prefix\" class=\"ev-button--prefix\">\n <slot name=\"prefix\" />\n </span>\n <span\n v-if=\"(icon || slots.icon) && !isBoolean(icon)\"\n class=\"ev-button--icon\">\n <slot name=\"icon\">\n <ev-icon :glyph=\"icon\" />\n </slot>\n </span>\n <span\n v-if=\"props.text || slots.default\"\n class=\"ev-button--content\"\n data-no-activator>\n <slot>{{ props.text }}</slot>\n </span>\n <span v-if=\"slots.suffix\" class=\"ev-button--suffix\">\n <slot name=\"suffix\" />\n </span>\n <span v-if=\"iconEnd || slots['icon-end']\" class=\"ev-button--icon-end\">\n <slot name=\"icon-end\">\n <ev-icon :glyph=\"iconEnd\" />\n </slot>\n </span>\n <span v-if=\"props.loading\" class=\"ev-button--loading\">\n <ev-progress-circular indeterminate />\n </span>\n <slot name=\"additional\" />\n </component>\n</template>\n","<script setup lang=\"ts\">\n/**\n * # EvButtonGroup\n */\nimport \"./EvButtonGroup.scss\";\nimport { makeEvButtonGroupProps } from \"./EvButtonGroup\";\nimport { provideDefaults, useDefaults } from \"@/composables/defaults\";\nimport { computed, toRef } from \"vue\";\nimport {\n appearanceModifier,\n getNextId,\n makeClassName,\n variantModifier,\n} from \"@/util\";\nimport { EvButton } from \"../EvButton\";\n\nconst definedProps = defineProps({\n ...makeEvButtonGroupProps(),\n});\nconst props = useDefaults(definedProps);\n\ndefineSlots<{\n default(): never;\n}>();\n\nprovideDefaults({\n EvButton: {\n appearance: toRef(props, \"appearance\"),\n rounded: toRef(props, \"rounded\"),\n size: toRef(props, \"size\"),\n variant: toRef(props, \"variant\"),\n },\n});\n\nconst parsedItems = computed(() => {\n const items = [];\n for (const item of props.items) {\n items.push({\n props: item,\n id: getNextId(),\n });\n }\n return items;\n});\n\nconst appearanceClass = computed(() => appearanceModifier(props.appearance));\nconst variantClass = computed(() => variantModifier(props.variant));\nconst gapClass = computed(() => {\n const buttonSize = props.size ?? \"medium\";\n if (props.gap === \"auto\") {\n return makeClassName(buttonSize, \"is-gap\");\n }\n return makeClassName(props.gap, \"is-gap\");\n});\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n :class=\"[\n 'ev-button-group',\n appearanceClass,\n variantClass,\n gapClass,\n {\n 'is-rounded': props.rounded,\n 'is-grow': props.grow,\n },\n props.class,\n ]\"\n :style=\"props.style\">\n <div class=\"ev-button-group--container\">\n <slot>\n <ev-button\n v-for=\"item in parsedItems\"\n :key=\"item.id\"\n v-bind=\"item.props\" />\n </slot>\n </div>\n </component>\n</template>\n","import { propsFactory, TextAppearanceProp } from \"@/util\";\r\nimport { PropType } from \"vue\";\r\nimport { ComponentProps, makeComponentProps } from \"@/composables/component\";\r\nimport { makeTagProps, TagProps } from \"@/composables/tag\";\r\n\r\nexport const EvTextSize = {\r\n small: \"small\",\r\n medium: \"medium\",\r\n large: \"large\",\r\n xLarge: \"x-large\",\r\n} as const;\r\n\r\nexport type EvTextSizeProp = (typeof EvTextSize)[keyof typeof EvTextSize];\r\n\r\nexport const EvTextSizeClass = {\r\n \"x-large\": \"text-subtitle\",\r\n large: \"text-large\",\r\n medium: \"text-medium\",\r\n small: \"text-small\",\r\n} as const;\r\n\r\nexport type FontWeight = \"regular\" | \"medium\" | \"semibold\" | \"bold\";\r\n\r\nexport interface EvTextProps extends ComponentProps, TagProps {\r\n appearance?: TextAppearanceProp;\r\n monospace?: boolean;\r\n size?: EvTextSizeProp;\r\n text?: string;\r\n truncate?: number | boolean;\r\n weight?: FontWeight;\r\n}\r\n\r\nexport const makeEvTextProps = propsFactory(\r\n {\r\n appearance: String as PropType<TextAppearanceProp>,\r\n monospace: Boolean,\r\n size: String as PropType<EvTextSizeProp>,\r\n text: String,\r\n truncate: [Number, Boolean],\r\n weight: String as PropType<FontWeight>,\r\n ...makeComponentProps(),\r\n ...makeTagProps({\r\n tag: \"p\",\r\n }),\r\n },\r\n \"EvText\",\r\n);\r\n","<script setup lang=\"ts\">\r\nimport \"./EvText.scss\";\r\nimport { EvTextSizeClass, makeEvTextProps } from \"./EvText\";\r\nimport { computed } from \"vue\";\r\nimport {\r\n AppearanceProps,\r\n isBoolean,\r\n isNumber,\r\n makeClassName,\r\n useAppearance,\r\n} from \"@/util\";\r\nimport { useDefaults } from \"@/composables\";\r\n\r\nconst definedProps = defineProps({ ...makeEvTextProps() });\r\nconst props = useDefaults(definedProps);\r\n\r\nconst sizeClass = computed(() => {\r\n return EvTextSizeClass[props.size];\r\n});\r\n\r\nconst truncateClass = computed(() => {\r\n if (!props.truncate) {\r\n return undefined;\r\n }\r\n return isBoolean(props.truncate) ? \"is-truncate\" : \"is-truncate-lines\";\r\n});\r\n\r\nconst maxLines = computed(() => {\r\n if (isNumber(props.truncate)) {\r\n return props.truncate;\r\n }\r\n return 1;\r\n});\r\n\r\nconst weightClass = computed(() => {\r\n return props.weight\r\n ? makeClassName(props.weight, \"text-weight\")\r\n : undefined;\r\n});\r\n\r\nconst appearanceClass = computed(() => {\r\n if (!props.appearance) {\r\n return undefined;\r\n }\r\n const { appearanceClass } = useAppearance(props as AppearanceProps);\r\n return appearanceClass.value;\r\n});\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"props.tag\"\r\n :class=\"[\r\n 'ev-text',\r\n {\r\n 'typeface-monospace': props.monospace,\r\n },\r\n sizeClass,\r\n weightClass,\r\n truncateClass,\r\n appearanceClass,\r\n props.class,\r\n ]\"\r\n :style=\"props.style\">\r\n <slot>{{ props.text }}</slot>\r\n </component>\r\n</template>\r\n\r\n<style>\r\n.ev-text {\r\n --max-lines: v-bind(maxLines);\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\nimport \"./EvBanner.scss\";\nimport { makeEvBannerProps } from \"./EvBanner\";\nimport { EvIcon } from \"@/components/EvIcon\";\nimport { EvButtonProps, EvButton } from \"@/components/EvButton\";\nimport { EvButtonGroup } from \"@/components/EvButtonGroup\";\nimport { EvText } from \"@/components/EvText\";\nimport { computed } from \"vue\";\nimport { appearanceIcon } from \"@/composables/icons\";\nimport { appearanceModifier, makeClassName } from \"@/util\";\nimport { useLocaleFunctions, useModelProxy } from \"@/composables\";\nimport { CancelIcon } from \"@/icons\";\n\nconst props = defineProps({\n ...makeEvBannerProps(),\n});\nconst slots = defineSlots<{\n actions(): never;\n default(): never;\n icon(): never;\n}>();\nconst { t } = useLocaleFunctions();\n\nconst emit = defineEmits([\n \"dismissed\",\n \"click:dismiss\",\n \"update:modelValue\",\n]);\n\nconst modelProxy = useModelProxy(props, \"modelValue\");\n\nconst iconGlyph = computed(() => {\n return props.icon ? props.icon : appearanceIcon(props.appearance);\n});\n\nconst variantModifier = computed(() => {\n return makeClassName(props.variant, \"is-variant\");\n});\n\nconst actions = computed(() => {\n if (!props.actions) {\n return [];\n }\n const values = [];\n for (const action of props.actions) {\n const actionDefaults: EvButtonProps = {\n appearance: props.variant === \"bold\" ? \"inverse\" : props.appearance,\n variant: \"link\",\n size: \"small\",\n };\n values.push(Object.assign(actionDefaults, action));\n }\n return values;\n});\n\n/**\n * ## On Click Dismiss\n */\nfunction dismiss(): void {\n modelProxy.value = false;\n emit(\"click:dismiss\");\n}\n\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n v-show=\"modelProxy\"\n :class=\"[\n 'ev-banner',\n variantModifier,\n appearanceModifier(props.appearance),\n props.class,\n ]\">\n <div class=\"ev-banner--icon\">\n <slot name=\"icon\">\n <ev-icon :glyph=\"iconGlyph\" />\n </slot>\n </div>\n <div class=\"ev-banner--content\">\n <slot name=\"default\">\n <ev-text\n :truncate=\"true\"\n weight=\"semibold\"\n :text=\"props.text\" />\n </slot>\n </div>\n <div v-if=\"actions.length || slots.actions\" class=\"ev-banner--actions\">\n <slot name=\"actions\">\n <ev-button-group :items=\"actions\" />\n </slot>\n </div>\n <div v-if=\"props.dismissible\" class=\"ev-banner--dismiss\">\n <ev-button\n rounded\n :aria-label=\"t('dismiss')\"\n :icon=\"CancelIcon\"\n size=\"small\"\n variant=\"subtle\"\n @click=\"dismiss\" />\n </div>\n </component>\n</template>","<script setup lang=\"ts\">\r\nimport \"./EvButtonSelect.scss\";\r\nimport {\r\n EvButtonSelectSlots,\r\n EvButtonSelectSymbol,\r\n makeEvButtonSelectProps,\r\n} from \"./EvButtonSelect\";\r\nimport { EvButtonGroup } from \"../EvButtonGroup\";\r\nimport { GroupProps, useGroup } from \"@/composables/group\";\r\nimport { filterComponentProps } from \"@/util\";\r\nimport { computed } from \"vue\";\r\n\r\nconst props = defineProps({\r\n ...makeEvButtonSelectProps(),\r\n});\r\n\r\ndefineEmits([\"update:modelValue\"]);\r\n\r\ndefineSlots<EvButtonSelectSlots>();\r\n\r\nconst { isSelected, next, previous, select, selected } = useGroup(\r\n props as any as GroupProps,\r\n EvButtonSelectSymbol,\r\n);\r\n\r\ndefineExpose({\r\n next,\r\n previous,\r\n select,\r\n});\r\n\r\nconst groupProps = computed(() => filterComponentProps(EvButtonGroup, props));\r\nconst slotProps = { isSelected, next, previous, select, selected };\r\n</script>\r\n\r\n<template>\r\n <ev-button-group\r\n :class=\"['ev-button-toggle', props.class]\"\r\n :style=\"props.style\"\r\n v-bind=\"groupProps\">\r\n <slot v-bind=\"slotProps\" />\r\n </ev-button-group>\r\n</template>\r\n","import { omit, propsFactory } from \"@/util\";\nimport { InjectionKey } from \"vue\";\nimport { GroupProvide, makeGroupProps } from \"@/composables/group\";\nimport { makeEvButtonProps } from \"@/components/EvButton\";\n\nexport const EvButtonSwitchSymbol: InjectionKey<GroupProvide> =\n Symbol.for(\"ev:switch-button\");\n\nexport const makeEvButtonSwitchProps = propsFactory(\n {\n ...makeEvButtonProps(),\n ...omit(\n makeGroupProps({\n selectedAppearance: \"primary\",\n selectedVariant: \"outlined\",\n }),\n [\"max\", \"mandatory\", \"multiple\"],\n ),\n selectedText: String,\n },\n \"EvButtonSwitch\",\n);","<script setup lang=\"ts\">\nimport \"./EvButtonSwitch.scss\";\nimport {\n EvButtonSwitchSymbol,\n makeEvButtonSwitchProps,\n} from \"./EvButtonSwitch\";\nimport { GroupProps, useGroup } from \"@/composables/group\";\nimport { EvButton } from \"@/components/EvButton\";\nimport { useModelProxy } from \"@/composables\";\nimport { computed, ref, watch } from \"vue\";\n\nconst props = defineProps({\n ...makeEvButtonSwitchProps(),\n});\n\ndefineEmits([\"update:modelValue\"]);\n\nconst slots = defineSlots<{\n default(): never;\n}>();\n\nconst model = useModelProxy(props, \"modelValue\");\nconst selection = ref(model.value);\n\nuseGroup(\n {\n disabled: props.disabled,\n modelValue: selection,\n selectedAppearance: props.selectedAppearance,\n selectedVariant: props.selectedVariant,\n selectedClass: props.selectedClass,\n multiple: false,\n mandatory: false,\n } as any as GroupProps,\n EvButtonSwitchSymbol,\n);\n\nwatch(selection, (newValue, oldValue) => {\n if (!!newValue !== !!oldValue) {\n model.value = !!newValue;\n }\n});\n\nwatch(model, (newValue, oldValue) => {\n if (!!newValue !== !!oldValue) {\n selection.value = !!newValue;\n }\n});\n\nconst label = computed(() => {\n if (model.value && props.selectedText) {\n return props.selectedText;\n }\n return props.text;\n});\n</script>\n\n<template>\n <ev-button\n v-bind=\"props\"\n :value=\"true\"\n :symbol=\"EvButtonSwitchSymbol\"\n :text=\"label\" />\n</template>\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { PropType } from \"vue\";\nimport { EvButtonProps } from \"@/components/EvButton/EvButton\";\nimport { JustifyContentValue } from \"@/components/EvGrid/EvLayout\";\nimport { EvCardContentSize } from \"@/components/EvCard/EvCardContent\";\n\nexport const makeEvCardActionsProps = propsFactory(\n {\n items: {\n type: Array as PropType<readonly EvButtonProps[]>,\n default: () => [],\n },\n justify: {\n type: String as PropType<JustifyContentValue>,\n default: \"end\",\n },\n size: {\n type: String as PropType<EvCardContentSize>,\n default: \"medium\",\n },\n ...makeComponentProps(),\n },\n \"EvCardActions\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvCardActions.scss\";\nimport { makeEvCardActionsProps } from \"./EvCardActions\";\nimport { EvButtonGroup } from \"@/components/EvButtonGroup\";\nimport { computed } from \"vue\";\nimport { makeClassName, sizeModifier } from \"@/util\";\nimport { useDefaults } from \"@/composables\";\n\nconst definedProps = defineProps({ ...makeEvCardActionsProps() });\nconst props = useDefaults(definedProps);\nconst slots = defineSlots<{\n default(): never;\n}>();\nconst justifyClass = computed(() => makeClassName(props.justify, \"justify\"));\nconst sizeClass = computed(() => sizeModifier(props.size));\n</script>\n\n<template>\n <div\n :class=\"['ev-card-actions', justifyClass, sizeClass, props.class]\"\n :style=\"props.style\">\n <ev-button-group :size=\"props.size\" :items=\"props.items\">\n <slot />\n </ev-button-group>\n </div>\n</template>\n","import { AppearanceProp, propsFactory } from \"@/util\";\nimport { IconProp } from \"@/composables/icons\";\nimport { PropType } from \"vue\";\nimport { makeComponentProps } from \"@/composables/component\";\n\nexport type EvCardContentSize = \"small\" | \"medium\" | \"large\" | \"x-large\";\n\nexport const makeEvCardContentProps = propsFactory(\n {\n appearance: String as PropType<AppearanceProp>,\n eyebrow: String,\n icon: IconProp,\n size: {\n type: String as PropType<EvCardContentSize>,\n default: \"medium\",\n },\n text: [String, Array],\n title: String,\n ...makeComponentProps(),\n },\n \"EvCardContent\",\n);\n","import { propsFactory } from \"@/util\";\nimport { makeTagProps, TagProps } from \"@/composables/tag\";\nimport { ComponentProps, makeComponentProps } from \"@/composables/component\";\nimport { PropType } from \"vue\";\n\nexport const EvHeadingSize = {\n default: \"medium\",\n xSmall: \"x-small\",\n small: \"small\",\n medium: \"medium\",\n large: \"large\",\n xLarge: \"x-large\",\n xxLarge: \"xx-large\",\n} as const;\n\nexport type EvHeadingSizeProp =\n (typeof EvHeadingSize)[keyof typeof EvHeadingSize];\n\nexport const EvHeadingTag = {\n \"xx-large\": \"h1\",\n \"x-large\": \"h2\",\n large: \"h3\",\n medium: \"h4\",\n small: \"h5\",\n \"x-small\": \"h6\",\n} as const;\n\nexport const EvHeadingClass = {\n \"xx-large\": \"heading-1\",\n \"x-large\": \"heading-2\",\n large: \"heading-3\",\n medium: \"heading-4\",\n small: \"heading-5\",\n \"x-small\": \"heading-6\",\n} as const;\n\nexport interface EvHeadingProps extends ComponentProps, TagProps {\n size?: EvHeadingSizeProp;\n text?: string;\n truncate?: number | boolean;\n tag?: string;\n}\n\nexport const makeEvHeadingProps = propsFactory(\n {\n size: {\n type: String as PropType<EvHeadingSizeProp>,\n default: EvHeadingSize.default,\n },\n text: String,\n truncate: [Number, Boolean],\n ...makeComponentProps(),\n ...makeTagProps({\n tag: undefined,\n }),\n },\n \"EvHeading\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvHeading.scss\";\nimport {\n EvHeadingClass,\n EvHeadingSize,\n EvHeadingTag,\n makeEvHeadingProps,\n} from \"./EvHeading.ts\";\nimport { useDefaults } from \"@/composables\";\nimport { computed } from \"vue\";\nimport { isBoolean, isNumber } from \"@/util\";\n\nconst definedProps = defineProps({\n ...makeEvHeadingProps(),\n});\nconst props = useDefaults(definedProps);\n\nconst tag = computed(() => {\n if (props.tag) {\n return props.tag;\n }\n return EvHeadingTag[props.size] ?? EvHeadingTag[EvHeadingSize.default];\n});\n\nconst sizeClass = computed(() => {\n if (!props.tag) {\n return undefined;\n }\n return EvHeadingClass[props.size] ?? EvHeadingClass[EvHeadingSize.default];\n});\n\nconst truncateClass = computed(() => {\n if (!props.truncate) {\n return undefined;\n }\n return isBoolean(props.truncate) ? \"is-truncate\" : \"is-truncate-lines\";\n});\n\nconst maxLines = computed(() => {\n if (isNumber(props.truncate)) {\n return props.truncate;\n }\n return 1;\n});\n</script>\n\n<template>\n <component\n :is=\"tag\"\n :class=\"['ev-heading', sizeClass, truncateClass, props.class]\"\n :style=\"props.style\">\n <slot>{{ props.text }}</slot>\n </component>\n</template>\n\n<style>\n.ev-heading {\n --max-lines: v-bind(maxLines);\n}\n</style>\n","import { makeTextAppearanceProps, propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeTagProps } from \"@/composables/tag\";\n\nexport const makeEvEyebrowProps = propsFactory(\n {\n text: String,\n ...makeTextAppearanceProps(),\n ...makeTagProps({\n tag: \"p\",\n }),\n ...makeComponentProps(),\n },\n \"EvEyebrow\",\n);","<script setup lang=\"ts\">\nimport \"./EvEyebrow.scss\";\nimport { makeEvEyebrowProps } from \"./EvEyebrow\";\nimport { useTextAppearance } from \"@/util\";\n\nconst props = defineProps({ ...makeEvEyebrowProps() });\n\nconst slots = defineSlots<{\n default(): never;\n}>();\n\nconst { appearanceClass } = useTextAppearance(props);\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n :class=\"['ev-eyebrow', 'text-eyebrow', appearanceClass, props.class]\"\n :style=\"props.style\">\n <slot>{{ props.text }}</slot>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport \"./EvCardContent.scss\";\nimport { makeEvCardContentProps } from \"./EvCardContent\";\nimport { EvHeading } from \"@/components/EvHeading\";\nimport { EvText, EvTextProps } from \"@/components/EvText\";\nimport { EvIcon } from \"@/components/EvIcon\";\nimport { EvEyebrow } from \"@/components/EvEyebrow\";\nimport { computed, ComputedRef } from \"vue\";\nimport { getNextId, isString, sizeModifier } from \"@/util\";\nimport { useDefaults } from \"@/composables\";\n\nconst definedProps = defineProps({ ...makeEvCardContentProps() });\nconst props = useDefaults(definedProps);\n\nconst slots = defineSlots<{\n default(): never;\n icon(): never;\n title(): never;\n}>();\n\ninterface TextItem {\n id: number;\n props: EvTextProps;\n}\n\nconst textItems: ComputedRef<TextItem[]> = computed(() => {\n if (!props.text) {\n return [];\n }\n const values = isString(props.text) ? [props.text] : [...props.text];\n\n for (const [index, value] of values.entries()) {\n const textProps = isString(value) ? { text: value } : value;\n values[index] = {\n id: getNextId(),\n props: Object.assign(\n {\n size: descriptionSize.value,\n },\n textProps,\n ),\n };\n }\n return values as TextItem[];\n});\n\nconst sizeClass = computed(() => sizeModifier(props.size));\n\nconst descriptionSize = computed(() => {\n switch (props.size) {\n case \"small\":\n return \"medium\";\n default:\n return props.size;\n }\n});\n</script>\n\n<template>\n <div\n :class=\"['ev-card-content', sizeClass, props.class]\"\n :style=\"props.style\">\n <div v-if=\"slots.icon || props.icon\" class=\"ev-card-content--icon\">\n <slot name=\"icon\">\n <ev-icon :glyph=\"props.icon\" :appearance=\"props.appearance\" />\n </slot>\n </div>\n <div class=\"ev-card-content--detail\">\n <ev-eyebrow v-if=\"props.eyebrow\" class=\"ev-card-content--eyebrow\">\n {{ props.eyebrow }}\n </ev-eyebrow>\n <template v-if=\"slots.title || props.title\">\n <slot name=\"title\">\n <ev-heading\n :size=\"props.size\"\n class=\"ev-card-content--title\">\n {{ props.title }}\n </ev-heading>\n </slot>\n </template>\n <slot>\n <ev-text\n v-for=\"textItem in textItems\"\n :key=\"textItem.id\"\n v-bind=\"textItem.props\" />\n </slot>\n </div>\n </div>\n</template>\n","import { Appearance, AppearanceProp, propsFactory, VariantProp } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport { EvButtonProps } from \"@/components/EvButton\";\nimport { PropType } from \"vue\";\nimport { EvCardContentSize } from \"@/components/EvCard/EvCardContent\";\nimport { SurfaceElevation } from \"@/components/EvSurface\";\nimport { IconProp } from \"@/composables/icons\";\nimport { makeRouterLinkOrHrefProps } from \"@/composables/router\";\nimport { JustifyContentValue } from \"@/components/EvGrid/EvLayout\";\n\nexport const makeEvCardProps = propsFactory(\n {\n appearance: {\n type: String as PropType<AppearanceProp>,\n default: Appearance.default,\n },\n disabled: Boolean,\n elevation: {\n type: String as PropType<SurfaceElevation>,\n default: \"panel\",\n },\n rounded: {\n type: [String, Number, Boolean],\n default: true,\n },\n icon: IconProp,\n iconAppearance: {\n type: String as PropType<AppearanceProp>,\n default: undefined,\n },\n actions: {\n type: Array as PropType<readonly EvButtonProps[]>,\n default: () => [],\n },\n justifyActions: {\n type: String as PropType<JustifyContentValue>,\n default: \"end\",\n },\n eyebrow: String,\n size: {\n type: String as PropType<EvCardContentSize>,\n default: \"medium\",\n },\n text: [String, Array],\n title: String,\n variant: {\n type: String as PropType<VariantProp>,\n default: \"subtle\",\n },\n ...makeComponentProps(),\n ...makeRouterLinkOrHrefProps(),\n ...makeTagProps(),\n },\n \"EvCard\",\n);\n","import { makeClassName, propsFactory } from \"@/util\";\nimport { makeDimensionsProps } from \"@/composables/dimensions\";\nimport { PropType } from \"vue\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport { makeComponentProps } from \"@/composables/component\";\n\n/**\n * # Surface Elevation\n *\n * Elevations are the layered surfaces that form the foundation of the UI.\n * They create a blank canvas containing other UI components.\n * Such as text, icons, backgrounds, and borders.\n *\n */\nexport type SurfaceElevation = \"default\" | \"panel\" | \"overlay\" | \"sunken\";\n\n/**\n * # Make Elevation Class\n */\nexport function makeElevationClass(elevation: string) {\n return makeClassName(elevation, \"elevation\");\n}\n\n/**\n * # Make Surface Props\n */\nexport const makeEvSurfaceProps = propsFactory(\n {\n elevation: {\n type: String as PropType<SurfaceElevation>,\n default: \"default\",\n },\n // Rounded\n rounded: {\n type: [String, Number, Boolean],\n default: undefined,\n },\n // Scrollable\n scrollable: {\n type: [String, Boolean],\n default: undefined,\n },\n ...makeComponentProps(),\n ...makeDimensionsProps(),\n ...makeTagProps(),\n },\n \"EvSurface\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvSurface.scss\";\nimport { makeElevationClass, makeEvSurfaceProps } from \"./EvSurface\";\nimport { isEmpty, isString, makeClassName } from \"@/util\";\nimport { useDimensions } from \"@/composables/dimensions\";\n\nconst props = defineProps({\n ...makeEvSurfaceProps(),\n});\nconst dimensions = useDimensions(props);\n\n/**\n * @todo: this probably belongs in its own composable, if we expand on it or make it generic.\n *\n * @param rounded\n */\nfunction makeRoundedClass(rounded?: string | number | boolean) {\n if (!rounded || isEmpty(rounded)) {\n return undefined;\n }\n if (rounded === true) {\n return \"is-rounded\";\n }\n if (!isString(rounded)) {\n return undefined;\n }\n return makeClassName(rounded, \"is-rounded\");\n}\n\n/**\n * # Make Scrollable Class\n * @param scrollable\n */\nfunction makeScrollableClass(scrollable?: string | boolean) {\n if (typeof scrollable === \"undefined\") {\n return undefined;\n }\n if (scrollable === false) {\n return \"is-overflow-hidden\";\n }\n switch (scrollable) {\n case \"x\":\n return \"is-scrollable-x\";\n case \"y\":\n return \"is-scrollable-y\";\n default:\n return \"is-scrollable\";\n }\n}\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n :class=\"[\n 'ev-surface',\n makeElevationClass(props.elevation),\n makeRoundedClass(props.rounded),\n makeScrollableClass(props.scrollable),\n props.class,\n ]\"\n :style=\"[dimensions, props.style]\">\n <slot />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport \"./EvCard.scss\";\nimport { makeEvCardProps } from \"./EvCard\";\nimport { EvCardContent } from \"@/components/EvCard/EvCardContent\";\nimport { EvCardActions } from \"@/components/EvCard/EvCardActions\";\nimport { EvSurface } from \"@/components/EvSurface\";\nimport { computed, useAttrs } from \"vue\";\nimport { useAppearance } from \"@/util\";\nimport {\n RouterLinkOrHrefProps,\n useRouterLinkOrHref,\n} from \"@/composables/router.ts\";\n\nconst props = defineProps({ ...makeEvCardProps() });\nconst attrs = useAttrs();\nconst slots = defineSlots<{\n actions(): never;\n default(): never;\n header(): never;\n icon(): never;\n image(): never;\n prefix(): never;\n suffix(): never;\n text(): never;\n}>();\nconst link = useRouterLinkOrHref(props as RouterLinkOrHrefProps, attrs);\n\nconst actionProps = computed(() => {\n return {\n justify: props.justifyActions,\n size: props.size,\n items: props.actions,\n };\n});\n\nconst contentProps = computed(() => {\n return {\n eyebrow: props.eyebrow,\n icon: props.icon,\n size: props.size,\n text: props.text,\n title: props.title,\n appearance: props.iconAppearance ?? props.appearance,\n };\n});\n\nconst { appearanceClass, variantClass } = useAppearance(props);\n\nconst isClickable = computed(() => link.isClickable.value);\nconst componentElement = computed(() => {\n return link.isLink.value ? \"a\" : props.tag;\n});\nconst hasActions = computed(() => {\n return props.actions || slots.actions;\n});\nconst hasContent = computed(() => {\n return slots.text || props.text || props.title || props.eyebrow;\n});\n</script>\n\n<template>\n <ev-surface\n :tag=\"componentElement\"\n :href=\"link.href.value\"\n :class=\"[\n 'ev-card',\n {\n 'is-clickable': isClickable,\n 'is-disabled': props.disabled,\n },\n appearanceClass,\n variantClass,\n props.class,\n ]\"\n :disabled=\"props.disabled || undefined\"\n :elevation=\"props.elevation\"\n :rounded=\"props.rounded\"\n :style=\"props.style\"\n :tabindex=\"isClickable ? 0 : undefined\">\n <div v-if=\"slots.header\" class=\"ev-card--header\">\n <slot name=\"header\" />\n </div>\n <div v-if=\"slots.prefix\" class=\"ev-card--prefix\">\n <slot name=\"prefix\" />\n </div>\n <div class=\"ev-card--body\">\n <ev-card-content v-if=\"hasContent\" v-bind=\"contentProps\">\n <template v-if=\"slots.icon\" #icon>\n <slot name=\"icon\" />\n </template>\n <slot name=\"text\" />\n </ev-card-content>\n <slot name=\"default\" />\n <ev-card-actions v-if=\"hasActions\" v-bind=\"actionProps\">\n <slot name=\"actions\" />\n </ev-card-actions>\n </div>\n <div v-if=\"slots.suffix\" class=\"ev-card--suffix\">\n <slot name=\"suffix\" />\n </div>\n <span class=\"ev-card--underlay\"></span>\n </ev-surface>\n</template>\n","import { useModelProxy } from \"./modelProxy\";\nimport { computed, ref } from \"vue\";\nimport { Browser, propsFactory } from \"@/util\";\n\n/**\n * # Focus Props Type\n */\nexport interface FocusProps {\n focused?: boolean;\n \"onUpdate:focused\"?: ((focused: boolean) => any) | undefined;\n}\n\n/**\n * # Make Focus Props\n */\nexport const makeFocusProps = propsFactory(\n {\n focused: Boolean,\n },\n \"focus\",\n);\n\n/**\n * # Use Focus Composable\n */\nexport function useFocus(props: FocusProps) {\n const isFocused = useModelProxy(props, \"focused\");\n const isFocusedVisible = ref(false);\n const focusClasses = computed(() => {\n return {\n \"is-focused\": isFocused.value,\n \"is-focused-visible\": isFocusedVisible.value,\n };\n });\n\n function focus(e?: Event): void {\n isFocused.value = true;\n const el: HTMLElement | null = e?.target as HTMLElement;\n if (Browser.supportsFocusVisible && el?.matches(\":focus-visible\")) {\n isFocusedVisible.value = true;\n }\n }\n\n function blur(): void {\n isFocused.value = false;\n isFocusedVisible.value = false;\n }\n\n return { isFocused, isFocusedVisible, focusClasses, focus, blur };\n}\n\n/**\n * ## Auto Focus\n */\nexport interface AutofocusProps {\n autofocus: boolean;\n}\n\n/**\n * # Use Auto Focus\n * @param props\n */\nexport function useAutofocus(props: AutofocusProps) {\n return {\n mounted: (el: HTMLElement) => {\n if (!props.autofocus) {\n return;\n }\n el.focus();\n },\n };\n}\n","import { FormField } from \"@/modules/Form/FormField\";\r\nimport { Ref, ref, shallowRef, toRaw, toRef } from \"vue\";\r\nimport { consoleWarn } from \"@/util\";\r\nimport { FormProps } from \"@/composables/form\";\r\nimport { ValidationError } from \"@/composables/validation\";\r\nimport { useModelProxy } from \"@/composables/modelProxy.ts\";\r\n\r\n/**\r\n * # Form\r\n *\r\n * @todo: decide whether to implement validators/shapers/resolvers and their terminology.\r\n * @todo: decide whether and how to support declarative schemas like Zod (https://zod.dev/?id=introduction)\r\n *\r\n */\r\nexport class Form {\r\n private fields: FormField[] = [];\r\n private valid: Ref<boolean | null>;\r\n private validating = shallowRef(false);\r\n\r\n public readonly errors: Ref<ValidationError[]> = ref([]);\r\n public readonly data: Ref<object>;\r\n public readonly validateOn: Ref<FormProps[\"validateOn\"]>;\r\n\r\n constructor(private props: FormProps) {\r\n this.data = useModelProxy(this.props, \"data\");\r\n this.valid = useModelProxy(this.props, \"modelValue\");\r\n this.validateOn = toRef(props, \"validateOn\");\r\n }\r\n\r\n get isDisabled(): boolean {\r\n return this.props.disabled;\r\n }\r\n\r\n get isReadonly(): boolean {\r\n return this.props.readonly;\r\n }\r\n\r\n get isValid(): boolean | null {\r\n return this.valid.value;\r\n }\r\n\r\n get isValidating(): boolean {\r\n return this.validating.value;\r\n }\r\n\r\n public addErrors(errors: ValidationError[]) {\r\n errors.forEach(({ name, message }) => {\r\n this.getField(name as string)?.addError(message);\r\n });\r\n this.valid.value = false;\r\n this.errors.value.push(...errors);\r\n }\r\n\r\n /**\r\n * ## Add Field\r\n * @param field\r\n */\r\n public addField(field: FormField) {\r\n if (this.hasField(field.id)) {\r\n consoleWarn(`Duplicate form field with name \"${field.id}\"`);\r\n }\r\n this.fields.push(field);\r\n }\r\n\r\n /**\r\n * ## Get Field\r\n * @param name\r\n */\r\n public getField(name: string): FormField | undefined {\r\n return this.fields.find((field) => {\r\n return field.name === name;\r\n });\r\n }\r\n\r\n /**\r\n * ## Has Field\r\n *\r\n * Returns `true` if the field `name` already exists in the form.\r\n *\r\n * @param id\r\n */\r\n public hasField(id: string): boolean {\r\n return this.fields.some((field) => field.id === id);\r\n }\r\n\r\n /**\r\n * ## Remove Field\r\n * @param id\r\n */\r\n public removeField(id: string) {\r\n this.fields = this.fields.filter((field) => {\r\n return field.id !== id;\r\n });\r\n }\r\n\r\n /**\r\n * ## Reset\r\n */\r\n public reset() {\r\n this.fields.forEach((field) => field.reset());\r\n this.valid.value = null;\r\n this.errors.value = [];\r\n }\r\n\r\n /**\r\n * ## Reset Validation\r\n */\r\n public resetValidation() {\r\n this.fields.forEach((field) => field.resetValidation());\r\n this.valid.value = null;\r\n this.errors.value = [];\r\n }\r\n\r\n /**\r\n * ## Validate\r\n */\r\n public async validate() {\r\n let valid = true;\r\n this.errors.value = [];\r\n this.validating.value = true;\r\n\r\n const results = [];\r\n for (const field of this.fields) {\r\n const fieldErrors = await field.validate();\r\n for (const fieldError of fieldErrors) {\r\n valid = false;\r\n results.push({\r\n name: field.name,\r\n message: fieldError,\r\n });\r\n }\r\n }\r\n\r\n this.errors.value = results;\r\n this.validating.value = false;\r\n this.valid.value = valid;\r\n return {\r\n valid,\r\n errors: [...toRaw(this.errors.value)],\r\n addErrors: (errors: ValidationError[]) => {\r\n this.addErrors(errors);\r\n },\r\n };\r\n }\r\n}\r\n","import { inject, InjectionKey, PropType, provide } from \"vue\";\r\nimport { ValidationError, FormFieldProps } from \"@/composables/validation\";\r\nimport { propsFactory } from \"@/util\";\r\nimport { Form } from \"@/modules/Form/Form\";\r\n\r\n/**\r\n * # Form Key\r\n * Used for provide/inject functions.\r\n */\r\nexport const FormKey: InjectionKey<any> = Symbol.for(\"ev:form\");\r\n\r\n/**\r\n * # Submit Event Promise\r\n */\r\nexport interface SubmitEventPromise\r\n extends SubmitEvent,\r\n Promise<FormValidationResult> {}\r\n\r\n/**\r\n * # Form Props\r\n */\r\nexport interface FormProps {\r\n data?: object;\r\n disabled?: boolean;\r\n readonly?: boolean;\r\n modelValue?: boolean | null;\r\n \"onUpdate:modelValue\"?: ((val: boolean | null) => void) | undefined;\r\n validateOn?: FormFieldProps[\"validateOn\"];\r\n}\r\n\r\n/**\r\n * # Form Validation Result\r\n */\r\nexport interface FormValidationResult {\r\n valid: boolean;\r\n errors: ValidationError[];\r\n addErrors: (errors: ValidationError[]) => void;\r\n}\r\n\r\n/**\r\n * # Make Form Props\r\n */\r\nexport const makeFormProps = propsFactory(\r\n {\r\n data: Object,\r\n disabled: Boolean,\r\n readonly: Boolean,\r\n modelValue: {\r\n type: Boolean as PropType<boolean | null>,\r\n default: null,\r\n },\r\n validateOn: {\r\n type: String as PropType<FormProps[\"validateOn\"]>,\r\n default: \"input\",\r\n },\r\n },\r\n \"form\",\r\n);\r\n\r\n/**\r\n * # Create Form\r\n * @param props\r\n */\r\nexport function createForm(props: FormProps) {\r\n const form = new Form(props);\r\n provide(FormKey, form);\r\n return form;\r\n}\r\n\r\n/**\r\n * # Use Form\r\n */\r\nexport function useForm() {\r\n return inject(FormKey, null);\r\n}\r\n","import {\r\n computed,\r\n nextTick,\r\n onBeforeMount,\r\n onBeforeUnmount,\r\n onMounted,\r\n Ref,\r\n ref,\r\n shallowRef,\r\n watch,\r\n} from \"vue\";\r\nimport { FormFieldProps, Validator } from \"@/composables/validation\";\r\nimport {\r\n Browser,\r\n consoleWarn,\r\n getCurrentComponent,\r\n getNextId,\r\n getPropertyValueByPath,\r\n isFunction,\r\n isString,\r\n setPropertyValueByPath,\r\n wrapInArray,\r\n} from \"@/util\";\r\nimport { Form } from \"@/modules/Form/Form\";\r\nimport { useToggleScope } from \"@/composables/toggleScope\";\r\nimport { useModelProxy } from \"@/composables/modelProxy\";\r\n\r\n/**\r\n * # Form Field\r\n *\r\n * @todo: decide on terminology for shapers/validators/resolvers/rules (it would be good to have shapers)\r\n *\r\n */\r\nexport class FormField {\r\n public readonly focused: Ref<boolean>;\r\n public readonly focusedVisible: Ref<boolean>;\r\n public readonly messages: Ref<string[]> = ref([]);\r\n public readonly model: Ref<any>;\r\n public readonly pristine = shallowRef(true);\r\n public readonly uid = getNextId();\r\n public readonly validating = shallowRef(false);\r\n private readonly validationModel: Ref<any>;\r\n\r\n constructor(\r\n public readonly form: Form | null,\r\n private props: FormFieldProps,\r\n private group: FormField | undefined = undefined,\r\n ) {\r\n const component = getCurrentComponent(\"FormField\");\r\n const internalModel = ref(props.modelValue);\r\n\r\n watch(\r\n () => props.modelValue,\r\n (value) => {\r\n internalModel.value = value;\r\n },\r\n );\r\n\r\n this.model = computed({\r\n get() {\r\n if (group) {\r\n return group.model.value;\r\n }\r\n if (form?.data.value && props.name) {\r\n return getPropertyValueByPath(form.data.value, props.name);\r\n }\r\n return internalModel.value;\r\n },\r\n set(value) {\r\n if (group) {\r\n group.model.value = value;\r\n } else if (form?.data.value && props.name) {\r\n setPropertyValueByPath(form.data.value, props.name, value);\r\n } else {\r\n internalModel.value = value;\r\n }\r\n component.emit(\"update:modelValue\", value);\r\n },\r\n });\r\n\r\n this.focused = useModelProxy(this.props, \"focused\");\r\n this.focusedVisible = ref(false);\r\n\r\n // We use a computed() Ref here for a valid watch()\r\n this.validationModel = computed(() => {\r\n return this.props.validationValue === undefined\r\n ? this.model.value\r\n : this.props.validationValue;\r\n });\r\n\r\n onBeforeMount(() => {\r\n this.form?.addField(this);\r\n });\r\n\r\n onBeforeUnmount(() => {\r\n this.form?.removeField(this.id);\r\n });\r\n\r\n onMounted(async () => {\r\n if (!this.validateOn.lazy) {\r\n await this.validate(true);\r\n }\r\n });\r\n\r\n useToggleScope(\r\n () => this.validateOn.input,\r\n () => {\r\n watch(this.validationModel, () => {\r\n if (this.validationModel.value != null) {\r\n this.validate();\r\n } else if (this.isFocused) {\r\n const unwatch = watch(\r\n () => this.focused.value,\r\n (value) => {\r\n if (!value) {\r\n this.validate();\r\n }\r\n unwatch();\r\n },\r\n );\r\n }\r\n });\r\n },\r\n );\r\n\r\n useToggleScope(\r\n () => this.validateOn.blur,\r\n () => {\r\n watch(\r\n () => this.focused.value,\r\n (value) => {\r\n if (!value) {\r\n this.validate();\r\n }\r\n },\r\n );\r\n },\r\n );\r\n }\r\n\r\n get classes() {\r\n return {\r\n \"is-error\": this.isValid === false,\r\n \"is-dirty\": this.isDirty,\r\n \"is-disabled\": this.isDisabled,\r\n \"is-readonly\": this.isReadonly,\r\n \"is-focused\": this.isFocused,\r\n \"is-focused-visible\": this.isFocusedVisible,\r\n };\r\n }\r\n\r\n get errorMessages() {\r\n const propErrors = this.props.errorMessages ?? [];\r\n return [...this.messages.value, ...propErrors];\r\n }\r\n\r\n get id() {\r\n return this.props.id || `input-${this.uid}`;\r\n }\r\n\r\n get isDirty() {\r\n return !!(\r\n wrapInArray(this.model.value === \"\" ? null : this.model.value)\r\n .length ||\r\n wrapInArray(\r\n this.validationModel.value === \"\"\r\n ? null\r\n : this.validationModel.value,\r\n ).length\r\n );\r\n }\r\n\r\n get isDisabled(): boolean {\r\n return !!(\r\n this.props.disabled ||\r\n this.group?.isDisabled ||\r\n this.form?.isDisabled\r\n );\r\n }\r\n\r\n get isFocused(): boolean {\r\n return this.focused.value;\r\n }\r\n\r\n get isFocusedVisible(): boolean {\r\n return this.focusedVisible.value;\r\n }\r\n\r\n get isReadonly(): boolean {\r\n return !!(\r\n this.props.readonly ||\r\n this.group?.isReadonly ||\r\n this.form?.isReadonly\r\n );\r\n }\r\n\r\n get isPristine(): boolean {\r\n return this.pristine.value;\r\n }\r\n\r\n get isShowErrorMessages(): boolean {\r\n return !!this.errorMessages.length && !this.isPristine;\r\n }\r\n\r\n get isValid(): boolean | null {\r\n if (this.group && this.group.isValid === false) {\r\n return false;\r\n }\r\n if (this.props.error) {\r\n return false;\r\n }\r\n if (!this.props.validators.length) {\r\n // @todo: determine if this is needed\r\n // I commented it out since it prevents server-side errors from being added\r\n // return true;\r\n }\r\n if (this.isPristine) {\r\n return this.messages.value.length || this.validateOn.lazy\r\n ? null\r\n : true;\r\n } else {\r\n return !this.messages.value.length;\r\n }\r\n }\r\n\r\n get isValidating() {\r\n return this.validating.value;\r\n }\r\n\r\n get name(): string {\r\n return this.group?.name ?? this.props.name ?? this.id;\r\n }\r\n\r\n get validateOn() {\r\n let value =\r\n (this.props.validateOn ?? this.form?.validateOn.value) || \"input\";\r\n if (value === \"lazy\") {\r\n value = \"input lazy\";\r\n }\r\n const set = new Set(value?.split(\" \") ?? []);\r\n return {\r\n blur: set.has(\"blur\") || set.has(\"input\"),\r\n input: set.has(\"input\"),\r\n submit: set.has(\"submit\"),\r\n lazy: set.has(\"lazy\"),\r\n };\r\n }\r\n\r\n get value() {\r\n return this.model.value;\r\n }\r\n\r\n set value(value) {\r\n this.model.value = value;\r\n }\r\n\r\n /**\r\n * ## Add Error Message\r\n *\r\n * Add one or more validation messages to the field.\r\n *\r\n * @param message\r\n */\r\n public addError(...message: string[]) {\r\n this.messages.value.push(...message);\r\n }\r\n\r\n /**\r\n * ## Add Validator\r\n *\r\n * Add one or more validation functions to the field.\r\n *\r\n * @param validator\r\n */\r\n public addValidator(...validator: Validator[]) {\r\n this.props.validators.push(...validator);\r\n }\r\n\r\n /**\r\n * ## Blur\r\n * @param e\r\n */\r\n public blur(): void {\r\n this.focused.value = false;\r\n this.focusedVisible.value = false;\r\n }\r\n\r\n /**\r\n * ## Focus\r\n *\r\n * @param e\r\n */\r\n public focus(e?: Event): void {\r\n this.focused.value = true;\r\n const el = e?.target as HTMLElement;\r\n if (Browser.supportsFocusVisible && el?.matches(\":focus-visible\")) {\r\n this.focusedVisible.value = true;\r\n }\r\n }\r\n\r\n /**\r\n * ## Reset\r\n */\r\n public reset() {\r\n this.model.value = null;\r\n nextTick(() => {\r\n this.resetValidation();\r\n });\r\n }\r\n\r\n /**\r\n * ## Reset Validation\r\n */\r\n public resetValidation() {\r\n this.pristine.value = true;\r\n if (!this.validateOn.lazy) {\r\n this.validate(true);\r\n } else {\r\n this.messages.value = [];\r\n }\r\n }\r\n\r\n /**\r\n * ## Validate\r\n */\r\n public async validate(silent = false) {\r\n const results: string[] = [];\r\n this.validating.value = true;\r\n for (const validator of this.props.validators) {\r\n const validatorFn = isFunction(validator)\r\n ? validator\r\n : () => validator;\r\n const result = await validatorFn(this.validationModel.value);\r\n if (result === true) {\r\n continue;\r\n }\r\n if (!isString(result)) {\r\n consoleWarn(\r\n `${result} is not a valid value. Validator functions must return boolean true or a string.`,\r\n );\r\n continue;\r\n }\r\n results.push(result);\r\n }\r\n this.messages.value = results;\r\n this.validating.value = false;\r\n this.pristine.value = silent;\r\n return this.messages.value;\r\n }\r\n}\r\n","import { propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\nimport { makeFocusProps } from \"@/composables/focus\";\nimport { useForm } from \"@/composables/form\";\nimport { FormField } from \"@/modules/Form/FormField\";\n\n/**\n * # Validation Error\n *\n * Represents a single error message with a name identifier.\n */\nexport interface ValidationError {\n name: number | string;\n message: string;\n}\n\n/**\n * # Validation Result\n */\nexport type ValidationResult = string | boolean;\n\n/**\n * # Validator\n */\nexport type Validator =\n | ValidationResult\n | PromiseLike<ValidationResult>\n | ((value: any) => ValidationResult)\n | ((value: any) => PromiseLike<ValidationResult>);\n\n/**\n * # Validate On Event\n */\nexport type ValidateOnEvent = \"blur\" | \"input\" | \"submit\";\n\n/**\n * # Form Field Props\n */\nexport interface FormFieldProps {\n id?: string;\n disabled?: boolean;\n error?: boolean;\n errorMessages?: string[];\n focused?: boolean;\n name?: string;\n readonly?: boolean;\n validators: Validator[];\n modelValue?: any;\n validateOn?:\n | ValidateOnEvent\n | `${ValidateOnEvent} lazy`\n | `lazy ${ValidateOnEvent}`\n | \"lazy\";\n validationValue?: any;\n}\n\n/**\n * # Make Form Field Props\n */\nexport const makeFormFieldProps = propsFactory(\n {\n id: String,\n disabled: Boolean,\n error: Boolean,\n errorMessages: Array as PropType<FormFieldProps[\"errorMessages\"]>,\n name: String,\n readonly: Boolean,\n validators: {\n type: Array as PropType<FormFieldProps[\"validators\"]>,\n default: [],\n },\n modelValue: null,\n validateOn: String as PropType<FormFieldProps[\"validateOn\"]>,\n validationValue: null,\n\n ...makeFocusProps(),\n },\n \"validation\",\n);\n\n/**\n * # Use Form Field\n * @param props\n * @param group\n */\nexport function useFormField(\n props: FormFieldProps,\n group: FormField | undefined = undefined,\n) {\n const form = useForm();\n return new FormField(form, props, group);\n}\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\n\nexport const makeLabelProps = propsFactory(\n {\n label: String,\n hint: String,\n },\n \"Label\",\n);\n\nexport const makeEvLabelProps = propsFactory(\n {\n title: String,\n hint: String,\n clickable: Boolean,\n\n ...makeComponentProps(),\n },\n \"EvLabel\",\n);\n","<script setup lang=\"ts\">\n/**\n * # `<ev-label>`\n */\nimport \"./EvLabel.scss\";\nimport { makeEvLabelProps } from \"./EvLabel\";\n\nconst props = defineProps({\n ...makeEvLabelProps(),\n});\n\nconst slots = defineSlots<{\n default(): never;\n}>();\n</script>\n\n<template>\n <label\n :class=\"[\n 'ev-label',\n {\n 'is-clickable': props.clickable,\n },\n props.class,\n ]\"\n :style=\"props.style\">\n <slot name=\"default\">\n <div v-if=\"props.title\" class=\"ev-label--title\">\n {{ props.title }}\n </div>\n <div v-if=\"props.hint\" class=\"ev-label--hint\">\n {{ props.hint }}\n </div>\n </slot>\n </label>\n</template>\n","import { isDeepEqual, propsFactory, wrapInArray } from \"@/util\";\nimport { makeFormFieldProps } from \"@/composables/validation\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { computed, ExtractPropTypes, PropType, Ref } from \"vue\";\nimport { makeLabelProps } from \"@/components/EvLabel\";\n\n/**\n * # Make EvCheckbox Props\n */\nexport const makeEvCheckboxProps = propsFactory(\n {\n indeterminate: Boolean,\n trueValue: null,\n falseValue: null,\n value: null,\n valueComparator: {\n type: Function as PropType<typeof isDeepEqual>,\n default: isDeepEqual,\n },\n\n ...makeLabelProps(),\n ...makeFormFieldProps(),\n ...makeComponentProps(),\n },\n \"EvSwitch\",\n);\n\n/**\n * # Use Toggle Control\n *\n * @param modelProxy\n * @param props\n */\nexport function useToggleControl(\n modelProxy: Ref<any>,\n props: ExtractPropTypes<ReturnType<typeof makeEvCheckboxProps>>,\n) {\n /**\n * ## True Value\n */\n const trueValue = computed(() => {\n if (props.trueValue !== undefined) {\n return props.trueValue;\n }\n return props.value !== undefined ? props.value : true;\n });\n\n /**\n * ## False Value\n */\n const falseValue = computed(() => {\n return props.falseValue !== undefined ? props.falseValue : false;\n });\n\n const isMultiple = computed(() => {\n return Array.isArray(modelProxy.value);\n });\n\n /**\n * ## Is Checked\n */\n const isChecked = computed({\n get() {\n const value = modelProxy.value;\n return isMultiple.value\n ? wrapInArray(value).some((v: any) =>\n props.valueComparator(v, trueValue.value),\n )\n : props.valueComparator(value, trueValue.value);\n },\n set(value: boolean) {\n if (props.readonly) {\n return;\n }\n const currentValue = value ? trueValue.value : falseValue.value;\n let newValue = currentValue;\n if (isMultiple.value) {\n newValue = value\n ? [...wrapInArray(modelProxy.value), currentValue]\n : wrapInArray(modelProxy.value).filter((item: any) => !props.valueComparator(item, trueValue.value));\n }\n // I might do some funky stuff here later for multi-selection and groups\n modelProxy.value = newValue;\n },\n });\n\n return {\n trueValue,\n falseValue,\n isChecked,\n };\n}\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { PropType } from \"vue\";\n\nexport const makeEvErrorsProps = propsFactory(\n {\n active: Boolean,\n messages: {\n type: [Array, String] as PropType<string | readonly string[]>,\n default: () => [],\n },\n\n ...makeComponentProps(),\n },\n \"EvErrors\",\n);\n","<script setup lang=\"ts\">\n/**\n * # EvErrors\n */\nimport \"./EvErrors.scss\";\nimport { makeEvErrorsProps } from \"./EvErrors\";\nimport { computed } from \"vue\";\nimport { wrapInArray } from \"@/util\";\n\nconst props = defineProps({\n ...makeEvErrorsProps(),\n});\n\nconst messages = computed(() => {\n return wrapInArray(props.messages);\n});\n</script>\n\n<template>\n <TransitionGroup\n appear\n tag=\"div\"\n :class=\"['ev-errors', props.class]\"\n :style=\"props.style\"\n name=\"list\"\n role=\"alert\"\n aria-live=\"polite\">\n <div\n v-for=\"(message, index) in messages\"\n :key=\"message\"\n class=\"ev-errors--message\"\n :style=\"`--animation-order: ${index}`\">\n {{ message }}\n </div>\n </TransitionGroup>\n</template>\n","<script setup lang=\"ts\">\n/**\n * # `<ev-checkbox>`\n */\nimport \"./EvCheckbox.scss\";\nimport { makeEvCheckboxProps, useToggleControl } from \"./EvCheckbox\";\nimport { ref, useAttrs } from \"vue\";\nimport { splitInputAttrs } from \"@/util\";\nimport { EvErrors } from \"@/components/EvErrors\";\nimport { EvLabel } from \"@/components/EvLabel\";\nimport { useFormField } from \"@/composables/validation\";\nimport { useDefaults } from \"@/composables\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\n\n/**\n * We want to pass attributes not defined as 'props'\n * to the `<input>` field, so we need to turn off `inheritAttrs`.\n */\ndefineOptions({\n inheritAttrs: false,\n});\n\n// Props & slots\nconst definedProps = defineProps({\n ...makeEvCheckboxProps(),\n});\nconst props = useDefaults(definedProps);\nconst slots = defineSlots<{\n label(): never;\n}>();\n\n// Emit\ndefineEmits([\"update:focused\", \"update:modelValue\", \"update:indeterminate\"]);\n\nconst attrs = useAttrs();\nconst containerRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst [containerAttrs, inputAttrs] = splitInputAttrs(attrs);\nconst formField = useFormField(props);\nconst { trueValue, isChecked } = useToggleControl(formField.model, props);\nconst indeterminate = useModelProxy(props, \"indeterminate\");\n\n/**\n * ## Get Input Element\n */\nfunction getInputElement(): HTMLInputElement | null {\n return inputRef.value;\n}\n\n/**\n * ## On Input\n * @param e\n */\nfunction onInput(e: Event) {\n isChecked.value = (e.target as HTMLInputElement).checked;\n if (indeterminate.value) {\n indeterminate.value = false;\n }\n}\n\n/**\n * ## Expose stuff\n */\ndefineExpose({\n field: formField,\n input: inputRef,\n focus: () => {\n getInputElement()?.focus();\n },\n});\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n :class=\"[\n 'ev-checkbox',\n {\n 'is-checked': isChecked,\n 'is-labelled': props.label || slots.label,\n 'is-indeterminate': indeterminate,\n },\n formField.classes,\n props.class,\n ]\"\n :style=\"props.style\"\n v-bind=\"containerAttrs\">\n <div class=\"ev-checkbox--control\">\n <div class=\"ev-checkbox--boxes\">\n <div class=\"ev-checkbox--outer-box\"></div>\n <div class=\"ev-checkbox--inner-box\">\n <svg\n class=\"ev-checkbox--checkmark\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n class=\"ev-checkbox--checkmark-path\"\n d=\"M3 7.5L6.5 11L13.5 4\"\n stroke=\"currentColor\"\n stroke-width=\"2\" />\n </svg>\n </div>\n </div>\n\n <input\n :id=\"formField.id\"\n ref=\"inputRef\"\n type=\"checkbox\"\n role=\"switch\"\n :name=\"formField.name\"\n :disabled=\"formField.isDisabled\"\n :readonly=\"formField.isReadonly\"\n :checked=\"isChecked\"\n :value=\"trueValue\"\n :aria-disabled=\"formField.isDisabled\"\n :aria-checked=\"indeterminate ? 'mixed' : isChecked\"\n v-bind=\"inputAttrs\"\n @input=\"onInput\"\n @focus=\"formField.focus\"\n @blur=\"formField.blur\" />\n </div>\n\n <div\n v-if=\"props.label || props.hint || slots.label\"\n class=\"ev-checkbox--label\">\n <ev-label\n clickable\n :for=\"formField.id\"\n :title=\"props.label\"\n :hint=\"props.hint\">\n <slot name=\"label\" />\n </ev-label>\n\n <div\n v-if=\"formField.isShowErrorMessages\"\n class=\"ev-checkbox--errors\">\n <ev-errors :messages=\"formField.errorMessages\" />\n </div>\n </div>\n </div>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\n\nexport const makeEvCodeProps = propsFactory(\n {\n text: String,\n ...makeComponentProps(),\n },\n \"EvCode\",\n);","<script setup lang=\"ts\">\nimport \"./EvCode.scss\";\nimport { makeEvCodeProps } from \"./EvCode\";\n\nconst props = defineProps({ ...makeEvCodeProps() });\n\nconst slots = defineSlots<{\n default(): never;\n}>();\n</script>\n\n<template>\n <code :class=\"['ev-code', props.class]\" :style=\"props.style\">\n <slot>{{ props.text }}</slot>\n </code>\n</template>\n","import { EventProp, propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\nimport {\n CellProps,\n DataTableItem,\n} from \"@/components/EvDataTable/composables/types.ts\";\n\nexport const makeEvDataTableRowProps = propsFactory(\n {\n index: Number,\n selectable: Boolean,\n item: Object as PropType<DataTableItem>,\n cellProps: [Object, Function] as PropType<CellProps<any>>,\n onClick: EventProp<[MouseEvent]>(),\n onContextmenu: EventProp<[MouseEvent]>(),\n onDblclick: EventProp<[MouseEvent]>(),\n },\n \"EvDataTableRow\",\n);\n","import { propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeDimensionsProps } from \"@/composables/dimensions\";\n\nexport const makeEvDataTableCellProps = propsFactory(\n {\n align: String as PropType<\"start\" | \"center\" | \"end\">,\n colspan: Number,\n noPadding: Boolean,\n tag: {\n type: String as PropType<\"td\" | \"th\">,\n default: \"td\",\n },\n ...makeDimensionsProps(),\n ...makeComponentProps(),\n },\n \"EvDataTableCell\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvDataTableCell.scss\";\nimport { makeEvDataTableCellProps } from \"./EvDataTableCell\";\nimport { computed } from \"vue\";\nimport { useDimensions } from \"@/composables/dimensions\";\n\nconst props = defineProps({ ...makeEvDataTableCellProps() });\nconst slots = defineSlots<{\n default(): never;\n}>();\n\nconst alignClass = computed(() => {\n return props.align ? `text-${props.align}` : undefined;\n});\n\nconst dimensions = useDimensions(props);\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n :class=\"[\n 'ev-data-table-cell',\n { 'pa-0': props.noPadding },\n alignClass,\n props.class,\n ]\"\n :colspan=\"props.colspan\"\n :style=\"[dimensions, props.style]\">\n <slot name=\"default\" />\n </component>\n</template>\n","import { DataTableItemProps } from \"./items\";\nimport { EventProp, isDeepEqual, propsFactory, wrapInArray } from \"@/util\";\nimport {\n computed,\n inject,\n InjectionKey,\n PropType,\n provide,\n ref,\n Ref,\n toRef,\n} from \"vue\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\n\nexport interface SelectableItem {\n value: any;\n selectable: boolean;\n}\n\nexport interface DataTableSelectStrategy {\n selectable: boolean;\n showSelectAll: boolean;\n allSelected: (data: {\n allItems: SelectableItem[];\n }) => SelectableItem[];\n select: (data: {\n items: SelectableItem[];\n value: boolean;\n selected: Set<unknown>;\n isRequired: boolean;\n }) => Set<unknown>;\n selectAll: (data: {\n value: boolean;\n allItems: SelectableItem[];\n selected: Set<unknown>;\n }) => Set<unknown>;\n}\n\ntype SelectionProps = Pick<DataTableItemProps, \"itemValue\"> & {\n selected: readonly any[];\n selectStrategy?: \"single\" | \"multiple\" | undefined;\n showSelect: boolean;\n valueComparator: typeof isDeepEqual;\n required: boolean;\n \"onUpdate:selected\"?: EventProp<[any[]]> | undefined;\n};\n\nconst singleSelectStrategy: DataTableSelectStrategy = {\n selectable: true,\n showSelectAll: false,\n allSelected: () => [],\n select: ({ items, value, selected, isRequired }) => {\n return new Set(value || isRequired ? [items[0]?.value] : []);\n },\n selectAll: ({ selected }) => selected,\n};\n\nconst multiSelectStrategy: DataTableSelectStrategy = {\n selectable: true,\n showSelectAll: true,\n allSelected: ({ allItems }) => allItems,\n select: ({ items, value, selected, isRequired }) => {\n for (const item of items) {\n value\n ? selected.add(item.value)\n : !isRequired || selected.size > 1\n ? selected.delete(item.value)\n : null;\n }\n return selected;\n },\n selectAll: ({ value, allItems, selected }) =>\n multiSelectStrategy.select({\n items: allItems,\n value,\n selected,\n isRequired: false,\n }),\n};\n\nconst nullSelectStrategy: DataTableSelectStrategy = {\n selectable: false,\n showSelectAll: false,\n allSelected: () => [],\n select: () => new Set(),\n selectAll: () => new Set(),\n};\n\nexport const makeDataTableSelectProps = propsFactory(\n {\n required: Boolean,\n showSelect: Boolean,\n selectStrategy: {\n type: [String, Object] as PropType<\"single\" | \"multiple\">,\n default: undefined,\n },\n selected: {\n type: Array as PropType<readonly any[]>,\n default: () => [],\n },\n valueComparator: {\n type: Function as PropType<typeof isDeepEqual>,\n default: isDeepEqual,\n },\n },\n \"DataTable-select\",\n);\n\nexport const EvDataTableSelectionSymbol: InjectionKey<\n ReturnType<typeof provideSelection>\n> = Symbol.for(\"ev:data-table-selection\");\n\nexport function provideSelection(\n props: SelectionProps,\n allItems: Ref<SelectableItem[]>,\n) {\n const showSelect = toRef(props, \"showSelect\");\n const isRequired = toRef(props, \"required\");\n const lastToggledItem = ref<SelectableItem | null>(null);\n\n const selected = useModelProxy(\n props,\n \"selected\",\n props.selected,\n (v) => {\n return new Set(\n wrapInArray(v).map((v) => {\n return (\n allItems.value.find((item) =>\n props.valueComparator(v, item.value),\n )?.value ?? v\n );\n }),\n );\n },\n (v) => {\n return [...v.values()];\n },\n );\n\n const allSelectable = computed(() =>\n allItems.value.filter((item) => item.selectable),\n );\n\n const selectStrategy = computed(() => {\n if (typeof props.selectStrategy === \"object\") {\n return props.selectStrategy;\n }\n switch (props.selectStrategy) {\n case \"single\":\n return singleSelectStrategy;\n case \"multiple\":\n return multiSelectStrategy;\n default:\n return nullSelectStrategy;\n }\n });\n\n function isSelected(items: SelectableItem | SelectableItem[]) {\n return wrapInArray(items).every((item) =>\n selected.value.has(item.value),\n );\n }\n\n function isSomeSelected(items: SelectableItem | SelectableItem[]) {\n return wrapInArray(items).some((item) =>\n selected.value.has(item.value),\n );\n }\n\n function select(items: SelectableItem[], value: boolean) {\n selected.value = selectStrategy.value.select({\n items,\n value,\n selected: new Set(selected.value),\n isRequired: isRequired.value,\n });\n }\n\n function toggleSelect(item: SelectableItem, shiftPressed: boolean = false) {\n const isItemSelected = isSelected([item]);\n if (lastToggledItem.value && shiftPressed) {\n const lastIndex = allSelectable.value.findIndex((v) => {\n return props.valueComparator(v, lastToggledItem.value);\n });\n const currentIndex = allSelectable.value.findIndex((v) => {\n return props.valueComparator(v, item);\n });\n if (lastIndex === -1 || currentIndex === -1) {\n select([item], !isSelected([item]));\n lastToggledItem.value = selected.value.size > 0 ? item : null;\n return;\n }\n const [start, end] =\n lastIndex < currentIndex\n ? [lastIndex, currentIndex]\n : [currentIndex, lastIndex];\n const rangeItems = allSelectable.value.slice(start, end + 1);\n const isLastSelected = isSelected([lastToggledItem.value]);\n const allOpposite = rangeItems.filter(\n (i) => isSelected([i]) !== isLastSelected,\n );\n select(allOpposite, isLastSelected);\n if (isLastSelected === isItemSelected) {\n select([item], !isItemSelected);\n }\n } else {\n select([item], !isSelected([item]));\n }\n lastToggledItem.value = selected.value.size > 0 ? item : null;\n }\n\n function selectAll(value: boolean) {\n lastToggledItem.value = null;\n selected.value = selectStrategy.value.selectAll({\n value,\n allItems: allSelectable.value,\n selected: new Set(selected.value),\n });\n }\n\n const someSelected = computed(() => selected.value.size > 0);\n const allSelected = computed(() => {\n const items = selectStrategy.value.allSelected({\n allItems: allSelectable.value,\n });\n return !!items.length && isSelected(items);\n });\n\n const showSelectAll = computed(\n () => showSelect.value && selectStrategy.value.showSelectAll,\n );\n\n const data = {\n selected,\n selectStrategy,\n toggleSelect,\n select,\n selectAll,\n isRequired,\n isSelected,\n isSomeSelected,\n someSelected,\n allSelected,\n showSelect,\n showSelectAll,\n };\n provide(EvDataTableSelectionSymbol, data);\n return data;\n}\n\nexport function useSelection() {\n const data = inject(EvDataTableSelectionSymbol);\n if (!data) {\n throw new Error(\"Unable to `useSelection()`\");\n }\n return data;\n}\n","import {\n capitalize,\n DeepReadonly,\n inject,\n InjectionKey,\n PropType,\n provide,\n ref,\n Ref,\n watchEffect,\n} from \"vue\";\nimport { GetterPropertyKey, isBoolean, isEmpty, propsFactory } from \"@/util\";\nimport { FilterKeyFunctions } from \"@/composables/filter\";\nimport {\n DataTableCompareFunction,\n DataTableHeader,\n InternalDataTableHeader,\n} from \"@/components/EvDataTable/composables/types\";\nimport {\n DisplayInstance,\n DisplayRuleListProp,\n useDisplay,\n} from \"@/composables/display\";\n\ntype HeaderProps = {\n headers?: DeepReadonly<DataTableHeader[]> | undefined;\n items: any[];\n};\n\nexport const makeDataTableHeaderProps = propsFactory(\n {\n headers: Array as PropType<DeepReadonly<DataTableHeader[]>>,\n },\n \"EvDataTable-header\",\n);\n\nexport const EvDataTableHeadersSymbol: InjectionKey<{\n headers: Ref<InternalDataTableHeader[][]>;\n columns: Ref<InternalDataTableHeader[]>;\n}> = Symbol.for(\"ev:data-table-headers\");\n\nfunction priorityQueue<T>(arr: T[] = []) {\n const queue: { element: T; priority: number }[] = arr.map((element) => ({\n element,\n priority: 0,\n }));\n\n return {\n enqueue: (element: T, priority: number) => {\n let added = false;\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n if (item.priority > priority) {\n queue.splice(i, 0, { element, priority });\n added = true;\n break;\n }\n }\n if (!added) {\n queue.push({ element, priority });\n }\n },\n size: () => queue.length,\n count: () => {\n let count = 0;\n if (!queue.length) {\n return 0;\n }\n const whole = Math.floor(queue[0].priority);\n for (let i = 0; i < queue.length; i++) {\n if (Math.floor(queue[i].priority) === whole) count += 1;\n }\n return count;\n },\n dequeue: () => {\n return queue.shift();\n },\n };\n}\n\nfunction extractLeaves(\n item: InternalDataTableHeader,\n columns: InternalDataTableHeader[] = [],\n) {\n if (!item.children) {\n columns.push(item);\n } else {\n for (const child of item.children) {\n extractLeaves(child as InternalDataTableHeader, columns);\n }\n }\n return columns;\n}\n\nfunction getDepth(item: InternalDataTableHeader, depth = 0): number {\n if (!item.children) {\n return depth;\n }\n return Math.max(\n depth,\n ...item.children.map((child) =>\n getDepth(child as InternalDataTableHeader, depth + 1),\n ),\n );\n}\n\nfunction parseFixedColumns(items: InternalDataTableHeader[]) {\n let seenFixed = false;\n function setFixed(item: InternalDataTableHeader, parentFixed = false) {\n if (!item) {\n return;\n }\n if (parentFixed) {\n item.fixed = true;\n }\n if (item.fixed) {\n if (item.children) {\n for (let i = item.children.length - 1; i >= 0; i--) {\n setFixed(item.children[i] as InternalDataTableHeader, true);\n }\n } else {\n if (!seenFixed) {\n item.lastFixed = true;\n } else if (isNaN(+item.width!)) {\n console.error(\n `Multiple fixed columns should have a static width (key: ${item.key})`,\n );\n }\n seenFixed = true;\n }\n } else {\n if (item.children) {\n for (let i = item.children.length - 1; i >= 0; i--) {\n setFixed(item.children[i]);\n }\n } else {\n seenFixed = false;\n }\n }\n }\n\n for (let i = items.length - 1; i >= 0; i--) {\n setFixed(items[i]);\n }\n\n function setFixedOffset(item: InternalDataTableHeader, fixedOffset = 0) {\n if (!item) {\n return fixedOffset;\n }\n if (item.children) {\n item.fixedOffset = fixedOffset;\n for (const child of item.children) {\n fixedOffset = setFixedOffset(child, fixedOffset);\n }\n } else if (item.fixed) {\n item.fixedOffset = fixedOffset;\n fixedOffset += parseFloat(item.width?.toString() || \"0\") || 0;\n }\n return fixedOffset;\n }\n\n let fixedOffset = 0;\n for (const item of items) {\n fixedOffset = setFixedOffset(item, fixedOffset);\n }\n}\n\nfunction parse(items: InternalDataTableHeader[], maxDepth: number) {\n const headers: InternalDataTableHeader[][] = [];\n let currentDepth = 0;\n const queue = priorityQueue(items);\n\n while (queue.size() > 0) {\n let rowSize = queue.count();\n const row: InternalDataTableHeader[] = [];\n let fraction = 1;\n while (rowSize > 0) {\n const { element: item, priority } = queue.dequeue()!;\n const diff = maxDepth - currentDepth - getDepth(item);\n\n row.push({\n ...item,\n rowspan: diff ?? 1,\n colspan: item.children ? extractLeaves(item).length : 1,\n });\n\n if (item.children) {\n for (const child of item.children) {\n // This internally sorts items that are on the same priority \"row\"\n const sort =\n (priority % 1) +\n fraction / Math.pow(10, currentDepth + 1);\n queue.enqueue(child, currentDepth + diff + sort);\n }\n }\n\n fraction += 1;\n rowSize -= 1;\n }\n currentDepth += 1;\n headers.push(row);\n }\n const columns = items.map((item) => extractLeaves(item)).flat();\n return { columns, headers };\n}\n\n/**\n * # `convertToInternalHeaders`\n *\n * Convert the header items supplied to the table to items we\n * can use internally.\n *\n * @param items\n * @param display\n */\nfunction convertToInternalHeaders(\n items: DeepReadonly<DataTableHeader[]>,\n display: DisplayInstance,\n) {\n const internalHeaders: InternalDataTableHeader[] = [];\n for (const item of items) {\n if (!isEmpty(item.hidden)) {\n if (isBoolean(item.hidden) && !!item.hidden) {\n continue;\n }\n if (\n !isBoolean(item.hidden) &&\n display.hasActiveRule(item.hidden as DisplayRuleListProp)\n ) {\n continue;\n }\n }\n const defaultItem = { ...item };\n const key =\n defaultItem.key ??\n (typeof defaultItem.value === \"string\" ? defaultItem.value : null);\n const value = defaultItem.value ?? key ?? null;\n const internalItem: InternalDataTableHeader = {\n ...defaultItem,\n key,\n value: value as GetterPropertyKey,\n sortable:\n defaultItem.sortable ??\n (defaultItem.key != null || !!defaultItem.sort),\n children: defaultItem.children\n ? convertToInternalHeaders(defaultItem.children, display)\n : undefined,\n };\n internalHeaders.push(internalItem);\n }\n return internalHeaders;\n}\n\nexport function createHeaders(props: HeaderProps) {\n const headers = ref<InternalDataTableHeader[][]>([]);\n const columns = ref<InternalDataTableHeader[]>([]);\n const sortFunctions = ref<Record<string, DataTableCompareFunction>>();\n const filterFunctions = ref<FilterKeyFunctions>();\n const display = useDisplay();\n\n watchEffect(() => {\n const _headers =\n props.headers ||\n (Object.keys(props.items[0] ?? {}).map((key) => ({\n key,\n title: capitalize(key),\n })) as never);\n\n const items = _headers.slice();\n const internalHeaders = convertToInternalHeaders(items, display);\n parseFixedColumns(internalHeaders);\n const maxDepth =\n Math.max(...internalHeaders.map((item) => getDepth(item))) + 1;\n const parsed = parse(internalHeaders, maxDepth);\n\n headers.value = parsed.headers;\n columns.value = parsed.columns;\n\n const flatHeaders = parsed.headers.flat(1);\n\n sortFunctions.value = flatHeaders.reduce(\n (acc, header) => {\n if (header.sortable && header.key && header.sort) {\n acc[header.key] = header.sort;\n }\n return acc;\n },\n {} as Record<string, DataTableCompareFunction>,\n );\n\n filterFunctions.value = flatHeaders.reduce((acc, header) => {\n if (header.key && header.filter) {\n acc[header.key] = header.filter;\n }\n return acc;\n }, {} as FilterKeyFunctions);\n });\n\n const data = { headers, columns, sortFunctions, filterFunctions };\n provide(EvDataTableHeadersSymbol, data);\n return data;\n}\n\nexport function useHeaders() {\n const data = inject(EvDataTableHeadersSymbol);\n if (!data) {\n throw new Error(\"Unable to `useHeaders()`.\");\n }\n return data;\n}\n","<script setup lang=\"ts\">\nimport \"./EvDataTableRow.scss\";\nimport { makeEvDataTableRowProps } from \"./EvDataTableRow\";\nimport {computed, toRaw} from \"vue\";\nimport { EvDataTableCell } from \"@/components/EvDataTable/EvDataTableCell\";\nimport { EvCheckbox } from \"@/components/EvCheckbox\";\nimport { useSelection } from \"@/components/EvDataTable/composables/select\";\nimport { useHeaders } from \"@/components/EvDataTable/composables/headers\";\nimport { ItemSlot } from \"@/components/EvDataTable/composables/types\";\nimport { getPropertyValue } from \"@/util\";\n\nconst props = defineProps({ ...makeEvDataTableRowProps() });\nconst slots = defineSlots<{\n default(props: ItemSlot): never;\n}>();\n\nconst { isSelected, toggleSelect, showSelect, selectStrategy } = useSelection();\n// const { isExpanded, toggleExpand } = useExpanded();\nconst { columns } = useHeaders();\nconst item = props.item;\nconst isItemSelected = computed(() => isSelected(item));\nconst isItemSelectable = computed(() => {\n return (\n (props.selectable || item.selectable) && selectStrategy.value.selectable\n );\n});\n\nconst isClickable = computed(() => {\n return (\n props.onClick ||\n props.onContextmenu ||\n props.onDblclick ||\n (!showSelect.value && isItemSelectable.value)\n );\n});\n\nfunction onCheckboxClick(e: MouseEvent) {\n toggleSelect(item, e.shiftKey);\n}\n\nfunction onClick(e: MouseEvent) {\n if (!showSelect.value && isItemSelectable.value) {\n toggleSelect(item, e.shiftKey);\n }\n props.onClick?.(e);\n}\n\nfunction onMouseDown(e: MouseEvent) {\n if (e.shiftKey) {\n document.body.style.userSelect = \"none\";\n }\n}\n\nfunction onMouseUp(e: MouseEvent) {\n if (e.shiftKey) {\n document.body.style.userSelect = \"\";\n }\n}\n\ndefineExpose({\n index: props.index,\n columns,\n item: toRaw(item.raw),\n internalItem: toRaw(item),\n isSelected,\n toggleSelect,\n});\n</script>\n\n<template>\n <tr\n :class=\"[\n 'ev-data-table-row',\n {\n 'is-clickable': isClickable,\n 'is-selected': isItemSelected,\n 'is-indicated': !showSelect && selectStrategy.selectable,\n },\n ]\"\n @mousedown=\"onMouseDown\"\n @mouseup=\"onMouseUp\"\n @click=\"onClick\"\n @contextmenu=\"props.onContextmenu\"\n @dblclick=\"props.onDblclick\">\n <ev-data-table-cell\n v-if=\"showSelect\"\n class=\"ev-data-table-cell--checkbox\">\n <ev-checkbox\n :model-value=\"isItemSelected\"\n :disabled=\"!isItemSelectable\"\n @click.stop=\"onCheckboxClick\" />\n </ev-data-table-cell>\n\n <slot\n name=\"default\"\n v-bind=\"{\n index,\n columns,\n item: item.raw,\n internalItem: item,\n isSelected,\n toggleSelect,\n }\">\n <template\n v-for=\"column in columns\"\n :key=\"`item-${index}-${column.key}`\">\n <ev-data-table-cell\n v-bind=\"column.cellProps\"\n :align=\"column.align\">\n <slot\n :name=\"`item.${column.key}`\"\n v-bind=\"{\n index,\n item: item.raw,\n internalItem: item,\n value: getPropertyValue(item.columns, column.key),\n column: column,\n isSelected,\n toggleSelect,\n }\">\n {{ getPropertyValue(item.columns, column.key) }}\n </slot>\n </ev-data-table-cell>\n </template>\n </slot>\n </tr>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { computed, ComputedRef, PropType } from \"vue\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { useLocaleFunctions } from \"@/composables\";\nimport { ArrowDownIcon, ArrowUpIcon } from \"@/icons\";\n\nexport type SortItem = {\n key: string;\n order?: boolean | \"asc\" | \"desc\";\n};\n\nexport interface SortOption {\n title: string;\n value: string;\n direction?: string;\n disabled?: boolean;\n}\n\nexport interface SortProps {\n sort: string[];\n sortOptions: SortOption[];\n}\n\nexport const makeDataTableSortProps = propsFactory(\n {\n sort: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n sortOptions: Array as PropType<SortOption[]>,\n },\n \"data-table-sort\",\n);\n\nexport function useSortOptions(props: SortProps) {\n const sortSelected = useModelProxy(props, \"sort\");\n const { t } = useLocaleFunctions();\n const hasSort = computed(() => props.sortOptions?.length);\n\n function isTitleDisabled(title: string) {\n return getItemsByTitle(title).every((option) => option.disabled);\n }\n\n function getItemsByTitle(title: string) {\n return sortOptions.value.filter((item) => item.title === title);\n }\n\n function getTitleFromValue(value: string) {\n const titles = sortOptions.value\n .filter((item) => item.value === value)\n .map((item) => item.title);\n return titles[0] ?? undefined;\n }\n\n function isAscending(value: string) {\n return value?.endsWith(\"asc\");\n }\n\n /**\n * Fixes some optional properties in `SortOption` objects.\n */\n const sortOptions: ComputedRef<SortOption[]> = computed(() => {\n return props.sortOptions.map((item) => {\n return Object.assign(\n {\n disabled: item.disabled ?? false,\n direction: item.value.endsWith(\"asc\")\n ? t(\"sort.ascending\")\n : t(\"sort.descending\"),\n },\n item,\n );\n });\n });\n\n /**\n * Reduces the supplied sort options down to unique titles\n * and determines whether the title is disabled if all of its\n * values are disabled.\n */\n const sortTitleOptions = computed(() => {\n const titles = Array.from(\n new Set(sortOptions.value.map((item) => item.title)),\n );\n const options = [];\n for (const title of titles) {\n options.push({\n title,\n value: title,\n props: {\n disabled: isTitleDisabled(title),\n },\n });\n }\n return options;\n });\n\n const sortTitleSelected = computed(() => {\n const titles = [];\n for (const value of sortSelected.value) {\n titles.push(getTitleFromValue(value));\n }\n return titles;\n });\n\n const sortTitle = computed(() => sortTitleSelected.value[0]);\n\n const sortDirectionOptions = computed(() => {\n const options = getItemsByTitle(sortTitle.value);\n return options.map((option) => {\n return Object.assign(\n {\n props: {\n disabled: option.disabled,\n iconStart: isAscending(option.value)\n ? ArrowUpIcon\n : ArrowDownIcon,\n },\n },\n option,\n );\n });\n });\n\n const onSortTitleSelected = (selection: string[]) => {\n const options = getItemsByTitle(selection[0]);\n const availableValues = options.filter((option) => {\n return (\n isAscending(option.value) ===\n isAscending(sortSelected.value[0]) && !option.disabled\n );\n });\n const newOption = availableValues[0] ?? options[0];\n sortSelected.value = [newOption.value];\n };\n\n const sortIcon = computed(() => {\n return isAscending(sortSelected.value[0]) ? ArrowUpIcon : ArrowDownIcon;\n });\n\n return {\n hasSort,\n sortOptions,\n sortSelected,\n sortTitle,\n sortTitleOptions,\n sortTitleSelected,\n sortDirectionOptions,\n onSortTitleSelected,\n sortIcon,\n };\n}\n","import { propsFactory } from \"@/util\";\nimport { makeDataTableSortProps } from \"../composables/sort\";\nimport { PropType } from \"vue\";\nimport { EvButtonProps } from \"@/components/EvButton\";\n\nexport const makeEvDataTableSearchProps = propsFactory(\n {\n filters: {\n type: Object as PropType<Record<string, any>>,\n default: () => ({}),\n },\n hideSelectAll: Boolean,\n loading: Boolean,\n search: String,\n searchDelay: {\n type: Number,\n default: 300,\n },\n searchPlaceholder: String,\n selectActions: Array as PropType<EvButtonProps[]>,\n ...makeDataTableSortProps(),\n },\n \"EvDataTableSearch\",\n);\n","import { propsFactory } from \"@/util\";\nimport { DefaultsOptions } from \"@/composables/defaults\";\nimport { PropType } from \"vue\";\n\nexport const makeEvDefaultsProviderProps = propsFactory(\n {\n defaults: Object as PropType<DefaultsOptions>,\n disabled: Boolean,\n reset: [Number, String],\n root: [Boolean, String],\n scoped: Boolean,\n },\n \"EvDefaultsProvider\",\n);\n","<script setup lang=\"ts\">\nimport { toRefs } from \"vue\";\nimport { provideDefaults } from \"@/composables/defaults\";\nimport { makeEvDefaultsProviderProps } from \"./EvDefaultsProvider\";\n\nconst props = defineProps({\n ...makeEvDefaultsProviderProps(),\n});\n\nconst { defaults, disabled, reset, root, scoped } = toRefs(props);\n\nprovideDefaults(defaults, {\n reset,\n root,\n scoped,\n disabled,\n});\n</script>\n\n<template>\n <slot />\n</template>\n","import { computed, ComputedRef } from \"vue\";\nimport { SetupContext } from \"vue\";\n\n/**\n * # Has slot with content\n *\n * Determines whether the `slotName` is present within the supplied list of `slots`\n * and whether it has content.\n *\n * @param slots\n * @param slotName\n */\nexport function hasSlotWithContent(\n slots: SetupContext[\"slots\"],\n slotName: string,\n): ComputedRef {\n return computed(() => {\n if (!slots[slotName]) {\n return false;\n }\n const slot = slots[slotName]!();\n if (!slot.length) {\n return false;\n }\n return slot.some((node) => {\n return !!node.children?.length;\n });\n });\n}\n","<script setup lang=\"ts\">\n/**\n * # EvDivider\n *\n * `<ev-divider />`\n */\nimport \"./EvDivider.scss\";\nimport { computed, useSlots } from \"vue\";\nimport { hasSlotWithContent } from \"@/composables/hasSlotWithContent\";\nimport {\n Appearance,\n appearanceModifier,\n AppearanceProp,\n isCssVariable,\n isIntegerish,\n} from \"@/util\";\n\n/**\n * ## Divider Border Style\n */\ntype BorderStyle = \"solid\" | \"dashed\" | \"dotted\";\n\n/**\n * ## Divider Props\n */\ninterface DividerProps {\n appearance?: AppearanceProp;\n borderStyle?: BorderStyle;\n thickness?: number;\n opacity?: number | string;\n vertical?: boolean;\n}\nconst props = withDefaults(defineProps<DividerProps>(), {\n appearance: \"default\",\n borderStyle: \"solid\",\n opacity: undefined,\n thickness: 1,\n vertical: false,\n});\n\nconst slots = useSlots();\nconst hasDefaultSlot = hasSlotWithContent(slots, \"default\");\n\nconst borderColor = computed(() => {\n return props.appearance !== \"default\"\n ? `var(--text-${props.appearance})`\n : null;\n});\n\nconst borderOpacity = computed(() => {\n if (!props.opacity) {\n return null;\n }\n if (isIntegerish(props.opacity)) {\n return +props.opacity / 100;\n }\n if (isCssVariable(props.opacity)) {\n return `var(${props.opacity})`;\n }\n return null;\n});\n\nconst borderStyle = computed(() => {\n return props.borderStyle !== \"solid\" ? props.borderStyle : null;\n});\n\nconst borderWidth = computed(() => {\n return props.thickness > 1 ? props.thickness + \"px\" : null;\n});\n\nconst classNames = computed(() => {\n return [\n {\n \"is-horizontal\": !props.vertical,\n \"is-vertical\": props.vertical,\n },\n appearanceModifier(props.appearance, [Appearance.default]),\n ];\n});\n</script>\n\n<template>\n <div\n v-if=\"hasDefaultSlot\"\n class=\"ev-divider\"\n role=\"separator\"\n :class=\"classNames\">\n <hr class=\"ev-divider--line\" />\n <div class=\"ev-divider--content\"><slot /></div>\n <hr class=\"ev-divider--line\" />\n </div>\n <hr v-else class=\"ev-divider\" role=\"separator\" :class=\"classNames\" />\n</template>\n\n<style>\n.ev-divider {\n --border-color: v-bind(borderColor);\n --border-opacity: v-bind(borderOpacity);\n --border-style: v-bind(borderStyle);\n --border-width: v-bind(borderWidth);\n}\n</style>\n","import { inject, InjectionKey, provide, Ref, shallowRef } from \"vue\";\n\n/**\n * # List Key\n */\nexport const ListKey: InjectionKey<{\n hasPrepend: Ref<boolean>;\n updateHasPrepend: (value: boolean) => void;\n}> = Symbol.for(\"ev:list\");\n\n/**\n * # Create List\n * @see useList\n */\nexport function createList() {\n const defaultValue = {\n hasPrepend: shallowRef(false),\n updateHasPrepend: () => null,\n };\n const parent = inject(ListKey, defaultValue);\n const data = {\n hasPrepend: shallowRef(false),\n updateHasPrepend: (value: boolean) => {\n if (value) {\n data.hasPrepend.value = value;\n }\n },\n };\n provide(ListKey, data);\n return parent;\n}\n\n/**\n * # Use List\n *\n * @see createList\n */\nexport function useList() {\n return inject(ListKey, null);\n}\n","import {\n getPropertyValue,\n GetterPropertyKey,\n isArray,\n isDeepEqual,\n isObject,\n omit,\n propsFactory,\n} from \"@/util\";\nimport { computed, PropType } from \"vue\";\nimport { ListItemProps } from \"@/components/EvList\";\n\n/**\n * # List Item\n */\nexport interface ListItem<T = any> {\n type?: string;\n key: number;\n title: string;\n value: any;\n props: {\n [key: string]: any;\n title: string;\n value: any;\n };\n children?: ListItem<T>[];\n raw: T;\n}\n\n/**\n * # List Item Key\n *\n * Defines where to look for item information.\n *\n * For example: each Item might have a `title` property.\n * So an Item key may represent either an array index, or an object property.\n *\n * - `boolean` - Ignored\n * - `string` - Property name, or use Object path notation.\n * - `array` of strings or numbers represent nested lookup - each array element represents a key in the hierarchy\n */\nexport type ListItemKey = GetterPropertyKey;\n\n/**\n * # List Items Props\n *\n * - `items` - the array of items to render within a list.\n * - `item-title` - the title property/key to use as the title in each list item.\n * - `item-value` - the value property/key to use for selection per list item.\n * - `item-props` - the props to assign to each list item.\n * - `return-object` - return the full item object on selection if `true`, or the `item-value` if `false`.\n */\nexport interface ListItemsProps {\n items: any[];\n itemTitle: ListItemKey;\n itemValue: ListItemKey;\n itemChildren: ListItemKey;\n itemProps: ListItemKey;\n returnObject: boolean;\n valueComparator: typeof isDeepEqual;\n}\n\n/**\n * # Make List Items Props\n *\n * Applies `ListItemProps` with the following defaults:\n *\n * - `items` - a blank array.\n * - `item-title` - 'title'\n * - `item-value` - 'value'\n * - `item-children` - 'children'\n * - `item-props` - 'props'\n * - `return-object` - `false`\n *\n * @see ListItemsProps\n */\nexport const makeListItemsProps = propsFactory(\n {\n items: {\n type: Array as PropType<ListItemsProps[\"items\"]>,\n default: () => [],\n },\n itemTitle: {\n type: [String, Array, Function] as PropType<ListItemKey>,\n default: \"title\",\n },\n itemValue: {\n type: [String, Array, Function] as PropType<ListItemKey>,\n default: \"value\",\n },\n itemChildren: {\n type: [Boolean, String, Array, Function] as PropType<ListItemKey>,\n default: \"children\",\n },\n itemProps: {\n type: [Boolean, String, Array, Function] as PropType<ListItemKey>,\n default: \"props\",\n },\n returnObject: Boolean,\n valueComparator: {\n type: Function as PropType<typeof isDeepEqual>,\n default: isDeepEqual,\n },\n },\n \"list-items\",\n);\n\n// Tracks unique item Ids\nlet lastItemKey = 0;\n\n/**\n * # Transform Item\n *\n * @param props\n * @param item\n */\nexport function transformItem(\n props: Omit<ListItemProps, \"items\">,\n item: any,\n): ListItem {\n const type = getPropertyValue(item, props.itemType, \"item\");\n const title = getPropertyValue(item, props.itemTitle, item);\n const value = getPropertyValue(item, props.itemValue, title);\n const children = getPropertyValue(item, props.itemChildren);\n const itemProps =\n props.itemProps === true\n ? isObject(item) && item != null && !isArray(item)\n ? \"children\" in item\n ? omit(item, [\"children\"])\n : item\n : undefined\n : getPropertyValue(item, props.itemProps);\n\n const transformedItemProps = {\n title,\n value,\n ...itemProps,\n };\n\n return {\n type,\n key: ++lastItemKey,\n title: String(transformedItemProps.title ?? \"\"),\n value: transformedItemProps.value,\n props: transformedItemProps,\n children: isArray(children)\n ? transformItems(props, children)\n : undefined,\n raw: item,\n };\n}\n\n/**\n * # Transform Items\n */\nexport function transformItems(\n props: Omit<ListItemProps, \"items\">,\n items: ListItemProps[\"items\"],\n) {\n const listItems: ListItem[] = [];\n for (const item of items) {\n listItems.push(transformItem(props, item));\n }\n return listItems;\n}\n\n/**\n * # Use Items\n *\n * @param props\n */\nexport function useItems(props: any) {\n const items = computed(() => {\n return transformItems(props, props.items);\n });\n\n const hasNullItem = computed(() => {\n return items.value.some((item) => item.value === null);\n });\n\n function transformIn(value: any[]): ListItem[] {\n if (!hasNullItem.value) {\n // When the model value is null, return an ListItem\n // based on null only if null is one of the items\n value = value.filter((v) => v !== null);\n }\n\n return value.map((v) => {\n if (props.returnObject && typeof v === \"string\") {\n // String model value means value is a custom input value\n // Don't look up existing items if the model value is a string\n return transformItem(props, v);\n }\n return (\n items.value.find((item) =>\n props.valueComparator(v, item.value),\n ) || transformItem(props, v)\n );\n });\n }\n\n function transformOut(value: ListItem[]): any[] {\n return props.returnObject\n ? value.map(({ raw }) => raw)\n : value.map(({ value }) => value);\n }\n\n return { items, transformIn, transformOut };\n}\n","import { SelectStrategy } from \"@/composables/lists\";\nimport { toRaw } from \"vue\";\n\n/**\n * # Cascade Leaf Select Strategy\n *\n * This is the equivalent of Vuetify's classic select strategy.\n *\n * Selecting a parent node will cause all children to be selected,\n * parent nodes will be displayed as selected if all their descendants\n * are selected. Only leaf nodes will be added to the model.\n *\n * @param isRequired\n */\nexport const cascadeLeaf = (isRequired?: boolean): SelectStrategy => {\n const strategy: SelectStrategy = {\n select: ({ id, value, selected, children, parents }) => {\n id = toRaw(id);\n const original = new Map(selected);\n\n const items = [id];\n\n while (items.length) {\n const item = items.shift()!;\n\n selected.set(item, value ? \"on\" : \"off\");\n\n if (children.has(item)) {\n items.push(...children.get(item)!);\n }\n }\n\n let parent = parents.get(id);\n\n while (parent) {\n const childrenIds = children.get(parent)!;\n const everySelected = childrenIds.every(\n (cid) => selected.get(cid) === \"on\",\n );\n const noneSelected = childrenIds.every(\n (cid) => !selected.has(cid) || selected.get(cid) === \"off\",\n );\n\n selected.set(\n parent,\n everySelected\n ? \"on\"\n : noneSelected\n ? \"off\"\n : \"indeterminate\",\n );\n\n parent = parents.get(parent);\n }\n\n // If mandatory and planned deselect results in no selected\n // items then we can't do it, so return original state\n if (isRequired && !value) {\n const on = Array.from(selected.entries()).reduce(\n (arr, [key, value]) =>\n value === \"on\" ? [...arr, key] : arr,\n [] as unknown[],\n );\n if (on.length === 0) {\n return original;\n }\n }\n\n return selected;\n },\n in: (values: any, children, parents) => {\n let map = new Map();\n for (const id of values || []) {\n map = strategy.select({\n id,\n value: true,\n selected: new Map(map),\n children,\n parents,\n });\n }\n return map;\n },\n out: (values, children) => {\n const arr = [];\n for (const [key, value] of values.entries()) {\n if (value === \"on\" && !children.has(key)) {\n arr.push(key);\n }\n }\n return arr;\n },\n };\n\n return strategy;\n};\n","import {\n Selected,\n SelectStrategy,\n SelectStrategyData,\n SelectStrategyFn,\n SelectTransformInFn,\n SelectTransformOutFn,\n} from \"@/composables/lists\";\nimport { toRaw } from \"vue\";\n\n/**\n * # Multi Any\n *\n * Any node may be selected regardless of whether it has children.\n *\n * @param isRequired\n */\nexport const multiAny = (isRequired?: boolean): SelectStrategy => {\n const selectFn: SelectStrategyFn = (data: SelectStrategyData) => {\n const id = toRaw(data.id);\n if (isRequired && !data.value) {\n const reducer = (arr: any, [key, value]: [unknown, Selected]) => {\n return value === \"on\" ? [...arr, key] : arr;\n };\n const on = Array.from(data.selected.entries()).reduce(reducer, []);\n if (on.length === 1 && on[0] === id) {\n return data.selected;\n }\n }\n data.selected.set(id, data.value ? \"on\" : \"off\");\n return data.selected;\n };\n\n const transformIn: SelectTransformInFn = (\n values: any,\n children,\n parents,\n ) => {\n let map = new Map();\n for (const id of values || []) {\n map = selectFn({\n id,\n value: true,\n selected: new Map(map),\n children,\n parents,\n });\n }\n return map;\n };\n\n const transformOut: SelectTransformOutFn = (values) => {\n const selections = [];\n for (const [key, value] of values.entries()) {\n if (value === \"on\") {\n selections.push(key);\n }\n }\n return selections;\n };\n\n return {\n select: selectFn,\n in: transformIn,\n out: transformOut,\n };\n};\n","import { SelectStrategy } from \"@/composables/lists\";\nimport { multiAny } from \"./multi-any\";\nimport { toRaw } from \"vue\";\n\n/**\n * # Multi-Leaf Select Strategy\n *\n * Only leaf nodes (items without children) can be selected.\n *\n * @param isRequired\n */\nexport const multiLeaf = (isRequired?: boolean): SelectStrategy => {\n const parentStrategy = multiAny(isRequired);\n\n return {\n select: ({ id, selected, children, ...rest }) => {\n id = toRaw(id);\n if (children.has(id)) {\n return selected;\n }\n return parentStrategy.select({ id, selected, children, ...rest });\n },\n in: parentStrategy.in,\n out: parentStrategy.out,\n };\n};\n","import {\n SelectStrategy,\n SelectStrategyData,\n SelectStrategyFn,\n SelectTransformInFn,\n SelectTransformOutFn,\n} from \"@/composables/lists\";\nimport { multiAny } from \"./multi-any\";\nimport { toRaw } from \"vue\";\n\n/**\n * # Single Any\n *\n * One node may be selected, regardless of whether the node has children.\n *\n * @param isRequired\n */\nexport const singleAny = (isRequired?: boolean): SelectStrategy => {\n const parentStrategy = multiAny(isRequired);\n\n const selectFn: SelectStrategyFn = (data: SelectStrategyData) => {\n const id = toRaw(data.id);\n const singleSelection =\n data.selected.has(id) || isRequired\n ? new Map([[id, data.selected.get(id)!]])\n : new Map();\n return parentStrategy.select({\n ...data,\n id: id,\n selected: singleSelection,\n });\n };\n\n const transformIn: SelectTransformInFn = (values, children, parents) => {\n let map = new Map();\n if (Array.isArray(values) && values.length) {\n map = parentStrategy.in(values.slice(0, 1), children, parents);\n }\n return map;\n };\n\n const transformOut: SelectTransformOutFn = (values, children, parents) => {\n return parentStrategy.out(values, children, parents);\n };\n\n return {\n select: selectFn,\n in: transformIn,\n out: transformOut,\n };\n};\n","import { SelectStrategy } from \"@/composables/lists\";\nimport { singleAny } from \"./single-any\";\nimport { toRaw } from \"vue\";\n\n/**\n * # Single Leaf Select Strategy\n *\n * Only one leaf node (items without children) can be selected.\n *\n * @param isRequired\n */\nexport const singleLeaf = (isRequired?: boolean): SelectStrategy => {\n const parentStrategy = singleAny(isRequired);\n\n return {\n select: ({ id, selected, children, ...rest }) => {\n id = toRaw(id);\n if (children.has(id)) {\n return selected;\n }\n return parentStrategy.select({ id, selected, children, ...rest });\n },\n in: parentStrategy.in,\n out: parentStrategy.out,\n };\n};\n","import { computed, ComputedRef, PropType, Ref } from \"vue\";\nimport { isFunction, isObject, propsFactory } from \"@/util\";\nimport {\n cascadeLeaf,\n multiAny,\n multiLeaf,\n singleLeaf,\n} from \"./select-strategy\";\nimport { singleAny } from \"./select-strategy/single-any\";\n\n/**\n * # Select Strategy\n */\nexport type SelectStrategy = {\n select: SelectStrategyFn;\n in: SelectTransformInFn;\n out: SelectTransformOutFn;\n};\n\n/**\n * # Selected\n */\nexport type Selected = \"on\" | \"off\" | \"indeterminate\";\n\n/**\n * # Select Strategy Data\n */\nexport interface SelectStrategyData {\n id: unknown;\n value: boolean;\n selected: Map<unknown, Selected>;\n children: Map<unknown, unknown[]>;\n parents: Map<unknown, unknown>;\n event?: Event;\n}\n\n/**\n * # Select Strategy Function\n */\nexport type SelectStrategyFn = (\n data: SelectStrategyData,\n) => Map<unknown, Selected>;\n\n/**\n * # Select Strategy Reference\n * Recognised selection strategy strings.\n */\nexport type SelectStrategyRef =\n | \"cascade-leaf\"\n | \"multi-any\"\n | \"multi-leaf\"\n | \"single-any\"\n | \"single-leaf\";\n\n/**\n * # Select Strategy Props\n * Defines the `props` required by components to be able to use `SelectStrategy`.\n */\nexport interface SelectStrategyProps {\n selectStrategy?: SelectStrategyRef | SelectStrategyFn;\n selected?: readonly unknown[];\n required?: boolean;\n \"onUpdate:selected\"?: ((values: unknown[]) => void) | undefined;\n}\n\n/**\n * # Select Transform In\n */\nexport type SelectTransformInFn = (\n values: readonly unknown[] | unknown,\n children: Map<unknown, unknown[]>,\n parents: Map<unknown, unknown>,\n) => Map<unknown, Selected>;\n\n/**\n * # Select Transform Out\n */\nexport type SelectTransformOutFn = (\n values: Map<unknown, Selected>,\n children: Map<unknown, unknown[]>,\n parents: Map<unknown, unknown>,\n) => unknown[];\n\n/**\n * # Make Selected Props\n */\nexport const makeSelectedProps = propsFactory(\n {\n selectStrategy: [String, Function] as PropType<\n SelectStrategyRef | SelectStrategyFn\n >,\n selected: Array as PropType<readonly unknown[]>,\n required: Boolean,\n },\n \"select-strategies\",\n);\n\n/**\n * # Use Select Strategy\n * @param props\n */\nexport function useSelectStrategy(\n props: SelectStrategyProps,\n): ComputedRef<SelectStrategy> {\n return computed(() => {\n if (\n isObject(props.selectStrategy) &&\n !isFunction(props.selectStrategy)\n ) {\n return props.selectStrategy as SelectStrategy;\n }\n switch (props.selectStrategy) {\n case \"single-leaf\":\n return singleLeaf(props.required);\n case \"single-any\":\n return singleAny(props.required);\n case \"multi-leaf\":\n return multiLeaf(props.required);\n case \"multi-any\":\n return multiAny(props.required);\n case \"cascade-leaf\":\n default:\n return cascadeLeaf(props.required);\n }\n });\n}\n\n/**\n * # Use Selected Values\n * @param selected\n */\nexport function useSelectedValues(selected: Ref<Map<unknown, Selected>>) {\n return computed(() => {\n const values = [];\n for (const [key, value] of selected.value.entries()) {\n if (value === \"on\") {\n values.push(key);\n }\n }\n return values;\n });\n}\n","import { OpenStrategy } from \"../open-strategies\";\n\n/**\n * # Single Open Strategy\n */\nexport const singleOpenStrategy: OpenStrategy = {\n open: ({ id, value, opened, parents }) => {\n if (value) {\n const newOpened = new Set<unknown>();\n newOpened.add(id);\n let parent = parents.get(id);\n while (parent != null) {\n newOpened.add(parent);\n parent = parents.get(parent);\n }\n return newOpened;\n }\n opened.delete(id);\n return opened;\n },\n select: () => null,\n};\n","import { OpenStrategy } from \"../open-strategies\";\n\n/**\n * # Multiple Open Strategy\n */\nexport const multipleOpenStrategy: OpenStrategy = {\n open: ({ id, value, opened, parents }) => {\n if (value) {\n let parent = parents.get(id);\n opened.add(id);\n while (parent != null && parent !== id) {\n opened.add(parent);\n parent = parents.get(parent);\n }\n return opened;\n }\n opened.delete(id);\n return opened;\n },\n select: () => null,\n};\n","import { OpenStrategy } from \"../open-strategies\";\nimport { multipleOpenStrategy } from \"./multiple\";\n\n/**\n * # List Open Strategy\n */\nexport const listOpenStrategy: OpenStrategy = {\n open: multipleOpenStrategy.open,\n select: ({ id, value, opened, parents }) => {\n if (!value) {\n return opened;\n }\n const path: unknown[] = [];\n let parent = parents.get(id);\n while (parent != null) {\n path.push(parent);\n parent = parents.get(parent);\n }\n return new Set(path);\n },\n};\n","import { Selected } from \"@/composables/lists/select-strategies\";\nimport { EventProp, isObject, propsFactory } from \"@/util\";\nimport { computed, ComputedRef, PropType } from \"vue\";\nimport {\n listOpenStrategy,\n multipleOpenStrategy,\n singleOpenStrategy,\n} from \"@/composables/lists/open-strategy\";\n\n/**\n * # Open Strategy\n */\nexport type OpenStrategy = {\n open: OpenStrategyFn;\n select: OpenSelectStrategyFn;\n};\n\n/**\n * # Open Strategy Data\n */\nexport interface OpenStrategyData {\n id: unknown;\n value: boolean;\n opened: Set<unknown>;\n children: Map<unknown, unknown[]>;\n parents: Map<unknown, unknown>;\n event?: Event;\n}\n\n/**\n * # Open Strategy Function\n */\nexport type OpenStrategyFn = (data: OpenStrategyData) => Set<unknown>;\n\n/**\n * # Open Select Strategy Data\n */\nexport interface OpenSelectStrategyData extends OpenStrategyData {\n selected: Map<unknown, Selected>;\n}\n\n/**\n * # Open Select Strategy Function\n */\nexport type OpenSelectStrategyFn = (\n data: OpenSelectStrategyData,\n) => Set<unknown> | null;\n\n/**\n * # Open Strategy Reference\n * Recognised open strategy strings.\n */\nexport type OpenStrategyRef = \"single\" | \"multiple\" | \"list\";\nexport type OpenStrategyProp = OpenStrategyRef | OpenStrategy;\n\n/**\n * # Open Strategy Props\n * Defines the `props` required by components to be able to use `OpenStrategy`.\n */\nexport interface OpenStrategyProps {\n openStrategy?: OpenStrategyProp;\n opened?: readonly unknown[];\n \"onUpdate:opened\"?: EventProp<[unknown[]]>;\n}\n\n/**\n * # Make Open Strategy Props\n */\nexport const makeOpenStrategyProps = propsFactory(\n {\n openStrategy: [String, Object] as PropType<\n OpenStrategyRef | OpenStrategy\n >,\n opened: Array as PropType<readonly unknown[]>,\n },\n \"open-strategies\",\n);\n\n/**\n * # Use Open Strategy\n * @param props\n */\nexport function useOpenStrategy(\n props: OpenStrategyProps,\n): ComputedRef<OpenStrategy> {\n return computed(() => {\n if (isObject(props.openStrategy)) {\n return props.openStrategy as OpenStrategy;\n }\n switch (props.openStrategy) {\n case \"list\":\n return listOpenStrategy;\n case \"single\":\n return singleOpenStrategy;\n case \"multiple\":\n default:\n return multipleOpenStrategy;\n }\n });\n}\n","import { SequencedPosition } from \"./sequenced\";\nimport {\n makeSelectedProps,\n Selected,\n SelectStrategyProps,\n useSelectedValues,\n useSelectStrategy,\n} from \"./select-strategies\";\nimport {\n computed,\n inject,\n InjectionKey,\n onBeforeMount,\n onBeforeUnmount,\n provide,\n Ref,\n ref,\n shallowRef,\n toRaw,\n toValue,\n} from \"vue\";\nimport { getCurrentComponent, getNextId, propsFactory } from \"@/util\";\nimport { useModelProxy } from \"../modelProxy\";\nimport {\n makeOpenStrategyProps,\n OpenStrategyProps,\n useOpenStrategy,\n} from \"@/composables/lists/open-strategies\";\n\n/**\n * # Nested Position\n *\n * Typically applies to requests to move a node within the nested data set.\n *\n * 'inside' - Position a node as a child of another node\n */\nexport type NestedPosition = SequencedPosition & \"inside\";\n\nexport interface NestedProps extends SelectStrategyProps, OpenStrategyProps {}\n\ntype NestedProvide = {\n id: Ref<unknown>;\n root: {\n children: Ref<Map<unknown, unknown[]>>;\n parents: Ref<Map<unknown, unknown>>;\n opened: Ref<Set<unknown>>;\n select: (id: unknown, value: boolean, event?: Event) => void;\n selected: Ref<Map<unknown, Selected>>;\n selectedValues: Ref<unknown[]>;\n register: (id: unknown, parentId: unknown, isGroup?: boolean) => void;\n unregister: (id: unknown) => void;\n open: (id: unknown, value: boolean, event?: Event) => void;\n openOnSelect: (id: unknown, value: boolean, event?: Event) => void;\n isNested: Ref<boolean>;\n };\n};\n\nexport const EvNestedSymbol: InjectionKey<NestedProvide> =\n Symbol.for(\"ev:nested\");\n\n/**\n * # Empty Nested List\n */\nexport const emptyNestedList: NestedProvide = {\n id: shallowRef(),\n root: {\n children: ref(new Map()),\n parents: ref(new Map()),\n opened: ref(new Set()),\n select: () => null,\n selected: ref(new Map()),\n selectedValues: ref([]),\n register: () => null,\n unregister: () => null,\n open: () => null,\n openOnSelect: () => null,\n isNested: ref(false),\n },\n};\n\n/**\n * # Make Nested Props\n */\nexport const makeNestedProps = propsFactory(\n {\n ...makeSelectedProps(),\n ...makeOpenStrategyProps(),\n },\n \"nested\",\n);\n\n/**\n * # Use Nested List\n * @param props\n */\nexport const useNestedList = (props: NestedProps) => {\n let isUnmounted = false;\n const component = getCurrentComponent(\"nested\");\n const children = ref(new Map<unknown, unknown[]>());\n const parents = ref(new Map<unknown, unknown>());\n const selectStrategy = useSelectStrategy(props);\n const selected: Ref<Map<unknown, Selected>> = useModelProxy(\n props,\n \"selected\",\n props.selected,\n (values) => {\n return selectStrategy.value.in(\n values,\n children.value,\n parents.value,\n );\n },\n (values) => {\n return selectStrategy.value.out(\n values,\n children.value,\n parents.value,\n );\n },\n );\n const openStrategy = useOpenStrategy(props);\n const opened = useModelProxy(\n props,\n \"opened\",\n props.opened,\n (values) => {\n return new Set(\n Array.isArray(values)\n ? values.map((value) => toRaw(value))\n : values,\n );\n },\n (values) => {\n return [...values.values()];\n },\n );\n\n onBeforeMount(() => {\n isUnmounted = true;\n });\n\n function getPath(id: unknown) {\n const path: unknown[] = [];\n let parent: unknown = id;\n while (parent != null) {\n path.unshift(parent);\n parent = parents.value.get(parent);\n }\n return path;\n }\n\n const nested: NestedProvide = {\n id: shallowRef(),\n root: {\n children: children,\n parents: parents,\n selected: selected,\n selectedValues: useSelectedValues(selected),\n select: (id, value, event) => {\n component.emit(\"click:select\", {\n id,\n value,\n path: getPath(id),\n event,\n });\n const newSelected = selectStrategy.value.select({\n id,\n value,\n selected: new Map(selected.value),\n children: children.value,\n parents: parents.value,\n event,\n });\n newSelected && (selected.value = newSelected);\n\n nested.root.openOnSelect(id, value, event);\n },\n register: (id, parentId, isGroup) => {\n parentId && id !== parentId && parents.value.set(id, parentId);\n if (isGroup) {\n children.value.set(id, []);\n }\n if (parentId != null) {\n children.value.set(parentId, [\n ...(children.value.get(parentId) || []),\n id,\n ]);\n }\n },\n unregister: (id) => {\n if (isUnmounted) {\n return;\n }\n children.value.delete(id);\n const parent = parents.value.get(id);\n if (parent) {\n const list = children.value.get(parent) ?? [];\n children.value.set(\n parent,\n list.filter((child) => child !== id),\n );\n }\n parents.value.delete(id);\n },\n opened: opened,\n open: (id, value, event) => {\n component.emit(\"click:open\", {\n id,\n value,\n path: getPath(id),\n event,\n });\n const newOpened = openStrategy.value.open({\n id,\n value,\n opened: new Set(opened.value),\n children: children.value,\n parents: parents.value,\n event,\n });\n newOpened && (opened.value = newOpened);\n },\n openOnSelect: (id, value, event) => {\n const newOpened = openStrategy.value.select({\n id,\n value,\n selected: new Map(selected.value),\n opened: new Set(opened.value),\n children: children.value,\n parents: parents.value,\n event,\n });\n newOpened && (opened.value = newOpened);\n },\n isNested: computed(() => parents.value.size > 0),\n },\n };\n\n provide(EvNestedSymbol, nested);\n return nested.root;\n};\n\n/**\n * # Use Nested List Item\n * @param id\n * @param isGroup\n */\nexport const useNestedListItem = (id: Ref<unknown>, isGroup: boolean) => {\n const parent = inject(EvNestedSymbol, emptyNestedList);\n const idSymbol = Symbol(getNextId());\n const idComputed = computed(() => {\n const idValue = toRaw(toValue(id));\n return idValue !== undefined ? idValue : idSymbol;\n });\n const item = {\n ...parent,\n id: idComputed,\n open: (open: boolean, e: Event) => {\n parent.root.open(idComputed.value, open, e);\n },\n openOnSelect: (open: boolean, e?: Event) => {\n parent.root.openOnSelect(idComputed.value, open, e);\n },\n isOpen: computed(() => {\n return parent.root.opened.value.has(idComputed.value);\n }),\n parent: computed(() => parent.root.parents.value.get(idComputed.value)),\n select: (selected: boolean, e?: Event) => {\n return parent.root.select(idComputed.value, selected, e);\n },\n isSelected: computed(() => {\n return (\n parent.root.selected.value.get(toRaw(idComputed.value)) === \"on\"\n );\n }),\n isIndeterminate: computed(() => {\n return (\n parent.root.selected.value.get(idComputed.value) ===\n \"indeterminate\"\n );\n }),\n isLeaf: computed(() => {\n return !parent.root.children.value.get(idComputed.value);\n }),\n };\n parent.root.register(idComputed.value, parent.id.value, isGroup);\n onBeforeUnmount(() => {\n parent.root.unregister(idComputed.value);\n });\n if (isGroup) {\n provide(EvNestedSymbol, item);\n }\n return item;\n};\n\n","import { propsFactory } from \"@/util\";\nimport {\n ListItem as DefaultListItem,\n ListItemsProps as DefaultListItemProps,\n makeListItemsProps,\n makeNestedProps,\n} from \"@/composables/lists\";\nimport { PropType } from \"vue\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeDimensionsProps } from \"@/composables/dimensions\";\n\n/**\n * # List Item Types\n */\nexport type ListItemType = \"item\" | \"subheader\" | \"divider\";\n\n/**\n * # List Item\n */\nexport interface ListItem extends DefaultListItem {\n type?: ListItemType;\n}\n\n/**\n * # List Item Props\n */\nexport interface ListItemProps extends DefaultListItemProps {\n itemType: string;\n}\n\n/**\n * # Make EvList Props\n */\nexport const makeEvListProps = propsFactory(\n {\n disabled: Boolean,\n tag: {\n type: String,\n default: \"ul\",\n },\n itemType: {\n type: String,\n default: \"type\",\n },\n\n ...makeListItemsProps(),\n ...makeNestedProps({\n selectStrategy: \"multi-any\",\n }),\n ...makeComponentProps(),\n ...makeDimensionsProps(),\n },\n \"EvList\",\n);\n\n/**\n * # Make EvListChildren Props\n */\nexport const makeEvListChildrenProps = propsFactory(\n {\n items: Array as PropType<readonly ListItem[]>,\n returnObject: Boolean,\n },\n \"EvListChildren\",\n);\n","import { EventProp, propsFactory } from \"@/util\";\nimport {\n makeRouterLinkOrHrefProps,\n RouterLinkOrHrefProps,\n} from \"@/composables/router\";\nimport { IconProp, IconValue } from \"@/composables/icons\";\nimport { ComponentProps, makeComponentProps } from \"@/composables/component\";\nimport { EvTextProps } from \"@/components/EvText\";\nimport { EvButtonProps } from \"@/components/EvButton\";\nimport { PropType } from \"vue\";\nimport { ListItem } from \"@/composables/lists\";\n\nexport interface EvListItemProps extends ComponentProps, RouterLinkOrHrefProps {\n active?: boolean;\n actions?: EvButtonProps[];\n actionsOnHover?: EvButtonProps[];\n children?: ListItem[];\n disabled?: boolean;\n iconEnd?: IconValue;\n iconStart?: IconValue;\n link?: boolean;\n tag?: string;\n title?: string | number | boolean;\n subtitle?: string | number | boolean;\n value?: any;\n}\n\nexport const makeEvListItemProps = propsFactory(\n {\n active: {\n type: Boolean,\n default: undefined,\n },\n actions: {\n type: Array as PropType<readonly EvButtonProps[]>,\n default: () => [],\n },\n actionsOnHover: {\n type: Array as PropType<readonly EvButtonProps[]>,\n default: () => [],\n },\n children: Array as PropType<readonly ListItem[]>,\n disabled: Boolean,\n iconEnd: IconProp,\n iconStart: IconProp,\n link: {\n type: Boolean,\n default: undefined,\n },\n loading: Boolean,\n returnObject: Boolean,\n subtitle: [String, Number, Boolean],\n subtitleProps: {\n type: Object as PropType<EvTextProps>,\n default: () => ({}),\n },\n tag: {\n type: String,\n default: \"div\",\n },\n title: [String, Number, Boolean],\n titleProps: {\n type: Object as PropType<EvTextProps>,\n default: () => ({}),\n },\n value: null,\n onClick: EventProp<[MouseEvent]>(),\n\n ...makeRouterLinkOrHrefProps({\n exact: undefined,\n }),\n ...makeComponentProps(),\n },\n \"EvListItem\",\n);\n","// Utilities\nimport { camelize } from \"vue\";\n\ninterface HTMLExpandElement extends HTMLElement {\n _parent?: (Node & ParentNode & HTMLElement) | null;\n _initialStyle?: {\n transition: string;\n overflow: string;\n height?: string | null;\n width?: string | null;\n };\n}\n\n/**\n * @param expandedParentClass\n * @param x\n */\nexport default function (expandedParentClass = \"\", x = false) {\n const sizeProperty = x ? \"width\" : \"height\";\n const offsetProperty = camelize(`offset-${sizeProperty}`);\n\n /**\n * ## onAfterLeave\n * @param el\n */\n function onAfterLeave(el: HTMLExpandElement) {\n if (expandedParentClass && el._parent) {\n el._parent.classList.remove(expandedParentClass);\n }\n resetStyles(el);\n }\n\n /**\n * ## resetStyles\n * @param el\n */\n function resetStyles(el: HTMLExpandElement) {\n const size = el._initialStyle![sizeProperty];\n el.style.overflow = el._initialStyle!.overflow;\n if (size != null) el.style[sizeProperty] = size;\n delete el._initialStyle;\n }\n\n return {\n /**\n * ## onBeforeEnter\n * @param el\n */\n onBeforeEnter(el: HTMLExpandElement) {\n el._parent = el.parentNode as\n | (Node & ParentNode & HTMLElement)\n | null;\n el._initialStyle = {\n transition: el.style.transition,\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n };\n },\n\n /**\n * ## onEnter\n * @param el\n */\n onEnter(el: HTMLExpandElement) {\n const initialStyle = el._initialStyle!;\n\n el.style.setProperty(\"transition\", \"none\", \"important\");\n // Hide overflow to account for collapsed margins in the calculated height\n el.style.overflow = \"hidden\";\n const offset = `${el[offsetProperty]}px`;\n\n el.style[sizeProperty] = \"0\";\n\n void el.offsetHeight; // force reflow\n el.style.transition = initialStyle.transition;\n\n if (expandedParentClass && el._parent) {\n el._parent.classList.add(expandedParentClass);\n }\n requestAnimationFrame(() => {\n el.style[sizeProperty] = offset;\n });\n },\n\n /**\n * ## onAfterEnter\n */\n onAfterEnter: resetStyles,\n\n /**\n * ## onEnterCancelled\n */\n onEnterCancelled: resetStyles,\n\n /**\n * ## onLeave\n * @param el\n */\n onLeave(el: HTMLExpandElement) {\n el._initialStyle = {\n transition: \"\",\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n };\n\n el.style.overflow = \"hidden\";\n el.style[sizeProperty] = `${el[offsetProperty]}px`;\n void el.offsetHeight; // force reflow\n\n requestAnimationFrame(() => (el.style[sizeProperty] = \"0\"));\n },\n\n /**\n * ## onAfterLeave\n */\n onAfterLeave,\n\n /**\n * ## onAfterLeave\n */\n onLeaveCancelled: onAfterLeave,\n };\n}\n","<script setup lang=\"ts\">\r\nimport \"./EvListItem.scss\";\r\nimport { makeEvListItemProps } from \"./EvListItem\";\r\nimport { computed, mergeProps, toDisplayString, useAttrs } from \"vue\";\r\nimport {\r\n RouterLinkOrHrefProps,\r\n useRouterLinkOrHref,\r\n} from \"@/composables/router\";\r\nimport { useList, useNestedListItem } from \"@/composables/lists\";\r\nimport { EvIcon } from \"@/components/EvIcon\";\r\nimport { EvButton } from \"@/components/EvButton\";\r\nimport { EvButtonGroup } from \"@/components/EvButtonGroup\";\r\nimport { EvText } from \"@/components/EvText\";\r\nimport { getNextId } from \"@/util\";\r\nimport { ChevronRightIcon, DotIcon } from \"@/icons\";\r\nimport { useModelProxy } from \"@/composables\";\r\nimport EvListChildren from \"@/components/EvList/EvListChildren.vue\";\r\nimport { EvTransition } from \"@/components/EvTransition\";\r\nimport ExpandTransitionGenerator from \"@/components/EvTransition/transitions/expandTransition\";\r\n\r\nconst props = defineProps({\r\n ...makeEvListItemProps(),\r\n});\r\nconst slots = defineSlots<{\r\n default(): never;\r\n iconStart(): never;\r\n iconEnd(): never;\r\n prefix(): never;\r\n suffix(): never;\r\n children(): never;\r\n}>();\r\n\r\nconst emit = defineEmits<{\r\n (e: \"click\", event: MouseEvent): void;\r\n (\r\n e: \"click:open\",\r\n payload: {\r\n id: unknown;\r\n value: boolean;\r\n path: unknown[];\r\n event: Event;\r\n },\r\n ): void;\r\n (\r\n e: \"click:select\",\r\n payload: {\r\n id: unknown;\r\n value: boolean;\r\n path: unknown[];\r\n event: Event;\r\n },\r\n ): void;\r\n (e: \"update:opened\", items: unknown[]): void;\r\n}>();\r\n\r\nconst attrs = useAttrs();\r\nconst link = useRouterLinkOrHref(props as RouterLinkOrHrefProps, attrs);\r\nconst list = useList();\r\nconst id = computed(() =>\r\n props.value === undefined ? link.href.value : props.value,\r\n);\r\nconst isLoading = useModelProxy(props, \"loading\");\r\nconst hasChildren = computed(() => {\r\n return !!slots.children || !!props.children;\r\n});\r\nconst { select, isSelected, isOpen, open, root } = useNestedListItem(id, hasChildren.value);\r\nconst isLink = computed(() => props.link !== false && link.isLink.value);\r\nconst isClickable = computed(() => {\r\n return (\r\n !props.disabled &&\r\n props.link !== false &&\r\n (props.link ||\r\n link.isClickable.value ||\r\n (props.value != null && !!list))\r\n );\r\n});\r\nconst isActive = computed(() => {\r\n return props.active !== false && (props.active || link.isActive?.value);\r\n});\r\nconst isActiveExact = computed(() => {\r\n return (\r\n props.exact !== false &&\r\n (props.exact || link.isExactActive?.value || isSelected.value)\r\n );\r\n});\r\nconst itemElement = computed(() => {\r\n return isLink.value ? \"a\" : props.tag;\r\n});\r\nconst tabIndex = computed(() => {\r\n return isClickable.value ? (list ? -2 : 0) : null;\r\n});\r\n\r\n/**\r\n * # onClick Handler\r\n * @param e\r\n */\r\nfunction onClick(e: MouseEvent): void {\r\n emit(\"click\", e);\r\n if (!isClickable.value) {\r\n return;\r\n }\r\n link.navigate?.(e);\r\n if (props.value != null) {\r\n select(!isSelected.value, e);\r\n }\r\n}\r\n\r\n/**\r\n * # onKeyDown Handler\r\n * @param e\r\n */\r\nfunction onKeyDown(e: KeyboardEvent): void {\r\n e.preventDefault();\r\n onClick(e as any as MouseEvent);\r\n}\r\n\r\nconst hasClickListener = computed(\r\n () => !!link.isClickable.value || !!props.onClick,\r\n);\r\n\r\nconst titleProps = computed(() => {\r\n return mergeProps(\r\n {\r\n truncate: true,\r\n text: toDisplayString(props.title),\r\n },\r\n props.titleProps,\r\n );\r\n});\r\n\r\nconst subtitleProps = computed(() => {\r\n return mergeProps(\r\n {\r\n appearance: \"subtle\",\r\n size: \"small\",\r\n truncate: true,\r\n text: toDisplayString(props.subtitle),\r\n },\r\n props.subtitleProps,\r\n );\r\n});\r\n\r\nconst parsedActions = computed(() =>\r\n props.actions.map((action) => ({\r\n props: action,\r\n id: getNextId(),\r\n })),\r\n);\r\nconst hasActions = computed(() => !!parsedActions.value.length);\r\nconst parsedActionsOnHover = computed(() =>\r\n props.actionsOnHover.map((action) => ({\r\n props: action,\r\n id: getNextId(),\r\n })),\r\n);\r\nconst hasActionsOnHover = computed(() => !!parsedActionsOnHover.value.length);\r\n\r\nconst transition = ExpandTransitionGenerator(\"\", false);\r\nconst showCaret = computed(() => {\r\n return isLoading.value || hasChildren.value || root.isNested.value;\r\n});\r\n\r\nfunction onClickOpener(e: Event) {\r\n open(!isOpen.value, e);\r\n}\r\n\r\n</script>\r\n\r\n<template>\r\n <li\r\n :class=\"[\r\n 'ev-list-item',\r\n {\r\n 'is-disabled': props.disabled,\r\n 'is-open': isOpen,\r\n },\r\n props.class,\r\n ]\">\r\n <div\r\n role=\"listitem\"\r\n :class=\"[\r\n 'ev-list-item-content',\r\n {\r\n 'is-active': isActive,\r\n 'is-active--exact': isActiveExact,\r\n 'is-clickable': isClickable || hasClickListener,\r\n 'is-actions-on-hover': hasActionsOnHover,\r\n },\r\n ]\"\r\n :style=\"props.style\">\r\n <component\r\n :is=\"itemElement\"\r\n :href=\"link.href.value\"\r\n :tabindex=\"tabIndex\"\r\n class=\"ev-list-item--button\"\r\n @click=\"onClick\"\r\n @keydown.enter=\"onKeyDown\"\r\n @keydown.space=\"onKeyDown\">\r\n <div class=\"ev-list-item--label\">\r\n <slot name=\"default\">\r\n <ev-text\r\n tag=\"div\"\r\n class=\"ev-list-item--title\"\r\n v-bind=\"titleProps\" />\r\n <ev-text\r\n v-if=\"props.subtitle\"\r\n tag=\"div\"\r\n class=\"ev-list-item--subtitle\"\r\n v-bind=\"subtitleProps\" />\r\n </slot>\r\n </div>\r\n <div aria-hidden=\"true\" class=\"ev-list-item--indicator\"></div>\r\n </component>\r\n <div v-if=\"showCaret\" class=\"ev-list-item--caret\">\r\n <ev-button\r\n v-if=\"hasChildren\"\r\n icon\r\n size=\"x-small\"\r\n variant=\"subtle\"\r\n :loading=\"isLoading\"\r\n :icon-start=\"ChevronRightIcon\"\r\n @click=\"onClickOpener\" />\r\n <ev-icon v-else :glyph=\"DotIcon\" />\r\n </div>\r\n <div\r\n v-if=\"slots.iconStart || props.iconStart\"\r\n class=\"ev-list-item--icon-start\">\r\n <slot name=\"iconStart\">\r\n <ev-icon :glyph=\"props.iconStart\" />\r\n </slot>\r\n </div>\r\n <div v-if=\"slots.prefix\" class=\"ev-list-item--prefix\">\r\n <slot name=\"prefix\" />\r\n </div>\r\n <div v-if=\"slots.suffix\" class=\"ev-list-item--suffix\">\r\n <slot name=\"suffix\" />\r\n </div>\r\n <div\r\n v-if=\"hasActions || hasActionsOnHover\"\r\n class=\"ev-list-item--actions\">\r\n <ev-button-group size=\"x-small\" variant=\"subtle\">\r\n <ev-button\r\n v-for=\"action in parsedActionsOnHover\"\r\n :key=\"action.id\"\r\n v-bind=\"action.props\"\r\n class=\"is-show-on-hover\" />\r\n <ev-button\r\n v-for=\"action in parsedActions\"\r\n :key=\"action.id\"\r\n v-bind=\"action.props\" />\r\n </ev-button-group>\r\n </div>\r\n <div\r\n v-if=\"slots.iconEnd || props.iconEnd\"\r\n class=\"ev-list-item--icon-end\">\r\n <slot name=\"iconEnd\">\r\n <ev-icon :glyph=\"props.iconEnd\" />\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <template v-if=\"hasChildren\">\r\n <ev-transition name=\"ev-list-group-transition\" v-bind=\"transition\">\r\n <ul v-show=\"isOpen\" class=\"ev-list-item-children\" role=\"group\">\r\n <slot name=\"children\">\r\n <ev-list-children\r\n :items=\"props.children\"\r\n :return-object=\"props.returnObject\" />\r\n </slot>\r\n </ul>\r\n </ev-transition>\r\n </template>\r\n </li>\r\n</template>\r\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeTagProps } from \"@/composables/tag\";\n\nexport const makeEvSectionProps = propsFactory(\n {\n title: String,\n\n ...makeComponentProps(),\n ...makeTagProps(),\n },\n \"EvSection\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvSection.scss\";\nimport { makeEvSectionProps } from \"./EvSection\";\nimport { EvEyebrow } from \"@/components/EvEyebrow\";\n\nconst props = defineProps({ ...makeEvSectionProps() });\nconst slots = defineSlots<{\n default(): never;\n heading(): never;\n}>();\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n role=\"group\"\n :aria-label=\"props.title\"\n :class=\"[\n 'ev-section',\n props.class\n ]\"\n :style=\"props.style\">\n <ev-eyebrow\n v-if=\"props.title || slots.heading\"\n tag=\"div\"\n appearance=\"subtle\"\n role=\"heading\"\n class=\"ev-section--heading\"\n aria-hidden=\"true\">\n <slot name=\"heading\">{{ props.title }}</slot>\n </ev-eyebrow>\n <slot name=\"default\" />\n </component>\n</template>\n","<script setup lang=\"ts\">\n/**\n * # EvListChildren\n *\n * A management component for rendering child items recursively.\n */\nimport EvListItem from \"../EvListItem/EvListItem.vue\";\nimport { ListItem, makeEvListChildrenProps } from \"./EvList\";\nimport { createList } from \"@/composables/lists\";\nimport { EvDivider } from \"@/components/EvDivider\";\nimport { EvSection } from \"@/components/EvSection\";\nimport { toRaw } from \"vue\";\n\nconst props = defineProps({\n ...makeEvListChildrenProps(),\n});\n\nconst slots = defineSlots<{\n default(): never;\n divider(props: { props: any }): never;\n subheader(props: { props: any }): never;\n item(props: { item: ListItem; props: any }): never;\n}>();\n\ncreateList();\n</script>\n\n<template>\n <slot name=\"default\">\n <template v-for=\"item in props.items\" :key=\"item.key\">\n <slot\n v-if=\"item.type === 'divider'\"\n name=\"divider\"\n v-bind=\"{ props: item.props }\">\n <ev-divider v-bind=\"item.props\" />\n </slot>\n <slot\n v-else-if=\"item.type === 'subheader'\"\n name=\"subheader\"\n v-bind=\"{ props: item.props }\">\n <ev-section v-bind=\"item.props\">\n <ev-list-children\n :items=\"item.children\"\n :return-object=\"props.returnObject\">\n <template v-if=\"slots.item\" #item=\"{ item, props }\">\n <slot name=\"item\" v-bind=\"{ item, props }\" />\n </template>\n </ev-list-children>\n </ev-section>\n </slot>\n <template v-else>\n <slot name=\"item\" v-bind=\"{ item, props: item.props }\">\n <ev-list-item\n v-bind=\"item.props\"\n :value=\"\n props.returnObject\n ? toRaw(item.raw)\n : item.props.value\n \"\n :return-object=\"props.returnObject\"\n :children=\"item.children\" />\n </slot>\n </template>\n </template>\n </slot>\n</template>\n","<script setup lang=\"ts\">\n/**\n * # EvList\n *\n * `<ev-list>`\n *\n * Uses:\n * - EvListItem - `<ev-list-item>`\n *\n * @todo: Nested items\n *\n * @see EvListItem\n */\nimport \"./EvList.scss\";\nimport { makeEvListProps } from \"./EvList\";\nimport { computed, ref, shallowRef } from \"vue\";\nimport { focusChild, FocusPosition } from \"@/util\";\nimport {\n createList,\n NestedProps,\n useItems,\n useNestedList,\n} from \"@/composables/lists\";\nimport { useDimensions } from \"@/composables/dimensions\";\nimport EvListChildren from \"./EvListChildren.vue\";\n\ndefineEmits([\"update:selected\", \"click:select\"]);\n\nconst props = defineProps({\n ...makeEvListProps(),\n});\nconst { items } = useItems(props);\nconst { select } = useNestedList(props as NestedProps);\nconst containerRef = ref<HTMLElement | undefined>(undefined);\nconst isFocused = shallowRef(false);\nconst lastFocus = shallowRef<HTMLElement | undefined>(undefined);\nconst tabindex = computed(() => {\n return props.disabled || isFocused.value ? -1 : 0;\n});\nconst dimensions = useDimensions(props);\n\n/**\n * Establish provide() and inject() functionality for list items.\n */\ncreateList();\n\n/**\n * # On Focus\n * Set or restore focus\n * @param e\n */\nfunction onFocus(e: FocusEvent): void {\n if (\n !isFocused.value &&\n !(\n e.relatedTarget &&\n containerRef.value?.contains(e.relatedTarget as Node)\n ) &&\n containerRef.value\n ) {\n if (lastFocus.value) {\n lastFocus.value.focus();\n } else {\n focus();\n }\n }\n}\n\n/**\n * # On Focus In\n * @param e\n */\nfunction onFocusIn(e: FocusEvent): void {\n isFocused.value = true;\n}\n\n/**\n * # On Focus Out\n * @param e\n */\nfunction onFocusOut(e: FocusEvent): void {\n isFocused.value = false;\n}\n\n/**\n * # On Key Down\n * @see https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values\n * @param e\n */\nfunction onKeyDown(e: KeyboardEvent): void {\n const keys: { [key: string]: string } = {\n ArrowDown: \"next\",\n ArrowUp: \"previous\",\n Home: \"first\",\n End: \"last\",\n };\n const position = keys[e.key];\n if (position && containerRef.value) {\n focus(position as FocusPosition);\n e.preventDefault();\n }\n}\n\n/**\n * # Set Focus\n * @param position\n */\nfunction focus(position?: FocusPosition): void {\n lastFocus.value = focusChild(containerRef?.value, position);\n}\n\ndefineExpose({\n focus,\n select,\n});\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n ref=\"containerRef\"\n role=\"listbox\"\n :class=\"[\n 'ev-list',\n {\n 'is-disabled': props.disabled,\n },\n props.class,\n ]\"\n :style=\"[props.style, dimensions]\"\n :tabindex=\"tabindex\"\n @keydown=\"onKeyDown\"\n @focus=\"onFocus\"\n @focusin=\"onFocusIn\"\n @focusout=\"onFocusOut\">\n <ev-list-children :items=\"items\" :return-object=\"props.returnObject\">\n <slot name=\"default\" />\n </ev-list-children>\n </component>\n</template>\n","import { propsFactory } from \"../util\";\n\nexport interface DelayOpenCloseProps {\n closeDelay?: number | string;\n openDelay?: number | string;\n}\n\nexport const makeDelayOpenCloseProps = propsFactory(\n {\n closeDelay: [Number, String],\n openDelay: [Number, String],\n },\n \"delay\",\n);\n\nexport type DelayOpenCloseCallback = (value: boolean) => void;\n\n/**\n * # Use Delay Open Close\n *\n * @param props\n * @param callback\n */\nexport function useDelayOpenClose(\n props: DelayOpenCloseProps,\n callback?: DelayOpenCloseCallback,\n) {\n const delays: Partial<Record<keyof DelayOpenCloseProps, number>> = {};\n\n const createDelay = (prop: keyof DelayOpenCloseProps) => {\n return (): Promise<boolean> => {\n const isOpening = prop === \"openDelay\";\n\n if (delays.closeDelay) {\n window.clearTimeout(delays.closeDelay);\n }\n if (delays.openDelay) {\n window.clearTimeout(delays.openDelay);\n }\n\n return new Promise((resolve) => {\n const duration = parseInt((props[prop] ?? 0).toString(), 10);\n delays[prop] = window.setTimeout(() => {\n callback?.(isOpening);\n resolve(isOpening);\n }, duration);\n });\n };\n };\n\n return {\n delayClose: createDelay(\"closeDelay\"),\n delayOpen: createDelay(\"openDelay\"),\n };\n}\n","import { InjectionKey } from \"vue\";\n\ninterface MenuProvide {\n register(): void;\n unregister(): void;\n closeParents(): void;\n}\n\nexport const EvMenuSymbol: InjectionKey<MenuProvide> = Symbol.for(\"ev:menu\");\n","import {\r\n DelayOpenCloseProps,\r\n makeDelayOpenCloseProps,\r\n useDelayOpenClose,\r\n} from \"@/composables/delay.ts\";\r\nimport {\r\n ComponentInternalInstance,\r\n ComponentPublicInstance,\r\n computed,\r\n ComputedRef,\r\n effectScope,\r\n EffectScope,\r\n inject,\r\n mergeProps,\r\n nextTick,\r\n onScopeDispose,\r\n PropType,\r\n ref,\r\n Ref,\r\n watch,\r\n watchEffect,\r\n} from \"vue\";\r\nimport {\r\n bindProps,\r\n Browser,\r\n getCurrentComponent,\r\n propsFactory,\r\n refElement,\r\n unbindProps,\r\n} from \"@/util\";\r\nimport { EvMenuSymbol } from \"../EvMenu/shared\";\r\n\r\ntype ActivatorSelector = \"parent\" | string | Element | ComponentPublicInstance;\r\n\r\nexport interface ActivatorProps extends DelayOpenCloseProps {\r\n activator?: ActivatorSelector;\r\n activatorProps?: Record<string, any>;\r\n openOnClick?: boolean;\r\n openOnHover?: boolean;\r\n openOnFocus?: boolean;\r\n closeOnContentClick?: boolean;\r\n}\r\n\r\nexport const makeActivatorProps = propsFactory(\r\n {\r\n activator: [String, Object] as PropType<ActivatorProps[\"activator\"]>,\r\n activatorProps: {\r\n type: Object as PropType<ActivatorProps[\"activatorProps\"]>,\r\n default: () => ({}),\r\n },\r\n openOnClick: {\r\n type: Boolean,\r\n default: undefined,\r\n },\r\n openOnHover: Boolean,\r\n openOnFocus: {\r\n type: Boolean,\r\n default: undefined,\r\n },\r\n closeOnContentClick: Boolean,\r\n\r\n ...makeDelayOpenCloseProps(),\r\n },\r\n \"EvOverlay/activator\",\r\n);\r\n\r\ninterface ActivatorEvents {\r\n onBlur?: (e: FocusEvent) => void;\r\n onClick?: (e: MouseEvent) => void;\r\n onFocus?: (e: FocusEvent) => void;\r\n onMouseenter?: (e: MouseEvent) => void;\r\n onMouseleave?: (e: MouseEvent) => void;\r\n}\r\n\r\ninterface ContentEvents {\r\n onMouseenter?: () => void;\r\n onMouseleave?: () => void;\r\n onFocusin?: () => void;\r\n onFocusout?: () => void;\r\n onClick?: () => void;\r\n}\r\n\r\ninterface VeilEvents {\r\n onMouseenter?: () => void;\r\n onMouseleave?: () => void;\r\n}\r\n\r\n/**\r\n * # UI Mouse Event\r\n * `sourceCapabilities` is in labs according to MDN. So it is subject to change.\r\n * It is also not included in TypeScript's MouseEvent, so this is a little bit\r\n * of a hack to avoid issues with the build.\r\n */\r\ninterface UIMouseEvent extends MouseEvent {\r\n sourceCapabilities?: { firesTouchEvents: boolean };\r\n}\r\n\r\n/**\r\n * # Use Activator\r\n *\r\n * @param props\r\n * @param isActive\r\n * @param isTopOfStack\r\n */\r\nexport function useActivator(\r\n props: ActivatorProps,\r\n isActive: Ref<boolean>,\r\n isTopOfStack: Ref<boolean>,\r\n) {\r\n return new Activator(props, isActive, isTopOfStack);\r\n}\r\n\r\nclass Activator {\r\n public readonly activatorEl = ref<HTMLElement>();\r\n public readonly activatorEvents: ComputedRef<Partial<ActivatorEvents>>;\r\n public readonly activatorRef = ref();\r\n public readonly availableEvents: ActivatorEvents;\r\n public readonly component: ComponentInternalInstance;\r\n public readonly contentEvents: ComputedRef<Partial<ContentEvents>>;\r\n public readonly delayClose: () => Promise<boolean>;\r\n public readonly delayOpen: () => Promise<boolean>;\r\n public readonly openOnClick: ComputedRef<boolean>;\r\n public readonly openOnFocus: ComputedRef<boolean>;\r\n public readonly veilEvents: ComputedRef<Partial<VeilEvents>>;\r\n\r\n public isHovered = false;\r\n public isFocused = false;\r\n public firstEnter = true;\r\n\r\n private watcher?: ActivatorWatcher;\r\n private scope?: EffectScope;\r\n\r\n constructor(\r\n public props: ActivatorProps,\r\n public isActive: Ref<boolean>,\r\n public isTopOfStack: Ref<boolean>,\r\n ) {\r\n this.component = getCurrentComponent(\"Activator\");\r\n this.openOnFocus = computed(\r\n () =>\r\n props.openOnFocus ||\r\n (props.openOnFocus == null && props.openOnHover),\r\n );\r\n this.openOnClick = computed(\r\n () =>\r\n props.openOnClick ||\r\n (props.openOnClick == null &&\r\n !props.openOnHover &&\r\n !this.openOnFocus.value),\r\n );\r\n const { delayOpen, delayClose } = this.createDelayFunctions();\r\n this.delayOpen = delayOpen;\r\n this.delayClose = delayClose;\r\n this.availableEvents = this.getAvailableEvents();\r\n this.activatorEvents = this.createActivatorEvents();\r\n this.contentEvents = this.createContentEvents();\r\n this.veilEvents = this.createVeilEvents();\r\n this.watchIsTopOfStack();\r\n this.watchActivatorEl();\r\n this.watchActivatorProp();\r\n }\r\n\r\n /**\r\n * ## Create Activator Events\r\n * Returns a computed set of partially available events.\r\n * @private\r\n */\r\n private createActivatorEvents() {\r\n return computed(() => {\r\n const events: Partial<ActivatorEvents> = {};\r\n if (this.isOpenOnClick()) {\r\n events.onClick = this.availableEvents.onClick;\r\n }\r\n if (this.isOpenOnHover()) {\r\n events.onMouseenter = this.availableEvents.onMouseenter;\r\n events.onMouseleave = this.availableEvents.onMouseleave;\r\n }\r\n if (this.isOpenOnFocus()) {\r\n events.onFocus = this.availableEvents.onFocus;\r\n events.onBlur = this.availableEvents.onBlur;\r\n }\r\n return events;\r\n });\r\n }\r\n\r\n /**\r\n * ## Create Content Events\r\n * @private\r\n */\r\n private createContentEvents() {\r\n return computed(() => {\r\n const events: Partial<ContentEvents> = {};\r\n if (this.isOpenOnHover()) {\r\n events.onMouseenter = () => {\r\n this.isHovered = true;\r\n this.delayOpen();\r\n };\r\n events.onMouseleave = () => {\r\n this.isHovered = false;\r\n this.delayClose();\r\n };\r\n }\r\n if (this.isOpenOnFocus()) {\r\n events.onFocusin = () => {\r\n this.isFocused = true;\r\n this.delayOpen();\r\n };\r\n events.onFocusout = () => {\r\n this.isFocused = false;\r\n this.delayClose();\r\n };\r\n }\r\n if (this.isCloseOnContentClick()) {\r\n const menu = inject(EvMenuSymbol, null);\r\n events.onClick = () => {\r\n this.isActive.value = false;\r\n menu?.closeParents();\r\n };\r\n }\r\n return events;\r\n });\r\n }\r\n\r\n /**\r\n * ## Create Delay Functions\r\n * @private\r\n */\r\n private createDelayFunctions() {\r\n return useDelayOpenClose(this.props, (value) => {\r\n const canOpenHover = this.props.openOnHover && this.isHovered;\r\n const canOpenFocus = this.openOnFocus.value && this.isFocused;\r\n if (\r\n value === (canOpenHover || canOpenFocus) &&\r\n !(\r\n this.props.openOnHover &&\r\n this.isActive.value &&\r\n !this.isTopOfStack.value\r\n )\r\n ) {\r\n if (this.isActive.value !== value) {\r\n this.firstEnter = true;\r\n }\r\n this.isActive.value = value;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * ## Create Veil Events\r\n * @private\r\n */\r\n private createVeilEvents() {\r\n return computed(() => {\r\n const events: Partial<VeilEvents> = {};\r\n if (this.isOpenOnHover()) {\r\n events.onMouseenter = () => {\r\n if (this.firstEnter) {\r\n this.isHovered = true;\r\n this.firstEnter = false;\r\n this.delayOpen();\r\n }\r\n };\r\n events.onMouseleave = () => {\r\n this.isHovered = false;\r\n this.delayClose();\r\n };\r\n }\r\n return events;\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * @param selector\r\n * @private\r\n */\r\n public getActivatorEl(\r\n selector: ActivatorSelector | undefined = this.props.activator,\r\n ) {\r\n let activator;\r\n if (selector) {\r\n if (selector === \"parent\") {\r\n let el = this.component?.proxy?.$el?.parentNode;\r\n while (el.hasAttribute(\"data-no-activator\")) {\r\n el = el.parentNode;\r\n }\r\n activator = el;\r\n } else if (typeof selector === \"string\") {\r\n // Selector\r\n activator = document.querySelector(selector);\r\n } else if (\"$el\" in selector) {\r\n // Component (ref)\r\n activator = selector.$el;\r\n } else {\r\n // HTMLElement | Element\r\n activator = selector;\r\n }\r\n }\r\n return this.setActivatorEl(activator);\r\n }\r\n\r\n /**\r\n * ## Get Available Events\r\n */\r\n public getAvailableEvents(): ActivatorEvents {\r\n return {\r\n onBlur: this.onBlur.bind(this),\r\n onClick: this.onClick.bind(this),\r\n onFocus: this.onFocus.bind(this),\r\n onMouseenter: this.onMouseenter.bind(this),\r\n onMouseleave: this.onMouseleave.bind(this),\r\n };\r\n }\r\n\r\n /**\r\n * ## Is Close on Content Click?\r\n * Should we close overlays when the content of the overlay is clicked.\r\n * For example, when a menu item is clicked.\r\n */\r\n public isCloseOnContentClick(): boolean {\r\n return this.props.closeOnContentClick;\r\n }\r\n\r\n /**\r\n * ## Is Open On Click?\r\n */\r\n public isOpenOnClick(): boolean {\r\n return this.openOnClick.value;\r\n }\r\n\r\n /**\r\n * ## Is Open on Hover?\r\n */\r\n public isOpenOnHover(): boolean {\r\n return this.props.openOnHover;\r\n }\r\n\r\n /**\r\n * ## Is Open on Focus?\r\n */\r\n public isOpenOnFocus(): boolean {\r\n return this.openOnFocus.value;\r\n }\r\n\r\n /**\r\n * ## On Blur\r\n * @param e\r\n */\r\n public onBlur(e: FocusEvent) {\r\n e.stopPropagation();\r\n this.isFocused = false;\r\n this.delayClose();\r\n }\r\n\r\n /**\r\n * ## On Click\r\n * @param e\r\n */\r\n public onClick(e: MouseEvent) {\r\n e.stopPropagation();\r\n this.activatorEl.value = (e.currentTarget || e.target) as HTMLElement;\r\n this.isActive.value = !this.isActive.value;\r\n }\r\n\r\n /**\r\n * ## On Focus\r\n * @param e\r\n */\r\n public onFocus(e: FocusEvent) {\r\n if (\r\n Browser.supportsFocusVisible &&\r\n !(e.target as HTMLElement).matches(\":focus-visible\")\r\n ) {\r\n return;\r\n }\r\n e.stopPropagation();\r\n this.isFocused = true;\r\n this.activatorEl.value = (e.currentTarget || e.target) as HTMLElement;\r\n this.delayOpen();\r\n }\r\n\r\n /**\r\n * ## On Mouse Enter (Hover)\r\n * @param e\r\n */\r\n public onMouseenter(e: UIMouseEvent) {\r\n if (e.sourceCapabilities?.firesTouchEvents) {\r\n return;\r\n }\r\n this.isHovered = true;\r\n this.activatorEl.value = (e.currentTarget || e.target) as HTMLElement;\r\n this.delayOpen();\r\n }\r\n\r\n /**\r\n * ## On Mouse Leave\r\n * @param e\r\n */\r\n public onMouseleave(e: MouseEvent) {\r\n this.isHovered = false;\r\n this.delayClose();\r\n }\r\n\r\n /**\r\n * ## Set Activator Element\r\n * @param activator\r\n */\r\n public setActivatorEl(activator?: HTMLElement) {\r\n // The activator should only be a valid element (Ignore comments and text nodes)\r\n this.activatorEl.value =\r\n activator?.nodeType === Node.ELEMENT_NODE ? activator : undefined;\r\n return this.activatorEl.value;\r\n }\r\n\r\n /**\r\n * ## Watch Activator Prop\r\n * @private\r\n */\r\n private watchActivatorProp() {\r\n watch(\r\n () => !!this.props.activator,\r\n (value) => {\r\n if (value && Browser.hasWindow) {\r\n this.scope = effectScope();\r\n this.scope.run(() => {\r\n this.watcher = new ActivatorWatcher(this);\r\n });\r\n } else if (this.scope) {\r\n this.scope.stop();\r\n }\r\n },\r\n { flush: \"post\", immediate: true },\r\n );\r\n\r\n onScopeDispose(() => {\r\n this.scope?.stop();\r\n if (this.watcher) {\r\n this.watcher = undefined;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * ## Watch for changes in `activatorEl`\r\n * @private\r\n */\r\n private watchActivatorEl() {\r\n watchEffect(() => {\r\n if (!this.activatorRef.value) {\r\n return;\r\n }\r\n nextTick(() => {\r\n this.activatorEl.value = refElement(this.activatorRef.value);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * ## Watch for changes in `isTopOfStack`.\r\n * @private\r\n */\r\n private watchIsTopOfStack() {\r\n watch(this.isTopOfStack, (value) => {\r\n if (\r\n value &&\r\n ((this.isOpenOnHover() &&\r\n !this.isHovered &&\r\n (!this.isOpenOnFocus() || !this.isFocused)) ||\r\n (this.isOpenOnFocus() &&\r\n !this.isFocused &&\r\n (!this.isOpenOnHover() || !this.isHovered)))\r\n ) {\r\n this.isActive.value = false;\r\n }\r\n });\r\n }\r\n}\r\n\r\nclass ActivatorWatcher {\r\n constructor(public readonly activator: Activator) {\r\n this.watchActivator();\r\n }\r\n\r\n private addActivatorPropsEventListeners(\r\n el = this.activator.getActivatorEl(),\r\n activatorProps = this.activator.props.activatorProps,\r\n ) {\r\n if (!el) {\r\n return;\r\n }\r\n bindProps(\r\n el,\r\n mergeProps(this.activator.activatorEvents.value, activatorProps),\r\n );\r\n }\r\n\r\n private removeActivatorPropsEventListeners(\r\n el = this.activator.getActivatorEl(),\r\n activatorProps = this.activator.props.activatorProps,\r\n ) {\r\n if (!el) {\r\n return;\r\n }\r\n unbindProps(\r\n el,\r\n mergeProps(this.activator.activatorEvents.value, activatorProps),\r\n );\r\n }\r\n\r\n private watchActivator() {\r\n watch(\r\n () => this.activator.props.activator,\r\n (value, oldValue) => {\r\n if (oldValue && value !== oldValue) {\r\n const activator = this.activator.getActivatorEl(oldValue);\r\n activator &&\r\n this.removeActivatorPropsEventListeners(activator);\r\n }\r\n if (value) {\r\n nextTick(() => this.addActivatorPropsEventListeners());\r\n }\r\n },\r\n { immediate: true },\r\n );\r\n\r\n watch(\r\n () => this.activator.props.activatorProps,\r\n () => {\r\n this.addActivatorPropsEventListeners();\r\n },\r\n );\r\n\r\n onScopeDispose(() => {\r\n this.removeActivatorPropsEventListeners();\r\n });\r\n }\r\n}\r\n","import { PositionStrategyData, PositionStrategyProps } from \"../position\";\r\nimport {\r\n computed,\r\n ComputedRef,\r\n nextTick,\r\n onScopeDispose,\r\n Ref,\r\n watch,\r\n} from \"vue\";\r\nimport {\r\n isFixedPosition,\r\n toFixedPosition,\r\n StyleProp,\r\n isNumber,\r\n Rect,\r\n getScrollParents,\r\n destructComputed,\r\n Anchor,\r\n Dimensions,\r\n toWebUnit,\r\n pixelRound,\r\n pixelCeil,\r\n clamp,\r\n AnchorSide,\r\n AnchorAlignment,\r\n RectProps,\r\n} from \"@/util\";\r\n\r\n/**\r\n * # Connected Position Strategy\r\n *\r\n * Connected to a certain element\r\n */\r\nexport function connectedPositionStrategy(\r\n data: PositionStrategyData,\r\n props: PositionStrategyProps,\r\n contentStyles: Ref<StyleProp>,\r\n pointerStyles: Ref<StyleProp>,\r\n) {\r\n // When the position anchor contains auto information, we need to calculate the preferred anchor\r\n // If the origin anchor contains auto information, we need to calculate the preferred anchor\r\n // some combinations may cause issues.\r\n\r\n // If the `side` of the anchor is set to 'auto' then we need to choose the side with most space\r\n // for the content. We should have a preference stack which is calculated based on\r\n // rtl, and whether the content fits the side.\r\n const manager = new ConnectedPosition(\r\n data,\r\n props,\r\n contentStyles,\r\n pointerStyles,\r\n );\r\n return {\r\n updatePosition: manager.updatePosition.bind(manager),\r\n };\r\n}\r\n\r\nclass ConnectedPosition {\r\n public contentScrollParents?: HTMLElement[];\r\n public contentRect?: Rect;\r\n public maxHeight: ComputedRef<number>;\r\n public maxWidth: ComputedRef<number>;\r\n public minHeight: ComputedRef<number>;\r\n public minWidth: ComputedRef<number>;\r\n public observe: boolean = false;\r\n public observer?: ResizeObserver;\r\n public offset: ComputedRef<number[]>;\r\n public preferredPosition?: Ref<Anchor>;\r\n public preferredOrigin?: Ref<Anchor>;\r\n public targetRect?: Rect;\r\n public viewportRect?: Rect;\r\n public viewportMargin = 12;\r\n private zoneCalculator: ZoneCalculator;\r\n\r\n constructor(\r\n public data: PositionStrategyData,\r\n public props: PositionStrategyProps,\r\n public contentStyles: Ref<StyleProp>,\r\n public pointerStyles: Ref<StyleProp>,\r\n ) {\r\n this.resolveFixedActivator();\r\n this.minWidth = this.computedNumericProp(\"minWidth\");\r\n this.maxWidth = this.computedNumericProp(\"maxWidth\");\r\n this.minHeight = this.computedNumericProp(\"minHeight\");\r\n this.maxHeight = this.computedNumericProp(\"maxHeight\");\r\n this.offset = this.computedOffset();\r\n this.zoneCalculator = new ZoneCalculator();\r\n this.calculatePreferences();\r\n this.addResizeObserver();\r\n this.watch();\r\n }\r\n\r\n /**\r\n * ## Add Resize Observer\r\n *\r\n * Watch for changes to the size and element of the activator as well as the overlay content.\r\n *\r\n * @private\r\n */\r\n private addResizeObserver() {\r\n this.observe = false;\r\n this.observer = new ResizeObserver(() => {\r\n if (this.observe) {\r\n this.updatePosition();\r\n }\r\n });\r\n\r\n watch(\r\n [this.data.activatorEl, this.data.contentEl],\r\n (\r\n [newActivatorEl, newContentEl],\r\n [oldActivatorEl, oldContentEl],\r\n ) => {\r\n if (oldActivatorEl) {\r\n this.observer?.unobserve(oldActivatorEl);\r\n }\r\n if (newActivatorEl) {\r\n this.observer?.observe(newActivatorEl);\r\n }\r\n if (oldContentEl) {\r\n this.observer?.unobserve(oldContentEl);\r\n }\r\n if (newContentEl) {\r\n this.observer?.observe(newContentEl);\r\n }\r\n },\r\n {\r\n immediate: true,\r\n },\r\n );\r\n\r\n onScopeDispose(() => {\r\n this.observer?.disconnect();\r\n });\r\n }\r\n\r\n /**\r\n * ## Calculate Preferences (for position and origin anchor points)\r\n * @private\r\n */\r\n private calculatePreferences() {\r\n const { preferredPosition, preferredOrigin } = destructComputed(() => {\r\n const position: Anchor = Anchor.fromSelector(\r\n this.props.position,\r\n this.data.isRtl.value,\r\n );\r\n let origin: Anchor;\r\n if (this.props.origin === \"overlap\") {\r\n origin = position;\r\n } else if (this.props.origin === \"auto\") {\r\n origin = position.flipSide();\r\n } else {\r\n origin = Anchor.fromSelector(\r\n this.props.origin,\r\n this.data.isRtl.value,\r\n );\r\n }\r\n // Some combinations of props may produce an invalid origin\r\n if (\r\n position.side === origin.side &&\r\n position.alignment === origin.flipAlignment().alignment\r\n ) {\r\n return {\r\n preferredPosition: position.flipCorner(),\r\n preferredOrigin: origin.flipCorner(),\r\n };\r\n } else {\r\n return {\r\n preferredPosition: position,\r\n preferredOrigin: origin,\r\n };\r\n }\r\n });\r\n this.preferredPosition = preferredPosition;\r\n this.preferredOrigin = preferredOrigin;\r\n }\r\n\r\n /**\r\n * ## Computed Numeric Prop\r\n * @param key\r\n * @private\r\n */\r\n private computedNumericProp(key: string) {\r\n return computed(() => {\r\n const value = parseFloat(\r\n this.props[key as keyof PositionStrategyProps]! as string,\r\n );\r\n return isNaN(value) ? Infinity : value;\r\n });\r\n }\r\n\r\n /**\r\n * ## Computed Offset\r\n *\r\n * Returns an array, with the following indexes:\r\n * - `0` - represents `side` offset.\r\n * - `1` - represents `alignment` offset.\r\n *\r\n * @private\r\n */\r\n private computedOffset() {\r\n return computed(() => {\r\n if (Array.isArray(this.props.offset)) {\r\n return this.props.offset;\r\n }\r\n if (typeof this.props.offset === \"string\") {\r\n const offset = this.props.offset.split(\" \").map(parseFloat);\r\n if (offset.length < 2) {\r\n offset.push(0);\r\n }\r\n return offset as [number, number];\r\n }\r\n return isNumber(this.props.offset)\r\n ? [this.props.offset, 0]\r\n : [0, 0];\r\n });\r\n }\r\n\r\n /**\r\n * # Get Content Rect\r\n *\r\n * Returns a Rect adjusted for the original elements position, whilst accommodating RTL direction.\r\n */\r\n private getContentRect(): Rect {\r\n const el = this.data.contentEl.value!;\r\n const isRtl = this.data.isRtl.value;\r\n const rect = Rect.fromElement(el, true);\r\n if (isRtl) {\r\n rect.x += parseFloat((el.style.right || 0) as string);\r\n } else {\r\n rect.x -= parseFloat((el.style.left || 0) as string);\r\n }\r\n rect.y -= parseFloat((el.style.top || 0) as string);\r\n return rect;\r\n }\r\n\r\n /**\r\n * ## Get Pointer Rect\r\n * @private\r\n */\r\n private getPointerDimensions(): { width: number; height: number } | null {\r\n const el = this.data.pointerEl.value;\r\n return el ? { width: el.clientWidth, height: el.clientHeight } : null;\r\n }\r\n\r\n /**\r\n * ## Get Content Scroll Parents\r\n * @private\r\n */\r\n private getContentScrollParents(): HTMLElement[] {\r\n const scrollParents = getScrollParents(this.data.contentEl.value);\r\n const contentEl = this.data.contentEl.value!;\r\n if (!scrollParents.length) {\r\n scrollParents.push(document.documentElement);\r\n if (!(contentEl.style.top && contentEl.style.left)) {\r\n this.contentRect!.x -= parseFloat(\r\n document.documentElement.style.getPropertyValue(\r\n \"--ev-body-scroll-x\",\r\n ) || \"0\",\r\n );\r\n this.contentRect!.y -= parseFloat(\r\n document.documentElement.style.getPropertyValue(\r\n \"--ev-body-scroll-y\",\r\n ) || \"0\",\r\n );\r\n }\r\n }\r\n return scrollParents;\r\n }\r\n\r\n /**\r\n * ## Get Viewport Rect\r\n *\r\n * Calculates the viewport viewable area for the content taking into account the viewport margins.\r\n * i.e. how close are we allowed to place content to the edges of the viewport?\r\n *\r\n * @private\r\n */\r\n private getViewportRect(): Rect {\r\n const viewportRect = this.contentScrollParents!.reduce<Rect>(\r\n (currentRect: Rect | undefined, el: HTMLElement) => {\r\n const elRect = Rect.fromElement(el);\r\n const isDocEl = el === document.documentElement;\r\n const scrollRect = new Rect(\r\n isDocEl ? 0 : elRect.x,\r\n isDocEl ? 0 : elRect.y,\r\n el.clientWidth,\r\n el.clientHeight,\r\n );\r\n if (!currentRect) {\r\n return scrollRect;\r\n }\r\n return new Rect(\r\n Math.max(currentRect.left, scrollRect.left),\r\n Math.max(currentRect.top, scrollRect.top),\r\n Math.min(currentRect.right, scrollRect.right) -\r\n Math.max(currentRect.left, scrollRect.left),\r\n Math.min(currentRect.bottom, scrollRect.bottom) -\r\n Math.max(currentRect.top, scrollRect.top),\r\n );\r\n },\r\n undefined!,\r\n );\r\n // Adjust the allowable viewport dimensions\r\n viewportRect.x += this.viewportMargin;\r\n viewportRect.y += this.viewportMargin;\r\n viewportRect.width -= this.viewportMargin * 2;\r\n viewportRect.height -= this.viewportMargin * 2;\r\n return viewportRect;\r\n }\r\n\r\n /**\r\n * ## Resolve Fixed Activator\r\n * @private\r\n */\r\n private resolveFixedActivator() {\r\n const isActivatorFixed = isFixedPosition(this.data.activatorEl.value);\r\n if (isActivatorFixed) {\r\n toFixedPosition(this.contentStyles.value, this.data.isRtl.value);\r\n }\r\n }\r\n\r\n /**\r\n * ## Update Position\r\n */\r\n public updatePosition() {\r\n this.observe = false;\r\n\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => (this.observe = true));\r\n });\r\n\r\n if (!this.data.activatorEl.value || !this.data.contentEl.value) {\r\n return;\r\n }\r\n\r\n this.targetRect = Rect.fromElement(this.data.activatorEl.value);\r\n this.contentRect = this.getContentRect();\r\n this.contentScrollParents = this.getContentScrollParents();\r\n this.viewportRect = this.getViewportRect();\r\n\r\n const zones = this.zoneCalculator.getAvailable(\r\n this.targetRect,\r\n this.viewportRect,\r\n this.offset.value,\r\n this.contentRect,\r\n );\r\n\r\n const placement = {\r\n position: this.preferredPosition!.value,\r\n origin: this.preferredOrigin!.value,\r\n };\r\n\r\n // If side is auto, find the largest side that\r\n if (placement.position.side === \"auto\") {\r\n const autoZone = this.getAutoZone(placement.position, zones);\r\n placement.position = autoZone.position;\r\n placement.origin = placement.position.flipSide();\r\n }\r\n\r\n // Ok, now we need to calculate the new placement based on available width/height\r\n // will the content fit and what to do if not.\r\n const zone =\r\n placement.position.side === \"center\"\r\n ? this.getCenterZone(zones)\r\n : this.getBestZone(placement.position, zones);\r\n\r\n // Now we need to calculate the position of the content element within the zone.\r\n placement.position = zone.position;\r\n placement.origin = placement.position.flipSide();\r\n const { x, y } = this.calculateContentCoords(zone, placement);\r\n this.calculateContentStyles(zone, placement, x, y);\r\n this.calculatePointerStyles(placement, x, y);\r\n\r\n this.data.contentEl.value?.setAttribute(\r\n \"data-position\",\r\n placement.position.toString(),\r\n );\r\n\r\n return {\r\n zoneRect: zone.rect,\r\n contentRect: this.contentRect,\r\n };\r\n }\r\n\r\n /**\r\n *\r\n * @param zone\r\n * @param placement\r\n * @private\r\n */\r\n private calculateContentCoords(\r\n zone: Zone,\r\n placement: { position: Anchor; origin: Anchor }\r\n ): { x: number; y: number } {\r\n let { x, y } = zone.rect;\r\n\r\n if (placement.position.side === \"center\") {\r\n y = zone.rect.y + (zone.rect.height - this.contentRect.height) / 2;\r\n x = zone.rect.x + (zone.rect.width - this.contentRect.width) / 2;\r\n } else {\r\n if (placement.position.side === \"top\") {\r\n y = zone.rect.bottom - this.contentRect.height;\r\n } else if (placement.position.side === \"left\") {\r\n x = zone.rect.right - this.contentRect.width;\r\n }\r\n if (placement.position.alignment !== \"start\") {\r\n const divider =\r\n placement.position.alignment === \"center\" ? 2 : 1;\r\n if (placement.position.axis === \"x\") {\r\n y =\r\n this.targetRect.y +\r\n (this.targetRect.height - this.contentRect.height) /\r\n divider;\r\n } else {\r\n x =\r\n this.targetRect.x +\r\n (this.targetRect.width - this.contentRect.width) /\r\n divider;\r\n }\r\n }\r\n }\r\n\r\n // Should this be optional!?\r\n if (y < this.viewportRect.y) {\r\n y = this.viewportRect.y;\r\n }\r\n if (x < this.viewportRect.x) {\r\n x = this.viewportRect.x;\r\n }\r\n\r\n return { x, y };\r\n }\r\n\r\n /**\r\n * @todo: RTL\r\n * @param zone\r\n * @param placement\r\n * @param x\r\n * @param y\r\n * @private\r\n */\r\n private calculateContentStyles(\r\n zone: Zone,\r\n placement: { position: Anchor; origin: Anchor },\r\n x: number,\r\n y: number,\r\n ) {\r\n Object.assign(this.contentStyles.value, {\r\n \"--ev-overlay-position\": placement.position.toCssValue(),\r\n transformOrigin: placement.origin.toCssValue(),\r\n top: toWebUnit(pixelRound(y)),\r\n left: toWebUnit(pixelRound(x)),\r\n minWidth: toWebUnit(\r\n placement.position.axis === \"y\"\r\n ? Math.min(this.minWidth.value, this.targetRect.width)\r\n : this.minWidth.value,\r\n ),\r\n maxWidth: toWebUnit(\r\n pixelCeil(\r\n clamp(\r\n zone.rect.width,\r\n this.minWidth.value === Infinity\r\n ? 0\r\n : this.minWidth.value,\r\n this.maxWidth.value,\r\n ),\r\n ),\r\n ),\r\n maxHeight: toWebUnit(\r\n pixelCeil(\r\n clamp(\r\n zone.rect.height,\r\n this.minHeight.value === Infinity\r\n ? 0\r\n : this.minHeight.value,\r\n this.maxHeight.value,\r\n ),\r\n ),\r\n ),\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * @param placement\r\n * @param x\r\n * @param y\r\n * @private\r\n */\r\n private calculatePointerStyles(\r\n placement: { position: Anchor; origin: Anchor },\r\n x: number,\r\n y: number,\r\n ) {\r\n const pointerDimensions = this.getPointerDimensions();\r\n if (\r\n !pointerDimensions ||\r\n (placement.position.side === \"center\" && placement.position.alignment === \"center\")\r\n ) {\r\n Object.assign(this.pointerStyles.value, {\r\n left: null,\r\n top: null,\r\n });\r\n return;\r\n }\r\n\r\n let pointerOffsetX: null | number | string = null;\r\n let pointerOffsetY: null | number | string = null;\r\n let rotation = 0;\r\n\r\n if (placement.position.axis === \"y\") {\r\n if (x > this.targetRect.x) {\r\n pointerOffsetX = 0 - pointerDimensions.width / 2;\r\n } else {\r\n pointerOffsetX = this.targetRect.x - x - pointerDimensions.width / 2;\r\n }\r\n pointerOffsetX +=\r\n Math.min(this.targetRect.width, this.contentRect.width) / 2;\r\n pointerOffsetY =\r\n placement.position.side === \"bottom\"\r\n ? 0 - pointerDimensions.height\r\n : \"100%\";\r\n rotation = placement.position.side === \"bottom\" ? 180 : 0;\r\n } else {\r\n // Note, the width/height dimensions of the pointer are rotated\r\n // so they seem wrong but should be correct if not square (needs to be tested)\r\n if (y > this.targetRect.y) {\r\n pointerOffsetY = 0 - pointerDimensions.width / 2;\r\n } else {\r\n pointerOffsetY = this.targetRect.y - y - pointerDimensions.width / 2;\r\n }\r\n pointerOffsetY += Math.min(this.targetRect.height, this.contentRect.height) / 2;\r\n pointerOffsetX =\r\n placement.position.side === \"right\"\r\n ? 0 - pointerDimensions.height\r\n : \"100%\";\r\n rotation = placement.position.side === \"right\" ? 90 : 270;\r\n }\r\n\r\n Object.assign(this.pointerStyles.value, {\r\n left: typeof pointerOffsetX === 'string'\r\n ? pointerOffsetX\r\n : toWebUnit(pixelRound(pointerOffsetX)),\r\n top: typeof pointerOffsetY === 'string'\r\n ? pointerOffsetY\r\n : toWebUnit(pixelRound(pointerOffsetY)),\r\n transform: `rotate(${rotation}deg)`,\r\n });\r\n }\r\n\r\n private getAutoZone(position: Anchor, zones: Zone[]): Zone {\r\n const matches = zones.filter((zone) => {\r\n // Ignore center position for now.\r\n if (zone.position.side === \"center\") {\r\n return false;\r\n }\r\n return (\r\n position.alignment === \"auto\" ||\r\n zone.position.alignment === position.alignment\r\n );\r\n });\r\n return matches[0];\r\n }\r\n\r\n /**\r\n * ## Get Best Zone\r\n * Returns the zone that fits the content, or the zone with the largest available area.\r\n * @param position\r\n * @param zones\r\n * @private\r\n */\r\n private getBestZone(position: Anchor, zones: Zone[]): Zone {\r\n // Priority\r\n const positions = [\r\n position,\r\n position.centerAlign(),\r\n position.flipSide(),\r\n position.flipSide().centerAlign(),\r\n position.flipCorner(),\r\n position.flipCorner().centerAlign(),\r\n position.flipCorner().flipSide(),\r\n position.flipCorner().flipSide().centerAlign(),\r\n ];\r\n\r\n // Exactly fits content\r\n for (const newPosition of positions) {\r\n // Find the zone that correlates to the position\r\n const zone = zones.find((zone) => {\r\n return zone.position.toString() === newPosition.toString();\r\n });\r\n if (zone?.isFitsContent) {\r\n return zone;\r\n }\r\n }\r\n\r\n // Or the preferred side fits\r\n for (const newPosition of positions) {\r\n const zone = zones.find((zone) => {\r\n return zone.position.toString() === newPosition.toString();\r\n });\r\n if (!zone) {\r\n continue;\r\n }\r\n const dimension = newPosition.axis === \"x\" ? \"width\" : \"height\";\r\n if (zone.available[dimension] >= 0) {\r\n return zone;\r\n }\r\n }\r\n\r\n // Fallback to auto because it finds the largest available zone\r\n return this.getAutoZone(position, zones);\r\n }\r\n\r\n /**\r\n * ## Get Center Zone\r\n * Returns the zone for centering content in the viewport, which is basically the whole viewport.\r\n * @param zones\r\n * @private\r\n */\r\n private getCenterZone(zones: Zone[]): Zone {\r\n return zones.find((zone) => {\r\n return (\r\n zone.position.side === \"center\" &&\r\n zone.position.alignment === \"center\"\r\n );\r\n })!;\r\n }\r\n\r\n /**\r\n * ## Watch\r\n *\r\n * Watch for changes that affect position calculations.\r\n *\r\n * @private\r\n */\r\n private watch() {\r\n watch(\r\n () => [\r\n this.preferredPosition?.value,\r\n this.preferredOrigin?.value,\r\n this.props.offset,\r\n this.props.minWidth,\r\n this.props.minHeight,\r\n this.props.maxWidth,\r\n this.props.maxHeight,\r\n ],\r\n () => this.updatePosition(),\r\n );\r\n\r\n nextTick(() => {\r\n const result = this.updatePosition();\r\n if (!result) {\r\n return;\r\n }\r\n // @todo: what else do we need to do?\r\n });\r\n }\r\n}\r\n\r\nclass Zone {\r\n public available: Dimensions;\r\n public isFitsContent: boolean;\r\n\r\n constructor(\r\n public position: Anchor,\r\n public rect: Rect,\r\n public content: Rect,\r\n ) {\r\n this.available = {\r\n width: this.rect.width - content.width,\r\n height: this.rect.height - content.height,\r\n };\r\n this.isFitsContent =\r\n this.rect.width >= content.width &&\r\n this.rect.height >= content.height;\r\n }\r\n\r\n get availableArea() {\r\n return this.available.width * this.available.height;\r\n }\r\n}\r\n\r\nclass ZoneCalculator {\r\n /**\r\n * ## Get Available\r\n *\r\n * Returns all available zones around the target.\r\n *\r\n * @param target\r\n * @param viewport\r\n * @param offset\r\n * @param content\r\n */\r\n public getAvailable(\r\n target: Rect,\r\n viewport: Rect,\r\n offset: number[],\r\n content: Rect,\r\n ): Zone[] {\r\n const [offsetSide, offsetAlign] = offset;\r\n\r\n // Sides\r\n const sides: ZoneSides = {\r\n top: {\r\n y: viewport.top,\r\n height: target.top - viewport.top - offsetSide,\r\n align: \"x\",\r\n },\r\n bottom: {\r\n y: target.bottom + offsetSide,\r\n height: viewport.bottom - target.bottom - offsetSide,\r\n align: \"x\",\r\n },\r\n left: {\r\n x: viewport.left,\r\n width: target.left - viewport.left - offsetSide,\r\n align: \"y\",\r\n },\r\n right: {\r\n x: target.right + offsetSide,\r\n width: viewport.right - target.right - offsetSide,\r\n align: \"y\",\r\n },\r\n center: { x: viewport.left, width: viewport.width, align: \"y\" },\r\n };\r\n\r\n // Align\r\n const alignments: ZoneAlignments = {\r\n x: {\r\n center: { x: viewport.left, width: viewport.width },\r\n start: {\r\n x: target.left + offsetAlign,\r\n width: viewport.width - target.left - offsetAlign,\r\n },\r\n end: {\r\n x: viewport.left,\r\n width: target.right - viewport.left - offsetAlign,\r\n },\r\n },\r\n y: {\r\n center: { y: viewport.top, height: viewport.height },\r\n start: {\r\n y: target.top + offsetAlign,\r\n height: viewport.bottom - target.top - offsetAlign,\r\n },\r\n end: {\r\n y: viewport.top,\r\n height: target.bottom - viewport.top - offsetAlign,\r\n },\r\n },\r\n };\r\n\r\n const zones: Zone[] = [];\r\n for (const [side, sideAttrs] of Object.entries(sides)) {\r\n for (const [align, alignAttrs] of Object.entries(\r\n alignments[sideAttrs.align],\r\n )) {\r\n const anchor = new Anchor(\r\n side as AnchorSide,\r\n align as AnchorAlignment,\r\n );\r\n const rectProps: RectProps = Object.assign(\r\n {\r\n width: 0,\r\n height: 0,\r\n x: 0,\r\n y: 0,\r\n },\r\n sideAttrs,\r\n alignAttrs,\r\n );\r\n const rect = Rect.fromRect(rectProps);\r\n zones.push(new Zone(anchor, rect, content));\r\n }\r\n }\r\n\r\n // Sort by area\r\n zones.sort((zoneA, zoneB) => {\r\n return zoneB.availableArea - zoneA.availableArea;\r\n });\r\n return zones;\r\n }\r\n}\r\n\r\ninterface ZoneSides {\r\n [key: string]: {\r\n x?: number;\r\n y?: number;\r\n width?: number;\r\n height?: number;\r\n align: string;\r\n };\r\n}\r\n\r\ninterface ZoneAlignments {\r\n [key: string]: {\r\n [key: string]: {\r\n x?: number;\r\n y?: number;\r\n width?: number;\r\n height?: number;\r\n };\r\n };\r\n}\r\n","import { PositionStrategyData, PositionStrategyProps } from \"../position\";\nimport { Ref } from \"vue\";\nimport { StyleProp } from \"@/util\";\n\n/**\n * # Static Position Strategy\n *\n * Specific viewport position, usually centered.\n */\nexport function staticPositionStrategy(\n data: PositionStrategyData,\n props: PositionStrategyProps,\n contentStyles: Ref<StyleProp>,\n) {\n // todo\n}\n","import { onScopeDispose, PropType, ref, Ref, watch } from \"vue\";\nimport {\n connectedPositionStrategy,\n staticPositionStrategy,\n} from \"./position-strategy\";\nimport { AnchorSelector, Browser, isFunction, propsFactory } from \"@/util\";\nimport { useToggleScope } from \"@/composables/toggleScope\";\n\nexport interface PositionStrategyData {\n contentEl: Ref<HTMLElement | undefined>;\n activatorEl: Ref<HTMLElement | undefined>;\n pointerEl: Ref<HTMLElement | undefined>;\n isActive: Ref<boolean>;\n isRtl: Ref<boolean>;\n}\n\ntype PositionStrategyFn = (\n data: PositionStrategyData,\n props: PositionStrategyProps,\n contentStyles: Ref<Record<string, string>>,\n pointerStyles: Ref<Record<string, string>>,\n) => undefined | { updatePosition: (e: Event) => void };\n\nconst positionStrategies = {\n static: staticPositionStrategy, // specific viewport position, usually centered\n connected: connectedPositionStrategy, // connected to a certain element\n};\n\nexport interface PositionStrategyProps {\n positionStrategy?: keyof typeof positionStrategies | PositionStrategyFn;\n position?: AnchorSelector;\n origin?: AnchorSelector | \"overlap\";\n offset?: number | string | number[];\n maxHeight?: number | string;\n maxWidth?: number | string;\n minHeight?: number | string;\n minWidth?: number | string;\n}\n\n/**\n * # Make Position Strategy Props\n */\nexport const makePositionStrategyProps = propsFactory(\n {\n positionStrategy: {\n type: [String, Function] as PropType<\n PositionStrategyProps[\"positionStrategy\"]\n >,\n default: \"connected\",\n validator: (value: any) =>\n typeof value === \"function\" || value in positionStrategies,\n },\n position: {\n type: String as PropType<AnchorSelector>,\n default: \"auto\",\n },\n origin: {\n type: String as PropType<PositionStrategyProps[\"origin\"]>,\n default: \"auto\",\n },\n offset: [Number, String, Array] as PropType<\n PositionStrategyProps[\"offset\"]\n >,\n },\n \"EvOverlay/position\",\n);\n\n/**\n * # Use Position Strategies\n */\nexport function usePositionStrategies(\n props: PositionStrategyProps,\n data: PositionStrategyData,\n) {\n const contentStyles = ref({});\n const pointerStyles = ref({});\n const updatePosition = ref<(e: Event) => void>();\n\n /**\n * ## On Resize\n * Update the position when the window resizes.\n * @param e\n */\n function onResize(e: Event) {\n updatePosition.value?.(e);\n }\n\n if (Browser.hasWindow) {\n useToggleScope(\n () => {\n return !!(data.isActive.value && props.positionStrategy);\n },\n (reset) => {\n watch(() => props.positionStrategy, reset);\n onScopeDispose(() => {\n updatePosition.value = undefined;\n });\n let positionStrategyFn: PositionStrategyFn;\n if (isFunction(props.positionStrategy)) {\n positionStrategyFn = props.positionStrategy;\n } else {\n positionStrategyFn = positionStrategies[\n props.positionStrategy\n ] as PositionStrategyFn;\n }\n updatePosition.value = positionStrategyFn(\n data,\n props,\n contentStyles,\n pointerStyles,\n )?.updatePosition;\n },\n );\n\n window.addEventListener(\"resize\", onResize, { passive: true });\n\n onScopeDispose(() => {\n window.removeEventListener(\"resize\", onResize);\n updatePosition.value = undefined;\n });\n }\n\n return {\n contentStyles,\n updatePosition,\n pointerStyles,\n };\n}\n","import { ScrollStrategyData, ScrollStrategyProps } from \"../scroll\";\nimport { getScrollParents, hasScrollbar, toWebUnit } from \"@/util\";\nimport { onScopeDispose } from \"vue\";\n\n/**\n * # Block Scroll Strategy\n * @param data\n * @param props\n */\nexport function blockScrollStrategy(\n data: ScrollStrategyData,\n props: ScrollStrategyProps,\n) {\n const offsetParent = data.containerEl.value?.offsetParent;\n const scrollElements = [\n ...new Set([\n ...getScrollParents(\n data.activatorEl.value,\n props.contained ? offsetParent : undefined,\n ),\n ...getScrollParents(\n data.contentEl.value,\n props.contained ? offsetParent : undefined,\n ),\n ]),\n ].filter((el) => !el.classList.contains(\"ev-overlay-scroll-blocked\"));\n const scrollbarWidth =\n window.innerWidth - document.documentElement.offsetWidth;\n const scrollableParent = ((el) => hasScrollbar(el) && el)(\n offsetParent || document.documentElement,\n );\n if (scrollableParent) {\n data.containerEl.value?.classList.add(\"ev-overlay--scroll-blocked\");\n }\n\n scrollElements.forEach((el, i) => {\n el.style.setProperty(\n \"--ev-body-scroll-x\",\n toWebUnit(-el.scrollLeft) ?? null,\n );\n el.style.setProperty(\n \"--ev-body-scroll-y\",\n toWebUnit(-el.scrollTop) ?? null,\n );\n if (el !== document.documentElement) {\n el.style.setProperty(\n \"--ev-scrollbar-offset\",\n toWebUnit(scrollbarWidth) ?? null,\n );\n }\n el.classList.add(\"ev-overlay-scroll-blocked\");\n });\n\n onScopeDispose(() => {\n scrollElements.forEach((el, i) => {\n const x = parseFloat(\n el.style.getPropertyValue(\"--ev-body-scroll-x\"),\n );\n const y = parseFloat(\n el.style.getPropertyValue(\"--ev-body-scroll-y\"),\n );\n\n el.style.removeProperty(\"--ev-body-scroll-x\");\n el.style.removeProperty(\"--ev-body-scroll-y\");\n el.style.removeProperty(\"--ev-scrollbar-offset\");\n el.classList.remove(\"ev-overlay-scroll-blocked\");\n el.scrollLeft = -x;\n el.scrollTop = -y;\n });\n if (scrollableParent) {\n data.containerEl.value?.classList.remove(\n \"ev-overlay--scroll-blocked\",\n );\n }\n });\n}\n","import { ScrollStrategyData } from \"../scroll\";\nimport { addScrollEventListener } from \"@/util\";\n\n/**\n * # Close Scroll Strategy\n * @param data\n */\nexport function closeScrollStrategy(data: ScrollStrategyData) {\n function onScroll(e: Event) {\n data.isActive.value = false;\n }\n addScrollEventListener(\n data.activatorEl.value ?? data.contentEl.value,\n onScroll,\n );\n}\n","import { ScrollStrategyData, ScrollStrategyProps } from \"../scroll\";\nimport { EffectScope, onScopeDispose } from \"vue\";\nimport { addScrollEventListener, requestNewFrame } from \"@/util\";\n\n/**\n * # Reposition Scroll Strategy\n * @param data\n * @param props\n * @param scope\n */\nexport function repositionScrollStrategy(\n data: ScrollStrategyData,\n props: ScrollStrategyProps,\n scope: EffectScope,\n) {\n let slow = false;\n let raf = -1;\n let ric = -1;\n\n function update(e: Event) {\n requestNewFrame(() => {\n const start = performance.now();\n data.updatePosition.value?.(e);\n const time = performance.now() - start;\n slow = time / (1000 / 60) > 2;\n });\n }\n\n ric = (\n typeof requestIdleCallback === \"undefined\"\n ? (cb: Function) => cb()\n : requestIdleCallback\n )(() => {\n scope.run(() => {\n addScrollEventListener(\n data.activatorEl.value ?? data.contentEl.value,\n (e) => {\n if (slow) {\n // If the position calculation is slow,\n // defer updates until scrolling is finished.\n // Browsers usually fire one scroll event per frame so\n // we just wait until we've got two frames without an event\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n raf = requestAnimationFrame(() => {\n update(e);\n });\n });\n } else {\n update(e);\n }\n },\n );\n });\n });\n\n onScopeDispose(() => {\n typeof cancelIdleCallback !== \"undefined\" && cancelIdleCallback(ric);\n cancelAnimationFrame(raf);\n });\n}\n","import { Browser, propsFactory } from \"../../util\";\nimport {\n effectScope,\n EffectScope,\n nextTick,\n onScopeDispose,\n PropType,\n Ref,\n watchEffect,\n} from \"vue\";\nimport {\n blockScrollStrategy,\n closeScrollStrategy,\n repositionScrollStrategy,\n} from \"./scroll-strategy\";\n\nexport interface ScrollStrategyData {\n containerEl: Ref<HTMLElement | undefined>;\n contentEl: Ref<HTMLElement | undefined>;\n activatorEl: Ref<HTMLElement | undefined>;\n isActive: Ref<boolean>;\n updatePosition: Ref<((e: Event) => void) | undefined>;\n}\n\ntype ScrollStrategyFn = (\n data: ScrollStrategyData,\n props: ScrollStrategyProps,\n scope: EffectScope,\n) => void;\n\nconst scrollStrategies = {\n none: null,\n close: closeScrollStrategy,\n block: blockScrollStrategy,\n reposition: repositionScrollStrategy,\n};\n\nexport interface ScrollStrategyProps {\n scrollStrategy?: keyof typeof scrollStrategies | ScrollStrategyFn;\n contained?: boolean;\n}\n\n/**\n * # Make Scroll Strategy Props\n */\nexport const makeScrollStrategyProps = propsFactory(\n {\n scrollStrategy: {\n type: [String, Function] as PropType<\n ScrollStrategyProps[\"scrollStrategy\"]\n >,\n default: \"block\",\n validator: (val: any) =>\n typeof val === \"function\" || val in scrollStrategies,\n },\n },\n \"EvOverlay/scroll\",\n);\n\n/**\n * # Use Scroll Strategies\n * @param props\n * @param data\n */\nexport function useScrollStrategies(\n props: ScrollStrategyProps,\n data: ScrollStrategyData,\n) {\n if (!Browser.hasWindow) {\n return;\n }\n\n let scope: EffectScope | undefined;\n watchEffect(async () => {\n scope?.stop();\n\n if (!(data.isActive.value && props.scrollStrategy)) {\n return;\n }\n\n scope = effectScope();\n await nextTick();\n scope.active &&\n scope.run(() => {\n if (typeof props.scrollStrategy === \"function\") {\n props.scrollStrategy(data, props, scope!);\n } else {\n scrollStrategies[props.scrollStrategy]?.(\n data,\n props,\n scope!,\n );\n }\n });\n });\n\n onScopeDispose(() => {\n scope?.stop();\n });\n}\n","import { propsFactory } from \"@/util\";\nimport { PropType, Ref } from \"vue\";\nimport { TeleportTarget } from \"@/composables/teleport\";\nimport { DimensionsProps, makeDimensionsProps } from \"@/composables/dimensions\";\nimport { ActivatorProps, makeActivatorProps } from \"./activator\";\nimport { makePositionStrategyProps, PositionStrategyProps } from \"./position\";\nimport { makeScrollStrategyProps, ScrollStrategyProps } from \"./scroll\";\nimport {\n EvTransitionProps,\n makeEvTransitionProps,\n} from \"@/components/EvTransition\";\nimport { ComponentProps, makeComponentProps } from \"@/composables/component\";\n\ntype ModelValueProp = boolean | Ref<boolean>;\n\nexport interface EvOverlayProps\n extends ActivatorProps,\n DimensionsProps,\n PositionStrategyProps,\n ScrollStrategyProps,\n EvTransitionProps,\n ComponentProps {\n absolute?: boolean;\n attach?: TeleportTarget;\n closeOnBack?: boolean;\n contained?: boolean;\n contentClass?: string;\n contentProps?: Record<string, unknown>;\n disabled?: boolean;\n modelValue?: ModelValueProp;\n persistent?: boolean;\n veil?: boolean;\n zIndex?: number | string;\n}\n\n/**\n * # Make EvOverlay Props\n */\nexport const makeEvOverlayProps = propsFactory(\n {\n absolute: Boolean,\n attach: [Boolean, String, Object] as PropType<TeleportTarget>,\n closeOnBack: {\n type: Boolean,\n default: true,\n },\n contained: Boolean,\n contentClass: String,\n contentProps: Object as PropType<EvOverlayProps[\"contentProps\"]>,\n disabled: Boolean,\n modelValue: [Boolean, Object] as PropType<ModelValueProp>,\n persistent: Boolean,\n veil: {\n type: Boolean,\n default: true,\n },\n zIndex: {\n type: [Number, String],\n default: 2000,\n },\n\n ...makeActivatorProps(),\n ...makeDimensionsProps(),\n ...makePositionStrategyProps(),\n ...makeScrollStrategyProps(),\n ...makeEvTransitionProps(),\n ...makeComponentProps(),\n },\n \"EvOverlay\",\n);\n","<script setup lang=\"ts\">\n/**\n * # EvMenu Transition\n *\n * We use JavaScript hooks to animate the menu.\n *\n * @see https://vuejs.org/guide/built-ins/transition.html#javascript-hooks\n */\nimport { computed, PropType } from \"vue\";\nimport { animate, easingAccelerate, easingStandard, Rect } from \"@/util\";\n\nconst props = defineProps({\n target: Object as PropType<HTMLElement>,\n});\n\n/**\n * ## Get Children\n *\n * We're only interested in animating the following children:\n *\n * - `ev-surface`\n * - `ev-card`\n * - `ev-list`\n *\n * @param el\n */\nfunction getChildren(el: Element) {\n const els = el.querySelector(\n \":scope > .ev-card, :scope > .ev-surface, :scope > .ev-list\",\n )?.children;\n return els && [...els];\n}\n\n/**\n * ## Get Dimensions\n * @param target\n * @param el\n */\nfunction getDimensions(target: HTMLElement, el: HTMLElement) {\n const targetBox = Rect.fromElement(target);\n const elBox = Rect.fromElement(el, true);\n const elStyle = getComputedStyle(el);\n const [originX, originY] = elStyle.transformOrigin\n .split(\" \")\n .map((v) => parseFloat(v));\n const [anchorSide, anchorOffset] = elStyle\n .getPropertyValue(\"--ev-overlay-position\")\n .split(\" \");\n\n let offsetX = targetBox.left;\n if (anchorSide === \"center\" || anchorOffset === \"center\") {\n offsetX += targetBox.width / 2;\n } else if (anchorSide === \"right\" || anchorOffset === \"right\") {\n offsetX += targetBox.width;\n }\n\n let offsetY = targetBox.top;\n if (anchorSide === \"center\" || anchorOffset === \"center\") {\n offsetY += targetBox.height / 2;\n } else if (anchorSide === \"bottom\" || anchorOffset === \"bottom\") {\n offsetY += targetBox.height;\n }\n\n const targetScaleX = targetBox.width / elBox.width;\n const targetScaleY = targetBox.height / elBox.height;\n const maxScale = Math.max(1, targetScaleX, targetScaleY);\n const scaleX = targetScaleX / maxScale || 0;\n const scaleY = targetScaleY / maxScale || 0;\n\n // Animate elements larger than 12% of the screen area up to 1.5x slower\n const screenPercentage =\n (elBox.width * elBox.height) / (window.innerWidth * window.innerHeight);\n const speedFactor =\n screenPercentage > 0.12\n ? Math.min(1.5, (screenPercentage - 0.12) * 10 + 1)\n : 1;\n\n return {\n x: offsetX - (originX + elBox.left),\n y: offsetY - (originY + elBox.top),\n scaleX,\n scaleY,\n speedFactor,\n };\n}\n\n/**\n * ## On Before Enter\n *\n * Before the element is inserted into the DOM.\n *\n * @param el\n */\nfunction onBeforeEnter(el: Element) {\n (el as HTMLElement).style.pointerEvents = \"none\";\n (el as HTMLElement).style.visibility = \"hidden\";\n}\n\n/**\n * ## On Enter\n *\n * Called one frame after the element is inserted.\n *\n * @param el\n * @param done\n */\nasync function onEnter(el: Element, done: () => void) {\n await new Promise((resolve) => requestAnimationFrame(resolve));\n await new Promise((resolve) => requestAnimationFrame(resolve));\n (el as HTMLElement).style.visibility = \"\";\n const { x, y, scaleX, scaleY, speedFactor } = getDimensions(\n props.target!,\n el as HTMLElement,\n );\n const duration = 250;\n\n const animation = animate(\n el,\n [\n {\n transform: `translate(${x}px, ${y}px) scale(${scaleX}, ${scaleY})`,\n opacity: 0,\n },\n {},\n ],\n {\n duration: duration * speedFactor,\n easing: easingStandard,\n },\n );\n getChildren(el)?.forEach((el) => {\n animate(el, [{ opacity: 0 }, { opacity: 0, offset: 0.25 }, {}], {\n duration: duration * speedFactor,\n easing: easingStandard,\n });\n });\n animation.finished.then(() => done());\n}\n\n/**\n * ## On After Enter\n *\n * Called when the enter transition has finished.\n *\n * @param el\n */\nfunction onAfterEnter(el: Element) {\n (el as HTMLElement).style.removeProperty(\"pointer-events\");\n}\n\n/**\n * ## On Before Leave\n *\n * Called before the leave hook.\n *\n * @param el\n */\nfunction onBeforeLeave(el: Element) {\n (el as HTMLElement).style.pointerEvents = \"none\";\n}\n\n/**\n * ## On Leave\n *\n * Called when the leave transition starts.\n *\n * @param el\n * @param done\n */\nasync function onLeave(el: Element, done: () => void) {\n await new Promise((resolve) => requestAnimationFrame(resolve));\n const { x, y, scaleX, scaleY, speedFactor } = getDimensions(\n props.target!,\n el as HTMLElement,\n );\n\n const animation = animate(\n el,\n [\n {},\n {\n transform: `translate(${x}px, ${y}px) scale(${scaleX}, ${scaleY})`,\n opacity: 0,\n },\n ],\n {\n duration: 125 * speedFactor,\n easing: easingAccelerate,\n },\n );\n animation.finished.then(() => done());\n\n getChildren(el)?.forEach((el) => {\n animate(el, [{}, { opacity: 0, offset: 0.25 }, { opacity: 0 }], {\n duration: 250 * speedFactor,\n easing: easingStandard,\n });\n });\n}\n\n/**\n * ## On After Leave\n *\n * Called when the leave transition has finished and the element has been removed from the DOM.\n *\n * @param el\n */\nfunction onAfterLeave(el: Element) {\n (el as HTMLElement).style.removeProperty(\"pointer-events\");\n}\n\n/**\n * Calculate transition props so we can use v-bind.\n */\nconst transitionProps = computed(() => {\n return props.target\n ? {\n css: false,\n onBeforeEnter,\n onEnter,\n onAfterEnter,\n onBeforeLeave,\n onLeave,\n onAfterLeave,\n }\n : {};\n});\n</script>\n\n<template>\n <transition name=\"ev-menu-transition\" v-bind=\"transitionProps\">\n <slot />\n </transition>\n</template>\n","import { AnchorSelector, propsFactory } from \"@/util\";\r\nimport { makeEvOverlayProps } from \"@/components/EvOverlay/EvOverlay\";\r\nimport EvMenuTransition from \"./EvMenuTransition.vue\";\r\n\r\nexport const makeEvMenuProps = propsFactory(\r\n {\r\n id: String,\r\n\r\n ...makeEvOverlayProps({\r\n closeDelay: 250,\r\n closeOnContentClick: true,\r\n position: \"bottom-start\" as AnchorSelector,\r\n positionStrategy: \"connected\" as const,\r\n openDelay: 250,\r\n veil: false,\r\n scrollStrategy: \"reposition\" as const,\r\n transition: { component: EvMenuTransition },\r\n }),\r\n },\r\n \"EvMenu\",\r\n);\r\n","import { computed, Ref } from \"vue\";\r\nimport { Browser, isString } from \"../util\";\r\n\r\nexport type TeleportTarget = boolean | string | Element;\r\n\r\n/**\r\n * # Use Teleport\r\n *\r\n * `target` where we want to teleport to.\r\n * `container` MUST be a CSS class selector (defaults to '.ev-teleport').\r\n *\r\n * @param target\r\n * @param container\r\n */\r\nexport function useTeleport(\r\n target: Ref<TeleportTarget>,\r\n container: string = \".ev-teleport\",\r\n) {\r\n return computed(() => {\r\n const targetValue = target.value;\r\n if (targetValue === true || !Browser.hasWindow) {\r\n return null;\r\n }\r\n\r\n let targetElement: HTMLElement | null;\r\n if (targetValue instanceof Element) {\r\n targetElement = targetValue as HTMLElement;\r\n } else if (isString(targetValue)) {\r\n targetElement = document.querySelector(targetValue);\r\n } else {\r\n targetElement = document.body;\r\n }\r\n if (!targetElement) {\r\n console.warn(\r\n `useTeleport() unable to resolve target \"${targetValue}\"`,\r\n );\r\n }\r\n\r\n let containerElement = targetElement?.querySelector(\r\n `:scope > ${container}`,\r\n );\r\n if (!containerElement) {\r\n containerElement = document.createElement(\"div\");\r\n containerElement.className = container.substring(1);\r\n targetElement!.appendChild(containerElement);\r\n }\r\n return containerElement;\r\n });\r\n}\r\n","import {\n ComponentInternalInstance,\n computed,\n inject,\n InjectionKey,\n onScopeDispose,\n provide,\n reactive,\n readonly,\n Ref,\n shallowRef,\n toRaw,\n watchEffect,\n} from \"vue\";\nimport { getCurrentComponent } from \"@/util\";\nimport { useToggleScope } from \"./toggleScope\";\n\ninterface StackProvide {\n activeChildren: Set<number>;\n}\n\nconst StackSymbol: InjectionKey<StackProvide> = Symbol.for(\"ev:stack\");\n\ntype StackEntry = [componentId: number, zIndex: number];\n\nconst globalStack = reactive<StackEntry[]>([]);\n\nexport function getComponentIndex(\n component: ComponentInternalInstance,\n): number {\n return toRaw(globalStack).findIndex((stackEntry) => {\n return stackEntry[0] === component.uid;\n });\n}\n\nexport function getLastZIndex(): number | undefined {\n return globalStack.at(-1)?.[1];\n}\n\nexport function getNextZIndex(fallback: number): number {\n const lastZIndex = getLastZIndex();\n return lastZIndex ? lastZIndex + 10 : fallback;\n}\n\nexport function isTopComponent(component: ComponentInternalInstance): boolean {\n return globalStack.at(-1)?.[0] === component.uid;\n}\n\n/**\n * # Use Stack\n * @param isActive\n * @param zIndex\n * @param isDisableGlobalStack\n */\nexport function useStack(\n isActive: Readonly<Ref<boolean>>,\n zIndex: Readonly<Ref<string | number>>,\n isDisableGlobalStack: boolean,\n) {\n const component = getCurrentComponent(\"useStack\");\n const isCreateStackEntry = !isDisableGlobalStack;\n const parentStack = inject(StackSymbol, undefined);\n const stack: StackProvide = reactive({\n activeChildren: new Set<number>(),\n });\n provide(StackSymbol, stack);\n\n const zIndexRef = shallowRef(+zIndex.value);\n useToggleScope(isActive, () => {\n zIndexRef.value = getNextZIndex(+zIndex.value);\n if (isCreateStackEntry) {\n globalStack.push([component.uid, zIndexRef.value]);\n }\n parentStack?.activeChildren.add(component.uid);\n onScopeDispose(() => {\n if (isCreateStackEntry) {\n globalStack.splice(getComponentIndex(component), 1);\n }\n parentStack?.activeChildren.delete(component.uid);\n });\n });\n\n const isTopGlobal = shallowRef(true);\n if (isCreateStackEntry) {\n watchEffect(() => {\n const isTop = isTopComponent(component);\n setTimeout(() => (isTopGlobal.value = isTop));\n });\n }\n\n const isTopLocal = computed(() => !stack.activeChildren.size);\n\n return {\n isTopGlobal: readonly(isTopGlobal),\n isTopLocal: isTopLocal,\n stackStyles: computed(() => ({ zIndex: zIndexRef.value })),\n };\n}\n","import { getCurrentComponent } from \"../util\";\n\nexport function useScopeId() {\n const component = getCurrentComponent(\"useScopeId\");\n const scopeId = component!.vnode.scopeId;\n return {\n scopeId: scopeId ? { [scopeId]: \"\" } : undefined,\n };\n}\n","<script setup lang=\"ts\">\r\n/**\r\n * # EvOverlay\r\n */\r\nimport \"./EvOverlay.scss\";\r\nimport { makeEvOverlayProps } from \"./EvOverlay\";\r\nimport { useModelProxy } from \"@/composables/modelProxy\";\r\nimport {\r\n computed,\r\n mergeProps,\r\n ref,\r\n shallowRef,\r\n toRef,\r\n useAttrs,\r\n watch,\r\n} from \"vue\";\r\nimport { useTeleport } from \"@/composables/teleport\";\r\nimport { useEvTransition, EvTransition } from \"@/components/EvTransition\";\r\nimport { useDimensions } from \"@/composables/dimensions\";\r\nimport { clickBlockedAnimation, getScrollParent, toWebUnit } from \"@/util\";\r\nimport { useStack } from \"@/composables/stack\";\r\nimport { useRouter } from \"vue-router\";\r\nimport { useToggleScope } from \"@/composables/toggleScope\";\r\nimport { useBackButton } from \"@/composables/router\";\r\nimport { ActivatorProps, useActivator } from \"./activator\";\r\nimport { useScopeId } from \"@/composables/scopeId\";\r\nimport { usePositionStrategies } from \"./position\";\r\nimport { useScrollStrategies } from \"./scroll\";\r\nimport { useRtl } from \"@/composables/locale\";\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n});\r\n\r\n// Emit\r\nconst emit = defineEmits([\r\n \"click:outside\",\r\n \"update:modelValue\",\r\n \"enter\",\r\n \"afterEnter\",\r\n \"beforeLeave\",\r\n \"leave\",\r\n \"afterLeave\",\r\n]);\r\n\r\nconst props = defineProps({\r\n disableGlobalStack: Boolean,\r\n ...makeEvOverlayProps(),\r\n});\r\nconst attrs = useAttrs();\r\nconst slots = defineSlots<{\r\n activator(props: { isActive: boolean; props: any }): any;\r\n default(): never;\r\n pointer(): never;\r\n}>();\r\nconst router = useRouter();\r\nconst model = useModelProxy(props, \"modelValue\");\r\nconst containerEl = ref<HTMLElement | undefined>(undefined);\r\nconst contentEl = ref<HTMLElement | undefined>(undefined);\r\nconst pointerEl = ref<HTMLElement | undefined>(undefined);\r\nconst contentTransition = useEvTransition(props);\r\nconst dimensions = useDimensions(props);\r\nconst { scopeId } = useScopeId();\r\nconst isActiveContent = computed({\r\n get: () => model.value,\r\n set: (value) => {\r\n if (!(value && props.disabled)) {\r\n model.value = value;\r\n }\r\n },\r\n});\r\nconst { isTopGlobal, isTopLocal, stackStyles } = useStack(\r\n isActiveContent,\r\n toRef(props, \"zIndex\"),\r\n props.disableGlobalStack,\r\n);\r\nconst {\r\n activatorEl,\r\n activatorRef,\r\n activatorEvents,\r\n contentEvents,\r\n veilEvents,\r\n} = useActivator(props as ActivatorProps, isActiveContent, isTopLocal);\r\nconst teleportTarget = useTeleport(\r\n computed(() => {\r\n return props.attach || props.contained;\r\n }),\r\n);\r\nconst { rtlClasses, isRtl } = useRtl();\r\n\r\nconst { contentStyles, updatePosition, pointerStyles } = usePositionStrategies(\r\n props,\r\n {\r\n isRtl,\r\n contentEl,\r\n activatorEl,\r\n pointerEl,\r\n isActive: isActiveContent,\r\n },\r\n);\r\n\r\nuseScrollStrategies(props, {\r\n containerEl,\r\n contentEl,\r\n activatorEl,\r\n isActive: isActiveContent,\r\n updatePosition,\r\n});\r\n\r\n/**\r\n * What should parent components have access to?\r\n */\r\ndefineExpose({\r\n activatorEl,\r\n contentEl,\r\n isTopGlobal,\r\n isTopLocal,\r\n updatePosition,\r\n});\r\n\r\n/**\r\n * When disabled, update the model value via the isActive computed prop\r\n */\r\nwatch(\r\n () => props.disabled,\r\n (value) => {\r\n if (value) {\r\n isActiveContent.value = false;\r\n }\r\n },\r\n);\r\n\r\n/**\r\n * The veil transitions into view at the same time as the content,\r\n * but only if it is enabled by `props.veil`.\r\n */\r\nconst isActiveVeil = computed(() => {\r\n return isActiveContent.value && !!props.veil;\r\n});\r\n\r\n/**\r\n * `isActive` relates to the content of the overlay.\r\n * To have nice transitions we need to track active containment.\r\n * `isActiveTeleport` follows `isActive`, which means it activates at the same time,\r\n * but only disables when the content is removed by the transition (@after-leave).\r\n * @see onAfterLeave\r\n */\r\nconst isActiveTeleport = shallowRef(false);\r\nwatch(isActiveContent, () => {\r\n isActiveTeleport.value = true;\r\n});\r\n\r\n/**\r\n * ## Click Outside Condition\r\n * Allows or denies the click outside event to trigger.\r\n */\r\nfunction clickOutsideCondition(): boolean {\r\n return isActiveContent.value && isTopGlobal.value;\r\n}\r\n\r\n/**\r\n * ## Dismiss\r\n * @param focusActivator\r\n */\r\nfunction dismiss(focusActivator: boolean = false) {\r\n if (props.persistent) {\r\n // Let's let the user know they can't dismiss the overlay this way\r\n // @todo: option to prevent shake\r\n clickBlockedAnimation(contentEl.value);\r\n return;\r\n }\r\n isActiveContent.value = false;\r\n if (focusActivator && contentEl.value?.contains(document.activeElement)) {\r\n activatorEl.value?.focus();\r\n }\r\n}\r\n\r\n/**\r\n * Event Listeners\r\n */\r\nfunction onEnter(el: HTMLElement) {\r\n // Attempts to resolve double triggering possibly caused by `appear`.\r\n if (!el.dataset.enter) {\r\n el.dataset.enter = \"true\";\r\n return;\r\n }\r\n emit(\"enter\");\r\n}\r\nfunction onAfterEnter(el: HTMLElement) {\r\n // Attempts to resolve double triggering possibly caused by `appear`.\r\n if (!el.dataset.afterEnter) {\r\n el.dataset.afterEnter = \"true\";\r\n return;\r\n }\r\n emit(\"afterEnter\");\r\n}\r\nfunction onBeforeLeave() {\r\n emit(\"beforeLeave\");\r\n}\r\nfunction onLeave() {\r\n emit(\"leave\");\r\n}\r\nfunction onAfterLeave() {\r\n isActiveTeleport.value = false;\r\n emit(\"afterLeave\");\r\n}\r\n\r\nconst clickOutsideDirectiveArgs = {\r\n handler: onClickOutside,\r\n condition: clickOutsideCondition,\r\n include: () => [activatorEl.value],\r\n};\r\n\r\nfunction onClickOutside(e: MouseEvent) {\r\n emit(\"click:outside\", e);\r\n dismiss(false);\r\n}\r\n\r\nfunction onKeydown(e: KeyboardEvent) {\r\n if (e.key === \"Escape\" && isTopGlobal.value) {\r\n dismiss(true);\r\n }\r\n}\r\n// Listen for keydown events only when the content is active\r\nwatch(\r\n isActiveContent,\r\n (active) => {\r\n if (active) {\r\n window.addEventListener(\"keydown\", onKeydown);\r\n } else {\r\n window.removeEventListener(\"keydown\", onKeydown);\r\n }\r\n },\r\n { immediate: true },\r\n);\r\n\r\n/**\r\n * Integrate with Back button for single page apps.\r\n */\r\nuseToggleScope(\r\n () => props.closeOnBack,\r\n () => {\r\n useBackButton(router, (next) => {\r\n if (isTopGlobal.value && isActiveContent.value) {\r\n next(false);\r\n dismiss(false);\r\n } else {\r\n next();\r\n }\r\n });\r\n },\r\n);\r\n\r\n/**\r\n * Calculate the `top` position\r\n */\r\nconst top = ref<number>();\r\nwatch(\r\n () =>\r\n isActiveContent.value &&\r\n (props.absolute || props.contained) &&\r\n teleportTarget.value == null,\r\n (value) => {\r\n if (value) {\r\n const scrollParent = getScrollParent(containerEl.value);\r\n if (scrollParent && scrollParent !== document.scrollingElement) {\r\n top.value = scrollParent.scrollTop;\r\n }\r\n }\r\n },\r\n);\r\n\r\n/**\r\n * Dynamically create a local component we can render using:\r\n * `<activator-slot>` or `<component :is=\"activatorSlot\" />`\r\n */\r\nconst activatorSlot = () => {\r\n return slots.activator?.({\r\n isActive: isActiveContent.value,\r\n props: mergeProps(\r\n { ref: activatorRef },\r\n activatorEvents.value,\r\n props.activatorProps,\r\n ),\r\n });\r\n};\r\n\r\nconst contentAttributes = mergeProps(contentEvents.value, props.contentProps);\r\nconst overlayAttributes = {\r\n ...scopeId,\r\n ...attrs,\r\n};\r\n</script>\r\n\r\n<template>\r\n <activator-slot />\r\n\r\n <teleport\r\n v-if=\"isActiveTeleport\"\r\n :disabled=\"!teleportTarget\"\r\n :to=\"teleportTarget\">\r\n <div\r\n ref=\"containerEl\"\r\n :class=\"[\r\n 'ev-overlay',\r\n {\r\n 'is-active': isActiveContent,\r\n },\r\n rtlClasses,\r\n props.class,\r\n ]\"\r\n :style=\"[\r\n stackStyles,\r\n {\r\n top: toWebUnit(top),\r\n },\r\n props.style,\r\n ]\"\r\n v-bind=\"overlayAttributes\">\r\n <transition appear name=\"transition-fade\">\r\n <div\r\n v-if=\"isActiveVeil\"\r\n class=\"ev-overlay--veil\"\r\n v-bind=\"veilEvents\"></div>\r\n </transition>\r\n\r\n <ev-transition\r\n appear\r\n :transition=\"contentTransition\"\r\n :target=\"activatorEl\"\r\n @enter=\"onEnter\"\r\n @after-enter=\"onAfterEnter\"\r\n @before-leave=\"onBeforeLeave\"\r\n @leave=\"onLeave\"\r\n @after-leave=\"onAfterLeave\">\r\n <div\r\n v-show=\"isActiveContent\"\r\n ref=\"contentEl\"\r\n v-click-outside=\"clickOutsideDirectiveArgs\"\r\n class=\"ev-overlay--content\"\r\n :class=\"[props.contentClass]\"\r\n :style=\"[dimensions, contentStyles]\"\r\n v-bind=\"contentAttributes\">\r\n <div\r\n v-if=\"slots.pointer && !props.veil\"\r\n ref=\"pointerEl\"\r\n class=\"ev-overlay--pointer\"\r\n :style=\"[pointerStyles]\">\r\n <slot name=\"pointer\" />\r\n </div>\r\n <slot />\r\n </div>\r\n </ev-transition>\r\n </div>\r\n </teleport>\r\n</template>\r\n","<script setup lang=\"ts\">\n/**\n * # EvMenu\n */\nimport \"./EvMenu.scss\";\nimport { makeEvMenuProps } from \"./EvMenu\";\nimport { EvOverlay } from \"@/components/EvOverlay\";\nimport {\n computed,\n inject,\n mergeProps,\n provide,\n ref,\n shallowRef,\n watch,\n} from \"vue\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { filterComponentProps, focusChild, getNextId } from \"@/util\";\nimport { EvMenuSymbol } from \"./shared\";\n\nconst props = defineProps({\n ...makeEvMenuProps(),\n});\nconst slots = defineSlots<{\n activator(props: { isActive: boolean; props: any }): never;\n default(): never;\n}>();\nconst isActive = useModelProxy(props, \"modelValue\");\nconst uid = getNextId();\nconst id = computed(() => {\n return props.id || `ev-menu-${uid}`;\n});\nconst overlay = ref<typeof EvOverlay>();\nconst parent = inject(EvMenuSymbol, null);\nconst openChildren = shallowRef(0);\n\nprovide(EvMenuSymbol, {\n register() {\n ++openChildren.value;\n },\n unregister() {\n --openChildren.value;\n },\n closeParents() {\n setTimeout(() => {\n if (!openChildren.value) {\n isActive.value = false;\n parent?.closeParents();\n }\n }, 40);\n },\n});\n\nwatch(isActive, (value) => {\n return value ? parent?.register() : parent?.unregister();\n});\n\nfunction onClickOutside() {\n parent?.closeParents();\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (props.disabled) {\n return;\n }\n if (e.key === \"Tab\") {\n isActive.value = false;\n overlay.value?.activatorEl?.focus();\n }\n}\n\n/**\n * ## On Activator Keydown\n *\n * @param e\n */\nfunction onActivatorKeydown(e: KeyboardEvent) {\n if (props.disabled) {\n return;\n }\n const el = overlay.value?.contentEl;\n if (el && isActive.value) {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n focusChild(el, \"next\");\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n focusChild(el, \"previous\");\n }\n } else if ([\"ArrowDown\", \"ArrowUp\"].includes(e.key)) {\n isActive.value = true;\n e.preventDefault();\n setTimeout(() => setTimeout(() => onActivatorKeydown(e)));\n }\n}\n\n/**\n * ## Activator Props\n *\n * Manipulate the activator props to include the keydown event listener\n * and ARIA attributes for accessibility.\n */\nconst activatorProps = computed(() => {\n return mergeProps(\n {\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": String(isActive.value),\n \"aria-owns\": id.value,\n onKeydown: onActivatorKeydown,\n },\n props.activatorProps,\n );\n});\n\n/**\n * ## Expose aspects of EvMenu to parent components\n */\ndefineExpose({\n id,\n openChildren,\n});\n\nconst overlayProps = computed(() => filterComponentProps(EvOverlay, props));\n</script>\n\n<template>\n <ev-overlay\n ref=\"overlay\"\n v-model=\"isActive\"\n v-bind=\"overlayProps\"\n :class=\"['ev-menu', props.class]\"\n :style=\"props.style\"\n :activator-props=\"activatorProps\"\n @click:outside=\"onClickOutside\"\n @keydown=\"onKeydown\">\n <template v-if=\"slots.activator\" #activator=\"{ isActive, props }\">\n <slot name=\"activator\" :is-active=\"isActive\" :props=\"props\" />\n </template>\n <template #default>\n <slot name=\"default\" />\n </template>\n </ev-overlay>\n</template>\n","import { InjectionKey, PropType } from \"vue\";\nimport { GroupProvide, makeGroupProps } from \"@/composables/group\";\nimport { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport { IconProp } from \"@/composables/icons\";\nimport { VisibilityRuleProp } from \"@/composables/display\";\n\nexport const EvSlideGroupSymbol: InjectionKey<GroupProvide> =\n Symbol.for(\"ev:slide-group\");\n\nexport interface SlideGroupSlot {\n next: GroupProvide[\"next\"];\n previous: GroupProvide[\"previous\"];\n select: GroupProvide[\"select\"];\n isSelected: GroupProvide[\"isSelected\"];\n}\n\nexport type EvSlideGroupSlot = {\n default: SlideGroupSlot;\n previous: SlideGroupSlot;\n next: SlideGroupSlot;\n};\n\nexport const makeEvSlideGroupProps = propsFactory(\n {\n arrowsAlign: {\n type: String as PropType<\"start\" | \"end\" | \"around\">,\n default: \"around\",\n },\n arrowsHidden: [Boolean, String, Array] as PropType<VisibilityRuleProp>,\n centerActive: Boolean,\n direction: {\n type: String as PropType<\"horizontal\" | \"vertical\">,\n default: \"horizontal\",\n },\n iconNext: IconProp,\n iconPrevious: IconProp,\n symbol: {\n type: null,\n default: EvSlideGroupSymbol,\n },\n\n ...makeComponentProps(),\n ...makeTagProps(),\n ...makeGroupProps({\n selectedClass: \"is-active\",\n }),\n },\n \"EvSlideGroup\",\n);\n","import { onBeforeUnmount, readonly, ref, watch } from \"vue\";\nimport type { DeepReadonly, Ref } from \"vue\";\nimport { Browser, refElement } from \"../util\";\n\ninterface ResizeState {\n resizeRef: Ref<HTMLElement | undefined>;\n contentRect: DeepReadonly<Ref<DOMRectReadOnly | undefined>>;\n}\n\n/**\n * # Resize Observer\n * @param callback\n * @param box\n */\nexport function useResizeObserver(\n callback?: ResizeObserverCallback,\n box: \"content\" | \"border\" = \"content\",\n): ResizeState {\n const resizeRef = ref<HTMLElement>();\n const contentRect = ref<DOMRectReadOnly>();\n\n if (Browser.hasWindow) {\n const observer = new ResizeObserver(\n (entries: ResizeObserverEntry[]) => {\n callback?.(entries, observer);\n if (!entries.length) {\n return;\n }\n if (box === \"content\") {\n contentRect.value = entries[0].contentRect;\n } else {\n contentRect.value =\n entries[0].target.getBoundingClientRect();\n }\n },\n );\n\n onBeforeUnmount(() => {\n observer.disconnect();\n });\n\n watch(\n resizeRef,\n (newValue, oldValue) => {\n if (oldValue) {\n observer.unobserve(refElement(oldValue));\n contentRect.value = undefined;\n }\n\n if (newValue) {\n observer.observe(refElement(newValue));\n }\n },\n {\n flush: \"post\",\n },\n );\n }\n\n return {\n resizeRef,\n contentRect: readonly(contentRect),\n };\n}\n","/**\n * # bias\n *\n * @param val\n */\nexport function bias(val: number) {\n const c = 0.501;\n const x = Math.abs(val);\n return Math.sign(val) * (x / ((1 / c - 2) * (1 - x) + 1));\n}\n\n/**\n * # calculateUpdatedOffset\n *\n * @param selectedElement\n * @param containerSize\n * @param contentSize\n * @param isRtl\n * @param currentScrollOffset\n * @param isHorizontal\n */\nexport function calculateUpdatedOffset({\n selectedElement,\n containerSize,\n contentSize,\n isRtl,\n currentScrollOffset,\n isHorizontal,\n}: {\n selectedElement: HTMLElement;\n containerSize: number;\n contentSize: number;\n isRtl: boolean;\n currentScrollOffset: number;\n isHorizontal: boolean;\n}): number {\n const clientSize = isHorizontal\n ? selectedElement.clientWidth\n : selectedElement.clientHeight;\n const offsetStart = isHorizontal\n ? selectedElement.offsetLeft\n : selectedElement.offsetTop;\n const adjustedOffsetStart =\n isRtl && isHorizontal\n ? contentSize - offsetStart - clientSize\n : offsetStart;\n\n const totalSize = containerSize + currentScrollOffset;\n const itemOffset = clientSize + adjustedOffsetStart;\n const additionalOffset = clientSize * 0.4; // @todo: why 0.4?\n\n if (adjustedOffsetStart <= currentScrollOffset) {\n currentScrollOffset = Math.max(\n adjustedOffsetStart - additionalOffset,\n 0,\n );\n } else if (totalSize <= itemOffset) {\n currentScrollOffset = Math.min(\n currentScrollOffset - (totalSize - itemOffset - additionalOffset),\n contentSize - containerSize,\n );\n }\n\n return currentScrollOffset;\n}\n\n/**\n * # calculateCenteredOffset\n *\n * @param selectedElement\n * @param containerSize\n * @param contentSize\n * @param isRtl\n * @param isHorizontal\n */\nexport function calculateCenteredOffset({\n selectedElement,\n containerSize,\n contentSize,\n isRtl,\n isHorizontal,\n}: {\n selectedElement: HTMLElement;\n containerSize: number;\n contentSize: number;\n isRtl: boolean;\n isHorizontal: boolean;\n}): number {\n const clientSize = isHorizontal\n ? selectedElement.clientWidth\n : selectedElement.clientHeight;\n const offsetStart = isHorizontal\n ? selectedElement.offsetLeft\n : selectedElement.offsetTop;\n\n const offsetCentered =\n isRtl && isHorizontal\n ? contentSize - offsetStart - clientSize / 2 - containerSize / 2\n : offsetStart + clientSize / 2 - containerSize / 2;\n\n return Math.min(contentSize - containerSize, Math.max(0, offsetCentered));\n}\n","<script setup lang=\"ts\">\n/**\n * # EvSlideGroup\n */\nimport \"./EvSlideGroup.scss\";\nimport { makeEvSlideGroupProps, EvSlideGroupSlot } from \"./EvSlideGroup\";\nimport { EvButton } from \"@/components/EvButton\";\nimport { useDisplayRuleClasses } from \"@/composables/display\";\nimport { computed, shallowRef, watch } from \"vue\";\nimport { Browser, clamp, focusableChildren, isBoolean } from \"@/util\";\nimport { GroupProps, useGroup } from \"@/composables/group\";\nimport { useResizeObserver } from \"@/composables/resizeObserver\";\nimport {\n bias,\n calculateCenteredOffset,\n calculateUpdatedOffset,\n} from \"@/components/EvSlideGroup/helpers\";\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n ChevronUpIcon,\n} from \"@/icons\";\nimport { useRtl } from \"@/composables/locale\";\n\ndefineSlots<EvSlideGroupSlot>();\n\nconst props = defineProps({\n ...makeEvSlideGroupProps(),\n});\nconst group = useGroup(props as any as GroupProps, props.symbol);\nconst { isRtl } = useRtl();\nconst isFocused = shallowRef(false);\nconst isOverflowing = shallowRef(false);\nconst scrollOffset = shallowRef(0);\nconst containerSize = shallowRef(0);\nconst contentSize = shallowRef(0);\nconst isHorizontal = computed(() => props.direction === \"horizontal\");\nconst disableTransition = shallowRef(false);\n\nconst { resizeRef: containerRef, contentRect: containerRect } =\n useResizeObserver();\nconst { resizeRef: contentRef, contentRect } = useResizeObserver();\n\nconst firstSelectedIndex = computed(() => {\n if (!group.selected.value.length) {\n return -1;\n }\n return group.items.value.findIndex(\n (item) => item.id === group.selected.value[0],\n );\n});\n\nconst lastSelectedIndex = computed(() => {\n if (!group.selected.value.length) {\n return -1;\n }\n return group.items.value.findIndex(\n (item) =>\n item.id === group.selected.value[group.selected.value.length - 1],\n );\n});\n\nif (Browser.hasWindow) {\n let frame = -1;\n watch(\n () => [\n group.selected.value,\n containerRect.value,\n contentRect.value,\n isHorizontal.value,\n ],\n () => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => {\n if (containerRect.value && contentRect.value) {\n const sizeProperty = isHorizontal.value\n ? \"width\"\n : \"height\";\n containerSize.value = containerRect.value[sizeProperty];\n contentSize.value = contentRect.value[sizeProperty];\n isOverflowing.value =\n containerSize.value + 1 < contentSize.value;\n }\n\n if (firstSelectedIndex.value >= 0 && contentRef.value) {\n // @todo: Is this too naive? Should we store element references in group composable?\n const selectedElement = contentRef.value.children[\n lastSelectedIndex.value\n ] as HTMLElement;\n\n if (\n firstSelectedIndex.value === 0 ||\n !isOverflowing.value\n ) {\n scrollOffset.value = 0;\n } else if (props.centerActive) {\n scrollOffset.value = calculateCenteredOffset({\n selectedElement,\n containerSize: containerSize.value,\n contentSize: contentSize.value,\n isRtl: isRtl.value,\n isHorizontal: isHorizontal.value,\n });\n } else if (isOverflowing.value) {\n scrollOffset.value = calculateUpdatedOffset({\n selectedElement,\n containerSize: containerSize.value,\n contentSize: contentSize.value,\n isRtl: isRtl.value,\n currentScrollOffset: scrollOffset.value,\n isHorizontal: isHorizontal.value,\n });\n }\n }\n });\n },\n );\n}\n\n/**\n * ## focus\n * @param location\n */\nfunction focus(location?: \"next\" | \"previous\" | \"first\" | \"last\") {\n if (!contentRef.value) {\n return;\n }\n if (!location) {\n const focusable = focusableChildren(contentRef.value);\n focusable[0]?.focus();\n } else if (location === \"next\") {\n const el = contentRef.value.querySelector(\":focus\")\n ?.nextElementSibling as HTMLElement | undefined;\n if (el) {\n el.focus();\n } else {\n focus(\"first\");\n }\n } else if (location === \"previous\") {\n const el = contentRef.value.querySelector(\":focus\")\n ?.previousElementSibling as HTMLElement | undefined;\n if (el) {\n el.focus();\n } else {\n focus(\"last\");\n }\n } else if (location === \"first\") {\n (contentRef.value.firstElementChild as HTMLElement)?.focus();\n } else if (location === \"last\") {\n (contentRef.value.lastElementChild as HTMLElement)?.focus();\n }\n}\n\n/**\n * ## onFocus\n * @param e\n */\nfunction onFocus(e: FocusEvent) {\n if (\n !isFocused.value &&\n !(\n e.relatedTarget &&\n contentRef.value?.contains(e.relatedTarget as Node)\n )\n ) {\n focus();\n }\n}\n\n/**\n * ## onFocusin\n * @param e\n */\nfunction onFocusin(e: FocusEvent) {\n isFocused.value = true;\n\n if (!isOverflowing.value || !contentRef.value) {\n return;\n }\n\n // Focused element is likely to be the root of an item, so a\n // breadth-first search will probably find it in the first iteration\n for (const el of e.composedPath()) {\n for (const item of contentRef.value.children) {\n if (item === el) {\n scrollOffset.value = calculateUpdatedOffset({\n selectedElement: item as HTMLElement,\n containerSize: containerSize.value,\n contentSize: contentSize.value,\n isRtl: isRtl.value,\n currentScrollOffset: scrollOffset.value,\n isHorizontal: isHorizontal.value,\n });\n return;\n }\n }\n }\n}\n\n/**\n * ## onFocusout\n * @param e\n */\nfunction onFocusout(e: FocusEvent) {\n isFocused.value = false;\n}\n\n/**\n * ## onKeydown\n * @param e\n */\nfunction onKeydown(e: KeyboardEvent) {\n if (!contentRef.value) {\n return;\n }\n if (isHorizontal.value) {\n if (e.key === \"ArrowRight\") {\n focus(isRtl.value ? \"previous\" : \"next\");\n } else if (e.key === \"ArrowLeft\") {\n focus(isRtl.value ? \"next\" : \"previous\");\n }\n } else {\n if (e.key === \"ArrowDown\") {\n focus(\"next\");\n } else if (e.key === \"ArrowUp\") {\n focus(\"previous\");\n }\n }\n if (e.key === \"Home\") {\n focus(\"first\");\n } else if (e.key === \"End\") {\n focus(\"last\");\n }\n}\n\n/**\n * ## onScroll\n */\nfunction onScroll() {\n if (!containerRef.value) {\n return;\n }\n containerRef.value[isHorizontal.value ? \"scrollLeft\" : \"scrollTop\"] = 0;\n}\n\nlet startTouch = 0;\nlet startOffset = 0;\n\n/**\n * ## onTouchstart\n * @param e\n */\nfunction onTouchstart(e: TouchEvent) {\n const sizeProperty = isHorizontal.value ? \"clientX\" : \"clientY\";\n const sign = isRtl.value && isHorizontal.value ? -1 : 1;\n startOffset = sign * scrollOffset.value;\n startTouch = e.touches[0][sizeProperty];\n disableTransition.value = true;\n}\n\n/**\n * ## onTouchmove\n * @param e\n */\nfunction onTouchmove(e: TouchEvent) {\n if (!isOverflowing.value) {\n return;\n }\n const sizeProperty = isHorizontal.value ? \"clientX\" : \"clientY\";\n const sign = isRtl.value && isHorizontal.value ? -1 : 1;\n scrollOffset.value =\n sign * (startOffset + startTouch - e.touches[0][sizeProperty]);\n}\n\n/**\n * # onTouchend\n * @param e\n */\nfunction onTouchend(e: TouchEvent) {\n const maxScrollOffset = contentSize.value - containerSize.value;\n if (scrollOffset.value < 0 || !isOverflowing.value) {\n scrollOffset.value = 0;\n } else if (scrollOffset.value >= maxScrollOffset) {\n scrollOffset.value = maxScrollOffset;\n }\n disableTransition.value = false;\n}\n\n/**\n * ## scrollTo\n * @param location\n */\nfunction scrollTo(location: \"previous\" | \"next\") {\n const newAbsoluteOffset =\n scrollOffset.value +\n (location === \"previous\" ? -1 : 1) * containerSize.value;\n scrollOffset.value = clamp(\n newAbsoluteOffset,\n 0,\n contentSize.value - containerSize.value,\n );\n}\n\n/**\n * Arrows Hidden\n */\nconst arrowsHiddenClasses = useDisplayRuleClasses(\n props,\n \"arrowsHidden\",\n \"hidden\",\n);\nconst arrowsHiddenAttribute = computed(() => {\n return isBoolean(props.arrowsHidden) && props.arrowsHidden;\n});\n\nconst contentStyles = computed(() => {\n // This adds friction when scrolling the 'wrong' way when at max offset\n let scrollAmount =\n scrollOffset.value > contentSize.value - containerSize.value\n ? -(contentSize.value - containerSize.value) +\n bias(contentSize.value - containerSize.value - scrollOffset.value)\n : -scrollOffset.value;\n\n // This adds friction when scrolling the 'wrong' way when at min offset\n if (scrollOffset.value <= 0) {\n scrollAmount = bias(-scrollOffset.value);\n }\n\n const sign = isRtl.value && isHorizontal.value ? -1 : 1;\n return {\n transform: `translate${isHorizontal.value ? \"X\" : \"Y\"}(${sign * scrollAmount}px)`,\n transition: disableTransition.value ? \"none\" : \"\",\n willChange: disableTransition.value ? \"transform\" : \"\",\n };\n});\n\nconst slotProps = computed(() => ({\n next: group.next,\n previous: group.previous,\n select: group.select,\n isSelected: group.isSelected,\n}));\n\nconst hasPrevious = computed(() => {\n return Math.abs(scrollOffset.value) > 0;\n});\n\nconst hasNext = computed(() => {\n // Check one scroll ahead to know the width of right-most item\n return (\n contentSize.value > Math.abs(scrollOffset.value) + containerSize.value\n );\n});\n\nconst hasAffix = computed(() => {\n if (isBoolean(props.arrowsHidden) && props.arrowsHidden) {\n return false;\n }\n return isOverflowing.value || Math.abs(scrollOffset.value) > 0;\n});\n\nconst arrowsAlignClass = computed(() => {\n return `is-arrows-${props.arrowsAlign}`;\n});\n\nconst iconNext = computed(() => {\n if (props.iconNext) {\n return props.iconNext;\n }\n return isHorizontal.value ? ChevronRightIcon : ChevronDownIcon;\n});\n\nconst iconPrevious = computed(() => {\n if (props.iconPrevious) {\n return props.iconPrevious;\n }\n return isHorizontal.value ? ChevronLeftIcon : ChevronUpIcon;\n});\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n :class=\"[\n 'ev-slide-group',\n {\n 'is-overflowing': isOverflowing,\n 'is-vertical': !isHorizontal,\n },\n arrowsAlignClass,\n props.class,\n ]\"\n :style=\"props.style\"\n :tabindex=\"isFocused || group.selected.value.length ? -1 : 0\"\n @focus=\"onFocus\">\n <div\n key=\"container\"\n ref=\"containerRef\"\n class=\"ev-slide-group--container\"\n @scroll=\"onScroll\">\n <div\n ref=\"contentRef\"\n class=\"ev-slide-group--content\"\n :style=\"contentStyles\"\n @touchstart.passive=\"onTouchstart\"\n @touchmove.passive=\"onTouchmove\"\n @touchend.passive=\"onTouchend\"\n @focusin=\"onFocusin\"\n @focusout=\"onFocusout\"\n @keydown=\"onKeydown\">\n <slot name=\"default\" v-bind=\"slotProps\" />\n </div>\n </div>\n\n <div\n v-if=\"hasAffix\"\n key=\"previous\"\n :class=\"[\n 'ev-slide-group--previous',\n { 'is-disabled': !hasPrevious },\n ...arrowsHiddenClasses,\n ]\"\n :hidden=\"arrowsHiddenAttribute\"\n @click=\"() => scrollTo('previous')\">\n <slot name=\"previous\">\n <ev-button\n :icon=\"isRtl && isHorizontal ? iconNext : iconPrevious\"\n variant=\"subtle\" />\n </slot>\n </div>\n\n <div\n v-if=\"hasAffix\"\n key=\"next\"\n :class=\"[\n 'ev-slide-group--next',\n { 'is-disabled': !hasNext },\n ...arrowsHiddenClasses,\n ]\"\n :hidden=\"arrowsHiddenAttribute\"\n @click=\"() => scrollTo('next')\">\n <slot name=\"next\">\n <ev-button\n :icon=\"isRtl && isHorizontal ? iconPrevious : iconNext\"\n variant=\"subtle\" />\n </slot>\n </div>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport {\n GroupItemProps,\n GroupItemProvide,\n makeGroupItemProps,\n useGroupItem,\n} from \"@/composables/groupItem.ts\";\nimport { computed, UnwrapRef } from \"vue\";\nimport { EvSlideGroupSymbol } from \"./EvSlideGroup\";\n\ntype EvSlideGroupItemSlots = {\n default: {\n isSelected: UnwrapRef<GroupItemProvide[\"isSelected\"]>;\n select: GroupItemProvide[\"select\"];\n toggle: GroupItemProvide[\"toggle\"];\n selectedClass: UnwrapRef<GroupItemProvide[\"selectedClass\"]>;\n };\n};\n\ndefineEmits([\"group:selected\"]);\n\ndefineSlots<EvSlideGroupItemSlots>();\n\nconst props = defineProps({\n ...makeGroupItemProps(),\n});\nconst slideGroupItem = useGroupItem(\n props as any as GroupItemProps,\n EvSlideGroupSymbol,\n);\nconst slotProps = computed(() => {\n return {\n isSelected: slideGroupItem!.isSelected.value,\n select: slideGroupItem!.select,\n toggle: slideGroupItem!.toggle,\n selectedClass: slideGroupItem!.selectedClass.value,\n };\n});\n</script>\n\n<template>\n <slot v-bind=\"slotProps\" />\n</template>\n","import {\r\n makeInputAppearanceProps,\r\n makeInputSizeProps,\r\n makeTextAlignProps,\r\n propsFactory,\r\n} from \"@/util\";\r\nimport { IconProp } from \"@/composables/icons\";\r\nimport { makeFormFieldProps } from \"@/composables/validation\";\r\nimport { makeComponentProps } from \"@/composables/component\";\r\nimport { makeLabelProps } from \"@/components/EvLabel\";\r\nimport { PropType } from \"vue\";\r\n\r\nexport type AutocompleteToken =\r\n | \"on\"\r\n | \"off\"\r\n\r\n // Addresses & locality\r\n | \"address-line1\"\r\n | \"address-line2\"\r\n | \"address-line3\"\r\n | \"address-level4\"\r\n | \"address-level3\"\r\n | \"address-level2\"\r\n | \"address-level1\"\r\n | \"country\" // Country code\r\n | \"country-name\"\r\n | \"language\"\r\n | \"postal-code\"\r\n | \"street-address\"\r\n\r\n // Credit cards & transactions\r\n | \"cc-additional-name\"\r\n | \"cc-family-name\"\r\n | \"cc-given-name\"\r\n | \"cc-name\"\r\n | \"cc-number\"\r\n | \"cc-exp\"\r\n | \"cc-exp-month\"\r\n | \"cc-exp-year\"\r\n | \"cc-csc\"\r\n | \"cc-type\"\r\n | \"transaction-currency\"\r\n | \"transaction-amount\"\r\n\r\n // Passwords & security\r\n | \"current-password\"\r\n | \"new-password\"\r\n | \"one-time-code\"\r\n | \"password\"\r\n\r\n // Contact information\r\n | \"bday\"\r\n | \"bday-day\"\r\n | \"bday-month\"\r\n | \"bday-year\"\r\n | \"email\"\r\n | \"family-name\"\r\n | \"given-name\"\r\n | \"honorific-prefix\"\r\n | \"honorific-suffix\"\r\n | \"impp\"\r\n | \"name\"\r\n | \"nickname\"\r\n | \"organization\"\r\n | \"organization-title\"\r\n | \"sex\"\r\n | \"url\"\r\n | \"username\"\r\n\r\n // Telephone number\r\n | \"tel\"\r\n | \"tel-area-code\"\r\n | \"tel-country\"\r\n | \"tel-country-code\"\r\n | \"tel-extension\"\r\n | \"tel-local\"\r\n | \"tel-local-prefix\"\r\n | \"tel-local-suffix\"\r\n | \"tel-national\"\r\n\r\n // Groups\r\n | \"billing\"\r\n | \"home\"\r\n | \"mobile\"\r\n | `section-${string}`\r\n | \"shipping\"\r\n | \"work\"\r\n | string;\r\n\r\n/**\r\n * # Make EvTextfield Props\r\n */\r\nexport const makeEvTextfieldProps = propsFactory(\r\n {\r\n autocomplete: String as PropType<AutocompleteToken>,\r\n autofocus: Boolean,\r\n autoselect: Boolean,\r\n clearable: Boolean,\r\n dataFormType: String,\r\n iconStart: IconProp,\r\n iconEnd: IconProp,\r\n loading: Boolean,\r\n placeholder: String,\r\n prefix: String,\r\n role: String,\r\n rounded: Boolean,\r\n suffix: String,\r\n type: {\r\n type: String,\r\n default: \"text\",\r\n },\r\n monospace: Boolean,\r\n\r\n ...makeLabelProps(),\r\n ...makeTextAlignProps(),\r\n ...makeFormFieldProps(),\r\n ...makeInputAppearanceProps(),\r\n ...makeInputSizeProps(),\r\n ...makeComponentProps(),\r\n },\r\n \"EvTextfield\",\r\n);\r\n","<script setup lang=\"ts\">\n/**\n * # EvProgress\n */\nimport \"./EvProgress.scss\";\nimport {\n appearanceModifier,\n sizeModifier,\n IntegerishPattern,\n isIntegerish,\n AppearanceProp,\n InputSizeProp,\n} from \"@/util\";\n\ninterface ProgressProps {\n appearance?: AppearanceProp;\n indeterminate?: boolean;\n percentage?: number;\n size?: InputSizeProp | number;\n}\nconst props = withDefaults(defineProps<ProgressProps>(), {\n appearance: \"default\",\n indeterminate: false,\n percentage: 0,\n size: \"medium\",\n});\n\nfunction getPercentageTranslation() {\n const percent = 0 - (100 - props.percentage);\n return `translateX(${percent}%)`;\n}\n\n/**\n * ## Get Size Class\n */\nfunction getSizeHeight() {\n return !isSizeNumeric() ? undefined : props.size + \"px\";\n}\n\nfunction isSizeNumeric(): boolean {\n return isIntegerish(props.size);\n}\n</script>\n\n<template>\n <div\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n :aria-valuenow=\"percentage\"\n class=\"ev-progress\"\n :class=\"[\n {\n 'is-indeterminate': props.indeterminate,\n },\n appearanceModifier(props.appearance, ['default']),\n sizeModifier(props.size, [IntegerishPattern]),\n ]\"\n :style=\"{\n height: getSizeHeight(),\n }\">\n <div class=\"ev-progress--track\"></div>\n <div\n v-if=\"!props.indeterminate\"\n class=\"ev-progress--bar\"\n :style=\"{\n transform: getPercentageTranslation(),\n }\"></div>\n <div v-if=\"props.indeterminate\" class=\"ev-progress--indeterminate\">\n <div\n class=\"ev-progress--bar ev-progress--indeterminate--primary\"></div>\n <div\n class=\"ev-progress--bar ev-progress--indeterminate--secondary\"></div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\r\n/**\r\n * # `<ev-textfield>`\r\n */\r\nimport \"./EvTextfield.scss\";\r\nimport { makeEvTextfieldProps } from \"./EvTextfield\";\r\nimport { computed, nextTick, ref, useAttrs } from \"vue\";\r\nimport { EvIcon, useIcon } from \"@/components/EvIcon\";\r\nimport { CancelIcon } from \"@/icons\";\r\nimport {\r\n Appearance,\r\n appearanceModifier,\r\n InputAppearance,\r\n InputSize,\r\n makeClassName,\r\n sizeModifier,\r\n splitInputAttrs,\r\n TextAlign,\r\n} from \"@/util\";\r\nimport { useAutofocus } from \"@/composables/focus\";\r\nimport { EvLabel } from \"@/components/EvLabel\";\r\nimport { EvErrors } from \"@/components/EvErrors\";\r\nimport { EvProgress } from \"@/components/EvProgress\";\r\nimport { EvProgressCircular } from \"@/components/EvProgressCircular\";\r\nimport { useFormField } from \"@/composables/validation\";\r\n\r\n/**\r\n * We want to pass attributes not defined as 'props'\r\n * to the `<input>` field, so we need to turn off `inheritAttrs`.\r\n */\r\ndefineOptions({\r\n inheritAttrs: false,\r\n});\r\n\r\n// Props & slots\r\nconst props = defineProps({\r\n ...makeEvTextfieldProps(),\r\n});\r\nconst slots = defineSlots<{\r\n label(): never;\r\n prefix(): never;\r\n default(): never;\r\n suffix(): never;\r\n}>();\r\n\r\n// Emit\r\nconst emit = defineEmits([\r\n \"click:clear\",\r\n \"click:control\",\r\n \"click:outside\",\r\n \"mousedown:control\",\r\n \"update:focused\",\r\n \"update:modelValue\",\r\n]);\r\n\r\nconst attrs = useAttrs();\r\nconst containerRef = ref<HTMLElement | null>(null);\r\nconst inputRef = ref<HTMLInputElement | null>(null);\r\nconst [containerAttrs, inputAttrs] = splitInputAttrs(attrs);\r\nconst formField = useFormField(props);\r\nconst isClearable = computed(() => {\r\n return props.clearable && !!formField.value;\r\n});\r\nconst iconStart = useIcon(props, \"iconStart\");\r\nconst iconEnd = useIcon(props, \"iconEnd\");\r\n\r\n/**\r\n * ## Get Input Element\r\n */\r\nfunction getInputElement(): HTMLInputElement | null {\r\n return inputRef.value;\r\n}\r\n\r\n/**\r\n * ## On Clearable Click\r\n * @param $event\r\n */\r\nfunction onClearableClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n nextTick(() => {\r\n formField.value = null;\r\n emit(\"click:clear\", $event);\r\n });\r\n if (!props.readonly) {\r\n getInputElement()?.focus();\r\n }\r\n}\r\n\r\n/**\r\n * ## On Clearable Mousedown\r\n * @param e\r\n */\r\nfunction onClearableMousedown(e: MouseEvent) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n}\r\n\r\n/**\r\n * ## On Focus\r\n * @param e\r\n */\r\nfunction onFocus(e?: Event) {\r\n formField.focus(e);\r\n if (props.autoselect) {\r\n getInputElement()?.select();\r\n }\r\n}\r\n\r\n/**\r\n * ## On Control Click\r\n *\r\n * When the user clicks on the textfield.\r\n *\r\n * @param e\r\n */\r\nfunction onControlClick(e: MouseEvent) {\r\n inputRef.value?.focus(e as FocusOptions);\r\n emit(\"click:control\", e);\r\n}\r\n\r\n/**\r\n * ## On Control Mousedown\r\n *\r\n * When the mousedown is triggered on the textfield.\r\n *\r\n * @param e\r\n */\r\nfunction onControlMousedown(e: MouseEvent) {\r\n emit(\"mousedown:control\", e);\r\n if (e.target === inputRef.value) {\r\n return;\r\n }\r\n onFocus();\r\n e.preventDefault();\r\n}\r\n\r\n/**\r\n * ## Directive `v-autofocus`\r\n */\r\nconst vAutofocus = useAutofocus(props);\r\n\r\n/**\r\n * ## Expose stuff\r\n */\r\ndefineExpose({\r\n field: formField,\r\n input: inputRef,\r\n focus: () => {\r\n getInputElement()?.focus();\r\n },\r\n});\r\n\r\nfunction onClickOutside(e: MouseEvent) {\r\n emit(\"click:outside\");\r\n}\r\n\r\nconst autocompleteProp = computed(() => {\r\n return props.autocomplete || \"off\";\r\n});\r\n\r\nconst dataFormTypeProp = computed(() => {\r\n return props.dataFormType || autocompleteProp.value?.toLowerCase() === \"off\"\r\n ? \"other\"\r\n : undefined;\r\n});\r\n</script>\r\n\r\n<template>\r\n <div\r\n ref=\"containerRef\"\r\n v-click-outside=\"onClickOutside\"\r\n :class=\"[\r\n 'ev-textfield',\r\n {\r\n 'is-loading': props.loading,\r\n },\r\n formField.classes,\r\n props.class,\r\n ]\"\r\n :style=\"props.style\"\r\n v-bind=\"containerAttrs\">\r\n <div\r\n v-if=\"props.label || slots.label || props.hint\"\r\n class=\"ev-textfield--label\">\r\n <ev-label\r\n :for=\"formField.id\"\r\n :title=\"props.label\"\r\n :hint=\"props.hint\">\r\n <slot name=\"label\" />\r\n </ev-label>\r\n </div>\r\n\r\n <div\r\n :class=\"[\r\n 'ev-textfield--control',\r\n {\r\n 'is-rounded': props.rounded,\r\n 'is-monospace': !!props.monospace,\r\n },\r\n appearanceModifier(props.appearance, [InputAppearance.default]),\r\n sizeModifier(props.size, [InputSize.default]),\r\n makeClassName(props.align, 'is-align', [TextAlign.default]),\r\n ]\"\r\n :role=\"props.role\"\r\n @click=\"onControlClick\"\r\n @mousedown=\"onControlMousedown\">\r\n <div v-if=\"iconStart\" class=\"ev-textfield--icon-start\">\r\n <transition name=\"fade-in-out\" mode=\"out-in\">\r\n <ev-icon v-if=\"!props.loading\" :glyph=\"iconStart\" />\r\n <ev-progress-circular\r\n v-else\r\n indeterminate\r\n :appearance=\"\r\n formField.isFocused\r\n ? Appearance.notice\r\n : Appearance.default\r\n \" />\r\n </transition>\r\n </div>\r\n <div\r\n v-if=\"props.prefix || slots.prefix\"\r\n class=\"ev-textfield--prefix\">\r\n <slot name=\"prefix\">{{ props.prefix }}</slot>\r\n </div>\r\n <div class=\"ev-textfield--input\" data-no-activator>\r\n <slot name=\"default\" />\r\n <input\r\n :id=\"formField.id\"\r\n ref=\"inputRef\"\r\n v-model=\"formField.value\"\r\n v-autofocus\r\n class=\"ev-textfield--input-native\"\r\n :type=\"props.type\"\r\n :name=\"formField.name\"\r\n :disabled=\"formField.isDisabled\"\r\n :readonly=\"formField.isReadonly\"\r\n :autofocus=\"props.autofocus\"\r\n :placeholder=\"props.placeholder\"\r\n :autocomplete=\"autocompleteProp\"\r\n :data-form-type=\"dataFormTypeProp\"\r\n v-bind=\"inputAttrs\"\r\n @focus=\"onFocus\"\r\n @blur=\"formField.blur\" />\r\n </div>\r\n <transition name=\"slide-fade\">\r\n <div v-if=\"isClearable\" class=\"ev-textfield--clearable\">\r\n <ev-icon\r\n :glyph=\"CancelIcon\"\r\n @click=\"onClearableClick\"\r\n @mousedown=\"onClearableMousedown\" />\r\n </div>\r\n </transition>\r\n <div\r\n v-if=\"props.suffix || slots.suffix\"\r\n class=\"ev-textfield--suffix\">\r\n <slot name=\"suffix\">{{ props.suffix }}</slot>\r\n </div>\r\n <div v-if=\"iconEnd\" class=\"ev-textfield--icon-end\">\r\n <ev-icon :glyph=\"iconEnd\" />\r\n </div>\r\n <div\r\n v-if=\"props.loading && !props.iconStart\"\r\n class=\"ev-textfield--loader\">\r\n <ev-progress\r\n indeterminate\r\n :appearance=\"\r\n formField.isFocused\r\n ? Appearance.notice\r\n : Appearance.default\r\n \"\r\n :size=\"2\" />\r\n </div>\r\n </div>\r\n\r\n <div v-if=\"formField.isShowErrorMessages\" class=\"ev-textfield--errors\">\r\n <ev-errors :messages=\"formField.errorMessages\" />\r\n </div>\r\n </div>\r\n</template>\r\n","import { omit, propsFactory } from \"@/util\";\nimport { makeEvOverlayProps } from \"@/components/EvOverlay\";\n\nexport const makeEvTooltipProps = propsFactory(\n {\n id: String,\n text: String,\n\n ...omit(\n makeEvOverlayProps({\n closeOnBack: false,\n position: \"top\" as const,\n positionStrategy: \"connected\" as const,\n minWidth: 0,\n offset: 8,\n openDelay: 250,\n openOnClick: false,\n openOnHover: true,\n origin: \"auto\" as const,\n veil: false,\n scrollStrategy: \"reposition\" as const,\n transition: false,\n }),\n [\"absolute\", \"persistent\"],\n ),\n },\n \"EvTooltip\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvTooltip.scss\";\nimport { makeEvTooltipProps } from \"./EvTooltip\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { filterComponentProps, getNextId } from \"@/util\";\nimport { EvOverlay, PositionStrategyProps } from \"@/components/EvOverlay\";\nimport { computed, mergeProps, ref } from \"vue\";\n\nconst props = defineProps({\n ...makeEvTooltipProps(),\n});\n\nconst slots = defineSlots<{\n activator(props: { isActive: boolean; props: any }): never;\n default(): never;\n}>();\n\nconst isActive = useModelProxy(props, \"modelValue\");\nconst uid = getNextId();\n\nconst id = computed(() => {\n return props.id || `ev-tooltip-${uid}`;\n});\n\nconst overlayRef = ref<typeof EvOverlay>();\nconst overlayProps = computed(() => filterComponentProps(EvOverlay, props));\n\nconst position = computed(() => {\n return props.position.split(\" \").length > 1\n ? props.position\n : ((props.position + \" center\") as PositionStrategyProps[\"position\"]);\n});\n\nconst origin = computed(() => {\n return props.origin === \"auto\" ||\n props.origin === \"overlap\" ||\n props.origin.split(\" \").length > 1 ||\n props.position.split(\" \").length > 1\n ? props.origin\n : ((props.origin + \" center\") as PositionStrategyProps[\"origin\"]);\n});\n\nconst transition = computed(() => {\n if (props.transition) {\n return props.transition;\n }\n return isActive.value ? \"transition-scale\" : \"transition-fade\";\n});\n\nconst activatorProps = computed(() => {\n return mergeProps(\n {\n \"aria-describedby\": id.value,\n },\n props.activatorProps,\n );\n});\n</script>\n\n<template>\n <ev-overlay\n :id=\"id\"\n ref=\"overlayRef\"\n v-bind=\"overlayProps\"\n v-model=\"isActive\"\n role=\"tooltip\"\n :class=\"['ev-tooltip', props.class]\"\n :style=\"props.style\"\n :transition=\"transition\"\n :position=\"position\"\n :origin=\"origin\"\n :activator-props=\"activatorProps\"\n absolute\n disable-global-stack>\n <template v-if=\"slots.activator\" #activator=\"activatorSlotProps\">\n <slot name=\"activator\" v-bind=\"activatorSlotProps\" />\n </template>\n <template #pointer>\n <div class=\"ev-tooltip--pointer\"></div>\n </template>\n <slot name=\"default\">{{ props.text }}</slot>\n </ev-overlay>\n</template>\n","import { FunctionalComponent, h, Transition } from \"vue\";\n\n\n/**\n * # createJavaScriptTransition\n *\n * @param name\n * @param functions\n * @param mode\n *\n */\nexport function createJavaScriptTransition(\n name: string,\n functions: Record<string, any>,\n mode = \"in-out\",\n): FunctionalComponent {\n return (props: any, { slots }) => {\n return h(\n Transition,\n {\n name: props.disabled ? \"\" : name,\n css: !props.disabled,\n ...(props.disabled ? {} : functions),\n },\n slots.default,\n );\n };\n}","// Javascript transitions\nimport { createJavaScriptTransition } from \"@/components/EvTransition/transitions/createTransition\";\nimport ExpandTransitionGenerator from \"./expandTransition\";\nimport { FunctionalComponent } from \"vue\";\n\nexport const EvTransitionExpand = createJavaScriptTransition(\n \"expand-transition\",\n ExpandTransitionGenerator(),\n);\nexport const EvTransitionExpandX = createJavaScriptTransition(\n \"expand-x-transition\",\n ExpandTransitionGenerator(\"\", true),\n);\n\nexport type EvTransitionExpand = FunctionalComponent<typeof EvTransitionExpand>;\nexport type EvTransitionExpandX = FunctionalComponent<typeof EvTransitionExpandX>;","<script setup lang=\"ts\">\nimport \"./EvDataTableSearch.scss\";\nimport { makeEvDataTableSearchProps } from \"./EvDataTableSearch\";\nimport { EvBadge } from \"@/components/EvBadge\";\nimport { EvButton } from \"@/components/EvButton\";\nimport { EvButtonGroup } from \"@/components/EvButtonGroup\";\nimport { EvCheckbox } from \"@/components/EvCheckbox\";\nimport { EvDefaultsProvider } from \"@/components/EvDefaultsProvider\";\nimport { EvDivider } from \"@/components/EvDivider\";\nimport { EvList } from \"@/components/EvList\";\nimport { EvMenu } from \"@/components/EvMenu\";\nimport { EvSection } from \"@/components/EvSection\";\nimport { EvSlideGroup } from \"@/components/EvSlideGroup\";\nimport { EvSurface } from \"@/components/EvSurface\";\nimport { EvTextfield } from \"@/components/EvTextfield\";\nimport { EvTooltip } from \"@/components/EvTooltip\";\nimport { FilterIcon, SearchIcon } from \"@/icons\";\nimport { computed, onMounted, onUnmounted, ref, shallowRef } from \"vue\";\nimport { useLocaleFunctions } from \"@/composables\";\nimport {\n SortProps,\n useSortOptions,\n} from \"@/components/EvDataTable/composables/sort\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { useSelection } from \"@/components/EvDataTable/composables/select\";\nimport { debounce, isArray, isBoolean, isEmpty } from \"@/util\";\nimport { EvTransitionExpand } from \"@/components/EvTransition/transitions\";\n\nconst props = defineProps({ ...makeEvDataTableSearchProps() });\nconst emit = defineEmits([\"update:sort\", \"click:filter\", \"update:search\"]);\nconst sortButtonRef = ref<HTMLElement>();\nconst filterButtonRef = ref<HTMLElement>();\nconst { t } = useLocaleFunctions();\nconst search = useModelProxy(props, \"search\");\nconst searchInternal = shallowRef(\"\");\nconst {\n hasSort,\n sortSelected,\n sortTitle,\n sortTitleOptions,\n sortTitleSelected,\n sortDirectionOptions,\n onSortTitleSelected,\n sortIcon,\n} = useSortOptions(props as SortProps);\n\nconst slots = defineSlots<{\n filters(): never;\n \"select-actions\"(): never;\n}>();\n\nconst { allSelected, someSelected, selectAll, showSelectAll } = useSelection();\nconst isTransitioning = shallowRef(false);\nconst containerRef = ref<HTMLElement | null>(null);\nconst containerWidth = shallowRef<number | null>(null);\nconst showFilters = shallowRef(false);\nconst filtersBreakpoint = 900;\nconst sortBreakpoint = 480;\n\nfunction onClickFilter(e: MouseEvent) {\n showFilters.value = !showFilters.value;\n emit(\"click:filter\", e);\n}\n\nconst placeholder = computed(() =>\n props.searchPlaceholder?.length\n ? props.searchPlaceholder\n : t(\"search.placeholder\"),\n);\n\nconst updateSearch = debounce((value) => {\n search.value = value;\n}, props.searchDelay);\n\nconst showActions = computed(() => {\n const hasSelectActions = slots[\"select-actions\"] || props.selectActions;\n return someSelected.value && hasSelectActions;\n});\n\nconst isFiltersMobile = computed(() => {\n return containerWidth.value < filtersBreakpoint;\n});\n\nconst filterDefaults = {\n EvFilterButton: { size: \"small\" },\n EvButton: { size: \"small\" },\n};\n\nconst sortButtonTitle = computed(() => {\n return containerWidth.value > sortBreakpoint\n ? sortTitle.value\n : undefined;\n});\n\nconst isFiltered = computed(() => {\n for (const key in props.filters) {\n const value = props.filters[key];\n if (isBoolean(value) && value) {\n return true;\n } else if (Array.isArray(value) && value.length > 0) {\n return true;\n } else if (!isBoolean(value) && !isArray(value) && !isEmpty(value)) {\n return true;\n }\n }\n return false;\n});\n\nfunction onSearchInternal(value: string) {\n updateSearch(value);\n}\n\nfunction onBeforeLeave() {\n isTransitioning.value = true;\n}\n\nfunction onAfterEnter() {\n isTransitioning.value = false;\n}\n\nfunction onResize() {\n containerWidth.value = containerRef.value.getBoundingClientRect().width;\n}\n\nonMounted(() => {\n window.addEventListener(\"resize\", onResize, { passive: true });\n onResize();\n});\n\nonUnmounted(() => {\n window.removeEventListener(\"resize\", onResize);\n});\n</script>\n\n<template>\n <div ref=\"containerRef\" class=\"ev-data-table-search\">\n <div\n v-if=\"showSelectAll && !props.hideSelectAll\"\n class=\"ev-data-table-search--checkbox\">\n <ev-checkbox\n :model-value=\"allSelected\"\n :indeterminate=\"someSelected && !allSelected\"\n @update:model-value=\"selectAll\" />\n </div>\n <div\n :class=\"[\n 'ev-data-table-search--modifiers',\n {\n 'is-transitioning': isTransitioning,\n },\n ]\">\n <transition\n name=\"transition-slide-up\"\n mode=\"out-in\"\n @before-leave=\"onBeforeLeave\"\n @after-enter=\"onAfterEnter\">\n <div v-if=\"!showActions\" class=\"ev-data-table-search--options\">\n <div class=\"ev-data-table-search--field\">\n <ev-textfield\n v-model=\"searchInternal\"\n clearable\n appearance=\"subtle\"\n size=\"small\"\n :loading=\"props.loading\"\n :placeholder=\"placeholder\"\n :icon-start=\"SearchIcon\"\n @update:model-value=\"onSearchInternal\" />\n </div>\n <div\n v-if=\"isFiltersMobile && slots.filters\"\n class=\"ev-data-table-search--filter\">\n <ev-badge\n dot\n bold\n pulsate\n appearance=\"primary\"\n :model-value=\"isFiltered && !showFilters\">\n <ev-button\n ref=\"filterButtonRef\"\n size=\"small\"\n :appearance=\"isFiltered ? 'primary' : 'default'\"\n :variant=\"isFiltered ? 'tonal' : 'subtle'\"\n :icon=\"FilterIcon\"\n @click=\"onClickFilter\" />\n </ev-badge>\n <ev-tooltip\n :activator=\"filterButtonRef\"\n :text=\"t('search.filter')\" />\n </div>\n <div\n v-if=\"!isFiltersMobile && slots.filters\"\n class=\"ev-data-table-search--filters\">\n <ev-defaults-provider :defaults=\"filterDefaults\">\n <ev-slide-group>\n <slot name=\"filters\" />\n </ev-slide-group>\n </ev-defaults-provider>\n </div>\n <div v-if=\"hasSort\" class=\"ev-data-table-search--sort\">\n <ev-button\n ref=\"sortButtonRef\"\n size=\"small\"\n variant=\"subtle\"\n :text=\"sortButtonTitle\"\n :icon-end=\"sortIcon\" />\n <ev-tooltip\n :activator=\"sortButtonRef\"\n :text=\"t('sort.label')\" />\n <ev-menu\n :activator=\"sortButtonRef\"\n :close-on-content-click=\"false\"\n :width=\"200\"\n position=\"bottom-end\">\n <ev-surface elevation=\"overlay\" class=\"w-100 h-100\">\n <ev-section :title=\"t('sort.heading')\">\n <ev-list\n required\n select-strategy=\"single-any\"\n :items=\"sortTitleOptions\"\n :selected=\"sortTitleSelected\"\n @update:selected=\"\n onSortTitleSelected\n \" />\n </ev-section>\n <ev-divider />\n <ev-section :title=\"t('sort.direction')\">\n <ev-list\n v-model:selected=\"sortSelected\"\n required\n select-strategy=\"single-any\"\n item-title=\"direction\"\n :items=\"sortDirectionOptions\" />\n </ev-section>\n </ev-surface>\n </ev-menu>\n </div>\n </div>\n <div v-else class=\"ev-data-table-search--actions\">\n <slot name=\"select-actions\">\n <ev-button-group\n size=\"small\"\n variant=\"subtle\"\n :items=\"props.selectActions\" />\n </slot>\n </div>\n </transition>\n </div>\n </div>\n <ev-transition-expand>\n <div\n v-if=\"isFiltersMobile && showFilters && slots.filters && !showActions\"\n key=\"filter\"\n class=\"ev-data-table-filters-mask\">\n <div class=\"ev-data-table-filters\">\n <ev-defaults-provider :defaults=\"filterDefaults\">\n <ev-slide-group>\n <slot name=\"filters\" />\n </ev-slide-group>\n </ev-defaults-provider>\n </div>\n </div>\n </ev-transition-expand>\n</template>\n","import { Browser, clamp, debounce, isNumber, propsFactory } from \"@/util\";\nimport {\n computed,\n ComputedRef,\n nextTick,\n onScopeDispose,\n ref,\n Ref,\n shallowRef,\n watch,\n watchEffect,\n} from \"vue\";\nimport { useResizeObserver } from \"./resizeObserver\";\nimport { useDisplay } from \"./display\";\n\nconst UP = -1;\nconst DOWN = 1;\n\n/** Determines how large each batch of items should be */\nconst BUFFER_PX = 100;\n\ntype VirtualProps = {\n itemHeight?: number | string;\n height?: number | string;\n};\n\nexport interface VirtualItem {\n raw: any;\n index: number;\n}\n\n/**\n * # Make Virtual Props\n */\nexport const makeVirtualProps = propsFactory(\n {\n itemHeight: {\n type: [Number, String],\n default: null,\n },\n height: [Number, String],\n },\n \"virtual\",\n);\n\n/**\n * # Use Virtual\n *\n * @param props\n * @param items\n */\nexport function useVirtual<T>(props: VirtualProps, items: Ref<readonly T[]>) {\n const display = useDisplay();\n const itemHeight = shallowRef(0);\n watchEffect(() => {\n const h = props.itemHeight || 0;\n itemHeight.value = isNumber(h) ? h : parseFloat(h);\n });\n const first = shallowRef(0);\n const last = shallowRef(\n Math.ceil(\n // Assume 16px items filling the entire screen height if not provided.\n // This is probably incorrect, but it minimises the chance of ending up with empty space at the bottom.\n // The default value is set here to avoid poisoning getSize()\n (parseInt(`${props.height}`) || display.height.value) /\n (itemHeight.value || 16),\n ) || 1,\n );\n const paddingTop = shallowRef(0);\n const paddingBottom = shallowRef(0);\n /** The scrollable element */\n const containerRef = ref<HTMLElement>();\n /** An element marking the top of the scrollable area,\n * used to add an offset if there's padding or other elements above the virtual list */\n const markerRef = ref<HTMLElement>();\n /** markerRef's offsetTop, lazily evaluated */\n let markerOffset = 0;\n const { resizeRef, contentRect } = useResizeObserver();\n watchEffect(() => {\n resizeRef.value = containerRef.value;\n });\n const viewportHeight = computed(() => {\n const h = isNumber(props.height)\n ? props.height\n : parseInt(props.height);\n return containerRef.value === document.documentElement\n ? display.height.value\n : contentRect.value?.height || h || 0;\n });\n /** All static elements have been rendered, and we have an assumed item height */\n const hasInitialRender = computed(() => {\n return !!(\n containerRef.value &&\n markerRef.value &&\n viewportHeight.value &&\n itemHeight.value\n );\n });\n let sizes = Array.from<number | null>({ length: items.value.length });\n let offsets = Array.from<number>({ length: items.value.length });\n const updateTime = shallowRef(0);\n let targetScrollIndex = -1;\n\n function getSize(index: number) {\n return sizes[index] || itemHeight.value;\n }\n\n const updateOffsets = debounce(() => {\n const start = performance.now();\n offsets[0] = 0;\n const length = items.value.length;\n for (let i = 1; i <= length - 1; i++) {\n offsets[i] = (offsets[i - 1] || 0) + getSize(i - 1);\n }\n updateTime.value = Math.max(\n updateTime.value,\n performance.now() - start,\n );\n }, updateTime);\n\n const unwatch = watch(hasInitialRender, (v) => {\n if (!v) {\n return;\n }\n // First render is complete, update offsets and visible items in case our assumed item height was incorrect.\n unwatch();\n markerOffset = markerRef.value!.offsetTop;\n updateOffsets.immediate();\n calculateVisibleItems();\n\n if (!~targetScrollIndex) {\n return;\n }\n\n nextTick(() => {\n Browser.hasWindow &&\n window.requestAnimationFrame(() => {\n scrollToIndex(targetScrollIndex);\n targetScrollIndex = -1;\n });\n });\n });\n\n onScopeDispose(() => {\n updateOffsets.clear();\n });\n\n function handleItemResize(index: number, height: number) {\n const prevHeight = sizes[index];\n const prevMinHeight = itemHeight.value;\n itemHeight.value = prevMinHeight\n ? Math.min(itemHeight.value, height)\n : height;\n\n if (prevHeight !== height || prevMinHeight !== itemHeight.value) {\n sizes[index] = height;\n updateOffsets();\n }\n }\n\n function calculateOffset(index: number) {\n index = clamp(index, 0, items.value.length - 1);\n return offsets[index] || 0;\n }\n\n function calculateIndex(scrollTop: number) {\n return binaryClosest(offsets, scrollTop);\n }\n\n let lastScrollTop = 0;\n let scrollVelocity = 0;\n let lastScrollTime = 0;\n\n watch(viewportHeight, (val, oldVal) => {\n if (oldVal) {\n calculateVisibleItems();\n if (val < oldVal) {\n requestAnimationFrame(() => {\n scrollVelocity = 0;\n calculateVisibleItems();\n });\n }\n }\n });\n\n function handleScroll() {\n if (!containerRef.value || !markerRef.value) {\n return;\n }\n const scrollTop = containerRef.value.scrollTop;\n const scrollTime = performance.now();\n const scrollDeltaT = scrollTime - lastScrollTime;\n if (scrollDeltaT > 500) {\n scrollVelocity = Math.sign(scrollTop - lastScrollTop);\n // Not super important, only update at the start of a scroll sequence to avoid reflows.\n markerOffset = markerRef.value.offsetTop;\n } else {\n scrollVelocity = scrollTop - lastScrollTop;\n }\n lastScrollTop = scrollTop;\n lastScrollTime = scrollTime;\n calculateVisibleItems();\n }\n\n function handleScrollend() {\n if (!containerRef.value || !markerRef.value) {\n return;\n }\n scrollVelocity = 0;\n lastScrollTime = 0;\n calculateVisibleItems();\n }\n\n let raf = -1;\n function calculateVisibleItems() {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(_calculateVisibleItems);\n }\n\n function _calculateVisibleItems() {\n if (!containerRef.value || !viewportHeight.value) {\n return;\n }\n const scrollTop = lastScrollTop - markerOffset;\n const direction = Math.sign(scrollVelocity);\n const startPx = Math.max(0, scrollTop - BUFFER_PX);\n const start = clamp(calculateIndex(startPx), 0, items.value.length);\n const endPx = scrollTop + viewportHeight.value + BUFFER_PX;\n const end = clamp(\n calculateIndex(endPx) + 1,\n start + 1,\n items.value.length,\n );\n if (\n // Only update the side we're scrolling towards, the other side will be updated incidentally\n (direction !== UP || start < first.value) &&\n (direction !== DOWN || end > last.value)\n ) {\n const topOverflow =\n calculateOffset(first.value) - calculateOffset(start);\n const bottomOverflow =\n calculateOffset(end) - calculateOffset(last.value);\n const bufferOverflow = Math.max(topOverflow, bottomOverflow);\n\n if (bufferOverflow > BUFFER_PX) {\n first.value = start;\n last.value = end;\n } else {\n // Only update the side that's reached its limit if there's still buffer left\n if (start <= 0) {\n first.value = start;\n }\n if (end >= items.value.length) {\n last.value = end;\n }\n }\n }\n paddingTop.value = calculateOffset(first.value);\n paddingBottom.value =\n calculateOffset(items.value.length) - calculateOffset(last.value);\n }\n\n function scrollToIndex(index: number) {\n const offset = calculateOffset(index);\n if (!containerRef.value || (index && !offset)) {\n targetScrollIndex = index;\n } else {\n containerRef.value.scrollTop = offset;\n }\n }\n\n const computedItems: ComputedRef<VirtualItem[]> = computed(() => {\n return items.value\n .slice(first.value, last.value)\n .map((item, index) => ({\n raw: item,\n index: index + first.value,\n }));\n });\n\n watch(\n items,\n () => {\n sizes = Array.from({ length: items.value.length });\n offsets = Array.from({ length: items.value.length });\n updateOffsets.immediate();\n calculateVisibleItems();\n },\n { deep: true },\n );\n\n return {\n calculateVisibleItems,\n containerRef,\n markerRef,\n computedItems,\n paddingTop,\n paddingBottom,\n scrollToIndex,\n handleScroll,\n handleScrollend,\n handleItemResize,\n };\n}\n\n// https://gist.github.com/robertleeplummerjr/1cc657191d34ecd0a324\nfunction binaryClosest(arr: ArrayLike<number>, val: number) {\n let high = arr.length - 1;\n let low = 0;\n let mid = 0;\n let item = null;\n let target = -1;\n\n if (arr[high]! < val) {\n return high;\n }\n\n while (low <= high) {\n mid = (low + high) >> 1;\n item = arr[mid]!;\n\n if (item > val) {\n high = mid - 1;\n } else if (item < val) {\n target = mid;\n low = mid + 1;\n } else if (item === val) {\n return mid;\n } else {\n return low;\n }\n }\n\n return target;\n}\n","import { getPropertyValue, GetterPropertyKey, propsFactory } from \"@/util\";\r\nimport { computed, PropType, Ref } from \"vue\";\r\nimport {\r\n DataTableItem,\r\n InternalDataTableHeader,\r\n} from \"@/components/EvDataTable/composables/types.ts\";\r\n\r\nexport interface DataTableItemProps {\r\n items: any[];\r\n itemValue: GetterPropertyKey;\r\n itemSelectable?: GetterPropertyKey;\r\n returnObject: boolean;\r\n}\r\n\r\nexport const makeDataTableItemsProps = propsFactory(\r\n {\r\n items: {\r\n type: Array as PropType<DataTableItemProps[\"items\"]>,\r\n default: () => [],\r\n },\r\n itemValue: {\r\n type: [String, Array, Function] as PropType<GetterPropertyKey>,\r\n default: \"id\",\r\n },\r\n itemSelectable: {\r\n type: [String, Array, Function] as PropType<GetterPropertyKey>,\r\n default: null,\r\n },\r\n returnObject: Boolean,\r\n },\r\n \"data-table-items\",\r\n);\r\n\r\nexport function transformItem(\r\n props: Omit<DataTableItemProps, \"items\">,\r\n item: any,\r\n index: number,\r\n columns: InternalDataTableHeader[],\r\n): DataTableItem {\r\n const value = props.returnObject\r\n ? item\r\n : getPropertyValue(item, props.itemValue);\r\n const selectable = getPropertyValue(item, props.itemSelectable, true);\r\n const itemColumns = columns.reduce(\r\n (obj, column) => {\r\n if (column.key != null) {\r\n obj[column.key] = getPropertyValue(item, column.value);\r\n return obj;\r\n }\r\n },\r\n {} as Record<string, unknown>,\r\n );\r\n return {\r\n key: props.returnObject\r\n ? getPropertyValue(item, props.itemValue)\r\n : value,\r\n index,\r\n value,\r\n selectable,\r\n columns: itemColumns,\r\n raw: item,\r\n };\r\n}\r\n\r\nexport function transformItems(\r\n props: Omit<DataTableItemProps, \"items\">,\r\n items: DataTableItemProps[\"items\"],\r\n columns: InternalDataTableHeader[],\r\n): DataTableItem[] {\r\n return items.map((item, index) =>\r\n transformItem(props, item, index, columns),\r\n );\r\n}\r\n\r\nexport function useDataTableItems(\r\n items,\r\n props: DataTableItemProps,\r\n columns: Ref<InternalDataTableHeader[]>,\r\n) {\r\n const internalItems = computed(() =>\r\n transformItems(props, items.value, columns.value),\r\n );\r\n return { items: internalItems };\r\n}\r\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeVirtualProps } from \"@/composables/virtual\";\nimport { makeDimensionsProps } from \"@/composables/dimensions\";\nimport { makeDataTableItemsProps } from \"./composables/items\";\nimport { makeDataTableHeaderProps } from \"./composables/headers\";\nimport { makeDataTableSelectProps } from \"./composables/select\";\nimport { makeEvDataTableSearchProps } from \"./EvDataTableSearch\";\nimport { DataTableItem } from \"@/components/EvDataTable/composables/types\";\nimport { PropType } from \"vue\";\n\nexport const makeEvDataTableProps = propsFactory(\n {\n loading: Boolean,\n page: { type: Number, default: 1 },\n itemsPerPage: { type: Number, default: 50 },\n showHeaders: Boolean,\n showFinished: {\n type: Boolean,\n default: false,\n },\n\n \"onClick:row\": Function as PropType<\n (event: PointerEvent, item: DataTableItem) => void\n >,\n \"onContextmenu:row\": Function as PropType<\n (event: PointerEvent, item: DataTableItem) => void\n >,\n \"onDblclick:row\": Function as PropType<\n (event: PointerEvent, item: DataTableItem) => void\n >,\n\n ...makeEvDataTableSearchProps(),\n ...makeDataTableHeaderProps(),\n ...makeDataTableItemsProps(),\n ...makeDataTableSelectProps(),\n ...makeDimensionsProps(),\n ...makeVirtualProps(),\n ...makeComponentProps(),\n },\n \"EvDataTable\",\n);\n","import { propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\nimport { makeDimensionsProps } from \"@/composables/dimensions\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeVirtualProps } from \"@/composables/virtual\";\n\nexport interface EvVirtualScrollSlot<T> {\n item: T;\n index: number;\n}\n\n/**\n * # Make EvVirtualScroll Props\n */\nexport const makeEvVirtualScrollProps = propsFactory(\n {\n items: {\n type: Array as PropType<readonly unknown[]>,\n default: () => [],\n },\n renderless: Boolean,\n\n ...makeVirtualProps(),\n ...makeComponentProps(),\n ...makeDimensionsProps(),\n },\n \"EvVirtualScroll\",\n);\n\n/**\n * # Make EvVirtualScrollItem Props\n */\nexport const makeEvVirtualScrollItemProps = propsFactory(\n {\n renderless: Boolean,\n ...makeComponentProps(),\n },\n \"EvVirtualScrollItem\",\n);\n","<script setup lang=\"ts\">\nimport { computed, Ref, useAttrs, watch } from \"vue\";\nimport { useResizeObserver } from \"../../composables/resizeObserver\";\nimport { makeEvVirtualScrollItemProps } from \"./EvVirtualScroll\";\n\ndefineOptions({\n inheritAttrs: false,\n});\n\ndefineSlots<{\n default(props: { itemRef: Ref<HTMLElement | undefined> }): any;\n}>();\n\nconst props = defineProps({\n ...makeEvVirtualScrollItemProps(),\n});\n\nconst emit = defineEmits([\"update:height\"]);\nconst attrs = useAttrs();\n\nconst { resizeRef, contentRect } = useResizeObserver(undefined, \"border\");\n\nwatch(\n () => contentRect.value?.height,\n (height) => {\n if (height != null) {\n emit(\"update:height\", height);\n }\n },\n);\n\nconst slotProps = computed(() => {\n return {\n itemRef: resizeRef,\n };\n});\n</script>\n\n<template>\n <template v-if=\"props.renderless\">\n <slot name=\"default\" v-bind=\"slotProps\" />\n </template>\n <div\n v-else\n ref=\"resizeRef\"\n :class=\"['ev-virtual-scroll--item', props.class]\"\n :style=\"props.style\"\n v-bind=\"attrs\">\n <slot name=\"default\" v-bind=\"slotProps\" />\n </div>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport { makeDimensionsProps } from \"@/composables/dimensions\";\nimport { PropType } from \"vue\";\n\nexport type InfiniteScrollSide = \"start\" | \"end\" | \"both\";\nexport type InfiniteScrollMode = \"intersect\" | \"manual\";\nexport type InfiniteScrollDirection = \"vertical\" | \"horizontal\";\nexport type InfiniteScrollStatus = \"ok\" | \"finished\" | \"loading\" | \"error\";\n\nexport const makeEvInfiniteScrollProps = propsFactory(\n {\n disabled: Boolean,\n direction: {\n type: String as PropType<InfiniteScrollDirection>,\n default: \"vertical\",\n validator: (v: any) => [\"vertical\", \"horizontal\"].includes(v),\n },\n intersectDelay: {\n type: Number,\n default: 50,\n },\n margin: [Number, String],\n mode: {\n type: String as PropType<InfiniteScrollMode>,\n default: \"intersect\",\n validator: (v: any) => [\"intersect\", \"manual\"].includes(v),\n },\n showFinished: {\n type: Boolean,\n default: true,\n },\n side: {\n type: String as PropType<InfiniteScrollSide>,\n default: \"end\",\n validator: (v: any) => [\"start\", \"end\", \"both\"].includes(v),\n },\n textMore: {\n type: String,\n default: \"infiniteScroll.more\",\n },\n textFinished: {\n type: String,\n default: \"infiniteScroll.finished\",\n },\n ...makeTagProps(),\n ...makeDimensionsProps(),\n },\n \"EvInfiniteScroll\",\n);\n","<script setup lang=\"ts\">\nimport { computed, PropType } from \"vue\";\nimport {\n InfiniteScrollMode,\n InfiniteScrollSide,\n InfiniteScrollStatus,\n} from \"./EvInfiniteScroll.ts\";\nimport { useLocaleFunctions } from \"@/composables\";\nimport { EvButton } from \"@/components/EvButton\";\nimport { EvProgressCircular } from \"@/components/EvProgressCircular\";\n\nconst props = defineProps({\n mode: {\n type: String as PropType<InfiniteScrollMode>,\n default: undefined,\n },\n showFinished: {\n type: Boolean,\n default: true,\n },\n side: {\n type: String as PropType<InfiniteScrollSide>,\n default: undefined,\n },\n status: {\n type: String as PropType<InfiniteScrollStatus>,\n default: undefined,\n },\n textFinished: {\n type: String,\n default: undefined,\n },\n textMore: {\n type: String,\n default: undefined,\n },\n});\n\nconst slots = defineSlots<{\n error(props: { side: InfiniteScrollSide }): never;\n finished(props: { side: InfiniteScrollSide }): never;\n loading(props: { side: InfiniteScrollSide }): never;\n more(props: {\n side: InfiniteScrollSide;\n props: { onClick: () => void };\n }): never;\n}>();\n\nconst emit = defineEmits([\"click:more\"]);\n\nconst onClick = () => {\n emit(\"click:more\");\n};\n\nconst slotProps = {\n side: props.side,\n props: {\n onClick,\n },\n};\n\nconst { t } = useLocaleFunctions();\n\nconst isError = computed(() => props.status === \"error\");\nconst isFinished = computed(() => props.status === \"finished\");\nconst isManual = computed(() => props.mode === \"manual\");\nconst isLoading = computed(() => props.status === \"loading\");\n</script>\n\n<template>\n <div class=\"ev-infinite-scroll-side\">\n <template v-if=\"isError\">\n <slot name=\"error\" v-bind=\"slotProps\" />\n </template>\n <template v-else-if=\"isFinished\">\n <template v-if=\"showFinished\">\n <slot name=\"finished\" v-bind=\"slotProps\">\n <div class=\"ev-infinite-scroll-finished\">\n {{ t(props.textFinished) }}\n </div>\n </slot>\n </template>\n </template>\n <template v-else-if=\"isManual\">\n <slot v-if=\"!isLoading\" name=\"more\" v-bind=\"slotProps\">\n <ev-button @click=\"onClick\">\n {{ t(props.textMore) }}\n </ev-button>\n </slot>\n <slot v-else name=\"loading\" v-bind=\"slotProps\">\n <ev-button loading>\n {{ t(props.textMore) }}\n </ev-button>\n </slot>\n </template>\n <template v-else>\n <slot name=\"loading\" v-bind=\"slotProps\">\n <ev-progress-circular indeterminate />\n </slot>\n </template>\n </div>\n</template>\n","import { onBeforeUnmount, ref, shallowRef, watch } from \"vue\";\nimport { Browser } from \"@/util\";\n\nexport function useIntersectionObserver(\n callback?: IntersectionObserverCallback,\n options?: IntersectionObserverInit,\n) {\n const intersectionRef = ref<HTMLElement>();\n const isIntersecting = shallowRef(false);\n\n if (Browser.supportsIntersection) {\n const observer = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n callback?.(entries, observer);\n isIntersecting.value = !!entries.find(\n (entry) => entry.isIntersecting,\n );\n },\n options,\n );\n\n onBeforeUnmount(() => {\n observer.disconnect();\n });\n\n watch(\n intersectionRef,\n (newValue, oldValue) => {\n if (oldValue) {\n observer.unobserve(oldValue);\n isIntersecting.value = false;\n }\n if (newValue) {\n observer.observe(newValue);\n }\n },\n {\n flush: \"post\",\n },\n );\n }\n\n return { intersectionRef, isIntersecting };\n}\n","<script setup lang=\"ts\">\nimport { useIntersectionObserver } from \"@/composables/intersectionObserver\";\nimport { InfiniteScrollSide } from \"@/components/EvInfiniteScroll\";\nimport { PropType, watch } from \"vue\";\n\nconst props = defineProps({\n side: {\n type: String as PropType<InfiniteScrollSide>,\n required: true,\n },\n rootRef: {\n type: Object as PropType<HTMLDivElement>,\n default: null,\n },\n rootMargin: {\n type: String,\n default: undefined,\n },\n});\n\nconst emit = defineEmits<{\n (e: \"intersect\", side: InfiniteScrollSide, isIntersecting: boolean): true;\n}>();\n\nconst options = {\n ...(props.rootMargin ? { rootMargin: props.rootMargin } : {}),\n ...(props.rootRef ? { root: props.rootRef } : {}),\n};\n\nconst { intersectionRef, isIntersecting } = useIntersectionObserver(\n () => {},\n options,\n);\n\nwatch(isIntersecting, async (val) => {\n emit(\"intersect\", props.side, val);\n});\n</script>\n\n<template>\n <div ref=\"intersectionRef\" class=\"ev-infinite-scroll-intersect\"> </div>\n</template>\n","<script setup lang=\"ts\">\nimport \"./EvInfiniteScroll.scss\";\nimport {\n InfiniteScrollSide,\n InfiniteScrollStatus,\n makeEvInfiniteScrollProps,\n} from \"./EvInfiniteScroll\";\nimport { useDimensions } from \"@/composables/dimensions\";\nimport { computed, nextTick, onMounted, ref, shallowRef, toRef } from \"vue\";\nimport { debounce, toWebUnit } from \"@/util\";\nimport EvInfiniteScrollSide from \"@/components/EvInfiniteScroll/EvInfiniteScrollSide.vue\";\nimport EvInfiniteScrollIntersect from \"@/components/EvInfiniteScroll/EvInfiniteScrollIntersect.vue\";\n\nconst props = defineProps({ ...makeEvInfiniteScrollProps() });\nconst slots = defineSlots<{\n default(): never;\n error(props: { side: InfiniteScrollSide }): never;\n finished(props: { side: InfiniteScrollSide }): never;\n loading(props: { side: InfiniteScrollSide }): never;\n more(props: {\n side: InfiniteScrollSide;\n props: { onClick: () => void };\n }): never;\n}>();\nconst emit = defineEmits<{\n (\n e: \"load\",\n options: {\n side: InfiniteScrollSide;\n done: () => void;\n error: () => void;\n next: () => void;\n },\n ): true;\n}>();\nconst dimensions = useDimensions(props);\nconst rootEl = ref<HTMLDivElement>();\nconst startStatus = shallowRef<InfiniteScrollStatus>(\"ok\");\nconst endStatus = shallowRef<InfiniteScrollStatus>(\"ok\");\nconst margin = computed(() => toWebUnit(props.margin));\nconst isIntersecting = shallowRef(false);\nlet previousScrollSize = 0;\n\nconst isDisabled = toRef(props, \"disabled\");\n\nconst hasStartIntersect = computed(() => {\n return props.side === \"start\" || props.side === \"both\";\n});\n\nconst hasEndIntersect = computed(() => {\n return props.side === \"end\" || props.side === \"both\";\n});\n\nconst intersectMode = computed(() => {\n return props.mode === \"intersect\";\n});\n\nfunction getContainerSize() {\n if (!rootEl.value) {\n return 0;\n }\n const property =\n props.direction === \"vertical\" ? \"clientHeight\" : \"clientWidth\";\n return rootEl.value[property];\n}\n\nfunction getScrollAmount() {\n if (!rootEl.value) {\n return 0;\n }\n const property =\n props.direction === \"vertical\" ? \"scrollTop\" : \"scrollLeft\";\n return rootEl.value[property];\n}\n\nfunction getScrollSize() {\n if (!rootEl.value) {\n return 0;\n }\n const property =\n props.direction === \"vertical\" ? \"scrollHeight\" : \"scrollWidth\";\n return rootEl.value[property];\n}\n\nfunction getStatus(side: string) {\n return side === \"start\" ? startStatus.value : endStatus.value;\n}\n\n/**\n * There's a redraw bug somewhere!\n * The `intersect-delay` helps address issues with rapid changes to intersection\n * values from the `IntersectionObserver` - you cannot see them. Using `debounce`\n * effectively keeps the last state, cancelling former states in rapid succession.\n * This was a particular issue in `EvDataTable`.\n */\nconst handleIntersectDelayed = debounce((side: InfiniteScrollSide) => {\n if (isIntersecting.value && !isDisabled.value) {\n intersecting(side);\n }\n}, props.intersectDelay);\n\nfunction handleIntersect(side: InfiniteScrollSide, _isIntersecting: boolean) {\n isIntersecting.value = _isIntersecting;\n handleIntersectDelayed(side);\n}\n\nfunction intersecting(side: InfiniteScrollSide) {\n if (props.mode !== \"manual\" && !isIntersecting.value) {\n return;\n }\n const status = getStatus(side);\n if (!rootEl.value || [\"finished\", \"loading\"].includes(status)) {\n return;\n }\n previousScrollSize = getScrollSize();\n setStatus(side, \"loading\");\n\n function state(status: InfiniteScrollStatus) {\n setStatus(side, status);\n\n nextTick(() => {\n if (status === \"finished\" || status === \"error\") {\n return;\n }\n if (status === \"ok\" && side === \"start\") {\n setScrollAmount(\n getScrollSize() - previousScrollSize + getScrollAmount(),\n );\n }\n if (props.mode !== \"manual\") {\n nextTick(() => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n intersecting(side);\n });\n });\n });\n });\n }\n });\n }\n emit(\"load\", {\n side,\n error: () => state(\"error\"),\n done: () => state(\"finished\"),\n next: () => state(\"ok\"),\n });\n}\n\nfunction setScrollAmount(amount: number) {\n if (!rootEl.value) {\n return;\n }\n const property =\n props.direction === \"vertical\" ? \"scrollTop\" : \"scrollLeft\";\n rootEl.value[property] = amount;\n}\n\nfunction setStatus(side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (side === \"start\") {\n startStatus.value = status;\n } else if (side === \"end\") {\n endStatus.value = status;\n }\n}\n\nonMounted(() => {\n reset();\n});\n\nfunction reset(status: InfiniteScrollStatus = \"ok\") {\n if (!rootEl.value) {\n return;\n }\n isIntersecting.value = false;\n if (props.side === \"start\") {\n setScrollAmount(getScrollSize());\n } else if (props.side === \"both\") {\n setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2);\n } else {\n setScrollAmount(0);\n }\n setStatus(\"start\", status);\n setStatus(\"end\", status);\n}\n\nconst sideProps = computed(() => ({\n mode: props.mode,\n textFinished: props.textFinished,\n textMore: props.textMore,\n}));\n\ndefineExpose({\n reset,\n rootElement: rootEl,\n});\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n ref=\"rootEl\"\n :class=\"[\n 'ev-infinite-scroll',\n `ev-infinite-scroll--${props.direction}`,\n {\n 'ev-infinite-scroll--start': hasStartIntersect,\n 'ev-infinite-scroll-end': hasEndIntersect,\n },\n ]\"\n :style=\"[dimensions]\">\n <ev-infinite-scroll-side\n v-if=\"['start', 'both'].includes(props.side) && !isDisabled\"\n side=\"start\"\n v-bind=\"sideProps\"\n :status=\"startStatus\"\n :show-finished=\"props.showFinished\"\n @click:more=\"intersecting('start')\">\n <template v-if=\"slots.finished\" #finished=\"{ side }\">\n <slot name=\"finished\" :side=\"side\" />\n </template>\n <template v-if=\"slots.error\" #error=\"{ side }\">\n <slot name=\"error\" :side=\"side\" />\n </template>\n <template v-if=\"slots.loading\" #loading=\"{ side }\">\n <slot name=\"loading\" :side=\"side\" />\n </template>\n <template v-if=\"slots.more\" #more=\"{ side, props }\">\n <slot name=\"more\" :side=\"side\" :props=\"props\" />\n </template>\n </ev-infinite-scroll-side>\n\n <ev-infinite-scroll-intersect\n v-if=\"rootEl && hasStartIntersect && intersectMode && !isDisabled\"\n key=\"start\"\n side=\"start\"\n :root-ref=\"rootEl\"\n :root-margin=\"margin\"\n @intersect=\"handleIntersect\" />\n\n <slot name=\"default\" />\n\n <ev-infinite-scroll-intersect\n v-if=\"rootEl && hasEndIntersect && intersectMode && !isDisabled\"\n key=\"end\"\n side=\"end\"\n :root-ref=\"rootEl\"\n :root-margin=\"margin\"\n @intersect=\"handleIntersect\" />\n\n <ev-infinite-scroll-side\n v-if=\"['end', 'both'].includes(props.side) && !isDisabled\"\n side=\"end\"\n v-bind=\"sideProps\"\n :status=\"endStatus\"\n :show-finished=\"props.showFinished\"\n @click:more=\"intersecting('end')\">\n <template v-if=\"slots.finished\" #finished=\"{ side }\">\n <slot name=\"finished\" :side=\"side\" />\n </template>\n <template v-if=\"slots.error\" #error=\"{ side }\">\n <slot name=\"error\" :side=\"side\" />\n </template>\n <template v-if=\"slots.loading\" #loading=\"{ side }\">\n <slot name=\"loading\" :side=\"side\" />\n </template>\n <template v-if=\"slots.more\" #more=\"{ side, props }\">\n <slot name=\"more\" :side=\"side\" :props=\"props\" />\n </template>\n </ev-infinite-scroll-side>\n </component>\n</template>\n","<script setup lang=\"ts\">\r\nimport \"./EvDataTable.scss\";\r\nimport { makeEvDataTableProps } from \"./EvDataTable\";\r\nimport { useDimensions } from \"@/composables/dimensions\";\r\nimport { computed, nextTick, onMounted, ref, watch } from \"vue\";\r\nimport { useVirtual } from \"@/composables/virtual\";\r\nimport {\r\n filterComponentProps,\r\n getPrefixedEventHandlers,\r\n omit,\r\n toWebUnit,\r\n} from \"@/util\";\r\nimport { DataTableItemProps, useDataTableItems } from \"./composables/items\";\r\nimport EvVirtualScrollItem from \"@/components/EvVirtualScroll/EvVirtualScrollItem.vue\";\r\nimport { createHeaders } from \"@/components/EvDataTable/composables/headers\";\r\nimport { EvDataTableRow } from \"@/components/EvDataTable/EvDataTableRow\";\r\nimport { provideSelection } from \"@/components/EvDataTable/composables/select\";\r\nimport { EvDataTableSearch } from \"@/components/EvDataTable/EvDataTableSearch\";\r\nimport { useModelProxy } from \"@/composables/modelProxy\";\r\nimport {\r\n DataTableHeader,\r\n DataTableItem,\r\n ItemSlot,\r\n} from \"@/components/EvDataTable/composables/types\";\r\nimport { useLocaleFunctions } from \"@/composables\";\r\nimport {\r\n EvInfiniteScroll,\r\n InfiniteScrollStatus,\r\n} from \"@/components/EvInfiniteScroll\";\r\nimport { ComponentExposed } from \"vue-component-type-helpers\";\r\nimport { EvDataTableCell } from \"@/components/EvDataTable/EvDataTableCell\";\r\nimport { calculateDisplayRuleValue } from \"@/composables/display\";\r\nimport { EvCheckbox } from \"@/components/EvCheckbox\";\r\n\r\nconst props = defineProps({ ...makeEvDataTableProps() });\r\nconst slots = defineSlots<{\r\n colgroup(): never;\r\n default(props: ItemSlot): never;\r\n empty(): never;\r\n filters(): never;\r\n finished(): never;\r\n \"select-actions\"(): never;\r\n}>();\r\n\r\nconst emit = defineEmits<{\r\n (e: \"click:row\", event: PointerEvent, item: DataTableItem): void;\r\n (e: \"contextmenu:row\", event: PointerEvent, item: DataTableItem): void;\r\n (e: \"dblclick:row\", event: PointerEvent, item: DataTableItem): void;\r\n (\r\n e: \"load\",\r\n options: {\r\n setPageItems: (\r\n items: DataTableItemProps[\"items\"],\r\n isLastPage?: boolean,\r\n ) => void;\r\n page: number;\r\n },\r\n ): void;\r\n (e: \"update:items\", value: unknown[]): void;\r\n (e: \"update:loading\", value: boolean): void;\r\n (e: \"update:selected\", value: unknown[]): void;\r\n (e: \"update:page\", value: number): void;\r\n (e: \"update:search\", value: string): void;\r\n (e: \"update:sort\", value: string[]): void;\r\n}>();\r\n\r\nconst isLoading = useModelProxy(props, \"loading\", false);\r\nconst itemsModel = useModelProxy(props, \"items\");\r\nconst pageModel = useModelProxy(props, \"page\");\r\nconst dimensions = useDimensions(props);\r\nconst { columns, headers } = createHeaders(props);\r\nconst { items } = useDataTableItems(itemsModel, props, columns);\r\n\r\nconst { allSelected, selectAll, showSelectAll, someSelected } =\r\n provideSelection(props, items);\r\n\r\nconst {\r\n containerRef,\r\n markerRef,\r\n paddingTop,\r\n paddingBottom,\r\n computedItems,\r\n handleItemResize,\r\n handleScroll,\r\n handleScrollend,\r\n} = useVirtual(props, items);\r\n\r\nconst totalColumns = computed(() => {\r\n return columns.value.length + (props.showSelect ? 1 : 0);\r\n});\r\n\r\nconst { t } = useLocaleFunctions();\r\nconst sortModel = useModelProxy(props, \"sort\");\r\nconst searchModel = useModelProxy(props, \"search\");\r\nconst infiniteScrollRef = ref<ComponentExposed<typeof EvInfiniteScroll>>();\r\nconst infiniteScrollDisabled = computed(() => isLoading.value);\r\nconst isEmpty = computed(() => !itemsModel.value?.length);\r\nconst searchProps = computed(() => {\r\n return omit(filterComponentProps(EvDataTableSearch, props), [\r\n \"loading\",\r\n \"search\",\r\n \"sort\",\r\n ]);\r\n});\r\n\r\nconst spaceAbove = computed(() => toWebUnit(paddingTop.value));\r\nconst spaceBelow = computed(() => toWebUnit(paddingBottom.value));\r\n\r\nwatch(\r\n () => infiniteScrollRef.value?.rootElement,\r\n (value) => {\r\n containerRef.value = value;\r\n },\r\n);\r\n\r\nwatch(\r\n () => props.filters,\r\n () => {\r\n loadFirstPage();\r\n },\r\n { deep: true },\r\n);\r\n\r\nfunction loadFirstPage() {\r\n isLoading.value = true;\r\n const nextPage = 1;\r\n function setPageItems(\r\n results: DataTableItemProps[\"items\"],\r\n isLastPage: boolean = false,\r\n ) {\r\n itemsModel.value = results;\r\n pageModel.value = nextPage;\r\n /**\r\n * We have to wait for DOM to update before resetScroll to cater for\r\n * show/hiding infinite scroll from an empty state.\r\n */\r\n nextTick(() => {\r\n resetScroll(\r\n results.length < props.itemsPerPage || isLastPage\r\n ? \"finished\"\r\n : \"ok\",\r\n );\r\n isLoading.value = false;\r\n });\r\n }\r\n emit(\"load\", { setPageItems, page: nextPage });\r\n}\r\n\r\nfunction onInfiniteScrollLoad(options) {\r\n const nextPage = pageModel.value + 1;\r\n function setPageItems(\r\n results: DataTableItemProps[\"items\"],\r\n isLastPage: boolean = false,\r\n ) {\r\n itemsModel.value.push(...results);\r\n pageModel.value = nextPage;\r\n results.length < props.itemsPerPage || isLastPage\r\n ? options.done()\r\n : options.next();\r\n }\r\n emit(\"load\", { setPageItems, page: nextPage });\r\n}\r\n\r\nfunction resetScroll(status: InfiniteScrollStatus = \"ok\") {\r\n infiniteScrollRef.value?.reset(status);\r\n}\r\n\r\nfunction colStyle(column: DataTableHeader) {\r\n return {\r\n width: calculateDisplayRuleValue(column.width),\r\n minWidth: calculateDisplayRuleValue(column.minWidth),\r\n maxWidth: calculateDisplayRuleValue(column.maxWidth),\r\n };\r\n}\r\n\r\ndefineExpose({\r\n resetScroll,\r\n reload: loadFirstPage,\r\n});\r\n\r\nonMounted(() => {\r\n if (!itemsModel.value?.length) {\r\n loadFirstPage();\r\n }\r\n});\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"['ev-data-table', props.class]\"\r\n :style=\"[dimensions, props.style]\">\r\n <ev-data-table-search\r\n v-bind=\"searchProps\"\r\n v-model:search=\"searchModel\"\r\n v-model:sort=\"sortModel\"\r\n :loading=\"isLoading\"\r\n :hide-select-all=\"props.showHeaders\"\r\n :filters=\"props.filters\"\r\n @update:sort=\"loadFirstPage\"\r\n @update:search=\"loadFirstPage\">\r\n <template v-if=\"slots['select-actions']\" #select-actions>\r\n <slot name=\"select-actions\" />\r\n </template>\r\n <template v-if=\"slots.filters\" #filters>\r\n <slot name=\"filters\" />\r\n </template>\r\n </ev-data-table-search>\r\n <div v-if=\"isEmpty\" class=\"ev-data-table--empty\">\r\n <slot name=\"empty\">{{ t(\"table.empty\") }}</slot>\r\n </div>\r\n <ev-infinite-scroll\r\n v-else\r\n ref=\"infiniteScrollRef\"\r\n class=\"ev-data-table--wrapper\"\r\n :disabled=\"infiniteScrollDisabled\"\r\n :show-finished=\"props.showFinished\"\r\n @load=\"onInfiniteScrollLoad\"\r\n @scroll.passive=\"handleScroll\"\r\n @scrollend=\"handleScrollend\">\r\n <template v-if=\"slots.finished\" #finished>\r\n <slot name=\"finished\" />\r\n </template>\r\n <table class=\"ev-data-table--native\">\r\n <slot name=\"colgroup\">\r\n <colgroup>\r\n <col v-if=\"props.showSelect\" />\r\n <col\r\n v-for=\"(column, colIndex) of columns\"\r\n :key=\"colIndex\"\r\n :style=\"colStyle(column)\" />\r\n </colgroup>\r\n </slot>\r\n <thead\r\n v-if=\"props.showHeaders\"\r\n class=\"ev-data-table--thead\"\r\n role=\"rowgroup\">\r\n <tr v-for=\"(row, rowIndex) of headers\" :key=\"rowIndex\">\r\n <ev-data-table-cell\r\n v-if=\"showSelectAll && rowIndex === 0\"\r\n tag=\"th\"\r\n :colspan=\"1\"\r\n :rowspan=\"headers.length\"\r\n class=\"ev-data-table-cell--checkbox\">\r\n <ev-checkbox\r\n :model-value=\"allSelected\"\r\n :indeterminate=\"someSelected && !allSelected\"\r\n @update:model-value=\"selectAll\" />\r\n </ev-data-table-cell>\r\n <ev-data-table-cell\r\n v-for=\"(header, headerIndex) of row\"\r\n :key=\"headerIndex\"\r\n tag=\"th\"\r\n v-bind=\"header.headerProps\"\r\n :align=\"header.align\"\r\n :colspan=\"header.colspan\"\r\n :rowspan=\"header.rowspan\">\r\n <slot\r\n :name=\"`header.${header.key}`\"\r\n v-bind=\"{ header }\">\r\n {{ header.title }}\r\n </slot>\r\n </ev-data-table-cell>\r\n </tr>\r\n </thead>\r\n <tbody class=\"ev-data-table--tbody\" role=\"rowgroup\">\r\n <tr\r\n ref=\"markerRef\"\r\n class=\"ev-data-table--spacer-above\"\r\n :style=\"{ height: spaceAbove, border: 0 }\">\r\n <td\r\n :colspan=\"totalColumns\"\r\n :style=\"{ height: 0, border: 0 }\"></td>\r\n </tr>\r\n <ev-virtual-scroll-item\r\n v-for=\"displayItem of computedItems\"\r\n :key=\"displayItem.raw.key ?? displayItem.index\"\r\n renderless\r\n @update:height=\"\r\n (h) => handleItemResize(displayItem.index, h)\r\n \">\r\n <template #default=\"{ itemRef }\">\r\n <ev-data-table-row\r\n v-bind=\"{\r\n ref: itemRef,\r\n item: displayItem.raw,\r\n index: displayItem.index,\r\n ...getPrefixedEventHandlers(\r\n props,\r\n ':row',\r\n () => ({ ...itemRef.value }),\r\n ),\r\n }\">\r\n <template #default=\"itemProps\">\r\n <slot name=\"default\" v-bind=\"itemProps\" />\r\n </template>\r\n <template\r\n v-for=\"column in columns\"\r\n :key=\"`item-${displayItem.index}-${column.key}`\"\r\n #[`item.${column.key}`]=\"cellProps\">\r\n <slot\r\n v-if=\"!slots.default\"\r\n :name=\"`item.${column.key}`\"\r\n v-bind=\"cellProps\" />\r\n </template>\r\n </ev-data-table-row>\r\n </template>\r\n </ev-virtual-scroll-item>\r\n <tr\r\n class=\"ev-data-table--spacer-below\"\r\n :style=\"{ height: spaceBelow, border: 0 }\">\r\n <td\r\n :colspan=\"totalColumns\"\r\n :style=\"{ height: 0, border: 0 }\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ev-infinite-scroll>\r\n </div>\r\n</template>\r\n","import { propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\n\nexport type SelectionModeProp = \"single\" | \"multiple\" | \"range\";\n\n// type ModelValueProp = Array\n\nexport const makeEvDatePickerMonthProps = propsFactory(\n {\n allowedDates: [Array, Function],\n max: null as any as PropType<unknown>,\n min: null as any as PropType<unknown>,\n modelValue: [Array, String, Date],\n month: [Number, String],\n selectionMode: {\n type: String as PropType<SelectionModeProp>,\n default: \"single\",\n },\n showAdjacentMonths: {\n type: Boolean,\n default: true,\n },\n year: [Number, String],\n },\n \"EvDatePickerMonth\",\n);\n\n/**\n * # Day\n * Represents data used for rendering days in the month.\n */\nexport interface Day {\n date: Date;\n isoDate: string;\n formatted: string;\n year: number;\n month: number;\n isDisabled: boolean;\n isWeekStart: boolean;\n isWeekEnd: boolean;\n isSelected: boolean;\n isToday: boolean;\n isAdjacent: boolean;\n isInRange: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isHidden: boolean;\n isHovered: boolean;\n localized: string;\n}\n","<script setup lang=\"ts\">\n/**\n * # `<ev-date-picker-month>`\n */\nimport \"./EvDatePickerMonth.scss\";\nimport { Day, makeEvDatePickerMonthProps } from \"./EvDatePickerMonth\";\nimport { useDate } from \"@/composables/date/date\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { wrapInArray } from \"@/util\";\nimport { computed, watch } from \"vue\";\nimport { EvButton } from \"@/components/EvButton\";\n\nconst props = defineProps({\n ...makeEvDatePickerMonthProps(),\n});\nconst dateAdapter = useDate();\ndefineEmits([\"update:modelValue\", \"update:month\", \"update:year\"]);\n\n/**\n * The `modelValue` is always provided from the parent component as an array\n * and leaves as an array if `multiple` is `true`.\n */\nconst modelValue = useModelProxy(props, \"modelValue\", [], (value) =>\n wrapInArray(value),\n);\n\nconst displayValue = computed(() => {\n if (modelValue.value.length > 0) {\n return dateAdapter.date(modelValue.value[0]);\n }\n if (props.min) {\n return dateAdapter.date(props.min);\n }\n if (Array.isArray(props.allowedDates)) {\n return dateAdapter.date(props.allowedDates[0]);\n }\n return dateAdapter.date();\n});\n\n// YEAR\nconst year = useModelProxy(\n props,\n \"year\",\n undefined,\n (v) => {\n const value =\n v != null ? Number(v) : dateAdapter.getYear(displayValue.value);\n return dateAdapter.startOfYear(\n dateAdapter.setYear(dateAdapter.date(), value),\n );\n },\n (v) => dateAdapter.getYear(v),\n);\n\n// MONTH\nconst month = useModelProxy(\n props,\n \"month\",\n undefined,\n (v) => {\n const value =\n v != null ? Number(v) : dateAdapter.getMonth(displayValue.value);\n let date = dateAdapter.startOfMonth(dateAdapter.date());\n date = dateAdapter.setYear(date, dateAdapter.getYear(year.value));\n return dateAdapter.setMonth(date, value);\n },\n (v) => dateAdapter.getMonth(v),\n);\n\n/**\n * ## Weeks in Month\n */\nconst weeksInMonth = computed(() => {\n const weeks = dateAdapter.getWeekArray(month.value);\n const days = weeks.flat();\n const daysInMonth = 6 * 7;\n if (days.length < daysInMonth) {\n const lastDay = days[days.length - 1];\n let week = [];\n for (let day = 1; day <= daysInMonth - days.length; day++) {\n week.push(dateAdapter.addDays(lastDay, day));\n if (day % 7 === 0) {\n weeks.push(week);\n week = [];\n }\n }\n }\n return weeks;\n});\n\n/**\n * ## Days in Month\n */\nconst daysInMonth = computed(() => {\n const days = weeksInMonth.value.flat();\n const today = dateAdapter.date();\n return days.map((date, index) => {\n const isoDate = dateAdapter.toISO(date);\n const isAdjacent = !dateAdapter.isSameMonth(date, month.value);\n const isInRange =\n props.selectionMode === \"range\" &&\n modelValue.value[0] &&\n dateAdapter.isAfter(date, modelValue.value[0]) &&\n modelValue.value[1] &&\n dateAdapter.isBefore(date, modelValue.value[1]);\n const isRangeStart =\n props.selectionMode === \"range\" &&\n modelValue.value[0] &&\n dateAdapter.isSameDay(date, modelValue.value[0]);\n const isRangeEnd =\n props.selectionMode === \"range\" &&\n modelValue.value[1] &&\n dateAdapter.isSameDay(date, modelValue.value[1]);\n return {\n date,\n isoDate,\n formatted: dateAdapter.format(date, \"keyboardDate\"),\n year: dateAdapter.getYear(date),\n month: dateAdapter.getMonth(date),\n isDisabled: isDisabled(date),\n isWeekStart: index % 7 === 0,\n isWeekEnd: index % 7 === 6,\n isSelected: modelValue.value.some((value: any) =>\n dateAdapter.isSameDay(date, value),\n ),\n isToday: dateAdapter.isSameDay(date, today),\n isAdjacent,\n isInRange,\n isRangeStart,\n isRangeEnd,\n isHidden: isAdjacent && !props.showAdjacentMonths,\n isHovered: false,\n localized: dateAdapter.format(date, \"dayOfMonth\"),\n } as Day;\n });\n});\n\n/**\n * ## isDisabled\n */\nfunction isDisabled(value: unknown) {\n const date = dateAdapter.date(value);\n if (props.min && dateAdapter.isBefore(date, props.min)) {\n return true;\n }\n if (props.max && dateAdapter.isAfter(date, props.max)) {\n return true;\n }\n if (Array.isArray(props.allowedDates)) {\n return !props.allowedDates.some((allowedDate) => {\n return dateAdapter.isSameDay(dateAdapter.date(allowedDate), date);\n });\n }\n if (typeof props.allowedDates === \"function\") {\n return !props.allowedDates(date);\n }\n return false;\n}\n\n/**\n * ## Get Day Appearance\n * @param day\n */\nfunction getDayAppearance(day: Day) {\n return day.isSelected || day.isInRange || day.isToday\n ? \"primary\"\n : \"default\";\n}\n\n/**\n * ## Get Day Variant\n * @param day\n */\nfunction getDayVariant(day: Day) {\n if (day.isSelected || day.isInRange) {\n return \"bold\";\n }\n if (day.isToday) {\n return \"tonal\";\n }\n return \"subtle\";\n}\n\n/**\n * ## On Click Event\n * @param date\n */\nfunction onClick(date: Date) {\n if (props.selectionMode === \"range\") {\n const startDate = modelValue.value[0];\n const endDate = modelValue.value[1];\n if (startDate && !endDate && date.getTime() >= startDate.getTime()) {\n modelValue.value = [startDate, date];\n } else if (endDate && date.getTime() >= endDate.getTime()) {\n modelValue.value = [startDate, date];\n } else {\n modelValue.value = [date];\n }\n } else if (props.selectionMode === \"multiple\") {\n const index = modelValue.value.findIndex((selection: any) =>\n dateAdapter.isSameDay(selection, date),\n );\n if (index === -1) {\n modelValue.value = [...modelValue.value, date];\n } else {\n const value = [...modelValue.value];\n value.splice(index, 1);\n modelValue.value = value;\n }\n } else {\n modelValue.value = [date];\n }\n}\n\nwatch(displayValue, (value) => {\n month.value = value;\n year.value = value;\n});\n</script>\n\n<template>\n <div\n :class=\"[\n 'ev-date-picker-month',\n {\n 'is-select-single': props.selectionMode === 'single',\n 'is-select-multiple': props.selectionMode === 'multiple',\n 'is-select-range': props.selectionMode === 'range',\n },\n ]\">\n <div class=\"ev-date-picker-month--days\">\n <div\n v-for=\"weekDay in dateAdapter.getWeekdays()\"\n :key=\"weekDay\"\n class=\"ev-date-picker-month--weekday\">\n {{ weekDay }}\n </div>\n\n <div\n v-for=\"day in daysInMonth\"\n :key=\"day.isoDate\"\n :class=\"[\n 'ev-date-picker-month--day',\n {\n 'is-adjacent': day.isAdjacent,\n 'is-adjacent-hidden': day.isHidden,\n 'is-selected': day.isSelected,\n 'is-week-end': day.isWeekEnd,\n 'is-week-start': day.isWeekStart,\n 'is-range-start': day.isRangeStart,\n 'is-range-within': day.isInRange,\n 'is-range-end': day.isRangeEnd,\n },\n ]\">\n <ev-button\n v-if=\"!day.isHidden\"\n rounded\n :icon=\"true\"\n :disabled=\"day.isDisabled\"\n :appearance=\"getDayAppearance(day)\"\n :variant=\"getDayVariant(day)\"\n :text=\"day.localized\"\n @click=\"onClick(day.date)\" />\n </div>\n </div>\n </div>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\n\nexport const makeEvDatePickerYearsProps = propsFactory(\n {\n min: null as any as PropType<unknown>,\n max: null as any as PropType<unknown>,\n modelValue: Number,\n },\n \"EvDatePickerYears\",\n);\n","<script setup lang=\"ts\">\n/**\n * `<ev-date-picker-years>`\n */\nimport \"./EvDatePickerYears.scss\";\nimport { makeEvDatePickerYearsProps } from \"./EvDatePickerYears\";\nimport { EvList } from \"@/components/EvList\";\nimport { EvListItem } from \"@/components/EvListItem\";\nimport { computed, nextTick, onMounted, ref } from \"vue\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { useDate } from \"@/composables/date/date\";\nimport { wrapInArray } from \"@/util\";\n\nconst dateAdapter = useDate();\nconst props = defineProps({\n ...makeEvDatePickerYearsProps(),\n});\ndefineEmits([\"update:modelValue\"]);\n\nconst modelValue = useModelProxy(\n props,\n \"modelValue\",\n undefined,\n (value) => wrapInArray(value),\n (value) => value[0] ?? null,\n);\n\nconst offsetMin = -120;\nconst offsetMax = 50;\nconst currentYear = dateAdapter.getYear(dateAdapter.date());\n\nconst items = computed(() => {\n const minYear = props.min\n ? dateAdapter.getYear(props.min)\n : currentYear + offsetMin;\n const maxYear = props.max\n ? dateAdapter.getYear(props.max)\n : currentYear + offsetMax;\n\n const years = [];\n for (let year = minYear; year <= maxYear; year++) {\n const date = dateAdapter.setYear(dateAdapter.date(), year);\n years.push({\n title: dateAdapter.format(date, \"year\"),\n value: year,\n });\n }\n return years.reverse();\n});\n\nconst listRef = ref();\nfunction scrollIntoView() {\n const selectedEl = listRef.value?.$el.querySelector(\".is-active\");\n if (selectedEl) {\n // Now I need to get the selected item from the list\n // this is a bit of a hack because I can't seem to get dynamic ref working.\n selectedEl.scrollIntoView({\n block: \"center\",\n });\n }\n}\n\nonMounted(async () => {\n await nextTick();\n scrollIntoView();\n});\n</script>\n\n<template>\n <div class=\"ev-date-picker-years\">\n <ev-list\n ref=\"listRef\"\n v-model:selected=\"modelValue\"\n required\n select-strategy=\"single-any\">\n <ev-list-item\n v-for=\"(item, i) in items\"\n :key=\"i\"\n :title=\"item.title\"\n :value=\"item.value\" />\n </ev-list>\n </div>\n</template>\n","import { omit, propsFactory } from \"@/util\";\nimport { makeEvDatePickerMonthProps } from \"@/components/EvDatePicker/EvDatePickerMonth\";\nimport { makeEvDatePickerYearsProps } from \"@/components/EvDatePicker/EvDatePickerYears\";\nimport { PropType } from \"vue\";\n\nexport const makeEvDatePickerProps = propsFactory(\n {\n viewMode: {\n type: String as PropType<\"month\" | \"months\" | \"years\">,\n default: \"month\",\n },\n\n ...makeEvDatePickerMonthProps(),\n ...omit(makeEvDatePickerYearsProps as any, [\"modelValue\"]),\n },\n \"EvDatePicker\",\n);\n","import { propsFactory } from \"@/util\";\n\nexport const makeEvDatePickerMonthsProps = propsFactory(\n {\n modelValue: Number,\n },\n \"EvDatePickerMonths\",\n);\n","<script setup lang=\"ts\">\n/**\n * `<ev-date-picker-months>`\n */\nimport \"./EvDatePickerMonths.scss\";\nimport { makeEvDatePickerMonthsProps } from \"./EvDatePickerMonths\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { computed } from \"vue\";\nimport { useDate } from \"@/composables/date/date\";\nimport { createRange } from \"@/util\";\nimport { EvButton } from \"@/components/EvButton\";\n\nconst dateAdapter = useDate();\nconst props = defineProps({\n ...makeEvDatePickerMonthsProps(),\n});\nconst modelValue = useModelProxy(props, \"modelValue\");\ndefineEmits([\"update:modelValue\"]);\n\nconst months = computed(() => {\n let date = dateAdapter.startOfYear(dateAdapter.date());\n return createRange(12).map((i) => {\n const text = dateAdapter.format(date, \"monthShort\");\n date = dateAdapter.getNextMonth(date);\n return {\n text,\n value: i,\n };\n });\n});\n\nconst internalValue = computed(() => {\n return modelValue.value ?? dateAdapter.getMonth(dateAdapter.date());\n});\n\nfunction onClick(i: number) {\n modelValue.value = i;\n}\n\nfunction getAppearance(value?: number) {\n return value === internalValue.value ? \"primary\" : \"default\";\n}\n\nfunction getVariant(value?: number) {\n return value === internalValue.value ? \"bold\" : \"subtle\";\n}\n</script>\n\n<template>\n <div class=\"ev-date-picker-months\">\n <ev-button\n v-for=\"(month, i) in months\"\n :key=\"i\"\n :text=\"month.text\"\n :appearance=\"getAppearance(month.value)\"\n :variant=\"getVariant(month.value)\"\n @click=\"onClick(month.value)\" />\n </div>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport { PropType } from \"vue\";\nimport { DisplayRuleProp, VisibilityRuleProp } from \"@/composables/display\";\n\n/**\n * # makeEvContainerProps\n */\nexport const makeEvContainerProps = propsFactory(\n {\n fluid: {\n type: Boolean,\n default: false,\n },\n fill: Boolean,\n hidden: [Boolean, String, Array] as PropType<VisibilityRuleProp>,\n height: [String, Number, Object] as PropType<DisplayRuleProp>,\n width: [String, Number, Object] as PropType<DisplayRuleProp>,\n\n ...makeComponentProps(),\n ...makeTagProps(),\n },\n \"EvContainer\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvContainer.scss\";\nimport { makeEvContainerProps } from \"./EvContainer\";\nimport {\n calculateDisplayRuleValue,\n useDisplayRuleClasses,\n} from \"@/composables/display\";\nimport { computed } from \"vue\";\nimport { isBoolean, isEmpty } from \"@/util\";\n\nconst props = defineProps({\n ...makeEvContainerProps(),\n});\n\n/**\n * Hidden\n */\nconst hiddenClasses = useDisplayRuleClasses(props, \"hidden\", \"hidden\");\nconst hiddenAttribute = computed(() => {\n return isBoolean(props.hidden) && props.hidden;\n});\n\n/**\n * Height\n */\nconst heightStyles = computed(() => {\n const value = calculateDisplayRuleValue(props.height);\n if (isEmpty(value)) {\n return undefined;\n }\n return { height: value + \" !important\" };\n});\n\n/**\n * Width\n */\nconst widthStyles = computed(() => {\n const value = calculateDisplayRuleValue(props.width);\n if (isEmpty(value)) {\n return undefined;\n }\n return value === \"grow\" ? { width: \"100%\" } : { width: value };\n});\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n :class=\"[\n 'ev-container',\n {\n 'is-fluid': props.fluid,\n 'fill-height': props.fill,\n },\n ...hiddenClasses,\n props.class,\n ]\"\n :style=\"[props.style, widthStyles, heightStyles]\"\n :hidden=\"hiddenAttribute\">\n <slot />\n </component>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport {\n DisplayBreakpoint,\n DisplayRuleProp,\n VisibilityRuleProp,\n} from \"@/composables/display\";\nimport { PropType } from \"vue\";\n\n/** Align Items **/\nexport type AlignItemsValue =\n | \"start\"\n | \"end\"\n | \"center\"\n | \"baseline\"\n | \"stretch\";\nexport type AlignItemsObject = {\n [key in DisplayBreakpoint]: AlignItemsValue;\n};\nexport type AlignItemsProp = AlignItemsValue | AlignItemsObject | undefined;\n\n/** Align Content **/\nexport type AlignContentValue =\n | \"start\"\n | \"end\"\n | \"center\"\n | \"stretch\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\";\nexport type AlignContentObject = {\n [key in DisplayBreakpoint]: AlignContentValue;\n};\nexport type AlignContentProp =\n | AlignContentValue\n | AlignContentObject\n | undefined;\n\n/** Justify Content **/\nexport type JustifyContentValue =\n | \"start\"\n | \"end\"\n | \"center\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\";\nexport type JustifyContentObject = {\n [key in DisplayBreakpoint]: JustifyContentValue;\n};\nexport type JustifyContentProp =\n | JustifyContentValue\n | JustifyContentObject\n | undefined;\n\n/** Spacers **/\nexport type SpacerValue = number | string | undefined;\nexport type SpacerObject = {\n [key in DisplayBreakpoint]: SpacerValue;\n};\nexport type SpacerProp = SpacerValue | SpacerObject | undefined;\n\n/**\n * # makeEvLayoutProps\n */\nexport const makeEvLayoutProps = propsFactory(\n {\n align: [String, Object] as PropType<AlignItemsProp>,\n alignContent: [String, Object] as PropType<AlignContentProp>,\n column: Boolean,\n gap: [String, Number, Object] as PropType<SpacerProp>,\n gutter: [String, Number, Object] as PropType<SpacerProp>,\n justify: [String, Object] as PropType<JustifyContentProp>,\n nowrap: Boolean,\n hidden: [Boolean, String, Array] as PropType<VisibilityRuleProp>,\n height: [String, Number, Object] as PropType<DisplayRuleProp>,\n width: [String, Number, Object] as PropType<DisplayRuleProp>,\n\n ...makeComponentProps(),\n ...makeTagProps(),\n },\n \"EvLayout\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvLayout.scss\";\nimport { makeEvLayoutProps } from \"./EvLayout\";\nimport {\n calculateDisplayRuleValue,\n useBreakpointClasses,\n useDisplayRuleClasses,\n} from \"@/composables/display\";\nimport { computed } from \"vue\";\nimport { isBoolean, isEmpty } from \"@/util\";\n\nconst props = defineProps({\n ...makeEvLayoutProps(),\n});\n\nconst alignItemsClasses = useBreakpointClasses(props, \"align\", \"align\");\nconst alignContentClasses = useBreakpointClasses(\n props,\n \"alignContent\",\n \"align-content\",\n);\nconst justifyContentClasses = useBreakpointClasses(props, \"justify\", \"justify\");\nconst gutterClasses = useBreakpointClasses(props, \"gutter\", \"gutter\");\nconst gapClasses = useBreakpointClasses(props, \"gap\", \"ga\");\n\n/**\n * Hidden\n */\nconst hiddenClasses = useDisplayRuleClasses(props, \"hidden\", \"hidden\");\nconst hiddenAttribute = computed(() => {\n return isBoolean(props.hidden) && props.hidden;\n});\n\n/**\n * Height\n */\nconst heightStyles = computed(() => {\n const value = calculateDisplayRuleValue(props.height);\n if (isEmpty(value)) {\n return undefined;\n }\n return { height: value };\n});\n\n/**\n * Width\n */\nconst widthStyles = computed(() => {\n const value = calculateDisplayRuleValue(props.width);\n if (isEmpty(value)) {\n return undefined;\n }\n return value === \"grow\"\n ? { flex: \"1 0 auto\", maxWidth: \"100%\", width: \"100%\" }\n : { flex: `0 0 ${value}`, maxWidth: value, width: value };\n});\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n :class=\"[\n 'ev-layout',\n {\n 'is-column': props.column,\n 'is-nowrap': props.nowrap,\n },\n ...alignItemsClasses,\n ...alignContentClasses,\n ...justifyContentClasses,\n ...gapClasses,\n ...gutterClasses,\n ...hiddenClasses,\n props.class,\n ]\"\n :style=\"[props.style, widthStyles, heightStyles]\"\n :hidden=\"hiddenAttribute\">\n <slot />\n </component>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport {\n DisplayBreakpoint,\n DisplayRuleProp,\n VisibilityRuleProp,\n} from \"@/composables/display\";\nimport { PropType } from \"vue\";\n\n/** Block Number Props */\nexport type BlockNumber = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\nexport type BlockNumberPropValue = BlockNumber | `${BlockNumber}`;\nexport type BlockNumberPropObject = {\n [key in DisplayBreakpoint]: BlockNumberPropValue;\n};\nexport type BlockNumberProp =\n | BlockNumberPropValue\n | BlockNumberPropObject\n | undefined;\n\n/** Block Size Props **/\nexport type BlockSizePropValue = \"auto\" | \"grow\" | BlockNumberPropValue;\nexport type BlockSizePropObject = {\n [key in DisplayBreakpoint]: BlockSizePropValue;\n};\nexport type BlockSizeProp = BlockSizePropValue | BlockSizePropObject;\n\n/** Responsive Props */\nexport type ResponsivePropValue = string | number | boolean;\nexport type ResponsivePropObject = {\n [key in DisplayBreakpoint]: ResponsivePropValue;\n};\nexport type ResponsiveProp =\n | ResponsivePropValue\n | ResponsivePropObject\n | undefined;\n\n/** Align Self Props */\nexport type AlignSelfPropValue =\n | \"auto\"\n | \"start\"\n | \"end\"\n | \"center\"\n | \"baseline\"\n | \"stretch\";\nexport type AlignSelfPropObject = {\n [key in DisplayBreakpoint]: AlignSelfPropValue;\n};\nexport type AlignSelfProp =\n | AlignSelfPropValue\n | AlignSelfPropObject\n | undefined;\n\n/**\n * # makeEvBlockProps\n */\nexport const makeEvBlockProps = propsFactory(\n {\n alignSelf: [String, Object] as PropType<AlignSelfProp>,\n offset: [String, Number, Object] as PropType<BlockNumberProp>,\n order: [String, Number, Object] as PropType<BlockNumberProp>,\n scrollable: Boolean,\n size: [String, Number, Object] as PropType<BlockSizeProp>,\n hidden: [Boolean, String, Array] as PropType<VisibilityRuleProp>,\n height: [String, Number, Object] as PropType<DisplayRuleProp>,\n width: [String, Number, Object] as PropType<DisplayRuleProp>,\n\n ...makeComponentProps(),\n ...makeTagProps(),\n },\n \"EvBlock\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvBlock.scss\";\nimport { makeEvBlockProps } from \"./EvBlock\";\nimport { computed } from \"vue\";\nimport {\n calculateDisplayRuleValue,\n useBreakpointClasses,\n useDisplayRuleClasses,\n} from \"@/composables/display.ts\";\nimport { isBoolean, isEmpty } from \"@/util\";\n\nconst props = defineProps({\n ...makeEvBlockProps(),\n});\n\n/**\n * # Size Classes\n */\nconst sizeClasses = useBreakpointClasses(props, \"size\", undefined, true);\nconst orderClasses = useBreakpointClasses(props, \"order\", \"order\");\nconst offsetClasses = useBreakpointClasses(props, \"offset\", \"offset\");\nconst alignSelfClasses = useBreakpointClasses(props, \"alignSelf\", \"align-self\");\n\n/**\n * Width\n */\nconst widthStyles = computed(() => {\n const value = calculateDisplayRuleValue(props.width);\n if (isEmpty(value)) {\n return undefined;\n }\n return value === \"grow\"\n ? { flex: \"1 0 auto\", maxWidth: \"100%\" }\n : { flex: `0 0 ${value}`, maxWidth: value };\n});\n\n/**\n * Hidden\n */\nconst hiddenClasses = useDisplayRuleClasses(props, \"hidden\", \"hidden\");\nconst hiddenAttribute = computed(() => {\n return isBoolean(props.hidden) && props.hidden;\n});\n\n/**\n * Height\n */\nconst heightStyles = computed(() => {\n const value = calculateDisplayRuleValue(props.height);\n if (isEmpty(value)) {\n return undefined;\n }\n return { height: value };\n});\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n :class=\"[\n 'ev-block',\n {\n 'is-scrollable': props.scrollable,\n },\n ...sizeClasses,\n ...orderClasses,\n ...offsetClasses,\n ...alignSelfClasses,\n ...hiddenClasses,\n props.class,\n ]\"\n :style=\"[props.style, widthStyles, heightStyles]\"\n :hidden=\"hiddenAttribute\">\n <slot />\n </component>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\n\n/**\n * # makeEvSpacerProps\n */\nexport const makeEvSpacerProps = propsFactory(\n {\n ...makeComponentProps(),\n },\n \"EvSpacer\",\n);\n","<script setup lang=\"ts\">\n/**\n * # Ev Date Picker\n * `<ev-date-picker>`\n */\nimport \"./EvDatePicker.scss\";\nimport { makeEvDatePickerProps } from \"./EvDatePicker\";\nimport { useDate } from \"@/composables/date/date\";\nimport { computed, ref, shallowRef, watch } from \"vue\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { filterComponentProps, omit, wrapInArray } from \"@/util\";\nimport { EvDatePickerMonth } from \"./EvDatePickerMonth\";\nimport { EvDatePickerMonths } from \"./EvDatePickerMonths\";\nimport { EvDatePickerYears } from \"./EvDatePickerYears\";\nimport { EvButton } from \"@/components/EvButton\";\nimport { EvSpacer } from \"@/components/EvGrid\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"@/icons\";\n\nconst props = defineProps({\n ...makeEvDatePickerProps(),\n});\nconst dateAdapter = useDate();\nconst isReversing = shallowRef(false);\n\n// Emit\nconst emit = defineEmits([\n \"update:modelValue\",\n \"update:month\",\n \"update:year\",\n \"update:viewMode\",\n]);\n\nconst modelValue = useModelProxy(props, \"modelValue\", undefined, (value) =>\n wrapInArray(value),\n);\n\nconst internalValue = computed(() => {\n const value = dateAdapter.date(modelValue.value?.[0]);\n return value && dateAdapter.isValid(value) ? value : dateAdapter.date();\n});\n\nwatch(modelValue, (newValue, oldValue) => {\n const before = dateAdapter.date(wrapInArray(newValue)[0]);\n const after = dateAdapter.date(wrapInArray(oldValue)[0]);\n isReversing.value = dateAdapter.isBefore(before, after);\n});\n\nconst viewMode = useModelProxy(props, \"viewMode\");\n\n/**\n * Month related definitions\n */\nconst month = ref(\n Number(\n props.month ??\n dateAdapter.getMonth(dateAdapter.startOfMonth(internalValue.value)),\n ),\n);\n\nconst monthProps = computed(() =>\n filterComponentProps(EvDatePickerMonth, props),\n);\n\nconst monthText = computed(() => {\n const date = dateAdapter.startOfMonth(dateAdapter.date());\n return dateAdapter.format(dateAdapter.setMonth(date, month.value), \"month\");\n});\n\nwatch(month, () => {\n if (viewMode.value === \"months\") {\n toggleViewMonth();\n }\n});\n\n/**\n * Year related definitions\n */\nconst year = ref(\n Number(\n props.year ??\n dateAdapter.getYear(\n dateAdapter.startOfYear(\n dateAdapter.setMonth(internalValue.value, month.value),\n ),\n ),\n ),\n);\n\nconst yearProps = computed(() =>\n omit(filterComponentProps(EvDatePickerYears, props), [\"modelValue\"]),\n);\n\nconst yearText = computed(() => {\n return dateAdapter.format(\n dateAdapter.setYear(dateAdapter.date(), year.value),\n \"year\",\n );\n});\n\nwatch(year, () => {\n if (viewMode.value === \"years\") {\n toggleViewYear();\n }\n});\n\n/**\n * Min & Max date definitions\n */\nconst minDate = computed(() => {\n const date = dateAdapter.date(props.min);\n return props.min && dateAdapter.isValid(date) ? date : null;\n});\n\nconst maxDate = computed(() => {\n const date = dateAdapter.date(props.max);\n return props.max && dateAdapter.isValid(date) ? date : null;\n});\n\n/**\n * ## Next Month\n */\nfunction onClickNext() {\n if (month.value < 11) {\n month.value++;\n } else {\n year.value++;\n month.value = 0;\n emit(\"update:year\", year.value);\n }\n emit(\"update:month\", month.value);\n}\n\n/**\n * ## Previous Month\n */\nfunction onClickPrevious() {\n if (month.value > 0) {\n month.value--;\n } else {\n year.value--;\n month.value = 11;\n emit(\"update:year\", year.value);\n }\n emit(\"update:month\", month.value);\n}\n\n/**\n * Toggle View Mode between Months and Month\n */\nfunction toggleViewMonth() {\n viewMode.value = viewMode.value === \"months\" ? \"month\" : \"months\";\n}\n\n/**\n * Toggle View Mode between Years and Month\n */\nfunction toggleViewYear() {\n viewMode.value = viewMode.value === \"years\" ? \"month\" : \"years\";\n}\n</script>\n\n<template>\n <div class=\"ev-date-picker\">\n <div class=\"ev-date-picker-controls\">\n <ev-button\n variant=\"subtle\"\n :text=\"monthText\"\n @click=\"toggleViewMonth()\" />\n\n <ev-button\n variant=\"subtle\"\n :text=\"yearText\"\n @click=\"toggleViewYear()\" />\n\n <ev-spacer />\n\n <div class=\"ev-date-picker-controls--previous\">\n <ev-button\n variant=\"subtle\"\n :disabled=\"viewMode !== 'month'\"\n :icon=\"ChevronLeftIcon\"\n @click=\"onClickPrevious()\" />\n </div>\n\n <div class=\"ev-date-picker-controls--next\">\n <ev-button\n variant=\"subtle\"\n :disabled=\"viewMode !== 'month'\"\n :icon=\"ChevronRightIcon\"\n @click=\"onClickNext()\" />\n </div>\n </div>\n\n <ev-date-picker-years\n v-if=\"viewMode === 'years'\"\n v-bind=\"yearProps\"\n v-model=\"year\"\n :min=\"minDate\"\n :max=\"maxDate\" />\n\n <ev-date-picker-months\n v-else-if=\"viewMode === 'months'\"\n v-model=\"month\" />\n\n <ev-date-picker-month\n v-else\n v-bind=\"monthProps\"\n v-model=\"modelValue\"\n v-model:month=\"month\"\n v-model:year=\"year\"\n :min=\"minDate\"\n :max=\"maxDate\" />\n </div>\n</template>\n","import { omit, propsFactory } from \"@/util\";\nimport { makeEvDatePickerProps } from \"@/components/EvDatePicker\";\nimport { makeEvTextfieldProps } from \"@/components/EvTextfield\";\nimport { CalendarIcon } from \"@/icons\";\n\nexport const makeEvDateFieldProps = propsFactory(\n {\n ...omit(\n makeEvTextfieldProps({\n iconStart: CalendarIcon,\n }),\n [\"type\"],\n ),\n ...makeEvDatePickerProps(),\n },\n \"EvDateField\",\n);\n","<script setup lang=\"ts\">\n/**\n * `<ev-date-field>`\n */\nimport \"./EvDateField.scss\";\nimport { makeEvDateFieldProps } from \"./EvDateField\";\nimport { EvTextfield } from \"@/components/EvTextfield\";\nimport { EvMenu } from \"@/components/EvMenu\";\nimport { EvDatePicker } from \"@/components/EvDatePicker\";\nimport { EvSurface } from \"@/components/EvSurface\";\nimport { computed, ref, shallowRef, watch } from \"vue\";\nimport { FocusEvent } from \"react\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { filterComponentProps, omit, wrapInArray } from \"@/util\";\nimport { useDate } from \"@/composables/date/date\";\n\nconst dateAdapter = useDate();\nconst props = defineProps({\n ...makeEvDateFieldProps(),\n});\nconst slots = defineSlots<{\n label(): never;\n}>();\n\n// Text Field\nconst evMenuRef = ref<typeof EvMenu>();\nconst evTextfieldRef = ref<typeof EvTextfield>();\nconst evTextfieldProps = computed(() => {\n return omit(filterComponentProps(EvTextfield, props), [\"modelValue\"]);\n});\nconst isFocused = shallowRef(false);\n\n// Date Picker\nconst datePickerRef = ref<typeof EvDatePicker>();\nconst datePickerProps = computed(() => {\n return omit(filterComponentProps(EvDatePicker, props), [\"modelValue\"]);\n});\n\n// Menu\nconst isMenuOpen = shallowRef(false);\nconst modelValue = useModelProxy(\n props,\n \"modelValue\",\n undefined,\n (value) => wrapInArray(value),\n (value: any) => {\n return value[0] ?? null;\n },\n);\nconst displayValue = shallowRef<string | null>(null);\n\n/**\n * ## On Menu After Leave\n * Maintain focus on the EvSelect when leaving the menu - usually when tabbing out.\n */\nfunction onMenuAfterLeave() {\n if (isFocused.value && evTextfieldRef.value) {\n evTextfieldRef.value.focus();\n }\n}\n\nfunction onFieldFocus() {\n isFocused.value = true;\n isMenuOpen.value = true;\n}\n\n/**\n * ## On Field Blur\n * @param e\n */\nfunction onFieldBlur(e: FocusEvent) {\n if (!datePickerRef.value?.$el.contains(e.relatedTarget as HTMLElement)) {\n isMenuOpen.value = false;\n }\n}\n\n/**\n * ## On Date Picker Focus In\n * Maintain focus on the field when actions within the date picker occur.\n * @param e\n */\nfunction onDatePickerFocusIn(e: FocusEvent) {\n isFocused.value = true;\n}\n\nfunction onUpdateModelValue() {\n isMenuOpen.value = false;\n}\n\nfunction onClearInput() {\n setModelValue(null);\n}\n\nfunction setModelValue(value: any) {\n modelValue.value = wrapInArray(value);\n}\n\nfunction onInput(e: Event) {\n if (!displayValue.value?.length) {\n setModelValue(null);\n return;\n }\n const date = dateAdapter.date(displayValue.value);\n if (\n date &&\n dateAdapter.isValid(date) &&\n dateAdapter.getYear(date).toString().length === 4 &&\n dateAdapter.format(date, \"displayDate\") === displayValue.value\n ) {\n setModelValue(date);\n }\n}\n\nwatch(modelValue, () => {\n const date = modelValue.value[0] ?? null;\n if (!date || !dateAdapter.isValid(date)) {\n displayValue.value = null;\n } else {\n displayValue.value = dateAdapter.format(\n modelValue.value[0],\n \"displayDate\",\n );\n }\n});\n</script>\n\n<template>\n <ev-textfield\n ref=\"evTextfieldRef\"\n v-bind=\"evTextfieldProps\"\n v-model=\"displayValue\"\n v-model:focused=\"isFocused\"\n class=\"ev-date-field\"\n :validation-value=\"modelValue\"\n @click:control=\"onFieldFocus\"\n @blur=\"onFieldBlur\"\n @click:clear=\"onClearInput\"\n @input=\"onInput\">\n <template v-if=\"slots.label\" #label>\n <slot name=\"label\" />\n </template>\n <template #default>\n <ev-menu\n ref=\"evMenuRef\"\n v-model=\"isMenuOpen\"\n activator=\"parent\"\n position=\"bottom-start\"\n :open-on-click=\"false\"\n :close-on-content-click=\"false\"\n @after-leave=\"onMenuAfterLeave\">\n <ev-surface elevation=\"overlay\" class=\"ev-date-field--surface\">\n <ev-date-picker\n ref=\"datePickerRef\"\n v-bind=\"datePickerProps\"\n v-model=\"modelValue\"\n @focusin=\"onDatePickerFocusIn\"\n @update:model-value=\"onUpdateModelValue()\" />\n </ev-surface>\n </ev-menu>\n </template>\n </ev-textfield>\n</template>\n","<script lang=\"ts\">\nimport { propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\n\n/**\n * # makeEvDialogTransitionProps\n * We could export these if we need to later, but I don't see a need for that yet.\n */\nexport const makeEvDialogTransitionProps = propsFactory(\n {\n target: [Object, Array] as PropType<\n HTMLElement | [x: number, y: number]\n >,\n },\n \"EvDialogTransition\",\n);\n</script>\n\n<script setup lang=\"ts\">\nimport {\n adjustedBoundingRect,\n animate,\n easingAccelerate,\n easingDecelerate,\n getTargetRect,\n} from \"@/util\";\n\nconst props = defineProps({\n ...makeEvDialogTransitionProps(),\n});\n\n/**\n * ## getDimensions\n *\n * @param target\n * @param el\n */\nfunction getDimensions(\n target: HTMLElement | [x: number, y: number],\n el: HTMLElement,\n) {\n const targetRect = getTargetRect(target);\n const elRect = adjustedBoundingRect(el);\n const [originX, originY] = getComputedStyle(el)\n .transformOrigin.split(\" \")\n .map((v) => parseFloat(v));\n const [anchorSide, anchorOffset] = getComputedStyle(el)\n .getPropertyValue(\"--ev-overlay-position\")\n .split(\" \");\n\n let offsetX = targetRect.left + targetRect.width / 2;\n if (anchorSide === \"left\" || anchorOffset === \"left\") {\n offsetX -= targetRect.width / 2;\n } else if (anchorSide === \"right\" || anchorOffset === \"right\") {\n offsetX += targetRect.width / 2;\n }\n\n let offsetY = targetRect.top + targetRect.height / 2;\n if (anchorSide === \"top\" || anchorOffset === \"top\") {\n offsetY -= targetRect.height / 2;\n } else if (anchorSide === \"bottom\" || anchorOffset === \"bottom\") {\n offsetY += targetRect.height / 2;\n }\n\n const tsx = targetRect.width / elRect.width;\n const tsy = targetRect.height / elRect.height;\n const maxs = Math.max(1, tsx, tsy);\n const sx = tsx / maxs || 0;\n const sy = tsy / maxs || 0;\n\n // Animate elements larger than 12% of the screen area up to 1.5x slower\n const asa =\n (elRect.width * elRect.height) /\n (window.innerWidth * window.innerHeight);\n const speed = asa > 0.12 ? Math.min(1.5, (asa - 0.12) * 10 + 1) : 1;\n\n return {\n x: offsetX - (originX + elRect.left),\n y: offsetY - (originY + elRect.top),\n sx,\n sy,\n speed,\n };\n}\n\n/**\n * ## onBeforeEnter\n *\n * @param el\n */\nfunction onBeforeEnter(el: Element) {\n (el as HTMLElement).style.pointerEvents = \"none\";\n (el as HTMLElement).style.visibility = \"hidden\";\n}\n\n/**\n * ## onEnter\n *\n * @param el\n * @param done\n */\nasync function onEnter(el: Element, done: () => void) {\n await new Promise((resolve) => requestAnimationFrame(resolve));\n await new Promise((resolve) => requestAnimationFrame(resolve));\n\n (el as HTMLElement).style.visibility = \"\";\n\n const { x, y, sx, sy, speed } = getDimensions(\n props.target!,\n el as HTMLElement,\n );\n\n const animation = animate(\n el,\n [\n {\n transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`,\n opacity: 0,\n },\n {},\n ],\n {\n duration: 225 * speed,\n easing: easingDecelerate,\n },\n );\n animation.finished.then(() => done());\n}\n\n/**\n * ## onAfterEnter\n *\n * @param el\n */\nfunction onAfterEnter(el: Element) {\n (el as HTMLElement).style.removeProperty(\"pointer-events\");\n}\n\n/**\n * ## onBeforeLeave\n *\n * @param el\n */\nfunction onBeforeLeave(el: Element) {\n (el as HTMLElement).style.pointerEvents = \"none\";\n}\n\n/**\n * ## onLeave\n *\n * @param el\n * @param done\n */\nasync function onLeave(el: Element, done: () => void) {\n await new Promise((resolve) => requestAnimationFrame(resolve));\n const { x, y, sx, sy, speed } = getDimensions(\n props.target!,\n el as HTMLElement,\n );\n const animation = animate(\n el,\n [\n {},\n {\n transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`,\n opacity: 0,\n },\n ],\n {\n duration: 125 * speed,\n easing: easingAccelerate,\n },\n );\n animation.finished.then(() => done());\n}\n\n/**\n * ## onAfterLeave\n *\n * @param el\n */\nfunction onAfterLeave(el: Element) {\n (el as HTMLElement).style.removeProperty(\"pointer-events\");\n}\n</script>\n\n<template>\n <transition\n v-if=\"props.target\"\n name=\"ev-dialog-transition\"\n :css=\"false\"\n @before-enter=\"onBeforeEnter\"\n @enter=\"onEnter\"\n @after-enter=\"onAfterEnter\"\n @before-leave=\"onBeforeLeave\"\n @leave=\"onLeave\"\n @after-leave=\"onAfterLeave\">\n <slot />\n </transition>\n <transition v-else name=\"ev-dialog-transition\">\n <slot />\n </transition>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { EvOverlayProps, makeEvOverlayProps } from \"@/components/EvOverlay\";\nimport EvDialogTransition from \"@/components/EvDialog/EvDialogTransition.vue\";\nimport { IconProp, IconValue } from \"@/composables/icons\";\nimport { PropType, Slot, Slots } from \"vue\";\nimport { EvButtonProps } from \"@/components/EvButton\";\nimport { EvToolbarProps } from \"@/components/EvToolbar\";\nimport { EvDialogBodyProps } from \"./EvDialogBody.vue\";\n\nexport interface EvDialogProps extends EvOverlayProps {\n bodyProps?: EvDialogBodyProps;\n closeable?: boolean;\n draggable?: boolean;\n dragWithinViewport?: boolean;\n dragMinX?: number;\n dragMinY?: number;\n fullscreen?: boolean;\n headerActions?: EvButtonProps[];\n headerProps?: EvToolbarProps;\n hideHeader?: boolean;\n icon?: IconValue;\n noPadding?: boolean;\n retainFocus?: boolean;\n scrollable?: boolean;\n title?: string;\n}\n\nexport interface EvDialogSlots extends Slots {\n container?: Slot;\n default?: Slot;\n header?: Slot;\n footer?: Slot;\n}\n\n/**\n * # makeEvDialogProps\n */\nexport const makeEvDialogProps = propsFactory(\n {\n bodyProps: Object as PropType<EvDialogBodyProps>,\n closeable: {\n type: Boolean,\n default: true,\n },\n draggable: Boolean,\n dragWithinViewport: {\n type: Boolean,\n default: true,\n },\n dragMinX: {\n type: Number,\n default: 0,\n },\n dragMinY: {\n type: Number,\n default: 0,\n },\n fullscreen: Boolean,\n headerActions: Array as PropType<readonly EvButtonProps[]>,\n headerProps: Object as PropType<EvToolbarProps>,\n hideHeader: Boolean,\n icon: IconProp,\n noPadding: Boolean,\n retainFocus: {\n type: Boolean,\n default: true,\n },\n scrollable: Boolean,\n title: String,\n\n ...makeEvOverlayProps({\n origin: \"center center\" as const,\n scrollStrategy: \"block\" as const,\n positionStrategy: \"static\" as const,\n transition: {\n component: EvDialogTransition,\n },\n zIndex: 2400,\n }),\n\n __instance: null,\n },\n \"EvDialog\",\n);\n\nexport const DialogSize = {\n default: \"medium\",\n small: \"small\",\n medium: \"medium\",\n large: \"large\",\n xLarge: \"x-large\",\n} as const;\nexport type DialogSizeProp = (typeof DialogSize)[keyof typeof DialogSize];\nexport const DialogSizeToWidth: Record<string, number> = {\n [DialogSize.small]: 400,\n [DialogSize.medium]: 600,\n [DialogSize.large]: 800,\n [DialogSize.xLarge]: 968,\n};\n","<script lang=\"ts\">\nimport { propsFactory } from \"@/util\";\n\nexport interface EvDialogBodyProps {\n padding?: boolean;\n}\n\nexport const makeEvDialogBodyProps = propsFactory(\n {\n padding: {\n type: Boolean,\n default: true,\n },\n },\n \"EvDialogBody\",\n);\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nconst props = defineProps({\n ...makeEvDialogBodyProps(),\n});\n\nconst paddingClass = computed(() => {\n return !props.padding ? \"pa-0\" : undefined;\n});\n</script>\n\n<template>\n <div :class=\"['ev-dialog--body', 'is-scrollable', paddingClass]\">\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\"></script>\n\n<template>\n <div class=\"ev-dialog--footer\">\n <slot />\n </div>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { IconProp, IconValue } from \"@/composables/icons\";\nimport { PropType } from \"vue\";\nimport { EvTabProps } from \"@/components/EvTabs\";\nimport { EvButtonProps } from \"@/components/EvButton\";\n\nexport type EvToolbarSize = \"small\" | \"medium\" | \"large\";\n\nexport interface EvToolbarProps {\n actions?: EvButtonProps[];\n icon?: IconValue;\n size?: EvToolbarSize;\n tab?: EvTabProps;\n tabs?: EvTabProps[];\n title?: string;\n}\n\nexport const makeEvToolbarProps = propsFactory(\n {\n actions: Array as PropType<readonly EvButtonProps[]>,\n icon: IconProp,\n size: {\n type: String as PropType<EvToolbarSize>,\n default: \"medium\",\n },\n tab: {\n type: null,\n default: undefined,\n },\n tabs: Array as PropType<readonly EvTabProps[]>,\n title: String,\n ...makeComponentProps(),\n },\n \"EvToolbar\",\n);\n","import { omit, propsFactory } from \"@/util\";\nimport { EvButtonProps, makeEvButtonProps } from \"@/components/EvButton\";\nimport { PropType } from \"vue\";\n\nexport type TabDirection = \"horizontal\" | \"vertical\";\n\nexport interface EvTabProps extends Omit<EvButtonProps, \"active\" | \"symbol\"> {\n direction?: TabDirection;\n}\n\n/**\n * # makeEvTabProps()\n */\nexport const makeEvTabProps = propsFactory(\n {\n direction: {\n type: String as PropType<TabDirection>,\n default: \"horizontal\",\n },\n\n ...omit(\n makeEvButtonProps({\n variant: \"subtle\" as const,\n selectedClass: \"is-selected\",\n selectedAppearance: \"primary\",\n selectedVariant: \"subtle\",\n }),\n [\"active\", \"symbol\"],\n ),\n },\n \"EvTab\",\n);\n","import { InjectionKey, PropType } from \"vue\";\nimport { GroupProvide } from \"@/composables/group\";\nimport { InputSizeProp, propsFactory } from \"@/util\";\nimport { makeEvSlideGroupProps } from \"@/components/EvSlideGroup\";\nimport { makeTagProps } from \"@/composables/tag\";\n\nexport const EvTabsSymbol: InjectionKey<GroupProvide> = Symbol.for(\"ev:tabs\");\n\nexport type TabItem = string | number | Record<string, any>;\n\nexport const makeEvTabsProps = propsFactory(\n {\n alignTabs: {\n type: String as PropType<\"start\" | \"center\" | \"end\">,\n default: \"start\",\n },\n grow: Boolean,\n items: {\n type: Array as PropType<readonly TabItem[]>,\n default: () => [],\n },\n size: String as PropType<InputSizeProp>,\n\n ...makeEvSlideGroupProps({ mandatory: \"force\" as const }),\n ...makeTagProps(),\n },\n \"EvTabs\",\n);\n","<script setup lang=\"ts\">\r\n/**\r\n * # EvTab\r\n */\r\nimport \"./EvTab.scss\";\r\nimport { makeEvTabProps } from \"./EvTab\";\r\nimport { EvButton } from \"@/components/EvButton\";\r\nimport { EvTabsSymbol } from \"@/components/EvTabs/EvTabs\";\r\nimport { computed, ref } from \"vue\";\r\nimport { animate, easingStandard, filterComponentProps } from \"@/util\";\r\nimport { useDefaults } from \"@/composables\";\r\n\r\nconst definedProps = defineProps({\r\n ...makeEvTabProps(),\r\n});\r\nconst slots = defineSlots<{\r\n default(): never;\r\n}>();\r\nconst props = useDefaults(definedProps);\r\nconst isSelected = computed(\r\n () => rootEl.value?.group?.isSelected.value ?? false,\r\n);\r\nconst isHorizontal = computed(() => props.direction === \"horizontal\");\r\nconst buttonProps = computed(() => {\r\n return filterComponentProps(EvButton, props);\r\n});\r\nconst rootEl = ref<typeof EvButton>();\r\nconst sliderEl = ref<HTMLElement>();\r\n\r\nfunction updateSlider({ value }: { value: boolean }) {\r\n if (!value) {\r\n return;\r\n }\r\n\r\n const prevEl: HTMLElement | undefined =\r\n rootEl.value?.$el.parentElement?.querySelector(\r\n \".ev-tab.is-active .ev-tab--slider\",\r\n );\r\n const nextEl = sliderEl.value;\r\n if (!prevEl || !nextEl) {\r\n return;\r\n }\r\n\r\n const color = getComputedStyle(prevEl).color;\r\n const prevBox = prevEl.getBoundingClientRect();\r\n const nextBox = nextEl.getBoundingClientRect();\r\n\r\n const xy = isHorizontal.value ? \"x\" : \"y\";\r\n const XY = isHorizontal.value ? \"X\" : \"Y\";\r\n const rightBottom = isHorizontal.value ? \"right\" : \"bottom\";\r\n const widthHeight = isHorizontal.value ? \"width\" : \"height\";\r\n\r\n const prevPos = prevBox[xy];\r\n const nextPos = nextBox[xy];\r\n const delta =\r\n prevPos > nextPos\r\n ? prevBox[rightBottom] - nextBox[rightBottom]\r\n : prevBox[xy] - nextBox[xy];\r\n\r\n const origin =\r\n Math.sign(delta) > 0\r\n ? isHorizontal.value\r\n ? \"right\"\r\n : \"bottom\"\r\n : Math.sign(delta) < 0\r\n ? isHorizontal.value\r\n ? \"left\"\r\n : \"top\"\r\n : \"center\";\r\n\r\n const size =\r\n Math.abs(delta) +\r\n (Math.sign(delta) < 0 ? prevBox[widthHeight] : nextBox[widthHeight]);\r\n const scale =\r\n size / Math.max(prevBox[widthHeight], nextBox[widthHeight]) || 0;\r\n const initialScale = prevBox[widthHeight] / nextBox[widthHeight] || 0;\r\n\r\n const sigma = 1.5;\r\n animate(\r\n nextEl,\r\n {\r\n backgroundColor: [color, \"currentcolor\"],\r\n transform: [\r\n `translate${XY}(${delta}px) scale${XY}(${initialScale})`,\r\n `translate${XY}(${delta / sigma}px) scale${XY}(${(scale - 1) / sigma + 1})`,\r\n \"none\",\r\n ],\r\n transformOrigin: Array(3).fill(origin),\r\n },\r\n {\r\n duration: 225,\r\n easing: easingStandard,\r\n },\r\n );\r\n}\r\n\r\n</script>\r\n\r\n<template>\r\n <ev-button\r\n ref=\"rootEl\"\r\n role=\"tab\"\r\n :class=\"['ev-tab', props.class]\"\r\n :active=\"undefined\"\r\n :aria-selected=\"String(isSelected)\"\r\n :symbol=\"EvTabsSymbol\"\r\n :tabindex=\"isSelected ? 0 : -1\"\r\n :style=\"props.style\"\r\n v-bind=\"buttonProps\"\r\n @group:selected=\"updateSlider\">\r\n <template v-if=\"props.text || slots.default\" #default>\r\n <slot name=\"default\">{{ props.text }}</slot>\r\n </template>\r\n <template #additional>\r\n <div ref=\"sliderEl\" :class=\"['ev-tab--slider']\"></div>\r\n </template>\r\n </ev-button>\r\n</template>\r\n","<script setup lang=\"ts\">\n/**\n * EvTabs\n * ---\n */\nimport \"./EvTabs.scss\";\nimport { EvTabsSymbol, makeEvTabsProps, TabItem } from \"./EvTabs\";\nimport { EvSlideGroup } from \"@/components/EvSlideGroup\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { computed, toRef } from \"vue\";\nimport { filterComponentProps, isObject } from \"@/util\";\nimport { provideDefaults } from \"@/composables/defaults\";\nimport { EvTab } from \"./EvTab\";\n\n/**\n * ## parseItems\n * @param items\n */\nfunction parseItems(items: readonly TabItem[] | undefined) {\n if (!items) {\n return [];\n }\n return items.map((item) => {\n return !isObject(item) ? { text: item, value: item } : item;\n });\n}\n\nconst props = defineProps({\n ...makeEvTabsProps(),\n});\nconst model = useModelProxy(props, \"modelValue\");\nconst parsedItems = computed(() => parseItems(props.items));\n\nprovideDefaults({\n EvTab: {\n direction: toRef(props, \"direction\"),\n size: toRef(props, \"size\"),\n selectedAppearance: toRef(props, \"selectedAppearance\"),\n selectedVariant: toRef(props, \"selectedVariant\"),\n },\n});\n\nconst slideGroupProps = computed(() =>\n filterComponentProps(EvSlideGroup, props),\n);\nconst alignTabsClass = computed(() => `is-align-tabs-${props.alignTabs}`);\n</script>\n\n<template>\n <ev-slide-group\n v-bind=\"slideGroupProps\"\n v-model=\"model\"\n role=\"tablist\"\n :class=\"[\n 'ev-tabs',\n alignTabsClass,\n {\n 'is-grow': props.grow,\n },\n props.class,\n ]\"\n :style=\"props.style\"\n :symbol=\"EvTabsSymbol\">\n <slot>\n <ev-tab\n v-for=\"item in parsedItems\"\n :key=\"item.text\"\n v-bind=\"item\"></ev-tab>\n </slot>\n </ev-slide-group>\n</template>\n","<script setup lang=\"ts\">\nimport \"./EvToolbar.scss\";\nimport { makeEvToolbarProps } from \"./EvToolbar\";\nimport { EvButton } from \"@/components/EvButton\";\nimport { EvIcon } from \"@/components/EvIcon\";\nimport { EvTabs } from \"@/components/EvTabs\";\nimport { EvButtonGroup } from \"@/components/EvButtonGroup\";\nimport { ArrowBackIcon, CancelIcon } from \"@/icons\";\nimport { computed, getCurrentInstance } from \"vue\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { sizeModifier } from \"@/util\";\n\nconst props = defineProps({\n ...makeEvToolbarProps(),\n});\n\nconst slots = defineSlots<{\n title(): never;\n start(): never;\n end(): never;\n}>();\n\nconst instance = getCurrentInstance();\n\nconst emit = defineEmits([\"click:back\", \"click:close\", \"update:tab\"]);\n\nconst hasBackButton = computed(() => {\n return !!instance?.vnode.props?.[\"onClick:back\"];\n});\n\nconst hasCloseButton = computed(() => {\n return !!instance?.vnode.props?.[\"onClick:close\"];\n});\n\nconst hasPrefix = computed(() => {\n return hasBackButton.value || props.icon || props.title;\n});\n\nfunction onBackClick($event: MouseEvent) {\n $event.stopPropagation();\n emit(\"click:back\", $event);\n}\n\nfunction onCloseClick($event: MouseEvent) {\n $event.stopPropagation();\n emit(\"click:close\", $event);\n}\n\nconst tab = useModelProxy(props, \"tab\");\n\nconst sizeClass = computed(() => sizeModifier(props.size));\n\nconst tabSize = computed(() => {\n switch (props.size) {\n case \"large\":\n return \"x-large\";\n case \"small\":\n return \"medium\";\n case \"medium\":\n default:\n return \"large\";\n }\n});\n\nconst actionSize = computed(() => {\n switch (props.size) {\n case \"large\":\n return \"medium\";\n case \"small\":\n return \"x-small\";\n case \"medium\":\n default:\n return \"small\";\n }\n});\n\nconst isAdjustStart = computed(() => {\n return hasBackButton.value;\n});\n\nconst isAdjustEnd = computed(() => {\n const hasActions = !!props.actions?.length;\n const variant = props.actions?.at(-1)?.variant ?? \"subtle\";\n return hasCloseButton.value || (hasActions && variant === \"subtle\");\n});\n\n</script>\n\n<template>\n <div\n :class=\"[\n 'ev-toolbar',\n {\n 'is-adjust-start': isAdjustStart,\n 'is-adjust-end': isAdjustEnd,\n },\n sizeClass,\n props.class,\n ]\"\n :style=\"props.style\">\n <div class=\"ev-toolbar--section-start\">\n <div v-if=\"hasPrefix\" class=\"ev-toolbar--prefix\">\n <div v-if=\"hasBackButton\" class=\"ev-toolbar--back\" data-no-drag>\n <ev-button\n variant=\"subtle\"\n :icon=\"ArrowBackIcon\"\n :size=\"actionSize\"\n @click=\"onBackClick\" />\n </div>\n\n <div v-if=\"props.icon\" class=\"ev-toolbar--icon\">\n <ev-icon :glyph=\"props.icon\" />\n </div>\n\n <div\n v-if=\"slots.title || props.title\"\n class=\"ev-toolbar--title\">\n <slot name=\"title\">{{ props.title }}</slot>\n </div>\n </div>\n <div\n v-if=\"slots.start || props.tabs\"\n class=\"ev-toolbar--start\"\n data-no-drag>\n <slot name=\"start\">\n <ev-tabs\n v-model=\"tab\"\n class=\"ev-toolbar--tabs\"\n :size=\"tabSize\"\n :items=\"props.tabs\" />\n </slot>\n </div>\n </div>\n <div class=\"ev-toolbar--section-end\" data-no-drag>\n <div v-if=\"slots.end || props.actions\" class=\"ev-toolbar--end\">\n <slot name=\"end\">\n <div class=\"ev-toolbar--actions\">\n <ev-button-group\n gap=\"medium\"\n variant=\"subtle\"\n :size=\"actionSize\"\n :items=\"props.actions\" />\n </div>\n </slot>\n </div>\n <div v-if=\"hasCloseButton\" class=\"ev-toolbar--close\">\n <ev-button\n :size=\"actionSize\"\n :icon=\"CancelIcon\"\n variant=\"subtle\"\n @click=\"onCloseClick\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\">\nimport { propsFactory } from \"@/util\";\nimport { makeEvToolbarProps } from \"@/components/EvToolbar\";\n\nexport const makeEvDialogHeaderProps = propsFactory(\n {\n modelValue: Boolean,\n closeable: {\n type: Boolean,\n default: true,\n },\n ...makeEvToolbarProps({\n size: \"large\",\n }),\n },\n \"EvDialogHeader\",\n);\n</script>\n\n<script setup lang=\"ts\">\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { EvToolbar } from \"@/components/EvToolbar\";\nimport { computed } from \"vue\";\nimport { filterComponentProps } from \"@/util\";\n\nconst props = defineProps({\n ...makeEvDialogHeaderProps(),\n});\nconst slots = defineSlots<{\n default(): never;\n}>();\nconst emit = defineEmits<{\n (e: \"update:modelValue\", value: boolean): void;\n (e: \"close\"): void;\n}>();\nconst isActive = useModelProxy(props, \"modelValue\");\n\n/**\n * ## Close\n */\nfunction close() {\n isActive.value = false;\n emit(\"close\");\n}\n\nconst closeable = computed(() => (props.closeable ? close : undefined));\n\nconst toolbarProps = computed(() => {\n return filterComponentProps(EvToolbar, props);\n});\n</script>\n\n<template>\n <div\n v-if=\"slots.default\"\n :class=\"['ev-dialog--header', props.class]\"\n :style=\"props.style\">\n <slot />\n </div>\n <ev-toolbar\n v-else\n :class=\"['ev-dialog--header', { 'is-untitled': !props.title }]\"\n v-bind=\"toolbarProps\"\n @click:close=\"closeable\" />\n</template>\n","<script setup lang=\"ts\">\n/**\n * `<ev-dialog>`\n */\nimport \"./EvDialog.scss\";\nimport { DialogSize, DialogSizeToWidth, makeEvDialogProps } from \"./EvDialog\";\nimport {\n computed,\n mergeProps,\n nextTick,\n onBeforeUnmount,\n ref,\n watch,\n} from \"vue\";\nimport { EvOverlay } from \"@/components/EvOverlay\";\nimport EvSurface from \"@/components/EvSurface/EvSurface.vue\";\nimport {\n Browser,\n filterComponentProps,\n getFocusableChildren,\n getOuterHeight,\n getOuterWidth,\n getViewport,\n} from \"@/util\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport EvDialogBody from \"@/components/EvDialog/EvDialogBody.vue\";\nimport EvDialogFooter from \"@/components/EvDialog/EvDialogFooter.vue\";\nimport EvDialogHeader from \"@/components/EvDialog/EvDialogHeader.vue\";\nimport { provideDialog } from \"@/composables/dialog\";\n\nconst props = defineProps({\n ...makeEvDialogProps(),\n});\nconst slots = defineSlots<{\n activator(): never;\n container(): never;\n default(): never;\n footer(): never;\n header(): never;\n}>();\nconst overlayRef = ref();\nconst isActive = useModelProxy(props, \"modelValue\");\nconst isFullscreen = useModelProxy(props, \"fullscreen\");\nconst overlayProps = computed(() => {\n return filterComponentProps(EvOverlay, props);\n});\n\nconst activatorProps = computed(() => {\n return mergeProps(\n {\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": String(isActive.value),\n },\n props.activatorProps,\n );\n});\n\nconst headerProps = computed(() => {\n const separatedProps = {\n actions: props.headerActions,\n closeable: props.closeable,\n icon: props.icon,\n title: props.title,\n };\n const suppliedProps = props.headerProps ?? {};\n return Object.assign(separatedProps, suppliedProps);\n});\n\nconst bodyProps = computed(() => {\n const separatedProps = {\n padding: !props.noPadding,\n };\n const suppliedProps = props.bodyProps ?? {};\n return Object.assign(separatedProps, suppliedProps);\n});\n\nconst emit = defineEmits<{\n (e: \"update:modelValue\", value: boolean): void;\n (e: \"update:fullscreen\", value: boolean): void;\n (e: \"dragstart\", value: MouseEvent): void;\n (e: \"dragend\", value: MouseEvent): void;\n (e: \"open\"): void;\n (e: \"after-open\"): void;\n (e: \"close\"): void;\n (e: \"after-close\"): void;\n}>();\n\n/**\n * ## Width\n *\n * We want to standardise dialog sizes. So we can intercept the `width` prop.\n *\n * - 'small'\n * - 'medium'\n * - 'large'\n * - 'x-large'\n */\nconst width = computed(() => {\n const size = props.width ?? DialogSizeToWidth[DialogSize.medium];\n return DialogSizeToWidth[size] ?? size;\n});\n\n/**\n * ## onFocusin\n *\n * When the user opens the dialog and presses tab (for example)\n * we can apply focus to the first available and focusable element.\n *\n * 1. The dialog MUST be the top-most open dialog.\n * 2. The target element MUST be the document nor the content of the dialog.\n * 3. The target element isn't within the dialog content.\n *\n * If the conditions above are met then we can refocus the user into the\n * first/last available focusable element.\n *\n * @param e\n */\nfunction onFocusin(e: FocusEvent) {\n const previousEl = e.relatedTarget as HTMLElement | null;\n const targetEl = e.target as HTMLElement | null;\n\n if (\n previousEl !== targetEl &&\n overlayRef.value?.contentEl &&\n overlayRef.value?.isTopGlobal &&\n ![document, overlayRef.value.contentEl].includes(targetEl) &&\n !overlayRef.value.contentEl.contains(targetEl)\n ) {\n const focusable = getFocusableChildren(overlayRef.value.contentEl);\n if (!focusable.length) {\n return;\n }\n const firstEl = focusable[0];\n const lastEl = focusable[focusable.length - 1];\n if (previousEl === firstEl) {\n lastEl.focus();\n } else {\n firstEl.focus();\n }\n }\n}\n\n/**\n * If the browser window is available (not SSR)\n * then we need to add the focusin event listen when the dialog is open\n * and then remove the event listener when it is closed.\n */\nif (Browser.hasWindow) {\n watch(\n () => isActive.value && props.retainFocus,\n (value) => {\n if (value) {\n document.addEventListener(\"focusin\", onFocusin);\n } else {\n document.removeEventListener(\"focusin\", onFocusin);\n }\n },\n {\n immediate: true,\n },\n );\n}\n\n/**\n * Watch for changes to the `modelValue` when the dialog is opened\n * focus on the content element. When it is closed revert focus\n * to the activator element if it is available.\n */\nwatch(isActive, async (value) => {\n await nextTick();\n if (value) {\n overlayRef.value!.contentEl?.focus({ preventScroll: true });\n } else {\n overlayRef.value!.activatorEl?.focus({ preventScroll: true });\n }\n});\n\n/**\n * ## Close\n */\nfunction close() {\n isActive.value = false;\n}\n\nprovideDialog(props.__instance);\n\ndefineExpose({\n close,\n});\n\n/**\n * Dragging\n * @todo: Still implementing draggable dialogs\n **/\nlet dragging = false;\nlet lastPageX = null;\nlet lastPageY = null;\nlet documentDragListener = null;\nlet documentDragEndListener = null;\n\nfunction initDrag(e: MouseEvent) {\n if (\n !props.draggable ||\n (e.target instanceof Element && e.target.closest(\"[data-no-drag]\"))\n ) {\n return;\n }\n dragging = true;\n lastPageX = e.pageX;\n lastPageY = e.pageY;\n document.body.style.userSelect = \"none\";\n emit(\"dragstart\", e);\n}\n\nfunction onEnter() {\n emit(\"open\");\n bindGlobalListeners();\n}\nfunction onAfterEnter() {\n emit(\"after-open\");\n}\nfunction onBeforeLeave() {\n if (dragging && documentDragEndListener) {\n documentDragEndListener();\n }\n}\nfunction onLeave() {\n emit(\"close\");\n}\nfunction onAfterLeave() {\n unbindGlobalListeners();\n emit(\"after-close\");\n}\n\nfunction bindGlobalListeners() {\n if (props.draggable) {\n bindDocumentDragListener();\n bindDocumentDragEndListener();\n }\n}\n\nfunction bindDocumentDragListener() {\n documentDragListener = (event) => {\n const container = overlayRef.value?.contentEl;\n if (dragging && container) {\n const width = getOuterWidth(container);\n const height = getOuterHeight(container);\n const deltaX = event.pageX - lastPageX;\n const deltaY = event.pageY - lastPageY;\n const offset = container.getBoundingClientRect();\n const leftPos = offset.left + deltaX;\n const topPos = offset.top + deltaY;\n const viewport = getViewport();\n const containerComputedStyle = getComputedStyle(container);\n const marginLeft = parseFloat(containerComputedStyle.marginLeft);\n const marginTop = parseFloat(containerComputedStyle.marginTop);\n container.style.position = \"fixed\";\n\n if (props.dragWithinViewport) {\n if (\n leftPos >= props.dragMinX &&\n leftPos + width < viewport.width\n ) {\n lastPageX = event.pageX;\n container.style.left = leftPos - marginLeft + \"px\";\n }\n\n if (\n topPos >= props.dragMinY &&\n topPos + height < viewport.height\n ) {\n lastPageY = event.pageY;\n container.style.top = topPos - marginTop + \"px\";\n }\n } else {\n lastPageX = event.pageX;\n container.style.left = leftPos - marginLeft + \"px\";\n lastPageY = event.pageY;\n container.style.top = topPos - marginTop + \"px\";\n }\n }\n };\n window.document.addEventListener(\"mousemove\", documentDragListener);\n}\n\nfunction bindDocumentDragEndListener() {\n documentDragEndListener = (event: MouseEvent) => {\n if (dragging) {\n dragging = false;\n document.body.style.userSelect = \"\";\n emit(\"dragend\", event);\n }\n };\n window.document.addEventListener(\"mouseup\", documentDragEndListener);\n}\n\nfunction unbindGlobalListeners() {\n unbindDocumentDragListener();\n unbindDocumentDragEndListener();\n}\n\nfunction unbindDocumentDragListener() {\n if (documentDragListener) {\n window.document.removeEventListener(\"mousemove\", documentDragListener);\n documentDragListener = null;\n }\n}\n\nfunction unbindDocumentDragEndListener() {\n if (documentDragEndListener) {\n window.document.removeEventListener(\"mouseup\", documentDragEndListener);\n documentDragEndListener = null;\n }\n}\n\nonBeforeUnmount(() => {\n unbindGlobalListeners();\n});\n\n</script>\n\n<template>\n <ev-overlay\n ref=\"overlayRef\"\n v-bind=\"overlayProps\"\n v-model=\"isActive\"\n aria-modal=\"true\"\n role=\"dialog\"\n :class=\"[\n 'ev-dialog',\n {\n 'is-fullscreen': isFullscreen,\n 'is-scrollable': props.scrollable,\n },\n props.class,\n ]\"\n :style=\"props.style\"\n :activator-props=\"activatorProps\"\n :width=\"width\"\n @enter=\"onEnter\"\n @after-enter=\"onAfterEnter\"\n @before-leave=\"onBeforeLeave\"\n @leave=\"onLeave\"\n @after-leave=\"onAfterLeave\">\n <template v-if=\"slots.activator\" #activator=\"{ isActive, props }\">\n <slot name=\"activator\" :is-active=\"isActive\" :props=\"props\" />\n </template>\n\n <slot v-if=\"slots.container\" name=\"container\" />\n <ev-surface\n v-else\n class=\"ev-dialog--surface\"\n elevation=\"panel\"\n rounded=\"small\">\n <ev-dialog-header\n v-if=\"!props.hideHeader\"\n v-model=\"isActive\"\n v-bind=\"headerProps\"\n @mousedown=\"initDrag\">\n <template v-if=\"slots.header\" #default>\n <slot name=\"header\" />\n </template>\n </ev-dialog-header>\n <ev-dialog-body v-bind=\"bodyProps\">\n <slot />\n </ev-dialog-body>\n <ev-dialog-footer v-if=\"slots.footer\">\n <slot name=\"footer\" />\n </ev-dialog-footer>\n </ev-surface>\n </ev-overlay>\n</template>\n","import { omit, PhysicalSide, propsFactory } from \"@/util\";\nimport {\n EvDialogProps,\n EvDialogSlots,\n makeEvDialogProps,\n} from \"@/components/EvDialog\";\nimport { PropType } from \"vue\";\n\nexport interface EvDrawerProps extends EvDialogProps {}\nexport interface EvDrawerSlots extends EvDialogSlots {}\n\nexport const makeEvDrawerProps = propsFactory(\n {\n position: {\n type: String as PropType<PhysicalSide>,\n default: \"left\",\n },\n\n ...omit(makeEvDialogProps(), [\"position\"]),\n },\n \"EvDrawer\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvDrawer.scss\";\nimport { EvDialog } from \"@/components/EvDialog\";\nimport { makeEvDrawerProps } from \"@/components/EvDrawer/EvDrawer\";\nimport { computed, ref } from \"vue\";\nimport { filterComponentProps, omit } from \"@/util\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { provideDrawer } from \"@/composables/drawer\";\n\nconst props = defineProps({\n ...makeEvDrawerProps(),\n});\nconst dialogProps = computed(() => {\n return omit(filterComponentProps(EvDialog, props), [\"position\"]);\n});\nconst isActive = useModelProxy(props, \"modelValue\");\nconst dialogRef = ref<typeof EvDialog>();\n\nconst positionClass = computed(() => {\n return `is-position-${props.position}`;\n});\n\nconst transition = computed(() => {\n return `ev-drawer--transition-${props.position}`;\n});\n\nconst overlayWidth = computed(() => {\n if (props.position === \"top\" || props.position === \"bottom\") {\n return \"100%\";\n }\n return props.width ?? \"medium\";\n});\n\n/**\n * ## Close\n */\nfunction close() {\n isActive.value = false;\n}\n\nprovideDrawer(props.__instance);\n\ndefineExpose({\n close,\n});\n</script>\n\n<template>\n <ev-dialog\n ref=\"dialogRef\"\n v-bind=\"dialogProps\"\n v-model=\"isActive\"\n :class=\"['ev-drawer', positionClass, props.class]\"\n :style=\"props.style\"\n :transition=\"transition\"\n :width=\"overlayWidth\">\n <template\n v-for=\"(slot, name) in $slots\"\n :key=\"name\"\n #[name]=\"slotProps\">\n <component :is=\"slot\" v-bind=\"slotProps\" />\n </template>\n </ev-dialog>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables\";\nimport { PropType } from \"vue\";\nimport { EvButtonProps } from \"@/components/EvButton\";\nimport { EvHeadingProps } from \"@/components/EvHeading\";\nimport { EvTextProps } from \"@/components/EvText\";\nimport { IconProp, IconValue } from \"@/composables/icons\";\nimport { EvIconProps } from \"@/components/EvIcon\";\nimport { EvImgProps } from \"@/components/EvImg\";\nimport { ComponentProps } from \"@/composables/component\";\n\nexport interface EvEmptyStateProps extends ComponentProps {\n actions?: EvButtonProps[];\n icon?: IconValue;\n iconProps?: EvIconProps;\n image?: string;\n imageProps?: EvImgProps;\n size?: \"small\" | \"medium\" | \"large\";\n title?: string;\n titleProps?: EvHeadingProps;\n subtitle?: string;\n subtitleProps?: EvTextProps;\n}\n\n/**\n * @todo: add a `size` prop\n */\n\nexport const makeEvEmptyStateProps = propsFactory(\n {\n actions: {\n type: Array as PropType<readonly EvButtonProps[]>,\n default: () => [],\n },\n icon: IconProp,\n iconProps: {\n type: Object as PropType<EvIconProps>,\n default: () => ({}),\n },\n image: String,\n imageProps: {\n type: Object as PropType<EvImgProps>,\n default: () => ({}),\n },\n size: {\n type: String as PropType<EvEmptyStateProps[\"size\"]>,\n default: \"large\",\n },\n title: String,\n titleProps: {\n type: Object as PropType<EvHeadingProps>,\n default: () => ({}),\n },\n subtitle: String,\n subtitleProps: {\n type: Object as PropType<EvTextProps>,\n default: () => ({}),\n },\n ...makeComponentProps(),\n },\n \"EvEmptyState\",\n);","<script setup lang=\"ts\">\nimport \"./EvEmptyState.scss\";\nimport { makeEvEmptyStateProps } from \"./EvEmptyState\";\nimport { EvHeading } from \"@/components/EvHeading\";\nimport { EvText } from \"@/components/EvText\";\nimport { EvButtonGroup } from \"@/components/EvButtonGroup\";\nimport { EvIcon } from \"@/components/EvIcon\";\nimport { computed, mergeProps } from \"vue\";\nimport { EvImg } from \"@/components/EvImg\";\nimport { sizeModifier } from \"@/util\";\nimport { EvButtonProps } from \"@/components/EvButton\";\n\nconst props = defineProps({ ...makeEvEmptyStateProps() });\nconst slots = defineSlots<{\n default(): never;\n actions(): never;\n media(): never;\n}>();\n\nconst sizes = {\n small: \"medium\",\n medium: \"large\",\n large: \"x-large\",\n};\n\nconst buttonSizes = {\n small: \"x-small\",\n medium: \"small\",\n large: \"medium\",\n};\n\nconst imgSizes = {\n small: 120,\n medium: 180,\n large: 240,\n};\n\nconst actionProps = computed(() => ({\n appearance: \"primary\" as const,\n size: buttonSizes[props.size],\n}));\n\nconst headingProps = computed(() =>\n mergeProps({ size: sizes[props.size] }, props.titleProps),\n);\n\nconst subtitleProps = computed(() =>\n mergeProps({ size: sizes[props.size] }, props.subtitleProps),\n);\n\nconst iconProps = computed(() =>\n mergeProps(\n { appearance: \"primary\", size: sizes[props.size] },\n props.iconProps,\n ),\n);\n\nconst imageProps = computed(() =>\n mergeProps({ height: imgSizes[props.size] }, props.imageProps),\n);\n\nconst hasMedia = computed(() => !!slots.media || !!props.icon || !!props.image);\nconst hasHeading = computed(() => !!props.title || !!props.subtitle);\n\n</script>\n\n<template>\n <div\n :class=\"[\n 'ev-empty-state',\n props.class,\n sizeModifier(props.size, ['medium']),\n ]\"\n :style=\"props.style\">\n <div v-if=\"hasMedia\" class=\"ev-empty-state--media\">\n <slot name=\"media\">\n <ev-img\n v-if=\"props.image\"\n v-bind=\"imageProps\"\n :src=\"props.image\" />\n <ev-icon\n v-else-if=\"props.icon\"\n v-bind=\"iconProps\"\n :glyph=\"props.icon\" />\n </slot>\n </div>\n\n <div\n v-if=\"hasHeading\"\n class=\"ev-empty-state--heading text-width-readable\">\n <ev-heading\n v-if=\"props.title\"\n class=\"ev-empty-state--title\"\n v-bind=\"headingProps\"\n :text=\"props.title\" />\n\n <ev-text\n v-if=\"props.title\"\n class=\"ev-empty-state--subtitle\"\n v-bind=\"subtitleProps\"\n :text=\"props.subtitle\" />\n </div>\n\n <div v-if=\"slots.default\" class=\"ev-empty-state--content\">\n <slot />\n </div>\n\n <div v-if=\"slots.actions\" class=\"ev-empty-state--actions\">\n <slot name=\"actions\" />\n </div>\n <ev-button-group\n v-else-if=\"props.actions?.length\"\n class=\"ev-empty-state--actions\"\n v-bind=\"actionProps as EvButtonProps\"\n :items=\"props.actions\" />\n </div>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { PropType } from \"vue\";\nimport { Breakpoint } from \"@/composables/display\";\n\nexport const makeEvFieldHelpProps = propsFactory(\n {\n breakpoint: String as PropType<Breakpoint>,\n ...makeComponentProps(),\n },\n \"EvFieldHelp\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvFieldHelp.scss\";\nimport { makeEvFieldHelpProps } from \"./EvFieldHelp\";\nimport { provideDefaults, useDefaults } from \"@/composables/defaults\";\nimport { useDisplay } from \"@/composables\";\nimport { computed } from \"vue\";\n\nconst definedProps = defineProps({ ...makeEvFieldHelpProps() });\nconst props = useDefaults(definedProps);\nconst display = useDisplay();\n\nconst breakpoint = computed(() => {\n return props.breakpoint ?? \"md\";\n});\n\nconst slots = defineSlots<{\n field(): never;\n help(): never;\n}>();\n\nprovideDefaults({\n EvCardContent: {\n size: \"small\",\n },\n});\n\nconst isShow = computed(() => {\n console.log(breakpoint.value);\n const displayRule = `${breakpoint.value}Up`;\n return display[displayRule]?.value ?? false;\n});\n</script>\n\n<template>\n <div\n :class=\"['ev-field-help', { 'is-visible': isShow }, props.class]\"\n :style=\"props.style\">\n <div class=\"ev-field-help--field\">\n <slot name=\"field\" />\n </div>\n <div class=\"ev-field-help--content\" :hidden=\"!isShow\">\n <div class=\"ev-field-help--pointer\">\n <div class=\"ev-field-help--pointer-circle\"></div>\n <div class=\"ev-field-help--pointer-line\"></div>\n </div>\n <slot name=\"help\" />\n </div>\n </div>\n</template>\n","import { omit, propsFactory } from \"@/util\";\nimport { makeEvButtonProps } from \"@/components/EvButton\";\nimport { PropType } from \"vue\";\n\nexport const makeEvFilterButtonProps = propsFactory(\n {\n title: String,\n modelValue: {\n type: Array as PropType<readonly string[]>,\n default: () => [],\n },\n filterTitle: {\n type: String,\n default: \"title\",\n },\n ...omit(makeEvButtonProps(), [\"text\", \"value\"]),\n },\n \"EvFilterButton\",\n)","<script setup lang=\"ts\">\nimport { makeEvFilterButtonProps } from \"./EvFilterButton\";\nimport { useDefaults } from \"@/composables\";\nimport { computed } from \"vue\";\nimport { filterComponentProps, getPropertyValue, isObject } from \"@/util\";\nimport { EvButton } from \"@/components/EvButton\";\nimport { EvBadge } from \"@/components/EvBadge\";\nimport { ChevronDownIcon } from \"@/icons\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\n\nconst definedProps = defineProps({\n ...makeEvFilterButtonProps(),\n});\nconst props = useDefaults(definedProps);\nconst buttonProps = computed(() => filterComponentProps(EvButton, props));\nconst modelValue = useModelProxy(props, \"modelValue\");\n\nconst filterTitles = computed(() => {\n return modelValue.value.map((item: unknown) => {\n return isObject(item)\n ? getPropertyValue(item, props.filterTitle)\n : item;\n });\n});\n\nconst title = computed(() => {\n return filterTitles.value.length\n ? `${props.title}: ${filterTitles.value[0]}`\n : props.title;\n});\n\nconst count = computed(() => {\n return modelValue.value.length > 1\n ? modelValue.value.length - 1\n : undefined;\n});\n\nconst isFiltered = computed(() => !!modelValue.value.length);\n</script>\n\n<template>\n <ev-button\n v-bind=\"buttonProps\"\n :icon-end=\"ChevronDownIcon\"\n :text=\"title\"\n :appearance=\"isFiltered ? 'primary' : 'default'\"\n :variant=\"isFiltered ? 'tonal' : 'subtle'\">\n <template v-if=\"count\" #suffix>\n <ev-badge bold inline :content=\"`+${count}`\" appearance=\"primary\" />\n </template>\n </ev-button>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { ComponentProps, makeComponentProps } from \"@/composables/component\";\nimport { FormProps, makeFormProps } from \"@/composables/form\";\n\nexport interface EvFormProps extends FormProps, ComponentProps {}\n\nexport const makeEvFormProps = propsFactory(\n {\n ...makeComponentProps(),\n ...makeFormProps(),\n },\n \"EvForm\",\n);\n","<script setup lang=\"ts\">\r\nimport { ref } from \"vue\";\r\nimport { makeEvFormProps } from \"./EvForm\";\r\nimport { createForm, SubmitEventPromise } from \"@/composables/form\";\r\nimport type { Form } from \"@/modules/Form/Form\";\r\n\r\nconst formRef = ref<HTMLFormElement>();\r\nconst props = defineProps({\r\n ...makeEvFormProps(),\r\n});\r\nconst form = createForm(props);\r\nconst emit = defineEmits<{\r\n (e: \"update:modelValue\", value: boolean): void;\r\n (e: \"submit\", event: SubmitEventPromise): void;\r\n}>();\r\n\r\ndefineSlots<{\r\n default(props: { form: Form }): never;\r\n}>();\r\n\r\ndefineExpose({\r\n form,\r\n});\r\n\r\n/**\r\n * ## On Reset\r\n * @param $event\r\n */\r\nfunction onReset($event: Event) {\r\n $event.preventDefault();\r\n form.reset();\r\n}\r\n\r\n/**\r\n * ## On Submit\r\n * @param $event\r\n */\r\nfunction onSubmit($event: Event) {\r\n const e = $event as SubmitEventPromise;\r\n\r\n const ready = form.validate();\r\n e.then = ready.then.bind(ready);\r\n e.catch = ready.catch.bind(ready);\r\n e.finally = ready.finally.bind(ready);\r\n\r\n emit(\"submit\", e);\r\n\r\n if (!e.defaultPrevented) {\r\n ready.then(({ valid }) => {\r\n if (valid) {\r\n formRef.value?.submit();\r\n }\r\n });\r\n }\r\n\r\n e.preventDefault();\r\n}\r\n</script>\r\n\r\n<template>\r\n <form\r\n ref=\"formRef\"\r\n novalidate\r\n :class=\"['ev-form', props.class]\"\r\n :style=\"[props.style]\"\r\n @reset=\"onReset\"\r\n @submit=\"onSubmit\">\r\n <slot v-bind=\"{ form }\" />\r\n </form>\r\n</template>\r\n","import { propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\nimport { Breakpoint } from \"@/composables/display\";\nimport { makeComponentProps } from \"@/composables/component\";\n\nexport const makeEvFormHelpProps = propsFactory(\n {\n breakpoint: {\n type: String as PropType<Breakpoint>,\n default: \"md\",\n },\n ...makeComponentProps(),\n },\n \"EvFormHelp\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvFormHelp.scss\";\nimport { makeEvFormHelpProps } from \"./EvFormHelp\";\nimport { provideDefaults } from \"@/composables/defaults\";\nimport { computed, toRef } from \"vue\";\nimport { useDisplay } from \"@/composables\";\n\nconst props = defineProps({ ...makeEvFormHelpProps() });\nconst display = useDisplay();\n\nprovideDefaults({\n EvFieldHelp: {\n breakpoint: toRef(props, \"breakpoint\"),\n },\n});\n\nconst isShow = computed(() => {\n const displayRule = `${props.breakpoint}Up`;\n return display[displayRule]?.value ?? false;\n});\n</script>\n\n<template>\n <div\n :class=\"['ev-form-help', { 'is-visible': isShow }, props.class]\"\n :style=\"props.style\">\n <slot />\n </div>\n</template>\n","import { IconValue, makeComponentProps } from \"@/composables\";\nimport {\n KbdArrowDownIcon,\n KbdArrowLeftIcon,\n KbdArrowRightIcon,\n KbdArrowUpIcon,\n KbdBackspaceIcon,\n KbdCommandIcon,\n KbdControlIcon,\n KbdOptionIcon,\n KbdReturnIcon,\n KbdShiftIcon,\n KbdSpaceIcon,\n KbdTabIcon,\n} from \"@/icons\";\nimport { propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\nimport { KbdVariantProp } from \"@/components\";\n\nexport type DisplayMode = \"icon\" | \"text\";\n\nexport type Key =\n | [Exclude<DisplayMode, \"icon\">, string, string]\n | [Extract<DisplayMode, \"icon\">, IconValue, string];\n\n// Key display tuple: [mode, content] where content is string or IconValue\nexport type KeyDisplay =\n | [Exclude<DisplayMode, \"icon\">, string]\n | [Extract<DisplayMode, \"icon\">, IconValue];\n\nexport type KeyConfig = {\n icon?: IconValue;\n text: string;\n};\n\nexport type PlatformKeyConfig = {\n mac?: KeyConfig;\n default: KeyConfig;\n};\n\nexport type KeyMapConfig = Record<string, PlatformKeyConfig>;\n\nexport const hotkeyMap: KeyMapConfig = {\n alt: {\n mac: { icon: KbdOptionIcon, text: \"$hotkey.option\" },\n default: { text: \"Alt\" },\n },\n arrowdown: {\n default: { icon: KbdArrowDownIcon, text: \"$hotkey.arrowDown\" },\n },\n arrowleft: {\n default: { icon: KbdArrowLeftIcon, text: \"$hotkey.arrowLeft\" },\n },\n arrowright: {\n default: { icon: KbdArrowRightIcon, text: \"$hotkey.arrowRight\" },\n },\n arrowup: {\n default: { icon: KbdArrowUpIcon, text: \"$hotkey.arrowUp\" },\n },\n backspace: {\n default: { icon: KbdBackspaceIcon, text: \"$hotkey.backspace\" },\n },\n cmd: {\n mac: { icon: KbdCommandIcon, text: \"$hotkey.command\" },\n default: { text: \"Ctrl\" },\n },\n ctrl: {\n mac: { icon: KbdControlIcon, text: \"$hotkey.ctrl\" },\n default: { text: \"Ctrl\" },\n },\n enter: {\n default: { icon: KbdReturnIcon, text: \"$hotkey.enter\" },\n },\n escape: {\n default: { text: \"$hotkey.escape\" },\n },\n meta: {\n mac: { icon: KbdCommandIcon, text: \"$hotkey.command\" },\n default: { text: \"Win\" },\n },\n shift: {\n mac: { icon: KbdShiftIcon, text: \"$hotkey.shift\" },\n default: { text: \"Shift\" },\n },\n tab: {\n mac: { icon: KbdTabIcon, text: \"$hotkey.tab\" },\n default: { text: \"$hotkey.tab\" },\n },\n \" \": {\n mac: { icon: KbdSpaceIcon, text: \"$hotkey.space\" },\n default: { text: \"$hotkey.space\" },\n },\n \"-\": {\n default: { text: \"-\" },\n },\n};\n\nexport const makeEvHotkeyProps = propsFactory(\n {\n displayMode: {\n type: String as PropType<DisplayMode>,\n default: \"icon\",\n },\n keyMap: {\n type: Object as PropType<KeyMapConfig>,\n default: () => hotkeyMap,\n },\n keys: String,\n platform: {\n type: String as PropType<\"auto\" | \"pc\" | \"mac\">,\n default: \"auto\",\n },\n variant: {\n type: String as PropType<KbdVariantProp>,\n default: \"default\",\n },\n\n ...makeComponentProps(),\n },\n \"EvHotkey\",\n);\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { PropType } from \"vue\";\n\nexport const KbdVariant = {\n default: \"default\",\n tonal: \"tonal\",\n outlined: \"outlined\",\n bold: \"bold\",\n text: \"text\",\n};\nexport type KbdVariantProp = (typeof KbdVariant)[keyof typeof KbdVariant];\n\nexport const makeEvKbdProps = propsFactory(\n {\n value: String,\n variant: String as PropType<KbdVariantProp>,\n\n ...makeComponentProps(),\n },\n \"EvKbd\",\n);\n","<script setup lang=\"ts\">\n/**\n * # `<ev-kbd>`\n */\nimport \"./EvKbd.scss\";\nimport { KbdVariant, makeEvKbdProps } from \"./EvKbd\";\nimport { variantModifier } from \"@/util\";\nimport { computed } from \"vue\";\n\nconst props = defineProps({\n ...makeEvKbdProps(),\n});\n\nconst variantClass = computed(() => {\n return variantModifier(props.variant ?? KbdVariant.default, [\"default\"]);\n});\n</script>\n\n<template>\n <kbd\n :class=\"[\n 'ev-kbd',\n props.class,\n variantClass,\n ]\"\n :style=\"props.style\">\n <slot>{{ props.value }}</slot>\n </kbd>\n</template>\n","<script setup lang=\"ts\">\nimport \"./EvHotkey.scss\";\nimport {\n DisplayMode,\n KeyMapConfig,\n makeEvHotkeyProps,\n PlatformKeyConfig,\n} from \"./EvHotkey\";\nimport { computed } from \"vue\";\nimport {\n splitKeyCombination,\n splitKeySequence,\n} from \"@/composables/hotkey/hotkey-parsing\";\nimport { useLocaleFunctions } from \"@/composables\";\nimport { EvIcon } from \"@/components/EvIcon\";\nimport { EvKbd, KbdVariant } from \"@/components/EvKbd\";\nimport { variantModifier } from \"@/util\";\n\nconst props = defineProps({ ...makeEvHotkeyProps() });\nconst { t } = useLocaleFunctions();\nconst isMac = computed(() => {\n return props.platform === \"auto\"\n ? typeof navigator !== \"undefined\" &&\n /macintosh/i.test(navigator.userAgent)\n : props.platform === \"mac\";\n});\n\nconst AND_DELINEATOR = Symbol(\"EvHotkey:AND_DELINEATOR\"); // For + separators\nconst SLASH_DELINEATOR = Symbol(\"EvHotkey:SLASH_DELINEATOR\"); // For / separators\nconst THEN_DELINEATOR = Symbol(\"EvHotkey:THEN_DELINEATOR\"); // For - separators\nconst keyCombinations = computed(() => {\n if (!props.keys) {\n return [];\n }\n // Split by spaces to handle multiple key combinations\n // Example: \"ctrl+k cmd+p\" -> [\"ctrl+k\", \"cmd+p\"]\n const combinations = props.keys.split(\" \");\n return combinations.map((combination) => {\n const result = [];\n const sequenceGroups = splitKeySequence(combination);\n for (let i = 0; i < sequenceGroups.length; i++) {\n const group = sequenceGroups[i];\n\n // Add THEN delineator between sequence groups\n if (i > 0) result.push(THEN_DELINEATOR);\n\n const { keys: keyParts, separators } = splitKeyCombination(group);\n for (let j = 0; j < keyParts.length; j++) {\n const part = keyParts[j];\n\n // Add AND delineator between keys\n if (j > 0) {\n result.push(\n separators[j - 1] === \"/\"\n ? SLASH_DELINEATOR\n : AND_DELINEATOR,\n );\n }\n result.push(\n applyDisplayModeToKey(\n props.keyMap,\n props.displayMode,\n part,\n isMac.value,\n ),\n );\n }\n }\n\n return result;\n });\n});\n\nfunction applyDisplayModeToKey(\n keyMap: KeyMapConfig,\n mode: DisplayMode,\n key: string,\n isMac: boolean,\n) {\n const lowerKey = key.toLowerCase();\n if (lowerKey in keyMap) {\n const result = processKey(keyMap[lowerKey], mode, isMac);\n if (result.text.startsWith(\"$\")) {\n result.text = t(result.text.replace(\"$\", \"\"));\n }\n return result;\n }\n return {\n icon: null,\n text: key.toUpperCase(),\n };\n}\n\nfunction processKey(\n config: PlatformKeyConfig,\n requestedMode: DisplayMode,\n isMac: boolean,\n) {\n const keyCfg = isMac && config.mac ? config.mac : config.default;\n return {\n icon: requestedMode === \"icon\" ? keyCfg.icon ?? null : null,\n text: keyCfg.text ?? null,\n };\n}\n\nfunction isDivider(key) {\n return (\n key === AND_DELINEATOR ||\n key === SLASH_DELINEATOR ||\n key === THEN_DELINEATOR\n );\n}\n\nfunction getDivider(key) {\n return key === AND_DELINEATOR\n ? \"+\"\n : key === SLASH_DELINEATOR\n ? \"/\"\n : t(\"hotkey.then\");\n}\n\nconst variantClass = computed(() => {\n return variantModifier(props.variant ?? KbdVariant.default, [\"default\"]);\n});\n\nconst accessibleLabel = computed(() => {\n if (!props.keys) return \"\";\n\n const readableShortcuts = keyCombinations.value.map((combination) => {\n const readableParts: string[] = [];\n\n for (const key of combination) {\n if (key === AND_DELINEATOR) {\n readableParts.push(t(\"hotkey.plus\"));\n } else if (key === SLASH_DELINEATOR) {\n readableParts.push(t(\"hotkey.or\"));\n } else if (key === THEN_DELINEATOR) {\n readableParts.push(t(\"hotkey.then\"));\n } else {\n readableParts.push(key.text);\n }\n }\n return readableParts.join(\" \");\n });\n\n const shortcutText = readableShortcuts.join(\", \");\n return t(\"hotkey.shortcut\", { value: shortcutText });\n});\n\n</script>\n\n<template>\n <div\n role=\"img\"\n :aria-label=\"accessibleLabel\"\n :class=\"['ev-hotkey', variantClass, props.class]\"\n :style=\"props.style\">\n <template\n v-for=\"(combination, combinationIndex) in keyCombinations\"\n :key=\"combinationIndex\">\n <span class=\"ev-hotkey-combination\">\n <template\n v-for=\"(key, keyIndex) in combination\"\n :key=\"keyIndex\">\n <span\n v-if=\"isDivider(key)\"\n class=\"ev-hotkey-divider\"\n aria-hidden=\"true\">\n {{ getDivider(key) }}\n </span>\n <ev-kbd\n v-else\n class=\"ev-hotkey-key\"\n :variant=\"props.variant\"\n aria-hidden=\"true\"\n :title=\"key.text\">\n <ev-icon v-if=\"key.icon\" :glyph=\"key.icon\" />\n <template v-else>\n {{ key.text }}\n </template>\n </ev-kbd>\n </template>\n </span>\n </template>\n </div>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { IconProp } from \"@/composables/icons\";\nimport { makeRouterLinkOrHrefProps } from \"@/composables/router\";\n\nexport type LinkAppearance = \"default\" | \"subtle\";\n\nexport const makeEvLinkProps = propsFactory(\n {\n appearance: {\n type: String as PropType<LinkAppearance>,\n default: \"default\",\n },\n disabled: Boolean,\n iconStart: IconProp,\n iconEnd: IconProp,\n text: String,\n ...makeComponentProps(),\n ...makeRouterLinkOrHrefProps(),\n },\n \"EvLink\",\n);","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"24\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M14 5h3.657l-4.72 4.72 1.414 1.414L19 6.485V10h2V5a2 2 0 0 0-2-2h-5v2Z\" }, null, -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M17 12v5H7V7h5V5H7a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-5h-2Z\" }, null, -1)\nconst _hoisted_4 = [\n _hoisted_2,\n _hoisted_3\n]\n\nexport function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_4))\n}\nexport default { render: render }","<script setup lang=\"ts\">\nimport \"./EvLink.scss\";\nimport { makeEvLinkProps } from \"./EvLink\";\nimport { computed, useAttrs } from \"vue\";\nimport {\n RouterLinkOrHrefProps,\n useRouterLinkOrHref,\n} from \"@/composables/router.ts\";\nimport { appearanceModifier } from \"@/util\";\nimport { useDefaults } from \"@/composables\";\nimport { EvIcon } from \"@/components/EvIcon\";\nimport { LinkExternalIcon } from \"@/icons/editor\";\n\nconst definedProps = defineProps({ ...makeEvLinkProps() });\nconst props = useDefaults(definedProps);\n\nconst attrs = useAttrs();\nconst slots = defineSlots<{\n default(): never;\n}>();\nconst link = useRouterLinkOrHref(props as RouterLinkOrHrefProps, attrs);\n\nconst appearanceClass = computed(() => appearanceModifier(props.appearance));\n\nconst iconEnd = computed(() => {\n if (attrs.target === \"_blank\" && !props.iconEnd) {\n return LinkExternalIcon;\n }\n return props.iconEnd;\n});\n</script>\n\n<template>\n <a\n :class=\"[\n 'ev-link',\n {\n 'is-disabled': props.disabled,\n },\n appearanceClass,\n props.class,\n ]\"\n :style=\"props.style\"\n :href=\"link.href.value\">\n <ev-icon\n v-if=\"props.iconStart\"\n :glyph=\"props.iconStart\"\n class=\"ev-link--icon-start\" />\n <slot>{{ props.text }}</slot>\n <ev-icon v-if=\"iconEnd\" :glyph=\"iconEnd\" class=\"ev-link--icon-end\" />\n </a>\n</template>\n","import { makeAppearanceProps, propsFactory } from \"@/util\";\nimport { IconProp } from \"@/composables/icons\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport { makeThemeProps } from \"@/composables/theme\";\n\nexport const makeEvLozengeProps = propsFactory(\n {\n iconEnd: IconProp,\n iconStart: IconProp,\n maxWidth: {\n type: [String, Number],\n default: 200,\n },\n\n ...makeAppearanceProps(),\n ...makeThemeProps(),\n ...makeComponentProps(),\n ...makeTagProps({\n tag: \"span\",\n }),\n },\n \"EvLozenge\",\n);\n","<script setup lang=\"ts\">\n/**\n * # EvLozenge\n *\n * `<ev-lozenge />`\n */\nimport \"./EvLozenge.scss\";\nimport { makeEvLozengeProps } from \"./EvLozenge\";\nimport { isIntegerish, useAppearance } from \"@/util\";\nimport { computed } from \"vue\";\nimport { EvIcon } from \"../EvIcon\";\nimport { provideTheme } from \"@/composables/theme\";\n\nconst props = defineProps({\n ...makeEvLozengeProps(),\n});\n\n/**\n * ## Is the `maxWidth` prop numeric?\n * i.e. it does not have any web units.\n */\nconst isMaxWidthNumeric = () => {\n return isIntegerish(props.maxWidth);\n};\n\n/**\n * ## Get Outer Max Width\n * Returns the `maxWidth` prop value if it was supplied as a percentage,\n * or simply returns '100%'.\n */\nconst maxWidthOuter = computed(() => {\n return isMaxWidthNumeric() ? `${props.maxWidth}px` : props.maxWidth;\n});\n\nconst { appearanceClass, variantClass } = useAppearance(props);\nconst { themeClasses } = provideTheme(props);\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n :class=\"[\n 'ev-lozenge',\n themeClasses,\n appearanceClass,\n variantClass,\n props.class,\n ]\"\n :style=\"[{ 'max-width': maxWidthOuter }, props.style]\">\n <ev-icon v-if=\"props.iconStart\" :glyph=\"props.iconStart\" size=\"small\" />\n <span class=\"ev-lozenge--label\">\n <slot />\n </span>\n <ev-icon v-if=\"props.iconEnd\" :glyph=\"props.iconEnd\" size=\"small\" />\n </component>\n</template>\n","import { AppearanceProp, makeAppearanceProps, propsFactory } from \"@/util\";\nimport { PropType, Ref } from \"vue\";\nimport { IconProp, IconValue } from \"@/composables/icons\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { EvButtonProps } from \"@/components/EvButton\";\n\ntype ModelValueProp = boolean | Ref<boolean>;\ntype EvMessageVariant = \"subtle\" | \"tonal\" | \"bold\";\n\n/**\n * # EvMessageProps\n */\nexport interface EvMessageProps {\n description?: string;\n dismissible?: boolean;\n expandable?: boolean;\n icon?: IconValue;\n modelValue?: Ref<boolean>;\n title?: string;\n variant?: EvMessageVariant;\n actions?: EvButtonProps[];\n appearance?: AppearanceProp;\n onDismiss?: () => void;\n}\n\nexport interface EvMessageSlots {\n icon?: any;\n default?: any;\n actions?: any;\n}\n\n/**\n * # makeEvMessageProps\n */\nexport const makeEvMessageProps = propsFactory(\n {\n description: String,\n dismissDelay: {\n type: [Boolean, Number],\n default: 0,\n },\n dismissible: [Boolean, Object] as PropType<ModelValueProp>,\n expandable: Boolean,\n icon: IconProp,\n modelValue: {\n type: [Boolean, Object] as PropType<ModelValueProp>,\n default: true,\n },\n title: String,\n actions: Array as PropType<EvButtonProps[]>,\n\n ...makeAppearanceProps({\n variant: \"tonal\",\n }),\n ...makeTagProps({\n tag: \"section\",\n }),\n ...makeComponentProps(),\n },\n \"EvMessage\",\n);\n","<script setup lang=\"ts\">\n/**\n * # EvMessage\n *\n * `<ev-message />`\n */\nimport \"./EvMessage.scss\";\nimport { appearanceModifier, isNumber, makeClassName } from \"@/util\";\nimport EvIcon from \"../EvIcon/EvIcon.vue\";\nimport { CancelIcon, ChevronDownIcon } from \"@/icons\";\nimport { computed, nextTick, shallowRef } from \"vue\";\nimport EvButton from \"@/components/EvButton/EvButton.vue\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { appearanceIcon } from \"@/composables/icons\";\nimport { makeEvMessageProps } from \"./EvMessage\";\nimport { useLocaleFunctions } from \"@/composables/locale\";\nimport { EvButtonProps } from \"@/components/EvButton\";\nimport { hasSlotWithContent } from \"@/composables/hasSlotWithContent\";\nimport { EvButtonGroup } from \"@/components/EvButtonGroup\";\nimport { EvHeading } from \"@/components/EvHeading\";\n\nconst props = defineProps({\n ...makeEvMessageProps(),\n});\nconst slots = defineSlots<{\n actions(): never;\n default(): never;\n icon(): never;\n}>();\nconst hasDefaultSlot = hasSlotWithContent(slots, \"default\");\nconst hasActionSlot = hasSlotWithContent(slots, \"action\");\nconst modelProxy = useModelProxy(props, \"modelValue\");\nconst isExpanded = shallowRef(false);\nconst { t } = useLocaleFunctions();\n\n// Emit\nconst emit = defineEmits([\n \"dismissed\",\n \"click:dismiss\",\n \"click:expand\",\n \"update:modelValue\",\n]);\n\n/**\n * ## Icon Glyph\n */\nconst iconGlyph = computed(() => {\n return props.icon ? props.icon : appearanceIcon(props.appearance);\n});\n\nconst showExpandable = computed(() => {\n return (\n (hasDefaultSlot.value ||\n !!props.description ||\n hasActionSlot.value ||\n !!actions.value.length) &&\n (!props.expandable || isExpanded.value)\n );\n});\n\nconst variantModifier = computed(() => {\n return makeClassName(props.variant, \"is-variant\");\n});\n\n/**\n * ## On Click Dismiss\n */\nfunction dismiss(): void {\n if (!props.dismissDelay) {\n modelProxy.value = false;\n } else if (isNumber(props.dismissDelay)) {\n const delay = props.dismissDelay;\n setTimeout(() => {\n modelProxy.value = false;\n emit(\"dismissed\");\n }, delay);\n }\n emit(\"click:dismiss\");\n}\n\n/**\n * ## On Click Expand\n */\nfunction expand(): void {\n isExpanded.value = !isExpanded.value;\n emit(\"click:expand\", isExpanded.value);\n}\n\n/**\n * # Actions\n */\nconst actions = computed(() => {\n if (!props.actions) {\n return [];\n }\n const values = [];\n for (const action of props.actions) {\n const actionDefaults: EvButtonProps = {\n appearance: props.variant === \"bold\" ? \"inverse\" : props.appearance,\n variant: \"link\",\n size: \"small\",\n };\n values.push(Object.assign(actionDefaults, action));\n }\n return values;\n});\n\n/**\n * # onEnter\n * @param el\n */\nfunction onEnter(el: Element) {\n nextTick(() => {\n const element = el as HTMLElement;\n element.style.height = \"auto\";\n const height = getComputedStyle(element).height;\n element.style.height = \"0px\";\n requestAnimationFrame(() => {\n element.style.height = height;\n });\n });\n}\n\n/**\n * # onAfterEnter\n * @param el\n */\nfunction onAfterEnter(el: Element) {\n const element = el as HTMLElement;\n element.style.height = \"auto\";\n}\n\n/**\n * # onLeave\n * @param el\n */\nfunction onLeave(el: Element) {\n nextTick(() => {\n const element = el as HTMLElement;\n element.style.height = getComputedStyle(element).height;\n requestAnimationFrame(() => {\n element.style.height = \"0px\";\n });\n });\n}\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n v-show=\"modelProxy\"\n :class=\"[\n 'ev-message',\n variantModifier,\n appearanceModifier(props.appearance),\n props.class,\n ]\">\n <div class=\"ev-message--icon\">\n <slot name=\"icon\">\n <ev-icon :glyph=\"iconGlyph\" />\n </slot>\n </div>\n <div class=\"ev-message--content\">\n <ev-heading\n class=\"ev-message--title\"\n size=\"small\"\n :text=\"props.title\" />\n <transition\n name=\"transition-message\"\n @before-enter=\"onEnter\"\n @after-enter=\"onAfterEnter\"\n @leave=\"onLeave\">\n <div v-if=\"showExpandable\" class=\"ev-message--expandable\">\n <div v-if=\"hasDefaultSlot\" class=\"ev-message--description\">\n <slot name=\"default\" />\n </div>\n <div\n v-else-if=\"!!props.description\"\n class=\"ev-message--description\"\n v-html=\"props.description\"></div>\n <div\n v-if=\"hasActionSlot || actions.length\"\n class=\"ev-message--actions\">\n <slot name=\"actions\">\n <ev-button-group :items=\"actions\" />\n </slot>\n </div>\n </div>\n </transition>\n </div>\n <div v-if=\"props.expandable\" class=\"ev-message--expand\">\n <ev-button\n rounded\n :class=\"[{ 'is-expanded': isExpanded }]\"\n :aria-label=\"t('expand')\"\n :icon=\"ChevronDownIcon\"\n size=\"small\"\n variant=\"subtle\"\n @click=\"expand\" />\n </div>\n <transition name=\"transition-fade\">\n <div v-if=\"props.dismissible\" class=\"ev-message--dismiss\">\n <ev-button\n rounded\n :aria-label=\"t('dismiss')\"\n :icon=\"CancelIcon\"\n size=\"small\"\n variant=\"subtle\"\n @click=\"dismiss\" />\n </div>\n </transition>\n </component>\n</template>\n","import { propsFactory } from \"@/util\";\nimport {\n EvMessageProps,\n EvMessageSlots,\n makeEvMessageProps,\n} from \"../EvMessage\";\n\n/**\n * # EvNotificationProps\n */\nexport interface EvNotificationProps extends EvMessageProps {\n timeout?: number;\n}\n\nexport interface EvNotificationSlots extends EvMessageSlots {}\n\n/**\n * # makeEvNotificationProps\n */\nexport const makeEvNotificationProps = propsFactory(\n {\n timeout: Number,\n zIndex: {\n type: [Number, String],\n default: 2000,\n },\n\n ...makeEvMessageProps({\n tag: \"div\" as const,\n dismissible: true,\n dismissDelay: true as const,\n variant: \"subtle\",\n }),\n },\n \"EvNotification\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvNotification.scss\";\nimport { makeEvNotificationProps } from \"./EvNotification\";\nimport { EvMessage } from \"../EvMessage\";\nimport { EvSurface } from \"../EvSurface\";\nimport { filterComponentProps, omit } from \"@/util\";\nimport { computed, onMounted, toRef, watch } from \"vue\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { useStack } from \"@/composables/stack\";\n\nconst props = defineProps({\n ...makeEvNotificationProps(),\n});\nconst slots = defineSlots<{\n actions(): never;\n default(): never;\n icon(): never;\n}>();\nconst model = useModelProxy(props, \"modelValue\");\nconst timeout = useModelProxy(props, \"timeout\");\nconst messageProps = computed(() => {\n return omit(filterComponentProps(EvMessage, props), [\"modelValue\"]);\n});\n\n// Emit\nconst emit = defineEmits([\"dismiss\", \"update:modelValue\"]);\n\nfunction dismiss() {\n model.value = false;\n emit(\"dismiss\");\n}\n\nconst { stackStyles } = useStack(model, toRef(props, \"zIndex\"), false);\n\nwatch(timeout, () => {\n if (!timeout.value) {\n stopTimer();\n } else {\n startTimer();\n }\n});\n\nonMounted(() => {\n if (!timeout.value) {\n return;\n }\n startTimer();\n});\n\nlet timer: any = null;\nfunction startTimer() {\n timer = setTimeout(() => {\n dismiss();\n }, timeout.value);\n}\n\nfunction stopTimer() {\n clearTimeout(timer);\n}\n</script>\n\n<template>\n <ev-surface\n class=\"ev-notification\"\n role=\"alert\"\n rounded=\"small\"\n elevation=\"overlay\"\n :style=\"[stackStyles]\">\n <ev-message v-bind=\"messageProps\" @click:dismiss=\"dismiss\">\n <template #icon>\n <slot name=\"icon\" />\n </template>\n <template #default>\n <slot name=\"default\" />\n </template>\n <template #actions>\n <slot name=\"actions\" />\n </template>\n </ev-message>\n </ev-surface>\n</template>\n","import { h, isRef, ref, shallowRef, VNode, VNodeProps, watch } from \"vue\";\nimport { Notification } from \"./EvNotifications\";\nimport {\n EvNotificationProps,\n EvNotificationSlots,\n} from \"@/components/EvNotification\";\n\n/**\n * # EvNotificationsManager\n */\nexport class EvNotificationsManager {\n public readonly notifications = ref<Notification[]>([]);\n private num = 0;\n\n /**\n * ## add\n *\n * @param props\n * @param slots\n */\n public add(props: EvNotificationProps, slots?: EvNotificationSlots) {\n const id = ++this.num;\n const renderedProps = this.createProps(id, props);\n const renderedSlots = this.createSlots(slots);\n this.notifications.value.unshift({\n id,\n props: renderedProps as object,\n slots: renderedSlots as object,\n });\n return {\n id,\n dismiss: () => {\n this.dismiss(id);\n },\n };\n }\n\n /**\n * ## createProps\n *\n * @param id\n * @param props\n * @private\n */\n private createProps(id: number, props: EvNotificationProps) {\n const model = isRef(props.modelValue)\n ? props.modelValue\n : shallowRef(true);\n watch(model, () => {\n this.dismiss(id);\n });\n return Object.assign(props as VNodeProps, {\n modelValue: model,\n });\n }\n\n /**\n * ## createSlots\n *\n * @private\n * @param slots\n */\n private createSlots(slots?: EvNotificationSlots) {\n const internalSlots = slots ?? {};\n const renderedSlots: {\n [key: string]: (props: any, slots: any) => VNode;\n } = {};\n for (const key in internalSlots) {\n const component = internalSlots[key as keyof EvNotificationSlots];\n renderedSlots[key] = (props, slots) => {\n return h(component!, props, slots);\n };\n }\n return renderedSlots;\n }\n\n /**\n * # dismiss\n *\n * @param id\n */\n public dismiss(id: number) {\n const index = this.notifications.value.findIndex(\n (notification) => notification.id === id,\n );\n this.notifications.value.splice(index, 1);\n }\n}\n","<script setup lang=\"ts\">\r\nimport \"./EvNotifications.scss\";\r\nimport { EvNotification } from \"../EvNotification\";\r\nimport { computed, shallowRef } from \"vue\";\r\nimport { useTeleport } from \"@/composables/teleport\";\r\nimport { injectNotifications } from \"@/composables/notification\";\r\nimport { getLastZIndex } from \"@/composables/stack\";\r\n\r\nconst teleportTarget = useTeleport(shallowRef(false));\r\nconst service = injectNotifications();\r\nconst notifications = service.notifications;\r\n\r\nconst zIndex = computed(() => {\r\n return getLastZIndex() ?? 2000;\r\n});\r\n</script>\r\n\r\n<template>\r\n <teleport :to=\"teleportTarget\">\r\n <transition-group\r\n name=\"transition-notification\"\r\n class=\"ev-notifications\"\r\n tag=\"div\"\r\n :style=\"{\r\n zIndex,\r\n }\">\r\n <ev-notification\r\n v-for=\"(notification, index) in notifications\"\r\n :key=\"notification.id\"\r\n v-bind=\"notification.props as object\"\r\n :dismissible=\"\r\n index === 0 ? notification.props.dismissible : false\r\n \"\r\n :timeout=\"index === 0 ? notification.props.timeout : undefined\"\r\n @dismiss=\"service.dismiss(notification.id)\">\r\n <template #icon\r\n ><component :is=\"notification.slots.icon\"\r\n /></template>\r\n <template #default\r\n ><component :is=\"notification.slots.default\"\r\n /></template>\r\n <template #actions\r\n ><component :is=\"notification.slots.actions\"\r\n /></template>\r\n </ev-notification>\r\n </transition-group>\r\n </teleport>\r\n</template>\r\n","import { NumberFormat, propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables\";\nimport { PropType } from \"vue\";\n\n\n\nexport const makeEvNumberProps = propsFactory(\n {\n prefix: String,\n suffix: String,\n format: Object as PropType<NumberFormat>,\n value: [Number, String],\n duration: Number,\n ...makeComponentProps(),\n },\n \"EvNumber\",\n);","<script setup lang=\"ts\">\n\nimport {computed, onMounted, ref, watch} from \"vue\";\n\nconst props = defineProps<{\n value: number;\n}>();\n\nconst digits = Array.from({ length: 10 }, (_, i) => i);\nconst current = ref(0);\nconst previous = ref(0);\n\nwatch(\n () => props.value,\n (newVal) => {\n previous.value = current.value;\n current.value = newVal;\n },\n);\n\nconst stackStyle = computed(() => {\n const offset = current.value * 1;\n return {\n transform: `translateY(-${offset}em)`,\n transition: `transform var(--ev-number-duration, 0.5s) var(--easing-standard)`,\n willChange: \"transform\",\n };\n});\n\nonMounted(() => {\n previous.value = current.value;\n current.value = props.value;\n});\n</script>\n\n<template>\n <span class=\"ev-number-digit\">\n <span\n class=\"ev-number-digit--stack\"\n :style=\"stackStyle\"\n >\n <span\n v-for=\"n in digits\"\n :key=\"n\"\n class=\"ev-number-digit--num\"\n :inert=\"props.value !== n\"\n :style=\"{ '--n': n }\">\n {{ n }}\n </span>\n </span>\n </span>\n</template>","<script setup lang=\"ts\">\nimport \"./EvNumber.scss\";\nimport { makeEvNumberProps } from \"./EvNumber\";\nimport { computed } from \"vue\";\nimport { useLocaleManager } from \"@/composables\";\nimport { splitNumberToParts } from \"@/util\";\nimport EvNumberDigit from \"@/components/EvNumber/EvNumberDigit.vue\";\nimport ExpandTransitionGenerator from \"@/components/EvTransition/transitions/expandTransition\";\n\nconst props = defineProps({ ...makeEvNumberProps() });\nconst localeManager = useLocaleManager();\nconst formatter = computed(() => {\n return new Intl.NumberFormat(\n localeManager.currentLocale.value,\n props.format,\n );\n});\n\nconst parts = computed(() =>\n splitNumberToParts(\n parseFloat(props.value.toString()),\n formatter.value,\n props.prefix,\n props.suffix,\n ),\n);\n\nconst allParts = computed(() => [\n ...parts.value.start,\n ...parts.value.integer,\n ...parts.value.fraction,\n ...parts.value.end,\n]);\n\nfunction isDigitPart(\n part: any,\n): part is { type: \"integer\" | \"fraction\"; value: number } {\n return part.type === \"integer\" || part.type === \"fraction\";\n}\n\nconst transition = ExpandTransitionGenerator(\"\", true);\nconst duration = computed(() => props.duration ?? 500);\n</script>\n\n<template>\n <span\n :class=\"['ev-number', props.class]\"\n :style=\"[props.style, { '--ev-number-duration': duration + 'ms' }]\">\n <transition-group\n name=\"ev-number-transition\"\n v-bind=\"transition as any\">\n <template v-for=\"part in allParts\" :key=\"part.key\">\n <ev-number-digit\n v-if=\"isDigitPart(part)\"\n :value=\"part.value\"\n :class=\"`is-${part.type}`\" />\n <span v-else :class=\"['ev-number-symbol', `is-${part.type}`]\">\n {{ part.value }}\n </span>\n </template>\n </transition-group>\n </span>\n</template>\n","import { isEmpty, mathEval, omit, propsFactory } from \"@/util\";\r\nimport { makeEvTextfieldProps } from \"@/components/EvTextfield/EvTextfield\";\r\nimport { LocaleManager } from \"@/modules/Locale/LocaleManager\";\r\nimport { PropType, watch } from \"vue\";\r\n\r\nexport type NumberFieldModeProp = \"decimal\" | \"currency\";\r\n\r\nexport const makeEvNumberFieldProps = propsFactory(\r\n {\r\n minFractionDigits: Number,\r\n maxFractionDigits: Number,\r\n currency: String,\r\n currencyDisplay: {\r\n type: String,\r\n default: \"narrowSymbol\",\r\n },\r\n locale: String,\r\n localeMatcher: String,\r\n min: {\r\n type: Number,\r\n default: undefined,\r\n },\r\n max: {\r\n type: Number,\r\n default: undefined,\r\n },\r\n mode: {\r\n type: String as PropType<NumberFieldModeProp>,\r\n default: \"decimal\",\r\n },\r\n showButtons: Boolean,\r\n step: {\r\n type: Number,\r\n default: 1,\r\n },\r\n useGrouping: Boolean,\r\n\r\n ...omit(makeEvTextfieldProps(), [\"type\"]),\r\n },\r\n \"EvNumberField\",\r\n);\r\n\r\nexport interface NumberParserProps {\r\n // Required props\r\n mode: string;\r\n\r\n // Optional props\r\n currency?: string;\r\n currencyDisplay?: string;\r\n minFractionDigits?: number;\r\n maxFractionDigits?: number;\r\n locale?: string;\r\n localeMatcher?: string;\r\n min?: number;\r\n max?: number;\r\n useGrouping?: boolean;\r\n}\r\n\r\n/**\r\n * # Number Parser\r\n */\r\nexport class NumberParser {\r\n private _currencyPattern!: RegExp;\r\n private _decimalPattern!: RegExp;\r\n private _groupPattern!: RegExp;\r\n private _minusSignPattern!: RegExp;\r\n private _numberFormat!: Intl.NumberFormat;\r\n private _numerals!: string[];\r\n private _numeralsIndex!: (d: string) => string;\r\n private _numeralPattern!: RegExp;\r\n private _prefixPattern!: RegExp;\r\n private _suffixPattern!: RegExp;\r\n\r\n constructor(\r\n public localeManager: LocaleManager,\r\n public props: NumberParserProps,\r\n ) {\r\n this.cachePatterns();\r\n this.watchProps();\r\n }\r\n\r\n private cachePatterns() {\r\n this._numberFormat = new Intl.NumberFormat(this.locale, this.options);\r\n this._numerals = this.createNumerals();\r\n this._numeralsIndex = this.createNumeralsIndex();\r\n this._numeralPattern = this.createNumeralPattern();\r\n this._groupPattern = this.createGroupPattern();\r\n this._minusSignPattern = this.createMinusSignPattern();\r\n this._currencyPattern = this.createCurrencyPattern();\r\n this._decimalPattern = this.createDecimalPattern();\r\n this._suffixPattern = this.createSuffixPattern();\r\n this._prefixPattern = this.createPrefixPattern();\r\n }\r\n\r\n get currencyPattern() {\r\n return this._currencyPattern;\r\n }\r\n\r\n get decimalPattern() {\r\n return this._decimalPattern;\r\n }\r\n\r\n get groupChar(): string {\r\n const formatter = new Intl.NumberFormat(this.locale, {\r\n useGrouping: true,\r\n });\r\n return formatter\r\n .format(1000000)\r\n .trim()\r\n .replace(this.numeralPattern, \"\")\r\n .charAt(0);\r\n }\r\n\r\n get groupPattern() {\r\n return this._groupPattern;\r\n }\r\n\r\n get locale(): string {\r\n return this.props.locale ?? this.localeManager.currentLocale.value;\r\n }\r\n\r\n get minusSignPattern() {\r\n return this._minusSignPattern;\r\n }\r\n\r\n get numberFormat() {\r\n return this._numberFormat;\r\n }\r\n\r\n get numerals() {\r\n return this._numerals;\r\n }\r\n\r\n get numeralsIndex() {\r\n return this._numeralsIndex;\r\n }\r\n\r\n get numeralPattern() {\r\n return this._numeralPattern;\r\n }\r\n\r\n get options(): Intl.NumberFormatOptions {\r\n return {\r\n localeMatcher: \"best fit\",\r\n style: this.props.mode,\r\n currency: this.props.currency,\r\n currencyDisplay: this.props.currencyDisplay,\r\n useGrouping: this.props.useGrouping,\r\n minimumFractionDigits: this.props.minFractionDigits,\r\n maximumFractionDigits: this.props.maxFractionDigits,\r\n };\r\n }\r\n\r\n get prefixChar() {\r\n const options = {\r\n style: this.props.mode,\r\n currency: this.props.currency,\r\n currencyDisplay: this.props.currencyDisplay,\r\n };\r\n const formatter = new Intl.NumberFormat(this.locale, options);\r\n return formatter.format(1).split(\"1\")[0];\r\n }\r\n\r\n get prefixPattern() {\r\n return this._prefixPattern;\r\n }\r\n\r\n get suffixChar() {\r\n const options = {\r\n style: this.props.mode,\r\n currency: this.props.currency,\r\n currencyDisplay: this.props.currencyDisplay,\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 0,\r\n };\r\n const formatter = new Intl.NumberFormat(this.locale, options);\r\n return formatter.format(1).split(\"1\")[1];\r\n }\r\n\r\n get suffixPattern() {\r\n return this._suffixPattern;\r\n }\r\n\r\n /**\r\n * ## Create Currency Pattern\r\n * @private\r\n */\r\n private createCurrencyPattern() {\r\n if (!this.props.currency) {\r\n return new RegExp(`[]`, \"g\");\r\n }\r\n const options = {\r\n style: \"currency\",\r\n currency: this.props.currency,\r\n currencyDisplay: this.props.currencyDisplay,\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 0,\r\n };\r\n const formatter = new Intl.NumberFormat(this.locale, options);\r\n return new RegExp(\r\n `[${formatter.format(1).replace(/\\s/g, \"\").replace(this.numeralPattern, \"\").replace(this.groupPattern, \"\")}]`,\r\n \"g\",\r\n );\r\n }\r\n\r\n /**\r\n * ## Create Decimal Pattern\r\n * @private\r\n */\r\n private createDecimalPattern() {\r\n const formatter = new Intl.NumberFormat(this.locale, {\r\n ...this.options,\r\n useGrouping: false,\r\n });\r\n return new RegExp(\r\n `[${formatter.format(1.1).replace(this.currencyPattern, \"\").trim().replace(this.numeralPattern, \"\")}]`,\r\n \"g\",\r\n );\r\n }\r\n\r\n /**\r\n * ## Create Group Pattern\r\n * @private\r\n */\r\n private createGroupPattern() {\r\n return new RegExp(`[${this.groupChar}]`, \"g\");\r\n }\r\n\r\n /**\r\n * ## Create Minus Sign Pattern\r\n * @private\r\n */\r\n private createMinusSignPattern(): RegExp {\r\n const formatter = new Intl.NumberFormat(this.locale, {\r\n useGrouping: false,\r\n });\r\n return new RegExp(\r\n `[${formatter.format(-1).trim().replace(this.numeralPattern, \"\")}]`,\r\n \"g\",\r\n );\r\n }\r\n\r\n /**\r\n * ## Create Numerals\r\n * @private\r\n */\r\n private createNumerals(): string[] {\r\n return [\r\n ...new Intl.NumberFormat(this.locale, {\r\n useGrouping: false,\r\n }).format(9876543210),\r\n ].reverse();\r\n }\r\n\r\n /**\r\n * ## Create Numerals Index\r\n * @private\r\n */\r\n private createNumeralsIndex() {\r\n const index = new Map(this.numerals.map((d, i) => [d, i]));\r\n return (d: string) => index.get(d)?.toString() ?? \"\";\r\n }\r\n\r\n /**\r\n * ## Create Numeral Pattern\r\n * @private\r\n */\r\n private createNumeralPattern(): RegExp {\r\n return new RegExp(`[${this.numerals.join(\"\")}]`, \"g\");\r\n }\r\n\r\n /**\r\n * ## Create Prefix Pattern\r\n * @private\r\n */\r\n private createPrefixPattern() {\r\n return new RegExp(`${this.escapeRegExp(this.prefixChar || \"\")}`, \"g\");\r\n }\r\n\r\n /**\r\n * ## Create Suffix Pattern\r\n * @private\r\n */\r\n private createSuffixPattern() {\r\n return new RegExp(`${this.escapeRegExp(this.suffixChar || \"\")}`, \"g\");\r\n }\r\n\r\n /**\r\n * ## Escape RegExp\r\n * @param text\r\n */\r\n public escapeRegExp(text: string) {\r\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\r\n }\r\n\r\n /**\r\n * ## Format Value\r\n *\r\n * Converts a number into formatted string.\r\n *\r\n * @param value\r\n */\r\n public formatValue(value: unknown): string {\r\n if (isEmpty(value)) {\r\n return \"\";\r\n }\r\n // Minus sign\r\n if (value === \"-\") {\r\n return value;\r\n }\r\n const formatter = new Intl.NumberFormat(this.locale, this.options);\r\n const formattedValue = formatter.format(value as number);\r\n // Remove currency symbol - we'll use this in the prefix instead\r\n return formattedValue;\r\n }\r\n\r\n /**\r\n * ## Parse Value\r\n *\r\n * Convert a text value into a number.\r\n *\r\n * Returns a string when an incomplete value is supplied,\r\n * or a number when a valid number is parsed successfully\r\n * from the text supplied, or a `null` value when the number\r\n * is not valid (can't be parsed).\r\n *\r\n * @param text\r\n */\r\n public parseValue(text: string | null | undefined): number | string | null {\r\n if (text === null || text === undefined) {\r\n text = \"\";\r\n }\r\n const filteredText = text\r\n .replace(this.suffixPattern, \"\")\r\n .replace(this.prefixPattern, \"\")\r\n .trim()\r\n .replace(this.currencyPattern, \"\")\r\n .replace(this.groupPattern, \"\")\r\n .replace(this.minusSignPattern, \"-\")\r\n .replace(this.decimalPattern, \".\")\r\n .replace(this.numeralPattern, this.numeralsIndex);\r\n\r\n if (!filteredText) {\r\n return null;\r\n }\r\n if (filteredText === \"-\") {\r\n return filteredText;\r\n }\r\n\r\n let parsedValue;\r\n const pattern = /^[-+*/.\\d\\s()]+$/;\r\n if (pattern.test(filteredText)) {\r\n try {\r\n parsedValue = mathEval(`(${filteredText})`);\r\n } catch (error) {\r\n parsedValue = +filteredText;\r\n }\r\n } else {\r\n parsedValue = +filteredText;\r\n }\r\n\r\n return isNaN(parsedValue) ? null : parsedValue;\r\n }\r\n\r\n /**\r\n * ## Watch Props\r\n * @private\r\n */\r\n private watchProps() {\r\n watch(\r\n [\r\n this.localeManager.currentLocale,\r\n () => this.props.locale,\r\n () => this.props.localeMatcher,\r\n () => this.props.mode,\r\n () => this.props.currency,\r\n () => this.props.currencyDisplay,\r\n () => this.props.useGrouping,\r\n () => this.props.minFractionDigits,\r\n () => this.props.maxFractionDigits,\r\n ],\r\n (value, oldValue) => {\r\n if (value !== oldValue) {\r\n this.cachePatterns();\r\n }\r\n },\r\n );\r\n }\r\n}\r\n","<script setup lang=\"ts\">\r\n/**\r\n * `<ev-number-field>`\r\n */\r\nimport \"./EvNumberField.scss\";\r\nimport { makeEvNumberFieldProps, NumberParser } from \"./EvNumberField\";\r\nimport { EvTextfield } from \"@/components/EvTextfield\";\r\nimport { computed, nextTick, Ref, ref, shallowRef, watch } from \"vue\";\r\nimport { filterComponentProps, isEmpty, omit } from \"@/util\";\r\nimport { useModelProxy } from \"@/composables/modelProxy\";\r\nimport { EvButton } from \"@/components/EvButton\";\r\nimport { MinusIcon, PlusIcon } from \"@/icons\";\r\nimport { useLocaleManager } from \"@/composables/locale\";\r\nimport { KeyboardEvent } from \"react\";\r\n\r\nconst localeManager = useLocaleManager();\r\nconst props = defineProps({\r\n ...makeEvNumberFieldProps(),\r\n});\r\nconst slots = defineSlots<{\r\n label(): never;\r\n prefix(): never;\r\n suffix(): never;\r\n}>();\r\n\r\n// EvTextfield\r\nconst evTextfieldRef = ref<typeof EvTextfield>();\r\nconst evTextfieldProps = computed(() => {\r\n return omit(filterComponentProps(EvTextfield, props), [\"modelValue\"]);\r\n});\r\n\r\nconst numberParser = new NumberParser(localeManager, props);\r\n\r\n/**\r\n * We separate the `modelValue` and the `inputValue` (the value displayed)\r\n * because this allows us some efficiency improvements when holding down +/- buttons\r\n * as well as permitting formatting.\r\n *\r\n * Whenever the `modelValue` changes we need to ensure the `inputValue` is updated.\r\n */\r\nconst modelValue = useModelProxy(props, \"modelValue\");\r\n\r\nconst inputValue: Ref<string | null | undefined> = shallowRef();\r\ninputValue.value = numberParser.formatValue(modelValue.value);\r\nwatch(modelValue, () => {\r\n inputValue.value = numberParser.formatValue(modelValue.value);\r\n});\r\n\r\nwatch(\r\n [\r\n localeManager.currentLocale,\r\n () => props.locale,\r\n () => props.localeMatcher,\r\n () => props.mode,\r\n () => props.currency,\r\n () => props.currencyDisplay,\r\n () => props.useGrouping,\r\n () => props.minFractionDigits,\r\n () => props.maxFractionDigits,\r\n ],\r\n (value, oldValue) => {\r\n if (value !== oldValue) {\r\n inputValue.value = numberParser.formatValue(modelValue.value);\r\n }\r\n },\r\n);\r\n\r\n/**\r\n * Minimum Boundary\r\n * The computed value is now only a number or null (undefined will be converted to null).\r\n */\r\nconst minimum = computed(() => {\r\n return props.min ?? null;\r\n});\r\n\r\n/**\r\n * Maximum Boundary\r\n * The computed value is now only a number or null (undefined will be converted to null).\r\n */\r\nconst maximum = computed(() => {\r\n return props.max ?? null;\r\n});\r\n\r\n/*\r\nconst currencySymbol = computed(() => {\r\n return numberParser.prefixChar;\r\n});\r\n\r\n */\r\n\r\n/**\r\n * Incremental Values\r\n */\r\nconst incrementAmount = computed(() => {\r\n return props.step ?? 1;\r\n});\r\nlet incrementInterval: ReturnType<typeof setInterval> | null = null;\r\nconst incrementRate: number = 100;\r\nconst incrementDelay = 0.25;\r\nlet isIncrementing = false;\r\n\r\n/**\r\n * ## Get Decimal Places\r\n * Returns the number of decimal places of the `value` supplied.\r\n * @param value\r\n */\r\nfunction getDecimalPlaces(value: number): number {\r\n const options = {\r\n useGrouping: false,\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 20,\r\n };\r\n const fraction = localeManager.numberFormatter\r\n .formatter(options)\r\n .formatToParts(value)\r\n .find((part) => part.type === \"fraction\");\r\n return fraction ? fraction.value.length : 0;\r\n}\r\n\r\n/**\r\n * ## Set Value\r\n * Can be used to set the value of either the 'modelValue' or the 'inputValue'.\r\n * @param value\r\n */\r\nfunction getValue(value?: string | number | null) {\r\n if (isEmpty(value)) {\r\n return value ?? null;\r\n }\r\n if (typeof value === \"string\") {\r\n value = parseFloat(value);\r\n }\r\n if (isMinBoundary(value!)) {\r\n value = minimum.value;\r\n } else if (isMaxBoundary(value!)) {\r\n value = maximum.value;\r\n }\r\n\r\n // We always want to constrain the value to the minimum\r\n // and maximum decimal places\r\n const decimalPlaces = getDecimalPlaces(value!);\r\n if (\r\n !isEmpty(props.minFractionDigits) &&\r\n decimalPlaces < props.minFractionDigits!\r\n ) {\r\n value = parseFloat(value!.toFixed(props.minFractionDigits));\r\n }\r\n if (\r\n !isEmpty(props.maxFractionDigits) &&\r\n decimalPlaces > props.maxFractionDigits!\r\n ) {\r\n value = parseFloat(value!.toFixed(props.maxFractionDigits));\r\n }\r\n return value;\r\n}\r\n\r\n/**\r\n * ## Is Max Boundary\r\n * @param value\r\n */\r\nfunction isMaxBoundary(value: number): boolean {\r\n return maximum.value !== null && maximum.value < value;\r\n}\r\n\r\n/**\r\n * ## Is Min Boundary\r\n * @param value\r\n */\r\nfunction isMinBoundary(value: number): boolean {\r\n return minimum.value !== null && minimum.value > value;\r\n}\r\n\r\n/**\r\n * # On Blur\r\n *\r\n * If the user has typed something we can't be sure that it is accurate\r\n * based upon the min/max boundaries so we reset the `inputValue` first.\r\n * Then, we can update the `modelValue` based on the input.\r\n */\r\nfunction onBlur(e: Event) {\r\n if (inputValue.value === \"-\") {\r\n inputValue.value = \"\";\r\n }\r\n const parsedValue = numberParser.parseValue(inputValue.value as string);\r\n const currentValue = getValue(parsedValue);\r\n inputValue.value = numberParser.formatValue(currentValue);\r\n modelValue.value = numberParser.parseValue(inputValue.value);\r\n}\r\n\r\n/**\r\n * ## On Focus\r\n *\r\n * @param e\r\n */\r\nfunction onFocus(e: Event) {\r\n if (props.readonly) {\r\n return;\r\n }\r\n inputValue.value = isEmpty(modelValue.value)\r\n ? \"\"\r\n : modelValue.value.toString();\r\n}\r\n\r\n/**\r\n * ## On Input Keydown\r\n * @param e\r\n */\r\nfunction onInputKeydown(e: KeyboardEvent) {\r\n const passThrough = [\r\n \"Backspace\",\r\n \"Delete\",\r\n \"Home\",\r\n \"End\",\r\n \"ArrowLeft\",\r\n \"ArrowRight\",\r\n \"Tab\",\r\n ];\r\n if (passThrough.includes(e.key)) {\r\n return;\r\n }\r\n\r\n // Listen to ArrowUp\r\n if (e.key === \"ArrowUp\") {\r\n e.preventDefault();\r\n startIncrementing(1);\r\n return;\r\n }\r\n // Listen to ArrowDown\r\n if (e.key === \"ArrowDown\") {\r\n e.preventDefault();\r\n startIncrementing(-1);\r\n return;\r\n }\r\n\r\n if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n const parsedValue = numberParser.parseValue(inputValue.value);\r\n const currentValue = getValue(parsedValue);\r\n modelValue.value = currentValue;\r\n nextTick(() => {\r\n inputValue.value = isEmpty(currentValue)\r\n ? \"\"\r\n : currentValue!.toString();\r\n });\r\n return;\r\n }\r\n\r\n const isPaste = e.key === \"v\" && e.ctrlKey;\r\n\r\n // Block anything not in the whitelist\r\n const whitelist = new RegExp(\"[0-9 +\\-\\/\\(\\)*]\");\r\n if (!whitelist.test(e.key) && !isPaste) {\r\n e.preventDefault();\r\n }\r\n}\r\n\r\n/**\r\n * ## On Input Keyup\r\n * @param e\r\n */\r\nfunction onInputKeyup(e: KeyboardEvent) {\r\n if (e.code === \"ArrowUp\" || e.code === \"ArrowDown\") {\r\n e.preventDefault();\r\n }\r\n stopIncrementing();\r\n}\r\n\r\n/**\r\n * ## On Paste\r\n */\r\nfunction onPaste(e: ClipboardEvent) {\r\n e.preventDefault();\r\n const data = e.clipboardData?.getData(\"Text\");\r\n if (data) {\r\n const parsedValue = numberParser.parseValue(data);\r\n const currentValue = getValue(parsedValue);\r\n inputValue.value = isEmpty(currentValue)\r\n ? \"\"\r\n : currentValue!.toString();\r\n modelValue.value = currentValue;\r\n }\r\n}\r\n\r\n/**\r\n * ## Start Incrementing\r\n *\r\n * If the user holds the plus/minus button down for longer than the `incrementDelay`\r\n * we increase/decrease the `inputValue` by the `incrementAmount` at an increasing\r\n * rate for every second the user holds the button.\r\n *\r\n * @param direction\r\n */\r\nfunction startIncrementing(direction: number) {\r\n if (isIncrementing || props.readonly) {\r\n return;\r\n }\r\n isIncrementing = true;\r\n let currentValue: number;\r\n if (isEmpty(modelValue.value)) {\r\n currentValue = minimum.value ?? 0;\r\n } else {\r\n currentValue = getValue(\r\n modelValue.value! + direction * incrementAmount.value,\r\n )! as number;\r\n }\r\n inputValue.value = numberParser.formatValue(currentValue);\r\n\r\n // Then we rely on the delay to do more increments on a timer\r\n const startTime = Date.now();\r\n let internalIncrementAmount = incrementAmount.value;\r\n incrementInterval = setInterval(() => {\r\n const currentTime = Date.now();\r\n const elapsedTime = (currentTime - startTime) / 1000;\r\n if (elapsedTime < incrementDelay) {\r\n return;\r\n }\r\n const multiplier = Math.floor(Math.pow(2, elapsedTime - 1));\r\n internalIncrementAmount = incrementAmount.value * multiplier;\r\n currentValue = getValue(\r\n currentValue + direction * internalIncrementAmount,\r\n )! as number;\r\n inputValue.value = numberParser.formatValue(currentValue);\r\n }, incrementRate);\r\n}\r\n\r\n/**\r\n * ## Stop Incrementing\r\n *\r\n * When the user releases the plus/minus button stop the increment interval\r\n * and set the resulting value onto the `modelValue` - this is more efficient\r\n * than setting the `modelValue` with every increment.\r\n */\r\nfunction stopIncrementing() {\r\n if (isIncrementing) {\r\n clearInterval(incrementInterval!);\r\n const parsedValue = numberParser.parseValue(inputValue.value);\r\n modelValue.value = getValue(parsedValue);\r\n isIncrementing = false;\r\n }\r\n}\r\n\r\nconst hasPrefix = computed(() => {\r\n return props.showButtons || slots.prefix || props.prefix;\r\n});\r\n\r\nconst hasSuffix = computed(() => {\r\n return props.showButtons || slots.suffix || props.suffix;\r\n});\r\n</script>\r\n\r\n<template>\r\n <ev-textfield\r\n ref=\"evTextfieldRef\"\r\n v-bind=\"evTextfieldProps\"\r\n v-model=\"inputValue\"\r\n class=\"ev-number-field\"\r\n type=\"text\"\r\n @paste=\"onPaste\"\r\n @blur=\"onBlur\"\r\n @focus=\"onFocus\"\r\n @keydown=\"onInputKeydown\"\r\n @keyup=\"onInputKeyup\">\r\n <template v-if=\"props.label || slots.label\" #label>\r\n <slot name=\"label\">{{ props.label }}</slot>\r\n </template>\r\n <template v-if=\"hasPrefix\" #prefix>\r\n <ev-button\r\n v-if=\"props.showButtons\"\r\n :rounded=\"props.rounded\"\r\n size=\"x-small\"\r\n class=\"ev-number-field--minus\"\r\n variant=\"subtle\"\r\n :icon=\"MinusIcon\"\r\n :disabled=\"props.readonly || props.disabled\"\r\n @keydown.space.enter=\"startIncrementing(-1)\"\r\n @keyup=\"stopIncrementing()\"\r\n @click.prevent.stop=\"() => {}\"\r\n @mousedown.prevent.stop=\"startIncrementing(-1)\"\r\n @mouseup.prevent.stop=\"stopIncrementing()\"\r\n @mouseleave=\"stopIncrementing()\" />\r\n <slot name=\"prefix\">{{ props.prefix }}</slot>\r\n </template>\r\n <template v-if=\"hasSuffix\" #suffix>\r\n <slot name=\"suffix\">{{ props.suffix }}</slot>\r\n <ev-button\r\n v-if=\"props.showButtons\"\r\n :rounded=\"props.rounded\"\r\n size=\"x-small\"\r\n class=\"ev-number-field--plus\"\r\n variant=\"subtle\"\r\n :icon=\"PlusIcon\"\r\n :disabled=\"props.readonly || props.disabled\"\r\n @keydown.space.enter=\"startIncrementing(1)\"\r\n @keyup=\"stopIncrementing()\"\r\n @click.prevent.stop=\"() => {}\"\r\n @mousedown.prevent.stop=\"startIncrementing(1)\"\r\n @mouseup.prevent.stop=\"stopIncrementing()\"\r\n @mouseleave=\"stopIncrementing()\" />\r\n </template>\r\n </ev-textfield>\r\n</template>\r\n","<script setup lang=\"ts\">\nimport \"./EvQuickfind.scss\";\nimport EvIcon from \"../EvIcon/EvIcon.vue\";\nimport { QuickfindIcon } from \"@/icons\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { sizeModifier } from \"@/util\";\nimport { computed } from \"vue\";\n\ntype QuickfindSize = \"small\" | \"medium\" | \"large\";\n\ninterface QuickfindProps {\n modelValue: string | number;\n bold?: boolean;\n size?: QuickfindSize;\n}\nconst props = withDefaults(defineProps<QuickfindProps>(), {\n bold: false,\n size: \"medium\",\n});\nconst modelProxy = useModelProxy(props, \"modelValue\");\n\nconst iconSize = computed(() => {\n switch (props.size) {\n case \"small\":\n case \"medium\":\n return \"small\";\n default:\n return \"medium\";\n }\n});\n</script>\n\n<template>\n <span\n :class=\"[\n 'ev-quickfind',\n {\n 'is-variant-bold': bold,\n },\n sizeModifier(size, ['medium']),\n ]\">\n <ev-icon :glyph=\"QuickfindIcon\" :size=\"iconSize\" />\n <span class=\"ev-quickfind--code\">{{ modelProxy }}</span>\n </span>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { makeFormFieldProps } from \"@/composables/validation\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeLabelProps } from \"@/components/EvLabel\";\n\nexport const makeEvRadioProps = propsFactory(\n {\n clearable: Boolean,\n value: null,\n ...makeLabelProps(),\n ...makeFormFieldProps(),\n ...makeComponentProps(),\n },\n \"EvRadio\",\n);\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeFormFieldProps } from \"@/composables/validation\";\nimport { InjectionKey } from \"vue\";\nimport { FormField } from \"@/modules/Form/FormField\";\nimport { makeLabelProps } from \"@/components/EvLabel\";\n\nexport interface EvRadioGroupContext extends FormField {}\n\nexport const EvRadioGroupSymbol: InjectionKey<EvRadioGroupContext> =\n Symbol.for(\"ev:radio-group\");\n\nexport const makeEvRadioGroupProps = propsFactory(\n {\n inline: Boolean,\n\n ...makeLabelProps(),\n ...makeFormFieldProps(),\n ...makeComponentProps(),\n },\n \"EvRadioGroup\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvRadioGroup.scss\";\nimport EvLabel from \"@/components/EvLabel/EvLabel.vue\";\nimport { EvRadioGroupSymbol, makeEvRadioGroupProps } from \"./EvRadioGroup\";\nimport { computed, provide } from \"vue\";\nimport { getNextId } from \"@/util\";\nimport { useFormField } from \"@/composables/validation\";\nimport EvErrors from \"@/components/EvErrors/EvErrors.vue\";\n\ndefineOptions({\n inheritAttrs: false,\n});\n\n// Props & slots\nconst props = defineProps({\n ...makeEvRadioGroupProps(),\n});\nconst slots = defineSlots<{\n default(): never;\n label(): never;\n}>();\n\n// Emit\ndefineEmits([\"update:modelValue\"]);\n\nconst uid = getNextId();\nconst id = computed(() => {\n return props.id || `radio-group-${uid}`;\n});\n\nconst formField = useFormField(props);\nprovide(EvRadioGroupSymbol, formField);\n</script>\n\n<template>\n <div\n :id=\"id\"\n :class=\"[\n 'ev-radio-group',\n props.class,\n {\n 'is-inline': props.inline,\n },\n ]\"\n :style=\"props.style\">\n <div v-if=\"props.label || props.hint || slots.label\" class=\"ev-radio-group--label\">\n <ev-label :title=\"props.label\" :hint=\"props.hint\">\n <slot name=\"label\" />\n </ev-label>\n </div>\n\n <div class=\"ev-radio-group--control\">\n <slot />\n </div>\n\n <div v-if=\"formField.isShowErrorMessages\" class=\"ev-radio-group-errors\">\n <ev-errors :messages=\"formField.errorMessages\" />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n/**\n * # `<ev-radio>`\n */\nimport \"./EvRadio.scss\";\nimport { computed, inject, ref, useAttrs } from \"vue\";\nimport { isDeepEqual, splitInputAttrs } from \"@/util\";\nimport EvLabel from \"@/components/EvLabel/EvLabel.vue\";\nimport { EvRadioGroupSymbol } from \"@/components/EvRadioGroup\";\nimport { makeEvRadioProps } from \"./EvRadio\";\nimport { useFormField } from \"@/composables/validation\";\n\n/**\n * We want to pass attributes not defined as 'props'\n * to the `<input>` field, so we need to turn off `inheritAttrs`.\n */\ndefineOptions({\n inheritAttrs: false,\n});\n\n// Props & slots\nconst props = defineProps({\n ...makeEvRadioProps(),\n});\nconst slots = defineSlots<{\n label(): never;\n}>();\nconst group = inject(EvRadioGroupSymbol, undefined);\n\n// Emit\ndefineEmits([\"update:focused\", \"update:modelValue\"]);\n\nconst attrs = useAttrs();\nconst containerRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst [containerAttrs, inputAttrs] = splitInputAttrs(attrs);\nconst formField = useFormField(props, group);\nconst valueComparator = isDeepEqual;\n\n// Computed\nconst isChecked = computed({\n get() {\n return valueComparator(formField.value, props.value);\n },\n set(value: boolean) {\n if (props.readonly) {\n return;\n }\n formField.value = value ? props.value : \"\";\n },\n});\n\n/**\n * # On Click\n *\n * Handle clearable radio buttons when the input is checked and is then clicked again.\n *\n * @param e\n */\nfunction onClick(e: Event): void {\n if (isChecked.value && props.clearable) {\n isChecked.value = false;\n }\n}\n\n/**\n * ## On Input\n *\n * Handle changes to the checked state.\n *\n * @param e\n */\nfunction onInput(e: Event): void {\n isChecked.value = (e.target as HTMLInputElement).checked;\n}\n\n/**\n * # On Space\n *\n * We need this event handler to handle clearable radio, because\n * the `click` event is not triggered when the input is checked.\n *\n * @param e\n */\nfunction onSpace(e: Event): void {\n if (isChecked.value && props.clearable) {\n isChecked.value = false;\n // Prevent default to avoid the click event being triggered.\n e.preventDefault();\n }\n}\n\n/**\n * ## Get Input Element\n */\nfunction getInputElement(): HTMLInputElement | null {\n return inputRef.value;\n}\n\n/**\n * ## Expose stuff\n */\ndefineExpose({\n field: formField,\n input: inputRef,\n focus: () => {\n getInputElement()?.focus();\n },\n});\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n :class=\"[\n 'ev-radio',\n {\n 'is-checked': isChecked,\n 'is-labelled': props.label || slots.label,\n },\n formField.classes,\n props.class,\n ]\"\n :style=\"props.style\"\n v-bind=\"containerAttrs\">\n <div class=\"ev-radio--control\">\n <div class=\"ev-radio--circles\">\n <div class=\"ev-radio--outer-circle\"></div>\n <div class=\"ev-radio--inner-circle\"></div>\n </div>\n <input\n :id=\"formField.id\"\n ref=\"inputRef\"\n type=\"radio\"\n :name=\"formField.name\"\n :disabled=\"formField.isDisabled || formField.isReadonly\"\n :value=\"props.value\"\n :checked=\"isChecked\"\n v-bind=\"inputAttrs\"\n @blur=\"formField.blur\"\n @click=\"onClick\"\n @focus=\"formField.focus\"\n @input=\"onInput\"\n @keyup.space=\"onSpace\" />\n </div>\n <div v-if=\"props.label || slots.label\" class=\"ev-radio--label\">\n <ev-label\n clickable\n :for=\"formField.id\"\n :title=\"props.label\"\n :hint=\"props.hint\">\n <slot name=\"label\" />\n </ev-label>\n </div>\n </div>\n</template>\n","import { getPropertyValue, propsFactory, wrapInArray } from \"@/util\";\nimport {\n computed,\n MaybeRef,\n PropType,\n ref,\n Ref,\n unref,\n watchEffect,\n} from \"vue\";\n\n/**\n * - match without highlight\n * - single match (index), length already known\n * - single match (start, end)\n * - multiple matches (start, end), probably shouldn't overlap\n */\nexport type FilterMatch =\n | boolean\n | number\n | [number, number]\n | [number, number][];\nexport type FilterFunction = (\n value: string,\n query: string,\n item?: InternalItem,\n) => FilterMatch;\nexport type FilterKeyFunctions = Record<string, FilterFunction>;\nexport type FilterKeys = string | string[];\nexport type FilterMode = \"some\" | \"every\" | \"union\" | \"intersection\";\n\n/**\n * # FilterProps\n */\nexport interface FilterProps {\n filterFunction?: FilterFunction;\n filterKeyFunctions?: FilterKeyFunctions;\n filterKeys?: FilterKeys;\n filterMode?: FilterMode;\n noFilter?: boolean;\n}\n\n/**\n * # InternalItem\n */\nexport interface InternalItem<T = any> {\n value: any;\n raw: T;\n}\n\n/**\n * # defaultFilter\n * @param value\n * @param query\n * @param item\n */\nexport const defaultFilter: FilterFunction = (value, query, item) => {\n if (value == null || query == null) {\n return -1;\n }\n return value\n .toString()\n .toLocaleLowerCase()\n .indexOf(query.toString().toLocaleLowerCase());\n};\n\n/**\n * # makeFilterProps\n */\nexport const makeFilterProps = propsFactory(\n {\n filterFunction: Function as PropType<FilterFunction>,\n filterKeyFunctions: Object as PropType<FilterKeyFunctions>,\n filterKeys: [Array, String] as PropType<FilterKeys>,\n filterMode: {\n type: String as PropType<FilterMode>,\n default: \"intersection\",\n },\n noFilter: Boolean,\n },\n \"filter\",\n);\n\n/**\n * # filterItems\n * @param items\n * @param query\n * @param options\n */\nexport function filterItems(\n items:\n | readonly (readonly [item: InternalItem, transformed: {}])[]\n | readonly InternalItem[],\n query: string,\n options?: {\n filterKeyFunctions?: FilterKeyFunctions;\n default?: FilterFunction;\n filterKeys?: FilterKeys;\n filterMode?: FilterMode;\n noFilter?: boolean;\n },\n) {\n const array: { index: number; matches: Record<string, FilterMatch> }[] = [];\n // always ensure we fall back to a functioning filter\n const filter = options?.default ?? defaultFilter;\n const keys = options?.filterKeys ? wrapInArray(options.filterKeys) : false;\n const customFiltersLength = Object.keys(\n options?.filterKeyFunctions ?? {},\n ).length;\n\n if (!items?.length) {\n return array;\n }\n\n loop: for (let i = 0; i < items.length; i++) {\n const [item, transformed = item] = wrapInArray(items[i]) as readonly [\n InternalItem,\n {},\n ];\n const customMatches: Record<string, FilterMatch> = {};\n const defaultMatches: Record<string, FilterMatch> = {};\n let match: FilterMatch = -1;\n\n if (query && !options?.noFilter) {\n if (typeof item === \"object\") {\n const filterKeys = keys || Object.keys(transformed);\n\n for (const key of filterKeys) {\n const value = getPropertyValue(\n transformed,\n key,\n transformed,\n );\n const keyFilter = options?.filterKeyFunctions?.[key];\n\n match = keyFilter\n ? keyFilter(value, query, item)\n : filter(value, query, item);\n\n if (match !== -1 && match !== false) {\n if (keyFilter) {\n customMatches[key] = match;\n } else {\n defaultMatches[key] = match;\n }\n } else if (options?.filterMode === \"every\") {\n continue loop;\n }\n }\n } else {\n match = filter(item, query, item);\n if (match !== -1 && match !== false) {\n defaultMatches.title = match;\n }\n }\n\n const defaultMatchesLength = Object.keys(defaultMatches).length;\n const customMatchesLength = Object.keys(customMatches).length;\n\n if (!defaultMatchesLength && !customMatchesLength) {\n continue;\n }\n\n if (\n options?.filterMode === \"union\" &&\n customMatchesLength !== customFiltersLength &&\n !defaultMatchesLength\n ) {\n continue;\n }\n\n if (\n options?.filterMode === \"intersection\" &&\n (customMatchesLength !== customFiltersLength ||\n !defaultMatchesLength)\n ) {\n continue;\n }\n }\n\n array.push({\n index: i,\n matches: { ...defaultMatches, ...customMatches },\n });\n }\n\n return array;\n}\n\n/**\n * # useFilter\n * @param props\n * @param items\n * @param query\n * @param options\n */\nexport function useFilter<T extends InternalItem>(\n props: FilterProps,\n items: MaybeRef<T[]>,\n query: Ref<string | undefined> | (() => string | undefined),\n options?: {\n transform?: (item: T) => {};\n filterKeyFunctions?: MaybeRef<FilterKeyFunctions | undefined>;\n },\n) {\n const filteredItems: Ref<T[]> = ref([]);\n const filteredMatches: Ref<Map<unknown, Record<string, FilterMatch>>> = ref(\n new Map(),\n );\n const transformedItems = computed(() =>\n options?.transform\n ? unref(items).map(\n (item) => [item, options.transform!(item)] as const,\n )\n : unref(items),\n );\n\n watchEffect(() => {\n const _query = typeof query === \"function\" ? query() : unref(query);\n const strQuery = typeof _query !== \"string\" ? \"\" : String(_query);\n\n const results = filterItems(transformedItems.value, strQuery, {\n filterKeyFunctions: {\n ...props.filterKeyFunctions,\n ...unref(options?.filterKeyFunctions),\n },\n default: props.filterFunction,\n filterKeys: props.filterKeys,\n filterMode: props.filterMode,\n noFilter: props.noFilter,\n });\n\n const originalItems = unref(items);\n const _filteredItems: (typeof filteredItems)[\"value\"] = [];\n const _filteredMatches: (typeof filteredMatches)[\"value\"] = new Map();\n results.forEach(({ index, matches }) => {\n const item = originalItems[index];\n _filteredItems.push(item);\n _filteredMatches.set(item.value, matches);\n });\n filteredItems.value = _filteredItems;\n filteredMatches.value = _filteredMatches;\n });\n\n function getMatches(item: T) {\n return filteredMatches.value.get(item.value);\n }\n\n return { filteredItems, filteredMatches, getMatches };\n}\n","import { omit, propsFactory } from \"@/util\";\nimport { makeListItemsProps } from \"@/composables/lists\";\nimport { makeEvTextfieldProps } from \"@/components/EvTextfield\";\nimport { ChevronDownIcon } from \"@/icons\";\nimport { PropType } from \"vue\";\nimport { makeFilterProps } from \"@/composables/filter\";\n\n/**\n * # Selectable Behavior\n * - 'select' simple selection (HTML select replacement)\n * - 'autocomplete' only permits selection of items\n * - 'combobox' allows selection or new values as strings\n */\nexport type SelectableBehavior = \"select\" | \"autocomplete\" | \"combobox\";\n\n/**\n * # Make EvSelect Props\n */\nexport const makeEvSelectProps = propsFactory(\n {\n autoSelectFirst: {\n type: [Boolean, String] as PropType<boolean | \"exact\">,\n },\n behavior: {\n type: String as PropType<SelectableBehavior>,\n default: \"select\",\n },\n delimiters: {\n type: Array as PropType<string[]>,\n default: [\",\"],\n },\n hideItemsEmpty: Boolean,\n hideSelected: Boolean,\n itemsEmptyText: {\n type: String,\n default: \"select.noItemsText\",\n },\n menuOpen: Boolean,\n multiple: Boolean,\n openOnClear: Boolean,\n search: String,\n tags: Boolean,\n\n ...makeFilterProps({ filterKeys: [\"title\"] }),\n\n ...makeListItemsProps({\n itemChildren: false,\n }),\n\n ...omit(\n makeEvTextfieldProps({\n modelValue: null,\n iconEnd: ChevronDownIcon,\n role: \"select\",\n }),\n [\"align\", \"monospace\", \"type\"],\n ),\n },\n \"EvSelect\",\n);\n","// Utilities\nimport { shallowRef, watch } from \"vue\";\n\n// Types\nimport type { Ref } from \"vue\";\nimport { EvList } from \"../EvList\";\nimport { EvTextfield } from \"../EvTextfield\";\n\n/**\n * # Use Scrolling\n *\n * @param listRef\n * @param textFieldRef\n */\nexport function useScrolling(\n listRef: Ref<typeof EvList | undefined>,\n textFieldRef: Ref<typeof EvTextfield | undefined>,\n) {\n const isScrolling = shallowRef(false);\n let scrollTimeout: number;\n\n function onListScroll(e: Event) {\n cancelAnimationFrame(scrollTimeout);\n isScrolling.value = true;\n scrollTimeout = requestAnimationFrame(() => {\n scrollTimeout = requestAnimationFrame(() => {\n isScrolling.value = false;\n });\n });\n }\n\n async function finishScrolling() {\n await new Promise((resolve) => requestAnimationFrame(resolve));\n await new Promise((resolve) => requestAnimationFrame(resolve));\n await new Promise((resolve) => requestAnimationFrame(resolve));\n await new Promise<void>((resolve) => {\n if (isScrolling.value) {\n const stop = watch(isScrolling, () => {\n stop();\n resolve();\n });\n } else {\n resolve();\n }\n });\n }\n\n async function onListKeydown(e: KeyboardEvent) {\n if (e.key === \"Tab\") {\n textFieldRef.value?.focus();\n return;\n }\n\n if (![\"PageDown\", \"PageUp\", \"Home\", \"End\"].includes(e.key)) {\n return;\n }\n const el: HTMLElement = listRef.value?.$el;\n if (!el) {\n return;\n }\n\n if (e.key === \"Home\" || e.key === \"End\") {\n el.scrollTo({\n top: e.key === \"Home\" ? 0 : el.scrollHeight,\n behavior: \"smooth\",\n });\n }\n\n await finishScrolling();\n\n const children = el.querySelectorAll(\n \":scope > :not(.ev-virtual-scroll--spacer)\",\n );\n\n if (e.key === \"PageDown\" || e.key === \"Home\") {\n const top = el.getBoundingClientRect().top;\n for (const child of children) {\n if (child.getBoundingClientRect().top >= top) {\n (child as HTMLElement).focus();\n break;\n }\n }\n } else {\n const bottom = el.getBoundingClientRect().bottom;\n for (const child of [...children].reverse()) {\n if (child.getBoundingClientRect().bottom <= bottom) {\n (child as HTMLElement).focus();\n break;\n }\n }\n }\n }\n\n return {\n onListScroll,\n onListKeydown,\n };\n}\n","<script setup lang=\"ts\">\nimport { makeEvVirtualScrollProps } from \"./EvVirtualScroll\";\nimport { getCurrentComponent, getScrollParent, toWebUnit } from \"@/util\";\nimport { useDimensions } from \"@/composables/dimensions\";\nimport { onMounted, onScopeDispose, Ref, toRef } from \"vue\";\nimport { useVirtual } from \"@/composables/virtual\";\nimport { useToggleScope } from \"@/composables/toggleScope\";\nimport EvVirtualScrollItem from \"./EvVirtualScrollItem.vue\";\n\nconst props = defineProps({\n ...makeEvVirtualScrollProps(),\n});\nconst component = getCurrentComponent(\"EvVirtualScroll\");\nconst dimensionStyles = useDimensions(props);\nconst {\n calculateVisibleItems,\n containerRef,\n markerRef,\n handleScroll,\n handleScrollend,\n handleItemResize,\n scrollToIndex,\n paddingTop,\n paddingBottom,\n computedItems,\n} = useVirtual(props, toRef(props, \"items\"));\n\nuseToggleScope(\n () => props.renderless,\n () => {\n function toggleEventListeners(add = false) {\n const method = add ? \"addEventListener\" : \"removeEventListener\";\n if (containerRef.value === document.documentElement) {\n document[method](\"scroll\", handleScroll, { passive: true });\n document[method](\"scrollend\", handleScrollend);\n } else {\n containerRef.value?.[method](\"scroll\", handleScroll, {\n passive: true,\n });\n containerRef.value?.[method](\"scrollend\", handleScrollend);\n }\n }\n onMounted(() => {\n containerRef.value = getScrollParent(\n component.vnode.el as HTMLElement,\n true,\n );\n toggleEventListeners(true);\n });\n onScopeDispose(toggleEventListeners);\n },\n);\n\ndefineExpose({\n calculateVisibleItems,\n scrollToIndex,\n});\n\ndefineSlots<{\n default(props: {\n item: any;\n index: number;\n itemRef: Ref<HTMLElement | undefined>;\n }): any;\n}>();\n</script>\n\n<template>\n <template v-if=\"props.renderless\">\n <div\n ref=\"markerRef\"\n class=\"ev-virtual-scroll--spacer\"\n :style=\"{ paddingTop: toWebUnit(paddingTop) }\"></div>\n <ev-virtual-scroll-item\n v-for=\"item in computedItems\"\n :key=\"item.index\"\n :renderless=\"props.renderless\"\n @update:height=\"(h) => handleItemResize(item.index, h)\">\n <template #default=\"{ itemRef }\">\n <slot v-bind=\"{ item: item.raw, index: item.index, itemRef }\" />\n </template>\n </ev-virtual-scroll-item>\n <div\n class=\"ev-virtual-scroll--spacer\"\n :style=\"{ paddingBottom: toWebUnit(paddingBottom) }\"></div>\n </template>\n\n <div\n v-else\n ref=\"containerRef\"\n :class=\"['ev-virtual-scroll', props.class]\"\n :style=\"[dimensionStyles, props.style]\"\n @scroll.passive=\"handleScroll\"\n @scrollend=\"handleScrollend\">\n <div\n ref=\"markerRef\"\n class=\"ev-virtual-scroll--container\"\n :style=\"[\n {\n paddingTop: toWebUnit(paddingTop),\n paddingBottom: toWebUnit(paddingBottom),\n },\n ]\">\n <ev-virtual-scroll-item\n v-for=\"item in computedItems\"\n :key=\"item.index\"\n :renderless=\"props.renderless\"\n @update:height=\"(h) => handleItemResize(item.index, h)\">\n <template #default=\"{ itemRef }\">\n <slot\n name=\"default\"\n v-bind=\"{\n item: item.raw,\n index: item.index,\n itemRef,\n }\" />\n </template>\n </ev-virtual-scroll-item>\n </div>\n </div>\n</template>\n","import { Appearance, EventProp, propsFactory } from \"@/util\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeGroupItemProps } from \"@/composables/groupItem\";\nimport { makeRoundedProps } from \"@/composables/rounded\";\nimport { IconProp } from \"@/composables/icons\";\nimport { CheckIcon } from \"@/icons\";\nimport { PropType } from \"vue\";\nimport { ButtonAppearanceProp, ButtonVariantProp } from \"@/components/EvButton\";\n\nexport type EvTagSlots = {\n default: {\n isSelected: boolean | undefined;\n selectedClass: boolean | (string | undefined)[] | undefined;\n select: ((value: boolean) => void) | undefined;\n toggle: (() => void) | undefined;\n value: unknown;\n disabled: boolean;\n };\n prefix: never;\n suffix: never;\n filter: never;\n};\n\nexport const makeEvTagProps = propsFactory(\n {\n activeClass: String,\n appearance: {\n type: String as PropType<ButtonAppearanceProp>,\n default: Appearance.default,\n },\n avatarEnd: String,\n avatarStart: String,\n closable: Boolean,\n draggable: Boolean,\n filter: Boolean,\n iconEnd: IconProp,\n iconFilter: {\n type: IconProp,\n default: CheckIcon,\n },\n iconStart: IconProp,\n link: {\n type: Boolean,\n default: undefined,\n },\n modelValue: {\n type: Boolean,\n default: true,\n },\n text: String,\n\n variant: {\n type: String as PropType<ButtonVariantProp>,\n default: \"default\",\n },\n\n onClick: EventProp<[MouseEvent]>(),\n onClickOnce: EventProp<[MouseEvent]>(),\n\n ...makeGroupItemProps(),\n ...makeComponentProps(),\n ...makeRoundedProps(),\n ...makeTagProps({ tag: \"span\" }),\n },\n \"EvTag\",\n);\n","import { isDeepEqual, propsFactory } from \"@/util\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { PropType } from \"vue\";\nimport { makeGroupProps } from \"@/composables/group\";\nimport { makeEvSlideGroupProps } from \"@/components/EvSlideGroup/EvSlideGroup\";\n\nexport const EvTagGroupSymbol = Symbol.for(\"ev:tag-group\");\n\nexport type EvTagGroupSlots = {\n default: {\n isSelected: (id: number) => boolean;\n select: (id: number, value: boolean) => void;\n next: () => void;\n prev: () => void;\n selected: readonly number[];\n };\n};\n\n/**\n * # makeEvTagGroupProps\n */\nexport const makeEvTagGroupProps = propsFactory(\n {\n column: Boolean,\n filter: Boolean,\n valueComparator: {\n type: Function as PropType<typeof isDeepEqual>,\n default: isDeepEqual,\n },\n\n ...makeEvSlideGroupProps(),\n ...makeComponentProps(),\n ...makeGroupProps({\n selectedClass: \"is-selected\",\n selectedAppearance: \"primary\",\n selectedVariant: \"outlined\",\n }),\n ...makeTagProps(),\n },\n \"EvTagGroup\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvTagGroup.scss\";\nimport {\n EvTagGroupSlots,\n EvTagGroupSymbol,\n makeEvTagGroupProps,\n} from \"./EvTagGroup.ts\";\nimport { GroupProps, useGroup } from \"@/composables/group\";\nimport { computed, toRef } from \"vue\";\nimport { provideDefaults } from \"@/composables/defaults\";\nimport { filterComponentProps } from \"@/util\";\nimport { EvSlideGroup } from \"@/components/EvSlideGroup\";\n\nconst props = defineProps({\n ...makeEvTagGroupProps(),\n});\n\nconst { isSelected, select, next, previous, selected } = useGroup(\n props as any as GroupProps,\n EvTagGroupSymbol,\n);\n\ndefineSlots<EvTagGroupSlots>();\n\nconst slotProps = computed(() => {\n return {\n isSelected,\n select,\n next,\n previous,\n selected: selected.value,\n };\n});\n\nprovideDefaults({\n EvTag: {\n disabled: toRef(props, \"disabled\"),\n filter: toRef(props, \"filter\"),\n },\n});\n\nconst slideGroupProps = computed(() =>\n filterComponentProps(EvSlideGroup, props),\n);\n</script>\n\n<template>\n <ev-slide-group\n v-bind=\"slideGroupProps\"\n :class=\"[\n 'ev-tag-group',\n {\n 'is-column': props.column,\n },\n props.class,\n ]\"\n :style=\"props.style\">\n <slot v-bind=\"slotProps\" />\n </ev-slide-group>\n</template>\n","<script setup lang=\"ts\">\nimport \"./EvTag.scss\";\nimport { EvTagSlots, makeEvTagProps } from \"./EvTag\";\nimport { EvIcon } from \"@/components/EvIcon\";\nimport { EvDefaultsProvider } from \"@/components/EvDefaultsProvider\";\nimport { CancelIcon } from \"@/icons\";\nimport { useLocaleFunctions } from \"@/composables/locale\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { computed, useAttrs } from \"vue\";\nimport { KeyboardEvent } from \"react\";\nimport {\n RouterLinkOrHrefProps,\n useRouterLinkOrHref,\n} from \"@/composables/router.ts\";\nimport { GroupItemProps, useGroupItem } from \"@/composables/groupItem\";\nimport { EvAvatar } from \"@/components/EvAvatar\";\nimport { EvTagGroupSymbol } from \"@/components/EvTagGroup\";\nimport { EvTransitionExpandX } from \"@/components/EvTransition/transitions\";\nimport { useDefaults } from \"@/composables\";\nimport { AppearanceProps, useAppearance } from \"@/util\";\n\nconst definedProps = defineProps({\n ...makeEvTagProps(),\n});\nconst props = useDefaults(definedProps);\nconst slots = defineSlots<EvTagSlots>();\nconst attrs = useAttrs();\nconst link = useRouterLinkOrHref(props as RouterLinkOrHrefProps, attrs);\nconst { t } = useLocaleFunctions();\nconst emit = defineEmits([\n \"click\",\n \"click:close\",\n \"group:selected\",\n \"update:modelValue\",\n]);\nconst isActive = useModelProxy(props, \"modelValue\");\nconst group = useGroupItem(\n props as any as GroupItemProps,\n EvTagGroupSymbol,\n false,\n);\nconst isLink = computed(() => {\n return props.link !== false && link.isLink.value;\n});\nconst isClickable = computed(() => {\n return (\n !props.disabled &&\n props.link !== false &&\n (!!group || props.link || link.isClickable.value)\n );\n});\n\nconst closeLabel = computed(() => {\n return t(\"close\");\n});\n\nconst tag = computed(() => {\n return link.isLink.value ? \"a\" : props.tag;\n});\n\n/**\n * ## onClick\n * @param e\n */\nfunction onClick(e: MouseEvent) {\n emit(\"click\", e);\n if (!isClickable.value) {\n return;\n }\n link.navigate?.(e);\n group?.toggle();\n}\n\n/**\n * ## onClickClose\n * @param e\n */\nfunction onClickClose(e: MouseEvent) {\n e.stopPropagation();\n isActive.value = false;\n emit(\"click:close\", e);\n}\n\n/**\n * ## onKeyDown\n * @param e\n */\nfunction onKeyDown(e: KeyboardEvent) {\n if (isLink.value || !isClickable.value) {\n return;\n }\n e.preventDefault();\n onClick(e as any as MouseEvent);\n}\n\nconst hasFilter = computed(() => {\n return (slots.filter || props.filter) && group;\n});\n\nconst defaultSlotProps = computed(() => {\n return {\n isSelected: group?.isSelected.value,\n selectedClass: group?.selectedClass.value,\n selectedAppearance: group?.selectedAppearance.value,\n selectedVariant: group?.selectedVariant.value,\n select: group?.select,\n toggle: group?.toggle,\n value: group?.value.value,\n disabled: props.disabled,\n };\n});\n\nconst hasPrefixMedia = computed(() => !!(props.avatarStart || props.iconStart));\nconst hasSuffixMedia = computed(() => !!(props.avatarEnd || props.iconEnd));\nconst hasPrefix = computed(() => !!(hasPrefixMedia.value || slots.prefix));\nconst hasSuffix = computed(() => !!(hasSuffixMedia.value || slots.suffix));\n\nconst { appearanceClass, variantClass } = useAppearance(\n props as AppearanceProps,\n group,\n isActive,\n);\n</script>\n\n<template>\n <component\n :is=\"tag\"\n v-if=\"isActive\"\n :class=\"[\n 'ev-tag',\n {\n 'is-active': group?.isSelected.value,\n 'is-clickable': isClickable,\n 'is-disabled': props.disabled,\n 'is-filter': hasFilter,\n 'is-rounded': props.rounded,\n },\n group?.selectedClass.value,\n appearanceClass,\n variantClass,\n props.class,\n ]\"\n :style=\"[props.style]\"\n :disabled=\"props.disabled || undefined\"\n :draggable=\"props.draggable\"\n :href=\"link.href.value\"\n :tabindex=\"isClickable ? 0 : undefined\"\n @click=\"onClick\"\n @keydown.enter=\"onKeyDown\"\n @keydown.space=\"onKeyDown\">\n <template v-if=\"hasFilter\">\n <ev-transition-expand-x key=\"filter\">\n <div\n v-show=\"group?.isSelected.value\"\n key=\"filter\"\n class=\"ev-tag--filter\">\n <template v-if=\"!slots.filter\">\n <ev-icon key=\"filter-icon\" :glyph=\"props.iconFilter\" />\n </template>\n <template v-else>\n <ev-defaults-provider\n key=\"filter-defaults\"\n :disabled=\"!props.iconFilter\"\n :defaults=\"{ EvIcon: { glyph: props.iconFilter } }\">\n <slot name=\"filter\" />\n </ev-defaults-provider>\n </template>\n </div>\n </ev-transition-expand-x>\n </template>\n\n <div v-if=\"hasPrefix\" key=\"prefix\" class=\"ev-tag--prefix\">\n <template v-if=\"!slots.prefix\">\n <ev-icon\n v-if=\"props.iconStart\"\n key=\"prefix-icon\"\n :glyph=\"props.iconStart\" />\n <ev-avatar\n v-if=\"props.avatarStart\"\n key=\"prefix-avatar\"\n :image=\"props.avatarStart\" />\n </template>\n <template v-else>\n <ev-defaults-provider\n key=\"prefix-defaults\"\n :disabled=\"!hasPrefixMedia\"\n :defaults=\"{\n EvAvatar: { image: props.avatarStart },\n EvIcon: { glyph: props.iconStart },\n }\">\n <slot name=\"prefix\" />\n </ev-defaults-provider>\n </template>\n </div>\n\n <div class=\"ev-tag--content\" data-no-activator=\"\">\n <slot name=\"default\" v-bind=\"defaultSlotProps\">{{\n props.text\n }}</slot>\n </div>\n\n <div v-if=\"hasSuffix\" key=\"suffix\" class=\"ev-tag--suffix\">\n <template v-if=\"!slots.suffix\">\n <ev-icon\n v-if=\"props.iconEnd\"\n key=\"prefix-icon\"\n :glyph=\"props.iconEnd\" />\n <ev-avatar\n v-if=\"props.avatarEnd\"\n key=\"suffix-avatar\"\n :image=\"props.avatarEnd\" />\n </template>\n <template v-else>\n <ev-defaults-provider\n key=\"suffix-defaults\"\n :disabled=\"!hasSuffixMedia\"\n :defaults=\"{\n EvAvatar: { image: props.avatarEnd },\n EvIcon: { glyph: props.iconEnd },\n }\">\n <slot name=\"suffix\" />\n </ev-defaults-provider>\n </template>\n </div>\n\n <button\n v-if=\"props.closable\"\n key=\"close\"\n class=\"ev-tag--close\"\n :aria-label=\"closeLabel\"\n @click=\"onClickClose\">\n <ev-icon :glyph=\"CancelIcon\" size=\"small\" />\n </button>\n </component>\n</template>\n","<script setup lang=\"ts\">\n/**\n * # EvSelect\n *\n */\nimport \"./EvSelect.scss\";\nimport { makeEvSelectProps } from \"./EvSelect\";\nimport { useScrolling } from \"./useScrolling\";\nimport { EvTextfield } from \"@/components/EvTextfield\";\nimport { EvMenu } from \"@/components/EvMenu\";\nimport { EvList, ListItem } from \"@/components/EvList\";\nimport { EvListItem } from \"@/components/EvListItem\";\nimport { EvVirtualScroll } from \"@/components/EvVirtualScroll\";\nimport { EvSurface } from \"@/components/EvSurface\";\nimport { EvTag } from \"@/components/EvTag\";\nimport { transformItem, useItems } from \"@/composables/lists\";\nimport { useModelProxy } from \"@/composables/modelProxy\";\nimport { useLocaleFunctions } from \"@/composables/locale\";\nimport { useForm } from \"@/composables/form\";\nimport {\n computed,\n mergeProps,\n nextTick,\n Ref,\n ref,\n shallowRef,\n useSlots,\n watch,\n} from \"vue\";\nimport {\n Browser,\n filterComponentProps,\n isComposingIgnoreKey,\n KeyLogger,\n matchesSelector,\n wrapInArray,\n} from \"@/util\";\nimport { FocusEvent, MouseEvent } from \"react\";\nimport { useFilter } from \"@/composables/filter\";\n\n// Props\nconst props = defineProps({\n ...makeEvSelectProps(),\n});\n\ndefineSlots<{\n label(): any;\n \"list-prefix\"(): any;\n \"list-suffix\"(): any;\n item(props: { item: any; index: number; props: any }): any;\n \"items-empty\"(): any;\n \"items-prefix\"(): any;\n \"items-suffix\"(): any;\n placeholder(): any;\n prefix(): any;\n selection(item: any, index: number): any;\n suffix(): any;\n}>();\n\nconst emit = defineEmits([\n \"update:focused\",\n \"update:menuOpen\",\n \"update:modelValue\",\n \"update:search\",\n]);\n\nconst slots = useSlots();\n\n// TextField\nconst evTextfieldRef = ref();\nconst evTextfieldProps = computed(() => {\n return filterComponentProps(EvTextfield, props);\n});\nconst isFocused = shallowRef(false);\nconst isPristine = shallowRef(true);\nconst isSearchable = computed(() => props.behavior !== \"select\");\nconst listHasFocus = shallowRef(false);\nconst isSelecting = shallowRef(false);\n\n// Menu\nconst evMenuRef = ref<typeof EvMenu>();\nconst menuOpenProxy = useModelProxy(props, \"menuOpen\");\nconst isMenuOpen = computed({\n get: () => menuOpenProxy.value,\n set: (value) => {\n if (menuOpenProxy.value && !value && evMenuRef.value?.openChildren) {\n return;\n }\n menuOpenProxy.value = value;\n },\n});\nconst isMenuDisabled = computed(() => {\n return (props.hideItemsEmpty && !items.value.length) || !!props.readonly;\n});\n\n// List\nconst evListRef = ref<typeof EvList>();\nconst evVirtualScrollRef = ref<typeof EvVirtualScroll>();\nconst { items, transformIn, transformOut } = useItems(props);\nconst search = useModelProxy(props, \"search\", \"\");\n// @todo: implement getMatches\nconst { filteredItems } = useFilter(props, items, () =>\n isPristine.value || !isSearchable.value ? \"\" : search.value,\n);\nconst displayItems = computed(() => {\n if (props.hideSelected) {\n return filteredItems.value.filter(\n (filteredItem) =>\n !model.value.some(\n (s: ListItem) => s.value === filteredItem.value,\n ),\n );\n }\n return filteredItems.value;\n});\n\nconst model = useModelProxy(\n props,\n \"modelValue\",\n [],\n (value) => transformIn(value === null ? [null] : wrapInArray(value)),\n (value) => {\n const transformed = transformOut(value);\n return props.multiple ? transformed : transformed[0] ?? null;\n },\n);\nconst selections = computed(() => {\n return model.value.map((value: any) => {\n return (\n items.value.find((item) => {\n return props.valueComparator(item.value, value.value);\n }) || value\n );\n });\n});\nconst selectionIndex = shallowRef(-1);\nconst selected = computed(() => {\n return selections.value.map((selection: any) => selection.props.value);\n});\nconst keyLogger = new KeyLogger();\n\nconst highlightFirst = computed(() => {\n const selectFirst =\n props.autoSelectFirst === true ||\n (props.autoSelectFirst === \"exact\" &&\n search.value === displayItems.value[0]?.title);\n return (\n selectFirst &&\n displayItems.value.length > 0 &&\n !isPristine.value &&\n !listHasFocus.value\n );\n});\n\nconst form = useForm();\nconst { t } = useLocaleFunctions();\n\n/**\n * ## On Menu After Leave\n * Maintain focus on the EvSelect when leaving the menu - usually when tabbing out.\n */\nfunction onMenuAfterLeave() {\n if (isFocused.value) {\n isPristine.value = true;\n evTextfieldRef.value?.focus();\n }\n}\n\n/**\n * ## On List Focus In\n * Maintain focus on the select when a menu item is selected.\n * @param e\n */\nfunction onListFocusIn(e: FocusEvent) {\n setTimeout(() => {\n isFocused.value = true;\n listHasFocus.value = true;\n });\n}\n\n/**\n * ## onListFocusOut\n *\n * @param e\n */\nfunction onListFocusOut(e: FocusEvent) {\n listHasFocus.value = false;\n}\n\n/**\n * ## One List Mousedown\n * @param e\n */\nfunction onListMouseDown(e: MouseEvent) {\n e.preventDefault();\n}\n\nconst { onListScroll, onListKeydown } = useScrolling(evListRef, evTextfieldRef);\n\n/**\n * ## On Field Blur\n * @param e\n */\nfunction onFieldBlur(e: FocusEvent) {\n if (!evListRef.value?.$el.contains(e.relatedTarget as HTMLElement)) {\n isMenuOpen.value = false;\n }\n selectionIndex.value = -1;\n}\n\n/**\n * ## onFieldChange\n * If the field changed due to an autofill utility attempt to select an item.\n * @param e\n */\nfunction onFieldChange(e: Event) {\n if (\n matchesSelector(evTextfieldRef.value, \":autofill\") ||\n matchesSelector(evTextfieldRef.value, \":-webkit-autofill\")\n ) {\n const item = items.value.find(\n (item) => item.title === (e.target as HTMLInputElement).value,\n );\n if (item) {\n select(item);\n }\n }\n}\n\n/**\n * ## On Field Clear\n * When the user clicks on the `clearable` icon.\n * @param e\n */\nfunction onFieldClear(e: MouseEvent) {\n if (props.openOnClear) {\n isMenuOpen.value = true;\n }\n search.value = \"\";\n}\n\n/**\n * ## On Field Input\n * @param e\n */\nfunction onFieldInput(e: InputEvent) {\n search.value = (e.target as HTMLInputElement).value;\n}\n\n/**\n * ## On Field Keydown\n * @param e\n */\nfunction onFieldKeydown(e: KeyboardEvent) {\n if (\n !e.key ||\n isComposingIgnoreKey(e) ||\n props.readonly ||\n form?.isReadonly.value\n ) {\n return;\n }\n\n const preventKeys = [\"Enter\", \"ArrowDown\", \"ArrowUp\"];\n const openerKeys = [\"Enter\", \"ArrowDown\"];\n const escapeKeys = [\"Escape\"];\n if (!isSearchable.value) {\n preventKeys.push(\" \", \"Home\", \"End\");\n openerKeys.push(\" \");\n escapeKeys.push(\"Tab\");\n }\n\n if (selectionIndex.value > -1 || preventKeys.includes(e.key)) {\n e.preventDefault();\n }\n\n if (openerKeys.includes(e.key)) {\n isMenuOpen.value = true;\n }\n\n if (escapeKeys.includes(e.key)) {\n isMenuOpen.value = false;\n }\n\n if (!isSearchable.value) {\n // Use `keyLogger`\n keydownBehaviorSelect(e);\n return;\n }\n\n if ([\"Enter\", \"Tab\"].includes(e.key)) {\n if (highlightFirst.value) {\n select(displayItems.value[0]);\n } else if (!props.multiple && props.behavior === \"combobox\") {\n select(transformItem(props as any, search.value));\n }\n }\n\n if (e.key === \"ArrowDown\" && highlightFirst.value) {\n evListRef.value?.focus(\"next\");\n }\n\n if (!props.multiple) {\n return;\n }\n\n const selectionStart = evTextfieldRef.value.selectionStart;\n const length = model.value.length;\n\n // Backspacing\n if ([\"Backspace\", \"Delete\"].includes(e.key)) {\n if (selectionIndex.value < 0) {\n if (e.key === \"Backspace\" && !search.value) {\n selectionIndex.value = length - 1;\n }\n return;\n }\n const originalSelectionIndex = selectionIndex.value;\n const selectedItem = model.value[selectionIndex.value];\n if (selectedItem && !selectedItem.props.disabled) {\n select(selectedItem, false);\n }\n selectionIndex.value =\n originalSelectionIndex >= length - 1\n ? length - 2\n : originalSelectionIndex;\n }\n\n // Left\n if (e.key === \"ArrowLeft\") {\n if (selectionIndex.value < 0 && selectionStart > 0) {\n return;\n }\n const previous =\n selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;\n if (model.value[previous]) {\n selectionIndex.value = previous;\n } else {\n selectionIndex.value = -1;\n evTextfieldRef.value?.input.setSelectionRange(\n search.value?.length,\n search.value?.length,\n );\n }\n }\n\n // Right\n if (e.key === \"ArrowRight\") {\n if (selectionIndex.value < 0) {\n return;\n }\n const next = selectionIndex.value + 1;\n if (model.value[next]) {\n selectionIndex.value = next;\n } else {\n selectionIndex.value = -1;\n evTextfieldRef.value?.input.setSelectionRange(0, 0);\n }\n }\n\n if (props.behavior !== \"combobox\") {\n return;\n }\n\n // Enter or delimiters\n if (\n (props.delimiters.includes(e.key) || e.key === \"Enter\") &&\n search.value\n ) {\n e.preventDefault();\n select(transformItem(props as any, search.value));\n search.value = \"\";\n }\n}\n\n/**\n * ## keydownBehaviorSelect\n * Handles keydown events for the select control when the input field\n * cannot be entered. Instead, we use `keyLogger` to track key events\n * and then select the first available item in the list.\n * @param e\n */\nfunction keydownBehaviorSelect(e: KeyboardEvent) {\n if (e.key === \"Home\") {\n evListRef.value?.focus(\"first\");\n } else if (e.key === \"End\") {\n evListRef.value?.focus(\"last\");\n }\n\n if (props.multiple || !keyLogger.log(e)) {\n return;\n }\n\n const itemIndex = items.value.findIndex((item) =>\n item.title.toLowerCase().startsWith(keyLogger.value),\n );\n if (itemIndex >= 0) {\n model.value = [items.value[itemIndex]];\n if (isMenuOpen.value) {\n const scrollIndex = itemIndex > 0 ? itemIndex - 1 : 0;\n evVirtualScrollRef.value?.scrollToIndex(scrollIndex);\n }\n }\n}\n\n/**\n * On Field Mousedown\n */\nfunction onFieldMousedown() {\n if (isMenuDisabled.value) {\n return;\n }\n isMenuOpen.value = !isMenuOpen.value;\n}\n\n/**\n * ## Select\n * @param item\n * @param set `null` means toggle\n */\nfunction select(item: ListItem, set: boolean | null = true) {\n if (item.props.disabled) {\n return;\n }\n\n if (props.multiple) {\n const index = model.value.findIndex((selection: any) => {\n return props.valueComparator(selection.value, item.value);\n });\n const add = set == null ? !~index : set;\n\n if (~index) {\n const value = add ? [...model.value, item] : [...model.value];\n value.splice(index, 1);\n model.value = value;\n } else if (add) {\n model.value = [...model.value, item];\n }\n search.value = \"\";\n } else {\n const add = set !== false;\n model.value = add ? [item] : [];\n search.value = item.title;\n\n nextTick(() => {\n isMenuOpen.value = false;\n isPristine.value = true;\n isSelecting.value = false;\n evTextfieldRef.value.input.blur();\n isFocused.value = false;\n });\n }\n\n selectionIndex.value = -1;\n}\n\n/**\n *\n */\nconst fieldValue = computed(() => {\n if (isSearchable.value) {\n return search.value;\n }\n return model.value.map((value: any) => value.props.value).join(\", \");\n});\n\n/**\n * ## onModelValueUpdate\n * When the model value is updated from the textfield.\n * @param value\n */\nfunction onModelValueUpdate(value: any) {\n if (value === null || (value === \"\" && !props.multiple)) {\n model.value = [];\n }\n}\n\n/**\n * @param item\n * @param index\n * @param itemRef\n */\nfunction itemProps(\n item: ListItem,\n index: number,\n itemRef: Ref<HTMLElement | undefined>,\n) {\n return mergeProps(item.props, {\n ref: itemRef,\n key: index,\n onClick: () => select(item),\n });\n}\n\n/**\n * ## createTagProps\n * @param item\n */\nfunction createTagProps(item: ListItem) {\n return {\n \"onClick:close\"(e: Event) {\n e.stopPropagation();\n e.preventDefault();\n select(item, false);\n },\n onKeydown(e: KeyboardEvent) {\n if (e.key !== \"Enter\" && e.key !== \" \") {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n select(item, false);\n },\n onMousedown(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n },\n };\n}\n\n/**\n * Watch Search\n */\nwatch(search, (value, oldValue) => {\n if (!isFocused.value || isSelecting.value) {\n return;\n }\n if (value) {\n isMenuOpen.value = true;\n }\n isPristine.value = !value;\n});\n\n/**\n * Watch Focused\n */\nwatch(isFocused, (value, oldValue) => {\n if (value === oldValue) {\n return;\n }\n emit(\"update:focused\", value);\n});\n\n/**\n * Scroll to the last selected item when the menu opens.\n */\nwatch(isMenuOpen, () => {\n if (\n props.hideSelected ||\n !isMenuOpen.value ||\n !model.value.length ||\n !Browser.hasWindow\n ) {\n return;\n }\n const lastSelectedItem = model.value[model.value.length - 1];\n const index = displayItems.value.findIndex(\n (item) => item.value === lastSelectedItem.value,\n );\n window.requestAnimationFrame(() => {\n index >= 0 && evVirtualScrollRef.value?.scrollToIndex(index);\n });\n});\n\nconst validationValue = computed(() => model.externalValue);\nconst isPlaceholder = computed(\n () => !selections.value.length && !!slots.placeholder,\n);\n</script>\n\n<template>\n <ev-textfield\n ref=\"evTextfieldRef\"\n v-bind=\"evTextfieldProps\"\n v-model:focused=\"isFocused\"\n :class=\"[\n 'ev-select',\n {\n 'is-single': !props.multiple,\n 'is-multiple': props.multiple,\n 'is-searchable': isSearchable,\n 'is-selecting': selectionIndex > -1,\n 'is-placeholder': isPlaceholder,\n },\n ]\"\n :model-value=\"fieldValue\"\n :readonly=\"!isSearchable || props.readonly\"\n :placeholder=\"model.length ? undefined : props.placeholder\"\n :validation-value=\"validationValue\"\n @blur=\"onFieldBlur\"\n @change=\"onFieldChange\"\n @click:clear=\"onFieldClear\"\n @input=\"onFieldInput\"\n @keydown=\"onFieldKeydown\"\n @mousedown:control=\"onFieldMousedown\"\n @update:model-value=\"onModelValueUpdate\">\n <template v-if=\"props.label || slots.label\" #label>\n <slot name=\"label\">{{ props.label }}</slot>\n </template>\n <template v-if=\"slots.prefix\" #prefix>\n <slot name=\"prefix\" />\n </template>\n <template #default>\n <div\n v-for=\"(item, index) in selections\"\n :key=\"item.key\"\n :class=\"[\n 'ev-select--selected',\n {\n 'is-selected': index === selectionIndex,\n },\n ]\">\n <slot name=\"selection\" v-bind=\"{ item, index }\">\n <ev-tag\n v-if=\"props.tags\"\n :closable=\"props.multiple\"\n v-bind=\"createTagProps(item)\"\n :text=\"item.title\" />\n <span v-else class=\"ev-select--selected-text\">\n {{ item.title }}\n <span\n v-if=\"props.multiple && index < selections.length - 1\"\n class=\"ev-select--selected-comma\">,</span>\n </span>\n </slot>\n </div>\n\n <div v-if=\"isPlaceholder\" class=\"ev-select--placeholder\">\n <slot name=\"placeholder\" />\n </div>\n\n <ev-menu\n ref=\"evMenuRef\"\n v-model=\"isMenuOpen\"\n class=\"ev-select--menu\"\n max-height=\"310\"\n :disabled=\"isMenuDisabled\"\n activator=\"parent\"\n :close-on-content-click=\"false\"\n :open-on-click=\"false\"\n @after-leave=\"onMenuAfterLeave\">\n <ev-surface elevation=\"overlay\" scrollable>\n <div\n v-if=\"slots['list-prefix']\"\n class=\"ev-select--list-prefix\">\n <slot name=\"list-prefix\" />\n </div>\n\n <ev-list\n ref=\"evListRef\"\n class=\"ev-select--list\"\n :selected=\"selected\"\n :select-strategy=\"\n props.multiple ? 'multi-any' : 'single-any'\n \"\n tabindex=\"-1\"\n @focusin=\"onListFocusIn\"\n @focusout=\"onListFocusOut\"\n @keydown=\"onListKeydown\"\n @mousedown=\"onListMouseDown\"\n @scroll.passive=\"onListScroll\">\n <slot name=\"items-prefix\" />\n\n <slot\n v-if=\"!displayItems.length && !props.hideItemsEmpty\"\n name=\"items-empty\">\n <ev-list-item :title=\"t(props.itemsEmptyText)\" />\n </slot>\n\n <ev-virtual-scroll\n ref=\"evVirtualScrollRef\"\n renderless\n :items=\"displayItems\">\n <template #default=\"{ item, index, itemRef }\">\n <slot\n name=\"item\"\n v-bind=\"{\n item,\n index,\n props: itemProps(item, index, itemRef),\n }\">\n <ev-list-item\n :ref=\"itemRef\"\n v-bind=\"item.props\"\n :key=\"index\"\n @click=\"\n select(item as ListItem, null)\n \" />\n </slot>\n </template>\n </ev-virtual-scroll>\n\n <slot name=\"items-suffix\" />\n </ev-list>\n\n <div\n v-if=\"slots['list-suffix']\"\n class=\"ev-select--list-suffix\">\n <slot name=\"list-suffix\" />\n </div>\n </ev-surface>\n </ev-menu>\n </template>\n\n <template v-if=\"slots.suffix\" #suffix>\n <slot name=\"suffix\" />\n </template>\n </ev-textfield>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { makeEvCheckboxProps } from \"@/components/EvCheckbox\";\n\nexport const makeEvSwitchProps = propsFactory(\n {\n ...makeEvCheckboxProps(),\n },\n \"EvSwitch\",\n);\n","<script setup lang=\"ts\">\n/**\n * # `<ev-switch>`\n */\nimport \"./EvSwitch.scss\";\nimport { ref, useAttrs } from \"vue\";\nimport { splitInputAttrs } from \"@/util\";\nimport { EvErrors } from \"@/components/EvErrors\";\nimport { EvLabel } from \"@/components/EvLabel\";\nimport { useToggleControl } from \"@/components/EvCheckbox\";\nimport { makeEvSwitchProps } from \"./EvSwitch\";\nimport { useFormField } from \"@/composables/validation\";\n\n/**\n * We want to pass attributes not defined as 'props'\n * to the `<input>` field, so we need to turn off `inheritAttrs`.\n */\ndefineOptions({\n inheritAttrs: false,\n});\n\n// Props & slots\nconst props = defineProps({\n ...makeEvSwitchProps(),\n});\nconst slots = defineSlots<{\n label(): never;\n}>();\n\n// Emit\ndefineEmits([\"update:focused\", \"update:modelValue\"]);\n\nconst attrs = useAttrs();\nconst containerRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst [containerAttrs, inputAttrs] = splitInputAttrs(attrs);\nconst formField = useFormField(props);\nconst { trueValue, isChecked } = useToggleControl(formField.model, props);\n\n/**\n * ## Get Input Element\n */\nfunction getInputElement(): HTMLInputElement | null {\n return inputRef.value;\n}\n\n/**\n * ## On Input\n * @param e\n */\nfunction onInput(e: Event) {\n isChecked.value = (e.target as HTMLInputElement).checked;\n}\n\n/**\n * ## Expose stuff\n */\ndefineExpose({\n field: formField,\n input: inputRef,\n focus: () => {\n getInputElement()?.focus();\n },\n});\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n class=\"ev-switch\"\n :class=\"[\n {\n 'is-checked': isChecked,\n 'is-labelled': props.label || slots.label,\n },\n formField.classes,\n props.class,\n ]\"\n :style=\"props.style\"\n v-bind=\"containerAttrs\">\n <div class=\"ev-switch--control\">\n <div class=\"ev-switch--track\"></div>\n <div class=\"ev-switch--thumb\"></div>\n <input\n :id=\"formField.id\"\n ref=\"inputRef\"\n type=\"checkbox\"\n role=\"switch\"\n :name=\"formField.name\"\n :disabled=\"formField.isDisabled\"\n :readonly=\"formField.isReadonly\"\n :checked=\"isChecked\"\n :value=\"trueValue\"\n :aria-disabled=\"formField.isDisabled\"\n :aria-checked=\"isChecked\"\n v-bind=\"inputAttrs\"\n @input=\"onInput\"\n @focus=\"formField.focus\"\n @blur=\"formField.blur\" />\n </div>\n\n <div\n v-if=\"props.label || props.hint || slots.label\"\n class=\"ev-switch--label\">\n <ev-label\n clickable\n :for=\"formField.id\"\n :title=\"props.label\"\n :hint=\"props.hint\">\n <slot name=\"label\" />\n </ev-label>\n\n <div v-if=\"formField.isShowErrorMessages\" class=\"ev-switch--errors\">\n <ev-errors :messages=\"formField.errorMessages\" />\n </div>\n </div>\n </div>\n</template>\n","import { makeInputAppearanceProps, propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeFormFieldProps } from \"@/composables/validation\";\nimport { makeLabelProps } from \"@/components/EvLabel\";\n\nexport const makeEvTextareaProps = propsFactory(\n {\n autofocus: Boolean,\n autoselect: Boolean,\n autogrow: {\n type: Boolean,\n default: true,\n },\n autosubmit: Function,\n clearable: Boolean,\n loading: Boolean,\n placeholder: String,\n\n ...makeLabelProps(),\n ...makeFormFieldProps(),\n ...makeInputAppearanceProps(),\n ...makeComponentProps(),\n },\n \"EvTextarea\",\n);\n","<script setup lang=\"ts\">\n/**\n * # `<ev-textarea>`\n */\nimport \"./EvTextarea.scss\";\nimport { makeEvTextareaProps } from \"./EvTextarea\";\nimport { computed, nextTick, ref, useAttrs, onUpdated, onMounted } from \"vue\";\nimport {\n Appearance,\n appearanceModifier,\n InputAppearance,\n splitInputAttrs,\n} from \"@/util\";\nimport { useAutofocus } from \"@/composables/focus\";\nimport { CancelIcon } from \"@/icons\";\nimport { EvProgress } from \"@/components/EvProgress\";\nimport { EvIcon } from \"@/components/EvIcon\";\nimport { EvErrors } from \"@/components/EvErrors\";\nimport { EvLabel } from \"@/components/EvLabel\";\nimport { useFormField } from \"@/composables/validation\";\n\n/**\n * We want to pass attributes not defined as 'props'\n * to the `<input>` field, so we need to turn off `inheritAttrs`.\n */\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = defineProps({\n ...makeEvTextareaProps(),\n});\nconst slots = defineSlots<{\n label(): never;\n}>();\n\n// Emit\nconst emit = defineEmits([\n \"click:clear\",\n \"click:control\",\n \"mousedown:control\",\n \"update:focused\",\n \"update:modelValue\",\n]);\n\nconst attrs = useAttrs();\nconst containerRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst [containerAttrs, inputAttrs] = splitInputAttrs(attrs);\nconst formField = useFormField(props);\nconst isClearable = computed(() => {\n return props.clearable && !!formField.value;\n});\n\n/**\n * ## Get Input Element\n */\nfunction getInputElement(): HTMLInputElement | null {\n return inputRef.value;\n}\n\n/**\n * ## On Clearable Click\n * @param $event\n */\nfunction onClearableClick($event: MouseEvent) {\n $event.stopPropagation();\n nextTick(() => {\n formField.value = null;\n emit(\"click:clear\", $event);\n });\n getInputElement()?.focus();\n}\n\n/**\n * ## On Clearable Mousedown\n * @param e\n */\nfunction onClearableMousedown(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n}\n\n/**\n * ## On Focus\n * @param e\n */\nfunction onFocus(e?: Event) {\n formField.focus(e);\n if (props.autoselect) {\n getInputElement()?.select();\n }\n}\n\n/**\n * ## On Control Click\n *\n * When the user clicks on the textarea.\n *\n * @param e\n */\nfunction onControlClick(e: MouseEvent) {\n onFocus();\n emit(\"click:control\", e);\n}\n\n/**\n * ## On Control Mousedown\n *\n * When the mousedown is triggered on the textarea.\n *\n * @param e\n */\nfunction onControlMousedown(e: MouseEvent) {\n emit(\"mousedown:control\", e);\n if (e.target === inputRef.value) {\n return;\n }\n onFocus();\n e.preventDefault();\n}\n\n/**\n * ## On Keydown\n * Attempt to resize the textarea on key down.\n * @param e\n */\nfunction onKeydown(e: Event) {\n resize();\n}\n\n/**\n * ## On Keyup\n * Attempt to resize the textarea on key up.\n * @param e\n */\nfunction onKeyup(e: Event) {\n resize();\n}\n\n/**\n * ## On Enter\n * When the user presses the Enter key, we can call an `autosubmit` function (if supplied).\n * @param e\n */\nfunction onKeyupEnter(e: Event) {\n // Use the autosubmit callback if present\n if (props.autosubmit) {\n props.autosubmit();\n }\n}\n\n/**\n * ## Resize\n * If the component is set to `autogrow` then we resize the textarea appropriately\n * so that all the text is visible.\n */\nfunction resize() {\n if (!props.autogrow) {\n return;\n }\n const field = getInputElement();\n if (!field) {\n return;\n }\n field.style.height = \"auto\";\n field.style.height = field.scrollHeight + 1 + \"px\";\n}\n\n/**\n * ## On Update\n * Ensures the textarea is resized when the component updates.\n */\nonUpdated(() => {\n resize();\n});\n\n/**\n * ## On Mounted\n * Ensures the textarea is resized when the component loads.\n */\nonMounted(() => {\n resize();\n});\n\n/**\n * ## Directive `v-autofocus`\n */\nconst vAutofocus = useAutofocus(props);\n\n/**\n * ## Expose stuff\n */\ndefineExpose({\n field: formField,\n input: inputRef,\n focus: () => {\n getInputElement()?.focus();\n },\n});\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n class=\"ev-textarea\"\n :class=\"[\n {\n 'is-loading': loading,\n 'is-autogrow': autogrow,\n },\n formField.classes,\n props.class,\n ]\"\n :style=\"props.style\"\n role=\"textbox\"\n v-bind=\"containerAttrs\">\n <div\n v-if=\"props.label || props.hint || slots.label\"\n class=\"ev-textarea--label\">\n <ev-label\n :for=\"formField.id\"\n :title=\"props.label\"\n :hint=\"props.hint\">\n <slot name=\"label\" />\n </ev-label>\n </div>\n\n <div\n :class=\"[\n 'ev-textarea--control',\n appearanceModifier(props.appearance, [InputAppearance.default]),\n ]\"\n @click=\"onControlClick\"\n @mousedown=\"onControlMousedown\">\n <div class=\"ev-textarea--input\">\n <textarea\n :id=\"formField.id\"\n ref=\"inputRef\"\n v-model=\"formField.value\"\n v-autofocus\n :name=\"formField.name\"\n :disabled=\"formField.isDisabled\"\n :readonly=\"formField.isReadonly\"\n :placeholder=\"placeholder\"\n :autofocus=\"autofocus\"\n v-bind=\"inputAttrs\"\n @focus=\"onFocus\"\n @blur=\"formField.blur\"\n @keydown=\"onKeydown\"\n @keyup=\"onKeyup\"\n @keyup.enter=\"onKeyupEnter\"></textarea>\n </div>\n <transition name=\"slide-fade\">\n <div v-if=\"isClearable\" class=\"ev-textarea--clearable\">\n <ev-icon\n :glyph=\"CancelIcon\"\n @click=\"onClearableClick\"\n @mousedown=\"onClearableMousedown\" />\n </div>\n </transition>\n <div v-if=\"loading\" class=\"ev-textarea--loader\">\n <ev-progress\n indeterminate\n :appearance=\"\n formField.isFocused\n ? Appearance.notice\n : Appearance.default\n \"\n :size=\"2\" />\n </div>\n </div>\n\n <div v-if=\"formField.isShowErrorMessages\" class=\"ev-textarea--errors\">\n <ev-errors :messages=\"formField.errorMessages\" />\n </div>\n </div>\n</template>\n","import { HintedString, propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables\";\nimport { makeEvImgProps } from \"@/components/EvImg\";\nimport { makeRoundedProps } from \"@/composables/rounded\";\nimport { PropType } from \"vue\";\n\nexport type ThumbnailSize = HintedString<\n | \"xx-small\"\n | \"x-small\"\n | \"small\"\n | \"medium\"\n | \"large\"\n | \"x-large\"\n | \"xx-large\"\n>;\n\nexport const thumbnailPresets = {\n defaults: {\n inline: true,\n aspectRatio: 1,\n },\n \"xx-small\": {\n height: 24,\n rounded: \"x-small\",\n },\n \"x-small\": {\n height: 36,\n rounded: \"x-small\",\n },\n small: {\n height: 48,\n rounded: \"small\",\n },\n medium: {\n height: 64,\n rounded: \"small\",\n },\n large: {\n height: 96,\n rounded: \"medium\",\n },\n \"x-large\": {\n height: 128,\n rounded: \"large\",\n },\n \"xx-large\": {\n height: 256,\n rounded: \"large\",\n },\n};\n\nexport const makeEvThumbnailProps = propsFactory(\n {\n size: String as PropType<ThumbnailSize>,\n\n ...makeEvImgProps(),\n ...makeRoundedProps(),\n ...makeComponentProps(),\n },\n \"EvThumbnail\",\n);","import { HintedString, propsFactory } from \"@/util\";\nimport {\n ComponentProps,\n DimensionsProps,\n makeComponentProps,\n makeDimensionsProps,\n} from \"@/composables\";\nimport { makeRoundedProps, RoundedProps } from \"@/composables/rounded\";\nimport {\n AspectRatioProps,\n makeAspectRatioProps,\n} from \"@/composables/aspectRatio\";\nimport { PropType } from \"vue\";\n\nexport interface EvSkeletonProps\n extends AspectRatioProps,\n DimensionsProps,\n RoundedProps,\n ComponentProps {\n inline?: boolean;\n type?: SkeletonType;\n size?: SkeletonSize;\n}\n\nexport type SkeletonType = HintedString<\"avatar\" | \"heading\" | \"text\">;\n\nexport type SkeletonSize = HintedString<\n | \"xx-small\"\n | \"x-small\"\n | \"small\"\n | \"medium\"\n | \"large\"\n | \"x-large\"\n | \"xx-large\"\n>;\n\nexport const skeletonPresets = {\n avatar: {\n defaults: {\n rounded: \"circle\",\n aspectRatio: 1,\n inline: true,\n width: 42,\n },\n \"x-small\": { width: 30 },\n small: { width: 36 },\n large: { width: 48 },\n \"x-large\": { width: 54 },\n \"xx-large\": { width: 54 },\n },\n button: {\n defaults: {\n rounded: \"small\",\n height: 42,\n width: 104,\n inline: true,\n },\n \"x-small\": { height: 32, width: 84 },\n small: { height: 36, width: 92 },\n large: { height: 48, width: 116 },\n \"x-large\": { height: 56, width: 132 },\n \"xx-large\": { height: 56, width: 132 },\n },\n heading: {\n defaults: {\n rounded: \"small\",\n height: \"var(--heading-size-4)\",\n },\n \"x-small\": { height: \"var(--heading-size-6)\" },\n small: { height: \"var(--heading-size-5)\" },\n large: { height: \"var(--heading-size-3)\" },\n \"x-large\": { height: \"var(--heading-size-2)\" },\n \"xx-large\": { height: \"var(--heading-size-1)\" },\n },\n image: {\n defaults: {\n rounded: false,\n aspectRatio: \"16:9\",\n },\n },\n text: {\n defaults: {\n rounded: \"small\",\n height: \"var(--text-size-medium)\",\n },\n \"x-small\": { height: \"var(--text-size-small)\" },\n small: { height: \"var(--text-size-small)\" },\n large: { height: \"var(--text-size-large)\" },\n \"x-large\": { height: \"var(--text-size-subtitle)\" },\n \"xx-large\": { height: \"var(--text-size-subtitle)\" },\n },\n thumbnail: {\n defaults: {\n inline: true,\n aspectRatio: 1,\n },\n \"xx-small\": {\n height: 24,\n rounded: \"x-small\",\n },\n \"x-small\": {\n height: 36,\n rounded: \"x-small\",\n },\n small: {\n height: 48,\n rounded: \"small\",\n },\n medium: {\n height: 64,\n rounded: \"small\",\n },\n large: {\n height: 96,\n rounded: \"medium\",\n },\n \"x-large\": {\n height: 128,\n rounded: \"large\",\n },\n \"xx-large\": {\n height: 256,\n rounded: \"large\",\n },\n },\n};\n\nexport const makeEvSkeletonProps = propsFactory(\n {\n inline: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n size: String as PropType<SkeletonSize>,\n type: String as PropType<SkeletonType>,\n\n ...makeAspectRatioProps(),\n ...makeDimensionsProps(),\n ...makeRoundedProps(),\n ...makeComponentProps(),\n },\n \"EvSkeleton\",\n);\n","<script setup lang=\"ts\">\nimport \"./EvSkeleton.scss\";\nimport {\n makeEvSkeletonProps,\n skeletonPresets,\n} from \"./EvSkeleton\";\nimport { useRounded } from \"@/composables/rounded\";\nimport { useDimensions } from \"@/composables\";\nimport { computed } from \"vue\";\nimport { applyDefaults, makeClassName, sizeModifier } from \"@/util\";\nimport { useAspectStyles } from \"@/composables/aspectRatio\";\n\nconst props = defineProps({ ...makeEvSkeletonProps() });\n\nconst size = computed(() => {\n return props.type ? props.size ?? \"medium\" : undefined;\n});\n\nconst computedProps = computed(() => {\n if (!props.type) {\n return props;\n }\n const preset = skeletonPresets[props.type] ?? {};\n const presetDefaults = preset.defaults ?? {};\n const presetProps = preset[size.value] ?? {};\n return applyDefaults(props, { ...presetDefaults, ...presetProps });\n});\n\nconst roundedClasses = computed(\n () => useRounded(computedProps.value).roundedClasses.value,\n);\nconst dimensionStyles = computed(\n () => useDimensions(computedProps.value).value,\n);\nconst sizeClass = computed(() => sizeModifier(size.value));\nconst typeClass = computed(() => makeClassName(props.type, \"is-type\"));\nconst aspectStyles = computed(() => {\n return useAspectStyles(computedProps.value).aspectStyles.value;\n});\n\n</script>\n\n<template>\n <div\n :class=\"[\n 'ev-skeleton',\n {\n 'is-inline': computedProps.inline,\n },\n typeClass,\n sizeClass,\n roundedClasses,\n props.class,\n ]\"\n :style=\"[dimensionStyles, aspectStyles, props.style]\"\n aria-hidden=\"true\"></div>\n</template>\n","<script setup lang=\"ts\">\nimport \"./EvThumbnail.scss\";\nimport { makeEvThumbnailProps, thumbnailPresets } from \"./EvThumbnail\";\nimport { EvImg } from \"@/components/EvImg\";\nimport { computed } from \"vue\";\nimport { applyDefaults, filterComponentProps } from \"@/util\";\nimport { useRounded } from \"@/composables/rounded\";\nimport { DangerIcon, ImageIcon } from \"@/icons\";\nimport { EvIcon } from \"@/components/EvIcon\";\nimport { EvSkeleton } from \"@/components/EvSkeleton\";\nimport { parseAspectRatio } from \"@/composables/aspectRatio\";\n\nconst props = defineProps({ ...makeEvThumbnailProps() });\nconst slots = defineSlots<{\n default(): never;\n}>();\n\nconst computedProps = computed(() => {\n if (!props.size) {\n return props;\n }\n const presets = thumbnailPresets[props.size] ?? {};\n const defaults = thumbnailPresets.defaults;\n const combined = applyDefaults(props, { ...defaults, ...presets });\n\n if (!combined.width && combined.aspectRatio && combined.height) {\n const aspectRatio = parseAspectRatio(combined.aspectRatio);\n if (aspectRatio && isFinite(aspectRatio)) {\n const numericHeight =\n typeof combined.height === \"string\"\n ? parseFloat(combined.height)\n : combined.height;\n const width = Math.round(numericHeight * aspectRatio);\n return { ...combined, width };\n }\n }\n return combined;\n});\n\nconst imgProps = computed(() =>\n filterComponentProps(EvImg, computedProps.value),\n);\nconst roundedClasses = computed(\n () => useRounded(computedProps.value).roundedClasses.value,\n);\n\n\n</script>\n\n<template>\n <ev-img :class=\"['ev-thumbnail', roundedClasses]\" v-bind=\"imgProps\">\n <template v-if=\"slots.default\" #default>\n <slot />\n </template>\n <template #placeholder>\n <ev-icon :glyph=\"ImageIcon\" appearance=\"subtle\" />\n </template>\n <template #loading>\n <ev-skeleton type=\"image\" width=\"100%\" height=\"100%\" />\n </template>\n <template #error>\n <ev-icon :glyph=\"DangerIcon\" appearance=\"danger\" />\n </template>\n </ev-img>\n</template>\n","import { omit, propsFactory } from \"@/util\";\nimport { makeEvTextfieldProps } from \"@/components\";\nimport { TimeIcon } from \"@/icons\";\n\nexport const makeEvTimeFieldProps = propsFactory(\n {\n ...omit(\n makeEvTextfieldProps({\n iconStart: TimeIcon,\n }),\n [\"type\"],\n ),\n },\n \"EvTimeField\",\n);","import { EventProp, propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\n\nexport interface EvTimePickerProps {\n modelValue: string | Date;\n hourFormat: 12 | 24;\n period: \"am\" | \"pm\";\n \"onUpdate:modelValue\": EventProp<[unknown]> | undefined;\n}\n\nexport const makeEvTimePickerProps = propsFactory(\n {\n modelValue: [String, Date],\n hourFormat: {\n type: Number as PropType<EvTimePickerProps[\"hourFormat\"]>,\n default: undefined,\n validator: (val: number) => val === 12 || val === 24,\n },\n },\n \"EvTimePicker\",\n);\n","import { propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\n\n\nexport const makeEvTimePickerHoursProps = propsFactory(\n {\n period: String,\n modelValue: Date,\n hourFormat: Number as PropType<12 | 24>,\n },\n \"EvTimePickerHours\",\n);\n\nexport interface Hour {\n value: string;\n text: string;\n isDisabled: boolean;\n isSelected: boolean;\n}\n","<script setup lang=\"ts\">\nimport \"./EvTimePickerHours.scss\";\nimport { computed } from \"vue\";\nimport { useDate, useLocaleFunctions, useModelProxy } from \"@/composables\";\nimport { EvButton } from \"@/components/EvButton\";\nimport { Hour, makeEvTimePickerHoursProps } from \"./EvTimePickerHours\";\nimport { EvEyebrow } from \"@/components/EvEyebrow\";\n\nconst props = defineProps({\n ...makeEvTimePickerHoursProps(),\n});\nconst emit = defineEmits([\"update:modelValue\", \"click:hour\"]);\nconst dateAdapter = useDate();\nconst modelValue = useModelProxy(props, \"modelValue\", undefined);\nconst { t } = useLocaleFunctions();\n\nconst hoursInDay = computed(() => {\n const is24Hour = props.hourFormat === 24;\n const value = modelValue.value\n ? (dateAdapter.date(modelValue.value) as Date)\n : undefined;\n\n // Display order\n const displayHours = Array.from(\n { length: 12 },\n (_, i) => i + (is24Hour ? 0 : 1),\n );\n\n return displayHours.map((displayHour) => {\n // Compute canonical 24h value\n const value24 = is24Hour\n ? ((props.period === \"pm\" ? 12 : 0) + displayHour) % 24\n : (displayHour % 12) + (props.period === \"pm\" ? 12 : 0);\n\n // Display text depends on 24-hour setting,\n // but the order remains sequential for 12h\n const text = is24Hour\n ? String(value24).padStart(2, \"0\")\n : String(displayHour);\n const isSelected = value?.getHours() === value24;\n\n return {\n value: String(value24).padStart(2, \"0\"),\n text: text,\n isDisabled: false, // @todo\n isSelected,\n } as Hour;\n });\n});\n\nfunction getAppearance(hour: Hour) {\n return hour.isSelected ? \"primary\" : \"default\";\n}\n\nfunction getVariant(hour: Hour) {\n return hour.isSelected ? \"bold\" : \"subtle\";\n}\n\nfunction onClickHour(hour: Hour) {\n const hasModelValue = !!modelValue.value;\n const value = dateAdapter.date(modelValue.value) as Date;\n if (!hasModelValue) {\n value.setHours(0, 0, 0, 0);\n }\n value.setHours(Number(hour.value));\n modelValue.value = new Date(value);\n emit(\"click:hour\", hour);\n}\n\n</script>\n\n<template>\n <div class=\"ev-time-picker--hours\">\n <ev-eyebrow tag=\"div\" class=\"ev-time-picker--heading\">\n {{ t(\"time.hours.title\") }}\n </ev-eyebrow>\n <ev-button\n v-for=\"hour in hoursInDay\"\n :key=\"String(hour.value)\"\n class=\"ev-time-picker--hour\"\n icon\n rounded\n :text=\"hour.text\"\n :appearance=\"getAppearance(hour)\"\n :variant=\"getVariant(hour)\"\n @click=\"onClickHour(hour)\" />\n </div>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { PropType } from \"vue\";\n\nexport const makeEvTimePickerMinutesProps = propsFactory(\n {\n modelValue: [String, Date],\n hourFormat: Number as PropType<12 | 24>,\n },\n \"EvTimePickerMinutes\",\n);\n\nexport interface Minutes {\n value: string;\n text: string;\n isDisabled: boolean;\n isSelected: boolean;\n}","<script setup lang=\"ts\">\nimport \"./EvTimePickerMinutes.scss\";\nimport { makeEvTimePickerMinutesProps, Minutes } from \"./EvTimePickerMinutes\";\nimport { useDate, useLocaleFunctions, useModelProxy } from \"@/composables\";\nimport { computed } from \"vue\";\nimport { EvButton } from \"@/components/EvButton\";\nimport { EvEyebrow } from \"@/components/EvEyebrow\";\n\nconst props = defineProps({\n ...makeEvTimePickerMinutesProps(),\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\nconst dateAdapter = useDate();\nconst modelValue = useModelProxy(props, \"modelValue\", undefined);\nconst { t } = useLocaleFunctions();\n\nconst displayMinutes = computed(() => {\n const value = modelValue.value\n ? (dateAdapter.date(modelValue.value) as Date)\n : undefined;\n\n return [0, 15, 30, 45].map((minute) => {\n const isSelected = value?.getMinutes() === minute;\n const minutes = String(minute).padStart(2, \"0\");\n const text = minutes;\n\n return {\n value: String(minute).padStart(2, \"0\"),\n text,\n isDisabled: false, // @todo\n isSelected,\n } as Minutes;\n });\n});\n\nfunction getAppearance(minutes: Minutes) {\n return minutes.isSelected ? \"primary\" : \"default\";\n}\n\nfunction getVariant(minutes: Minutes) {\n return minutes.isSelected ? \"bold\" : \"subtle\";\n}\n\nfunction onClickMinutes(minutes: Minutes) {\n const hasModelValue = !!modelValue.value;\n const value = dateAdapter.date(modelValue.value) as Date;\n if (!hasModelValue) {\n value.setHours(0, 0, 0, 0);\n }\n value.setMinutes(Number(minutes.value));\n modelValue.value = new Date(value);\n}\n\n</script>\n\n<template>\n <div class=\"ev-time-picker--minutes\">\n <ev-eyebrow tag=\"div\" class=\"ev-time-picker--heading\">\n {{ t(\"time.minutes.title\") }}\n </ev-eyebrow>\n <ev-button\n v-for=\"minutes in displayMinutes\"\n :key=\"minutes.value\"\n class=\"ev-time-picker--minute\"\n icon\n rounded\n :text=\"minutes.text\"\n :appearance=\"getAppearance(minutes)\"\n :variant=\"getVariant(minutes)\"\n @click=\"onClickMinutes(minutes)\" />\n </div>\n</template>","export function inferTimeFormat(value: unknown) {\n if (value instanceof Date) {\n return \"date\";\n }\n if (typeof value === \"string\") {\n if (/^\\d{2}:\\d{2}$/.test(value)) {\n return \"time\";\n }\n if (/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$/.test(value)) {\n return \"datetime\";\n }\n }\n return \"time\";\n}\n\nexport function normalizeTimeToDate(value: unknown) {\n if (!value) {\n return null;\n }\n if (value instanceof Date && !isNaN(value.getTime())) {\n return new Date(value);\n }\n if (typeof value === \"string\") {\n // HH:mm\n if (/^\\d{2}:\\d{2}$/.test(value)) {\n const [h, m] = value.split(\":\").map(Number);\n const d = new Date();\n d.setHours(h, m, 0, 0);\n return d;\n }\n // Y-m-d H:i:s\n if (/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$/.test(value)) {\n const d = new Date(value.replace(\" \", \"T\"));\n return isNaN(d.getTime()) ? null : d;\n }\n // fallback (ISO, etc.)\n const parsed = new Date(value);\n return isNaN(parsed.getTime()) ? null : parsed;\n }\n return null;\n}\n\nexport function serializeDateToTime(\n date: Date,\n format: \"time\" | \"date\" | \"datetime\",\n): Date | string | null {\n if (!date) {\n return null;\n }\n const d = new Date(date);\n d.setSeconds(0, 0);\n\n if (format === \"date\") {\n return d;\n }\n if (format === \"time\") {\n return d.toTimeString().slice(0, 5); // HH:mm\n }\n if (format === \"datetime\") {\n const pad = (n: number) => String(n).padStart(2, \"0\");\n const year = d.getFullYear();\n const month = pad(d.getMonth() + 1);\n const day = pad(d.getDate());\n const hour = pad(d.getHours());\n const minutes = pad(d.getMinutes());\n return `${year}-${month}-${day} ${hour}:${minutes}:00`;\n }\n return null;\n}\n\nexport function displayTimeFromDate(date: Date | null) {\n return date ? date.toTimeString().slice(0, 5) : \"\";\n}","<script setup lang=\"ts\">\nimport \"./EvTimePicker.scss\";\nimport { computed, shallowRef } from \"vue\";\nimport { useDate, useLocaleManager, useModelProxy } from \"@/composables\";\nimport { makeEvTimePickerProps } from \"./EvTimePicker\";\nimport { EvTimePickerHours } from \"./EvTimePickerHours\";\nimport { EvTimePickerMinutes } from \"./EvTimePickerMinutes\";\nimport { EvButton } from \"@/components/EvButton\";\nimport { EvButtonSelect } from \"@/components/EvButtonSelect\";\nimport { EvNumber } from \"@/components/EvNumber\";\nimport { EvDivider } from \"@/components/EvDivider\";\nimport { EvHeading } from \"@/components/EvHeading\";\nimport {\n inferTimeFormat,\n normalizeTimeToDate,\n serializeDateToTime,\n} from \"@/composables/time\";\n\nconst props = defineProps({\n ...makeEvTimePickerProps(),\n});\ndefineEmits([\"update:modelValue\"]);\nconst locale = useLocaleManager();\nconst dateAdapter = useDate();\nconst period = shallowRef(\"am\");\nlet inferredFormat = null;\nconst modelValue = useModelProxy(\n props,\n \"modelValue\",\n undefined,\n (value) => {\n inferredFormat = inferTimeFormat(value);\n const date = normalizeTimeToDate(value);\n if (!date) {\n return null;\n }\n date.setSeconds(0, 0);\n period.value = date.getHours() >= 12 ? \"pm\" : \"am\";\n return date;\n },\n (value) => {\n return serializeDateToTime(value, inferredFormat ?? \"time\");\n },\n);\n\nconst hourFormat = computed<12 | 24>(() => {\n if (props.hourFormat) {\n return props.hourFormat;\n }\n const formatter = new Intl.DateTimeFormat(locale.currentLocale.value, {\n hour: \"numeric\",\n });\n const options = formatter.resolvedOptions();\n return [\"h11\", \"h12\"].includes(options.hourCycle) ? 12 : 24;\n});\n\nfunction onClickPeriod() {\n if (!modelValue.value) {\n return;\n }\n const value = dateAdapter.date(modelValue.value) as Date;\n const modifier = period.value === \"am\" ? -12 : 12;\n value.setHours(value.getHours() + modifier);\n modelValue.value = new Date(value);\n}\n\nconst hours = computed(() => {\n return modelValue.value?.getHours() ?? 0;\n});\n\nconst minutes = computed(() => {\n return modelValue.value?.getMinutes() ?? 0;\n});\n\nconst numberFormat = {\n minimumIntegerDigits: 2,\n useGrouping: false,\n};\n\n</script>\n\n<template>\n <div class=\"ev-time-picker\">\n\n <div class=\"ev-time-picker--controls\">\n <ev-heading size=\"x-large\" tag=\"div\" class=\"mb-0\">\n <ev-number :value=\"hours\" :format=\"numberFormat\" />:<ev-number\n :value=\"minutes\"\n :format=\"numberFormat\" />\n </ev-heading>\n\n <ev-button-select\n v-model=\"period\"\n mandatory\n rounded\n size=\"small\"\n variant=\"subtle\"\n selected-variant=\"bold\">\n <ev-button value=\"am\" text=\"AM\" @click=\"onClickPeriod\" />\n <ev-button value=\"pm\" text=\"PM\" @click=\"onClickPeriod\" />\n </ev-button-select>\n </div>\n\n <ev-divider />\n\n <div class=\"ev-time-picker--options\">\n <ev-time-picker-hours\n v-model=\"modelValue\"\n :period=\"period\"\n :hour-format=\"hourFormat\" />\n\n <ev-divider vertical>:</ev-divider>\n\n <ev-time-picker-minutes\n v-model=\"modelValue\"\n :hour-format=\"hourFormat\" />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport \"./EvTimeField.scss\";\nimport { makeEvTimeFieldProps } from \"./EvTimeField\";\nimport { EvMenu } from \"@/components/EvMenu\";\nimport { EvTextfield } from \"@/components/EvTextfield\";\nimport { EvSurface } from \"@/components/EvSurface\";\nimport { EvTimePicker } from \"@/components/EvTimePicker\";\nimport { computed, ref, shallowRef, watch } from \"vue\";\nimport { filterComponentProps, omit } from \"@/util\";\nimport { FocusEvent, KeyboardEvent } from \"react\";\nimport { useModelProxy } from \"@/composables\";\nimport {\n displayTimeFromDate,\n inferTimeFormat,\n normalizeTimeToDate,\n serializeDateToTime,\n} from \"@/composables/time\";\n\nconst props = defineProps({\n ...makeEvTimeFieldProps(),\n});\nconst slots = defineSlots<{\n label(): never;\n}>();\n\nlet inferredFormat = null;\nconst modelValue = useModelProxy(\n props,\n \"modelValue\",\n undefined,\n (value) => {\n inferredFormat = inferTimeFormat(value);\n const date = normalizeTimeToDate(value);\n if (!date) {\n return null;\n }\n date.setSeconds(0, 0);\n return date;\n },\n (value) => {\n return serializeDateToTime(value, inferredFormat ?? \"time\");\n },\n);\n\nconst displayValue = ref(\"\");\nconst pickerValue = ref(null);\n\nwatch(\n modelValue,\n (value) => {\n displayValue.value = displayTimeFromDate(value);\n pickerValue.value = modelValue.value;\n },\n { immediate: true },\n);\n\n// Text Field\nconst evMenuRef = ref<typeof EvMenu>();\nconst evTextfieldRef = ref<typeof EvTextfield>();\nconst evTextfieldProps = computed(() => {\n return omit(filterComponentProps(EvTextfield, props), [\"modelValue\"]);\n});\nconst isFocused = shallowRef(false);\n\n// Time Picker\nconst timePickerRef = ref<typeof EvTimePicker>();\n\n// Menu\nconst isMenuOpen = shallowRef(false);\n\n/**\n * ## On Menu After Leave\n * Maintain focus on the EvSelect when leaving the menu - usually when tabbing out.\n */\nfunction onMenuAfterLeave() {\n if (isFocused.value && evTextfieldRef.value) {\n evTextfieldRef.value.focus();\n }\n}\n\nfunction onFieldFocus() {\n isFocused.value = true;\n isMenuOpen.value = true;\n}\n\nfunction onFieldBlur(e: FocusEvent) {\n if (!timePickerRef.value?.$el.contains(e.relatedTarget as HTMLElement)) {\n isMenuOpen.value = false;\n if (displayValue.value.length === 0) {\n if (inferredFormat === \"time\") {\n modelValue.value = null;\n } else {\n const date = modelValue.value;\n date.setHours(0, 0, 0, 0);\n modelValue.value = date;\n displayValue.value = \"00:00\";\n }\n return;\n }\n const parts = displayValue.value.split(\":\");\n const date = pickerValue.value ?? new Date();\n let minutes = Number(parts[1] ?? 0);\n if (minutes < 10) {\n minutes *= 10;\n }\n date.setHours(Number(parts[0]), minutes, 0, 0);\n modelValue.value = normalizeTimeToDate(date);\n displayValue.value = displayTimeFromDate(date);\n }\n}\n\nfunction onDatePickerFocusIn(e: FocusEvent) {\n isFocused.value = true;\n}\n\nfunction normalizeTimeInput(raw: string): string {\n let value = raw.replace(/[^\\d:]/g, \"\");\n // Prevent more than one colon\n const parts = value.split(\":\");\n if (parts.length > 2) {\n value = parts[0] + \":\" + parts.slice(1).join(\"\");\n }\n const [hoursRaw, minutesRaw = \"\"] = value.split(\":\");\n // Auto insert colon after 2 digits IF user hasn't typed one\n if (!value.includes(\":\") && hoursRaw.length >= 2) {\n value = hoursRaw.slice(0, 2) + \":\" + hoursRaw.slice(2);\n }\n const [h, m = \"\"] = value.split(\":\");\n // Pad single-digit hour when colon appears\n let hours = h;\n if (value.includes(\":\") && h.length === 1) {\n hours = \"0\" + h;\n }\n\n // Limit ranges (soft clamp while typing)\n if (hours.length === 2 && Number(hours) > 23) {\n hours = \"23\";\n }\n\n let minutes = m.slice(0, 2);\n if (minutes.length === 2 && Number(minutes) > 59) {\n minutes = \"59\";\n }\n\n return value.includes(\":\") ? `${hours}:${minutes}` : hours;\n}\n\nfunction onUpdatePickerValue(value) {\n modelValue.value = normalizeTimeToDate(value);\n}\n\nfunction onFieldKeydown(e: KeyboardEvent) {\n const passThrough = [\n \"Backspace\",\n \"Delete\",\n \"Home\",\n \"End\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Tab\",\n ];\n if (passThrough.includes(e.key)) {\n return;\n }\n const isPaste = e.key === \"v\" && e.ctrlKey;\n const isSelectAll = e.key === \"a\" && e.ctrlKey;\n // Block anything not in the whitelist\n const whitelist = new RegExp(\"[0-9:]\");\n if (!whitelist.test(e.key) && !isPaste && !isSelectAll) {\n e.preventDefault();\n return;\n }\n const raw = (e.target as HTMLInputElement).value;\n if (e.key === \":\" && raw.includes(\":\")) {\n e.preventDefault();\n return;\n }\n if (raw.length - getSelectedLength(e.target as HTMLInputElement) >= 5) {\n e.preventDefault();\n return;\n }\n}\n\n/**\n * ## Get Selected Length\n * @param input\n */\nfunction getSelectedLength(input: HTMLInputElement): number\n{\n if (input.selectionStart == null || input.selectionEnd == null) {\n return 0;\n }\n return input.selectionEnd - input.selectionStart;\n}\n\nfunction onFieldInput(e: Event) {\n const raw = (e.target as HTMLInputElement).value;\n displayValue.value = normalizeTimeInput(raw);\n\n if (displayValue.value.length === 0) {\n if (inferredFormat === \"time\") {\n modelValue.value = null;\n } else {\n const date = modelValue.value;\n date.setHours(0, 0, 0, 0);\n modelValue.value = date;\n }\n return;\n }\n\n // Attempt to update picker if we have a value that is reasonable\n const parts = displayValue.value.split(\":\");\n const date = pickerValue.value ?? new Date();\n let minutes = Number(parts[1] ?? 0);\n if (minutes < 10) {\n minutes *= 10;\n }\n date.setHours(Number(parts[0]), minutes, 0, 0);\n pickerValue.value = normalizeTimeToDate(date);\n}\n</script>\n\n<template>\n <ev-textfield\n ref=\"evTextfieldRef\"\n v-bind=\"evTextfieldProps\"\n v-model:focused=\"isFocused\"\n class=\"ev-time-field\"\n inputmode=\"numeric\"\n pattern=\"[0-9:]*\"\n :model-value=\"displayValue\"\n @click:control=\"onFieldFocus\"\n @blur=\"onFieldBlur\"\n @keydown=\"onFieldKeydown\"\n @input=\"onFieldInput\">\n <template v-if=\"slots.label\" #label>\n <slot name=\"label\" />\n </template>\n <template #default>\n <ev-menu\n ref=\"evMenuRef\"\n v-model=\"isMenuOpen\"\n activator=\"parent\"\n position=\"bottom-start\"\n :open-on-click=\"false\"\n :close-on-content-click=\"false\"\n @after-leave=\"onMenuAfterLeave\">\n <ev-surface elevation=\"overlay\" class=\"ev-time-field--surface\">\n <ev-time-picker\n ref=\"timePickerRef\"\n v-model=\"pickerValue\"\n @focusin=\"onDatePickerFocusIn\"\n @update:model-value=\"onUpdatePickerValue\" />\n </ev-surface>\n </ev-menu>\n </template>\n </ev-textfield>\n</template>\n","import { GroupProvide } from \"@/composables/group\";\nimport { ComputedRef, Ref, InjectionKey, PropType } from \"vue\";\nimport { GroupItemProvide } from \"@/composables/groupItem\";\nimport { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeTagProps } from \"@/composables/tag\";\nimport { IconProp } from \"@/composables/icons\";\nimport { ArrowBackIcon, ArrowContinueIcon } from \"@/icons\";\nimport { TouchHandlers } from \"@/directives\";\n\nexport type EvWindowSlots = {\n default: {\n group: GroupProvide;\n };\n};\n\nexport type WindowProvide = {\n transition: ComputedRef<undefined | string>;\n transitionCount: Ref<number>;\n transitionHeight: Ref<undefined | string>;\n isReversed: Ref<boolean>;\n rootRef: Ref<HTMLElement | undefined>;\n};\n\nexport const EvWindowSymbol: InjectionKey<WindowProvide> =\n Symbol.for(\"ev:window\");\nexport const EvWindowGroupSymbol: InjectionKey<GroupItemProvide> =\n Symbol.for(\"ev:window-group\");\n\nexport const makeEvWindowProps = propsFactory(\n {\n continuous: Boolean,\n direction: {\n type: String as PropType<\"horizontal\" | \"vertical\">,\n default: \"horizontal\",\n },\n disabled: Boolean,\n iconNext: {\n type: IconProp,\n default: ArrowContinueIcon,\n },\n iconPrevious: {\n type: IconProp,\n default: ArrowBackIcon,\n },\n // TODO: mandatory should probably not be exposed but do this for now\n mandatory: {\n type: [Boolean, String] as PropType<boolean | \"force\">,\n default: \"force\" as const,\n },\n modelValue: null,\n reverse: Boolean,\n selectedClass: {\n type: String,\n default: \"is-active\",\n },\n showArrows: {\n type: [Boolean, String],\n validator: (v: any) => typeof v === \"boolean\" || v === \"hover\",\n },\n touch: {\n type: [Object, Boolean] as PropType<boolean | TouchHandlers>,\n default: undefined,\n },\n\n ...makeComponentProps(),\n ...makeTagProps(),\n },\n \"EvWindow\",\n);\n","import { DirectiveBinding } from \"vue\";\nimport { isFunction, isObject, isShadowRoot } from \"@/util\";\n\n/**\n * ## Click Outside Args\n *\n * Allows us to accept custom arguments from v-click-outside attributes.\n * - `handler` the function to execute\n * - `condition` an optional function which determines whether the `handler` should be called.\n * Effectively, this allows us to pause the event.\n * - `include` an optional array of elements to include when evaluating the click outside event.\n */\ninterface ClickOutsideArgs {\n handler: (e: MouseEvent) => void;\n condition?: (e: Event) => boolean;\n include?: () => HTMLElement[];\n}\n\n/**\n * ## Click Outside Binding\n */\ninterface ClickOutsideBinding extends DirectiveBinding {\n value: ((e: MouseEvent) => void) | ClickOutsideArgs;\n}\n\ninterface ClickOutsideHTMLElement extends HTMLElement {\n __clickOutside?: any;\n}\n\n/**\n * # Get the actual or shadow root of an element.\n * @param el\n */\nfunction getRoot(el: HTMLElement): null | Document | ShadowRoot {\n const root = el.getRootNode();\n if (\n root !== document &&\n root.getRootNode({ composed: true }) !== document\n ) {\n return null;\n }\n return root as Document | ShadowRoot;\n}\n\n/**\n * ## Is Active?\n * Determine if the callback should be called.\n * @param e\n * @param binding\n */\nfunction isActive(e: MouseEvent, binding: ClickOutsideBinding): boolean {\n const isActiveCallback =\n (isObject(binding.value) &&\n (binding.value as ClickOutsideArgs).condition) ||\n (() => true);\n return isActiveCallback(e);\n}\n\n/**\n * ## Is Event Outside?\n *\n * 1. Check that the event listener still wants us to trigger events (`isActive`).\n * This helps\n *\n *\n * @param e\n * @param el\n * @param binding\n */\nfunction isEventOutside(\n e: MouseEvent,\n el: HTMLElement,\n binding: ClickOutsideBinding,\n): boolean {\n // 1 Check isActive callback\n if (!e || !isActive(e, binding)) {\n return false;\n }\n const root = getRoot(el);\n if (isShadowRoot(root) && root.host === e.target) {\n return false;\n }\n const elements = (\n (isObject(binding.value) &&\n (binding.value as ClickOutsideArgs).include) ||\n (() => [])\n )();\n elements.push(el);\n return !elements.some((el) => {\n return el?.contains(e.target as Node);\n });\n}\n\n/**\n * # On Click Handler\n *\n * @param e\n * @param el\n * @param binding\n */\nfunction onClickHandler(\n e: MouseEvent,\n el: ClickOutsideHTMLElement,\n binding: ClickOutsideBinding,\n) {\n const handler = isFunction(binding.value)\n ? binding.value\n : binding.value.handler;\n if (\n !el.__clickOutside!.wasMousedownOutside ||\n !isEventOutside(e, el, binding)\n ) {\n return;\n }\n // setTimeout so the callback function is executed asynchronously\n setTimeout(() => {\n isActive(e, binding) && handler && handler(e);\n }, 0);\n}\n\n/**\n * ## Handle Callback\n * @param el\n * @param callback\n */\nfunction handleCallback(el: HTMLElement, callback: Function): void {\n callback(document);\n const root = getRoot(el);\n if (isShadowRoot(root)) {\n callback(root);\n }\n}\n\n/**\n * # Click Outside Directive\n *\n * There are two handlers:\n * 1. onClick - handles click events, which are triggered after...\n * 2. onMouseDown - determines if the mouse was outside before the click event finished.\n *\n * This helps us get over an issue we had previously, where mouse dragging during a click\n * caused dialogs to close unwantedly.\n */\nexport const clickOutside = {\n /**\n * Add event listeners when the component is mounted.\n * @param el\n * @param binding\n */\n mounted(el: ClickOutsideHTMLElement, binding: ClickOutsideBinding) {\n const onClick = (e: Event) => {\n onClickHandler(e as MouseEvent, el, binding);\n };\n const onMousedown = (e: Event) => {\n el.__clickOutside!.wasMousedownOutside = isEventOutside(\n e as MouseEvent,\n el,\n binding,\n );\n };\n handleCallback(el, (app: HTMLElement) => {\n app.addEventListener(\"click\", onClick, true);\n app.addEventListener(\"mousedown\", onMousedown, true);\n });\n if (!el.__clickOutside) {\n el.__clickOutside = {\n wasMousedownOutside: false,\n };\n }\n el.__clickOutside[binding.instance!.$.uid] = { onClick, onMousedown };\n },\n\n /**\n * Remove event listeners when the component is unmounted.\n * @param el\n * @param binding\n */\n unmounted(el: ClickOutsideHTMLElement, binding: ClickOutsideBinding) {\n if (!el.__clickOutside) {\n return;\n }\n handleCallback(el, (app: HTMLElement) => {\n if (!app || !el.__clickOutside?.[binding.instance!.$.uid]) {\n return;\n }\n const { onClick, onMousedown } =\n el.__clickOutside[binding.instance!.$.uid]!;\n app.removeEventListener(\"click\", onClick, true);\n app.removeEventListener(\"mousedown\", onMousedown, true);\n });\n delete el.__clickOutside[binding.instance!.$.uid];\n },\n};\n\nexport default clickOutside;\n","import { DirectiveBinding } from \"vue\";\nimport { Browser } from \"@/util\";\n\ntype ObserverHandler = (\n isIntersecting: boolean,\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver,\n) => void;\n\ninterface ObserveHTMLElement extends HTMLElement {\n _observe?: { init: boolean; observer: IntersectionObserver }[];\n}\n\nexport interface ObserverDirectiveBinding\n extends Omit<DirectiveBinding, \"modifiers\" | \"value\"> {\n value?:\n | ObserverHandler\n | { handler: ObserverHandler; options?: IntersectionObserverInit };\n modifiers: {\n once?: boolean;\n quiet?: boolean;\n };\n}\n\n/**\n * # Mounted\n */\nfunction mounted(el: ObserveHTMLElement, binding: ObserverDirectiveBinding) {\n if (!Browser.supportsIntersection) {\n return;\n }\n const modifiers = binding.modifiers || {};\n const value = binding.value;\n const { handler, options } =\n typeof value === \"object\" ? value : { handler: value, options: {} };\n\n const observer = new IntersectionObserver(\n (\n entries: IntersectionObserverEntry[] = [],\n observer: IntersectionObserver,\n ) => {\n const _observe = el._observe?.[binding.instance!.$.uid];\n // Just in case, should never fire\n if (!_observe) {\n return;\n }\n const isIntersecting = entries.some(\n (entry) => entry.isIntersecting,\n );\n\n // If is not quiet or has already been initialized, invoke the user callback\n if (\n handler &&\n (!modifiers.quiet || _observe.init) &&\n (!modifiers.once || isIntersecting || _observe.init)\n ) {\n handler(isIntersecting, entries, observer);\n }\n\n if (isIntersecting && modifiers.once) {\n unmounted(el, binding);\n } else {\n _observe.init = true;\n }\n },\n options,\n );\n\n el._observe = Object(el._observe);\n el._observe![binding.instance!.$.uid] = { init: false, observer };\n\n observer.observe(el);\n}\n\n/**\n * # Unmounted\n */\nfunction unmounted(el: ObserveHTMLElement, binding: ObserverDirectiveBinding) {\n const observe = el._observe?.[binding.instance!.$.uid];\n if (!observe) {\n return;\n }\n observe.observer.unobserve(el);\n delete el._observe![binding.instance!.$.uid];\n}\n\nexport const Intersect = {\n mounted,\n unmounted,\n};\n\nexport default Intersect;\n","import { DirectiveBinding } from \"vue\";\nimport { VNode } from \"vue\";\n\nexport const SlotsDirective = {\n beforeMount(el: HTMLElement, binding: DirectiveBinding, vnode: VNode) {\n const slots = binding.value || {};\n\n const subComponentVNode = vnode.component;\n if (!subComponentVNode) {\n return;\n }\n\n Object.keys(slots).forEach((slotName) => {\n subComponentVNode.slots[slotName] = slots[slotName];\n });\n },\n};\n\nexport default SlotsDirective;\n","// Utilities\nimport { keys } from \"@/util\";\n\n// Types\nimport type { DirectiveBinding } from \"vue\";\n\nexport interface TouchHandlers {\n start?: (wrapperEvent: { originalEvent: TouchEvent } & TouchData) => void;\n end?: (wrapperEvent: { originalEvent: TouchEvent } & TouchData) => void;\n move?: (wrapperEvent: { originalEvent: TouchEvent } & TouchData) => void;\n left?: (wrapper: TouchData) => void;\n right?: (wrapper: TouchData) => void;\n up?: (wrapper: TouchData) => void;\n down?: (wrapper: TouchData) => void;\n}\n\nexport interface TouchData {\n touchstartX: number;\n touchstartY: number;\n touchmoveX: number;\n touchmoveY: number;\n touchendX: number;\n touchendY: number;\n offsetX: number;\n offsetY: number;\n}\n\nexport type TouchWrapper = TouchHandlers & TouchData;\n\nexport interface TouchValue extends TouchHandlers {\n parent?: boolean;\n options?: AddEventListenerOptions;\n}\n\nexport interface TouchStoredHandlers {\n touchstart: (e: TouchEvent) => void;\n touchend: (e: TouchEvent) => void;\n touchmove: (e: TouchEvent) => void;\n}\n\nexport interface TouchDirectiveBinding extends Omit<DirectiveBinding, \"value\"> {\n value?: TouchValue;\n}\n\nconst handleGesture = (wrapper: TouchWrapper) => {\n const { touchstartX, touchendX, touchstartY, touchendY } = wrapper;\n const dirRatio = 0.5;\n const minDistance = 16;\n wrapper.offsetX = touchendX - touchstartX;\n wrapper.offsetY = touchendY - touchstartY;\n\n if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {\n wrapper.left &&\n touchendX < touchstartX - minDistance &&\n wrapper.left(wrapper);\n wrapper.right &&\n touchendX > touchstartX + minDistance &&\n wrapper.right(wrapper);\n }\n\n if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {\n wrapper.up &&\n touchendY < touchstartY - minDistance &&\n wrapper.up(wrapper);\n wrapper.down &&\n touchendY > touchstartY + minDistance &&\n wrapper.down(wrapper);\n }\n};\n\n/**\n * # touchstart\n * @param event\n * @param wrapper\n */\nfunction touchstart(event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0];\n wrapper.touchstartX = touch.clientX;\n wrapper.touchstartY = touch.clientY;\n\n wrapper.start?.({ originalEvent: event, ...wrapper });\n}\n\n/**\n * # touchend\n * @param event\n * @param wrapper\n */\nfunction touchend(event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0];\n wrapper.touchendX = touch.clientX;\n wrapper.touchendY = touch.clientY;\n\n wrapper.end?.({ originalEvent: event, ...wrapper });\n\n handleGesture(wrapper);\n}\n\n/**\n * # touchmove\n * @param event\n * @param wrapper\n */\nfunction touchmove(event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0];\n wrapper.touchmoveX = touch.clientX;\n wrapper.touchmoveY = touch.clientY;\n\n wrapper.move?.({ originalEvent: event, ...wrapper });\n}\n\n/**\n * # createHandlers\n * @param value\n */\nfunction createHandlers(value: TouchHandlers = {}): TouchStoredHandlers {\n const wrapper = {\n touchstartX: 0,\n touchstartY: 0,\n touchendX: 0,\n touchendY: 0,\n touchmoveX: 0,\n touchmoveY: 0,\n offsetX: 0,\n offsetY: 0,\n left: value.left,\n right: value.right,\n up: value.up,\n down: value.down,\n start: value.start,\n move: value.move,\n end: value.end,\n };\n\n return {\n touchstart: (e: TouchEvent) => touchstart(e, wrapper),\n touchend: (e: TouchEvent) => touchend(e, wrapper),\n touchmove: (e: TouchEvent) => touchmove(e, wrapper),\n };\n}\n\ntype TouchableElement = HTMLElement & {\n _touchHandlers?: { [key: string | number]: TouchStoredHandlers };\n};\n\nfunction mounted(el: TouchableElement, binding: TouchDirectiveBinding) {\n const value = binding.value;\n const target = (value?.parent ? el.parentElement : el) as TouchableElement;\n const options = value?.options ?? { passive: true };\n const uid = binding.instance?.$.uid; // TODO: use custom uid generator\n\n if (!target || !uid) {\n return;\n }\n\n const handlers = createHandlers(binding.value);\n\n target._touchHandlers = target._touchHandlers ?? Object.create(null);\n target._touchHandlers![uid] = handlers;\n\n keys(handlers).forEach((eventName) => {\n target.addEventListener(eventName, handlers[eventName], options);\n });\n}\n\nfunction unmounted(el: HTMLElement, binding: TouchDirectiveBinding) {\n const target = (\n binding.value?.parent ? el.parentElement : el\n ) as TouchableElement;\n const uid = binding.instance?.$.uid;\n\n if (!target?._touchHandlers || !uid) {\n return;\n }\n\n const handlers = target._touchHandlers[uid];\n\n keys(handlers).forEach((eventName) => {\n target.removeEventListener(eventName, handlers[eventName]);\n });\n\n delete target._touchHandlers[uid];\n}\n\nexport const Touch = {\n mounted,\n unmounted,\n};\n\nexport default Touch;\n","<script setup lang=\"ts\">\n/**\n * EvWindow\n * ---\n */\nimport \"./EvWindow.scss\";\nimport {\n EvWindowGroupSymbol,\n EvWindowSymbol,\n makeEvWindowProps,\n} from \"./EvWindow.ts\";\nimport { useLocaleFunctions, useRtl } from \"@/composables/locale\";\nimport { GroupProps, useGroup } from \"@/composables/group\";\nimport { computed, provide, ref, shallowRef, watch } from \"vue\";\nimport { TouchHandlers, Touch } from \"@/directives\";\nimport { EvButton } from \"@/components/EvButton\";\nimport { IconValue } from \"@/composables/icons\";\n\nconst props = defineProps({\n ...makeEvWindowProps(),\n});\ndefineSlots<{\n default(): never;\n next(props: {\n props: {\n icon: IconValue;\n class: string;\n onClick: () => void;\n ariaLabel: string;\n };\n }): never;\n previous(props: {\n props: {\n icon: IconValue;\n class: string;\n onClick: () => void;\n ariaLabel: string;\n };\n }): never;\n}>();\n\nconst { isRtl } = useRtl();\nconst { t } = useLocaleFunctions();\nconst group = useGroup(props as any as GroupProps, EvWindowGroupSymbol);\nconst rootRef = ref();\nconst isRtlReverse = computed(() =>\n isRtl.value ? !props.reverse : props.reverse,\n);\nconst isReversed = shallowRef(false);\n\nconst transition = computed(() => {\n const axis = props.direction === \"vertical\" ? \"y\" : \"x\";\n const reverse = isRtlReverse.value ? !isReversed.value : isReversed.value;\n const direction = reverse ? \"-reverse\" : \"\";\n return `ev-window-${axis}${direction}-transition`;\n});\nconst transitionCount = shallowRef(0);\nconst transitionHeight = ref<undefined | string>(undefined);\n\nconst activeIndex = computed(() => {\n return group.items.value.findIndex((item) =>\n group.selected.value.includes(item.id),\n );\n});\n\nconst canMoveBack = computed(() => props.continuous || activeIndex.value !== 0);\nconst canMoveForward = computed(\n () =>\n props.continuous || activeIndex.value !== group.items.value.length - 1,\n);\n\nfunction previous() {\n lastAction = \"previous\";\n canMoveBack.value && group.previous();\n}\n\nfunction next() {\n lastAction = \"next\";\n canMoveForward.value && group.next();\n}\n\nconst touchOptions = computed(() => {\n if (props.touch === false) return props.touch;\n\n const options: TouchHandlers = {\n left: () => {\n isRtlReverse.value ? previous() : next();\n },\n right: () => {\n isRtlReverse.value ? next() : previous();\n },\n start: ({ originalEvent }) => {\n originalEvent.stopPropagation();\n },\n };\n\n return {\n ...options,\n ...(props.touch === true ? {} : props.touch),\n };\n});\n\nconst previousProps = computed(() => {\n return {\n icon: isRtl.value ? props.iconNext : props.iconPrevious,\n class: `ev-window--${isRtlReverse.value ? \"right\" : \"left\"}`,\n onClick: previous,\n ariaLabel: t(\"carousel.previous\"),\n };\n});\n\nconst nextProps = computed(() => {\n return {\n icon: isRtl.value ? props.iconPrevious : props.iconNext,\n class: `ev-window--${isRtlReverse.value ? \"left\" : \"right\"}`,\n onClick: next,\n ariaLabel: t(\"carousel.next\"),\n };\n});\n\n// explicit directive declaration\nconst vTouch = Touch;\n\nlet lastAction: \"next\" | \"previous\" | undefined;\nwatch(activeIndex, (newVal, oldVal) => {\n isReversed.value = isRtlReverse.value\n ? lastAction === \"next\" ||\n (lastAction !== \"previous\" && newVal > oldVal)\n : lastAction === \"previous\" ||\n (lastAction !== \"next\" && newVal < oldVal);\n lastAction = undefined;\n});\n\nprovide(EvWindowSymbol, {\n transition,\n isReversed,\n transitionCount,\n transitionHeight,\n rootRef,\n});\n\ndefineExpose({\n canMoveBack,\n canMoveForward,\n previous,\n next,\n});\n</script>\n\n<template>\n <component\n :is=\"props.tag\"\n ref=\"rootRef\"\n v-touch=\"touchOptions\"\n :class=\"[\n 'ev-window',\n {\n 'is-show-arrows-on-hover': props.showArrows === 'hover',\n },\n props.class,\n ]\"\n :style=\"props.style\">\n <div\n class=\"ev-window--container\"\n :style=\"{\n height: transitionHeight,\n }\">\n <slot name=\"default\" v-bind=\"{ group }\"></slot>\n\n <div v-if=\"props.showArrows !== false\" class=\"ev-window--controls\">\n <slot\n v-if=\"canMoveBack\"\n name=\"previous\"\n v-bind=\"{ props: previousProps }\">\n <ev-button v-bind=\"previousProps\" />\n </slot>\n <div v-else class=\"ev-window--control-placeholder\"></div>\n\n <slot\n v-if=\"canMoveForward\"\n name=\"next\"\n v-bind=\"{ props: nextProps }\">\n <ev-button v-bind=\"nextProps\" />\n </slot>\n <div v-else class=\"ev-window--control-placeholder\"></div>\n </div>\n </div>\n </component>\n</template>\n","import { propsFactory } from \"@/util\";\nimport { computed, Ref, shallowRef, watch } from \"vue\";\n\nexport const makeLazyProps = propsFactory(\n {\n eager: Boolean,\n },\n \"lazy\",\n);\n\n/**\n * # useLazy\n *\n * @param props\n * @param active\n */\nexport function useLazy(props: { eager: boolean }, active: Ref<boolean>) {\n const isBooted = shallowRef(false);\n const hasContent = computed(\n () => isBooted.value || props.eager || active.value,\n );\n\n watch(active, () => (isBooted.value = true));\n\n function onAfterLeave() {\n if (!props.eager) {\n isBooted.value = false;\n }\n }\n\n return { isBooted, hasContent, onAfterLeave };\n}\n","import { propsFactory } from \"@/util\";\nimport { makeComponentProps } from \"@/composables/component\";\nimport { makeGroupItemProps } from \"@/composables/groupItem\";\nimport { makeLazyProps } from \"@/composables/lazy\";\n\nexport const makeEvWindowItemProps = propsFactory(\n {\n reverseTransition: {\n type: [Boolean, String],\n default: undefined,\n },\n transition: {\n type: [Boolean, String],\n default: undefined,\n },\n\n ...makeComponentProps(),\n ...makeGroupItemProps(),\n ...makeLazyProps(),\n },\n \"EvWindowItem\",\n);\n","import { computed, onMounted, readonly, shallowRef } from \"vue\";\n\n/**\n * # useSsrBoot\n */\nexport function useSsrBoot() {\n const isBooted = shallowRef(false);\n\n onMounted(() => {\n window.requestAnimationFrame(() => {\n isBooted.value = true;\n });\n });\n\n const ssrBootStyles = computed(() =>\n !isBooted.value\n ? {\n transition: \"none !important\",\n }\n : undefined,\n );\n\n return { ssrBootStyles, isBooted: readonly(isBooted) };\n}\n","<script setup lang=\"ts\">\n/**\n * EvWindowItem\n */\nimport { computed, inject, nextTick, shallowRef } from \"vue\";\nimport { makeEvWindowItemProps } from \"./EvWindowItem\";\nimport { EvWindowGroupSymbol, EvWindowSymbol } from \"../EvWindow\";\nimport { EvTransition } from \"@/components/EvTransition\";\nimport { GroupItemProps, useGroupItem } from \"@/composables/groupItem\";\nimport { useSsrBoot } from \"@/composables/ssrBoot\";\nimport { isString, toWebUnit } from \"@/util\";\nimport { useLazy } from \"@/composables/lazy\";\n\nconst props = defineProps({\n ...makeEvWindowItemProps(),\n});\nconst window = inject(EvWindowSymbol);\nconst groupItem = useGroupItem(\n props as any as GroupItemProps,\n EvWindowGroupSymbol,\n);\nconst { isBooted } = useSsrBoot();\n\nif (!window || !groupItem) {\n throw new Error(\"Evance UI: EvWindowItem must be used inside EvWindow\");\n}\n\nconst isTransitioning = shallowRef(false);\nconst hasTransition = computed(\n () =>\n isBooted.value &&\n (window.isReversed.value\n ? props.reverseTransition !== false\n : props.transition !== false),\n);\n\n/**\n * ## onAfterTransition\n */\nfunction onAfterTransition() {\n if (!isTransitioning.value || !window) {\n return;\n }\n // Finalize transition state.\n isTransitioning.value = false;\n if (window.transitionCount.value > 0) {\n window.transitionCount.value -= 1;\n\n // Remove container height if we are out of transition.\n if (window.transitionCount.value === 0) {\n window.transitionHeight.value = undefined;\n }\n }\n}\n\n/**\n * ## onBeforeTransition\n */\nfunction onBeforeTransition() {\n if (isTransitioning.value || !window) {\n return;\n }\n // Initialize transition state here.\n isTransitioning.value = true;\n if (window.transitionCount.value === 0) {\n // Set initial height for height transition.\n window.transitionHeight.value = toWebUnit(\n window.rootRef.value?.clientHeight,\n );\n }\n window.transitionCount.value += 1;\n}\n\n/**\n * ## onTransitionCancelled\n */\nfunction onTransitionCancelled() {\n onAfterTransition(); // This should have the same path as normal transition end.\n}\n\n/**\n * ## onEnterTransition\n * @param el\n */\nfunction onEnterTransition(el: Element) {\n if (!isTransitioning.value) {\n return;\n }\n\n nextTick(() => {\n // Do not set height if no transition or cancelled.\n if (!hasTransition.value || !isTransitioning.value || !window) {\n return;\n }\n // Set transition target height.\n window.transitionHeight.value = toWebUnit(el.clientHeight);\n });\n}\n\nconst transition = computed(() => {\n const name = window.isReversed.value\n ? props.reverseTransition\n : props.transition;\n\n return !hasTransition.value\n ? false\n : {\n name: !isString(name) ? window.transition.value : name,\n onBeforeEnter: onBeforeTransition,\n onAfterEnter: onAfterTransition,\n onEnterCancelled: onTransitionCancelled,\n onBeforeLeave: onBeforeTransition,\n onAfterLeave: onAfterTransition,\n onLeaveCancelled: onTransitionCancelled,\n onEnter: onEnterTransition,\n };\n});\n\nconst { hasContent } = useLazy(props, groupItem.isSelected);\n</script>\n\n<template>\n <ev-transition :transition=\"transition\" :disabled=\"!isBooted\">\n <div\n v-show=\"groupItem.isSelected.value\"\n :class=\"['ev-window-item', props.class]\"\n :style=\"props.style\">\n <slot v-if=\"hasContent\" />\n </div>\n </ev-transition>\n</template>\n","import { EvDialogRenderer } from \"@/components/EvDialog/EvDialogRenderer\";\n\n/**\n * # EvDialogInstance\n */\nexport class EvDialogInstance {\n public constructor(private renderer: EvDialogRenderer) {}\n\n get data() {\n return this.renderer.data;\n }\n\n get id(): number {\n return this.renderer.id;\n }\n\n public close(response: any): void {\n this.renderer.close(response);\n }\n}\n","import {\n App,\n ComponentPublicInstance,\n h,\n mergeProps,\n render,\n shallowRef,\n VNode,\n VNodeProps,\n} from \"vue\";\nimport EvDialog from \"@/components/EvDialog/EvDialog.vue\";\nimport { EvDialogInstance } from \"@/components/EvDialog/EvDialogInstance\";\nimport { EvDialogServiceOptions } from \"./EvDialogServiceOpener\";\nimport { EvDialogSlots } from \"./EvDialog\";\n\n/**\n * # EvDialogInstance\n */\nexport class EvDialogRenderer {\n private app: App;\n public readonly id: number;\n private instance?: ComponentPublicInstance | null;\n private container?: HTMLDivElement;\n private modelValue = shallowRef(false);\n private options: EvDialogServiceOptions;\n private promiseResolver?: (value: unknown) => void;\n private isRendered = false;\n\n /**\n * @param app\n * @param id\n * @param options\n */\n public constructor(app: App, id: number, options: EvDialogServiceOptions) {\n this.app = app;\n this.id = id;\n this.options = options;\n }\n\n get data() {\n return this.options.data;\n }\n\n /**\n * ## close\n * @param response\n */\n public close(response: any) {\n this.promiseResolver?.(response);\n this.modelValue.value = false;\n }\n\n /**\n * ## createContainer\n * @private\n */\n private createContainer() {\n this.container = document.createElement(\"div\");\n this.container.id = `ev-dialog-instance-${this.id}`;\n document.querySelector(\"body\")!.appendChild(this.container);\n }\n\n /**\n * ## createProps\n * @private\n */\n private createProps() {\n const props = this.options.props ?? {};\n return mergeProps(props as VNodeProps, {\n modelValue: this.modelValue,\n onAfterLeave: () => this.onAfterLeave(),\n __instance: new EvDialogInstance(this),\n });\n }\n\n /**\n * ## createSlots\n *\n * Convert the slots provided in the instance options\n * into render functions.\n *\n * @private\n */\n private createSlots() {\n const internalSlots = this.options.slots ?? {};\n const renderedSlots: {\n [key: string]: (props: any, slots: any) => VNode;\n } = {};\n for (const key in internalSlots) {\n const component = internalSlots[key as keyof EvDialogSlots];\n renderedSlots[key] = (props, slots) => {\n return h(component!, props, slots);\n };\n }\n return renderedSlots;\n }\n\n /**\n * ## onAfterLeave\n * @private\n */\n private onAfterLeave() {\n const el = this.instance!.$el.parentNode;\n render(null, el);\n el.parentNode.removeChild(el);\n this.isRendered = false;\n }\n\n /**\n * ## open\n */\n public open() {\n this.modelValue.value = true;\n return new Promise((resolve) => {\n this.promiseResolver = resolve;\n });\n }\n\n /**\n * ## renderDialog\n * @private\n */\n public render() {\n if (this.isRendered) {\n return;\n }\n this.createContainer();\n const renderedDialog = h(\n EvDialog,\n this.createProps(),\n this.createSlots(),\n );\n renderedDialog.appContext = this.app._context;\n render(renderedDialog, this.container!);\n this.instance = renderedDialog.component!.proxy!;\n this.isRendered = true;\n }\n}\n","import { EvDialogRenderer } from \"@/components/EvDialog/EvDialogRenderer\";\nimport { EvDialogProps, EvDialogSlots } from \"./EvDialog\";\nimport { App, Component } from \"vue\";\n\nexport interface EvDialogServiceSlots\n extends Partial<Record<keyof EvDialogSlots, Component>> {}\n\nexport interface EvDialogServiceOptions {\n props?: EvDialogProps;\n slots?: EvDialogServiceSlots;\n data?: any;\n}\n\n/**\n * # EvDialogService\n */\nexport class EvDialogServiceOpener {\n private instanceId: number = 0;\n\n public constructor(private app: App) {}\n\n /**\n * ## open\n * @param options\n */\n public open(options: EvDialogServiceOptions) {\n const renderer = new EvDialogRenderer(\n this.app,\n ++this.instanceId,\n options,\n );\n renderer.render();\n return renderer.open();\n }\n}\n","import { App } from \"vue\";\nimport { EvDialogServiceSymbol } from \"@/composables/dialog\";\nimport { EvDialogServiceOpener } from \"@/components/EvDialog/EvDialogServiceOpener\";\n\n/**\n * # EvDialogService\n */\nexport default {\n install: (app: App) => {\n const service = new EvDialogServiceOpener(app);\n\n // For options API - use with `this.$dialog`\n app.config.globalProperties.$dialog = service;\n\n // For composition API - use with `useDialog()`\n app.provide(EvDialogServiceSymbol, service);\n },\n};\n","import { EvDrawerRenderer } from \"@/components/EvDrawer/EvDrawerRenderer\";\n\n/**\n * # EvDrawerInstance\n */\nexport class EvDrawerInstance {\n public constructor(private renderer: EvDrawerRenderer) {}\n\n get data() {\n return this.renderer.data;\n }\n\n get id(): number {\n return this.renderer.id;\n }\n\n public close(response: any): void {\n this.renderer.close(response);\n }\n}\n","import {\n App,\n ComponentPublicInstance,\n h,\n mergeProps,\n render,\n shallowRef,\n VNode,\n VNodeProps,\n} from \"vue\";\nimport EvDrawer from \"@/components/EvDrawer/EvDrawer.vue\";\nimport { EvDrawerInstance } from \"@/components/EvDrawer/EvDrawerInstance\";\nimport { EvDrawerServiceOptions } from \"./EvDrawerServiceOpener\";\nimport { EvDrawerSlots } from \"./EvDrawer\";\n\n/**\n * # EvDrawerInstance\n */\nexport class EvDrawerRenderer {\n private app: App;\n public readonly id: number;\n private instance?: ComponentPublicInstance | null;\n private container?: HTMLDivElement;\n private modelValue = shallowRef(false);\n private options: EvDrawerServiceOptions;\n private promiseResolver?: (value: unknown) => void;\n private isRendered = false;\n\n /**\n * @param app\n * @param id\n * @param options\n */\n public constructor(app: App, id: number, options: EvDrawerServiceOptions) {\n this.app = app;\n this.id = id;\n this.options = options;\n }\n\n get data() {\n return this.options.data;\n }\n\n /**\n * ## close\n * @param response\n */\n public close(response: any) {\n this.promiseResolver?.(response);\n this.modelValue.value = false;\n }\n\n /**\n * ## createContainer\n * @private\n */\n private createContainer() {\n this.container = document.createElement(\"div\");\n this.container.id = `ev-drawer-instance-${this.id}`;\n document.querySelector(\"body\")!.appendChild(this.container);\n }\n\n /**\n * ## createProps\n * @private\n */\n private createProps() {\n const props = this.options.props ?? {};\n return mergeProps(props as VNodeProps, {\n modelValue: this.modelValue,\n onAfterLeave: () => this.onAfterLeave(),\n __instance: new EvDrawerInstance(this),\n });\n }\n\n /**\n * ## createSlots\n *\n * Convert the slots provided in the instance options\n * into render functions.\n *\n * @private\n */\n private createSlots() {\n const internalSlots = this.options.slots ?? {};\n const renderedSlots: {\n [key: string]: (props: any, slots: any) => VNode;\n } = {};\n for (const key in internalSlots) {\n const component = internalSlots[key as keyof EvDrawerSlots];\n renderedSlots[key] = (props, slots) => {\n return h(component!, props, slots);\n };\n }\n return renderedSlots;\n }\n\n /**\n * ## onAfterLeave\n * @private\n */\n private onAfterLeave() {\n const el = this.instance!.$el.parentNode;\n render(null, el);\n el.parentNode.removeChild(el);\n this.isRendered = false;\n }\n\n /**\n * ## open\n */\n public open() {\n this.modelValue.value = true;\n return new Promise((resolve) => {\n this.promiseResolver = resolve;\n });\n }\n\n /**\n * ## render\n * @private\n */\n public render() {\n if (this.isRendered) {\n return;\n }\n this.createContainer();\n const renderedComponent = h(\n EvDrawer,\n this.createProps(),\n this.createSlots(),\n );\n renderedComponent.appContext = this.app._context;\n render(renderedComponent, this.container!);\n this.instance = renderedComponent.component!.proxy!;\n this.isRendered = true;\n }\n}\n","import { App, Component } from \"vue\";\nimport { EvDrawerRenderer } from \"@/components/EvDrawer/EvDrawerRenderer\";\nimport { EvDrawerProps, EvDrawerSlots } from \"./EvDrawer\";\n\nexport interface EvDrawerServiceSlots\n extends Partial<Record<keyof EvDrawerSlots, Component>> {}\n\nexport interface EvDrawerServiceOptions {\n props?: EvDrawerProps;\n slots?: EvDrawerServiceSlots;\n data?: any;\n}\n\n/**\n * # EvDrawerServiceOpener\n */\nexport class EvDrawerServiceOpener {\n private instanceId: number = 0;\n\n public constructor(private app: App) {}\n\n /**\n * ## open\n * @param options\n */\n public open(options: EvDrawerServiceOptions) {\n const renderer = new EvDrawerRenderer(\n this.app,\n ++this.instanceId,\n options,\n );\n renderer.render();\n return renderer.open();\n }\n}\n","import { App } from \"vue\";\nimport { EvDrawerServiceSymbol } from \"@/composables/drawer\";\nimport { EvDrawerServiceOpener } from \"@/components/EvDrawer/EvDrawerServiceOpener\";\n\n/**\n * # EvDialogService\n */\nexport default {\n install: (app: App) => {\n const service = new EvDrawerServiceOpener(app);\n\n // For options API - use with `this.$drawer`\n app.config.globalProperties.$drawer = service;\n\n // For composition API - use with `useDrawer()`\n app.provide(EvDrawerServiceSymbol, service);\n },\n};\n","import { App } from \"vue\";\nimport { EvNotificationsManager } from \"@/components/EvNotifications/EvNotificationsManager\";\nimport { EvNotificationServiceSymbol } from \"@/composables/notification\";\n\n/**\n * # EvNotificationService\n */\nexport default {\n install: (app: App) => {\n const service = new EvNotificationsManager();\n\n // For options API - use with `this.$dialog`\n app.config.globalProperties.$notification = service;\n\n // For composition API - use with `useDialog()`\n app.provide(EvNotificationServiceSymbol, service);\n },\n};\n","import {\r\n createDisplay,\r\n DisplayOptions,\r\n DisplaySymbol,\r\n SSROptions,\r\n} from \"./composables/display\";\r\nimport { Browser, getNextId, mergeDeep } from \"./util\";\r\nimport { App, nextTick } from \"vue\";\r\nimport { createLocaleManager, LocaleSymbol } from \"@/composables/locale\";\r\nimport { LocaleOptions } from \"@/modules/Locale/LocaleManager\";\r\nimport {\r\n createDate,\r\n DateAdapterSymbol,\r\n DateOptions,\r\n} from \"@/composables/date/date\";\r\nimport {\r\n createDefaults,\r\n DefaultsOptions,\r\n DefaultsSymbol,\r\n} from \"@/composables/defaults\";\r\nimport { ThemeOptions, createTheme, ThemeSymbol } from \"@/composables/theme\";\r\n\r\nexport * from \"./composables\";\r\nexport type { DateOptions, DateAdapterInstance } from \"@/composables/date\";\r\n\r\nexport interface EvanceUiOptions {\r\n blueprint?: Blueprint;\r\n components?: Record<string, any>;\r\n date?: DateOptions;\r\n defaults?: DefaultsOptions;\r\n directives?: Record<string, any>;\r\n display?: DisplayOptions;\r\n locale?: LocaleOptions; // & RtlOptions, // @todo: <--- YOU ARE HERE\r\n ssr?: SSROptions;\r\n services?: Record<string, any>;\r\n theme?: ThemeOptions;\r\n}\r\n\r\nexport interface Blueprint extends Omit<EvanceUiOptions, \"blueprint\"> {}\r\n\r\n// Added to prevent strict errors\r\ninterface NuxtApp {\r\n hook: (hook: string, callback: () => void) => void;\r\n}\r\n\r\n/**\r\n * # Create Evance UI\r\n * @param evanceUi\r\n */\r\nexport function createEvanceUi(evanceUi: EvanceUiOptions = {}) {\r\n const { blueprint, ...rest } = evanceUi;\r\n const options: EvanceUiOptions = mergeDeep(blueprint, rest);\r\n\r\n const { components = {}, directives = {}, services = {} } = options;\r\n\r\n const defaults = createDefaults(options.defaults);\r\n const display = createDisplay(options.display, options.ssr);\r\n const locale = createLocaleManager(options.locale ?? {}); // @todo: <--- YOU ARE HERE!\r\n const date = createDate(options.date, locale);\r\n const theme = createTheme(options.theme);\r\n\r\n const install = (app: App) => {\r\n // Install Directives\r\n for (const key in directives) {\r\n app.directive(key, directives[key]);\r\n }\r\n\r\n // Install Components\r\n for (const key in components) {\r\n app.component(key, components[key]);\r\n }\r\n\r\n // Install Services\r\n for (const key in services) {\r\n app.use(services[key]);\r\n }\r\n\r\n // Add default `provide` symbols\r\n app.provide(DefaultsSymbol, defaults);\r\n app.provide(DisplaySymbol, display);\r\n app.provide(LocaleSymbol, locale);\r\n app.provide(DateAdapterSymbol, date);\r\n app.provide(ThemeSymbol, theme);\r\n\r\n if (Browser.hasWindow && options.ssr) {\r\n if (\"$nuxt\" in app) {\r\n (app.$nuxt as NuxtApp).hook(\"app:suspense:resolve\", () => {\r\n display.update();\r\n });\r\n } else {\r\n const { mount } = app;\r\n app.mount = (...args) => {\r\n const vm = mount(...args);\r\n nextTick(() => display.update());\r\n app.mount = mount;\r\n return vm;\r\n };\r\n }\r\n }\r\n\r\n getNextId.reset();\r\n };\r\n\r\n return {\r\n install,\r\n defaults,\r\n display,\r\n locale,\r\n date,\r\n };\r\n}\r\n","import \"./css/core.scss\";\r\nimport \"./css/runtime.scss\";\r\n\r\nimport * as components from \"./components\";\r\nimport * as directives from \"./directives\";\r\nimport * as services from \"./services\";\r\nimport { createEvanceUi as _createEvanceUi } from \"./framework\";\r\n\r\nimport type { EvanceUiOptions } from \"./framework\";\r\n\r\nexport const createEvanceUi = (options: EvanceUiOptions = {}) => {\r\n return _createEvanceUi({ components, directives, services, ...options });\r\n};\r\n\r\nexport { components, directives, services };\r\n\r\nexport * from \"./composables\";\r\nexport * from \"./components\";\r\nexport * from \"./directives\";\r\nexport * from \"./services\";\r\nexport * from \"./util\";\r\n"],"names":["Anchor","side","alignment","selector","isRtl","anchor","is","a","b","isArray","value","isBoolean","isCssVariable","isString","isDate","isDateEqual","isDeepEqual","keysInA","keysInB","key","isElement","el","isEmpty","isEqualNaN","isFunction","isNumber","isObject","isObjectNotArray","isOnPattern","isOn","isPrimitive","isShadowRoot","isTypeOf","accept","animate","keyframes","options","animateFinished","animation","resolve","reject","clickBlockedAnimation","clean","frames","requestNewFrame","callback","run","raf","frame","easingStandard","easingDecelerate","easingAccelerate","propsFactory","props","source","defaults","obj","prop","definition","makeClassName","prefix","exclude","exclusion","kebabValue","toKebabCase","sizeModifier","appearanceModifier","variantModifier","Appearance","Variant","makeAppearanceProps","useAppearance","group","isActive","defaultVariant","appearanceName","computed","appearance","unref","appearanceClass","variantName","variant","variantClass","InputAppearance","makeInputAppearanceProps","InputSize","makeInputSizeProps","TextAlign","makeTextAlignProps","TextAppearance","makeTextAppearanceProps","useTextAppearance","randomArrayItem","array","emptyValue","randomIndex","getScrollParent","isIncludeHidden","axis","isScrollable","hasScrollbar","getScrollParents","stopAt","elements","style","hasScrollbarX","hasScrollbarY","EventProp","callEvent","eventHandler","args","handlerElement","eventName","propName","focusableElements","focusChild","position","focusedElement","getFocusableChildren","index","lastElement","lastIndex","increment","filterByTabIndex","selectors","hasEventListener","name","capitalize","addScrollEventListener","onScroll","scrollElements","onScopeDispose","getPrefixedEventHandlers","attrs","suffix","getData","acc","event","handlers","bindProps","k","handler","v","n","fn","_handler","unbindProps","_Browser","__publicField","_b","_a","Browser","findChildren","vnode","child","findChildrenWithProvide","focusableChildren","targets","s","getCurrentComponent","callee","component","getCurrentInstance","consoleWarn","message","consoleError","axes","Rect","x","y","width","height","offset","rect","beforeTransforms","adjustedBoundingRect","tx","ta","sx","sy","dx","dy","to","w","h","getTargetRect","target","getOuterHeight","element","margin","getOuterWidth","getViewport","win","d","e","g","currentId","assignedIds","getNextId","id","getPropertyValue","subject","property","fallback","getPropertyValueByPath","getNestedPropertyValue","objectPath","propertyKeys","objectPathToPropertyKeys","setPropertyValueByPath","lastValue","path","refElement","splitObject","paths","matching","remaining","splitInputAttrs","clamp","min","max","destructComputed","getter","refs","reactive","base","watchEffect","toRefs","getPropertyDescriptor","currentObj","descriptor","filterComponentProps","wrapInArray","mergeDeep","arrayFn","out","sourceProperty","targetProperty","createRange","length","start","omit","clone","matchesSelector","keys","debounce","delay","timeoutId","wrap","applyDefaults","result","injectSelf","provides","isFixedPosition","KeyLogger","isKeyEventLoggable","now","isPrintableChar","noModifier","compositionIgnoreKeys","isComposingIgnoreKey","mathEval","expression","ops","output","operators","tokens","regex","match","prevToken","i","token","next","op","stack","IntegerishPattern","isIntegerish","splitNumberToParts","formatter","parts","integers","fraction","end","counts","nextIndex","type","generateKey","valueAsString","parsedInteger","parsedDecimal","part","integer","integerPart","VueInstance","setVueInstance","Vue","registerPlugin","app","plugin","registerComponent","spaceSeparatedValues","values","toCamelCase","camelValue","_","createStringTemplate","template","defaultVariables","variablePattern","variables","dictionary","raw","variable","padEnd","str","char","padStart","trimEnd","targetString","trimChars","toFixedPosition","toWebUnit","unit","pixelRound","pixelCeil","extractWebUnit","makeComponentProps","TranslationCode","languageCode","countryCode","code","matches","LocaleCode","codes","_DefaultDateAdapter","date","amount","parsed","formatString","newDate","customFormat","comparing","c","weeks","currentWeek","firstDayOfMonth","lastDayOfMonth","firstDayWeekIndex","lastDayWeekIndex","adjacentDay","day","firstSundayOf2023","daysFromSunday","weekday","range","year","month","DefaultDateAdapter","DateAdapterSymbol","createDate","locale","instance","watch","useDate","inject","DefaultsSymbol","createDefaults","ref","injectDefaults","provideDefaults","injectedDefaults","providedDefaults","newDefaults","scoped","reset","root","properties","len","provide","propIsDefined","internalUseDefaults","componentDefaults","internalProps","propValue","_d","_c","subcomponentDefaults","shallowRef","subComponents","provideSubDefaults","injected","useDefaults","_props","EvDialogServiceSymbol","EvDialogInstanceSymbol","useDialog","dialogService","injectDialog","provideDialog","makeDimensionsProps","useDimensions","breakpoints","parseDisplayOptions","defaultDisplayOptions","getClientWidth","ssr","getClientHeight","getPlatform","userAgent","isUserAgent","regexp","DisplaySymbol","createDisplay","thresholds","mobileBreakpoint","platform","state","updateSize","update","hasActiveRule","rules","rulesInternal","toDisplayRuleArray","rule","isDisplayRule","displayKey","toDisplayStateKey","xs","sm","md","lg","xl","xxl","breakpointValue","mobile","useDisplay","display","displayRules","displayRulesKebab","calculateDisplayRuleValue","ruleKey","displayState","isRef","displayRule","isDisplayBreakpoint","toDisplayRuleKebab","acceptKebabs","useBreakpointClasses","useXs","classes","breakpoint","className","useDisplayRuleClasses","EvDrawerServiceSymbol","EvDrawerInstanceSymbol","useDrawer","service","injectDrawer","provideDrawer","_hoisted_1","_hoisted_3","_createElementVNode","render","_ctx","_cache","_openBlock","_createElementBlock","ArrowBackIcon","ArrowContinueIcon","ArrowDownIcon","ArrowUpIcon","_hoisted_4","CalendarIcon","CancelIcon","CheckCircleIcon","CheckIcon","ChevronDownIcon","ChevronLeftIcon","ChevronRightIcon","ChevronUpIcon","DangerIcon","DotIcon","FilterIcon","HelpIcon","ImageIcon","InfoIcon","KbdArrowDownIcon","KbdArrowLeftIcon","KbdArrowRightIcon","KbdArrowUpIcon","KbdBackspaceIcon","KbdCommandIcon","KbdControlIcon","KbdOptionIcon","KbdReturnIcon","KbdShiftIcon","KbdSpaceIcon","KbdTabIcon","MinusIcon","NoteIcon","PlusIcon","QuickfindIcon","SearchIcon","TimeIcon","WarningIcon","IconProp","appearanceIcon","Localized","defaultLocale","currentLocale","translationCodes","NumberFormatter","pluralizationRuleKeys","isPluralizationKey","isPluralizationRules","val","Translatable","translationCode","reference","data","keyToPluralize","text","LanguagePack","translationData","Translator","messages","translatableKey","translatable","languagePack","packs","pack","en","LocaleManager","localeOptions","localeCode","LocaleSymbol","createLocaleManager","useLocaleManager","localeManager","useLocaleFunctions","manager","useRtl","rtlClasses","useToggleScope","scope","effectScope","watchCallback","active","watchOptions","hasProp","vueInstance","useModelProxy","modelName","defaultValue","transformIn","transformOut","modelRef","modelNameKebab","isCheckKebabName","isModelAvailable","model","externalValue","internalValue","newValue","toRaw","EvNotificationServiceSymbol","injectNotifications","useNotification","slots","makeTagProps","ThemeSymbol","makeThemeProps","defaultThemeOptions","parseThemeOptions","createTheme","parsedOptions","themeClasses","provideTheme","theme","newTheme","useTheme","keyAliasMap","normalizeKey","lowerKey","splitKeyCombination","combination","isInternal","emptyResult","separators","buffer","flushBuffer","separator","nextChar","splitKeySequence","hasInvalidStart","hasInvalidEnd","prevChar","prevPrevChar","collapsed","minusCount","useHotkey","inputs","preventDefault","sequenceTimeout","isMac","timeout","keyGroups","isSequence","groupIndex","isInputFocused","toValue","activeElement","resetSequence","matchesKeyGroup","cleanup","newKeys","groups","newEvent","oldEvent","modifiers","actualKey","parseKeyGroup","expectCtrl","expectMeta","MODIFIERS","m","makeEvAppProps","appThemeClasses","bodyThemeClasses","oldValue","onMounted","Size","predefinedSizes","makeSizeProps","useSize","sizeClasses","sizeStyles","makeRoundedProps","useRounded","rounded","makeEvAvatarProps","IconAppearance","useIcon","makeEvIconProps","definedProps","useAttrs","iconColor","iconGlyph","makeAspectRatioProps","useAspectStyles","parseAspectRatio","ratio","num","makeEvResponsiveProps","makeEvTransitionProps","useEvTransition","defaultTransition","EvTransition","transition","disabled","remainingProps","Transition","customProps","transitionProps","mergeProps","makeEvImgProps","_useSlots","aspectStyles","dimensionStyles","currentSrc","image","naturalWidth","naturalHeight","normalisedSrc","imgSrc","aspectRatio","objectFitClasses","getSrc","img","init","isIntersecting","lazyImg","pollForSize","nextTick","emit","onError","onLoad","timer","poll","imgHeight","imgWidth","oldVal","onBeforeMount","windowWidth","onWindowResize","onBeforeUnmount","newWidth","oldWidth","isBooted","stop","isLoaded","responsiveProps","EvResponsive","imgProps","stateClass","roundedClasses","makePositionProps","oppositeMap","usePosition","opposite","getOffset","styles","makeEvBadgeProps","modelValue","contentNumber","content","positionStyles","isInline","makeEvBannerProps","isClickableLink","isRouterLinkOrHref","makeRouterLinkOrHrefProps","useRouterLinkOrHref","routerLink","resolveDynamicComponent","isLink","isClickable","toRef","link","isTransitioning","useBackButton","router","isPopped","removeBefore","removeAfter","onPopState","from","makeGroupProps","getItemIndex","items","ids","getIds","item","itemByIndex","getValues","itemIndex","useGroup","injectKey","isUnmounted","selected","groupComponent","register","itemComponent","unwrapped","unregister","forceMandatoryValue","select","isSelected","step","currentIndex","newIndex","newItem","makeEvButtonGroupProps","EvButtonSelectSymbol","makeEvButtonSelectProps","makeGroupItemProps","useGroupItem","required","selectedClass","selectedAppearance","selectedVariant","makeEvButtonProps","defaultSize","defaultRotation","container","defaultRadius","getSizeWithUnits","getCircumference","getRadius","getContainerWidth","getProgressOffset","getThickness","getRotation","maxThickness","thickness","useSelectLink","isDisabled","isIconLike","icon","componentElement","onClick","valueAttr","__expose","iconStart","iconEnd","parsedItems","gapClass","buttonSize","EvTextSize","EvTextSizeClass","makeEvTextProps","sizeClass","truncateClass","maxLines","weightClass","t","modelProxy","actions","action","actionDefaults","dismiss","previous","groupProps","EvButtonGroup","slotProps","EvButtonSwitchSymbol","makeEvButtonSwitchProps","selection","label","makeEvCardActionsProps","justifyClass","makeEvCardContentProps","EvHeadingSize","EvHeadingTag","EvHeadingClass","makeEvHeadingProps","tag","makeEvEyebrowProps","textItems","textProps","descriptionSize","makeEvCardProps","makeElevationClass","elevation","makeEvSurfaceProps","dimensions","makeRoundedClass","makeScrollableClass","scrollable","actionProps","contentProps","hasActions","hasContent","makeFocusProps","useAutofocus","Form","errors","field","valid","results","fieldErrors","fieldError","FormKey","makeFormProps","createForm","form","useForm","FormField","internalModel","unwatch","propErrors","set","validator","silent","makeFormFieldProps","useFormField","makeLabelProps","makeEvLabelProps","makeEvCheckboxProps","useToggleControl","trueValue","falseValue","isMultiple","isChecked","currentValue","makeEvErrorsProps","containerRef","inputRef","containerAttrs","inputAttrs","formField","indeterminate","getInputElement","onInput","makeEvCodeProps","makeEvDataTableRowProps","makeEvDataTableCellProps","alignClass","singleSelectStrategy","isRequired","multiSelectStrategy","allItems","nullSelectStrategy","makeDataTableSelectProps","EvDataTableSelectionSymbol","provideSelection","showSelect","lastToggledItem","allSelectable","selectStrategy","isSomeSelected","toggleSelect","shiftPressed","isItemSelected","rangeItems","isLastSelected","allOpposite","selectAll","someSelected","allSelected","showSelectAll","useSelection","makeDataTableHeaderProps","EvDataTableHeadersSymbol","priorityQueue","arr","queue","priority","added","count","whole","extractLeaves","columns","getDepth","depth","parseFixedColumns","seenFixed","setFixed","parentFixed","setFixedOffset","fixedOffset","parse","maxDepth","headers","currentDepth","rowSize","row","diff","sort","convertToInternalHeaders","internalHeaders","defaultItem","internalItem","createHeaders","sortFunctions","filterFunctions","flatHeaders","header","useHeaders","isItemSelectable","onCheckboxClick","onMouseDown","onMouseUp","makeDataTableSortProps","useSortOptions","sortSelected","hasSort","isTitleDisabled","title","getItemsByTitle","option","sortOptions","getTitleFromValue","isAscending","sortTitleOptions","titles","sortTitleSelected","sortTitle","sortDirectionOptions","onSortTitleSelected","newOption","sortIcon","makeEvDataTableSearchProps","makeEvDefaultsProviderProps","hasSlotWithContent","slotName","slot","node","useSlots","hasDefaultSlot","borderColor","borderOpacity","borderStyle","borderWidth","classNames","ListKey","createList","parent","useList","makeListItemsProps","lastItemKey","transformItem","children","itemProps","transformedItemProps","transformItems","listItems","useItems","hasNullItem","cascadeLeaf","strategy","parents","original","childrenIds","everySelected","cid","noneSelected","map","multiAny","selectFn","reducer","on","selections","multiLeaf","parentStrategy","rest","singleAny","singleSelection","singleLeaf","makeSelectedProps","useSelectStrategy","useSelectedValues","singleOpenStrategy","opened","newOpened","multipleOpenStrategy","listOpenStrategy","makeOpenStrategyProps","useOpenStrategy","EvNestedSymbol","emptyNestedList","makeNestedProps","useNestedList","openStrategy","getPath","nested","newSelected","parentId","isGroup","list","useNestedListItem","idSymbol","idComputed","idValue","open","makeEvListProps","makeEvListChildrenProps","makeEvListItemProps","ExpandTransitionGenerator","expandedParentClass","sizeProperty","offsetProperty","camelize","onAfterLeave","resetStyles","size","initialStyle","isLoading","hasChildren","isOpen","isActiveExact","itemElement","tabIndex","onKeyDown","hasClickListener","titleProps","toDisplayString","subtitleProps","parsedActions","parsedActionsOnHover","hasActionsOnHover","showCaret","onClickOpener","makeEvSectionProps","isFocused","lastFocus","tabindex","onFocus","focus","onFocusIn","onFocusOut","makeDelayOpenCloseProps","useDelayOpenClose","delays","createDelay","isOpening","duration","EvMenuSymbol","makeActivatorProps","useActivator","isTopOfStack","Activator","delayOpen","delayClose","events","menu","canOpenHover","canOpenFocus","activator","ActivatorWatcher","activatorProps","connectedPositionStrategy","contentStyles","pointerStyles","ConnectedPosition","ZoneCalculator","newActivatorEl","newContentEl","oldActivatorEl","oldContentEl","preferredPosition","preferredOrigin","origin","scrollParents","contentEl","viewportRect","currentRect","elRect","isDocEl","scrollRect","zones","placement","autoZone","zone","divider","pointerDimensions","pointerOffsetX","pointerOffsetY","rotation","positions","newPosition","dimension","Zone","viewport","offsetSide","offsetAlign","sides","alignments","sideAttrs","align","alignAttrs","rectProps","zoneA","zoneB","staticPositionStrategy","positionStrategies","makePositionStrategyProps","usePositionStrategies","updatePosition","onResize","positionStrategyFn","blockScrollStrategy","offsetParent","scrollbarWidth","scrollableParent","closeScrollStrategy","repositionScrollStrategy","slow","ric","cb","scrollStrategies","makeScrollStrategyProps","useScrollStrategies","makeEvOverlayProps","getChildren","els","getDimensions","targetBox","elBox","elStyle","originX","originY","anchorSide","anchorOffset","offsetX","offsetY","targetScaleX","targetScaleY","maxScale","scaleX","scaleY","screenPercentage","speedFactor","onBeforeEnter","onEnter","done","onAfterEnter","onBeforeLeave","onLeave","makeEvMenuProps","EvMenuTransition","useTeleport","targetValue","targetElement","containerElement","StackSymbol","globalStack","getComponentIndex","stackEntry","getLastZIndex","getNextZIndex","lastZIndex","isTopComponent","useStack","zIndex","isDisableGlobalStack","isCreateStackEntry","parentStack","zIndexRef","isTopGlobal","isTop","isTopLocal","readonly","useScopeId","scopeId","useRouter","containerEl","pointerEl","contentTransition","isActiveContent","stackStyles","activatorEl","activatorRef","activatorEvents","contentEvents","veilEvents","teleportTarget","isActiveVeil","isActiveTeleport","clickOutsideCondition","focusActivator","clickOutsideDirectiveArgs","onClickOutside","onKeydown","top","scrollParent","activatorSlot","contentAttributes","overlayAttributes","uid","overlay","openChildren","onActivatorKeydown","overlayProps","EvOverlay","EvSlideGroupSymbol","makeEvSlideGroupProps","useResizeObserver","box","resizeRef","contentRect","observer","entries","bias","calculateUpdatedOffset","selectedElement","containerSize","contentSize","currentScrollOffset","isHorizontal","clientSize","offsetStart","adjustedOffsetStart","totalSize","itemOffset","additionalOffset","calculateCenteredOffset","offsetCentered","isOverflowing","scrollOffset","disableTransition","containerRect","contentRef","firstSelectedIndex","lastSelectedIndex","location","_e","onFocusin","onFocusout","startTouch","startOffset","onTouchstart","onTouchmove","sign","onTouchend","maxScrollOffset","scrollTo","newAbsoluteOffset","arrowsHiddenClasses","arrowsHiddenAttribute","scrollAmount","hasPrevious","hasNext","hasAffix","arrowsAlignClass","iconNext","iconPrevious","slideGroupItem","makeEvTextfieldProps","getPercentageTranslation","getSizeHeight","isSizeNumeric","isClearable","onClearableClick","$event","onClearableMousedown","onControlClick","onControlMousedown","vAutofocus","autocompleteProp","dataFormTypeProp","makeEvTooltipProps","overlayRef","createJavaScriptTransition","functions","mode","EvTransitionExpand","EvTransitionExpandX","filtersBreakpoint","sortBreakpoint","sortButtonRef","filterButtonRef","search","searchInternal","containerWidth","showFilters","onClickFilter","placeholder","updateSearch","showActions","hasSelectActions","isFiltersMobile","filterDefaults","sortButtonTitle","isFiltered","onSearchInternal","onUnmounted","UP","DOWN","BUFFER_PX","makeVirtualProps","useVirtual","itemHeight","first","last","paddingTop","paddingBottom","markerRef","markerOffset","viewportHeight","hasInitialRender","sizes","offsets","updateTime","targetScrollIndex","getSize","updateOffsets","calculateVisibleItems","scrollToIndex","handleItemResize","prevHeight","prevMinHeight","calculateOffset","calculateIndex","scrollTop","binaryClosest","lastScrollTop","scrollVelocity","lastScrollTime","handleScroll","scrollTime","handleScrollend","_calculateVisibleItems","direction","startPx","endPx","topOverflow","bottomOverflow","computedItems","high","low","mid","makeDataTableItemsProps","selectable","itemColumns","column","useDataTableItems","makeEvDataTableProps","makeEvVirtualScrollProps","makeEvVirtualScrollItemProps","makeEvInfiniteScrollProps","isError","isFinished","isManual","useIntersectionObserver","intersectionRef","entry","rootEl","startStatus","endStatus","previousScrollSize","hasStartIntersect","hasEndIntersect","intersectMode","getContainerSize","getScrollAmount","getScrollSize","getStatus","handleIntersectDelayed","intersecting","handleIntersect","_isIntersecting","status","setStatus","setScrollAmount","sideProps","itemsModel","pageModel","totalColumns","sortModel","searchModel","infiniteScrollRef","infiniteScrollDisabled","searchProps","EvDataTableSearch","spaceAbove","spaceBelow","loadFirstPage","nextPage","setPageItems","isLastPage","resetScroll","onInfiniteScrollLoad","colStyle","makeEvDatePickerMonthProps","dateAdapter","displayValue","weeksInMonth","days","daysInMonth","lastDay","week","today","isoDate","isAdjacent","isInRange","isRangeStart","isRangeEnd","allowedDate","getDayAppearance","getDayVariant","startDate","endDate","makeEvDatePickerYearsProps","offsetMin","offsetMax","currentYear","minYear","maxYear","years","listRef","scrollIntoView","selectedEl","makeEvDatePickerProps","makeEvDatePickerMonthsProps","months","getAppearance","getVariant","makeEvContainerProps","hiddenClasses","hiddenAttribute","heightStyles","widthStyles","makeEvLayoutProps","alignItemsClasses","alignContentClasses","justifyContentClasses","gutterClasses","gapClasses","makeEvBlockProps","orderClasses","offsetClasses","alignSelfClasses","makeEvSpacerProps","isReversing","before","after","viewMode","monthProps","EvDatePickerMonth","monthText","toggleViewMonth","yearProps","EvDatePickerYears","yearText","toggleViewYear","minDate","maxDate","onClickNext","onClickPrevious","makeEvDateFieldProps","evMenuRef","evTextfieldRef","evTextfieldProps","EvTextfield","datePickerRef","datePickerProps","EvDatePicker","isMenuOpen","onMenuAfterLeave","onFieldFocus","onFieldBlur","onDatePickerFocusIn","onUpdateModelValue","onClearInput","setModelValue","makeEvDialogTransitionProps","targetRect","tsx","tsy","maxs","asa","speed","makeEvDialogProps","EvDialogTransition","DialogSize","DialogSizeToWidth","makeEvDialogBodyProps","paddingClass","_sfc_render","makeEvToolbarProps","makeEvTabProps","EvTabsSymbol","makeEvTabsProps","buttonProps","EvButton","sliderEl","updateSlider","prevEl","nextEl","color","prevBox","nextBox","xy","XY","rightBottom","widthHeight","prevPos","nextPos","delta","scale","initialScale","sigma","parseItems","slideGroupProps","EvSlideGroup","alignTabsClass","hasBackButton","hasCloseButton","hasPrefix","onBackClick","onCloseClick","tab","tabSize","actionSize","isAdjustStart","isAdjustEnd","makeEvDialogHeaderProps","close","closeable","toolbarProps","EvToolbar","isFullscreen","headerProps","separatedProps","suppliedProps","bodyProps","previousEl","targetEl","focusable","firstEl","lastEl","dragging","lastPageX","lastPageY","documentDragListener","documentDragEndListener","initDrag","bindGlobalListeners","unbindGlobalListeners","bindDocumentDragListener","bindDocumentDragEndListener","deltaX","deltaY","leftPos","topPos","containerComputedStyle","marginLeft","marginTop","unbindDocumentDragListener","unbindDocumentDragEndListener","makeEvDrawerProps","dialogProps","EvDialog","dialogRef","positionClass","overlayWidth","makeEvEmptyStateProps","buttonSizes","imgSizes","headingProps","iconProps","imageProps","hasMedia","hasHeading","makeEvFieldHelpProps","isShow","makeEvFilterButtonProps","filterTitles","makeEvFormProps","formRef","onReset","onSubmit","ready","makeEvFormHelpProps","hotkeyMap","makeEvHotkeyProps","KbdVariant","makeEvKbdProps","AND_DELINEATOR","SLASH_DELINEATOR","THEN_DELINEATOR","keyCombinations","sequenceGroups","keyParts","j","applyDisplayModeToKey","keyMap","processKey","config","requestedMode","keyCfg","isDivider","getDivider","accessibleLabel","shortcutText","readableParts","makeEvLinkProps","LinkExternalIcon","makeEvLozengeProps","isMaxWidthNumeric","maxWidthOuter","makeEvMessageProps","hasActionSlot","isExpanded","showExpandable","expand","makeEvNotificationProps","messageProps","EvMessage","startTimer","stopTimer","EvNotificationsManager","renderedProps","renderedSlots","internalSlots","notification","notifications","makeEvNumberProps","digits","current","newVal","stackStyle","allParts","isDigitPart","makeEvNumberFieldProps","NumberParser","filteredText","parsedValue","incrementRate","incrementDelay","numberParser","inputValue","minimum","maximum","incrementAmount","incrementInterval","isIncrementing","getDecimalPlaces","getValue","isMinBoundary","isMaxBoundary","decimalPlaces","onBlur","onInputKeydown","startIncrementing","isPaste","onInputKeyup","stopIncrementing","onPaste","startTime","internalIncrementAmount","elapsedTime","multiplier","hasSuffix","iconSize","makeEvRadioProps","EvRadioGroupSymbol","makeEvRadioGroupProps","valueComparator","onSpace","defaultFilter","query","makeFilterProps","filterItems","filter","customFiltersLength","loop","transformed","customMatches","defaultMatches","filterKeys","keyFilter","defaultMatchesLength","customMatchesLength","useFilter","filteredItems","filteredMatches","transformedItems","_query","strQuery","originalItems","_filteredItems","_filteredMatches","getMatches","makeEvSelectProps","useScrolling","textFieldRef","isScrolling","scrollTimeout","onListScroll","finishScrolling","onListKeydown","bottom","toggleEventListeners","add","method","makeEvTagProps","EvTagGroupSymbol","makeEvTagGroupProps","closeLabel","onClickClose","hasFilter","defaultSlotProps","hasPrefixMedia","hasSuffixMedia","isPristine","isSearchable","listHasFocus","isSelecting","menuOpenProxy","isMenuDisabled","evListRef","evVirtualScrollRef","displayItems","filteredItem","selectionIndex","keyLogger","highlightFirst","onListFocusIn","onListFocusOut","onListMouseDown","onFieldChange","onFieldClear","onFieldInput","onFieldKeydown","preventKeys","openerKeys","escapeKeys","keydownBehaviorSelect","selectionStart","originalSelectionIndex","selectedItem","scrollIndex","onFieldMousedown","fieldValue","onModelValueUpdate","itemRef","createTagProps","lastSelectedItem","validationValue","isPlaceholder","makeEvSwitchProps","makeEvTextareaProps","resize","onKeyup","onKeyupEnter","onUpdated","thumbnailPresets","makeEvThumbnailProps","skeletonPresets","makeEvSkeletonProps","computedProps","preset","presetDefaults","presetProps","typeClass","presets","combined","numericHeight","EvImg","makeEvTimeFieldProps","makeEvTimePickerProps","makeEvTimePickerHoursProps","hoursInDay","is24Hour","displayHour","value24","hour","onClickHour","hasModelValue","makeEvTimePickerMinutesProps","displayMinutes","minute","minutes","onClickMinutes","inferTimeFormat","normalizeTimeToDate","serializeDateToTime","format","pad","displayTimeFromDate","period","inferredFormat","hourFormat","onClickPeriod","modifier","hours","numberFormat","pickerValue","timePickerRef","normalizeTimeInput","hoursRaw","minutesRaw","onUpdatePickerValue","isSelectAll","getSelectedLength","input","EvWindowSymbol","EvWindowGroupSymbol","makeEvWindowProps","getRoot","binding","isEventOutside","onClickHandler","handleCallback","clickOutside","onMousedown","mounted","_observe","unmounted","observe","Intersect","SlotsDirective","subComponentVNode","handleGesture","wrapper","touchstartX","touchendX","touchstartY","touchendY","dirRatio","minDistance","touchstart","touch","touchend","touchmove","createHandlers","Touch","rootRef","isRtlReverse","isReversed","transitionCount","transitionHeight","activeIndex","canMoveBack","canMoveForward","lastAction","touchOptions","originalEvent","previousProps","nextProps","vTouch","makeLazyProps","useLazy","makeEvWindowItemProps","useSsrBoot","window","groupItem","hasTransition","onAfterTransition","onBeforeTransition","onTransitionCancelled","onEnterTransition","EvDialogInstance","renderer","response","EvDialogRenderer","renderedDialog","EvDialogServiceOpener","dialog","EvDrawerInstance","EvDrawerRenderer","renderedComponent","EvDrawer","EvDrawerServiceOpener","drawer","createEvanceUi","evanceUi","blueprint","components","directives","services","mount","vm","_createEvanceUi"],"mappings":"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"}
|