sit-onyx 1.0.0-beta.99 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -5
- package/dist/components/OnyxAccordion/OnyxAccordion.d.vue.ts +26 -0
- package/dist/components/OnyxAccordion/types.d.ts +45 -0
- package/dist/components/OnyxAccordionItem/OnyxAccordionItem.d.vue.ts +37 -0
- package/dist/components/OnyxAccordionItem/types.d.ts +17 -0
- package/dist/components/OnyxAlertModal/OnyxAlertModal.d.vue.ts +69 -0
- package/dist/components/OnyxAlertModal/types.d.ts +8 -0
- package/dist/components/OnyxAppLayout/OnyxAppLayout.d.vue.ts +50 -0
- package/dist/components/OnyxAppLayout/types.d.ts +3 -1
- package/dist/components/OnyxAvatar/OnyxAvatar.d.vue.ts +5 -0
- package/dist/components/OnyxAvatar/types.d.ts +16 -4
- package/dist/components/OnyxAvatarStack/{OnyxAvatarStack.vue.d.ts → OnyxAvatarStack.d.vue.ts} +1 -1
- package/dist/components/OnyxBadge/{OnyxBadge.vue.d.ts → OnyxBadge.d.vue.ts} +4 -4
- package/dist/components/OnyxBadge/types.d.ts +2 -2
- package/dist/components/{OnyxDialog/OnyxDialog.vue.d.ts → OnyxBasicDialog/OnyxBasicDialog.d.vue.ts} +12 -7
- package/dist/components/OnyxBasicDialog/types.d.ts +35 -0
- package/dist/components/OnyxBasicPopover/OnyxBasicPopover.d.vue.ts +64 -0
- package/dist/components/OnyxBasicPopover/types.d.ts +37 -0
- package/dist/components/OnyxBottomBar/OnyxBottomBar.d.vue.ts +36 -0
- package/dist/components/OnyxBottomBar/types.d.ts +7 -0
- package/dist/components/OnyxBreadcrumb/OnyxBreadcrumb.d.vue.ts +32 -0
- package/dist/components/OnyxBreadcrumb/types.d.ts +32 -0
- package/dist/components/OnyxBreadcrumbItem/OnyxBreadcrumbItem.d.vue.ts +33 -0
- package/dist/components/OnyxBreadcrumbItem/types.d.ts +15 -0
- package/dist/components/OnyxButton/ButtonOrLinkLayout.d.vue.ts +33 -0
- package/dist/components/OnyxButton/OnyxButton.d.vue.ts +26 -0
- package/dist/components/OnyxButton/types.d.ts +14 -4
- package/dist/components/{OnyxHeadline/OnyxHeadline.vue.d.ts → OnyxCard/OnyxCard.d.vue.ts} +6 -4
- package/dist/components/OnyxCard/types.d.ts +9 -0
- package/dist/components/OnyxCheckbox/{OnyxCheckbox.vue.d.ts → OnyxCheckbox.d.vue.ts} +7 -7
- package/dist/components/OnyxCheckbox/types.d.ts +3 -5
- package/dist/components/OnyxCheckboxGroup/{OnyxCheckboxGroup.vue.d.ts → OnyxCheckboxGroup.d.vue.ts} +7 -7
- package/dist/components/OnyxCheckboxGroup/types.d.ts +9 -20
- package/dist/components/OnyxDataGrid/OnyxDataGrid.d.vue.ts +16 -0
- package/dist/components/OnyxDataGrid/OnyxDataGridRenderer/{OnyxDataGridRenderer.vue.d.ts → OnyxDataGridRenderer.d.vue.ts} +6 -8
- package/dist/components/OnyxDataGrid/OnyxDataGridRenderer/types.d.ts +34 -14
- package/dist/components/OnyxDataGrid/features/{HeaderCell.vue.d.ts → HeaderCell.d.vue.ts} +1 -1
- package/dist/components/OnyxDataGrid/features/all.d.ts +15 -2
- package/dist/components/OnyxDataGrid/features/base/base.d.ts +52 -0
- package/dist/components/OnyxDataGrid/features/base/types.d.ts +8 -0
- package/dist/components/OnyxDataGrid/features/filtering/filtering.d.ts +31 -0
- package/dist/components/OnyxDataGrid/features/filtering/types.d.ts +66 -0
- package/dist/components/OnyxDataGrid/features/hideColumns/hideColumns.d.ts +43 -0
- package/dist/components/OnyxDataGrid/features/hideColumns/types.d.ts +13 -0
- package/dist/components/OnyxDataGrid/features/index.d.ts +225 -15
- package/dist/components/OnyxDataGrid/features/pagination/pagination.d.ts +28 -0
- package/dist/components/OnyxDataGrid/features/pagination/types.d.ts +51 -0
- package/dist/components/OnyxDataGrid/features/renderer.d.ts +71 -0
- package/dist/components/OnyxDataGrid/features/resizing/resizing.d.ts +51 -0
- package/dist/components/OnyxDataGrid/features/resizing/types.d.ts +7 -0
- package/dist/components/OnyxDataGrid/features/selection/selection.d.ts +17 -0
- package/dist/components/OnyxDataGrid/features/selection/types.d.ts +39 -0
- package/dist/components/OnyxDataGrid/features/sorting/{SortAction.vue.d.ts → SortAction.d.vue.ts} +2 -2
- package/dist/components/OnyxDataGrid/features/sorting/defaults.d.ts +9 -0
- package/dist/components/OnyxDataGrid/features/sorting/sorting.d.ts +34 -4
- package/dist/components/OnyxDataGrid/features/sorting/types.d.ts +13 -18
- package/dist/components/OnyxDataGrid/features/stickyColumns/stickyColumns.d.ts +13 -0
- package/dist/components/OnyxDataGrid/features/stickyColumns/types.d.ts +14 -0
- package/dist/components/OnyxDataGrid/types.d.ts +79 -5
- package/dist/components/OnyxDataGrid/types.spec-d.d.ts +1 -0
- package/dist/components/OnyxDatePicker/OnyxDatePicker.d.vue.ts +20 -0
- package/dist/components/OnyxDatePicker/types.d.ts +3 -2
- package/dist/components/OnyxDialog/OnyxDialog.d.vue.ts +68 -0
- package/dist/components/OnyxDialog/types.d.ts +4 -24
- package/dist/components/OnyxEmpty/{OnyxEmpty.vue.d.ts → OnyxEmpty.d.vue.ts} +10 -2
- package/dist/components/OnyxErrorTooltip/{OnyxErrorTooltip.vue.d.ts → OnyxErrorTooltip.d.vue.ts} +7 -3
- package/dist/components/OnyxExternalLinkIcon/OnyxExternalLinkIcon.d.vue.ts +5 -0
- package/dist/components/OnyxExternalLinkIcon/types.d.ts +2 -5
- package/dist/components/OnyxFAB/OnyxFAB.d.vue.ts +34 -0
- package/dist/components/OnyxFAB/types.d.ts +13 -0
- package/dist/components/OnyxFABButton/OnyxFABButton.d.vue.ts +5 -0
- package/dist/components/OnyxFABButton/types.d.ts +22 -0
- package/dist/components/OnyxFABItem/OnyxFABItem.d.vue.ts +3 -0
- package/dist/components/OnyxFABItem/types.d.ts +17 -0
- package/dist/components/OnyxFileCard/OnyxFileCard.d.vue.ts +34 -0
- package/dist/components/OnyxFileCard/types.d.ts +49 -0
- package/dist/components/OnyxFileTypeIcon/OnyxFileTypeIcon.d.vue.ts +3 -0
- package/dist/components/OnyxFileTypeIcon/types.d.ts +13 -0
- package/dist/components/OnyxFileUpload/OnyxFileUpload.d.vue.ts +40 -0
- package/dist/components/OnyxFileUpload/types.d.ts +91 -0
- package/dist/components/OnyxFilterTag/OnyxFilterTag.d.vue.ts +10 -0
- package/dist/components/OnyxFilterTag/types.d.ts +8 -0
- package/dist/components/OnyxForm/OnyxForm.core.d.ts +46 -17
- package/dist/components/OnyxForm/{OnyxForm.vue.d.ts → OnyxForm.d.vue.ts} +4 -4
- package/dist/components/OnyxForm/types.d.ts +3 -3
- package/dist/components/OnyxFormElement/FormMessage.d.vue.ts +13 -0
- package/dist/components/OnyxFormElement/OnyxFormElement.ct-utils.d.ts +2 -2
- package/dist/components/OnyxFormElement/OnyxFormElement.d.vue.ts +27 -0
- package/dist/components/OnyxFormElement/types.d.ts +22 -19
- package/dist/components/OnyxGlobalFAB/OnyxGlobalFAB.d.vue.ts +2 -0
- package/dist/components/OnyxGlobalFAB/useGlobalFAB.d.ts +56 -0
- package/dist/components/OnyxHeadline/OnyxHeadline.d.vue.ts +28 -0
- package/dist/components/OnyxHeadline/types.d.ts +18 -2
- package/dist/components/OnyxIcon/OnyxIcon.d.vue.ts +3 -0
- package/dist/components/OnyxIcon/types.d.ts +5 -1
- package/dist/components/OnyxIconButton/OnyxIconButton.d.vue.ts +27 -0
- package/dist/components/OnyxIconButton/types.d.ts +6 -6
- package/dist/components/OnyxImage/OnyxImage.d.vue.ts +6 -0
- package/dist/components/OnyxImage/types.d.ts +43 -0
- package/dist/components/OnyxInfoCard/OnyxInfoCard.d.vue.ts +42 -0
- package/dist/components/OnyxInfoCard/types.d.ts +21 -0
- package/dist/components/OnyxInfoTooltip/OnyxInfoTooltip.d.vue.ts +12 -0
- package/dist/components/OnyxInfoTooltip/types.d.ts +2 -2
- package/dist/components/OnyxInput/OnyxInput.d.vue.ts +62 -0
- package/dist/components/OnyxInput/types.d.ts +5 -64
- package/dist/components/OnyxLink/{OnyxLink.vue.d.ts → OnyxLink.d.vue.ts} +4 -4
- package/dist/components/OnyxLink/types.d.ts +3 -10
- package/dist/components/OnyxListItem/{OnyxListItem.vue.d.ts → OnyxListItem.d.vue.ts} +4 -4
- package/dist/components/OnyxListItem/types.d.ts +2 -2
- package/dist/components/OnyxLoadingIndicator/OnyxCircleSpinner.d.vue.ts +2 -0
- package/dist/components/OnyxLoadingIndicator/OnyxLoadingDots.d.vue.ts +2 -0
- package/dist/components/OnyxLoadingIndicator/OnyxLoadingIndicator.d.vue.ts +5 -0
- package/dist/components/OnyxMiniSearch/OnyxMiniSearch.d.vue.ts +16 -0
- package/dist/components/OnyxMiniSearch/types.d.ts +5 -3
- package/dist/components/OnyxMobileNavButton/{OnyxMobileNavButton.vue.d.ts → OnyxMobileNavButton.d.vue.ts} +4 -4
- package/dist/components/OnyxMobileNavButton/types.d.ts +4 -0
- package/dist/components/{OnyxModalDialog/OnyxModalDialog.vue.d.ts → OnyxModal/OnyxModal.d.vue.ts} +17 -8
- package/dist/components/OnyxModal/types.d.ts +2 -0
- package/dist/components/OnyxMoreList/{OnyxMoreList.vue.d.ts → OnyxMoreList.d.vue.ts} +11 -6
- package/dist/components/OnyxMoreList/types.d.ts +12 -3
- package/dist/components/OnyxNavAppArea/{OnyxNavAppArea.vue.d.ts → OnyxNavAppArea.d.vue.ts} +5 -3
- package/dist/components/OnyxNavAppArea/types.d.ts +2 -1
- package/dist/components/OnyxNavBar/OnyxNavBar.d.vue.ts +44 -0
- package/dist/components/OnyxNavBar/modules/OnyxColorSchemeDialog/OnyxColorSchemeDialog.d.vue.ts +12 -0
- package/dist/components/OnyxNavBar/modules/OnyxColorSchemeDialog/types.d.ts +3 -3
- package/dist/components/OnyxNavBar/modules/OnyxColorSchemeMenuItem/OnyxColorSchemeMenuItem.d.vue.ts +8 -0
- package/dist/components/OnyxNavBar/modules/OnyxColorSchemeMenuItem/types.d.ts +1 -1
- package/dist/components/OnyxNavBar/modules/OnyxFlyoutMenu/{OnyxFlyoutMenu.vue.d.ts → OnyxFlyoutMenu.d.vue.ts} +9 -12
- package/dist/components/OnyxNavBar/modules/OnyxFlyoutMenu/types.d.ts +11 -7
- package/dist/components/OnyxNavBar/modules/OnyxLanguageMenuItem/OnyxLanguageMenuItem.d.vue.ts +16 -0
- package/dist/components/OnyxNavBar/modules/OnyxLanguageMenuItem/types.d.ts +11 -0
- package/dist/components/OnyxNavBar/modules/OnyxMenuItem/OnyxMenuItem.d.vue.ts +427 -0
- package/dist/components/OnyxNavBar/modules/OnyxMenuItem/types.d.ts +13 -9
- package/dist/components/OnyxNavBar/modules/OnyxNavItem/OnyxNavItem.d.vue.ts +185 -0
- package/dist/components/OnyxNavBar/modules/OnyxNavItem/types.d.ts +19 -2
- package/dist/components/OnyxNavBar/modules/OnyxNavItemFacade/OnyxNavItemFacade.d.vue.ts +41 -0
- package/dist/components/OnyxNavBar/modules/OnyxTimer/OnyxTimer.d.vue.ts +12 -0
- package/dist/components/OnyxNavBar/modules/OnyxUserMenu/{OnyxUserMenu.vue.d.ts → OnyxUserMenu.d.vue.ts} +7 -7
- package/dist/components/OnyxNavBar/modules/OnyxUserMenu/{UserMenuLayout.vue.d.ts → UserMenuLayout.d.vue.ts} +13 -13
- package/dist/components/OnyxNavBar/modules/OnyxUserMenu/types.d.ts +13 -7
- package/dist/components/OnyxNavBar/modules/index.d.ts +17 -17
- package/dist/components/OnyxNavBar/types.d.ts +53 -12
- package/dist/components/OnyxNotificationCard/OnyxNotificationCard.d.vue.ts +48 -0
- package/dist/components/OnyxNotificationCard/types.d.ts +25 -0
- package/dist/components/OnyxNotificationDot/OnyxNotificationDot.d.vue.ts +29 -0
- package/dist/components/OnyxNotificationDot/types.d.ts +11 -0
- package/dist/components/OnyxNotificationMessage/OnyxNotificationMessage.d.vue.ts +40 -0
- package/dist/components/OnyxNotificationMessage/types.d.ts +17 -0
- package/dist/components/OnyxNotifications/OnyxNotifications.d.vue.ts +2 -0
- package/dist/components/OnyxNotifications/useNotification.d.ts +60 -0
- package/dist/components/OnyxPageLayout/OnyxPageLayout.d.vue.ts +66 -0
- package/dist/components/OnyxPageLayout/types.d.ts +11 -8
- package/dist/components/OnyxPagination/OnyxPagination.d.vue.ts +10 -0
- package/dist/components/OnyxPagination/OnyxSelectPagination.d.vue.ts +9 -0
- package/dist/components/OnyxPagination/types.d.ts +6 -1
- package/dist/components/OnyxProgressItem/OnyxProgressItem.d.vue.ts +31 -0
- package/dist/components/OnyxProgressItem/types.d.ts +31 -0
- package/dist/components/OnyxProgressSteps/OnyxProgressSteps.d.vue.ts +41 -0
- package/dist/components/OnyxProgressSteps/types.d.ts +30 -0
- package/dist/components/OnyxRadioButton/{OnyxRadioButton.vue.d.ts → OnyxRadioButton.d.vue.ts} +7 -7
- package/dist/components/OnyxRadioButton/types.d.ts +2 -10
- package/dist/components/OnyxRadioGroup/{OnyxRadioGroup.vue.d.ts → OnyxRadioGroup.d.vue.ts} +9 -9
- package/dist/components/OnyxRadioGroup/types.d.ts +6 -19
- package/dist/components/OnyxResizeHandle/OnyxResizeHandle.d.vue.ts +16 -0
- package/dist/components/OnyxResizeHandle/types.d.ts +23 -0
- package/dist/components/OnyxRipple/OnyxRipple.d.vue.ts +6 -0
- package/dist/components/OnyxRouterLink/OnyxRouterLink.d.vue.ts +21 -0
- package/dist/components/OnyxRouterLink/types.d.ts +22 -0
- package/dist/components/OnyxSegmentedControl/OnyxSegmentedControl.d.vue.ts +17 -0
- package/dist/components/OnyxSegmentedControl/types.d.ts +28 -0
- package/dist/components/OnyxSegmentedControlElement/OnyxSegmentedControlElement.d.vue.ts +7 -0
- package/dist/components/OnyxSegmentedControlElement/types.d.ts +5 -0
- package/dist/components/OnyxSelect/{OnyxSelect.vue.d.ts → OnyxSelect.d.vue.ts} +13 -12
- package/dist/components/OnyxSelect/types.d.ts +34 -47
- package/dist/components/OnyxSelectDialog/OnyxSelectDialog.d.vue.ts +28 -0
- package/dist/components/OnyxSelectDialog/types.d.ts +30 -0
- package/dist/components/OnyxSelectInput/{OnyxSelectInput.vue.d.ts → OnyxSelectInput.d.vue.ts} +6 -8
- package/dist/components/OnyxSelectInput/types.d.ts +2 -24
- package/dist/components/OnyxSelectOption/{OnyxSelectOption.vue.d.ts → OnyxSelectOption.d.vue.ts} +5 -5
- package/dist/components/OnyxSelectOption/types.d.ts +2 -2
- package/dist/components/OnyxSeparator/OnyxSeparator.d.vue.ts +5 -0
- package/dist/components/OnyxSeparator/types.d.ts +7 -0
- package/dist/components/OnyxSidebar/OnyxSidebar.d.vue.ts +190 -0
- package/dist/components/OnyxSidebar/modules/OnyxSidebarItem/OnyxSidebarItem.d.vue.ts +28 -0
- package/dist/components/OnyxSidebar/modules/OnyxSidebarItem/types.d.ts +9 -0
- package/dist/components/OnyxSidebar/modules/index.d.ts +2 -0
- package/dist/components/OnyxSidebar/types.d.ts +40 -0
- package/dist/components/OnyxSkeleton/OnyxSkeleton.d.vue.ts +2 -0
- package/dist/components/OnyxStepper/OnyxStepper.d.vue.ts +22 -0
- package/dist/components/OnyxStepper/types.d.ts +26 -32
- package/dist/components/OnyxSwitch/OnyxSwitch.d.vue.ts +22 -0
- package/dist/components/OnyxSwitch/types.d.ts +3 -29
- package/dist/components/OnyxSystemButton/OnyxSystemButton.d.vue.ts +8 -0
- package/dist/components/OnyxSystemButton/types.d.ts +2 -2
- package/dist/components/OnyxTab/{OnyxTab.vue.d.ts → OnyxTab.d.vue.ts} +4 -4
- package/dist/components/OnyxTab/types.d.ts +2 -2
- package/dist/components/OnyxTable/OnyxTable.d.vue.ts +24 -0
- package/dist/components/OnyxTable/types.d.ts +43 -1
- package/dist/components/OnyxTabs/{OnyxTabs.vue.d.ts → OnyxTabs.d.vue.ts} +4 -6
- package/dist/components/OnyxTabs/types.d.ts +6 -6
- package/dist/components/OnyxTag/OnyxTag.d.vue.ts +6 -0
- package/dist/components/OnyxTag/types.d.ts +25 -2
- package/dist/components/OnyxTextarea/OnyxTextarea.d.vue.ts +22 -0
- package/dist/components/OnyxTextarea/types.d.ts +2 -5
- package/dist/components/OnyxToast/OnyxToast.d.vue.ts +2 -0
- package/dist/components/OnyxToast/useToast.d.ts +2 -2
- package/dist/components/OnyxToastMessage/OnyxToastMessage.d.vue.ts +12 -0
- package/dist/components/OnyxToastMessage/types.d.ts +2 -2
- package/dist/components/OnyxTooltip/OnyxTooltip.ct-utils.d.ts +1 -1
- package/dist/components/OnyxTooltip/{OnyxTooltip.vue.d.ts → OnyxTooltip.d.vue.ts} +22 -12
- package/dist/components/OnyxTooltip/types.d.ts +31 -15
- package/dist/components/OnyxVisuallyHidden/{OnyxVisuallyHidden.vue.d.ts → OnyxVisuallyHidden.d.vue.ts} +3 -3
- package/dist/components/examples/ComponentShowcase/ComponentShowcase.d.vue.ts +9 -0
- package/dist/components/illustrations/OnyxErrorSVG/OnyxErrorSVG.d.vue.ts +2 -0
- package/dist/components/illustrations/OnyxFileUploadSVG/OnyxFileUploadSVG.d.vue.ts +3 -0
- package/dist/components/illustrations/OnyxFileUploadSVG/types.d.ts +10 -0
- package/dist/components/illustrations/index.d.ts +3 -0
- package/dist/composables/animation.d.ts +5 -0
- package/dist/composables/checkAll.d.ts +3 -3
- package/dist/composables/density.d.ts +1 -1
- package/dist/composables/required.d.ts +6 -12
- package/dist/composables/scrollEnd.d.ts +2 -2
- package/dist/composables/themeTransition.d.ts +2 -2
- package/dist/composables/useAnchorPositionPolyfill.d.ts +20 -0
- package/dist/composables/useAutoFocus.d.ts +5 -0
- package/dist/composables/useCustomValidity.d.ts +21 -13
- package/dist/composables/useErrorClass.d.ts +2 -2
- package/dist/composables/useFileSize.d.ts +10 -0
- package/dist/composables/useIntersectionObserver.d.ts +25 -0
- package/dist/composables/useLenientMaxLengthValidation.ct-utils.d.ts +3 -0
- package/dist/composables/useLenientMaxLengthValidation.d.ts +93 -0
- package/dist/composables/useLink.d.ts +29 -0
- package/dist/composables/useLink.spec-d.d.ts +1 -0
- package/dist/composables/useMoreList.d.ts +15 -7
- package/dist/composables/useOpenAlignment.d.ts +13 -0
- package/dist/composables/useOpenDirection.d.ts +5 -5
- package/dist/composables/useRelativeTimeFormat.d.ts +23 -0
- package/dist/composables/useResizeObserver.d.ts +6 -2
- package/dist/composables/useRipple.d.ts +5 -5
- package/dist/composables/useSkeletonState.d.ts +1 -1
- package/dist/composables/useTimer.d.ts +3 -3
- package/dist/composables/useVModel.d.ts +34 -0
- package/dist/composables/useVModel.spec-d.d.ts +1 -0
- package/dist/i18n/datetime-formats.d.ts +22 -0
- package/dist/i18n/index.d.ts +24 -12
- package/dist/i18n/locales/de-DE.json +96 -2
- package/dist/i18n/locales/en-US.json +94 -9
- package/{src/i18n/locales/en-US.json → dist/i18n/locales/en-US.json.d.ts} +98 -10
- package/dist/i18n/number-formats.d.ts +6 -0
- package/dist/index.d.ts +176 -106
- package/dist/index.esm-bundler.js +13471 -0
- package/dist/index.esm-bundler.js.map +1 -0
- package/dist/index.js +9574 -4712
- package/dist/style.css +1 -1
- package/dist/types/components.d.ts +7 -9
- package/dist/types/index.d.ts +7 -8
- package/dist/types/utils.d.ts +66 -1
- package/dist/types/utils.spec-d.d.ts +1 -0
- package/dist/utils/attrs.d.ts +35 -4
- package/dist/utils/breakpoints.d.ts +17 -0
- package/dist/utils/console.d.ts +11 -0
- package/dist/utils/dom.d.ts +5 -0
- package/dist/utils/feature.d.ts +15 -0
- package/dist/utils/file.d.ts +10 -0
- package/dist/utils/numbers.d.ts +29 -9
- package/dist/utils/objects.d.ts +18 -0
- package/dist/utils/plugin.d.ts +11 -2
- package/dist/utils/router.d.ts +9 -0
- package/dist/utils/storybook.d.ts +43 -2
- package/dist/utils/strings.d.ts +13 -0
- package/package.json +34 -24
- package/src/styles/breakpoints.scss +14 -10
- package/src/styles/fonts.scss +7 -7
- package/src/styles/global.css +3 -3
- package/src/styles/grid.ct.tsx +186 -73
- package/src/styles/grid.scss +139 -38
- package/src/styles/index.scss +1 -2
- package/src/styles/layers.scss +1 -1
- package/src/styles/mixins/checkbox.scss +18 -4
- package/src/styles/mixins/input.scss +24 -5
- package/src/styles/mixins/layers.scss +6 -0
- package/src/styles/mixins/list.scss +1 -1
- package/src/styles/mixins/sizes.scss +12 -8
- package/src/styles/mixins/visibility.scss +11 -0
- package/src/styles/root.scss +7 -2
- package/src/styles/variables/density-compact.css +2 -2
- package/src/styles/variables/density-cozy.css +2 -2
- package/src/styles/variables/density-default.css +2 -2
- package/src/styles/variables/spacing.css +1 -1
- package/src/styles/variables/themes/onyx.css +387 -0
- package/src/styles/variables/themes/value.css +217 -159
- package/dist/components/OnyxAlertDialog/OnyxAlertDialog.vue.d.ts +0 -60
- package/dist/components/OnyxAlertDialog/types.d.ts +0 -8
- package/dist/components/OnyxAppLayout/OnyxAppLayout.vue.d.ts +0 -36
- package/dist/components/OnyxAvatar/OnyxAvatar.vue.d.ts +0 -28
- package/dist/components/OnyxButton/OnyxButton.vue.d.ts +0 -10
- package/dist/components/OnyxDataGrid/OnyxDataGrid.vue.d.ts +0 -17
- package/dist/components/OnyxDataGrid/features/sorting/TestCase.vue.d.ts +0 -9
- package/dist/components/OnyxDatePicker/OnyxDatePicker.vue.d.ts +0 -17
- package/dist/components/OnyxExternalLinkIcon/OnyxExternalLinkIcon.vue.d.ts +0 -5
- package/dist/components/OnyxFormElement/FormMessage.vue.d.ts +0 -13
- package/dist/components/OnyxFormElement/OnyxFormElement.vue.d.ts +0 -29
- package/dist/components/OnyxIcon/OnyxIcon.vue.d.ts +0 -3
- package/dist/components/OnyxIconButton/OnyxIconButton.vue.d.ts +0 -27
- package/dist/components/OnyxInfoTooltip/OnyxInfoTooltip.vue.d.ts +0 -6
- package/dist/components/OnyxInput/OnyxInput.vue.d.ts +0 -24
- package/dist/components/OnyxLoadingIndicator/OnyxCircleSpinner.vue.d.ts +0 -2
- package/dist/components/OnyxLoadingIndicator/OnyxLoadingDots.vue.d.ts +0 -2
- package/dist/components/OnyxLoadingIndicator/OnyxLoadingIndicator.vue.d.ts +0 -5
- package/dist/components/OnyxMiniSearch/OnyxMiniSearch.vue.d.ts +0 -14
- package/dist/components/OnyxModalDialog/types.d.ts +0 -2
- package/dist/components/OnyxNavBar/OnyxNavBar.vue.d.ts +0 -91
- package/dist/components/OnyxNavBar/modules/OnyxColorSchemeDialog/OnyxColorSchemeDialog.vue.d.ts +0 -11
- package/dist/components/OnyxNavBar/modules/OnyxColorSchemeMenuItem/OnyxColorSchemeMenuItem.vue.d.ts +0 -8
- package/dist/components/OnyxNavBar/modules/OnyxMenuItem/OnyxMenuItem.vue.d.ts +0 -28
- package/dist/components/OnyxNavBar/modules/OnyxNavButton/NavButtonLayout.vue.d.ts +0 -48
- package/dist/components/OnyxNavBar/modules/OnyxNavButton/OnyxNavButton.vue.d.ts +0 -122
- package/dist/components/OnyxNavBar/modules/OnyxNavButton/types.d.ts +0 -19
- package/dist/components/OnyxNavBar/modules/OnyxNavItem/OnyxNavItem.vue.d.ts +0 -31
- package/dist/components/OnyxNavBar/modules/OnyxNavSeparator/OnyxNavSeparator.vue.d.ts +0 -5
- package/dist/components/OnyxNavBar/modules/OnyxNavSeparator/types.d.ts +0 -3
- package/dist/components/OnyxNavBar/modules/OnyxTimer/OnyxTimer.vue.d.ts +0 -7
- package/dist/components/OnyxPageLayout/OnyxPageLayout.vue.d.ts +0 -30
- package/dist/components/OnyxPagination/OnyxPagination.vue.d.ts +0 -9
- package/dist/components/OnyxPagination/OnyxSelectPagination.vue.d.ts +0 -7
- package/dist/components/OnyxRipple/OnyxRipple.vue.d.ts +0 -4
- package/dist/components/OnyxSkeleton/OnyxSkeleton.vue.d.ts +0 -2
- package/dist/components/OnyxStepper/OnyxStepper.vue.d.ts +0 -21
- package/dist/components/OnyxSwitch/OnyxSwitch.vue.d.ts +0 -15
- package/dist/components/OnyxSystemButton/OnyxSystemButton.vue.d.ts +0 -8
- package/dist/components/OnyxSystemButton/examples/WithFlyoutMenu.vue.d.ts +0 -2
- package/dist/components/OnyxSystemButton/examples/WithTooltip.vue.d.ts +0 -2
- package/dist/components/OnyxTable/OnyxTable.vue.d.ts +0 -57
- package/dist/components/OnyxTag/OnyxTag.vue.d.ts +0 -5
- package/dist/components/OnyxTextarea/OnyxTextarea.vue.d.ts +0 -17
- package/dist/components/OnyxToast/OnyxToast.vue.d.ts +0 -2
- package/dist/components/OnyxToast/StorybookExample.vue.d.ts +0 -2
- package/dist/components/OnyxToastMessage/OnyxToastMessage.vue.d.ts +0 -12
- package/dist/components/examples/ComponentShowcase/ComponentShowcase.vue.d.ts +0 -9
- package/dist/components/examples/DataGrid/SortingDataGrid.vue.d.ts +0 -26
- package/dist/components/examples/FormExample/FormExample.vue.d.ts +0 -3
- package/dist/components/examples/GridPlayground/EditGridElementDialog/EditGridElementDialog.vue.d.ts +0 -26
- package/dist/components/examples/GridPlayground/GridBadge/GridBadge.vue.d.ts +0 -17
- package/dist/components/examples/GridPlayground/GridElement/GridElement.vue.d.ts +0 -42
- package/dist/components/examples/GridPlayground/GridOverlay/GridOverlay.vue.d.ts +0 -10
- package/dist/components/examples/GridPlayground/GridPlayground.vue.d.ts +0 -2
- package/dist/composables/asymmetricComputed.d.ts +0 -13
- package/dist/composables/useManagedState.d.ts +0 -31
- package/dist/composables/useWedgePosition.d.ts +0 -13
- package/dist/index.cjs +0 -183
- package/dist/playwright/a11y.d.ts +0 -28
- package/dist/playwright/screenshots.d.ts +0 -33
- package/dist/types/themes.d.ts +0 -2
- package/dist/utils/index.d.ts +0 -4
- package/src/i18n/locales/de-DE.json +0 -135
- package/src/i18n/locales/ko-KR.json +0 -27
- package/src/styles/variables/themes/digits-dark.css +0 -129
- package/src/styles/variables/themes/digits-light.css +0 -129
- package/src/styles/variables/themes/kaufland-dark.css +0 -129
- package/src/styles/variables/themes/kaufland-light.css +0 -129
- package/src/styles/variables/themes/lidl-dark.css +0 -129
- package/src/styles/variables/themes/lidl-light.css +0 -129
- package/src/styles/variables/themes/onyx-dark.css +0 -129
- package/src/styles/variables/themes/onyx-light.css +0 -129
- package/src/styles/variables/themes/schwarz-dark.css +0 -129
- package/src/styles/variables/themes/schwarz-light.css +0 -129
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm-bundler.js","sources":["../src/composables/density.ts","../src/utils/console.ts","../src/composables/useSkeletonState.ts","../src/composables/useVModel.ts","../src/components/OnyxAccordion/types.ts","../src/components/OnyxAccordion/OnyxAccordion.vue","../src/utils/breakpoints.ts","../src/components/OnyxIcon/OnyxIcon.vue","../src/composables/animation.ts","../src/components/OnyxSkeleton/OnyxSkeleton.vue","../src/components/OnyxAccordionItem/OnyxAccordionItem.vue","../src/i18n/datetime-formats.ts","../src/i18n/number-formats.ts","../src/i18n/index.ts","../../headless/dist/index.js","../src/components/OnyxBasicDialog/OnyxBasicDialog.vue","../src/utils/strings.ts","../src/utils/router.ts","../src/composables/useLink.ts","../src/components/OnyxVisuallyHidden/OnyxVisuallyHidden.vue","../src/components/OnyxRouterLink/OnyxRouterLink.vue","../src/components/OnyxHeadline/OnyxHeadline.vue","../src/composables/useAutoFocus.ts","../src/components/OnyxForm/OnyxForm.core.ts","../src/components/OnyxButton/ButtonOrLinkLayout.vue","../src/components/OnyxSystemButton/OnyxSystemButton.vue","../src/components/OnyxAlertModal/OnyxAlertModal.vue","../src/utils/attrs.ts","../src/components/OnyxFABButton/OnyxFABButton.vue","../src/composables/useResizeObserver.ts","../src/composables/useIntersectionObserver.ts","../src/composables/useAnchorPositionPolyfill.ts","../src/composables/useOpenAlignment.ts","../src/composables/useOpenDirection.ts","../src/components/OnyxBasicPopover/OnyxBasicPopover.vue","../src/components/OnyxNavBar/modules/OnyxFlyoutMenu/OnyxFlyoutMenu.vue","../src/components/OnyxFAB/OnyxFAB.vue","../src/components/OnyxFABItem/OnyxFABItem.vue","../src/components/OnyxGlobalFAB/useGlobalFAB.ts","../src/components/OnyxGlobalFAB/OnyxGlobalFAB.vue","../src/components/OnyxLoadingIndicator/OnyxCircleSpinner.vue","../src/components/OnyxLoadingIndicator/OnyxLoadingDots.vue","../src/components/OnyxLoadingIndicator/OnyxLoadingIndicator.vue","../src/composables/useRipple.ts","../src/components/OnyxRipple/OnyxRipple.vue","../src/components/OnyxButton/OnyxButton.vue","../src/components/OnyxInfoCard/OnyxInfoCard.vue","../src/components/OnyxNotificationMessage/OnyxNotificationMessage.vue","../src/components/OnyxNotifications/useNotification.ts","../src/components/OnyxNotifications/OnyxNotifications.vue","../src/components/OnyxToastMessage/OnyxToastMessage.vue","../src/components/OnyxToast/useToast.ts","../src/components/OnyxToast/OnyxToast.vue","../src/components/OnyxAppLayout/OnyxAppLayout.vue","../src/components/OnyxAvatar/OnyxAvatar.vue","../src/components/OnyxAvatarStack/OnyxAvatarStack.vue","../src/components/OnyxBadge/OnyxBadge.vue","../src/components/OnyxBottomBar/OnyxBottomBar.vue","../src/composables/useMoreList.ts","../src/components/OnyxBreadcrumb/types.ts","../src/components/OnyxExternalLinkIcon/OnyxExternalLinkIcon.vue","../src/components/OnyxListItem/OnyxListItem.vue","../src/components/OnyxNavBar/modules/OnyxMenuItem/OnyxMenuItem.vue","../src/components/OnyxBreadcrumbItem/OnyxBreadcrumbItem.vue","../src/components/OnyxMoreList/OnyxMoreList.vue","../src/components/OnyxBreadcrumb/OnyxBreadcrumb.vue","../src/components/OnyxButton/types.ts","../src/components/OnyxCard/OnyxCard.vue","../src/composables/required.ts","../src/utils/date.ts","../src/utils/objects.ts","../src/utils/validity.ts","../src/composables/useCustomValidity.ts","../src/components/OnyxTooltip/OnyxTooltip.vue","../src/components/OnyxErrorTooltip/OnyxErrorTooltip.vue","../src/components/OnyxCheckbox/OnyxCheckbox.vue","../src/composables/checkAll.ts","../src/components/OnyxInfoTooltip/OnyxInfoTooltip.vue","../src/components/OnyxCheckboxGroup/OnyxCheckboxGroup.vue","../src/utils/dom.ts","../src/components/OnyxEmpty/OnyxEmpty.vue","../src/components/OnyxTable/OnyxTable.vue","../src/components/OnyxDataGrid/OnyxDataGridRenderer/OnyxDataGridRenderer.vue","../src/components/OnyxMiniSearch/OnyxMiniSearch.vue","../src/utils/feature.ts","../src/components/OnyxDataGrid/types.ts","../src/components/OnyxDataGrid/features/HeaderCell.vue","../src/components/OnyxDataGrid/features/renderer.ts","../src/components/OnyxDataGrid/features/index.ts","../src/components/OnyxDataGrid/features/filtering/filtering.ts","../src/composables/scrollEnd.ts","../src/utils/numbers.ts","../src/composables/useErrorClass.ts","../src/components/OnyxFormElement/FormMessage.vue","../src/components/OnyxFormElement/OnyxFormElement.vue","../src/components/OnyxSelectInput/OnyxSelectInput.vue","../src/components/OnyxSelectOption/OnyxSelectOption.vue","../src/components/OnyxSelect/OnyxSelect.vue","../src/components/OnyxPagination/OnyxSelectPagination.vue","../src/components/OnyxPagination/OnyxPagination.vue","../src/components/OnyxDataGrid/features/selection/selection.ts","../src/components/OnyxDataGrid/features/pagination/pagination.ts","../src/components/OnyxDataGrid/features/base/base.ts","../src/components/OnyxDataGrid/OnyxDataGrid.vue","../src/components/OnyxDataGrid/features/hideColumns/hideColumns.ts","../src/components/OnyxResizeHandle/OnyxResizeHandle.vue","../src/components/OnyxDataGrid/features/resizing/resizing.ts","../src/components/OnyxDataGrid/features/sorting/defaults.ts","../src/components/OnyxDataGrid/features/sorting/SortAction.vue","../src/components/OnyxDataGrid/features/sorting/sorting.ts","../src/components/OnyxDataGrid/features/stickyColumns/stickyColumns.ts","../src/components/OnyxDatePicker/OnyxDatePicker.vue","../src/components/OnyxBasicDialog/types.ts","../src/components/OnyxDialog/OnyxDialog.vue","../src/components/OnyxForm/OnyxForm.vue","../src/components/OnyxHeadline/types.ts","../src/components/OnyxIcon/types.ts","../src/components/OnyxIconButton/OnyxIconButton.vue","../src/components/OnyxImage/OnyxImage.vue","../src/components/OnyxImage/types.ts","../src/composables/useLenientMaxLengthValidation.ts","../src/components/OnyxNavBar/types.ts","../src/components/OnyxSeparator/OnyxSeparator.vue","../src/components/OnyxInput/OnyxInput.vue","../src/components/OnyxInput/types.ts","../src/components/OnyxLink/OnyxLink.vue","../src/components/OnyxMobileNavButton/OnyxMobileNavButton.vue","../src/components/OnyxModal/OnyxModal.vue","../src/components/OnyxNavAppArea/OnyxNavAppArea.vue","../src/components/OnyxSelectDialog/OnyxSelectDialog.vue","../src/components/OnyxNavBar/modules/OnyxColorSchemeDialog/auto.svg?raw","../src/components/OnyxNavBar/modules/OnyxColorSchemeDialog/dark.svg?raw","../src/components/OnyxNavBar/modules/OnyxColorSchemeDialog/light.svg?raw","../src/components/OnyxNavBar/modules/OnyxColorSchemeDialog/OnyxColorSchemeDialog.vue","../src/components/OnyxNavBar/modules/OnyxColorSchemeMenuItem/OnyxColorSchemeMenuItem.vue","../src/components/OnyxNavBar/modules/OnyxLanguageMenuItem/OnyxLanguageMenuItem.vue","../src/components/OnyxNavBar/modules/OnyxNavItemFacade/OnyxNavItemFacade.vue","../src/components/OnyxNavBar/modules/OnyxNavItem/OnyxNavItem.vue","../src/composables/useTimer.ts","../src/utils/time.ts","../src/components/OnyxNavBar/modules/OnyxTimer/OnyxTimer.vue","../src/components/OnyxNavBar/modules/OnyxUserMenu/UserMenuLayout.vue","../src/components/OnyxNavBar/modules/OnyxUserMenu/OnyxUserMenu.vue","../src/components/OnyxNavBar/OnyxNavBar.vue","../src/composables/useRelativeTimeFormat.ts","../src/components/OnyxNotificationCard/OnyxNotificationCard.vue","../src/components/OnyxNotificationDot/OnyxNotificationDot.vue","../src/components/OnyxPageLayout/OnyxPageLayout.vue","../src/components/OnyxProgressItem/OnyxProgressItem.vue","../src/components/OnyxProgressItem/types.ts","../src/components/OnyxProgressSteps/OnyxProgressSteps.vue","../src/components/OnyxRadioButton/OnyxRadioButton.vue","../src/components/OnyxRadioGroup/OnyxRadioGroup.vue","../src/components/OnyxRouterLink/types.ts","../src/components/OnyxSegmentedControlElement/OnyxSegmentedControlElement.vue","../src/components/OnyxSegmentedControl/OnyxSegmentedControl.vue","../src/components/OnyxSelect/types.ts","../src/components/OnyxSelectInput/types.ts","../src/components/OnyxSidebar/modules/OnyxSidebarItem/OnyxSidebarItem.vue","../../icons/dist/assets/arrow-small-left.svg?raw","../../icons/dist/assets/arrow-small-right.svg?raw","../../icons/dist/assets/sidebar-arrow-left.svg?raw","../../icons/dist/assets/sidebar-arrow-right.svg?raw","../src/components/OnyxSidebar/OnyxSidebar.vue","../src/components/OnyxSidebar/types.ts","../src/components/OnyxStepper/OnyxStepper.vue","../src/components/OnyxSwitch/OnyxSwitch.vue","../src/components/OnyxSystemButton/types.ts","../src/components/OnyxTabs/types.ts","../src/components/OnyxTab/OnyxTab.vue","../src/components/OnyxTabs/OnyxTabs.vue","../src/components/OnyxTag/OnyxTag.vue","../../icons/dist/assets/circle-attention.svg?raw","../src/composables/useFileSize.ts","../src/components/OnyxFileTypeIcon/OnyxFileTypeIcon.vue","../src/components/OnyxFileCard/OnyxFileCard.vue","../src/components/OnyxFileTypeIcon/types.ts","../src/utils/file.ts","../src/components/illustrations/OnyxErrorSVG/OnyxErrorSVG.vue","../src/components/illustrations/OnyxFileUploadSVG/OnyxFileUploadSVG.vue","../src/components/OnyxFileUpload/OnyxFileUpload.vue","../src/components/OnyxFilterTag/OnyxFilterTag.vue","../src/components/OnyxTextarea/OnyxTextarea.vue","../.storybook/public/onyx-logo.svg","../src/components/examples/ComponentShowcase/ComponentShowcase.vue","../src/composables/themeTransition.ts","../src/types/colors.ts","../src/types/fonts.ts","../src/types/index.ts","../src/utils/plugin.ts"],"sourcesContent":["import { computed } from \"vue\";\n\nexport const DENSITIES = [\"compact\", \"default\", \"cozy\"] as const;\nexport type Density = (typeof DENSITIES)[number];\n\nexport type DensityProp = {\n /**\n * Density defines the amount of vertical white space a component has and the height of the main (interactive) element of a component.\n * @default undefined By default the parents setting is used, if none is defined on any parent `default` is the default.\n */\n density?: Density;\n};\n\nexport const useDensity = (props: DensityProp) => ({\n densityClass: computed(() => ({ [`onyx-density-${props.density}`]: !!props.density })),\n});\n","/**\n * If the user environment is \"development\".\n */\nexport const USER_DEV = process.env.NODE_ENV === \"development\";\n/**\n * Conditional, tree-shakable logging, which is only done in the users \"development\" environment.\n *\n * Is the global console when in \"development\" environment, otherwise undefined.\n * When undefined code will be removed through tree-shaking.\n */\nexport const userConsole = USER_DEV === true ? globalThis.console : undefined;\n","import { computed, inject, provide, type ComputedRef, type InjectionKey, type Reactive } from \"vue\";\nimport { userConsole } from \"../utils/console.js\";\n\nconst SKELETON_INJECTION_KEY = Symbol() as InjectionKey<\n ReturnType<typeof createSkeletonInjectionContext>\n>;\n\n/**\n * Prop on the parent component.\n * It's value is provided, so that it can be used in child components.\n */\nexport type SkeletonProvidedProp = {\n /**\n * Whether to show all supported child components as skeleton.\n * Can be overridden on each child component if necessary.\n */\n skeleton: boolean;\n};\n\n/**\n * Prop that may be used by the child components.\n */\ntype LocalProps = {\n skeleton: symbol | boolean | number;\n};\n\n/**\n * Symbol for the skeleton injected property.\n */\nexport const SKELETON_INJECTED_SYMBOL = Symbol(\"SKELETON_INJECTED_SYMBOL\");\nexport type SKELETON_INJECTED = symbol; // we can't use `typeof SKELETON_INJECTED_SYMBOL` as vue is unable to infer its type: https://github.com/SchwarzIT/onyx/issues/1980\n/**\n * Prop type used by child elements, which indicates that the prop value is taken from the parent by default.\n * The prop **MUST** use `SKELETON_INJECTED_SYMBOL` as default value.\n * `useSkeletonContext` is used to access the injected parent property.\n *\n * NOTE: The number type is used only for OnyxRadioGroup and OnyxCheckboxGroup components.\n * NOTE: The number type is not intended to be used by other properties with boolean skeleton prop.\n *\n * @example\n * ```ts\n * const props = withDefaults(defineProps<OnyxComponentProps>(), {\n * skeleton: SKELETON_INJECTED_SYMBOL,\n * });\n *\n * const skeleton = useSkeletonContext(props);\n * ```\n */\n\nexport type SkeletonInjected = symbol | boolean | number;\n\nconst createSkeletonInjectionContext =\n (parentElementProps?: SkeletonProvidedProp) =>\n (props: Reactive<LocalProps>): ComputedRef<boolean | number> =>\n computed(() => {\n if (typeof props.skeleton !== \"symbol\") {\n return props.skeleton;\n }\n if (props.skeleton === SKELETON_INJECTED_SYMBOL) {\n return parentElementProps?.skeleton === true ? 3 : false;\n }\n userConsole?.warn(\n `skeleton prop is an recognized symbol: %o which is not identical to the symbol %o. This should not happen and is probably a bug in onyx.`,\n props.skeleton,\n SKELETON_INJECTED_SYMBOL,\n );\n return false;\n });\n\nexport const provideSkeletonContext = (\n parentElementProps: Reactive<SkeletonProvidedProp> | undefined,\n) => provide(SKELETON_INJECTION_KEY, createSkeletonInjectionContext(parentElementProps));\n\nconst DEFAULT_SKELETON_INJECTION_CONTEXT = createSkeletonInjectionContext();\n/**\n * Provides the injected parent property (if available).\n * Otherwise a defined default is used.\n * A prop defined on the child component will always take precedence over the injected parent property.\n *\n * The prop **MUST** use `SKELETON_INJECTED_SYMBOL` as default value.\n * The type `SkeletonInjected<T>` can be used as PropType wrapper.\n *\n * @example\n * ```ts\n * const props = withDefaults(defineProps<OnyxComponentProps>(), {\n * skeleton: SKELETON_INJECTED_SYMBOL, // By default, the parent injected value is used\n * });\n *\n * const skeleton = useSkeletonContext(props);\n * ```\n */\nexport const useSkeletonContext = (props: Reactive<LocalProps>) => {\n return inject(\n SKELETON_INJECTION_KEY,\n /** Default */\n DEFAULT_SKELETON_INJECTION_CONTEXT,\n )(props);\n};\n","import { computed, ref, toRef, watch, type Ref } from \"vue\";\nimport type { Nullable, PrimitiveType } from \"../types/index.js\";\n\nexport type UseVModelOptions<\n TProps extends object,\n TKey extends keyof TProps & string,\n TValue extends TProps[TKey] = TProps[TKey],\n TDefaultValue = undefined | (TValue extends Nullable<PrimitiveType> ? TValue : () => TValue),\n TComputed extends Nullable<TValue> = TDefaultValue extends undefined | null\n ? TValue\n : NonNullable<TValue>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- required for type inference\n TEmit extends (...args: any[]) => void = (evt: `update:${TKey}`, value: TComputed) => void,\n> = {\n key: TKey;\n props: TProps;\n emit: TEmit;\n default?: TDefaultValue;\n};\n\n// region docs\n/**\n * Composable for managing the v-model behavior of a prop.\n * It's behavior differs from the `defineModel` behavior, in that it will always prefer the bound value over the internal state.\n * This allows for better control over the component's state, e.g. a flyout can be kept open even when it was supposed to close.\n *\n * There is currently no way to differentiate between an explicitly bound `undefined` prop value (e.g. `<Comp :value=\"undefined\" />`) and a implicit `undefined` from not defined prop (e.g. `<Comp />`).\n * Therefore for `null` or `undefined` values, the internal state or default value will always be used.\n *\n * For default values with non-primitive types, it's required to use a factory function that returns the default value to avoid mutating the former value.\n *\n * @example ```typescript\n * const props = defineProps<{\n * modelValue?: string;\n * }>();\n *\n * const emit = defineEmits<{ \"update:modelValue\": [string] }>();\n *\n * const modelValue = useVModel({\n * props,\n * emit,\n * key: \"modelValue\",\n * default: \"\",\n * });\n```\n */\nexport const useVModel = <\n TProps extends object,\n TKey extends keyof TProps & string,\n TValue extends TProps[TKey] = TProps[TKey],\n TDefaultValue = undefined | (TValue extends Nullable<PrimitiveType> ? TValue : () => TValue),\n TComputed extends Nullable<TValue> = TDefaultValue extends undefined | null\n ? TValue\n : NonNullable<TValue>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- required for type inference\n TEmit extends (...args: any[]) => void = (evt: `update:${TKey}`, value: TComputed) => void,\n>(\n options: UseVModelOptions<TProps, TKey, TValue, TDefaultValue, TComputed, TEmit>,\n) => {\n // endregion docs\n const prop = toRef(options.props, options.key) as Ref<TValue>;\n\n const getDefault = () =>\n typeof options.default === \"function\" ? options.default() : options.default;\n\n // The Internal state will always be the latest value received from either a prop update or emitted value update.\n const internalState = ref(getDefault()) as Ref<Nullable<TValue>>;\n\n watch(prop, (newProp) => (internalState.value = newProp)); // update internal state when prop updates\n\n const value = computed({\n get: () => prop.value ?? internalState.value ?? getDefault(),\n set: (newValue: TComputed) => {\n if (newValue !== value.value) {\n internalState.value = newValue; // update internal state when new value is emitted\n options.emit(`update:${options.key}`, newValue);\n }\n },\n });\n return value as Ref<TComputed>;\n};\n","import type { InjectionKey, Ref } from \"vue\";\nimport type { DensityProp } from \"../../composables/density.js\";\nimport type { SkeletonInjected } from \"../../composables/useSkeletonState.js\";\nimport type { Nullable } from \"../../types/index.js\";\n\nexport type OnyxAccordionProps<TValue extends PropertyKey> = DensityProp & {\n /**\n * Currently opened items. Will include the `value` property of the nested `OnyxAccordionItems`.\n */\n modelValue?: Nullable<TValue[]>;\n /**\n * if `true`, only one accordion item can be open at the same time.\n */\n exclusive?: boolean;\n /**\n * Disable the accordion.\n */\n disabled?: boolean;\n /**\n * If set, the specified number of skeleton accordions will be shown.\n */\n skeleton?: SkeletonInjected;\n /**\n * Accordion type. Will have different visual representations.\n * Please note that \"nested-large\" and \"nested-small\" should only be used inside other components like e.g. the [OnyxSidebar](https://storybook.onyx.schwarz/?path=/docs/navigation-sidebar--default).\n */\n type?: AccordionType;\n};\n\nexport type AccordionInjectionKey<TValue extends PropertyKey> = InjectionKey<{\n /**\n * IDs of currently open AccordionItems.\n */\n openItems: Readonly<Ref<PropertyKey[]>>;\n /**\n * Function to update the open state of an AccordionItem.\n * @param id - The unique ID of the AccordionItem.\n * @param value - Whether the AccordionItem should be open (true) or closed (false).\n */\n updateOpen: (id: TValue, value: boolean) => void;\n disabled: Ref<boolean>;\n skeleton: Ref<SkeletonInjected>;\n type: Ref<AccordionType>;\n}>;\n\nexport const ACCORDION_INJECTION_KEY = Symbol() as AccordionInjectionKey<PropertyKey>;\n\nexport const ACCORDION_TYPES = [\"default\", \"nested-large\", \"nested-small\", \"card\"] as const;\nexport type AccordionType = (typeof ACCORDION_TYPES)[number];\n","<script lang=\"ts\" setup generic=\"TValue extends PropertyKey\">\nimport { provide, ref, toRef, toRefs, watch, watchEffect, type Ref } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport {\n ACCORDION_INJECTION_KEY,\n type AccordionInjectionKey,\n type OnyxAccordionProps,\n} from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxAccordionProps<TValue>>(), {\n exclusive: false,\n disabled: false,\n skeleton: SKELETON_INJECTED_SYMBOL,\n type: \"default\",\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the list of open items changes.\n */\n \"update:modelValue\": [value: TValue[]];\n}>();\n\ndefineSlots<{\n /**\n * Displays OnyxAccordionItem components.\n */\n default(): unknown;\n}>();\n\n/**\n * Internally managed open items in case no modelValue is set by the user.\n */\nconst _openItems = ref<TValue[]>([]) as Ref<TValue[]>;\nwatchEffect(() => (_openItems.value = props.modelValue ?? []));\n\nconst openItems = useVModel({\n // if modelValue is set by the user, it should be used instead of the internally managed open items\n props,\n emit,\n key: \"modelValue\",\n default: () => [],\n});\n\nconst { disabled, exclusive } = toRefs(props);\nconst skeleton = useSkeletonContext(props);\nconst { densityClass } = useDensity(props);\n\nconst updateOpen = (value: TValue, isOpen: boolean) => {\n if (!isOpen) {\n if (!openItems.value.includes(value)) return;\n openItems.value = openItems.value.filter((i) => i !== value);\n return;\n }\n if (exclusive.value) {\n openItems.value = [value];\n return;\n }\n if (!openItems.value.includes(value)) {\n openItems.value = openItems.value.concat(value);\n }\n};\n\nwatch(\n exclusive,\n (newExclusive) => {\n if (newExclusive && openItems.value.length > 1) {\n const lastOpenedItem = openItems.value.at(-1);\n openItems.value = lastOpenedItem != undefined ? [lastOpenedItem] : [];\n }\n },\n { immediate: true },\n);\n\nprovide(ACCORDION_INJECTION_KEY as AccordionInjectionKey<TValue>, {\n openItems: toRef(() => openItems.value),\n type: toRef(() => props.type),\n updateOpen,\n disabled,\n skeleton,\n});\n</script>\n\n<template>\n <div\n :class=\"[\n 'onyx-component',\n 'onyx-accordion',\n densityClass,\n { 'onyx-accordion--card': props.type === 'card' },\n ]\"\n >\n <slot></slot>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-accordion {\n @include layers.component() {\n width: 100%;\n\n &--card {\n --onyx-accordion-gap: var(--onyx-density-xs);\n display: flex;\n flex-direction: column;\n gap: var(--onyx-accordion-gap);\n }\n }\n}\n</style>\n","/**\n * All available onyx breakpoints / viewports.\n * Key = breakpoint name, value = width in pixels.\n */\nexport const ONYX_BREAKPOINTS = {\n \"2xs\": 320,\n xs: 577,\n sm: 769,\n md: 993,\n lg: 1441,\n xl: 1921,\n} as const;\n\nexport const ONYX_MAX_WIDTHS = {\n md: ONYX_BREAKPOINTS.lg - 1,\n lg: ONYX_BREAKPOINTS.xl - 1,\n} as const;\n\n// \"string &\" is needed to fix a current Vue issue where a warning is logged for invalid property types\n// when this types is used in a union, see:\n// https://github.com/SchwarzIT/onyx/issues/3290\nexport type OnyxBreakpoint = string & keyof typeof ONYX_BREAKPOINTS;\n","<script lang=\"ts\" setup>\nimport type { OnyxIconProps } from \"./types.js\";\n\nconst props = defineProps<OnyxIconProps>();\n</script>\n\n<template>\n <!-- eslint-disable vue/no-v-html -->\n <figure\n :class=\"{\n 'onyx-component': true,\n 'onyx-icon': true,\n 'onyx-icon--inline': props.inline,\n [`onyx-icon--${props.size}`]: props.size,\n [`onyx-icon--${props.color}`]: props.color,\n }\"\n aria-hidden=\"true\"\n v-html=\"props.icon\"\n ></figure>\n <!-- eslint-enable vue/no-v-html -->\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"../../styles/mixins/sizes.scss\";\n\n.onyx-icon {\n @include layers.component() {\n --icon-size: 1.5rem;\n --icon-color: currentColor;\n\n display: inline-block;\n width: var(--icon-size);\n min-width: var(--icon-size);\n height: var(--icon-size);\n fill: var(--icon-color);\n vertical-align: middle;\n\n & > svg {\n // display svg as block instead of default inline, to remove vertical alignment\n display: block;\n height: inherit;\n }\n\n &--inline {\n --icon-size: 1em;\n }\n\n @include sizes.define-rem-sizes using ($name, $size) {\n &--#{$name} {\n --icon-size: #{$size};\n }\n }\n\n //\n // icon colors:\n //\n $colors: primary, neutral, danger, warning, success, info;\n\n @each $color in $colors {\n &--#{$color} {\n --icon-color: var(--onyx-color-text-icons-#{$color}-intense);\n }\n }\n }\n}\n</style>\n","/**\n * Tracks for which animations a sync was requested, but not yet executed.\n * Used to \"throttle\" and avoid triggering the animation sync when it was already requested.\n */\nconst isAlreadyTriggered = new Set<string>();\n\n/**\n * The maximum time we want to wait for a sync.\n * We choose 200ms, because slower would be noticeable.\n */\nconst IDLE_TIMEOUT = 200;\n\n/**\n * `requestIdleCallback` is not available in Safari, so we use `setTimeout` with a timeout of 0 as a primitive polyfill.\n */\nconst onIdleCallback =\n globalThis.window && \"requestIdleCallback\" in globalThis.window\n ? globalThis.window.requestIdleCallback // eslint-disable-line compat/compat -- we monkey patch requestIdleCallback for compatibility using `setTimeout`\n : (cb: () => void, _: IdleRequestOptions) => setTimeout(cb, 0);\n\nconst syncAnimations = (animationName: string) => {\n if (!(\"getAnimations\" in document)) return;\n isAlreadyTriggered.delete(animationName);\n\n // get all animations and sync them\n document\n .getAnimations()\n .filter((a): a is CSSAnimation => \"animationName\" in a && a.animationName === animationName)\n .forEach((animation) => (animation.startTime = 0));\n};\n\n/**\n * This function allows to synchronizes CSS animations with the same name across the entire document.\n * The sync will not be executed immediately and is deemed \"low-priority\".\n */\nexport const requestAnimationSync = (animationName: string) => {\n if (isAlreadyTriggered.has(animationName)) {\n return;\n }\n\n isAlreadyTriggered.add(animationName);\n onIdleCallback(() => syncAnimations(animationName), { timeout: IDLE_TIMEOUT });\n};\n","<script setup lang=\"ts\">\nimport { onMounted } from \"vue\";\nimport { requestAnimationSync } from \"../../composables/animation.js\";\n\nonMounted(() => requestAnimationSync(\"onyx-skeleton\"));\n</script>\n\n<template>\n <figure aria-hidden=\"true\" class=\"onyx-component onyx-skeleton\"></figure>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-skeleton {\n @include layers.component() {\n border-radius: var(--onyx-radius-sm);\n\n // inherit size by default if not set explicitly\n height: 100%;\n width: 100%;\n max-width: 100%;\n max-height: 100%;\n\n background: linear-gradient(\n to right,\n var(--onyx-color-base-neutral-200) 20%,\n var(--onyx-color-base-neutral-300) 40%,\n var(--onyx-color-base-neutral-200) 60%\n );\n background-size: 500% 100%;\n animation: onyx-skeleton var(--onyx-duration-lg) ease infinite;\n\n @keyframes onyx-skeleton {\n 0% {\n background-position: 100% 50%;\n }\n 75% {\n background-position: 0 50%;\n }\n 100% {\n background-position: 0 50%;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconChevronDownSmall } from \"@sit-onyx/icons\";\nimport { computed, inject, watch } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { ACCORDION_INJECTION_KEY } from \"../OnyxAccordion/types.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxAccordionItemProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxAccordionItemProps>(), {\n disabled: false,\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\ndefineSlots<{\n /**\n * Displays the header content.\n */\n header(): unknown;\n\n /**\n * Displays the panel content.\n */\n default?(): unknown;\n}>();\n\nconst accordionContext = inject(ACCORDION_INJECTION_KEY, undefined);\n\nconst isOpen = computed({\n get: () => accordionContext?.openItems.value.includes(props.value),\n set: (open: boolean) => accordionContext?.updateOpen(props.value, open),\n});\n\nwatch(\n () => props.value,\n (newValue, oldValue) => {\n accordionContext?.updateOpen(newValue, accordionContext?.openItems.value.includes(newValue));\n accordionContext?.updateOpen(oldValue, false);\n },\n);\n\nconst skeleton = useSkeletonContext(props);\nconst { densityClass } = useDensity(props);\nconst isDisabled = computed(() => accordionContext?.disabled.value || props.disabled);\nconst type = computed(() => accordionContext?.type.value ?? \"default\");\n\nconst headerId = computed(() => `header-${props.value.toString()}`);\nconst panelId = computed(() => `panel-${props.value.toString()}`);\n\nconst showSkeleton = computed(() => skeleton.value || accordionContext?.skeleton.value);\n</script>\n\n<template>\n <component\n :is=\"type === 'card' ? OnyxSkeleton : 'div'\"\n v-if=\"showSkeleton\"\n :class=\"[\n 'onyx-component',\n 'onyx-accordion-item-skeleton',\n densityClass,\n { [`onyx-accordion-item-skeleton--${type}`]: type !== 'default' },\n ]\"\n >\n <OnyxSkeleton class=\"onyx-accordion-item-skeleton__main\" />\n <OnyxSkeleton class=\"onyx-accordion-item-skeleton__icon\" />\n </component>\n\n <details\n v-else\n :class=\"[\n 'onyx-component',\n 'onyx-accordion-item',\n densityClass,\n { [`onyx-accordion-item--${type}`]: type !== 'default' },\n ]\"\n :open=\"isOpen\"\n >\n <!-- eslint-disable-next-line vuejs-accessibility/click-events-have-key-events, vuejs-accessibility/interactive-supports-focus -- false positives -->\n <summary\n :id=\"headerId\"\n class=\"onyx-accordion-item__header\"\n role=\"button\"\n :tabindex=\"isDisabled ? -1 : 0\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"panelId\"\n :aria-disabled=\"isDisabled\"\n @click.prevent=\"isOpen = !isOpen\"\n >\n <div class=\"onyx-accordion-item__header-content\">\n <slot name=\"header\"></slot>\n </div>\n\n <OnyxIcon :icon=\"iconChevronDownSmall\" class=\"onyx-accordion-item__header-icon\" />\n </summary>\n\n <div :id=\"panelId\" class=\"onyx-accordion-item__panel\" role=\"region\" :aria-labelledby=\"headerId\">\n <slot></slot>\n </div>\n </details>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-accordion-item,\n.onyx-accordion-item-skeleton {\n @include layers.component() {\n --onyx-accordion-item-padding: var(--onyx-density-md);\n --onyx-accordion-item-gap: var(--onyx-density-md);\n --onyx-accordion-item-border: var(--onyx-1px-in-rem) solid\n var(--onyx-color-component-border-neutral);\n --onyx-accordion-item-border-focus: none;\n --onyx-accordion-item-border-radius: var(--onyx-radius-md);\n --onyx-accordion-item-font-size: var(--onyx-font-size-md);\n --onyx-accordion-item-line-height: var(--onyx-font-line-height-md);\n --onyx-accordion-item-font-weight: var(--onyx-font-weight-regular);\n --onyx-accordion-item-justify: space-between;\n --onyx-accordion-item-chevron-rotation: 0deg;\n --onyx-accordion-item-chevron-rotation-open: 180deg;\n\n // colors\n --onyx-accordion-item-color: var(--onyx-color-text-icons-neutral-medium);\n --onyx-accordion-item-color-hover: var(--onyx-color-text-icons-neutral-intense);\n --onyx-accordion-item-color-open: var(--onyx-accordion-item-color-hover);\n --onyx-accordion-item-background: transparent;\n --onyx-accordion-item-background-hover: var(--onyx-color-base-neutral-200);\n --onyx-accordion-item-background-focus: var(--onyx-accordion-item-background-hover);\n --onyx-accordion-item-outline: var(--onyx-outline-width) solid\n var(--onyx-color-component-focus-primary);\n\n &--nested-large,\n &--nested-small {\n --onyx-accordion-item-font-weight: var(--onyx-font-weight-semibold);\n --onyx-accordion-item-gap: var(--onyx-density-xs);\n --onyx-accordion-item-justify: flex-start;\n --onyx-accordion-item-chevron-rotation: 90deg;\n --onyx-accordion-item-chevron-rotation-open: 0deg;\n --onyx-accordion-item-color-open: var(--onyx-accordion-item-color);\n --onyx-accordion-item-outline: none;\n --onyx-accordion-item-border-radius: 0;\n --onyx-accordion-item-border-focus: var(--onyx-accordion-item-border);\n }\n\n &--nested-large {\n --onyx-accordion-item-color: var(--onyx-color-text-icons-neutral-intense);\n --onyx-accordion-item-background: var(--onyx-color-base-background-blank);\n --onyx-accordion-item-background-hover: var(--onyx-color-base-background-tinted);\n --onyx-accordion-item-background-focus: var(--onyx-color-base-neutral-200);\n }\n\n &--nested-small {\n --onyx-accordion-item-padding: var(--onyx-density-xs) var(--onyx-density-md);\n --onyx-accordion-item-font-size: var(--onyx-font-size-sm);\n --onyx-accordion-item-line-height: var(--onyx-font-line-height-sm);\n --onyx-accordion-item-color: var(--onyx-color-text-icons-neutral-medium);\n --onyx-accordion-item-background: var(--onyx-color-base-background-tinted);\n --onyx-accordion-item-background-hover: var(--onyx-color-base-neutral-200);\n --onyx-accordion-item-background-focus: var(--onyx-color-base-neutral-300);\n }\n\n &--card {\n --onyx-accordion-item-background: var(--onyx-color-base-background-blank);\n --onyx-accordion-item-color-open: var(--onyx-accordion-item-color);\n }\n }\n}\n\n.onyx-accordion-item {\n @include layers.component() {\n --onyx-accordion-toggle-duration: var(--onyx-duration-sm);\n\n border-bottom: var(--onyx-accordion-item-border);\n font-family: var(--onyx-font-family);\n width: 100%;\n\n @supports selector(::details-content) and (interpolate-size: allow-keywords) {\n interpolate-size: allow-keywords;\n\n &::details-content {\n height: 0;\n overflow: clip;\n transition:\n content-visibility var(--onyx-accordion-toggle-duration) ease,\n height var(--onyx-accordion-toggle-duration) ease;\n transition-behavior: allow-discrete;\n }\n\n &[open]::details-content {\n height: auto;\n }\n }\n\n &__header {\n color: var(--onyx-accordion-item-color);\n width: 100%;\n display: flex;\n justify-content: var(--onyx-accordion-item-justify);\n align-items: center;\n gap: var(--onyx-accordion-item-gap);\n padding: var(--onyx-accordion-item-padding);\n cursor: pointer;\n font-size: var(--onyx-accordion-item-font-size);\n line-height: var(--onyx-accordion-item-line-height);\n font-weight: var(--onyx-accordion-item-font-weight);\n background-color: var(--onyx-accordion-item-background);\n\n list-style: none;\n &::-webkit-details-marker {\n display: none;\n }\n\n &:hover,\n &:focus-visible {\n outline: none;\n color: var(--onyx-accordion-item-color-hover);\n }\n\n &:hover {\n background-color: var(--onyx-accordion-item-background-hover);\n }\n\n &:focus-visible {\n background-color: var(--onyx-accordion-item-background-focus);\n }\n }\n\n &--nested-large,\n &--nested-small {\n .onyx-accordion-item__header {\n position: sticky;\n top: 0;\n z-index: var(--onyx-z-index-sticky-content);\n }\n }\n\n &--card {\n border: var(--onyx-accordion-item-border);\n border-radius: var(--onyx-accordion-item-border-radius);\n background-color: var(--onyx-accordion-item-background);\n\n .onyx-accordion-item__header {\n border-radius: var(--onyx-accordion-item-border-radius);\n }\n\n &[open] {\n .onyx-accordion-item__header {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n }\n\n &:has(&__header:focus-visible) {\n border-radius: var(--onyx-accordion-item-border-radius);\n border-bottom: var(--onyx-accordion-item-border-focus);\n outline: var(--onyx-accordion-item-outline);\n }\n\n &__header-icon {\n transition: transform var(--onyx-accordion-toggle-duration) ease;\n transform: rotate(var(--onyx-accordion-item-chevron-rotation));\n }\n\n &[open] > &__header &__header-icon {\n transform: rotate(var(--onyx-accordion-item-chevron-rotation-open));\n }\n\n &[open] &__header {\n color: var(--onyx-accordion-item-color-open);\n\n &:hover,\n &:focus-visible {\n color: var(--onyx-accordion-item-color-hover);\n }\n\n &:focus-visible {\n border-radius: var(--onyx-accordion-item-border-radius)\n var(--onyx-accordion-item-border-radius) 0 0;\n }\n }\n\n &__panel {\n padding: var(--onyx-accordion-item-padding);\n color: var(--onyx-color-text-icons-neutral-intense);\n }\n\n &:has(&__header[aria-disabled=\"true\"]) {\n pointer-events: none;\n\n .onyx-accordion-item__header,\n .onyx-accordion-item__panel {\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n }\n }\n\n &-skeleton {\n $icon-size: 1.5rem;\n padding: var(--onyx-accordion-item-padding);\n display: flex;\n gap: var(--onyx-accordion-item-gap);\n border-bottom: var(--onyx-accordion-item-border);\n\n &__main {\n width: 100%;\n height: $icon-size;\n }\n\n &__icon {\n height: $icon-size;\n width: $icon-size;\n flex-shrink: 0;\n }\n\n &--card {\n border: none;\n height: calc($icon-size + 2 * var(--onyx-accordion-item-padding));\n }\n }\n}\n</style>\n","export const DATETIME_FORMATS = {\n date: { dateStyle: \"medium\" },\n \"datetime-local\": { dateStyle: \"medium\", timeStyle: \"short\" },\n time: { timeStyle: \"short\" },\n timestamp: {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n timeZoneName: \"shortOffset\",\n },\n} satisfies Record<string, Intl.DateTimeFormatOptions>;\n\nexport type DatetimeFormat = keyof typeof DATETIME_FORMATS;\n","export const NUMBER_FORMATS = {\n decimal: { style: \"decimal\" },\n} satisfies Record<string, Intl.NumberFormatOptions>;\n\nexport type NumberFormat = keyof typeof NUMBER_FORMATS;\n","import { computed, inject, readonly, toRef, type App, type InjectionKey, type MaybeRef } from \"vue\";\nimport type { DateValue } from \"../components/OnyxDatePicker/types.js\";\nimport type { FlattenedKeysOf, TranslationValue } from \"../types/i18n.js\";\nimport type { DeepPartial } from \"../types/utils.js\";\nimport { DATETIME_FORMATS, type DatetimeFormat } from \"./datetime-formats.js\";\nimport enUS from \"./locales/en-US.json\";\nimport { NUMBER_FORMATS, type NumberFormat } from \"./number-formats.js\";\n\n/**\n * The type of the imported `enUS` above is a concrete type so the value type of each message\n * is e.g. \"{ myKey: 'HelloWorld'}\" but it should be \"{ myKey: string }\".\n * This utility type converts all values to be of type string (more generic)\n * so we can actually use other locales as well.\n */\ntype GetTypeOfTranslations<T> = T extends object\n ? { [P in keyof T]?: GetTypeOfTranslations<T[P]> }\n : string;\n\n/** Available translations that are used by onyx components. */\nexport type OnyxTranslations = GetTypeOfTranslations<typeof enUS>;\n\nexport type OnyxTranslationKey = FlattenedKeysOf<OnyxTranslations>;\n\nexport type OnyxNumberFormatOptions = NumberFormat | Intl.NumberFormatOptions;\nexport type OnyxDateFormatOptions = DatetimeFormat | Intl.DateTimeFormatOptions;\n\nexport type ProvideI18nOptions = {\n /**\n * Current locale / language to use.\n * If a ref is passed (e.g. the locale from the `vue-i18n` package)\n * all onyx messages will be updated if it changes (if locale is supported).\n * If a message is missing for your currently set locale, English will be used as fallback.\n *\n * The should be in the BCP 47 format as it's used to localize date times using the native [Intl API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl)\n *\n * @default \"en-US\"\n */\n locale?: MaybeRef<string>;\n /**\n * Available translations / messages. English is always supported. For build-in translations, see:\n * https://onyx.schwarz/development/i18n.html\n *\n * @example\n * ```ts\n * import deDE from \"sit-onyx/locales/de-DE.json\";\n * {\n * messages: {\n * // English is always supported so we don't need to add it here\n * 'de-DE': deDE\n * }\n * }\n * ```\n */\n messages?: Record<string, DeepPartial<OnyxTranslations>>;\n /**\n * Custom translation function. This option can be used to pass a custom function for translations to onyx in case you want your i18n library to handle them.\n * @example\n * ```ts\n * import { useI18n } from \"vue-i18n\";\n *\n * const { t } = useI18n();\n * {\n * t: computed((key, placeholders) => t(`onyx.${key}`, placeholders?.n ?? 1, { named: placeholders }))\n * }\n * ```\n *\n * Note: If a custom `t` function is used, passed messages will not be used.\n */\n t?: MaybeRef<TranslationFunction>;\n};\n\nexport type TranslationFunction = (\n key: OnyxTranslationKey,\n /** Named values to interpolate into the translation. The property `n` is special as it represents the number of elements for pluralization. */\n placeholders?: Record<string, string | number | undefined> & { n?: number },\n) => string;\n\nexport const I18N_INJECTION_KEY = Symbol() as InjectionKey<OnyxI18n>;\n\nexport type OnyxI18n = ReturnType<typeof createI18n>;\n\n/**\n * Creates a new i18n instance.\n */\nexport const createI18n = (options: ProvideI18nOptions = {}) => {\n /**\n * Current locale.\n * @default \"en-US\"\n */\n const locale = readonly(toRef(options?.locale ?? \"en-US\"));\n\n const messages = computed(() => {\n const localeMessages = options.messages?.[locale.value];\n return localeMessages ?? enUS;\n });\n\n /**\n * Gets the translation for the given key.\n * If message is not found for current locale, English fallback will be used.\n * @param placeholders Placeholders that will be replaced in the message string\n * For pluralization, you must provide the placeholder `n`.\n */\n const t = computed((): TranslationFunction => {\n return (key, placeholders = {}) => {\n // use English message as fallback\n let message = resolveMessage(key, messages.value) ?? resolveMessage(key, enUS) ?? \"\";\n message = resolvePluralization(message, placeholders.n);\n return replacePlaceholders(message, placeholders);\n };\n });\n\n /**\n * Gets the formatted date/time string for the given date and format depending on the current locale.\n */\n const d = computed(() => {\n return (date: DateValue, format?: OnyxDateFormatOptions) => {\n const formatter = new Intl.DateTimeFormat(\n locale.value,\n typeof format === \"object\" || format === undefined ? format : DATETIME_FORMATS[format],\n );\n return formatter.format(new Date(date));\n };\n });\n\n /**\n * Gets the formatted number string for the given number and format depending on the current locale.\n */\n const n = computed(() => {\n return (value: number, format?: OnyxNumberFormatOptions) => {\n const formatter = new Intl.NumberFormat(\n locale.value,\n typeof format === \"object\" || format === undefined ? format : NUMBER_FORMATS[format],\n );\n return formatter.format(value);\n };\n });\n\n return {\n // If the user provided a custom `t` function, it is used instead of the default.\n t: options.t ? readonly(toRef(options.t)) : t,\n locale,\n d,\n n,\n };\n};\n\n/**\n * Provides a global i18n instance that is used by onyx.\n * Must only be called once in the `App.vue` file of a project that consumes onyx.\n */\nexport const provideI18n = (app: App, options?: ProvideI18nOptions) => {\n const i18n = createI18n(options);\n app.provide(I18N_INJECTION_KEY, i18n);\n return i18n;\n};\n\n/**\n * Injects the onyx i18n instance.\n * Creates a fallback if provide was never called.\n */\nexport const injectI18n = () => {\n return inject(I18N_INJECTION_KEY, () => createI18n(), true);\n};\n\n/**\n * Resolves the given flattened key (e.g. `a.b.c`) to the translation value of the given messages.\n * @returns Message value or undefined if translation does not exist.\n */\nconst resolveMessage = (\n key: OnyxTranslationKey,\n messages: DeepPartial<OnyxTranslations>,\n): string | undefined => {\n // see https://stackoverflow.com/a/6394168\n const message = key.split(\".\").reduce<TranslationValue | undefined>((obj, i) => {\n // this condition can logically not be reached but we need it for TypeScript\n // due to the .reduce() function\n if (!obj || typeof obj === \"string\") return obj;\n return obj[i];\n }, messages);\n\n return message && typeof message === \"string\" ? message : undefined;\n};\n\n/**\n * Returns the pluralized message (if multiple formats are defined using `\" | \"` separator.\n */\nconst resolvePluralization = (message: string, value?: number) => {\n const formats = message.split(\" | \").map((i) => i.trim());\n if (formats.length <= 1) return message;\n\n let pluralization: 0 | 1 | 2 = 1;\n if (value === 0) pluralization = 0;\n if (value && (value <= 0 || value > 1)) pluralization = 2;\n\n if (formats.length === 2) {\n return pluralization === 1 ? formats[0]! : formats[1]!;\n }\n\n return formats[pluralization]!;\n};\n\n/**\n * Replaces all placeholders in the given message.\n * If a value is provided, it will be replaced accordingly. Otherwise the placeholder\n * will be removed from the message (same behavior as \"vue-i18n\").\n */\nconst replacePlaceholders = (\n message: string,\n placeholders: Record<string, string | number | undefined>,\n): string => {\n if (!placeholders) return message;\n\n let replacedMessage = Object.entries(placeholders).reduce((replacedMessage, [key, value]) => {\n if (value === undefined) return replacedMessage;\n // \"gi\" is used to replace all occurrences because String.replaceAll() is not available\n // in our specified EcmaScript target\n return replacedMessage.replace(new RegExp(`{${key}}`, \"gi\"), value.toString());\n }, message);\n\n // replace string literals, e.g. replace {'@'} with @\n // see: https://vue-i18n.intlify.dev/guide/essentials/syntax#special-characters\n replacedMessage = replacedMessage.replace(/{'(.*?)'}/g, \"$1\");\n\n // remove all left-over placeholders that have no provided value to align with \"vue-i18n\"\n return replacedMessage.replace(/{.*}\\s?/gi, \"\");\n};\n","import { shallowRef, computed, reactive, onBeforeMount, watchEffect, onBeforeUnmount, toValue, unref, ref, nextTick, useId, watch, toRef } from \"vue\";\nconst createBuilder = (builder) => builder;\nfunction createElRef() {\n const elementRef = shallowRef();\n return computed({\n set: (element) => {\n elementRef.value = element != null && \"$el\" in element ? element.$el : element;\n },\n get: () => elementRef.value\n });\n}\nconst isSubsetMatching = (subset, target) => Object.entries(subset).every(\n ([key, value]) => target[key] === value\n);\nconst wasKeyPressed = (event, key) => {\n if (typeof key === \"string\") {\n return event.key === key;\n }\n return isSubsetMatching(\n { altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, ...key },\n event\n );\n};\nconst GRAPHEME_SEGMENTER = new Intl.Segmenter(\"en-US\");\nconst isPrintableCharacter = (key) => [...GRAPHEME_SEGMENTER.segment(key)].length === 1;\nconst GLOBAL_LISTENERS = reactive(/* @__PURE__ */ new Map());\nconst updateRemainingListeners = (type, remaining) => {\n if (remaining?.size) {\n GLOBAL_LISTENERS.set(type, remaining);\n return;\n }\n GLOBAL_LISTENERS.delete(type);\n document.removeEventListener(type, GLOBAL_HANDLER);\n};\nconst removeGlobalListener = (type, listener) => {\n const globalListener = GLOBAL_LISTENERS.get(type);\n globalListener?.delete(listener);\n updateRemainingListeners(type, globalListener);\n};\nconst addGlobalListener = (type, listener) => {\n const globalListener = GLOBAL_LISTENERS.get(type) ?? /* @__PURE__ */ new Set();\n globalListener.add(listener);\n GLOBAL_LISTENERS.set(type, globalListener);\n document.addEventListener(type, GLOBAL_HANDLER);\n};\nconst GLOBAL_HANDLER = (event) => {\n const type = event.type;\n GLOBAL_LISTENERS.get(type)?.forEach((cb) => cb(event));\n};\nconst useGlobalEventListener = ({\n type,\n listener,\n disabled\n}) => {\n onBeforeMount(\n () => watchEffect(\n () => disabled?.value ? removeGlobalListener(type, listener) : addGlobalListener(type, listener)\n )\n );\n onBeforeUnmount(() => removeGlobalListener(type, listener));\n};\nconst useOutsideClick = ({\n inside,\n onOutsideClick,\n disabled,\n checkOnTab\n}) => {\n const isOutsideClick = (target) => {\n if (!target) return true;\n const raw = toValue(inside);\n const elements = Array.isArray(raw) ? raw : [raw];\n return !elements.some((element) => element?.contains(target));\n };\n const clickListener = (event) => {\n if (isOutsideClick(event.target)) onOutsideClick(event);\n };\n useGlobalEventListener({ type: \"mousedown\", listener: clickListener, disabled });\n if (checkOnTab) {\n const keydownListener = async (event) => {\n if (event.key !== \"Tab\") return;\n await new Promise((resolve) => setTimeout(resolve));\n if (isOutsideClick(document.activeElement)) {\n onOutsideClick(event);\n }\n };\n useGlobalEventListener({ type: \"keydown\", listener: keydownListener, disabled });\n }\n};\nconst debounce = (handler, timeout) => {\n let timer;\n const func = (...lastArgs) => {\n clearTimeout(timer);\n timer = setTimeout(() => handler(...lastArgs), toValue(timeout));\n };\n func.abort = () => clearTimeout(timer);\n return func;\n};\nconst useTypeAhead = (callback, timeout = 500) => {\n let inputString = \"\";\n const debouncedReset = debounce(() => inputString = \"\", timeout);\n return (event) => {\n if (!isPrintableCharacter(event.key)) {\n return;\n }\n debouncedReset();\n inputString = `${inputString}${event.key}`;\n callback(inputString);\n };\n};\nconst createListbox = createBuilder(\n (options) => {\n const isMultiselect = computed(() => unref(options.multiple) ?? false);\n const isExpanded = computed(() => unref(options.isExpanded) ?? false);\n const descendantKeyIdMap = /* @__PURE__ */ new Map();\n const getOptionId = (value) => {\n if (!descendantKeyIdMap.has(value)) {\n descendantKeyIdMap.set(value, useId());\n }\n return descendantKeyIdMap.get(value);\n };\n const isFocused = ref(false);\n watchEffect(async () => {\n if (!isExpanded.value || options.activeOption.value == void 0 || !isFocused.value && !options.controlled) {\n return;\n }\n const id = getOptionId(options.activeOption.value);\n await nextTick();\n document.getElementById(id)?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n });\n const typeAhead = useTypeAhead((inputString) => options.onTypeAhead?.(inputString));\n const handleKeydown = (event) => {\n switch (event.key) {\n case \" \":\n event.preventDefault();\n if (options.activeOption.value != void 0) {\n options.onSelect?.(options.activeOption.value);\n }\n break;\n case \"ArrowUp\":\n event.preventDefault();\n if (options.activeOption.value == void 0) {\n options.onActivateLast?.();\n return;\n }\n options.onActivatePrevious?.(options.activeOption.value);\n break;\n case \"ArrowDown\":\n event.preventDefault();\n if (options.activeOption.value == void 0) {\n options.onActivateFirst?.();\n return;\n }\n options.onActivateNext?.(options.activeOption.value);\n break;\n case \"Home\":\n event.preventDefault();\n options.onActivateFirst?.();\n break;\n case \"End\":\n event.preventDefault();\n options.onActivateLast?.();\n break;\n default:\n typeAhead(event);\n }\n };\n const listbox = computed(\n () => options.controlled ? {\n role: \"listbox\",\n \"aria-multiselectable\": isMultiselect.value,\n \"aria-label\": unref(options.label),\n \"aria-description\": options.description,\n tabindex: \"-1\"\n } : {\n role: \"listbox\",\n \"aria-multiselectable\": isMultiselect.value,\n \"aria-label\": unref(options.label),\n \"aria-description\": options.description,\n tabindex: \"0\",\n \"aria-activedescendant\": options.activeOption.value != void 0 ? getOptionId(options.activeOption.value) : void 0,\n onFocus: () => isFocused.value = true,\n onBlur: () => isFocused.value = false,\n onKeydown: handleKeydown\n }\n );\n return {\n elements: {\n listbox,\n group: computed(() => {\n return (options2) => ({\n role: \"group\",\n \"aria-label\": options2.label\n });\n }),\n option: computed(() => {\n return (data) => {\n const selected = data.selected ?? false;\n return {\n id: getOptionId(data.value),\n role: \"option\",\n \"aria-label\": data.label,\n \"aria-disabled\": data.disabled,\n \"aria-checked\": isMultiselect.value ? selected : void 0,\n \"aria-selected\": !isMultiselect.value ? selected : void 0,\n onClick: () => !data.disabled && options.onSelect?.(data.value)\n };\n };\n })\n },\n state: {\n isFocused\n },\n internals: {\n getOptionId\n }\n };\n }\n);\nconst OPENING_KEYS = [\"ArrowDown\", \"ArrowUp\", \" \", \"Enter\", \"Home\", \"End\"];\nconst CLOSING_KEYS = [\n \"Escape\",\n { key: \"ArrowUp\", altKey: true },\n \"Enter\",\n \"Tab\"\n];\nconst SELECTING_KEYS = [\"Enter\"];\nconst isSelectingKey = (event, withSpace) => {\n const selectingKeys = withSpace ? [...SELECTING_KEYS, \" \"] : SELECTING_KEYS;\n return isKeyOfGroup(event, selectingKeys);\n};\nconst isKeyOfGroup = (event, group) => group.some((key) => wasKeyPressed(event, key));\nconst createComboBox = createBuilder(\n ({\n autocomplete: autocompleteRef,\n onAutocomplete,\n onTypeAhead,\n multiple: multipleRef,\n label,\n listLabel,\n listDescription,\n isExpanded: isExpandedRef,\n activeOption,\n onToggle,\n onSelect,\n onActivateFirst,\n onActivateLast,\n onActivateNext,\n onActivatePrevious,\n templateRef\n }) => {\n const controlsId = useId();\n const autocomplete = computed(() => unref(autocompleteRef));\n const isExpanded = computed(() => unref(isExpandedRef));\n const multiple = computed(() => unref(multipleRef));\n const handleInput = (event) => {\n const inputElement = event.target;\n if (autocomplete.value !== \"none\") {\n onAutocomplete?.(inputElement.value);\n }\n };\n const typeAhead = useTypeAhead((inputString) => onTypeAhead?.(inputString));\n const handleSelect = (value) => {\n onSelect?.(value);\n if (!unref(multiple)) {\n onToggle?.();\n }\n };\n const handleNavigation = (event) => {\n switch (event.key) {\n case \"ArrowUp\":\n event.preventDefault();\n if (activeOption.value == void 0) {\n return onActivateLast?.();\n }\n onActivatePrevious?.(activeOption.value);\n break;\n case \"ArrowDown\":\n event.preventDefault();\n if (activeOption.value == void 0) {\n return onActivateFirst?.();\n }\n onActivateNext?.(activeOption.value);\n break;\n case \"Home\":\n event.preventDefault();\n onActivateFirst?.();\n break;\n case \"End\":\n event.preventDefault();\n onActivateLast?.();\n break;\n }\n };\n const handleKeydown = (event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n }\n if (!isExpanded.value && isKeyOfGroup(event, OPENING_KEYS)) {\n onToggle?.();\n if (event.key === \" \") {\n event.preventDefault();\n }\n if (event.key === \"End\") {\n return onActivateLast?.();\n }\n return onActivateFirst?.();\n }\n if (isSelectingKey(event, autocomplete.value === \"none\")) {\n return handleSelect(activeOption.value);\n }\n if (isExpanded.value && isKeyOfGroup(event, CLOSING_KEYS)) {\n return onToggle?.();\n }\n if (autocomplete.value === \"none\" && isPrintableCharacter(event.key)) {\n !isExpanded.value && onToggle?.();\n return typeAhead(event);\n }\n if (autocomplete.value !== \"none\" && isPrintableCharacter(event.key)) {\n !isExpanded.value && onToggle?.();\n return;\n }\n return handleNavigation(event);\n };\n const autocompleteInput = computed(() => {\n if (autocomplete.value === \"none\") return null;\n return {\n \"aria-autocomplete\": autocomplete.value,\n type: \"text\"\n };\n });\n const {\n elements: { option, group, listbox },\n internals: { getOptionId }\n } = createListbox({\n label: listLabel,\n description: listDescription,\n multiple,\n controlled: true,\n activeOption,\n isExpanded,\n onSelect: handleSelect\n });\n useOutsideClick({\n inside: templateRef,\n onOutsideClick() {\n if (!isExpanded.value) return;\n onToggle?.(true);\n }\n });\n return {\n elements: {\n option,\n group,\n /**\n * The listbox associated with the combobox.\n */\n listbox: computed(() => ({\n ...listbox.value,\n id: controlsId,\n // preventDefault to not lose focus of the combobox\n onMousedown: (e) => e.preventDefault()\n })),\n /**\n * An input that controls another element, that can dynamically pop-up to help the user set the value of the input.\n * The input MAY be either a single-line text field that supports editing and typing or an element that only displays the current value of the combobox.\n */\n input: computed(() => ({\n role: \"combobox\",\n \"aria-expanded\": isExpanded.value,\n \"aria-controls\": controlsId,\n \"aria-label\": unref(label),\n \"aria-activedescendant\": activeOption.value != void 0 ? getOptionId(activeOption.value) : void 0,\n onInput: handleInput,\n onKeydown: handleKeydown,\n ...autocompleteInput.value\n })),\n /**\n * An optional button to control the visibility of the popup.\n */\n button: computed(() => ({\n tabindex: \"-1\",\n onClick: () => onToggle?.()\n }))\n }\n };\n }\n);\nconst createMenuButton = createBuilder((options) => {\n const rootId = useId();\n const menuId = useId();\n const rootRef = createElRef();\n const menuRef = createElRef();\n const buttonId = useId();\n const position = computed(() => toValue(options.position) ?? \"bottom\");\n useGlobalEventListener({\n type: \"keydown\",\n listener: (e) => e.key === \"Escape\" && setExpanded(false),\n disabled: computed(() => !options.isExpanded.value)\n });\n const updateDebouncedExpanded = debounce(() => options.onToggle(), 200);\n watch(options.isExpanded, () => updateDebouncedExpanded.abort());\n const setExpanded = (expanded, debounced = false) => {\n if (options.disabled?.value) return;\n if (expanded === options.isExpanded.value) {\n updateDebouncedExpanded.abort();\n return;\n }\n if (debounced) {\n updateDebouncedExpanded();\n return;\n }\n options.onToggle();\n };\n const focusRelativeItem = (next) => {\n const currentMenuItem = document.activeElement;\n const currentMenu = currentMenuItem?.closest('[role=\"menu\"]') || menuRef.value;\n if (!currentMenu) return;\n const menuItems = Array.from(currentMenu.querySelectorAll('[role=\"menuitem\"]')).filter((item) => item.closest('[role=\"menu\"]') === currentMenu);\n if (position.value === \"top\") menuItems.reverse();\n let nextIndex = 0;\n if (currentMenuItem) {\n const currentIndex = menuItems.indexOf(currentMenuItem);\n switch (next) {\n case \"next\":\n nextIndex = currentIndex + 1;\n break;\n case \"prev\":\n nextIndex = currentIndex - 1;\n break;\n case \"first\":\n nextIndex = 0;\n break;\n case \"last\":\n nextIndex = menuItems.length - 1;\n break;\n }\n }\n const nextMenuItem = menuItems[nextIndex];\n nextMenuItem?.focus();\n };\n const handleKeydown = (event) => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n focusRelativeItem(position.value === \"bottom\" ? \"next\" : \"prev\");\n break;\n case \"ArrowUp\":\n event.preventDefault();\n focusRelativeItem(position.value === \"bottom\" ? \"prev\" : \"next\");\n break;\n case \"Home\":\n event.preventDefault();\n focusRelativeItem(\"first\");\n break;\n case \"End\":\n event.preventDefault();\n focusRelativeItem(\"last\");\n break;\n case \" \":\n case \"Enter\":\n if (event.target instanceof HTMLInputElement) break;\n event.preventDefault();\n event.target.click();\n break;\n case \"Escape\":\n event.preventDefault();\n setExpanded(false);\n break;\n }\n };\n const triggerEvents = computed(() => {\n if (toValue(options.trigger) !== \"hover\") return;\n return {\n onMouseenter: () => setExpanded(true),\n onMouseleave: () => setExpanded(false, true)\n };\n });\n useOutsideClick({\n inside: rootRef,\n onOutsideClick: () => setExpanded(false),\n disabled: computed(() => !options.isExpanded.value),\n checkOnTab: true\n });\n return {\n elements: {\n root: computed(() => ({\n id: rootId,\n onKeydown: handleKeydown,\n ref: rootRef,\n ...triggerEvents.value\n })),\n button: computed(\n () => ({\n \"aria-controls\": menuId,\n \"aria-expanded\": options.isExpanded.value,\n \"aria-haspopup\": true,\n onFocus: () => setExpanded(true, true),\n onClick: () => toValue(options.trigger) == \"click\" ? setExpanded(!options.isExpanded.value) : void 0,\n id: buttonId,\n disabled: options.disabled?.value\n })\n ),\n menu: {\n id: menuId,\n ref: menuRef,\n role: \"menu\",\n \"aria-labelledby\": buttonId,\n onClick: () => setExpanded(false)\n },\n ...createMenuItems().elements\n }\n };\n});\nconst createMenuItems = createBuilder((options) => {\n const onKeydown = (event) => {\n switch (event.key) {\n case \"ArrowRight\":\n case \" \":\n case \"Enter\":\n event.preventDefault();\n options?.onOpen?.();\n break;\n }\n };\n return {\n elements: {\n listItem: {\n role: \"none\"\n },\n menuItem: (data) => ({\n \"aria-current\": data.active ? \"page\" : void 0,\n \"aria-disabled\": data.disabled,\n role: \"menuitem\",\n onKeydown\n })\n }\n };\n});\nconst MathUtils = {\n /**\n * Ensures that a given `number` is or is between a given `min` and `max`.\n */\n clamp: (number, min, max) => Math.max(Math.min(number, max), min)\n};\nconst createNavigationMenu = createBuilder(({ navigationName }) => {\n const navId = useId();\n const getMenuButtons = () => {\n const nav = navId ? document.getElementById(navId) : void 0;\n if (!nav) return [];\n return Array.from(nav.querySelectorAll(\"button[aria-expanded][aria-controls]\"));\n };\n const focusRelative = (trigger, next) => {\n const menuButtons = getMenuButtons();\n const index = menuButtons.indexOf(trigger);\n if (index === -1) return;\n const nextIndex = MathUtils.clamp(\n index + (next === \"next\" ? 1 : -1),\n 0,\n menuButtons.length - 1\n );\n menuButtons[nextIndex]?.focus();\n };\n return {\n elements: {\n nav: {\n \"aria-label\": unref(navigationName),\n id: navId,\n onKeydown: (event) => {\n switch (event.key) {\n case \"ArrowRight\":\n focusRelative(event.target, \"next\");\n break;\n case \"ArrowLeft\":\n focusRelative(event.target, \"previous\");\n break;\n }\n }\n }\n }\n };\n});\nconst createTabs = createBuilder((options) => {\n const idMap = /* @__PURE__ */ new Map();\n const getId = (value) => {\n if (!idMap.has(value)) {\n idMap.set(value, { tabId: useId(), panelId: useId() });\n }\n return idMap.get(value);\n };\n const handleKeydown = (event) => {\n const tab = event.target;\n const enabledTabs = Array.from(\n tab.parentElement?.querySelectorAll('[role=\"tab\"]') ?? []\n ).filter((tab2) => tab2.ariaDisabled !== \"true\");\n const currentTabIndex = enabledTabs.indexOf(tab);\n const focusElement = (element) => {\n if (element instanceof HTMLElement) element.focus();\n };\n const focusFirstTab = () => focusElement(enabledTabs.at(0));\n const focusLastTab = () => focusElement(enabledTabs.at(-1));\n const focusTab = (direction) => {\n if (currentTabIndex === -1) return;\n const newIndex = direction === \"next\" ? currentTabIndex + 1 : currentTabIndex - 1;\n if (newIndex < 0) {\n return focusLastTab();\n } else if (newIndex >= enabledTabs.length) {\n return focusFirstTab();\n }\n return focusElement(enabledTabs.at(newIndex));\n };\n switch (event.key) {\n case \"ArrowRight\":\n focusTab(\"next\");\n break;\n case \"ArrowLeft\":\n focusTab(\"previous\");\n break;\n case \"Home\":\n focusFirstTab();\n break;\n case \"End\":\n focusLastTab();\n break;\n case \"Enter\":\n case \" \":\n {\n const tabEntry = Array.from(idMap.entries()).find(([, { tabId }]) => tabId === tab.id);\n if (tabEntry) options.onSelect?.(tabEntry[0]);\n }\n break;\n }\n };\n return {\n elements: {\n tablist: computed(() => ({\n role: \"tablist\",\n \"aria-label\": unref(options.label),\n onKeydown: handleKeydown\n })),\n tab: computed(() => {\n return (data) => {\n const { tabId: selectedTabId } = getId(unref(options.selectedTab));\n const { tabId, panelId } = getId(data.value);\n const isSelected = tabId === selectedTabId;\n return {\n id: tabId,\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": panelId,\n \"aria-disabled\": data.disabled ? true : void 0,\n onClick: () => options.onSelect?.(data.value),\n tabindex: isSelected && !data.disabled ? 0 : -1\n };\n };\n }),\n tabpanel: computed(() => {\n return (data) => {\n const { tabId, panelId } = getId(data.value);\n return {\n id: panelId,\n role: \"tabpanel\",\n \"aria-labelledby\": tabId\n };\n };\n })\n }\n };\n});\nconst useDismissible = ({ isExpanded }) => useGlobalEventListener({\n type: \"keydown\",\n listener: (e) => {\n if (e.key === \"Escape\") {\n isExpanded.value = false;\n }\n },\n disabled: computed(() => !isExpanded.value)\n});\nconst createToggletip = createBuilder(\n ({ toggleLabel, isVisible }) => {\n const triggerId = useId();\n const _isVisible = toRef(isVisible ?? false);\n useDismissible({ isExpanded: _isVisible });\n const toggle = () => _isVisible.value = !_isVisible.value;\n return {\n elements: {\n /**\n * The element which controls the toggletip visibility:\n * Preferably a `button` element.\n */\n trigger: computed(() => ({\n id: triggerId,\n onClick: toggle,\n \"aria-label\": toValue(toggleLabel)\n })),\n /**\n * The element with the relevant toggletip content.\n * Only simple, textual content is allowed.\n */\n tooltip: {\n onToggle: (e) => {\n const tooltip = e.target;\n _isVisible.value = tooltip.matches(\":popover-open\");\n },\n anchor: triggerId,\n popover: \"auto\",\n role: \"status\",\n tabindex: \"-1\"\n }\n },\n state: {\n isVisible: _isVisible\n }\n };\n }\n);\nconst createTooltip = createBuilder(({ debounce: debounce2, isVisible }) => {\n const tooltipId = useId();\n const _isVisible = toRef(isVisible ?? false);\n let timeout;\n const debouncedVisible = computed({\n get: () => _isVisible.value,\n set: (newValue) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n _isVisible.value = newValue;\n }, toValue(debounce2));\n }\n });\n const hoverEvents = {\n onMouseover: () => debouncedVisible.value = true,\n onMouseout: () => debouncedVisible.value = false,\n onFocusin: () => _isVisible.value = true,\n onFocusout: () => _isVisible.value = false\n };\n useDismissible({ isExpanded: _isVisible });\n return {\n elements: {\n /**\n * The element which controls the tooltip visibility on hover.\n */\n trigger: {\n \"aria-describedby\": tooltipId,\n ...hoverEvents\n },\n /**\n * The element describing the tooltip.\n * Only simple, textual and non-focusable content is allowed.\n */\n tooltip: {\n popover: \"manual\",\n role: \"tooltip\",\n id: tooltipId,\n tabindex: \"-1\",\n ...hoverEvents\n }\n },\n state: {\n isVisible: _isVisible\n }\n };\n});\nexport {\n CLOSING_KEYS,\n OPENING_KEYS,\n createBuilder,\n createComboBox,\n createElRef,\n createListbox,\n createMenuButton,\n createMenuItems,\n createNavigationMenu,\n createTabs,\n createToggletip,\n createTooltip,\n debounce,\n isPrintableCharacter,\n useGlobalEventListener,\n useOutsideClick,\n wasKeyPressed\n};\n","<script lang=\"ts\" setup>\nimport { useGlobalEventListener, useOutsideClick, wasKeyPressed } from \"@sit-onyx/headless\";\nimport { computed, useTemplateRef, watch } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport type { OnyxBasicDialogProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxBasicDialogProps>(), {\n modal: false,\n alert: false,\n alignment: \"center\",\n nonDismissible: false,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the dialog should be closed.\n * Opening is always controlled via the `open` prop.\n */\n \"update:open\": [open: boolean];\n}>();\n\ndefineSlots<{\n /**\n * Dialog content. For accessibility purposes it is strongly recommended\n * to focus an element inside the dialog when it opens. The element will depend\n * on your use case (e.g. an input, button etc.).\n */\n default(): unknown;\n}>();\n\nconst dialog = useTemplateRef(\"dialogRef\");\n\nconst { densityClass } = useDensity(props);\n\nconst open = useVModel({ props, emit, key: \"open\", default: false });\n\n/**\n * Shows the dialog either as default dialog or modal.\n */\nconst openDialog = () => {\n if (props.modal) dialog.value?.showModal();\n else dialog.value?.show();\n};\n\n// sync open state\nwatch([dialog, open], () => {\n if (open.value) openDialog();\n else dialog.value?.close();\n});\n\nwatch(\n () => props.modal,\n () => {\n if (dialog.value?.open) {\n // when the modal prop is changed while the dialog is already open, an error would\n // be thrown so we need to close it first\n dialog.value.close();\n openDialog();\n }\n },\n);\n\nconst content = useTemplateRef(\"contentRef\");\n\nuseOutsideClick({\n inside: content,\n // modal dialog obscures other content and can be closed by outside click\n // non-modal dialog allows interactions with other elements without closing\n disabled: computed(() => !open.value || props.nonDismissible || !props.modal),\n onOutsideClick: () => emit(\"update:open\", false),\n});\n\nuseGlobalEventListener({\n type: \"keydown\",\n // modal dialog has native support for closing via `Escape`\n // non-modal dialog needs custom support for this\n disabled: computed(() => !open.value || props.nonDismissible),\n listener: (event) => wasKeyPressed(event, { key: \"Escape\" }) && emit(\"update:open\", false),\n});\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <!-- do not use the @close event here since it would emit redundant events when we call .close() internally -->\n <!-- also we use cancel.prevent here so the dialog does not close automatically and is fully controlled by the \"open\" property -->\n <dialog\n v-if=\"props.open\"\n ref=\"dialogRef\"\n :class=\"[\n 'onyx-component',\n densityClass,\n 'onyx-truncation-multiline',\n 'onyx-basic-dialog',\n { [`onyx-basic-dialog--${props.alignment}`]: props.alignment !== 'center' },\n ]\"\n :aria-modal=\"props.modal\"\n :aria-label=\"props.label\"\n :role=\"props.alert ? 'alertdialog' : undefined\"\n @cancel.prevent\n >\n <div ref=\"contentRef\" class=\"onyx-basic-dialog__content\">\n <slot></slot>\n </div>\n </dialog>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-basic-dialog {\n @include layers.component() {\n --onyx-basic-dialog-screen-gap: var(--onyx-grid-margin);\n --onyx-basic-dialog-border-radius: var(--onyx-radius-md);\n --onyx-basic-dialog-padding: var(--onyx-density-md) var(--onyx-density-lg);\n outline: none;\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n border-radius: var(--onyx-basic-dialog-border-radius);\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n background-color: var(--onyx-color-base-background-blank);\n overflow: auto;\n z-index: var(--onyx-z-index-page-overlay);\n padding: 0;\n\n $max-size: calc(100% - 2 * var(--onyx-basic-dialog-screen-gap));\n max-width: $max-size;\n max-height: $max-size;\n\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: auto;\n width: fit-content;\n height: fit-content;\n\n &::backdrop {\n background-color: var(--onyx-color-component-opacity-backdrop);\n }\n\n &:modal {\n z-index: var(--onyx-z-index-app-overlay);\n border: none;\n }\n\n &--left,\n &--right {\n --onyx-basic-dialog-screen-gap: var(--onyx-density-xs);\n transform: none;\n height: 100%;\n }\n\n &--left {\n left: var(--onyx-basic-dialog-screen-gap);\n margin-left: 0;\n }\n\n &--right {\n left: unset;\n right: var(--onyx-basic-dialog-screen-gap);\n }\n\n &__content {\n padding: var(--onyx-basic-dialog-padding);\n width: inherit;\n }\n }\n}\n.dark .onyx-basic-dialog:modal {\n outline: var(--onyx-spacing-5xs) solid var(--onyx-color-component-border-neutral);\n}\n</style>\n","/**\n * Returns true if searchString appears as a substring without considering capitalization or diacritics.\n * E.g. `ñ` and `n` are considered to be the same glyph.\n */\nexport const normalizedIncludes = (haystack: string, needle: string): boolean => {\n const haystackNormalized = removeDiacritics(haystack.toLowerCase());\n const needleNormalized = removeDiacritics(needle.toLowerCase());\n\n return haystackNormalized.includes(needleNormalized);\n};\n\nexport const removeDiacritics = (str: string) =>\n str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n\n/**\n * Normalizes the given text (e.g. from a headline) to a URL-safe string that can be used as URL hash.\n *\n * @example \"Hello World\" => \"hello-world\", e.g. used as \"https://example.com/my-page#hello-world\"\n */\nexport const normalizeUrlHash = (text: string) => {\n return text.trim().toLowerCase().replace(/\\W/gi, \"-\");\n};\n\n/**\n * Gets the initials for the given username by considering the given locale.\n *\n * @returns Initials or undefined if the username contains unsupported characters (e.g. because its a language that does not support initials).\n */\nexport const getInitials = (username: string, locale: string) => {\n if (UNSUPPORTED_INITIALS_TEXT_REGEX.test(username)) {\n return;\n }\n\n const wordSegmenter = new Intl.Segmenter(locale, { granularity: \"word\" });\n\n const name = username.trim().toLocaleUpperCase(locale);\n const wordSegments = Array.from(wordSegmenter.segment(name)).filter((s) => s.isWordLike);\n if (wordSegments.length === 0) return;\n\n const firstWord = wordSegments[0]!.segment;\n const lastWord = wordSegments.length === 1 ? undefined : wordSegments.at(-1)?.segment;\n\n if (!lastWord) {\n return `${getGrapheme(firstWord, locale, 0)}${getGrapheme(firstWord, locale, 1)}`;\n }\n return `${getGrapheme(firstWord, locale, 0)}${getGrapheme(lastWord, locale, 0)}`;\n};\n\n/**\n * Gets the character at tht given index using the `Intl.Segmenter` API.\n */\nconst getGrapheme = (value: string, locale: string, index: number) => {\n const segmenter = new Intl.Segmenter(locale, { granularity: \"grapheme\" });\n const segments = Array.from(segmenter.segment(value)).map((segment) => segment.segment);\n return segments.at(index) ?? \"\";\n};\n\n/**\n * Regular expression matching languages for which we currently don't support initials.\n * Arabic: Arabic, Arabic Supplement, Arabic Extended-A.\n * Korean: Hangul Jamo, Hangul Compatibility Jamo, Hangul Jamo Extended-A, Hangul Syllables, Hangul Jamo Extended-B.\n * Japanese: Hiragana, Katakana.\n * CJK: CJK Unified Ideographs Extension A, CJK Unified Ideographs, CJK Compatibility Ideographs,\n * CJK Unified Ideographs Extension B\n *\n * @see https://github.com/microsoft/fluentui/blob/b4a12e8c011441b0d0af21a78091b36074f81ef6/packages/react-components/react-avatar/library/src/utils/getInitials.ts#L34\n */\nconst UNSUPPORTED_INITIALS_TEXT_REGEX: RegExp =\n /[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\u1100-\\u11FF\\u3130-\\u318F\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3040-\\u309F\\u30A0-\\u30FF\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFAFF]|[\\uD840-\\uD869][\\uDC00-\\uDED6]/;\n","import type { WithLinkProp } from \"../components/OnyxRouterLink/types.js\";\n\n/**\n * Extracts the link props from the given data and unifies them into an object if its a string link.\n */\nexport const extractLinkProps = (link: NonNullable<WithLinkProp[\"link\"]>) => {\n if (typeof link === \"string\") return { href: link };\n return link;\n};\n\n/**\n * Checks whether the given link is internal / a relative link of the current application.\n */\nexport const isInternalLink = (href: string) => {\n // if link can be parsed, it is a full URL with some protocol and domain and no relative link\n // see: https://developer.mozilla.org/en-US/docs/Web/API/URL/canParse_static\n return !URL.canParse(href);\n};\n","import { computed, inject, unref, type InjectionKey, type Ref } from \"vue\";\nimport type { SharedLinkProps } from \"../components/OnyxRouterLink/types.js\";\nimport { extractLinkProps, isInternalLink } from \"../utils/router.js\";\n\n/**\n * Internal behavior of the `OnyxRouterLink`. Should be used for navigation. Considers the user provided [router](https://onyx.schwarz/development/router.html).\n */\nexport const useLink = () => {\n const router = inject(ROUTER_INJECTION_KEY, undefined);\n\n /**\n * Currently active route (if router is provided).\n */\n const currentRoute = computed(() => {\n if (!router) return;\n const route = unref(router.currentRoute);\n return typeof route === \"string\" ? { path: route } : route;\n });\n\n /**\n * Handles the navigation with the user provided router if available and the link is internal.\n * Otherwise the default browser behavior of the `<a>` tag will handle the navigation.\n *\n * @param e Mouse event of a `<a>` element, e.g. from a click listener.\n * @example\n * ```vue\n * <script lang=\"ts\" setup>\n * const { navigate } = useLink();\n * </script>\n *\n * <template>\n * <a\n * :href=\"props.href\"\n * :target=\"props.target\"\n * @click=\"navigate($event, props.href)\"\n * >\n * <slot></slot>\n * </a>\n * </template>\n * ```\n */\n const navigate = (e: MouseEvent, href: string) => {\n if (router && isInternalLink(href) && shouldHandleNavigation(e)) {\n // prevent actual navigation so we can handle this with the user provided router\n e.preventDefault();\n router.push(href);\n }\n };\n\n /**\n * Checks whether the given path is currently active based on the currently active route.\n */\n const isActive = computed(() => {\n return (link?: string | SharedLinkProps) => {\n if (!currentRoute.value || link == undefined) return false;\n\n const href = normalizeHref(extractLinkProps(link).href);\n const path = normalizeHref(currentRoute.value.path);\n const { hash } = currentRoute.value;\n\n if (href === \"/\") return path === href;\n if (hash && hash === href) return true;\n return path === href;\n };\n });\n\n return { navigate, currentRoute, isActive };\n};\n\n/**\n * Checks whether we should handle the navigation for a given mouse event using the user provided router.\n *\n * @see: https://github.com/vuejs/router/blob/7deea23a30739af1bda56f966133848bb25d36df/packages/router/src/RouterLink.ts#L394\n */\nconst shouldHandleNavigation = (e: MouseEvent) => {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return;\n // don't redirect when preventDefault called\n if (e.defaultPrevented) return;\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) return;\n // don't redirect if `target=\"_blank\"` or a hash is used to e.g. navigate to a section of a page\n if (e.currentTarget && e.currentTarget instanceof Element) {\n const target = e.currentTarget.getAttribute(\"target\");\n const href = e.currentTarget.getAttribute(\"href\");\n if (target === \"_blank\" || href?.startsWith(\"#\")) return;\n }\n\n return true;\n};\n\n/**\n * Normalized the given href by:\n * - convert \"\" to \"/\"\n * - remove trailing slashes (only if href is not \"/\" itself)\n * - trim whitespaces\n */\nconst normalizeHref = (href: string) => {\n const value = href.trim();\n if (value === \"\") return \"/\";\n if (value === \"/\") return value;\n return value.replace(/\\/+$/, \"\");\n};\n\nexport type ProvideRouterOptions = {\n /**\n * Programmatically navigate to a new URL.\n * @see https://router.vuejs.org/api/interfaces/Router.html#push-\n */\n push: (to: string) => void;\n /**\n * Currently active route.\n * @see https://router.vuejs.org/api/interfaces/Router.html#currentRoute\n */\n currentRoute: Ref<string | { path: string; hash?: string }>;\n};\n\nexport const ROUTER_INJECTION_KEY = Symbol() as InjectionKey<ProvideRouterOptions>;\n","<script lang=\"ts\" setup>\nimport type { OnyxVisuallyHiddenProps } from \"./types.js\";\n\ndefineSlots<{\n /**\n * Content that should be visually hidden.\n */\n default: () => unknown;\n}>();\n\nconst props = withDefaults(defineProps<OnyxVisuallyHiddenProps>(), { is: \"span\" });\n</script>\n\n<template>\n <component :is=\"props.is\" class=\"onyx-component onyx-visually-hidden\"><slot></slot></component>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"../../styles/mixins/visibility.scss\";\n\n.onyx-visually-hidden {\n @include layers.component() {\n @include visibility.visually-hidden();\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useLink } from \"../../composables/useLink.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport OnyxVisuallyHidden from \"../OnyxVisuallyHidden/OnyxVisuallyHidden.vue\";\nimport type { OnyxRouterLinkProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxRouterLinkProps>(), {\n target: \"_self\",\n});\n\ndefineSlots<{\n default(): unknown;\n}>();\n\nconst { t } = injectI18n();\nconst { navigate, isActive } = useLink();\n</script>\n\n<template>\n <a\n :class=\"[\n 'onyx-component',\n 'onyx-router-link',\n { 'onyx-router-link--active': isActive(props.href) },\n ]\"\n :href=\"props.href\"\n :target=\"props.target\"\n :rel=\"props.target === '_blank' ? 'noreferrer' : undefined\"\n @click=\"navigate($event, props.href)\"\n >\n <slot></slot>\n\n <OnyxVisuallyHidden v-if=\"props.target === '_blank'\">\n {{ t(\"link.opensExternally\") }}\n </OnyxVisuallyHidden>\n </a>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-router-link {\n @include layers.component() {\n cursor: pointer;\n\n // reset styles\n outline-offset: inherit;\n text-decoration: inherit;\n color: inherit;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport { normalizeUrlHash } from \"../../utils/strings.js\";\nimport OnyxRouterLink from \"../OnyxRouterLink/OnyxRouterLink.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport OnyxVisuallyHidden from \"../OnyxVisuallyHidden/OnyxVisuallyHidden.vue\";\nimport type { OnyxHeadlineProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxHeadlineProps>(), {\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\ndefineSlots<{\n /**\n * Headline content.\n */\n default(): unknown;\n}>();\n\nconst { t } = injectI18n();\nconst skeleton = useSkeletonContext(props);\n\nconst normalizedHash = computed(() => (props.hash ? normalizeUrlHash(props.hash) : undefined));\nconst showAs = computed(() => props.showAs ?? props.is);\n\nconst copyLink = async (hash: string) => {\n const { origin, pathname, search } = window.location;\n const fullUrl = `${origin}${pathname}${search}#${hash}`;\n await navigator.clipboard.writeText(fullUrl);\n};\n</script>\n\n<template>\n <OnyxSkeleton\n v-if=\"skeleton\"\n :class=\"['onyx-headline-skeleton', `onyx-headline-skeleton--${showAs}`]\"\n />\n\n <component\n :is=\"props.is\"\n v-else\n :id=\"normalizedHash\"\n :class=\"['onyx-component', 'onyx-headline', `onyx-headline--${showAs}`]\"\n >\n <OnyxRouterLink\n v-if=\"normalizedHash\"\n :href=\"`#${normalizedHash}`\"\n target=\"_self\"\n class=\"onyx-headline__hash\"\n :title=\"t('headline.copyLink')\"\n @click=\"copyLink(normalizedHash)\"\n >\n <OnyxVisuallyHidden>{{ t(\"headline.copyLinkTo\") }}</OnyxVisuallyHidden>\n <slot />\n </OnyxRouterLink>\n\n <slot v-else />\n </component>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n@use \"../../styles/mixins/sizes\";\n\n.onyx-headline {\n @include layers.component() {\n --onyx-headline-scroll-margin: var(--onyx-spacing-xl);\n --border-radius: var(--onyx-radius-sm);\n font-weight: var(--onyx-font-weight-semibold);\n color: var(--onyx-color-text-icons-neutral-intense);\n position: relative;\n border-radius: var(--border-radius);\n scroll-margin-top: var(--onyx-headline-scroll-margin);\n\n &__hash {\n color: inherit;\n text-decoration: none;\n border-radius: 0 var(--border-radius) var(--border-radius) 0;\n outline: none;\n display: inline-block;\n\n &:hover,\n &:focus-visible {\n background-color: var(--onyx-color-base-neutral-200);\n padding-right: var(--onyx-density-xs);\n\n &::before {\n $width: 1.5rem;\n position: absolute;\n width: $width;\n left: -$width;\n text-align: center;\n color: var(--onyx-color-text-icons-primary-intense);\n cursor: pointer;\n background-color: inherit;\n line-height: inherit;\n border-radius: var(--border-radius) 0 0 var(--border-radius);\n\n // the / \"\" is used to ignore the content for screen readers, see:\n // https://developer.mozilla.org/en-US/docs/Web/CSS/content#alternative_text_string_counter\n // we still set 'content: \"#\"' in case the browser does not support the alternative syntax\n content: \"#\";\n content: \"#\" / \"\";\n }\n }\n\n &:focus-visible {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n outline-offset: 0;\n\n &::before {\n // we apply the visual outline as box-shadow here instead of native outline because we need to cut off the right side\n box-shadow: 0 0 0 var(--onyx-outline-width) var(--onyx-color-component-focus-primary);\n\n // remove right box shadow since its applied by the parent outline\n $offset: calc(-1 * var(--onyx-outline-width));\n clip-path: inset($offset 0 $offset $offset);\n }\n }\n }\n }\n\n &-skeleton {\n height: 1lh;\n width: 10rem;\n max-width: 100%;\n }\n}\n\n.onyx-headline,\n.onyx-headline-skeleton {\n @include layers.component() {\n @include sizes.define-headline-sizes();\n }\n}\n</style>\n","import { onMounted, watch, type Ref } from \"vue\";\n\nexport const useAutofocus = (\n inputRef: Ref<HTMLElement | null>,\n props: { autofocus: boolean; loading?: boolean },\n) => {\n if (!props.autofocus) {\n return;\n }\n\n onMounted(() => {\n if (!props.loading) {\n inputRef.value?.focus();\n return;\n }\n\n watch(\n () => !!props.loading,\n () => inputRef.value?.focus(),\n { once: true },\n );\n });\n};\n","import { computed, inject, provide, toRef, type InjectionKey, type Reactive, type Ref } from \"vue\";\nimport type { RequiredMarkerType } from \"../../composables/required.js\";\nimport type { ShowErrorMode } from \"../../composables/useErrorClass.js\";\nimport { userConsole } from \"../../utils/console.js\";\n\nconst FORM_INJECTION_KEY = Symbol() as InjectionKey<ReturnType<typeof createFormInjectionContext>>;\n\n/**\n * Props on the `OnyxForm` component.\n * These are injected, so that they can be used in the form child components.\n */\nexport type FormProps = {\n /**\n * Whether the input should be disabled and prevent the user from interacting with it.\n * Disabled makes the element not mutable, focusable, or even submitted with the form.\n * It will also not be validated.\n *\n * @default `false`\n */\n disabled?: boolean;\n /**\n * Configures if and when errors are shown.\n * - `true`: errors will be shown initially.\n * - `false`: errors will never be shown. ⚠️ Only the displaying of the error is effected! An error can still block submission!\n * - \"touched\": only shows an error *after* a user has significantly interacted with the input, see [:user-invalid](https://drafts.csswg.org/selectors/#user-invalid-pseudo)\n *\n * @default \"touched\"\n */\n showError?: ShowErrorMode;\n /**\n * How to display the required / optional marker.\n * - optional: will show an `(optional)` text after the label for optional form elements.\n * - required: will show an `*` indicator for required inputs after the label instead.\n *\n * No marker will be visible if the label is hidden.\n *\n * @default undefined By default the parents setting is used, if none is defined on any `required` is the default.\n */\n requiredMarker?: RequiredMarkerType;\n};\n\n/**\n * Props that may be used by the form child components.\n */\nexport type FormComputedProps = {\n [TKey in keyof FormProps]-?: FormProps[TKey];\n};\n\n/**\n * Props that may be used by the form child components.\n */\nexport type FormInjectedProps = {\n /**\n * Whether the input should be disabled and prevent the user from interacting with it.\n * Disabled makes the element not mutable, focusable, or even submitted with the form.\n * It will also not be validated.\n *\n * @default Inherits value from closest `<OnyxForm>` component or `false` if none exists\n */\n disabled?: FormInjected<boolean>;\n /**\n * Configures if and when errors are shown.\n * - `true`: errors will be shown initially.\n * - `false`: errors will never be shown. ⚠️ Only the displaying of the error is effected! An error can still block submission!\n * - \"touched\": only shows an error *after* a user has significantly interacted with the input, see [:user-invalid](https://drafts.csswg.org/selectors/#user-invalid-pseudo)\n *\n * @default Inherits value from closest `<OnyxForm>` component or `touched` if none exists\n */\n showError?: FormInjected<ShowErrorMode>;\n /**\n * How to display the required / optional marker.\n * - optional: will show an `(optional)` text after the label for optional form elements.\n * - required: will show an `*` indicator for required inputs after the label instead.\n *\n * No marker will be visible if the label is hidden.\n *\n * @default Inherits value from closest `<OnyxForm>` component or `required` if none exists\n */\n requiredMarker?: FormInjected<RequiredMarkerType>;\n};\n\n/**\n * Symbol for the injected form injected properties.\n */\nexport const FORM_INJECTED_SYMBOL = Symbol(\"FORM_INJECTED_SYMBOL\");\nexport type FORM_INJECTED = symbol; // we can't use `typeof FORM_INJECTED_SYMBOL` as vue is unable to infer its type: https://github.com/SchwarzIT/onyx/issues/1980\n/**\n * Prop type used by form child elements, which indicates that the prop value is taken from the parent form by default.\n * The props **MUST** use `FORM_INJECTED_SYMBOL` as default value.\n * `useFormContext` is used to access the injected form properties.\n *\n * @example\n * ```ts\n * const props = withDefaults(defineProps<OnyxComponentProps>(), {\n * readonly: FORM_INJECTED_SYMBOL,\n * disabled: FORM_INJECTED_SYMBOL,\n * });\n *\n * const { disabled, readonly } = useFormContext(props);\n * ```\n */\nexport type FormInjected<T> = T | FORM_INJECTED;\n\nconst createCompute = <TKey extends keyof FormProps>(\n formProps: Ref<FormProps> | undefined,\n props: Ref<FormInjectedProps>,\n key: TKey,\n defaultValue: FormComputedProps[TKey],\n) =>\n computed(() => {\n const prop = props.value[key] as FormInjected<FormComputedProps[TKey]> | undefined;\n if (prop != undefined && typeof prop !== \"symbol\") {\n return prop;\n }\n if (prop === FORM_INJECTED_SYMBOL) {\n return formProps?.value[key] ?? defaultValue;\n }\n if (prop != undefined) {\n userConsole?.error(\n `The %s prop is an unrecognized symbol: %o which is not identical to the expected symbol %o.`,\n key,\n prop,\n FORM_INJECTED_SYMBOL,\n );\n }\n return defaultValue;\n });\n\nconst createFormInjectionContext =\n (formProps?: Ref<FormProps>) =>\n (\n props: Ref<FormInjectedProps>,\n ): {\n [TKey in keyof FormComputedProps]: NonNullable<Readonly<Ref<FormComputedProps[TKey]>>>;\n } => ({\n disabled: createCompute(formProps, props, \"disabled\", false),\n showError: createCompute(formProps, props, \"showError\", \"touched\"),\n requiredMarker: createCompute(formProps, props, \"requiredMarker\", \"required\"),\n });\n\nexport const provideFormContext = (formProps: Reactive<FormProps> | undefined) =>\n provide(FORM_INJECTION_KEY, createFormInjectionContext(formProps && toRef(formProps)));\n\nconst DEFAULT_FORM_INJECTION_CONTEXT = createFormInjectionContext();\n/**\n * Provides the injected form properties (if available).\n * Otherwise a defined default is used.\n * A prop defined on the child component will always take precedence over the injected form properties.\n *\n * The props **MUST** use `FORM_INJECTED_SYMBOL` as default value.\n * The type `FormInjected<T>` can be used as PropType wrapper.\n *\n * @example\n * ```ts\n * const props = withDefaults(defineProps<OnyxComponentProps>(), {\n * readonly: FORM_INJECTED_SYMBOL, // By default, the forms injected value is used\n * disabled: FORM_INJECTED_SYMBOL, // By default, the forms injected value is used\n * });\n *\n * const { disabled, readonly } = useFormContext(props);\n * ```\n */\nexport const useFormContext = (props: Reactive<FormInjectedProps>) => {\n return inject(\n FORM_INJECTION_KEY,\n /** Default */\n DEFAULT_FORM_INJECTION_CONTEXT,\n )(toRef(props));\n};\n","<script lang=\"ts\" setup>\nimport { computed, useTemplateRef } from \"vue\";\nimport { useAutofocus } from \"../../composables/useAutoFocus.js\";\nimport { extractLinkProps } from \"../../utils/router.js\";\nimport { useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxRouterLink from \"../OnyxRouterLink/OnyxRouterLink.vue\";\nimport type { OnyxButtonProps } from \"./types.js\";\n\nconst props = withDefaults(\n defineProps<Pick<OnyxButtonProps, \"disabled\" | \"link\" | \"loading\" | \"type\" | \"autofocus\">>(),\n { type: \"button\" },\n);\n\ndefineSlots<{\n /**\n * Button content.\n */\n default(): unknown;\n}>();\n\nconst button = useTemplateRef(\"buttonRef\");\nconst { disabled } = useFormContext(props);\n\nconst linkProps = computed(() =>\n props.link != undefined ? extractLinkProps(props.link) : undefined,\n);\n\nuseAutofocus(button, props);\n</script>\n\n<template>\n <OnyxRouterLink v-if=\"linkProps\" v-bind=\"linkProps\">\n <slot></slot>\n </OnyxRouterLink>\n\n <button\n v-else\n ref=\"buttonRef\"\n :disabled=\"disabled || props.loading\"\n :type=\"props.type\"\n :autofocus=\"props.autofocus\"\n >\n <slot></slot>\n </button>\n</template>\n","<script lang=\"ts\" setup>\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport ButtonOrLinkLayout from \"../OnyxButton/ButtonOrLinkLayout.vue\";\nimport { FORM_INJECTED_SYMBOL } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxSystemButtonProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxSystemButtonProps>(), {\n disabled: FORM_INJECTED_SYMBOL,\n autofocus: false,\n skeleton: SKELETON_INJECTED_SYMBOL,\n color: \"intense\",\n});\n\nconst skeleton = useSkeletonContext(props);\n</script>\n\n<template>\n <OnyxSkeleton\n v-if=\"skeleton\"\n :class=\"['onyx-system-button-skeleton', props.icon ? '' : 'onyx-system-button-skeleton--text']\"\n />\n\n <ButtonOrLinkLayout\n v-else\n v-bind=\"props\"\n type=\"button\"\n :class=\"['onyx-system-button', 'onyx-text--small', `onyx-system-button--${props.color}`]\"\n :aria-label=\"props.label\"\n :title=\"props.label\"\n >\n <OnyxIcon v-if=\"props.icon\" :icon=\"props.icon\" />\n <template v-else>{{ props.label }}</template>\n </ButtonOrLinkLayout>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-system-button,\n.onyx-system-button-skeleton {\n @include layers.component() {\n --height: 1.5rem;\n }\n}\n\n.onyx-system-button-skeleton {\n @include layers.component() {\n height: var(--height);\n width: var(--height);\n max-width: 100%;\n\n &--text {\n width: var(--onyx-spacing-4xl);\n }\n }\n}\n\n.onyx-system-button {\n @include layers.component() {\n font-family: var(--onyx-font-family);\n color: var(--color);\n background-color: var(--background-color);\n border-radius: var(--onyx-radius-sm);\n border: none;\n padding: 0;\n height: var(--height);\n min-width: var(--height);\n max-width: 100%;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n &:enabled,\n &:is(a) {\n cursor: pointer;\n\n &:hover,\n &:focus-visible {\n --background-color: var(--hover-background-color);\n --color: var(--hover-focus-color);\n }\n\n &:focus-visible {\n --background-color: var(--focus-active-background-color);\n --color: var(--hover-focus-color);\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n }\n\n &:active {\n --background-color: var(--focus-active-background-color);\n --color: var(--active-color);\n }\n }\n\n .onyx-icon {\n --icon-size: 1.125rem;\n }\n\n $is_text_button: \"&:not(:has(.onyx-icon))\";\n\n #{$is_text_button} {\n padding: var(--onyx-spacing-5xs) var(--onyx-spacing-2xs);\n }\n\n &--intense {\n --color: var(--onyx-color-text-icons-neutral-medium);\n --hover-focus-color: var(--onyx-color-text-icons-neutral-intense);\n --active-color: var(--onyx-color-text-icons-primary-bold);\n\n --background-color: transparent;\n --hover-background-color: var(--onyx-color-base-neutral-300);\n --focus-active-background-color: var(--onyx-color-base-neutral-300);\n\n #{$is_text_button} {\n --color: var(--onyx-color-text-icons-neutral-intense);\n --hover-focus-color: var(--onyx-color-text-icons-neutral-intense);\n --active-color: var(--onyx-color-text-icons-primary-bold);\n\n --background-color: var(--onyx-color-base-neutral-300);\n --hover-background-color: var(--onyx-color-base-neutral-200);\n --focus-active-background-color: var(--onyx-color-base-neutral-200);\n }\n }\n\n &--soft {\n --color: var(--onyx-color-text-icons-neutral-medium);\n --hover-focus-color: var(--onyx-color-text-icons-neutral-intense);\n --active-color: var(--onyx-color-text-icons-primary-intense);\n\n --background-color: transparent;\n --hover-background-color: var(--onyx-color-base-background-blank);\n --focus-active-background-color: var(--onyx-color-base-background-blank);\n\n #{$is_text_button} {\n --color: var(--onyx-color-text-icons-neutral-intense);\n --hover-focus-color: var(--onyx-color-text-icons-neutral-intense);\n --active-color: var(--onyx-color-text-icons-primary-intense);\n\n --background-color: transparent;\n --hover-background-color: var(--onyx-color-base-background-blank);\n --focus-active-background-color: var(--onyx-color-base-background-blank);\n }\n }\n\n &--medium {\n --color: var(--onyx-color-text-icons-neutral-medium);\n --hover-focus-color: var(--onyx-color-text-icons-neutral-intense);\n --active-color: var(--onyx-color-text-icons-primary-intense);\n\n --background-color: transparent;\n --hover-background-color: var(--onyx-color-base-neutral-200);\n --focus-active-background-color: var(--onyx-color-base-neutral-200);\n\n #{$is_text_button} {\n --color: var(--onyx-color-text-icons-neutral-intense);\n --hover-focus-color: var(--onyx-color-text-icons-neutral-intense);\n --active-color: var(--onyx-color-text-icons-primary-bold);\n\n --background-color: var(--onyx-color-base-neutral-200);\n --hover-background-color: var(--onyx-color-base-neutral-300);\n --focus-active-background-color: var(--onyx-color-base-neutral-200);\n }\n }\n\n &:disabled {\n --background-color: transparent;\n --color: var(--onyx-color-text-icons-neutral-soft);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconCircleAttention, iconXSmall } from \"@sit-onyx/icons\";\nimport { useId } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport type { Nullable } from \"../../types/utils.js\";\nimport OnyxBasicDialog from \"../OnyxBasicDialog/OnyxBasicDialog.vue\";\nimport OnyxHeadline from \"../OnyxHeadline/OnyxHeadline.vue\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxSystemButton from \"../OnyxSystemButton/OnyxSystemButton.vue\";\nimport type { OnyxAlertModalProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxAlertModalProps>(), {\n icon: () => ({ icon: iconCircleAttention, color: \"danger\" }),\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the modal dialog should be closed.\n */\n \"update:open\": [open: Nullable<boolean>];\n}>();\n\ndefineSlots<{\n /**\n * Modal content.\n */\n default(): unknown;\n /**\n * Optional slot to override the headline with custom content.\n * If unset, the `label` property will be shown.\n */\n headline?(bindings: Pick<OnyxAlertModalProps, \"label\">): unknown;\n /**\n * Slot to display custom actions at the bottom of the modal, e.g. buttons for confirm or cancelling the current user workflow.\n * Focus is automatically set to the first focusable element inside the modal dialog.\n * If this is a button, it should be the least destructive action, to prevent users from accidentally confirming non-reversible actions.\n *\n * If you have to, you can use the `autofocus` button attribute to force the initial focus on another button.\n *\n * @example\n * ```vue\n * <OnyxButton label=\"Cancel\" color=\"neutral\" mode=\"plain\" autofocus />\n * ```\n */\n actions?(): unknown;\n}>();\n\nconst { t } = injectI18n();\nconst { densityClass } = useDensity(props);\n\nconst describedById = useId();\n</script>\n\n<template>\n <OnyxBasicDialog\n :class=\"['onyx-alert-modal', densityClass]\"\n v-bind=\"props\"\n :aria-describedby=\"describedById\"\n modal\n alert\n @update:open=\"emit('update:open', $event)\"\n >\n <div class=\"onyx-alert-modal__content\">\n <OnyxIcon v-if=\"props.icon\" class=\"onyx-alert-modal__icon\" v-bind=\"props.icon\" size=\"64px\" />\n\n <div>\n <div class=\"onyx-alert-modal__headline\">\n <slot name=\"headline\" :label=\"props.label\">\n <OnyxHeadline is=\"h2\">{{ props.label }}</OnyxHeadline>\n </slot>\n\n <OnyxSystemButton\n class=\"onyx-alert-modal__close\"\n :label=\"t('dialog.close')\"\n :icon=\"iconXSmall\"\n @click=\"emit('update:open', false)\"\n />\n </div>\n\n <div :id=\"describedById\" class=\"onyx-alert-modal__body onyx-truncation\">\n <slot></slot>\n </div>\n </div>\n </div>\n\n <div class=\"onyx-alert-modal__actions\">\n <slot name=\"actions\"></slot>\n </div>\n </OnyxBasicDialog>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"../../styles/breakpoints.scss\";\n\n.onyx-alert-modal {\n @include layers.component() {\n --max-width: 26rem;\n\n &__content {\n max-width: var(--max-width);\n display: flex;\n align-items: center;\n gap: var(--onyx-density-sm);\n }\n\n &__headline {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--onyx-density-xs);\n }\n\n &__body {\n margin-top: var(--onyx-density-sm);\n white-space: pre-line;\n }\n\n &__actions {\n margin-top: var(--onyx-density-md);\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--onyx-density-xs);\n max-width: var(--max-width);\n }\n\n &__icon {\n @include breakpoints.screen(max, md) {\n --icon-size: 3rem;\n }\n\n @include breakpoints.screen(max, sm) {\n --icon-size: 2rem;\n }\n }\n }\n}\n</style>\n","import {\n computed,\n customRef,\n isProxy,\n mergeProps,\n toRaw,\n useAttrs,\n type ComponentPublicInstance,\n type HTMLAttributes,\n type Ref,\n type VNodeProps,\n type VNodeRef,\n} from \"vue\";\nimport type { Data, MergeAll } from \"../types/index.js\";\nimport { userConsole } from \"./console.js\";\n\n// region docs\n/**\n * Extension of `useAttrs` which splits root attributes from other properties.\n * As root properties are considered: `style` and `class`.\n *\n * Make sure to call `defineOptions({ inheritAttrs: false });`.\n *\n * @example\n * ```vue\n * <script setup>\n * defineOptions({ inheritAttrs: false });\n * const { rootAttrs, restAttrs } = useRootAttrs();\n * </script>\n * <template>\n * <div class=\"onyx-component\" v-bind=\"rootAttrs\">\n * <!-- ... -->\n * <input\n * // some other attributes...\n * v-bind=\"restAttrs\"\n * />\n * <!-- ... -->\n * </div>\n * </template>\n */\nexport const useRootAttrs = <T extends Pick<HTMLAttributes, \"class\" | \"style\">>() => {\n // endregion docs\n const attrs = useAttrs();\n\n const rootAttrs = computed(\n () => ({ class: attrs[\"class\"], style: attrs[\"style\"] }) as Pick<T, \"class\" | \"style\">,\n );\n\n const restAttrs = computed(() => {\n const rest = { ...attrs };\n delete rest.class;\n delete rest.style;\n return rest as Omit<T, \"class\" | \"style\">;\n });\n\n return {\n /**\n * Contains the `class` and `style` fall-through attributes, if set.\n */\n rootAttrs,\n /**\n * Contains all fall-through attributes except `class` and `style`.\n */\n restAttrs,\n };\n};\n\nconst MERGED_REFS_SYMBOL = Symbol(\"MERGED_REFS\");\n\ntype MergedRef = Ref & {\n /**\n * In this array we store the refs that we want to keep in sync.\n */\n [MERGED_REFS_SYMBOL]: VNodeRef[];\n};\n\n/**\n * Creates a new `ref` that syncs the `toMerge` refs uni-directional.\n * Only intended to be used for template/vnode refs.\n */\nconst createMergedRef = <T>(...toMerge: VNodeRef[]) => {\n let value: T;\n const _ref = customRef((track, trigger) => {\n return {\n [MERGED_REFS_SYMBOL]: toMerge ?? [],\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n _ref[MERGED_REFS_SYMBOL].forEach((r) => {\n switch (typeof r) {\n case \"function\":\n r(value as VRef, []);\n break;\n case \"object\":\n r.value = value;\n break;\n default:\n userConsole?.error(\n `Template Ref of type \"${typeof r}\" is not supported and cannot be merged!`,\n );\n }\n });\n trigger();\n },\n };\n }) as MergedRef;\n _ref[MERGED_REFS_SYMBOL] = toMerge ?? [];\n return _ref;\n};\n\nconst isMergedRef = (_ref: unknown): _ref is MergedRef =>\n !!_ref && typeof _ref === \"object\" && MERGED_REFS_SYMBOL in _ref;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- we want to allow any kind of props\ntype VProps = Data<any> & VNodeProps;\n\ntype VRef = Element | ComponentPublicInstance | null;\n\ntype MergeVuePropsResult<T extends unknown[]> =\n MergeAll<T> extends { ref: NonNullable<unknown> } ? MergeAll<[...T, { ref: Ref }]> : MergeAll<T>;\n\n/**\n * Extends the Vue's `mergeProp` function, so that it\n * - doesn't complain about nullish parameters\n * - is also able to merge `ref` properties\n */\nexport const mergeVueProps = <T extends (VProps | null | undefined)[]>(...args: T | []) =>\n args.reduce((prev, curr) => {\n // Make sure to always trigger a read access in case we need to access it using `toRaw`\n const _ = curr?.ref;\n const currRef = curr && isProxy(curr) && \"ref\" in curr ? toRaw(curr).ref : curr?.ref;\n const prevRef = prev?.ref;\n const merged = mergeProps(prev ?? {}, curr ?? {});\n\n if (!prevRef && !currRef) {\n return merged;\n }\n\n // when there is only one ref defined, we can just use that one\n if (!prevRef || !currRef) {\n merged.ref = currRef ?? prevRef;\n return merged;\n }\n\n let mergedRef: MergedRef;\n // use existing merged ref, otherwise create a new one\n if (isMergedRef(prevRef)) {\n prevRef[MERGED_REFS_SYMBOL].push(currRef);\n mergedRef = prevRef;\n } else if (isMergedRef(currRef)) {\n currRef[MERGED_REFS_SYMBOL].push(prevRef);\n mergedRef = currRef;\n } else {\n mergedRef = createMergedRef(prevRef, currRef);\n }\n merged.ref = mergedRef;\n return merged;\n }, {}) as MergeVuePropsResult<T>;\n","<script lang=\"ts\" setup>\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport ButtonOrLinkLayout from \"../OnyxButton/ButtonOrLinkLayout.vue\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxFABButtonProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxFABButtonProps>(), {\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\nconst { densityClass } = useDensity(props);\nconst skeleton = useSkeletonContext(props);\n</script>\n\n<template>\n <OnyxSkeleton v-if=\"skeleton\" :class=\"['onyx-fab-button-skeleton', densityClass]\" />\n\n <ButtonOrLinkLayout\n v-else\n :class=\"['onyx-component', 'onyx-fab-button', densityClass, 'onyx-text']\"\n :title=\"props.hideLabel ? props.label : undefined\"\n :aria-label=\"props.label\"\n :link=\"props.link\"\n >\n <OnyxIcon v-if=\"props.icon\" :icon=\"props.icon\" />\n <span v-if=\"!props.hideLabel\" class=\"onyx-fab-button__label\">{{ props.label }}</span>\n </ButtonOrLinkLayout>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-fab-button,\n.onyx-fab-button-skeleton {\n @include layers.component() {\n --onyx-fab-button-background: var(--onyx-color-base-neutral-800);\n --onyx-fab-button-background-hover: var(--onyx-color-base-neutral-500);\n --onyx-fab-button-padding: var(--onyx-density-md);\n --onyx-fab-button-gap: var(--onyx-density-xs);\n box-shadow: var(--onyx-shadow-soft-bottom);\n }\n}\n\n.onyx-fab-button-skeleton {\n @include layers.component() {\n width: calc(1.5rem + 2 * var(--onyx-fab-button-padding));\n height: calc(1.5rem + 2 * var(--onyx-fab-button-padding));\n border-radius: var(--onyx-radius-full);\n }\n}\n\n.onyx-fab-button {\n @include layers.component() {\n font-family: var(--onyx-font-family);\n background: var(--onyx-fab-button-background);\n border: none;\n cursor: pointer;\n color: var(--onyx-color-text-icons-neutral-inverted);\n\n display: inline-flex;\n justify-content: center;\n align-items: center;\n gap: var(--onyx-fab-button-gap);\n border-radius: var(--onyx-radius-full);\n width: max-content;\n max-width: 100%;\n padding: var(--onyx-fab-button-padding);\n\n &:hover {\n background: var(--onyx-fab-button-background-hover);\n }\n\n &:focus-visible {\n background: var(--onyx-fab-button-background);\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n }\n }\n}\n</style>\n","import { onBeforeUnmount, onMounted, ref, watch, type Ref } from \"vue\";\n\nexport type UseResizeObserverOptions = {\n /**\n * Sets which box model the observer will observe changes to.\n *\n * @default 'content-box'\n */\n box?: ResizeObserverBoxOptions;\n};\n\n/**\n * Template ref of either a native HTML element or a custom Vue component.\n */\nexport type VueTemplateRefElement = Element | { $el: Element } | null | undefined;\n\nexport const useResizeObserver = (\n /**\n * Target to observe. If undefined, the documentElement will be observed.\n */\n target?: Ref<VueTemplateRefElement>,\n options?: UseResizeObserverOptions,\n) => {\n const box = options?.box ?? \"content-box\";\n const width = ref(0);\n const height = ref(0);\n\n const callback: ResizeObserverCallback = (entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n const boxSize =\n box === \"content-box\"\n ? entry.contentBoxSize\n : box === \"border-box\"\n ? entry.borderBoxSize\n : entry.devicePixelContentBoxSize;\n\n width.value = boxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = boxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n };\n\n // ensure ResizeObserver is only called on mount to support server side rendering\n onMounted(() => {\n if (!(\"ResizeObserver\" in window)) return;\n const observer = new ResizeObserver(callback);\n\n if (!target) {\n observer.observe(document.documentElement, { box });\n return;\n }\n\n watch(\n target,\n (newTargetRef, oldTargetRef) => {\n const newTarget = getTemplateRefElement(newTargetRef);\n const oldTarget = getTemplateRefElement(oldTargetRef);\n\n if (oldTarget) observer?.unobserve(oldTarget);\n if (newTarget) observer?.observe(newTarget, { box });\n else {\n // target was removed (e.g. with v-if so we need to reset the size manually)\n width.value = 0;\n height.value = 0;\n }\n },\n { immediate: true },\n );\n\n onBeforeUnmount(() => observer.disconnect());\n });\n\n return { width, height };\n};\n\n/**\n * Gets the native HTML element of a template ref.\n */\nexport const getTemplateRefElement = (ref: VueTemplateRefElement) => {\n return ref instanceof Element ? ref : ref?.$el;\n};\n","import { onBeforeUnmount, onMounted, ref, watch, type Ref } from \"vue\";\n\nimport { getTemplateRefElement, type VueTemplateRefElement } from \"./useResizeObserver.js\";\nexport type UseIntersectionObserverOptions = {\n /**\n * Sets the root element to use for intersection checking.\n *\n * @default null\n */\n root?: Element | null;\n /**\n * Margin around the root element.\n *\n * @default '0px'\n */\n rootMargin?: string;\n /**\n * Thresholds at which to trigger the callback.\n *\n * @default [0]\n */\n thresholds?: number | number[];\n};\n\nexport const useIntersectionObserver = (\n target?: Ref<VueTemplateRefElement>,\n options?: UseIntersectionObserverOptions,\n) => {\n const isIntersecting = ref(false);\n\n const callback: IntersectionObserverCallback = (entries) => {\n entries.forEach((entry) => {\n isIntersecting.value = entry.isIntersecting;\n });\n };\n\n onMounted(() => {\n if (!(\"IntersectionObserver\" in window)) return;\n\n const observer = new IntersectionObserver(callback, {\n root: options?.root ?? null,\n rootMargin: options?.rootMargin ?? \"0px\",\n threshold: options?.thresholds ?? [0],\n });\n\n if (!target?.value) {\n observer.observe(document.documentElement);\n return;\n }\n\n watch(\n target,\n (newTargetRef, oldTargetRef) => {\n const newTarget = getTemplateRefElement(newTargetRef);\n const oldTarget = getTemplateRefElement(oldTargetRef);\n if (oldTarget) observer.unobserve(oldTarget);\n if (newTarget) observer.observe(newTarget);\n },\n { immediate: true },\n );\n\n onBeforeUnmount(() => observer.disconnect());\n });\n\n return { isIntersecting };\n};\n","import {\n onBeforeMount,\n onUnmounted,\n ref,\n toValue,\n watchEffect,\n type MaybeRefOrGetter,\n type Ref,\n} from \"vue\";\nimport { useIntersectionObserver } from \"./useIntersectionObserver.js\";\nimport type { OpenAlignment } from \"./useOpenAlignment.js\";\nimport { getTemplateRefElement, type VueTemplateRefElement } from \"./useResizeObserver.js\";\n\nexport type AnchorPosition =\n | \"top\"\n | \"top right\"\n | \"top left\"\n | \"right\"\n | \"bottom\"\n | \"bottom right\"\n | \"bottom left\"\n | \"left\";\n\ntype UseAnchorPositionPolyfillOptions = {\n positionedRef: Ref<VueTemplateRefElement>;\n targetRef: Ref<VueTemplateRefElement>;\n positionArea: MaybeRefOrGetter<AnchorPosition>;\n alignment: MaybeRefOrGetter<OpenAlignment>;\n alignsWithEdge: MaybeRefOrGetter<boolean>;\n fitParent: MaybeRefOrGetter<boolean>;\n offset?: number;\n};\n\nexport const useAnchorPositionPolyfill = ({\n positionedRef,\n targetRef,\n positionArea,\n alignment,\n alignsWithEdge,\n fitParent,\n offset = 0,\n}: UseAnchorPositionPolyfillOptions) => {\n const leftPosition = ref(\"-1000px\");\n const topPosition = ref(\"-1000px\");\n\n const { isIntersecting: targetVisible } = useIntersectionObserver(targetRef);\n\n const updateAnchorPositionPolyfill = () => {\n const positionedEl = getTemplateRefElement(positionedRef.value);\n const target = getTemplateRefElement(targetRef.value);\n if (!positionedEl || !target) {\n return;\n }\n const targetRect = target.getBoundingClientRect();\n const positionedElRect = positionedEl.getBoundingClientRect();\n let top = 0;\n let left = 0;\n\n const alignmentPositioning =\n toValue(alignsWithEdge) &&\n toValue(alignment) !== \"center\" &&\n (toValue(positionArea) === \"top\" || toValue(positionArea) === \"bottom\")\n ? toValue(alignment) === \"left\" || toValue(fitParent)\n ? targetRect.left\n : targetRect.right - positionedElRect.width\n : targetRect.left + targetRect.width / 2 - positionedElRect.width / 2;\n\n switch (toValue(positionArea)) {\n case \"top\":\n top = targetRect.top - positionedElRect.height - offset;\n left = alignmentPositioning;\n break;\n\n case \"top right\":\n top = targetRect.top - positionedElRect.height - offset;\n left = targetRect.right + offset;\n break;\n\n case \"top left\":\n top = targetRect.top - positionedElRect.height - offset;\n left = targetRect.left - positionedElRect.width - offset;\n break;\n\n case \"right\":\n top = targetRect.top + targetRect.height / 2 - positionedElRect.height / 2;\n left = targetRect.right + offset;\n break;\n\n case \"bottom\":\n top = targetRect.bottom + offset;\n left = alignmentPositioning;\n break;\n\n case \"bottom right\":\n top = targetRect.bottom + offset;\n left = targetRect.right + offset;\n break;\n\n case \"bottom left\":\n top = targetRect.bottom + offset;\n left = targetRect.left - positionedElRect.width - offset;\n break;\n\n case \"left\":\n top = targetRect.top + targetRect.height / 2 - positionedElRect.height / 2;\n left = targetRect.left - positionedElRect.width - offset;\n break;\n }\n\n leftPosition.value = `${left}px`;\n topPosition.value = `${top}px`;\n };\n\n // using onBeforeMount here to support server-side-rendering because window is not available in SSR\n onBeforeMount(() => {\n watchEffect(() => {\n if (targetVisible.value && positionedRef.value) {\n window.addEventListener(\"scroll\", updateAnchorPositionPolyfill, true);\n } else {\n window.removeEventListener(\"scroll\", updateAnchorPositionPolyfill, true);\n leftPosition.value = \"-1000px\";\n topPosition.value = \"-1000px\";\n }\n });\n });\n\n onUnmounted(() => {\n window.removeEventListener(\"scroll\", updateAnchorPositionPolyfill, true);\n });\n\n const useragentSupportsAnchorApi = ref(true);\n\n /**\n * SSR safe composable for checking whether the browser supports the Anchor API.\n * TODO: can be removed after anchor is implemented in all common browsers.\n */\n onBeforeMount(() => {\n useragentSupportsAnchorApi.value =\n \"CSS\" in globalThis &&\n typeof CSS !== \"undefined\" &&\n CSS.supports(\"anchor-name: --test\") &&\n CSS.supports(\"position-area: top\");\n });\n\n return {\n leftPosition,\n topPosition,\n updateAnchorPositionPolyfill,\n useragentSupportsAnchorApi,\n };\n};\n","import { ref, unref, type ShallowRef } from \"vue\";\n\nexport type OpenAlignment = \"center\" | \"left\" | \"right\";\n\nexport const useOpenAlignment = (\n element: Readonly<ShallowRef<Element | null>>,\n tooltipElement: Readonly<ShallowRef<Element | null>>,\n defaultPosition: OpenAlignment = \"center\",\n) => {\n const minMargin = 16;\n const openAlignment = ref<OpenAlignment>(defaultPosition);\n\n const updateOpenAlignment = () => {\n const wrapperEl = unref(element);\n const tooltipEl = unref(tooltipElement);\n\n if (!wrapperEl || !tooltipEl) {\n openAlignment.value = defaultPosition;\n return;\n }\n\n const wrapperRect = wrapperEl.getBoundingClientRect();\n const tooltipRect = tooltipEl.getBoundingClientRect();\n\n if (tooltipRect.width < wrapperRect.width) {\n openAlignment.value = defaultPosition;\n return;\n }\n\n const minSpaceCenter = (tooltipRect.width - wrapperRect.width + minMargin * 2) / 2;\n const minSpace = tooltipRect.width - wrapperRect.width + minMargin;\n\n const viewportRight = window.innerWidth;\n\n const freeSpaceLeft = wrapperRect.left;\n const freeSpaceRight = viewportRight - wrapperRect.right;\n\n const enoughSpaceLeft = freeSpaceLeft >= minSpaceCenter;\n const enoughSpaceRight = freeSpaceRight >= minSpaceCenter;\n\n if (\n (defaultPosition === \"right\" && freeSpaceLeft >= minSpace) ||\n (defaultPosition === \"left\" && freeSpaceRight >= minSpace) ||\n (defaultPosition === \"center\" && enoughSpaceLeft && enoughSpaceRight)\n ) {\n openAlignment.value = defaultPosition;\n } else if (freeSpaceLeft > freeSpaceRight) {\n openAlignment.value = \"right\";\n } else {\n openAlignment.value = \"left\";\n }\n };\n\n return {\n /**\n * Direction in which the popover should open to.\n */\n openAlignment,\n /**\n * Detects in which direction a popover should be opened, depending on the available space in each direction.\n * Should only be called onBeforeMount or later to support server side rendering.\n */\n updateOpenAlignment,\n };\n};\n","import { ref, unref, type ShallowRef } from \"vue\";\n\nexport type OpenDirection = \"top\" | \"bottom\";\n\nexport const useOpenDirection = (\n element: Readonly<ShallowRef<Element | null | undefined>>,\n defaultDirection: OpenDirection = \"bottom\",\n) => {\n const openDirection = ref<OpenDirection>(defaultDirection);\n\n const updateOpenDirection = () => {\n const el = unref(element);\n if (!el) {\n openDirection.value = defaultDirection;\n return;\n }\n\n const overflowParentRect = findParentWithHiddenOverflow(el)?.getBoundingClientRect();\n const elementRect = el.getBoundingClientRect();\n\n const parentTop = overflowParentRect?.top ?? window.visualViewport?.pageTop ?? 0;\n const parentBottom = overflowParentRect?.bottom ?? window.visualViewport?.height ?? 0;\n const freeSpaceBelow = parentBottom - elementRect.bottom;\n const freeSpaceAbove = elementRect.top - parentTop;\n\n openDirection.value = freeSpaceAbove > freeSpaceBelow ? \"top\" : \"bottom\";\n };\n\n return {\n /**\n * Direction in which the popover should open to.\n */\n openDirection,\n /**\n * Detects in which direction a popover should be opened, depending on the available space in each direction.\n * Should only be called onBeforeMount or later to support server side rendering.\n */\n updateOpenDirection,\n };\n};\n\nexport const findParentWithHiddenOverflow = (element?: Element): Element | undefined => {\n /**\n * Recursively finds the first parent element with hidden overflow.\n */\n if (!element) return undefined;\n\n const style = getComputedStyle(element);\n if (style.overflow.includes(\"hidden\")) {\n // if the element has hidden overflow, the popover would be cut off by this element so we need to use\n // this element as parent to calculate the open direction instead of the body.\n return element;\n }\n\n return element.parentElement ? findParentWithHiddenOverflow(element.parentElement) : undefined;\n};\n","<script setup lang=\"ts\">\nimport { useGlobalEventListener } from \"@sit-onyx/headless\";\nimport {\n computed,\n nextTick,\n onMounted,\n ref,\n useId,\n useTemplateRef,\n watch,\n type AriaAttributes,\n} from \"vue\";\nimport { useAnchorPositionPolyfill } from \"../../composables/useAnchorPositionPolyfill.js\";\nimport { useOpenAlignment } from \"../../composables/useOpenAlignment.js\";\nimport { useOpenDirection } from \"../../composables/useOpenDirection.js\";\nimport { useResizeObserver } from \"../../composables/useResizeObserver.js\";\nimport type { OnyxBasicPopoverProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxBasicPopoverProps>(), {\n position: \"auto\",\n alignment: \"auto\",\n role: \"dialog\",\n});\n\ndefineSlots<{\n /**\n * The always visible parent to which the popover is aligned.\n * `trigger` can optionally set to a button to explicitly connect the the button and popover.\n */\n default(params: { trigger: AriaAttributes }): unknown;\n /**\n * Content shown in the popover when it is expanded.\n */\n content(): unknown;\n}>();\n\nconst emit = defineEmits<{\n \"update:open\": [value: boolean];\n}>();\n\nconst _isVisible = ref(false);\nconst isVisible = computed({\n set: (newVal) => (_isVisible.value = newVal),\n get: () => (typeof props.open === \"boolean\" && !props.disabled ? props.open : _isVisible.value),\n});\n\nconst popoverPosition = computed(() =>\n props.position === \"auto\" ? openDirection.value : props.position,\n);\nconst popoverAlignment = computed(() =>\n props.alignment === \"auto\" ? openAlignment.value : props.alignment,\n);\n\ndefineExpose({\n /**\n * Actual used popover position.\n */\n popoverPosition,\n /**\n * Actual used popover alignment.\n */\n popoverAlignment,\n});\n\nconst disabled = computed(() => props.disabled);\n\nconst positionAndAlignment = computed(() => {\n if (popoverPosition.value === \"top\" || popoverPosition.value === \"bottom\") {\n if (popoverAlignment.value === \"left\") {\n return popoverPosition.value + \" \" + \"span-right\";\n }\n if (popoverAlignment.value === \"right\") {\n return popoverPosition.value + \" \" + \"span-left\";\n }\n }\n return popoverPosition.value;\n});\n\nconst popoverRef = useTemplateRef(\"popover\");\nconst popoverWrapperRef = useTemplateRef(\"popoverWrapper\");\nconst { openDirection, updateOpenDirection } = useOpenDirection(popoverWrapperRef, \"bottom\");\n\nconst { openAlignment, updateOpenAlignment } = useOpenAlignment(\n popoverWrapperRef,\n popoverRef,\n \"left\",\n);\nconst { leftPosition, topPosition, updateAnchorPositionPolyfill, useragentSupportsAnchorApi } =\n useAnchorPositionPolyfill({\n positionedRef: popoverRef,\n targetRef: popoverWrapperRef,\n positionArea: popoverPosition,\n alignment: popoverAlignment,\n alignsWithEdge: true,\n fitParent: false,\n offset: 8,\n });\n\nconst { width } = useResizeObserver(popoverWrapperRef);\n\nconst handleOpening = (open: boolean) => {\n if (open) {\n popoverRef.value?.showPopover?.();\n } else {\n popoverRef.value?.hidePopover?.();\n }\n};\nconst updateDirections = () => {\n updateOpenDirection();\n updateOpenAlignment();\n};\n\nuseGlobalEventListener({\n type: \"resize\",\n listener: () => updateDirections(),\n});\n\nonMounted(() => {\n handleOpening(isVisible.value);\n updateDirections();\n if (!useragentSupportsAnchorApi.value) updateAnchorPositionPolyfill();\n});\n\nwatch(isVisible, async (newVal) => {\n await nextTick();\n handleOpening(newVal);\n updateDirections();\n if (!useragentSupportsAnchorApi.value) updateAnchorPositionPolyfill();\n});\n\nconst toggle = () => {\n _isVisible.value = !_isVisible.value;\n emit(\"update:open\", !isVisible.value);\n};\n\nconst trigger = computed(() => ({\n onClick: toggle,\n \"aria-expanded\": isVisible.value,\n \"aria-controls\": popoverRef.value?.id,\n \"aria-haspopup\": true,\n disabled: disabled.value,\n}));\n\nconst id = useId();\nconst anchorName = computed(() => `--anchor-${id}`);\n\nconst popoverClasses = computed(() => {\n return {\n [`onyx-basic-popover__dialog--position-${popoverPosition.value.replace(\" \", \"-\")}`]: true,\n [`onyx-basic-popover__dialog--alignment-${popoverAlignment.value}`]: true,\n \"onyx-basic-popover__dialog--fitparent\": props.fitParent,\n \"onyx-basic-popover__dialog--disabled\": disabled.value,\n \"onyx-basic-popover__dialog--dont-support-anchor\": !useragentSupportsAnchorApi.value,\n };\n});\nwatch(disabled, () => {\n if (disabled.value) {\n _isVisible.value = false;\n }\n});\nwatch([popoverPosition, popoverAlignment, width], async () => {\n if (!useragentSupportsAnchorApi.value) {\n await nextTick();\n updateDirections();\n updateAnchorPositionPolyfill();\n }\n});\n\nconst popoverStyles = computed(() => {\n const _width = props.fitParent ? `${width.value}px` : undefined;\n\n if (useragentSupportsAnchorApi.value) {\n return {\n width: _width,\n \"position-anchor\": anchorName.value,\n \"position-area\": positionAndAlignment.value,\n };\n }\n\n // fallback styles if browser does not support the Anchor API yet\n return {\n width: _width,\n left: leftPosition.value,\n top: topPosition.value,\n };\n});\n</script>\n\n<template>\n <div\n ref=\"popoverWrapper\"\n class=\"onyx-component onyx-basic-popover\"\n :style=\"`anchor-name: ${anchorName}`\"\n >\n <slot :trigger=\"trigger\"></slot>\n <!-- we are using inline \"style\" here since using v-bind causes hydration errors in Nuxt / SSR -->\n <div\n ref=\"popover\"\n :role=\"props.role\"\n :aria-label=\"props.label\"\n popover=\"manual\"\n class=\"onyx-basic-popover__dialog\"\n :class=\"popoverClasses\"\n :style=\"popoverStyles\"\n >\n <slot name=\"content\"></slot>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-basic-popover {\n --onyx-basic-popover-min-width: var(--onyx-spacing-4xl);\n --onyx-basic-popover-max-width: 20rem;\n\n @include layers.component() {\n --onyx-basic-popover-gap: var(--onyx-spacing-2xs);\n display: inline-flex;\n position: relative;\n\n &__dialog {\n position: fixed;\n border-radius: var(--onyx-radius-md);\n border: none;\n outline: none;\n box-shadow: var(--onyx-shadow-medium-bottom);\n\n background-color: var(--onyx-color-base-background-blank);\n padding: 0;\n box-sizing: border-box;\n\n min-width: var(--onyx-basic-popover-min-width);\n max-width: var(--onyx-basic-popover-max-width);\n max-height: 100%;\n width: max-content;\n font-family: var(--onyx-font-family);\n\n &:popover-open {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n &--position-right {\n margin-left: var(--onyx-basic-popover-gap);\n }\n &--position-left {\n margin-right: var(--onyx-basic-popover-gap);\n }\n &--position-bottom {\n margin-top: var(--onyx-basic-popover-gap);\n }\n &--position-bottom-right {\n margin-top: var(--onyx-basic-popover-gap);\n margin-left: var(--onyx-basic-popover-gap);\n }\n &--position-bottom-left {\n margin-top: var(--onyx-basic-popover-gap);\n margin-right: var(--onyx-basic-popover-gap);\n }\n &--position-top {\n margin-bottom: var(--onyx-basic-popover-gap);\n }\n &--position-top-right {\n margin-bottom: var(--onyx-basic-popover-gap);\n margin-left: var(--onyx-basic-popover-gap);\n }\n &--position-top-left {\n margin-bottom: var(--onyx-basic-popover-gap);\n margin-right: var(--onyx-basic-popover-gap);\n }\n &--fitparent {\n min-width: inherit;\n max-width: inherit;\n }\n &--dont-support-anchor {\n margin: 0;\n }\n }\n }\n}\n.dark .onyx-basic-popover__dialog {\n @include layers.component() {\n outline: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n }\n}\n</style>\n","<!-- For an unknown reason the generic here is necessary, otherwise the typings of the component break -->\n<script setup lang=\"ts\" generic=\"_\">\nimport { createMenuButton } from \"@sit-onyx/headless\";\nimport { computed, ref, type ComponentInstance, type VNodeRef } from \"vue\";\nimport { useVModel } from \"../../../../composables/useVModel.js\";\nimport { mergeVueProps } from \"../../../../utils/attrs.js\";\nimport OnyxBasicPopover from \"../../../OnyxBasicPopover/OnyxBasicPopover.vue\";\nimport type { OnyxFlyoutMenuProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxFlyoutMenuProps>(), {\n trigger: \"hover\",\n open: undefined,\n alignment: \"auto\",\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the isExpanded state changes.\n */\n \"update:open\": [value: boolean];\n}>();\n\n/**\n * If the flyout is expanded or not.\n */\nconst isExpanded = useVModel({\n props,\n emit,\n key: \"open\",\n default: false,\n});\n\nconst slots = defineSlots<{\n /**\n * The trigger for the flyout menu. Should be an interactive component like a button or link.\n */\n button?(params: {\n /**\n * Attributes and event listeners that must be bound to an interactive element (button or link), that should act as the flyout trigger.\n */\n trigger: object;\n }): unknown;\n /**\n * OnyxMenuItem's to show\n */\n options?(): unknown;\n /**\n * Optional header content to display above the options.\n */\n header?(): unknown;\n /**\n * Optional footer content to display below the options.\n */\n footer?(): unknown;\n}>();\n\nconst popover = ref<ComponentInstance<typeof OnyxBasicPopover>>();\nconst actualPosition = computed(() => popover.value?.popoverPosition);\n\nconst {\n elements: { root, button, menu },\n} = createMenuButton({\n isExpanded: computed(() => !!isExpanded.value),\n onToggle: () => (isExpanded.value = !isExpanded.value),\n trigger: computed(() => props.trigger),\n disabled: computed(() => props.disabled),\n position: computed(() => (actualPosition.value?.includes(\"top\") ? \"top\" : \"bottom\")),\n});\n</script>\n\n<template>\n <OnyxBasicPopover\n v-bind=\"mergeVueProps(root, { ref: popover as VNodeRef | undefined })\"\n class=\"onyx-component onyx-flyout-menu\"\n :open=\"isExpanded\"\n :label=\"props.label\"\n :alignment=\"props.alignment\"\n :disabled=\"disabled\"\n >\n <template v-if=\"slots.options || slots.header || slots.footer\" #default>\n <slot name=\"button\" :trigger=\"button\"></slot>\n </template>\n <!-- `v-show` instead of `v-if` is necessary, so that we can allow (teleported) dialogs to be shown -->\n <template #content>\n <!-- We always want to render the header so that we can render the padding here -->\n <div class=\"onyx-flyout-menu__list-header\">\n <slot name=\"header\"></slot>\n </div>\n\n <ul\n v-if=\"slots.options\"\n v-bind=\"menu\"\n class=\"onyx-flyout-menu__wrapper onyx-flyout-menu__group\"\n >\n <slot name=\"options\"></slot>\n </ul>\n\n <!-- We always want to render the footer so that we can render the padding here -->\n <div class=\"onyx-flyout-menu__list-footer\">\n <slot name=\"footer\"></slot>\n </div>\n </template>\n </OnyxBasicPopover>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../../styles/mixins/layers\";\n\n.onyx-flyout-menu {\n @include layers.component() {\n --onyx-flyout-menu-gap: var(--onyx-spacing-2xs);\n display: inline-flex;\n width: min-content;\n position: relative;\n\n &__list {\n &-header {\n position: sticky;\n top: 0;\n min-height: var(--onyx-spacing-2xs);\n width: 100%;\n }\n\n &-footer {\n position: sticky;\n bottom: 0;\n min-height: var(--onyx-spacing-2xs);\n width: 100%;\n }\n }\n\n &__wrapper {\n width: 100%;\n padding: 0;\n /**\n * The last option should only be half visible:\n * 7.5 * OnyxListItem, where OnyxListItem => 2 * padding + line-height of OnyxListItem\n */\n max-height: calc(\n (var(--onyx-flyout-menu-visible-item-count, 7) + 0.5) * (2 * var(--onyx-density-xs) + 1lh)\n );\n overflow: auto;\n\n // when nested item is open, hide all other items in the same layer\n &:has(.onyx-menu-item--open) {\n > .onyx-menu-item:not(.onyx-menu-item--open) {\n display: none;\n }\n }\n }\n }\n}\n.dark .onyx-flyout-menu__list {\n @include layers.component() {\n outline: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconMoreHorizontalSmall, iconX } from \"@sit-onyx/icons\";\nimport { computed } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { mergeVueProps } from \"../../utils/attrs.js\";\nimport OnyxFABButton from \"../OnyxFABButton/OnyxFABButton.vue\";\nimport OnyxFlyoutMenu from \"../OnyxNavBar/modules/OnyxFlyoutMenu/OnyxFlyoutMenu.vue\";\nimport type { OnyxFABProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxFABProps>(), {\n alignment: \"right\",\n skeleton: SKELETON_INJECTED_SYMBOL,\n open: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the isExpanded state changes.\n */\n \"update:open\": [value: boolean];\n}>();\n\nconst slots = defineSlots<{\n /**\n * Nested options to show inside a flyout.\n */\n default?(): unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\nconst skeleton = useSkeletonContext(props);\n\n/**\n * If the flyout is expanded or not.\n */\nconst isExpanded = useVModel({\n props,\n emit,\n key: \"open\",\n default: false,\n});\n\nconst hasOptions = computed(() => !!slots.default);\n\nconst triggerIcon = computed(() => {\n if (!hasOptions.value) return props.icon;\n return isExpanded.value ? iconX : iconMoreHorizontalSmall;\n});\n</script>\n\n<template>\n <OnyxFABButton\n v-if=\"!hasOptions || skeleton\"\n :class=\"['onyx-fab', `onyx-fab--${props.alignment}`]\"\n v-bind=\"props\"\n :icon=\"triggerIcon\"\n :skeleton\n />\n\n <OnyxFlyoutMenu\n v-else\n v-model:open=\"isExpanded\"\n :label=\"props.label\"\n trigger=\"click\"\n :class=\"['onyx-fab', `onyx-fab--${props.alignment}`, densityClass]\"\n :alignment=\"props.alignment\"\n >\n <template #button=\"{ trigger }\">\n <OnyxFABButton\n v-bind=\"mergeVueProps(props, trigger)\"\n :label=\"props.label\"\n hide-label\n :icon=\"triggerIcon\"\n />\n </template>\n\n <template #options>\n <slot name=\"default\"></slot>\n </template>\n </OnyxFlyoutMenu>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-fab {\n @include layers.component() {\n --onyx-fab-viewport-gap: var(--onyx-density-sm);\n --onyx-basic-popover-gap: var(--onyx-density-sm);\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-inverted);\n position: fixed;\n bottom: var(--onyx-fab-viewport-gap);\n right: var(--onyx-fab-viewport-gap);\n z-index: var(--onyx-z-index-notification);\n\n .onyx-flyout-menu__list-header,\n .onyx-flyout-menu__list-footer {\n display: none;\n }\n\n .onyx-flyout-menu__wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--onyx-density-2xs);\n align-items: flex-end;\n }\n\n &--left {\n right: unset;\n left: var(--onyx-fab-viewport-gap);\n\n .onyx-flyout-menu__wrapper {\n align-items: flex-start;\n }\n }\n\n .onyx-basic-popover__dialog {\n --onyx-basic-popover-min-width: 0;\n box-shadow: none;\n background-color: transparent;\n outline: none;\n width: calc(1.5rem + 2 * var(--onyx-density-md)); // density-md = fab button padding\n\n &:not(:has(.onyx-fab-button__label)) {\n .onyx-flyout-menu__wrapper {\n align-items: center;\n }\n }\n }\n\n .onyx-basic-popover__dialog,\n .onyx-flyout-menu__wrapper {\n // prevent cutting of the options outline and box shadow\n // since the floating action button is always positioned at the bottom corner and should\n // not have too many options, we assume that not scrolling when overflowing is acceptable.\n overflow: visible;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { createMenuItems } from \"@sit-onyx/headless\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { mergeVueProps } from \"../../utils/attrs.js\";\nimport OnyxFABButton from \"../OnyxFABButton/OnyxFABButton.vue\";\nimport type { OnyxFABItemProps } from \"./types.js\";\n\nconst props = defineProps<OnyxFABItemProps>();\n\nconst { densityClass } = useDensity(props);\n\nconst {\n elements: { listItem, menuItem },\n} = createMenuItems();\n</script>\n\n<template>\n <li :class=\"['onyx-component', 'onyx-fab-item', densityClass]\" v-bind=\"listItem\">\n <OnyxFABButton v-bind=\"mergeVueProps(menuItem({}), props)\" :label=\"props.label\" />\n </li>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-fab-item {\n @include layers.component() {\n list-style: none;\n\n .onyx-fab-button {\n --onyx-fab-button-background: var(--onyx-color-base-neutral-600);\n --onyx-fab-button-background-hover: var(--onyx-color-base-neutral-800);\n --onyx-fab-button-padding: var(--onyx-density-xs);\n --onyx-fab-button-gap: var(--onyx-density-2xs);\n }\n }\n}\n</style>\n","import {\n computed,\n inject,\n shallowRef,\n toRef,\n type ComputedRef,\n type InjectionKey,\n type MaybeRefOrGetter,\n type Ref,\n} from \"vue\";\nimport { userConsole } from \"../../utils/console.js\";\nimport type { OnyxFABItemProps } from \"../OnyxFABItem/types.js\";\n\nexport type GlobalFABProvider = {\n /**\n * Readonly list of currently active items.\n */\n items: ComputedRef<Ref<ProvidedFABItem>[]>;\n /**\n * add the FABOption.\n */\n add: (item: MaybeRefOrGetter<ProvidedFABItem>) => void;\n /**\n * removes the FABOption with the given `id`.\n */\n remove: (id: ProvidedFABItem[\"id\"]) => void;\n};\n\nexport type ProvidedFABItem = OnyxFABItemProps & {\n /**\n * Unique FABItem id used to identify the FABItem.\n */\n id: PropertyKey;\n /**\n * How to align the item relative to the viewport.\n * If at least one item is left aligned, all items will be left aligned.\n *\n * @default \"right\"\n */\n alignment?: \"left\" | \"right\";\n /**\n * Overrides properties of this FAB item if it's not the only available option.\n * If there are multiple FAB items displayed, the properties defined here will\n * take precedence for *this specific item*.\n */\n ifOption?: Partial<Omit<ProvidedFABItem, \"ifOption\" | \"id\">>;\n /**\n * Callback when the FABItem is clicked.\n */\n onClick?: () => unknown;\n};\n\nexport const GLOBAL_FAB_PROVIDER_INJECTION_KEY = Symbol() as InjectionKey<GlobalFABProvider>;\n\n/**\n * Creates a new FABItem provider that can be used with `useGlobalFAB()`.\n * Should be provided once on global app level with:\n *\n * @example\n * ```ts\n * import { createGlobalFABProvider, GLOBAL_FAB_PROVIDER_INJECTION_KEY } from \"sit-onyx\";\n *\n * app.provide(GLOBAL_FAB_PROVIDER_INJECTION_KEY, createGlobalFABProvider());\n * ```\n */\nexport const createGlobalFABProvider = (): GlobalFABProvider => {\n const items = shallowRef<Ref<ProvidedFABItem>[]>([]);\n\n const add: GlobalFABProvider[\"add\"] = (item: MaybeRefOrGetter<ProvidedFABItem>) => {\n items.value = items.value.concat(toRef(item));\n };\n\n const remove: GlobalFABProvider[\"remove\"] = (id) => {\n items.value = items.value.filter((itemRef) => itemRef.value.id !== id);\n };\n\n return {\n // make items readonly so they can not be modified from the outside\n items: computed(() => items.value),\n add,\n remove,\n };\n};\n\n/**\n * Composable for showing FABItems.\n */\nexport const useGlobalFAB = () => {\n const logWarning = () => {\n userConsole?.warn(\n 'Trying to use \"useGlobalFAB()\" before the global FAB provider has been provided. Make sure to \"provide\" it first.',\n );\n };\n\n const globalFABProvider = inject(\n GLOBAL_FAB_PROVIDER_INJECTION_KEY,\n // provide fallback so \"useGlobalFAB()\" does not return \"undefined\"\n () => {\n return {\n items: computed(() => []),\n add: logWarning,\n remove: logWarning,\n } satisfies GlobalFABProvider;\n },\n true,\n );\n\n return globalFABProvider;\n};\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport OnyxFAB from \"../OnyxFAB/OnyxFAB.vue\";\nimport OnyxFABItem from \"../OnyxFABItem/OnyxFABItem.vue\";\nimport { useGlobalFAB } from \"./useGlobalFAB.js\";\n\nconst globalFAB = useGlobalFAB();\nconst { t } = injectI18n();\n\nconst alignment = computed(() =>\n globalFAB.items.value.some((itemRef) => itemRef.value.alignment === \"left\") ? \"left\" : \"right\",\n);\n</script>\n\n<template>\n <OnyxFAB v-if=\"globalFAB.items.value.length === 1\" v-bind=\"globalFAB.items.value[0]!.value\" />\n\n <OnyxFAB v-else-if=\"globalFAB.items.value.length > 1\" :label=\"t('globalFAB.label')\" :alignment>\n <OnyxFABItem\n v-for=\"item in globalFAB.items.value\"\n :key=\"item.value.id\"\n v-bind=\"{ ...item.value, ...item.value.ifOption }\"\n />\n </OnyxFAB>\n</template>\n","<template>\n <svg class=\"onyx-component onyx-circle-spinner\" viewBox=\"0 0 50 50\">\n <circle class=\"onyx-circle-spinner__circle\" cx=\"50%\" cy=\"50%\" r=\"45%\" />\n </svg>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n@use \"sass:math\";\n\n// must be the same as \"r\" attribute of the <circle> in HTML (without %)\n$radius: 45;\n\n/**\n* Calculates the stroke length for the circle spinner.\n* @param $percentage: Stroke percentage that should be covered.\n*/\n@function calculate-stroke-length($percentage) {\n $length: $percentage * math.$pi * $radius;\n @return math.div($length, 100);\n}\n.onyx-circle-spinner {\n @include layers.component() {\n --indicator-size: 1.5rem;\n --stroke-color: currentColor;\n\n $stroke-gap: 25; // stroke gap in percent, same as in icon loading-circle.svg\n $timing: cubic-bezier(0.4, 0.35, 0.7, 0.8);\n $default-stroke-dasharray: calculate-stroke-length(100 - $stroke-gap)\n calculate-stroke-length($stroke-gap);\n\n width: var(--indicator-size);\n aspect-ratio: 1;\n animation: onyx-circle-spinner var(--onyx-duration-lg) $timing infinite;\n\n &__circle {\n fill: transparent;\n stroke-width: 2px;\n stroke-linecap: round;\n stroke: var(--stroke-color);\n stroke-dasharray: $default-stroke-dasharray;\n\n // add dashoffset so the gap starts from top, counter-clockwise, just like the loading-circle.svg icon\n stroke-dashoffset: calculate-stroke-length(25);\n\n animation: onyx-circle-spinner-stroke var(--onyx-duration-lg) $timing infinite;\n }\n\n /**\n * Animates the circle by spinning/rotating it.\n */\n @keyframes onyx-circle-spinner {\n 100% {\n transform: rotate(1turn);\n }\n }\n\n /**\n * Animates the stroke gap from 25% to 75% to 25%.\n */\n @keyframes onyx-circle-spinner-stroke {\n 0% {\n stroke-dasharray: $default-stroke-dasharray;\n }\n 75% {\n stroke-dasharray: calculate-stroke-length(25) calculate-stroke-length(75);\n }\n 100% {\n stroke-dasharray: $default-stroke-dasharray;\n }\n }\n }\n}\n</style>\n","<template>\n <div class=\"onyx-component onyx-loading-dots\">\n <span class=\"onyx-loading-dots__center\"></span>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n/** Animation duration. */\n$duration: var(--onyx-duration-lg);\n\n/** Max size the dot should shrink in the animation. Must be a negative value. */\n$max-shrink: calc(-1 * var(--dot-size) / 2);\n\n/**\n* Defines the box shadow.\n* @param $shrink: Shrink factor. Set to 0 (default) to not shrink the box shadow.\n*/\n@mixin define-box-shadow($shrink: 0) {\n box-shadow: 0 var(--dot-size) 0 $shrink;\n}\n\n/**\n * Defines a single dot.\n */\n@mixin define-dot() {\n @include define-box-shadow;\n\n position: absolute;\n background-color: transparent;\n width: var(--dot-size);\n aspect-ratio: 1;\n border-radius: var(--onyx-radius-full);\n animation: onyx-loading-dots $duration infinite linear;\n}\n\n.onyx-loading-dots {\n @include layers.component() {\n --indicator-size: 1.5rem;\n\n /** Default (non-animated) size of a single dot. */\n --dot-size: calc(0.25 * var(--indicator-size));\n\n width: var(--indicator-size);\n aspect-ratio: 1;\n position: relative;\n\n &__center {\n @include define-dot;\n animation-delay: calc($duration / 6);\n\n // center horizontally\n left: calc(50% - 0.5 * var(--dot-size));\n\n // center vertically + move the dot up by 1 dot size so it does not cover the box shadow\n top: calc(50% - 1.5 * var(--dot-size));\n\n &::before,\n &::after {\n content: \"\";\n @include define-dot;\n }\n\n $dot-offset: calc(-0.5 * var(--indicator-size) + 0.5 * var(--dot-size));\n\n &::before {\n left: $dot-offset;\n }\n\n &::after {\n right: $dot-offset;\n animation-delay: calc($duration / 3);\n }\n }\n\n /**\n * Animates the box shadow of the dots with a pulsing effect (grow and shrink).\n */\n @keyframes onyx-loading-dots {\n 0% {\n // this will show the dot by setting the shrink to 0.\n @include define-box-shadow(0);\n }\n 33% {\n // shrink dot so its getting smaller\n @include define-box-shadow($max-shrink);\n }\n 66% {\n @include define-box-shadow($max-shrink);\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport OnyxCircleSpinner from \"./OnyxCircleSpinner.vue\";\nimport OnyxLoadingDots from \"./OnyxLoadingDots.vue\";\nimport type { OnyxLoadingIndicatorProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxLoadingIndicatorProps>(), {\n type: \"dots\",\n});\n</script>\n\n<template>\n <OnyxCircleSpinner v-if=\"props.type === 'circle'\" />\n <OnyxLoadingDots v-else-if=\"props.type === 'dots'\" />\n</template>\n","import { onBeforeMount, reactive, ref, type ShallowRef } from \"vue\";\n\nexport type RippleInstance = {\n id: string;\n left: string;\n top: string;\n animationEnded: boolean;\n};\n\nexport const useRipple = (\n container: Readonly<ShallowRef<Pick<HTMLElement, \"getBoundingClientRect\"> | null>>,\n) => {\n /** Whether the mouse/pointer is currently hold down. */\n const isPointerDown = ref(false);\n const ripples = reactive(new Map<string, RippleInstance>());\n\n /**\n * Starts a new ripple on click.\n */\n const startRipple = (event: MouseEvent) => {\n const rect = container.value?.getBoundingClientRect();\n if (!rect) return;\n\n isPointerDown.value = true;\n\n const ripple: RippleInstance = {\n id: Date.now().toString(),\n left: `${event.x - rect.left}px`,\n top: `${event.y - rect.top}px`,\n animationEnded: false,\n };\n\n ripples.set(ripple.id, ripple);\n return ripple.id;\n };\n\n /**\n * Hides the given ripple. Should be called when the animation for the given ripple ended.\n */\n const hideRipple = (el: Pick<HTMLElement, \"dataset\">) => {\n const rippleId = el.dataset.rippleid;\n if (rippleId == undefined) return;\n if (ripples.has(rippleId)) ripples.get(rippleId)!.animationEnded = true;\n if (!isPointerDown.value) ripples.delete(rippleId);\n };\n\n /**\n * Deletes all ripples that have already been fully animated.\n */\n const hideRipples = () => {\n isPointerDown.value = false;\n ripples.forEach((r, key) => {\n if (r.animationEnded) ripples.delete(key);\n });\n };\n\n /**\n * Events used by the trigger element to start and stop ripples\n */\n const events = ref<Record<string, (event: MouseEvent) => void>>({});\n\n // we access \"window.matchMedia\" to get the events which is not available in server side rendering\n // so we need to make sure to only call it in \"onBeforeMount\"\n onBeforeMount(() => {\n // detect if NO pointer device exists, so we use touch events\n // we check if \"window.matchMedia\" exists first (with the ? operator) because it may not be available in e.g. unit tests\n if (window.matchMedia?.(\"pointer: none\").matches) {\n events.value = {\n touchstart: startRipple,\n touchend: hideRipples,\n touchcancel: hideRipples,\n };\n } else {\n events.value = {\n mousedown: startRipple,\n mouseleave: hideRipples,\n mouseup: hideRipples,\n };\n }\n });\n\n return { isPointerDown, ripples, startRipple, hideRipples, hideRipple, events };\n};\n","<script lang=\"ts\" setup>\nimport { useTemplateRef } from \"vue\";\nimport { useRipple } from \"../../composables/useRipple.js\";\n\nconst rippleTrigger = useTemplateRef(\"rippleTriggerRef\");\nconst { ripples, hideRipple, events } = useRipple(rippleTrigger);\n\ndefineExpose({\n events,\n});\n</script>\n\n<template>\n <span ref=\"rippleTriggerRef\" class=\"onyx-component onyx-ripple\" aria-hidden=\"true\">\n <span\n v-for=\"[key, ripple] in ripples\"\n :key=\"key\"\n class=\"onyx-ripple__element\"\n :style=\"{\n '--onyx-ripple-left': ripple.left,\n '--onyx-ripple-top': ripple.top,\n }\"\n :data-rippleid=\"key\"\n @animationend=\"hideRipple($event.target as HTMLElement)\"\n ></span>\n </span>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n@property --onyx-ripple-radius {\n syntax: \"<percentage>\";\n initial-value: 0%;\n inherits: false;\n}\n\n.onyx-ripple {\n @include layers.component() {\n --onyx-ripple-color: var(--onyx-color-base-primary-600);\n\n display: block;\n position: absolute;\n inset: 0;\n overflow: hidden;\n border-radius: inherit;\n width: 100%;\n height: 100%;\n\n &__element {\n display: block;\n position: absolute;\n pointer-events: none;\n width: 100%;\n height: 100%;\n background: radial-gradient(\n circle at var(--onyx-ripple-left) var(--onyx-ripple-top),\n transparent var(--onyx-ripple-radius),\n var(--onyx-ripple-color) var(--onyx-ripple-radius)\n );\n\n animation: onyx-ripple var(--onyx-duration-sm) cubic-bezier(0, 0, 0.2, 1) forwards;\n\n @media (prefers-reduced-motion) {\n animation: none;\n }\n }\n\n @keyframes onyx-ripple {\n 0% {\n --onyx-ripple-radius: 0%;\n }\n\n 100% {\n --onyx-ripple-radius: 100%;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxLoadingIndicator from \"../OnyxLoadingIndicator/OnyxLoadingIndicator.vue\";\nimport OnyxRipple from \"../OnyxRipple/OnyxRipple.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport ButtonOrLinkLayout from \"./ButtonOrLinkLayout.vue\";\nimport type { OnyxButtonProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxButtonProps>(), {\n disabled: FORM_INJECTED_SYMBOL,\n loading: false,\n type: \"button\",\n color: \"primary\",\n mode: \"default\",\n skeleton: SKELETON_INJECTED_SYMBOL,\n iconPosition: \"left\",\n});\n\nconst { densityClass } = useDensity(props);\nconst { disabled } = useFormContext(props);\nconst skeleton = useSkeletonContext(props);\n\nconst ripple = useTemplateRef(\"rippleRef\");\nconst rippleEvents = computed(() => ripple.value?.events ?? {});\n</script>\n\n<template>\n <OnyxSkeleton v-if=\"skeleton\" :class=\"['onyx-button-skeleton', densityClass]\" />\n <ButtonOrLinkLayout\n v-else\n v-bind=\"props\"\n :class=\"[\n 'onyx-component',\n 'onyx-button',\n `onyx-button--${props.color}`,\n `onyx-button--${props.mode}`,\n { 'onyx-button--loading': props.loading },\n densityClass,\n ]\"\n :aria-label=\"props.loading ? props.label : undefined\"\n v-on=\"rippleEvents\"\n >\n <OnyxRipple v-if=\"!disabled && !props.loading\" ref=\"rippleRef\" />\n <OnyxIcon\n v-if=\"props.icon && props.iconPosition === 'left'\"\n class=\"onyx-button__icon\"\n :icon=\"props.icon\"\n />\n <OnyxLoadingIndicator v-if=\"props.loading\" class=\"onyx-button__loading\" />\n <span class=\"onyx-button__label onyx-truncation-ellipsis\">{{ props.label }}</span>\n <OnyxIcon\n v-if=\"props.icon && props.iconPosition === 'right'\"\n class=\"onyx-button__icon\"\n :icon=\"props.icon\"\n />\n </ButtonOrLinkLayout>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-button,\n.onyx-button-skeleton {\n @include layers.component() {\n --onyx-button-padding-vertical: var(--onyx-density-xs);\n --onyx-button-padding-inline: var(--onyx-density-sm);\n }\n}\n\n.onyx-button {\n @include layers.component() {\n // list of all available button CSS variables\n --onyx-button-background-color: transparent;\n --onyx-button-background-color-hover: transparent;\n --onyx-button-background-color-disabled: transparent;\n --onyx-button-text-color: transparent;\n --onyx-button-text-color-hover: var(--onyx-button-text-color);\n --onyx-button-text-color-disabled: transparent;\n --onyx-button-border-color: transparent;\n --onyx-button-border-color-hover: var(--onyx-button-border-color);\n --onyx-button-border-color-disabled: transparent;\n --onyx-button-outline-color: var(--onyx-color-component-focus-primary);\n --onyx-button-border-width: var(--onyx-1px-in-rem);\n\n &--primary {\n &.onyx-button--default {\n --onyx-button-background-color: var(--onyx-color-component-cta-default);\n --onyx-button-background-color-hover: var(--onyx-color-component-cta-default-hover);\n --onyx-button-background-color-disabled: var(--onyx-color-base-primary-200);\n --onyx-button-text-color: var(--onyx-color-text-icons-neutral-button);\n --onyx-button-text-color-disabled: var(--onyx-color-text-icons-neutral-inverted);\n --onyx-button-border-color: var(--onyx-button-background-color);\n --onyx-button-border-color-hover: var(--onyx-button-background-color-hover);\n --onyx-button-border-color-disabled: var(--onyx-button-background-color-disabled);\n }\n\n &.onyx-button--outline {\n --onyx-button-background-color-hover: var(--onyx-color-base-primary-100);\n --onyx-button-text-color: var(--onyx-color-text-icons-primary-intense);\n --onyx-button-text-color-disabled: var(--onyx-color-text-icons-primary-soft);\n --onyx-button-border-color: var(--onyx-color-base-primary-400);\n --onyx-button-border-color-disabled: var(--onyx-color-base-primary-200);\n }\n\n &.onyx-button--plain {\n --onyx-button-background-color-hover: var(--onyx-color-base-primary-100);\n --onyx-button-text-color: var(--onyx-color-text-icons-primary-intense);\n --onyx-button-text-color-disabled: var(--onyx-color-text-icons-primary-soft);\n }\n }\n\n &--neutral {\n --onyx-button-outline-color: var(--onyx-color-component-focus-neutral);\n\n &.onyx-button--default {\n --onyx-button-background-color: var(--onyx-color-base-background-blank);\n --onyx-button-background-color-hover: var(--onyx-color-base-neutral-200);\n --onyx-button-background-color-disabled: var(--onyx-color-base-background-blank);\n --onyx-button-text-color: var(--onyx-color-text-icons-neutral-intense);\n --onyx-button-text-color-disabled: var(--onyx-color-text-icons-neutral-soft);\n --onyx-button-border-color: var(--onyx-color-base-neutral-400);\n --onyx-button-border-color-disabled: var(--onyx-color-base-neutral-200);\n }\n\n &.onyx-button--outline {\n --onyx-button-background-color-hover: var(--onyx-color-base-neutral-200);\n --onyx-button-text-color: var(--onyx-color-text-icons-neutral-intense);\n --onyx-button-text-color-disabled: var(--onyx-color-text-icons-neutral-soft);\n --onyx-button-border-color: var(--onyx-color-base-neutral-400);\n --onyx-button-border-color-disabled: var(--onyx-color-base-neutral-200);\n }\n\n &.onyx-button--plain {\n --onyx-button-background-color-hover: var(--onyx-color-base-neutral-200);\n --onyx-button-text-color: var(--onyx-color-text-icons-neutral-intense);\n --onyx-button-text-color-disabled: var(--onyx-color-text-icons-neutral-soft);\n }\n }\n\n &--danger {\n --onyx-button-outline-color: var(--onyx-color-component-focus-danger);\n\n &.onyx-button--default {\n --onyx-button-background-color: var(--onyx-color-base-danger-200);\n --onyx-button-background-color-hover: var(--onyx-color-base-danger-100);\n --onyx-button-background-color-disabled: var(--onyx-color-base-danger-100);\n --onyx-button-text-color: var(--onyx-color-text-icons-danger-bold);\n --onyx-button-text-color-disabled: var(--onyx-color-text-icons-danger-medium);\n --onyx-button-border-color: var(--onyx-color-base-danger-500);\n --onyx-button-border-color-disabled: var(--onyx-color-base-danger-200);\n }\n\n &.onyx-button--outline {\n --onyx-button-background-color-hover: var(--onyx-color-base-danger-100);\n --onyx-button-text-color: var(--onyx-color-text-icons-danger-intense);\n --onyx-button-text-color-hover: var(--onyx-color-text-icons-danger-bold);\n --onyx-button-text-color-disabled: var(--onyx-color-text-icons-danger-medium);\n --onyx-button-border-color: var(--onyx-color-base-danger-500);\n --onyx-button-border-color-disabled: var(--onyx-color-base-danger-200);\n }\n\n &.onyx-button--plain {\n --onyx-button-background-color-hover: var(--onyx-color-base-danger-100);\n --onyx-button-text-color: var(--onyx-color-text-icons-danger-intense);\n --onyx-button-text-color-disabled: var(--onyx-color-text-icons-danger-medium);\n }\n }\n }\n\n @include layers.component() {\n position: relative;\n display: inline-flex;\n max-width: 100%;\n width: max-content;\n padding: calc(var(--onyx-button-padding-vertical) - var(--onyx-button-border-width))\n var(--onyx-button-padding-inline);\n justify-content: center;\n align-items: center;\n gap: var(--onyx-density-2xs);\n border-radius: var(--onyx-radius-sm);\n cursor: pointer;\n font-family: var(--onyx-font-family);\n background-color: var(--onyx-button-background-color);\n border: var(--onyx-button-border-width) solid var(--onyx-button-border-color);\n color: var(--onyx-button-text-color);\n\n &:focus-visible {\n outline: var(--onyx-outline-width) solid var(--onyx-button-outline-color);\n }\n\n &:enabled,\n &:is(a) {\n &:hover:not(:has(.onyx-ripple__element)) {\n background-color: var(--onyx-button-background-color-hover);\n border-color: var(--onyx-button-border-color-hover);\n color: var(--onyx-button-text-color-hover);\n }\n }\n\n &:disabled {\n cursor: default;\n\n &:not(.onyx-button--loading) {\n background-color: var(--onyx-button-background-color-disabled);\n border-color: var(--onyx-button-border-color-disabled);\n color: var(--onyx-button-text-color-disabled);\n }\n }\n\n &__label {\n padding-inline: var(--onyx-density-2xs);\n font-size: var(--onyx-font-size-md);\n font-style: normal;\n font-weight: var(--onyx-font-weight-semibold);\n line-height: var(--onyx-font-line-height-md);\n position: relative;\n }\n\n &__icon {\n position: relative;\n }\n\n &--loading &__label,\n &--loading &__icon {\n visibility: hidden;\n }\n\n &__loading {\n position: absolute;\n }\n }\n\n &-skeleton {\n width: var(--onyx-density-4xl);\n height: calc(1.5rem + 2 * var(--onyx-button-padding-vertical));\n display: inline-block;\n vertical-align: middle;\n }\n\n .onyx-ripple {\n --onyx-ripple-color: var(--onyx-button-background-color-hover);\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconCircleAttention, iconXSmall } from \"@sit-onyx/icons\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport OnyxHeadline from \"../OnyxHeadline/OnyxHeadline.vue\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxSystemButton from \"../OnyxSystemButton/OnyxSystemButton.vue\";\nimport type { OnyxInfoCardProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxInfoCardProps>(), {\n color: \"info\",\n closable: false,\n icon: iconCircleAttention,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the close button is clicked (`closable` property must be enabled).\n */\n close: [];\n}>();\n\nconst slots = defineSlots<{\n /**\n * Slot to provide description / further information.\n */\n default?(): unknown;\n /**\n * Slot to provide optional buttons/actions.\n */\n buttons?(): unknown;\n}>();\n\nconst { t } = injectI18n();\nconst { densityClass } = useDensity(props);\n</script>\n\n<template>\n <div\n :class=\"['onyx-component', 'onyx-info-card', `onyx-info-card--${props.color}`, densityClass]\"\n >\n <OnyxIcon v-if=\"props.icon\" class=\"onyx-info-card__icon\" :icon=\"props.icon\" />\n\n <div class=\"onyx-info-card__content\">\n <OnyxHeadline\n is=\"h3\"\n v-if=\"props.headline\"\n class=\"onyx-info-card__headline onyx-truncation-multiline\"\n >\n {{ props.headline }}\n </OnyxHeadline>\n\n <OnyxSystemButton\n v-if=\"props.closable\"\n class=\"onyx-info-card__close\"\n :icon=\"iconXSmall\"\n :label=\"t('close')\"\n :color=\"props.color === 'neutral' ? 'soft' : 'medium'\"\n @click=\"emit('close')\"\n />\n\n <p v-if=\"!!slots.default\" class=\"onyx-info-card__description onyx-text--small\">\n <slot></slot>\n </p>\n\n <div v-if=\"!!slots.buttons\" class=\"onyx-info-card__buttons onyx-density-compact\">\n <slot name=\"buttons\"></slot>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-info-card {\n @include layers.component() {\n --onyx-info-card-padding: var(--onyx-density-md);\n display: flex;\n gap: var(--onyx-density-md);\n padding: var(--onyx-info-card-padding) var(--onyx-density-2xl) var(--onyx-info-card-padding)\n var(--onyx-info-card-padding);\n\n border-radius: var(--onyx-radius-md);\n border: var(--onyx-1px-in-rem) solid var(--onyx-info-card-border-color);\n background-color: var(--onyx-info-card-background);\n color: var(--onyx-color-text-icons-neutral-intense);\n font-family: var(--onyx-font-family);\n max-width: 100%;\n position: relative;\n\n &__headline,\n &__icon {\n color: var(--onyx-info-card-headline-color);\n }\n\n &__content {\n display: flex;\n flex-direction: column;\n gap: var(--onyx-density-2xs);\n white-space: pre-line;\n }\n\n &__buttons {\n display: flex;\n flex-wrap: wrap;\n gap: var(--onyx-density-xs);\n }\n\n &__close {\n position: absolute;\n top: var(--onyx-info-card-padding);\n right: var(--onyx-info-card-padding);\n }\n\n $colors: info, neutral, success, warning, danger, primary;\n\n @each $color in $colors {\n &--#{$color} {\n --onyx-info-card-background: var(--onyx-color-base-#{$color}-200);\n --onyx-info-card-border-color: var(--onyx-color-base-#{$color}-300);\n\n @if $color == \"neutral\" {\n --onyx-info-card-headline-color: var(--onyx-color-text-icons-#{$color}-intense);\n } @else {\n --onyx-info-card-headline-color: var(--onyx-color-text-icons-#{$color}-bold);\n }\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport OnyxInfoCard from \"../OnyxInfoCard/OnyxInfoCard.vue\";\nimport type { OnyxNotificationMessageProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxNotificationMessageProps>(), {\n color: \"neutral\",\n duration: 8000,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the notification should be closed, e.g. when the duration has elapsed or the close \"x\" icon has been clicked.\n */\n close: [];\n}>();\n\nconst slots = defineSlots<{\n /**\n * Description/preview of the notification content.\n */\n default(): unknown;\n /**\n * Slot to provide optional buttons/actions.\n */\n buttons?(): unknown;\n}>();\n</script>\n\n<template>\n <OnyxInfoCard\n class=\"onyx-component onyx-notification-message\"\n :class=\"[\n 'onyx-component',\n 'onyx-notification-message',\n { 'onyx-notification-message--permanent': !props.duration },\n ]\"\n :headline=\"props.headline\"\n color=\"neutral\"\n :icon=\"props.icon ?? false\"\n closable\n tabindex=\"0\"\n :style=\"{ animationDuration: props.duration ? `${props.duration}ms` : undefined }\"\n role=\"status\"\n :aria-label=\"props.headline\"\n @close=\"emit('close')\"\n @animationend=\"emit('close')\"\n >\n <slot></slot>\n\n <template v-if=\"!!slots.buttons\" #buttons>\n <slot name=\"buttons\"></slot>\n </template>\n </OnyxInfoCard>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-notification-message {\n @include layers.component() {\n --onyx-info-card-background: var(--onyx-color-base-neutral-900);\n --onyx-info-card-border-color: var(--onyx-info-card-background);\n --onyx-info-card-headline-color: var(--onyx-color-text-icons-neutral-inverted);\n color: var(--onyx-info-card-headline-color);\n width: 24rem;\n\n &:focus-visible {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n }\n\n &:not(:hover, :focus-within) {\n .onyx-info-card__close {\n display: none;\n }\n }\n\n .onyx-info-card__close {\n --color: var(--onyx-info-card-headline-color);\n }\n\n .onyx-info-card__description {\n line-clamp: 2;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n overflow: hidden;\n }\n\n // timer/duration: we use a no-op empty animation here so we can listen for the \"animationend\" event to close the notification\n // and pause it on hover via plain CSS\n animation: onyx-notification-message-animation linear;\n @keyframes onyx-notification-message-animation {\n }\n\n &:hover,\n &:focus-within {\n animation-play-state: paused;\n }\n\n &--permanent {\n animation: none;\n }\n }\n}\n</style>\n","import { computed, inject, ref, type ComputedRef, type InjectionKey } from \"vue\";\nimport { userConsole } from \"../../utils/console.js\";\nimport type { OnyxButtonProps } from \"../OnyxButton/types.js\";\nimport type { OnyxNotificationMessageProps } from \"../OnyxNotificationMessage/types.js\";\n\nexport type NotificationsProvider = {\n /**\n * Readonly list of currently active notifications.\n */\n notifications: ComputedRef<ProvidedNotification[]>;\n /**\n * Shows a single notification.\n */\n show: (notification: ShowNotificationOptions) => void;\n /**\n * Removes the notification with the given `id`.\n */\n remove: (id: ProvidedNotification[\"id\"]) => void;\n};\n\nexport type ProvidedNotification = ShowNotificationOptions & {\n /**\n * Unique notification id used to identify the notification.\n */\n id: number;\n /**\n * Handler that should remove the notification. Will be called when the notification closes.\n * Is only used for internal onyx usage.\n */\n onClose: () => void;\n};\n\nexport type ShowNotificationOptions = OnyxNotificationMessageProps & {\n /**\n * Description/preview of the notification content.\n */\n description: string;\n /**\n * Slot to provide optional buttons/actions.\n */\n buttons?: (OnyxButtonProps & {\n /**\n * Callback that is called when the button is clicked.\n */\n onClick?: () => void;\n })[];\n};\n\nexport const NOTIFICATIONS_PROVIDER_INJECTION_KEY = Symbol() as InjectionKey<NotificationsProvider>;\n\n/**\n * Creates a new notifications provider that can be used with `useNotification()`.\n * Should be provided once on global app level with:\n *\n * @example\n * ```ts\n * import { createNotificationsProvider, NOTIFICATIONS_PROVIDER_INJECTION_KEY } from \"sit-onyx\";\n *\n * app.provide(NOTIFICATIONS_PROVIDER_INJECTION_KEY, createNotificationsProvider());\n * ```\n */\nexport const createNotificationsProvider = (): NotificationsProvider => {\n let nextId = 1;\n const notifications = ref<ProvidedNotification[]>([]);\n\n const show: NotificationsProvider[\"show\"] = (notification: ShowNotificationOptions) => {\n const id = nextId++;\n\n notifications.value.unshift({\n ...notification,\n id,\n onClose: () => remove(id),\n });\n };\n\n const remove: NotificationsProvider[\"remove\"] = (id) => {\n notifications.value = notifications.value.filter((notification) => notification.id !== id);\n };\n\n return {\n // make notifications readonly so they can not be modified from the outside\n notifications: computed(() => notifications.value),\n show,\n remove,\n };\n};\n\n/**\n * Composable for showing notifications.\n */\nexport const useNotification = () => {\n const logWarning = () =>\n userConsole?.warn(\n 'Trying to use \"useNotification()\" before the notifications provider has been provided. Make sure to \"provide\" it first.',\n );\n const notificationsProvider = inject(\n NOTIFICATIONS_PROVIDER_INJECTION_KEY,\n // provide fallback so \"useNotification()\" does not return \"undefined\"\n () => {\n return {\n notifications: computed(() => []),\n show: logWarning,\n remove: logWarning,\n } satisfies NotificationsProvider;\n },\n true,\n );\n\n return notificationsProvider;\n};\n","<script lang=\"ts\" setup>\nimport OnyxButton from \"../OnyxButton/OnyxButton.vue\";\nimport OnyxNotificationMessage from \"../OnyxNotificationMessage/OnyxNotificationMessage.vue\";\nimport { useNotification } from \"./useNotification.js\";\n\nconst notificationProvider = useNotification();\n</script>\n\n<!-- eslint-disable vue/no-root-v-if -->\n<template>\n <dialog\n v-if=\"notificationProvider.notifications.value.length\"\n class=\"onyx-component onyx-notifications\"\n role=\"presentation\"\n aria-live=\"polite\"\n open\n >\n <OnyxNotificationMessage\n v-for=\"{ id, ...notification } in notificationProvider.notifications.value\"\n :key=\"id\"\n v-bind=\"notification\"\n >\n {{ notification.description }}\n\n <template v-if=\"notification.buttons?.length\" #buttons>\n <OnyxButton v-for=\"button in notification.buttons\" :key=\"button.label\" v-bind=\"button\" />\n </template>\n </OnyxNotificationMessage>\n </dialog>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-notifications {\n @include layers.component() {\n --onyx-notifications-viewport-distance: var(--onyx-spacing-md);\n --onyx-notifications-gap: var(--onyx-spacing-2xs);\n --onyx-notifications-top: 0;\n padding: 0;\n border: none;\n background: none;\n z-index: var(--onyx-z-index-notification);\n\n position: fixed;\n top: var(--onyx-notifications-top);\n left: 100%;\n transform: translateX(-100%);\n overflow: auto;\n\n width: max-content;\n max-width: 100%;\n max-height: calc(\n 100% - var(--onyx-notifications-viewport-distance) - var(--onyx-notifications-top)\n );\n\n // we are using margin on the individual notifications instead of gap/margin on the parent\n // so the box shadows of the notifications are not cut off\n .onyx-notification-message {\n margin: var(--onyx-notifications-gap) var(--onyx-notifications-viewport-distance);\n max-width: calc(100% - 2 * var(--onyx-notifications-viewport-distance));\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n .onyx-component:has(.onyx-nav-bar):has(.onyx-notifications) & {\n --onyx-notifications-top: var(--onyx-nav-bar-height);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport {\n iconCircleAttention,\n iconCircleCheck,\n iconCircleInformation,\n iconCircleX,\n iconXSmall,\n} from \"@sit-onyx/icons\";\nimport { computed } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport type { OnyxToastMessageProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxToastMessageProps>(), {\n color: \"neutral\",\n duration: 5000,\n clickable: false,\n icon: undefined, // needed to prevent default value being \"false\"\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the toast should be closed.\n */\n close: [];\n}>();\n\nconst { t } = injectI18n();\nconst { densityClass } = useDensity(props);\n\nconst hasProgressBar = computed(() => props.duration > 0);\n\nconst DEFAULT_ICONS: Record<typeof props.color, string> = {\n neutral: iconCircleInformation,\n danger: iconCircleX,\n warning: iconCircleAttention,\n success: iconCircleCheck,\n};\n\nconst icon = computed(() => {\n if (props.icon === false) return;\n return props.icon || DEFAULT_ICONS[props.color];\n});\n</script>\n\n<template>\n <component\n :is=\"props.clickable ? 'button' : 'div'\"\n class=\"onyx-component onyx-toast-message\"\n :class=\"[`onyx-toast-message--${props.color}`, densityClass]\"\n :role=\"props.color === 'danger' || props.color === 'warning' ? 'alert' : 'status'\"\n :aria-label=\"props.clickable ? props.headline : undefined\"\n >\n <div class=\"onyx-toast-message__wrapper\">\n <OnyxIcon v-if=\"icon\" :icon=\"icon\" />\n\n <div class=\"onyx-toast-message__content onyx-truncation-ellipsis\">\n <div class=\"onyx-toast-message__headline onyx-text\">\n <span class=\"onyx-truncation-ellipsis\"> {{ props.headline }}</span>\n\n <button\n v-if=\"!props.clickable\"\n type=\"button\"\n :aria-label=\"t('close')\"\n class=\"onyx-toast-message__close\"\n @click=\"emit('close')\"\n >\n <OnyxIcon :icon=\"iconXSmall\" />\n </button>\n </div>\n\n <p\n v-if=\"props.description\"\n class=\"onyx-toast-message__description onyx-text--small onyx-truncation-multiline\"\n tabindex=\"0\"\n >\n {{ props.description }}\n </p>\n </div>\n </div>\n\n <!-- key is used to restart the animation when the duration changes -->\n <time\n v-if=\"hasProgressBar\"\n :key=\"props.duration\"\n aria-hidden=\"true\"\n class=\"onyx-toast-message__progress-bar\"\n :style=\"{ animationDuration: `${props.duration}ms` }\"\n @animationend=\"emit('close')\"\n ></time>\n </component>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-toast-message {\n --onyx-toast-message-padding-vertical: var(--onyx-density-sm);\n --onyx-toast-message-padding-horizontal: var(--onyx-density-md);\n\n @include layers.component() {\n --onyx-toast-message-color: var(--onyx-color-text-icons-neutral-inverted);\n --onyx-toast-message-background-color: var(--onyx-color-base-neutral-700);\n --onyx-toast-message-border-color: transparent;\n --onyx-toast-message-outline-color: var(--onyx-color-component-focus-primary);\n --onyx-toast-message-progress-bar-color: var(--onyx-color-base-primary-300);\n --onyx-toast-message-close-button-size: 1.5rem;\n\n font-family: var(--onyx-font-family);\n width: 40rem;\n max-width: 100%;\n flex-shrink: 0; // needed so toasts do not shrink if they exceed the max height of the toast provider\n\n border-radius: var(--onyx-radius-md);\n overflow: hidden;\n box-shadow: var(--onyx-shadow-soft-bottom);\n color: var(--onyx-toast-message-color);\n background-color: var(--onyx-toast-message-background-color);\n position: relative;\n z-index: var(--onyx-z-index-notification);\n\n &:hover,\n &:focus,\n &:has(&__description:focus-visible) {\n .onyx-toast-message__progress-bar {\n animation-play-state: paused;\n }\n }\n\n &:is(button) {\n text-align: left;\n cursor: pointer;\n border: none;\n padding: 0;\n\n &:focus-within {\n outline: var(--onyx-outline-width) solid var(--onyx-toast-message-outline-color);\n }\n }\n\n &:has(&__description:focus-visible) {\n outline: var(--onyx-outline-width) solid var(--onyx-toast-message-outline-color);\n }\n\n &__wrapper {\n display: flex;\n gap: var(--onyx-density-md);\n padding: var(--onyx-toast-message-padding-vertical)\n var(--onyx-toast-message-padding-horizontal);\n border: var(--onyx-1px-in-rem) solid var(--onyx-toast-message-border-color);\n border-radius: inherit;\n }\n\n &__content {\n width: 100%;\n }\n\n &__headline {\n font-weight: var(--onyx-font-weight-semibold);\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n\n &:has(.onyx-toast-message__close) {\n max-width: calc(100% - var(--onyx-toast-message-close-button-size));\n }\n }\n\n &__progress-bar {\n display: block;\n height: var(--onyx-spacing-5xs);\n background-color: var(--onyx-toast-message-progress-bar-color);\n animation: onyx-toast-message-progress-bar linear;\n width: 0;\n\n position: absolute;\n bottom: 0;\n left: 0;\n\n @keyframes onyx-toast-message-progress-bar {\n 0% {\n width: 100%;\n }\n 100% {\n width: 0%;\n }\n }\n }\n\n &__close {\n background: none;\n padding: 0;\n font: inherit;\n border: none;\n color: inherit;\n cursor: pointer;\n display: flex;\n\n // close button is position absolute so the outline is not cut off by the overflow: hidden of the toast\n position: absolute;\n right: var(--onyx-toast-message-padding-horizontal);\n top: var(--onyx-toast-message-padding-vertical);\n\n &:focus-visible {\n border-radius: var(--onyx-radius-md);\n outline: var(--onyx-spacing-5xs) solid var(--onyx-toast-message-outline-color);\n }\n }\n\n // only show close button on hover if it closes automatically\n &:has(.onyx-toast-message__progress-bar) {\n &:not(:hover) .onyx-toast-message__close {\n display: none;\n }\n }\n\n &__description {\n margin-top: var(--onyx-density-2xs);\n white-space: pre-line;\n max-height: 3lh;\n overflow-y: auto;\n\n &:focus-visible {\n outline: none;\n }\n }\n\n $colors: danger, warning, success;\n\n @each $color in $colors {\n &--#{$color} {\n --onyx-toast-message-color: var(--onyx-color-text-icons-#{$color}-bold);\n --onyx-toast-message-background-color: var(--onyx-color-base-#{$color}-100);\n --onyx-toast-message-border-color: var(--onyx-color-base-#{$color}-300);\n --onyx-toast-message-outline-color: var(--onyx-color-component-focus-#{$color});\n --onyx-toast-message-progress-bar-color: var(--onyx-color-base-#{$color}-400);\n }\n }\n }\n}\n</style>\n","import { computed, inject, ref, type ComputedRef, type InjectionKey } from \"vue\";\nimport { userConsole } from \"../../utils/console.js\";\nimport type { OnyxToastMessageProps } from \"../OnyxToastMessage/types.js\";\n\nexport type ToastProvider = {\n /**\n * Readonly list of currently active toasts.\n */\n toasts: ComputedRef<ProvidedToast[]>;\n /**\n * Shows a single toast.\n */\n show: (toast: ShowToastOptions) => void;\n /**\n * Removes the toast with the given `id`.\n */\n remove: (id: ProvidedToast[\"id\"]) => void;\n};\n\nexport type ProvidedToast = ShowToastOptions & {\n /**\n * Unique toast id used to identify the toast.\n */\n id: number;\n /**\n * Handler that should remove the toast. Will be called when the toast closes.\n * Is only used for internal onyx usage.\n */\n onClose: () => void;\n};\n\nexport type ShowToastOptions = OnyxToastMessageProps & {\n /**\n * Callback when the toast is clicked. Requires `clickable` to be enabled.\n */\n onClick?: () => void;\n};\n\nexport const TOAST_PROVIDER_INJECTION_KEY = Symbol() as InjectionKey<ToastProvider>;\n\n/**\n * Creates a new toast provider that can be used with `useToast()`.\n * Should be provided once on global app level with:\n *\n * @example\n * ```ts\n * import { createToastProvider, TOAST_PROVIDER_INJECTION_KEY } from \"sit-onyx\";\n *\n * app.provide(TOAST_PROVIDER_INJECTION_KEY, createToastProvider());\n * ```\n */\nexport const createToastProvider = (): ToastProvider => {\n let nextId = 1;\n const toasts = ref<ProvidedToast[]>([]);\n\n const show: ToastProvider[\"show\"] = (toast: ShowToastOptions) => {\n const id = nextId++;\n\n toasts.value.push({\n ...toast,\n id,\n onClose: () => remove(id),\n });\n };\n\n const remove: ToastProvider[\"remove\"] = (id) => {\n toasts.value = toasts.value.filter((toast) => toast.id !== id);\n };\n\n return {\n // make toasts readonly so they can not be modified from the outside\n toasts: computed(() => toasts.value),\n show,\n remove,\n };\n};\n\n/**\n * Composable for showing toasts.\n */\nexport const useToast = () => {\n const logWarning = () => {\n userConsole?.warn(\n 'Trying to use \"useToast()\" before the toast provider has been provided. Make sure to \"provide\" it first.',\n );\n };\n\n const toastProvider = inject(\n TOAST_PROVIDER_INJECTION_KEY,\n // provide fallback so \"useToast()\" does not return \"undefined\"\n () => {\n return {\n toasts: computed(() => []),\n show: logWarning,\n remove: logWarning,\n } satisfies ToastProvider;\n },\n true,\n );\n\n return toastProvider;\n};\n","<script lang=\"ts\" setup>\nimport OnyxToastMessage from \"../OnyxToastMessage/OnyxToastMessage.vue\";\nimport { useToast } from \"./useToast.js\";\n\nconst toastProvider = useToast();\n</script>\n\n<!-- eslint-disable vue/no-root-v-if -->\n<template>\n <dialog\n v-if=\"toastProvider.toasts.value.length\"\n class=\"onyx-component onyx-toast\"\n role=\"presentation\"\n aria-live=\"polite\"\n open\n >\n <OnyxToastMessage\n v-for=\"{ id, ...toast } in toastProvider.toasts.value\"\n :key=\"id\"\n v-bind=\"toast\"\n />\n </dialog>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-toast {\n @include layers.component() {\n $margin-bottom: var(--onyx-spacing-xl);\n\n padding: 0;\n border: none;\n background: none;\n z-index: var(--onyx-z-index-notification);\n\n position: fixed;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n overflow: auto;\n\n width: max-content;\n max-width: 100%;\n max-height: calc(100% - $margin-bottom);\n\n // we are using margin on the individual toasts instead of gap/margin on the parent\n // so the box shadows of the toasts are not cut off\n .onyx-toast-message {\n $margin-inline: var(--onyx-grid-margin);\n margin: var(--onyx-spacing-2xs) $margin-inline;\n max-width: calc(100% - 2 * $margin-inline);\n\n &:last-child {\n margin-bottom: $margin-bottom;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport OnyxGlobalFAB from \"../OnyxGlobalFAB/OnyxGlobalFAB.vue\";\nimport OnyxNotifications from \"../OnyxNotifications/OnyxNotifications.vue\";\nimport OnyxToast from \"../OnyxToast/OnyxToast.vue\";\nimport type { OnyxAppLayoutProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxAppLayoutProps>(), {\n navBarAlignment: \"top\",\n});\n\nconst slots = defineSlots<{\n /**\n * Page content area of the application. Recommended component: [OnyxPageLayout](https://storybook.onyx.schwarz/?path=/docs/layout-pagelayout--docs).\n *\n * For semantic HTML, it is recommend to use HTML elements like `<main>`\n */\n default(): unknown;\n /**\n * Navigation area of the application. Recommended components:\n * - for top alignment: [OnyxNavBar](https://storybook.onyx.schwarz/?path=/docs/navigation-navbar--docs)\n * - for left alignment: no onyx component yet, create your own custom one\n *\n * For implementing page-level sidebars, please use the [OnyxPageLayout](https://onyx.schwarz/?path=/story/layout-pagelayout--sidebar).\n * For semantic HTML, it is recommended to use HTML elements like `<header>` and `<nav>` here, which is already the case when using the above recommended components.\n */\n navBar?(): unknown;\n}>();\n</script>\n\n<template>\n <div\n class=\"onyx-component onyx-app\"\n :class=\"{ 'onyx-app--horizontal': props.navBarAlignment === 'left' }\"\n >\n <div v-if=\"slots.navBar\" class=\"onyx-app__nav\">\n <slot name=\"navBar\"></slot>\n </div>\n\n <div class=\"onyx-app__page\">\n <slot></slot>\n </div>\n <OnyxToast />\n <OnyxGlobalFAB />\n <OnyxNotifications />\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-app {\n @include layers.component() {\n height: 100vh;\n width: 100vw;\n display: grid;\n grid-template-rows: max-content 1fr;\n container-type: inline-size;\n\n &--horizontal {\n grid-template-rows: none;\n grid-template-columns: max-content 1fr;\n }\n\n &:not(:has(> &__nav)) {\n grid-template-rows: 1fr;\n }\n\n &__nav {\n z-index: var(--onyx-z-index-navigation);\n }\n\n &__page {\n overflow: hidden auto;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconUser } from \"@sit-onyx/icons\";\nimport { computed, ref, watch } from \"vue\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport { getInitials } from \"../../utils/strings.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport type { OnyxAvatarProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxAvatarProps>(), {\n size: \"48px\",\n});\n\nconst { locale, t } = injectI18n();\n\nconst username = computed(() => {\n if (typeof props.fullName === \"object\") return props.fullName;\n return { name: props.fullName, locale: locale.value };\n});\n\nconst initials = computed(() => {\n if (props.initials) return props.initials;\n return getInitials(username.value.name, username.value.locale);\n});\n\nconst ariaLabel = computed(() => t.value(\"avatar.ariaLabel\", { fullName: username.value.name }));\n\nconst hasImageError = ref(false);\nwatch(\n // reset image error if image changes\n () => props.src,\n () => (hasImageError.value = false),\n);\n</script>\n\n<template>\n <figure\n :class=\"[\n 'onyx-component',\n 'onyx-avatar',\n `onyx-avatar--${props.size}`,\n { 'onyx-avatar--custom': props.initials },\n ]\"\n :title=\"ariaLabel\"\n :aria-label=\"ariaLabel\"\n >\n <img\n v-if=\"props.src && !hasImageError\"\n class=\"onyx-avatar__image\"\n :src=\"props.src\"\n :alt=\"ariaLabel\"\n @error=\"hasImageError = true\"\n />\n\n <template v-else>\n <div v-if=\"initials\" class=\"onyx-avatar__initials\">{{ initials }}</div>\n <OnyxIcon v-else :icon=\"iconUser\" class=\"onyx-avatar__icon\" />\n </template>\n </figure>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"../../styles/mixins/sizes.scss\";\n\n.onyx-avatar {\n @include layers.component() {\n width: var(--onyx-avatar-size);\n height: var(--onyx-avatar-size);\n min-width: var(--onyx-avatar-size);\n border-radius: var(--onyx-radius-full);\n background-color: var(--onyx-color-base-primary-200);\n\n color: var(--onyx-color-text-icons-primary-bold);\n font-family: var(--onyx-font-family);\n line-height: normal;\n font-weight: var(--onyx-font-weight-semibold);\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n &--custom {\n --onyx-avatar-padding: var(--onyx-spacing-sm);\n width: max-content; // allow avatar to get pill-shaped if longer custom text is passed\n padding: var(--onyx-avatar-padding);\n }\n\n &__image {\n border-radius: inherit;\n height: 100%;\n width: 100%;\n object-fit: cover;\n }\n\n &__icon {\n --icon-size: 1em;\n }\n\n @include sizes.define-rem-sizes using ($name, $size) {\n @if $name != 12px {\n &--#{$name} {\n --onyx-avatar-size: #{$size};\n\n @if $name == 16px {\n font-size: 0.5rem;\n --onyx-avatar-padding: var(--onyx-spacing-4xs);\n }\n @if $name == 24px {\n font-size: 0.625rem;\n --onyx-avatar-padding: var(--onyx-spacing-3xs);\n }\n @if $name == 32px {\n font-size: 0.875rem;\n --onyx-avatar-padding: var(--onyx-spacing-2xs);\n }\n @if $name == 48px {\n font-size: 1.25rem;\n }\n @if $name == 64px {\n font-size: 1.75rem;\n }\n @if $name == 96px {\n font-size: 3rem;\n }\n }\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\ndefineSlots<{\n /**\n * Default slot to place the avatars.\n */\n default(): unknown;\n}>();\n</script>\n\n<template>\n <div class=\"onyx-component onyx-avatar-stack\">\n <slot></slot>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-avatar-stack {\n @include layers.component() {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n width: max-content;\n max-width: 100%;\n\n > .onyx-avatar {\n $border-width: var(--onyx-1px-in-rem);\n border: $border-width solid var(--onyx-color-base-primary-700);\n\n &:not(:last-child) {\n // move by 50% (minus border)\n margin-right: calc(-0.5 * var(--onyx-avatar-size) - $border-width);\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useDensity } from \"../../composables/density.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport type { OnyxBadgeProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxBadgeProps>(), {\n color: \"primary\",\n dot: false,\n});\n\nconst { densityClass } = useDensity(props);\n\ndefineSlots<{\n /**\n * Badge content.\n */\n default?(): unknown;\n}>();\n</script>\n\n<template>\n <div\n class=\"onyx-component onyx-badge\"\n :class=\"[\n 'onyx-truncation-ellipsis',\n 'onyx-text',\n `onyx-badge--${props.color}`,\n { 'onyx-badge--dot': props.dot },\n densityClass,\n ]\"\n >\n <template v-if=\"!props.dot\">\n <OnyxIcon v-if=\"props.icon\" class=\"onyx-badge__icon\" :icon=\"props.icon\" />\n <slot v-else></slot>\n </template>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"../../styles/mixins/density.scss\";\n\n.onyx-badge {\n @include density.compact {\n --onyx-badge-icon-padding: var(--onyx-spacing-4xs);\n --onyx-badge-icon-size: 1rem;\n }\n\n @include density.default {\n --onyx-badge-icon-padding: var(--onyx-spacing-3xs);\n --onyx-badge-icon-size: 1rem;\n }\n\n @include density.cozy {\n --onyx-badge-icon-padding: var(--onyx-spacing-4xs);\n --onyx-badge-icon-size: 1.5rem;\n }\n\n @include layers.component() {\n --onyx-badge-background-color: var(--onyx-color-component-cta-default);\n\n display: inline-block;\n max-width: 100%;\n padding: var(--onyx-density-3xs) var(--onyx-density-sm);\n border-radius: var(--onyx-radius-full);\n background-color: var(--onyx-badge-background-color);\n color: var(--onyx-color-text-icons-neutral-inverted);\n font-family: var(--onyx-font-family);\n font-style: normal;\n\n &:has(&__icon) {\n padding: var(--onyx-badge-icon-padding);\n\n .onyx-icon {\n --icon-size: var(--onyx-badge-icon-size);\n }\n }\n\n &--neutral {\n --onyx-badge-background-color: var(--onyx-color-base-neutral-700);\n }\n\n &--danger {\n --onyx-badge-background-color: var(--onyx-color-base-danger-500);\n }\n\n &--warning {\n --onyx-badge-background-color: var(--onyx-color-base-warning-500);\n }\n\n &--success {\n --onyx-badge-background-color: var(--onyx-color-base-success-500);\n }\n\n &--info {\n --onyx-badge-background-color: var(--onyx-color-base-info-500);\n }\n\n &__icon {\n display: flex;\n }\n\n &--dot {\n height: max-content;\n width: max-content;\n padding: var(--onyx-density-2xs);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useDensity } from \"../../composables/density.js\";\nimport type { OnyxBottomBarProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxBottomBarProps>(), {\n hideBorder: false,\n});\n\ndefineSlots<{\n /**\n * Bottom bar content. This slot is left aligned and should be used by buttons and icon buttons.\n */\n left?(): unknown;\n /**\n * Bottom bar content. This slot is right aligned and should be used by buttons and icon buttons.\n */\n default?(): unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\n</script>\n\n<template>\n <div\n :class=\"[\n 'onyx-component',\n 'onyx-bottom-bar',\n densityClass,\n props.hideBorder ? '' : 'onyx-bottom-bar--border',\n ]\"\n >\n <div class=\"onyx-bottom-bar__content onyx-grid-container\">\n <div class=\"onyx-bottom-bar__content--left\">\n <slot name=\"left\"></slot>\n </div>\n <div class=\"onyx-bottom-bar__content--right\">\n <slot></slot>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-bottom-bar {\n @include layers.component() {\n position: sticky;\n bottom: 0;\n width: 100%;\n background-color: var(--onyx-color-base-background-blank);\n container-type: inline-size;\n\n &--border {\n border-top: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n }\n\n &__content {\n display: flex;\n justify-content: space-between;\n gap: var(--onyx-density-xs);\n overflow-x: auto;\n\n // by default the horizontal padding should be aligned with the grid\n // however, when used inside the modal dialog, it should automatically adapt to the dialog padding\n padding: var(--onyx-spacing-2xs) var(--onyx-modal-padding-inline, var(--onyx-grid-margin));\n\n &--left,\n &--right {\n display: flex;\n gap: var(--onyx-density-xs);\n }\n }\n }\n}\n</style>\n","import {\n computed,\n inject,\n onBeforeUnmount,\n onMounted,\n reactive,\n ref,\n toRef,\n toValue,\n useId,\n watch,\n type InjectionKey,\n type MaybeRefOrGetter,\n type Ref,\n} from \"vue\";\nimport {\n getTemplateRefElement,\n useResizeObserver,\n type VueTemplateRefElement,\n} from \"./useResizeObserver.js\";\n\n/**\n * Injection key for providing \"more\" data to child components of a list to e.g. render a \"+3 more\" indicator.\n */\nexport type MoreListInjectionKey = InjectionKey<ReturnType<typeof useMoreList>>;\n\nexport type UseMoreListOptions = {\n /**\n * Vue template ref for the parent element containing the more indicator as well as the list of components.\n */\n parentRef: Ref<VueTemplateRefElement>;\n /**\n * Vue template ref for the element containing the list of components.\n */\n listRef: Ref<VueTemplateRefElement>;\n /**\n * Vue template ref for the more indicator element that might be shown if not all elements are visible.\n */\n moreIndicatorRef: Ref<VueTemplateRefElement>;\n /**\n * From which direction the list items should start to be hidden, when space is limited.\n *\n * @default \"rtl\"\n */\n direction: MaybeRefOrGetter<\"rtl\" | \"ltr\">;\n};\n\n/**\n * Composable for managing a list of components where e.g. a \"+3\" more indicator should be shown if not all components\n * fit into the available width.\n *\n * @example\n *\n * ```vue\n * <script lang=\"ts\" setup>\n * import { provide, ref, watch } from \"vue\";\n * import { useMoreList, NAV_BAR_MORE_LIST_INJECTION_KEY } from \"sit-onyx\";\n *\n * const parentRef = ref<HTMLElement>();\n * const listRef = ref<HTMLElement>();\n * const moreIndicatorRef = ref<HTMLElement>();\n *\n * const more = useMoreList({ parentRef, listRef, moreIndicatorRef });\n * provide(NAV_BAR_MORE_LIST_INJECTION_KEY, more);\n * </script>\n *\n * <template>\n * <div ref=\"parentRef\" class=\"more-list\">\n * <div ref=\"listRef\" class=\"more-list__elements\">\n * <OnyxNavItem v-for=\"i in 16\" ref=\"componentRefs\" :key=\"i\" :label=\"`Nav button ${i}`\" />\n * </div>\n *\n * <div ref=\"moreIndicatorRef\" class=\"more-list__indicator\">\n * +{{ more.hiddenElements.value.length }} more\n * </div>\n * </div>\n * </template>\n *\n * <style lang=\"scss\">\n * .more-list {\n * display: flex;\n * align-items: center;\n * gap: var(--onyx-spacing-4xs);\n *\n * &__elements {\n * display: inherit;\n * align-items: inherit;\n * gap: inherit;\n * overflow-x: clip;\n * }\n *\n * &__indicator {\n * min-width: max-content;\n * max-width: 100%;\n * }\n * }\n * </style>\n * ```\n */\nexport const useMoreList = (options: UseMoreListOptions) => {\n const visibleElements = ref<string[]>();\n const hiddenElements = ref<string[]>();\n\n const { width: parentWidth } = useResizeObserver(options.parentRef);\n const { width: moreIndicatorWidth } = useResizeObserver(options.moreIndicatorRef);\n\n /**\n * Map of all component widths. Key = component ID, value = component width.\n * If component is hidden, this map will still include the previous width.\n */\n const componentMap = reactive(new Map<string, number>());\n\n onMounted(() => {\n watch(\n [parentWidth, moreIndicatorWidth, componentMap, toRef(options.direction)],\n () => {\n let availableWidth = parentWidth.value;\n if (availableWidth <= 0) return; // parent width is not initialized yet\n\n const parentGap = getColumnGap(options.parentRef.value);\n const listGap = getColumnGap(options.listRef.value);\n\n if (moreIndicatorWidth.value > 0) {\n availableWidth -= moreIndicatorWidth.value + parentGap;\n }\n\n // calculate which components currently fully fit into the available parent width\n // we don't need to worry about changing the refs multiple times here since Vue batches changes\n visibleElements.value = [];\n hiddenElements.value = [];\n\n const allComponents = Array.from(componentMap.entries());\n if (toValue(options.direction) === \"ltr\") {\n allComponents.reverse();\n }\n allComponents.forEach(([id, componentWidth], index, { length }) => {\n availableWidth -= componentWidth + (index > 0 ? listGap : 0);\n\n if (\n availableWidth >= 0 ||\n // check if last element fits if more indicator would be hidden\n (index === length - 1 && availableWidth + moreIndicatorWidth.value >= 0)\n ) {\n visibleElements.value!.push(id);\n } else {\n hiddenElements.value!.push(id);\n }\n });\n },\n {\n // The rendering should happen before we calculated the visible elements. This way we can ensure, that the widths are already up-to-date.\n flush: \"post\",\n },\n );\n });\n\n return {\n /**\n * IDs of currently completely visible components in the list.\n * Initially `undefined`, in that case treat all components as visible.\n */\n visibleElements,\n /**\n * IDs of currently fully or partially hidden components in the list.\n * Initially `undefined`, in that case treat all components as visible.\n */\n hiddenElements,\n /**\n * Map of widths for all components in the list. Key = component ID.\n * Components in the list must inject this map and add a ref for their width to it.\n *\n * @see `useMoreListChild()`\n */\n componentMap,\n };\n};\n\n/**\n * Gets the CSS column-gap property for the given element or 0 if invalid or unset.\n */\nconst getColumnGap = (ref: VueTemplateRefElement) => {\n const element = getTemplateRefElement(ref);\n if (!element) return 0;\n // we use \"|| 0\" here to fallback to zero for NaN values when no/invalid gap exist\n return Number.parseFloat(getComputedStyle(element).columnGap) || 0;\n};\n\n/**\n * Composable that must be implemented in all list children when using `useMoreList` to correctly observe the visibility of the elements.\n *\n * @example\n *\n * ```vue\n * <script lang=\"ts\" setup\n * const { componentRef, isVisible } = useMoreListChild();\n * </script>\n *\n * <template\n * <div v-show=\"isVisible\" ref=\"componentRef\"> Your content... </div>\n * </template>\n * ```\n */\nexport const useMoreListChild = (injectionKey: MoreListInjectionKey) => {\n const id = useId();\n const componentRef = ref<VueTemplateRefElement>();\n const moreContext = inject(injectionKey, undefined);\n const { width } = useResizeObserver(componentRef, { box: \"border-box\" });\n\n watch(\n width,\n (newWidth) => {\n const map = moreContext?.componentMap;\n // do not reset width if width is 0 = component is hidden because the more list still\n // needs the previous to calculate if component can be shown when resizing the screen larger\n if (!map || (map.has(id) && newWidth === 0)) return;\n map.set(id, newWidth);\n },\n { immediate: true },\n );\n\n onBeforeUnmount(() => moreContext?.componentMap.delete(id));\n\n const isVisible = computed(() => moreContext?.visibleElements.value?.includes(id) ?? true);\n\n return {\n /**\n * Component template ref.\n */\n componentRef,\n /**\n * Whether the component is currently visible.\n * Should hide itself visually (e.g. using `v-show=\"isVisible\"`).\n */\n isVisible,\n };\n};\n","import type { InjectionKey, Ref, TeleportProps } from \"vue\";\nimport type { DensityProp } from \"../../composables/density.js\";\nimport type { MoreListInjectionKey } from \"../../composables/useMoreList.js\";\n\nexport const BREADCRUMB_MORE_LIST_INJECTION_KEY = Symbol() as MoreListInjectionKey;\nexport const BREADCRUMB_MORE_LIST_TARGET_INJECTION_KEY = Symbol() as InjectionKey<\n Ref<TeleportProps[\"to\"]>\n>;\n\nexport type OnyxBreadcrumbProps = DensityProp & {\n /**\n * If `true`, the component will be shown inside a styled container.\n * Recommended when used together with a nav bar or sidebar.\n */\n container?: boolean;\n /**\n * Custom home item.\n */\n home?: BreadcrumbHomeItem;\n /**\n * Whether to show all nested breadcrumb items as skeleton.\n */\n skeleton?: boolean;\n};\n\nexport type BreadcrumbHomeItem = {\n /**\n * Text label for the home item. Will show the passed label instead of an icon.\n */\n label?: string;\n /**\n * Link of the home item.\n *\n * @default \"/\"\n */\n link?: string;\n};\n","<script lang=\"ts\" setup>\nimport { iconArrowSmallUpRight } from \"@sit-onyx/icons\";\nimport { computed } from \"vue\";\nimport { isInternalLink } from \"../../utils/router.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport type { OnyxExternalLinkIconProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxExternalLinkIconProps>(), {\n withExternalIcon: \"auto\",\n});\n\nconst isVisible = computed(() => {\n const withExternalIcon = props.withExternalIcon;\n if (withExternalIcon !== \"auto\") return withExternalIcon;\n return !isInternalLink(props.href ?? \"\");\n});\n</script>\n\n<!-- eslint-disable-next-line vue/no-root-v-if -->\n<template>\n <OnyxIcon\n v-if=\"isVisible\"\n class=\"onyx-component onyx-external-link-icon\"\n :icon=\"iconArrowSmallUpRight\"\n size=\"16px\"\n />\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-external-link-icon {\n @include layers.component() {\n vertical-align: text-top;\n place-self: baseline;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useDensity } from \"../../composables/density.js\";\nimport type { OnyxListItemProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxListItemProps>(), {\n active: false,\n disabled: false,\n selected: false,\n checked: false,\n});\n\ndefineSlots<{\n /**\n * Option content.\n */\n default(): unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\n</script>\n\n<template>\n <li\n :class=\"{\n 'onyx-component': true,\n 'onyx-list-item': true,\n ...densityClass,\n 'onyx-list-item--active': props.active,\n [`onyx-list-item--${props.color}`]: props.color,\n 'onyx-list-item--disabled': props.disabled,\n 'onyx-list-item--selected': props.selected,\n 'onyx-list-item--checked': props.checked,\n }\"\n >\n <slot></slot>\n </li>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-list-item {\n @include layers.component() {\n --onyx-list-item-color: var(--onyx-color-text-icons-neutral-intense);\n --onyx-list-item-color-selected: var(--onyx-color-text-icons-primary-bold);\n --onyx-list-item-background: var(--onyx-color-base-background-blank);\n --onyx-list-item-background-hover: var(--onyx-color-base-primary-100);\n --onyx-list-item-background-selected: var(--onyx-color-base-primary-200);\n --onyx-list-item-padding: var(--onyx-density-xs) var(--onyx-density-sm);\n\n font-family: var(--onyx-font-family);\n color: var(--onyx-list-item-color);\n padding: var(--onyx-list-item-padding);\n background-color: var(--onyx-list-item-background);\n font-weight: var(--onyx-font-weight-regular);\n font-size: var(--onyx-font-size-md);\n line-height: var(--onyx-font-line-height-md);\n\n border: none;\n width: 100%;\n outline: none;\n\n display: flex;\n align-items: center;\n gap: var(--onyx-density-sm);\n\n &:not(&--disabled) {\n cursor: pointer;\n\n &:hover,\n &:focus-within,\n &.onyx-list-item--active {\n background-color: var(--onyx-list-item-background-hover);\n }\n\n &:focus-within {\n color: var(--onyx-list-item-color-selected);\n }\n\n // single select\n &.onyx-list-item--selected {\n background-color: var(--onyx-list-item-background-selected);\n\n &:hover,\n &.onyx-list-item--active {\n color: var(--onyx-list-item-color-selected);\n }\n }\n\n // multiselect\n &.onyx-list-item--checked {\n &:hover,\n &.onyx-list-item--active {\n background-color: var(--onyx-list-item-background-selected);\n color: var(--onyx-list-item-color-selected);\n }\n }\n }\n\n &--disabled {\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n\n &--danger {\n --onyx-list-item-color: var(--onyx-color-text-icons-danger-intense);\n --onyx-list-item-color-selected: var(--onyx-color-text-icons-danger-intense);\n --onyx-list-item-background-hover: var(--onyx-color-base-danger-100);\n --onyx-list-item-background-selected: var(--onyx-color-base-danger-200);\n }\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { createMenuItems } from \"@sit-onyx/headless\";\nimport { iconArrowSmallLeft, iconChevronRightSmall } from \"@sit-onyx/icons\";\nimport { computed, nextTick, useTemplateRef, withModifiers } from \"vue\";\nimport { useLink } from \"../../../../composables/useLink.js\";\nimport { useVModel } from \"../../../../composables/useVModel.js\";\nimport { injectI18n } from \"../../../../i18n/index.js\";\nimport { mergeVueProps, useRootAttrs } from \"../../../../utils/attrs.js\";\nimport { extractLinkProps } from \"../../../../utils/router.js\";\nimport ButtonOrLinkLayout from \"../../../OnyxButton/ButtonOrLinkLayout.vue\";\nimport OnyxExternalLinkIcon from \"../../../OnyxExternalLinkIcon/OnyxExternalLinkIcon.vue\";\nimport OnyxIcon from \"../../../OnyxIcon/OnyxIcon.vue\";\nimport OnyxListItem from \"../../../OnyxListItem/OnyxListItem.vue\";\nimport { type OnyxMenuItemProps } from \"./types.js\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst { t } = injectI18n();\n\nconst { rootAttrs, restAttrs } = useRootAttrs();\n\nconst props = withDefaults(defineProps<OnyxMenuItemProps>(), {\n active: \"auto\",\n open: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the open state should update.\n */\n \"update:open\": [value: boolean];\n}>();\n\nconst slots = defineSlots<{\n /**\n * Button/link text and additional inline content.\n */\n default(): unknown;\n /**\n * Children menuitems.\n */\n children(): unknown;\n}>();\n\n/**\n * Controls the open state.\n */\nconst open = useVModel({\n props,\n emit,\n key: \"open\",\n default: false,\n});\n\nconst backButton = useTemplateRef(\"backButtonRef\");\nconst menuItemElementRef = useTemplateRef(\"menuItemRef\");\n\nconst {\n elements: { listItem, menuItem },\n} = createMenuItems({\n onOpen: async () => {\n if (!hasChildren.value) return;\n open.value = true;\n await nextTick();\n backButton.value?.$el.querySelector(\"button\").focus();\n },\n});\n\nconst { isActive: isPathActive } = useLink();\nconst isActive = computed(() => {\n if (props.active !== \"auto\") return props.active;\n return isPathActive.value(props.link);\n});\n\nconst menuItemProps = computed(() =>\n menuItem({\n active: isActive.value,\n disabled: props.disabled,\n }),\n);\n\nconst hasChildren = computed(() => !!slots.children);\n\nconst childrenClickHandler = computed(() =>\n hasChildren.value\n ? {\n onClick: withModifiers(() => (open.value = true), [\"stop\"]),\n }\n : null,\n);\n\nconst handleBackButtonKeydown = async (event: KeyboardEvent) => {\n switch (event.key) {\n case \"ArrowLeft\":\n case \" \":\n case \"Enter\":\n event.preventDefault();\n open.value = false;\n await nextTick();\n menuItemElementRef.value?.$el.focus();\n break;\n }\n};\n</script>\n\n<template>\n <OnyxListItem\n :selected=\"isActive\"\n :active=\"isActive\"\n :color=\"props.color\"\n :disabled=\"props.disabled\"\n class=\"onyx-menu-item\"\n :class=\"{ 'onyx-menu-item--open': open }\"\n v-bind=\"mergeVueProps(listItem, rootAttrs)\"\n >\n <ButtonOrLinkLayout\n v-show=\"!open\"\n ref=\"menuItemRef\"\n class=\"onyx-menu-item__trigger\"\n :disabled=\"props.disabled\"\n :link=\"props.link\"\n v-bind=\"mergeVueProps(menuItemProps, restAttrs, childrenClickHandler)\"\n >\n <slot>\n <span>\n <span class=\"onyx-truncation-ellipsis\">\n {{ props.label }}\n </span>\n <OnyxExternalLinkIcon v-bind=\"props.link ? extractLinkProps(props.link) : undefined\" />\n </span>\n </slot>\n\n <div v-if=\"hasChildren\" class=\"onyx-menu-item__chevron\">\n <OnyxIcon :icon=\"iconChevronRightSmall\" size=\"24px\" />\n </div>\n </ButtonOrLinkLayout>\n\n <ul v-if=\"hasChildren\" v-show=\"open\" role=\"menu\" class=\"onyx-menu-item__children\">\n <OnyxMenuItem\n ref=\"backButtonRef\"\n class=\"onyx-menu-item__back\"\n @keydown=\"handleBackButtonKeydown\"\n @click.stop=\"open = false\"\n >\n <OnyxIcon :icon=\"iconArrowSmallLeft\" />\n {{ t(\"back\") }}\n </OnyxMenuItem>\n <slot name=\"children\"></slot>\n </ul>\n </OnyxListItem>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../../styles/mixins/layers\";\n\n@layer onyx.reset {\n button.onyx-menu-item__trigger,\n a.onyx-menu-item__trigger {\n all: unset;\n }\n}\n\n.onyx-menu-item {\n @include layers.component() {\n --onyx-menu-item-gap: var(--onyx-density-sm);\n\n // in order for the full menu item to be clickable, we remove the padding here\n // and set it on the anchor/button instead\n padding: 0;\n\n &__trigger {\n display: flex;\n align-items: center;\n gap: var(--onyx-menu-item-gap);\n color: inherit;\n text-decoration: none;\n padding: var(--onyx-list-item-padding);\n width: 100%;\n border-radius: inherit;\n\n &:enabled {\n cursor: pointer;\n }\n\n &:focus {\n outline: none;\n }\n\n &:is(button) {\n background-color: inherit;\n border: none;\n }\n }\n\n &__children {\n padding: 0;\n width: 100%;\n\n display: flex;\n flex-direction: column;\n\n // when nested child item is open, hide all other items in the same layer (including back button)\n &:has(.onyx-menu-item--open) {\n > .onyx-menu-item:not(.onyx-menu-item--open) {\n display: none;\n }\n }\n }\n\n &__chevron {\n flex: 1 0 1.5rem;\n display: flex;\n justify-content: end;\n }\n\n &__back {\n font-weight: var(--onyx-font-weight-semibold);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useLink } from \"../../composables/useLink.js\";\nimport { useMoreListChild } from \"../../composables/useMoreList.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport {\n BREADCRUMB_MORE_LIST_INJECTION_KEY,\n BREADCRUMB_MORE_LIST_TARGET_INJECTION_KEY,\n} from \"../OnyxBreadcrumb/types.js\";\nimport ButtonOrLinkLayout from \"../OnyxButton/ButtonOrLinkLayout.vue\";\nimport OnyxMenuItem from \"../OnyxNavBar/modules/OnyxMenuItem/OnyxMenuItem.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxBreadcrumbItemProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxBreadcrumbItemProps>(), {\n active: \"auto\",\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\ndefineSlots<{\n /**\n * Item content / page name.\n */\n default(): unknown;\n}>();\n\ndefineOptions({ inheritAttrs: false });\nconst { restAttrs, rootAttrs } = useRootAttrs();\n\nconst { densityClass } = useDensity(props);\nconst { currentRoute } = useLink();\nconst skeleton = useSkeletonContext(props);\n\nconst { componentRef, isVisible } = useMoreListChild(BREADCRUMB_MORE_LIST_INJECTION_KEY);\nconst moreListTargetRef = inject(BREADCRUMB_MORE_LIST_TARGET_INJECTION_KEY, undefined);\n\nconst isActive = computed(() => {\n return props.href && props.active === \"auto\"\n ? props.href === currentRoute.value?.path\n : props.active;\n});\n</script>\n\n<template>\n <li\n v-if=\"isVisible || isActive\"\n ref=\"componentRef\"\n :class=\"[\n 'onyx-component',\n 'onyx-breadcrumb-item',\n 'onyx-text--small',\n densityClass,\n { 'onyx-breadcrumb-item--active': isActive },\n ]\"\n role=\"menuitem\"\n v-bind=\"rootAttrs\"\n >\n <OnyxSkeleton\n v-if=\"skeleton\"\n class=\"onyx-breadcrumb-item__link onyx-breadcrumb-item__skeleton\"\n />\n\n <ButtonOrLinkLayout\n v-else\n class=\"onyx-breadcrumb-item__link\"\n :link=\"props.href\"\n :aria-current=\"isActive ? 'page' : undefined\"\n v-bind=\"restAttrs\"\n >\n <slot></slot>\n </ButtonOrLinkLayout>\n </li>\n <Teleport :to=\"moreListTargetRef\" :disabled=\"!moreListTargetRef\">\n <OnyxMenuItem v-if=\"!isVisible\" :link=\"props.href\" :active=\"isActive\" v-bind=\"restAttrs\">\n <slot></slot>\n </OnyxMenuItem>\n </Teleport>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-breadcrumb-item {\n @include layers.component() {\n --onyx-breadcrumb-item-color: var(--onyx-color-text-icons-neutral-medium);\n --onyx-breadcrumb-item-color-hover: var(--onyx-color-text-icons-neutral-intense);\n --onyx-breadcrumb-item-background: transparent;\n --onyx-breadcrumb-item-background-hover: var(--onyx-color-base-neutral-200);\n --onyx-breadcrumb-item-outline-color: var(--onyx-color-component-focus-neutral);\n --onyx-breadcrumb-item-padding-vertical: var(--onyx-density-3xs);\n --onyx-breadcrumb-item-padding-inline: var(--onyx-density-xs);\n list-style: none;\n font-family: var(--onyx-font-family);\n color: var(--onyx-breadcrumb-item-color);\n background-color: var(--onyx-breadcrumb-item-background);\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n &__link {\n display: inherit;\n justify-content: inherit;\n align-items: inherit;\n gap: var(--onyx-density-3xs);\n padding: var(--onyx-breadcrumb-item-padding-vertical)\n var(--onyx-breadcrumb-item-padding-inline);\n border-radius: var(--onyx-radius-sm);\n border: none;\n background-color: transparent;\n cursor: pointer;\n\n &:hover {\n color: var(--onyx-breadcrumb-item-color-hover);\n background-color: var(--onyx-breadcrumb-item-background-hover);\n }\n\n &:focus-visible {\n outline: var(--onyx-outline-width) solid var(--onyx-breadcrumb-item-outline-color);\n }\n }\n\n &--active {\n --onyx-breadcrumb-item-color: var(--onyx-color-text-icons-primary-intense);\n --onyx-breadcrumb-item-color-hover: var(--onyx-color-text-icons-primary-bold);\n --onyx-breadcrumb-item-background-hover: var(--onyx-color-base-primary-200);\n --onyx-breadcrumb-item-outline-color: var(--onyx-color-component-focus-primary);\n }\n\n &::before {\n content: \"/\";\n margin-right: var(--onyx-density-xs);\n color: var(--onyx-color-text-icons-neutral-medium);\n }\n\n &:has(.onyx-icon:only-child) {\n --onyx-breadcrumb-item-padding-vertical: var(--onyx-density-2xs);\n --onyx-breadcrumb-item-padding-inline: var(--onyx-breadcrumb-item-padding-vertical);\n }\n\n &__skeleton {\n padding: 0;\n cursor: initial;\n height: calc(1lh + 2 * var(--onyx-breadcrumb-item-padding-vertical));\n width: calc(1.5rem + 2 * var(--onyx-breadcrumb-item-padding-inline));\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { provide, ref, toRef, useTemplateRef, watch } from \"vue\";\nimport { useMoreList } from \"../../composables/useMoreList.js\";\nimport type { VueTemplateRefElement } from \"../../composables/useResizeObserver.js\";\nimport type { MoreListSlotBindings, OnyxMoreListProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxMoreListProps>(), { is: \"div\", direction: \"rtl\" });\n\nconst emit = defineEmits<{\n /**\n * Emitted when the number of visible elements changes.\n */\n visibilityChange: [MoreListSlotBindings];\n}>();\n\ndefineSlots<{\n /**\n * List of components to render. Each child must implement the `useMoreListChild()` composable.\n */\n default(props: { attributes: object }): unknown;\n /**\n * Slot to display at the end if not all default slot elements fit in the available width.\n */\n more(props: MoreListSlotBindings & { attributes: object }): unknown;\n}>();\n\nconst parentRef = useTemplateRef<HTMLElement>(\"parentRefEl\");\nconst listRef = ref<VueTemplateRefElement>();\nconst moreIndicatorRef = ref<VueTemplateRefElement>();\n\nconst more = useMoreList({\n parentRef,\n listRef,\n moreIndicatorRef,\n direction: toRef(() => props.direction),\n});\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss -- provide does not support reactive symbols, this reactivity loss is mentioned in the property docs\nprovide(props.injectionKey, more);\n\nwatch(\n [() => more.visibleElements.value?.length, () => more.hiddenElements.value?.length],\n ([visibleElements, hiddenElements]) => {\n emit(\"visibilityChange\", { visibleElements, hiddenElements });\n },\n);\n</script>\n\n<template>\n <component :is=\"props.is\" ref=\"parentRefEl\" class=\"onyx-component onyx-more-list\">\n <slot\n v-if=\"props.direction === 'rtl'\"\n :attributes=\"{\n ref: (el?: VueTemplateRefElement) => (listRef = el),\n class: 'onyx-more-list__elements',\n }\"\n ></slot>\n\n <slot\n v-if=\"more.hiddenElements.value?.length\"\n name=\"more\"\n :attributes=\"{\n ref: (el?: VueTemplateRefElement) => (moreIndicatorRef = el),\n class: 'onyx-more-list__indicator',\n }\"\n :hidden-elements=\"more.hiddenElements.value?.length\"\n :visible-elements=\"more.visibleElements.value?.length\"\n ></slot>\n\n <slot\n v-if=\"props.direction === 'ltr'\"\n :attributes=\"{\n ref: (el?: VueTemplateRefElement) => (listRef = el),\n class: 'onyx-more-list__elements',\n }\"\n ></slot>\n </component>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-more-list {\n @include layers.component() {\n display: flex;\n align-items: center;\n gap: var(--onyx-spacing-4xs);\n contain: inline-size;\n width: 100%;\n\n &__elements {\n display: inherit;\n align-items: inherit;\n gap: inherit;\n overflow-x: clip;\n }\n\n &__indicator {\n min-width: max-content;\n max-width: 100%;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconHome, iconMoreHorizontal } from \"@sit-onyx/icons\";\nimport { provide, useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { provideSkeletonContext } from \"../../composables/useSkeletonState.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport OnyxBreadcrumbItem from \"../OnyxBreadcrumbItem/OnyxBreadcrumbItem.vue\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxMoreList from \"../OnyxMoreList/OnyxMoreList.vue\";\nimport OnyxFlyoutMenu from \"../OnyxNavBar/modules/OnyxFlyoutMenu/OnyxFlyoutMenu.vue\";\nimport {\n BREADCRUMB_MORE_LIST_INJECTION_KEY,\n BREADCRUMB_MORE_LIST_TARGET_INJECTION_KEY,\n type OnyxBreadcrumbProps,\n} from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxBreadcrumbProps>(), {\n container: false,\n});\n\ndefineSlots<{\n /**\n * Breadcrumb items (see `OnyxBreadcrumbItem` component).\n */\n default(): unknown;\n}>();\n\nconst { t } = injectI18n();\nconst { densityClass } = useDensity(props);\n\nprovideSkeletonContext(props);\n\nprovide(BREADCRUMB_MORE_LIST_TARGET_INJECTION_KEY, useTemplateRef(\"moreListRef\"));\n</script>\n\n<template>\n <nav\n :class=\"[\n 'onyx-component',\n 'onyx-breadcrumb',\n densityClass,\n { 'onyx-breadcrumb--container': props.container },\n ]\"\n :aria-label=\"t('breadcrumb.label')\"\n :aria-hidden=\"props.skeleton\"\n >\n <ol class=\"onyx-breadcrumb__list onyx-grid-container\" role=\"menu\">\n <OnyxBreadcrumbItem\n class=\"onyx-breadcrumb__home\"\n :href=\"props.home?.link ?? '/'\"\n :aria-label=\"props.home?.label ?? t('breadcrumb.home')\"\n :skeleton=\"skeleton\"\n >\n <OnyxIcon v-if=\"!props.home?.label\" :icon=\"iconHome\" size=\"16px\" />\n <template v-else>{{ props.home.label }}</template>\n </OnyxBreadcrumbItem>\n\n <OnyxMoreList :injection-key=\"BREADCRUMB_MORE_LIST_INJECTION_KEY\" direction=\"ltr\">\n <template #default=\"{ attributes }\">\n <div v-bind=\"attributes\">\n <slot></slot>\n </div>\n </template>\n <template #more=\"{ attributes }\">\n <OnyxFlyoutMenu\n v-bind=\"attributes\"\n :label=\"t('navigation.moreNavItemsLabel')\"\n trigger=\"click\"\n >\n <template #button=\"{ trigger }\">\n <OnyxBreadcrumbItem\n v-bind=\"trigger\"\n :aria-label=\"t('navigation.showMoreNavItemsLabel')\"\n :title=\"t('navigation.showMoreNavItemsLabel')\"\n :icon=\"iconMoreHorizontal\"\n >\n <OnyxIcon :icon=\"iconMoreHorizontal\" size=\"16px\" />\n </OnyxBreadcrumbItem>\n </template>\n\n <template #options>\n <div ref=\"moreListRef\"></div>\n </template>\n </OnyxFlyoutMenu>\n </template>\n </OnyxMoreList>\n </ol>\n </nav>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-breadcrumb {\n @include layers.component() {\n &--container {\n border-bottom: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n background-color: var(--onyx-color-base-background-blank);\n\n .onyx-breadcrumb__list {\n padding: var(--onyx-density-xs) var(--onyx-grid-margin);\n }\n }\n\n &__list {\n list-style: none;\n padding: 0;\n font-family: var(--onyx-font-family);\n display: flex;\n align-items: center;\n gap: var(--onyx-density-xs);\n }\n\n &__home {\n .onyx-breadcrumb-item__skeleton {\n width: 1.5rem;\n }\n\n &::before {\n display: none;\n }\n }\n }\n}\n</style>\n","import type { DensityProp } from \"../../composables/density.js\";\nimport type { SkeletonInjected } from \"../../composables/useSkeletonState.js\";\nimport type { AutofocusProp } from \"../../types/index.js\";\nimport type { FormInjected } from \"../OnyxForm/OnyxForm.core.js\";\nimport type { WithLinkProp } from \"../OnyxRouterLink/types.js\";\n\nexport type OnyxButtonProps = DensityProp &\n AutofocusProp & {\n /**\n * The text content of the button.\n */\n label: string;\n /**\n * If the button should be disabled or not.\n */\n disabled?: FormInjected<boolean>;\n /**\n * Shows a loading indicator.\n */\n loading?: boolean;\n /**\n * The button type.\n */\n type?: ButtonType;\n /**\n * The color of the button.\n */\n color?: ButtonColor;\n /**\n * The style of the button.\n */\n mode?: ButtonMode;\n /**\n * An icon which will be displayed on the left side of the label.\n */\n icon?: string;\n /**\n * Position where the icon is placed.\n */\n iconPosition?: \"left\" | \"right\";\n /**\n * Whether to show a skeleton button.\n */\n skeleton?: SkeletonInjected;\n /**\n * If set, the button will be rendered as link.\n * Note that not all button properties are supported when used as link, e.g. `disabled`, `type` and `autofocus` are not supported.\n */\n link?: WithLinkProp[\"link\"];\n };\n\nexport const BUTTON_TYPES = [\"button\", \"submit\", \"reset\"] as const;\nexport type ButtonType = (typeof BUTTON_TYPES)[number];\n\nexport const BUTTON_COLORS = [\"primary\", \"neutral\", \"danger\"] as const;\nexport type ButtonColor = (typeof BUTTON_COLORS)[number];\n\nexport const BUTTON_MODES = [\"default\", \"outline\", \"plain\"] as const;\nexport type ButtonMode = (typeof BUTTON_MODES)[number];\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { extractLinkProps } from \"../../utils/router.js\";\nimport OnyxRouterLink from \"../OnyxRouterLink/OnyxRouterLink.vue\";\nimport type { OnyxCardProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxCardProps>(), {\n clickable: false,\n});\n\ndefineSlots<{\n /**\n * Card content.\n */\n default(): unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\n\nconst linkProps = computed(() =>\n props.link != undefined ? extractLinkProps(props.link) : undefined,\n);\n</script>\n\n<template>\n <component\n :is=\"linkProps ? OnyxRouterLink : props.clickable ? 'button' : 'div'\"\n v-bind=\"linkProps\"\n :class=\"['onyx-component', 'onyx-card', densityClass, 'onyx-truncation-multiline', 'onyx-text']\"\n >\n <slot></slot>\n </component>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-card {\n @include layers.component() {\n --onyx-card-padding: var(--onyx-density-md);\n --onyx-card-gap: var(--onyx-density-xs);\n\n display: flex;\n flex-direction: column;\n padding: var(--onyx-card-padding);\n gap: var(--onyx-card-gap);\n border-radius: var(--onyx-radius-md);\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n background-color: var(--onyx-color-base-background-blank);\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n max-width: 100%;\n\n &:is(button, a) {\n cursor: pointer;\n text-align: initial;\n\n &:focus-visible {\n border-color: var(--onyx-color-component-focus-primary);\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n }\n }\n }\n}\n</style>\n","import { computed, type Ref } from \"vue\";\n\nexport const RequiredMarkerTypes = [\"optional\", \"required\"] as const;\nexport type RequiredMarkerType = (typeof RequiredMarkerTypes)[number];\n\nexport type RequiredProp = {\n /**\n * Whether the a value for this form element is required.\n */\n required?: boolean;\n};\n\nexport const useRequired = (\n props: RequiredProp,\n requiredMarker: Readonly<Ref<RequiredMarkerType>>,\n) => ({\n /**\n * Class that configures which type of required marker is used.\n */\n requiredTypeClass: computed(() => ({\n [`onyx-use-${requiredMarker.value}`]: true,\n })),\n requiredMarkerClass: computed(() => ({\n \"onyx-required-marker\": props.required,\n \"onyx-optional-marker\": !props.required,\n })),\n});\n","/**\n * Checks whether the given value is a valid `Date` object.\n *\n * @example isValidDate(new Date()) // true\n * @example isValidDate(\"not-a-date\") // false\n */\nexport const isValidDate = (date: unknown): date is Date => {\n // isNaN supports Date objects so the type cast here is safe\n return date instanceof Date && !isNaN(date as unknown as number);\n};\n","type FlatObject = Record<string, string | boolean | number | null | undefined>;\n\n/**\n * Compares two flat objects (whose values are only primitives, no arrays or objects)\n * @returns whether all values match, ignoring in which order they appear\n */\nexport const areObjectsFlatEqual = (obj1: FlatObject, obj2: FlatObject): boolean => {\n const noUndefinedEntries1 = Object.entries(obj1).filter(([_, value]) => value !== undefined);\n const noUndefinedEntries2 = Object.entries(obj2).filter(([_, value]) => value !== undefined);\n\n // { } and { a: undefined } are equal, so we ignored all undefined properties to get a more reliable comparison\n if (noUndefinedEntries1.length !== noUndefinedEntries2.length) return false;\n\n return noUndefinedEntries1.every(([name, value]) => value === obj2[name]);\n};\n\nexport const groupByKey = <TValue extends { [key in TKey]?: string }, TKey extends keyof TValue>(\n objects: TValue[],\n key: TKey,\n) => {\n return objects.reduce(\n (acc, currOpt) => {\n const groupName = currOpt[key] ?? \"\";\n acc[groupName] = acc[groupName] || [];\n acc[groupName].push(currOpt);\n return acc;\n },\n {} as Record<string, TValue[]>,\n );\n};\n\nexport const transformGroupedData = <\n TValue extends { [key in TKey]?: string },\n TKey extends keyof TValue,\n>(\n data: Record<string, TValue[]>,\n firstGroup?: string,\n) => {\n const entries = Object.entries(data);\n\n if (firstGroup) {\n entries.sort(([a], [b]) => {\n if (a === firstGroup) return -1;\n if (b === firstGroup) return 1;\n return 0;\n });\n }\n\n return entries.map(([groupName, items]) => ({\n name: groupName,\n items,\n }));\n};\n\n/**\n * Works like `Object.entries`, but considers all own keys of an object (including symbols).\n * @example\n * ```ts\n * allObjectEntries({ [Symbol()]: \"a\", \"someKey\": \"b\" }) // => [[Symbol(), \"a\"], [\"someKey\", \"b\"]]\n * ```\n */\nexport const allObjectEntries = <TValue extends Record<PropertyKey, unknown>>(target: TValue) =>\n Reflect.ownKeys(target).map((key) => [key, target[key]] as [keyof TValue, TValue[keyof TValue]]);\n\n/**\n * Wraps a value as an array, if it's not already an array.\n * @param value - the value to convert\n * @param keepNullish - if true, nullish values (undefined & null) will be preserved in the resulting array\n */\nexport const asArray = <T>(value: T | T[], keepNullish = false): T[] => {\n if (!keepNullish && value == undefined) {\n return [];\n }\n if (Array.isArray(value)) {\n return value;\n }\n return [value];\n};\n","// since the types are getters of the ValidityState we need to get the keys using \"Object.getOwnPropertyDescriptors\"\nconst getValidityStateProperties = () =>\n Object.entries(Object.getOwnPropertyDescriptors(ValidityState.prototype))\n .filter(([_, value]) => value.enumerable)\n .map(([key]) => key) as (keyof ValidityState)[];\n\n/**\n * The standard HTML ValidityState is an object with getter properties.\n * This makes it hard to compare changes. This function iterates through all\n * getters and transforms them to properties of a new plain object.\n */\nexport const transformValidityStateToObject = (\n validityState: ValidityState,\n): Record<keyof ValidityState, boolean> => {\n return getValidityStateProperties().reduce(\n (validityStateCopy, key) => {\n validityStateCopy[key] = validityState[key];\n return validityStateCopy;\n },\n {} as Record<keyof ValidityState, boolean>,\n );\n};\n\n/**\n * Extracts the first invalid validity type from the given HTML ValidityState.\n * \"valueMissing\" is prioritized over other types to align with the default browser behavior.\n */\nexport const getFirstInvalidType = (validity: ValidityState) => {\n // prefer valueMissing to align with the default browser behavior\n if (validity.valueMissing) return \"valueMissing\";\n\n const availableValidityTypes = getValidityStateProperties()\n .filter((key): key is Exclude<keyof ValidityState, \"valid\"> => key !== \"valid\")\n .sort();\n\n // get first invalid type\n for (const type of availableValidityTypes) {\n if (type in validity && validity[type]) return type;\n }\n};\n","import { computed, ref, toValue, watch, type Directive, type MaybeRefOrGetter } from \"vue\";\nimport type { DateValue, OnyxDatePickerProps } from \"../components/OnyxDatePicker/types.js\";\nimport type { InputType } from \"../components/OnyxInput/types.js\";\nimport { injectI18n } from \"../i18n/index.js\";\nimport enUS from \"../i18n/locales/en-US.json\";\nimport { isValidDate } from \"../utils/date.js\";\nimport { areObjectsFlatEqual } from \"../utils/objects.js\";\nimport { getFirstInvalidType, transformValidityStateToObject } from \"../utils/validity.js\";\nimport type { MaxLength } from \"./useLenientMaxLengthValidation.js\";\n\nexport type CustomMessageType = string | FormMessages;\n\nexport type CustomValidityProp = {\n /**\n * Custom error message to show. Takes precedence over intrinsic error messages.\n */\n error?: CustomMessageType;\n};\n\nexport type UseCustomValidityOptions = {\n /**\n * Explicitly set custom error. Any non-nullish value will set the input to be invalid.\n * If both, `options.customError` and `options.props.error` are provided, the message from the props will take precedence.\n */\n error?: MaybeRefOrGetter<CustomMessageType | undefined>;\n /**\n * Component props as defined with `const props = defineProps()`.\n * These prop values are used for the error messages of the native validation errors.\n */\n props: {\n error?: CustomMessageType;\n modelValue?: unknown;\n type?: InputType | OnyxDatePickerProps[\"type\"];\n maxlength?: MaxLength;\n minlength?: number;\n min?: DateValue;\n max?: DateValue;\n validStepSize?: number;\n };\n /**\n * Component emit as defined with `const emit = defineEmits()`\n */\n emit: (evt: \"validityChange\", validity: ValidityState) => void;\n};\n\nexport type InputValidationElement = Pick<HTMLInputElement, \"validity\" | \"setCustomValidity\">;\n\n/**\n * Input types that have a translation for their validation error message.\n */\nexport const TRANSLATED_INPUT_TYPES = Object.keys(\n enUS.validations.typeMismatch,\n) as (keyof typeof enUS.validations.typeMismatch)[];\nexport type TranslatedInputType = (typeof TRANSLATED_INPUT_TYPES)[number];\n\n/**\n * Translated messages that inform about the state of a form element.\n */\nexport type FormMessages = {\n /**\n * A short message preview to inform the user about the input state.\n * It's usually shown directly underneath the input field.\n */\n shortMessage: string;\n /**\n * An extended informative message to provide more details.\n * It's usually shown in a tooltip next to the shortMessage.\n */\n longMessage?: string;\n /**\n * Will visually hide the message.\n */\n hidden?: boolean;\n};\n\n/**\n * Transforms a customMessage into the format needed to display an error preview and extended message\n */\nexport const getFormMessages = (customMessage?: CustomMessageType): FormMessages | undefined => {\n if (!customMessage) return;\n if (typeof customMessage === \"string\") {\n // we can't guarantee a custom message will be short,\n // so in case it overflows, by adding it to \"longMessage\",\n // it will still be visible in a tooltip\n return { shortMessage: customMessage, longMessage: customMessage, hidden: false };\n }\n return customMessage;\n};\n\n/**\n * Returns a string combining short + long message or just the customMessage if it was provided as single string.\n * Will be used e.g. for customInvalidity and showing a tooltip e.g. in RadioButtons\n */\nexport const getFormMessageText = (error?: CustomMessageType): string | undefined => {\n if (!error) return;\n if (typeof error === \"string\") {\n return error;\n }\n if (error.shortMessage === error.longMessage) {\n return error.shortMessage;\n }\n const { shortMessage, longMessage } = error;\n return `${shortMessage}: ${longMessage}`;\n};\n\n/**\n * Composable for unified handling of custom messages for form components.\n * Will call `setCustomValidity()` accordingly and emit the \"validityChange\" event\n * whenever the input value / error changes.\n *\n * @example\n * ```html\n * <script lang=\"ts\" setup>\n * const props = defineProps<CustomValidityProp>();\n * const emit = defineEmits<{ validityChange: [validity: ValidityState] }>();\n *\n * const { vCustomValidity } = useCustomValidity({ props, emit });\n * </script>\n *\n * <template>\n * <input v-custom-validity />\n * </template>\n * ```\n */\nexport const useCustomValidity = (options: UseCustomValidityOptions) => {\n const { t, locale } = injectI18n();\n\n const validityState = ref<Record<keyof ValidityState, boolean>>();\n const isDirty = ref(false);\n\n const error = computed(() => options.props.error || toValue(options.error));\n\n /**\n * Sync isDirty state. The component is \"dirty\" when the value was modified at least once.\n */\n watch(\n () => options.props.modelValue,\n () => (isDirty.value = true),\n { once: true },\n );\n\n const vCustomValidity = {\n mounted: (el) => {\n watch(\n // we need to watch all props instead of only modelValue so the validity is re-checked\n // when the validation rules change\n [() => options.props, error],\n () => {\n // Sync custom error with the native input validity.\n el.setCustomValidity(getFormMessageText(error.value) ?? \"\");\n const newValidityState = transformValidityStateToObject(el.validity);\n\n // do not emit update if input is valid and has never been invalid\n if (!validityState.value && newValidityState.valid) return;\n\n // ignore if actual validity state value is unchanged\n if (validityState.value && areObjectsFlatEqual(newValidityState, validityState.value)) {\n return;\n }\n\n validityState.value = newValidityState;\n },\n // We use \"post\" flush timing, to ensure the DOM is up-to-date and the elements validity state is in sync.\n { immediate: true, deep: true, flush: \"post\" },\n );\n\n /**\n * Update validityState ref when the input changes.\n */\n watch(\n [error, validityState, isDirty],\n () => {\n // do not emit validityChange event if the value was never changed\n if (!isDirty.value || !validityState.value) return;\n\n options.emit(\"validityChange\", validityState.value);\n },\n { immediate: true },\n );\n },\n } satisfies Directive<InputValidationElement, undefined>;\n\n const errorMessages = computed<FormMessages | undefined>(() => {\n if (!validityState.value || validityState.value.valid) return;\n\n const errorType = getFirstInvalidType(validityState.value);\n const errors = getFormMessages(error.value);\n // a custom error message always is considered first\n if (errors || errorType === \"customError\") {\n if (!errors) return;\n return errors;\n }\n if (!errorType) return;\n\n const maxlength =\n typeof options.props.maxlength === \"object\"\n ? options.props.maxlength.max\n : options.props.maxlength;\n\n const validationData = {\n value: options.props.modelValue?.toString(),\n n: options.props.modelValue?.toString().length ?? 0,\n minLength: options.props.minlength,\n maxLength: maxlength,\n min: formatMinMax(locale.value, options.props.type, options.props.min),\n max: formatMinMax(locale.value, options.props.type, options.props.max),\n step: options.props.validStepSize,\n };\n\n // if the error is \"typeMismatch\", we will use an error message depending on the type property\n if (errorType === \"typeMismatch\") {\n const type = TRANSLATED_INPUT_TYPES.includes(options.props.type as TranslatedInputType)\n ? (options.props.type as TranslatedInputType)\n : \"generic\";\n return {\n longMessage: t.value(`validations.typeMismatch.${type}.fullError`, validationData),\n shortMessage: t.value(`validations.typeMismatch.${type}.preview`, validationData),\n };\n }\n\n return {\n longMessage: t.value(`validations.${errorType}.fullError`, validationData),\n shortMessage: t.value(`validations.${errorType}.preview`, validationData),\n };\n });\n\n return {\n /**\n * Directive to set the custom error message and emit validityChange event.\n */\n vCustomValidity,\n /**\n * A custom error or the default translation of the first invalid state if one exists.\n */\n errorMessages,\n };\n};\n\nconst formatMinMax = (\n locale: string,\n type: UseCustomValidityOptions[\"props\"][\"type\"],\n value?: DateValue,\n): string | undefined => {\n if (!type || ![\"date\", \"datetime-local\"].includes(type)) return value?.toString();\n\n const date = value != undefined ? new Date(value) : undefined;\n if (!isValidDate(date)) return value?.toString();\n\n const format: Intl.DateTimeFormatOptions = {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n ...(type === \"datetime-local\" ? { hour: \"2-digit\", minute: \"2-digit\" } : undefined),\n };\n\n return date.toLocaleString(locale, format);\n};\n","<script lang=\"ts\" setup>\nimport { createToggletip, createTooltip, useGlobalEventListener } from \"@sit-onyx/headless\";\nimport {\n computed,\n nextTick,\n onMounted,\n shallowRef,\n toValue,\n useId,\n useTemplateRef,\n watch,\n type AriaAttributes,\n type MaybeRefOrGetter,\n type Ref,\n type VNode,\n} from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useAnchorPositionPolyfill } from \"../../composables/useAnchorPositionPolyfill.js\";\nimport { useOpenAlignment } from \"../../composables/useOpenAlignment.js\";\nimport { useOpenDirection } from \"../../composables/useOpenDirection.js\";\nimport { useResizeObserver } from \"../../composables/useResizeObserver.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport type { Nullable } from \"../../types/utils.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport type { OnyxTooltipProps } from \"./types.js\";\n\ntype CreateToggletipOptions = {\n toggleLabel: MaybeRefOrGetter<string>;\n isVisible?: Ref<boolean>;\n};\n\ntype CreateTooltipOptions = {\n /**\n * Number of milliseconds to use as debounce when showing/hiding the tooltip.\n */\n debounce: MaybeRefOrGetter<number>;\n isVisible?: Ref<boolean>;\n};\n\nconst props = withDefaults(defineProps<OnyxTooltipProps>(), {\n color: \"neutral\",\n position: \"auto\",\n fitParent: false,\n trigger: \"hover\",\n alignment: \"auto\",\n alignsWithEdge: false,\n open: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the open state of the tooltip changes.\n */\n \"update:open\": [open: Nullable<boolean>];\n}>();\n\ndefineSlots<{\n /**\n * Default slot where the parent content is placed that controls the open/close state of the tooltip.\n *\n * **Accessibility**: You must ensure that the trigger attributes are bound to a button when the `open` prop is not `hover`!\n */\n\n //TODO: fix the attribute type\n default(params: { trigger: AriaAttributes }): VNode;\n /**\n * Optional slot to place custom content for the tooltip text.\n *\n * **Accessibility**: You must ensure that the tooltip content is NOT focusable/interactive.\n */\n tooltip?(): unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\nconst { t } = injectI18n();\n\nconst isVisible = useVModel({\n props,\n emit,\n key: \"open\",\n default: false,\n});\n\nconst tooltipOptions = computed<CreateTooltipOptions>(() => ({\n debounce: 200,\n ...((typeof props.trigger === \"object\" && props.trigger.type === \"hover\" && props.trigger) || {}),\n isVisible,\n}));\n\nconst toggletipOptions = computed<CreateToggletipOptions>(() => ({\n toggleLabel: t.value(`tooltip.${props.color}`),\n ...((typeof props.trigger === \"object\" && props.trigger.type === \"click\" && props.trigger) || {}),\n isVisible,\n}));\n\nconst triggerType = computed(() => {\n if (typeof props.trigger === \"object\") return props.trigger.type;\n return props.trigger;\n});\nconst toolTipPosition = computed(() =>\n props.position === \"auto\" ? openDirection.value : props.position,\n);\nconst alignment = computed(() =>\n props.alignment === \"auto\" ? openAlignment.value : props.alignment,\n);\n\nconst positionAndAlignment = computed(() => {\n let returnPosition = toolTipPosition.value;\n if (\n (toolTipPosition.value === \"top\" || toolTipPosition.value === \"bottom\") &&\n alignsWithEdge.value\n ) {\n if (alignment.value === \"left\") {\n returnPosition = toolTipPosition.value + \" \" + \"x-start\";\n }\n if (alignment.value === \"right\") {\n returnPosition = toolTipPosition.value + \" \" + \"x-end\";\n }\n }\n return returnPosition;\n});\n\nconst createPattern = () =>\n triggerType.value === \"hover\"\n ? createTooltip(tooltipOptions.value)\n : createToggletip(toggletipOptions.value);\n\nconst ariaPattern = shallowRef(createPattern());\nwatch(triggerType, () => (ariaPattern.value = createPattern()));\n\nconst tooltip = computed(() => ariaPattern.value?.elements.tooltip);\nconst triggerElementProps = computed(() => toValue<object>(ariaPattern.value?.elements.trigger));\nconst alignsWithEdge = computed(() => props.alignsWithEdge);\nconst fitParent = computed(() => props.fitParent);\n\nconst tooltipWrapperRef = useTemplateRef(\"tooltipWrapperRefEl\");\nconst tooltipRef = useTemplateRef(\"tooltipRefEl\");\nconst { openDirection, updateOpenDirection } = useOpenDirection(tooltipWrapperRef, \"top\");\nconst { openAlignment, updateOpenAlignment } = useOpenAlignment(tooltipWrapperRef, tooltipRef);\nconst { leftPosition, topPosition, updateAnchorPositionPolyfill, useragentSupportsAnchorApi } =\n useAnchorPositionPolyfill({\n positionedRef: tooltipRef,\n targetRef: tooltipWrapperRef,\n positionArea: toolTipPosition,\n alignment: alignment,\n alignsWithEdge: alignsWithEdge,\n fitParent: fitParent,\n });\n\n// update open direction on resize to ensure the tooltip is always visible\nconst updateDirections = () => {\n updateOpenDirection();\n updateOpenAlignment();\n};\n\nuseGlobalEventListener({\n type: \"resize\",\n listener: () => updateDirections(),\n});\n\nconst handleOpening = (open: boolean) => {\n if (open) {\n tooltipRef.value?.showPopover?.();\n } else {\n tooltipRef.value?.hidePopover?.();\n }\n};\n\n// classes for the tooltip | computed to prevent bugs\nconst tooltipClasses = computed(() => {\n return {\n \"onyx-tooltip--danger\": props.color === \"danger\",\n \"onyx-tooltip--success\": props.color === \"success\",\n \"onyx-tooltip--fit-parent\": props.fitParent,\n \"onyx-tooltip--aligns-with-edge\": alignsWithEdge.value,\n \"onyx-tooltip--hidden\": !isVisible.value,\n [`onyx-tooltip--position-${toolTipPosition.value.replace(\" \", \"-\")}`]: true,\n [`onyx-tooltip--alignment-${alignment.value}`]: true,\n \"onyx-tooltip--dont-support-anchor\": !useragentSupportsAnchorApi.value,\n \"onyx-tooltip--without-wedge\": props.withoutWedge,\n };\n});\n\nconst { width } = useResizeObserver(tooltipWrapperRef);\nconst tooltipWidth = computed(() =>\n props.fitParent && tooltipWrapperRef.value ? `${width.value}px` : \"max-content\",\n);\n\n// initial update\nonMounted(() => {\n handleOpening(isVisible.value);\n updateDirections();\n if (!useragentSupportsAnchorApi.value) updateAnchorPositionPolyfill();\n});\n// update open direction when visibility changes to ensure the tooltip is always visible\nwatch(isVisible, async (newVal) => {\n await nextTick();\n handleOpening(newVal);\n updateDirections();\n if (!useragentSupportsAnchorApi.value) updateAnchorPositionPolyfill();\n});\nwatch([tooltipWidth, toolTipPosition, alignment, alignsWithEdge], async () => {\n if (!useragentSupportsAnchorApi.value) {\n await nextTick();\n updateAnchorPositionPolyfill();\n }\n});\n\nconst id = useId();\nconst anchorName = computed(() => `--anchor-${id}`);\n\nconst tooltipStyles = computed(() => {\n if (useragentSupportsAnchorApi.value) {\n return {\n width: tooltipWidth.value,\n \"position-anchor\": anchorName.value,\n \"position-area\": positionAndAlignment.value,\n };\n }\n\n // fallback styles if browser does not support the Anchor API yet\n return {\n width: tooltipWidth.value,\n left: leftPosition.value,\n top: topPosition.value,\n };\n});\n</script>\n\n<template>\n <div\n ref=\"tooltipWrapperRefEl\"\n :class=\"['onyx-component', 'onyx-tooltip-wrapper', densityClass]\"\n :style=\"`anchor-name: ${anchorName}`\"\n >\n <!-- we are using inline \"style\" here since using v-bind causes hydration errors in Nuxt / SSR -->\n <div\n ref=\"tooltipRefEl\"\n v-bind=\"tooltip\"\n :class=\"['onyx-tooltip', 'onyx-text--small', 'onyx-truncation-multiline', tooltipClasses]\"\n :style=\"tooltipStyles\"\n >\n <div class=\"onyx-tooltip--content\">\n <OnyxIcon v-if=\"props.icon\" :icon=\"props.icon\" size=\"16px\" />\n <slot name=\"tooltip\">{{ props.text }}</slot>\n </div>\n </div>\n\n <slot :trigger=\"triggerElementProps\"></slot>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n$wedge-size: 0.5rem;\n\n.onyx-tooltip {\n @include layers.component() {\n position: fixed;\n min-width: var(--onyx-spacing-3xl);\n width: max-content;\n max-width: 19rem;\n height: max-content;\n overflow: hidden;\n padding: 0;\n\n --background-color: var(--onyx-color-base-neutral-900);\n --color: var(--onyx-color-text-icons-neutral-inverted);\n\n &--danger {\n --background-color: var(--onyx-color-base-danger-200);\n --color: var(--onyx-color-text-icons-danger-bold);\n }\n\n &--success {\n --background-color: var(--onyx-color-base-success-200);\n --color: var(--onyx-color-text-icons-success-bold);\n }\n\n &:popover-open {\n border: none;\n outline: none;\n background: none;\n }\n &--content {\n position: relative;\n\n border-radius: var(--onyx-radius-sm);\n padding: var(--onyx-density-2xs) var(--onyx-density-sm);\n\n display: flex;\n justify-content: center;\n align-items: center;\n gap: var(--onyx-density-2xs);\n margin: 0 0 $wedge-size 0;\n\n background-color: var(--background-color);\n color: var(--color);\n font-family: var(--onyx-font-family);\n text-align: center;\n white-space: pre-line;\n\n &::after {\n content: \" \";\n position: absolute;\n /* At the bottom of the tooltip */\n top: 100%;\n left: 50%;\n width: 2 * $wedge-size;\n height: 2 * $wedge-size;\n margin-left: -$wedge-size;\n border-width: $wedge-size;\n border-style: solid;\n border-color: var(--background-color) transparent transparent;\n white-space: normal;\n }\n }\n &--position-bottom {\n .onyx-tooltip--content {\n margin: $wedge-size 0 0 0;\n\n &::after {\n top: -2 * $wedge-size;\n border-color: transparent transparent var(--background-color);\n }\n }\n }\n\n &--position-left {\n .onyx-tooltip--content {\n margin: 0 $wedge-size 0 0;\n\n &::after {\n right: 0;\n left: 100%;\n transform: translateX($wedge-size);\n top: 50%;\n margin-top: -$wedge-size;\n border-color: transparent transparent transparent var(--background-color);\n }\n }\n }\n\n &--position-right {\n .onyx-tooltip--content {\n margin: 0 0 0 $wedge-size;\n\n &::after {\n left: 0;\n right: 100%;\n transform: translateX(-$wedge-size);\n\n top: 50%;\n margin-top: -$wedge-size;\n border-color: transparent var(--background-color) transparent transparent;\n }\n }\n }\n &--without-wedge,\n &--position-top-left,\n &--position-top-right,\n &--position-bottom-left,\n &--position-bottom-right {\n .onyx-tooltip--content {\n &::after {\n display: none;\n }\n }\n }\n &--position-top-left .onyx-tooltip--content {\n margin: 0 $wedge-size $wedge-size 0;\n }\n &--position-top-right .onyx-tooltip--content {\n margin: 0 0 $wedge-size $wedge-size;\n }\n &--position-bottom-left .onyx-tooltip--content {\n margin: $wedge-size $wedge-size 0 0;\n }\n &--position-bottom-right .onyx-tooltip--content {\n margin: $wedge-size 0 0 $wedge-size;\n }\n &--alignment-left {\n // only apply for top and bottom positions\n &.onyx-tooltip--position-top,\n &.onyx-tooltip--position-bottom {\n transform: translateX(calc(50% - 2 * $wedge-size));\n &.onyx-tooltip--aligns-with-edge {\n transform: translateX(100%);\n &.onyx-tooltip--dont-support-anchor {\n transform: none;\n }\n }\n .onyx-tooltip--content {\n &::after {\n left: 2 * $wedge-size;\n }\n }\n }\n }\n &--alignment-right {\n // only apply for top and bottom positions\n &.onyx-tooltip--position-top,\n &.onyx-tooltip--position-bottom {\n transform: translateX(calc(-50% + 2 * $wedge-size));\n\n &.onyx-tooltip--aligns-with-edge {\n transform: translateX(-100%);\n &.onyx-tooltip--dont-support-anchor {\n transform: none;\n }\n }\n .onyx-tooltip--content {\n &::after {\n left: calc(100% - 2 * $wedge-size);\n }\n }\n }\n }\n }\n}\n\n.onyx-tooltip-wrapper {\n @include layers.component() {\n position: relative;\n width: max-content;\n place-content: center;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, useTemplateRef } from \"vue\";\nimport { type FormMessages, getFormMessageText } from \"../../composables/useCustomValidity.js\";\nimport OnyxTooltip from \"../OnyxTooltip/OnyxTooltip.vue\";\n\nconst props = defineProps<{\n /**\n * The given component will be shown inside a tooltip when\n * errorMessages are provided. Without errorMessages, the\n * component will not be rendered inside a slot.\n */\n errorMessages?: FormMessages;\n /**\n * We don't show an error if the content is not interactive\n */\n disabled?: boolean;\n}>();\n\ndefineSlots<{\n /**\n * Any component. Will be wrapped in an OnyxTooltip showing\n * an error message if an error message is set.\n */\n default(): unknown;\n}>();\n\nconst tooltipError = computed(() => getFormMessageText(props.errorMessages));\n\nconst target = useTemplateRef(\"targetRef\");\n</script>\n\n<template>\n <div class=\"onyx-component\">\n <!-- component will be placed in here if no tooltip should be rendered -->\n <div v-if=\"!tooltipError || props.disabled\" ref=\"targetRef\"></div>\n\n <!-- component will be placed inside the tooltip if it gets rendered -->\n <OnyxTooltip\n v-if=\"tooltipError && !props.disabled\"\n class=\"onyx-error-tooltip\"\n trigger=\"hover\"\n :text=\"tooltipError\"\n color=\"danger\"\n >\n <template #default=\"{ trigger }\">\n <div ref=\"targetRef\" v-bind=\"trigger\"></div>\n </template>\n </OnyxTooltip>\n\n <!--\n sends the given component to the desired target without destroying the component\n the \"v-if\" is needed to support server side rendering\n -->\n <Teleport v-if=\"target\" :to=\"target\" defer>\n <slot></slot>\n </Teleport>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-error-tooltip {\n @include layers.component() {\n max-width: 100%;\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TValue extends SelectOptionValue = SelectOptionValue\">\nimport { computed, useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useRequired } from \"../../composables/required.js\";\nimport { useAutofocus } from \"../../composables/useAutoFocus.js\";\nimport { useCustomValidity } from \"../../composables/useCustomValidity.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport type { SelectOptionValue } from \"../../types/index.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport OnyxErrorTooltip from \"../OnyxErrorTooltip/OnyxErrorTooltip.vue\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxLoadingIndicator from \"../OnyxLoadingIndicator/OnyxLoadingIndicator.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxCheckboxProps } from \"./types.js\";\n\ntype Props = OnyxCheckboxProps<TValue>;\n\nconst props = withDefaults(defineProps<Props>(), {\n indeterminate: false,\n disabled: FORM_INJECTED_SYMBOL,\n loading: false,\n required: false,\n requiredMarker: FORM_INJECTED_SYMBOL,\n skeleton: SKELETON_INJECTED_SYMBOL,\n truncation: \"ellipsis\",\n modelValue: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the validity state of the input changes.\n */\n validityChange: [validity: ValidityState];\n /** Emitted when the checked state changes. */\n \"update:modelValue\": [value: boolean];\n}>();\n\ndefineOptions({ inheritAttrs: false });\nconst { rootAttrs, restAttrs } = useRootAttrs();\n\nconst isChecked = useVModel<Props, \"modelValue\", boolean>({\n props,\n emit,\n key: \"modelValue\",\n default: false,\n});\n\nconst { vCustomValidity, errorMessages } = useCustomValidity({ props, emit });\nconst { densityClass } = useDensity(props);\nconst { disabled, requiredMarker } = useFormContext(props);\nconst skeleton = useSkeletonContext(props);\nconst { requiredMarkerClass, requiredTypeClass } = useRequired(props, requiredMarker);\n\nconst title = computed(() => {\n return props.hideLabel ? props.label : undefined;\n});\n\nconst input = useTemplateRef(\"inputRef\");\ndefineExpose({ input });\nuseAutofocus(input, props);\n</script>\n\n<template>\n <div\n v-if=\"skeleton\"\n :class=\"['onyx-component', 'onyx-checkbox-skeleton', densityClass]\"\n v-bind=\"rootAttrs\"\n >\n <OnyxSkeleton class=\"onyx-checkbox-skeleton__input\" />\n <OnyxSkeleton v-if=\"!props.hideLabel\" class=\"onyx-checkbox-skeleton__label\" />\n </div>\n\n <OnyxErrorTooltip v-else :disabled=\"disabled\" :error-messages=\"errorMessages\" v-bind=\"rootAttrs\">\n <label\n class=\"onyx-component onyx-checkbox\"\n :class=\"[requiredTypeClass, densityClass]\"\n :title=\"title\"\n >\n <div class=\"onyx-checkbox__container\">\n <OnyxLoadingIndicator v-if=\"props.loading\" class=\"onyx-checkbox__loading\" type=\"circle\" />\n <input\n v-else\n ref=\"inputRef\"\n v-model=\"isChecked\"\n v-custom-validity\n :aria-label=\"props.hideLabel ? props.label : undefined\"\n class=\"onyx-checkbox__input\"\n type=\"checkbox\"\n :indeterminate=\"props.indeterminate\"\n :disabled=\"disabled\"\n :required=\"props.required\"\n :value=\"props.value\"\n :autofocus=\"props.autofocus\"\n v-bind=\"restAttrs\"\n />\n </div>\n\n <template v-if=\"!props.hideLabel\">\n <p\n class=\"onyx-checkbox__label\"\n :class=\"[\n `onyx-truncation-${props.truncation}`,\n // shows the required marker inline for multiline labels\n props.truncation === 'multiline' ? requiredMarkerClass : undefined,\n ]\"\n >\n {{ props.label }}\n </p>\n <!-- shows the required marker fixed on the right for truncated labels -->\n <div\n v-if=\"props.truncation === 'ellipsis'\"\n class=\"onyx-checkbox__marker\"\n :class=\"[requiredMarkerClass]\"\n ></div>\n </template>\n </label>\n </OnyxErrorTooltip>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n@use \"../../styles/mixins/checkbox.scss\";\n\n@mixin define-hover-border($state, $color) {\n .onyx-checkbox__input#{$state} {\n border-color: var(--onyx-color-component-border-#{$color});\n }\n}\n\n@mixin define-focus-ring($state, $color) {\n .onyx-checkbox__container:has(.onyx-checkbox__input#{$state}) {\n background-color: var(--onyx-color-base-#{$color}-200);\n }\n}\n\n.onyx-checkbox {\n @include checkbox.variables();\n\n @include layers.component() {\n --onyx-checkbox-label-padding-vertical: var(--onyx-density-xs);\n\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n display: inline-flex;\n align-items: flex-start;\n cursor: pointer;\n width: max-content;\n max-width: 100%;\n\n &:has(&__label) {\n padding-right: var(--onyx-checkbox-label-padding-vertical);\n }\n\n &:hover {\n @include define-hover-border($state: \":enabled\", $color: primary-hover);\n @include define-hover-border($state: \":user-invalid\", $color: danger-hover);\n }\n\n &:has(&__input:focus-visible) {\n @include define-focus-ring($state: \":enabled\", $color: primary);\n @include define-hover-border($state: \":enabled\", $color: primary);\n\n @include define-focus-ring($state: \":user-invalid\", $color: danger);\n @include define-hover-border($state: \":user-invalid\", $color: danger);\n }\n\n &:has(&__input:disabled) {\n cursor: default;\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n\n &:has(&__loading) {\n cursor: default;\n }\n\n &__container {\n display: inline-flex;\n align-items: flex-start;\n padding: var(--onyx-checkbox-input-padding);\n border-radius: var(--onyx-radius-full);\n }\n\n &__label {\n display: inline-block;\n padding: var(--onyx-checkbox-label-padding-vertical) 0;\n }\n\n &__input {\n @include checkbox.styles();\n }\n\n &__label,\n &__marker {\n padding: var(--onyx-checkbox-label-padding-vertical) 0;\n font-size: var(--onyx-font-size-md);\n line-height: var(--onyx-font-line-height-md);\n }\n\n &__loading {\n color: var(--onyx-color-text-icons-primary-intense);\n max-width: var(--onyx-checkbox-input-size);\n height: var(--onyx-checkbox-input-size);\n }\n }\n}\n\n.onyx-checkbox-skeleton {\n @include checkbox.variables();\n\n @include layers.component() {\n display: flex;\n align-items: flex-start;\n gap: var(--onyx-checkbox-input-padding);\n padding: var(--onyx-checkbox-input-padding);\n width: max-content;\n\n &__input {\n height: var(--onyx-checkbox-input-size);\n width: var(--onyx-checkbox-input-size);\n }\n\n &__label {\n height: var(--onyx-spacing-md);\n width: var(--onyx-spacing-3xl);\n }\n }\n}\n</style>\n","import { computed, type Ref } from \"vue\";\nimport type { OnyxCheckboxProps } from \"../components/OnyxCheckbox/types.js\";\nimport type { SelectOptionValue } from \"../types/index.js\";\n\nconst useSelectAllCheckboxState = <TValue extends SelectOptionValue = SelectOptionValue>(\n enabledOptionValues: Ref<TValue[]>,\n modelValue: Ref<TValue[]>,\n) =>\n computed(() => {\n const currentValues = modelValue.value.filter((value) =>\n enabledOptionValues.value.includes(value),\n );\n const isActive = currentValues.length === enabledOptionValues.value.length;\n\n return {\n modelValue: isActive,\n indeterminate:\n !isActive && enabledOptionValues.value.length && currentValues.length ? true : undefined,\n } satisfies Partial<OnyxCheckboxProps>;\n });\n\nexport const useCheckAll = <TValue extends SelectOptionValue = SelectOptionValue>(\n enabledOptionValues: Ref<TValue[]>,\n modelValue: Ref<TValue[]>,\n onChangeCallback: (newValue: TValue[]) => void,\n) => {\n return {\n /**\n * Current \"select all\" checkbox state.\n * - checked if all options are checked\n * - indeterminate if at least one but not all options are checked\n * - unchecked if no options are checked\n */\n state: useSelectAllCheckboxState(enabledOptionValues, modelValue),\n /**\n * Provides an update for the checkbox list with\n * - all option values if \"select all\" was checked\n * - an empty list if \"select all\" was unchecked\n * Does not touch the state of disabled checkboxes\n */\n handleChange: (isChecked: boolean) => {\n // options that are currently in modelValue but not \"enabled\" shall not be touched\n const checkedDisabledOptions = modelValue.value.filter(\n (checkedValue) => !enabledOptionValues.value.includes(checkedValue),\n );\n const newValue = isChecked\n ? checkedDisabledOptions.concat(enabledOptionValues.value)\n : checkedDisabledOptions;\n onChangeCallback(newValue);\n },\n };\n};\n","<script lang=\"ts\" setup>\nimport { iconCircleInformation } from \"@sit-onyx/icons\";\nimport { computed } from \"vue\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport type { Nullable } from \"../../types/utils.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxSystemButton from \"../OnyxSystemButton/OnyxSystemButton.vue\";\nimport OnyxTooltip from \"../OnyxTooltip/OnyxTooltip.vue\";\nimport OnyxVisuallyHidden from \"../OnyxVisuallyHidden/OnyxVisuallyHidden.vue\";\nimport type { OnyxInfoTooltipProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxInfoTooltipProps>(), {\n trigger: \"click\",\n color: \"neutral\",\n open: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the open state of the tooltip changes.\n */\n \"update:open\": [open: Nullable<boolean>];\n}>();\n\nconst isVisible = useVModel({\n props,\n emit,\n key: \"open\",\n});\n\nconst triggerType = computed(() => {\n if (typeof props.trigger === \"object\") return props.trigger.type;\n return props.trigger;\n});\n</script>\n\n<template>\n <span class=\"onyx-component onyx-info-tooltip\">\n <OnyxTooltip v-if=\"triggerType === 'click'\" v-bind=\"props\" v-model:open=\"isVisible\">\n <template #default=\"{ trigger: _trigger }\">\n <!-- -->\n <OnyxSystemButton\n :label=\"\n // if type is `click` aria-label will always be defined\n _trigger['aria-label']!\n \"\n :icon=\"iconCircleInformation\"\n class=\"onyx-info-tooltip__trigger\"\n color=\"soft\"\n v-bind=\"_trigger\"\n />\n </template>\n </OnyxTooltip>\n\n <!-- The info tooltip is not accessible when it's triggered on hover. Its trigger element ist not focusable, so instead we provide it's text visually hidden -->\n <template v-else>\n <OnyxTooltip v-bind=\"props\" v-model:open=\"isVisible\" aria-hidden=\"true\">\n <template #default=\"{ trigger: _trigger }\">\n <span class=\"onyx-info-tooltip__trigger\" v-bind=\"_trigger\">\n <OnyxIcon :icon=\"iconCircleInformation\" />\n </span>\n </template>\n </OnyxTooltip>\n <OnyxVisuallyHidden>{{ props.text }}</OnyxVisuallyHidden>\n </template>\n </span>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-info-tooltip {\n @include layers.component() {\n &__trigger {\n display: inline-flex;\n align-items: center;\n font-size: inherit;\n vertical-align: middle;\n\n --height: 1em;\n\n .onyx-icon {\n --icon-size: 1em;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TValue extends SelectOptionValue\">\nimport { computed, useTemplateRef } from \"vue\";\nimport { useCheckAll } from \"../../composables/checkAll.js\";\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport type { SelectOptionValue } from \"../../types/index.js\";\nimport OnyxCheckbox from \"../OnyxCheckbox/OnyxCheckbox.vue\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxHeadline from \"../OnyxHeadline/OnyxHeadline.vue\";\nimport OnyxInfoTooltip from \"../OnyxInfoTooltip/OnyxInfoTooltip.vue\";\nimport type { OnyxCheckboxGroupProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxCheckboxGroupProps<TValue>>(), {\n orientation: \"vertical\",\n withCheckAll: false,\n disabled: FORM_INJECTED_SYMBOL,\n skeleton: SKELETON_INJECTED_SYMBOL,\n requiredMarker: FORM_INJECTED_SYMBOL,\n truncation: \"ellipsis\",\n});\n\nconst { densityClass } = useDensity(props);\n\nconst emit = defineEmits<{\n /**\n * Emitted when the checked checkboxes change.\n */\n \"update:modelValue\": [value: TValue[]];\n}>();\n\nconst { t } = injectI18n();\nconst modelValue = useVModel({\n props,\n emit,\n key: \"modelValue\",\n default: () => [],\n});\n\nconst handleUpdate = (value: TValue, isChecked: boolean) => {\n modelValue.value = isChecked\n ? [...modelValue.value, value]\n : modelValue.value.filter((i) => i !== value);\n};\n\nconst enabledOptionValues = computed(() =>\n props.options.filter((i) => !i.disabled && !i.skeleton).map(({ value }) => value),\n);\n\nconst { disabled, requiredMarker } = useFormContext(props);\nconst skeleton = useSkeletonContext(props);\n\nconst checkAll = useCheckAll(\n enabledOptionValues,\n computed(() => modelValue.value),\n (newValue) => (modelValue.value = newValue),\n);\n\nconst checkAllLabel = computed(() => {\n const defaultText = t.value(\"selections.selectAll\");\n if (typeof props.withCheckAll === \"boolean\") return defaultText;\n return props.withCheckAll?.label ?? defaultText;\n});\n\nconst checkboxes = useTemplateRef(\"checkboxesRef\");\n\ndefineExpose({\n inputs: computed<HTMLInputElement[]>(() => {\n const array = Array.isArray(checkboxes.value) ? checkboxes.value : [checkboxes.value];\n return array.flatMap((checkbox) => checkbox?.input).filter((checkbox) => !!checkbox);\n }),\n});\n</script>\n\n<template>\n <fieldset\n :class=\"['onyx-component', 'onyx-checkbox-group', densityClass]\"\n :disabled=\"disabled\"\n :aria-label=\"props.label\"\n >\n <legend v-if=\"!props.hideLabel\" class=\"onyx-checkbox-group__label\">\n <OnyxHeadline is=\"h3\">{{ props.label }}</OnyxHeadline>\n <OnyxInfoTooltip v-if=\"props.labelTooltip\" trigger=\"hover\" :text=\"props.labelTooltip\" />\n </legend>\n\n <div\n class=\"onyx-checkbox-group__content\"\n :class=\"{\n 'onyx-checkbox-group__content--horizontal': props.orientation === 'horizontal',\n 'onyx-checkbox-group__content--vertical': props.orientation === 'vertical',\n }\"\n >\n <template v-if=\"!skeleton\">\n <OnyxCheckbox\n v-if=\"props.withCheckAll\"\n :required-marker\n v-bind=\"checkAll.state.value\"\n :label=\"checkAllLabel\"\n value=\"all\"\n class=\"onyx-checkbox-group__option onyx-checkbox-group__check-all\"\n @update:model-value=\"checkAll.handleChange\"\n />\n\n <OnyxCheckbox\n v-for=\"option in props.options\"\n :key=\"option.value.toString()\"\n v-bind=\"option\"\n ref=\"checkboxesRef\"\n :required-marker\n :truncation=\"option.truncation ?? props.truncation\"\n :model-value=\"modelValue.includes(option.value)\"\n class=\"onyx-checkbox-group__option\"\n @update:model-value=\"handleUpdate(option.value, $event)\"\n />\n </template>\n\n <template v-else-if=\"typeof skeleton === 'number'\">\n <OnyxCheckbox\n v-for=\"i in skeleton\"\n :key=\"i\"\n :label=\"`Skeleton ${i}`\"\n :value=\"`skeleton-${i}`\"\n skeleton\n />\n </template>\n </div>\n </fieldset>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-checkbox-group {\n @include layers.component() {\n padding: 0;\n border: none;\n max-width: max-content;\n min-width: unset;\n $check-all-border: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n\n &__label {\n display: flex;\n gap: var(--onyx-spacing-2xs);\n align-items: center;\n margin-bottom: var(--onyx-density-xs);\n }\n\n &__content {\n display: flex;\n\n &--vertical {\n flex-direction: column;\n\n .onyx-checkbox-group {\n &__option {\n width: 100%;\n }\n\n &__check-all {\n border-bottom: $check-all-border;\n }\n }\n }\n\n &--horizontal {\n flex-flow: row wrap;\n column-gap: var(--onyx-density-xl);\n\n .onyx-checkbox-group__check-all {\n border-right: $check-all-border;\n\n // the horizontal \"Select all\" checkbox label needs an additional padding-right\n .onyx-checkbox__label {\n padding-right: var(--onyx-density-md);\n }\n }\n }\n }\n }\n}\n</style>\n","/**\n * Escapes the given key for save usage in CSS (e.g. as part of a CSS variable name or selector).\n * Will use the native \"CSS.escape()\" if available in the browser, otherwise a fallback will be used.\n */\nexport const escapeCSS = (key: PropertyKey) => {\n // to prevent server side hydration errors, we are using the description for symbols so the name does not contain \"(\" or \")\"\n // which would be escaped differently on server side (where window.CSS) is not available than on client side\n const name = typeof key === \"symbol\" && key.description ? key.description : String(key);\n if (globalThis.window && window.CSS) return CSS.escape(name);\n return name.replace(/\\W/g, \"-\");\n};\n","<script lang=\"ts\" setup>\nimport { iconCircleX } from \"@sit-onyx/icons\";\nimport { useDensity, type DensityProp } from \"../../composables/density.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\n\nconst props = defineProps<DensityProp>();\n\nconst slots = defineSlots<{\n /**\n * Label / text to display.\n */\n default(): unknown;\n /**\n * Optional slot to override the default icon.\n */\n icon?(): unknown;\n /**\n * Optional slot to place custom buttons.\n */\n buttons?(): unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\n</script>\n\n<template>\n <div :class=\"['onyx-component', 'onyx-empty', densityClass]\">\n <slot name=\"icon\">\n <OnyxIcon :icon=\"iconCircleX\" size=\"48px\" />\n </slot>\n\n <div class=\"onyx-empty__label onyx-text onyx-truncation-multiline\">\n <slot></slot>\n </div>\n\n <div v-if=\"!!slots.buttons\" class=\"onyx-empty__buttons\">\n <slot name=\"buttons\"></slot>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-empty {\n @include layers.component() {\n padding: var(--onyx-density-xl);\n max-width: max-content;\n font-family: var(--onyx-font-family);\n text-align: center;\n color: var(--onyx-color-text-icons-neutral-soft);\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: var(--onyx-density-md);\n\n &__label {\n font-weight: var(--onyx-font-weight-semibold);\n white-space: pre-line;\n }\n\n &__buttons {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-wrap: wrap;\n gap: var(--onyx-density-xs);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, useId, useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useResizeObserver } from \"../../composables/useResizeObserver.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport OnyxEmpty from \"../OnyxEmpty/OnyxEmpty.vue\";\nimport type { OnyxTableProps, OnyxTableSlots } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxTableProps>(), {\n striped: false,\n withVerticalBorders: false,\n withPageScrolling: false,\n});\n\nconst slots = defineSlots<OnyxTableSlots>();\n\nconst { t } = injectI18n();\nconst { densityClass } = useDensity(props);\n\nconst isEmptyMessage = computed(() => t.value(\"table.empty\"));\n\nconst table = useTemplateRef(\"tableRef\");\nconst { height, width } = useResizeObserver(table);\n\nconst style = computed(() => ({\n \"--onyx-table-observed-height\": `${height.value}px`,\n \"--onyx-table-observed-width\": `${width.value}px`,\n}));\n\nconst _headlineId = useId();\nconst headlineId = computed(() => (slots.headline ? _headlineId : undefined));\n</script>\n\n<template>\n <div class=\"onyx-table-wrapper onyx-component\" :style>\n <div v-if=\"!!slots.headline || !!slots.actions\" class=\"onyx-table-wrapper__top\">\n <div :id=\"headlineId\">\n <slot name=\"headline\"></slot>\n </div>\n\n <div class=\"onyx-table-wrapper__actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n\n <div\n :class=\"[\n 'onyx-table-wrapper__container',\n { 'onyx-table-wrapper__container--no-scroll': props.withPageScrolling },\n ]\"\n :tabindex=\"props.withPageScrolling ? undefined : 0\"\n v-bind=\"scrollContainerAttrs\"\n >\n <table\n ref=\"tableRef\"\n class=\"onyx-table onyx-text\"\n :class=\"[\n {\n 'onyx-table--striped': props.striped,\n 'onyx-table--vertical-borders': props.withVerticalBorders,\n },\n densityClass,\n ]\"\n :aria-labelledby=\"headlineId\"\n >\n <colgroup\n v-for=\"group of props.columnGroups\"\n :key=\"group.key\"\n :span=\"group.span\"\n ></colgroup>\n\n <thead v-if=\"slots.head\" class=\"onyx-table__header\">\n <tr v-if=\"props.columnGroups?.length\">\n <th\n v-for=\"group of props.columnGroups\"\n :key=\"group.key\"\n :colspan=\"group.span\"\n scope=\"colgroup\"\n class=\"onyx-table__colgroup\"\n >\n {{ group.header }}\n </th>\n </tr>\n\n <slot name=\"head\"></slot>\n </thead>\n\n <tbody>\n <slot>\n <!-- fallback content showing an \"empty\" state\n that will be displayed if no body content is provided -->\n <tr class=\"onyx-table__empty\">\n <!-- We chose 99 as a sufficiently large colspan number, which should always be able to span all columns of the table.\n Additionally the data grid only supports colspan up to 99, see: https://github.com/SchwarzIT/onyx/blob/joca96/fix-3176-empty-data-grid-broken/packages/sit-onyx/src/components/OnyxDataGrid/OnyxDataGridRenderer/OnyxDataGridRenderer.vue#L118 -->\n <td colspan=\"99\">\n <div class=\"onyx-table__empty-content\">\n <slot name=\"empty\" :default-message=\"isEmptyMessage\">\n <OnyxEmpty> {{ isEmptyMessage }} </OnyxEmpty>\n </slot>\n </div>\n </td>\n </tr>\n </slot>\n </tbody>\n </table>\n </div>\n\n <div v-if=\"!!slots.bottomLeft || !!slots.pagination\" class=\"onyx-table-wrapper__bottom\">\n <div>\n <slot name=\"bottomLeft\"></slot>\n </div>\n\n <div>\n <slot name=\"pagination\"></slot>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n$border: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n\n/**\n* Defines all border styles for the table.\n* info: most borders are handled on cell level, not on the table itself\n* (which would lead to unstable background appliance and other visual bugs)\n*/\n@mixin define-borders() {\n border-spacing: 0;\n border-collapse: separate;\n\n // border styles\n th,\n td {\n border-bottom: $border;\n }\n\n td {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n tr:last-of-type td {\n border-bottom: none;\n }\n\n &--vertical-borders {\n td,\n th {\n &:not(:last-child) {\n border-right: $border;\n }\n }\n }\n}\n\n.onyx-table-wrapper {\n @include layers.component() {\n display: flex;\n flex-direction: column;\n gap: var(--onyx-density-xs);\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n\n &__container {\n border-radius: var(--onyx-radius-sm);\n overflow: auto;\n box-sizing: border-box;\n max-height: inherit;\n max-width: inherit;\n overscroll-behavior-x: none; // fix bouncy scroll behavior in safari\n border: $border;\n\n &:focus-visible {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n }\n\n &--no-scroll {\n overflow: initial;\n }\n }\n\n &__top,\n &__bottom {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--onyx-density-xs) var(--onyx-density-xl);\n }\n\n &__actions {\n gap: var(--onyx-density-xs);\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n }\n }\n}\n\n.onyx-table {\n @include layers.component() {\n --onyx-table-padding-block: var(--onyx-density-xs);\n --onyx-table-padding-inline: var(--onyx-density-md);\n text-align: left;\n width: 100%;\n\n @include define-borders();\n\n &__empty {\n &-content {\n display: flex;\n justify-content: center;\n }\n }\n\n &__header {\n position: sticky;\n top: 0;\n z-index: var(--onyx-z-index-sticky-content);\n }\n\n th,\n td {\n position: relative;\n padding: var(--onyx-table-padding-block) var(--onyx-table-padding-inline);\n\n // max width for skeleton, so it looks better\n > .onyx-skeleton {\n max-width: 8rem;\n }\n\n &.onyx-table__colgroup {\n padding-top: var(--onyx-density-3xs);\n padding-bottom: var(--onyx-density-3xs);\n }\n }\n\n th {\n font-size: var(--onyx-font-size-sm);\n line-height: var(--onyx-font-line-height-sm);\n font-weight: var(--onyx-font-weight-semibold);\n font-family: var(--onyx-font-family-h4);\n\n &:not(.onyx-table__colgroup) {\n background-color: var(--onyx-color-base-neutral-200);\n color: var(--onyx-color-text-icons-neutral-medium);\n\n // in tables: height = min height\n // set min height to fit a 1.5rem element (e.g. system button) so it does not jump around when the button is shown/hidden\n height: calc(1.5rem + 2 * var(--onyx-table-padding-block) + var(--onyx-1px-in-rem));\n align-content: center;\n\n &:hover {\n background: var(--onyx-color-base-neutral-300);\n }\n }\n }\n\n td {\n font-family: var(--onyx-font-family-data);\n font-size: var(--onyx-font-size-md);\n font-weight: var(--onyx-font-weight-400);\n line-height: var(--onyx-font-line-height-md);\n }\n\n // we need to use ::before to set the row/td background color\n // so the column hover effects works correctly with plain CSS\n td::before {\n content: \"\";\n background-color: var(\n --onyx-table-row-background-color,\n var(--onyx-color-base-background-blank)\n );\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -2;\n }\n\n &--striped {\n tbody {\n tr:nth-child(even) td::before {\n background-color: var(\n --onyx-table-row-background-color,\n var(--onyx-color-base-background-tinted)\n );\n }\n }\n }\n\n // row hover styles\n // hover styles are disabled when the table is empty.\n tr:hover:not(.onyx-table__empty) td::before {\n background-color: var(--onyx-color-base-neutral-200);\n }\n\n // column hover styles\n th:not(&__colgroup):hover::before {\n .onyx-table:not(:has(.onyx-table__empty)) & {\n background-color: color-mix(in srgb, var(--onyx-color-base-neutral-500), transparent 85%);\n content: \"\";\n height: var(--onyx-table-observed-height);\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n bottom: 0;\n z-index: -1;\n // needed in order for other components like buttons etc. to be clickable and to prevent showing the column hover effect when hovering down over a row\n pointer-events: none;\n }\n }\n\n &__colgroup {\n background-color: var(--onyx-color-base-primary-100);\n color: var(--onyx-color-text-icons-primary-intense);\n }\n }\n td > .onyx-skeleton {\n height: 0.5rem;\n margin: var(--onyx-density-xs) 0;\n border-radius: var(--onyx-radius-full);\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TEntry extends DataGridEntry, TMetadata extends DataGridMetadata\">\nimport { computed } from \"vue\";\nimport { mergeVueProps } from \"../../../utils/attrs.js\";\nimport { escapeCSS } from \"../../../utils/dom.js\";\nimport OnyxTable from \"../../OnyxTable/OnyxTable.vue\";\nimport type { DataGridEntry, DataGridMetadata } from \"../types.js\";\nimport type { DataGridRendererSlots, OnyxDataGridRendererProps } from \"./types.js\";\n\nconst props = defineProps<OnyxDataGridRendererProps<TEntry, TMetadata>>();\n\nconst slots = defineSlots<DataGridRendererSlots>();\n\nconst columnStyle = computed(() => {\n return {\n \"--onyx-data-grid-column-count\": props.columns.length,\n \"--onyx-data-grid-row-count\": Math.max(props.rows.length + 2, 3),\n \"--onyx-data-grid-template-columns\": props.columns\n .map(({ key, width }) => {\n const name = `--onyx-data-grid-column-${escapeCSS(key)}`;\n const value = width ?? \"minmax(min-content, 1fr)\";\n return `var(${name}, ${value})`;\n })\n .join(\" \"),\n };\n});\n</script>\n\n<template>\n <OnyxTable\n class=\"onyx-data-grid\"\n v-bind=\"props\"\n :scroll-container-attrs=\"mergeVueProps(props.scrollContainerAttrs, { style: columnStyle })\"\n >\n <template #head>\n <!-- We set `ref_for` to false, so the refs are not passed as an array -->\n <tr>\n <th\n v-for=\"column in props.columns\"\n :key=\"column.key\"\n v-bind=\"column.thAttributes\"\n :ref_for=\"false\"\n scope=\"col\"\n >\n <component :is=\"column.component\" v-bind=\"column.props\" />\n </th>\n </tr>\n </template>\n\n <tr v-for=\"row in props.rows\" :key=\"row.id\" v-bind=\"row.trAttributes\">\n <template v-for=\"column in row.columns\" :key=\"column.key\">\n <td v-if=\"row.cells[column.key]\" v-bind=\"row.cells[column.key]!.tdAttributes\">\n <!-- We are safe to use the Non-Null Assertion operator (\"!\") here, as we check beforehand with \"v-if\" -->\n <component :is=\"row.cells[column.key]!.component\" v-bind=\"row.cells[column.key]!.props\" />\n </td>\n </template>\n </tr>\n\n <template v-for=\"(slot, slotName) in slots\" :key=\"slotName\" #[slotName]=\"slotProps\">\n <!-- The type assertion here is a workaround for incorrect type assertion, which otherwise breaks the build -->\n <slot :name=\"slot?.name as 'headline'\" v-bind=\"slotProps\">\n <component :is=\"slot\"></component>\n </slot>\n </template>\n </OnyxTable>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../styles/mixins/layers.scss\";\n\n@include layers.override() {\n .onyx-data-grid {\n width: 100%;\n max-width: 100%;\n\n .onyx-table-wrapper__container {\n display: grid;\n grid-template-columns: var(--onyx-data-grid-template-columns);\n grid-template-rows: repeat(var(--onyx-data-grid-row-count), auto);\n\n table {\n display: grid;\n grid-template-columns: subgrid;\n grid-template-rows: subgrid;\n grid-column: 1 / -1;\n grid-row: 1 / -1;\n }\n\n thead {\n display: grid;\n grid-template-columns: subgrid;\n grid-column: 1 / -1;\n grid-row: 1 / 3;\n }\n\n tbody {\n display: grid;\n grid-column: 1 / -1;\n grid-row: 3 / -1;\n grid-template-columns: subgrid;\n grid-template-rows: subgrid;\n }\n\n tr {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: subgrid;\n }\n\n // Waiting for :attr support https://developer.mozilla.org/en-US/docs/Web/CSS/attr\n @for $i from 1 through 99 {\n :is(th, td)[colspan=\"#{$i}\"] {\n grid-column: span $i;\n }\n }\n }\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { iconSearch, iconXSmall } from \"@sit-onyx/icons\";\nimport { computed, useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useAutofocus } from \"../../composables/useAutoFocus.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport type { OnyxMiniSearchProps } from \"./types.js\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps<OnyxMiniSearchProps>();\n\nconst emit = defineEmits<{\n /**\n * Emitted when the clear button is clicked.\n */\n clear: [];\n /**\n * Updates the current value\n */\n \"update:modelValue\": [value: string];\n}>();\n\n/**\n * Current input/search value.\n */\nconst modelValue = useVModel({\n props,\n emit,\n key: \"modelValue\",\n default: \"\",\n});\n\nconst { rootAttrs, restAttrs } = useRootAttrs();\nconst { densityClass } = useDensity(props);\nconst { t } = injectI18n();\nconst input = useTemplateRef(\"inputRef\");\n\nconst placeholder = computed(() => t.value(\"select.searchPlaceholder\"));\nuseAutofocus(input, props);\n\ndefineExpose({\n /**\n * Focuses the input.\n */\n focus: () => input.value?.focus(),\n});\n</script>\n\n<template>\n <div\n :class=\"['onyx-component', 'onyx-mini-search', densityClass]\"\n v-bind=\"rootAttrs\"\n :style=\"{ '--onyx-placeholder-character-count': placeholder.length }\"\n >\n <input\n ref=\"inputRef\"\n v-model=\"modelValue\"\n :autofocus=\"props.autofocus\"\n class=\"onyx-mini-search__input onyx-text\"\n :placeholder=\"placeholder\"\n type=\"text\"\n size=\"1\"\n v-bind=\"restAttrs\"\n :aria-label=\"props.label\"\n />\n\n <!-- We use `@mousedown.prevent` here to not lose the input focus when the button is clicked -->\n <!-- We use `@click` here instead of `@mousedown` for the emit, as clear can change the width of the element.\n When the actual width changes, this can cause the actual click to be triggered on an outside element. -->\n <button\n type=\"button\"\n class=\"onyx-mini-search__clear\"\n :aria-label=\"t('select.clearSearch')\"\n tabindex=\"-1\"\n @mousedown.prevent\n @click=\"emit('clear')\"\n >\n <OnyxIcon :icon=\"iconXSmall\" />\n </button>\n\n <OnyxIcon class=\"onyx-mini-search__icon\" :icon=\"iconSearch\" />\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-mini-search {\n @include layers.component() {\n --onyx-mini-search-icon-size: 1.5rem;\n --onyx-mini-search-padding-inline: var(--onyx-density-sm);\n\n display: flex;\n gap: var(--onyx-mini-search-padding-inline);\n padding: var(--onyx-density-xs) var(--onyx-mini-search-padding-inline);\n background-color: var(--onyx-color-base-background-blank);\n color: var(--onyx-color-text-icons-neutral-intense);\n\n &__input,\n &__clear {\n all: initial;\n }\n\n &__input {\n font-family: var(--onyx-font-family);\n font-style: normal;\n flex-grow: 1;\n min-width: calc(var(--onyx-placeholder-character-count) * 1ch);\n color: inherit;\n\n &::placeholder {\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n }\n\n &__clear {\n color: var(--onyx-color-text-icons-neutral-medium);\n cursor: pointer;\n display: none;\n\n .onyx-icon {\n --icon-size: var(--onyx-mini-search-icon-size);\n }\n }\n\n &__icon {\n display: grid;\n align-self: center;\n color: var(--onyx-color-text-icons-neutral-soft);\n --icon-size: var(--onyx-mini-search-icon-size);\n }\n\n // Show clear button only when input is not empty\n &:has(&__input:not(:placeholder-shown)) {\n .onyx-mini-search {\n &__clear {\n display: grid;\n place-items: center;\n }\n\n &__icon {\n display: none;\n }\n }\n }\n }\n}\n</style>\n","export type SingleOrderableMapping<T, TOutput = T, TInput = Readonly<TOutput>> = {\n func: (input: TInput) => TInput | TOutput;\n order?: number;\n};\n\n/**\n * One pattern that we use and provide in the feature API is the ability to provide mappers for configurations and data.\n * The `OrderableMapping` is an abstraction of this pattern, where any count of mappers can be defined.\n */\nexport type OrderableMapping<T> = SingleOrderableMapping<T> | SingleOrderableMapping<T>[];\n\n/**\n * Unwraps and orders the mappers for a given key of a feature set.\n * The returned array of mappings can then be applied using the `applyMapping` function.\n */\nexport const prepareMapping = <\n T,\n F extends { [Key in K]?: OrderableMapping<T> | undefined }[],\n K extends PropertyKey,\n>(\n features: F,\n key: K,\n) =>\n features\n .flatMap((f) => f[key]!)\n .filter((f) => f?.func)\n .sort((a, b) => (a?.order ?? 0) - (b?.order ?? 0));\n\nexport const applyMapping = <T>(mapping: SingleOrderableMapping<T>[], input: T) =>\n mapping.reduce((output, m) => m.func(output), input);\n","import type { HTMLAttributes } from \"vue\";\nimport type { SkeletonInjected } from \"../../composables/useSkeletonState.js\";\nimport type {\n IfExtends,\n IfNotEmpty,\n MaybePick,\n RecordValues,\n UnionByKey,\n} from \"../../types/index.js\";\nimport type { OnyxHeadlineProps } from \"../OnyxHeadline/types.js\";\nimport type { OnyxTableProps } from \"../OnyxTable/types.js\";\nimport type { BASE_FEATURE } from \"./features/base/base.js\";\nimport type {\n ColumnConfig,\n ColumnConfigTypeOption,\n ColumnGroupConfig,\n DataGridFeature,\n InternalColumnConfig,\n TypeRenderer,\n TypeRenderMap,\n} from \"./features/index.js\";\n\nexport type DataGridMetadata = Record<string, unknown>;\n\n/**\n * Makes registered types of typeRenderers available for use in the column configuration.\n * Extracts all registered `Keys` and their `TOptions` types and maps them to the `ColumnConfigurationTypeOption`.\n */\nexport type MapTypeRenderOptions<T> = {\n [Key in keyof T]: T[Key] extends TypeRenderer<infer _, infer TOptions>\n ? ColumnConfigTypeOption<Key, TOptions>\n : ColumnConfigTypeOption<Key, unknown>;\n};\n\n/**\n * A type that can either be the type itself or an array of it.\n */\nexport type MaybeArray<T> = T | Array<T>;\n\n/**\n * Unwraps the typeRenderers from the given feature(s).\n *\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- we use any for simplicity\nexport type ColumnTypesFromFeatures<TFeatures extends MaybeArray<DataGridFeature<any, any, any>>> =\n // 8. Safeguard against unwanted types\n IfExtends<\n // 7. Union type of all column types\n RecordValues<\n // 6. Map all `typeRenderer`s to their appropriate column option types\n MapTypeRenderOptions<\n // 5. Drop all empty records to avoid ending up with `unknown` type\n IfNotEmpty<\n // 4. If defined, take the type of the `typeRenderer` key from the feature\n MaybePick<\n // 3. Merge the values together\n UnionByKey<\n // 2. Take the feature description object\n ReturnType<\n // 1. For each feature\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we use any for simplicity\n TFeatures extends any[] ? TFeatures[number] : TFeatures\n >\n >,\n \"typeRenderer\"\n >\n >\n >\n >,\n ColumnConfigTypeOption<PropertyKey, unknown>\n >;\n\n/**\n * @experimental The DataGrid is still working in progress and the props will change in the future.\n */\nexport type OnyxDataGridProps<\n TEntry extends DataGridEntry,\n TColumnGroup extends ColumnGroupConfig,\n TTypeRenderer extends TypeRenderMap<TEntry>,\n TFeatureName extends symbol,\n TFeatures extends DataGridFeature<TEntry, TTypeRenderer, TFeatureName>[] = never,\n TTypes extends ColumnConfigTypeOption<PropertyKey, unknown> = ColumnTypesFromFeatures<\n [ReturnType<typeof BASE_FEATURE>, ...TFeatures]\n >,\n> = {\n /**\n * Features that should be applied.\n * They allow the modification of the behavior and rendering.\n * Usually you want to use the provided features of the exported `DataGridFeature` namespace.\n * Check the Storybook examples (e.g. [Sorting](/?path=/story/data-datagrid-features--sorting)) for more details on how the features are used and configured.\n */\n features?: TFeatures;\n /**\n * When `async` is `true`, the data transformation of supported features is disabled and externalized.\n * This allows for backend handling of data fetching and data transformation.\n */\n async?: boolean;\n /**\n * The order of and which columns should be rendered.\n */\n columns: ColumnConfig<TEntry, TColumnGroup, TTypes>[];\n /**\n * Configuration for the column groups defined via the `columns` configuration.\n */\n columnGroups?: TColumnGroup;\n /**\n * The data that should be used to fill the datagrid.\n */\n data: TEntry[];\n /**\n * Whether to show skeleton rows. Can be set to `true` to use a pre-defined skeleton row count or you can pass a number to define a specific count.\n */\n skeleton?: SkeletonInjected;\n /**\n * Headline to display above the data grid.\n */\n headline?: string | DataGridHeadline;\n} & Omit<OnyxTableProps, \"columnGroups\" | \"scrollContainerAttrs\">;\n\n/**\n * \"Raw\" user data for a data grid entry/row, e.g. fetched from a backend service.\n */\nexport type DataGridEntry = {\n [key: PropertyKey]: unknown;\n /**\n * Unique ID of the data grid entry/row.\n */\n id: PropertyKey;\n /**\n * Additional options for this row.\n */\n [DataGridRowOptionsSymbol]?: DataGridEntryOptions;\n};\n\nexport type DataGridEntryOptions = {\n /**\n * Attributes that are bound directly to the `<tr>` element of the row.\n */\n trAttributes?: HTMLAttributes;\n /**\n * Overrides which columns to render in which order.\n * Useful if e.g. adding a custom full-width row inside a data grid feature.\n */\n columns?: Omit<InternalColumnConfig<{ id: PropertyKey }>, \"label\">[];\n};\n\nexport const DataGridRowOptionsSymbol = Symbol(\"RowOptions\");\n\nexport type DataGridHeadline = Partial<OnyxHeadlineProps> & {\n /**\n * Headline text.\n */\n text: string;\n /**\n * Optional row count to display. If set to `true`, the count will be determined automatically.\n * Can also be set to a custom number (useful when e.g. using async pagination).\n */\n rowCount?: boolean | number;\n};\n","<script setup lang=\"ts\">\nconst props = defineProps<{\n /**\n * label of the column\n */\n label: string;\n}>();\n\nconst slots = defineSlots<{\n actions?(): unknown;\n}>();\n</script>\n\n<template>\n <div class=\"onyx-component onyx-data-grid-header-cell\">\n <span class=\"onyx-data-grid-header-cell__label\">{{ props.label }}</span>\n <div v-if=\"slots.actions\" class=\"onyx-data-grid-header-cell__actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.onyx-data-grid-header-cell {\n display: flex;\n align-items: center;\n gap: var(--onyx-density-xs);\n\n &__actions {\n display: inline-flex;\n gap: var(--onyx-density-2xs);\n }\n}\n</style>\n","import { iconCheck, iconX } from \"@sit-onyx/icons\";\nimport { h } from \"vue\";\nimport OnyxSkeleton from \"../../../components/OnyxSkeleton/OnyxSkeleton.vue\";\nimport {\n injectI18n,\n type OnyxDateFormatOptions,\n type OnyxNumberFormatOptions,\n} from \"../../../i18n/index.js\";\nimport { allObjectEntries } from \"../../../utils/objects.js\";\nimport type { DateValue } from \"../../OnyxDatePicker/types.js\";\nimport OnyxIcon from \"../../OnyxIcon/OnyxIcon.vue\";\nimport type { OnyxIconProps } from \"../../OnyxIcon/types.js\";\nimport OnyxVisuallyHidden from \"../../OnyxVisuallyHidden/OnyxVisuallyHidden.vue\";\nimport type { DataGridEntry } from \"../types.js\";\nimport HeaderCell from \"./HeaderCell.vue\";\nimport { type DataGridFeatureDescription, type TypeRenderer, type TypeRenderMap } from \"./index.js\";\nimport \"./renderer.scss\";\n\nexport const FALLBACK_RENDER_VALUE = \"-\";\n\nconst fallback = (opts?: { fallback?: string }) => opts?.fallback ?? FALLBACK_RENDER_VALUE;\n\n/**\n * Allows for creating `TypeRenderer` with typed options.\n * These options are then made available via the column configuration.\n *\n * While typeRenderer can be defined without this helper, they cannot define any options.\n */\nexport const createTypeRenderer = <\n TOptions = undefined,\n TEntry extends DataGridEntry = DataGridEntry,\n>(\n typeRenderer: TypeRenderer<TEntry, TOptions>,\n) => Object.freeze(typeRenderer);\n\nexport type NumberCellOptions = {\n format?: OnyxNumberFormatOptions;\n /**\n * Fallback value to display when the value is undefined or invalid.\n * Defaults to \"-\" if not provided.\n */\n fallback?: string;\n};\n\nexport const numberFormatter = <TEntry extends DataGridEntry>(\n value: TEntry[keyof TEntry] | undefined,\n opts?: NumberCellOptions,\n): string => {\n // using loose \"==\" here to catch both undefined and null\n if (\n value == undefined ||\n value instanceof Date ||\n typeof value === \"boolean\" ||\n typeof value === \"symbol\"\n ) {\n return fallback(opts);\n }\n\n const { n } = injectI18n();\n\n // We format the given value as Number. In case it renders as NaN, we replace it with `-`.\n // The typing is incorrect, the `format` method accepts any value\n return n.value(value as number, opts?.format ?? \"decimal\").replace(\"NaN\", FALLBACK_RENDER_VALUE);\n};\n\nexport const NUMBER_RENDERER = createTypeRenderer<NumberCellOptions>({\n header: { component: HeaderCell },\n cell: {\n component: ({ metadata, modelValue }) => numberFormatter(modelValue, metadata?.typeOptions),\n tdAttributes: { class: \"onyx-data-grid-number-cell\" },\n },\n});\n\nexport type StringCellOptions = {\n /**\n * Fallback value to display when the value is undefined.\n * Defaults to \"-\" if not provided.\n */\n fallback?: string;\n};\n\nexport const stringFormatter = <TEntry extends DataGridEntry>(\n value: TEntry[keyof TEntry] | undefined,\n opts?: StringCellOptions,\n): string => {\n // using loose \"==\" here to catch both undefined and null\n if (value == undefined) return fallback(opts);\n if (Array.isArray(value)) {\n return value\n .map((entry) => stringFormatter(entry))\n .filter((i) => i != fallback(opts))\n .join(\", \");\n }\n if (value instanceof Date) return value.toString();\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n};\n\nexport const STRING_RENDERER = createTypeRenderer<StringCellOptions>({\n header: { component: HeaderCell },\n cell: {\n component: (props) => stringFormatter(props.modelValue, props.metadata?.typeOptions),\n },\n});\n\nexport type DateCellOptions = {\n format?: OnyxDateFormatOptions;\n /**\n * Fallback value to display when the value is undefined or invalid.\n * Defaults to \"-\" if not provided.\n */\n fallback?: string;\n};\n\nexport const dateFormatter = <TEntry extends DataGridEntry>(\n value: TEntry[keyof TEntry] | undefined,\n opts?: DateCellOptions,\n): string => {\n // using loose \"==\" here to catch both undefined and null\n if (value == undefined || typeof value === \"boolean\") return fallback(opts);\n\n const { d } = injectI18n();\n\n try {\n const date = new Date(typeof value === \"bigint\" ? Number(value) : (value as DateValue));\n return d.value(date, opts?.format);\n } catch {\n return fallback(opts);\n }\n};\n\nexport const DATE_RENDERER = createTypeRenderer<DateCellOptions>({\n header: { component: HeaderCell },\n cell: {\n component: (props) =>\n dateFormatter(props.modelValue, { format: \"date\", ...props.metadata?.typeOptions }),\n },\n});\n\nexport const DATETIME_RENDERER = createTypeRenderer<DateCellOptions>({\n header: { component: HeaderCell },\n cell: {\n component: (props) =>\n dateFormatter(props.modelValue, { format: \"datetime-local\", ...props.metadata?.typeOptions }),\n },\n});\n\nexport const TIME_RENDERER = createTypeRenderer<DateCellOptions>({\n header: { component: HeaderCell },\n cell: {\n component: (props) =>\n dateFormatter(props.modelValue, { format: \"time\", ...props.metadata?.typeOptions }),\n },\n});\n\nexport const TIMESTAMP_RENDERER = createTypeRenderer<DateCellOptions>({\n header: { component: HeaderCell },\n cell: {\n component: (props) =>\n dateFormatter(props.modelValue, { format: \"timestamp\", ...props.metadata?.typeOptions }),\n },\n});\nexport const SKELETON_RENDERER = createTypeRenderer<StringCellOptions>({\n cell: {\n component: () => h(OnyxSkeleton),\n },\n});\n\nexport type BooleanCellOptions = {\n /**\n * Icon to display when the value is truthy.\n */\n truthy?: BooleanCellIconOptions;\n /**\n * Icon to display when the value is falsy.\n */\n falsy?: BooleanCellIconOptions;\n};\n\nexport type BooleanCellIconOptions = Partial<OnyxIconProps> & {\n /**\n * Label to display (visually hidden) for e.g. screen readers.\n *\n * @default \"Yes\" / \"No\" label depending on the current locale\n */\n label?: string;\n};\n\nexport const BOOLEAN_RENDERER = createTypeRenderer<BooleanCellOptions>({\n header: { component: HeaderCell },\n cell: {\n tdAttributes: {\n class: \"onyx-data-grid-boolean-cell\",\n },\n component: ({ modelValue, metadata }) => {\n const value = Boolean(modelValue);\n const { t } = injectI18n();\n\n const truthyProps = {\n icon: iconCheck,\n label: t.value(\"yes\"),\n ...metadata?.typeOptions?.truthy,\n } satisfies BooleanCellIconOptions;\n\n const falsyProps = {\n icon: iconX,\n label: t.value(\"no\"),\n ...metadata?.typeOptions?.falsy,\n } satisfies BooleanCellIconOptions;\n\n const props = value ? truthyProps : falsyProps;\n\n return [\n h(OnyxIcon, props),\n // since icons are aria hidden (visual only), we include the value with OnyxVisuallyHidden here for screen readers\n h(OnyxVisuallyHidden, undefined, () => props.label),\n ];\n },\n },\n});\n\nexport const createRenderer = <TEntry extends DataGridEntry>(\n features: DataGridFeatureDescription<TEntry, TypeRenderMap<TEntry>, symbol>[],\n) => {\n const init = [\n ...features\n .flatMap(({ typeRenderer }) => typeRenderer! && allObjectEntries(typeRenderer))\n .filter(Boolean),\n ] as [PropertyKey, TypeRenderer<TEntry>][];\n\n /**\n * Maps type names to their respective component.\n */\n const typeRendererMap = new Map(init);\n\n return {\n /**\n * Returns a renderer for any given component and type.\n * Uses the fallbackRenderer if necessary.\n */\n getFor: <\n TComponent extends \"cell\" | \"header\",\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- We don't care about the specific renderer type\n TRenderer extends NonNullable<TypeRenderer<TEntry, any>[TComponent]>,\n >(\n component: TComponent,\n type?: PropertyKey,\n ): TRenderer =>\n (typeRendererMap.get(type!)?.[component] ?? STRING_RENDERER[component]) as TRenderer, // Map returns undefined if `type` is undefined, so it's safe to use the Non-Null assertion.\n };\n};\n","import { iconMoreHorizontalSmall } from \"@sit-onyx/icons\";\nimport {\n computed,\n h,\n toValue,\n type Component,\n type HTMLAttributes,\n type MaybeRef,\n type MaybeRefOrGetter,\n type Ref,\n type TdHTMLAttributes,\n type ThHTMLAttributes,\n type VNode,\n type VNodeProps,\n type WatchSource,\n} from \"vue\";\nimport type { ComponentSlots } from \"vue-component-type-helpers\";\nimport { type OnyxI18n } from \"../../../i18n/index.js\";\nimport type { Nullable } from \"../../../types/index.js\";\nimport { mergeVueProps } from \"../../../utils/attrs.js\";\nimport { applyMapping, prepareMapping, type OrderableMapping } from \"../../../utils/feature.js\";\nimport { asArray } from \"../../../utils/objects.js\";\nimport type { OnyxMenuItem } from \"../../OnyxNavBar/modules/index.js\";\nimport OnyxFlyoutMenu from \"../../OnyxNavBar/modules/OnyxFlyoutMenu/OnyxFlyoutMenu.vue\";\nimport OnyxSystemButton from \"../../OnyxSystemButton/OnyxSystemButton.vue\";\nimport type { OnyxTableSlots, TableColumnGroup } from \"../../OnyxTable/types.js\";\nimport type {\n DataGridRendererCell,\n DataGridRendererColumn,\n DataGridRendererRow,\n} from \"../OnyxDataGridRenderer/types.js\";\nimport {\n DataGridRowOptionsSymbol,\n type ColumnTypesFromFeatures,\n type DataGridEntry,\n type DataGridMetadata,\n} from \"../types.js\";\nimport type { BASE_FEATURE } from \"./base/base.js\";\nimport { createRenderer } from \"./renderer.js\";\n\n/**\n * Function type for modifying the normalized column configuration.\n */\nexport type ModifyColumns<TEntry extends DataGridEntry> = OrderableMapping<\n InternalColumnConfig<TEntry>[]\n>;\n\nexport type HeaderCellProps<TOptions = unknown> = { label: string; typeOptions?: TOptions };\n\nexport type TypeRendererHeaderDef<TEntry extends DataGridEntry, TOptions = undefined> = Omit<\n DataGridRendererColumn<TEntry, HeaderCellProps<TOptions>>,\n \"key\" | \"props\"\n>;\n\nexport type CellMetadata<TOptions = unknown> = { typeOptions?: TOptions };\n\nexport type TypeRendererCell<TEntry extends DataGridEntry, TOptions = undefined> = Omit<\n DataGridRendererCell<TEntry, CellMetadata<TOptions>>,\n \"props\"\n>;\n\n/**\n * Defines how a specific column type should be rendered.\n */\nexport type TypeRenderer<TEntry extends DataGridEntry, TOptions = undefined> = {\n header?: TypeRendererHeaderDef<TEntry, TOptions>;\n cell: TypeRendererCell<TEntry, TOptions>;\n};\n\n/**\n * Maps a \"type\" key to a column renderer.\n * `symbol` keys are intended for internal/helper columns.\n */\nexport type TypeRenderMap<\n TEntry extends DataGridEntry,\n TKey extends PropertyKey = PropertyKey,\n> = Partial<Record<TKey, Readonly<TypeRenderer<TEntry, object>>>>;\n\n/**\n * ColumnConfig as it can be defined by the user.\n */\nexport type ColumnConfig<\n TEntry extends DataGridEntry,\n TColumnGroup extends ColumnGroupConfig = Record<string, never>,\n TTypes extends ColumnConfigTypeOption<PropertyKey, unknown> = never,\n> =\n | keyof TEntry\n | PublicNormalizedColumnConfig<\n TEntry,\n TColumnGroup,\n TTypes | ColumnTypesFromFeatures<ReturnType<typeof BASE_FEATURE>>\n >;\n\nexport type DefaultSupportedTypes = keyof ReturnType<\n ReturnType<typeof BASE_FEATURE>\n>[\"typeRenderer\"];\n\n/**\n * Configuration for the column groupings.\n */\nexport type ColumnGroupConfig = Record<\n string,\n {\n label: string;\n }\n>;\n\n/**\n * Column config used internally and by the `modifyColumns` functions.\n */\nexport type InternalColumnConfig<\n TEntry extends DataGridEntry,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we use any for type inference\n TColumnGroup extends ColumnGroupConfig = any,\n> = Omit<PublicNormalizedColumnConfig<TEntry, TColumnGroup, never>, \"label\" | \"type\"> & {\n type: ColumnTypeNormalized<PropertyKey, unknown>;\n /**\n * Attributes that should be set on all `td` elements\n */\n tdAttributes?: TdHTMLAttributes;\n /**\n * Attributes that should be set on all `th` elements\n */\n thAttributes?: ThHTMLAttributes;\n /**\n * After normalization the label is always defined.\n */\n label: string;\n};\n\nexport type ColumnTypeNormalized<TKey, TOptions> = { name: TKey; options?: TOptions };\nexport type ColumnConfigTypeOption<TKey, TOptions> = TKey | ColumnTypeNormalized<TKey, TOptions>;\n\n/**\n * Normalized column config for public/external usage.\n */\nexport type PublicNormalizedColumnConfig<\n TEntry extends DataGridEntry,\n TColumnGroup extends ColumnGroupConfig,\n TTypes extends ColumnConfigTypeOption<PropertyKey, unknown>,\n> = Pick<DataGridRendererColumn<TEntry>, \"width\" | \"key\"> & {\n /**\n * The `label` is displayed in the data grid as column header.\n * If not defined, the key is used instead.\n */\n label?: string;\n /**\n * The `type` of the column. It defines how the header and cells of a column is rendered.\n * If not defined the values are displayed as plain strings.\n */\n type?: TTypes;\n /**\n * Key of the ColumnGroup that this column should be visually grouped in.\n * The columns have to be defined in the correct order.\n * So columns that should be grouped together have to actually be defined after each other.\n *\n * The label for the column group can be configured via the `columnGroups` prop.\n */\n columnGroupKey?: keyof TColumnGroup;\n};\n\n/**\n * Context that is passed to a feature when it is set up by the `useDataGridFeatures` composable.\n */\nexport type DataGridFeatureContext = {\n /**\n * Ref for the `async` state of the `OnyxDataGrid`. If `true` data mutations should be skipped, if they are expected to be handled by a backend.\n */\n async: Readonly<Ref<boolean>>;\n /**\n * The `i18n` object, which can be used to access messages, formatters and the current locale.\n */\n i18n: OnyxI18n;\n /**\n * Whether the data grid should be shows as skeleton.\n */\n skeleton: Readonly<Ref<number | boolean>>;\n};\n\n/**\n * Complete Type for a single data grid feature.\n */\nexport type DataGridFeature<\n TEntry extends DataGridEntry,\n TTypeRenderer extends TypeRenderMap<TEntry> = TypeRenderMap<TEntry>,\n TFeatureName extends symbol = symbol,\n> = (\n ctx: DataGridFeatureContext,\n) => DataGridFeatureDescription<TEntry, TTypeRenderer, TFeatureName>;\n\n/**\n * Object that describes the hooks and properties of a datagrid feature.\n */\nexport type DataGridFeatureDescription<\n TEntry extends DataGridEntry,\n TTypeRenderer extends TypeRenderMap<TEntry> = TypeRenderMap<TEntry>,\n TFeatureName extends symbol = symbol,\n> = {\n /**\n * Unique name and identifier of the datagrid feature\n */\n name: TFeatureName;\n\n /**\n * An array of reactive states that should trigger a datagrid re-generation\n */\n watch?: WatchSource[];\n\n /**\n * Allows modifying the datagrid state as a whole.\n */\n mutation?: {\n func: (state: Readonly<TEntry>[]) => Readonly<TEntry>[] | void;\n /**\n * Defines the order in which the mutation is handled.\n * This can be used to control the sequence of operations when multiple mutations are applied.\n *\n * The higher the order, the earlier the mutation is applied.\n *\n * @default 0\n */\n order?: number;\n };\n\n /**\n * Defines a renderer for a column type.\n */\n typeRenderer?: TTypeRenderer;\n\n /**\n * Allows modification of the normalized column configuration.\n * While the entries are passed as readonly, but the array itself can be modified.\n * To change entries, you need to clone them first:\n *\n * @example\n * ```ts\n * {\n * modifyColumns: [ { func: (config) => configs.map(column => ({ ...column, type: \"newType\" })) } ];\n * }\n * ```\n */\n modifyColumns?: ModifyColumns<TEntry>;\n\n /**\n * Allows the modification of the headers.\n */\n header?: {\n /**\n * Adds header icon button(s).\n * `iconComponent` of an action is shown after the header label.\n * The components must be ARIA-conform buttons.\n */\n actions?: (\n column: InternalColumnConfig<TEntry>,\n index: number,\n all: InternalColumnConfig<TEntry>[],\n ) => {\n iconComponent?:\n | Component\n | {\n iconComponent: Component;\n /**\n * Will force the icon component to be always shown in the header and not be put into the menu\n */\n alwaysShowInHeader?: boolean;\n };\n menuItems?: Component<typeof OnyxMenuItem>[];\n showFlyoutMenu?: boolean;\n }[];\n wrapper?: (\n column: InternalColumnConfig<TEntry>,\n index: number,\n all: InternalColumnConfig<TEntry>[],\n ) => Component;\n };\n scrollContainerAttributes?: () => DataGridScrollContainerAttributes;\n /**\n * Optional table slots.\n */\n slots?: DataGridFeatureSlots;\n};\n\nexport type DataGridScrollContainerAttributes = HTMLAttributes & Pick<VNodeProps, \"ref\">;\n\nexport type DataGridFeatureSlots = Partial<{\n [TSlotName in keyof Pick<OnyxTableSlots, \"headline\" | \"bottomLeft\" | \"pagination\">]: (\n slotContent: () => VNode[],\n ) => Nullable<VNode>[];\n}>;\n\nexport type InternalDataGridSlots = Partial<Record<keyof DataGridFeatureSlots, () => VNode[]>>;\n\nexport type DataGridFeatureOptions<\n TEntry extends DataGridEntry,\n TColumnOptions extends Partial<Record<keyof TEntry, object>>,\n TWithAsync extends boolean = false,\n> = {\n /**\n * Whether the feature is enabled by default. Can be overridden per column.\n *\n * @default true\n */\n enabled?: MaybeRef<boolean | undefined>;\n /**\n * Options for each column. Will override default/global options of the feature.\n */\n columns?: MaybeRef<\n | {\n [TKey in keyof TEntry]?: TColumnOptions[TKey] & {\n /**\n * Whether the feature is enabled for this column. If unset, the default/global `enabled` option of this feature will be used.\n */\n enabled?: boolean;\n };\n }\n | undefined\n >;\n} & (TWithAsync extends true\n ? {\n /**\n * When async is `true`, then the internal data transformations of this feature are disabled and have to be performed manually.\n */\n async?: boolean;\n }\n : unknown);\n\n/**\n * Helper function that checks the generics of the DataGridFeature type, without breaking type inference.\n * @example\n * ```ts\n *\n * const MY_FEATURE = Symbol(\"TABLE_HEADER_BUTTON\");\n * export const useDataGridHeaderButton = createFeature(<TEntry extends DataGridEntry>() => {\n * return {\n * name: MY_FEATURE,\n * header: {\n * actions: (column) => [\n * {\n * iconComponent: h('button', { onClick: (column) => console.log(`Clicked on ${column}`) },),\n * },\n * ],\n * },\n * };\n * });\n * ```\n */\nexport function createFeature<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we use any for simplicity\n TFeature extends DataGridFeature<any, any, any>,\n T extends CheckDataGridFeature<TFeature>,\n>(featureDefinition: T) {\n return featureDefinition;\n}\n\ntype CheckDataGridFeature<T> =\n T extends DataGridFeature<infer A, TypeRenderMap<infer A>, infer C>\n ? DataGridFeature<A, TypeRenderMap<A>, C>\n : never;\n\nexport type UseDataGridFeaturesOptions<\n TEntry extends DataGridEntry,\n TColumnGroup extends ColumnGroupConfig,\n TTypes extends ColumnConfigTypeOption<PropertyKey, unknown>,\n> = {\n columnConfig: MaybeRefOrGetter<ColumnConfig<TEntry, TColumnGroup, TTypes>[]>;\n i18n: OnyxI18n;\n columnGroups: MaybeRefOrGetter<TColumnGroup>;\n async: Readonly<Ref<boolean>>;\n skeleton: DataGridFeatureContext[\"skeleton\"];\n};\n\nexport const createTableColumnGroups = <\n TEntry extends DataGridEntry,\n TColumnGroup extends ColumnGroupConfig,\n>(\n columns?: InternalColumnConfig<TEntry, TColumnGroup>[],\n columnGroups?: ColumnGroupConfig,\n) => {\n // Only if there is at least a single column group defined.\n if (!columns?.some((c) => c.columnGroupKey)) {\n return undefined;\n }\n\n /** Remember start of the current group */\n let currentStart = 0;\n const result: TableColumnGroup[] = [];\n\n for (let i = 1; i <= columns.length; i++) {\n const element = columns[i];\n const currentKey = columns[currentStart]?.columnGroupKey ?? \"\";\n // When it's the last iteration or the current group key changed:\n if (i === columns.length || element?.columnGroupKey !== currentKey) {\n // add a new TableColumnGroup\n result.push({\n key: currentKey,\n span: i - currentStart,\n header: columnGroups?.[currentKey as string]?.label ?? String(currentKey),\n });\n currentStart = i;\n }\n }\n return result;\n};\n\n/**\n * Uses the defined datagrid features to provide factory functions.\n * These factories are to be used to map data and configuration to `OnyxDataGridRenderer` properties.\n * The properties are then used to render the data grid.\n *\n * Make use of the `watchSources` to trigger re-rendering when state changes occur.\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * // ...\n * // imports, props, emits, etc.\n * const withHeaderButton = useDataGridHeaderButton<TEntry>();\n *\n * const { watchSources, createRendererRows, createRendererColumns } = useDataGridFeatures([withHeaderButton]);\n *\n * const renderCols: Ref<DataGridRendererColumn<TEntry, object>[]> = ref([]);\n * const renderRows: Ref<DataGridRendererRow<TEntry, DataGridMetadata>[]> = ref([]);\n *\n * const { columns, data } = toRefs(props);\n *\n * watch(\n * [columns, data, ...watchSources],\n * ([newColumns, newData]) => {\n * renderCols.value = createRendererColumns(newColumns);\n * renderRows.value = createRendererRows(newData, newColumns);\n * },\n * { immediate: true },\n * );\n * </script>\n * <template>\n * <OnyxDataGridRenderer :columns=\"renderCols\" :rows=\"renderRows\" />\n * </template>\n * ```\n */\nexport const useDataGridFeatures = <\n TEntry extends DataGridEntry,\n TFeatureName extends symbol,\n TTypeRenderer extends TypeRenderMap<TEntry>,\n TColumnGroup extends ColumnGroupConfig,\n TTypes extends ColumnConfigTypeOption<PropertyKey, unknown>,\n // Intersection with the empty array is necessary for TypeScript to infer the array entries as tuple values instead of an array\n // e.g. (Feature1 | Feature2)[] vs. [Feature1, Feature2]\n // The inference of tuple values allows us to create types that are more precise\n T extends DataGridFeature<TEntry, TTypeRenderer, TFeatureName>[] | [],\n>(\n featureDefinitions: T,\n {\n i18n,\n columnConfig,\n columnGroups,\n async,\n skeleton,\n }: UseDataGridFeaturesOptions<TEntry, TColumnGroup, TTypes>,\n) => {\n const features = featureDefinitions.map((f) => f({ async, i18n, skeleton }));\n\n const columnMappings = computed(() =>\n prepareMapping<InternalColumnConfig<TEntry>[], typeof features, \"modifyColumns\">(\n features,\n \"modifyColumns\",\n ),\n );\n\n const columns = computed(() => {\n const normalized = toValue(columnConfig).map<InternalColumnConfig<TEntry>>((c) => {\n const obj = typeof c !== \"object\" ? { key: c } : c;\n return {\n ...obj,\n label: obj.label ?? String(obj.key),\n type: typeof obj.type === \"object\" ? obj.type : { name: obj.type ?? \"string\" },\n };\n });\n return applyMapping(columnMappings.value, normalized);\n });\n\n const renderer = computed(() => createRenderer(features));\n\n const createRendererColumnGroups = () =>\n createTableColumnGroups(columns.value, toValue(columnGroups));\n\n const createScrollContainerAttributes = () =>\n mergeVueProps(\n ...features.map(({ scrollContainerAttributes }) => scrollContainerAttributes?.()),\n );\n\n const createRendererColumns = (): DataGridRendererColumn<TEntry>[] => {\n const headerFeatures = features.map((feature) => feature.header).filter((header) => !!header);\n const headerActions = headerFeatures\n .map((feature) => feature.actions)\n .filter((actions) => !!actions);\n const headerWrappers = headerFeatures\n .map((feature) => feature.wrapper)\n .filter((wrapper) => !!wrapper);\n\n return columns.value.map<DataGridRendererColumn<TEntry>>((column, i, all) => {\n const actions = headerActions.flatMap((actionFactory) => actionFactory(column, i, all));\n const header = renderer.value.getFor(\"header\", column.type.name);\n\n const menuItems = actions.map(({ menuItems }) => menuItems).filter((item) => !!item);\n const iconComponent = actions.map(({ iconComponent }) => iconComponent);\n\n const flyoutMenu = h(\n OnyxFlyoutMenu,\n {\n label: i18n.t.value(\"navigation.moreActionsFlyout\", { column: column.label }),\n trigger: \"click\",\n },\n {\n button: ({ trigger }) =>\n h(OnyxSystemButton, {\n class: actions.length > 1 ? \"onyx-system-button--multiple-actions\" : \"\",\n label: i18n.t.value(\"navigation.moreActionsTrigger\"),\n color: \"medium\",\n icon: iconMoreHorizontalSmall,\n ...trigger,\n }),\n options: () => menuItems,\n } satisfies ComponentSlots<typeof OnyxFlyoutMenu>,\n );\n\n const actionsSlot = {\n actions: () => {\n // normalizing the iconComponents from Component to {iconComponent: Component}\n const iconsArray = asArray(iconComponent);\n const normalizedIcons = iconsArray.map((ic) => {\n if (typeof ic === \"object\" && \"iconComponent\" in ic) {\n return ic;\n }\n return { iconComponent: ic };\n });\n\n const headerIcons = normalizedIcons\n .filter((ic) => ic?.alwaysShowInHeader)\n .map((ic) => ic.iconComponent);\n\n const nonHeaderIcon =\n normalizedIcons.find((ic) => !ic.alwaysShowInHeader)?.iconComponent ?? null;\n\n const filteredActions = actions.filter(\n (action) =>\n !(action.iconComponent as { alwaysShowInHeader?: boolean })?.alwaysShowInHeader,\n );\n\n const shouldShowFlyout =\n filteredActions.length > 1 || actions.some((action) => action.showFlyoutMenu);\n\n return [\n ...(shouldShowFlyout ? headerIcons : []),\n shouldShowFlyout ? flyoutMenu : nonHeaderIcon,\n ].filter(Boolean);\n },\n };\n\n const wrapper = headerWrappers.reduce<Component>(\n (acc, component) => {\n return h(component(column, i, all), acc);\n },\n (props) => h(header.component, { label: column.label, ...props }, actionsSlot),\n );\n return {\n thAttributes: mergeVueProps(header.thAttributes, column.thAttributes),\n key: column.key,\n width: column.width,\n component: () => h(wrapper),\n };\n });\n };\n\n const createRendererRows = (\n entries: TEntry[],\n ): DataGridRendererRow<TEntry, DataGridMetadata>[] => {\n const mutations = features\n .map((feature) => feature.mutation)\n .filter((mutation) => !!mutation)\n .sort((a, b) => (b.order ?? 0) - (a.order ?? 0));\n\n // make a copy of entries and apply all mutations to it\n let shallowCopy = [...entries];\n mutations.forEach(({ func }) => {\n const result = func(shallowCopy);\n if (result) shallowCopy = result;\n });\n\n return shallowCopy.map((row) => {\n const columnsToRender = row[DataGridRowOptionsSymbol]?.columns ?? columns.value;\n\n const cells = columnsToRender.reduce<DataGridRendererRow<TEntry, DataGridMetadata>[\"cells\"]>(\n (cells, { key, type, tdAttributes }) => {\n const cellRenderer = renderer.value.getFor(\"cell\", type.name);\n cells[key] = {\n component: cellRenderer.component,\n props: {\n key,\n row,\n modelValue: row[key],\n metadata: { typeOptions: type.options },\n },\n tdAttributes: mergeVueProps(tdAttributes, cellRenderer.tdAttributes),\n };\n return cells;\n },\n {},\n );\n\n return {\n id: row.id,\n trAttributes: row[DataGridRowOptionsSymbol]?.trAttributes,\n columns: columnsToRender,\n cells,\n };\n });\n };\n\n const createSlots = () => {\n const slots: InternalDataGridSlots = {};\n\n features.forEach((feature) => {\n if (!feature.slots) return;\n\n Object.entries(feature.slots).forEach(([_slotName, slotFunc]) => {\n const slotName = _slotName as keyof typeof feature.slots;\n const existingSlot = slots[slotName] ?? (() => []);\n const newSlotContent = slotFunc(existingSlot).filter((vnode) => vnode != undefined);\n if (newSlotContent.length) {\n slots[slotName] = () => newSlotContent;\n }\n });\n });\n\n return slots;\n };\n\n const watchSources: WatchSource[] = features.flatMap((f) => f.watch ?? []);\n\n return {\n /**\n * Takes the table attributes and maps all\n */\n createScrollContainerAttributes,\n /** Uses the column definition and available column group config to generate the column groups for the underlying OnyxTable */\n createRendererColumnGroups,\n /** Takes the column definition and maps all, calls mutation func and maps at the end to RendererCell */\n createRendererRows,\n /** Takes the column definition and creates a RenderHeader for each, adds actions from features */\n createRendererColumns,\n /** Uses all features and generates the content of the additional table slots (headline, pagination etc.) for the underlying OnyxTable */\n createSlots,\n // the combined `watch` for all features\n watchSources,\n };\n};\n\nexport const useFeatureContext = (\n ctx: DataGridFeatureContext,\n options?: DataGridFeatureOptions<DataGridEntry, object, boolean>,\n) => {\n const isEnabled = computed(() => {\n return (column?: PropertyKey) => {\n const columns = toValue(options?.columns);\n const defaultEnabled = toValue(options?.enabled) ?? true;\n const isColumnEnabled = column != undefined ? columns?.[column]?.enabled : undefined;\n return isColumnEnabled ?? defaultEnabled;\n };\n });\n\n const isAsync = computed(() => (options as { async?: boolean })?.async ?? ctx.async.value);\n\n return {\n /**\n * Checks whether a data grid feature is enabled for a given column.\n * Considers the feature defaults as well as column-specific overrides.\n *\n * @default true\n */\n isEnabled,\n /**\n * Whether the feature only or all features have data transformations enabled.\n */\n isAsync,\n };\n};\n","import { iconSearchX } from \"@sit-onyx/icons\";\nimport { computed, h, toRef, toValue, type Ref } from \"vue\";\nimport type { Nullable } from \"../../../../types/index.js\";\nimport { removeDiacritics } from \"../../../../utils/strings.js\";\nimport OnyxMiniSearch from \"../../../OnyxMiniSearch/OnyxMiniSearch.vue\";\nimport type { OnyxMiniSearchProps } from \"../../../OnyxMiniSearch/types.js\";\nimport OnyxSystemButton from \"../../../OnyxSystemButton/OnyxSystemButton.vue\";\nimport type { DataGridEntry } from \"../../types.js\";\nimport { createFeature, useFeatureContext } from \"../index.js\";\nimport \"./filtering.scss\";\nimport type { FilterOptions, FilterState } from \"./types.js\";\n\nexport const FILTERING_FEATURE = Symbol(\"Filtering\");\nexport const FILTERING_MUTATION_ORDER = 0;\n\nexport const useFiltering = <TEntry extends DataGridEntry>(options?: FilterOptions<TEntry>) =>\n createFeature((ctx) => {\n const { i18n } = ctx;\n const filterState = toRef(options?.filterState ?? {}) as Ref<FilterState<DataGridEntry>>;\n const config = computed(() => toValue(options?.columns));\n const { isEnabled, isAsync } = useFeatureContext(ctx, options);\n\n const filterData = (entries: Readonly<TEntry>[]) => {\n if (isAsync.value) {\n return entries;\n }\n return entries.filter((entry) =>\n Object.entries(filterState.value).every(\n ([column, value]: [keyof TEntry, string | undefined]) => {\n const columnOptions = config.value?.[column];\n const filterOptions = { ...options?.filterConfig, ...columnOptions?.config };\n\n if (value == null || value === \"\") return true;\n let searchTerm = value.toString();\n let entryValue = entry[column]?.toString() ?? \"\";\n if (filterOptions?.filterFunc) {\n return filterOptions.filterFunc(\n searchTerm,\n entryValue as TEntry[keyof TEntry],\n column,\n entry,\n );\n }\n entryValue = removeDiacritics(entryValue);\n searchTerm = removeDiacritics(searchTerm);\n if (!filterOptions.caseSensitive) {\n entryValue = entryValue.toLowerCase();\n searchTerm = searchTerm.toLowerCase();\n }\n if (filterOptions.searchFromStart) {\n return entryValue.startsWith(searchTerm);\n }\n if (filterOptions.exactMatch) {\n return entryValue === searchTerm;\n }\n\n return entryValue.includes(searchTerm);\n },\n ),\n );\n };\n\n const clearFilter = (column: keyof DataGridEntry) => {\n filterState.value[column] = \"\";\n };\n\n const getMenuItem = (column: keyof DataGridEntry) => {\n let inputValue = filterState.value[column] || \"\";\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n filterState.value[column] = inputValue;\n }\n };\n\n return h(OnyxMiniSearch, {\n label: i18n.t.value(\"dataGrid.head.filtering.menu.label\", { column: column.toString() }),\n class: \"onyx-filter-search\",\n placeholder: i18n.t.value(`dataGrid.head.filtering.menu.placeholder`),\n modelValue: inputValue,\n // TODO: check after https://github.com/SchwarzIT/onyx/issues/2982 is closed -- `autofocus` doesn't have an effect currently\n autofocus: true,\n \"onUpdate:modelValue\": (value?: Nullable<string>) => {\n inputValue = value || \"\";\n },\n onClear: () => {\n filterState.value[column] = \"\";\n inputValue = \"\";\n },\n onChange: () => (filterState.value[column] = inputValue),\n onKeydown: handleKeyDown,\n onClick: (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n },\n } satisfies OnyxMiniSearchProps & Record<string, unknown>);\n };\n\n return {\n name: FILTERING_FEATURE,\n watch: [filterState, config],\n mutation: {\n func: filterData,\n order: FILTERING_MUTATION_ORDER,\n },\n header: {\n actions: ({ key: column }) => {\n if (!isEnabled.value(column)) return [];\n return [\n {\n iconComponent: filterState.value[column]\n ? {\n iconComponent: h(OnyxSystemButton, {\n label: i18n.t.value(\"dataGrid.head.filtering.removeLabel\", {\n column: column.toString(),\n }),\n icon: iconSearchX,\n color: \"medium\",\n onClick: () => clearFilter(column),\n }),\n alwaysShowInHeader: true,\n }\n : undefined,\n menuItems: [getMenuItem(column)],\n showFlyoutMenu: true,\n },\n ];\n },\n },\n };\n });\n","import { readonly, ref, unref, watchEffect, type Directive, type MaybeRef, type Ref } from \"vue\";\n\nexport type UseScrollEndOptions = {\n /**\n * Whether the scroll container is currently loading. Will pause scroll listeners if `true`.\n */\n loading: Ref<boolean | undefined>;\n /**\n * Whether scroll events should be captured.\n * Can be disabled if lazy loading is not needed to improve performance.\n *\n * @default true\n */\n enabled?: Ref<boolean>;\n /**\n * Offset (in pixel). Can be used to trigger the callback earlier (e.g. if scrolled to second last option).\n * Must be >= 0.\n */\n offset?: MaybeRef<number | undefined>;\n};\n\n/**\n * Directive used for lazy loading which will keep track of whether the component is scrolled to the end (vertically).\n */\nexport const useScrollEnd = (options: UseScrollEndOptions) => {\n /**\n * We have to check if the scroll amount is close enough to some threshold in order to\n * more accurately calculate arrivedState. This is because scrollTop/scrollLeft are non-rounded\n * numbers, while scrollHeight/scrollWidth and clientHeight/clientWidth are rounded.\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled\n */\n const ARRIVED_STATE_THRESHOLD_PIXELS = 1 as const;\n\n /**\n * Whether the component is scrolled to the end (vertically).\n */\n const isScrollEnd = ref(false);\n\n /**\n * Updates the isScrollEnd depending on the event targets scroll position.\n */\n const handleScroll = (event: Event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n\n const offset = unref(options.offset) ?? 0;\n\n isScrollEnd.value =\n Math.abs(target.scrollTop) + target.clientHeight >=\n target.scrollHeight - offset - ARRIVED_STATE_THRESHOLD_PIXELS;\n };\n\n const vScrollEnd = {\n mounted: (el) => {\n watchEffect(() => {\n const isEnabled = options.enabled?.value ?? true;\n\n if (isEnabled && !options.loading.value) {\n el.addEventListener(\"scroll\", handleScroll);\n } else {\n el.removeEventListener(\"scroll\", handleScroll);\n }\n });\n },\n } satisfies Directive<Pick<HTMLElement, \"addEventListener\" | \"removeEventListener\">, undefined>;\n\n return { vScrollEnd, isScrollEnd: readonly(isScrollEnd) };\n};\n","/**\n * Applies minimum and maximum limits to a given number.\n *\n * @param number - The number to limit.\n * @param min - The minimum value allowed, or `undefined` for no minimum limit.\n * @param max - The maximum value allowed, or `undefined` for no maximum limit.\n * @returns The adjusted number, constrained within the specified min and max bounds.\n */\nexport const applyLimits = (\n number: number,\n min: number | undefined,\n max: number | undefined,\n): number => {\n const minLimit = min ?? -Infinity;\n const maxLimit = max ?? Infinity;\n return Math.min(Math.max(number, minLimit), maxLimit);\n};\n\n/**\n * Rounds a number to a specified precision and returns it as a string.\n * Supports both decimal and whole-number rounding based on the precision provided.\n *\n * @param value - The number to round, or `undefined` to return an empty string.\n * @param precision - The number of decimal places for rounding (e.g., 0.01 for 2 decimals). Can also be negative.\n * @returns The rounded number as a string. Returns an empty string if `value` is `undefined`.\n */\nexport const roundToPrecision = (value: number | undefined, precision: number): string => {\n if (value == undefined) return \"\";\n if (precision >= 0) return value.toFixed(precision);\n const factor = Math.pow(10, precision);\n return (Math.round(value * factor) / factor).toString();\n};\n\n/**\n * Data size (with binary prefix). Represents a multiple of 1024 bytes.\n *\n * @example \"4MiB\" = 4 * 1024 * 1024 = 4_194_304 bytes\n */\nexport type BinaryPrefixedSize = `${number}${IECPrefixSymbol}B`;\n\n/**\n * IEC prefix symbols.\n *\n * @see https://en.wikipedia.org/wiki/Binary_prefix\n */\nexport const IEC_PREFIX_SYMBOLS = [\n \"Ki\",\n \"Mi\",\n \"Gi\",\n \"Ti\",\n \"Pi\",\n \"Ei\",\n \"Zi\",\n \"Yi\",\n \"Ri\",\n \"Qi\",\n] as const;\n\n/**\n * IEC prefix symbol.\n *\n * @see https://en.wikipedia.org/wiki/Binary_prefix\n */\nexport type IECPrefixSymbol = (typeof IEC_PREFIX_SYMBOLS)[number];\n\n/**\n * Converts a [binary prefixed size](https://en.wikipedia.org/wiki/Binary_prefix) to its decimal representation in bytes.\n */\nexport const convertBinaryPrefixToBytes = (size: BinaryPrefixedSize | number): number => {\n if (typeof size === \"number\") {\n return size;\n }\n const prefixSymbol = size.substring(size.length - 3, size.length - 1) as IECPrefixSymbol;\n const power = IEC_PREFIX_SYMBOLS.indexOf(prefixSymbol) + 1;\n const multiplier = +size.substring(0, size.length - 3);\n return multiplier * 1024 ** power;\n};\n\n/**\n * Formats the given number of bytes into a string using `Intl.NumberFormatter`.\n *\n * The native `Intl.NumberFormatter` displays 1GB as 1BB (billion bytes) etc. so this formatter fixes this to correctly display gigabyte, terabyte and petabyte.\n */\nexport const formatBytesToString = (locale: string, bytes: number) => {\n const supportedUnits = [\"byte\", \"kilobyte\", \"megabyte\", \"gigabyte\", \"terabyte\", \"petabyte\"];\n\n // find out which power of 1024 to use for the given number of bytes\n // e.g. 1 = KB, 2 = MB, 3 = GB etc.\n let power = bytes == 0 ? 0 : Math.floor(Math.log(bytes) / Math.log(1024));\n power = Math.min(power, supportedUnits.length - 1);\n const value = bytes / Math.pow(1024, power);\n\n const unit = supportedUnits[power];\n\n return new Intl.NumberFormat(locale, {\n style: \"unit\",\n unit,\n unitDisplay: \"narrow\",\n }).format(value);\n};\n","import { computed, type Ref } from \"vue\";\n\n/**\n * All possible `showError` values.\n */\nexport const ShowErrorModes = [true, false, \"touched\"] as const;\n\n/**\n * Configures if and when errors are shown.\n * When `true`, errors will be shown initially.\n * When `false`, errors will never be shown.\n * `\"touched\"` only shows an error *after* a user has significantly interacted with the input.\n * See [:user-invalid](https://drafts.csswg.org/selectors/#user-invalid-pseudo).\n */\nexport type ShowErrorMode = (typeof ShowErrorModes)[number];\n\nexport const useErrorClass = (showError: Readonly<Ref<ShowErrorMode>>) =>\n computed(() => {\n if (showError.value === true) {\n return \"onyx-form-element--immediate-invalid\";\n }\n if (showError.value === false) {\n return \"onyx-form-element--suppress-invalid\";\n }\n return \"onyx-form-element--touched-invalid\";\n });\n","<script setup lang=\"ts\">\nimport type { FormMessages } from \"../../composables/useCustomValidity.js\";\nimport OnyxInfoTooltip from \"../OnyxInfoTooltip/OnyxInfoTooltip.vue\";\nimport OnyxVisuallyHidden from \"../OnyxVisuallyHidden/OnyxVisuallyHidden.vue\";\n\nconst props = defineProps<{\n /**\n * Message to display.\n */\n messages: FormMessages;\n /**\n * How the message should be colored and displayed.\n */\n type: \"danger\" | \"success\" | \"neutral\";\n}>();\n</script>\n\n<template>\n <component\n :is=\"messages.hidden ? OnyxVisuallyHidden : 'span'\"\n :class=\"['onyx-component', 'onyx-form-message', `onyx-form-message__${props.type}`]\"\n >\n <span :class=\"['onyx-truncation-ellipsis']\">\n {{ props.messages.shortMessage }}\n </span>\n <OnyxInfoTooltip\n v-if=\"props.messages.longMessage\"\n class=\"onyx-form-message__tooltip\"\n position=\"bottom\"\n trigger=\"hover\"\n :color=\"props.type\"\n :text=\"props.messages.longMessage\"\n />\n </component>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-form-message {\n @include layers.component() {\n display: inline-flex;\n gap: var(--onyx-spacing-2xs);\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"T\">\nimport { computed, useId } from \"vue\";\nimport { useRequired } from \"../../composables/required.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport type { Nullable } from \"../../types/index.js\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxInfoTooltip from \"../OnyxInfoTooltip/OnyxInfoTooltip.vue\";\nimport FormMessage from \"./FormMessage.vue\";\nimport type { OnyxFormElementProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxFormElementProps<T>>(), {\n required: false,\n requiredMarker: FORM_INJECTED_SYMBOL,\n id: () => useId(),\n});\n\nconst emit = defineEmits<{\n \"update:modelValue\": [value?: Nullable<T>];\n}>();\n\nconst { requiredMarker } = useFormContext(props);\nconst { requiredMarkerClass, requiredTypeClass } = useRequired(props, requiredMarker);\n\n/**\n * Current value of the input.\n */\nconst modelValue = useVModel({\n props,\n emit,\n key: \"modelValue\",\n});\n\nconst counter = computed(() => {\n if (props.withCounter && props.maxlength) {\n const length = (modelValue.value?.toString() ?? \"\").length;\n const maxLength = typeof props.maxlength === \"object\" ? props.maxlength.max : props.maxlength;\n const violated = length > maxLength;\n\n return {\n length,\n maxLength,\n violated,\n };\n }\n return undefined;\n});\n\ndefineSlots<{\n /** The place for the actual form element */\n default(props: { id: string }): unknown;\n}>();\n\n/**\n * All footer related props. Used as convenience because if all properties are undefined, undefined itself will be returned instead of an empty object.\n * So the footer can easily be hidden when no relevant props are set.\n */\nconst footer = computed(() => {\n const { errorMessages, successMessages, message } = props;\n\n const data = {\n counter: counter.value,\n errorMessages,\n successMessages,\n message,\n };\n\n for (const key in data) {\n const _key = key as keyof typeof data;\n // remove nullish keys from object\n if (data[_key] == undefined) delete data[_key];\n }\n\n if (Object.keys(data).length === 0) return undefined;\n return data;\n});\n</script>\n\n<template>\n <div\n :class=\"[\n 'onyx-component',\n 'onyx-form-element',\n requiredTypeClass,\n successMessages ? 'onyx-form-element--success' : undefined,\n ]\"\n >\n <div v-if=\"!props.hideLabel\" class=\"onyx-form-element__label onyx-text--small\">\n <label :for=\"props.id\" class=\"onyx-truncation-ellipsis\">{{ props.label }}</label>\n <span\n v-if=\"props.required\"\n :class=\"[props.required ? requiredMarkerClass : undefined]\"\n ></span>\n <OnyxInfoTooltip\n v-if=\"props.labelTooltip\"\n class=\"onyx-form-element__label-tooltip\"\n trigger=\"hover\"\n :text=\"props.labelTooltip\"\n />\n <span\n v-if=\"!props.required\"\n :class=\"[!props.required ? requiredMarkerClass : undefined]\"\n ></span>\n </div>\n\n <slot :id=\"props.id\"></slot>\n\n <!-- the \"v-if\" here is imported so the footer is not renderer when its empty. This is needed so that other elements (e.g. buttons) are vertically aligned correctly -->\n <div v-if=\"footer\" class=\"onyx-form-element__footer onyx-text--small\">\n <span class=\"onyx-form-element__footer-messages\">\n <FormMessage\n v-if=\"footer.errorMessages\"\n class=\"onyx-form-element__error-message\"\n :messages=\"footer.errorMessages\"\n type=\"danger\"\n />\n <FormMessage\n v-if=\"footer.successMessages\"\n class=\"onyx-form-element__success-message\"\n :messages=\"footer.successMessages\"\n type=\"success\"\n />\n <FormMessage\n v-if=\"footer.message\"\n class=\"onyx-form-element__message\"\n :messages=\"footer.message\"\n type=\"neutral\"\n />\n </span>\n <span\n v-if=\"footer.counter\"\n :class=\"{\n 'onyx-form-element__counter': true,\n 'onyx-form-element__counter--violated': footer.counter.violated,\n }\"\n >\n {{ footer.counter.length }}/{{ footer.counter.maxLength }}\n </span>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-use-optional:not(:has(.onyx-required-marker)) {\n .onyx-form-element__optional {\n display: inline-block;\n }\n}\n\n.onyx-form-element {\n @include layers.component() {\n font-family: var(--onyx-font-family);\n display: flex;\n flex-direction: column;\n gap: var(--onyx-density-3xs);\n\n &__label {\n display: flex;\n align-items: center;\n max-width: 100%;\n width: 100%;\n color: var(--onyx-color-text-icons-neutral-medium);\n\n // optional marker should be displayed at the very end of the label\n & .onyx-optional-marker {\n flex-grow: 1;\n text-align: end;\n }\n }\n\n &__optional {\n display: none;\n font-family: var(--onyx-font-family);\n font-weight: var(--onyx-font-weight-regular);\n font-style: normal;\n color: var(--onyx-color-text-icons-neutral-soft);\n padding-left: var(--onyx-density-xs);\n hyphens: none;\n margin-left: auto;\n }\n\n $footer-gap: var(--onyx-spacing-2xs);\n\n &__label-tooltip {\n margin-left: $footer-gap;\n }\n\n &__footer {\n width: 100%;\n max-width: 100%;\n display: flex;\n justify-content: space-between;\n\n gap: $footer-gap;\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n\n &__footer-messages {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n &__counter {\n max-width: fit-content;\n }\n\n &__counter--violated {\n color: var(--onyx-color-text-icons-danger-intense);\n }\n\n &__error-message,\n &__error-tooltip {\n display: var(--error-message-display, none);\n color: var(--onyx-color-base-danger-500);\n }\n\n &__success-message,\n &__success-tooltip {\n display: var(--success-message-display, flex);\n color: var(--onyx-color-base-success-700);\n }\n\n &__message {\n display: var(--message-display, flex);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TValue extends SelectOptionValue\">\nimport { CLOSING_KEYS, OPENING_KEYS } from \"@sit-onyx/headless\";\nimport { iconCheckSmall, iconChevronDownUp } from \"@sit-onyx/icons\";\nimport { computed, ref, useTemplateRef, watch } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useAutofocus } from \"../../composables/useAutoFocus.js\";\nimport { getFormMessages, useCustomValidity } from \"../../composables/useCustomValidity.js\";\nimport { useErrorClass } from \"../../composables/useErrorClass.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport type { SelectOptionValue } from \"../../types/index.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport OnyxBadge from \"../OnyxBadge/OnyxBadge.vue\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxFormElement from \"../OnyxFormElement/OnyxFormElement.vue\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxLoadingIndicator from \"../OnyxLoadingIndicator/OnyxLoadingIndicator.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport OnyxTooltip from \"../OnyxTooltip/OnyxTooltip.vue\";\nimport type { OnyxSelectInputProps } from \"./types.js\";\n\ndefineOptions({ inheritAttrs: false });\nconst { rootAttrs, restAttrs } = useRootAttrs();\n\nconst props = withDefaults(defineProps<OnyxSelectInputProps>(), {\n hideLabel: false,\n disabled: FORM_INJECTED_SYMBOL,\n showError: FORM_INJECTED_SYMBOL,\n readonly: false,\n loading: false,\n skeleton: SKELETON_INJECTED_SYMBOL,\n hideSuccessIcon: false,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the select input is clicked (and is not disabled).\n */\n inputClick: [];\n /**\n * Emitted when the validity state of the input changes.\n */\n validityChange: [validity: ValidityState];\n}>();\n\nconst { t } = injectI18n();\n\nconst { vCustomValidity, errorMessages } = useCustomValidity({ props, emit });\nconst successMessages = computed(() => getFormMessages(props.success));\nconst messages = computed(() => getFormMessages(props.message));\nconst { disabled, showError } = useFormContext(props);\nconst skeleton = useSkeletonContext(props);\nconst errorClass = useErrorClass(showError);\n\n/**\n * Number of selected options.\n */\nconst selectionCount = computed(() => {\n return props.modelValue ? props.modelValue.length : 0;\n});\n\n/**\n * Selection that will be displayed in the select input field.\n * On single select, it matches the name of the option.\n * On multi select, it is a summary or a preview of the options.\n */\nconst selectionText = computed<string>(() => {\n const numberOfSelections = props.modelValue?.length;\n if (!props.modelValue || !numberOfSelections) return \"\";\n if (numberOfSelections === 1) return props.modelValue[0]!;\n\n switch (props.textMode) {\n case \"preview\":\n return props.modelValue.join(\", \");\n case \"summary\":\n default:\n return t.value(\"selections.currentSelection\", { n: numberOfSelections });\n }\n});\n\n/** used to detect user interaction to simulate the behavior of :user-invalid for the native input */\nconst wasTouched = ref(false);\n\nconst { densityClass } = useDensity(props);\n\nconst input = useTemplateRef(\"inputRef\");\ndefineExpose({ input });\n\n/**\n * As the native input has to be readonly, the :user-invalid will never appear.\n * We need to track user interaction by evaluating whether the flyout was ever closed.\n * After that, we can simulate :user-invalid by checking whether an error is set.\n */\nwatch(\n () => props.showFocus,\n (newValue, oldValue) => {\n // only needs to be set once.\n if (wasTouched.value) return;\n if (oldValue && newValue === false) {\n wasTouched.value = true;\n }\n },\n);\n\nconst navigationalKeys = OPENING_KEYS.concat(CLOSING_KEYS);\n/**\n * We prevent manual user input. The native input inside OnyxSelectInput only represents\n * the label(s) of what is selected in OnyxSelect and shouldn't be overwritten manually.\n * We only allow all pressed keys that handle interaction with the select.\n */\nconst blockTyping = (event: KeyboardEvent) => {\n if (navigationalKeys.includes(event.key)) return;\n\n event.preventDefault();\n};\nuseAutofocus(input, props);\n</script>\n\n<template>\n <div\n v-if=\"skeleton\"\n :class=\"['onyx-component', 'onyx-select-input-skeleton', densityClass]\"\n v-bind=\"rootAttrs\"\n >\n <OnyxSkeleton v-if=\"!props.hideLabel\" class=\"onyx-select-input-skeleton__label\" />\n <OnyxSkeleton class=\"onyx-select-input-skeleton__input\" />\n </div>\n\n <div\n v-else\n :class=\"[\n 'onyx-component',\n 'onyx-select-input',\n densityClass,\n errorClass,\n props.readonly ? 'onyx-select-input--readonly' : 'onyx-select-input--editable',\n ]\"\n v-bind=\"rootAttrs\"\n >\n <OnyxFormElement\n v-bind=\"props\"\n :message=\"messages\"\n :success-messages=\"successMessages\"\n :error-messages=\"errorMessages\"\n >\n <template #default=\"{ id: inputId }\">\n <!-- eslint-disable-next-line vuejs-accessibility/click-events-have-key-events, vuejs-accessibility/no-static-element-interactions -- Disabled rules are needed here, because of the click event. Otherwise clicking on the padding or gap won't open the select -->\n <div\n class=\"onyx-select-input__wrapper\"\n @click=\"!disabled && !props.loading && emit('inputClick')\"\n >\n <OnyxLoadingIndicator\n v-if=\"props.loading\"\n class=\"onyx-select-input__loading\"\n type=\"circle\"\n />\n\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n v-custom-validity\n :class=\"{\n 'onyx-select-input__native': true,\n 'onyx-select-input__native--show-focus': props.showFocus,\n 'onyx-truncation-ellipsis': true,\n 'onyx-select-input__native--touched': wasTouched,\n }\"\n v-bind=\"restAttrs\"\n type=\"text\"\n :readonly=\"props.readonly\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required\"\n :disabled=\"disabled || props.loading\"\n :aria-label=\"props.hideLabel ? props.label : undefined\"\n :title=\"props.hideLabel ? props.label : undefined\"\n :value=\"selectionText\"\n :autofocus=\"props.autofocus\"\n autocomplete=\"off\"\n @keydown=\"blockTyping\"\n />\n\n <!-- TODO: figure out how the tooltip width can be sized to the select-input\n while the trigger arrow needs to point to the badge in the future.\n https://github.com/SchwarzIT/onyx/issues/763 -->\n <OnyxTooltip\n v-if=\"props.textMode === 'preview' && selectionCount > 0\"\n :text=\"selectionText\"\n position=\"bottom\"\n >\n <template #default=\"{ trigger }\">\n <OnyxBadge class=\"onyx-select-input__badge\" v-bind=\"trigger\" color=\"neutral\">\n {{ selectionCount }}\n </OnyxBadge>\n </template>\n </OnyxTooltip>\n\n <button\n class=\"onyx-select-input__button\"\n type=\"button\"\n :aria-label=\"t('select.toggleDropDown')\"\n :title=\"t('select.toggleDropDown')\"\n tabindex=\"-1\"\n :disabled=\"disabled || props.readonly || props.loading\"\n >\n <OnyxIcon :icon=\"iconChevronDownUp\" />\n </button>\n\n <OnyxIcon\n v-if=\"!props.hideSuccessIcon && successMessages\"\n class=\"onyx-select-input__check-icon\"\n :icon=\"iconCheckSmall\"\n color=\"success\"\n />\n </div>\n </template>\n </OnyxFormElement>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"../../styles/mixins/input.scss\";\n\n.onyx-select-input,\n.onyx-select-input-skeleton {\n --onyx-select-input-padding-vertical: var(--onyx-density-xs);\n}\n\n.onyx-select-input {\n @include layers.component() {\n @include input.define-shared-styles(\n $base-selector: \".onyx-select-input\",\n $vertical-padding: var(--onyx-select-input-padding-vertical)\n );\n\n &__native {\n // hide the blinking cursor as we suppress typing\n caret-color: transparent;\n }\n\n .onyx-select-input__wrapper:has(.onyx-select-input__native:enabled) {\n cursor: pointer;\n\n .onyx-select-input__native {\n cursor: pointer;\n }\n }\n\n &__badge {\n display: block;\n cursor: pointer;\n }\n\n &-skeleton {\n @include input.define-skeleton-styles(\n $height: calc(1lh + 2 * var(--onyx-select-input-padding-vertical))\n );\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxListItem from \"../OnyxListItem/OnyxListItem.vue\";\nimport type { OnyxSelectOptionProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxSelectOptionProps>(), {\n active: false,\n multiple: false,\n truncation: \"ellipsis\",\n});\n\ndefineSlots<{\n /**\n * Default slot to place the option label / text content.\n */\n default(): unknown;\n}>();\n</script>\n\n<template>\n <OnyxListItem\n class=\"onyx-component onyx-select-option\"\n v-bind=\"props\"\n :checked=\"!!$attrs['aria-checked']\"\n :selected=\"!!$attrs['aria-selected']\"\n :disabled=\"!!$attrs['aria-disabled']\"\n >\n <input\n v-if=\"props.multiple\"\n :checked=\"!!$attrs['aria-checked']\"\n :aria-labelledby=\"$attrs.id as string\"\n :disabled=\"!!$attrs['aria-disabled']\"\n :indeterminate=\"props.indeterminate\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n class=\"onyx-select-option__checkbox\"\n type=\"checkbox\"\n />\n\n <OnyxIcon v-if=\"props.icon\" :icon=\"props.icon\" />\n\n <span :class=\"[`onyx-truncation-${props.truncation}`]\">\n <slot></slot>\n </span>\n </OnyxListItem>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n@use \"../../styles/mixins/checkbox\";\n\n.onyx-select-option {\n @include checkbox.variables();\n\n @include layers.component() {\n &__checkbox {\n // prevent the checkbox to get squished by a long label\n flex-shrink: 0;\n\n @include checkbox.styles();\n }\n }\n}\n</style>\n","<script\n lang=\"ts\"\n setup\n generic=\"\n TModelValue extends SelectOptionValue | SelectOptionValue[],\n TMultiple extends TModelValue extends any[] ? true : false | undefined,\n TValue extends TModelValue extends (infer TInner)[] ? TInner : TModelValue\n \"\n>\nimport { createComboBox, type ComboboxAutoComplete } from \"@sit-onyx/headless\";\nimport {\n computed,\n nextTick,\n ref,\n toRefs,\n useId,\n useTemplateRef,\n watch,\n watchEffect,\n type ComputedRef,\n} from \"vue\";\nimport { useCheckAll } from \"../../composables/checkAll.js\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useScrollEnd } from \"../../composables/scrollEnd.js\";\nimport { useOpenDirection } from \"../../composables/useOpenDirection.js\";\nimport { SKELETON_INJECTED_SYMBOL } from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport type { Nullable, SelectOptionValue } from \"../../types/index.js\";\nimport { asArray, groupByKey, transformGroupedData } from \"../../utils/objects.js\";\nimport { normalizedIncludes } from \"../../utils/strings.js\";\nimport OnyxBasicPopover from \"../OnyxBasicPopover/OnyxBasicPopover.vue\";\nimport OnyxEmpty from \"../OnyxEmpty/OnyxEmpty.vue\";\nimport { FORM_INJECTED_SYMBOL } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxLoadingIndicator from \"../OnyxLoadingIndicator/OnyxLoadingIndicator.vue\";\nimport OnyxMiniSearch from \"../OnyxMiniSearch/OnyxMiniSearch.vue\";\nimport OnyxSelectInput from \"../OnyxSelectInput/OnyxSelectInput.vue\";\nimport type { OnyxSelectInputProps } from \"../OnyxSelectInput/types.js\";\nimport OnyxSelectOption from \"../OnyxSelectOption/OnyxSelectOption.vue\";\nimport type { OnyxSelectProps, SelectOption } from \"./types.js\";\n\ntype Props = OnyxSelectProps<TModelValue, TMultiple, TValue>;\n\nconst props = withDefaults(defineProps<Props>(), {\n loading: false,\n noFilter: false,\n skeleton: SKELETON_INJECTED_SYMBOL,\n showError: FORM_INJECTED_SYMBOL,\n requiredMarker: FORM_INJECTED_SYMBOL,\n disabled: FORM_INJECTED_SYMBOL,\n modelValue: undefined,\n readonly: false,\n truncation: \"ellipsis\",\n valueLabel: undefined,\n alignment: \"full\",\n open: undefined,\n keepSelectionOrder: false,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted if lazy loading is triggered / the users scrolls to the end of the options.\n * See property `lazyLoading` for enabling the lazy loading.\n */\n lazyLoad: [];\n /**\n * Emitted when the validity state of the input changes.\n */\n validityChange: [validity: ValidityState];\n /**\n * Emitted when a search term is inputted\n */\n \"update:searchTerm\": [value: string];\n /**\n * Emitted when an option is selected\n */\n \"update:modelValue\": [value?: Nullable<TModelValue>];\n /**\n * Emitted when the open state changes\n */\n \"update:open\": [value: boolean];\n}>();\n\nconst slots = defineSlots<{\n /**\n * Optional slot to customize the empty state when no options exist.\n * It is recommended to use the `<OnyxEmpty>` component here.\n *\n * If unset, a default translated message will be displayed for the current locale.\n */\n empty?(props: { defaultMessage: string }): unknown;\n /**\n * Optional slot that is displayed below all options that can be used\n * to e.g. show a button to load more options instead of lazy loading on scroll.\n */\n optionsEnd?(): unknown;\n /**\n * Optional slot to override the option content.\n */\n option?(props: SelectOption<TValue>): unknown;\n}>();\n\nconst { t } = injectI18n();\nconst { densityClass } = useDensity(props);\n\n/**\n * Value of the currently selected option or an array of values when the `multiple` prop is `true`.\n */ const modelValue = useVModel<Props, \"modelValue\">({\n props,\n emit,\n key: \"modelValue\",\n});\n\n/**\n * Value of the search input, when `withSearch` is `true`.\n *\n * Hint: Cover `valueLabel` to prevent the disappearance of the current selections label\n */\nconst searchTerm = useVModel<Props, \"searchTerm\", string>({\n props,\n emit,\n key: \"searchTerm\",\n default: \"\",\n});\n\n/**\n * If true, the select popover is expanded and visible.\n */\nconst open = useVModel<Props, \"open\", boolean>({\n props,\n emit,\n key: \"open\",\n default: false,\n});\n\nconst select = useTemplateRef<HTMLElement>(\"selectRef\");\nconst { openDirection, updateOpenDirection } = useOpenDirection(select);\n\n/**\n * Currently (visually) active value.\n */\nconst activeValue = ref<TValue>();\n\n/**\n * Current value but always as array (even if not multiselect) so it is easier\n * to work with it in a unified way.\n */\nconst arrayValue = computed(() => asArray(modelValue.value)) as ComputedRef<TValue[]>;\n\n/**\n * Contains an array of labels that will be shown in the OnyxSelectInput.\n * - contains props.valueLabel as array if it is set\n * - else, contains all found labels of the options that match the current modelValue\n */\nconst selectionLabels = computed(() => {\n // given state\n if (props.valueLabel !== undefined) {\n return asArray(props.valueLabel);\n }\n // managed state\n return arrayValue.value.reduce<string[]>((acc, current) => {\n const foundLabel = props.options.find(({ value }) => value === current)?.label;\n if (foundLabel) acc.push(foundLabel);\n return acc;\n }, []);\n});\n\nconst miniSearch = useTemplateRef(\"miniSearchRef\");\nconst selectInput = useTemplateRef(\"selectInputRef\");\n\nconst filteredOptions = computed(() => {\n // if onyx does not manage the search or no searchTerm is given, we don't filter the options further\n if (props.noFilter || !searchTerm.value) return props.options;\n\n return props.options.filter(({ label }: SelectOption) =>\n normalizedIncludes(label, searchTerm.value),\n );\n});\n\n/**\n * Sync the active option with the selected option on single select.\n */\nwatch(\n arrayValue,\n () => {\n if (!props.multiple) {\n activeValue.value = arrayValue.value.at(0);\n }\n },\n { immediate: true },\n);\n\n/** unique ID to identify the `select all` checkbox */\nconst CHECK_ALL_ID = useId() as TValue;\n\n/**\n * IDs of all options that can be navigated with the keyboard.\n * Includes \"select all\" up front if it is used.\n */\nconst allKeyboardOptionIds = computed(() => {\n return (props.multiple && props.withCheckAll && !searchTerm.value ? [CHECK_ALL_ID] : []).concat(\n enabledOptionValues.value,\n );\n});\n\nconst onToggle = async (preventFocus?: boolean) => {\n const groupedByKey = groupByKey<SelectOption<TValue>, \"group\">(\n getOptionsWithGroupForSelected(),\n \"group\",\n );\n\n if (props.keepSelectionOrder) {\n groupedOptions.value = transformGroupedData<SelectOption<TValue>, \"group\">(groupedByKey);\n } else {\n groupedOptions.value = transformGroupedData<SelectOption<TValue>, \"group\">(\n groupedByKey,\n t.value(\"selections.selectGroup\"),\n );\n }\n\n if (props.readonly) {\n open.value = false;\n return;\n }\n const wasOpen = open.value;\n open.value = !wasOpen;\n await nextTick();\n\n if (open.value) updateOpenDirection();\n\n // if with managed `open` state after one tick the state was not updated,\n // we don't modify our focus state, because we assume that\n // the owner did not update `open` on purpose\n if (wasOpen !== open.value) {\n if (wasOpen) {\n if (searchTerm.value) searchTerm.value = \"\";\n if (!preventFocus) selectInput.value?.input?.focus();\n } else {\n // make sure search is focused after the flyout opened\n miniSearch.value?.focus();\n }\n }\n};\n\nconst onActivateFirst = () => (activeValue.value = allKeyboardOptionIds.value.at(0));\nconst onActivateLast = () => (activeValue.value = allKeyboardOptionIds.value.at(-1));\n\nconst onActivateNext = (currentValue: TValue) => {\n const currentIndex = allKeyboardOptionIds.value.findIndex((i) => i === currentValue);\n if (currentIndex < allKeyboardOptionIds.value.length - 1) {\n activeValue.value = allKeyboardOptionIds.value[currentIndex + 1];\n }\n};\n\nconst onActivatePrevious = (currentValue: TValue) => {\n const currentIndex = allKeyboardOptionIds.value.findIndex((i) => i === currentValue);\n if (currentIndex > 0) activeValue.value = allKeyboardOptionIds.value[currentIndex - 1];\n};\n\nconst onTypeAhead = (label: string) => {\n const firstMatch = filteredOptions.value.find((i) => {\n return i.label.toLowerCase().trim().startsWith(label.toLowerCase());\n });\n if (!firstMatch) return;\n activeValue.value = firstMatch.value;\n};\n\nconst onAutocomplete = (inputValue: string) => (searchTerm.value = inputValue);\n\nconst onSelect = (selectedOption: TValue) => {\n if (selectedOption === CHECK_ALL_ID) {\n checkAll.value?.handleChange(!checkAll.value.state.value.modelValue);\n return;\n }\n const newValue = filteredOptions.value.find(({ value }) => value === selectedOption);\n if (!newValue) {\n return;\n }\n if (!props.multiple) {\n modelValue.value = selectedOption as unknown as TModelValue;\n return;\n }\n\n // add or remove value depending on whether its already selected\n const alreadyInList = arrayValue.value.some((value) => value === selectedOption);\n if (alreadyInList) {\n modelValue.value = arrayValue.value.filter(\n (value) => value !== selectedOption,\n ) as unknown as TModelValue;\n } else {\n modelValue.value = [...arrayValue.value, selectedOption] as unknown[] as TModelValue;\n }\n};\n\nconst autocomplete = computed<ComboboxAutoComplete>(() => (props.withSearch ? \"list\" : \"none\"));\n\nconst { label, listLabel, listDescription, multiple } = toRefs(props);\n\nconst {\n elements: { input, option: headlessOption, group: headlessGroup, listbox },\n} = createComboBox({\n autocomplete,\n label,\n listLabel,\n listDescription,\n multiple,\n activeOption: computed(() => activeValue.value),\n isExpanded: open,\n templateRef: select,\n onToggle,\n onActivateFirst,\n onActivateLast,\n onActivateNext,\n onActivatePrevious,\n onTypeAhead,\n onAutocomplete,\n onSelect,\n});\n\nconst getOptionsWithGroupForSelected = () => {\n if (\n props.keepSelectionOrder ||\n !modelValue.value ||\n !Array.isArray(modelValue.value) ||\n modelValue.value.length == 0\n ) {\n return filteredOptions.value;\n }\n const selectedValues = new Set(modelValue.value as TValue[]);\n\n return filteredOptions.value.map((option) => ({\n ...option,\n group: selectedValues.has(option.value) ? t.value(\"selections.selectGroup\") : option.group,\n }));\n};\n\nconst groupedOptions = ref<{ name: string; items: SelectOption<TValue>[] }[]>();\n\nconst { vScrollEnd, isScrollEnd } = useScrollEnd({\n enabled: computed(() => props.lazyLoading?.enabled ?? false),\n loading: computed(() => props.loading),\n offset: computed(() => props.lazyLoading?.scrollOffset),\n});\n\nconst isEmptyMessage = computed(() => {\n if (filteredOptions.value.length) return;\n if (props.withSearch && searchTerm.value) return t.value(\"select.noMatch\");\n return t.value(\"select.empty\");\n});\n\nconst enabledOptionValues = computed(() =>\n filteredOptions.value.filter((i) => !i.disabled).map(({ value }) => value),\n);\n\n/**\n * State and click callback for the `select all` checkbox.\n * Only available when multiple and withCheckAll are set.\n */\nconst checkAll = computed(() => {\n if (!props.multiple || !props.withCheckAll) return undefined;\n return useCheckAll(enabledOptionValues, arrayValue, (newValues: TValue[]) => {\n // with selectedOptions we verify that the options all still exist\n const selectedOptions: TValue[] = newValues\n .map((v) => props.options.find(({ value }) => value === v)?.value)\n .filter((option): option is NonNullable<typeof option> => option != undefined);\n modelValue.value = selectedOptions as unknown[] as TModelValue;\n });\n});\n\nconst checkAllLabel = computed<string>(() => {\n if (!props.multiple) {\n return \"\";\n }\n const defaultText = t.value(\"selections.selectAll\");\n if (typeof props.withCheckAll === \"object\") return props.withCheckAll.label ?? defaultText;\n return defaultText;\n});\n\nwatchEffect(() => {\n if (isScrollEnd.value) emit(\"lazyLoad\");\n});\n\nconst selectInputProps = computed(() => {\n const baseProps: OnyxSelectInputProps = {\n ...props,\n open: undefined, // needed to prevent hydration mismatch in SSR when open prop is MANAGED_SYMBOL\n modelValue: selectionLabels.value,\n };\n if (props.withSearch) return { ...baseProps, onKeydown: input.value.onKeydown };\n return { ...baseProps, ...input.value };\n});\n\ndefineExpose({ input: computed(() => selectInput.value?.input) });\nwatch(\n [filteredOptions],\n () => {\n const groupedByKey = groupByKey<SelectOption<TValue>, \"group\">(\n getOptionsWithGroupForSelected(),\n \"group\",\n );\n\n if (props.keepSelectionOrder) {\n groupedOptions.value = transformGroupedData<SelectOption<TValue>, \"group\">(groupedByKey);\n } else {\n groupedOptions.value = transformGroupedData<SelectOption<TValue>, \"group\">(\n groupedByKey,\n t.value(\"selections.selectGroup\"),\n );\n }\n },\n\n { deep: true, immediate: true },\n);\n</script>\n\n<template>\n <div ref=\"selectRef\" class=\"onyx-component onyx-select-wrapper\">\n <OnyxBasicPopover\n :class=\"densityClass\"\n :label=\"props.listLabel\"\n :position=\"openDirection\"\n :alignment=\"props.alignment === 'full' ? 'center' : props.alignment\"\n :fit-parent=\"props.alignment === 'full'\"\n :open=\"open\"\n >\n <template #default>\n <OnyxSelectInput\n ref=\"selectInputRef\"\n v-bind=\"selectInputProps\"\n :show-focus=\"open\"\n :autofocus=\"props.autofocus\"\n @input-click=\"onToggle\"\n @validity-change=\"emit('validityChange', $event)\"\n />\n </template>\n <template #content>\n <div v-scroll-end class=\"onyx-select__wrapper\" tabindex=\"-1\">\n <!-- model-value is set here, as it is written by the onAutocomplete callback -->\n <OnyxMiniSearch\n v-if=\"props.withSearch\"\n ref=\"miniSearchRef\"\n autofocus\n :model-value=\"searchTerm\"\n v-bind=\"input\"\n :label=\"t('select.searchInputLabel')\"\n class=\"onyx-select__search\"\n @clear=\"searchTerm = ''\"\n />\n\n <div v-bind=\"listbox\">\n <ul v-if=\"isEmptyMessage\" role=\"group\" class=\"onyx-select__group\">\n <li role=\"option\" aria-selected=\"false\">\n <slot name=\"empty\" :default-message=\"isEmptyMessage\">\n <OnyxEmpty :density=\"props.density\">{{ isEmptyMessage }}</OnyxEmpty>\n </slot>\n </li>\n </ul>\n\n <template v-else>\n <!-- select-all option for \"multiple\" -->\n <ul\n v-if=\"props.multiple && props.withCheckAll && !searchTerm\"\n class=\"onyx-select__check-all\"\n v-bind=\"headlessGroup({ label: checkAllLabel })\"\n >\n <OnyxSelectOption\n v-bind=\"\n headlessOption({\n value: CHECK_ALL_ID as TValue,\n label: checkAllLabel,\n // TODO: remove type cast once its fixed in Vue / vue-tsc version\n selected: checkAll?.state.value.modelValue,\n })\n \"\n multiple\n :active=\"CHECK_ALL_ID === activeValue\"\n :indeterminate=\"checkAll?.state.value.indeterminate\"\n :density=\"props.density\"\n >\n {{ checkAllLabel }}\n </OnyxSelectOption>\n </ul>\n\n <!-- TODO: remove type cast once its fixed in Vue / vue-tsc version -->\n <ul\n v-for=\"group in groupedOptions\"\n :key=\"group.name\"\n class=\"onyx-select__group\"\n v-bind=\"headlessGroup({ label: group.name })\"\n >\n <li\n v-if=\"group.name !== ''\"\n role=\"presentation\"\n class=\"onyx-select__group-name onyx-text--small\"\n >\n {{ group.name }}\n </li>\n <OnyxSelectOption\n v-for=\"option in group.items\"\n :key=\"option.value.toString()\"\n v-bind=\"\n headlessOption({\n value: option.value,\n label: option.label,\n disabled: option.disabled,\n selected: arrayValue.some((value: TValue) => value === option.value),\n })\n \"\n :multiple=\"props.multiple\"\n :active=\"option.value === activeValue\"\n :icon=\"option.icon\"\n :density=\"props.density\"\n :truncation=\"option.truncation ?? props.truncation\"\n >\n <slot name=\"option\" v-bind=\"option\">\n {{ option.label }}\n </slot>\n </OnyxSelectOption>\n </ul>\n </template>\n </div>\n\n <div v-if=\"props.lazyLoading?.loading\" class=\"onyx-select__slot\">\n <OnyxLoadingIndicator class=\"onyx-select__loading\" />\n </div>\n\n <div v-if=\"slots.optionsEnd\" class=\"onyx-select__slot\">\n <slot name=\"optionsEnd\"></slot>\n </div>\n </div>\n <div v-if=\"props.listDescription\" class=\"onyx-select__description onyx-text--small\">\n {{ props.listDescription }}\n </div>\n </template>\n </OnyxBasicPopover>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n@use \"../../styles/mixins/list\";\n\n.onyx-select-wrapper {\n @include layers.component() {\n --max-flyout-height: 20rem;\n position: relative;\n height: max-content;\n }\n .onyx-select-input {\n width: 100%;\n }\n .onyx-basic-popover {\n width: 100%;\n }\n}\n\n.onyx-select {\n @include layers.component() {\n @include list.styles();\n\n &--open {\n visibility: visible;\n opacity: 1;\n }\n\n &__search {\n position: sticky;\n top: 0;\n border-bottom: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n }\n\n &__wrapper {\n margin: var(--onyx-spacing-2xs) 0;\n width: 100%;\n .onyx-empty {\n max-width: 100%;\n }\n }\n &:has(&__wrapper:focus-visible) {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n }\n\n &__wrapper:has(.onyx-mini-search) {\n // Add scroll padding, so items are not hidden beneath the search input\n // var(--onyx-density-xs) = vertical padding of select option\n scroll-padding-top: calc(1lh + 2 * var(--onyx-density-xs));\n }\n\n // if a group name is below a search field or a \"Select all\" option,\n // there needs to be spacing between them.\n &__wrapper:has(.onyx-mini-search),\n &__wrapper:has(.onyx-select__check-all) {\n .onyx-select__group-name:first-child {\n margin-top: var(--onyx-density-xs);\n }\n }\n\n &__slot {\n padding: 0 var(--onyx-density-sm);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n\n &__loading {\n color: var(--onyx-color-text-icons-primary-intense);\n }\n\n &__description {\n display: flex;\n width: 100%;\n padding: var(--onyx-density-3xs) var(--onyx-density-sm);\n justify-content: flex-end;\n text-align: right;\n align-items: center;\n gap: var(--onyx-spacing-md);\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n\n &:has(.onyx-select__description) {\n padding-bottom: 0;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconChevronLeftSmall, iconChevronRightSmall } from \"@sit-onyx/icons\";\nimport { computed, ref, watch } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport { normalizedIncludes } from \"../../utils/strings.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxSelect from \"../OnyxSelect/OnyxSelect.vue\";\nimport type { SelectOption } from \"../OnyxSelect/types.js\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxPaginationProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxPaginationProps>(), {\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the selected page changes.\n */\n \"update:modelValue\": [page: number];\n}>();\n\nconst { t, n } = injectI18n();\nconst { densityClass } = useDensity(props);\nconst skeleton = useSkeletonContext(props);\n\nconst searchTerm = ref(\"\");\n\n/**\n * We are using lazy loading to prevent performance issues when a lot of pages exists.\n */\nconst pageSize = 100;\nconst optionsToRender = ref(pageSize);\nwatch(searchTerm, () => (optionsToRender.value = pageSize));\n\nconst handleLoadMore = () => {\n optionsToRender.value = Math.min(props.pages, optionsToRender.value + pageSize);\n};\n\nconst allOptions = computed(() => {\n return Array.from({ length: props.pages }, (_, index) => {\n const pageNumber = index + 1;\n return {\n label: pageNumber.toString(),\n value: pageNumber,\n } satisfies SelectOption;\n });\n});\n\nconst filteredOptions = computed(() => {\n let options = allOptions.value;\n\n const search = searchTerm.value.trim().toLowerCase();\n if (search) {\n options = options.filter((option) => normalizedIncludes(option.label, search));\n }\n\n return options.slice(0, optionsToRender.value);\n});\n\nconst hasReachedMin = computed(() => props.modelValue <= 1);\nconst hasReachedMax = computed(() => props.modelValue >= props.pages);\n</script>\n\n<template>\n <OnyxSkeleton v-if=\"skeleton\" :class=\"['onyx-pagination-skeleton', 'onyx-text', densityClass]\" />\n\n <div\n v-else\n :class=\"['onyx-component', 'onyx-pagination', 'onyx-text', densityClass]\"\n role=\"group\"\n :aria-label=\"t('pagination.label')\"\n :style=\"{ '--onyx-pagination-character-count': props.modelValue.toString().length }\"\n >\n <!-- value label is used to still show the current page if its grater than the page count -->\n <OnyxSelect\n v-model:search-term=\"searchTerm\"\n class=\"onyx-pagination__select\"\n :label=\"t('pagination.select.label')\"\n :list-label=\"t('pagination.select.listLabel')\"\n :options=\"filteredOptions\"\n :model-value=\"props.modelValue\"\n :value-label=\"props.modelValue.toString()\"\n hide-label\n :disabled=\"props.disabled || props.pages <= 1\"\n alignment=\"left\"\n with-search\n no-filter\n :lazy-loading=\"{ enabled: true }\"\n @update:model-value=\"\n emit('update:modelValue', $event as (typeof filteredOptions)[number]['value'])\n \"\n @lazy-load=\"handleLoadMore\"\n />\n\n <div class=\"onyx-pagination__count\">\n {{ t(\"pagination.ofPages\", { n: props.pages, pages: n(props.pages, \"decimal\") }) }}\n </div>\n\n <button\n class=\"onyx-pagination__button\"\n :aria-label=\"t('pagination.previous')\"\n type=\"button\"\n :disabled=\"props.disabled || hasReachedMin\"\n @click=\"emit('update:modelValue', props.modelValue - 1)\"\n >\n <OnyxIcon :icon=\"iconChevronLeftSmall\" />\n </button>\n\n <button\n class=\"onyx-pagination__button\"\n :aria-label=\"t('pagination.next')\"\n type=\"button\"\n :disabled=\"props.disabled || hasReachedMax\"\n @click=\"emit('update:modelValue', props.modelValue + 1)\"\n >\n <OnyxIcon :icon=\"iconChevronRightSmall\" />\n </button>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-pagination,\n.onyx-pagination-skeleton {\n @include layers.component() {\n --onyx-pagination-padding-vertical: var(--onyx-density-xs);\n --onyx-pagination-height: calc(1lh + 2 * var(--onyx-pagination-padding-vertical));\n }\n}\n\n.onyx-pagination-skeleton {\n @include layers.component() {\n height: var(--onyx-pagination-height);\n width: 16rem;\n }\n}\n\n.onyx-pagination {\n @include layers.component() {\n --onyx-pagination-border-size: var(--onyx-1px-in-rem);\n --onyx-pagination-character-count: 1;\n\n display: flex;\n align-items: flex-start;\n color: var(--onyx-color-text-icons-neutral-intense);\n font-family: var(--onyx-font-family);\n height: var(--onyx-pagination-height);\n width: max-content;\n max-width: 100%;\n\n &__select {\n min-width: 5rem;\n\n .onyx-select-input__wrapper {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n justify-content: space-between;\n\n $hover-selector: \"&:has(.onyx-select-input__native:enabled:read-write):hover\";\n $focus-selector: \"&:has(.onyx-select-input__native:enabled:focus, .onyx-select-input__native--show-focus)\";\n\n #{$focus-selector},\n #{$hover-selector} {\n background-color: var(--onyx-color-base-neutral-200);\n --border-color: unset;\n }\n\n // select input chevron icon color\n .onyx-select-input__button {\n color: var(--onyx-color-text-icons-neutral-medium);\n }\n\n #{$hover-selector},\n #{$focus-selector} {\n .onyx-select-input__button {\n color: var(--onyx-color-text-icons-neutral-intense);\n }\n }\n }\n\n .onyx-select-input__native {\n // support growing select based on current page character count\n width: calc(var(--onyx-pagination-character-count) * 1ch);\n }\n }\n\n &__count {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: var(--onyx-pagination-padding-vertical) var(--onyx-density-sm);\n height: var(--onyx-pagination-height);\n border: 0 solid var(--onyx-color-component-border-neutral);\n border-width: var(--onyx-pagination-border-size) 0;\n text-align: center;\n color: var(--onyx-color-text-icons-neutral-soft);\n background-color: var(--onyx-color-base-background-tinted);\n width: max-content;\n max-width: 100%;\n }\n\n &__button {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: var(--onyx-pagination-padding-vertical);\n height: var(--onyx-pagination-height);\n background-color: var(--onyx-color-base-background-blank);\n border: var(--onyx-pagination-border-size) solid var(--onyx-color-component-border-neutral);\n color: inherit;\n\n &:first-of-type {\n &:not(:focus-visible) {\n border-right: none;\n }\n\n &:focus-visible + .onyx-pagination__button {\n border-left: none;\n }\n }\n\n &:last-of-type {\n border-radius: 0 var(--onyx-radius-sm) var(--onyx-radius-sm) 0;\n }\n\n &:enabled {\n cursor: pointer;\n color: var(--onyx-color-text-icons-neutral-medium);\n\n &:hover,\n &:focus-visible {\n color: var(--onyx-color-text-icons-neutral-intense);\n }\n\n &:hover {\n background-color: var(--onyx-color-base-neutral-200);\n }\n\n &:focus-visible {\n background-color: var(--onyx-color-base-neutral-200);\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n\n // the right outline of the first button would be cut off / not visible\n // so we use this little trick here to add margin-right and reduce the left padding\n // of the second button so it does not change in size visually\n &:first-of-type {\n margin-right: var(--onyx-outline-width);\n\n + .onyx-pagination__button {\n padding-left: calc(\n var(--onyx-pagination-padding-vertical) - var(--onyx-outline-width)\n );\n }\n }\n }\n\n &:active {\n background-color: var(--onyx-color-base-background-blank);\n }\n }\n\n &:disabled {\n background-color: var(--onyx-color-base-background-tinted);\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { SKELETON_INJECTED_SYMBOL } from \"../../composables/useSkeletonState.js\";\nimport OnyxSelectPagination from \"./OnyxSelectPagination.vue\";\nimport type { OnyxPaginationProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxPaginationProps>(), {\n disabled: false,\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the selected page changes.\n */\n \"update:modelValue\": [page: number];\n}>();\n</script>\n\n<template>\n <OnyxSelectPagination v-bind=\"props\" @update:model-value=\"emit('update:modelValue', $event)\" />\n <!-- TODO: add \"inline\" mode, see https://github.com/SchwarzIT/onyx/issues/1714 -->\n</template>\n","import { h, ref, toRef, useId, type Ref } from \"vue\";\nimport OnyxCheckbox from \"../../../OnyxCheckbox/OnyxCheckbox.vue\";\nimport type { DataGridEntry } from \"../../types.js\";\nimport { createFeature, useFeatureContext, type ModifyColumns } from \"../index.js\";\nimport { createTypeRenderer } from \"../renderer.js\";\nimport \"./selection.scss\";\nimport type { SelectionOptions, SelectionState } from \"./types.js\";\n\nexport const SELECTION_FEATURE = Symbol(\"Selection\");\nexport const SELECTION_MUTATION_ORDER = 1000;\n\nexport const useSelection = <TEntry extends DataGridEntry>(options?: SelectionOptions) =>\n createFeature((ctx) => {\n const SELECTION_COLUMN = `selection-column-${useId()}`;\n const selectionState: Ref<SelectionState> = toRef(\n options?.selectionState ??\n ({\n selectMode: \"include\",\n contingent: new Set<TEntry[\"id\"]>(),\n } as const),\n );\n const rowsCount = ref(0);\n const hover = toRef(options?.hover ?? false);\n const { isEnabled } = useFeatureContext(ctx, options);\n\n const getCheckState = (id: PropertyKey) =>\n selectionState.value.selectMode === \"include\"\n ? selectionState.value.contingent.has(id)\n : !selectionState.value.contingent.has(id);\n\n const updateSelectMode = (checked: boolean) => {\n selectionState.value.selectMode = checked ? \"exclude\" : \"include\";\n selectionState.value.contingent.clear();\n };\n\n const updateToggleState = (checked: boolean, id: PropertyKey) => {\n if (\n (selectionState.value.selectMode === \"include\" && checked === true) ||\n (selectionState.value.selectMode === \"exclude\" && checked === false)\n ) {\n selectionState.value.contingent.add(id);\n } else {\n selectionState.value.contingent.delete(id);\n }\n };\n\n const isHeaderIndeterminate = () =>\n selectionState.value.contingent.size !== 0 &&\n selectionState.value.contingent.size !== rowsCount.value;\n\n const isHeaderChecked = () => {\n const { contingent, selectMode } = selectionState.value;\n if (selectMode === \"exclude\") return contingent.size === 0;\n return contingent.size > 0 && contingent.size === rowsCount.value;\n };\n\n const modifyColumns: ModifyColumns<TEntry> = {\n func: (cols) => {\n if (!isEnabled.value()) return [...cols];\n\n return [\n {\n key: SELECTION_COLUMN,\n type: { name: SELECTION_COLUMN },\n label: \"\",\n width: \"2.5rem\",\n },\n ...cols,\n ];\n },\n };\n return {\n name: SELECTION_FEATURE,\n watch: [selectionState, hover, isEnabled],\n modifyColumns,\n mutation: {\n func: (rows) => {\n rowsCount.value = rows.length;\n return rows;\n },\n order: SELECTION_MUTATION_ORDER,\n },\n typeRenderer: {\n [SELECTION_COLUMN]: createTypeRenderer({\n header: {\n thAttributes: { class: \"onyx-data-grid-selection-cell\" },\n component: () =>\n h(OnyxCheckbox, {\n label:\n selectionState.value.selectMode === \"include\"\n ? ctx.i18n.t.value(\"dataGrid.head.selection.selectAll\")\n : ctx.i18n.t.value(\"dataGrid.head.selection.deselectAll\"),\n value: `selection-all-rows`,\n hideLabel: true,\n indeterminate: isHeaderIndeterminate(),\n disabled: rowsCount.value === 0,\n \"onUpdate:modelValue\": (checked) => updateSelectMode(checked),\n modelValue: isHeaderChecked(),\n }),\n },\n cell: {\n tdAttributes: {\n class: {\n \"onyx-data-grid-selection-cell\": true,\n },\n },\n component: ({ row }) => {\n const modelValue = getCheckState(row.id);\n const idAsString = String(row.id);\n const label =\n selectionState.value.selectMode === \"include\"\n ? ctx.i18n.t.value(\"dataGrid.head.selection.select\", { id: idAsString })\n : ctx.i18n.t.value(\"dataGrid.head.selection.deselect\", { id: idAsString });\n return h(OnyxCheckbox, {\n class: {\n \"onyx-data-grid-selection-cell__checkbox\": true,\n \"onyx-data-grid-selection-cell__checkbox--hover\": hover.value,\n \"onyx-data-grid-selection-cell__checkbox--checked\": modelValue,\n },\n value: `selection-${idAsString}`,\n hideLabel: true,\n \"onUpdate:modelValue\": (checked) => updateToggleState(checked, row.id),\n label,\n modelValue,\n });\n },\n },\n }),\n },\n };\n });\n","import { computed, h, ref, toRef, toValue, watch, type Ref } from \"vue\";\nimport { useScrollEnd } from \"../../../../composables/scrollEnd.js\";\nimport { applyLimits } from \"../../../../utils/numbers.js\";\nimport OnyxLoadingDots from \"../../../OnyxLoadingIndicator/OnyxLoadingDots.vue\";\nimport OnyxPagination from \"../../../OnyxPagination/OnyxPagination.vue\";\nimport OnyxSystemButton from \"../../../OnyxSystemButton/OnyxSystemButton.vue\";\nimport { DataGridRowOptionsSymbol, type DataGridEntry } from \"../../types.js\";\nimport { FILTERING_MUTATION_ORDER } from \"../filtering/filtering.js\";\nimport { createFeature, useFeatureContext } from \"../index.js\";\nimport { createTypeRenderer } from \"../renderer.js\";\nimport { SELECTION_MUTATION_ORDER } from \"../selection/selection.js\";\nimport \"./pagination.scss\";\nimport type { PaginationOptions, PaginationState } from \"./types.js\";\n\nexport const PAGINATION_FEATURE = Symbol(\"Pagination\");\nexport const LAZY_LOADING_ROW_ID = Symbol(\"LazyLoadingRow\");\nexport const LAZY_LOADING_TYPE_RENDERER = Symbol(\"LazyLoadingRenderer\");\nexport const BUTTON_LOADING_ROW_ID = Symbol(\"ButtonLoadingRow\");\nexport const BUTTON_LOADING_TYPE_RENDERER = Symbol(\"ButtonLoadingRenderer\");\nexport const PAGINATION_MUTATION_ORDER =\n Math.min(FILTERING_MUTATION_ORDER, SELECTION_MUTATION_ORDER) - 1;\n\nexport const usePagination = (options: PaginationOptions = {}) =>\n createFeature((ctx) => {\n const state = toRef(\n options?.paginationState ?? { current: 1, pages: 1, pageSize: options?.pageSize ?? 25 },\n ) as Ref<PaginationState>;\n\n const { isEnabled, isAsync } = useFeatureContext(ctx, options);\n const isDisabled = computed(() => options.disabled?.value ?? false);\n const shouldShowPagination = computed(\n () => state.value.pages > 1 || state.value.current > state.value.pageSize,\n );\n const isLastPage = computed(() => state.value.current >= state.value.pages);\n const loading = computed(() => options.loading?.value ?? false);\n\n const type = options.type ?? \"select\";\n const scrollContainer = ref<HTMLElement>();\n\n const { vScrollEnd, isScrollEnd } = useScrollEnd({\n enabled: computed(() => type === \"lazy\" && !isLastPage.value && !toValue(options.disabled)),\n loading,\n });\n\n watch(isScrollEnd, (isEnd) => {\n if (!isEnd) return;\n state.value.current++;\n });\n\n watch(scrollContainer, () => {\n if (!scrollContainer.value) return;\n vScrollEnd.mounted(scrollContainer.value);\n });\n\n return {\n name: PAGINATION_FEATURE,\n watch: [state, isEnabled, isAsync, isDisabled, ctx.skeleton, isScrollEnd, loading],\n mutation: {\n order: PAGINATION_MUTATION_ORDER,\n func: (entries) => {\n if (!isEnabled.value()) return entries;\n\n let _entries = entries.slice();\n\n if (!isAsync.value) {\n state.value.pages = Math.ceil(_entries.length / state.value.pageSize);\n state.value.current = applyLimits(state.value.current, 1, state.value.pages);\n\n let startIndex = (state.value.current - 1) * state.value.pageSize;\n const endIndex = startIndex + state.value.pageSize;\n if (type !== \"select\") startIndex = 0;\n\n _entries = _entries.slice(startIndex, endIndex);\n }\n\n if (type === \"lazy\" && loading.value) {\n _entries.push({\n id: LAZY_LOADING_ROW_ID,\n [DataGridRowOptionsSymbol]: {\n columns: [{ key: \"id\", type: { name: LAZY_LOADING_TYPE_RENDERER } }],\n },\n } satisfies DataGridEntry);\n }\n\n if (type === \"button\" && (!isLastPage.value || loading.value)) {\n _entries.push({\n id: BUTTON_LOADING_ROW_ID,\n [DataGridRowOptionsSymbol]: {\n columns: [{ key: \"id\", type: { name: BUTTON_LOADING_TYPE_RENDERER } }],\n },\n } satisfies DataGridEntry);\n }\n\n return _entries;\n },\n },\n typeRenderer: {\n [LAZY_LOADING_TYPE_RENDERER]: createTypeRenderer({\n cell: {\n tdAttributes: {\n class: \"onyx-data-grid__lazy-pagination\",\n colspan: 99,\n },\n component: () => h(OnyxLoadingDots),\n },\n }),\n [BUTTON_LOADING_TYPE_RENDERER]: createTypeRenderer({\n cell: {\n tdAttributes: {\n class: \"onyx-data-grid__button-pagination\",\n colspan: 99,\n },\n component: () => {\n if (loading.value) return h(OnyxLoadingDots);\n\n return h(OnyxSystemButton, {\n label: ctx.i18n.t.value(\"dataGrid.loadMore\"),\n color: \"medium\",\n disabled: toValue(options.disabled),\n onClick: () => state.value.current++,\n });\n },\n },\n }),\n },\n slots: {\n pagination: () => {\n if (!isEnabled.value() || type !== \"select\") return [];\n const skeleton = ctx.skeleton.value && !shouldShowPagination.value;\n if (!shouldShowPagination.value && !skeleton) return [];\n\n return [\n h(OnyxPagination, {\n modelValue: state.value.current,\n pages: state.value.pages,\n disabled: isDisabled.value,\n skeleton,\n \"onUpdate:modelValue\": (newPage) => (state.value.current = newPage),\n }),\n ];\n },\n },\n scrollContainerAttributes: () => ({\n ref: (el) => {\n scrollContainer.value = el as typeof scrollContainer.value;\n },\n }),\n };\n });\n","import { computed, h, ref, toValue } from \"vue\";\nimport { OnyxHeadline } from \"../../../../index.js\";\nimport type { DataGridHeadline } from \"../../types.js\";\nimport { FILTERING_MUTATION_ORDER } from \"../filtering/filtering.js\";\nimport { createFeature } from \"../index.js\";\nimport { PAGINATION_MUTATION_ORDER } from \"../pagination/pagination.js\";\nimport {\n BOOLEAN_RENDERER,\n DATE_RENDERER,\n DATETIME_RENDERER,\n NUMBER_RENDERER,\n SKELETON_RENDERER,\n STRING_RENDERER,\n TIME_RENDERER,\n TIMESTAMP_RENDERER,\n} from \"../renderer.js\";\nimport \"./base.scss\";\nimport type { BaseFeatureOptions } from \"./types.js\";\n\nexport const BASE_FEATURE_SYMBOL = Symbol(\"Base\");\nexport const BASE_MUTATION_ORDER =\n Math.max(FILTERING_MUTATION_ORDER, PAGINATION_MUTATION_ORDER) + 1;\n\n/**\n * The Base feature includes everything that should be provided as built-in functionality of the `OnyxDataGrid` component.\n */\nexport const BASE_FEATURE = (options?: BaseFeatureOptions) =>\n createFeature(({ skeleton }) => {\n const rowCount = ref(0);\n\n const headline = computed(() => {\n const _headline = toValue(options?.headline);\n if (!_headline) return;\n return {\n is: \"h3\",\n ...(typeof _headline === \"string\" ? { text: _headline } : _headline),\n } satisfies DataGridHeadline;\n });\n\n return {\n name: BASE_FEATURE_SYMBOL,\n watch: [skeleton, headline],\n modifyColumns: {\n func: (columns) => {\n if (!skeleton.value) return [...columns];\n return columns.map((column) => ({ ...column, type: { name: \"skeleton\" } }));\n },\n },\n mutation: {\n order: BASE_MUTATION_ORDER,\n func: (rows) => {\n rowCount.value = rows.length;\n if (!skeleton.value) return [...rows];\n let skeletonCount = typeof skeleton.value === \"number\" ? skeleton.value : 5;\n if (rows.length) skeletonCount = rows.length; // if previously rows were displayed, use the same row count for skeletons so the layout does not shift\n return Array.from({ length: skeletonCount }, () => ({}));\n },\n },\n scrollContainerAttributes: () => ({\n class: skeleton.value ? \"onyx-data-grid--skeleton\" : \"\",\n }),\n typeRenderer: {\n number: NUMBER_RENDERER,\n string: STRING_RENDERER,\n date: DATE_RENDERER,\n \"datetime-local\": DATETIME_RENDERER,\n time: TIME_RENDERER,\n timestamp: TIMESTAMP_RENDERER,\n skeleton: SKELETON_RENDERER,\n boolean: BOOLEAN_RENDERER,\n },\n slots: {\n headline: (slotContent) => {\n if (!headline.value) return slotContent();\n\n return [\n h(OnyxHeadline, headline.value, () => [\n headline.value?.text,\n headline.value?.rowCount && !skeleton.value\n ? h(\n \"span\",\n { class: \"onyx-data-grid__headline-count\" },\n ` (${typeof headline.value.rowCount === \"number\" ? headline.value.rowCount : rowCount.value})`,\n )\n : null,\n ]),\n ...slotContent(),\n ];\n },\n },\n } as const;\n });\n","<script\n setup\n lang=\"ts\"\n generic=\"\n TEntry extends DataGridEntry,\n TTypeRenderer extends TypeRenderMap<TEntry>,\n TColumnGroup extends ColumnGroupConfig,\n TTypes extends ColumnConfigTypeOption<PropertyKey, unknown>,\n TFeatureName extends symbol,\n TFeatures extends DataGridFeature<TEntry, TTypeRenderer, TFeatureName>[] | [] = []\n \"\n>\nimport { shallowRef, toRef, toRefs, watch, type WatchHandle } from \"vue\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport type { DataGridScrollContainerAttributes, InternalDataGridSlots } from \"../../index.js\";\nimport { mergeVueProps } from \"../../utils/attrs.js\";\nimport type { OnyxTableSlots, TableColumnGroup } from \"../OnyxTable/types.js\";\nimport { BASE_FEATURE } from \"./features/base/base.js\";\nimport {\n useDataGridFeatures,\n type ColumnConfigTypeOption,\n type ColumnGroupConfig,\n type DataGridFeature,\n type TypeRenderMap,\n} from \"./features/index.js\";\nimport OnyxDataGridRenderer from \"./OnyxDataGridRenderer/OnyxDataGridRenderer.vue\";\nimport type { DataGridRendererColumn, DataGridRendererRow } from \"./OnyxDataGridRenderer/types.js\";\nimport type { DataGridEntry, DataGridMetadata, OnyxDataGridProps } from \"./types.js\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(\n defineProps<OnyxDataGridProps<TEntry, TColumnGroup, TTypeRenderer, TFeatureName, TFeatures>>(),\n {\n features: () => [] as TFeatures,\n skeleton: SKELETON_INJECTED_SYMBOL,\n // usually we default all boolean props to false (see https://onyx.schwarz/principles/technical-guidelines.html#component-interface).\n // However, here for striped and withVerticalBorders this makes sense from UX perspective\n striped: true,\n withVerticalBorders: true,\n },\n);\n\nconst i18n = injectI18n();\n\nconst slots = defineSlots<Pick<OnyxTableSlots, \"empty\">>();\n\nconst skeleton = useSkeletonContext(props);\n// Using Ref types to avoid `UnwrapRef` issues\nconst renderColumns = shallowRef<DataGridRendererColumn<TEntry>[]>([]);\nconst renderRows = shallowRef<DataGridRendererRow<TEntry, DataGridMetadata>[]>([]);\nconst rendererColumnGroups = shallowRef<TableColumnGroup[]>();\nconst rendererScrollContainerAttributes = shallowRef<DataGridScrollContainerAttributes>();\nconst rendererSlots = shallowRef<InternalDataGridSlots>();\n\nconst { columns: columnConfig, data, features, columnGroups, async } = toRefs(props);\n\n/**\n * Function to be able to reset the watcher in case of the features being updated.\n */\nlet disposeWatcher: WatchHandle | undefined;\nconst createFeatureBuilderWatcher = ({\n createRendererColumns,\n createRendererRows,\n watchSources,\n createRendererColumnGroups,\n createScrollContainerAttributes,\n createSlots,\n}: ReturnType<\n typeof useDataGridFeatures<TEntry, TFeatureName, TTypeRenderer, TColumnGroup, TTypes, TFeatures>\n>) => {\n return watch(\n [data, skeleton, columnConfig, columnGroups, i18n.locale, i18n.t, ...watchSources],\n () => {\n renderColumns.value = createRendererColumns();\n renderRows.value = createRendererRows(data.value);\n rendererColumnGroups.value = createRendererColumnGroups();\n rendererScrollContainerAttributes.value = createScrollContainerAttributes();\n rendererSlots.value = createSlots();\n },\n { immediate: true, deep: true },\n );\n};\n\nwatch(\n features,\n () => {\n const featureBuilder = useDataGridFeatures(\n [BASE_FEATURE({ headline: toRef(props, \"headline\") }), ...features.value],\n {\n i18n,\n columnConfig,\n columnGroups,\n async,\n skeleton,\n },\n );\n disposeWatcher?.();\n disposeWatcher = createFeatureBuilderWatcher(featureBuilder);\n },\n { immediate: true },\n);\n</script>\n\n<template>\n <OnyxDataGridRenderer\n :column-groups=\"rendererColumnGroups\"\n :columns=\"renderColumns\"\n :rows=\"renderRows\"\n :scroll-container-attrs=\"rendererScrollContainerAttributes\"\n v-bind=\"\n mergeVueProps($attrs, {\n density: props.density,\n striped: props.striped,\n withVerticalBorders: props.withVerticalBorders,\n withPageScrolling: props.withPageScrolling,\n })\n \"\n >\n <template v-for=\"(slot, slotName) in rendererSlots\" :key=\"slotName\" #[slotName]>\n <component :is=\"slot\" />\n </template>\n\n <template v-if=\"!!slots.empty\" #empty=\"slotProps\">\n <slot name=\"empty\" v-bind=\"slotProps\" />\n </template>\n </OnyxDataGridRenderer>\n</template>\n","import { iconEyeDisabled, iconPlusSmall } from \"@sit-onyx/icons\";\nimport { computed, h, ref, toRef, type Ref } from \"vue\";\nimport type { ComponentSlots } from \"vue-component-type-helpers\";\nimport OnyxIcon from \"../../../OnyxIcon/OnyxIcon.vue\";\nimport OnyxFlyoutMenu from \"../../../OnyxNavBar/modules/OnyxFlyoutMenu/OnyxFlyoutMenu.vue\";\nimport OnyxMenuItem from \"../../../OnyxNavBar/modules/OnyxMenuItem/OnyxMenuItem.vue\";\nimport OnyxSystemButton from \"../../../OnyxSystemButton/OnyxSystemButton.vue\";\nimport type { DataGridEntry } from \"../../types.js\";\nimport {\n createFeature,\n useFeatureContext,\n type InternalColumnConfig,\n type ModifyColumns,\n} from \"../index.js\";\nimport \"./hideColumns.scss\";\nimport type { HideColumnsOptions, HideColumnsState } from \"./types.js\";\n\nexport const HIDE_COLUMNS_FEATURE = Symbol(\"HideColumnsFeature\");\nexport const HIDDEN_COLUMN = Symbol(\"HiddenColumn\");\n\nexport const useHideColumns = <TEntry extends DataGridEntry>(\n options?: HideColumnsOptions<TEntry>,\n) =>\n createFeature((ctx) => {\n const { i18n } = ctx;\n const { isEnabled } = useFeatureContext(ctx, options);\n\n const columnConfig = ref([]) as Ref<Readonly<InternalColumnConfig<TEntry>[]>>;\n const hiddenColumnKeys: Ref<HideColumnsState<TEntry>> = toRef(options?.state ?? new Set());\n const hiddenColumns = computed(() =>\n columnConfig.value.filter((c) => hiddenColumnKeys.value.has(c.key)),\n );\n\n const flyoutMenu = () =>\n h(\n OnyxFlyoutMenu,\n {\n label: i18n.t.value(\"dataGrid.head.hideColumns.revealFlyout\"),\n trigger: \"click\",\n alignment: \"right\",\n },\n {\n button: ({ trigger }) =>\n h(OnyxSystemButton, {\n class: \"\",\n label: i18n.t.value(\"dataGrid.head.hideColumns.revealTrigger\"),\n color: \"medium\",\n icon: iconPlusSmall,\n ...trigger,\n }),\n options: () => {\n return Array.from(hiddenColumns.value)\n .sort((a, b) => Intl.Collator(i18n.locale.value).compare(a.label, b.label))\n .map(({ key, label }) =>\n h(\n OnyxMenuItem,\n {\n onClick: () => hiddenColumnKeys.value.delete(key),\n },\n () => label,\n ),\n );\n },\n } satisfies ComponentSlots<typeof OnyxFlyoutMenu>,\n );\n\n const getMenuItem = (column: keyof TEntry) =>\n h(\n OnyxMenuItem,\n {\n onClick: () => hiddenColumnKeys.value.add(column),\n },\n () => [\n h(OnyxIcon, { icon: iconEyeDisabled }),\n i18n.t.value(\"dataGrid.head.hideColumns.menu.hideButton\"),\n ],\n );\n\n return {\n name: HIDE_COLUMNS_FEATURE,\n watch: [hiddenColumnKeys],\n modifyColumns: [\n {\n order: 9000,\n /**\n * Store the current column configuration for later reference\n */\n func: (newConfig) => {\n columnConfig.value = newConfig;\n return newConfig;\n },\n },\n {\n order: 9001,\n func: (columnConfig) => {\n const filteredColumns = columnConfig.filter(\n (column) => !hiddenColumnKeys.value.has(column.key),\n );\n\n return hiddenColumnKeys.value.size > 0\n ? [\n ...filteredColumns,\n {\n key: HIDDEN_COLUMN,\n type: { name: HIDDEN_COLUMN },\n width: \"2.5rem\",\n label: \"\",\n },\n ]\n : filteredColumns;\n },\n },\n ] satisfies ModifyColumns<TEntry>[],\n typeRenderer: {\n [HIDDEN_COLUMN]: {\n header: {\n thAttributes: { class: \"onyx-data-grid-hide-columns-cell\" },\n component: flyoutMenu,\n },\n cell: {\n tdAttributes: { class: \"onyx-data-grid-hide-columns-cell\" },\n component: () => null,\n },\n },\n },\n header: {\n actions: ({ key: column }) => {\n if (!isEnabled.value(column)) return [];\n return [\n {\n menuItems: [getMenuItem(column)],\n showFlyoutMenu: true,\n },\n ];\n },\n },\n };\n });\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { getTemplateRefElement } from \"../../composables/useResizeObserver.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport OnyxVisuallyHidden from \"../OnyxVisuallyHidden/OnyxVisuallyHidden.vue\";\nimport type { OnyxResizeHandleProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxResizeHandleProps>(), {\n min: 1,\n alignment: \"right\",\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the width should be updated while resizing.\n * Note: You must take care of actually applied the desired CSS to apply the width.\n */\n updateWidth: [width: number];\n /**\n * Emitted when the size should be set automatically (by double clicking).\n */\n autoSize: [];\n /**\n * Emitted when the resizing has started (onMousedown).\n */\n start: [];\n /**\n * Emitted when the resizing has ended (onMouseup).\n */\n end: [];\n}>();\n\nconst { t } = injectI18n();\n\nconst previousWidth = ref<number>();\nconst currentElement = computed(() => getTemplateRefElement(props.element));\nlet abortController: AbortController | undefined;\n\nconst isActive = ref(false);\n\nconst handleMousedown = () => {\n if (!currentElement.value) return;\n\n previousWidth.value = currentElement.value.getBoundingClientRect().width;\n isActive.value = true;\n\n abortController = new AbortController();\n const options: AddEventListenerOptions = { signal: abortController.signal, passive: true };\n window.addEventListener(\"mousemove\", onMouseMove, options);\n window.addEventListener(\"mouseup\", abort, options);\n window.addEventListener(\"keydown\", onKeydown, options);\n\n emit(\"start\");\n};\n\nonMounted(() => {\n watch(\n () => props.active,\n (newActive) => {\n if (newActive == undefined) return;\n if (newActive && !isActive.value) handleMousedown();\n else if (!newActive && isActive.value) abort();\n },\n { immediate: true },\n );\n});\n\nconst handleDoubleClick = () => {\n emit(\"autoSize\");\n};\n\nconst onMouseMove = (event: MouseEvent) => {\n if (!currentElement.value || !isActive.value) return;\n const boundingRect = currentElement.value.getBoundingClientRect();\n let width: number;\n if (props.alignment === \"right\") {\n width = event.clientX - boundingRect.left;\n } else {\n width = boundingRect.right - event.clientX;\n }\n emit(\"updateWidth\", Math.max(props.min, width));\n};\n\nconst abort = () => {\n abortController?.abort();\n previousWidth.value = undefined;\n isActive.value = false;\n emit(\"end\");\n};\n\nconst onKeydown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n if (previousWidth.value) emit(\"updateWidth\", previousWidth.value);\n abort();\n};\n</script>\n\n<template>\n <button\n tabindex=\"-1\"\n type=\"button\"\n :class=\"[\n 'onyx-component',\n 'onyx-resize-handle',\n {\n 'onyx-resize-handle--active': isActive,\n 'onyx-resize-handle--left': props.alignment === 'left',\n },\n ]\"\n @mousedown=\"handleMousedown\"\n @dblclick=\"handleDoubleClick\"\n >\n <OnyxVisuallyHidden>{{ t(\"resizeHandle.label\") }}</OnyxVisuallyHidden>\n </button>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-resize-handle {\n @include layers.component() {\n --onyx-resize-handle-width: 1rem;\n --onyx-resize-handle-border-width: var(--onyx-1px-in-rem);\n --onyx-resize-handle--active-indicator-height: 0;\n all: unset;\n position: absolute;\n top: 0;\n right: calc(-0.5 * var(--onyx-resize-handle-width));\n width: var(--onyx-resize-handle-width);\n height: 100%;\n z-index: 1;\n cursor: col-resize;\n\n &--left {\n left: calc(-0.5 * var(--onyx-resize-handle-width));\n right: unset;\n }\n\n &::after {\n content: \"\";\n height: 100%;\n width: var(--onyx-resize-handle-border-width);\n position: absolute;\n top: 0;\n left: calc(50% - 0.5 * var(--onyx-resize-handle-border-width));\n opacity: 0;\n background-color: var(--onyx-color-base-neutral-600);\n }\n\n &--active::before {\n content: \"\";\n height: calc(var(--onyx-resize-handle--active-indicator-height) - 100%);\n width: var(--onyx-resize-handle-border-width);\n position: absolute;\n top: 100%;\n left: calc(50% - 0.5 * var(--onyx-resize-handle-border-width));\n background-color: var(--onyx-color-base-neutral-600);\n }\n\n &:hover,\n &--active {\n &::after {\n opacity: 0.5;\n background-color: var(--onyx-color-base-primary-500);\n }\n }\n }\n}\n</style>\n","import { h, ref, watch, type Slots, type ThHTMLAttributes } from \"vue\";\nimport { mergeVueProps } from \"../../../../utils/attrs.js\";\nimport { escapeCSS } from \"../../../../utils/dom.js\";\nimport OnyxResizeHandle from \"../../../OnyxResizeHandle/OnyxResizeHandle.vue\";\nimport type { DataGridEntry } from \"../../types.js\";\nimport { createFeature, useFeatureContext, type InternalColumnConfig } from \"../index.js\";\nimport \"./resizing.scss\";\nimport type { ResizingOptions } from \"./types.js\";\n\nexport const RESIZING_FEATURE = Symbol(\"Resizing\");\nexport const FILLER_COLUMN = Symbol(\"FILLER_COLUMN\");\nexport const useResizing = <TEntry extends DataGridEntry>(options?: ResizingOptions<TEntry>) =>\n createFeature((ctx) => {\n const resizingCol = ref<Readonly<InternalColumnConfig<TEntry>>>();\n const MIN_COLUMN_WIDTH = 3 * 16;\n const headers = ref(new Map<keyof TEntry, HTMLElement>());\n const { isEnabled } = useFeatureContext(ctx, options);\n const colWidths = ref(new Map<keyof TEntry, string>());\n const scrollContainer = ref<HTMLElement>();\n\n watch(\n [headers, colWidths],\n () => {\n // Changing the width directly is needed to avoid re-rendering the table too often.\n headers.value.forEach((th, columnKey) => {\n const property = `--onyx-data-grid-column-${escapeCSS(columnKey)}`;\n const container = th.closest<HTMLElement>(\".onyx-table-wrapper__container\");\n const width = colWidths.value.get(columnKey);\n if (width) {\n container?.style.setProperty(property, width);\n } else {\n container?.style.removeProperty(property);\n }\n });\n },\n { flush: \"post\", deep: true },\n );\n\n const modifyColumns = (cols: Readonly<InternalColumnConfig<TEntry>[]>) => {\n const columns = cols.map((column) => {\n if (!isEnabled.value(column.key)) return column;\n\n const thAttributes = {\n class: \"onyx-data-grid-resize-cell\",\n ref: (el?: HTMLElement) => {\n if (el) {\n headers.value.set(column.key, el);\n } else {\n headers.value.delete(column.key);\n }\n },\n } as ThHTMLAttributes;\n\n const resizedWidth = colWidths.value.get(column.key);\n\n return {\n ...column,\n width: resizedWidth || column.width,\n thAttributes: mergeVueProps(thAttributes, column.thAttributes),\n };\n });\n\n columns.push({ key: FILLER_COLUMN, type: { name: FILLER_COLUMN }, label: \"\" });\n\n return columns;\n };\n\n const renderWrapper = (\n slots: Slots,\n column: Readonly<InternalColumnConfig<TEntry>>,\n noResizeHandle: boolean,\n ) => {\n const slotContent = slots.default?.();\n if (!isEnabled.value(column.key) || noResizeHandle) return slotContent;\n\n return [\n h(OnyxResizeHandle, {\n min: MIN_COLUMN_WIDTH,\n element: headers.value.get(column.key),\n active: resizingCol.value?.key === column.key,\n onStart: () => {\n resizingCol.value = column;\n\n Array.from(headers.value.entries()).forEach(([col, el]) => {\n const { width } = el.getBoundingClientRect();\n colWidths.value.set(col, `${Math.max(MIN_COLUMN_WIDTH, width)}px`);\n });\n },\n onEnd: () => {\n resizingCol.value = undefined;\n },\n onUpdateWidth: (width) => {\n colWidths.value.set(column.key, `${width}px`);\n },\n onAutoSize: () => colWidths.value.set(column.key, \"max-content\"),\n }),\n slotContent,\n ];\n };\n\n return {\n name: RESIZING_FEATURE,\n modifyColumns: {\n func: modifyColumns,\n },\n scrollContainerAttributes: () => ({\n ref: (el) => {\n scrollContainer.value = el as typeof scrollContainer.value;\n },\n }),\n typeRenderer: {\n /**\n * The filler column stretches the remaining space in case the column widths are smaller than the table's intended width.\n */\n [FILLER_COLUMN]: {\n header: {\n thAttributes: { class: \"onyx-data-grid-filler-column-cell\", \"aria-hidden\": true },\n component: () => null,\n },\n cell: {\n tdAttributes: { class: \"onyx-data-grid-filler-column-cell\", \"aria-hidden\": true },\n component: () => null,\n },\n },\n },\n header: {\n wrapper:\n (cols, i, { length }) =>\n (_, { slots }) => {\n const isLastColumn = i === length - 1;\n const isFillerColumn = cols.type.name === FILLER_COLUMN;\n return renderWrapper(slots, cols, isLastColumn || isFillerColumn);\n },\n },\n };\n });\n","import type { DataGridEntry } from \"../../types.js\";\nimport type { DefaultSupportedTypes } from \"../index.js\";\nimport type { Compare } from \"./types.js\";\n\nexport const STRING_COMPARE = (a: unknown, b: unknown, collator: Intl.Collator) =>\n collator.compare(String(a), String(b));\n\nexport const NUMBER_COMPARE = (a: unknown, b: unknown) => Number(a) - Number(b);\n\nexport const BOOLEAN_COMPARE = (a: unknown, b: unknown) => NUMBER_COMPARE(a ? 1 : 0, b ? 1 : 0);\n\nconst toComparableTime = (date: Date) =>\n new Date(\n Date.UTC(\n 0,\n 0,\n 1,\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds(),\n date.getUTCMilliseconds(),\n ),\n );\n\n/**\n * Compares only the time of two dates, ignoring the date part.\n */\nexport const TIME_COMPARE = (a: unknown, b: unknown, collator: Intl.Collator) => {\n if (!(a instanceof Date && b instanceof Date)) {\n return STRING_COMPARE(a, b, collator);\n }\n const dateA = toComparableTime(a);\n const dateB = toComparableTime(b);\n return NUMBER_COMPARE(dateA, dateB);\n};\n\nexport const DEFAULT_COMPARES: Record<PropertyKey, Compare<unknown>> = Object.freeze({\n string: STRING_COMPARE,\n number: NUMBER_COMPARE,\n date: NUMBER_COMPARE,\n \"datetime-local\": NUMBER_COMPARE,\n // As *time* only shows the time part, we only sort by the time part here.\n time: TIME_COMPARE,\n timestamp: NUMBER_COMPARE,\n skeleton: () => 0,\n boolean: BOOLEAN_COMPARE,\n}) satisfies Record<DefaultSupportedTypes, Compare<DataGridEntry>>;\n","<script setup lang=\"ts\">\nimport { iconArrowsSort, iconListArrowDown, iconListArrowUp } from \"@sit-onyx/icons\";\nimport { computed } from \"vue\";\nimport { injectI18n } from \"../../../../i18n/index.js\";\nimport OnyxSystemButton from \"../../../OnyxSystemButton/OnyxSystemButton.vue\";\nimport { nextSortDirection } from \"./sorting.js\";\nimport type { SortDirection } from \"./types.js\";\n\nconst props = defineProps<{\n /**\n * Label of this Column.\n */\n columnLabel: string;\n /**\n * The current sorting direction, that should be indicated.\n */\n sortDirection?: SortDirection;\n}>();\n\nconst { t } = injectI18n();\n\nconst icon = computed(() =>\n props.sortDirection === \"asc\"\n ? iconListArrowUp\n : props.sortDirection === \"desc\"\n ? iconListArrowDown\n : iconArrowsSort,\n);\n\nconst buttonLabel = computed(() => {\n const nextDirection = nextSortDirection(props.sortDirection);\n return t.value(`dataGrid.head.sorting.action.${nextDirection}`, {\n field: props.columnLabel,\n });\n});\n</script>\n\n<template>\n <OnyxSystemButton :label=\"buttonLabel\" :icon=\"icon\" color=\"medium\" />\n</template>\n","import { iconCircleBlock, iconListArrowDown, iconListArrowUp } from \"@sit-onyx/icons\";\nimport { computed, h, toRef, toValue, type Ref } from \"vue\";\nimport OnyxIcon from \"../../../OnyxIcon/OnyxIcon.vue\";\nimport OnyxMenuItem from \"../../../OnyxNavBar/modules/OnyxMenuItem/OnyxMenuItem.vue\";\nimport type { DataGridEntry } from \"../../types.js\";\nimport {\n createFeature,\n useFeatureContext,\n type InternalColumnConfig,\n type ModifyColumns,\n} from \"../index.js\";\nimport { DEFAULT_COMPARES, STRING_COMPARE } from \"./defaults.js\";\nimport SortAction from \"./SortAction.vue\";\nimport type { SortDirection, SortOptions, SortState } from \"./types.js\";\n\nexport const nextSortDirection = (current?: SortDirection, skipNone?: boolean): SortDirection => {\n switch (current) {\n case \"asc\":\n return \"desc\";\n case \"desc\":\n return skipNone ? \"asc\" : \"none\";\n case \"none\":\n default:\n return \"asc\";\n }\n};\n\nexport const SORTING_FEATURE = Symbol(\"Sorting\");\n\nexport const useSorting = <TEntry extends DataGridEntry>(options?: SortOptions<TEntry>) =>\n createFeature((ctx) => {\n const sortState: Ref<SortState<TEntry>> = toRef(\n options?.sortState ??\n ({\n column: undefined,\n direction: \"none\",\n } as const),\n );\n\n const { i18n } = ctx;\n const { isEnabled, isAsync } = useFeatureContext(ctx, options);\n let finalConfig: readonly InternalColumnConfig<TEntry>[] = [];\n\n const collator = computed(\n () => toValue(options?.collator) ?? new Intl.Collator(i18n.locale.value, { numeric: true }),\n );\n\n const getSortFunc = (col: keyof TEntry) => {\n const config = toValue(options?.columns);\n const customSort = config?.[col]?.sortFunc;\n if (customSort) {\n return customSort;\n }\n const columnType = finalConfig.find(({ key }) => col === key)?.type.name ?? \"\";\n return DEFAULT_COMPARES[columnType] ? DEFAULT_COMPARES[columnType] : STRING_COMPARE;\n };\n\n const sortData = (data: Readonly<TEntry>[]) => {\n const { column, direction } = sortState.value;\n if (isAsync.value || !column || direction === \"none\") {\n return data;\n }\n const multiplicand = direction === \"asc\" ? 1 : -1;\n const sortFunc = getSortFunc(column);\n data.sort((a, b) => sortFunc(a[column], b[column], collator.value) * multiplicand);\n return data;\n };\n\n const handleClick = (clickedColumn: keyof TEntry, skipNone = false) => {\n const direction =\n sortState.value.column === clickedColumn\n ? nextSortDirection(sortState.value.direction, skipNone)\n : nextSortDirection(undefined, skipNone);\n const column = direction !== \"none\" ? clickedColumn : undefined;\n\n sortState.value = {\n direction,\n column,\n };\n };\n\n const isSortActive = computed(() => {\n return (column: keyof DataGridEntry, direction: SortDirection) => {\n return sortState.value.column === column && sortState.value.direction === direction;\n };\n });\n\n const getMenuItem = (column: keyof DataGridEntry, direction: SortDirection) => {\n const iconMap = {\n none: iconCircleBlock,\n asc: iconListArrowUp,\n desc: iconListArrowDown,\n } satisfies Record<SortDirection, string>;\n\n return h(\n OnyxMenuItem,\n {\n active: isSortActive.value(column, direction),\n onClick: () => (sortState.value = { column, direction }),\n },\n () => [\n h(OnyxIcon, { icon: iconMap[direction] }),\n i18n.t.value(`dataGrid.head.sorting.menu.${direction}`),\n ],\n );\n };\n\n return {\n name: SORTING_FEATURE,\n watch: [sortState, collator],\n mutation: {\n func: sortData,\n },\n modifyColumns: [\n {\n // save final column config\n func: (_finalConfig) => (finalConfig = _finalConfig),\n order: -Infinity,\n },\n ] satisfies ModifyColumns<TEntry>,\n header: {\n actions: ({ key: column, label }) => {\n if (!isEnabled.value(column)) return [];\n return [\n {\n iconComponent: h(SortAction, {\n columnLabel: label,\n sortDirection:\n sortState.value.column === column ? sortState.value.direction : undefined,\n onClick: () => handleClick(column),\n }),\n menuItems: [\n getMenuItem(column, \"none\"),\n getMenuItem(column, \"asc\"),\n getMenuItem(column, \"desc\"),\n ],\n },\n sortState.value.column === column &&\n sortState.value.direction &&\n sortState.value.direction !== \"none\"\n ? {\n iconComponent: {\n iconComponent: h(SortAction, {\n columnLabel: label,\n sortDirection:\n sortState.value.column === column ? sortState.value.direction : undefined,\n onClick: () => handleClick(column, true),\n }),\n alwaysShowInHeader: true,\n },\n }\n : null,\n ].filter((item) => item !== null);\n },\n },\n };\n });\n","import { computed, nextTick, onMounted, onUnmounted, ref, toValue, useId, watch } from \"vue\";\nimport { createFeature, type ModifyColumns } from \"../index.js\";\n\nimport { mergeVueProps } from \"../../../../utils/attrs.js\";\nimport { escapeCSS } from \"../../../../utils/dom.js\";\nimport type { DataGridEntry } from \"../../types.js\";\nimport \"./stickyColumns.scss\";\nimport type { StickyColumnsOptions } from \"./types.js\";\n\nexport const STICKY_COLUMNS_FEATURE = Symbol(\"StickyColumns\");\n\nexport const useStickyColumns = <TEntry extends DataGridEntry>(\n options?: StickyColumnsOptions<TEntry>,\n) =>\n createFeature(() => {\n const stickyColumns = computed(() => toValue(options?.columns) ?? []);\n const position = computed(() => toValue(options?.position) ?? \"left\");\n const elementWidths = ref<Record<PropertyKey, number>>({});\n const elementsToStyle = ref<Record<PropertyKey, HTMLElement>>({});\n const stickyId = useId();\n const isScrolled = ref(false);\n\n const createStickyPositionCssVar = (key: PropertyKey) =>\n `--onyx-data-grid-sticky-column-position-${stickyId}-${escapeCSS(key)}`;\n\n // ensure ResizeObserver is only called on mount to support server side rendering\n onMounted(() => {\n if (!(\"ResizeObserver\" in window)) return;\n\n const resizeObserver = new ResizeObserver(() => {\n Object.entries(elementsToStyle.value).forEach(\n ([column, el]: [PropertyKey, HTMLElement]) =>\n (elementWidths.value[column] = el.getBoundingClientRect().width),\n );\n\n stickyColumns.value.forEach((columnKey, i) => setElementStyles(columnKey, i));\n });\n\n watch(\n elementsToStyle,\n () => {\n resizeObserver.disconnect();\n Object.values(elementsToStyle.value).forEach((el) => resizeObserver.observe(el));\n },\n { deep: true, immediate: true },\n );\n onUnmounted(() => resizeObserver.disconnect());\n });\n\n const setElementStyles = (key: PropertyKey, index: number) => {\n if (!options) return;\n const width = stickyColumns.value\n .map((key) => elementWidths.value[key])\n .reduce((acc, currentWidth, i) => {\n if (i < index) {\n return acc + currentWidth;\n }\n return acc;\n }, 0);\n\n document.body.style.setProperty(createStickyPositionCssVar(key), `${width}px`);\n };\n const handleScroll = (el: Element) => {\n const width = el.scrollWidth - el.clientWidth;\n const scrollLeft = Math.round(el.scrollLeft);\n isScrolled.value =\n (position.value === \"left\" && scrollLeft > 0) ||\n (position.value === \"right\" && scrollLeft < width);\n };\n\n return {\n name: STICKY_COLUMNS_FEATURE,\n watch: [position, stickyColumns, isScrolled],\n modifyColumns: {\n func: (columnConfig) => {\n const sticky = columnConfig\n .filter((col) => stickyColumns.value.includes(col.key))\n .map((column) => {\n const style =\n position.value === \"left\"\n ? {\n right: \"auto\",\n left: `var(${createStickyPositionCssVar(column.key)})`,\n }\n : {\n left: \"auto\",\n right: `var(${createStickyPositionCssVar(column.key)})`,\n };\n return {\n ...column,\n thAttributes: mergeVueProps(\n {\n style,\n class: {\n \"onyx-data-grid-sticky-columns--sticky\": true,\n [position.value]: true,\n isScrolled: isScrolled.value,\n },\n ref: (el) => {\n if (el) {\n elementsToStyle.value[column.key] = el as HTMLElement;\n } else {\n delete elementsToStyle.value[column.key];\n }\n },\n },\n column.thAttributes,\n ),\n tdAttributes: {\n style,\n class: {\n \"onyx-data-grid-sticky-columns--sticky\": true,\n [position.value]: true,\n isScrolled: isScrolled.value,\n },\n },\n };\n });\n const nonSticky = columnConfig.filter((col) => !stickyColumns.value.includes(col.key));\n return position.value === \"left\"\n ? [...sticky, ...nonSticky]\n : [...nonSticky, ...sticky.slice().reverse()];\n },\n } satisfies ModifyColumns<TEntry> as ModifyColumns<TEntry>,\n scrollContainerAttributes: () => ({\n ref: (el) => {\n if (el) {\n nextTick(() => handleScroll(el as Element));\n }\n },\n onScrollCapturePassive: (e: Event) => handleScroll(e.target as HTMLElement),\n }),\n };\n });\n","<script lang=\"ts\" setup>\nimport { computed, useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useAutofocus } from \"../../composables/useAutoFocus.js\";\nimport { getFormMessages, useCustomValidity } from \"../../composables/useCustomValidity.js\";\nimport { useErrorClass } from \"../../composables/useErrorClass.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport type { Nullable } from \"../../types/index.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport { isValidDate } from \"../../utils/date.js\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxFormElement from \"../OnyxFormElement/OnyxFormElement.vue\";\nimport OnyxLoadingIndicator from \"../OnyxLoadingIndicator/OnyxLoadingIndicator.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { DateValue, OnyxDatePickerProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxDatePickerProps>(), {\n type: \"date\",\n required: false,\n readonly: false,\n loading: false,\n skeleton: SKELETON_INJECTED_SYMBOL,\n disabled: FORM_INJECTED_SYMBOL,\n showError: FORM_INJECTED_SYMBOL,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the current value changes. Will be a ISO timestamp created by `new Date().toISOString()`.\n */\n \"update:modelValue\": [value?: Nullable<DateValue>];\n /**\n * Emitted when the validity state of the input changes.\n */\n validityChange: [validity: ValidityState];\n}>();\n\ndefineOptions({ inheritAttrs: false });\nconst { rootAttrs, restAttrs } = useRootAttrs();\nconst { vCustomValidity, errorMessages } = useCustomValidity({ props, emit });\nconst successMessages = computed(() => getFormMessages(props.success));\nconst messages = computed(() => getFormMessages(props.message));\nconst { densityClass } = useDensity(props);\nconst { disabled, showError } = useFormContext(props);\nconst skeleton = useSkeletonContext(props);\nconst errorClass = useErrorClass(showError);\n\n/**\n * Gets the normalized date based on the input type that can be passed to the native HTML `<input />`.\n * Will be checked to be a valid date.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats#date_strings\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats#local_date_and_time_strings\n */\nconst getNormalizedDate = computed(() => {\n return (value?: DateValue | null) => {\n const date = value != undefined && value != null ? new Date(value) : undefined;\n if (!isValidDate(date)) return;\n\n const dateString = date.toISOString().split(\"T\")[0];\n if (props.type === \"date\") return dateString;\n\n // for datetime type, the hour must be in the users local timezone so just returning the string returned by `toISOString()` will be invalid\n // since the timezone offset is missing then\n const hours = date.getHours().toString().padStart(2, \"0\");\n const minutes = date.getMinutes().toString().padStart(2, \"0\");\n return `${dateString}T${hours}:${minutes}`;\n };\n});\n\n/**\n * Current value (with getter and setter) that can be used as \"v-model\" for the native input.\n */\nconst modelValue = useVModel({\n props,\n emit,\n key: \"modelValue\",\n});\nconst value = computed({\n get: () => getNormalizedDate.value(modelValue.value),\n set: (value) => {\n const newDate = new Date(value ?? \"\");\n modelValue.value = isValidDate(newDate) ? newDate.toISOString() : \"\";\n },\n});\nconst input = useTemplateRef(\"inputRef\");\nuseAutofocus(input, props);\n</script>\n\n<template>\n <div\n v-if=\"skeleton\"\n :class=\"['onyx-component', 'onyx-datepicker-skeleton', densityClass]\"\n v-bind=\"rootAttrs\"\n >\n <OnyxSkeleton v-if=\"!props.hideLabel\" class=\"onyx-datepicker-skeleton__label\" />\n <OnyxSkeleton class=\"onyx-datepicker-skeleton__input\" />\n </div>\n\n <div\n v-else\n :class=\"['onyx-component', 'onyx-datepicker', densityClass, errorClass]\"\n v-bind=\"rootAttrs\"\n >\n <OnyxFormElement\n v-bind=\"props\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :message=\"messages\"\n >\n <template #default=\"{ id: inputId }\">\n <div class=\"onyx-datepicker__wrapper\">\n <OnyxLoadingIndicator\n v-if=\"props.loading\"\n class=\"onyx-datepicker__loading\"\n type=\"circle\"\n />\n <!-- key is needed to keep current value when switching between date and datetime type -->\n <input\n :id=\"inputId\"\n :key=\"props.type\"\n ref=\"inputRef\"\n v-model=\"value\"\n v-custom-validity\n class=\"onyx-datepicker__native\"\n :class=\"{ 'onyx-datepicker__native--success': successMessages }\"\n :type=\"props.type\"\n :required=\"props.required\"\n :autofocus=\"props.autofocus\"\n :name=\"props.name\"\n :readonly=\"props.readonly\"\n :disabled=\"disabled || props.loading\"\n :aria-label=\"props.hideLabel ? props.label : undefined\"\n :title=\"props.hideLabel ? props.label : undefined\"\n :min=\"getNormalizedDate(props.min)\"\n :max=\"getNormalizedDate(props.max)\"\n v-bind=\"restAttrs\"\n />\n </div>\n </template>\n </OnyxFormElement>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"../../styles/mixins/input.scss\";\n\n.onyx-datepicker,\n.onyx-datepicker-skeleton {\n --onyx-datepicker-padding-vertical: var(--onyx-density-xs);\n}\n\n.onyx-datepicker-skeleton {\n @include input.define-skeleton-styles(\n $height: calc(1lh + 2 * var(--onyx-datepicker-padding-vertical))\n );\n}\n\n.onyx-datepicker {\n @include layers.component() {\n @include input.define-shared-styles(\n $base-selector: \".onyx-datepicker\",\n $vertical-padding: var(--onyx-datepicker-padding-vertical)\n );\n\n &__native {\n &::-webkit-calendar-picker-indicator {\n cursor: pointer;\n }\n }\n }\n}\n</style>\n","import type { DensityProp } from \"../../composables/density.js\";\nimport type { Nullable } from \"../../types/index.js\";\n\nexport type OnyxBasicDialogProps = DensityProp & {\n /**\n * (Aria) label that describes the dialog. Required for accessibility / screen readers.\n */\n label: string;\n /**\n * Whether the dialog is open.\n */\n open?: Nullable<boolean>;\n /**\n * Whether the dialog is a modal.\n * If `true`, interaction with the rest of the page is prevented and a backdrop is displayed.\n * Also the `close` event is emitted when pressing \"Escape\".\n */\n modal?: boolean;\n /**\n * Whether to prevent closing the dialog when clicking outside or pressing the `Escape` key.\n */\n nonDismissible?: boolean;\n /**\n * Whether the dialog is an [alert dialog](https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/).\n * Should be set for better accessibility / screen reader support when the dialog\n * interrupts the user's workflow to communicate an important message and acquire a response,\n * e.g. a delete confirmation.\n */\n alert?: boolean;\n /**\n * How to align the dialog horizontally. If \"left\" or \"right\", the modal will also be made full height.\n */\n alignment?: DialogAlignment;\n};\n\nexport const DIALOG_ALIGNMENTS = [\"left\", \"center\", \"right\"] as const;\nexport type DialogAlignment = (typeof DIALOG_ALIGNMENTS)[number];\n","<script lang=\"ts\" setup>\nimport { iconXSmall } from \"@sit-onyx/icons\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport OnyxBasicPopover from \"../OnyxBasicPopover/OnyxBasicPopover.vue\";\nimport OnyxHeadline from \"../OnyxHeadline/OnyxHeadline.vue\";\nimport OnyxSystemButton from \"../OnyxSystemButton/OnyxSystemButton.vue\";\nimport type { OnyxDialogProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxDialogProps>(), {\n open: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the dialog should be closed.\n */\n \"update:open\": [open: boolean];\n}>();\n\nconst slots = defineSlots<{\n /**\n * The trigger for the dialog. Should be an interactive component like a button or link.\n */\n trigger?(params: {\n /**\n * Attributes and event listeners that must be bound to an interactive element (button or link), that should act as the dialog trigger.\n */\n trigger: object;\n }): unknown;\n /**\n * Dialog content.\n */\n default(): unknown;\n /**\n * Optional slot to override the headline with custom content.\n * If unset, the `label` property will be shown.\n */\n headline?(bindings: Pick<OnyxDialogProps, \"label\">): unknown;\n /**\n * Optional footer slot to e.g. show action buttons (see OnyxBottomBar component).\n */\n footer?(): unknown;\n}>();\n\nconst { t } = injectI18n();\nconst { densityClass } = useDensity(props);\n\n/**\n * If the dialog is expanded or not.\n */\nconst isExpanded = useVModel({\n props,\n emit,\n key: \"open\",\n default: false,\n});\n</script>\n\n<template>\n <OnyxBasicPopover v-bind=\"props\" v-model:open=\"isExpanded\" :class=\"['onyx-dialog', densityClass]\">\n <template #default=\"{ trigger }\">\n <slot name=\"trigger\" :trigger=\"trigger\"> </slot>\n </template>\n <template #content>\n <div class=\"onyx-dialog__header\">\n <div class=\"onyx-dialog__headline\">\n <div class=\"onyx-dialog__headline-content\">\n <slot name=\"headline\" :label=\"props.label\">\n <OnyxHeadline is=\"h2\">{{ props.label }}</OnyxHeadline>\n </slot>\n </div>\n\n <OnyxSystemButton\n v-if=\"!props.nonDismissible\"\n class=\"onyx-alert-dialog__close\"\n :label=\"t('dialog.close')\"\n :icon=\"iconXSmall\"\n @click=\"() => (isExpanded = !isExpanded)\"\n />\n </div>\n </div>\n\n <div class=\"onyx-dialog__body\">\n <slot></slot>\n </div>\n\n <div v-if=\"!!slots.footer\" class=\"onyx-dialog__footer\">\n <slot name=\"footer\"></slot>\n </div>\n </template>\n </OnyxBasicPopover>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-dialog {\n @include layers.component() {\n --onyx-dialog-padding-inline: var(--onyx-density-md);\n --onyx-basic-dialog-padding: 0;\n width: fit-content;\n .onyx-basic-popover__dialog {\n --onyx-basic-popover-max-width: calc(100% - 2 * (var(--onyx-density-md)));\n }\n\n .onyx-basic-dialog__content {\n display: flex;\n flex-direction: column;\n }\n\n &__header {\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: var(--onyx-density-2xs);\n padding: var(--onyx-density-md) var(--onyx-dialog-padding-inline);\n }\n\n &__headline {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--onyx-density-sm);\n }\n\n &__headline-content {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: inherit;\n position: relative;\n width: 100%;\n overflow: hidden;\n justify-content: center;\n }\n\n &__body {\n overflow: auto;\n width: 100%;\n flex-grow: 1;\n }\n &__footer {\n width: 100%;\n }\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useDensity } from \"../../composables/density.js\";\nimport { provideSkeletonContext } from \"../../composables/useSkeletonState.js\";\nimport { provideFormContext } from \"./OnyxForm.core.js\";\nimport type { OnyxFormProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxFormProps>(), {\n disabled: false,\n showError: \"touched\",\n});\n\ndefineSlots<{\n /**\n * Any form content\n */\n default?(): unknown;\n}>();\n\nprovideFormContext(props);\nprovideSkeletonContext(props);\n\nconst { densityClass } = useDensity(props);\n</script>\n\n<template>\n <form\n :class=\"{\n 'onyx-component': true,\n 'onyx-form': true,\n ...densityClass,\n }\"\n >\n <slot></slot>\n </form>\n</template>\n","import type { SkeletonInjected } from \"../../composables/useSkeletonState.js\";\n\nexport type OnyxHeadlineProps = {\n /**\n * Semantical headline type. Should match the page hierarchy and should not skip hierarchies (e.g. h2 should be followed by h3 etc.).\n */\n is: HeadlineType;\n /**\n * Visual size of the headline (h1-h6). Will default to but can be different from the semantical `is` property.\n * Please note that only h1-h4 are intended to be used from UX perspective, h5 and h6 will have the same styles as h4.\n */\n showAs?: Exclude<HeadlineType, \"h5\" | \"h6\">;\n /**\n * Unique headline hash/ID (without \"#\") that is used to show a \"#\" icon on hover. Makes the headline clickable and a URL that points to this headline\n * is copied to the users clipboard. Will be automatically normalized when containing non URL-safe characters.\n *\n * @example \"about-us\"\n */\n hash?: string;\n /**\n * Whether to show a skeleton headline.\n */\n skeleton?: SkeletonInjected;\n};\n\nexport const HEADLINE_TYPES = [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"] as const;\nexport type HeadlineType = (typeof HEADLINE_TYPES)[number];\n","import type { OnyxColor } from \"../../types/colors.js\";\n\nexport type OnyxIconProps = IconSizeProp & {\n /**\n * SVG source of the icon. **Important**: Only provide trustworthy content, the SVG content will\n * not be sanitized.\n */\n icon: string;\n /**\n * Icon color.\n */\n color?: OnyxColor | \"currentColor\";\n /**\n * In inline mode the icon will adapt to the font-size and align itself according to the line-height.\n */\n inline?: boolean;\n};\n\nexport const ICON_SIZES = [\"12px\", \"16px\", \"24px\", \"32px\", \"48px\", \"64px\", \"96px\"] as const;\nexport type IconSize = (typeof ICON_SIZES)[number];\n\nexport type IconSizeProp<T extends IconSize = IconSize> = {\n /**\n * Size. Pixel values will be translated to the according `rem` value by the base of `16px`=`1rem`.\n *\n * @default 24px\n */\n size?: T;\n};\n","<script lang=\"ts\" setup>\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport ButtonOrLinkLayout from \"../OnyxButton/ButtonOrLinkLayout.vue\";\nimport { FORM_INJECTED_SYMBOL } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxLoadingIndicator from \"../OnyxLoadingIndicator/OnyxLoadingIndicator.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxIconButtonProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxIconButtonProps>(), {\n disabled: FORM_INJECTED_SYMBOL,\n type: \"button\",\n color: \"primary\",\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\nconst { densityClass } = useDensity(props);\nconst skeleton = useSkeletonContext(props);\n\ndefineSlots<{\n /** Slot for an custom icon. Will have no effect if property `icon` is passed. */\n default(): unknown;\n}>();\n</script>\n\n<template>\n <OnyxSkeleton v-if=\"skeleton\" :class=\"['onyx-icon-button-skeleton', densityClass]\" />\n\n <ButtonOrLinkLayout\n v-else\n v-bind=\"props\"\n :aria-label=\"props.label\"\n :title=\"props.label\"\n :class=\"[\n 'onyx-component',\n 'onyx-icon-button',\n `onyx-icon-button--${props.color}`,\n { 'onyx-icon-button--loading': props.loading },\n densityClass,\n ]\"\n >\n <OnyxLoadingIndicator v-if=\"props.loading\" type=\"circle\" />\n <OnyxIcon v-else-if=\"props.icon\" :icon=\"props.icon\" />\n <slot v-else></slot>\n </ButtonOrLinkLayout>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n@use \"../../styles/mixins/density.scss\";\n\n.onyx-icon-button,\n.onyx-icon-button-skeleton {\n --onyx-icon-button-padding: var(--onyx-density-xs);\n}\n\n.onyx-icon-button-skeleton {\n // icon size + 2 * padding\n $size: calc(1.5rem + 2 * var(--onyx-icon-button-padding));\n height: $size;\n width: $size;\n border-radius: var(--onyx-radius-full);\n}\n\n.onyx-icon-button {\n @include layers.component {\n --icon-button-color: var(--onyx-color-text-icons-primary-intense);\n --icon-button-bg-color: transparent;\n --icon-button-cursor: pointer;\n\n display: inline-grid;\n place-items: center;\n padding: var(--onyx-icon-button-padding);\n color: var(--icon-button-color);\n cursor: var(--icon-button-cursor);\n\n outline: none;\n appearance: none;\n border: none;\n background: none;\n\n border-radius: var(--onyx-radius-full);\n background-color: var(--icon-button-bg-color);\n\n &:hover,\n &:focus-visible {\n --icon-button-bg-color: var(--onyx-color-base-primary-200);\n --icon-button-color: var(--onyx-color-text-icons-primary-bold);\n }\n\n &:disabled:not(&--loading) {\n --icon-button-color: var(--onyx-color-text-icons-primary-soft);\n }\n\n &:active {\n --icon-button-bg-color: var(--onyx-color-base-primary-300);\n --icon-button-color: var(--onyx-color-text-icons-primary-bold);\n }\n\n &--neutral {\n --icon-button-color: var(--onyx-color-text-icons-neutral-medium);\n\n &:hover,\n &:focus-visible {\n --icon-button-bg-color: var(--onyx-color-base-neutral-200);\n --icon-button-color: var(--onyx-color-text-icons-neutral-intense);\n }\n\n &:disabled:not(&--loading) {\n --icon-button-color: var(--onyx-color-text-icons-neutral-soft);\n }\n\n &:active {\n --icon-button-bg-color: var(--onyx-color-base-neutral-300);\n --icon-button-color: var(--onyx-color-text-icons-neutral-intense);\n }\n }\n\n &--danger {\n --icon-button-color: var(--onyx-color-text-icons-danger-intense);\n\n &:hover,\n &:focus-visible {\n --icon-button-bg-color: var(--onyx-color-base-danger-200);\n --icon-button-color: var(--onyx-color-text-icons-danger-bold);\n }\n\n &:disabled:not(&--loading) {\n --icon-button-color: var(--onyx-color-text-icons-danger-soft);\n }\n\n &:active {\n --icon-button-bg-color: var(--onyx-color-base-danger-300);\n --icon-button-color: var(--onyx-color-text-icons-danger-bold);\n }\n }\n\n &:disabled {\n --icon-button-bg-color: transparent;\n --icon-button-cursor: default;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconFileDisabled } from \"@sit-onyx/icons\";\nimport { computed, ref, watch } from \"vue\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxImageProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxImageProps>(), {\n loading: \"lazy\",\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\ndefineOptions({ inheritAttrs: false });\nconst skeleton = useSkeletonContext(props);\n\nconst isError = ref(false);\nwatch(\n () => props.src,\n () => (isError.value = false),\n { deep: true },\n);\n\nconst imageSrc = computed(() => {\n if (typeof props.src === \"string\") return { light: props.src, dark: undefined };\n return props.src;\n});\n\nconst size = computed(() => {\n const width = props.shape === \"circle\" ? Math.min(props.width, props.height) : props.width;\n const height = props.shape === \"circle\" ? Math.min(props.width, props.height) : props.height;\n return { width: `${width}px`, height: `${height}px` };\n});\n\nconst { restAttrs, rootAttrs } = useRootAttrs();\n</script>\n\n<template>\n <figure\n v-bind=\"rootAttrs\"\n :class=\"[\n 'onyx-component',\n 'onyx-image',\n { 'onyx-image--error': isError, [`onyx-image--${props.shape}`]: props.shape },\n ]\"\n >\n <OnyxSkeleton v-if=\"skeleton\" class=\"onyx-image__source\" :style=\"size\" v-bind=\"restAttrs\" />\n\n <template v-else>\n <img\n class=\"onyx-image__source\"\n :class=\"{ 'onyx-image__source--light': imageSrc.dark }\"\n v-bind=\"{ ...restAttrs, ...props }\"\n :src=\"imageSrc.light\"\n :alt=\"props.alt\"\n @error=\"isError = true\"\n />\n <img\n v-if=\"imageSrc.dark\"\n class=\"onyx-image__source onyx-image__source--dark\"\n v-bind=\"{ ...restAttrs, ...props }\"\n :src=\"imageSrc.dark\"\n :alt=\"props.alt\"\n @error=\"isError = true\"\n />\n\n <div v-if=\"isError\" class=\"onyx-image__error\" :style=\"size\" v-bind=\"restAttrs\">\n <OnyxIcon :icon=\"iconFileDisabled\" size=\"32px\" />\n <div class=\"onyx-image__alt onyx-text--small\">{{ props.alt }}</div>\n </div>\n </template>\n </figure>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-image {\n @include layers.component() {\n --onyx-image-clip-size: var(--onyx-spacing-2xl);\n display: contents;\n background-color: var(--onyx-color-base-neutral-300);\n\n &--rounded {\n border-radius: var(--onyx-radius-md);\n }\n\n &--circle {\n border-radius: var(--onyx-radius-full);\n aspect-ratio: 1;\n }\n\n &--clip {\n // see: https://bennettfeely.com/clippy/\n clip-path: polygon(\n var(--onyx-image-clip-size) 0,\n 100% 0,\n 100% calc(100% - var(--onyx-image-clip-size)),\n calc(100% - var(--onyx-image-clip-size)) 100%,\n 0 100%,\n 0 var(--onyx-image-clip-size)\n );\n }\n\n &--clip-inverted {\n // see: https://bennettfeely.com/clippy/\n clip-path: polygon(\n 0 0,\n calc(100% - var(--onyx-image-clip-size)) 0,\n 100% var(--onyx-image-clip-size),\n 100% 100%,\n var(--onyx-image-clip-size) 100%,\n 0 calc(100% - var(--onyx-image-clip-size))\n );\n }\n\n &--error {\n .onyx-image__source {\n display: none;\n }\n }\n\n &__source {\n display: inline-block;\n object-fit: cover;\n border-radius: inherit;\n background-color: inherit;\n clip-path: inherit;\n max-width: 100%;\n max-height: 100%;\n width: inherit;\n aspect-ratio: inherit;\n\n &--dark {\n display: none;\n }\n\n .dark & {\n &--dark {\n display: inline-block;\n }\n\n &--light {\n display: none;\n }\n }\n }\n\n &__error {\n color: var(--onyx-color-text-icons-neutral-medium);\n padding: var(--onyx-density-xs);\n font-family: var(--onyx-font-family);\n background-color: inherit;\n border-radius: inherit;\n clip-path: inherit;\n\n display: inline-flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n gap: var(--onyx-density-2xs);\n width: max-content;\n aspect-ratio: inherit;\n }\n\n &__alt {\n overflow: auto;\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n }\n}\n</style>\n","import type { SkeletonInjected } from \"../../composables/useSkeletonState.js\";\n\nexport type OnyxImageProps = {\n /**\n * Image URL to show.\n * You can pass different images for light and dark mode.\n */\n src: string | { light: string; dark: string };\n /**\n * (Descriptive) Text that can replace the image, e.g. if it can not be loaded.\n * Can be set to an empty string if the image is only used for decoration and NOT a key part of the content.\n */\n alt: string;\n /**\n * Width of the image in pixels. Can be customized via CSS to e.g. use 100% of the available width.\n * Will be used by the browser to reserve space while the image is loading and is recommended to prevent a layout shift.\n */\n width: number;\n /**\n * Height of the image in pixels. Can be customized via CSS to e.g. use 100% of the available height.\n * Will be used by the browser to reserve space while the image is loading and is recommended to prevent a layout shift.\n */\n height: number;\n /**\n * Defines how the image should be loaded.\n * - lazy: Defers loading until the image reaches a browser-defined distance from the viewport\n * - eager: Immediately loads the image, regardless of whether its currently in the visible viewport\n */\n loading?: ImageLoading;\n /**\n * Image border shape. If unset, the original image shape will be used.\n */\n shape?: ImageShape;\n /**\n * Whether to show a skeleton image.\n */\n skeleton?: SkeletonInjected;\n};\n\nexport type ImageLoading = \"eager\" | \"lazy\";\n\nexport const IMAGE_SHAPES = [\"rounded\", \"circle\", \"clip\", \"clip-inverted\"] as const;\nexport type ImageShape = (typeof IMAGE_SHAPES)[number];\n","import { computed, toValue, type MaybeRefOrGetter } from \"vue\";\nimport { injectI18n } from \"../i18n/index.js\";\nimport type { Nullable } from \"../types/index.js\";\nimport type { FormMessages } from \"./useCustomValidity.js\";\n\n/**\n * @see [MDN autocapitalize](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autocapitalize)\n */\nexport const AUTOCAPITALIZE = [\"none\", \"sentences\", \"words\", \"characters\"] as const;\nexport type Autocapitalize = (typeof AUTOCAPITALIZE)[number];\n\n/**\n * Same as TypeScript native \"Autofill\" type but without \"AutoFillSection\" because\n * the Vue compiler currently can not handle it (too complex union type).\n *\n * @since TypeScript version 5.2\n */\nexport type Autocomplete = Exclude<AutoFill, AutoFillSection | \"\">;\n\nexport type MaxLength =\n | number\n | {\n /**\n * Maximum number of characters that are allowed to be entered.\n */\n max: number;\n /**\n * Restricts the user from typing more characters than allowed.\n */\n strict?: boolean;\n };\n\n/**\n * Shared types for all kind of text inputs, namely: `<input type=\"text\">` and `<textarea>`\n */\nexport type SharedTextInputProps = {\n /**\n * Maximum number of characters that are allowed to be entered.\n * Warning: when the value is (pre)set programmatically,\n * the input invalidity will not be detected by the browser, it will only turn invalid\n * as soon as a user interacts with the input (types something).\n */\n maxlength?: MaxLength;\n /**\n * If `true`, a character counter will be displayed if `maxLength` is set.\n */\n withCounter?: boolean;\n /**\n * Minimum number of characters that have to to be entered.\n * Warning: when the value is (pre)set programmatically,\n * the input invalidity will not be detected by the browser, it will only turn invalid\n * as soon as a user interacts with the input (types something).\n */\n minlength?: number;\n /**\n * If and how text should be automatically be capitalized when using non-physical keyboards\n * (such as virtual keyboard on mobile devices or voice input).\n *\n * Has no effect when `type` is set to \"url\", \"email\" or \"password\".\n *\n * @see [MDN autocapitalize](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autocapitalize)\n */\n autocapitalize?: Autocapitalize;\n /**\n * Specify how to provide automated assistance in filling out the input.\n * Some autocomplete values might required specific browser permissions to be allowed by the user.\n * Also browsers might require a `name` property.\n *\n * @see [MDN autocomplete](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete)\n */\n autocomplete?: Autocomplete;\n /**\n * Current input value.\n */\n modelValue?: Nullable<string>;\n};\n\nexport type HtmlTextInputElements = HTMLInputElement | HTMLTextAreaElement;\n\nexport type UseTextInputOptions = {\n modelValue: MaybeRefOrGetter<string | undefined | null>;\n props: SharedTextInputProps;\n};\n\n/**\n * This composable returns a computed property `maxLengthError` that checks if the `modelValue` prop is longer than the specified `maxlength`.\n * If so, it returns a custom error message.\n *\n * The native [maxlength attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/maxlength) restricts the user from entering more characters then allowed.\n * This custom validation circumvents that restrictions.\n */\nexport const useLenientMaxLengthValidation = (options: UseTextInputOptions) => {\n const { t } = injectI18n();\n\n const normalized = computed(() => {\n const maxLength = options.props.maxlength;\n return {\n max: maxLength && (typeof maxLength === \"number\" ? maxLength : maxLength.max),\n strict: (typeof maxLength === \"object\" && maxLength.strict) ?? false,\n };\n });\n\n const maxLengthError = computed(() => {\n const { strict, max } = normalized.value;\n const modelValue = toValue(options.modelValue);\n\n return !strict && modelValue && max && modelValue.length > max\n ? ({\n longMessage: t.value(\"validations.tooLong.fullError\", {\n n: modelValue.length,\n maxLength: max,\n }),\n shortMessage: t.value(\"validations.tooLong.preview\", {\n n: modelValue.length,\n maxLength: max,\n }),\n } satisfies FormMessages)\n : undefined;\n });\n\n const maxLength = computed(() => (normalized.value.strict ? normalized.value.max : undefined));\n\n return {\n /**\n * Custom maxlength error, if we are unable to use the native maxlength attribute.\n */\n maxLengthError,\n /**\n * In strict mode, the native maxlength attribute is used.\n */\n maxLength,\n };\n};\n","import type { ComputedRef, InjectionKey, Ref, TeleportProps } from \"vue\";\nimport type { MoreListInjectionKey } from \"../../composables/useMoreList.js\";\nimport type { OnyxBreakpoint } from \"../../utils/breakpoints.js\";\nimport type { OnyxNavAppAreaProps } from \"../OnyxNavAppArea/types.js\";\n\nexport type OnyxNavBarProps = Pick<OnyxNavAppAreaProps, \"appName\" | \"logoUrl\"> & {\n /**\n * Whether to show a back button.\n */\n withBackButton?: boolean;\n /**\n * Override app area.\n * @default Link to \"/\" route with a translated \"Go to home\" aria-label depending on the current locale.\n */\n appArea?: Omit<OnyxNavAppAreaProps, \"appName\" | \"logoUrl\">;\n /**\n *\n * Determines if and when the `OnyxNavBar` should render in mobile mode.\n *\n * `mobile` prop can be one of the following;\n * - a `boolean`: The NavBar renders in mobile mode, when `true`.\n * - a `OnyxBreakpoint`: The NavBar renders in mobile mode, when the current breakpoint matches or is smaller.\n * - a `number`: The NavBar renders in mobile when the viewport width is smaller than the provided value.\n *\n * @see [onyx docs](https://onyx.schwarz/development/breakpoints.html) for more information.\n */\n mobile?: boolean | OnyxBreakpoint | number;\n};\n\n/**\n * [Vue injection key](https://vuejs.org/guide/components/provide-inject) that is provided by the nav bar\n * to communicate child components whether they should render in mobile or desktop mode.\n *\n * @returns `true` if mobile, `false` otherwise\n */\nexport const MOBILE_NAV_BAR_INJECTION_KEY = Symbol() as InjectionKey<ComputedRef<boolean>>;\n/**\n * [Vue injection key](https://vuejs.org/guide/components/provide-inject) that is provided by the nav items\n * to communicate child nav items whether they should render as flyout or list item.\n *\n * @returns `true` if outermost parent, `false` otherwise\n */\nexport const NAV_BAR_IS_TOP_LEVEL_INJECTION_KEY = Symbol() as InjectionKey<boolean>;\n\nexport const NAV_BAR_MORE_LIST_INJECTION_KEY = Symbol() as MoreListInjectionKey;\n\n/**\n * [Vue injection key](https://vuejs.org/guide/components/provide-inject) that is provided by the nav bar to communicate the teleport target id for navitems that should be put into the more list.\n */\nexport const NAV_BAR_MORE_LIST_TARGET_INJECTION_KEY = Symbol() as InjectionKey<\n Ref<TeleportProps[\"to\"]>\n>;\n\nexport type OnyxNavBarSlots = {\n /**\n * [`OnyxNavItem`](/docs/navigation-navbar-modules-navitem--docs) components should be placed and nested here to build the navigation.\n */\n default?: () => unknown;\n /**\n * Optional slot to override the app area content (logo and app name, e.g. with a custom icon / `OnyxIcon` component).\n */\n appArea?: () => unknown;\n /**\n * Optional context area on the right to display additional (global) components, like user login, global settings etc.\n */\n contextArea?: () => unknown;\n /**\n * Same as `contextArea` slot on desktop (will be placed next to it) but on mobile, the components inside will stay\n * in the mobile nav bar itself and will not be collapsed into the context menu button.\n *\n * Global actions like e.g. search or notification center can be placed here that should always be directly accessible on mobile.\n */\n globalContextArea?: () => unknown;\n /**\n * Label for displaying the currently active page in mobile mode.\n * If a child of a nav item is active, it should displayed the child label instead of the parent.\n */\n mobileActivePage?: () => unknown;\n};\n","<script lang=\"ts\" setup>\nimport { computed, inject } from \"vue\";\nimport { MOBILE_NAV_BAR_INJECTION_KEY } from \"../OnyxNavBar/types.js\";\nimport type { OnyxSeparatorProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxSeparatorProps>(), {\n orientation: \"horizontal\",\n});\n\n// using explicit \"undefined\" fallback value here to avoid \"cannot find symbol\" console warning\nconst isMobileNavBar = inject(MOBILE_NAV_BAR_INJECTION_KEY, undefined);\n\nconst isVertical = computed(() => {\n return props.orientation === \"vertical\" && !isMobileNavBar?.value;\n});\n</script>\n\n<template>\n <div\n class=\"onyx-component onyx-separator\"\n :class=\"{ 'onyx-separator--vertical': isVertical }\"\n role=\"separator\"\n :aria-orientation=\"props.orientation\"\n ></div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-separator {\n @include layers.component() {\n --onyx-separator-size: var(--onyx-1px-in-rem);\n --onyx-separator-min-size: 2rem;\n background-color: var(--onyx-color-component-border-neutral);\n height: var(--onyx-separator-size);\n min-width: var(--onyx-separator-min-size);\n\n &--vertical {\n width: var(--onyx-separator-size);\n min-width: var(--onyx-separator-size);\n min-height: var(--onyx-separator-min-size);\n height: initial;\n max-height: 100%;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconCheckSmall, iconEye, iconEyeClosed, iconXSmall } from \"@sit-onyx/icons\";\nimport { computed, ref, useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useAutofocus } from \"../../composables/useAutoFocus.js\";\nimport { getFormMessages, useCustomValidity } from \"../../composables/useCustomValidity.js\";\nimport { useErrorClass } from \"../../composables/useErrorClass.js\";\nimport { useLenientMaxLengthValidation } from \"../../composables/useLenientMaxLengthValidation.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxFormElement from \"../OnyxFormElement/OnyxFormElement.vue\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxLoadingIndicator from \"../OnyxLoadingIndicator/OnyxLoadingIndicator.vue\";\nimport OnyxSeparator from \"../OnyxSeparator/OnyxSeparator.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport OnyxSystemButton from \"../OnyxSystemButton/OnyxSystemButton.vue\";\nimport type { OnyxInputProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxInputProps>(), {\n type: \"text\",\n required: false,\n autocapitalize: \"sentences\",\n readonly: false,\n loading: false,\n hideClearIcon: false,\n hideSuccessIcon: false,\n skeleton: SKELETON_INJECTED_SYMBOL,\n disabled: FORM_INJECTED_SYMBOL,\n showError: FORM_INJECTED_SYMBOL,\n requiredMarker: FORM_INJECTED_SYMBOL,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the validity state of the input changes.\n */\n validityChange: [validity: ValidityState];\n /**\n * Emitted when the input changes\n */\n \"update:modelValue\": [value: string];\n}>();\n\nconst slots = defineSlots<{\n /**\n * Inline content rendered before the actual input area.\n * Careful when using this slot, as it will shrink the space of the input.\n */\n leading?(): unknown;\n /**\n * Inline content rendered after the actual input area.\n * Careful when using this slot, as it will shrink the space of the input.\n */\n trailing?(): unknown;\n}>();\n\n/**\n * Current value of the input.\n */\nconst modelValue = useVModel({\n key: \"modelValue\",\n props,\n emit,\n default: \"\",\n});\n\ndefineOptions({ inheritAttrs: false });\nconst { rootAttrs, restAttrs } = useRootAttrs();\n\nconst { t } = injectI18n();\nconst { maxLength, maxLengthError } = useLenientMaxLengthValidation({ modelValue, props });\nconst error = computed(() => props.error ?? maxLengthError.value);\nconst { vCustomValidity, errorMessages } = useCustomValidity({ props, emit, error });\nconst successMessages = computed(() => getFormMessages(props.success));\nconst messages = computed(() => getFormMessages(props.message));\n\nconst { densityClass } = useDensity(props);\n\nconst patternSource = computed(() => {\n if (props.pattern instanceof RegExp) return props.pattern.source;\n return props.pattern;\n});\n\nconst input = useTemplateRef(\"inputRef\");\ndefineExpose({ input });\n\nconst { disabled, showError } = useFormContext(props);\nconst skeleton = useSkeletonContext(props);\nconst errorClass = useErrorClass(showError);\nuseAutofocus(input, props);\nconst showPassword = ref(false);\nconst displayType = computed(() => {\n if (props.type === \"password\" && showPassword.value) {\n return \"text\";\n }\n return props.type;\n});\n</script>\n\n<template>\n <div\n v-if=\"skeleton\"\n :class=\"['onyx-component', 'onyx-input-skeleton', densityClass]\"\n v-bind=\"rootAttrs\"\n >\n <OnyxSkeleton v-if=\"!props.hideLabel\" class=\"onyx-input-skeleton__label\" />\n <OnyxSkeleton class=\"onyx-input-skeleton__input\" />\n </div>\n\n <div\n v-else\n :class=\"['onyx-component', 'onyx-input', densityClass, errorClass]\"\n v-bind=\"rootAttrs\"\n >\n <OnyxFormElement\n v-bind=\"props\"\n :error-messages=\"errorMessages\"\n :success-messages=\"successMessages\"\n :message=\"messages\"\n >\n <template #default=\"{ id: inputId }\">\n <div class=\"onyx-input__wrapper\">\n <slot name=\"leading\"></slot>\n <OnyxSeparator\n v-if=\"slots.leading\"\n orientation=\"vertical\"\n class=\"onyx-input__separator onyx-input__separator--leading\"\n />\n <OnyxLoadingIndicator v-if=\"props.loading\" class=\"onyx-input__loading\" type=\"circle\" />\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n v-model=\"modelValue\"\n v-custom-validity\n :placeholder=\"props.placeholder\"\n class=\"onyx-input__native\"\n :type=\"displayType\"\n :required=\"props.required\"\n :autocapitalize=\"props.autocapitalize\"\n :autocomplete=\"props.autocomplete\"\n :autofocus=\"props.autofocus\"\n :name=\"props.name\"\n :pattern=\"patternSource\"\n :readonly=\"props.readonly\"\n :disabled=\"disabled || props.loading\"\n :maxlength=\"maxLength\"\n :minlength=\"props.minlength\"\n :aria-label=\"props.hideLabel ? props.label : undefined\"\n :title=\"props.hideLabel ? props.label : undefined\"\n v-bind=\"restAttrs\"\n />\n <button\n v-if=\"!props.hideClearIcon && modelValue !== ''\"\n type=\"button\"\n class=\"onyx-input__clear\"\n :aria-label=\"t('input.clear')\"\n :title=\"t('input.clear')\"\n tabindex=\"-1\"\n @click=\"() => (modelValue = '')\"\n >\n <OnyxIcon :icon=\"iconXSmall\" />\n </button>\n\n <OnyxIcon\n v-if=\"!props.hideSuccessIcon && successMessages\"\n class=\"onyx-input__check-icon\"\n :icon=\"iconCheckSmall\"\n color=\"success\"\n />\n\n <OnyxSeparator\n v-if=\"slots.trailing || props.type === 'password'\"\n orientation=\"vertical\"\n class=\"onyx-input__separator onyx-input__separator--trailing\"\n />\n <slot name=\"trailing\">\n <OnyxSystemButton\n v-if=\"props.type === 'password'\"\n :icon=\"showPassword ? iconEyeClosed : iconEye\"\n :label=\"showPassword ? t('input.hidePassword') : t('input.showPassword')\"\n tabindex=\"-1\"\n color=\"soft\"\n @click=\"showPassword = !showPassword\"\n />\n </slot>\n </div>\n </template>\n </OnyxFormElement>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"../../styles/mixins/input.scss\";\n\n.onyx-input,\n.onyx-input-skeleton {\n --onyx-input-padding-vertical: var(--onyx-density-xs);\n}\n\n.onyx-input-skeleton {\n @include input.define-skeleton-styles(\n $height: calc(1lh + 2 * var(--onyx-input-padding-vertical))\n );\n}\n\n.onyx-input {\n @include layers.component() {\n @include input.define-shared-styles(\n $base-selector: \".onyx-input\",\n $vertical-padding: var(--onyx-input-padding-vertical)\n );\n }\n\n ::-webkit-search-cancel-button {\n display: none;\n }\n\n &__clear {\n height: 100%;\n margin: 0;\n padding: 0;\n\n display: flex;\n align-items: center;\n background-color: transparent;\n border: none;\n cursor: pointer;\n color: var(--onyx-color-text-icons-neutral-intense);\n\n &:hover {\n color: var(--onyx-color-text-icons-primary-intense);\n }\n }\n\n // hide clear icon when input is not focussed\n &:not(&:has(&__wrapper:focus-within)),\n &:has(&__native:read-only) {\n .onyx-input__clear {\n display: none;\n }\n }\n}\n</style>\n","import type { SharedTextInputProps } from \"../../composables/useLenientMaxLengthValidation.js\";\nimport type { SharedFormElementProps } from \"../OnyxFormElement/types.js\";\n\nexport type OnyxInputProps = SharedFormElementProps &\n SharedTextInputProps & {\n /**\n * Input type.\n * For numeric inputs, we recommend using the [OnyxStepper](https://storybook.onyx.schwarz/?path=/docs/form-elements-stepper--docs).\n * For date inputs, refer to the [OnyxDatePicker](https://storybook.onyx.schwarz/?path=/docs/form-elements-datepicker--docs).\n */\n type?: InputType;\n /**\n * Pattern the value must match to be valid.\n */\n pattern?: string | RegExp;\n /**\n * Whether to hide the check icon when the input is in a success state.\n */\n hideSuccessIcon?: boolean;\n /**\n * Whether to hide the clear icon when the input is filled and focused.\n */\n hideClearIcon?: boolean;\n };\n\nexport const INPUT_TYPES = [\"email\", \"password\", \"search\", \"tel\", \"text\", \"url\"] as const;\nexport type InputType = (typeof INPUT_TYPES)[number];\n","<script lang=\"ts\" setup>\nimport OnyxExternalLinkIcon from \"../OnyxExternalLinkIcon/OnyxExternalLinkIcon.vue\";\nimport OnyxRouterLink from \"../OnyxRouterLink/OnyxRouterLink.vue\";\nimport type { OnyxLinkProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxLinkProps>(), {\n target: \"_self\",\n withExternalIcon: \"auto\",\n});\n\ndefineSlots<{\n /**\n * Link label.\n */\n default(): unknown;\n}>();\n</script>\n\n<template>\n <OnyxRouterLink class=\"onyx-component onyx-link\" v-bind=\"props\">\n <slot></slot>\n <OnyxExternalLinkIcon v-bind=\"props\" />\n </OnyxRouterLink>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-link {\n @include layers.component() {\n text-decoration: underline;\n color: var(--onyx-color-text-icons-primary-intense);\n display: inline-block;\n\n // other styles like size, font family etc. should be inherited\n // so we don't define them here\n\n &:hover {\n color: var(--onyx-color-text-icons-primary-medium);\n }\n\n &:focus-visible {\n color: var(--onyx-color-text-icons-primary-intense);\n border-radius: var(--onyx-radius-sm);\n outline: var(--onyx-1px-in-rem) solid var(--onyx-color-component-focus-primary);\n }\n\n &:active {\n color: var(--onyx-color-text-icons-primary-bold);\n }\n\n &:visited {\n color: var(--onyx-color-text-icons-primary-bold);\n\n &:hover {\n color: var(--onyx-color-text-icons-primary-intense);\n }\n }\n\n .onyx-external-link-icon {\n margin-left: var(--onyx-density-3xs);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconX } from \"@sit-onyx/icons\";\nimport { computed } from \"vue\";\nimport OnyxHeadline from \"../OnyxHeadline/OnyxHeadline.vue\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport type { OnyxMobileNavButtonProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxMobileNavButtonProps>(), {\n open: false,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the open state changes on click.\n */\n \"update:open\": [isOpen: boolean];\n}>();\n\ndefineSlots<{\n /**\n * Slot for the menu content when it's open.\n */\n default(): unknown;\n}>();\n\nconst isOpen = computed(() => !props.disabled && props.open);\n</script>\n\n<template>\n <div class=\"onyx-component onyx-mobile-nav-button\">\n <button\n type=\"button\"\n class=\"onyx-mobile-nav-button__trigger\"\n :class=\"{ 'onyx-mobile-nav-button__trigger--active': props.open }\"\n :aria-label=\"props.label\"\n :disabled=\"props.disabled\"\n @click=\"emit('update:open', !props.open)\"\n >\n <OnyxIcon :icon=\"props.open ? iconX : props.icon\" />\n </button>\n\n <!-- using v-show here instead of v-if so the open state of nested slot items is kept when toggling the nav button -->\n <div v-show=\"isOpen\" class=\"onyx-mobile-nav-button__flyout\">\n <div class=\"onyx-mobile-nav-button__menu\">\n <OnyxHeadline is=\"h2\" v-if=\"props.headline\" class=\"onyx-mobile-nav-button__headline\">\n {{ props.headline }}\n </OnyxHeadline>\n\n <slot></slot>\n </div>\n </div>\n\n <div\n v-if=\"isOpen\"\n class=\"onyx-mobile-nav-button__backdrop\"\n role=\"presentation\"\n @click=\"emit('update:open', false)\"\n ></div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-mobile-nav-button {\n @include layers.component() {\n // should be adjusted to the height of the control button\n --top-position: 3.5rem;\n $mobile-children-selector: \":has(.onyx-nav-item-wrapper.onyx-nav-item-wrapper--open)\";\n\n &__trigger {\n display: flex;\n background-color: var(--onyx-color-base-background-blank);\n color: var(--onyx-color-text-icons-neutral-medium);\n padding: var(--onyx-spacing-md);\n cursor: pointer;\n\n :where(&) {\n border: none;\n }\n\n &:hover:not(&--active):not(&:disabled) {\n background-color: var(--onyx-color-base-background-tinted);\n }\n\n &:focus-visible {\n background-color: var(--onyx-color-base-primary-100);\n outline: none;\n }\n\n &:active,\n &--active {\n background-color: var(--onyx-color-base-primary-100);\n color: var(--onyx-color-text-icons-primary-intense);\n }\n\n &:disabled {\n cursor: default;\n\n background-color: var(--onyx-color-base-background-blank);\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n }\n\n &__headline {\n position: sticky;\n top: 0;\n z-index: 1;\n background-color: var(--onyx-color-base-background-tinted);\n padding: var(--onyx-spacing-xl) 0 var(--onyx-spacing-2xs);\n margin-inline: auto;\n }\n\n &__flyout {\n max-height: calc(100vh - var(--top-position) - var(--onyx-spacing-3xl));\n width: 100%;\n background-color: var(--onyx-color-base-background-tinted);\n box-shadow: var(--onyx-shadow-medium-bottom);\n position: relative;\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n overflow-y: auto;\n\n position: absolute;\n top: var(--top-position);\n left: 0;\n z-index: var(--onyx-z-index-navigation);\n }\n &__backdrop {\n content: \"\";\n background-color: var(--onyx-color-component-opacity-backdrop);\n width: 100%;\n height: 100vh;\n display: block;\n cursor: pointer;\n\n position: fixed;\n top: var(--top-position);\n left: 0;\n z-index: var(--onyx-z-index-page-overlay);\n }\n\n &__menu {\n max-width: 36rem;\n padding: 0 var(--onyx-spacing-md) var(--onyx-spacing-xl);\n margin-inline: auto;\n\n &:has(.onyx-nav-bar__mobile-context-content) {\n // context menu needs extra padding on top since there is no headline\n padding-top: var(--onyx-spacing-xl);\n }\n }\n\n &#{$mobile-children-selector} {\n // hide \"Navigation\" headline when nav item with children is open\n .onyx-mobile-nav-button__headline {\n display: none;\n }\n }\n // fill up the padding-top if there is no headline\n &#{$mobile-children-selector} .onyx-mobile-nav-button__menu,\n &__menu:not(:has(.onyx-mobile-nav-button__headline)) {\n padding-top: var(--onyx-spacing-xl);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconXSmall } from \"@sit-onyx/icons\";\nimport { computed, useId } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport type { Nullable } from \"../../types/index.js\";\nimport OnyxBasicDialog from \"../OnyxBasicDialog/OnyxBasicDialog.vue\";\nimport OnyxHeadline from \"../OnyxHeadline/OnyxHeadline.vue\";\nimport OnyxSystemButton from \"../OnyxSystemButton/OnyxSystemButton.vue\";\nimport type { OnyxModalProps } from \"./types.js\";\n\nconst props = defineProps<OnyxModalProps>();\n\nconst emit = defineEmits<{\n /**\n * Emitted when the modal dialog should be closed.\n * Opening is always controlled via the `open` prop.\n */\n \"update:open\": [open: Nullable<boolean>];\n}>();\n\nconst slots = defineSlots<{\n /**\n * Dialog content.\n */\n default(): unknown;\n /**\n * Optional slot to override the headline with custom content.\n * If unset, the `label` property will be shown.\n */\n headline?(bindings: Pick<OnyxModalProps, \"label\">): unknown;\n /**\n * Optional slot to add custom content, e.g. a description to the dialog header (below the headline).\n */\n description?(): unknown;\n /**\n * Optional footer slot to e.g. show action buttons (see OnyxBottomBar component).\n */\n footer?(): unknown;\n}>();\n\nconst { t } = injectI18n();\nconst { densityClass } = useDensity(props);\n\nconst descriptionId = useId();\nconst hasDescription = computed(() => !!slots.description);\n</script>\n\n<template>\n <OnyxBasicDialog\n v-bind=\"props\"\n modal\n :class=\"['onyx-modal', densityClass]\"\n :aria-describedby=\"hasDescription ? descriptionId : undefined\"\n @update:open=\"emit('update:open', $event)\"\n >\n <div class=\"onyx-modal__header\">\n <div class=\"onyx-modal__headline\">\n <div class=\"onyx-modal__headline-content\">\n <slot name=\"headline\" :label=\"props.label\">\n <OnyxHeadline is=\"h2\">{{ props.label }}</OnyxHeadline>\n </slot>\n </div>\n\n <OnyxSystemButton\n v-if=\"!props.nonDismissible\"\n class=\"onyx-alert-dialog__close\"\n :label=\"t('dialog.close')\"\n :icon=\"iconXSmall\"\n @click=\"emit('update:open', false)\"\n />\n </div>\n\n <div\n v-if=\"hasDescription\"\n :id=\"descriptionId\"\n class=\"onyx-modal__description onyx-text--small\"\n >\n <slot name=\"description\"></slot>\n </div>\n </div>\n\n <div class=\"onyx-modal__body\">\n <slot></slot>\n </div>\n\n <div v-if=\"!!slots.footer\" class=\"onyx-modal__footer\">\n <slot name=\"footer\"></slot>\n </div>\n </OnyxBasicDialog>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-modal {\n @include layers.component() {\n --onyx-modal-padding-inline: var(--onyx-density-lg);\n --onyx-basic-dialog-padding: 0;\n display: flex;\n\n .onyx-basic-dialog__content {\n display: flex;\n flex-direction: column;\n }\n\n &__header {\n display: flex;\n flex-direction: column;\n gap: var(--onyx-density-2xs);\n padding: var(--onyx-density-sm) var(--onyx-modal-padding-inline);\n border-bottom: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n }\n\n &__headline {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--onyx-density-sm);\n }\n\n &__headline-content {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: inherit;\n }\n\n &__body {\n overflow: auto;\n flex-grow: 1;\n }\n\n &__description {\n color: var(--onyx-color-text-icons-neutral-soft);\n white-space: pre-line;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport { extractLinkProps } from \"../../utils/router.js\";\nimport OnyxRouterLink from \"../OnyxRouterLink/OnyxRouterLink.vue\";\nimport type { OnyxNavAppAreaProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxNavAppAreaProps>(), {\n link: \"/\",\n});\n\ndefineSlots<{\n /**\n * Optional slot to override the content.\n */\n default?(): unknown;\n}>();\n\nconst { t } = injectI18n();\n\nconst buttonLabel = computed(() => props.label ?? t.value(\"navigation.goToHome\"));\nconst linkProps = computed(() => extractLinkProps(props.link));\n</script>\n\n<template>\n <OnyxRouterLink\n v-bind=\"linkProps\"\n class=\"onyx-component onyx-nav-app-area\"\n :aria-label=\"buttonLabel\"\n >\n <slot>\n <!--\n the width/height here is only to prevent layout shifts on initial load.\n the \"real\" size is set via CSS below\n -->\n <img\n v-if=\"props.logoUrl\"\n :src=\"props.logoUrl\"\n :alt=\"t('navigation.appLogo', { appName: props.appName })\"\n class=\"onyx-nav-app-area__logo\"\n width=\"24\"\n height=\"24\"\n />\n\n <span v-if=\"props.appName\" class=\"onyx-text-small onyx-truncation-ellipsis\">\n {{ props.appName }}\n </span>\n </slot>\n </OnyxRouterLink>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-nav-app-area {\n @include layers.component() {\n display: flex;\n align-items: center;\n gap: var(--onyx-spacing-md);\n padding: var(--onyx-spacing-md);\n font-weight: var(--onyx-font-weight-semibold);\n white-space: pre-line;\n max-width: 100%;\n // Full container height as maximum\n max-height: 100cqh;\n cursor: pointer;\n text-align: left;\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n background-color: var(--onyx-color-base-background-blank);\n overflow-x: hidden;\n\n &:hover {\n background-color: var(--onyx-color-base-background-tinted);\n }\n\n &:focus-visible {\n background-color: var(--onyx-color-base-primary-100);\n outline: none;\n }\n\n &:active {\n background-color: var(--onyx-color-base-primary-200);\n }\n\n &__logo {\n width: auto;\n height: 1.5rem;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TValue extends string\">\nimport { ref, useId, watchEffect } from \"vue\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport type { Nullable } from \"../../types/index.js\";\nimport OnyxBottomBar from \"../OnyxBottomBar/OnyxBottomBar.vue\";\nimport OnyxButton from \"../OnyxButton/OnyxButton.vue\";\nimport OnyxCard from \"../OnyxCard/OnyxCard.vue\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxModal from \"../OnyxModal/OnyxModal.vue\";\nimport OnyxVisuallyHidden from \"../OnyxVisuallyHidden/OnyxVisuallyHidden.vue\";\nimport type { OnyxSelectDialogProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxSelectDialogProps<TValue>>(), {\n open: false,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the color scheme should be changed.\n */\n \"update:modelValue\": [value: TValue];\n /**\n * Emitted when the dialog should be closed.\n */\n \"update:open\": [open: Nullable<boolean>];\n}>();\n\nconst slots = defineSlots<{\n /**\n * Optional slot to add custom content, e.g. a description to the dialog header (below the headline).\n */\n description?(): unknown;\n}>();\n\nconst currentValue = ref<TValue>();\nwatchEffect(() => (currentValue.value = props.modelValue));\n\nconst { t } = injectI18n();\nconst formId = useId();\n\nconst handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n currentValue.value = target.value as TValue;\n};\n\nconst handleApply = () => {\n if (!currentValue.value) return;\n emit(\"update:modelValue\", currentValue.value);\n emit(\"update:open\", false);\n};\n</script>\n\n<template>\n <OnyxModal\n v-bind=\"props\"\n :open=\"props.open\"\n class=\"onyx-select-dialog\"\n :label=\"props.label\"\n @update:open=\"emit('update:open', $event)\"\n >\n <template v-if=\"!!slots.description\" #description>\n <slot name=\"description\"></slot>\n </template>\n\n <form :id=\"formId\" class=\"onyx-select-dialog__form\" @submit.prevent=\"handleApply\">\n <fieldset class=\"onyx-select-dialog__list\" @change=\"handleChange\">\n <label v-for=\"option in props.options\" :key=\"option.value\">\n <OnyxCard class=\"onyx-select-dialog__option\">\n <OnyxIcon v-if=\"option.icon\" :icon=\"option.icon\" class=\"onyx-select-dialog__icon\" />\n\n <div>\n <OnyxVisuallyHidden is=\"div\">\n <input\n type=\"radio\"\n name=\"color-scheme\"\n :autofocus=\"props.modelValue === option.value\"\n :value=\"option.value\"\n :checked=\"props.modelValue === option.value\"\n :aria-label=\"option.label\"\n required\n />\n </OnyxVisuallyHidden>\n\n <span class=\"onyx-select-dialog__label\"> {{ option.label }} </span>\n <p v-if=\"option.description\" class=\"onyx-text--small\">{{ option.description }}</p>\n </div>\n </OnyxCard>\n </label>\n </fieldset>\n </form>\n\n <template #footer>\n <OnyxBottomBar>\n <OnyxButton\n :label=\"t('cancel')\"\n mode=\"plain\"\n color=\"neutral\"\n @click=\"emit('update:open', false)\"\n />\n <OnyxButton :label=\"t('apply')\" type=\"submit\" :form=\"formId\" />\n </OnyxBottomBar>\n </template>\n </OnyxModal>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-select-dialog {\n @include layers.component() {\n --onyx-select-dialog-icon-size: 1.5rem;\n --onyx-select-dialog-gap: var(--onyx-density-md);\n width: 32rem;\n background-color: var(--onyx-color-base-background-tinted);\n\n &__form {\n display: flex;\n flex-direction: column;\n gap: var(--onyx-density-xs);\n padding: var(--onyx-select-dialog-gap) var(--onyx-modal-padding-inline);\n }\n\n &__list {\n list-style: none;\n padding: 0;\n display: contents;\n }\n\n &__label {\n font-weight: 600;\n font-size: var(--onyx-font-size-md);\n line-height: var(--onyx-font-line-height-md);\n color: var(--onyx-color-text-icons-neutral-intense);\n }\n\n &__option {\n --onyx-card-gap: var(--onyx-select-dialog-gap);\n flex-direction: row;\n align-items: center;\n color: var(--onyx-color-text-icons-neutral-medium);\n cursor: pointer;\n\n &:hover {\n background: var(--onyx-color-base-neutral-200);\n }\n\n &:has(input:checked) {\n border-color: var(--onyx-color-base-primary-200);\n background-color: var(--onyx-color-base-primary-100);\n\n &:hover {\n border-color: var(--onyx-color-component-border-primary);\n }\n\n .onyx-select-dialog__label,\n .onyx-select-dialog__icon {\n color: var(--onyx-color-text-icons-primary-intense);\n }\n }\n }\n\n &__icon {\n --icon-size: var(--onyx-select-dialog-icon-size);\n display: inline-flex;\n height: auto;\n }\n }\n}\n</style>\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 206 110\\\"><g clip-path=\\\"url(#auto-a)\\\"><mask id=\\\"auto-d\\\" fill=\\\"var(--onyx-color-neutral-grayscale-white)\\\"><path d=\\\"M0 4a4 4 0 0 1 4-4h99v110H4a4 4 0 0 1-4-4z\\\"/></mask><path fill=\\\"var(--onyx-color-neutral-steel-1200)\\\" d=\\\"M0 4a4 4 0 0 1 4-4h99v110H4a4 4 0 0 1-4-4z\\\"/><g filter=\\\"url(#auto-b)\\\"><mask id=\\\"auto-c\\\" fill=\\\"var(--onyx-color-neutral-grayscale-white)\\\"><path d=\\\"M0 26h46v84H0z\\\"/></mask><path fill=\\\"var(--onyx-color-neutral-steel-1100)\\\" d=\\\"M0 26h46v84H0z\\\"/><path fill=\\\"var(--onyx-color-neutral-steel-900)\\\" d=\\\"M46 26h-1v84h2V26z\\\" mask=\\\"url(#auto-c)\\\"/></g><path fill=\\\"var(--onyx-color-neutral-steel-1100)\\\" stroke=\\\"var(--onyx-color-neutral-steel-900)\\\" d=\\\"M.5.5h281v25H.5z\\\"/><path fill=\\\"var(--onyx-color-onyx-500)\\\" d=\\\"M10 12.5a2.5 2.5 0 0 1 2.5-2.5h35a2.5 2.5 0 0 1 0 5h-35a2.5 2.5 0 0 1-2.5-2.5\\\"/><path fill=\\\"var(--onyx-color-neutral-steel-900)\\\" d=\\\"M68 12.5a2.5 2.5 0 0 1 2.5-2.5h34a2.5 2.5 0 1 1 0 5h-34a2.5 2.5 0 0 1-2.5-2.5M59 43a7 7 0 0 1 7-7h54a7 7 0 1 1 0 14H66a7 7 0 0 1-7-7m0 19a2 2 0 0 1 2-2h85a2 2 0 1 1 0 4H61a2 2 0 0 1-2-2m0 10a2 2 0 0 1 2-2h120a2 2 0 1 1 0 4H61a2 2 0 0 1-2-2m0 10a2 2 0 0 1 2-2h95a2 2 0 1 1 0 4H61a2 2 0 0 1-2-2\\\"/></g><path fill=\\\"var(--onyx-color-neutral-steel-900)\\\" d=\\\"M-1 4a5 5 0 0 1 5-5h99v2H4a3 3 0 0 0-3 3zm104 107H4a5 5 0 0 1-5-5h2a3 3 0 0 0 3 3h99zm-99 0a5 5 0 0 1-5-5V4a5 5 0 0 1 5-5v2a3 3 0 0 0-3 3v102a3 3 0 0 0 3 3zM103 0v110z\\\" mask=\\\"url(#auto-d)\\\"/><g clip-path=\\\"url(#auto-e)\\\"><mask id=\\\"auto-f\\\" fill=\\\"var(--onyx-color-neutral-grayscale-white)\\\"><path d=\\\"M103 0h99a4 4 0 0 1 4 4v102a4 4 0 0 1-4 4h-99z\\\"/></mask><path fill=\\\"var(--onyx-color-neutral-steel-100)\\\" d=\\\"M103 0h99a4 4 0 0 1 4 4v102a4 4 0 0 1-4 4h-99z\\\"/><path fill=\\\"var(--onyx-color-neutral-grayscale-white)\\\" stroke=\\\"var(--onyx-color-neutral-steel-300)\\\" d=\\\"M.5.5h281v25H.5z\\\"/><path fill=\\\"var(--onyx-color-neutral-steel-300)\\\" d=\\\"M68 12.5a2.5 2.5 0 0 1 2.5-2.5h34a2.5 2.5 0 1 1 0 5h-34a2.5 2.5 0 0 1-2.5-2.5m48 0a2.5 2.5 0 0 1 2.5-2.5h33a2.5 2.5 0 1 1 0 5h-33a2.5 2.5 0 0 1-2.5-2.5m47 0a2.5 2.5 0 0 1 2.5-2.5h34a2.5 2.5 0 1 1 0 5h-34a2.5 2.5 0 0 1-2.5-2.5M59 43a7 7 0 0 1 7-7h54a7 7 0 1 1 0 14H66a7 7 0 0 1-7-7m0 19a2 2 0 0 1 2-2h85a2 2 0 1 1 0 4H61a2 2 0 0 1-2-2m0 10a2 2 0 0 1 2-2h120a2 2 0 1 1 0 4H61a2 2 0 0 1-2-2m0 10a2 2 0 0 1 2-2h95a2 2 0 1 1 0 4H61a2 2 0 0 1-2-2\\\"/></g><path fill=\\\"var(--onyx-color-neutral-steel-300)\\\" d=\\\"M103-1h99a5 5 0 0 1 5 5h-2a3 3 0 0 0-3-3h-99zm104 107a5 5 0 0 1-5 5h-99v-2h99a3 3 0 0 0 3-3zm-104 4V0zM202-1a5 5 0 0 1 5 5v102a5 5 0 0 1-5 5v-2a3 3 0 0 0 3-3V4a3 3 0 0 0-3-3z\\\" mask=\\\"url(#auto-f)\\\"/><defs><clipPath id=\\\"auto-a\\\"><path fill=\\\"var(--onyx-color-neutral-grayscale-white)\\\" d=\\\"M0 4a4 4 0 0 1 4-4h99v110H4a4 4 0 0 1-4-4z\\\"/></clipPath><clipPath id=\\\"auto-e\\\"><path fill=\\\"var(--onyx-color-neutral-grayscale-white)\\\" d=\\\"M103 0h99a4 4 0 0 1 4 4v102a4 4 0 0 1-4 4h-99z\\\"/></clipPath><filter id=\\\"auto-b\\\" width=\\\"62\\\" height=\\\"100\\\" x=\\\"-6\\\" y=\\\"18\\\" color-interpolation-filters=\\\"sRGB\\\" filterUnits=\\\"userSpaceOnUse\\\"><feFlood flood-opacity=\\\"0\\\" result=\\\"BackgroundImageFix\\\"/><feColorMatrix in=\\\"SourceAlpha\\\" result=\\\"hardAlpha\\\" values=\\\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\\\"/><feOffset dx=\\\"2\\\"/><feGaussianBlur stdDeviation=\\\"4\\\"/><feComposite in2=\\\"hardAlpha\\\" operator=\\\"out\\\"/><feColorMatrix values=\\\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\\\"/><feBlend in2=\\\"BackgroundImageFix\\\" result=\\\"effect1_dropShadow_16217_22720\\\"/><feBlend in=\\\"SourceGraphic\\\" in2=\\\"effect1_dropShadow_16217_22720\\\" result=\\\"shape\\\"/></filter></defs></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 206 110\\\"><g clip-path=\\\"url(#dark-a)\\\"><path fill=\\\"var(--onyx-color-neutral-steel-1200)\\\" d=\\\"M0 4a4 4 0 0 1 4-4h198a4 4 0 0 1 4 4v102a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4z\\\"/><g filter=\\\"url(#dark-b)\\\"><mask id=\\\"dark-c\\\" fill=\\\"#fff\\\"><path d=\\\"M0 26h46v84H0z\\\"/></mask><path fill=\\\"var(--onyx-color-neutral-steel-1100)\\\" d=\\\"M0 26h46v84H0z\\\"/><path fill=\\\"var(--onyx-color-neutral-steel-900)\\\" d=\\\"M46 26h-1v84h2V26z\\\" mask=\\\"url(#dark-c)\\\"/></g><path fill=\\\"var(--onyx-color-neutral-steel-1100)\\\" stroke=\\\"var(--onyx-color-neutral-steel-900)\\\" d=\\\"M.5.5h281v25H.5z\\\"/><path fill=\\\"var(--onyx-color-onyx-500)\\\" d=\\\"M10 12.5a2.5 2.5 0 0 1 2.5-2.5h35a2.5 2.5 0 0 1 0 5h-35a2.5 2.5 0 0 1-2.5-2.5\\\"/><path fill=\\\"var(--onyx-color-neutral-steel-900)\\\" d=\\\"M68 12.5a2.5 2.5 0 0 1 2.5-2.5h34a2.5 2.5 0 1 1 0 5h-34a2.5 2.5 0 0 1-2.5-2.5m48 0a2.5 2.5 0 0 1 2.5-2.5h33a2.5 2.5 0 1 1 0 5h-33a2.5 2.5 0 0 1-2.5-2.5m47 0a2.5 2.5 0 0 1 2.5-2.5h34a2.5 2.5 0 1 1 0 5h-34a2.5 2.5 0 0 1-2.5-2.5M59 43a7 7 0 0 1 7-7h54a7 7 0 1 1 0 14H66a7 7 0 0 1-7-7m0 19a2 2 0 0 1 2-2h85a2 2 0 1 1 0 4H61a2 2 0 0 1-2-2m0 10a2 2 0 0 1 2-2h120a2 2 0 1 1 0 4H61a2 2 0 0 1-2-2m0 10a2 2 0 0 1 2-2h95a2 2 0 1 1 0 4H61a2 2 0 0 1-2-2\\\"/></g><path stroke=\\\"var(--onyx-color-neutral-steel-900)\\\" d=\\\"M4 .5h198a3.5 3.5 0 0 1 3.5 3.5v102a3.5 3.5 0 0 1-3.5 3.5H4A3.5 3.5 0 0 1 .5 106V4A3.5 3.5 0 0 1 4 .5Z\\\"/><defs><clipPath id=\\\"dark-a\\\"><path fill=\\\"#fff\\\" d=\\\"M0 4a4 4 0 0 1 4-4h198a4 4 0 0 1 4 4v102a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4z\\\"/></clipPath><filter id=\\\"dark-b\\\" width=\\\"62\\\" height=\\\"100\\\" x=\\\"-6\\\" y=\\\"18\\\" color-interpolation-filters=\\\"sRGB\\\" filterUnits=\\\"userSpaceOnUse\\\"><feFlood flood-opacity=\\\"0\\\" result=\\\"BackgroundImageFix\\\"/><feColorMatrix in=\\\"SourceAlpha\\\" result=\\\"hardAlpha\\\" values=\\\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\\\"/><feOffset dx=\\\"2\\\"/><feGaussianBlur stdDeviation=\\\"4\\\"/><feComposite in2=\\\"hardAlpha\\\" operator=\\\"out\\\"/><feColorMatrix values=\\\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\\\"/><feBlend in2=\\\"BackgroundImageFix\\\" result=\\\"effect1_dropShadow_16217_22757\\\"/><feBlend in=\\\"SourceGraphic\\\" in2=\\\"effect1_dropShadow_16217_22757\\\" result=\\\"shape\\\"/></filter></defs></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"none\\\" viewBox=\\\"0 0 206 110\\\"><g clip-path=\\\"url(#light-a)\\\"><path fill=\\\"var(--onyx-color-neutral-steel-100)\\\" d=\\\"M0 4a4 4 0 0 1 4-4h198a4 4 0 0 1 4 4v102a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4z\\\"/><g filter=\\\"url(#light-b)\\\"><mask id=\\\"light-c\\\" fill=\\\"var(--onyx-color-neutral-grayscale-white)\\\"><path d=\\\"M0 26h46v84H0z\\\"/></mask><path fill=\\\"var(--onyx-color-neutral-grayscale-white)\\\" d=\\\"M0 26h46v84H0z\\\"/><path fill=\\\"var(--onyx-color-neutral-steel-300)\\\" d=\\\"M46 26h-1v84h2V26z\\\" mask=\\\"url(#light-c)\\\"/></g><path fill=\\\"var(--onyx-color-neutral-grayscale-white)\\\" stroke=\\\"var(--onyx-color-neutral-steel-300)\\\" d=\\\"M.5.5h281v25H.5z\\\"/><path fill=\\\"var(--onyx-color-onyx-500)\\\" d=\\\"M10 12.5a2.5 2.5 0 0 1 2.5-2.5h35a2.5 2.5 0 0 1 0 5h-35a2.5 2.5 0 0 1-2.5-2.5\\\"/><path fill=\\\"var(--onyx-color-neutral-steel-300)\\\" d=\\\"M68 12.5a2.5 2.5 0 0 1 2.5-2.5h34a2.5 2.5 0 1 1 0 5h-34a2.5 2.5 0 0 1-2.5-2.5m48 0a2.5 2.5 0 0 1 2.5-2.5h33a2.5 2.5 0 1 1 0 5h-33a2.5 2.5 0 0 1-2.5-2.5m47 0a2.5 2.5 0 0 1 2.5-2.5h34a2.5 2.5 0 1 1 0 5h-34a2.5 2.5 0 0 1-2.5-2.5M59 43a7 7 0 0 1 7-7h54a7 7 0 1 1 0 14H66a7 7 0 0 1-7-7m0 19a2 2 0 0 1 2-2h85a2 2 0 1 1 0 4H61a2 2 0 0 1-2-2m0 10a2 2 0 0 1 2-2h120a2 2 0 1 1 0 4H61a2 2 0 0 1-2-2m0 10a2 2 0 0 1 2-2h95a2 2 0 1 1 0 4H61a2 2 0 0 1-2-2\\\"/></g><path stroke=\\\"var(--onyx-color-neutral-steel-300)\\\" d=\\\"M4 .5h198a3.5 3.5 0 0 1 3.5 3.5v102a3.5 3.5 0 0 1-3.5 3.5H4A3.5 3.5 0 0 1 .5 106V4A3.5 3.5 0 0 1 4 .5Z\\\"/><defs><clipPath id=\\\"light-a\\\"><path fill=\\\"var(--onyx-color-neutral-grayscale-white)\\\" d=\\\"M0 4a4 4 0 0 1 4-4h198a4 4 0 0 1 4 4v102a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4z\\\"/></clipPath><filter id=\\\"light-b\\\" width=\\\"62\\\" height=\\\"100\\\" x=\\\"-6\\\" y=\\\"18\\\" color-interpolation-filters=\\\"sRGB\\\" filterUnits=\\\"userSpaceOnUse\\\"><feFlood flood-opacity=\\\"0\\\" result=\\\"BackgroundImageFix\\\"/><feColorMatrix in=\\\"SourceAlpha\\\" result=\\\"hardAlpha\\\" values=\\\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\\\"/><feOffset dx=\\\"2\\\"/><feGaussianBlur stdDeviation=\\\"4\\\"/><feComposite in2=\\\"hardAlpha\\\" operator=\\\"out\\\"/><feColorMatrix values=\\\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\\\"/><feBlend in2=\\\"BackgroundImageFix\\\" result=\\\"effect1_dropShadow_16217_22745\\\"/><feBlend in=\\\"SourceGraphic\\\" in2=\\\"effect1_dropShadow_16217_22745\\\" result=\\\"shape\\\"/></filter></defs></svg>\"","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport { injectI18n } from \"../../../../i18n/index.js\";\nimport type { Nullable } from \"../../../../types/utils.js\";\nimport OnyxSelectDialog from \"../../../OnyxSelectDialog/OnyxSelectDialog.vue\";\nimport type { SelectDialogOption } from \"../../../OnyxSelectDialog/types.js\";\nimport autoImage from \"./auto.svg?raw\";\nimport darkImage from \"./dark.svg?raw\";\nimport lightImage from \"./light.svg?raw\";\nimport type { ColorSchemeValue, OnyxColorSchemeDialogProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxColorSchemeDialogProps>(), {\n open: false,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the color scheme should be changed.\n */\n \"update:modelValue\": [value: ColorSchemeValue];\n /**\n * Emitted when the dialog should be closed.\n */\n \"update:open\": [value: Nullable<boolean>];\n}>();\n\nconst { t } = injectI18n();\n\nconst options = computed<SelectDialogOption<ColorSchemeValue>[]>(() => {\n return [\n {\n value: \"auto\",\n icon: autoImage,\n label: t.value(\"colorScheme.auto.label\"),\n description: t.value(\"colorScheme.auto.description\"),\n },\n {\n value: \"light\",\n icon: lightImage,\n label: t.value(\"colorScheme.light.label\"),\n description: t.value(\"colorScheme.light.description\"),\n },\n {\n value: \"dark\",\n icon: darkImage,\n label: t.value(\"colorScheme.dark.label\"),\n description: t.value(\"colorScheme.dark.description\"),\n },\n ];\n});\n</script>\n\n<template>\n <OnyxSelectDialog\n class=\"onyx-color-scheme-dialog\"\n v-bind=\"props\"\n :label=\"t('colorScheme.headline')\"\n :options\n :open=\"props.open\"\n @update:open=\"emit('update:open', $event)\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <template #description> {{ t(\"colorScheme.subtitle\") }} </template>\n </OnyxSelectDialog>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../../styles/mixins/layers.scss\";\n\n.onyx-color-scheme-dialog {\n @include layers.component() {\n --onyx-select-dialog-icon-size: 10rem;\n\n .onyx-select-dialog {\n &__form {\n container-type: inline-size;\n }\n\n &__option {\n align-items: flex-start;\n\n @container (max-width: 24rem) {\n --onyx-select-dialog-icon-size: 6rem;\n flex-direction: column;\n align-items: flex-start;\n }\n\n .onyx-select-dialog__icon {\n box-shadow: var(--onyx-shadow-medium-top);\n }\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconCircleContrast } from \"@sit-onyx/icons\";\nimport { ref } from \"vue\";\nimport { injectI18n } from \"../../../../i18n/index.js\";\nimport OnyxIcon from \"../../../OnyxIcon/OnyxIcon.vue\";\nimport OnyxColorSchemeDialog from \"../OnyxColorSchemeDialog/OnyxColorSchemeDialog.vue\";\nimport type { ColorSchemeValue } from \"../OnyxColorSchemeDialog/types.js\";\nimport OnyxMenuItem from \"../OnyxMenuItem/OnyxMenuItem.vue\";\nimport type { OnyxColorSchemeMenuItemProps } from \"./types.js\";\n\nconst props = defineProps<OnyxColorSchemeMenuItemProps>();\n\nconst emit = defineEmits<{\n \"update:modelValue\": [value: ColorSchemeValue];\n}>();\n\nconst { t } = injectI18n();\n\nconst isOpen = ref(false);\n</script>\n\n<template>\n <OnyxMenuItem class=\"onyx-component onyx-color-scheme-menu-item\" @click=\"isOpen = true\">\n <OnyxIcon :icon=\"iconCircleContrast\" />\n\n <div>\n {{ t(\"colorScheme.appearance\") }}:\n <span class=\"onyx-color-scheme-menu-item__value\">\n {{ t(`colorScheme.${props.modelValue}.label`) }}\n </span>\n </div>\n\n <!-- the menu button renders a <li> and <button> so we need to teleport the dialog\n to not nest it inside the button -->\n <Teleport to=\"body\">\n <OnyxColorSchemeDialog\n v-model:open=\"isOpen\"\n :model-value=\"props.modelValue\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n />\n </Teleport>\n </OnyxMenuItem>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../../styles/mixins/layers.scss\";\n\n.onyx-color-scheme-menu-item {\n @include layers.component() {\n &__value {\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n\n .onyx-color-scheme-dialog {\n text-align: left;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TValue extends string\">\nimport { iconTranslate } from \"@sit-onyx/icons\";\nimport { computed, ref } from \"vue\";\nimport { injectI18n } from \"../../../../i18n/index.js\";\nimport { OnyxSelectDialog } from \"../../../../index.js\";\nimport OnyxIcon from \"../../../OnyxIcon/OnyxIcon.vue\";\nimport OnyxMenuItem from \"../OnyxMenuItem/OnyxMenuItem.vue\";\nimport type { OnyxCountryMenuItemProps } from \"./types.js\";\n\nconst props = defineProps<OnyxCountryMenuItemProps<TValue>>();\n\nconst emit = defineEmits<{\n \"update:modelValue\": [value: TValue];\n}>();\n\nconst { t } = injectI18n();\nconst isOpen = ref(false);\n\nconst currentValueLabel = computed(() => {\n return props.options.find(({ value }) => value === props.modelValue)?.label ?? props.modelValue;\n});\n</script>\n\n<template>\n <OnyxMenuItem class=\"onyx-component onyx-language-menu-item\" @click=\"isOpen = true\">\n <OnyxIcon :icon=\"iconTranslate\" />\n\n <div>\n {{ t(\"languageSelect.label\") }}:\n <span class=\"onyx-language-menu-item__value\"> {{ currentValueLabel }} </span>\n </div>\n\n <!-- the menu button renders a <li> and <button> so we need to teleport the dialog\n to not nest it inside the button -->\n <Teleport to=\"body\">\n <OnyxSelectDialog\n v-model:open=\"isOpen\"\n :model-value=\"props.modelValue\"\n :label=\"t('languageSelect.headline')\"\n :options=\"props.options\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n >\n <template #description>\n {{ t(\"languageSelect.subtitle\") }}\n </template>\n </OnyxSelectDialog>\n </Teleport>\n </OnyxMenuItem>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../../styles/mixins/layers.scss\";\n\n.onyx-language-menu-item {\n @include layers.component() {\n &__value {\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport OnyxMenuItem from \"../OnyxMenuItem/OnyxMenuItem.vue\";\nimport type { OnyxMenuItemProps } from \"../OnyxMenuItem/types.js\";\n\nconst props = defineProps<\n OnyxMenuItemProps & {\n /**\n * The render context of the nav item.\n * Styling is changed based on the context prop.\n */\n context: \"mobile\" | \"list\" | \"navbar\";\n }\n>();\n\nconst slots = defineSlots<{\n /**\n * Button/link text and additional inline content.\n */\n default(): unknown;\n /**\n * Children items of the nav item.\n */\n children(): unknown;\n}>();\n\nconst hasChildren = computed(() => !!slots.children);\n</script>\n\n<template>\n <OnyxMenuItem\n v-bind=\"props\"\n :link=\"hasChildren && props.context !== 'navbar' ? undefined : props.link\"\n :class=\"{\n 'onyx-nav-item': true,\n 'onyx-nav-item--active': props.active,\n [`onyx-nav-item--${props.context}`]: true,\n 'onyx-nav-item--open': props.open,\n }\"\n :open=\"props.context !== 'list' ? false : undefined\"\n >\n <slot></slot>\n <template v-if=\"hasChildren\" #children><slot name=\"children\"></slot></template>\n </OnyxMenuItem>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../../styles/mixins/layers\";\n\n@include layers.override() {\n .onyx-nav-item--navbar {\n position: relative;\n height: 2.5rem;\n width: max-content;\n border-radius: var(--onyx-radius-sm);\n white-space: nowrap;\n --onyx-list-item-background-hover: transparent;\n --onyx-list-item-background-selected: var(--onyx-color-base-background-blank);\n --onyx-list-item-padding: var(--onyx-spacing-2xs) var(--onyx-spacing-md);\n\n &:has(:focus-visible) {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n color: var(--onyx-list-item-color);\n }\n\n &:hover {\n --onyx-list-item-background-selected: var(--onyx-color-base-neutral-200);\n --onyx-list-item-background-hover: var(--onyx-color-base-neutral-200);\n }\n\n & .onyx-menu-item__chevron {\n display: none;\n }\n\n &:has(.onyx-nav-item--active),\n &.onyx-nav-item--active {\n font-weight: var(--onyx-font-weight-semibold);\n color: var(--onyx-color-component-nav-label);\n --onyx-list-item-color-selected: var(--onyx-color-component-nav-label);\n\n &::after {\n content: \" \";\n position: absolute;\n width: 100%;\n height: 0.125rem;\n bottom: calc(-1 * var(--onyx-spacing-2xs));\n border-radius: var(--onyx-radius-full) var(--onyx-radius-full) 0 0;\n background: var(--onyx-color-component-nav-stroke);\n z-index: 1;\n }\n }\n }\n\n .onyx-nav-item--mobile {\n --onyx-list-item-padding: var(--onyx-spacing-sm);\n color: var(--onyx-color-text-icons-neutral-intense);\n width: 100%;\n align-self: stretch;\n line-height: var(--onyx-font-line-height-md);\n text-align: start;\n font-size: var(--onyx-font-size-md);\n font-weight: var(--onyx-font-weight-regular);\n border-radius: var(--onyx-radius-sm);\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n\n &:focus-within {\n background-color: var(--onyx-color-base-background-blank);\n }\n\n &:hover {\n background-color: var(--onyx-color-base-background-tinted);\n }\n\n &:has(.onyx-nav-item--active),\n &.onyx-nav-item--active {\n --onyx-list-item-background-selected: var(--onyx-color-base-primary-100);\n --onyx-list-item-color-selected: var(--onyx-color-component-nav-label);\n background-color: var(--onyx-list-item-background-selected);\n border-color: var(--onyx-color-base-primary-200);\n color: var(--onyx-color-text-icons-primary-bold);\n font-weight: 600;\n }\n\n &:has(.onyx-nav-item--active):hover,\n &.onyx-nav-item--active:hover {\n border-color: var(--onyx-component-border-primary);\n }\n\n &.onyx-nav-item--open {\n all: unset;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconArrowSmallLeft } from \"@sit-onyx/icons\";\nimport { computed, inject, provide, toRef } from \"vue\";\nimport { useLink } from \"../../../../composables/useLink.js\";\nimport { useMoreListChild } from \"../../../../composables/useMoreList.js\";\nimport { useVModel } from \"../../../../composables/useVModel.js\";\nimport { injectI18n } from \"../../../../i18n/index.js\";\nimport { mergeVueProps, useRootAttrs } from \"../../../../utils/attrs.js\";\nimport OnyxButton from \"../../../OnyxButton/OnyxButton.vue\";\nimport OnyxSeparator from \"../../../OnyxSeparator/OnyxSeparator.vue\";\nimport {\n MOBILE_NAV_BAR_INJECTION_KEY,\n NAV_BAR_IS_TOP_LEVEL_INJECTION_KEY,\n NAV_BAR_MORE_LIST_INJECTION_KEY,\n NAV_BAR_MORE_LIST_TARGET_INJECTION_KEY,\n} from \"../../types.js\";\nimport OnyxFlyoutMenu from \"../OnyxFlyoutMenu/OnyxFlyoutMenu.vue\";\nimport OnyxNavItemFacade from \"../OnyxNavItemFacade/OnyxNavItemFacade.vue\";\nimport type { OnyxNavItemProps } from \"./types.js\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = withDefaults(defineProps<OnyxNavItemProps>(), {\n active: \"auto\",\n open: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the state of mobile children visibility changes.\n */\n \"update:open\": [value: boolean];\n}>();\n\nconst slots = defineSlots<{\n /**\n * You can replace the label of the menuitem with your custom content.\n */\n default?(): unknown;\n /**\n * OnyxNavItem Children can be nested here.\n */\n children?(): unknown;\n}>();\n\nconst { t } = injectI18n();\n\n/**\n * Controls the open state.\n */\nconst open = useVModel({\n props,\n emit,\n key: \"open\",\n default: false,\n});\n\nconst { restAttrs, rootAttrs } = useRootAttrs();\n\nconst hasChildren = computed(() => !!slots.children);\n\nconst { isActive } = useLink();\nconst active = computed(() => {\n if (props.active !== \"auto\") return props.active;\n return isActive.value(props.link);\n});\n\nconst isMobile = inject(\n MOBILE_NAV_BAR_INJECTION_KEY,\n computed(() => false),\n);\n\nconst moreListTargetRef = inject(NAV_BAR_MORE_LIST_TARGET_INJECTION_KEY, undefined);\n\nconst isTopLevel = inject(NAV_BAR_IS_TOP_LEVEL_INJECTION_KEY, true);\nprovide(NAV_BAR_IS_TOP_LEVEL_INJECTION_KEY, false);\n\n// only top-level nav-items are relevant for the \"more list\"\nconst { componentRef, isVisible } = isTopLevel\n ? useMoreListChild(NAV_BAR_MORE_LIST_INJECTION_KEY)\n : { isVisible: toRef(true) };\n</script>\n\n<template>\n <!-- Mobile Parent is open -->\n <div\n v-if=\"isMobile && open\"\n :class=\"{\n 'onyx-component': true,\n 'onyx-nav-item-wrapper': true,\n 'onyx-nav-item-wrapper--open': open,\n }\"\n v-bind=\"rootAttrs\"\n >\n <div class=\"onyx-nav-item-wrapper__controls\">\n <OnyxButton\n :label=\"t('back')\"\n mode=\"plain\"\n color=\"neutral\"\n :icon=\"iconArrowSmallLeft\"\n @click=\"open = false\"\n />\n\n <template v-if=\"props.link\">\n <OnyxNavItemFacade v-bind=\"mergeVueProps(props, restAttrs)\" :active context=\"mobile\">\n <slot></slot>\n </OnyxNavItemFacade>\n <OnyxSeparator />\n </template>\n </div>\n <ul role=\"menu\" class=\"onyx-nav-item-wrapper__mobile-children\">\n <slot name=\"children\"></slot>\n </ul>\n </div>\n\n <!-- Mobile item displayed in list -->\n <OnyxNavItemFacade\n v-else-if=\"isMobile\"\n v-bind=\"mergeVueProps(props, $attrs)\"\n :active\n context=\"mobile\"\n @click=\"hasChildren && (open = true)\"\n >\n <slot></slot>\n <template v-if=\"slots.children\" #children>\n <slot name=\"children\"></slot>\n </template>\n </OnyxNavItemFacade>\n\n <!-- Desktop parent item in navbar with children in a flyout -->\n <OnyxFlyoutMenu\n v-else-if=\"isTopLevel && hasChildren && isVisible\"\n v-bind=\"rootAttrs\"\n :label=\"t('navItemOptionsLabel', { label: props.label })\"\n >\n <template #button=\"{ trigger }\">\n <OnyxNavItemFacade\n v-bind=\"mergeVueProps(restAttrs, props, trigger)\"\n ref=\"componentRef\"\n :active\n context=\"navbar\"\n >\n <slot></slot>\n <template v-if=\"slots.children\" #children>\n <slot name=\"children\"></slot>\n </template>\n </OnyxNavItemFacade>\n </template>\n\n <template #options>\n <slot name=\"children\"></slot>\n </template>\n </OnyxFlyoutMenu>\n\n <!-- Desktop nav button directly in navbar -->\n <OnyxNavItemFacade\n v-else-if=\"isTopLevel && isVisible\"\n v-bind=\"mergeVueProps(props, $attrs)\"\n ref=\"componentRef\"\n :active\n context=\"navbar\"\n >\n <slot></slot>\n </OnyxNavItemFacade>\n\n <!-- Desktop nav item nested in a list flyout -->\n <OnyxNavItemFacade\n v-else-if=\"isVisible\"\n v-bind=\"mergeVueProps(props, $attrs)\"\n :active\n context=\"list\"\n >\n <slot></slot>\n <template v-if=\"slots.children\" #children>\n <slot name=\"children\"></slot>\n </template>\n </OnyxNavItemFacade>\n\n <!-- Desktop top-level nav item in more list -->\n <Teleport\n v-if=\"isTopLevel && !isMobile && moreListTargetRef\"\n :disabled=\"!moreListTargetRef\"\n :to=\"moreListTargetRef\"\n >\n <!-- \n We even render the Teleport when there is nothing to teleport,\n so that the original order of the OnyxNavItem's is preserved.\n Otherwise the order would be based on the time when an OnyxNavItem becomes invisible.\n -->\n <OnyxNavItemFacade\n v-if=\"!isVisible\"\n v-bind=\"mergeVueProps(props, $attrs)\"\n :active\n context=\"list\"\n >\n <slot></slot>\n <template v-if=\"slots.children\" #children>\n <slot name=\"children\"></slot>\n </template>\n </OnyxNavItemFacade>\n </Teleport>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../../styles/mixins/layers\";\n\n.onyx-nav-item-wrapper {\n @include layers.component() {\n &__mobile-children,\n &--open {\n padding: 0;\n width: 100%;\n\n display: flex;\n flex-direction: column;\n gap: var(--onyx-spacing-2xs);\n }\n\n /**\n * control items should act as flex items\n */\n &__controls {\n display: contents;\n }\n\n /**\n * Don't display controls when a child element is opened.\n */\n &--open:has(&--open) > &__controls {\n display: none;\n }\n }\n}\n\n.onyx-nav-item {\n @include layers.component() {\n /**\n * Hide siblings before and after an opened item.\n */\n &:has(~ .onyx-nav-item-wrapper--open),\n .onyx-nav-item-wrapper--open ~ &,\n &:has(~ .onyx-menu-item--open),\n .onyx-menu-item--open ~ & {\n display: none;\n }\n }\n}\n</style>\n","import { computed, onBeforeUnmount, readonly, ref, watch, type Ref } from \"vue\";\n\n/**\n * Composable for managing a single timer.\n */\nexport const useTimer = (endTime: Ref<ConstructorParameters<typeof Date>[0]>) => {\n /**\n * Current interval ID. Can be used to cancel the timer.\n */\n const intervalId = ref<ReturnType<typeof setInterval>>();\n\n const timeLeft = ref(calculateTimeLeft(new Date(endTime.value).getTime()));\n const isEnded = computed(() => timeLeft.value === 0);\n\n watch(\n endTime,\n (newEndTime) => {\n clearInterval(intervalId.value); // clear any previous timers\n const endTimestamp = new Date(newEndTime).getTime();\n\n // setInterval does not trigger immediate so we calculate it once here\n timeLeft.value = calculateTimeLeft(endTimestamp);\n\n intervalId.value = setInterval(() => {\n timeLeft.value = calculateTimeLeft(endTimestamp);\n if (isEnded.value) clearInterval(intervalId.value);\n }, 1000);\n },\n { immediate: true },\n );\n\n // prevent dangling timers when component is unmounted\n onBeforeUnmount(() => clearInterval(intervalId.value));\n\n return {\n /**\n * Time (in milliseconds) that the timer has left.\n */\n timeLeft: readonly(timeLeft),\n /**\n * Whether the timer is ended.\n */\n isEnded,\n };\n};\n\n/**\n * Calculates the remaining time between the given endTime and now.\n * Will not be smaller than 0.\n */\nconst calculateTimeLeft = (endTimestamp: number) => {\n const timeLeft = endTimestamp - Date.now();\n return Math.max(timeLeft, 0);\n};\n","/**\n * Calculate seconds, minutes and hours for a given number of milliseconds.\n */\nexport const getTimeFragments = (time: number) => {\n const hours = Math.floor(time / 60000 / 60);\n const minutes = Math.floor((time / 60000) % 60);\n const seconds = Math.floor((time % 60000) / 1000);\n return { hours, minutes, seconds };\n};\n\n/**\n * Formats a given time into a pretty human readable string.\n *\n * @param time Time in milliseconds.\n * @param format RelativeTimeFormat to use for extracting localized strings for hours, minutes and seconds.\n * @example \"04:42 min\"\n */\nexport const formatTime = (timeLeft: number, format: Intl.RelativeTimeFormat) => {\n const { hours, minutes, seconds } = getTimeFragments(timeLeft);\n const formatNumber = (value: number) => value.toString().padStart(2, \"0\");\n\n let formattedHours = \"\";\n let literalText = getRelativeTimeFormatLiteralValue(format.formatToParts(timeLeft, \"seconds\"));\n\n if (minutes > 0) {\n literalText = getRelativeTimeFormatLiteralValue(format.formatToParts(timeLeft, \"minutes\"));\n }\n\n if (hours > 0) {\n literalText = getRelativeTimeFormatLiteralValue(format.formatToParts(timeLeft, \"hours\"));\n formattedHours = `${formatNumber(hours)}:`;\n }\n\n return `${formattedHours}${formatNumber(minutes)}:${formatNumber(seconds)} ${literalText}`;\n};\n\n/**\n * Gets the literal value for the parts returned by `Intl.RelativeTimeFormat.formatToParts()`.\n * Will trim and remove trailing dots.\n *\n * @example \"min\"\n */\nconst getRelativeTimeFormatLiteralValue = (parts: Intl.RelativeTimeFormatPart[]) => {\n return parts.at(-1)?.value.replace(\".\", \"\").trim() ?? \"\";\n};\n\n/**\n * Formats the given time into a duration string that can e.g. be used inside `<time>`.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/time?retiredLocale=de#a_valid_duration_string\n */\nexport const timeToDurationString = (timeLeft: number): `PT${number}H${number}M${number}S` => {\n const { hours, minutes, seconds } = getTimeFragments(timeLeft);\n return `PT${hours}H${minutes}M${seconds}S`;\n};\n","<script lang=\"ts\" setup>\nimport { computed, watchEffect } from \"vue\";\nimport { useTimer } from \"../../../../composables/useTimer.js\";\nimport { injectI18n } from \"../../../../i18n/index.js\";\nimport { formatTime, timeToDurationString } from \"../../../../utils/time.js\";\nimport type { OnyxTimerProps } from \"./types.js\";\n\nconst props = defineProps<OnyxTimerProps>();\n\nconst emit = defineEmits<{\n /**\n * Emitted when timer has ended.\n */\n timerEnded: [];\n}>();\n\nconst { locale } = injectI18n();\nconst { timeLeft, isEnded } = useTimer(computed(() => props.endTime));\n\nconst timeFormat = computed(\n () => new Intl.RelativeTimeFormat(locale.value, { numeric: \"always\", style: \"short\" }),\n);\n\n/**\n * Formatted remaining time.\n */\nconst formattedTime = computed(() => formatTime(timeLeft.value, timeFormat.value));\n\nwatchEffect(() => isEnded.value && emit(\"timerEnded\"));\n\ndefineExpose({\n /**\n * Time (in milliseconds) that the timer has left.\n */\n timeLeft,\n});\n</script>\n\n<template>\n <div\n class=\"onyx-component onyx-timer onyx-text onyx-truncation-ellipsis\"\n role=\"timer\"\n :aria-label=\"props.hideLabel ? props.label : undefined\"\n >\n <span v-if=\"!props.hideLabel\" class=\"onyx-timer__label\">{{ props.label }}</span>\n <time :datetime=\"timeToDurationString(timeLeft)\" class=\"onyx-timer__time\">\n {{ formattedTime }}\n </time>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../../styles/mixins/layers.scss\";\n\n.onyx-timer {\n @include layers.component() {\n display: inline-flex;\n gap: var(--onyx-spacing-2xs);\n border-radius: var(--onyx-radius-md);\n border: none;\n background: var(--onyx-color-base-background-blank);\n padding: var(--onyx-spacing-2xs) var(--onyx-spacing-md);\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n width: max-content;\n max-width: 100%;\n\n &__label {\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n\n &__time {\n font-weight: var(--onyx-font-weight-semibold);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TValue extends SelectOptionValue = SelectOptionValue\">\n// this layout component is only used internally for the user menu component\n// to easily switch between mobile and desktop layout\nimport { useVModel } from \"../../../../composables/useVModel.js\";\nimport { injectI18n } from \"../../../../i18n/index.js\";\nimport type { Nullable, SelectOptionValue } from \"../../../../types/index.js\";\nimport OnyxListItem from \"../../../OnyxListItem/OnyxListItem.vue\";\nimport OnyxFlyoutMenu from \"../OnyxFlyoutMenu/OnyxFlyoutMenu.vue\";\n\nconst props = withDefaults(\n defineProps<{\n /**\n * If the mobile layout should be used instead of the desktop layout.\n */\n isMobile: boolean;\n /**\n * Controls whether the flyout menu is open.\n */\n flyoutOpen?: Nullable<boolean>;\n /**\n * Whether the flyout is disabled and can not be opened.\n */\n disabled?: boolean;\n }>(),\n // eslint-disable-next-line vue/no-boolean-default -- to support 'useVModel' we need to know if a value was set or not\n { flyoutOpen: undefined },\n);\n\nconst emit = defineEmits<{\n /**\n * Emitted when the state of flyoutOpen changes.\n */\n \"update:flyoutOpen\": [value: boolean];\n}>();\n\nconst slots = defineSlots<{\n /**\n * The trigger for the flyout menu. Must be an interactive component like a button or link.\n */\n button?(params: {\n /**\n * Attributes and event listeners that must be bound to the interactive element, that should act as the flyout trigger.\n */\n trigger: object;\n }): unknown;\n header?(): unknown;\n options?(): unknown;\n footer?(): unknown;\n}>();\n\n/**\n * Controls the open state of the user menu flyout.\n */\nconst flyoutOpen = useVModel({\n props,\n emit,\n key: \"flyoutOpen\",\n default: false,\n});\n\nconst { t } = injectI18n();\n</script>\n\n<template>\n <div class=\"onyx-component\">\n <template v-if=\"props.isMobile\">\n <slot name=\"header\"></slot>\n <slot name=\"options\"></slot>\n <!-- we use list item here instead of menu item since the footer is not interactive -->\n <OnyxListItem v-if=\"!!slots.footer\" class=\"onyx-user-menu__mobile-footer\" disabled>\n <slot name=\"footer\"> </slot>\n </OnyxListItem>\n </template>\n\n <template v-else>\n <OnyxFlyoutMenu\n v-model:open=\"flyoutOpen\"\n :label=\"t('navigation.userMenuLabel')\"\n alignment=\"right\"\n :disabled=\"disabled\"\n >\n <template #button=\"{ trigger }\">\n <slot name=\"button\" :trigger=\"trigger\"></slot>\n </template>\n\n <template #header>\n <slot name=\"header\"></slot>\n </template>\n\n <template #options>\n <slot name=\"options\"></slot>\n </template>\n\n <template v-if=\"!!slots.footer\" #footer>\n <div class=\"onyx-user-menu__footer onyx-text--small\">\n <slot name=\"footer\"></slot>\n </div>\n </template>\n </OnyxFlyoutMenu>\n </template>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../../styles/mixins/layers.scss\";\n\n.onyx-user-menu {\n @include layers.component() {\n &__footer,\n &__mobile-footer {\n color: var(--onyx-color-text-icons-neutral-soft);\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--onyx-spacing-2xs);\n }\n\n &__footer {\n border-top: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n padding: var(--onyx-spacing-4xs) var(--onyx-spacing-md);\n }\n\n &__mobile-footer {\n margin-top: var(--onyx-spacing-2xs);\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n border-radius: var(--onyx-radius-sm);\n font-size: var(--onyx-font-size-sm);\n line-height: var(--onyx-font-line-height-sm);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, inject } from \"vue\";\nimport { useVModel } from \"../../../../composables/useVModel.js\";\nimport OnyxAvatar from \"../../../OnyxAvatar/OnyxAvatar.vue\";\nimport { MOBILE_NAV_BAR_INJECTION_KEY } from \"../../types.js\";\nimport type { OnyxUserMenuProps } from \"./types.js\";\nimport UserMenuLayout from \"./UserMenuLayout.vue\";\n\nconst props = withDefaults(defineProps<OnyxUserMenuProps>(), {\n flyoutOpen: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the state of flyoutOpen changes.\n */\n \"update:flyoutOpen\": [value: boolean];\n}>();\n\nconst slots = defineSlots<{\n /**\n * Slot for the menu options. Its recommended to use the `OnyxMenuItem` component here.\n */\n default?(): unknown;\n /**\n * Optional footer content to display at the bottom.\n */\n footer?(): unknown;\n}>();\n\n/**\n * If the flyout is expanded or not. Only has an effect in desktop (non-mobile) mode.\n */\nconst flyoutOpen = useVModel({\n props,\n emit,\n key: \"flyoutOpen\",\n default: false,\n});\n\nconst avatar = computed(() => {\n if (typeof props.avatar === \"object\") return props.avatar;\n return { src: props.avatar, fullName: props.fullName };\n});\n\nconst isMobile = inject(\n MOBILE_NAV_BAR_INJECTION_KEY,\n computed(() => false),\n);\n</script>\n\n<template>\n <UserMenuLayout\n v-model:flyout-open=\"flyoutOpen\"\n class=\"onyx-component onyx-user-menu\"\n :class=\"{ 'onyx-user-menu--mobile': isMobile }\"\n :is-mobile=\"isMobile\"\n :disabled=\"disabled\"\n >\n <template #button=\"{ trigger }\">\n <button class=\"onyx-user-menu__trigger onyx-text\" type=\"button\" v-bind=\"trigger\">\n <OnyxAvatar v-bind=\"avatar\" size=\"24px\" />\n <span class=\"onyx-truncation-ellipsis\"> {{ props.fullName }}</span>\n </button>\n </template>\n\n <template #header>\n <div class=\"onyx-user-menu__header\">\n <OnyxAvatar v-bind=\"avatar\" size=\"48px\" />\n\n <div class=\"onyx-truncation-ellipsis\">\n <div class=\"onyx-user-menu__username onyx-text onyx-truncation-ellipsis\">\n {{ props.fullName }}\n </div>\n <div\n v-if=\"props.description\"\n class=\"onyx-user-menu__description onyx-text--small onyx-truncation-ellipsis\"\n >\n {{ props.description }}\n </div>\n </div>\n </div>\n </template>\n\n <template #options>\n <div class=\"onyx-user-menu__options\">\n <slot></slot>\n </div>\n </template>\n\n <template v-if=\"slots.footer\" #footer>\n <slot name=\"footer\"></slot>\n </template>\n </UserMenuLayout>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../../styles/mixins/layers.scss\";\n\n.onyx-user-menu {\n @include layers.component() {\n --onyx-user-menu-height: 2.5rem;\n\n font-family: var(--onyx-font-family);\n width: max-content;\n position: relative;\n\n &:focus-within,\n &:hover {\n outline: 0;\n\n .onyx-user-menu__trigger {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n background-color: var(--onyx-color-base-neutral-200);\n }\n }\n\n &__trigger {\n border-radius: var(--onyx-radius-sm);\n border: none;\n background: var(--onyx-color-base-background-blank);\n\n padding: var(--onyx-spacing-2xs) var(--onyx-spacing-md);\n display: flex;\n align-items: center;\n gap: var(--onyx-spacing-2xs);\n color: var(--onyx-color-text-icons-neutral-intense);\n margin-left: auto;\n font-weight: var(--onyx-font-weight-semibold);\n\n &:disabled {\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n &:hover {\n &:disabled {\n background-color: var(--onyx-color-base-background-blank);\n outline: 0;\n }\n background-color: var(--onyx-color-base-neutral-200);\n }\n\n &:focus {\n outline: 0;\n }\n }\n\n .onyx-flyout-menu__list {\n right: 0;\n }\n\n &__header {\n border-bottom: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n padding: var(--onyx-spacing-md);\n color: var(--onyx-color-text-icons-neutral-intense);\n\n display: flex;\n align-items: center;\n gap: var(--onyx-spacing-md);\n text-align: left;\n }\n\n &__username {\n font-weight: var(--onyx-font-weight-semibold);\n }\n\n &__description {\n color: var(--onyx-color-text-icons-neutral-soft);\n font-weight: var(--onyx-font-weight-semibold);\n }\n\n &--mobile {\n width: 100%;\n position: static;\n\n .onyx-user-menu__header {\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n background-color: var(--onyx-color-base-background-blank);\n border-radius: var(--onyx-radius-sm);\n margin-bottom: var(--onyx-spacing-2xs);\n }\n\n .onyx-user-menu__options {\n .onyx-list-item {\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n border-bottom: none;\n\n &:first-of-type {\n border-radius: var(--onyx-radius-sm) var(--onyx-radius-sm) 0 0;\n }\n\n &:last-of-type {\n border-bottom: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n border-radius: 0 0 var(--onyx-radius-sm) var(--onyx-radius-sm);\n }\n }\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { createNavigationMenu } from \"@sit-onyx/headless\";\nimport { iconChevronLeftSmall, iconMenu, iconMoreVertical } from \"@sit-onyx/icons\";\nimport { computed, provide, ref, toRef, useTemplateRef, watch } from \"vue\";\nimport { useLink } from \"../../composables/useLink.js\";\nimport { useResizeObserver } from \"../../composables/useResizeObserver.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport { ONYX_BREAKPOINTS } from \"../../utils/breakpoints.js\";\nimport OnyxIconButton from \"../OnyxIconButton/OnyxIconButton.vue\";\nimport OnyxMobileNavButton from \"../OnyxMobileNavButton/OnyxMobileNavButton.vue\";\nimport OnyxMoreList from \"../OnyxMoreList/OnyxMoreList.vue\";\nimport OnyxNavAppArea from \"../OnyxNavAppArea/OnyxNavAppArea.vue\";\nimport OnyxFlyoutMenu from \"./modules/OnyxFlyoutMenu/OnyxFlyoutMenu.vue\";\nimport OnyxNavItemFacade from \"./modules/OnyxNavItemFacade/OnyxNavItemFacade.vue\";\nimport {\n MOBILE_NAV_BAR_INJECTION_KEY,\n NAV_BAR_MORE_LIST_INJECTION_KEY,\n NAV_BAR_MORE_LIST_TARGET_INJECTION_KEY,\n type OnyxNavBarProps,\n type OnyxNavBarSlots,\n} from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxNavBarProps>(), {\n mobile: \"sm\",\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the back button is clicked.\n */\n navigateBack: [event: MouseEvent];\n}>();\n\nconst slots = defineSlots<OnyxNavBarSlots>();\n\nconst navBar = useTemplateRef(\"navBarRef\");\nconst { width } = useResizeObserver(navBar);\nconst { t } = injectI18n();\nconst { currentRoute } = useLink();\n\nconst {\n elements: { nav },\n} = createNavigationMenu({ navigationName: toRef(() => props.appName) });\n\nconst isBurgerOpen = ref(false);\nconst isContextOpen = ref(false);\n\nconst isMobileWidth = (breakpoint: number, currentWidth: number) =>\n currentWidth !== 0 && currentWidth < breakpoint;\n\nconst actualIsMobile = computed(() => {\n if (typeof props.mobile === \"number\") {\n return isMobileWidth(props.mobile, width.value);\n }\n if (typeof props.mobile === \"string\") {\n return isMobileWidth(ONYX_BREAKPOINTS[props.mobile], width.value);\n }\n return props.mobile;\n});\n\nprovide(MOBILE_NAV_BAR_INJECTION_KEY, actualIsMobile);\nprovide(NAV_BAR_MORE_LIST_TARGET_INJECTION_KEY, useTemplateRef(\"moreListRef\"));\n\nconst closeMobileMenus = () => {\n isBurgerOpen.value = false;\n isContextOpen.value = false;\n};\n\nwatch(currentRoute, () => closeMobileMenus(), { deep: true });\n\ndefineExpose({\n /**\n * Closes the mobile burger and context menu.\n * Useful if you want to e.g. close them when a nav item is clicked.\n * Will be automatically done if a router is provided.\n *\n * Example usage:\n *\n * ```ts\n * const route = useRoute();\n * const navBar = useTemplateRef(\"navBarRef\");\n *\n * watch(() => route.path, () => navBar.value?.closeMobileMenus());\n * ```\n */\n closeMobileMenus,\n});\n</script>\n\n<template>\n <header\n ref=\"navBarRef\"\n class=\"onyx-component onyx-nav-bar\"\n :class=\"{ 'onyx-nav-bar--mobile': actualIsMobile }\"\n >\n <div class=\"onyx-nav-bar__content onyx-grid-container\">\n <span\n v-if=\"actualIsMobile && slots.mobileActivePage && !isBurgerOpen && !isContextOpen\"\n class=\"onyx-nav-bar__mobile-page onyx-truncation-ellipsis\"\n >\n <slot name=\"mobileActivePage\"></slot>\n </span>\n\n <OnyxNavAppArea\n v-else-if=\"props.appName || props.logoUrl || slots.appArea\"\n class=\"onyx-nav-bar__app\"\n :app-name=\"props.appName\"\n :logo-url=\"props.logoUrl\"\n v-bind=\"props.appArea\"\n >\n <slot name=\"appArea\"></slot>\n </OnyxNavAppArea>\n\n <OnyxIconButton\n v-if=\"props.withBackButton\"\n class=\"onyx-nav-bar__back\"\n :label=\"t('navigation.goBack')\"\n :icon=\"iconChevronLeftSmall\"\n color=\"neutral\"\n @click=\"emit('navigateBack', $event)\"\n />\n\n <template v-if=\"slots.default\">\n <OnyxMobileNavButton\n v-if=\"actualIsMobile\"\n v-model:open=\"isBurgerOpen\"\n class=\"onyx-nav-bar__burger\"\n :icon=\"iconMenu\"\n :label=\"t('navigation.toggleBurgerMenu')\"\n :headline=\"t('navigation.navigationHeadline')\"\n @update:open=\"isContextOpen = false\"\n >\n <nav class=\"onyx-nav-bar__nav--mobile\" v-bind=\"nav\">\n <ul role=\"menubar\">\n <slot></slot>\n </ul>\n </nav>\n </OnyxMobileNavButton>\n\n <nav v-else class=\"onyx-nav-bar__nav\" v-bind=\"nav\">\n <OnyxMoreList is=\"ul\" role=\"menubar\" :injection-key=\"NAV_BAR_MORE_LIST_INJECTION_KEY\">\n <template #default=\"{ attributes }\">\n <div v-bind=\"attributes\">\n <slot></slot>\n </div>\n </template>\n <template #more=\"{ attributes, hiddenElements }\">\n <OnyxFlyoutMenu :label=\"t('navigation.showMoreNavItemsLabel')\" v-bind=\"attributes\">\n <template #button=\"{ trigger }\">\n <OnyxNavItemFacade\n v-bind=\"trigger\"\n :label=\"t('navigation.moreNavItems', { n: hiddenElements })\"\n context=\"navbar\"\n />\n </template>\n\n <template #options>\n <div ref=\"moreListRef\"></div>\n </template>\n </OnyxFlyoutMenu>\n </template>\n </OnyxMoreList>\n </nav>\n </template>\n\n <template v-if=\"slots.contextArea || slots.globalContextArea\">\n <div v-if=\"actualIsMobile\" class=\"onyx-nav-bar__mobile-context\">\n <div v-if=\"slots.globalContextArea\" class=\"onyx-nav-bar__mobile-global-context\">\n <slot name=\"globalContextArea\"></slot>\n </div>\n\n <OnyxMobileNavButton\n v-if=\"slots.contextArea\"\n v-model:open=\"isContextOpen\"\n :icon=\"iconMoreVertical\"\n :label=\"t('navigation.toggleContextMenu')\"\n @update:open=\"isBurgerOpen = false\"\n >\n <div class=\"onyx-nav-bar__mobile-context-content\">\n <slot name=\"contextArea\"></slot>\n </div>\n </OnyxMobileNavButton>\n </div>\n\n <div v-else class=\"onyx-nav-bar__context\">\n <slot v-if=\"slots.globalContextArea\" name=\"globalContextArea\"></slot>\n <slot v-if=\"slots.contextArea\" name=\"contextArea\"></slot>\n </div>\n </template>\n </div>\n </header>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n$gap: var(--onyx-spacing-md);\n\n.onyx-nav-bar {\n @include layers.component() {\n .onyx-flyout-menu {\n --onyx-flyout-menu-gap: var(--onyx-spacing-md);\n }\n\n background-color: var(--onyx-color-base-background-blank);\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n height: var(--onyx-nav-bar-height);\n z-index: var(--onyx-z-index-navigation);\n position: relative;\n container-type: inline-size;\n\n // implement bottom border with ::after so it does not add to the height\n &::after {\n content: \" \";\n background-color: var(--onyx-color-component-border-neutral);\n height: var(--onyx-1px-in-rem);\n width: 100%;\n position: absolute;\n bottom: 0;\n }\n\n &__content {\n display: grid;\n grid-template-columns: max-content 1fr auto;\n grid-template-areas: \"app nav context\";\n align-items: center;\n gap: $gap;\n height: 100%;\n padding-inline: var(--onyx-grid-margin);\n\n &:has(.onyx-nav-bar__back) {\n grid-template-columns: max-content max-content 1fr auto;\n grid-template-areas: \"app back nav context\";\n }\n }\n\n &__back {\n grid-area: back;\n }\n\n &__nav {\n grid-area: nav;\n\n > ul {\n display: flex;\n align-items: center;\n gap: var(--onyx-spacing-4xs);\n padding: 0;\n }\n\n &--mobile {\n display: flex;\n flex-direction: column;\n gap: var(--onyx-spacing-2xs);\n\n > ul {\n display: contents;\n }\n }\n }\n\n // fix outline being cut-off by the clipping\n .onyx-more-list__elements {\n padding-inline: 0.25rem;\n }\n\n &__context {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--onyx-spacing-4xs);\n grid-area: context;\n }\n\n &__app {\n border-right: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n grid-area: app;\n }\n\n &--mobile {\n .onyx-nav-bar__content {\n grid-template-columns: max-content max-content auto auto;\n grid-template-areas: \"burger back nav mobile-context\";\n gap: 0;\n padding-inline: 0;\n\n .onyx-nav-bar__back {\n margin-left: $gap;\n }\n }\n\n .onyx-nav-bar__app {\n border-right: none;\n grid-area: nav;\n }\n }\n\n &__burger {\n border-right: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n grid-area: burger;\n }\n\n &__mobile-context {\n grid-area: mobile-context;\n display: flex;\n align-items: center;\n margin-left: auto;\n gap: var(--onyx-spacing-4xs);\n }\n\n &__mobile-global-context {\n display: flex;\n flex-direction: row-reverse;\n gap: inherit;\n }\n\n &__mobile-context-content {\n display: flex;\n flex-direction: row-reverse;\n flex-wrap: wrap-reverse;\n align-items: center;\n justify-content: flex-end;\n gap: var(--onyx-spacing-2xs);\n\n // add extra spacing after the user menu if it is not immediately followed by a nav separator\n // since we are in a row-reverse layout, we need to \"separator + user menu\" as selector\n // to check if a nav separator exists \"visually\" after the user menu\n &:not(:has(.onyx-separator + .onyx-user-menu)) {\n .onyx-user-menu {\n margin-bottom: var(--onyx-spacing-md);\n }\n }\n }\n\n &__mobile-page {\n grid-area: nav;\n color: var(--onyx-color-text-icons-primary-intense);\n padding-inline: $gap;\n font-weight: var(--onyx-font-weight-semibold);\n }\n\n .onyx-mobile-nav-button {\n --top-position: var(--onyx-nav-bar-height);\n }\n\n .onyx-separator {\n margin: var(--onyx-spacing-2xs) 0;\n width: 100%;\n\n &--vertical {\n margin: 0 var(--onyx-spacing-2xs);\n width: var(--onyx-separator-size);\n }\n }\n }\n}\n</style>\n","import { computed, onMounted, onUnmounted, ref, unref, type MaybeRef } from \"vue\";\nimport type { DateValue } from \"../components/OnyxDatePicker/types.js\";\nimport { injectI18n } from \"../i18n/index.js\";\n\nexport type UseRelativeTimeFormatOptions = {\n /**\n * Time/date to format.\n */\n time: MaybeRef<DateValue>;\n /**\n * Options to use for the formatter.\n */\n options?: MaybeRef<Intl.RelativeTimeFormatOptions>;\n};\n\n/**\n * Reactive wrapper/utilities around the `Intl.RelativeTimeFormat` API.\n */\nexport const useRelativeTimeFormat = (options: UseRelativeTimeFormatOptions) => {\n const { locale, t } = injectI18n();\n const format = computed(() => new Intl.RelativeTimeFormat(locale.value, unref(options.options)));\n\n const now = ref(Date.now());\n let nowInterval: ReturnType<typeof setInterval> | undefined;\n\n onMounted(() => {\n // only calling setInterval onMounted to support SSR\n nowInterval = setInterval(\n () => (now.value = Date.now()),\n // run interval only every 10 seconds to not run too many intervals\n 1000 * 10,\n );\n });\n onUnmounted(() => clearInterval(nowInterval));\n\n /**\n * Full seconds passed between now and the given date.\n * Will be negative, if date is in the past and positive if its in the future.\n */\n const secondsPassed = computed(() => {\n const date = new Date(unref(options.time)).getTime();\n const millisecondsPassed = date - now.value;\n return Math.floor(millisecondsPassed / 1000);\n });\n\n const unitThresholds = {\n // important: the values here must be sorted from highest to lowest so the highest possible value is used for the \"timeAgo\"\n year: 60 * 60 * 24 * 365,\n month: 60 * 60 * 24 * 30,\n week: 60 * 60 * 24 * 7,\n day: 60 * 60 * 24,\n hour: 60 * 60,\n minute: 60,\n } satisfies Partial<Record<Intl.RelativeTimeFormatUnitSingular, number>>;\n\n /**\n * The current relative time unit (minute, hour etc.).\n * If undefined, the time is considered to be \"now\".\n */\n const currentUnit = computed(() => {\n return (Object.keys(unitThresholds) as (keyof typeof unitThresholds)[]).find(\n (unit) => Math.abs(secondsPassed.value) >= unitThresholds[unit],\n );\n });\n\n const timeAgo = computed(() => {\n if (!currentUnit.value) return t.value(\"now\");\n const passedTime = secondsPassed.value / unitThresholds[currentUnit.value];\n const value = passedTime < 0 ? Math.ceil(passedTime) : Math.floor(passedTime);\n return format.value.format(value, currentUnit.value);\n });\n\n return {\n /**\n * Formatted relative time string.\n *\n * @example \"42 minutes ago\"\n */\n timeAgo,\n };\n};\n","<script lang=\"ts\" setup>\nimport { iconMoreVertical } from \"@sit-onyx/icons\";\nimport { toRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useRelativeTimeFormat } from \"../../composables/useRelativeTimeFormat.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport OnyxBadge from \"../OnyxBadge/OnyxBadge.vue\";\nimport OnyxHeadline from \"../OnyxHeadline/OnyxHeadline.vue\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxFlyoutMenu from \"../OnyxNavBar/modules/OnyxFlyoutMenu/OnyxFlyoutMenu.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport OnyxSystemButton from \"../OnyxSystemButton/OnyxSystemButton.vue\";\nimport type { OnyxNotificationCardProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxNotificationCardProps>(), {\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\nconst slots = defineSlots<{\n /**\n * Notification content/description.\n */\n default(): unknown;\n /**\n * Optional custom footer actions/buttons.\n */\n actions?(): unknown;\n /**\n * Optional custom header actions to display inside a flyout menu.\n * Will only be shown when hovering the notification card or focussing via keyboard.\n * You must only put [OnyxMenuItem](https://storybook.onyx.schwarz/?path=/docs/basic-menuitem--docs) components here.\n */\n headerActions?: unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\nconst skeleton = useSkeletonContext(props);\nconst { d, t } = injectI18n();\nconst { timeAgo } = useRelativeTimeFormat({\n time: toRef(props, \"createdAt\"),\n options: { numeric: \"auto\" },\n});\n</script>\n\n<template>\n <div :class=\"['onyx-component', 'onyx-notification-card', densityClass]\">\n <div v-if=\"skeleton\" class=\"onyx-notification-card-skeleton\">\n <OnyxSkeleton class=\"onyx-notification-card-skeleton__header\" />\n <OnyxSkeleton v-for=\"n in 3\" :key=\"n\" class=\"onyx-notification-card-skeleton__content\" />\n </div>\n <div v-else class=\"onyx-notification-card__content\">\n <div>\n <div class=\"onyx-notification-card__header\">\n <div class=\"onyx-notification-card__header-container\">\n <OnyxIcon v-if=\"props.icon\" class=\"onyx-notification-card__icon\" :icon=\"props.icon\" />\n <OnyxHeadline is=\"h3\">{{ props.headline }}</OnyxHeadline>\n </div>\n\n <div class=\"onyx-notification-card__header-container\">\n <OnyxBadge v-if=\"props.unread\" dot />\n\n <OnyxFlyoutMenu\n v-if=\"!!slots.headerActions\"\n class=\"onyx-notification-card__more-actions\"\n :label=\"t('notificationCard.moreActions')\"\n trigger=\"click\"\n alignment=\"right\"\n >\n <template #button=\"{ trigger }\">\n <OnyxSystemButton\n v-bind=\"trigger\"\n :label=\"t('notificationCard.toggleActions')\"\n :icon=\"iconMoreVertical\"\n />\n </template>\n\n <template #options>\n <slot name=\"headerActions\"></slot>\n </template>\n </OnyxFlyoutMenu>\n </div>\n </div>\n\n <div class=\"onyx-notification-card__created-at onyx-text--small\">\n <span>{{ d(props.createdAt, \"datetime-local\") }}</span>\n <span>{{ timeAgo }}</span>\n </div>\n </div>\n\n <p class=\"onyx-notification-card__description onyx-text onyx-truncation-multiline\">\n <slot></slot>\n </p>\n\n <div v-if=\"!!slots.actions\" class=\"onyx-notification-card__actions onyx-density-compact\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"../../styles/mixins/visibility.scss\";\n\n.onyx-notification-card {\n @include layers.component() {\n --onyx-notification-card-padding: var(--onyx-density-md);\n font-family: var(--onyx-font-family);\n padding: var(--onyx-notification-card-padding);\n background-color: var(--onyx-color-base-background-blank);\n max-width: 100%;\n\n &:hover,\n &:focus-within {\n background-color: var(--onyx-color-base-background-tinted);\n }\n\n &__content {\n display: flex;\n flex-direction: column;\n gap: var(--onyx-density-md);\n }\n\n &:not(:first-of-type):not(:has(.onyx-notification-card-skeleton)) {\n padding-top: 0;\n\n .onyx-notification-card__content {\n border-top: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n padding-top: var(--onyx-notification-card-padding);\n }\n }\n\n &__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--onyx-density-md);\n margin-bottom: var(--onyx-density-2xs);\n }\n\n &__header-container {\n display: flex;\n gap: var(--onyx-density-xs);\n align-items: center;\n flex-wrap: wrap;\n }\n\n &__icon {\n color: var(--onyx-color-text-icons-neutral-medium);\n }\n\n &__more-actions {\n .onyx-flyout-menu__list {\n right: 0;\n }\n }\n\n // for devices that support hover, we are only showing the more actions on hover\n // for all other devices (like mobile devices), they are always shown\n @media (hover: hover) {\n &:not(&:hover, &:focus-within) {\n .onyx-notification-card__more-actions {\n @include visibility.visually-hidden();\n }\n }\n }\n\n &__description {\n color: var(--onyx-color-text-icons-neutral-medium);\n white-space: pre-line;\n }\n\n &__actions {\n display: flex;\n align-items: center;\n gap: var(--onyx-density-xs);\n flex-wrap: wrap;\n }\n\n &__created-at {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--onyx-density-md);\n flex-wrap: wrap;\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n &:has(.onyx-notification-card-skeleton) {\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n border-radius: var(--onyx-radius-md);\n &:hover,\n &:focus-within {\n background-color: var(--onyx-color-base-background-blank);\n }\n }\n &-skeleton {\n display: flex;\n flex-direction: column;\n gap: var(--onyx-density-2xs);\n &__header {\n height: 1.5rem;\n width: 33%;\n }\n &__content {\n height: 1rem;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport OnyxBadge from \"../OnyxBadge/OnyxBadge.vue\";\nimport type { OnyxNotificationDotProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxNotificationDotProps>(), {\n color: \"warning\",\n hidden: false,\n});\n\ndefineSlots<{\n /**\n * Main content where the dot will be positioned in relation to.\n */\n default(): unknown;\n}>();\n</script>\n\n<template>\n <div class=\"onyx-component onyx-notification-dot\">\n <slot></slot>\n <OnyxBadge v-if=\"!props.hidden\" class=\"onyx-notification-dot__badge\" :color=\"props.color\" dot />\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-notification-dot {\n @include layers.component() {\n --onyx-notification-dot-position: calc(\n var(--onyx-notification-dot-offset, 0rem) - var(--onyx-density-3xs)\n );\n position: relative;\n width: max-content;\n max-width: 100%;\n\n &__badge {\n position: absolute;\n top: var(--onyx-notification-dot-position);\n right: var(--onyx-notification-dot-position);\n pointer-events: none;\n }\n\n &:has(> .onyx-icon-button) {\n // density-xs = icon button padding\n --onyx-notification-dot-offset: var(--onyx-density-xs);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { provideSkeletonContext } from \"../../composables/useSkeletonState.js\";\nimport type { OnyxPageLayoutProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxPageLayoutProps>(), {\n footerAlignment: \"full\",\n});\n\nconst slots = defineSlots<{\n /**\n * Main content area of the page.\n */\n default(): unknown;\n /**\n * Optional (left) sidebar.\n * Recommended component: [OnyxSidebar](https://storybook.onyx.schwarz/?path=/docs/navigation-sidebar--docs)\n *\n * For semantic HTML, it is recommended to use HTML elements like `<aside>` here, which is already the case when using the [OnyxSidebar](https://storybook.onyx.schwarz/?path=/docs/navigation-sidebar--docs).\n */\n sidebar?(): unknown;\n /**\n * Optional (right) sidebar.\n * Recommended component: [OnyxSidebar](https://storybook.onyx.schwarz/?path=/docs/navigation-sidebar--docs)\n *\n * For semantic HTML, it is recommended to use HTML elements like `<aside>` here, which is already the case when using the [OnyxSidebar](https://storybook.onyx.schwarz/?path=/docs/navigation-sidebar--docs).\n */\n sidebarRight?(): unknown;\n /**\n * Optional page footer.\n * For semantic HTML, it is recommended to use HTML elements like `<footer>` here.\n */\n footer?(): unknown;\n}>();\n\nprovideSkeletonContext(props);\n</script>\n\n<template>\n <div\n class=\"onyx-component onyx-page\"\n :class=\"[\n 'onyx-component',\n 'onyx-page',\n { 'onyx-page--footer-page': props.footerAlignment === 'page' },\n ]\"\n >\n <div v-if=\"slots.sidebar\" class=\"onyx-page__sidebar\">\n <slot name=\"sidebar\"></slot>\n </div>\n\n <main class=\"onyx-page__main\">\n <div :class=\"{ 'onyx-grid-layout': !props.noPadding }\">\n <slot></slot>\n </div>\n </main>\n\n <div v-if=\"slots.sidebarRight\" class=\"onyx-page__sidebar onyx-page__sidebar--right\">\n <slot name=\"sidebarRight\"></slot>\n </div>\n\n <div v-if=\"slots.footer\" class=\"onyx-page__footer\">\n <slot name=\"footer\"></slot>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-page {\n @include layers.component() {\n height: 100%;\n width: 100%;\n display: grid;\n grid-template-rows: 1fr max-content;\n grid-template-columns: max-content 1fr max-content;\n grid-template-areas:\n \"side main side-right\"\n \"footer footer footer\";\n container-type: inline-size;\n\n &--footer-page {\n grid-template-areas:\n \"side main side-right\"\n \"side footer side-right\";\n }\n\n &__sidebar {\n grid-area: side;\n overflow: hidden auto;\n\n &--right {\n grid-area: side-right;\n }\n }\n\n &__main {\n container-type: inline-size;\n grid-area: main;\n overflow: hidden auto;\n position: relative;\n }\n\n &__footer {\n grid-area: footer;\n }\n\n &:has(&__sidebar) {\n // disable centering of the onyx-grid-layout when a sidebar exists\n // because centering does not work here / is not aligned with the nav bar\n .onyx-page__main > .onyx-grid-layout,\n &.onyx-page--footer-page {\n --onyx-grid-margin-inline: 0;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconCheckSmall, iconNotificationFlag } from \"@sit-onyx/icons\";\nimport { computed } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxProgressItemProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxProgressItemProps>(), {\n status: \"default\",\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\ndefineSlots<{\n /**\n * Optionally override the label slot with custom content.\n * By default, the `label` property will be displayed.\n */\n default?(props: Pick<OnyxProgressItemProps, \"label\">): unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\nconst skeleton = useSkeletonContext(props);\n\nconst icon = computed(() => {\n if (props.status === \"completed\" || props.status === \"visited\") return iconCheckSmall;\n if (props.status === \"invalid\") return iconNotificationFlag;\n return props.icon;\n});\n</script>\n\n<template>\n <OnyxSkeleton\n v-if=\"skeleton\"\n :class=\"['onyx-progress-item-skeleton', 'onyx-text', densityClass]\"\n />\n\n <button\n v-else\n :class=\"[\n 'onyx-component',\n 'onyx-progress-item',\n densityClass,\n 'onyx-text',\n `onyx-progress-item--${props.status}`,\n ]\"\n type=\"button\"\n :disabled=\"props.disabled\"\n >\n <span class=\"onyx-progress-item__indicator\">\n <OnyxIcon v-if=\"icon\" :icon=\"icon\" />\n <template v-else>{{ props.value }}</template>\n </span>\n\n <div class=\"onyx-progress-item__label\">\n <slot :label=\"props.label\"> {{ props.label }} </slot>\n </div>\n </button>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-progress-item,\n.onyx-progress-item-skeleton {\n @include layers.component() {\n --onyx-progress-item-padding: var(--onyx-density-2xs);\n --onyx-progress-item-gap: var(--onyx-density-sm);\n }\n}\n\n.onyx-progress-item-skeleton {\n @include layers.component() {\n height: calc(1lh + 2 * var(--onyx-progress-item-padding));\n width: calc(2 * 1lh + 2 * var(--onyx-progress-item-padding) + var(--onyx-progress-item-gap));\n }\n}\n\n.onyx-progress-item {\n @include layers.component() {\n --onyx-progress-outline-color: var(--onyx-color-component-focus-neutral);\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n display: inline-flex;\n text-align: left;\n align-items: center;\n gap: var(--onyx-progress-item-gap);\n font-weight: var(--onyx-font-weight-semibold);\n line-height: var(--onyx-font-line-height-md);\n\n // reset button styles\n border: none;\n background: none;\n padding: 0;\n min-width: max-content;\n max-width: 100%;\n\n &:enabled {\n cursor: pointer;\n }\n\n &__indicator {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: var(--onyx-progress-item-padding);\n border-radius: var(--onyx-radius-full);\n border: 0.125rem solid var(--onyx-progress-item-border-color);\n background-color: var(--onyx-progress-item-background-color);\n color: var(--onyx-progress-item-color);\n min-width: 1.5rem;\n box-sizing: content-box;\n }\n\n &__label {\n white-space: pre-line;\n }\n\n &:focus-visible {\n outline: none;\n\n .onyx-progress-item__indicator {\n outline: var(--onyx-outline-width) solid var(--onyx-progress-outline-color);\n }\n }\n\n &--default,\n &--visited {\n --onyx-progress-item-background-color: transparent;\n --onyx-progress-item-border-color: var(--onyx-color-component-border-neutral);\n --onyx-progress-item-color: var(--onyx-color-text-icons-neutral-intense);\n\n &:enabled {\n &:hover {\n --onyx-progress-item-background-color: var(--onyx-color-base-neutral-200);\n --onyx-progress-item-border-color: var(--onyx-color-component-border-neutral-hover);\n }\n\n &:focus-visible {\n --onyx-progress-item-background-color: transparent;\n --onyx-progress-item-border-color: var(--onyx-color-component-border-neutral-hover);\n }\n }\n }\n\n &--active {\n --onyx-progress-item-background-color: var(--onyx-color-base-neutral-800);\n --onyx-progress-item-border-color: var(--onyx-progress-item-background-color);\n --onyx-progress-item-color: var(--onyx-color-text-icons-neutral-inverted);\n\n &:enabled {\n &:hover {\n --onyx-progress-item-background-color: var(--onyx-color-base-neutral-600);\n }\n\n &:focus-visible {\n --onyx-progress-item-background-color: var(--onyx-color-base-neutral-800);\n }\n }\n }\n\n &--completed {\n --onyx-progress-item-background-color: var(--onyx-color-component-cta-default);\n --onyx-progress-item-border-color: var(--onyx-progress-item-background-color);\n --onyx-progress-item-color: var(--onyx-color-text-icons-neutral-inverted);\n --onyx-progress-outline-color: var(--onyx-color-component-focus-primary);\n\n &:enabled {\n &:hover {\n --onyx-progress-item-background-color: var(--onyx-color-component-cta-default-hover);\n }\n\n &:focus-visible {\n --onyx-progress-item-background-color: var(--onyx-color-component-cta-default);\n }\n }\n }\n\n &--invalid {\n --onyx-progress-item-background-color: var(--onyx-color-base-danger-200);\n --onyx-progress-item-border-color: var(--onyx-progress-item-background-color);\n --onyx-progress-item-color: var(--onyx-color-text-icons-danger-intense);\n --onyx-progress-outline-color: var(--onyx-color-component-focus-danger);\n\n &:enabled {\n &:hover {\n --onyx-progress-item-background-color: var(--onyx-color-base-danger-100);\n }\n\n &:focus-visible {\n --onyx-progress-item-background-color: var(--onyx-color-base-danger-200);\n --onyx-progress-item-color: var(--onyx-color-text-icons-danger-bold);\n }\n }\n }\n }\n}\n</style>\n","import type { DensityProp } from \"../../composables/density.js\";\nimport type { SkeletonInjected } from \"../../composables/useSkeletonState.js\";\n\nexport type OnyxProgressItemProps = DensityProp & {\n /**\n * Visual label.\n */\n label: string;\n /**\n * The value/number of the step.\n */\n value: number;\n /**\n * The status of the progress item which indicates whether the item is currently active, upcoming or already visited/completed.\n */\n status?: ProgressItemStatus;\n /**\n * Icon to display instead of the numeric indicator.\n * If `status` is \"completed\", \"visited\" or \"invalid\", the icon will be pre-defined so passing a different icon does not work then.\n */\n icon?: string;\n /**\n * Whether the item is disabled and can not be interacted with.\n */\n disabled?: boolean;\n /**\n * Whether to show a skeleton item.\n */\n skeleton?: SkeletonInjected;\n};\n\nexport const PROGRESS_ITEM_STATUS = [\n \"default\",\n \"active\",\n \"completed\",\n \"visited\",\n \"invalid\",\n] as const;\nexport type ProgressItemStatus = (typeof PROGRESS_ITEM_STATUS)[number];\n","<script lang=\"ts\" setup>\nimport { computed, watch } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport OnyxProgressItem from \"../OnyxProgressItem/OnyxProgressItem.vue\";\nimport type { OnyxProgressItemProps, ProgressItemStatus } from \"../OnyxProgressItem/types.js\";\nimport OnyxSeparator from \"../OnyxSeparator/OnyxSeparator.vue\";\nimport type { OnyxProgressStepsProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxProgressStepsProps>(), {\n orientation: \"horizontal\",\n modelValue: 1,\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the currently active step changes.\n */\n \"update:modelValue\": [value: number];\n /**\n * Emitted when the highest visited step/value changes.\n */\n \"update:highestValue\": [value: number];\n}>();\n\ndefineSlots<{\n /**\n * Optional slot to override the label content for an item (can be used to add custom content).\n */\n step?(props: { step: OnyxProgressItemProps }): unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\nconst skeleton = useSkeletonContext(props);\n\nconst highestValue = useVModel({\n props,\n emit,\n key: \"highestValue\",\n default: 1,\n});\n\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue > highestValue.value) {\n highestValue.value = newValue;\n }\n },\n { immediate: true },\n);\n\nconst mappedSteps = computed(() => {\n return props.steps.map<OnyxProgressItemProps>((step, index) => {\n const value = index + 1;\n\n let status: ProgressItemStatus = \"default\";\n if (value === props.modelValue) status = \"active\";\n else if (value < props.modelValue) status = \"completed\";\n else if (value <= highestValue.value - 1) status = \"visited\";\n\n const disabled = status === \"default\" && value !== highestValue.value;\n\n return {\n value,\n disabled,\n status,\n skeleton: skeleton.value,\n // allow user to override step properties so he has full control, therefore we add \"...step\" at the very end\n ...step,\n };\n });\n});\n</script>\n\n<template>\n <div\n :class=\"[\n 'onyx-component',\n 'onyx-progress-steps',\n densityClass,\n { 'onyx-progress-steps--vertical': props.orientation === 'vertical' },\n ]\"\n >\n <div class=\"onyx-progress-steps__scroll-container\">\n <template v-for=\"step in mappedSteps\" :key=\"step.value\">\n <OnyxProgressItem v-bind=\"step\" @click=\"emit('update:modelValue', step.value)\">\n <slot name=\"step\" :step></slot>\n </OnyxProgressItem>\n\n <OnyxSeparator\n v-if=\"step.value < mappedSteps.length\"\n aria-hidden=\"true\"\n class=\"onyx-progress-steps__separator\"\n :orientation=\"props.orientation\"\n />\n </template>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-progress-steps {\n @include layers.component() {\n display: inline-flex;\n align-items: center;\n gap: var(--onyx-density-sm);\n\n &__scroll-container {\n display: contents;\n\n // overflow styles\n max-width: 100%;\n max-height: 100%;\n overflow: auto;\n\n // due to \"overflow auto\", the focus-visible ring of the steps will be cut off so we use this padding/margin workaround to fix this\n padding: var(--onyx-outline-width);\n margin: calc(-1 * var(--onyx-outline-width));\n }\n\n &--vertical {\n flex-direction: column;\n align-items: flex-start;\n gap: var(--onyx-density-2xs);\n\n .onyx-progress-steps__separator {\n --onyx-separator-min-size: 0.5rem;\n // --onyx-density-2xs = padding of step circle/bubble, 1.5rem = width of step circle/bubble\n margin-left: calc(var(--onyx-separator-size) + var(--onyx-density-2xs) + 1.5rem / 2);\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TValue extends SelectOptionValue = SelectOptionValue\">\nimport { useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useAutofocus } from \"../../composables/useAutoFocus.js\";\nimport { useCustomValidity } from \"../../composables/useCustomValidity.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport type { SelectOptionValue } from \"../../types/index.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport OnyxErrorTooltip from \"../OnyxErrorTooltip/OnyxErrorTooltip.vue\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxLoadingIndicator from \"../OnyxLoadingIndicator/OnyxLoadingIndicator.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxRadioButtonProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxRadioButtonProps<TValue>>(), {\n disabled: FORM_INJECTED_SYMBOL,\n required: false,\n checked: false,\n loading: false,\n skeleton: SKELETON_INJECTED_SYMBOL,\n truncation: \"ellipsis\",\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the validity state of the input changes.\n */\n validityChange: [validity: ValidityState];\n}>();\n\ndefineOptions({ inheritAttrs: false });\nconst { rootAttrs, restAttrs } = useRootAttrs();\n\nconst { vCustomValidity, errorMessages } = useCustomValidity({ props, emit });\nconst { densityClass } = useDensity(props);\nconst { disabled } = useFormContext(props);\nconst skeleton = useSkeletonContext(props);\n\nconst input = useTemplateRef(\"inputRef\");\ndefineExpose({ input });\nuseAutofocus(input, props);\n</script>\n\n<template>\n <div\n v-if=\"skeleton\"\n :class=\"['onyx-component', 'onyx-radio-button-skeleton', densityClass]\"\n v-bind=\"rootAttrs\"\n >\n <OnyxSkeleton class=\"onyx-radio-button-skeleton__input\" />\n <OnyxSkeleton class=\"onyx-radio-button-skeleton__label\" />\n </div>\n\n <OnyxErrorTooltip v-else :disabled=\"disabled\" :error-messages=\"errorMessages\" v-bind=\"rootAttrs\">\n <label :class=\"['onyx-component', 'onyx-radio-button', densityClass]\">\n <OnyxLoadingIndicator v-if=\"props.loading\" class=\"onyx-radio-button__loading\" type=\"circle\" />\n <!-- TODO: accessible error: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-errormessage -->\n <input\n v-else\n ref=\"inputRef\"\n v-custom-validity\n class=\"onyx-radio-button__selector\"\n type=\"radio\"\n :required=\"props.required\"\n :name=\"props.name\"\n :value=\"props.value\"\n :checked=\"props.checked\"\n :disabled=\"disabled\"\n :autofocus=\"props.autofocus\"\n v-bind=\"restAttrs\"\n />\n <span class=\"onyx-radio-button__label\" :class=\"[`onyx-truncation-${props.truncation}`]\">\n {{ props.label }}\n </span>\n </label>\n </OnyxErrorTooltip>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/density.scss\";\n@use \"../../styles/mixins/layers\";\n\n.onyx-radio-button,\n.onyx-radio-button-skeleton {\n @include layers.component() {\n --onyx-radio-button-selector-size: var(--onyx-spacing-md);\n --onyx-radio-button-dot-size: var(--onyx-spacing-3xs);\n --onyx-radio-button-selector-margin: var(--onyx-density-sm);\n }\n}\n\n.onyx-radio-button {\n @include layers.component() {\n --onyx-radio-button-cursor: pointer;\n --onyx-radio-button-selector-border-color: var(--onyx-color-component-border-neutral);\n --onyx-radio-button-selector-background-color: var(--onyx-color-base-background-blank);\n --onyx-radio-button-selector-outline-color: var(--onyx-color-base-primary-200);\n --onyx-radio-button-selector-outline-width: 0;\n --onyx-radio-button-label-color: var(--onyx-color-text-icons-neutral-intense);\n\n display: inline-flex;\n align-items: flex-start;\n max-width: 100%;\n cursor: var(--onyx-radio-button-cursor);\n\n &:has(&__selector:hover) {\n --onyx-radio-button-selector-border-color: var(--onyx-color-component-border-primary-hover);\n }\n\n &:has(&__selector:checked) {\n --onyx-radio-button-selector-background-color: var(--onyx-color-component-cta-default);\n --onyx-radio-button-selector-border-color: var(--onyx-radio-button-selector-background-color);\n }\n\n &:has(&__selector:checked:hover) {\n --onyx-radio-button-selector-background-color: var(--onyx-color-component-cta-default-hover);\n --onyx-radio-button-selector-border-color: var(--onyx-radio-button-selector-background-color);\n }\n &:has(&__selector:focus-visible) {\n --onyx-radio-button-selector-border-color: var(--onyx-color-component-border-primary);\n --onyx-radio-button-selector-outline-width: var(--onyx-radio-button-selector-margin);\n }\n &:has(&__selector:invalid) {\n --onyx-radio-button-selector-border-color: var(--onyx-color-component-border-danger);\n --onyx-radio-button-selector-outline-color: var(--onyx-color-base-danger-200);\n }\n\n &:has(&__selector:invalid:checked) {\n --onyx-radio-button-selector-background-color: var(--onyx-color-component-cta-danger);\n }\n\n &:has(&__selector:invalid:checked:hover) {\n --onyx-radio-button-selector-background-color: var(--onyx-color-component-cta-danger-hover);\n --onyx-radio-button-selector-border-color: var(--onyx-radio-button-selector-background-color);\n }\n &:has(&__selector:invalid:focus-visible) {\n --onyx-radio-button-selector-border-color: var(--onyx-color-component-border-danger);\n }\n\n &:has(&__selector:disabled) {\n --onyx-radio-button-selector-outline-width: 0;\n --onyx-radio-button-selector-border-color: var(--onyx-color-component-border-disabled);\n --onyx-radio-button-label-color: var(--onyx-color-text-icons-neutral-soft);\n --onyx-radio-button-cursor: default;\n }\n\n &:has(&__loading) {\n --onyx-radio-button-cursor: default;\n }\n\n &:has(&__selector:disabled:checked) {\n --onyx-radio-button-selector-background-color: var(--onyx-color-base-neutral-300);\n --onyx-radio-button-selector-border-color: var(--onyx-color-base-neutral-300);\n }\n\n &__label {\n font-family: var(--onyx-font-family);\n color: var(--onyx-radio-button-label-color);\n line-height: var(--onyx-spacing-lg);\n padding: var(--onyx-density-xs);\n padding-left: 0;\n }\n\n &__selector {\n appearance: none;\n margin: var(--onyx-radio-button-selector-margin);\n cursor: inherit;\n transition: outline var(--onyx-duration-sm);\n border: var(--onyx-1px-in-rem) solid var(--onyx-radio-button-selector-border-color);\n border-radius: var(--onyx-radius-full);\n background-color: var(--onyx-radio-button-selector-background-color);\n outline: var(--onyx-radio-button-selector-outline-width) solid\n var(--onyx-radio-button-selector-outline-color);\n outline-offset: 0;\n\n display: inline-grid;\n place-items: center;\n width: var(--onyx-radio-button-selector-size);\n min-width: var(--onyx-radio-button-selector-size);\n max-width: var(--onyx-radio-button-selector-size);\n aspect-ratio: 1;\n\n &::before {\n content: \" \";\n height: var(--onyx-radio-button-dot-size);\n width: var(--onyx-radio-button-dot-size);\n background-color: var(--onyx-color-base-background-blank);\n border-radius: var(--onyx-radius-full);\n }\n }\n\n &__loading {\n color: var(--onyx-color-text-icons-primary-intense);\n width: var(--onyx-radio-button-selector-size);\n height: var(--onyx-radio-button-selector-size);\n margin: var(--onyx-radio-button-selector-margin);\n }\n }\n}\n\n.onyx-radio-button-skeleton {\n @include layers.component() {\n padding: var(--onyx-radio-button-selector-margin);\n display: inline-flex;\n align-items: center;\n gap: var(--onyx-radio-button-selector-margin);\n\n &__input {\n height: var(--onyx-radio-button-selector-size);\n width: var(--onyx-radio-button-selector-size);\n border-radius: var(--onyx-radius-full);\n }\n\n &__label {\n height: var(--onyx-spacing-md);\n width: var(--onyx-spacing-3xl);\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TValue extends SelectOptionValue\">\nimport { computed, useId, useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useRequired } from \"../../composables/required.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport type { Nullable, SelectOptionValue } from \"../../types/index.js\";\nimport { asArray } from \"../../utils/objects.js\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxHeadline from \"../OnyxHeadline/OnyxHeadline.vue\";\nimport OnyxInfoTooltip from \"../OnyxInfoTooltip/OnyxInfoTooltip.vue\";\nimport OnyxRadioButton from \"../OnyxRadioButton/OnyxRadioButton.vue\";\nimport type { OnyxRadioGroupProps } from \"./types.js\";\n\ntype Props = OnyxRadioGroupProps<TValue>;\nconst props = withDefaults(defineProps<Props>(), {\n name: () => useId(), // the name must be globally unique\n orientation: \"vertical\",\n required: false,\n requiredMarker: FORM_INJECTED_SYMBOL,\n disabled: FORM_INJECTED_SYMBOL,\n skeleton: SKELETON_INJECTED_SYMBOL,\n truncation: \"ellipsis\",\n});\n\nconst { densityClass } = useDensity(props);\nconst { disabled, requiredMarker } = useFormContext(props);\nconst { requiredMarkerClass, requiredTypeClass } = useRequired(props, requiredMarker);\nconst skeleton = useSkeletonContext(props);\n\nconst emit = defineEmits<{\n /**\n * Emitted when the validity state changes.\n */\n validityChange: [validity: ValidityState];\n /**\n * Emitted when the selected radio button changes.\n */\n \"update:modelValue\": [selected?: Nullable<TValue>];\n}>();\n\nconst modelValue = useVModel<Props, \"modelValue\">({\n props,\n emit,\n key: \"modelValue\",\n});\n\nconst handleChange = (selected: boolean, value: TValue) => {\n if (!selected) return;\n modelValue.value = value;\n};\nconst radiobuttons = useTemplateRef(\"radiobuttonsRef\");\n\ndefineExpose({\n inputs: computed<HTMLInputElement[]>(() => {\n const array = asArray(radiobuttons.value);\n return array\n .flatMap((radiobutton) => radiobutton?.input)\n .filter((radiobutton) => !!radiobutton);\n }),\n});\n</script>\n\n<template>\n <fieldset\n :class=\"['onyx-component', 'onyx-radio-group', densityClass, requiredTypeClass]\"\n :disabled=\"disabled\"\n role=\"radiogroup\"\n :aria-label=\"props.label\"\n >\n <legend v-if=\"!props.hideLabel\" class=\"onyx-radio-group__label\">\n <OnyxHeadline is=\"h3\" :class=\"requiredMarkerClass\">\n {{ props.label }}\n </OnyxHeadline>\n <OnyxInfoTooltip v-if=\"props.labelTooltip\" trigger=\"hover\" :text=\"props.labelTooltip\" />\n </legend>\n\n <div\n class=\"onyx-radio-group__content\"\n :class=\"{ 'onyx-radio-group__content--horizontal': props.orientation === 'horizontal' }\"\n >\n <template v-if=\"!skeleton\">\n <OnyxRadioButton\n v-for=\"(option, index) in props.options\"\n :key=\"option.value.toString()\"\n v-bind=\"option\"\n ref=\"radiobuttonsRef\"\n :name=\"props.name\"\n :error=\"props.error\"\n :checked=\"option.value === modelValue\"\n :required=\"props.required\"\n :truncation=\"option.truncation ?? props.truncation\"\n @validity-change=\"index === 0 && emit('validityChange', $event)\"\n @change=\"handleChange($event, option.value)\"\n />\n </template>\n\n <template v-else-if=\"typeof skeleton === 'number'\">\n <OnyxRadioButton\n v-for=\"i in skeleton\"\n :id=\"`skeleton-${i}`\"\n :key=\"i\"\n :value=\"`skeleton-${i}`\"\n label=\"Skeleton ${i}\"\n :name=\"props.name\"\n skeleton\n />\n </template>\n </div>\n </fieldset>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-radio-group {\n @include layers.component() {\n padding: 0;\n border: none;\n max-width: max-content;\n min-width: unset;\n\n &__label {\n display: flex;\n gap: var(--onyx-spacing-2xs);\n align-items: center;\n margin-bottom: var(--onyx-density-xs);\n }\n\n &__content {\n display: flex;\n flex-direction: column;\n\n &--horizontal {\n flex-direction: row;\n flex-wrap: wrap;\n column-gap: var(--onyx-density-xl);\n }\n }\n }\n}\n</style>\n","import type { OnyxExternalLinkIconProps } from \"../OnyxExternalLinkIcon/types.js\";\n\nexport type OnyxRouterLinkProps = SharedLinkProps;\n\nexport type SharedLinkProps = {\n /**\n * The URL/link to point to.\n * Will use the router for internal links if provided, see [our documentation](https://onyx.schwarz/development/router.html) for further details.\n */\n href: string;\n /**\n * Where to display the linked URL (same tab, new tab etc.).\n * For `_blank`, the `rel=\"noreferrer\"` will be set automatically.\n */\n target?: LinkTarget;\n};\n\nexport const LINK_TARGETS = [\"_self\", \"_blank\", \"_parent\", \"_top\"] as const;\nexport type LinkTarget = (typeof LINK_TARGETS)[number];\n\nexport type WithLinkProp<TExternalLink extends boolean = false> = {\n /**\n * If set, the component will be rendered as link.\n */\n link?:\n | string\n | (TExternalLink extends true ? SharedLinkProps & OnyxExternalLinkIconProps : SharedLinkProps);\n};\n","<script lang=\"ts\" setup>\nimport { useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useAutofocus } from \"../../composables/useAutoFocus.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxVisuallyHidden from \"../OnyxVisuallyHidden/OnyxVisuallyHidden.vue\";\nimport type { OnyxSegmentedControlElement } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxSegmentedControlElement>(), {\n disabled: FORM_INJECTED_SYMBOL,\n});\n\nconst { densityClass } = useDensity(props);\nconst { disabled } = useFormContext(props);\n\nconst input = useTemplateRef(\"inputRef\");\n\nuseAutofocus(input, props);\n\ndefineOptions({ inheritAttrs: false });\nconst { rootAttrs, restAttrs } = useRootAttrs();\n</script>\n\n<template>\n <div\n v-bind=\"rootAttrs\"\n :class=\"['onyx-component', 'onyx-segmented-control-element', densityClass]\"\n >\n <OnyxVisuallyHidden>\n <input\n v-bind=\"restAttrs\"\n :id=\"props.value.toString()\"\n ref=\"inputRef\"\n :name=\"props.name\"\n type=\"radio\"\n :value=\"props.value\"\n :disabled=\"disabled\"\n class=\"onyx-segmented-control-element__input\"\n :aria-label=\"props.label\"\n :autofocus=\"props.autofocus\"\n :checked=\"props.checked\"\n />\n </OnyxVisuallyHidden>\n <label :for=\"props.value.toString()\" class=\"onyx-segmented-control-element__label\">\n <OnyxIcon v-if=\"props.icon\" :icon=\"props.icon\" class=\"onyx-segmented-control-element__icon\" />\n <p v-if=\"!props.hideLabel\" class=\"onyx-segmented-control-element__text\">\n {{ props.label }}\n </p>\n </label>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-segmented-control-element {\n @include layers.component() {\n box-sizing: border-box;\n background-color: var(--onyx-color-base-neutral-200);\n border-radius: var(--onyx-radius-sm);\n color: var(--onyx-color-text-icons-neutral-medium);\n font-weight: var(--onyx-font-weight-regular);\n font-family: var(--onyx-font-family);\n line-height: var(--onyx-font-line-height-md);\n width: 100%;\n\n &__label {\n padding: var(--onyx-density-2xs);\n cursor: pointer;\n height: 100%;\n width: 100%;\n min-width: max-content;\n display: flex;\n justify-content: center;\n gap: var(--onyx-density-xs);\n }\n &:hover {\n color: var(--onyx-color-text-icons-primary-bold);\n }\n &:has(.onyx-segmented-control-element__input:checked) {\n background-color: var(--onyx-color-base-background-blank);\n font-weight: var(--onyx-font-weight-semibold);\n }\n &:has(.onyx-segmented-control-element__input:focus-visible) {\n outline: var(--onyx-outline-width) solid var(--outline-color);\n }\n &:has(.onyx-segmented-control-element__input:disabled) {\n color: var(--onyx-color-text-icons-neutral-soft);\n .onyx-segmented-control-element__label {\n cursor: default;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TValue extends SelectOptionValue\">\nimport { useId } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport type { SelectOptionValue } from \"../../types/components.js\";\nimport OnyxSegmentedControlElement from \"../OnyxSegmentedControlElement/OnyxSegmentedControlElement.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport { type OnyxSegmentedControlProps } from \"./types.js\";\n\ntype Props = OnyxSegmentedControlProps<TValue>;\n\nconst props = withDefaults(defineProps<Props>(), {\n name: () => useId(), // the name must be globally unique\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the selected value changes.\n */\n \"update:modelValue\": [value: TValue];\n}>();\n\nconst skeleton = useSkeletonContext(props);\nconst { densityClass } = useDensity(props);\n\nconst modelValue = useVModel<Props, \"modelValue\", TValue>({\n props,\n emit,\n key: \"modelValue\",\n});\n\nconst handleChange = (value: TValue) => {\n modelValue.value = value;\n};\n</script>\n\n<template>\n <OnyxSkeleton v-if=\"skeleton\" :class=\"['onyx-segmented-control-skeleton', densityClass]\" />\n <div v-else :class=\"['onyx-component', 'onyx-segmented-control', densityClass]\">\n <OnyxSegmentedControlElement\n v-for=\"option in options\"\n :key=\"option.value.toString()\"\n v-bind=\"option\"\n :name=\"props.name\"\n :checked=\"option.value === modelValue\"\n @change=\"handleChange(option.value)\"\n />\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n\n.onyx-segmented-control {\n @include layers.component() {\n --outline-color: var(--onyx-color-component-focus-primary);\n display: flex;\n gap: var(--onyx-density-xs);\n padding: var(--onyx-density-2xs);\n background-color: var(--onyx-color-base-neutral-200);\n border-radius: var(--onyx-radius-md);\n overflow: auto;\n max-width: 100%;\n\n &:has(.onyx-segmented-control-element__icon):not(:has(.onyx-segmented-control-element__text)) {\n width: fit-content;\n }\n\n &-skeleton {\n height: calc(var(--onyx-font-line-height-md) + 4 * var(--onyx-density-2xs));\n border-radius: var(--onyx-radius-sm);\n }\n }\n}\n</style>\n","import type { DensityProp } from \"../../composables/density.js\";\nimport type {\n AutofocusProp,\n BaseSelectOption,\n Nullable,\n SelectOptionValue,\n} from \"../../types/index.js\";\nimport type { FormInjected } from \"../OnyxForm/OnyxForm.core.js\";\nimport type { OnyxSelectInputProps } from \"../OnyxSelectInput/types.js\";\nimport type { OnyxSelectOptionProps } from \"../OnyxSelectOption/types.js\";\n\nexport type OnyxSelectProps<\n TModelValue,\n TMultiple extends boolean | undefined,\n TValue extends SelectOptionValue = SelectOptionValue,\n> = DensityProp &\n Omit<OnyxSelectInputProps, \"density\" | \"modelValue\" | \"showFocus\" | \"disabled\"> &\n AutofocusProp &\n Pick<BaseSelectOption, \"truncation\"> & {\n /**\n * Disables the implicit options filtering when the user changes the search term.\n */\n noFilter?: boolean;\n /**\n * Allows the user to filter the list entries.\n * If enabled, you need to manually filter the options based on the current `searchTerm`.\n * You can use our `normalizedIncludes()` utility function for this.\n * No support for `lazyLoading` yet.\n */\n withSearch?: boolean;\n /**\n * Allows the selection of multiple options\n */\n // \"boolean &\" is needed to correctly generate the runtime prop value, see: https://github.com/vuejs/core/issues/13787#issuecomment-3209755164\n multiple?: boolean & TMultiple;\n /**\n * If true, a checkbox will be displayed to check/uncheck all options.\n * Disabled and skeleton checkboxes will be excluded from the check/uncheck behavior.\n * Only available if \"multiple\" is true and no `searchTerm` is provided.\n */\n withCheckAll?:\n | boolean\n | {\n /**\n * Label for the `select all` checkbox.\n * If unset, a default label will be shown depending on the current locale/language.\n */\n label?: string;\n };\n /**\n * Whether the select should be disabled.\n */\n disabled?: FormInjected<boolean>;\n /**\n * Label that will be shown in the input of OnyxSelect.\n * If unset, will be managed internally by comparing `modelValue` with `options`.\n * Recommended to be used if not all options can be provided at once\n * or a manual search is implemented.\n */\n valueLabel?: string | string[];\n /**\n * Alignment of the select flyout relative to the input.\n * If set to full, the width of the flyout will be aligned (100%) with the input of the select.\n * Otherwise the flyout width will fit the options content width and aligned left/right.\n */\n alignment?: SelectAlignment;\n /**\n * Label describing the list of options to support assistive technologies.\n * @example: { label: \"Your Animal\", listLabel: \"List of animals\" }\n */\n listLabel: string;\n /**\n * Text describing the list of options which will be displayed at the bottom of the flyout.\n */\n listDescription?: string;\n /**\n * Available options to choose from.\n */\n options: SelectOption<TValue>[];\n /**\n * Lazy loading options. Can be used to load more options on scroll.\n * If you want to use a button instead, use the `optionsEnd` slot.\n */\n lazyLoading?: SelectLazyLoading;\n /**\n * Whether to preserve the selection order when reopening the dropdown.\n */\n keepSelectionOrder?: boolean;\n } & {\n /**\n * Currently selected options. Can be either a single value or an array of values.\n */\n modelValue?: Nullable<TModelValue>;\n /**\n * Whether the flyout is currently open.\n */\n open?: Nullable<boolean>;\n /**\n * Current search term when `withSearch` is enabled.\n */\n searchTerm?: Nullable<string>;\n };\n\nexport type SelectOption<TValue extends SelectOptionValue = SelectOptionValue> = Pick<\n BaseSelectOption<TValue>,\n \"value\" | \"label\" | \"truncation\"\n> &\n Pick<OnyxSelectOptionProps, \"icon\"> & {\n /**\n * Disables the option and prevents it from being selected.\n */\n disabled?: boolean;\n /**\n * Optional group name. If set, all options with the same group name will be grouped below that name.\n * If `group` is used for one option, it should be used for all other options as well.\n */\n group?: string;\n };\n\nexport type SelectLazyLoading = {\n /**\n * Whether lazy loading should be enabled.\n * Can be disabled e.g. if all options are loaded.\n */\n enabled?: boolean;\n /**\n * Whether the lazy loading is currently loading more options.\n */\n loading?: boolean;\n /**\n * Scroll offset (in pixel). Must be >= 0.\n * Can be used to trigger the `lazyLoad` event earlier (e.g. if scrolled to second last option).\n */\n scrollOffset?: number;\n};\n\nexport const SELECT_ALIGNMENTS = [\"full\", \"left\", \"right\"] as const;\nexport type SelectAlignment = (typeof SELECT_ALIGNMENTS)[number];\n","import type { SharedFormElementProps } from \"../OnyxFormElement/types.js\";\n\nexport const MULTISELECT_TEXT_MODE = [\"summary\", \"preview\"] as const;\nexport type MultiselectTextMode = (typeof MULTISELECT_TEXT_MODE)[number];\n\nexport type OnyxSelectInputProps = Omit<SharedFormElementProps, \"maxlength\" | \"withCounter\"> & {\n /**\n * Current label(s) of the select.\n */\n modelValue?: string[];\n /**\n * How multiselect labels will be displayed in the input.\n * - summary (default): will show \"x Selected\" if more than 1 is selected.\n * - preview: will show the names of the selection as a truncated list.\n * A number-badge appears next to it including a tooltip with all selected names.\n */\n textMode?: MultiselectTextMode;\n /**\n * Whether to hide the check icon when the input is in a success state.\n */\n hideSuccessIcon?: boolean;\n /**\n * Highlight input as if it has focus.\n */\n showFocus?: boolean;\n};\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport { useDensity } from \"../../../../composables/density.js\";\nimport { useLink } from \"../../../../composables/useLink.js\";\nimport { extractLinkProps } from \"../../../../utils/router.js\";\nimport OnyxRouterLink from \"../../../OnyxRouterLink/OnyxRouterLink.vue\";\nimport type { OnyxSidebarItemProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxSidebarItemProps>(), {\n active: \"auto\",\n});\n\ndefineSlots<{\n /**\n * Content of the sidebar item.\n */\n default(): unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\nconst { isActive } = useLink();\n\nconst active = computed(() => {\n if (typeof props.active === \"boolean\") return props.active;\n return isActive.value(props.link);\n});\n\nconst link = computed(() => (props.link ? extractLinkProps(props.link) : undefined));\n\nconst classes = computed(() => [\n \"onyx-component\",\n \"onyx-sidebar-item\",\n densityClass.value,\n active.value ? \"onyx-sidebar-item--active\" : \"\",\n]);\n</script>\n\n<template>\n <OnyxRouterLink v-if=\"link\" :class=\"classes\" v-bind=\"link\">\n <slot></slot>\n </OnyxRouterLink>\n\n <button v-else :class=\"classes\" type=\"button\">\n <slot></slot>\n </button>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../../styles/mixins/layers.scss\";\n\n.onyx-sidebar-item {\n @include layers.component() {\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n background-color: var(--onyx-color-base-background-blank);\n border-radius: var(--onyx-radius-md);\n padding: var(--onyx-density-xs);\n display: flex;\n align-items: center;\n gap: var(--onyx-density-xs);\n max-width: 100%;\n cursor: pointer;\n\n &:is(button) {\n border: none;\n }\n\n &:hover {\n background-color: var(--onyx-color-base-neutral-200);\n }\n\n &:focus-visible {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n }\n\n &--active {\n color: var(--onyx-color-text-icons-primary-bold);\n background-color: var(--onyx-color-base-primary-100);\n\n &:hover {\n background-color: var(--onyx-color-base-primary-200);\n }\n }\n }\n}\n</style>\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M17.618 11.626H8.936l3.094-3.094-1.064-1.056-4.899 4.898 4.9 4.9 1.063-1.064-3.094-3.086h8.682z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M13.026 7.476 11.97 8.532l3.086 3.094H6.382v1.498h8.674L11.97 16.21l1.056 1.063 4.9-4.898z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18.743 3.038H5.258A2.26 2.26 0 0 0 3 5.295V18.78a2.26 2.26 0 0 0 2.258 2.258H18.75a2.25 2.25 0 0 0 2.25-2.25V5.295a2.26 2.26 0 0 0-2.258-2.257M4.5 18.78V5.295c0-.42.338-.757.758-.757H8.25v15H5.258a.755.755 0 0 1-.758-.758m15 .008c0 .412-.337.75-.75.75h-9v-15h8.993c.42 0 .757.337.757.757z\\\"/><path d=\\\"m15.218 8.558-3.48 3.48 3.48 3.48 1.064-1.058-2.422-2.423 2.422-2.422z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18.743 3.038H5.258A2.26 2.26 0 0 0 3 5.295V18.78a2.26 2.26 0 0 0 2.258 2.258H18.75a2.25 2.25 0 0 0 2.25-2.25V5.295a2.26 2.26 0 0 0-2.258-2.257M4.5 18.78V5.295c0-.42.338-.757.758-.757H8.25v15H5.258a.755.755 0 0 1-.758-.758m15 .008c0 .412-.337.75-.75.75h-9v-15h8.993c.42 0 .757.337.757.757z\\\"/><path d=\\\"m12.27 9.615 2.423 2.422-2.423 2.423 1.058 1.057 3.48-3.48-3.48-3.48z\\\"/></svg>\"","<script lang=\"ts\" setup>\nimport arrowSmallLeft from \"@sit-onyx/icons/arrow-small-left.svg?raw\";\nimport arrowSmallRight from \"@sit-onyx/icons/arrow-small-right.svg?raw\";\nimport sidebarArrowLeft from \"@sit-onyx/icons/sidebar-arrow-left.svg?raw\";\nimport sidebarArrowRight from \"@sit-onyx/icons/sidebar-arrow-right.svg?raw\";\nimport { computed, onUnmounted, ref, useId, useTemplateRef, watch } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useResizeObserver } from \"../../composables/useResizeObserver.js\";\nimport { ONYX_BREAKPOINTS } from \"../../utils/breakpoints.js\";\nimport { useGlobalFAB } from \"../OnyxGlobalFAB/useGlobalFAB.js\";\nimport OnyxModal from \"../OnyxModal/OnyxModal.vue\";\nimport OnyxResizeHandle from \"../OnyxResizeHandle/OnyxResizeHandle.vue\";\nimport type { OnyxSidebarProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxSidebarProps>(), {\n alignment: \"left\",\n collapseSidebar: \"sm\",\n resizable: true,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the drawer should be closed.\n * Only available when the `drawer` property is set.\n */\n close: [];\n}>();\n\nconst slots = defineSlots<{\n /**\n * Main sidebar content/body.\n */\n default(): unknown;\n /**\n * Optional header slot to show above the body.\n */\n header?(): unknown;\n /**\n * Optional footer slot to show below the body.\n */\n footer?(): unknown;\n /**\n * Description slot of the `OnyxModalDialog`. Only available if the `temporary` property is set.\n */\n description?(): unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\nconst globalFAB = useGlobalFAB();\n\nconst sidebarElement = useTemplateRef(\"sidebarRef\");\nconst modalElement = useTemplateRef(\"modalRef\");\nconst width = ref<number>();\nconst widthStyle = computed(() => {\n if (!width.value) return;\n return { \"--onyx-sidebar-width\": `${width.value}px` };\n});\n\nconst resizeHandleProps = computed(\n () =>\n ({\n onUpdateWidth: (newWidth: number) => (width.value = newWidth),\n onAutoSize: () => (width.value = undefined),\n alignment: props.alignment === \"left\" ? \"right\" : \"left\",\n }) as const,\n);\nconst { width: windowWidth } = useResizeObserver();\n\nconst shouldCollapse = computed(() => {\n if (!props.collapseSidebar || windowWidth.value === 0) return false;\n const breakpointWidth =\n typeof props.collapseSidebar === \"number\"\n ? props.collapseSidebar\n : ONYX_BREAKPOINTS[props.collapseSidebar];\n return windowWidth.value <= breakpointWidth;\n});\n\nconst _isModalOpen = ref(false);\nconst isModalOpen = computed<boolean>({\n get: () => {\n if (typeof props.temporary?.open === \"boolean\") {\n return props.temporary.open;\n }\n return _isModalOpen.value;\n },\n set: (newVal: boolean) => {\n _isModalOpen.value = newVal;\n if (!newVal) {\n emit(\"close\");\n }\n },\n});\n\nconst id = useId();\n\nwatch(\n [shouldCollapse, () => props.temporary],\n () => {\n if (!shouldCollapse.value || props.temporary) {\n globalFAB.remove(id);\n return;\n }\n\n globalFAB.add(\n computed(() => ({\n id,\n label: props.label,\n hideLabel: true,\n icon: props.alignment === \"right\" ? sidebarArrowLeft : sidebarArrowRight,\n ifOption: {\n hideLabel: false,\n icon: props.alignment === \"right\" ? arrowSmallLeft : arrowSmallRight,\n },\n alignment: props.alignment,\n onClick: () => {\n isModalOpen.value = !isModalOpen.value;\n },\n })),\n );\n },\n { immediate: true },\n);\n\nonUnmounted(() => {\n globalFAB.remove(id);\n});\n</script>\n\n<template>\n <aside\n v-if=\"!props.temporary && !shouldCollapse\"\n ref=\"sidebarRef\"\n :class=\"[\n 'onyx-component',\n 'onyx-sidebar',\n 'onyx-grid-container',\n densityClass,\n { 'onyx-sidebar--right': props.alignment === 'right' },\n ]\"\n :aria-label=\"props.label\"\n :style=\"widthStyle\"\n >\n <header v-if=\"!!slots.header\" class=\"onyx-sidebar__header\">\n <slot name=\"header\"></slot>\n </header>\n\n <div class=\"onyx-sidebar__body\">\n <slot></slot>\n </div>\n\n <footer v-if=\"!!slots.footer\" class=\"onyx-sidebar__footer\">\n <slot name=\"footer\"></slot>\n </footer>\n\n <OnyxResizeHandle v-if=\"props.resizable\" :element=\"sidebarElement\" v-bind=\"resizeHandleProps\" />\n </aside>\n\n <OnyxModal\n v-else\n v-bind=\"props.temporary\"\n ref=\"modalRef\"\n v-model:open=\"isModalOpen\"\n :class=\"[\n 'onyx-sidebar',\n 'onyx-sidebar--temporary',\n {\n 'onyx-sidebar--right': props.alignment === 'right',\n 'onyx-sidebar--floating': props.temporary?.floating,\n },\n ]\"\n :label=\"props.label\"\n :density=\"props.density\"\n :style=\"widthStyle\"\n :alignment=\"props.alignment\"\n >\n <template v-if=\"!!slots.header\" #headline>\n <slot name=\"header\"></slot>\n </template>\n\n <template v-if=\"!!slots.description\" #description>\n <slot name=\"description\"></slot>\n </template>\n\n <slot></slot>\n\n <template v-if=\"!!slots.footer\" #footer>\n <div class=\"onyx-sidebar__footer\">\n <slot name=\"footer\"></slot>\n </div>\n </template>\n\n <OnyxResizeHandle v-if=\"props.resizable\" :element=\"modalElement\" v-bind=\"resizeHandleProps\" />\n </OnyxModal>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-sidebar {\n @include layers.component() {\n --onyx-sidebar-border: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n --onyx-sidebar-padding: var(--onyx-density-md);\n --onyx-sidebar-width: 20rem;\n --onyx-sidebar-min-width: 4rem;\n --onyx-sidebar-header-gap: var(--onyx-density-md);\n --onyx-sidebar-footer-gap: var(--onyx-density-xs);\n width: var(--onyx-sidebar-width);\n min-width: var(--onyx-sidebar-min-width);\n max-width: calc(100vw - var(--onyx-grid-margin));\n\n &:not(&--temporary) {\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n background-color: var(--onyx-color-base-background-blank);\n border-right: var(--onyx-sidebar-border);\n height: 100%;\n max-height: 100%;\n display: flex;\n flex-direction: column;\n\n &.onyx-sidebar--right {\n border-left: var(--onyx-sidebar-border);\n border-right: none;\n }\n }\n\n &:has(.onyx-resize-handle) {\n position: relative;\n }\n\n &--temporary {\n --onyx-modal-padding-inline: var(--onyx-density-md);\n\n &:not(.onyx-sidebar--floating) {\n --onyx-basic-dialog-screen-gap: 0;\n --onyx-basic-dialog-border-radius: 0;\n border-top: none;\n border-left: none;\n border-bottom: none;\n }\n }\n\n &__header {\n display: flex;\n flex-direction: column;\n gap: var(--onyx-sidebar-header-gap);\n padding: var(--onyx-sidebar-padding);\n border-bottom: var(--onyx-sidebar-border);\n }\n\n &__footer {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--onyx-sidebar-footer-gap);\n padding: var(--onyx-sidebar-padding);\n border-top: var(--onyx-sidebar-border);\n\n > .onyx-button {\n flex-grow: 1;\n }\n }\n\n &__body {\n overflow: auto;\n flex-grow: 1;\n }\n }\n}\n</style>\n","import type { DensityProp } from \"../../composables/density.js\";\nimport type { OnyxBreakpoint } from \"../../utils/breakpoints.js\";\nimport type { OnyxModalProps } from \"../OnyxModal/types.js\";\n\nexport type OnyxSidebarProps = DensityProp & {\n /**\n * (Aria) label that describes the dialog. Required for accessibility / screen readers.\n * When the `temporary` property is set, the label will be used as the displayed label/headline by default.\n */\n label: string;\n /**\n * If set, the sidebar will be shown as an temporary overlay above the page content instead of in-place.\n */\n temporary?: TemporarySidebar;\n /**\n * Whether the sidebar should be manually resizable by the user by dragging the right border.\n */\n resizable?: boolean;\n /**\n * Where the sidebar is positioned on the page.\n * Note: When using the non-drawer sidebar (default), you need to do the actual positioning on the page manually. You can use the [OnyxPageLayout](https://storybook.onyx.schwarz/?path=/story/layout-pagelayout--sidebar-right) for this.\n */\n alignment?: SidebarAlignment;\n /**\n * Controls the collapsing behavior of the sidebar.\n * - If set to a `OnyxBreakpoint` enum value (e.g., `md`), the sidebar will collapse when the screen width\n * is at or below that breakpoint.\n * - If set to a `number`, the sidebar will collapse when the screen width is at or below this pixel value.\n * - If set to `false`, the sidebar will never collapse automatically based on screen width.\n * @default `sm`\n */\n collapseSidebar?: OnyxBreakpoint | number | false;\n};\n\nexport const SIDEBAR_ALIGNMENT = [\"left\", \"right\"] as const;\nexport type SidebarAlignment = (typeof SIDEBAR_ALIGNMENT)[number];\n\nexport type TemporarySidebar = Pick<OnyxModalProps, \"open\" | \"nonDismissible\"> & {\n /**\n * If `true`, the sidebar will have a small gap from the viewport and have rounded corners.\n */\n floating?: boolean;\n};\n","<script lang=\"ts\" setup>\nimport { iconMinus, iconPlus } from \"@sit-onyx/icons\";\nimport { computed, ref, useTemplateRef, watchEffect } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useAutofocus } from \"../../composables/useAutoFocus.js\";\nimport { getFormMessages, useCustomValidity } from \"../../composables/useCustomValidity.js\";\nimport { useErrorClass } from \"../../composables/useErrorClass.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport type { Nullable } from \"../../types/index.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport { applyLimits, roundToPrecision } from \"../../utils/numbers.js\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxFormElement from \"../OnyxFormElement/OnyxFormElement.vue\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxLoadingIndicator from \"../OnyxLoadingIndicator/OnyxLoadingIndicator.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxStepperProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxStepperProps>(), {\n stepSize: 1,\n readonly: false,\n loading: false,\n skeleton: SKELETON_INJECTED_SYMBOL,\n disabled: FORM_INJECTED_SYMBOL,\n showError: FORM_INJECTED_SYMBOL,\n hideButtons: false,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the validity state of the input changes.\n */\n validityChange: [validity: ValidityState];\n /**\n * update modeValue\n */\n \"update:modelValue\": [value?: Nullable<number>];\n}>();\n\nconst { t, locale } = injectI18n();\nconst input = useTemplateRef(\"inputRef\");\n\nconst { disabled, showError } = useFormContext(props);\nconst skeleton = useSkeletonContext(props);\nconst errorClass = useErrorClass(showError);\nconst { densityClass } = useDensity(props);\nconst { vCustomValidity, errorMessages } = useCustomValidity({ props, emit });\nconst successMessages = computed(() => getFormMessages(props.success));\nconst messages = computed(() => getFormMessages(props.message));\n\ndefineOptions({ inheritAttrs: false });\nconst { rootAttrs, restAttrs } = useRootAttrs();\n\n/**\n * Used to detect user interaction to simulate the behavior of :user-invalid for the native input\n * because the native browser :user-invalid does not trigger when the value is changed via Arrow up/down or increase/decrease buttons\n */\nconst wasTouched = ref(false);\n\nconst modelValue = useVModel({\n props,\n emit,\n key: \"modelValue\",\n});\n\n/**\n * Used for syncing the actual input value.\n * We use string to be able to control the number of decimal places.\n */\nconst inputValue = ref<string>();\nconst displayValue = computed(() => getDisplayValue.value(modelValue.value));\nconst getFormattedValue = computed(() => {\n return (value?: Nullable<number>) => {\n // using \"!=\" here to check for both undefined and null\n if (props.precision !== undefined && value != undefined) {\n return roundToPrecision(value, props.precision);\n } else {\n return value?.toString() ?? \"\";\n }\n };\n});\nconst getDisplayValue = computed(() => {\n return (value: Nullable<number>) => {\n if (value == undefined || Number.isNaN(value)) return \"\";\n if (props.formatNumber) {\n if (typeof props.formatNumber === \"boolean\") {\n if (props.precision) {\n return value.toLocaleString(locale.value, {\n minimumFractionDigits: props.precision,\n maximumFractionDigits: props.precision,\n });\n }\n return value.toLocaleString(locale.value);\n } else {\n return props.formatNumber(value);\n }\n }\n if (props.precision) {\n return roundToPrecision(value, props.precision);\n }\n return String(value);\n };\n});\n\nwatchEffect(() => {\n inputValue.value = getFormattedValue.value(modelValue.value);\n});\n\nconst handleClick = (direction: \"stepUp\" | \"stepDown\") => {\n wasTouched.value = true;\n const currentValue = modelValue.value || 0;\n const stepValue = (direction === \"stepUp\" ? 1 : -1) * props.stepSize;\n const newValue = parseFloat(getFormattedValue.value(currentValue + stepValue));\n modelValue.value = applyLimits(newValue, props.min, props.max);\n};\n\nconst handleChange = () => {\n wasTouched.value = true;\n if (inputValue.value == undefined) {\n modelValue.value = undefined;\n return;\n }\n inputValue.value = getFormattedValue.value(parseFloat(inputValue.value));\n modelValue.value = parseFloat(inputValue.value);\n};\n\nconst incrementLabel = computed(() => t.value(\"stepper.increment\", { stepSize: props.stepSize }));\nconst decrementLabel = computed(() => t.value(\"stepper.decrement\", { stepSize: props.stepSize }));\n\ndefineExpose({ input });\nuseAutofocus(input, props);\n</script>\n\n<template>\n <div\n v-if=\"skeleton\"\n :class=\"['onyx-component', 'onyx-stepper-skeleton', densityClass]\"\n v-bind=\"rootAttrs\"\n >\n <OnyxSkeleton v-if=\"!props.hideLabel\" class=\"onyx-stepper-skeleton__label\" />\n <OnyxSkeleton class=\"onyx-stepper-skeleton__input\" />\n </div>\n <div\n v-else\n :class=\"['onyx-component', 'onyx-stepper', densityClass, errorClass]\"\n v-bind=\"rootAttrs\"\n >\n <OnyxFormElement\n v-bind=\"props\"\n :message=\"messages\"\n :success-messages=\"successMessages\"\n :error-messages=\"errorMessages\"\n >\n <template #default=\"{ id: inputId }\">\n <div class=\"onyx-stepper__wrapper\">\n <button\n v-if=\"!props.hideButtons\"\n type=\"button\"\n class=\"onyx-stepper__counter\"\n :disabled=\"\n disabled ||\n readonly ||\n props.loading ||\n (props.min !== undefined &&\n modelValue !== undefined &&\n modelValue !== null &&\n modelValue <= props.min)\n \"\n :aria-label=\"decrementLabel\"\n tabindex=\"-1\"\n @click=\"handleClick('stepDown')\"\n >\n <OnyxIcon :icon=\"iconMinus\" />\n </button>\n <OnyxLoadingIndicator v-if=\"props.loading\" class=\"onyx-stepper__loading\" type=\"circle\" />\n <input\n v-else\n :id=\"inputId\"\n ref=\"inputRef\"\n v-model=\"inputValue\"\n v-custom-validity\n class=\"onyx-stepper__native\"\n :class=\"{ 'onyx-stepper__native--touched': wasTouched }\"\n type=\"number\"\n :aria-label=\"props.label\"\n :autofocus=\"props.autofocus\"\n :disabled=\"disabled || props.loading\"\n :min=\"props.min\"\n :max=\"props.max\"\n :name=\"props.name\"\n :placeholder=\"props.placeholder\"\n :readonly=\"props.readonly\"\n :required=\"props.required\"\n :step=\"props.validStepSize ?? 'any'\"\n :title=\"props.hideLabel ? props.label : undefined\"\n v-bind=\"restAttrs\"\n @change=\"handleChange\"\n @focusin=\"(e) => (e.target as HTMLInputElement)?.select()\"\n @keydown.up.prevent=\"handleClick('stepUp')\"\n @keydown.down.prevent=\"handleClick('stepDown')\"\n />\n <p class=\"onyx-stepper__display\" aria-hidden=\"true\">\n {{ displayValue }}\n </p>\n <button\n v-if=\"!props.hideButtons\"\n type=\"button\"\n class=\"onyx-stepper__counter\"\n :disabled=\"\n disabled ||\n readonly ||\n props.loading ||\n (props.max !== undefined &&\n modelValue !== undefined &&\n modelValue !== null &&\n modelValue >= props.max)\n \"\n :aria-label=\"incrementLabel\"\n tabindex=\"-1\"\n @click=\"handleClick('stepUp')\"\n >\n <OnyxIcon :icon=\"iconPlus\" />\n </button>\n </div>\n </template>\n </OnyxFormElement>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers\";\n@use \"../../styles/mixins/input.scss\";\n\n.onyx-stepper,\n.onyx-stepper-skeleton {\n --onyx-stepper-padding-vertical: var(--onyx-density-xs);\n}\n\n.onyx-stepper-skeleton {\n @include input.define-skeleton-styles(\n $height: calc(1lh + 2 * var(--onyx-stepper-padding-vertical))\n );\n}\n\n.onyx-stepper {\n @include layers.component() {\n @include input.define-shared-styles(\n $base-selector: \".onyx-stepper\",\n $vertical-padding: var(--onyx-stepper-padding-vertical)\n );\n\n &__wrapper {\n gap: 0;\n padding: 0;\n justify-content: space-between;\n position: relative;\n\n &:has(.onyx-stepper__native:focus-visible) {\n .onyx-stepper__display {\n display: none;\n }\n }\n }\n\n &__counter {\n border: none;\n height: 100%;\n background-color: transparent;\n color: var(--onyx-color-text-icons-neutral-medium);\n display: inline-flex;\n align-items: center;\n padding: var(--onyx-stepper-padding-vertical);\n border-radius: 0 var(--onyx-radius-sm) var(--onyx-radius-sm) 0;\n outline: none;\n\n &:enabled {\n cursor: pointer;\n\n &:hover,\n &:focus-visible {\n color: var(--onyx-color-text-icons-primary-intense);\n }\n\n &:focus-visible {\n outline: none;\n background-color: var(--onyx-color-base-primary-100);\n }\n\n &:active {\n background-color: var(--onyx-color-base-primary-100);\n }\n\n &:first-child {\n border-radius: var(--onyx-radius-sm) 0 0 var(--onyx-radius-sm);\n }\n }\n\n &:disabled {\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n }\n\n &__native {\n -moz-appearance: textfield;\n text-align: center;\n &:not(:focus-visible) {\n color: transparent;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n\n &__display {\n position: absolute;\n height: 100%;\n color: var(--onyx-color-text-icons-neutral-intense);\n\n pointer-events: none;\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n width: 100%;\n }\n\n &:has(&__counter) {\n .onyx-stepper__display {\n $button-width: calc(2 * var(--onyx-stepper-padding-vertical) + 1.5rem);\n width: calc(100% - 2 * $button-width);\n margin-inline: $button-width;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconCheckSmall, iconXSmall } from \"@sit-onyx/icons\";\nimport { computed, useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useRequired } from \"../../composables/required.js\";\nimport { useAutofocus } from \"../../composables/useAutoFocus.js\";\nimport { useCustomValidity } from \"../../composables/useCustomValidity.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport OnyxErrorTooltip from \"../OnyxErrorTooltip/OnyxErrorTooltip.vue\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxLoadingIndicator from \"../OnyxLoadingIndicator/OnyxLoadingIndicator.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxSwitchProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxSwitchProps>(), {\n disabled: FORM_INJECTED_SYMBOL,\n loading: false,\n truncation: \"ellipsis\",\n requiredMarker: FORM_INJECTED_SYMBOL,\n skeleton: SKELETON_INJECTED_SYMBOL,\n showError: FORM_INJECTED_SYMBOL,\n modelValue: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emitted when the checked state changes. */\n \"update:modelValue\": [value: boolean];\n /**\n * Emitted when the validity state of the input changes.\n */\n validityChange: [validity: ValidityState];\n}>();\n\ndefineOptions({ inheritAttrs: false });\nconst { rootAttrs, restAttrs } = useRootAttrs();\n\nconst { densityClass } = useDensity(props);\n\nconst { disabled, showError, requiredMarker } = useFormContext(props);\nconst { requiredMarkerClass, requiredTypeClass } = useRequired(props, requiredMarker);\nconst { vCustomValidity, errorMessages } = useCustomValidity({ props, emit });\nconst shownErrorMessages = computed(() =>\n showError.value !== false ? errorMessages.value : undefined,\n);\n\nconst title = computed(() => (props.hideLabel && props.label) || undefined);\nconst skeleton = useSkeletonContext(props);\nconst isChecked = useVModel({\n props,\n emit,\n key: \"modelValue\",\n default: false,\n});\n\nconst input = useTemplateRef(\"inputRef\");\ndefineExpose({ input });\nuseAutofocus(input, props);\n</script>\n\n<template>\n <div\n v-if=\"skeleton\"\n :class=\"['onyx-component', 'onyx-switch-skeleton', densityClass]\"\n v-bind=\"rootAttrs\"\n >\n <span class=\"onyx-switch-skeleton__click-area\">\n <OnyxSkeleton class=\"onyx-switch-skeleton__input\" />\n </span>\n <OnyxSkeleton v-if=\"!props.hideLabel\" class=\"onyx-switch-skeleton__label\" />\n </div>\n\n <OnyxErrorTooltip\n v-else\n :disabled=\"disabled\"\n :error-messages=\"shownErrorMessages\"\n v-bind=\"rootAttrs\"\n >\n <label\n class=\"onyx-component onyx-switch\"\n :class=\"[requiredTypeClass, densityClass]\"\n :title=\"title\"\n >\n <input\n ref=\"inputRef\"\n v-model=\"isChecked\"\n v-custom-validity\n type=\"checkbox\"\n role=\"switch\"\n :class=\"{ 'onyx-switch__input': true, 'onyx-switch__loading': props.loading }\"\n :aria-label=\"props.hideLabel ? props.label : undefined\"\n :disabled=\"disabled || props.loading\"\n :required=\"props.required\"\n :autofocus=\"props.autofocus\"\n v-bind=\"restAttrs\"\n />\n <span class=\"onyx-switch__click-area\">\n <span class=\"onyx-switch__container\">\n <span class=\"onyx-switch__icon\">\n <OnyxLoadingIndicator v-if=\"props.loading\" class=\"onyx-switch__spinner\" type=\"circle\" />\n <OnyxIcon v-else :icon=\"isChecked ? iconCheckSmall : iconXSmall\" />\n </span>\n <div class=\"onyx-switch__frame\"></div>\n </span>\n </span>\n <span\n v-if=\"!props.hideLabel\"\n class=\"onyx-switch__label\"\n :class=\"[\n `onyx-truncation-${props.truncation}`,\n // shows the required marker inline for multiline labels\n props.truncation === 'multiline' ? requiredMarkerClass : undefined,\n ]\"\n >\n {{ props.label }}\n </span>\n <!-- shows the required marker fixed on the right for truncated labels -->\n <div\n v-if=\"!props.hideLabel && props.truncation === 'ellipsis'\"\n class=\"onyx-switch__marker\"\n :class=\"[requiredMarkerClass]\"\n ></div>\n </label>\n </OnyxErrorTooltip>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/density.scss\";\n@use \"../../styles/mixins/layers\";\n\n.onyx-switch,\n.onyx-switch-skeleton {\n --onyx-switch-icon-size: 1.25rem;\n --onyx-switch-container-padding: var(--onyx-1px-in-rem);\n // icon size + padding top/bottom + border top/bottom\n --onyx-switch-frame-height: calc(\n var(--onyx-switch-icon-size) + 2 * var(--onyx-switch-container-padding) + 2 *\n var(--onyx-1px-in-rem)\n );\n --onyx-switch-label-padding-vertical: var(--onyx-density-xs);\n}\n\n$input-width: calc(2 * var(--onyx-switch-icon-size) - 2 * var(--onyx-switch-container-padding));\n\n.onyx-switch {\n @include density.compact {\n --onyx-switch-transform: 0.125rem;\n }\n\n @include density.default {\n --onyx-switch-transform: var(--onyx-1px-in-rem);\n }\n\n @include density.cozy {\n --onyx-switch-transform: 0.01rem;\n }\n\n @include layers.component() {\n display: inline-flex;\n align-items: flex-start;\n cursor: pointer;\n max-width: 100%;\n\n &__input {\n // position: absolute is needed here in order to hide the native checkbox.\n position: absolute;\n opacity: 0;\n cursor: inherit;\n width: 0;\n height: 0;\n margin: 0;\n\n &:checked + .onyx-switch__click-area .onyx-switch__container {\n background-color: var(--onyx-color-component-cta-default);\n\n .onyx-switch__icon {\n background-color: var(--onyx-color-base-neutral-100);\n transform: translateX(calc(75% - var(--onyx-switch-transform)));\n color: var(--onyx-color-text-icons-primary-intense);\n }\n\n .onyx-switch__spinner {\n color: var(--onyx-color-text-icons-primary-intense);\n }\n }\n\n &:checked:disabled:not(.onyx-switch__loading)\n + .onyx-switch__click-area\n .onyx-switch__container {\n background-color: var(--onyx-color-base-primary-200);\n\n .onyx-switch__icon {\n background-color: var(--onyx-color-base-background-blank);\n color: var(--onyx-color-text-icons-primary-soft);\n }\n }\n\n &:disabled:not(.onyx-switch__loading) + .onyx-switch__click-area .onyx-switch__container {\n background-color: var(--onyx-color-base-neutral-200);\n\n .onyx-switch__icon {\n background-color: var(--onyx-color-base-neutral-300);\n color: var(--onyx-color-text-icons-neutral-inverted);\n }\n }\n\n &:user-invalid {\n & + .onyx-switch__click-area .onyx-switch__container {\n background-color: var(--onyx-color-base-danger-200);\n position: relative;\n\n .onyx-switch__icon {\n background-color: var(--onyx-color-base-danger-500);\n color: var(--onyx-color-text-icons-neutral-inverted);\n }\n\n // The frame is needed instead of setting a border directly on __container\n // because when zooming in, some browsers will mess up the center-alignment of the __icon\n // by resizing the 1px border to fractions.\n // for more info, see https://github.com/SchwarzIT/onyx/issues/503\n .onyx-switch__frame {\n position: absolute;\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-danger);\n height: var(--onyx-switch-frame-height);\n border-radius: var(--onyx-radius-full);\n width: $input-width;\n box-sizing: border-box;\n top: 0;\n left: 0;\n }\n }\n\n &:checked + .onyx-switch__click-area .onyx-switch__container {\n background-color: var(--onyx-color-component-cta-danger);\n\n .onyx-switch__icon {\n background-color: var(--onyx-color-base-background-blank);\n color: var(--onyx-color-text-icons-danger-intense);\n }\n }\n }\n }\n\n &__click-area,\n &-skeleton__click-area {\n padding: var(--onyx-switch-label-padding-vertical);\n display: flex;\n align-items: center;\n }\n\n &__container {\n display: inline-flex;\n width: $input-width;\n min-width: $input-width;\n padding: var(--onyx-switch-container-padding);\n box-sizing: border-box;\n background-color: var(--onyx-color-base-neutral-300);\n border-radius: var(--onyx-radius-full);\n transition: background-color var(--onyx-duration-sm) ease;\n\n .onyx-switch__icon {\n margin: var(--onyx-1px-in-rem);\n display: flex;\n align-self: center;\n justify-content: center;\n background-color: var(--onyx-color-base-neutral-100);\n border-radius: var(--onyx-radius-full);\n transition:\n transform var(--onyx-duration-sm) ease,\n background-color var(--onyx-duration-sm) ease;\n overflow: hidden;\n color: var(--onyx-color-text-icons-neutral-soft);\n height: var(--onyx-switch-icon-size);\n width: var(--onyx-switch-icon-size);\n\n .onyx-icon {\n --icon-size: var(--onyx-switch-icon-size);\n }\n\n .onyx-switch__spinner {\n padding: var(--onyx-1px-in-rem);\n }\n }\n }\n\n &__label,\n &__marker {\n padding: var(--onyx-switch-label-padding-vertical) 0;\n font-size: var(--onyx-font-size-md);\n line-height: var(--onyx-font-line-height-md);\n }\n\n &__label {\n color: var(--onyx-color-text-icons-neutral-intense);\n font-family: var(--onyx-font-family);\n font-style: normal;\n font-weight: var(--onyx-font-weight-regular);\n }\n\n &:hover {\n &:has(.onyx-switch__input:enabled) .onyx-switch__container {\n background-color: var(--onyx-color-base-neutral-400);\n }\n\n &:has(.onyx-switch__input:enabled:checked) .onyx-switch__container {\n background-color: var(--onyx-color-component-cta-default-hover);\n }\n\n &:has(.onyx-switch__input:user-invalid:enabled) .onyx-switch__container {\n background-color: var(--onyx-color-base-danger-300);\n }\n\n &:has(.onyx-switch__input:user-invalid:enabled:checked) .onyx-switch__container {\n background-color: var(--onyx-color-component-cta-danger-hover);\n }\n }\n\n &:has(&__input:focus-visible) {\n outline: none;\n\n &:has(.onyx-switch__input:enabled) .onyx-switch__container {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-neutral);\n }\n\n &:has(.onyx-switch__input:checked:enabled) .onyx-switch__container {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n }\n\n &:has(.onyx-switch__input:user-invalid:enabled) .onyx-switch__container {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-danger);\n }\n }\n\n &:has(.onyx-switch__input:disabled) {\n cursor: default;\n\n .onyx-switch__label {\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n }\n }\n}\n\n.onyx-switch-skeleton {\n @include layers.component() {\n display: inline-flex;\n align-items: center;\n\n &__input {\n height: var(--onyx-switch-frame-height);\n border-radius: var(--onyx-radius-full);\n width: $input-width;\n }\n\n &__label {\n height: var(--onyx-spacing-md);\n width: var(--onyx-spacing-3xl);\n }\n }\n}\n</style>\n","import type { OnyxButtonProps } from \"../OnyxButton/types.js\";\n\nexport type OnyxSystemButtonProps = Pick<\n OnyxButtonProps,\n \"disabled\" | \"autofocus\" | \"skeleton\" | \"link\"\n> & {\n /**\n * Button label / text to show. Is always required (even if `icon` is set) for screen readers / accessibility.\n */\n label: string;\n /**\n * Icon to show. Will visually hide the label if set.\n */\n icon?: string;\n /**\n * Button color.\n */\n color?: SystemButtonColor;\n};\n\nexport const SYSTEM_BUTTON_COLORS = [\"intense\", \"soft\", \"medium\"] as const;\nexport type SystemButtonColor = (typeof SYSTEM_BUTTON_COLORS)[number];\n","import type { createTabs } from \"@sit-onyx/headless\";\nimport type { InjectionKey, Ref, ShallowRef } from \"vue\";\nimport type { DensityProp } from \"../../composables/density.js\";\nimport type { SkeletonProvidedProp } from \"../../composables/useSkeletonState.js\";\nimport type { HeadlineType } from \"../OnyxHeadline/types.js\";\n\nexport type OnyxTabsProps<TValue extends PropertyKey = PropertyKey> = DensityProp &\n Partial<SkeletonProvidedProp> & {\n /**\n * Label of the tabs. Needed for accessibility / screen readers.\n */\n label: string;\n /**\n * Currently selected tab (`value` property of `OnyxTab` component).\n */\n modelValue: TValue;\n /**\n * If `true`, the tabs will be stretched to the full available width.\n */\n stretched?: boolean;\n /**\n * Tab font size. Note: This only affects the visual size of the tab font and has NO effect on the semantic meaning.\n * Size will be aligned with the corresponding `OnyxHeadline` size.\n */\n size?: TabSize;\n };\n\nexport type TabsInjectionKey<TValue extends PropertyKey = PropertyKey> = InjectionKey<{\n /**\n * Headless composable provided for child tabs for correct accessibility and behavior.\n */\n headless: ReturnType<typeof createTabs<TValue>>;\n /**\n * Ref to the parent tabs element where the child tabs should be teleported to\n * to maintain the correct HTML structure.\n */\n panel: Readonly<ShallowRef<HTMLElement | null>>;\n /**\n * Tab size passed down from the parent so it can be set once for all tabs.\n */\n size: Ref<TabSize>;\n}>;\n\n/**\n * Injection key to provide relevant context data from the tabs parent to the\n * individual child tab components.\n */\nexport const TABS_INJECTION_KEY = Symbol() as TabsInjectionKey;\n\nexport type TabSize = Extract<HeadlineType, \"h2\" | \"h3\" | \"h4\">;\n","<script lang=\"ts\" setup>\nimport { computed, inject } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport { TABS_INJECTION_KEY } from \"../OnyxTabs/types.js\";\nimport type { OnyxTabProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxTabProps>(), {\n disabled: false,\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\ndefineSlots<{\n /**\n * Tab panel / content.\n */\n default(): unknown;\n /**\n * Optional slot to override the tab content. By default, the `label` property will be displayed.\n */\n tab?(): unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\nconst tabsContext = inject(TABS_INJECTION_KEY, undefined);\nconst skeleton = useSkeletonContext(props);\nconst sizeClass = computed(() => `onyx-tab--${tabsContext?.size.value}`);\n\nconst tab = computed(() =>\n tabsContext?.headless.elements.tab.value({\n value: props.value,\n disabled: props.disabled || !!skeleton.value,\n }),\n);\n</script>\n\n<template>\n <OnyxSkeleton\n v-if=\"skeleton\"\n :class=\"['onyx-tab-skeleton', densityClass, sizeClass]\"\n v-bind=\"tab\"\n />\n <button\n v-else\n :class=\"[\n 'onyx-component',\n 'onyx-tab',\n densityClass,\n sizeClass,\n { 'onyx-tab--selected': tab?.['aria-selected'] },\n ]\"\n v-bind=\"tab\"\n type=\"button\"\n :disabled=\"props.disabled\"\n >\n <div class=\"onyx-tab__label\">\n <slot name=\"tab\">{{ props.label }}</slot>\n </div>\n </button>\n\n <!-- The <Teleport> is used because we want to offer a nice API for the user\n so they can provide both tab and the panel content in one \"OnyxTab\" component.\n However, for the accessibility pattern (see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/),\n we need a separated HTML structure where the tab and the panel must not be nested.\n The <Teleport> will allow us to achieve this by moving the panel content to the `OnyxTabs` component.\n -->\n <Teleport v-if=\"tabsContext?.panel.value\" :to=\"tabsContext?.panel.value\" defer>\n <div\n v-if=\"tab?.['aria-selected']\"\n v-bind=\"tabsContext?.headless.elements.tabpanel.value({ value: props.value })\"\n class=\"onyx-tab__panel\"\n >\n <slot></slot>\n </div>\n </Teleport>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"../../styles/mixins/sizes.scss\";\n\n.onyx-tab,\n.onyx-tab-skeleton {\n @include layers.component() {\n --onyx-tab-padding-vertical: var(--onyx-density-xs);\n --onyx-tab-highlight-gap: var(--onyx-density-3xs);\n\n @include sizes.define-headline-sizes();\n }\n}\n\n.onyx-tab {\n @include layers.component() {\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-medium);\n border-radius: var(--onyx-radius-sm);\n padding: var(--onyx-tab-padding-vertical) var(--onyx-density-md);\n font-weight: var(--onyx-font-weight-semibold);\n // tabs should have their needed width and be horizontally scrollable instead if they exceed the max parent width\n // (will be handled by the OnyxTabs component)\n min-width: max-content;\n\n // reset button styles\n border: none;\n background-color: transparent;\n\n &--selected {\n color: var(--onyx-color-text-icons-neutral-intense);\n\n .onyx-tab__label {\n &::after {\n content: \"\";\n height: 0.125rem;\n background-color: var(--onyx-color-component-cta-default);\n width: calc(100% - 2 * var(--onyx-density-xs));\n min-width: 1rem;\n\n position: absolute;\n left: 50%;\n bottom: calc(-1 * var(--onyx-tab-highlight-gap));\n transform: translateX(-50%);\n }\n }\n }\n\n &:enabled {\n cursor: pointer;\n\n &:hover,\n &:focus-visible {\n background-color: var(--onyx-color-component-focus-primary);\n }\n\n &:focus-visible {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n }\n\n &:active {\n color: var(--onyx-color-text-icons-primary-bold);\n }\n }\n\n &:disabled {\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n\n &__label {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--onyx-density-xs);\n position: relative;\n }\n\n &__panel {\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n }\n\n &-skeleton {\n width: var(--onyx-density-4xl);\n height: calc(1lh + 2 * var(--onyx-tab-padding-vertical) + var(--onyx-tab-highlight-gap));\n display: inline-block;\n vertical-align: middle;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup generic=\"TValue extends PropertyKey = PropertyKey\">\nimport { createTabs } from \"@sit-onyx/headless\";\nimport { provide, toRef, useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { provideSkeletonContext } from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { TABS_INJECTION_KEY, type OnyxTabsProps, type TabsInjectionKey } from \"./types.js\";\n\ntype Props = OnyxTabsProps<TValue>;\nconst props = withDefaults(defineProps<Props>(), {\n size: \"h2\",\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the currently active tab changes.\n */\n \"update:modelValue\": [value: TValue];\n}>();\n\nconst { densityClass } = useDensity(props);\n\nconst modelValue = useVModel<Props, \"modelValue\">({\n props,\n emit,\n key: \"modelValue\",\n});\n\nconst headless = createTabs({\n label: toRef(props, \"label\"),\n selectedTab: toRef(() => modelValue.value),\n onSelect: (tab) => (modelValue.value = tab),\n});\n\ndefineSlots<{\n /**\n * Slots for tab components. Only `OnyxTab` should be used here.\n */\n default(): unknown;\n}>();\n\nconst panel = useTemplateRef(\"panelRef\");\nprovideSkeletonContext(props);\n\nprovide(TABS_INJECTION_KEY as TabsInjectionKey<TValue>, {\n headless,\n panel,\n size: toRef(props, \"size\"),\n});\n</script>\n\n<template>\n <div\n ref=\"panelRef\"\n :class=\"[\n 'onyx-component',\n 'onyx-tabs',\n densityClass,\n { 'onyx-tabs--stretched': props.stretched },\n ]\"\n >\n <div v-bind=\"headless.elements.tablist.value\" class=\"onyx-tabs__tablist\">\n <!-- TABS -->\n <slot></slot>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n@mixin define-tablist-overflow-behavior() {\n $negative-outline-width: calc(-1 * var(--onyx-outline-width));\n overflow-x: auto;\n\n // we set the overflow to auto to allow horizontal scrolling but this will cut off the focus outline\n // therefore, we use this little trick to still show the full outline\n &:has(.onyx-tab:focus-visible) {\n padding-top: var(--onyx-outline-width);\n margin-top: $negative-outline-width;\n\n padding-bottom: var(--onyx-outline-width);\n margin-bottom: calc(var(--onyx-tabs-tablist-margin-bottom) - var(--onyx-outline-width));\n }\n\n &:has(.onyx-tab:focus-visible:first-of-type) {\n padding-left: var(--onyx-outline-width);\n margin-left: $negative-outline-width;\n }\n\n &:has(.onyx-tab:focus-visible:last-of-type) {\n padding-right: var(--onyx-outline-width);\n margin-right: $negative-outline-width;\n }\n}\n\n.onyx-tabs {\n @include layers.component() {\n --onyx-tabs-tablist-margin-bottom: var(--onyx-density-md);\n\n &__tablist {\n @include define-tablist-overflow-behavior();\n display: flex;\n align-items: center;\n gap: var(--onyx-density-2xs);\n margin-bottom: var(--onyx-tabs-tablist-margin-bottom);\n }\n\n &--stretched {\n .onyx-tabs__tablist {\n justify-content: space-between;\n }\n\n .onyx-tab,\n .onyx-tab-skeleton {\n width: 100%;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport OnyxTooltip from \"../OnyxTooltip/OnyxTooltip.vue\";\nimport type { OnyxTagProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxTagProps>(), {\n color: \"neutral\",\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\nconst { densityClass } = useDensity(props);\nconst skeleton = useSkeletonContext(props);\nconst tagClasses = computed(() => [\n \"onyx-component\",\n \"onyx-tag\",\n `onyx-tag--${props.color}`,\n { \"onyx-tag--interactive\": props.clickable },\n densityClass.value,\n]);\n</script>\n\n<template>\n <OnyxSkeleton v-if=\"skeleton\" :class=\"['onyx-tag-skeleton', densityClass]\" />\n\n <OnyxTooltip\n v-else-if=\"props.clickable\"\n :text=\"typeof props.clickable === 'object' ? props.clickable.label : props.clickable\"\n >\n <template #default=\"{ trigger }\">\n <button v-bind=\"trigger\" :class=\"tagClasses\" type=\"button\">\n <OnyxIcon v-if=\"props.icon\" :icon=\"props.icon\" inline />\n <span class=\"onyx-text onyx-truncation-ellipsis\">{{ props.label }}</span>\n <OnyxIcon\n v-if=\"typeof props.clickable === 'object' && props.clickable.actionIcon\"\n :icon=\"props.clickable.actionIcon\"\n inline\n />\n </button>\n </template>\n </OnyxTooltip>\n <div v-else :class=\"tagClasses\">\n <OnyxIcon v-if=\"props.icon\" :icon=\"props.icon\" inline />\n <span class=\"onyx-text onyx-truncation-ellipsis\">{{ props.label }}</span>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-tag {\n @include layers.component() {\n display: inline-flex;\n align-items: center;\n gap: var(--onyx-density-2xs);\n width: max-content;\n max-width: 100%;\n padding: var(--onyx-density-3xs) var(--onyx-density-xs);\n border-radius: var(--onyx-radius-xs);\n font-family: var(--onyx-font-family);\n\n color: var(--onyx-tag-color);\n border: var(--onyx-1px-in-rem) solid var(--onyx-tag-border-color);\n background-color: var(--onyx-tag-background-color);\n\n $colors: primary, neutral, danger, warning, success, info;\n\n @each $color in $colors {\n &--#{$color} {\n @if $color == \"neutral\" {\n --onyx-tag-background-color: var(--onyx-color-base-background-blank);\n } @else {\n --onyx-tag-background-color: var(--onyx-color-base-#{$color}-100);\n }\n\n @if $color == \"primary\" {\n --onyx-tag-border-color: var(--onyx-color-component-border-primary);\n } @else {\n --onyx-tag-border-color: var(--onyx-color-base-#{$color}-400);\n }\n\n @if $color == \"neutral\" {\n // neutral does not have a bold color so we need to use medium here\n --onyx-tag-color: var(--onyx-color-text-icons-neutral-intense);\n } @else {\n --onyx-tag-color: var(--onyx-color-text-icons-#{$color}-bold);\n }\n\n --onyx-tag-hover-background-color: var(--onyx-color-base-#{$color}-200);\n @if $color == \"info\" {\n --onyx-tag-focus-color: var(--onyx-color-base-info-200);\n } @else {\n --onyx-tag-focus-color: var(--onyx-color-component-focus-#{$color});\n }\n --onyx-tag-focus-background-color: var(--onyx-color-base-#{$color}-200);\n }\n }\n &--interactive {\n cursor: pointer;\n &:hover {\n background-color: var(--onyx-tag-hover-background-color);\n }\n &:focus-visible {\n background-color: var(--onyx-tag-focus-background-color);\n outline: var(--onyx-outline-width) solid var(--onyx-tag-focus-color);\n }\n }\n }\n\n &-skeleton {\n width: var(--onyx-density-2xl);\n height: calc(1.5rem + 2 * var(--onyx-density-3xs));\n display: inline-block;\n vertical-align: middle;\n }\n}\n</style>\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M11.25 16.5h1.5V18h-1.5zM12.75 6h-1.5v8.25h1.5z\\\"/><path fill-rule=\\\"evenodd\\\" d=\\\"M12 1.5a10.5 10.5 0 1 0 0 21 10.5 10.5 0 0 0 0-21m6.364 16.864A9 9 0 1 1 21 12a8.94 8.94 0 0 1-2.636 6.364\\\" clip-rule=\\\"evenodd\\\"/></svg>\"","import { computed } from \"vue\";\nimport { injectI18n } from \"../i18n/index.js\";\nimport {\n type BinaryPrefixedSize,\n convertBinaryPrefixToBytes,\n formatBytesToString,\n} from \"../utils/numbers.js\";\n\n/**\n * Small composable for formatting file sizes with i18n.\n */\nexport const useFileSize = () => {\n const { locale } = injectI18n();\n\n const formatFileSize = computed(() => {\n return (size: number | BinaryPrefixedSize) => {\n const bytes = typeof size === \"number\" ? size : convertBinaryPrefixToBytes(size);\n return formatBytesToString(locale.value, bytes);\n };\n });\n\n return {\n /**\n * Formats the given file size to a human readable string.\n */\n formatFileSize,\n };\n};\n","<script lang=\"ts\" setup>\nimport {\n iconAudio,\n iconFile,\n iconFileArchive,\n iconFileCsv,\n iconFileDoc,\n iconFileGlobe,\n iconFilePdf,\n iconFilePpt,\n iconFileRtf,\n iconFileText,\n iconFileXls,\n iconFileXlsx,\n iconPicture,\n iconVideocam,\n} from \"@sit-onyx/icons\";\nimport { computed } from \"vue\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport type { OnyxFileTypeIconProps } from \"./types.js\";\n\nconst props = defineProps<OnyxFileTypeIconProps>();\n\nconst FALLBACK_ICON = iconFile;\n\nconst icon = computed(() => {\n if (!props.type) return FALLBACK_ICON;\n if (props.type === \"application/pdf\") return iconFilePdf;\n if (props.type === \"text/csv\") return iconFileCsv;\n if (props.type.startsWith(\"audio/\")) return iconAudio;\n if (props.type.startsWith(\"video/\")) return iconVideocam;\n if (props.type.startsWith(\"image/\")) return iconPicture;\n if ([\"application/rtf\", \"text/rtf\"].includes(props.type)) return iconFileRtf;\n if (\n [\n \"application/vnd.ms-powerpoint\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n ].includes(props.type)\n ) {\n return iconFilePpt;\n }\n if (props.type === \"application/vnd.ms-excel\") return iconFileXls;\n if (props.type === \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\") {\n return iconFileXlsx;\n }\n if (\n [\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n ].includes(props.type)\n ) {\n return iconFileDoc;\n }\n if (props.type === \"text/html\") return iconFileGlobe;\n if (\n [\n \"application/zip\",\n \"application/vnd.rar\",\n \"application/x-7z-compressed\",\n \"application/x-tar\",\n \"application/gzip\",\n \"application/x-bzip2\",\n ].includes(props.type)\n ) {\n return iconFileArchive;\n }\n if (props.type.startsWith(\"text/\")) return iconFileText;\n\n return FALLBACK_ICON;\n});\n</script>\n\n<template>\n <OnyxIcon v-bind=\"props\" :icon=\"icon\" />\n</template>\n","<script lang=\"ts\" setup>\nimport circleAttention from \"@sit-onyx/icons/circle-attention.svg?raw\";\nimport { computed } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useCustomValidity } from \"../../composables/useCustomValidity.js\";\nimport { useFileSize } from \"../../composables/useFileSize.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { applyLimits } from \"../../utils/numbers.js\";\nimport { extractLinkProps } from \"../../utils/router.js\";\nimport OnyxCard from \"../OnyxCard/OnyxCard.vue\";\nimport OnyxFileTypeIcon from \"../OnyxFileTypeIcon/OnyxFileTypeIcon.vue\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxLink from \"../OnyxLink/OnyxLink.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxFileCardProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxFileCardProps>(), {\n skeleton: SKELETON_INJECTED_SYMBOL,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the validity state of the input changes.\n */\n validityChange: [validity: ValidityState];\n}>();\n\nconst slots = defineSlots<{\n /**\n * Optional actions to show on the right side of the card.\n * Recommended to use the OnyxIconButton component here.\n */\n actions?(): unknown;\n}>();\n\nconst { densityClass } = useDensity(props);\nconst { formatFileSize } = useFileSize();\nconst skeleton = useSkeletonContext(props);\n\nconst error = computed(() => (props.status?.color === \"danger\" ? props.status.text : undefined));\nconst { vCustomValidity } = useCustomValidity({ props: {}, emit, error });\n\nconst link = computed(() => {\n if (!props.link) return;\n return extractLinkProps(props.link);\n});\n</script>\n\n<template>\n <OnyxSkeleton v-if=\"skeleton\" :class=\"['onyx-file-card-skeleton', densityClass]\" />\n\n <OnyxCard v-else :class=\"['onyx-component', 'onyx-file-card', densityClass]\">\n <input\n v-custom-validity\n :aria-label=\"props.filename\"\n tabindex=\"-1\"\n class=\"onyx-file-card__show-error\"\n />\n <div class=\"onyx-file-card__content\">\n <div class=\"onyx-file-card__wrapper onyx-truncation-ellipsis\">\n <div class=\"onyx-file-card__icon\" aria-hidden=\"true\">\n <OnyxIcon v-if=\"props.icon\" :icon=\"props.icon\" />\n <OnyxIcon v-else-if=\"props.status?.color === 'danger'\" :icon=\"circleAttention\" />\n <OnyxFileTypeIcon v-else :type=\"props.type\" />\n </div>\n\n <div class=\"onyx-text--small onyx-truncation-ellipsis\">\n <div class=\"onyx-file-card__name onyx-truncation-ellipsis\">\n <OnyxLink\n v-if=\"link\"\n :href=\"link?.href\"\n :target=\"link?.target ?? '_blank'\"\n :with-external-icon=\"false\"\n class=\"onyx-truncation-ellipsis\"\n >\n {{ props.filename }}\n </OnyxLink>\n <template v-else>{{ props.filename }}</template>\n </div>\n\n <div class=\"onyx-file-card__details onyx-truncation-ellipsis\">\n <div class=\"onyx-file-card__size\">\n {{ formatFileSize(props.size) }}\n </div>\n\n <span\n v-if=\"props.status\"\n :class=\"[\n 'onyx-file-card__status',\n `onyx-file-card__status--${props.status.color}`,\n 'onyx-truncation-ellipsis',\n ]\"\n >\n {{ props.status.text }}\n </span>\n </div>\n </div>\n </div>\n\n <div v-if=\"!!slots.actions\" class=\"onyx-file-card__actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n <div v-if=\"props.status?.progress\" class=\"onyx-file-card__progress\">\n <div\n :class=\"[\n 'onyx-file-card__progress-bar',\n `onyx-file-card__progress-bar--${props.status.color}`,\n ]\"\n :style=\"{ width: applyLimits(props.status.progress, 0, 100) + '%' }\"\n ></div>\n </div>\n </OnyxCard>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"./OnyxFileCard.scss\";\n\n.onyx-file-card,\n.onyx-file-card-skeleton {\n @include layers.component() {\n // when changing these variables in the future, make sure to\n // also change them inside the OnyxFileUpload where OnyxFileCard.height() is used\n --onyx-card-padding: var(--onyx-density-xs);\n --onyx-file-card-icon-padding: var(--onyx-density-xs);\n }\n}\n\n.onyx-file-card-skeleton {\n @include layers.component() {\n width: 16rem;\n height: OnyxFileCard.height(\n $icon-padding: var(--onyx-file-card-icon-padding),\n $card-padding: var(--onyx-card-padding)\n );\n }\n}\n\n.onyx-file-card {\n @include layers.component() {\n position: relative;\n &__show-error {\n // position the input for the native error message & make it visually hidden\n bottom: var(--onyx-file-card-icon-padding);\n left: 50%;\n pointer-events: none;\n position: absolute;\n border: 0;\n height: 0;\n width: 0;\n outline: none;\n }\n &__content {\n display: flex;\n flex-direction: row;\n gap: var(--onyx-card-gap) var(--onyx-density-xl);\n justify-content: space-between;\n }\n\n &__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--onyx-radius-sm);\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-component-border-neutral);\n background-color: var(--onyx-color-base-neutral-200);\n padding: var(--onyx-file-card-icon-padding);\n }\n\n &:has(.onyx-file-card__status--danger) {\n .onyx-file-card__icon {\n background-color: var(--onyx-color-base-danger-100);\n border-color: var(--onyx-color-base-danger-300);\n color: var(--onyx-color-text-icons-danger-intense);\n }\n }\n\n &__name {\n font-weight: var(--onyx-font-weight-semibold);\n\n .onyx-link {\n display: block;\n\n &:not(:hover, :focus-visible) {\n text-decoration: none;\n color: inherit;\n }\n }\n }\n\n &__wrapper {\n display: flex;\n align-items: center;\n gap: var(--onyx-card-gap);\n }\n\n &:has(&__name .onyx-link:focus-within) {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n\n .onyx-file-card__name {\n .onyx-link {\n outline: none;\n }\n }\n }\n\n &__size {\n color: var(--onyx-color-text-icons-neutral-medium);\n }\n\n &__details {\n display: flex;\n align-items: center;\n gap: var(--onyx-density-md);\n }\n\n &__actions {\n display: flex;\n align-items: center;\n gap: var(--onyx-spacing-2xs);\n }\n\n &:hover {\n background-color: var(--onyx-color-base-background-tinted);\n }\n\n $colors: primary, neutral, danger, warning, success, info;\n &__status {\n @each $color in $colors {\n &--#{$color} {\n @if ($color == \"neutral\") {\n color: var(--onyx-color-text-icons-neutral-medium);\n } @else {\n color: var(--onyx-color-text-icons-#{$color}-intense);\n }\n }\n }\n }\n\n &:has(.onyx-file-card__progress) {\n padding-bottom: var(--onyx-density-md);\n }\n &__progress {\n height: calc(2 * var(--onyx-1px-in-rem));\n width: calc(100% + 2 * var(--onyx-file-card-icon-padding));\n transform: translateX(calc(-1 * var(--onyx-file-card-icon-padding)));\n background: var(--onyx-color-base-neutral-200);\n &-bar {\n height: 100%;\n transition: width 0.1s ease;\n @each $color in $colors {\n &--#{$color} {\n @if ($color == \"neutral\") {\n background-color: var(--onyx-color-base-neutral-400);\n } @else {\n background-color: var(--onyx-color-text-icons-#{$color}-intense);\n }\n }\n }\n }\n }\n }\n}\n</style>\n","import type { MediaType } from \"../OnyxFileUpload/types.js\";\nimport type { OnyxIconProps } from \"../OnyxIcon/types.js\";\n\nexport type OnyxFileTypeIconProps = Omit<OnyxIconProps, \"icon\"> & {\n /**\n * Media type of the file, e.g. \"application/pdf\".\n * If unset or an unsupported media type is provided, a default icon will be shown.\n */\n type?: MediaType;\n};\n\n/**\n * A list of media files that have a dedicated icon for the OnyxFileTypeIcon component.\n */\nexport const SUPPORTED_FILE_TYPE_ICON_MEDIA_TYPES = [\n \"application/octet-stream\",\n \"application/pdf\",\n \"text/csv\",\n \"audio/mp3\",\n \"video/mp4\",\n \"image/png\",\n \"application/rtf\",\n \"application/vnd.ms-powerpoint\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \"application/vnd.ms-excel\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"text/html\",\n \"application/zip\",\n \"application/vnd.rar\",\n \"application/x-7z-compressed\",\n \"application/x-tar\",\n \"application/gzip\",\n \"application/x-bzip2\",\n] satisfies MediaType[];\n","import type { FileType } from \"../components/OnyxFileUpload/types.js\";\n\n/**\n * Validates the file type against the given accept list.\n * Only performs a basic check based on the file extensions or media type.\n *\n * @param file The file to validate.\n * @param accept The accepted file types as array.\n * @returns `true` if the file type is accepted, `false` otherwise.\n */\nexport const validateFileType = (\n { name: _name, type: _type }: File,\n accept?: FileType[],\n): boolean => {\n // While \"*/*\" is not a valid value for the `accept` attribute, we still handle it here, just to be sure.\n if (!accept || accept.length === 0 || accept.some((a: string) => a.trim() === \"*/*\")) {\n return true;\n }\n const name = _name.trim().toLowerCase();\n const type = _type.trim().toLowerCase();\n\n return accept.some((_accept) => {\n const accept = _accept.trim().toLowerCase();\n\n // check match for extension, e.g. \".jpg\"\n if (accept.startsWith(\".\")) {\n return name.endsWith(accept);\n }\n\n // check match for media type range, e.g. \"image/*\"\n const [acceptedType, acceptedSubType] = accept.split(\"/\");\n if (acceptedSubType === \"*\") {\n return type.startsWith(`${acceptedType}/`);\n }\n\n // check match for exact media type, e.g. \"image/jpeg\"\n return accept === type;\n });\n};\n","<template>\n <svg\n class=\"onyx-component onyx-error-svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 1119.60911 699\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n aria-hidden=\"true\"\n >\n <circle cx=\"292.60911\" cy=\"213\" r=\"213\" fill=\"var(--onyx-error-svg-background-color-circle)\" />\n <path\n d=\"M31.39089,151.64237c0,77.49789,48.6181,140.20819,108.70073,140.20819\"\n transform=\"translate(-31.39089 -100.5)\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <path\n d=\"M140.09162,291.85056c0-78.36865,54.255-141.78356,121.30372-141.78356\"\n transform=\"translate(-31.39089 -100.5)\"\n fill=\"var(--onyx-error-svg-background-color-primary)\"\n />\n <path\n d=\"M70.77521,158.66768c0,73.61476,31.00285,133.18288,69.31641,133.18288\"\n transform=\"translate(-31.39089 -100.5)\"\n fill=\"var(--onyx-error-svg-background-color-primary)\"\n />\n <path\n d=\"M140.09162,291.85056c0-100.13772,62.7103-181.16788,140.20819-181.16788\"\n transform=\"translate(-31.39089 -100.5)\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <ellipse\n cx=\"198.60911\"\n cy=\"424.5\"\n rx=\"187\"\n ry=\"25.43993\"\n fill=\"var(--onyx-error-svg-background-color-accent)\"\n />\n <ellipse cx=\"198.60911\" cy=\"424.5\" rx=\"157\" ry=\"21.35866\" opacity=\"0.1\" />\n <ellipse\n cx=\"836.60911\"\n cy=\"660.5\"\n rx=\"283\"\n ry=\"38.5\"\n fill=\"var(--onyx-error-svg-background-color-accent)\"\n />\n <ellipse\n cx=\"310.60911\"\n cy=\"645.5\"\n rx=\"170\"\n ry=\"23.12721\"\n fill=\"var(--onyx-error-svg-background-color-accent)\"\n />\n <path\n d=\"M494,726.5c90,23,263-30,282-90\"\n transform=\"translate(-31.39089 -100.5)\"\n fill=\"none\"\n stroke=\"var(--onyx-error-svg-background-color-cable)\"\n stroke-miterlimit=\"10\"\n stroke-width=\"2\"\n />\n <path\n d=\"M341,359.5s130-36,138,80-107,149-17,172\"\n transform=\"translate(-31.39089 -100.5)\"\n fill=\"none\"\n stroke=\"var(--onyx-error-svg-background-color-cable)\"\n stroke-miterlimit=\"10\"\n stroke-width=\"2\"\n />\n <path\n d=\"M215.40233,637.78332s39.0723-10.82,41.47675,24.04449-32.15951,44.78287-5.10946,51.69566\"\n transform=\"translate(-31.39089 -100.5)\"\n fill=\"none\"\n stroke=\"var(--onyx-error-svg-background-color-cable)\"\n stroke-miterlimit=\"10\"\n stroke-width=\"2\"\n />\n <path\n d=\"M810.09554,663.73988,802.218,714.03505s-38.78182,20.60284-11.51335,21.20881,155.73324,0,155.73324,0,24.84461,0-14.54318-21.81478l-7.87756-52.719Z\"\n transform=\"translate(-31.39089 -100.5)\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <path\n d=\"M785.21906,734.69812c6.193-5.51039,16.9989-11.252,16.9989-11.252l7.87756-50.2952,113.9216.10717,7.87756,49.582c9.185,5.08711,14.8749,8.987,18.20362,11.97818,5.05882-1.15422,10.58716-5.44353-18.20362-21.38921l-7.87756-52.719-113.9216,3.02983L802.218,714.03506S769.62985,731.34968,785.21906,734.69812Z\"\n transform=\"translate(-31.39089 -100.5)\"\n opacity=\"0.1\"\n />\n <rect\n x=\"578.43291\"\n y=\"212.68859\"\n width=\"513.25314\"\n height=\"357.51989\"\n rx=\"18.04568\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <rect\n x=\"595.70294\"\n y=\"231.77652\"\n width=\"478.71308\"\n height=\"267.83694\"\n fill=\"var(--onyx-error-svg-background-color-accent)\"\n />\n <circle\n cx=\"835.05948\"\n cy=\"223.29299\"\n r=\"3.02983\"\n fill=\"var(--onyx-error-svg-background-color-device-controls)\"\n />\n <path\n d=\"M1123.07694,621.32226V652.6628a18.04341,18.04341,0,0,1-18.04568,18.04568H627.86949A18.04341,18.04341,0,0,1,609.8238,652.6628V621.32226Z\"\n transform=\"translate(-31.39089 -100.5)\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <polygon\n points=\"968.978 667.466 968.978 673.526 642.968 673.526 642.968 668.678 643.417 667.466 651.452 645.651 962.312 645.651 968.978 667.466\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <path\n d=\"M1125.828,762.03359c-.59383,2.539-2.83591,5.21743-7.90178,7.75032-18.179,9.08949-55.1429-2.42386-55.1429-2.42386s-28.4804-4.84773-28.4804-17.573a22.72457,22.72457,0,0,1,2.49658-1.48459c7.64294-4.04351,32.98449-14.02122,77.9177.42248a18.73921,18.73921,0,0,1,8.54106,5.59715C1125.07908,756.45353,1126.50669,759.15715,1125.828,762.03359Z\"\n transform=\"translate(-31.39089 -100.5)\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <path\n d=\"M1125.828,762.03359c-22.251,8.526-42.0843,9.1622-62.43871-4.975-10.26507-7.12617-19.59089-8.88955-26.58979-8.75618,7.64294-4.04351,32.98449-14.02122,77.9177.42248a18.73921,18.73921,0,0,1,8.54106,5.59715C1125.07908,756.45353,1126.50669,759.15715,1125.828,762.03359Z\"\n transform=\"translate(-31.39089 -100.5)\"\n opacity=\"0.1\"\n />\n <ellipse\n cx=\"1066.53846\"\n cy=\"654.13477\"\n rx=\"7.87756\"\n ry=\"2.42386\"\n fill=\"var(--onyx-error-svg-background-color-device-controls)\"\n />\n <circle\n cx=\"835.05948\"\n cy=\"545.66686\"\n r=\"11.51335\"\n fill=\"var(--onyx-error-svg-background-color-device-controls)\"\n />\n <polygon\n points=\"968.978 667.466 968.978 673.526 642.968 673.526 642.968 668.678 643.417 667.466 968.978 667.466\"\n opacity=\"0.1\"\n />\n <rect\n x=\"108.60911\"\n y=\"159\"\n width=\"208\"\n height=\"242\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <rect\n x=\"87.60911\"\n y=\"135\"\n width=\"250\"\n height=\"86\"\n fill=\"var(--onyx-error-svg-background-color-accent)\"\n />\n <rect\n x=\"87.60911\"\n y=\"237\"\n width=\"250\"\n height=\"86\"\n fill=\"var(--onyx-error-svg-background-color-accent)\"\n />\n <rect\n x=\"87.60911\"\n y=\"339\"\n width=\"250\"\n height=\"86\"\n fill=\"var(--onyx-error-svg-background-color-accent)\"\n />\n <rect\n x=\"271.60911\"\n y=\"150\"\n width=\"16\"\n height=\"16\"\n fill=\"var(--onyx-error-svg-background-color-primary)\"\n opacity=\"0.4\"\n />\n <rect\n x=\"294.60911\"\n y=\"150\"\n width=\"16\"\n height=\"16\"\n fill=\"var(--onyx-error-svg-background-color-primary)\"\n opacity=\"0.8\"\n />\n <rect\n x=\"317.60911\"\n y=\"150\"\n width=\"16\"\n height=\"16\"\n fill=\"var(--onyx-error-svg-background-color-primary)\"\n />\n <rect\n x=\"271.60911\"\n y=\"251\"\n width=\"16\"\n height=\"16\"\n fill=\"var(--onyx-error-svg-background-color-primary)\"\n opacity=\"0.4\"\n />\n <rect\n x=\"294.60911\"\n y=\"251\"\n width=\"16\"\n height=\"16\"\n fill=\"var(--onyx-error-svg-background-color-primary)\"\n opacity=\"0.8\"\n />\n <rect\n x=\"317.60911\"\n y=\"251\"\n width=\"16\"\n height=\"16\"\n fill=\"var(--onyx-error-svg-background-color-primary)\"\n />\n <rect\n x=\"271.60911\"\n y=\"352\"\n width=\"16\"\n height=\"16\"\n fill=\"var(--onyx-error-svg-background-color-primary)\"\n opacity=\"0.4\"\n />\n <rect\n x=\"294.60911\"\n y=\"352\"\n width=\"16\"\n height=\"16\"\n fill=\"var(--onyx-error-svg-background-color-primary)\"\n opacity=\"0.8\"\n />\n <rect\n x=\"317.60911\"\n y=\"352\"\n width=\"16\"\n height=\"16\"\n fill=\"var(--onyx-error-svg-background-color-primary)\"\n />\n <circle cx=\"316.60911\" cy=\"538\" r=\"79\" fill=\"var(--onyx-error-svg-background-color)\" />\n <rect\n x=\"280.60911\"\n y=\"600\"\n width=\"24\"\n height=\"43\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <rect\n x=\"328.60911\"\n y=\"600\"\n width=\"24\"\n height=\"43\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <ellipse\n cx=\"300.60911\"\n cy=\"643.5\"\n rx=\"20\"\n ry=\"7.5\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <ellipse\n cx=\"348.60911\"\n cy=\"642.5\"\n rx=\"20\"\n ry=\"7.5\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <circle cx=\"318.60911\" cy=\"518\" r=\"27\" fill=\"var(--onyx-error-svg-background-color-face)\" />\n <circle cx=\"318.60911\" cy=\"518\" r=\"9\" fill=\"var(--onyx-error-svg-background-color-accent)\" />\n <path\n d=\"M271.36733,565.03228c-6.37889-28.56758,14.01185-57.43392,45.544-64.47477s62.2651,10.41,68.644,38.9776-14.51861,39.10379-46.05075,46.14464S277.74622,593.59986,271.36733,565.03228Z\"\n transform=\"translate(-31.39089 -100.5)\"\n fill=\"var(--onyx-error-svg-background-color-primary)\"\n />\n <ellipse\n cx=\"417.21511\"\n cy=\"611.34365\"\n rx=\"39.5\"\n ry=\"12.40027\"\n transform=\"translate(-238.28665 112.98044) rotate(-23.17116)\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <ellipse\n cx=\"269.21511\"\n cy=\"664.34365\"\n rx=\"39.5\"\n ry=\"12.40027\"\n transform=\"translate(-271.07969 59.02084) rotate(-23.17116)\"\n fill=\"var(--onyx-error-svg-background-color)\"\n />\n <path\n d=\"M394,661.5c0,7.732-19.90861,23-42,23s-43-14.268-43-22,20.90861-6,43-6S394,653.768,394,661.5Z\"\n transform=\"translate(-31.39089 -100.5)\"\n fill=\"var(--onyx-error-svg-background-color-face)\"\n />\n </svg>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../styles/mixins/layers.scss\";\n\n.onyx-error-svg {\n @include layers.component() {\n --onyx-error-svg-background-color: var(--onyx-color-neutral-steel-900);\n --onyx-error-svg-background-color-accent: var(--onyx-color-neutral-steel-800);\n --onyx-error-svg-background-color-device-controls: var(--onyx-color-neutral-steel-200);\n --onyx-error-svg-background-color-cable: var(--onyx-color-neutral-steel-700);\n --onyx-error-svg-background-color-circle: var(--onyx-color-base-neutral-200);\n --onyx-error-svg-background-color-primary: var(--onyx-color-base-primary-500);\n --onyx-error-svg-background-color-face: #fff;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { OnyxFileUploadSVGProps } from \"./types.js\";\n\nconst props = defineProps<OnyxFileUploadSVGProps>();\n</script>\n\n<template>\n <svg\n class=\"onyx-component onyx-file-upload-svg\"\n :class=\"{\n 'onyx-file-upload-svg--disabled': props.disabled,\n 'onyx-file-upload-svg--active': props.active,\n }\"\n width=\"50\"\n height=\"64\"\n viewBox=\"0 0 50 64\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M8 0.5H34.793L43.5 9.20703V50C43.5 54.1421 40.1421 57.5 36 57.5H8C3.85786 57.5 0.5 54.1421 0.5 50V8C0.500001 3.85786 3.85787 0.5 8 0.5Z\"\n fill=\"var(--onyx-file-upload-svg-background-color)\"\n stroke=\"var(--onyx-file-upload-svg-border-color)\"\n />\n <path\n d=\"M34 0L39 5L44 10H38C35.7909 10 34 8.20914 34 6V0Z\"\n fill=\"var(--onyx-file-upload-svg-border-color)\"\n />\n <path\n d=\"M18 48C18 39.1634 25.1634 32 34 32C42.8366 32 50 39.1634 50 48C50 56.8366 42.8366 64 34 64C25.1634 64 18 56.8366 18 48Z\"\n fill=\"var(--onyx-file-upload-svg-background-color-bubble)\"\n />\n <path\n d=\"M39.2005 42.2123H39.1668C38.5307 41.0817 37.5611 40.175 36.3905 39.616C35.2198 39.0571 33.9051 38.8731 32.626 39.0893C31.3469 39.3056 30.1657 39.9114 29.2438 40.824C28.3218 41.7367 27.7041 42.9117 27.475 44.1886C26.316 44.3486 25.2615 44.9441 24.5258 45.8538C23.7901 46.7636 23.4284 47.9194 23.5144 49.0862C23.6004 50.2531 24.1275 51.3434 24.9886 52.1355C25.8496 52.9276 26.9801 53.3621 28.15 53.3506H33.25V57.0001H34.75V53.3506H39.2005C40.6409 53.3123 42.0073 52.7047 43.0006 51.6609C43.9939 50.6172 44.5331 49.2223 44.5 47.7818C44.525 47.0663 44.4071 46.353 44.153 45.6837C43.8989 45.0143 43.5138 44.4024 43.0203 43.8838C42.5268 43.3651 41.9347 42.9501 41.2788 42.6631C40.6229 42.3761 39.9164 42.2229 39.2005 42.2123ZM39.2005 51.8506H34.75V47.4631L36.7405 49.3006L37.7583 48.1988L34 44.7293L30.241 48.1988L31.2588 49.3006L33.25 47.4631V51.8506H28.15C27.7382 51.857 27.3291 51.7814 26.9468 51.6282C26.5644 51.475 26.2163 51.2473 25.9228 50.9583C25.6293 50.6693 25.3962 50.3248 25.2371 49.9449C25.0779 49.5649 24.996 49.1571 24.996 48.7452C24.996 48.3333 25.0779 47.9255 25.2371 47.5455C25.3962 47.1656 25.6293 46.8211 25.9228 46.5321C26.2163 46.2431 26.5644 46.0154 26.9468 45.8622C27.3291 45.709 27.7382 45.6334 28.15 45.6398H28.8573L28.8985 44.9341C28.9785 43.8759 29.4074 42.8742 30.118 42.086C30.8286 41.2978 31.7807 40.7678 32.825 40.5791C33.8693 40.3903 34.9467 40.5535 35.8882 41.0431C36.8298 41.5326 37.5822 42.3208 38.0275 43.2841L38.2353 43.7386L38.7348 43.7221C38.7865 43.7221 39.1465 43.7138 39.1998 43.7138C39.7178 43.7266 40.2281 43.8425 40.7008 44.0547C41.1735 44.2669 41.5992 44.5712 41.953 44.9498C42.3068 45.3284 42.5817 45.7737 42.7614 46.2597C42.9412 46.7457 43.0223 47.2626 43 47.7803C43.0338 48.8234 42.653 49.8373 41.9409 50.6002C41.2288 51.363 40.2434 51.8126 39.2005 51.8506Z\"\n fill=\"var(--onyx-file-upload-svg-color-bubble)\"\n />\n </svg>\n</template>\n\n<style lang=\"scss\">\n@use \"../../../styles/mixins/layers.scss\";\n\n.onyx-file-upload-svg {\n @include layers.component() {\n --onyx-file-upload-svg-background-color-bubble: var(--onyx-color-base-neutral-800);\n --onyx-file-upload-svg-color-bubble: var(--onyx-color-text-icons-neutral-inverted);\n --onyx-file-upload-svg-background-color: var(--onyx-color-base-neutral-200);\n --onyx-file-upload-svg-border-color: var(--onyx-color-base-neutral-500);\n\n &--active {\n --onyx-file-upload-svg-background-color: var(--onyx-color-base-primary-200);\n --onyx-file-upload-svg-border-color: var(--onyx-color-base-primary-600);\n --onyx-file-upload-svg-background-color-bubble: var(--onyx-color-base-primary-800);\n }\n\n &--disabled {\n --onyx-file-upload-svg-background-color-bubble: var(--onyx-color-base-neutral-300);\n --onyx-file-upload-svg-color-bubble: var(--onyx-color-text-icons-neutral-inverted);\n --onyx-file-upload-svg-background-color: var(--onyx-color-base-neutral-100);\n --onyx-file-upload-svg-border-color: var(--onyx-color-base-neutral-200);\n }\n }\n}\n</style>\n","<script\n lang=\"ts\"\n setup\n generic=\"\n TMultiple extends boolean = false,\n TModelValue extends TMultiple extends true ? File[] : Nullable<File> = TMultiple extends true\n ? File[]\n : Nullable<File>\n \"\n>\nimport { iconCloudArrowUp, iconTrash } from \"@sit-onyx/icons\";\nimport { computed, ref, useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useFileSize } from \"../../composables/useFileSize.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n type SkeletonInjected,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport type { Nullable } from \"../../types/utils.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport { userConsole } from \"../../utils/console.js\";\nimport { validateFileType } from \"../../utils/file.js\";\nimport { convertBinaryPrefixToBytes } from \"../../utils/numbers.js\";\nimport { asArray } from \"../../utils/objects.js\";\nimport { OnyxFileUploadSVG } from \"../illustrations/index.js\";\nimport OnyxFileCard from \"../OnyxFileCard/OnyxFileCard.vue\";\nimport type { FileCardStatus, OnyxFileCardProps } from \"../OnyxFileCard/types.js\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxIcon from \"../OnyxIcon/OnyxIcon.vue\";\nimport OnyxIconButton from \"../OnyxIconButton/OnyxIconButton.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport OnyxSystemButton from \"../OnyxSystemButton/OnyxSystemButton.vue\";\nimport type { MediaType, OnyxFileUploadProps } from \"./types.js\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props: OnyxFileUploadProps<TMultiple> = withDefaults(\n defineProps<OnyxFileUploadProps<TMultiple>>(),\n {\n accept: () => [],\n size: \"large\",\n listType: \"list\",\n disabled: FORM_INJECTED_SYMBOL,\n skeleton: SKELETON_INJECTED_SYMBOL,\n },\n);\n\nconst emit = defineEmits<{\n \"update:modelValue\": [value: TModelValue];\n}>();\n\ndefineSlots<{\n /**\n * Optional slot to override the displayed file card for each file.\n *\n * @param file The current file being rendered\n * @param props File card props that would originally be passed to the OnyxFileCard if this slot would not be used\n */\n default?(props: { file: File; props: OnyxFileCardProps }): unknown;\n}>();\n\nconst skeleton = useSkeletonContext(props as { skeleton: SkeletonInjected });\nconst { disabled } = useFormContext(props);\n\nconst { t } = injectI18n();\nconst { densityClass } = useDensity(props);\nconst { restAttrs, rootAttrs } = useRootAttrs();\nconst { formatFileSize } = useFileSize();\n\nconst modelValue = useVModel<typeof props, \"modelValue\", TModelValue>({\n props,\n emit,\n key: \"modelValue\",\n});\n\nconst input = useTemplateRef<HTMLInputElement>(\"inputRef\");\n\nconst currentFiles = computed<File[]>(() => {\n const files = asArray<Nullable<File>>(modelValue.value ?? []);\n return files.filter((file) => file != null);\n});\n\nconst hideFiles = ref(false);\n\nconst fileStatuses = computed((): (FileCardStatus | undefined)[] => {\n return currentFiles.value.map((file, index) => {\n if (props.accept && !validateFileType(file, props.accept)) {\n return {\n text: t.value(\"fileUpload.status.fileTypeError\", {\n extension: file.name.split(\".\").at(-1),\n }),\n color: \"danger\",\n };\n }\n if (props.maxSize && file.size > convertBinaryPrefixToBytes(props.maxSize)) {\n return {\n text: t.value(\"fileUpload.status.fileSizeError\", {\n size: formatFileSize.value(props.maxSize),\n }),\n color: \"danger\",\n };\n }\n const totalSize = currentFiles.value.slice(0, index + 1).reduce((sum, f) => sum + f.size, 0);\n if (props.maxTotalSize && totalSize > convertBinaryPrefixToBytes(props.maxTotalSize)) {\n return {\n text: t.value(\"fileUpload.status.maxFileSizeError\", {\n size: formatFileSize.value(props.maxTotalSize),\n }),\n color: \"danger\",\n };\n }\n if (props.multiple && props.maxCount && index >= props.maxCount) {\n return {\n text: t.value(\"fileUpload.status.maxCountError\", { count: props.maxCount }),\n color: \"danger\",\n };\n }\n });\n});\n\nconst currentFileProps = computed(() => {\n return currentFiles.value.map((file, index) => ({\n file,\n props: {\n filename: file.name,\n size: file.size,\n type: file.type as MediaType,\n link: createFileURL(file),\n status: fileStatuses.value[index],\n } satisfies OnyxFileCardProps,\n }));\n});\n\n/**\n * Sets the currently selected files by considering all relevant props (e.g. replace etc.).\n */\nconst setFiles = (files: File[]) => {\n let newFiles: File | File[] | undefined;\n\n if (!props.multiple) {\n newFiles = files[0];\n } else if (props.replace) {\n newFiles = files.slice();\n } else {\n newFiles = currentFiles.value.concat(files);\n }\n\n modelValue.value = newFiles as TModelValue;\n};\n\nconst removeFile = (fileToRemove: File) => {\n if (props.multiple) {\n const newFiles = currentFiles.value.filter((file) => file !== fileToRemove);\n modelValue.value = newFiles as TModelValue;\n } else {\n modelValue.value = undefined as TModelValue;\n }\n};\n\nconst handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const files = Array.from(target.files ?? []);\n setFiles(files);\n target.value = \"\";\n};\n\nconst showDetails = computed(() => {\n return (\n props.size === \"large\" ||\n ((props.maxSize || props.maxTotalSize || props.maxCount || props.accept?.length) &&\n props.size !== \"small\")\n );\n});\n\nconst isDragging = ref(false);\n\nconst handleDrop = (event: DragEvent) => {\n if (disabled.value) return;\n isDragging.value = false;\n\n const files = Array.from(event.dataTransfer?.files ?? []);\n setFiles(files);\n};\n\nconst handleDragEnter = () => {\n if (disabled.value) return;\n isDragging.value = true;\n};\n\nconst createFileURL = (file: File) => {\n try {\n return URL.createObjectURL(file);\n } catch (error) {\n userConsole?.error(\"Error while creating URL for file\", file, error);\n return undefined;\n }\n};\n\nconst shouldShowFileList = computed(() => {\n if (props.listType === \"hidden\" || !currentFiles.value.length) return false;\n if (props.listType === \"button\") return !hideFiles.value;\n return true;\n});\n</script>\n\n<template>\n <OnyxSkeleton\n v-if=\"skeleton\"\n :class=\"['onyx-file-upload-skeleton', `onyx-file-upload-skeleton--${props.size}`, densityClass]\"\n />\n <div\n v-else\n :class=\"['onyx-component', 'onyx-file-upload-wrapper', densityClass]\"\n v-bind=\"rootAttrs\"\n >\n <button\n type=\"button\"\n :class=\"[\n 'onyx-file-upload',\n `onyx-file-upload--${props.size}`,\n { 'onyx-file-upload--dragging': isDragging },\n ]\"\n :disabled=\"disabled\"\n @dragenter=\"handleDragEnter\"\n @dragleave=\"isDragging = false\"\n @dragover.prevent\n @drop.prevent=\"handleDrop\"\n @click=\"input?.click()\"\n >\n <OnyxFileUploadSVG v-if=\"props.size === 'large'\" :disabled=\"disabled\" :active=\"isDragging\" />\n <div v-else class=\"onyx-file-upload__icon\">\n <OnyxIcon :icon=\"iconCloudArrowUp\" />\n <span> {{ t(\"fileUpload.select\") }}</span>\n </div>\n\n <div v-if=\"showDetails\" class=\"onyx-file-upload__content\">\n <p v-if=\"props.size === 'large'\" class=\"onyx-file-upload__label onyx-text\">\n <u>{{ t(\"fileUpload.clickToUpload\") }}</u> {{ t(\"fileUpload.orDragAndDrop\") }}.\n </p>\n\n <p\n v-if=\"props.maxSize || props.maxTotalSize\"\n class=\"onyx-file-upload__text onyx-text--small\"\n >\n {{ t(\"fileUpload.maxFileSize\") }}:\n\n <template v-if=\"props.maxSize && props.maxTotalSize\">\n {{ formatFileSize(props.maxSize) }} ({{ formatFileSize(props.maxTotalSize) }}\n {{ t(\"fileUpload.inTotal\") }})\n </template>\n\n <template v-else-if=\"props.maxSize\"> {{ formatFileSize(props.maxSize) }} </template>\n <template v-else-if=\"props.maxTotalSize\">\n {{ formatFileSize(props.maxTotalSize) }} {{ t(\"fileUpload.inTotal\") }}\n </template>\n </p>\n\n <p v-if=\"props.multiple && props.maxCount\" class=\"onyx-file-upload__text onyx-text--small\">\n {{ t(\"fileUpload.maxFileCount\", { n: props.maxCount }) }}\n </p>\n\n <p v-if=\"props.accept?.length\" class=\"onyx-file-upload__text onyx-text--small\">\n {{ t(\"fileUpload.allowedFileTypes\", { types: props.accept.join(\", \") }) }}\n </p>\n </div>\n </button>\n\n <input\n ref=\"inputRef\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n class=\"onyx-file-upload__input\"\n type=\"file\"\n :accept=\"props.accept?.length ? props.accept.join(',') : undefined\"\n :multiple=\"props.multiple\"\n :disabled=\"disabled\"\n :name=\"props.name\"\n v-bind=\"restAttrs\"\n @change=\"handleChange\"\n />\n\n <OnyxSystemButton\n v-if=\"props.listType === 'button' && currentFiles.length\"\n class=\"onyx-file-upload__list-button\"\n :label=\"hideFiles ? t('fileUpload.revealFilesButton') : t('fileUpload.hideFilesButton')\"\n @click=\"hideFiles = !hideFiles\"\n />\n\n <div\n v-if=\"shouldShowFileList\"\n :class=\"[\n 'onyx-file-upload__list',\n { 'onyx-file-upload__list--max-height': props.listType === 'maxHeight' },\n ]\"\n >\n <template v-for=\"fileProps in currentFileProps\" :key=\"fileProps.props.filename\">\n <slot :file=\"fileProps.file\" :props=\"fileProps.props\">\n <OnyxFileCard v-bind=\"fileProps.props\">\n <template #actions>\n <OnyxIconButton\n color=\"danger\"\n :icon=\"iconTrash\"\n :label=\"t('fileUpload.removeFile')\"\n :disabled=\"disabled\"\n @click=\"removeFile(fileProps.file)\"\n />\n </template>\n </OnyxFileCard>\n </slot>\n </template>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"../../styles/mixins/input.scss\";\n@use \"../OnyxFileCard/OnyxFileCard.scss\";\n\n@include layers.component() {\n .onyx-file-upload-wrapper {\n --onyx-file-upload-max-files: 3;\n display: flex;\n flex-direction: column;\n gap: var(--onyx-density-xs);\n }\n\n .onyx-file-upload {\n all: unset;\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n border-radius: var(--onyx-radius-md);\n border: var(--onyx-1px-in-rem) dashed var(--onyx-color-component-border-neutral);\n background-color: var(--onyx-color-base-background-blank);\n padding: var(--onyx-density-xl);\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n max-width: 100%;\n text-align: center;\n\n &--medium {\n padding: var(--onyx-density-xs);\n gap: var(--onyx-density-xs);\n }\n &--small {\n padding: var(--onyx-density-sm);\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-base-neutral-200);\n }\n\n &__icon {\n display: flex;\n gap: var(--onyx-density-2xs);\n color: var(--onyx-color-text-icons-neutral-intense);\n font-family: var(--onyx-font-family-h3);\n font-size: var(--onyx-font-size-md);\n font-weight: var(--onyx-font-weight-semibold);\n line-height: var(--onyx-font-line-height-md);\n }\n\n &--dragging {\n border-color: var(--onyx-color-component-border-primary-hover);\n background-color: var(--onyx-color-base-primary-100);\n\n * {\n // needed to not emit \"dragleave\" event when hovering over children (e.g. text)\n pointer-events: none;\n }\n\n .onyx-file-upload__label {\n color: var(--onyx-color-text-icons-primary-intense);\n }\n }\n\n .onyx-file-upload-svg {\n margin-bottom: var(--onyx-density-md);\n }\n\n &__content {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: var(--onyx-density-2xs);\n }\n\n &__input {\n display: none;\n }\n\n &:enabled {\n cursor: pointer;\n\n &:hover,\n &:focus-within {\n border-color: var(--onyx-color-component-border-primary-hover);\n .onyx-file-upload__label {\n color: var(--onyx-color-text-icons-primary-intense);\n }\n }\n\n &:hover {\n > .onyx-file-upload-svg {\n --onyx-file-upload-svg-background-color-bubble: var(--onyx-color-base-primary-800);\n }\n }\n\n &:focus-within {\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-primary);\n }\n\n .onyx-file-upload__text {\n color: var(--onyx-color-text-icons-neutral-medium);\n }\n\n &.onyx-file-upload--small {\n padding: var(--onyx-density-sm);\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-base-neutral-200);\n &:hover {\n background-color: var(--onyx-background-color-hover);\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-base-neutral-400);\n }\n &:focus-within {\n border: var(--onyx-1px-in-rem) solid var(--onyx-color-base-neutral-400);\n outline: var(--onyx-outline-width) solid var(--onyx-color-component-focus-neutral);\n }\n\n &.onyx-file-upload--dragging {\n border: var(--onyx-1px-in-rem) dashed var(--onyx-color-component-border-primary-hover);\n .onyx-file-upload__icon {\n color: var(--onyx-color-text-icons-primary-bold);\n }\n }\n }\n }\n\n &:disabled {\n background-color: var(--onyx-color-base-background-tinted) !important;\n color: var(--onyx-color-text-icons-neutral-soft);\n .onyx-file-upload__icon {\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n }\n\n &__list {\n --onyx-file-upload-list-gap: var(--onyx-density-2xs);\n display: flex;\n flex-direction: column;\n gap: var(--onyx-file-upload-list-gap);\n\n &--max-height {\n overflow-y: scroll;\n\n // the variable values here are given by the OnyxFileCard component\n $file-card-height: OnyxFileCard.height(\n $icon-padding: var(--onyx-density-xs),\n $card-padding: var(--onyx-density-xs),\n );\n\n max-height: calc(\n (var(--onyx-file-upload-max-files) + 0.5) * $file-card-height +\n (var(--onyx-file-upload-max-files)) * var(--onyx-file-upload-list-gap)\n );\n }\n }\n\n &__list-button {\n margin-inline: auto;\n }\n }\n\n .onyx-file-upload-skeleton {\n height: 7.5rem;\n width: 20rem;\n box-sizing: initial;\n padding: var(--onyx-density-xl);\n\n &--medium {\n padding: var(--onyx-density-xs);\n height: 3.125rem;\n width: 16rem;\n }\n\n &--small {\n padding: var(--onyx-density-sm);\n height: 1.5rem;\n width: 6rem;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { iconXSmall } from \"@sit-onyx/icons\";\nimport { computed } from \"vue\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { injectI18n } from \"../../i18n/index.js\";\nimport OnyxTag from \"../OnyxTag/OnyxTag.vue\";\nimport type { OnyxFilterTagProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxFilterTagProps>(), {\n skeleton: SKELETON_INJECTED_SYMBOL,\n active: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emitted when the active state changes. */\n \"update:active\": [value: boolean];\n}>();\n\nconst { t } = injectI18n();\n\nconst active = useVModel({\n props,\n emit,\n key: \"active\",\n default: false,\n});\nconst tooltipLabel = computed(() =>\n active.value\n ? t.value(\"filterTag.clickToRemove\", { label: props.label })\n : t.value(\"filterTag.clickToAdd\", { label: props.label }),\n);\nconst skeleton = useSkeletonContext(props);\n</script>\n\n<template>\n <OnyxTag\n v-bind=\"props\"\n :clickable=\"{ label: tooltipLabel, actionIcon: active ? iconXSmall : undefined }\"\n class=\"onyx-filter-tag\"\n :skeleton=\"skeleton\"\n @click=\"active = !active\"\n />\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n\n.onyx-filter-tag .onyx-tag {\n @include layers.component() {\n --onyx-tag-background-color: var(--onyx-color-base-neutral-600);\n border: none;\n --onyx-tag-color: var(--onyx-color-text-icons-neutral-inverted);\n --onyx-tag-hover-background-color: var(--onyx-color-base-neutral-900);\n --onyx-tag-focus-color: var(--onyx-color-component-focus-neutral);\n --onyx-tag-focus-background-color: var(--onyx-color-base-neutral-600);\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, useTemplateRef } from \"vue\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useAutofocus } from \"../../composables/useAutoFocus.js\";\nimport { getFormMessages, useCustomValidity } from \"../../composables/useCustomValidity.js\";\nimport { useErrorClass } from \"../../composables/useErrorClass.js\";\nimport { useLenientMaxLengthValidation } from \"../../composables/useLenientMaxLengthValidation.js\";\nimport {\n SKELETON_INJECTED_SYMBOL,\n useSkeletonContext,\n} from \"../../composables/useSkeletonState.js\";\nimport { useVModel } from \"../../composables/useVModel.js\";\nimport { useRootAttrs } from \"../../utils/attrs.js\";\nimport { FORM_INJECTED_SYMBOL, useFormContext } from \"../OnyxForm/OnyxForm.core.js\";\nimport OnyxFormElement from \"../OnyxFormElement/OnyxFormElement.vue\";\nimport OnyxSkeleton from \"../OnyxSkeleton/OnyxSkeleton.vue\";\nimport type { OnyxTextareaProps } from \"./types.js\";\n\nconst props = withDefaults(defineProps<OnyxTextareaProps>(), {\n required: false,\n autocapitalize: \"sentences\",\n readonly: false,\n requiredMarker: FORM_INJECTED_SYMBOL,\n disabled: FORM_INJECTED_SYMBOL,\n showError: FORM_INJECTED_SYMBOL,\n skeleton: SKELETON_INJECTED_SYMBOL,\n disableManualResize: false,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the validity state of the input changes.\n */\n validityChange: [validity: ValidityState];\n /**\n * Emitted when the input value changes.\n */\n \"update:modelValue\": [value: string];\n}>();\n\n/**\n * Current value of the textarea.\n */\nconst modelValue = useVModel({\n props,\n emit,\n key: \"modelValue\",\n default: \"\",\n});\n\ndefineOptions({ inheritAttrs: false });\nconst { rootAttrs, restAttrs } = useRootAttrs();\n\nconst { maxLength, maxLengthError } = useLenientMaxLengthValidation({ props, modelValue });\nconst error = computed(() => props.error ?? maxLengthError.value);\nconst { vCustomValidity, errorMessages } = useCustomValidity({ props, emit, error });\n\nconst { densityClass } = useDensity(props);\nconst successMessages = computed(() => getFormMessages(props.success));\nconst messages = computed(() => getFormMessages(props.message));\n\n/**\n * Current CSS variables for the autosize min/max height.\n */\nconst autosizeMinMaxStyles = computed(() => {\n if (!props.autosize) return;\n const min = props.autosize.min ? Math.max(props.autosize.min, 2) : undefined; // ensure min is not smaller than 2\n const max = props.autosize.max;\n return [min ? `--min-autosize-rows: ${min}` : \"\", `--max-autosize-rows: ${max ?? \"unset\"}`];\n});\n\n/**\n * Syncs the \"data-autosize-value\" on textarea input.\n * Is needed in order for the autosize to work when no v-model is bind to the OnyxTextarea.\n */\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLTextAreaElement;\n target.parentElement?.setAttribute(\"data-autosize-value\", target.value);\n};\n\nconst { disabled, showError } = useFormContext(props);\nconst skeleton = useSkeletonContext(props);\nconst errorClass = useErrorClass(showError);\n\nconst input = useTemplateRef(\"inputRef\");\ndefineExpose({ input });\nuseAutofocus(input, props);\n</script>\n\n<template>\n <div\n v-if=\"skeleton\"\n :class=\"['onyx-component', 'onyx-textarea-skeleton', densityClass]\"\n :style=\"autosizeMinMaxStyles\"\n v-bind=\"rootAttrs\"\n >\n <OnyxSkeleton v-if=\"!props.hideLabel\" class=\"onyx-textarea-skeleton__label\" />\n <OnyxSkeleton class=\"onyx-textarea-skeleton__input\" />\n </div>\n\n <div\n v-else\n :class=\"['onyx-component', 'onyx-textarea', errorClass, densityClass]\"\n :style=\"autosizeMinMaxStyles\"\n v-bind=\"rootAttrs\"\n >\n <OnyxFormElement\n v-bind=\"props\"\n :message=\"messages\"\n :success-messages=\"successMessages\"\n :error-messages=\"errorMessages\"\n >\n <template #default=\"{ id: textareaId }\">\n <div class=\"onyx-textarea__wrapper\" :data-autosize-value=\"modelValue\">\n <textarea\n :id=\"textareaId\"\n ref=\"inputRef\"\n v-model=\"modelValue\"\n v-custom-validity\n class=\"onyx-textarea__native\"\n :class=\"{ 'onyx-textarea__native--no-resize': props.disableManualResize }\"\n :placeholder=\"props.placeholder\"\n :required=\"props.required\"\n :autocapitalize=\"props.autocapitalize\"\n :autofocus=\"props.autofocus\"\n :name=\"props.name\"\n :readonly=\"props.readonly\"\n :disabled=\"disabled\"\n :minlength=\"props.minlength\"\n :maxlength=\"maxLength\"\n :aria-label=\"props.hideLabel ? props.label : undefined\"\n :title=\"props.hideLabel ? props.label : undefined\"\n v-bind=\"restAttrs\"\n @input=\"handleInput\"\n ></textarea>\n </div>\n </template>\n </OnyxFormElement>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use \"../../styles/mixins/layers.scss\";\n@use \"../../styles/mixins/input.scss\";\n\n.onyx-textarea,\n.onyx-textarea-skeleton {\n --min-autosize-rows: 3;\n --max-autosize-rows: 10;\n --onyx-textarea-padding-vertical: var(--onyx-density-xs);\n\n --min-height: calc(var(--min-autosize-rows) * 1lh + 2 * var(--onyx-textarea-padding-vertical));\n --max-height: calc(var(--max-autosize-rows) * 1lh + 2 * var(--onyx-textarea-padding-vertical));\n\n // remove max height and disable auto-sizing if user resizes the textarea manually\n &:has(.onyx-textarea__native[style*=\"height\"]) {\n --max-height: unset;\n\n .onyx-textarea__wrapper::after {\n // workaround for [#1142](https://github.com/SchwarzIT/onyx/issues/1142)\n // `display: none` or changing \"content\" causes user resizing to be interrupted\n height: 0;\n }\n }\n}\n\n.onyx-textarea-skeleton {\n @include input.define-skeleton-styles($height: var(--min-height));\n}\n\n.onyx-textarea {\n @include layers.component() {\n @include input.define-shared-styles(\n $base-selector: \".onyx-textarea\",\n $vertical-padding: var(--onyx-textarea-padding-vertical)\n );\n\n &__wrapper {\n padding: 0;\n height: unset;\n display: grid;\n\n // auto-resize, based on: https://css-tricks.com/the-cleanest-trick-for-autogrowing-textareas\n &::after {\n /* Note the weird space! Needed to prevent jumpy behavior */\n content: attr(data-autosize-value) \" \";\n white-space: pre-wrap; // this is how textarea text behaves\n visibility: hidden; // hidden from view, clicks, and screen readers\n overflow-wrap: anywhere;\n overflow-y: hidden;\n }\n }\n\n /**\n * Styles that are shared between the <textarea> and the ::after element of the wrapper\n * that is used for the autosize feature.\n */\n &__wrapper:after,\n &__native {\n grid-area: 1 / 1;\n height: 100%;\n min-height: var(--min-height);\n max-height: var(--max-height);\n padding: var(--onyx-textarea-padding-vertical) var(--onyx-density-sm);\n }\n\n &__native {\n resize: vertical;\n\n &--no-resize {\n resize: none;\n }\n }\n }\n}\n</style>\n","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xml:space='preserve'%20style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2'%20viewBox='0%200%20821%20922'%3e%3cpath%20d='M48.16%2024.48c-1.44-8.17-3.21-14.28-7.18-17.56-3.54-2.93-8.5-3.5-17.09-1.98C7.91%207.75%204.61%2013.23%207.84%2031.58c2.62%2014.87%206.4%2020.29%2016.3%2020.29%202.28%200%204.89-.29%207.89-.82%2016.05-2.83%2019.36-8.3%2016.14-26.58zm-27.8-2.67c0-.12.02-.28.03-.42.68-4.95%202.64-5.5%207.57-5.5%206.58%200%207.88.97%207.88%2012.14%200%203.14-.11%205.45-.41%207.18h-.01v.11c-.77%204.27-2.77%204.78-7.45%204.78-6.58%200-7.88-.97-7.88-12.06%200-2.59.07-4.61.26-6.22h.02z'%20style='fill:%2300adba;fill-rule:nonzero'%20transform='translate(-129.658%20-79.541)scale(19.29)'/%3e%3cpath%20d='M48.12%2024.46c-1.44-8.15-3.2-14.25-7.17-17.52-3.53-2.92-8.48-3.51-17.05-2-.18.03-.78.14-.95.17l-2.37%2015.21c.81-3.96%202.83-4.43%207.37-4.43%206.57%200%207.86.97%207.86%2012.11%200%202.78-.09%204.91-.31%206.55l12.62-10.1z'%20style='fill:url(%23a);fill-rule:nonzero'%20transform='translate(-129.658%20-79.541)scale(19.29)'/%3e%3cpath%20d='M7.84%2031.5c1.44%208.15%203.13%2014.27%207.09%2017.54%203.53%202.92%208.48%203.51%2017.05%202%20.18-.03.78-.14.95-.17l2.37-15.21c-.81%203.96-2.83%204.43-7.37%204.43-6.57%200-7.86-.97-7.86-12.11%200-2.78.09-4.91.31-6.55L7.84%2031.51z'%20style='fill:url(%23b);fill-rule:nonzero'%20transform='translate(-129.658%20-79.541)scale(19.29)'/%3e%3cdefs%3e%3clinearGradient%20id='a'%20x1='0'%20x2='1'%20y1='0'%20y2='0'%20gradientTransform='rotate(20%20-28.968%2063.083)scale(30.27)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20style='stop-color:%23018da0;stop-opacity:1'/%3e%3cstop%20offset='.14'%20style='stop-color:%23018da0;stop-opacity:1'/%3e%3cstop%20offset='.77'%20style='stop-color:%2300adba;stop-opacity:1'/%3e%3cstop%20offset='1'%20style='stop-color:%2300adba;stop-opacity:1'/%3e%3c/linearGradient%3e%3clinearGradient%20id='b'%20x1='0'%20x2='1'%20y1='0'%20y2='0'%20gradientTransform='rotate(-160%2021.757%2017.96)scale(30.2)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20style='stop-color:%23018da0;stop-opacity:1'/%3e%3cstop%20offset='.14'%20style='stop-color:%23018da0;stop-opacity:1'/%3e%3cstop%20offset='.77'%20style='stop-color:%2300adba;stop-opacity:1'/%3e%3cstop%20offset='1'%20style='stop-color:%2300adba;stop-opacity:1'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e\"","<script lang=\"ts\" setup>\nimport {\n iconArrowSmallRight,\n iconCheckSmall,\n iconLogout,\n iconSettings,\n iconShareIos,\n} from \"@sit-onyx/icons\";\nimport { ref } from \"vue\";\nimport logoUrl from \"../../../../.storybook/public/onyx-logo.svg\";\nimport OnyxAvatar from \"../../OnyxAvatar/OnyxAvatar.vue\";\nimport OnyxAvatarStack from \"../../OnyxAvatarStack/OnyxAvatarStack.vue\";\nimport OnyxBadge from \"../../OnyxBadge/OnyxBadge.vue\";\nimport OnyxButton from \"../../OnyxButton/OnyxButton.vue\";\nimport OnyxCheckboxGroup from \"../../OnyxCheckboxGroup/OnyxCheckboxGroup.vue\";\nimport OnyxIcon from \"../../OnyxIcon/OnyxIcon.vue\";\nimport OnyxIconButton from \"../../OnyxIconButton/OnyxIconButton.vue\";\nimport OnyxInput from \"../../OnyxInput/OnyxInput.vue\";\nimport OnyxNavBar from \"../../OnyxNavBar/OnyxNavBar.vue\";\nimport OnyxColorSchemeMenuItem from \"../../OnyxNavBar/modules/OnyxColorSchemeMenuItem/OnyxColorSchemeMenuItem.vue\";\nimport OnyxMenuItem from \"../../OnyxNavBar/modules/OnyxMenuItem/OnyxMenuItem.vue\";\nimport OnyxNavItem from \"../../OnyxNavBar/modules/OnyxNavItem/OnyxNavItem.vue\";\nimport OnyxUserMenu from \"../../OnyxNavBar/modules/OnyxUserMenu/OnyxUserMenu.vue\";\nimport OnyxPagination from \"../../OnyxPagination/OnyxPagination.vue\";\nimport OnyxRadioGroup from \"../../OnyxRadioGroup/OnyxRadioGroup.vue\";\nimport OnyxSelect from \"../../OnyxSelect/OnyxSelect.vue\";\nimport type { SelectOption } from \"../../OnyxSelect/types.js\";\nimport OnyxStepper from \"../../OnyxStepper/OnyxStepper.vue\";\nimport OnyxSwitch from \"../../OnyxSwitch/OnyxSwitch.vue\";\nimport OnyxTable from \"../../OnyxTable/OnyxTable.vue\";\nimport OnyxTag from \"../../OnyxTag/OnyxTag.vue\";\nimport OnyxTextarea from \"../../OnyxTextarea/OnyxTextarea.vue\";\nimport OnyxToastMessage from \"../../OnyxToastMessage/OnyxToastMessage.vue\";\n\ntype State = {\n select?: number[];\n textarea?: string;\n pagination: number;\n checkboxGroup?: number[];\n radioGroup?: number;\n stepper?: number;\n};\n\nconst isDark = defineModel<boolean>(\"dark\");\n\nconst selectOptions = Array.from({ length: 6 }, (_, index) => {\n return {\n label: `Option ${index + 1}`,\n value: index + 1,\n } satisfies SelectOption;\n});\n\nconst checkboxGroupOptions = Array.from({ length: 3 }, (_, index) => {\n return {\n label: \"Checkbox\",\n value: index + 1,\n } satisfies SelectOption;\n});\n\nconst radioGroupOptions = Array.from({ length: 4 }, (_, index) => {\n return {\n label: \"Radio button\",\n value: index + 1,\n } satisfies SelectOption;\n});\n\nconst state = ref<State>({\n pagination: 1,\n checkboxGroup: [checkboxGroupOptions.length],\n radioGroup: 1,\n});\n\nconst teamMembers = [\n { avatar: \"https://www.github.com/mj-hof.png\", name: \"Martin Hofmann\" },\n { avatar: \"https://www.github.com/jannick-ux.png\", name: \"Jannick Keller\" },\n { avatar: \"https://www.github.com/JoCa96.png\", name: \"Jonathan Leo Carle\" },\n { avatar: \"https://www.github.com/BoppLi.png\", name: \"Linda Bopp\" },\n { avatar: \"https://www.github.com/larsrickert.png\", name: \"Lars Rickert\" },\n { avatar: \"https://www.github.com/MajaZarkova.png\", name: \"Maja Zarkova\" },\n { avatar: \"https://www.github.com/ChristianBusshoff.png\", name: \"Christian Bußhoff\" },\n];\n</script>\n\n<template>\n <div class=\"parent\">\n <div class=\"showcase onyx-text\" :class=\"{ dark: isDark }\">\n <div class=\"showcase__flex grid--row1\">\n <OnyxPagination v-model=\"state.pagination\" :pages=\"6\" />\n\n <OnyxSelect\n v-model=\"state.select\"\n class=\"showcase__select\"\n label=\"Select\"\n list-label=\"List of options\"\n placeholder=\"Select\"\n :options=\"selectOptions\"\n multiple\n with-search\n hide-label\n />\n\n <OnyxSwitch v-model=\"isDark\" label=\"Dark mode\" />\n </div>\n\n <OnyxTable class=\"grid--table\" striped>\n <template #head>\n <tr>\n <th scope=\"col\">User</th>\n <th scope=\"col\">Status</th>\n <th scope=\"col\">Date</th>\n <th scope=\"col\">Time</th>\n </tr>\n </template>\n\n <tr>\n <td>\n <strong>Lindsay Borrows</strong>\n </td>\n <td>active</td>\n <td>02/12/26</td>\n <td class=\"font--soft\">-</td>\n </tr>\n <tr>\n <td>\n <strong>Pete Ellis Doyle</strong>\n </td>\n <td>on hold</td>\n <td>25/07/26</td>\n <td class=\"font--soft\">06:30</td>\n </tr>\n <tr>\n <td>\n <strong>Barry Louis</strong>\n </td>\n <td>active</td>\n <td>09/09/26</td>\n <td class=\"font--soft\">06:45</td>\n </tr>\n <tr>\n <td>\n <strong>Timothy Nixon</strong>\n </td>\n <td>active</td>\n <td>30/10/26</td>\n <td class=\"font--soft\">-</td>\n </tr>\n <tr>\n <td>\n <strong>Will Monroe</strong>\n </td>\n <td>finished</td>\n <td>27/03/26</td>\n <td class=\"font--soft\">14:56</td>\n </tr>\n <tr>\n <td>\n <strong>Francis Walsh</strong>\n </td>\n <td>ready</td>\n <td>16/12/26</td>\n <td class=\"font--soft\">12:05</td>\n </tr>\n </OnyxTable>\n\n <OnyxTextarea\n v-model=\"state.textarea\"\n class=\"grid--textarea\"\n label=\"Textarea\"\n hide-label\n placeholder=\"Enter free text here\"\n :autosize=\"{ min: 7, max: 14 }\"\n />\n\n <OnyxToastMessage\n class=\"grid--toast\"\n headline=\"Toast notification\"\n description=\"Description\"\n :duration=\"0\"\n />\n\n <div class=\"showcase__flex grid--tags\">\n <OnyxBadge>Badge</OnyxBadge>\n\n <OnyxTag label=\"Tag\" />\n <OnyxTag label=\"Tag\" color=\"primary\" />\n <OnyxTag label=\"Tag\" color=\"danger\" />\n <OnyxTag label=\"Tag\" color=\"warning\" />\n <OnyxTag label=\"Tag\" color=\"success\" />\n </div>\n\n <OnyxCheckboxGroup\n v-model=\"state.checkboxGroup\"\n class=\"grid--checkboxes\"\n label=\"Checkbox group\"\n hide-label\n :options=\"checkboxGroupOptions\"\n with-check-all\n />\n\n <div class=\"showcase__flex grid--row2\">\n <OnyxAvatarStack>\n <OnyxAvatar\n v-for=\"member in teamMembers\"\n :key=\"member.name\"\n :full-name=\"member.name\"\n :src=\"member.avatar\"\n size=\"32px\"\n />\n <OnyxAvatar full-name=\"Three others\" initials=\"+3\" size=\"32px\" />\n </OnyxAvatarStack>\n\n <OnyxRadioGroup\n v-model=\"state.radioGroup\"\n label=\"Radio group\"\n hide-label\n :options=\"radioGroupOptions\"\n orientation=\"horizontal\"\n />\n </div>\n\n <div class=\"showcase__flex grid--row3\">\n <OnyxInput label=\"Input\" placeholder=\"Example input\" hide-label />\n <OnyxIconButton :icon=\"iconShareIos\" label=\"Icon button\" />\n <OnyxButton :icon=\"iconArrowSmallRight\" label=\"Button\" color=\"neutral\" />\n <OnyxButton :icon=\"iconCheckSmall\" label=\"Button\" />\n <OnyxStepper v-model=\"state.stepper\" label=\"Stepper\" hide-label placeholder=\"0\" />\n </div>\n\n <div class=\"showcase__flex grid--row4\">\n <!-- empty div is needed for spacing purposes -->\n <div></div>\n <OnyxCheckboxGroup\n label=\"Checkbox group (skeleton)\"\n hide-label\n orientation=\"horizontal\"\n :skeleton=\"4\"\n :options=\"[]\"\n />\n </div>\n\n <OnyxNavBar class=\"grid--nav\" app-name=\"Nav bar\" :logo-url=\"logoUrl\">\n <OnyxNavItem label=\"Page 1\" active />\n <OnyxNavItem label=\"Page 2\">\n <template #children>\n <OnyxNavItem label=\"Subpage 1\" />\n <OnyxNavItem label=\"Subpage 2\" />\n </template>\n </OnyxNavItem>\n <OnyxNavItem label=\"Page 3\" :link=\"{ href: 'https://onyx.schwarz', target: '_blank' }\" />\n\n <template #contextArea>\n <OnyxUserMenu description=\"Company Name\" full-name=\"Jane Doe\">\n <OnyxMenuItem>\n <OnyxIcon :icon=\"iconSettings\" />\n Settings\n </OnyxMenuItem>\n <OnyxColorSchemeMenuItem\n :model-value=\"isDark ? 'dark' : 'light'\"\n @update:model-value=\"isDark = $event === 'dark'\"\n />\n <OnyxMenuItem color=\"danger\">\n <OnyxIcon :icon=\"iconLogout\" />\n Logout\n </OnyxMenuItem>\n\n <template #footer>\n App version\n <span class=\"onyx-text--monospace\">0.0.0</span>\n </template>\n </OnyxUserMenu>\n </template>\n </OnyxNavBar>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n@use \"../../../styles/breakpoints.scss\";\n\n.parent {\n container-type: inline-size;\n z-index: var(--onyx-z-index-app-overlay);\n position: relative;\n}\n\n.showcase {\n --checkbox-group-justify-content: flex-end;\n\n font-family: var(--onyx-font-family);\n color: var(--onyx-color-text-icons-neutral-intense);\n background-color: var(--onyx-color-base-background-tinted);\n\n max-width: 70rem;\n display: grid;\n gap: var(--onyx-spacing-xl);\n grid-template-columns: max-content repeat(4, minmax(0, 1fr));\n grid-template-areas:\n \"row1 row1 row1 textarea textarea\"\n \"table table table textarea textarea\"\n \"table table table toast toast\"\n \"table table table tags tags\"\n \"checkboxes row2 row2 row2 row2\"\n \"checkboxes row3 row3 row3 row3\"\n \"checkboxes row4 row4 row4 row4\"\n \"nav nav nav nav nav\";\n\n @include breakpoints.container(max, sm) {\n --checkbox-group-justify-content: revert-layer;\n grid-template-areas:\n \"row1 row1 row1 row1 row1\"\n \"table table table table table\"\n \"textarea textarea toast toast toast\"\n \"checkboxes checkboxes tags tags tags\"\n \"row2 row2 row2 row2 row2\"\n \"row3 row3 row3 row3 row3\"\n \"row4 row4 row4 row4 row4\"\n \"nav nav nav nav nav\";\n\n .showcase__flex {\n justify-content: flex-start;\n }\n }\n\n @include breakpoints.container(max, xs) {\n display: flex;\n flex-direction: column;\n }\n\n &__flex {\n display: flex;\n gap: var(--onyx-spacing-lg) var(--onyx-spacing-sm);\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n }\n\n &__select {\n :deep(.onyx-select-input__native) {\n width: 10ch;\n }\n }\n}\n\n.font {\n &--soft {\n color: var(--onyx-color-text-icons-neutral-soft);\n }\n}\n\n:deep(.onyx-radio-group__content--horizontal),\n:deep(.onyx-checkbox-group__content--horizontal) {\n justify-content: var(--checkbox-group-justify-content);\n}\n\n.onyx-toast-message,\n.onyx-table-wrapper {\n height: max-content;\n}\n\n.grid {\n $gridAreas: row1, row2, row3, row4, table, textarea, toast, tags, checkboxes, nav;\n\n @each $area in $gridAreas {\n &--#{$area} {\n grid-area: $area;\n }\n }\n}\n</style>\n","import { onMounted, watch, type Ref } from \"vue\";\nimport type { ColorSchemeValue } from \"../components/OnyxNavBar/modules/index.js\";\n\nexport const useThemeTransition = (theme: Ref<ColorSchemeValue>) => {\n //onMounted because of Server-Side-Rendering\n onMounted(() => {\n watch([theme], () => {\n const root = document.documentElement;\n\n const className = \"onyx-transition-active\";\n\n const handleTransitionEnd = () => {\n root.classList.remove(className);\n };\n root.addEventListener(\"transitionend\", handleTransitionEnd, { once: true });\n root.classList.add(className);\n });\n });\n};\n","export const ONYX_COLORS = [\"primary\", \"neutral\", \"danger\", \"warning\", \"success\", \"info\"] as const;\nexport type OnyxColor = (typeof ONYX_COLORS)[number];\n","export const TEXT_SIZES = [\"small\", \"default\", \"large\"] as const;\nexport type TextSize = (typeof TEXT_SIZES)[number];\n\n// when adding a new truncation type, make sure to also add CSS for it\n// inside styles/fonts.scss\nexport const TRUNCATION_TYPES = [\"ellipsis\", \"multiline\"] as const;\nexport type TruncationType = (typeof TRUNCATION_TYPES)[number];\n","export * from \"./colors.js\";\nexport * from \"./components.js\";\nexport * from \"./fonts.js\";\nexport * from \"./i18n.js\";\nexport * from \"./utils.js\";\n\nexport const ORIENTATIONS = [\"horizontal\", \"vertical\"] as const;\nexport type Orientation = (typeof ORIENTATIONS)[number];\n","import { watchEffect, type Plugin } from \"vue\";\nimport {\n createGlobalFABProvider,\n GLOBAL_FAB_PROVIDER_INJECTION_KEY,\n} from \"../components/OnyxGlobalFAB/useGlobalFAB.js\";\nimport {\n createNotificationsProvider,\n NOTIFICATIONS_PROVIDER_INJECTION_KEY,\n} from \"../components/OnyxNotifications/useNotification.js\";\nimport {\n createToastProvider,\n TOAST_PROVIDER_INJECTION_KEY,\n} from \"../components/OnyxToast/useToast.js\";\nimport { ROUTER_INJECTION_KEY, type ProvideRouterOptions } from \"../composables/useLink.js\";\nimport { injectI18n, provideI18n, type ProvideI18nOptions } from \"../i18n/index.js\";\n\nexport type OnyxPluginOptions = {\n /**\n * Integration for [Vue I18n](https://vue-i18n.intlify.dev/)\n */\n i18n?: ProvideI18nOptions;\n /**\n * Integration for [Vue Router](https://router.vuejs.org/).\n * @see https://onyx.schwarz/development/router.html\n */\n router?: ProvideRouterOptions;\n};\n\n/**\n * Use this plugin to set up onyx.\n * You can provide and overwrite default translations.\n */\nexport const createOnyx = (options: OnyxPluginOptions = {}): Plugin => ({\n install: (app) => {\n provideI18n(app, options.i18n);\n const i18n = app.runWithContext(() => injectI18n());\n\n app.provide(TOAST_PROVIDER_INJECTION_KEY, createToastProvider());\n app.provide(GLOBAL_FAB_PROVIDER_INJECTION_KEY, createGlobalFABProvider());\n app.provide(NOTIFICATIONS_PROVIDER_INJECTION_KEY, createNotificationsProvider());\n\n if (options.router) app.provide(ROUTER_INJECTION_KEY, options.router);\n\n app.mixin({\n beforeMount: () => {\n // we must ensure to only call `syncGlobalOptionalText` before/on mounted\n // to support server side rendering since it modifies the document.body\n watchEffect(() => {\n syncGlobalOptionalText(i18n.t.value(\"optional\"));\n });\n },\n });\n },\n});\n\nconst syncGlobalOptionalText = (text: string) => {\n globalThis.document?.body.style.setProperty(\"--onyx-global-optional-text\", `\"${text}\"`);\n};\n"],"names":["_openBlock","_createElementBlock","_normalizeClass","_renderSlot","_hoisted_1","_hoisted_3","_createBlock","_resolveDynamicComponent","_createVNode","_createElementVNode","_withModifiers","_hoisted_4","replacedMessage","tooltip","dialog","_hoisted_2","link","_withCtx","_createTextVNode","_normalizeProps","_mergeProps","_Fragment","_toDisplayString","_createCommentVNode","ref","_normalizeStyle","_useSlots","_createSlots","globalFAB","_renderList","_toHandlers","_hoisted_5","_hoisted_6","_withDirectives","_guardReactiveProps","_Teleport","input","_vModelCheckbox","table","_hoisted_10","_hoisted_7","_hoisted_8","_hoisted_9","all","menuItems","iconComponent","cells","createSlots","select","label","headline","columnConfig","key","value","_vModelDynamic","maxLength","avatar","now","_withKeys","accept","_vModelText","_useModel"],"mappings":"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"}
|