@flux-ui/components 3.0.0-next.5 → 3.0.0-next.52
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 +25 -35
- package/dist/component/FluxAction.vue.d.ts +7 -7
- package/dist/component/FluxActionBar.vue.d.ts +21 -21
- package/dist/component/FluxActionPane.vue.d.ts +8 -8
- package/dist/component/FluxActionStack.vue.d.ts +152 -0
- package/dist/component/{FluxAutoGrid.vue.d.ts → FluxAdaptiveGroup.vue.d.ts} +7 -4
- package/dist/component/FluxAdaptiveSlot.vue.d.ts +35 -0
- package/dist/component/FluxAlert.vue.d.ts +2 -2
- package/dist/component/FluxAnimatedColors.vue.d.ts +3 -2
- package/dist/component/FluxAspectRatio.vue.d.ts +4 -4
- package/dist/component/FluxAvatar.vue.d.ts +7 -7
- package/dist/component/FluxBadge.vue.d.ts +8 -8
- package/dist/component/FluxBadgeStack.vue.d.ts +4 -4
- package/dist/component/FluxBorderShine.vue.d.ts +8 -9
- package/dist/component/FluxBoxedIcon.vue.d.ts +2 -6
- package/dist/component/FluxButton.vue.d.ts +8 -8
- package/dist/component/FluxButtonGroup.vue.d.ts +4 -4
- package/dist/component/FluxButtonStack.vue.d.ts +4 -4
- package/dist/component/FluxCalendar.vue.d.ts +7 -7
- package/dist/component/FluxCalendarEvent.vue.d.ts +7 -7
- package/dist/component/FluxCheckbox.vue.d.ts +8 -7
- package/dist/component/FluxChip.vue.d.ts +5 -5
- package/dist/component/FluxClickablePane.vue.d.ts +6 -6
- package/dist/component/FluxColorPicker.vue.d.ts +5 -5
- package/dist/component/FluxColorSelect.vue.d.ts +6 -5
- package/dist/component/FluxColumn.vue.d.ts +23 -0
- package/dist/component/FluxCommandPalette.vue.d.ts +52 -0
- package/dist/component/FluxCommandPaletteGroup.vue.d.ts +8 -0
- package/dist/component/FluxCommandPaletteItem.vue.d.ts +18 -0
- package/dist/component/FluxComment.vue.d.ts +4 -4
- package/dist/component/FluxConfirm.vue.d.ts +2 -2
- package/dist/component/FluxContainer.vue.d.ts +4 -4
- package/dist/component/FluxDataTable.vue.d.ts +52 -21
- package/dist/component/FluxDatePicker.vue.d.ts +6 -6
- package/dist/component/FluxDestructiveButton.vue.d.ts +7 -7
- package/dist/component/FluxDisabled.vue.d.ts +2 -2
- package/dist/component/FluxDivider.vue.d.ts +6 -4
- package/dist/component/FluxDotPattern.vue.d.ts +2 -2
- package/dist/component/FluxDropZone.vue.d.ts +13 -12
- package/dist/component/FluxDynamicView.vue.d.ts +2 -3
- package/dist/component/FluxExpandable.vue.d.ts +10 -10
- package/dist/component/FluxExpandableGroup.vue.d.ts +4 -4
- package/dist/component/FluxFader.vue.d.ts +7 -7
- package/dist/component/FluxFaderItem.vue.d.ts +4 -4
- package/dist/component/FluxFilter.vue.d.ts +10 -142
- package/dist/component/FluxFilterBar.vue.d.ts +38 -0
- package/dist/component/FluxFilterBase.vue.d.ts +45 -0
- package/dist/component/FluxFilterDate.vue.d.ts +2 -2
- package/dist/component/FluxFilterDateRange.vue.d.ts +2 -2
- package/dist/component/FluxFilterOption.vue.d.ts +5 -5
- package/dist/component/FluxFilterOptionAsync.vue.d.ts +5 -5
- package/dist/component/FluxFilterOptions.vue.d.ts +5 -5
- package/dist/component/FluxFilterOptionsAsync.vue.d.ts +5 -5
- package/dist/component/FluxFilterRange.vue.d.ts +2 -2
- package/dist/component/FluxFilterWindow.vue.d.ts +159 -0
- package/dist/component/FluxFlickeringGrid.vue.d.ts +2 -2
- package/dist/component/FluxFlyout.vue.d.ts +58 -59
- package/dist/component/FluxFocalPointEditor.vue.d.ts +5 -5
- package/dist/component/FluxFocalPointImage.vue.d.ts +2 -2
- package/dist/component/FluxForm.vue.d.ts +8 -8
- package/dist/component/FluxFormColumn.vue.d.ts +4 -4
- package/dist/component/FluxFormDateInput.vue.d.ts +65 -70
- package/dist/component/FluxFormDateRangeInput.vue.d.ts +63 -69
- package/dist/component/FluxFormDateTimeInput.vue.d.ts +63 -68
- package/dist/component/FluxFormField.vue.d.ts +8 -8
- package/dist/component/FluxFormFieldAddition.vue.d.ts +2 -2
- package/dist/component/FluxFormGrid.vue.d.ts +23 -0
- package/dist/component/FluxFormInput.vue.d.ts +12 -17
- package/dist/component/FluxFormInputAddition.vue.d.ts +4 -4
- package/dist/component/FluxFormInputGroup.vue.d.ts +5 -4
- package/dist/component/FluxFormPinInput.vue.d.ts +7 -9
- package/dist/component/FluxFormRangeSlider.vue.d.ts +43 -27
- package/dist/component/FluxFormRow.vue.d.ts +4 -4
- package/dist/component/FluxFormSection.vue.d.ts +4 -4
- package/dist/component/FluxFormSelect.vue.d.ts +8 -10
- package/dist/component/FluxFormSelectAsync.vue.d.ts +8 -10
- package/dist/component/FluxFormSlider.vue.d.ts +26 -17
- package/dist/component/FluxFormTextArea.vue.d.ts +9 -13
- package/dist/component/FluxFormTimeZonePicker.vue.d.ts +8 -10
- package/dist/component/FluxFormTreeViewSelect.vue.d.ts +187 -0
- package/dist/component/FluxGallery.vue.d.ts +8 -8
- package/dist/component/FluxGalleryItem.vue.d.ts +5 -5
- package/dist/component/FluxGrid.vue.d.ts +4 -4
- package/dist/component/FluxGridColumn.vue.d.ts +4 -4
- package/dist/component/FluxGridPattern.vue.d.ts +2 -2
- package/dist/component/FluxIcon.vue.d.ts +6 -5
- package/dist/component/FluxInfo.vue.d.ts +4 -4
- package/dist/component/FluxInfoStack.vue.d.ts +4 -4
- package/dist/component/FluxItem.vue.d.ts +18 -0
- package/dist/component/FluxItemActions.vue.d.ts +21 -0
- package/dist/component/FluxItemContent.vue.d.ts +21 -0
- package/dist/component/FluxItemMedia.vue.d.ts +22 -0
- package/dist/component/FluxItemStack.vue.d.ts +18 -0
- package/dist/component/FluxLayerPane.vue.d.ts +20 -0
- package/dist/component/FluxLayerPaneSecondary.vue.d.ts +20 -0
- package/dist/component/FluxLegend.vue.d.ts +2 -2
- package/dist/component/FluxLink.vue.d.ts +7 -7
- package/dist/component/FluxMenu.vue.d.ts +4 -4
- package/dist/component/FluxMenuCollapsible.vue.d.ts +47 -0
- package/dist/component/FluxMenuGroup.vue.d.ts +4 -4
- package/dist/component/FluxMenuItem.vue.d.ts +27 -7
- package/dist/component/FluxMenuOptions.vue.d.ts +7 -7
- package/dist/component/FluxMenuSubHeader.vue.d.ts +2 -2
- package/dist/component/FluxMenuTitle.vue.d.ts +2 -2
- package/dist/component/FluxNotice.vue.d.ts +9 -9
- package/dist/component/FluxNoticeStack.vue.d.ts +4 -4
- package/dist/component/FluxOverflowBar.vue.d.ts +42 -0
- package/dist/component/FluxOverlay.vue.d.ts +5 -6
- package/dist/component/FluxOverlayProvider.vue.d.ts +3 -0
- package/dist/component/FluxPagination.vue.d.ts +5 -5
- package/dist/component/FluxPaginationBar.vue.d.ts +6 -6
- package/dist/component/FluxPaginationButton.vue.d.ts +30 -0
- package/dist/component/FluxPane.vue.d.ts +6 -6
- package/dist/component/FluxPaneBody.vue.d.ts +4 -4
- package/dist/component/FluxPaneFooter.vue.d.ts +4 -4
- package/dist/component/FluxPaneGroup.vue.d.ts +4 -4
- package/dist/component/FluxPaneHeader.vue.d.ts +7 -7
- package/dist/component/FluxPaneIllustration.vue.d.ts +6 -6
- package/dist/component/FluxPaneMedia.vue.d.ts +3 -2
- package/dist/component/FluxPercentageBar.vue.d.ts +2 -2
- package/dist/component/FluxPersona.vue.d.ts +5 -5
- package/dist/component/FluxPlaceholder.vue.d.ts +5 -5
- package/dist/component/FluxPressable.vue.d.ts +9 -9
- package/dist/component/FluxPrimaryButton.vue.d.ts +7 -7
- package/dist/component/FluxPrimaryLinkButton.vue.d.ts +25 -0
- package/dist/component/FluxProgressBar.vue.d.ts +2 -2
- package/dist/component/FluxPrompt.vue.d.ts +29 -39
- package/dist/component/FluxPublishButton.vue.d.ts +7 -7
- package/dist/component/FluxQuantitySelector.vue.d.ts +5 -5
- package/dist/component/FluxRemove.vue.d.ts +5 -5
- package/dist/component/FluxRoot.vue.d.ts +4 -4
- package/dist/component/FluxRow.vue.d.ts +23 -0
- package/dist/component/FluxSecondaryButton.vue.d.ts +7 -7
- package/dist/component/FluxSecondaryLinkButton.vue.d.ts +25 -0
- package/dist/component/FluxSegmentedControl.vue.d.ts +8 -7
- package/dist/component/FluxSegmentedView.vue.d.ts +5 -5
- package/dist/component/FluxSeparator.vue.d.ts +2 -2
- package/dist/component/FluxSlideOver.vue.d.ts +7 -7
- package/dist/component/FluxSnackbar.vue.d.ts +6 -6
- package/dist/component/FluxSnackbarProvider.vue.d.ts +2 -2
- package/dist/component/FluxSpacer.vue.d.ts +2 -2
- package/dist/component/FluxSpacing.vue.d.ts +2 -2
- package/dist/component/FluxSpinner.vue.d.ts +2 -2
- package/dist/component/FluxSplitButton.vue.d.ts +6 -6
- package/dist/component/FluxStack.vue.d.ts +4 -4
- package/dist/component/FluxStatistic.vue.d.ts +8 -5
- package/dist/component/FluxStepper.vue.d.ts +11 -12
- package/dist/component/FluxStepperStep.vue.d.ts +4 -4
- package/dist/component/FluxStepperSteps.vue.d.ts +5 -5
- package/dist/component/FluxTab.vue.d.ts +4 -4
- package/dist/component/FluxTabBar.vue.d.ts +4 -4
- package/dist/component/FluxTabBarItem.vue.d.ts +39 -41
- package/dist/component/FluxTable.vue.d.ts +15 -10
- package/dist/component/FluxTableActions.vue.d.ts +4 -4
- package/dist/component/FluxTableBar.vue.d.ts +20 -0
- package/dist/component/FluxTableCell.vue.d.ts +7 -6
- package/dist/component/FluxTableHeader.vue.d.ts +8 -8
- package/dist/component/FluxTableRow.vue.d.ts +4 -4
- package/dist/component/FluxTabs.vue.d.ts +11 -12
- package/dist/component/FluxTag.vue.d.ts +9 -8
- package/dist/component/FluxTagStack.vue.d.ts +4 -4
- package/dist/component/FluxTicks.vue.d.ts +2 -2
- package/dist/component/FluxTimeline.vue.d.ts +4 -4
- package/dist/component/FluxTimelineItem.vue.d.ts +4 -4
- package/dist/component/FluxToggle.vue.d.ts +7 -8
- package/dist/component/FluxToolbar.vue.d.ts +4 -4
- package/dist/component/FluxToolbarGroup.vue.d.ts +4 -4
- package/dist/component/FluxTooltip.vue.d.ts +5 -6
- package/dist/component/FluxTooltipProvider.vue.d.ts +2 -2
- package/dist/component/FluxTreeView.vue.d.ts +16 -0
- package/dist/component/FluxWindow.vue.d.ts +5 -5
- package/dist/component/index.d.ts +25 -4
- package/dist/component/primitive/Anchor.vue.d.ts +4 -4
- package/dist/component/primitive/AnchorPopup.vue.d.ts +4 -5
- package/dist/component/primitive/CoordinatePicker.vue.d.ts +7 -6
- package/dist/component/primitive/CoordinatePickerThumb.vue.d.ts +7 -7
- package/dist/component/primitive/DialogLayout.vue.d.ts +28 -0
- package/dist/component/primitive/FilterBadge.vue.d.ts +12 -0
- package/dist/component/primitive/FilterItem.vue.d.ts +5 -5
- package/dist/component/primitive/FilterMenuRenderer.d.ts +21 -10
- package/dist/component/primitive/FilterOptionBase.vue.d.ts +7 -7
- package/dist/component/primitive/SelectBase.vue.d.ts +174 -123
- package/dist/component/primitive/SliderBase.vue.d.ts +7 -7
- package/dist/component/primitive/SliderThumb.vue.d.ts +11 -7
- package/dist/component/primitive/SliderTrack.vue.d.ts +2 -2
- package/dist/component/primitive/TreeNodeRenderer.vue.d.ts +30 -0
- package/dist/component/primitive/VNodeRenderer.d.ts +5 -6
- package/dist/component/primitive/index.d.ts +4 -1
- package/dist/composable/index.d.ts +2 -1
- package/dist/composable/private/index.d.ts +10 -2
- package/dist/composable/private/useAsyncFilterOptions.d.ts +14 -0
- package/dist/composable/private/useCommandPalette.d.ts +38 -0
- package/dist/composable/private/useDateFlyout.d.ts +10 -0
- package/dist/composable/private/useDropdownPopup.d.ts +27 -0
- package/dist/composable/private/useFilterOption.d.ts +12 -0
- package/dist/composable/private/useFormSelect.d.ts +6 -7
- package/dist/composable/private/useTranslate.d.ts +0 -1
- package/dist/composable/private/useTreeView.d.ts +28 -0
- package/dist/composable/useAdaptiveGroupInjection.d.ts +2 -0
- package/dist/composable/useBreakpoints.d.ts +1 -2
- package/dist/composable/useDisabled.d.ts +2 -3
- package/dist/composable/useDisabledInjection.d.ts +2 -2
- package/dist/composable/useExpandableGroupInjection.d.ts +2 -2
- package/dist/composable/useFilterInjection.d.ts +2 -2
- package/dist/composable/useFlyoutInjection.d.ts +2 -6
- package/dist/composable/useFormFieldInjection.d.ts +2 -2
- package/dist/composable/useTableInjection.d.ts +2 -7
- package/dist/composable/useTooltipInjection.d.ts +3 -0
- package/dist/data/di.d.ts +15 -1
- package/dist/data/filter.d.ts +5 -2
- package/dist/data/helper.d.ts +0 -1
- package/dist/data/i18n.d.ts +18 -2
- package/dist/data/iconRegistry.d.ts +0 -1
- package/dist/data/index.d.ts +0 -1
- package/dist/data/inputMask.d.ts +0 -1
- package/dist/data/store.d.ts +2 -3
- package/dist/data/timeZones.d.ts +3 -0
- package/dist/index.css +6690 -0
- package/dist/index.d.ts +1 -2
- package/dist/index.js +20467 -0
- package/dist/index.js.map +1 -0
- package/dist/transition/FluxAutoHeightTransition.vue.d.ts +6 -4
- package/dist/transition/FluxAutoWidthTransition.vue.d.ts +6 -4
- package/dist/transition/FluxBreakthroughTransition.vue.d.ts +6 -4
- package/dist/transition/FluxFadeTransition.vue.d.ts +6 -4
- package/dist/transition/FluxOverlayTransition.vue.d.ts +6 -4
- package/dist/transition/FluxRouteTransition.vue.d.ts +6 -4
- package/dist/transition/FluxSlideOverTransition.vue.d.ts +6 -4
- package/dist/transition/FluxTooltipTransition.vue.d.ts +6 -4
- package/dist/transition/FluxVerticalWindowTransition.vue.d.ts +6 -4
- package/dist/transition/FluxWindowTransition.vue.d.ts +6 -4
- package/dist/transition/index.d.ts +0 -1
- package/dist/util/createDialogRenderer.d.ts +1 -2
- package/dist/util/createLabelForDateRange.d.ts +0 -1
- package/dist/util/index.d.ts +0 -1
- package/dist/vite.d.ts +7 -0
- package/package.json +26 -29
- package/src/component/FluxActionBar.vue +10 -9
- package/src/component/FluxActionPane.vue +4 -3
- package/src/component/{FluxActions.vue → FluxActionStack.vue} +2 -2
- package/src/component/FluxAdaptiveGroup.vue +112 -0
- package/src/component/FluxAdaptiveSlot.vue +159 -0
- package/src/component/FluxAlert.vue +8 -17
- package/src/component/FluxAnimatedColors.vue +7 -5
- package/src/component/FluxAspectRatio.vue +2 -1
- package/src/component/FluxBadge.vue +5 -1
- package/src/component/FluxBadgeStack.vue +2 -1
- package/src/component/FluxBorderShine.vue +1 -1
- package/src/component/FluxBoxedIcon.vue +0 -4
- package/src/component/FluxButtonGroup.vue +2 -1
- package/src/component/FluxButtonStack.vue +2 -1
- package/src/component/FluxCalendar.vue +13 -5
- package/src/component/FluxCalendarEvent.vue +2 -1
- package/src/component/FluxCheckbox.vue +35 -8
- package/src/component/FluxChip.vue +2 -1
- package/src/component/FluxClickablePane.vue +3 -2
- package/src/component/FluxColorPicker.vue +10 -3
- package/src/component/FluxColorSelect.vue +28 -7
- package/src/component/{FluxAutoGrid.vue → FluxColumn.vue} +5 -8
- package/src/component/FluxCommandPalette.vue +290 -0
- package/src/component/FluxCommandPaletteGroup.vue +23 -0
- package/src/component/FluxCommandPaletteItem.vue +60 -0
- package/src/component/FluxComment.vue +2 -2
- package/src/component/FluxConfirm.vue +8 -17
- package/src/component/FluxContainer.vue +3 -2
- package/src/component/FluxDataTable.vue +70 -16
- package/src/component/FluxDatePicker.vue +7 -6
- package/src/component/FluxDivider.vue +7 -3
- package/src/component/FluxDropZone.vue +22 -8
- package/src/component/FluxDynamicView.vue +1 -1
- package/src/component/FluxExpandable.vue +4 -3
- package/src/component/FluxExpandableGroup.vue +2 -2
- package/src/component/FluxFader.vue +6 -5
- package/src/component/FluxFaderItem.vue +2 -1
- package/src/component/FluxFilter.vue +22 -108
- package/src/component/FluxFilterBar.vue +119 -0
- package/src/component/FluxFilterBase.vue +149 -0
- package/src/component/FluxFilterOption.vue +3 -14
- package/src/component/FluxFilterOptionAsync.vue +17 -61
- package/src/component/FluxFilterOptions.vue +3 -25
- package/src/component/FluxFilterOptionsAsync.vue +9 -74
- package/src/component/FluxFilterWindow.vue +83 -0
- package/src/component/FluxFlyout.vue +15 -12
- package/src/component/FluxFocalPointEditor.vue +3 -3
- package/src/component/FluxForm.vue +9 -8
- package/src/component/FluxFormColumn.vue +2 -1
- package/src/component/FluxFormDateInput.vue +9 -22
- package/src/component/FluxFormDateRangeInput.vue +20 -20
- package/src/component/FluxFormDateTimeInput.vue +19 -22
- package/src/component/FluxFormField.vue +4 -4
- package/src/component/FluxFormGrid.vue +24 -0
- package/src/component/FluxFormInput.vue +19 -9
- package/src/component/FluxFormInputAddition.vue +2 -1
- package/src/component/FluxFormInputGroup.vue +5 -2
- package/src/component/FluxFormPinInput.vue +14 -6
- package/src/component/FluxFormRangeSlider.vue +12 -2
- package/src/component/FluxFormRow.vue +2 -1
- package/src/component/FluxFormSection.vue +4 -3
- package/src/component/FluxFormSelect.vue +14 -7
- package/src/component/FluxFormSelectAsync.vue +16 -10
- package/src/component/FluxFormSlider.vue +9 -3
- package/src/component/FluxFormTextArea.vue +13 -7
- package/src/component/FluxFormTimeZonePicker.vue +18 -626
- package/src/component/FluxFormTreeViewSelect.vue +331 -0
- package/src/component/FluxGallery.vue +4 -3
- package/src/component/FluxGrid.vue +3 -2
- package/src/component/FluxGridColumn.vue +2 -1
- package/src/component/FluxIcon.vue +4 -14
- package/src/component/FluxInfo.vue +2 -1
- package/src/component/FluxInfoStack.vue +3 -2
- package/src/component/FluxItem.vue +11 -0
- package/src/component/FluxItemActions.vue +18 -0
- package/src/component/FluxItemContent.vue +15 -0
- package/src/component/FluxItemMedia.vue +20 -0
- package/src/component/FluxItemStack.vue +14 -0
- package/src/component/FluxLayerPane.vue +16 -0
- package/src/component/FluxLayerPaneSecondary.vue +16 -0
- package/src/component/FluxLegend.vue +9 -9
- package/src/component/FluxMenu.vue +2 -2
- package/src/component/FluxMenuCollapsible.vue +187 -0
- package/src/component/FluxMenuGroup.vue +2 -1
- package/src/component/FluxMenuItem.vue +18 -2
- package/src/component/FluxMenuOptions.vue +2 -2
- package/src/component/FluxNotice.vue +7 -2
- package/src/component/FluxNoticeStack.vue +2 -1
- package/src/component/FluxOverflowBar.vue +133 -0
- package/src/component/FluxOverlay.vue +1 -1
- package/src/component/FluxOverlayProvider.vue +39 -0
- package/src/component/FluxPagination.vue +17 -14
- package/src/component/FluxPaginationBar.vue +27 -38
- package/src/component/FluxPaginationButton.vue +39 -0
- package/src/component/FluxPane.vue +3 -2
- package/src/component/FluxPaneBody.vue +2 -1
- package/src/component/FluxPaneFooter.vue +2 -1
- package/src/component/FluxPaneGroup.vue +2 -1
- package/src/component/FluxPaneHeader.vue +7 -6
- package/src/component/FluxPaneIllustration.vue +3 -3
- package/src/component/FluxPaneMedia.vue +3 -1
- package/src/component/FluxPercentageBar.vue +3 -1
- package/src/component/FluxPressable.vue +16 -14
- package/src/component/FluxPrimaryLinkButton.vue +28 -0
- package/src/component/FluxProgressBar.vue +3 -2
- package/src/component/FluxPrompt.vue +16 -27
- package/src/component/FluxQuantitySelector.vue +3 -6
- package/src/component/FluxRemove.vue +4 -0
- package/src/component/FluxRoot.vue +5 -28
- package/src/component/FluxRow.vue +24 -0
- package/src/component/FluxSecondaryLinkButton.vue +28 -0
- package/src/component/FluxSegmentedControl.vue +86 -12
- package/src/component/FluxSnackbar.vue +36 -10
- package/src/component/FluxSplitButton.vue +3 -2
- package/src/component/FluxStack.vue +4 -3
- package/src/component/FluxStatistic.vue +23 -9
- package/src/component/FluxStepper.vue +4 -4
- package/src/component/FluxStepperStep.vue +2 -1
- package/src/component/FluxTab.vue +2 -1
- package/src/component/FluxTabBar.vue +26 -20
- package/src/component/FluxTabBarItem.vue +1 -1
- package/src/component/FluxTable.vue +25 -4
- package/src/component/FluxTableActions.vue +5 -4
- package/src/component/FluxTableBar.vue +38 -0
- package/src/component/FluxTableCell.vue +6 -3
- package/src/component/FluxTableHeader.vue +4 -2
- package/src/component/FluxTableRow.vue +2 -1
- package/src/component/FluxTabs.vue +15 -6
- package/src/component/FluxTag.vue +8 -2
- package/src/component/FluxTagStack.vue +2 -1
- package/src/component/FluxTimeline.vue +2 -1
- package/src/component/FluxTimelineItem.vue +2 -1
- package/src/component/FluxToggle.vue +20 -5
- package/src/component/FluxToolbar.vue +2 -1
- package/src/component/FluxToolbarGroup.vue +2 -1
- package/src/component/FluxTooltip.vue +3 -1
- package/src/component/FluxTooltipProvider.vue +7 -3
- package/src/component/FluxTreeView.vue +90 -0
- package/src/component/FluxWindow.vue +2 -2
- package/src/component/index.ts +25 -3
- package/src/component/primitive/Anchor.vue +3 -1
- package/src/component/primitive/AnchorPopup.vue +13 -7
- package/src/component/primitive/CoordinatePicker.vue +12 -12
- package/src/component/primitive/CoordinatePickerThumb.vue +2 -0
- package/src/component/primitive/DialogLayout.vue +44 -0
- package/src/component/primitive/FilterBadge.vue +43 -0
- package/src/component/primitive/FilterItem.vue +12 -3
- package/src/component/primitive/FilterMenuRenderer.ts +10 -198
- package/src/component/primitive/SelectBase.vue +32 -31
- package/src/component/primitive/SliderBase.vue +10 -14
- package/src/component/primitive/SliderThumb.vue +9 -0
- package/src/component/primitive/TreeNodeRenderer.vue +77 -0
- package/src/component/primitive/index.ts +4 -0
- package/src/composable/index.ts +2 -0
- package/src/composable/private/index.ts +10 -1
- package/src/composable/private/useAsyncFilterOptions.ts +70 -0
- package/src/composable/private/useCommandPalette.ts +405 -0
- package/src/composable/private/useDateFlyout.ts +34 -0
- package/src/composable/private/useDropdownPopup.ts +99 -0
- package/src/composable/private/useFilterOption.ts +59 -0
- package/src/composable/private/useFormSelect.ts +4 -4
- package/src/composable/private/useTreeView.ts +186 -0
- package/src/composable/useAdaptiveGroupInjection.ts +6 -0
- package/src/composable/useFilterInjection.ts +1 -8
- package/src/composable/useTooltipInjection.ts +8 -0
- package/src/css/base.scss +6 -3
- package/src/css/component/Action.module.scss +11 -12
- package/src/css/component/AdaptiveSlot.module.scss +25 -0
- package/src/css/component/Avatar.module.scss +24 -25
- package/src/css/component/Badge.module.scss +29 -21
- package/src/css/component/Button.module.scss +68 -46
- package/src/css/component/Calendar.module.scss +16 -16
- package/src/css/component/Chip.module.scss +11 -27
- package/src/css/component/Color.module.scss +5 -5
- package/src/css/component/CommandPalette.module.scss +332 -0
- package/src/css/component/Comment.module.scss +15 -14
- package/src/css/component/DatePicker.module.scss +13 -24
- package/src/css/component/Divider.module.scss +2 -2
- package/src/css/component/DropZone.module.scss +27 -24
- package/src/css/component/Expandable.module.scss +9 -9
- package/src/css/component/Fader.module.scss +2 -1
- package/src/css/component/Filter.module.scss +45 -5
- package/src/css/component/Flyout.module.scss +1 -1
- package/src/css/component/FocalPoint.module.scss +1 -1
- package/src/css/component/Form.module.scss +143 -56
- package/src/css/component/Gallery.module.scss +14 -4
- package/src/css/component/Icon.module.scss +36 -50
- package/src/css/component/Info.module.scss +2 -3
- package/src/css/component/Item.module.scss +74 -0
- package/src/css/component/LayerPane.module.scss +40 -0
- package/src/css/component/Layout.module.scss +14 -4
- package/src/css/component/Legend.module.scss +2 -2
- package/src/css/component/Menu.module.scss +83 -36
- package/src/css/component/Notice.module.scss +45 -45
- package/src/css/component/OverflowBar.module.scss +41 -0
- package/src/css/component/Overlay.module.scss +57 -9
- package/src/css/component/Pagination.module.scss +70 -33
- package/src/css/component/Pane.module.scss +74 -33
- package/src/css/component/PercentageBar.module.scss +2 -2
- package/src/css/component/Placeholder.module.scss +4 -4
- package/src/css/component/Progress.module.scss +17 -6
- package/src/css/component/Remove.module.scss +5 -5
- package/src/css/component/SegmentedControl.module.scss +9 -8
- package/src/css/component/Snackbar.module.scss +20 -19
- package/src/css/component/Spinner.module.scss +2 -2
- package/src/css/component/Statistic.module.scss +14 -41
- package/src/css/component/Stepper.module.scss +10 -10
- package/src/css/component/Tab.module.scss +31 -23
- package/src/css/component/Table.module.scss +76 -29
- package/src/css/component/Timeline.module.scss +22 -22
- package/src/css/component/Toolbar.module.scss +10 -5
- package/src/css/component/Tooltip.module.scss +6 -5
- package/src/css/component/Transition.module.scss +5 -5
- package/src/css/component/TreeView.module.scss +21 -0
- package/src/css/component/TreeViewSelect.module.scss +59 -0
- package/src/css/component/Visual.module.scss +3 -3
- package/src/css/component/base/Button.module.scss +24 -6
- package/src/css/component/base/Effect.module.scss +2 -1
- package/src/css/component/base/Pane.module.scss +4 -8
- package/src/css/component/primitive/CoordinatePicker.module.scss +3 -3
- package/src/css/component/primitive/Slider.module.scss +14 -20
- package/src/css/component/primitive/TreeNode.module.scss +19 -0
- package/src/css/mixin/breakpoints.scss +15 -3
- package/src/css/mixin/button-active.scss +6 -0
- package/src/css/mixin/focus-ring.scss +3 -3
- package/src/css/mixin/index.scss +2 -0
- package/src/css/mixin/tree-node.scss +94 -0
- package/src/css/reset.scss +0 -107
- package/src/css/typography.scss +16 -9
- package/src/css/variables.scss +197 -186
- package/src/data/di.ts +18 -0
- package/src/data/filter.ts +157 -1
- package/src/data/i18n.ts +18 -1
- package/src/data/iconRegistry.ts +5 -1
- package/src/data/store.ts +52 -15
- package/src/data/timeZones.ts +619 -0
- package/src/index.ts +3 -0
- package/src/transition/FluxAutoHeightTransition.vue +5 -0
- package/src/transition/FluxAutoWidthTransition.vue +5 -0
- package/src/transition/FluxBreakthroughTransition.vue +5 -0
- package/src/transition/FluxFadeTransition.vue +5 -0
- package/src/transition/FluxOverlayTransition.vue +5 -0
- package/src/transition/FluxRouteTransition.vue +5 -0
- package/src/transition/FluxSlideOverTransition.vue +5 -0
- package/src/transition/FluxTooltipTransition.vue +5 -0
- package/src/transition/FluxVerticalWindowTransition.vue +5 -0
- package/src/transition/FluxWindowTransition.vue +5 -0
- package/src/util/createDialogRenderer.ts +36 -19
- package/src/vite.d.ts +2 -8
- package/dist/0db98648.svg +0 -3
- package/dist/component/FluxAction.vue.d.ts.map +0 -1
- package/dist/component/FluxActionBar.vue.d.ts.map +0 -1
- package/dist/component/FluxActionPane.vue.d.ts.map +0 -1
- package/dist/component/FluxActions.vue.d.ts +0 -154
- package/dist/component/FluxActions.vue.d.ts.map +0 -1
- package/dist/component/FluxAlert.vue.d.ts.map +0 -1
- package/dist/component/FluxAnimatedColors.vue.d.ts.map +0 -1
- package/dist/component/FluxAspectRatio.vue.d.ts.map +0 -1
- package/dist/component/FluxAutoGrid.vue.d.ts.map +0 -1
- package/dist/component/FluxAvatar.vue.d.ts.map +0 -1
- package/dist/component/FluxBadge.vue.d.ts.map +0 -1
- package/dist/component/FluxBadgeStack.vue.d.ts.map +0 -1
- package/dist/component/FluxBorderShine.vue.d.ts.map +0 -1
- package/dist/component/FluxBoxedIcon.vue.d.ts.map +0 -1
- package/dist/component/FluxButton.vue.d.ts.map +0 -1
- package/dist/component/FluxButtonGroup.vue.d.ts.map +0 -1
- package/dist/component/FluxButtonStack.vue.d.ts.map +0 -1
- package/dist/component/FluxCalendar.vue.d.ts.map +0 -1
- package/dist/component/FluxCalendarEvent.vue.d.ts.map +0 -1
- package/dist/component/FluxCheckbox.vue.d.ts.map +0 -1
- package/dist/component/FluxChip.vue.d.ts.map +0 -1
- package/dist/component/FluxClickablePane.vue.d.ts.map +0 -1
- package/dist/component/FluxColorPicker.vue.d.ts.map +0 -1
- package/dist/component/FluxColorSelect.vue.d.ts.map +0 -1
- package/dist/component/FluxComment.vue.d.ts.map +0 -1
- package/dist/component/FluxConfirm.vue.d.ts.map +0 -1
- package/dist/component/FluxContainer.vue.d.ts.map +0 -1
- package/dist/component/FluxDataTable.vue.d.ts.map +0 -1
- package/dist/component/FluxDatePicker.vue.d.ts.map +0 -1
- package/dist/component/FluxDestructiveButton.vue.d.ts.map +0 -1
- package/dist/component/FluxDisabled.vue.d.ts.map +0 -1
- package/dist/component/FluxDivider.vue.d.ts.map +0 -1
- package/dist/component/FluxDotPattern.vue.d.ts.map +0 -1
- package/dist/component/FluxDropZone.vue.d.ts.map +0 -1
- package/dist/component/FluxDynamicView.vue.d.ts.map +0 -1
- package/dist/component/FluxExpandable.vue.d.ts.map +0 -1
- package/dist/component/FluxExpandableGroup.vue.d.ts.map +0 -1
- package/dist/component/FluxFader.vue.d.ts.map +0 -1
- package/dist/component/FluxFaderItem.vue.d.ts.map +0 -1
- package/dist/component/FluxFilter.vue.d.ts.map +0 -1
- package/dist/component/FluxFilterDate.vue.d.ts.map +0 -1
- package/dist/component/FluxFilterDateRange.vue.d.ts.map +0 -1
- package/dist/component/FluxFilterOption.vue.d.ts.map +0 -1
- package/dist/component/FluxFilterOptionAsync.vue.d.ts.map +0 -1
- package/dist/component/FluxFilterOptions.vue.d.ts.map +0 -1
- package/dist/component/FluxFilterOptionsAsync.vue.d.ts.map +0 -1
- package/dist/component/FluxFilterRange.vue.d.ts.map +0 -1
- package/dist/component/FluxFlickeringGrid.vue.d.ts.map +0 -1
- package/dist/component/FluxFlyout.vue.d.ts.map +0 -1
- package/dist/component/FluxFocalPointEditor.vue.d.ts.map +0 -1
- package/dist/component/FluxFocalPointImage.vue.d.ts.map +0 -1
- package/dist/component/FluxForm.vue.d.ts.map +0 -1
- package/dist/component/FluxFormColumn.vue.d.ts.map +0 -1
- package/dist/component/FluxFormDateInput.vue.d.ts.map +0 -1
- package/dist/component/FluxFormDateRangeInput.vue.d.ts.map +0 -1
- package/dist/component/FluxFormDateTimeInput.vue.d.ts.map +0 -1
- package/dist/component/FluxFormField.vue.d.ts.map +0 -1
- package/dist/component/FluxFormFieldAddition.vue.d.ts.map +0 -1
- package/dist/component/FluxFormInput.vue.d.ts.map +0 -1
- package/dist/component/FluxFormInputAddition.vue.d.ts.map +0 -1
- package/dist/component/FluxFormInputGroup.vue.d.ts.map +0 -1
- package/dist/component/FluxFormPinInput.vue.d.ts.map +0 -1
- package/dist/component/FluxFormRangeSlider.vue.d.ts.map +0 -1
- package/dist/component/FluxFormRow.vue.d.ts.map +0 -1
- package/dist/component/FluxFormSection.vue.d.ts.map +0 -1
- package/dist/component/FluxFormSelect.vue.d.ts.map +0 -1
- package/dist/component/FluxFormSelectAsync.vue.d.ts.map +0 -1
- package/dist/component/FluxFormSlider.vue.d.ts.map +0 -1
- package/dist/component/FluxFormTextArea.vue.d.ts.map +0 -1
- package/dist/component/FluxFormTimeZonePicker.vue.d.ts.map +0 -1
- package/dist/component/FluxGallery.vue.d.ts.map +0 -1
- package/dist/component/FluxGalleryItem.vue.d.ts.map +0 -1
- package/dist/component/FluxGrid.vue.d.ts.map +0 -1
- package/dist/component/FluxGridColumn.vue.d.ts.map +0 -1
- package/dist/component/FluxGridPattern.vue.d.ts.map +0 -1
- package/dist/component/FluxIcon.vue.d.ts.map +0 -1
- package/dist/component/FluxInfo.vue.d.ts.map +0 -1
- package/dist/component/FluxInfoStack.vue.d.ts.map +0 -1
- package/dist/component/FluxLegend.vue.d.ts.map +0 -1
- package/dist/component/FluxLink.vue.d.ts.map +0 -1
- package/dist/component/FluxMenu.vue.d.ts.map +0 -1
- package/dist/component/FluxMenuGroup.vue.d.ts.map +0 -1
- package/dist/component/FluxMenuItem.vue.d.ts.map +0 -1
- package/dist/component/FluxMenuOptions.vue.d.ts.map +0 -1
- package/dist/component/FluxMenuSubHeader.vue.d.ts.map +0 -1
- package/dist/component/FluxMenuTitle.vue.d.ts.map +0 -1
- package/dist/component/FluxNotice.vue.d.ts.map +0 -1
- package/dist/component/FluxNoticeStack.vue.d.ts.map +0 -1
- package/dist/component/FluxOverlay.vue.d.ts.map +0 -1
- package/dist/component/FluxPagination.vue.d.ts.map +0 -1
- package/dist/component/FluxPaginationBar.vue.d.ts.map +0 -1
- package/dist/component/FluxPane.vue.d.ts.map +0 -1
- package/dist/component/FluxPaneBody.vue.d.ts.map +0 -1
- package/dist/component/FluxPaneDeck.vue.d.ts +0 -23
- package/dist/component/FluxPaneDeck.vue.d.ts.map +0 -1
- package/dist/component/FluxPaneFooter.vue.d.ts.map +0 -1
- package/dist/component/FluxPaneGroup.vue.d.ts.map +0 -1
- package/dist/component/FluxPaneHeader.vue.d.ts.map +0 -1
- package/dist/component/FluxPaneIllustration.vue.d.ts.map +0 -1
- package/dist/component/FluxPaneMedia.vue.d.ts.map +0 -1
- package/dist/component/FluxPercentageBar.vue.d.ts.map +0 -1
- package/dist/component/FluxPersona.vue.d.ts.map +0 -1
- package/dist/component/FluxPlaceholder.vue.d.ts.map +0 -1
- package/dist/component/FluxPressable.vue.d.ts.map +0 -1
- package/dist/component/FluxPrimaryButton.vue.d.ts.map +0 -1
- package/dist/component/FluxProgressBar.vue.d.ts.map +0 -1
- package/dist/component/FluxPrompt.vue.d.ts.map +0 -1
- package/dist/component/FluxPublishButton.vue.d.ts.map +0 -1
- package/dist/component/FluxQuantitySelector.vue.d.ts.map +0 -1
- package/dist/component/FluxRemove.vue.d.ts.map +0 -1
- package/dist/component/FluxRoot.vue.d.ts.map +0 -1
- package/dist/component/FluxSecondaryButton.vue.d.ts.map +0 -1
- package/dist/component/FluxSegmentedControl.vue.d.ts.map +0 -1
- package/dist/component/FluxSegmentedView.vue.d.ts.map +0 -1
- package/dist/component/FluxSeparator.vue.d.ts.map +0 -1
- package/dist/component/FluxSlideOver.vue.d.ts.map +0 -1
- package/dist/component/FluxSnackbar.vue.d.ts.map +0 -1
- package/dist/component/FluxSnackbarProvider.vue.d.ts.map +0 -1
- package/dist/component/FluxSpacer.vue.d.ts.map +0 -1
- package/dist/component/FluxSpacing.vue.d.ts.map +0 -1
- package/dist/component/FluxSpinner.vue.d.ts.map +0 -1
- package/dist/component/FluxSplitButton.vue.d.ts.map +0 -1
- package/dist/component/FluxStack.vue.d.ts.map +0 -1
- package/dist/component/FluxStatistic.vue.d.ts.map +0 -1
- package/dist/component/FluxStepper.vue.d.ts.map +0 -1
- package/dist/component/FluxStepperStep.vue.d.ts.map +0 -1
- package/dist/component/FluxStepperSteps.vue.d.ts.map +0 -1
- package/dist/component/FluxTab.vue.d.ts.map +0 -1
- package/dist/component/FluxTabBar.vue.d.ts.map +0 -1
- package/dist/component/FluxTabBarItem.vue.d.ts.map +0 -1
- package/dist/component/FluxTable.vue.d.ts.map +0 -1
- package/dist/component/FluxTableActions.vue.d.ts.map +0 -1
- package/dist/component/FluxTableCell.vue.d.ts.map +0 -1
- package/dist/component/FluxTableHeader.vue.d.ts.map +0 -1
- package/dist/component/FluxTableRow.vue.d.ts.map +0 -1
- package/dist/component/FluxTabs.vue.d.ts.map +0 -1
- package/dist/component/FluxTag.vue.d.ts.map +0 -1
- package/dist/component/FluxTagStack.vue.d.ts.map +0 -1
- package/dist/component/FluxTicks.vue.d.ts.map +0 -1
- package/dist/component/FluxTimeline.vue.d.ts.map +0 -1
- package/dist/component/FluxTimelineItem.vue.d.ts.map +0 -1
- package/dist/component/FluxToggle.vue.d.ts.map +0 -1
- package/dist/component/FluxToolbar.vue.d.ts.map +0 -1
- package/dist/component/FluxToolbarGroup.vue.d.ts.map +0 -1
- package/dist/component/FluxTooltip.vue.d.ts.map +0 -1
- package/dist/component/FluxTooltipProvider.vue.d.ts.map +0 -1
- package/dist/component/FluxWindow.vue.d.ts.map +0 -1
- package/dist/component/index.d.ts.map +0 -1
- package/dist/component/primitive/Anchor.vue.d.ts.map +0 -1
- package/dist/component/primitive/AnchorPopup.vue.d.ts.map +0 -1
- package/dist/component/primitive/CoordinatePicker.vue.d.ts.map +0 -1
- package/dist/component/primitive/CoordinatePickerThumb.vue.d.ts.map +0 -1
- package/dist/component/primitive/FilterItem.vue.d.ts.map +0 -1
- package/dist/component/primitive/FilterMenuRenderer.d.ts.map +0 -1
- package/dist/component/primitive/FilterOptionBase.vue.d.ts.map +0 -1
- package/dist/component/primitive/SelectBase.vue.d.ts.map +0 -1
- package/dist/component/primitive/SliderBase.vue.d.ts.map +0 -1
- package/dist/component/primitive/SliderThumb.vue.d.ts.map +0 -1
- package/dist/component/primitive/SliderTrack.vue.d.ts.map +0 -1
- package/dist/component/primitive/VNodeRenderer.d.ts.map +0 -1
- package/dist/component/primitive/index.d.ts.map +0 -1
- package/dist/composable/index.d.ts.map +0 -1
- package/dist/composable/private/index.d.ts.map +0 -1
- package/dist/composable/private/useFormSelect.d.ts.map +0 -1
- package/dist/composable/private/useLoaded.d.ts +0 -5
- package/dist/composable/private/useLoaded.d.ts.map +0 -1
- package/dist/composable/private/useTranslate.d.ts.map +0 -1
- package/dist/composable/useBreakpoints.d.ts.map +0 -1
- package/dist/composable/useDisabled.d.ts.map +0 -1
- package/dist/composable/useDisabledInjection.d.ts.map +0 -1
- package/dist/composable/useExpandableGroupInjection.d.ts.map +0 -1
- package/dist/composable/useFilterInjection.d.ts.map +0 -1
- package/dist/composable/useFlyoutInjection.d.ts.map +0 -1
- package/dist/composable/useFormFieldInjection.d.ts.map +0 -1
- package/dist/composable/useTableInjection.d.ts.map +0 -1
- package/dist/data/di.d.ts.map +0 -1
- package/dist/data/filter.d.ts.map +0 -1
- package/dist/data/helper.d.ts.map +0 -1
- package/dist/data/i18n.d.ts.map +0 -1
- package/dist/data/iconRegistry.d.ts.map +0 -1
- package/dist/data/index.d.ts.map +0 -1
- package/dist/data/inputMask.d.ts.map +0 -1
- package/dist/data/store.d.ts.map +0 -1
- package/dist/flux.css +0 -1
- package/dist/flux.js +0 -11402
- package/dist/flux.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/transition/FluxAutoHeightTransition.vue.d.ts.map +0 -1
- package/dist/transition/FluxAutoWidthTransition.vue.d.ts.map +0 -1
- package/dist/transition/FluxBreakthroughTransition.vue.d.ts.map +0 -1
- package/dist/transition/FluxFadeTransition.vue.d.ts.map +0 -1
- package/dist/transition/FluxOverlayTransition.vue.d.ts.map +0 -1
- package/dist/transition/FluxRouteTransition.vue.d.ts.map +0 -1
- package/dist/transition/FluxSlideOverTransition.vue.d.ts.map +0 -1
- package/dist/transition/FluxTooltipTransition.vue.d.ts.map +0 -1
- package/dist/transition/FluxVerticalWindowTransition.vue.d.ts.map +0 -1
- package/dist/transition/FluxWindowTransition.vue.d.ts.map +0 -1
- package/dist/transition/index.d.ts.map +0 -1
- package/dist/util/createDialogRenderer.d.ts.map +0 -1
- package/dist/util/createLabelForDateRange.d.ts.map +0 -1
- package/dist/util/index.d.ts.map +0 -1
- package/src/component/FluxPaneDeck.vue +0 -24
- package/src/composable/private/useLoaded.ts +0 -21
- package/src/css/component/base/Grid.module.scss +0 -8
- package/src/image/avatar-mask.svg +0 -3
- package/tsconfig.json +0 -45
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["r","t","n","r","p","m","g","x","j","M","N","P","ee","F","I","L","R","V","W","G","K","Y","X","Z","Q","$","num","hue","c","num","c","definition","linearize","gamma","fn","fn","definition","rgb","M","M","M","definition","k","e","k","e","fn","e","k","f","e","k","definition","definition","definition","hue","c","definition","definition","definition","parseHwb","definition","p","d0","n","p","n","definition","definition","k","e","fn","e","k","f","e","k","definition","definition","lab","definition","definition","lch","u_fn","v_fn","un","vn","e","k","un","vn","k","definition","definition","rgb","definition","modeHsl","modeHsv","definition","lab","definition","lch","definition","rgb","gamma","linearize","definition","rgb","α","β","definition","rgb","transfer","definition","definition","definition","modeA98","modeCubehelix","modeDlab","modeDlch","modeHsi","modeHsl","modeHsv","modeHwb","modeItp","modeJab","modeJch","modeLab","modeLab65","modeLch","modeLch65","modeLchuv","modeLrgb","modeLuv","modeOklab","modeOklch","modeP3","modeProphoto","modeRec2020","modeRgb","modeXyb","modeXyz50","modeXyz65","modeYiq","c","ne","l","u","d","f","p","m","h","g","_","re","ie","v","y","ae","b","x","S","C","w","T","E","le","D","ue","O","k","A","de","fe","pe","a","o","me","he","ge","j","n","i","r","_e","ve","B","V","#e","#t","U","#n","#r","#i","W","G","K","q","J","Y","X","e","root","Symbol","root","nativeObjectToString","symToStringTag","Symbol","Symbol","Symbol","rsAstralRange","rsComboRange","rsVarRange","rsCombo","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsZWJ","reOptMod","rsOptVar","rsOptJoin","rsSeq","O","f","k","A","G","l","y","K","c","o","q","n","e","Y","r","t","X","u","Z","se","de","fe","pe","he","i","a","e","o","s","n","c","d","u","l","f","p","r","m","h","_","t","v","y","b","x","#t","#e","S","g","u","s","d","_","v","f","y","b","e","w","T","c","r","l","E","D","o","i","n","k","m","A","t","j","a","i","a","o","h","#e","#t"],"sources":["../../../node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../src/composable/useBreakpoints.ts","../src/data/di.ts","../../../node_modules/.bun/@basmilius+utils@3.19.0/node_modules/@basmilius/utils/dist/index.mjs","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/rgb/parseNumber.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/colors/named.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/rgb/parseNamed.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/rgb/parseHex.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/util/regex.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/rgb/parseRgbLegacy.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/_prepare.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/converter.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/modes.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/parse.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/rgb/parseRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/rgb/parseTransparent.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/interpolate/lerp.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/interpolate/piecewise.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/interpolate/linear.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/fixup/alpha.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/rgb/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/a98/convertA98ToXyz65.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/a98/convertXyz65ToA98.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lrgb/convertRgbToLrgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyz65/convertRgbToXyz65.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lrgb/convertLrgbToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyz65/convertXyz65ToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/a98/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/util/normalizeHue.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/fixup/hue.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/cubehelix/constants.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/cubehelix/convertRgbToCubehelix.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/cubehelix/convertCubehelixToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/difference.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/average.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/cubehelix/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lch/convertLabToLch.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lch/convertLchToLab.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyz65/constants.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/constants.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lab65/convertLab65ToXyz65.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lab65/convertLab65ToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lab65/convertXyz65ToLab65.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lab65/convertRgbToLab65.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/dlch/constants.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/dlch/convertDlchToLab65.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/dlch/convertLab65ToDlch.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/dlab/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/dlch/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hsi/convertHsiToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hsi/convertRgbToHsi.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hsi/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hsl/convertHslToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hsl/convertRgbToHsl.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/util/hue.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hsl/parseHslLegacy.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hsl/parseHsl.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hsl/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hsv/convertHsvToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hsv/convertRgbToHsv.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hsv/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hwb/convertHwbToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hwb/convertRgbToHwb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hwb/parseHwb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hwb/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/hdr/transfer.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/itp/convertItpToXyz65.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/itp/convertXyz65ToItp.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/itp/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/jab/convertXyz65ToJab.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/jab/convertJabToXyz65.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/jab/convertRgbToJab.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/jab/convertJabToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/jab/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/jch/convertJabToJch.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/jch/convertJchToJab.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/jch/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyz50/constants.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lab/convertLabToXyz50.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyz50/convertXyz50ToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lab/convertLabToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyz50/convertRgbToXyz50.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lab/convertXyz50ToLab.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lab/convertRgbToLab.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lab/parseLab.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lab/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lab65/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lch/parseLch.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lch/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lch65/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lchuv/convertLuvToLchuv.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lchuv/convertLchuvToLuv.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/luv/convertXyz50ToLuv.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/luv/convertLuvToXyz50.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lchuv/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/lrgb/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/luv/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/oklab/convertLrgbToOklab.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/oklab/convertRgbToOklab.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/oklab/convertOklabToLrgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/oklab/convertOklabToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/okhsl/helpers.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/okhsl/convertOklabToOkhsl.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/okhsl/convertOkhslToOklab.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/okhsl/modeOkhsl.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/okhsv/convertOklabToOkhsv.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/okhsv/convertOkhsvToOklab.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/okhsv/modeOkhsv.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/oklab/parseOklab.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/oklab/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/oklch/parseOklch.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/oklch/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/p3/convertP3ToXyz65.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/p3/convertXyz65ToP3.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/p3/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/prophoto/convertXyz50ToProphoto.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/prophoto/convertProphotoToXyz50.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/prophoto/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/rec2020/convertXyz65ToRec2020.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/rec2020/convertRec2020ToXyz65.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/rec2020/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyb/constants.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyb/convertRgbToXyb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyb/convertXybToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyb/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyz50/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyz65/convertXyz65ToXyz50.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyz65/convertXyz50ToXyz65.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/xyz65/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/yiq/convertRgbToYiq.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/yiq/convertYiqToRgb.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/yiq/definition.js","../../../node_modules/.bun/culori@4.0.2/node_modules/culori/src/index.js","../../../node_modules/.bun/@basmilius+http-client@3.19.0+7524df1edfed9f02/node_modules/@basmilius/http-client/dist/index.mjs","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_root.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/isArray.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/toString.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_baseSlice.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_castSlice.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hasUnicode.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_asciiToArray.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_unicodeToArray.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_stringToArray.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_createCaseFirst.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/upperFirst.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/capitalize.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_arrayReduce.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_basePropertyOf.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_deburrLetter.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/deburr.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_asciiWords.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_hasUnicodeWord.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_unicodeWords.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/words.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/_createCompounder.js","../../../node_modules/.bun/lodash-es@4.18.1/node_modules/lodash-es/camelCase.js","../../../node_modules/.bun/@basmilius+common@3.19.0+594c8e13831cfe0c/node_modules/@basmilius/common/dist/index.mjs","../src/composable/private/useAsyncFilterOptions.ts","../src/composable/private/useDateFlyout.ts","../../internals/dist/util-CwaOsSvo.js","../../internals/dist/composable-CJXC7sly.js","../../internals/dist/data/index.js","../../internals/dist/directive-Dprka-AO.js","../src/composable/private/useDropdownPopup.ts","../src/composable/private/useFormSelect.ts","../src/composable/private/useTranslate.ts","../src/composable/private/useCommandPalette.ts","../src/composable/private/useFilterOption.ts","../src/composable/private/useTreeView.ts","../src/css/component/Overlay.module.scss","../src/util/createDialogRenderer.ts","../src/util/createLabelForDateRange.ts","../src/data/filter.ts","../src/data/helper.ts","../src/data/i18n.ts","../src/data/iconRegistry.ts","../src/data/store.ts","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/core/utils.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/core/action-details.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/core/holder.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/masked/factory.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/controls/mask-element.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/controls/html-mask-element.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/controls/html-input-mask-element.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/controls/html-contenteditable-mask-element.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/controls/input-history.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/controls/input.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/core/change-details.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/core/continuous-tail-details.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/masked/base.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/masked/pattern/chunk-tail-details.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/masked/pattern/cursor.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/masked/pattern/fixed-definition.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/masked/pattern/input-definition.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/masked/regexp.js","../../../node_modules/.bun/imask@7.6.1/node_modules/imask/esm/masked/pattern.js","../src/data/inputMask.ts","../src/composable/useDisabledInjection.ts","../src/composable/useDisabled.ts","../src/composable/useAdaptiveGroupInjection.ts","../src/composable/useExpandableGroupInjection.ts","../src/composable/useFilterInjection.ts","../src/composable/useFlyoutInjection.ts","../src/composable/useFormFieldInjection.ts","../src/composable/useTableInjection.ts","../src/composable/useTooltipInjection.ts","../src/css/component/base/Pane.module.scss","../src/css/component/Icon.module.scss","../src/component/FluxIcon.vue","../src/component/FluxIcon.vue","../src/component/FluxPressable.vue","../src/component/FluxPressable.vue","../src/css/component/Spinner.module.scss","../src/component/FluxSpinner.vue","../src/component/FluxSpinner.vue","../src/css/component/base/Button.module.scss","../src/component/FluxButton.vue","../src/component/FluxButton.vue","../src/css/component/Action.module.scss","../src/component/FluxAction.vue","../src/component/FluxAction.vue","../src/css/component/Button.module.scss","../src/component/FluxButtonGroup.vue","../src/component/FluxButtonGroup.vue","../src/component/FluxDestructiveButton.vue","../src/component/FluxDestructiveButton.vue","../src/css/component/Pane.module.scss","../src/component/FluxPane.vue","../src/component/FluxPane.vue","../src/css/component/Flyout.module.scss","../src/component/FluxFlyout.vue","../src/component/FluxFlyout.vue","../src/component/FluxSecondaryButton.vue","../src/component/FluxSecondaryButton.vue","../src/css/component/Layout.module.scss","../src/component/FluxSpacer.vue","../src/component/FluxSpacer.vue","../src/component/FluxStack.vue","../src/component/FluxStack.vue","../src/component/FluxTooltip.vue","../src/component/FluxTooltip.vue","../src/component/FluxActionBar.vue","../src/component/FluxActionBar.vue","../src/component/FluxButtonStack.vue","../src/component/FluxButtonStack.vue","../src/component/FluxPaneBody.vue","../src/component/FluxPaneBody.vue","../src/component/FluxActionPane.vue","../src/component/FluxActionPane.vue","../src/component/FluxActionStack.vue","../src/component/FluxActionStack.vue","../src/css/component/AdaptiveSlot.module.scss","../src/component/FluxAdaptiveGroup.vue","../src/component/FluxAdaptiveGroup.vue","../src/component/FluxAdaptiveSlot.vue","../src/component/FluxAdaptiveSlot.vue","../src/css/component/Visual.module.scss","../src/component/FluxAnimatedColors.vue","../src/component/FluxAnimatedColors.vue","../src/component/FluxAspectRatio.vue","../src/component/FluxAspectRatio.vue","../src/transition/FluxAutoHeightTransition.vue","../src/transition/FluxAutoHeightTransition.vue","../src/transition/FluxAutoWidthTransition.vue","../src/transition/FluxAutoWidthTransition.vue","../src/css/component/Transition.module.scss","../src/transition/FluxBreakthroughTransition.vue","../src/transition/FluxBreakthroughTransition.vue","../src/transition/FluxFadeTransition.vue","../src/transition/FluxFadeTransition.vue","../src/transition/FluxOverlayTransition.vue","../src/transition/FluxOverlayTransition.vue","../src/transition/FluxRouteTransition.vue","../src/transition/FluxRouteTransition.vue","../src/transition/FluxSlideOverTransition.vue","../src/transition/FluxSlideOverTransition.vue","../src/transition/FluxTooltipTransition.vue","../src/transition/FluxTooltipTransition.vue","../src/transition/FluxVerticalWindowTransition.vue","../src/transition/FluxVerticalWindowTransition.vue","../src/transition/FluxWindowTransition.vue","../src/transition/FluxWindowTransition.vue","../src/css/component/Avatar.module.scss","../src/component/FluxAvatar.vue","../src/component/FluxAvatar.vue","../src/css/component/Badge.module.scss","../src/component/FluxBadge.vue","../src/component/FluxBadge.vue","../src/component/FluxBadgeStack.vue","../src/component/FluxBadgeStack.vue","../src/component/FluxBorderShine.vue","../src/component/FluxBorderShine.vue","../src/component/FluxBoxedIcon.vue","../src/component/FluxBoxedIcon.vue","../src/component/primitive/Anchor.vue","../src/component/primitive/Anchor.vue","../src/component/primitive/AnchorPopup.vue","../src/component/primitive/AnchorPopup.vue","../src/component/FluxPaneFooter.vue","../src/component/FluxPaneFooter.vue","../src/component/FluxPaneHeader.vue","../src/component/FluxPaneHeader.vue","../src/component/primitive/DialogLayout.vue","../src/component/primitive/DialogLayout.vue","../src/css/component/Filter.module.scss","../src/component/primitive/FilterBadge.vue","../src/component/primitive/FilterBadge.vue","../src/css/component/Menu.module.scss","../src/component/FluxMenuItem.vue","../src/component/FluxMenuItem.vue","../src/component/primitive/FilterItem.vue","../src/component/primitive/FilterItem.vue","../src/css/component/Form.module.scss","../src/component/FluxFormInput.vue","../src/component/FluxFormInput.vue","../src/component/FluxMenuGroup.vue","../src/component/FluxMenuGroup.vue","../src/component/FluxMenuSubHeader.vue","../src/component/FluxMenuSubHeader.vue","../src/component/primitive/FilterOptionBase.vue","../src/component/primitive/FilterOptionBase.vue","../src/component/FluxMenu.vue","../src/component/FluxMenu.vue","../src/component/FluxTag.vue","../src/component/FluxTag.vue","../src/component/primitive/SelectBase.vue","../src/component/primitive/SelectBase.vue","../src/css/component/primitive/Slider.module.scss","../src/component/FluxTicks.vue","../src/component/FluxTicks.vue","../src/component/primitive/SliderBase.vue","../src/component/primitive/SliderBase.vue","../src/component/primitive/SliderThumb.vue","../src/component/primitive/SliderThumb.vue","../src/component/primitive/SliderTrack.vue","../src/component/primitive/SliderTrack.vue","../src/css/component/primitive/TreeNode.module.scss","../src/component/primitive/TreeNodeRenderer.vue","../src/component/primitive/TreeNodeRenderer.vue","../src/css/component/Divider.module.scss","../src/component/FluxSeparator.vue","../src/component/FluxSeparator.vue","../src/component/primitive/FilterMenuRenderer.ts","../src/component/primitive/VNodeRenderer.ts","../src/css/component/Calendar.module.scss","../src/css/component/DatePicker.module.scss","../src/component/FluxCalendar.vue","../src/component/FluxCalendar.vue","../src/component/FluxCalendarEvent.vue","../src/component/FluxCalendarEvent.vue","../src/component/FluxCheckbox.vue","../src/component/FluxCheckbox.vue","../src/css/component/Chip.module.scss","../src/component/FluxChip.vue","../src/component/FluxChip.vue","../src/component/FluxClickablePane.vue","../src/component/FluxClickablePane.vue","../src/css/component/CommandPalette.module.scss","../src/component/FluxCommandPaletteGroup.vue","../src/component/FluxCommandPaletteGroup.vue","../src/component/FluxCommandPaletteItem.vue","../src/component/FluxCommandPaletteItem.vue","../src/component/FluxCommandPalette.vue","../src/component/FluxCommandPalette.vue","../src/css/component/Comment.module.scss","../src/component/FluxComment.vue","../src/component/FluxComment.vue","../src/css/component/primitive/CoordinatePicker.module.scss","../src/component/primitive/CoordinatePickerThumb.vue","../src/component/primitive/CoordinatePickerThumb.vue","../src/component/primitive/CoordinatePicker.vue","../src/component/primitive/CoordinatePicker.vue","../src/component/FluxFormFieldAddition.vue","../src/component/FluxFormFieldAddition.vue","../src/component/FluxFormField.vue","../src/component/FluxFormField.vue","../src/component/FluxFormSlider.vue","../src/component/FluxFormSlider.vue","../src/css/component/Color.module.scss","../src/component/FluxColorPicker.vue","../src/component/FluxColorPicker.vue","../src/component/FluxPrimaryButton.vue","../src/component/FluxPrimaryButton.vue","../src/component/FluxColorSelect.vue","../src/component/FluxColorSelect.vue","../src/component/FluxColumn.vue","../src/component/FluxColumn.vue","../src/component/FluxContainer.vue","../src/component/FluxContainer.vue","../src/component/FluxFormSelect.vue","../src/component/FluxFormSelect.vue","../src/css/component/Pagination.module.scss","../src/component/FluxPaginationButton.vue","../src/component/FluxPaginationButton.vue","../src/component/FluxPagination.vue","../src/component/FluxPagination.vue","../src/component/FluxPaginationBar.vue","../src/component/FluxPaginationBar.vue","../src/css/component/Table.module.scss","../src/component/FluxTableCell.vue","../src/component/FluxTableCell.vue","../src/component/FluxTableRow.vue","../src/component/FluxTableRow.vue","../src/component/FluxTable.vue","../src/component/FluxTable.vue","../src/component/FluxDataTable.vue","../src/component/FluxDataTable.vue","../src/component/FluxDatePicker.vue","../src/component/FluxDatePicker.vue","../src/component/FluxDisabled.vue","../src/component/FluxDisabled.vue","../src/component/FluxDivider.vue","../src/component/FluxDivider.vue","../src/component/FluxDotPattern.vue","../src/component/FluxDotPattern.vue","../src/css/component/DropZone.module.scss","../src/component/FluxDropZone.vue","../src/component/FluxDropZone.vue","../src/component/FluxDynamicView.vue","../src/component/FluxDynamicView.vue","../src/css/component/Expandable.module.scss","../src/component/FluxExpandable.vue","../src/component/FluxExpandable.vue","../src/component/FluxExpandableGroup.vue","../src/component/FluxExpandableGroup.vue","../src/css/component/Fader.module.scss","../src/component/FluxFader.vue","../src/component/FluxFader.vue","../src/component/FluxFaderItem.vue","../src/component/FluxFaderItem.vue","../src/component/FluxFilterBase.vue","../src/component/FluxFilterBase.vue","../src/component/FluxWindow.vue","../src/component/FluxWindow.vue","../src/component/FluxFilterWindow.vue","../src/component/FluxFilterWindow.vue","../src/component/FluxFilter.vue","../src/component/FluxFilter.vue","../src/css/component/OverflowBar.module.scss","../src/component/FluxOverflowBar.vue","../src/component/FluxOverflowBar.vue","../src/component/FluxFilterBar.vue","../src/component/FluxFilterBar.vue","../src/component/FluxFilterDate.vue","../src/component/FluxFilterDate.vue","../src/component/FluxFilterDateRange.vue","../src/component/FluxFilterDateRange.vue","../src/component/FluxFilterOption.vue","../src/component/FluxFilterOption.vue","../src/component/FluxFilterOptionAsync.vue","../src/component/FluxFilterOptionAsync.vue","../src/component/FluxFilterOptions.vue","../src/component/FluxFilterOptions.vue","../src/component/FluxFilterOptionsAsync.vue","../src/component/FluxFilterOptionsAsync.vue","../src/component/FluxFormColumn.vue","../src/component/FluxFormColumn.vue","../src/component/FluxFilterRange.vue","../src/component/FluxFilterRange.vue","../src/component/FluxFlickeringGrid.vue","../src/component/FluxFlickeringGrid.vue","../src/css/component/FocalPoint.module.scss","../src/component/FluxFocalPointEditor.vue","../src/component/FluxFocalPointEditor.vue","../src/component/FluxFocalPointImage.vue","../src/component/FluxFocalPointImage.vue","../src/component/FluxForm.vue","../src/component/FluxForm.vue","../src/component/FluxFormInputGroup.vue","../src/component/FluxFormInputGroup.vue","../src/component/FluxFormDateInput.vue","../src/component/FluxFormDateInput.vue","../src/component/FluxFormDateRangeInput.vue","../src/component/FluxFormDateRangeInput.vue","../src/component/FluxFormDateTimeInput.vue","../src/component/FluxFormDateTimeInput.vue","../src/component/FluxFormGrid.vue","../src/component/FluxFormGrid.vue","../src/component/FluxFormInputAddition.vue","../src/component/FluxFormInputAddition.vue","../src/component/FluxFormPinInput.vue","../src/component/FluxFormPinInput.vue","../src/component/FluxFormRangeSlider.vue","../src/component/FluxFormRangeSlider.vue","../src/component/FluxFormRow.vue","../src/component/FluxFormRow.vue","../src/component/FluxFormSection.vue","../src/component/FluxFormSection.vue","../src/component/FluxFormSelectAsync.vue","../src/component/FluxFormSelectAsync.vue","../src/component/FluxFormTextArea.vue","../src/component/FluxFormTextArea.vue","../src/data/timeZones.ts","../src/component/FluxFormTimeZonePicker.vue","../src/component/FluxFormTimeZonePicker.vue","../src/css/component/TreeViewSelect.module.scss","../src/component/FluxFormTreeViewSelect.vue","../src/component/FluxFormTreeViewSelect.vue","../src/css/component/Remove.module.scss","../src/component/FluxRemove.vue","../src/component/FluxRemove.vue","../src/css/component/Placeholder.module.scss","../src/css/component/Gallery.module.scss","../src/component/FluxGalleryItem.vue","../src/component/FluxGalleryItem.vue","../src/component/FluxGallery.vue","../src/component/FluxGallery.vue","../src/css/component/Grid.module.scss","../src/component/FluxGrid.vue","../src/component/FluxGrid.vue","../src/component/FluxGridColumn.vue","../src/component/FluxGridColumn.vue","../src/component/FluxGridPattern.vue","../src/component/FluxGridPattern.vue","../src/css/component/Info.module.scss","../src/component/FluxInfo.vue","../src/component/FluxInfo.vue","../src/component/FluxInfoStack.vue","../src/component/FluxInfoStack.vue","../src/css/component/Item.module.scss","../src/component/FluxItem.vue","../src/component/FluxItem.vue","../src/component/FluxItemActions.vue","../src/component/FluxItemActions.vue","../src/component/FluxItemContent.vue","../src/component/FluxItemContent.vue","../src/component/FluxItemMedia.vue","../src/component/FluxItemMedia.vue","../src/component/FluxItemStack.vue","../src/component/FluxItemStack.vue","../src/css/component/LayerPane.module.scss","../src/component/FluxLayerPane.vue","../src/component/FluxLayerPane.vue","../src/component/FluxLayerPaneSecondary.vue","../src/component/FluxLayerPaneSecondary.vue","../src/css/component/Legend.module.scss","../src/component/FluxLegend.vue","../src/component/FluxLegend.vue","../src/component/FluxLink.vue","../src/component/FluxLink.vue","../src/component/FluxMenuCollapsible.vue","../src/component/FluxMenuCollapsible.vue","../src/component/FluxMenuOptions.vue","../src/component/FluxMenuOptions.vue","../src/component/FluxMenuTitle.vue","../src/component/FluxMenuTitle.vue","../src/css/component/Notice.module.scss","../src/component/FluxNotice.vue","../src/component/FluxNotice.vue","../src/component/FluxNoticeStack.vue","../src/component/FluxNoticeStack.vue","../src/component/FluxOverlay.vue","../src/component/FluxOverlay.vue","../src/component/FluxAlert.vue","../src/component/FluxAlert.vue","../src/component/FluxConfirm.vue","../src/component/FluxConfirm.vue","../src/component/FluxPrompt.vue","../src/component/FluxPrompt.vue","../src/component/FluxOverlayProvider.vue","../src/component/FluxOverlayProvider.vue","../src/component/FluxPaneGroup.vue","../src/component/FluxPaneGroup.vue","../src/component/FluxPaneIllustration.vue","../src/component/FluxPaneIllustration.vue","../src/component/FluxPaneMedia.vue","../src/component/FluxPaneMedia.vue","../src/css/component/PercentageBar.module.scss","../src/component/FluxPercentageBar.vue","../src/component/FluxPercentageBar.vue","../src/component/FluxPersona.vue","../src/component/FluxPersona.vue","../src/component/FluxPlaceholder.vue","../src/component/FluxPlaceholder.vue","../src/component/FluxPrimaryLinkButton.vue","../src/component/FluxPrimaryLinkButton.vue","../src/css/component/Progress.module.scss","../src/component/FluxProgressBar.vue","../src/component/FluxProgressBar.vue","../src/component/FluxPublishButton.vue","../src/component/FluxPublishButton.vue","../src/component/FluxQuantitySelector.vue","../src/component/FluxQuantitySelector.vue","../src/css/component/Snackbar.module.scss","../src/component/FluxSnackbar.vue","../src/component/FluxSnackbar.vue","../src/component/FluxSnackbarProvider.vue","../src/component/FluxSnackbarProvider.vue","../src/css/component/Tooltip.module.scss","../src/component/FluxTooltipProvider.vue","../src/component/FluxTooltipProvider.vue","../src/css/component/Root.module.scss","../src/component/FluxRoot.vue","../src/component/FluxRoot.vue","../src/component/FluxRow.vue","../src/component/FluxRow.vue","../src/component/FluxSecondaryLinkButton.vue","../src/component/FluxSecondaryLinkButton.vue","../src/css/component/SegmentedControl.module.scss","../src/component/FluxSegmentedControl.vue","../src/component/FluxSegmentedControl.vue","../src/component/FluxSegmentedView.vue","../src/component/FluxSegmentedView.vue","../src/component/FluxSlideOver.vue","../src/component/FluxSlideOver.vue","../src/component/FluxSpacing.vue","../src/component/FluxSpacing.vue","../src/component/FluxSplitButton.vue","../src/component/FluxSplitButton.vue","../src/css/component/Statistic.module.scss","../src/component/FluxStatistic.vue","../src/component/FluxStatistic.vue","../src/css/component/base/Effect.module.scss","../src/css/component/Stepper.module.scss","../src/component/FluxStepperSteps.vue","../src/component/FluxStepperSteps.vue","../src/component/FluxStepper.vue","../src/component/FluxStepper.vue","../src/component/FluxStepperStep.vue","../src/component/FluxStepperStep.vue","../src/css/component/Tab.module.scss","../src/component/FluxTab.vue","../src/component/FluxTab.vue","../src/component/FluxTabBar.vue","../src/component/FluxTabBar.vue","../src/component/FluxTabBarItem.vue","../src/component/FluxTabBarItem.vue","../src/component/FluxTabs.vue","../src/component/FluxTabs.vue","../src/component/FluxTableActions.vue","../src/component/FluxTableActions.vue","../src/component/FluxTableBar.vue","../src/component/FluxTableBar.vue","../src/component/FluxTableHeader.vue","../src/component/FluxTableHeader.vue","../src/component/FluxTagStack.vue","../src/component/FluxTagStack.vue","../src/css/component/Timeline.module.scss","../src/component/FluxTimeline.vue","../src/component/FluxTimeline.vue","../src/component/FluxTimelineItem.vue","../src/component/FluxTimelineItem.vue","../src/component/FluxToggle.vue","../src/component/FluxToggle.vue","../src/css/component/Toolbar.module.scss","../src/component/FluxToolbar.vue","../src/component/FluxToolbar.vue","../src/component/FluxToolbarGroup.vue","../src/component/FluxToolbarGroup.vue","../src/css/component/TreeView.module.scss","../src/component/FluxTreeView.vue","../src/component/FluxTreeView.vue"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import type { Ref } from 'vue';\nimport { onMounted, onUnmounted, ref } from 'vue';\n\nconst BREAKPOINTS = {\n xs: 0,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280\n} as const;\n\ntype Breakpoint = keyof typeof BREAKPOINTS;\n\nexport default function () {\n const currentBreakpoint = ref<Breakpoint | null>(null);\n const breakpointRefs = Object.fromEntries(\n Object.keys(BREAKPOINTS).map((key) => [key, ref(false)])\n ) as Record<Breakpoint, Ref<boolean>>;\n\n const updateBreakpoints = () => {\n const width = window.innerWidth;\n let activeBreakpoint: Breakpoint | null = null;\n\n for (const [key, value] of Object.entries(BREAKPOINTS).reverse() as [\n Breakpoint,\n number\n ][]) {\n if (width >= value) {\n activeBreakpoint = key;\n break;\n }\n }\n\n currentBreakpoint.value = activeBreakpoint;\n\n for (const key of Object.keys(BREAKPOINTS) as Breakpoint[]) {\n breakpointRefs[key].value = key === activeBreakpoint;\n }\n };\n\n onMounted(() => {\n updateBreakpoints();\n window.addEventListener('resize', updateBreakpoints, {passive: true});\n });\n\n onUnmounted(() => {\n window.removeEventListener('resize', updateBreakpoints);\n });\n\n return {\n currentBreakpoint,\n ...breakpointRefs\n };\n}\n","import type { FluxFilterState, FluxFilterValue } from '@flux-ui/types';\nimport type { ComponentInternalInstance, InjectionKey, Ref } from 'vue';\n\nexport const FluxAdaptiveGroupInjectionKey: InjectionKey<FluxAdaptiveGroupInjection> = Symbol();\nexport const FluxDisabledInjectionKey: InjectionKey<Ref<boolean>> = Symbol();\nexport const FluxExpandableGroupInjectionKey: InjectionKey<FluxExpandableGroupInjection> = Symbol();\nexport const FluxFlyoutInjectionKey: InjectionKey<FluxFlyoutInjection> = Symbol();\nexport const FluxFilterInjectionKey: InjectionKey<FluxFilterInjection> = Symbol();\nexport const FluxFormFieldInjectionKey: InjectionKey<FluxFormFieldInjection> = Symbol();\nexport const FluxTableInjectionKey: InjectionKey<FluxTableInjection> = Symbol();\nexport const FluxTooltipInjectionKey: InjectionKey<FluxTooltipInjection> = Symbol();\n\nexport type FluxAdaptiveGroupChild = {\n readonly priority: Ref<number>;\n readonly desiredDefaultWidth: Ref<number>;\n readonly desiredFallbackWidth: Ref<number>;\n readonly isDefaultVisible: Ref<boolean>;\n};\n\nexport type FluxAdaptiveGroupInjection = {\n register(uid: number, child: FluxAdaptiveGroupChild): void;\n unregister(uid: number): void;\n};\n\nexport type FluxExpandableGroupInjection = {\n closeAll(): void;\n register(uid: number, expandable: ComponentInternalInstance): void;\n unregister(uid: number): void;\n};\n\nexport type FluxFilterInjection = {\n readonly state: Ref<FluxFilterState>;\n\n back(): void;\n reset(name: string | number): void;\n getValue(name: string | number): FluxFilterValue | undefined;\n hasValue(name: string | number): boolean;\n setValue(name: string | number, value?: FluxFilterValue): void;\n};\n\nexport type FluxFlyoutInjection = {\n readonly isClosing: Ref<boolean>;\n readonly isOpen: Ref<boolean>;\n readonly isOpening: Ref<boolean>;\n};\n\nexport type FluxFormFieldInjection = {\n readonly id?: string;\n};\n\nexport type FluxTableInjection = {\n readonly isBordered: boolean;\n readonly isHoverable: boolean;\n readonly isSeparated: boolean;\n readonly isStriped: boolean;\n};\n\nexport type FluxTooltipInjection = {\n calculate(): void;\n};\n","import{DateTime as e}from\"luxon\";function t(e,t){return Math.round(e/t)*t}function n(e,n,r,i){return Math.max(n,Math.min(r,+t(e*(r-n)+n,i).toPrecision(4)))}function r(e){return e.toString().split(`.`)[1]?.length??0}function i(e,t,n){let r=[],i=[],a;return(...o)=>(clearTimeout(a),a=setTimeout(async()=>{try{let t=await e.apply(n,o);r.forEach(e=>e(t))}catch(e){i.forEach(t=>t(e))}r=[],i=[]},t),new Promise((e,t)=>{r.push(e),i.push(t)}))}function a(e,t){if(!e.startsWith(`https://`)&&!e.startsWith(`http://`)&&!e.startsWith(`blob:`))throw Error(`Unsupported URL scheme for download: ${e}`);let n=document.createElement(`a`);n.download=t,n.href=e,document.body.appendChild(n),n.click(),document.body.removeChild(n)}function o(e,t){let n=URL.createObjectURL(e);a(n,t),URL.revokeObjectURL(n)}function s(e,t,n){o(new Blob([e],{type:n}),t)}function c(e){return e.toLocaleString({year:`numeric`,month:`long`,day:`numeric`})}function l(e){return e.toLocaleString({weekday:`long`,day:`numeric`,month:`long`})}function u(e){return e.toLocaleString({year:`numeric`,month:`long`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}function d(e){return e.toLocaleString({month:`long`})}function f(e){return e.toLocaleString({month:`long`,year:`numeric`})}function p(e,t=0){let n=typeof navigator<`u`?navigator.language:`nl-NL`;return new Intl.NumberFormat(n,{maximumFractionDigits:t,minimumFractionDigits:t}).format(e)}function m(e){return new Intl.NumberFormat(navigator.language,{maximumFractionDigits:1,minimumFractionDigits:0,style:`percent`}).format(e)}function h(e){return e.toLocaleString({hour:`2-digit`,minute:`2-digit`})}function g(e,t,n=5,r){let i=[1,5,10,25,50,100,250,500,1e3,2500,5e3,1e4],a=[.1,.5,...i],o=t-e,s=r?a:i;for(let r of s){let i=Math.floor(o/r),a=[];if(!(i>n+1)){a.push(e);for(let t=1;t<i;++t)a.push(t*r+e);return a.push(t),a}}let c=10**(o.toString().length-1),l=[];for(let t=0;t<o;t+=c)l.push(t+e);return l}function _(e){return e.hour>=6&&e.hour<10?`alert`:e.hour>=10&&e.hour<18?`focused`:e.hour>=18&&e.hour<22?`wind_down`:`sleep`}function v(e){return e.hour>=5&&e.hour<12?`morning`:e.hour>=12&&e.hour<17?`afternoon`:e.hour>=17&&e.hour<22?`evening`:`night`}function y(t){let n=e.now();switch(t){case`afternoon`:return[n.set({hour:12,minute:0,second:0,millisecond:0}),n.set({hour:17,minute:0,second:0,millisecond:0})];case`evening`:return[n.set({hour:17,minute:0,second:0,millisecond:0}),n.set({hour:22,minute:0,second:0,millisecond:0})];case`morning`:return[n.set({hour:5,minute:0,second:0,millisecond:0}),n.set({hour:12,minute:0,second:0,millisecond:0})];case`night`:return[n.set({hour:22,minute:0,second:0,millisecond:0}),n.set({hour:22,minute:0,second:0,millisecond:0}).plus({hours:7})]}}function b(e){let t=e.year%100;t%=19,t>9&&(t-=19),t=t*11%30+e.month+e.day,e.month<3&&(t+=2),e.year<2e3?t-=4:t-=8.3,t=Math.floor(t+.5)%30;let n=(t<0?t+30:t)/29.530588853;return n<.03||n>.97?`new_moon`:n<.22?`waxing_crescent`:n<.28?`first_quarter`:n<.47?`waxing_gibbous`:n<.53?`full_moon`:n<.72?`waning_gibbous`:n<.78?`last_quarter`:`waning_crescent`}function x(e){let t={};do{if(e.name===``)break;for(let[n,r]of Object.entries(Object.getOwnPropertyDescriptors(e.prototype)))[`constructor`,`clone`,`toJSON`].includes(n)||!r.get&&!r.set||(t[n]=r)}while(e=Object.getPrototypeOf(e));return t}const S={af:[`Afghanistan`,33,65],ax:[`Åland Islands`,60.116667,19.9],al:[`Albania`,41,20],dz:[`Algeria`,28,3],as:[`American Samoa`,-14.3333,-170],ad:[`Andorra`,42.5,1.6],ao:[`Angola`,-12.5,18.5],ai:[`Anguilla`,18.25,-63.1667],aq:[`Antarctica`,-90,0],ag:[`Antigua and Barbuda`,17.05,-61.8],ar:[`Argentina`,-34,-64],am:[`Armenia`,40,45],aw:[`Aruba`,12.5,-69.9667],au:[`Australia`,-27,133],at:[`Austria`,47.3333,13.3333],az:[`Azerbaijan`,40.5,47.5],bs:[`Bahamas`,24.25,-76],bh:[`Bahrain`,26,50.55],bd:[`Bangladesh`,24,90],bb:[`Barbados`,13.1667,-59.5333],by:[`Belarus`,53,28],be:[`Belgium`,50.8333,4],bz:[`Belize`,17.25,-88.75],bj:[`Benin`,9.5,2.25],bm:[`Bermuda`,32.3333,-64.75],bt:[`Bhutan`,27.5,90.5],bo:[`Bolivia`,-17,-65],bq:[`Bonaire, Sint Eustatius and Saba`,12.183333,-68.233333],ba:[`Bosnia and Herzegovina`,44,18],bw:[`Botswana`,-22,24],bv:[`Bouvet Island`,-54.4333,3.4],br:[`Brazil`,-10,-55],io:[`British Indian Ocean Territory`,-6,71.5],bn:[`Brunei`,4.5,114.6667],bg:[`Bulgaria`,43,25],bf:[`Burkina Faso`,13,-2],bi:[`Burundi`,-3.5,30],kh:[`Cambodia`,13,105],cm:[`Cameroon`,6,12],ca:[`Canada`,60,-95],cv:[`Cape Verde`,16,-24],ky:[`Cayman Islands`,19.5,-80.5],cf:[`Central African Republic`,7,21],td:[`Chad`,15,19],cl:[`Chile`,-30,-71],cn:[`China`,35,105],cx:[`Christmas Island`,-10.5,105.6667],cc:[`Cocos (Keeling) Islands`,-12.5,96.8333],co:[`Colombia`,4,-72],km:[`Comoros`,-12.1667,44.25],cd:[`Congo, Democratic Republic of the`,0,25],cg:[`Congo`,-1,15],ck:[`Cook Islands`,-21.2333,-159.7667],cr:[`Costa Rica`,10,-84],ci:[`Côte d'Ivoire`,8,-5],hr:[`Croatia`,45.1667,15.5],cu:[`Cuba`,21.5,-80],cw:[`Curaçao`,12.166667,-68.966667],cy:[`Cyprus`,35,33],cz:[`Czech Republic`,49.75,15.5],dk:[`Denmark`,56,10],dj:[`Djibouti`,11.5,43],dm:[`Dominica`,15.4167,-61.3333],do:[`Dominican Republic`,19,-70.6667],ec:[`Ecuador`,-2,-77.5],eg:[`Egypt`,27,30],sv:[`El Salvador`,13.8333,-88.9167],gq:[`Equatorial Guinea`,2,10],er:[`Eritrea`,15,39],ee:[`Estonia`,59,26],et:[`Ethiopia`,8,38],fk:[`Falkland Islands (Malvinas)`,-51.75,-59],fo:[`Faroe Islands`,62,-7],fj:[`Fiji`,-18,175],fi:[`Finland`,64,26],fr:[`France`,46,2],gf:[`French Guiana`,4,-53],pf:[`French Polynesia`,-15,-140],tf:[`French Southern Territories`,-43,67],ga:[`Gabon`,-1,11.75],gm:[`Gambia`,13.4667,-16.5667],ge:[`Georgia`,42,43.5],de:[`Germany`,51,9],gh:[`Ghana`,8,-2],gi:[`Gibraltar`,36.1833,-5.3667],gr:[`Greece`,39,22],gl:[`Greenland`,72,-40],gd:[`Grenada`,12.1167,-61.6667],gp:[`Guadeloupe`,16.25,-61.5833],gu:[`Guam`,13.4667,144.7833],gt:[`Guatemala`,15.5,-90.25],gg:[`Guernsey`,49.5,-2.56],gw:[`Guinea-Bissau`,12,-15],gn:[`Guinea`,11,-10],gy:[`Guyana`,5,-59],ht:[`Haiti`,19,-72.4167],hm:[`Heard Island and McDonald Islands`,-53.1,72.5167],va:[`Holy See`,41.9,12.45],hn:[`Honduras`,15,-86.5],hk:[`Hong Kong`,22.25,114.1667],hu:[`Hungary`,47,20],is:[`Iceland`,65,-18],in:[`India`,20,77],id:[`Indonesia`,-5,120],ir:[`Iran`,32,53],iq:[`Iraq`,33,44],ie:[`Ireland`,53,-8],im:[`Isle of Man`,54.23,-4.55],il:[`Israel`,31.5,34.75],it:[`Italy`,42.8333,12.8333],jm:[`Jamaica`,18.25,-77.5],jp:[`Japan`,36,138],je:[`Jersey`,49.21,-2.13],jo:[`Jordan`,31,36],kz:[`Kazakhstan`,48,68],ke:[`Kenya`,1,38],ki:[`Kiribati`,1.4167,173],kp:[`Korea, North`,40,127],kr:[`Korea, South`,37,127.5],xk:[`Kosovo`,42.583333,21],kw:[`Kuwait`,29.3375,47.6581],kg:[`Kyrgyzstan`,41,75],la:[`Laos`,18,105],lv:[`Latvia`,57,25],lb:[`Lebanon`,33.8333,35.8333],ls:[`Lesotho`,-29.5,28.5],lr:[`Liberia`,6.5,-9.5],ly:[`Libya`,25,17],li:[`Liechtenstein`,47.1667,9.5333],lt:[`Lithuania`,56,24],lu:[`Luxembourg`,49.75,6.1667],mo:[`Macao`,22.1667,113.55],mk:[`North Macedonia`,41.8333,22],mg:[`Madagascar`,-20,47],mw:[`Malawi`,-13.5,34],my:[`Malaysia`,2.5,112.5],mv:[`Maldives`,3.25,73],ml:[`Mali`,17,-4],mt:[`Malta`,35.8333,14.5833],mh:[`Marshall Islands`,9,168],mq:[`Martinique`,14.6667,-61],mr:[`Mauritania`,20,-12],mu:[`Mauritius`,-20.2833,57.55],yt:[`Mayotte`,-12.8333,45.1667],mx:[`Mexico`,23,-102],fm:[`Micronesia`,6.9167,158.25],md:[`Moldova`,47,29],mc:[`Monaco`,43.7333,7.4],mn:[`Mongolia`,46,105],me:[`Montenegro`,42,19],ms:[`Montserrat`,16.75,-62.2],ma:[`Morocco`,32,-5],mz:[`Mozambique`,-18.25,35],mm:[`Myanmar`,22,98],na:[`Namibia`,-22,17],nr:[`Nauru`,-.5333,166.9167],np:[`Nepal`,28,84],nl:[`Netherlands`,52.5,5.75],nc:[`New Caledonia`,-21.5,165.5],nz:[`New Zealand`,-41,174],ni:[`Nicaragua`,13,-85],ne:[`Niger`,16,8],ng:[`Nigeria`,10,8],nu:[`Niue`,-19.0333,-169.8667],nf:[`Norfolk Island`,-29.0333,167.95],mp:[`Northern Mariana Islands`,15.2,145.75],no:[`Norway`,62,10],om:[`Oman`,21,57],pk:[`Pakistan`,30,70],pw:[`Palau`,7.5,134.5],ps:[`Palestine`,32,35.25],pa:[`Panama`,9,-80],pg:[`Papua New Guinea`,-6,147],py:[`Paraguay`,-23,-58],pe:[`Peru`,-10,-76],ph:[`Philippines`,13,122],pn:[`Pitcairn`,-24.7,-127.4],pl:[`Poland`,52,20],pt:[`Portugal`,39.5,-8],pr:[`Puerto Rico`,18.25,-66.5],qa:[`Qatar`,25.5,51.25],re:[`Réunion`,-21.1,55.6],ro:[`Romania`,46,25],ru:[`Russia`,60,100],rw:[`Rwanda`,-2,30],bl:[`Saint Barthélemy`,17.897728,-62.834244],sh:[`Saint Helena`,-15.9333,-5.7],kn:[`Saint Kitts and Nevis`,17.3333,-62.75],lc:[`Saint Lucia`,13.8833,-61.1333],mf:[`Saint Martin`,18.075278,-63.06],pm:[`Saint Pierre and Miquelon`,46.8333,-56.3333],vc:[`Saint Vincent and the Grenadines`,13.25,-61.2],ws:[`Samoa`,-13.5833,-172.3333],sm:[`San Marino`,43.7667,12.4167],st:[`Sao Tome and Principe`,1,7],sa:[`Saudi Arabia`,25,45],sn:[`Senegal`,14,-14],rs:[`Serbia`,44,21],sc:[`Seychelles`,-4.5833,55.6667],sl:[`Sierra Leone`,8.5,-11.5],sg:[`Singapore`,1.3667,103.8],sx:[`Sint Maarten`,18.033333,-63.05],sk:[`Slovakia`,48.6667,19.5],si:[`Slovenia`,46,15],sb:[`Solomon Islands`,-8,159],so:[`Somalia`,10,49],za:[`South Africa`,-29,24],gs:[`South Georgia and the South Sandwich Islands`,-54.5,-37],ss:[`South Sudan`,8,30],es:[`Spain`,40,-4],lk:[`Sri Lanka`,7,81],sd:[`Sudan`,15,30],sr:[`Suriname`,4,-56],sj:[`Svalbard and Jan Mayen`,78,20],sz:[`Swaziland`,-26.5,31.5],se:[`Sweden`,62,15],ch:[`Switzerland`,47,8],sy:[`Syria`,35,38],tw:[`Taiwan`,23.5,121],tj:[`Tajikistan`,39,71],tz:[`Tanzania`,-6,35],th:[`Thailand`,15,100],tl:[`Timor-Leste`,-8.55,125.5167],tg:[`Togo`,8,1.1667],tk:[`Tokelau`,-9,-172],to:[`Tonga`,-20,-175],tt:[`Trinidad and Tobago`,11,-61],tn:[`Tunisia`,34,9],tr:[`Turkey`,39,35],tm:[`Turkmenistan`,40,60],tc:[`Turks and Caicos Islands`,21.75,-71.5833],tv:[`Tuvalu`,-8,178],ug:[`Uganda`,1,32],ua:[`Ukraine`,49,32],ae:[`United Arab Emirates`,24,54],gb:[`United Kingdom`,54,-2],um:[`United States Minor Outlying Islands`,19.2833,166.6],us:[`United States`,38,-97],uy:[`Uruguay`,-33,-56],uz:[`Uzbekistan`,41,64],vu:[`Vanuatu`,-16,167],ve:[`Venezuela`,8,-66],vn:[`Vietnam`,16,106],vg:[`Virgin Islands, British`,18.5,-64.5],vi:[`Virgin Islands, U.S.`,18.3333,-64.8333],wf:[`Wallis and Futuna`,-13.3,-176.2],eh:[`Western Sahara`,24.5,-13],ye:[`Yemen`,15,48],zm:[`Zambia`,-15,30],zw:[`Zimbabwe`,-20,30]};function C(e){return S[e]??null}function w(e){let t=C(e);if(!t)return null;let[,n]=t;return n>=0}const T={autumn:[9,10,11],spring:[3,4,5],summer:[6,7,8],winter:[12,1,2]},E={autumn:[3,4,5],spring:[9,10,11],summer:[12,1,2],winter:[6,7,8]};function D(e,t){let n=w(e),r=t.month,i=n?T:E;for(let e of[`autumn`,`spring`,`summer`,`winter`])if(i[e].includes(r))return e;return null}function O(e){switch(e){case`spring`:return`fresh`;case`summer`:return`energetic`;case`autumn`:return`cozy`;case`winter`:return`warm`}}function k(e){return e.weekday===6||e.weekday===7?`off`:e.hour>=9&&e.hour<12?`work`:e.hour>=12&&e.hour<13?`break`:e.hour>=13&&e.hour<17?`work`:`off`}function A(e){return e.month===3&&e.day>=21||e.month===4&&e.day<=19?`aries`:e.month===4&&e.day>=20||e.month===5&&e.day<=20?`taurus`:e.month===5&&e.day>=21||e.month===6&&e.day<=20?`gemini`:e.month===6&&e.day>=21||e.month===7&&e.day<=22?`cancer`:e.month===7&&e.day>=23||e.month===8&&e.day<=22?`leo`:e.month===8&&e.day>=23||e.month===9&&e.day<=22?`virgo`:e.month===9&&e.day>=23||e.month===10&&e.day<=22?`libra`:e.month===10&&e.day>=23||e.month===11&&e.day<=21?`scorpio`:e.month===11&&e.day>=22||e.month===12&&e.day<=21?`sagittarius`:e.month===12&&e.day>=22||e.month===1&&e.day<=19?`capricorn`:e.month===1&&e.day>=20||e.month===2&&e.day<=18?`aquarius`:`pisces`}function j(e){let t=parseInt(e.startsWith(`#`)?e.substring(1):e,16);return[t>>16&255,t>>8&255,t&255]}function M(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function N(e,t,n){let r,i,a;if(e/=360,t/=100,n/=100,t===0)r=i=a=n;else{let o=n<.5?n*(1+t):n+t-n*t,s=2*n-o;r=M(s,o,e+1/3),i=M(s,o,e),a=M(s,o,e-1/3)}return r=Math.round(r*255),i=Math.round(i*255),a=Math.round(a*255),[r,i,a]}function P(e,t,n){e/=255,t/=255,n/=255;let r=Math.min(e,t,n),i=Math.max(e,t,n),a=i-r,o,s=i===0?0:a/i,c=i;return i===r?o=0:(o=i===e?(t-n)/a+(t<n?6:0):i===t?(n-e)/a+2:(e-t)/a+4,o/=6),[o,s,c]}function ee(e,t,n){return P(...N(e,t,n))}function F(e,t,n){let r=0,i=0,a=0,o=Math.floor(e*6),s=e*6-o,c=n*(1-t),l=n*(1-s*t),u=n*(1-(1-s)*t);switch(o%6){case 0:r=n,i=u,a=c;break;case 1:r=l,i=n,a=c;break;case 2:r=c,i=n,a=u;break;case 3:r=c,i=l,a=n;break;case 4:r=u,i=c,a=n;break;case 5:r=n,i=c,a=l;break}return r=Math.round(r*255),i=Math.round(i*255),a=Math.round(a*255),[r,i,a]}function I(e,t,n){e/=255,t/=255,n/=255;let r=Math.min(e,t,n),i=Math.max(e,t,n),a=i-r,o,s,c;return o=a===0?0:i===e?(t-n)/a%6:i===t?(n-e)/a+2:(e-t)/a+4,o=Math.round(o*60),o<0&&(o+=360),c=(i+r)/2,s=a===0?0:a/(1-Math.abs(2*c-1)),s=+(s*100).toFixed(1),c=+(c*100).toFixed(1),[o,s,c]}function L(e,t,n){return I(...F(e,t,n))}function R(e){return globalThis.document?e instanceof HTMLElement:!1}function z(e,t){let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r++){let a=t[r][0],o=t[r][1],s=t[i][0],c=t[i][1];o>e[1]!=c>e[1]&&e[0]<(s-a)*(e[1]-o)/(c-o)+a&&(n=!n)}return n}function B(e,t){return t.hasSame(e,`day`)}function V(e){let t=new Uint32Array(1);t[0]=e;function n(){let e=t[0]=t[0]+1831565813|0,n=Math.imul(e^e>>>15,1|e);return n=n+Math.imul(n^n>>>7,61|n)^n,((n^n>>>14)>>>0)/4294967296}function r(e,t){return n()*(t-e)+e}function i(){return V(n()*2**32)}return{fork:i,next:n,nextBetween:r}}function H(e){window.location===window.parent.location?window.location.href=e:window.open(e,`_top`)}async function U(e){let t=document.createElement(`iframe`);t.style.position=`fixed`,t.style.top=`-100dvh`,t.style.left=`-100dvw`,t.style.width=`1px`,t.style.height=`1px`,document.body.appendChild(t);let n=t.contentDocument??t.contentWindow?.document;if(!n)throw document.body.removeChild(t),Error(`Cannot print, no access to the framed document.`);n.documentElement.innerHTML=e;let r=Array.from(n.getElementsByTagName(`img`));await Promise.all(r.map(e=>new Promise(t=>{e.complete?t(void 0):(e.addEventListener(`load`,t,{passive:!0}),e.addEventListener(`error`,t,{passive:!0}))}))),t.contentWindow?.print(),setTimeout(()=>{document.body.removeChild(t)},1e3)}function W(e,t,n){return`#${e.toString(16).padStart(2,`0`)}${t.toString(16).padStart(2,`0`)}${n.toString(16).padStart(2,`0`)}`}function G(e,t,n){e.prototype[t]=n}function K(e,t,n){Object.defineProperty(e,t,{value:n})}function q(e){`startViewTransition`in document?document.startViewTransition(e):e()}async function J(e){return new Promise(t=>setTimeout(t,e))}const Y=`✔`,X=`✘`,Z=`—`,Q=`–`,$=()=>void 0;export{Y as CHECK,X as CROSS,Z as MDASH,Q as NDASH,$ as NOOP,n as clampWithStepPrecision,r as countDecimals,i as debounce,o as downloadBlob,s as downloadString,a as downloadUrl,c as formatDate,l as formatDateFull,u as formatDateTime,d as formatMonth,f as formatMonthYear,p as formatNumber,m as formatPercentage,h as formatTime,g as generateStepTicks,_ as getCircadianPhase,v as getDayPeriod,y as getDayPeriodRange,b as getMoonPhase,x as getPrototypeChain,D as getSeason,O as getSeasonalMood,k as getWorkdayPeriod,A as getZodiacSign,j as hexToRGB,ee as hslToHSV,N as hslToRGB,L as hsvToHSL,F as hsvToRGB,M as hueToRGB,R as isHtmlElement,w as isNorthernHemisphere,z as isPointInPolygon,B as isToday,V as mulberry32,H as openUrl,U as printHtml,W as rgbToHEX,I as rgbToHSL,P as rgbToHSV,t as roundStep,G as setObjectMethod,K as setObjectValue,q as viewTransition,J as waitFor};\n//# sourceMappingURL=index.mjs.map","const parseNumber = (color, len) => {\n\tif (typeof color !== 'number') return;\n\n\t// hex3: #c93 -> #cc9933\n\tif (len === 3) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: (((color >> 8) & 0xf) | ((color >> 4) & 0xf0)) / 255,\n\t\t\tg: (((color >> 4) & 0xf) | (color & 0xf0)) / 255,\n\t\t\tb: ((color & 0xf) | ((color << 4) & 0xf0)) / 255\n\t\t};\n\t}\n\n\t// hex4: #c931 -> #cc993311\n\tif (len === 4) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: (((color >> 12) & 0xf) | ((color >> 8) & 0xf0)) / 255,\n\t\t\tg: (((color >> 8) & 0xf) | ((color >> 4) & 0xf0)) / 255,\n\t\t\tb: (((color >> 4) & 0xf) | (color & 0xf0)) / 255,\n\t\t\talpha: ((color & 0xf) | ((color << 4) & 0xf0)) / 255\n\t\t};\n\t}\n\n\t// hex6: #f0f1f2\n\tif (len === 6) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: ((color >> 16) & 0xff) / 255,\n\t\t\tg: ((color >> 8) & 0xff) / 255,\n\t\t\tb: (color & 0xff) / 255\n\t\t};\n\t}\n\n\t// hex8: #f0f1f2ff\n\tif (len === 8) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: ((color >> 24) & 0xff) / 255,\n\t\t\tg: ((color >> 16) & 0xff) / 255,\n\t\t\tb: ((color >> 8) & 0xff) / 255,\n\t\t\talpha: (color & 0xff) / 255\n\t\t};\n\t}\n};\n\nexport default parseNumber;\n","const named = {\n\taliceblue: 0xf0f8ff,\n\tantiquewhite: 0xfaebd7,\n\taqua: 0x00ffff,\n\taquamarine: 0x7fffd4,\n\tazure: 0xf0ffff,\n\tbeige: 0xf5f5dc,\n\tbisque: 0xffe4c4,\n\tblack: 0x000000,\n\tblanchedalmond: 0xffebcd,\n\tblue: 0x0000ff,\n\tblueviolet: 0x8a2be2,\n\tbrown: 0xa52a2a,\n\tburlywood: 0xdeb887,\n\tcadetblue: 0x5f9ea0,\n\tchartreuse: 0x7fff00,\n\tchocolate: 0xd2691e,\n\tcoral: 0xff7f50,\n\tcornflowerblue: 0x6495ed,\n\tcornsilk: 0xfff8dc,\n\tcrimson: 0xdc143c,\n\tcyan: 0x00ffff,\n\tdarkblue: 0x00008b,\n\tdarkcyan: 0x008b8b,\n\tdarkgoldenrod: 0xb8860b,\n\tdarkgray: 0xa9a9a9,\n\tdarkgreen: 0x006400,\n\tdarkgrey: 0xa9a9a9,\n\tdarkkhaki: 0xbdb76b,\n\tdarkmagenta: 0x8b008b,\n\tdarkolivegreen: 0x556b2f,\n\tdarkorange: 0xff8c00,\n\tdarkorchid: 0x9932cc,\n\tdarkred: 0x8b0000,\n\tdarksalmon: 0xe9967a,\n\tdarkseagreen: 0x8fbc8f,\n\tdarkslateblue: 0x483d8b,\n\tdarkslategray: 0x2f4f4f,\n\tdarkslategrey: 0x2f4f4f,\n\tdarkturquoise: 0x00ced1,\n\tdarkviolet: 0x9400d3,\n\tdeeppink: 0xff1493,\n\tdeepskyblue: 0x00bfff,\n\tdimgray: 0x696969,\n\tdimgrey: 0x696969,\n\tdodgerblue: 0x1e90ff,\n\tfirebrick: 0xb22222,\n\tfloralwhite: 0xfffaf0,\n\tforestgreen: 0x228b22,\n\tfuchsia: 0xff00ff,\n\tgainsboro: 0xdcdcdc,\n\tghostwhite: 0xf8f8ff,\n\tgold: 0xffd700,\n\tgoldenrod: 0xdaa520,\n\tgray: 0x808080,\n\tgreen: 0x008000,\n\tgreenyellow: 0xadff2f,\n\tgrey: 0x808080,\n\thoneydew: 0xf0fff0,\n\thotpink: 0xff69b4,\n\tindianred: 0xcd5c5c,\n\tindigo: 0x4b0082,\n\tivory: 0xfffff0,\n\tkhaki: 0xf0e68c,\n\tlavender: 0xe6e6fa,\n\tlavenderblush: 0xfff0f5,\n\tlawngreen: 0x7cfc00,\n\tlemonchiffon: 0xfffacd,\n\tlightblue: 0xadd8e6,\n\tlightcoral: 0xf08080,\n\tlightcyan: 0xe0ffff,\n\tlightgoldenrodyellow: 0xfafad2,\n\tlightgray: 0xd3d3d3,\n\tlightgreen: 0x90ee90,\n\tlightgrey: 0xd3d3d3,\n\tlightpink: 0xffb6c1,\n\tlightsalmon: 0xffa07a,\n\tlightseagreen: 0x20b2aa,\n\tlightskyblue: 0x87cefa,\n\tlightslategray: 0x778899,\n\tlightslategrey: 0x778899,\n\tlightsteelblue: 0xb0c4de,\n\tlightyellow: 0xffffe0,\n\tlime: 0x00ff00,\n\tlimegreen: 0x32cd32,\n\tlinen: 0xfaf0e6,\n\tmagenta: 0xff00ff,\n\tmaroon: 0x800000,\n\tmediumaquamarine: 0x66cdaa,\n\tmediumblue: 0x0000cd,\n\tmediumorchid: 0xba55d3,\n\tmediumpurple: 0x9370db,\n\tmediumseagreen: 0x3cb371,\n\tmediumslateblue: 0x7b68ee,\n\tmediumspringgreen: 0x00fa9a,\n\tmediumturquoise: 0x48d1cc,\n\tmediumvioletred: 0xc71585,\n\tmidnightblue: 0x191970,\n\tmintcream: 0xf5fffa,\n\tmistyrose: 0xffe4e1,\n\tmoccasin: 0xffe4b5,\n\tnavajowhite: 0xffdead,\n\tnavy: 0x000080,\n\toldlace: 0xfdf5e6,\n\tolive: 0x808000,\n\tolivedrab: 0x6b8e23,\n\torange: 0xffa500,\n\torangered: 0xff4500,\n\torchid: 0xda70d6,\n\tpalegoldenrod: 0xeee8aa,\n\tpalegreen: 0x98fb98,\n\tpaleturquoise: 0xafeeee,\n\tpalevioletred: 0xdb7093,\n\tpapayawhip: 0xffefd5,\n\tpeachpuff: 0xffdab9,\n\tperu: 0xcd853f,\n\tpink: 0xffc0cb,\n\tplum: 0xdda0dd,\n\tpowderblue: 0xb0e0e6,\n\tpurple: 0x800080,\n\n\t// Added in CSS Colors Level 4:\n\t// https://drafts.csswg.org/css-color/#changes-from-3\n\trebeccapurple: 0x663399,\n\n\tred: 0xff0000,\n\trosybrown: 0xbc8f8f,\n\troyalblue: 0x4169e1,\n\tsaddlebrown: 0x8b4513,\n\tsalmon: 0xfa8072,\n\tsandybrown: 0xf4a460,\n\tseagreen: 0x2e8b57,\n\tseashell: 0xfff5ee,\n\tsienna: 0xa0522d,\n\tsilver: 0xc0c0c0,\n\tskyblue: 0x87ceeb,\n\tslateblue: 0x6a5acd,\n\tslategray: 0x708090,\n\tslategrey: 0x708090,\n\tsnow: 0xfffafa,\n\tspringgreen: 0x00ff7f,\n\tsteelblue: 0x4682b4,\n\ttan: 0xd2b48c,\n\tteal: 0x008080,\n\tthistle: 0xd8bfd8,\n\ttomato: 0xff6347,\n\tturquoise: 0x40e0d0,\n\tviolet: 0xee82ee,\n\twheat: 0xf5deb3,\n\twhite: 0xffffff,\n\twhitesmoke: 0xf5f5f5,\n\tyellow: 0xffff00,\n\tyellowgreen: 0x9acd32\n};\n\nexport default named;\n","import parseNumber from './parseNumber.js';\nimport named from '../colors/named.js';\n\n// Also supports the `transparent` color as defined in:\n// https://drafts.csswg.org/css-color/#transparent-black\nconst parseNamed = color => {\n\treturn parseNumber(named[color.toLowerCase()], 6);\n};\n\nexport default parseNamed;\n","import parseNumber from './parseNumber.js';\n\nconst hex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i;\n\nconst parseHex = color => {\n\tlet match;\n\t// eslint-disable-next-line no-cond-assign\n\treturn (match = color.match(hex))\n\t\t? parseNumber(parseInt(match[1], 16), match[1].length)\n\t\t: undefined;\n};\n\nexport default parseHex;\n","/*\n\tBasic building blocks for color regexes\n\t---------------------------------------\n\n\tThese regexes are expressed as strings\n\tto be interpolated in the color regexes.\n */\n\n// <number>\nexport const num = '([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)';\n\n// <number> or 'none'\nexport const num_none = `(?:${num}|none)`;\n\n// <percentage>\nexport const per = `${num}%`;\n\n// <percent> or 'none'\nexport const per_none = `(?:${num}%|none)`;\n\n// <number-percentage> (<alpha-value>)\nexport const num_per = `(?:${num}%|${num})`;\n\n// <number-percentage> (<alpha-value>) or 'none'\nexport const num_per_none = `(?:${num}%|${num}|none)`;\n\n// <hue>\nexport const hue = `(?:${num}(deg|grad|rad|turn)|${num})`;\n\n// <hue> or 'none'\nexport const hue_none = `(?:${num}(deg|grad|rad|turn)|${num}|none)`;\n\nexport const c = `\\\\s*,\\\\s*`; // comma\nexport const so = '\\\\s*'; // space, optional\nexport const s = `\\\\s+`; // space\n\nexport const rx_num_per_none = new RegExp('^' + num_per_none + '$');\n","import { num, per, num_per, c } from '../util/regex.js';\n\n/*\n\trgb() regular expressions for legacy format\n\tReference: https://drafts.csswg.org/css-color/#rgb-functions\n */\nconst rgb_num_old = new RegExp(\n\t`^rgba?\\\\(\\\\s*${num}${c}${num}${c}${num}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst rgb_per_old = new RegExp(\n\t`^rgba?\\\\(\\\\s*${per}${c}${per}${c}${per}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst parseRgbLegacy = color => {\n\tlet res = { mode: 'rgb' };\n\tlet match;\n\tif ((match = color.match(rgb_num_old))) {\n\t\tif (match[1] !== undefined) {\n\t\t\tres.r = match[1] / 255;\n\t\t}\n\t\tif (match[2] !== undefined) {\n\t\t\tres.g = match[2] / 255;\n\t\t}\n\t\tif (match[3] !== undefined) {\n\t\t\tres.b = match[3] / 255;\n\t\t}\n\t} else if ((match = color.match(rgb_per_old))) {\n\t\tif (match[1] !== undefined) {\n\t\t\tres.r = match[1] / 100;\n\t\t}\n\t\tif (match[2] !== undefined) {\n\t\t\tres.g = match[2] / 100;\n\t\t}\n\t\tif (match[3] !== undefined) {\n\t\t\tres.b = match[3] / 100;\n\t\t}\n\t} else {\n\t\treturn undefined;\n\t}\n\n\tif (match[4] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, match[4] / 100));\n\t} else if (match[5] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, +match[5]));\n\t}\n\n\treturn res;\n};\n\nexport default parseRgbLegacy;\n","import parse from './parse.js';\n\nconst prepare = (color, mode) =>\n\tcolor === undefined\n\t\t? undefined\n\t\t: typeof color !== 'object'\n\t\t? parse(color)\n\t\t: color.mode !== undefined\n\t\t? color\n\t\t: mode\n\t\t? { ...color, mode }\n\t\t: undefined;\n\nexport default prepare;\n","import { converters } from './modes.js';\nimport prepare from './_prepare.js';\n\nconst converter =\n\t(target_mode = 'rgb') =>\n\tcolor =>\n\t\t(color = prepare(color, target_mode)) !== undefined\n\t\t\t? // if the color's mode corresponds to our target mode\n\t\t\t color.mode === target_mode\n\t\t\t\t? // then just return the color\n\t\t\t\t color\n\t\t\t\t: // otherwise check to see if we have a dedicated\n\t\t\t\t// converter for the target mode\n\t\t\t\tconverters[color.mode][target_mode]\n\t\t\t\t? // and return its result...\n\t\t\t\t converters[color.mode][target_mode](color)\n\t\t\t\t: // ...otherwise pass through RGB as an intermediary step.\n\t\t\t\t// if the target mode is RGB...\n\t\t\t\ttarget_mode === 'rgb'\n\t\t\t\t? // just return the RGB\n\t\t\t\t converters[color.mode].rgb(color)\n\t\t\t\t: // otherwise convert color.mode -> RGB -> target_mode\n\t\t\t\t converters.rgb[target_mode](converters[color.mode].rgb(color))\n\t\t\t: undefined;\n\nexport default converter;\n","import converter from './converter.js';\n\nconst converters = {};\nconst modes = {};\n\nconst parsers = [];\nconst colorProfiles = {};\n\nconst identity = v => v;\n\nconst useMode = definition => {\n\tconverters[definition.mode] = {\n\t\t...converters[definition.mode],\n\t\t...definition.toMode\n\t};\n\n\tObject.keys(definition.fromMode || {}).forEach(k => {\n\t\tif (!converters[k]) {\n\t\t\tconverters[k] = {};\n\t\t}\n\t\tconverters[k][definition.mode] = definition.fromMode[k];\n\t});\n\n\t// Color space channel ranges\n\tif (!definition.ranges) {\n\t\tdefinition.ranges = {};\n\t}\n\n\tif (!definition.difference) {\n\t\tdefinition.difference = {};\n\t}\n\n\tdefinition.channels.forEach(channel => {\n\t\t// undefined channel ranges default to the [0, 1] interval\n\t\tif (definition.ranges[channel] === undefined) {\n\t\t\tdefinition.ranges[channel] = [0, 1];\n\t\t}\n\n\t\tif (!definition.interpolate[channel]) {\n\t\t\tthrow new Error(`Missing interpolator for: ${channel}`);\n\t\t}\n\n\t\tif (typeof definition.interpolate[channel] === 'function') {\n\t\t\tdefinition.interpolate[channel] = {\n\t\t\t\tuse: definition.interpolate[channel]\n\t\t\t};\n\t\t}\n\n\t\tif (!definition.interpolate[channel].fixup) {\n\t\t\tdefinition.interpolate[channel].fixup = identity;\n\t\t}\n\t});\n\n\tmodes[definition.mode] = definition;\n\t(definition.parse || []).forEach(parser => {\n\t\tuseParser(parser, definition.mode);\n\t});\n\n\treturn converter(definition.mode);\n};\n\nconst getMode = mode => modes[mode];\n\nconst useParser = (parser, mode) => {\n\tif (typeof parser === 'string') {\n\t\tif (!mode) {\n\t\t\tthrow new Error(`'mode' required when 'parser' is a string`);\n\t\t}\n\t\tcolorProfiles[parser] = mode;\n\t} else if (typeof parser === 'function') {\n\t\tif (parsers.indexOf(parser) < 0) {\n\t\t\tparsers.push(parser);\n\t\t}\n\t}\n};\n\nconst removeParser = parser => {\n\tif (typeof parser === 'string') {\n\t\tdelete colorProfiles[parser];\n\t} else if (typeof parser === 'function') {\n\t\tconst idx = parsers.indexOf(parser);\n\t\tif (idx > 0) {\n\t\t\tparsers.splice(idx, 1);\n\t\t}\n\t}\n};\n\nexport {\n\tuseMode,\n\tgetMode,\n\tuseParser,\n\tremoveParser,\n\tconverters,\n\tparsers,\n\tcolorProfiles\n};\n","import { parsers, colorProfiles, getMode } from './modes.js';\n\n/* eslint-disable-next-line no-control-regex */\nconst IdentStartCodePoint = /[^\\x00-\\x7F]|[a-zA-Z_]/;\n\n/* eslint-disable-next-line no-control-regex */\nconst IdentCodePoint = /[^\\x00-\\x7F]|[-\\w]/;\n\nexport const Tok = {\n\tFunction: 'function',\n\tIdent: 'ident',\n\tNumber: 'number',\n\tPercentage: 'percentage',\n\tParenClose: ')',\n\tNone: 'none',\n\tHue: 'hue',\n\tAlpha: 'alpha'\n};\n\nlet _i = 0;\n\n/*\n\t4.3.10. Check if three code points would start a number\n\thttps://drafts.csswg.org/css-syntax/#starts-with-a-number\n */\nfunction is_num(chars) {\n\tlet ch = chars[_i];\n\tlet ch1 = chars[_i + 1];\n\tif (ch === '-' || ch === '+') {\n\t\treturn /\\d/.test(ch1) || (ch1 === '.' && /\\d/.test(chars[_i + 2]));\n\t}\n\tif (ch === '.') {\n\t\treturn /\\d/.test(ch1);\n\t}\n\treturn /\\d/.test(ch);\n}\n\n/*\n\tCheck if the stream starts with an identifier.\n */\n\nfunction is_ident(chars) {\n\tif (_i >= chars.length) {\n\t\treturn false;\n\t}\n\tlet ch = chars[_i];\n\tif (IdentStartCodePoint.test(ch)) {\n\t\treturn true;\n\t}\n\tif (ch === '-') {\n\t\tif (chars.length - _i < 2) {\n\t\t\treturn false;\n\t\t}\n\t\tlet ch1 = chars[_i + 1];\n\t\tif (ch1 === '-' || IdentStartCodePoint.test(ch1)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\treturn false;\n}\n\n/*\n\t4.3.3. Consume a numeric token\n\thttps://drafts.csswg.org/css-syntax/#consume-numeric-token\n */\n\nconst huenits = {\n\tdeg: 1,\n\trad: 180 / Math.PI,\n\tgrad: 9 / 10,\n\tturn: 360\n};\n\nfunction num(chars) {\n\tlet value = '';\n\tif (chars[_i] === '-' || chars[_i] === '+') {\n\t\tvalue += chars[_i++];\n\t}\n\tvalue += digits(chars);\n\tif (chars[_i] === '.' && /\\d/.test(chars[_i + 1])) {\n\t\tvalue += chars[_i++] + digits(chars);\n\t}\n\tif (chars[_i] === 'e' || chars[_i] === 'E') {\n\t\tif (\n\t\t\t(chars[_i + 1] === '-' || chars[_i + 1] === '+') &&\n\t\t\t/\\d/.test(chars[_i + 2])\n\t\t) {\n\t\t\tvalue += chars[_i++] + chars[_i++] + digits(chars);\n\t\t} else if (/\\d/.test(chars[_i + 1])) {\n\t\t\tvalue += chars[_i++] + digits(chars);\n\t\t}\n\t}\n\tif (is_ident(chars)) {\n\t\tlet id = ident(chars);\n\t\tif (id === 'deg' || id === 'rad' || id === 'turn' || id === 'grad') {\n\t\t\treturn { type: Tok.Hue, value: value * huenits[id] };\n\t\t}\n\t\treturn undefined;\n\t}\n\tif (chars[_i] === '%') {\n\t\t_i++;\n\t\treturn { type: Tok.Percentage, value: +value };\n\t}\n\treturn { type: Tok.Number, value: +value };\n}\n\n/*\n\tConsume digits.\n */\nfunction digits(chars) {\n\tlet v = '';\n\twhile (/\\d/.test(chars[_i])) {\n\t\tv += chars[_i++];\n\t}\n\treturn v;\n}\n\n/*\n\tConsume an identifier.\n */\nfunction ident(chars) {\n\tlet v = '';\n\twhile (_i < chars.length && IdentCodePoint.test(chars[_i])) {\n\t\tv += chars[_i++];\n\t}\n\treturn v;\n}\n\n/*\n\tConsume an ident-like token.\n */\nfunction identlike(chars) {\n\tlet v = ident(chars);\n\tif (chars[_i] === '(') {\n\t\t_i++;\n\t\treturn { type: Tok.Function, value: v };\n\t}\n\tif (v === 'none') {\n\t\treturn { type: Tok.None, value: undefined };\n\t}\n\treturn { type: Tok.Ident, value: v };\n}\n\nexport function tokenize(str = '') {\n\tlet chars = str.trim();\n\tlet tokens = [];\n\tlet ch;\n\n\t/* reset counter */\n\t_i = 0;\n\n\twhile (_i < chars.length) {\n\t\tch = chars[_i++];\n\n\t\t/*\n\t\t\tConsume whitespace without emitting it\n\t\t */\n\t\tif (ch === '\\n' || ch === '\\t' || ch === ' ') {\n\t\t\twhile (\n\t\t\t\t_i < chars.length &&\n\t\t\t\t(chars[_i] === '\\n' || chars[_i] === '\\t' || chars[_i] === ' ')\n\t\t\t) {\n\t\t\t\t_i++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ch === ',') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === ')') {\n\t\t\ttokens.push({ type: Tok.ParenClose });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ch === '+') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '-') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (is_ident(chars)) {\n\t\t\t\ttokens.push({ type: Tok.Ident, value: ident(chars) });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '.') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '/') {\n\t\t\twhile (\n\t\t\t\t_i < chars.length &&\n\t\t\t\t(chars[_i] === '\\n' || chars[_i] === '\\t' || chars[_i] === ' ')\n\t\t\t) {\n\t\t\t\t_i++;\n\t\t\t}\n\t\t\tlet alpha;\n\t\t\tif (is_num(chars)) {\n\t\t\t\talpha = num(chars);\n\t\t\t\tif (alpha.type !== Tok.Hue) {\n\t\t\t\t\ttokens.push({ type: Tok.Alpha, value: alpha });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (is_ident(chars)) {\n\t\t\t\tif (ident(chars) === 'none') {\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\ttype: Tok.Alpha,\n\t\t\t\t\t\tvalue: { type: Tok.None, value: undefined }\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (/\\d/.test(ch)) {\n\t\t\t_i--;\n\t\t\ttokens.push(num(chars));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (IdentStartCodePoint.test(ch)) {\n\t\t\t_i--;\n\t\t\ttokens.push(identlike(chars));\n\t\t\tcontinue;\n\t\t}\n\n\t\t/*\n\t\t\tTreat everything not already handled as an error.\n\t\t */\n\t\treturn undefined;\n\t}\n\n\treturn tokens;\n}\n\nexport function parseColorSyntax(tokens) {\n\ttokens._i = 0;\n\tlet token = tokens[tokens._i++];\n\tif (!token || token.type !== Tok.Function || token.value !== 'color') {\n\t\treturn undefined;\n\t}\n\ttoken = tokens[tokens._i++];\n\tif (token.type !== Tok.Ident) {\n\t\treturn undefined;\n\t}\n\tconst mode = colorProfiles[token.value];\n\tif (!mode) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode };\n\tconst coords = consumeCoords(tokens, false);\n\tif (!coords) {\n\t\treturn undefined;\n\t}\n\tconst channels = getMode(mode).channels;\n\tfor (let ii = 0, c, ch; ii < channels.length; ii++) {\n\t\tc = coords[ii];\n\t\tch = channels[ii];\n\t\tif (c.type !== Tok.None) {\n\t\t\tres[ch] = c.type === Tok.Number ? c.value : c.value / 100;\n\t\t\tif (ch === 'alpha') {\n\t\t\t\tres[ch] = Math.max(0, Math.min(1, res[ch]));\n\t\t\t}\n\t\t}\n\t}\n\treturn res;\n}\n\nfunction consumeCoords(tokens, includeHue) {\n\tconst coords = [];\n\tlet token;\n\twhile (tokens._i < tokens.length) {\n\t\ttoken = tokens[tokens._i++];\n\t\tif (\n\t\t\ttoken.type === Tok.None ||\n\t\t\ttoken.type === Tok.Number ||\n\t\t\ttoken.type === Tok.Alpha ||\n\t\t\ttoken.type === Tok.Percentage ||\n\t\t\t(includeHue && token.type === Tok.Hue)\n\t\t) {\n\t\t\tcoords.push(token);\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.type === Tok.ParenClose) {\n\t\t\tif (tokens._i < tokens.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tif (coords.length < 3 || coords.length > 4) {\n\t\treturn undefined;\n\t}\n\n\tif (coords.length === 4) {\n\t\tif (coords[3].type !== Tok.Alpha) {\n\t\t\treturn undefined;\n\t\t}\n\t\tcoords[3] = coords[3].value;\n\t}\n\tif (coords.length === 3) {\n\t\tcoords.push({ type: Tok.None, value: undefined });\n\t}\n\n\treturn coords.every(c => c.type !== Tok.Alpha) ? coords : undefined;\n}\n\nexport function parseModernSyntax(tokens, includeHue) {\n\ttokens._i = 0;\n\tlet token = tokens[tokens._i++];\n\tif (!token || token.type !== Tok.Function) {\n\t\treturn undefined;\n\t}\n\tlet coords = consumeCoords(tokens, includeHue);\n\tif (!coords) {\n\t\treturn undefined;\n\t}\n\tcoords.unshift(token.value);\n\treturn coords;\n}\n\nconst parse = color => {\n\tif (typeof color !== 'string') {\n\t\treturn undefined;\n\t}\n\tconst tokens = tokenize(color);\n\tconst parsed = tokens ? parseModernSyntax(tokens, true) : undefined;\n\tlet result = undefined;\n\tlet i = 0;\n\tlet len = parsers.length;\n\twhile (i < len) {\n\t\tif ((result = parsers[i++](color, parsed)) !== undefined) {\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn tokens ? parseColorSyntax(tokens) : undefined;\n};\n\nexport default parse;\n","import { Tok } from '../parse.js';\n\nfunction parseRgb(color, parsed) {\n\tif (!parsed || (parsed[0] !== 'rgb' && parsed[0] !== 'rgba')) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'rgb' };\n\tconst [, r, g, b, alpha] = parsed;\n\tif (r.type === Tok.Hue || g.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (r.type !== Tok.None) {\n\t\tres.r = r.type === Tok.Number ? r.value / 255 : r.value / 100;\n\t}\n\tif (g.type !== Tok.None) {\n\t\tres.g = g.type === Tok.Number ? g.value / 255 : g.value / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value / 255 : b.value / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseRgb;\n","const parseTransparent = c =>\n\tc === 'transparent'\n\t\t? { mode: 'rgb', r: 0, g: 0, b: 0, alpha: 0 }\n\t\t: undefined;\n\nexport default parseTransparent;\n","const lerp = (a, b, t) => a + t * (b - a);\nconst unlerp = (a, b, v) => (v - a) / (b - a);\n\nconst blerp = (a00, a01, a10, a11, tx, ty) => {\n\treturn lerp(lerp(a00, a01, tx), lerp(a10, a11, tx), ty);\n};\n\nconst trilerp = (\n\ta000,\n\ta010,\n\ta100,\n\ta110,\n\ta001,\n\ta011,\n\ta101,\n\ta111,\n\ttx,\n\tty,\n\ttz\n) => {\n\treturn lerp(\n\t\tblerp(a000, a010, a100, a110, tx, ty),\n\t\tblerp(a001, a011, a101, a111, tx, ty),\n\t\ttz\n\t);\n};\n\nexport { lerp, blerp, trilerp, unlerp };\n","const get_classes = arr => {\n\tlet classes = [];\n\tfor (let i = 0; i < arr.length - 1; i++) {\n\t\tlet a = arr[i];\n\t\tlet b = arr[i + 1];\n\t\tif (a === undefined && b === undefined) {\n\t\t\tclasses.push(undefined);\n\t\t} else if (a !== undefined && b !== undefined) {\n\t\t\tclasses.push([a, b]);\n\t\t} else {\n\t\t\tclasses.push(a !== undefined ? [a, a] : [b, b]);\n\t\t}\n\t}\n\treturn classes;\n};\n\nconst interpolatorPiecewise = interpolator => arr => {\n\tlet classes = get_classes(arr);\n\treturn t => {\n\t\tlet cls = t * classes.length;\n\t\tlet idx = t >= 1 ? classes.length - 1 : Math.max(Math.floor(cls), 0);\n\t\tlet pair = classes[idx];\n\t\treturn pair === undefined\n\t\t\t? undefined\n\t\t\t: interpolator(pair[0], pair[1], cls - idx);\n\t};\n};\n\nexport { interpolatorPiecewise };\n","import { lerp } from './lerp.js';\nimport { interpolatorPiecewise } from './piecewise.js';\n\nexport const interpolatorLinear = interpolatorPiecewise(lerp);\n","const fixupAlpha = arr => {\n\tlet some_defined = false;\n\tlet res = arr.map(v => {\n\t\tif (v !== undefined) {\n\t\t\tsome_defined = true;\n\t\t\treturn v;\n\t\t}\n\t\treturn 1;\n\t});\n\treturn some_defined ? res : arr;\n};\n\nexport { fixupAlpha };\n","import parseNamed from './parseNamed.js';\nimport parseHex from './parseHex.js';\nimport parseRgbLegacy from './parseRgbLegacy.js';\nimport parseRgb from './parseRgb.js';\nimport parseTransparent from './parseTransparent.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\n/*\n\tsRGB color space\n */\n\nconst definition = {\n\tmode: 'rgb',\n\tchannels: ['r', 'g', 'b', 'alpha'],\n\tparse: [\n\t\tparseRgb,\n\t\tparseHex,\n\t\tparseRgbLegacy,\n\t\tparseNamed,\n\t\tparseTransparent,\n\t\t'srgb'\n\t],\n\tserialize: 'srgb',\n\tinterpolate: {\n\t\tr: interpolatorLinear,\n\t\tg: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\tgamut: true,\n\twhite: { r: 1, g: 1, b: 1 },\n\tblack: { r: 0, g: 0, b: 0 }\n};\n\nexport default definition;\n","/*\n\tConvert A98 RGB values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf\n*/\n\nconst linearize = (v = 0) => Math.pow(Math.abs(v), 563 / 256) * Math.sign(v);\n\nconst convertA98ToXyz65 = a98 => {\n\tlet r = linearize(a98.r);\n\tlet g = linearize(a98.g);\n\tlet b = linearize(a98.b);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.5766690429101305 * r +\n\t\t\t0.1855582379065463 * g +\n\t\t\t0.1882286462349947 * b,\n\t\ty:\n\t\t\t0.297344975250536 * r +\n\t\t\t0.6273635662554661 * g +\n\t\t\t0.0752914584939979 * b,\n\t\tz:\n\t\t\t0.0270313613864123 * r +\n\t\t\t0.0706888525358272 * g +\n\t\t\t0.9913375368376386 * b\n\t};\n\tif (a98.alpha !== undefined) {\n\t\tres.alpha = a98.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertA98ToXyz65;\n","/*\n\tConvert CIE XYZ D65 values to A98 RGB\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst gamma = v => Math.pow(Math.abs(v), 256 / 563) * Math.sign(v);\n\nconst convertXyz65ToA98 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'a98',\n\t\tr: gamma(\n\t\t\tx * 2.0415879038107465 -\n\t\t\t\ty * 0.5650069742788597 -\n\t\t\t\t0.3447313507783297 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.9692436362808798 +\n\t\t\t\ty * 1.8759675015077206 +\n\t\t\t\t0.0415550574071756 * z\n\t\t),\n\t\tb: gamma(\n\t\t\tx * 0.0134442806320312 -\n\t\t\t\ty * 0.1183623922310184 +\n\t\t\t\t1.0151749943912058 * z\n\t\t)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToA98;\n","const fn = (c = 0) => {\n\tconst abs = Math.abs(c);\n\tif (abs <= 0.04045) {\n\t\treturn c / 12.92;\n\t}\n\treturn (Math.sign(c) || 1) * Math.pow((abs + 0.055) / 1.055, 2.4);\n};\n\nconst convertRgbToLrgb = ({ r, g, b, alpha }) => {\n\tlet res = {\n\t\tmode: 'lrgb',\n\t\tr: fn(r),\n\t\tg: fn(g),\n\t\tb: fn(b)\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToLrgb;\n","/*\n\tConvert sRGB values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://observablehq.com/@danburzo/color-matrix-calculator\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertRgbToXyz65 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.4123907992659593 * r +\n\t\t\t0.357584339383878 * g +\n\t\t\t0.1804807884018343 * b,\n\t\ty:\n\t\t\t0.2126390058715102 * r +\n\t\t\t0.715168678767756 * g +\n\t\t\t0.0721923153607337 * b,\n\t\tz:\n\t\t\t0.0193308187155918 * r +\n\t\t\t0.119194779794626 * g +\n\t\t\t0.9505321522496607 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToXyz65;\n","const fn = (c = 0) => {\n\tconst abs = Math.abs(c);\n\tif (abs > 0.0031308) {\n\t\treturn (Math.sign(c) || 1) * (1.055 * Math.pow(abs, 1 / 2.4) - 0.055);\n\t}\n\treturn c * 12.92;\n};\n\nconst convertLrgbToRgb = ({ r, g, b, alpha }, mode = 'rgb') => {\n\tlet res = {\n\t\tmode,\n\t\tr: fn(r),\n\t\tg: fn(g),\n\t\tb: fn(b)\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLrgbToRgb;\n","/*\n\tCIE XYZ D65 values to sRGB.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://observablehq.com/@danburzo/color-matrix-calculator\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz65ToRgb = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb({\n\t\tr:\n\t\t\tx * 3.2409699419045226 -\n\t\t\ty * 1.5373831775700939 -\n\t\t\t0.4986107602930034 * z,\n\t\tg:\n\t\t\tx * -0.9692436362808796 +\n\t\t\ty * 1.8759675015077204 +\n\t\t\t0.0415550574071756 * z,\n\t\tb:\n\t\t\tx * 0.0556300796969936 -\n\t\t\ty * 0.2039769588889765 +\n\t\t\t1.0569715142428784 * z\n\t});\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToRgb;\n","import rgb from '../rgb/definition.js';\n\nimport convertA98ToXyz65 from './convertA98ToXyz65.js';\nimport convertXyz65ToA98 from './convertXyz65ToA98.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'a98',\n\tparse: ['a98-rgb'],\n\tserialize: 'a98-rgb',\n\n\tfromMode: {\n\t\trgb: color => convertXyz65ToA98(convertRgbToXyz65(color)),\n\t\txyz65: convertXyz65ToA98\n\t},\n\n\ttoMode: {\n\t\trgb: color => convertXyz65ToRgb(convertA98ToXyz65(color)),\n\t\txyz65: convertA98ToXyz65\n\t}\n};\n\nexport default definition;\n","const normalizeHue = hue => ((hue = hue % 360) < 0 ? hue + 360 : hue);\n\nexport default normalizeHue;\n","import normalizeHue from '../util/normalizeHue.js';\n\nconst hue = (hues, fn) => {\n\treturn hues\n\t\t.map((hue, idx, arr) => {\n\t\t\tif (hue === undefined) {\n\t\t\t\treturn hue;\n\t\t\t}\n\t\t\tlet normalized = normalizeHue(hue);\n\t\t\tif (idx === 0 || hues[idx - 1] === undefined) {\n\t\t\t\treturn normalized;\n\t\t\t}\n\t\t\treturn fn(normalized - normalizeHue(arr[idx - 1]));\n\t\t})\n\t\t.reduce((acc, curr) => {\n\t\t\tif (\n\t\t\t\t!acc.length ||\n\t\t\t\tcurr === undefined ||\n\t\t\t\tacc[acc.length - 1] === undefined\n\t\t\t) {\n\t\t\t\tacc.push(curr);\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\tacc.push(curr + acc[acc.length - 1]);\n\t\t\treturn acc;\n\t\t}, []);\n};\n\nconst fixupHueShorter = arr =>\n\thue(arr, d => (Math.abs(d) <= 180 ? d : d - 360 * Math.sign(d)));\nconst fixupHueLonger = arr =>\n\thue(arr, d => (Math.abs(d) >= 180 || d === 0 ? d : d - 360 * Math.sign(d)));\nconst fixupHueIncreasing = arr => hue(arr, d => (d >= 0 ? d : d + 360));\nconst fixupHueDecreasing = arr => hue(arr, d => (d <= 0 ? d : d - 360));\n\nexport {\n\tfixupHueShorter,\n\tfixupHueLonger,\n\tfixupHueIncreasing,\n\tfixupHueDecreasing\n};\n","export const M = [-0.14861, 1.78277, -0.29227, -0.90649, 1.97294, 0];\n\nexport const degToRad = Math.PI / 180;\nexport const radToDeg = 180 / Math.PI;\n","/*\n\tConvert a RGB color to the Cubehelix HSL color space.\n\n\tThis computation is not present in Green's paper:\n\thttps://arxiv.org/pdf/1108.5083.pdf\n\n\t...but can be derived from the inverse, HSL to RGB conversion.\n\n\tIt matches the math in Mike Bostock's D3 implementation:\n\n\thttps://github.com/d3/d3-color/blob/master/src/cubehelix.js\n */\n\nimport { radToDeg, M } from './constants.js';\n\nlet DE = M[3] * M[4];\nlet BE = M[1] * M[4];\nlet BCAD = M[1] * M[2] - M[0] * M[3];\n\nconst convertRgbToCubehelix = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet l = (BCAD * b + r * DE - g * BE) / (BCAD + DE - BE);\n\tlet x = b - l;\n\tlet y = (M[4] * (g - l) - M[2] * x) / M[3];\n\n\tlet res = {\n\t\tmode: 'cubehelix',\n\t\tl: l,\n\t\ts:\n\t\t\tl === 0 || l === 1\n\t\t\t\t? undefined\n\t\t\t\t: Math.sqrt(x * x + y * y) / (M[4] * l * (1 - l))\n\t};\n\n\tif (res.s) res.h = Math.atan2(y, x) * radToDeg - 120;\n\tif (alpha !== undefined) res.alpha = alpha;\n\n\treturn res;\n};\n\nexport default convertRgbToCubehelix;\n","import { degToRad, M } from './constants.js';\n\nconst convertCubehelixToRgb = ({ h, s, l, alpha }) => {\n\tlet res = { mode: 'rgb' };\n\n\th = (h === undefined ? 0 : h + 120) * degToRad;\n\tif (l === undefined) l = 0;\n\n\tlet amp = s === undefined ? 0 : s * l * (1 - l);\n\n\tlet cosh = Math.cos(h);\n\tlet sinh = Math.sin(h);\n\n\tres.r = l + amp * (M[0] * cosh + M[1] * sinh);\n\tres.g = l + amp * (M[2] * cosh + M[3] * sinh);\n\tres.b = l + amp * (M[4] * cosh + M[5] * sinh);\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertCubehelixToRgb;\n","import { getMode } from './modes.js';\nimport converter from './converter.js';\nimport normalizeHue from './util/normalizeHue.js';\n\nconst differenceHueSaturation = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined || !std.s || !smp.s) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tlet dH = Math.sin((((smp_h - std_h + 360) / 2) * Math.PI) / 180);\n\treturn 2 * Math.sqrt(std.s * smp.s) * dH;\n};\n\nconst differenceHueNaive = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tif (Math.abs(smp_h - std_h) > 180) {\n\t\t// todo should this be normalized once again?\n\t\treturn std_h - (smp_h - 360 * Math.sign(smp_h - std_h));\n\t}\n\treturn smp_h - std_h;\n};\n\nconst differenceHueChroma = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined || !std.c || !smp.c) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tlet dH = Math.sin((((smp_h - std_h + 360) / 2) * Math.PI) / 180);\n\treturn 2 * Math.sqrt(std.c * smp.c) * dH;\n};\n\nconst differenceEuclidean = (mode = 'rgb', weights = [1, 1, 1, 0]) => {\n\tlet def = getMode(mode);\n\tlet channels = def.channels;\n\tlet diffs = def.difference;\n\tlet conv = converter(mode);\n\treturn (std, smp) => {\n\t\tlet ConvStd = conv(std);\n\t\tlet ConvSmp = conv(smp);\n\t\treturn Math.sqrt(\n\t\t\tchannels.reduce((sum, k, idx) => {\n\t\t\t\tlet delta = diffs[k]\n\t\t\t\t\t? diffs[k](ConvStd, ConvSmp)\n\t\t\t\t\t: ConvStd[k] - ConvSmp[k];\n\t\t\t\treturn (\n\t\t\t\t\tsum +\n\t\t\t\t\t(weights[idx] || 0) * Math.pow(isNaN(delta) ? 0 : delta, 2)\n\t\t\t\t);\n\t\t\t}, 0)\n\t\t);\n\t};\n};\n\nconst differenceCie76 = () => differenceEuclidean('lab65');\n\nconst differenceCie94 = (kL = 1, K1 = 0.045, K2 = 0.015) => {\n\tlet lab = converter('lab65');\n\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\n\t\t// Extract Lab values, and compute Chroma\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\tlet dL2 = Math.pow(lStd - lSmp, 2);\n\t\tlet dC2 = Math.pow(cStd - cSmp, 2);\n\t\tlet dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2;\n\n\t\treturn Math.sqrt(\n\t\t\tdL2 / Math.pow(kL, 2) +\n\t\t\t\tdC2 / Math.pow(1 + K1 * cStd, 2) +\n\t\t\t\tdH2 / Math.pow(1 + K2 * cStd, 2)\n\t\t);\n\t};\n};\n\n/*\n\tCIEDE2000 color difference, original Matlab implementation by Gaurav Sharma\n\tBased on \"The CIEDE2000 Color-Difference Formula: Implementation Notes, Supplementary Test Data, and Mathematical Observations\" \n\tby Gaurav Sharma, Wencheng Wu, Edul N. Dalal in Color Research and Application, vol. 30. No. 1, pp. 21-30, February 2005.\n\thttp://www2.ece.rochester.edu/~gsharma/ciede2000/\n */\n\nconst differenceCiede2000 = (Kl = 1, Kc = 1, Kh = 1) => {\n\tlet lab = converter('lab65');\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\tlet cAvg = (cStd + cSmp) / 2;\n\n\t\tlet G =\n\t\t\t0.5 *\n\t\t\t(1 -\n\t\t\t\tMath.sqrt(\n\t\t\t\t\tMath.pow(cAvg, 7) / (Math.pow(cAvg, 7) + Math.pow(25, 7))\n\t\t\t\t));\n\n\t\tlet apStd = aStd * (1 + G);\n\t\tlet apSmp = aSmp * (1 + G);\n\n\t\tlet cpStd = Math.sqrt(apStd * apStd + bStd * bStd);\n\t\tlet cpSmp = Math.sqrt(apSmp * apSmp + bSmp * bSmp);\n\n\t\tlet hpStd =\n\t\t\tMath.abs(apStd) + Math.abs(bStd) === 0\n\t\t\t\t? 0\n\t\t\t\t: Math.atan2(bStd, apStd);\n\t\thpStd += (hpStd < 0) * 2 * Math.PI;\n\n\t\tlet hpSmp =\n\t\t\tMath.abs(apSmp) + Math.abs(bSmp) === 0\n\t\t\t\t? 0\n\t\t\t\t: Math.atan2(bSmp, apSmp);\n\t\thpSmp += (hpSmp < 0) * 2 * Math.PI;\n\n\t\tlet dL = lSmp - lStd;\n\t\tlet dC = cpSmp - cpStd;\n\n\t\tlet dhp = cpStd * cpSmp === 0 ? 0 : hpSmp - hpStd;\n\t\tdhp -= (dhp > Math.PI) * 2 * Math.PI;\n\t\tdhp += (dhp < -Math.PI) * 2 * Math.PI;\n\n\t\tlet dH = 2 * Math.sqrt(cpStd * cpSmp) * Math.sin(dhp / 2);\n\n\t\tlet Lp = (lStd + lSmp) / 2;\n\t\tlet Cp = (cpStd + cpSmp) / 2;\n\n\t\tlet hp;\n\t\tif (cpStd * cpSmp === 0) {\n\t\t\thp = hpStd + hpSmp;\n\t\t} else {\n\t\t\thp = (hpStd + hpSmp) / 2;\n\t\t\thp -= (Math.abs(hpStd - hpSmp) > Math.PI) * Math.PI;\n\t\t\thp += (hp < 0) * 2 * Math.PI;\n\t\t}\n\n\t\tlet Lpm50 = Math.pow(Lp - 50, 2);\n\t\tlet T =\n\t\t\t1 -\n\t\t\t0.17 * Math.cos(hp - Math.PI / 6) +\n\t\t\t0.24 * Math.cos(2 * hp) +\n\t\t\t0.32 * Math.cos(3 * hp + Math.PI / 30) -\n\t\t\t0.2 * Math.cos(4 * hp - (63 * Math.PI) / 180);\n\n\t\tlet Sl = 1 + (0.015 * Lpm50) / Math.sqrt(20 + Lpm50);\n\t\tlet Sc = 1 + 0.045 * Cp;\n\t\tlet Sh = 1 + 0.015 * Cp * T;\n\n\t\tlet deltaTheta =\n\t\t\t((30 * Math.PI) / 180) *\n\t\t\tMath.exp(-1 * Math.pow(((180 / Math.PI) * hp - 275) / 25, 2));\n\t\tlet Rc =\n\t\t\t2 *\n\t\t\tMath.sqrt(Math.pow(Cp, 7) / (Math.pow(Cp, 7) + Math.pow(25, 7)));\n\n\t\tlet Rt = -1 * Math.sin(2 * deltaTheta) * Rc;\n\n\t\treturn Math.sqrt(\n\t\t\tMath.pow(dL / (Kl * Sl), 2) +\n\t\t\t\tMath.pow(dC / (Kc * Sc), 2) +\n\t\t\t\tMath.pow(dH / (Kh * Sh), 2) +\n\t\t\t\t(((Rt * dC) / (Kc * Sc)) * dH) / (Kh * Sh)\n\t\t);\n\t};\n};\n\n/*\n\tCMC (l:c) difference formula\n\n\tReferences:\n\t\thttps://en.wikipedia.org/wiki/Color_difference#CMC_l:c_(1984)\n\t\thttp://www.brucelindbloom.com/index.html?Eqn_DeltaE_CMC.html\n */\nconst differenceCmc = (l = 1, c = 1) => {\n\tlet lab = converter('lab65');\n\n\t/*\n\t\tComparte two colors:\n\t\tstd - standard (first) color\n\t\tsmp - sample (second) color\n\t */\n\treturn (std, smp) => {\n\t\t// convert standard color to Lab\n\t\tlet LabStd = lab(std);\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\n\t\t// Obtain hue/chroma\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\t\tlet hStd = Math.atan2(bStd, aStd);\n\t\thStd = hStd + 2 * Math.PI * (hStd < 0);\n\n\t\t// convert sample color to Lab, obtain LCh\n\t\tlet LabSmp = lab(smp);\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\n\t\t// Obtain chroma\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\t// lightness delta squared\n\t\tlet dL2 = Math.pow(lStd - lSmp, 2);\n\n\t\t// chroma delta squared\n\t\tlet dC2 = Math.pow(cStd - cSmp, 2);\n\n\t\t// hue delta squared\n\t\tlet dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2;\n\n\t\tlet F = Math.sqrt(Math.pow(cStd, 4) / (Math.pow(cStd, 4) + 1900));\n\t\tlet T =\n\t\t\thStd >= (164 / 180) * Math.PI && hStd <= (345 / 180) * Math.PI\n\t\t\t\t? 0.56 + Math.abs(0.2 * Math.cos(hStd + (168 / 180) * Math.PI))\n\t\t\t\t: 0.36 + Math.abs(0.4 * Math.cos(hStd + (35 / 180) * Math.PI));\n\n\t\tlet Sl = lStd < 16 ? 0.511 : (0.040975 * lStd) / (1 + 0.01765 * lStd);\n\t\tlet Sc = (0.0638 * cStd) / (1 + 0.0131 * cStd) + 0.638;\n\t\tlet Sh = Sc * (F * T + 1 - F);\n\n\t\treturn Math.sqrt(\n\t\t\tdL2 / Math.pow(l * Sl, 2) +\n\t\t\t\tdC2 / Math.pow(c * Sc, 2) +\n\t\t\t\tdH2 / Math.pow(Sh, 2)\n\t\t);\n\t};\n};\n\n/*\n\n\tHyAB color difference formula, introduced in:\n\n\t\tAbasi S, Amani Tehran M, Fairchild MD. \n\t\t\"Distance metrics for very large color differences.\"\n\t\tColor Res Appl. 2019; 1–16. \n\t\thttps://doi.org/10.1002/col.22451\n\n\tPDF available at:\n\t\n\t\thttp://markfairchild.org/PDFs/PAP40.pdf\n */\nconst differenceHyab = () => {\n\tlet lab = converter('lab65');\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\t\tlet dL = LabStd.l - LabSmp.l;\n\t\tlet dA = LabStd.a - LabSmp.a;\n\t\tlet dB = LabStd.b - LabSmp.b;\n\t\treturn Math.abs(dL) + Math.sqrt(dA * dA + dB * dB);\n\t};\n};\n\n/*\n\t\"Measuring perceived color difference using YIQ NTSC\n\ttransmission color space in mobile applications\"\n\t\t\n\t\tby Yuriy Kotsarenko, Fernando Ramos in:\n\t\tProgramación Matemática y Software (2010) \n\n\tAvailable at:\n\t\t\n\t\thttp://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf\n */\nconst differenceKotsarenkoRamos = () =>\n\tdifferenceEuclidean('yiq', [0.5053, 0.299, 0.1957]);\n\n/*\n\tΔE_ITP, as defined in Rec. ITU-R BT.2124:\n\n\thttps://www.itu.int/rec/R-REC-BT.2124/en\n*/\nconst differenceItp = () =>\n\tdifferenceEuclidean('itp', [518400, 129600, 518400]);\n\nexport {\n\tdifferenceHueChroma,\n\tdifferenceHueSaturation,\n\tdifferenceHueNaive,\n\tdifferenceEuclidean,\n\tdifferenceCie76,\n\tdifferenceCie94,\n\tdifferenceCiede2000,\n\tdifferenceCmc,\n\tdifferenceHyab,\n\tdifferenceKotsarenkoRamos,\n\tdifferenceItp\n};\n","import converter from './converter.js';\nimport { getMode } from './modes.js';\n\nconst averageAngle = val => {\n\t// See: https://en.wikipedia.org/wiki/Mean_of_circular_quantities\n\tlet sum = val.reduce(\n\t\t(sum, val) => {\n\t\t\tif (val !== undefined) {\n\t\t\t\tlet rad = (val * Math.PI) / 180;\n\t\t\t\tsum.sin += Math.sin(rad);\n\t\t\t\tsum.cos += Math.cos(rad);\n\t\t\t}\n\t\t\treturn sum;\n\t\t},\n\t\t{ sin: 0, cos: 0 }\n\t);\n\tlet angle = (Math.atan2(sum.sin, sum.cos) * 180) / Math.PI;\n\treturn angle < 0 ? 360 + angle : angle;\n};\n\nconst averageNumber = val => {\n\tlet a = val.filter(v => v !== undefined);\n\treturn a.length ? a.reduce((sum, v) => sum + v, 0) / a.length : undefined;\n};\n\nconst isfn = o => typeof o === 'function';\n\nfunction average(colors, mode = 'rgb', overrides) {\n\tlet def = getMode(mode);\n\tlet cc = colors.map(converter(mode));\n\treturn def.channels.reduce(\n\t\t(res, ch) => {\n\t\t\tlet arr = cc.map(c => c[ch]).filter(val => val !== undefined);\n\t\t\tif (arr.length) {\n\t\t\t\tlet fn;\n\t\t\t\tif (isfn(overrides)) {\n\t\t\t\t\tfn = overrides;\n\t\t\t\t} else if (overrides && isfn(overrides[ch])) {\n\t\t\t\t\tfn = overrides[ch];\n\t\t\t\t} else if (def.average && isfn(def.average[ch])) {\n\t\t\t\t\tfn = def.average[ch];\n\t\t\t\t} else {\n\t\t\t\t\tfn = averageNumber;\n\t\t\t\t}\n\t\t\t\tres[ch] = fn(arr, ch);\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t{ mode }\n\t);\n}\n\nexport { average, averageAngle, averageNumber };\n","/* \n\tDave Green's Cubehelix\n\t----------------------\n\n\tGreen, D. A., 2011, \"A colour scheme for the display of astronomical intensity images\", \n\tBulletin of the Astronomical Society of India, 39, 289. (2011BASI...39..289G at ADS.) \n\n\thttps://www.mrao.cam.ac.uk/%7Edag/CUBEHELIX/\n\thttps://arxiv.org/pdf/1108.5083.pdf\n\n\tAlthough Cubehelix was defined to be a method to obtain a colour scheme,\n\tit actually contains a definition of a colour space, as identified by \n\tMike Bostock and implemented in D3.js.\n\n\tGreen's paper introduces the following terminology:\n\n\t* \ta `lightness` dimension in the interval [0, 1] \n\t\ton which we interpolate to obtain the colour scheme\n\t*\ta `start` colour that is analogous to a Hue in HSL space\n\t*\ta number of `rotations` around the Hue cylinder.\n\t*\ta `hue` parameter which should more appropriately be called `saturation`\n\t\n\tAs such, the original definition of the Cubehelix scheme is actually an\n\tinterpolation between two colors in the Cubehelix space:\n\n\tH: start \t\t\t\tH: start + 360 * rotations\n\tS: hue \t\t\t->\t\tS: hue\n\tL: 0\t\t\t\t\tL: 1\n\n\tWe can therefore extend the interpolation to any two colors in this space,\n\twith a variable Saturation and a Lightness interval other than the fixed 0 -> 1.\n*/\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport convertRgbToCubehelix from './convertRgbToCubehelix.js';\nimport convertCubehelixToRgb from './convertCubehelixToRgb.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'cubehelix',\n\tchannels: ['h', 's', 'l', 'alpha'],\n\tparse: ['--cubehelix'],\n\tserialize: '--cubehelix',\n\n\tranges: {\n\t\th: [0, 360],\n\t\ts: [0, 4.614],\n\t\tl: [0, 1]\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToCubehelix\n\t},\n\n\ttoMode: {\n\t\trgb: convertCubehelixToRgb\n\t},\n\n\tinterpolate: {\n\t\th: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupHueShorter\n\t\t},\n\t\ts: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n\n/* \n\tReferences: \n\t\t* https://drafts.csswg.org/css-color/#lab-to-lch\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n*/\nconst convertLabToLch = ({ l, a, b, alpha }, mode = 'lch') => {\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet c = Math.sqrt(a * a + b * b);\n\tlet res = { mode, l, c };\n\tif (c) res.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLabToLch;\n","/* \n\tReferences: \n\t\t* https://drafts.csswg.org/css-color/#lch-to-lab\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n*/\nconst convertLchToLab = ({ l, c, h, alpha }, mode = 'lab') => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode,\n\t\tl,\n\t\ta: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tb: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLchToLab;\n","export const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n","/*\n\tThe XYZ tristimulus values (white point)\n\tof standard illuminants for the CIE 1931 2° \n\tstandard observer.\n\n\tSee: https://en.wikipedia.org/wiki/Standard_illuminant\n */\n\nexport const D50 = {\n\tX: 0.3457 / 0.3585,\n\tY: 1,\n\tZ: (1 - 0.3457 - 0.3585) / 0.3585\n};\n\nexport const D65 = {\n\tX: 0.3127 / 0.329,\n\tY: 1,\n\tZ: (1 - 0.3127 - 0.329) / 0.329\n};\n\nexport const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n","import { k, e } from '../xyz65/constants.js';\nimport { D65 } from '../constants.js';\n\nlet fn = v => (Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k);\n\nconst convertLab65ToXyz65 = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\n\tlet fy = (l + 16) / 116;\n\tlet fx = a / 500 + fy;\n\tlet fz = fy - b / 200;\n\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx: fn(fx) * D65.X,\n\t\ty: fn(fy) * D65.Y,\n\t\tz: fn(fz) * D65.Z\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLab65ToXyz65;\n","import convertLab65ToXyz65 from './convertLab65ToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst convertLab65ToRgb = lab => convertXyz65ToRgb(convertLab65ToXyz65(lab));\n\nexport default convertLab65ToRgb;\n","import { k, e } from '../xyz65/constants.js';\nimport { D65 } from '../constants.js';\n\nconst f = value => (value > e ? Math.cbrt(value) : (k * value + 16) / 116);\n\nconst convertXyz65ToLab65 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet f0 = f(x / D65.X);\n\tlet f1 = f(y / D65.Y);\n\tlet f2 = f(z / D65.Z);\n\n\tlet res = {\n\t\tmode: 'lab65',\n\t\tl: 116 * f1 - 16,\n\t\ta: 500 * (f0 - f1),\n\t\tb: 200 * (f1 - f2)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToLab65;\n","import convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToLab65 from './convertXyz65ToLab65.js';\n\nconst convertRgbToLab65 = rgb => {\n\tlet res = convertXyz65ToLab65(convertRgbToXyz65(rgb));\n\n\t// Fixes achromatic RGB colors having a _slight_ chroma due to floating-point errors\n\t// and approximated computations in sRGB <-> CIELab.\n\t// See: https://github.com/d3/d3-color/pull/46\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToLab65;\n","export const kE = 1;\nexport const kCH = 1;\nexport const θ = (26 / 180) * Math.PI;\nexport const cosθ = Math.cos(θ);\nexport const sinθ = Math.sin(θ);\nexport const factor = 100 / Math.log(139 / 100); // ~ 303.67\n","import { kCH, kE, sinθ, cosθ, θ, factor } from './constants.js';\n\n/*\n\tConvert DIN99o LCh to CIELab D65\n\t--------------------------------\n */\n\nconst convertDlchToLab65 = ({ l, c, h, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (c === undefined) c = 0;\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'lab65',\n\t\tl: (Math.exp((l * kE) / factor) - 1) / 0.0039\n\t};\n\n\tlet G = (Math.exp(0.0435 * c * kCH * kE) - 1) / 0.075;\n\tlet e = G * Math.cos((h / 180) * Math.PI - θ);\n\tlet f = G * Math.sin((h / 180) * Math.PI - θ);\n\tres.a = e * cosθ - (f / 0.83) * sinθ;\n\tres.b = e * sinθ + (f / 0.83) * cosθ;\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertDlchToLab65;\n","import { kCH, kE, sinθ, cosθ, θ, factor } from './constants.js';\nimport normalizeHue from '../util/normalizeHue.js';\n\n/*\n\tConvert CIELab D65 to DIN99o LCh\n\t================================\n */\n\nconst convertLab65ToDlch = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet e = a * cosθ + b * sinθ;\n\tlet f = 0.83 * (b * cosθ - a * sinθ);\n\tlet G = Math.sqrt(e * e + f * f);\n\tlet res = {\n\t\tmode: 'dlch',\n\t\tl: (factor / kE) * Math.log(1 + 0.0039 * l),\n\t\tc: Math.log(1 + 0.075 * G) / (0.0435 * kCH * kE)\n\t};\n\n\tif (res.c) {\n\t\tres.h = normalizeHue(((Math.atan2(f, e) + θ) / Math.PI) * 180);\n\t}\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLab65ToDlch;\n","import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\nimport convertDlchToLab65 from '../dlch/convertDlchToLab65.js';\nimport convertLab65ToDlch from '../dlch/convertLab65ToDlch.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst convertDlabToLab65 = c => convertDlchToLab65(convertLabToLch(c, 'dlch'));\nconst convertLab65ToDlab = c => convertLchToLab(convertLab65ToDlch(c), 'dlab');\n\nconst definition = {\n\tmode: 'dlab',\n\n\tparse: ['--din99o-lab'],\n\tserialize: '--din99o-lab',\n\n\ttoMode: {\n\t\tlab65: convertDlabToLab65,\n\t\trgb: c => convertLab65ToRgb(convertDlabToLab65(c))\n\t},\n\n\tfromMode: {\n\t\tlab65: convertLab65ToDlab,\n\t\trgb: c => convertLab65ToDlab(convertRgbToLab65(c))\n\t},\n\n\tchannels: ['l', 'a', 'b', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-40.09, 45.501],\n\t\tb: [-40.469, 44.344]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t}\n};\n\nexport default definition;\n","import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertDlchToLab65 from './convertDlchToLab65.js';\nimport convertLab65ToDlch from './convertLab65ToDlch.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'dlch',\n\n\tparse: ['--din99o-lch'],\n\tserialize: '--din99o-lch',\n\n\ttoMode: {\n\t\tlab65: convertDlchToLab65,\n\t\tdlab: c => convertLchToLab(c, 'dlab'),\n\t\trgb: c => convertLab65ToRgb(convertDlchToLab65(c))\n\t},\n\n\tfromMode: {\n\t\tlab65: convertLab65ToDlch,\n\t\tdlab: c => convertLabToLch(c, 'dlch'),\n\t\trgb: c => convertLab65ToDlch(convertRgbToLab65(c))\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 51.484],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\tc: interpolatorLinear,\n\t\th: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupHueShorter\n\t\t},\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHsiToRgb({ h, s, i, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (i === undefined) i = 0;\n\tlet f = Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tg: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tb: i * (1 - s)\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tg: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tb: i * (1 - s)\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = {\n\t\t\t\tr: i * (1 - s),\n\t\t\t\tg: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tb: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = {\n\t\t\t\tr: i * (1 - s),\n\t\t\t\tg: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tb: i * (1 + s * (3 / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tg: i * (1 - s),\n\t\t\t\tb: i * (1 + s * (3 / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tg: i * (1 - s),\n\t\t\t\tb: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: i * (1 - s), g: i * (1 - s), b: i * (1 - s) };\n\t}\n\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsi({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsi',\n\t\ts: r + g + b === 0 ? 0 : 1 - (3 * m) / (r + g + b),\n\t\ti: (r + g + b) / 3\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","import convertHsiToRgb from './convertHsiToRgb.js';\nimport convertRgbToHsi from './convertRgbToHsi.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsi',\n\n\ttoMode: {\n\t\trgb: convertHsiToRgb\n\t},\n\n\tparse: ['--hsi'],\n\tserialize: '--hsi',\n\n\tfromMode: {\n\t\trgb: convertRgbToHsi\n\t},\n\n\tchannels: ['h', 's', 'i', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\ti: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHslToRgb({ h, s, l, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (l === undefined) l = 0;\n\tlet m1 = l + s * (l < 0.5 ? l : 1 - l);\n\tlet m2 = m1 - (m1 - l) * 2 * Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = { r: m1, g: m2, b: 2 * l - m1 };\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = { r: m2, g: m1, b: 2 * l - m1 };\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = { r: 2 * l - m1, g: m1, b: m2 };\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = { r: 2 * l - m1, g: m2, b: m1 };\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = { r: m2, g: 2 * l - m1, b: m1 };\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = { r: m1, g: 2 * l - m1, b: m2 };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: 2 * l - m1, g: 2 * l - m1, b: 2 * l - m1 };\n\t}\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsl({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsl',\n\t\ts: M === m ? 0 : (M - m) / (1 - Math.abs(M + m - 1)),\n\t\tl: 0.5 * (M + m)\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","const hueToDeg = (val, unit) => {\n\tswitch (unit) {\n\t\tcase 'deg':\n\t\t\treturn +val;\n\t\tcase 'rad':\n\t\t\treturn (val / Math.PI) * 180;\n\t\tcase 'grad':\n\t\t\treturn (val / 10) * 9;\n\t\tcase 'turn':\n\t\t\treturn val * 360;\n\t}\n};\n\nexport default hueToDeg;\n","import hueToDeg from '../util/hue.js';\nimport { hue, per, num_per, c } from '../util/regex.js';\n\n/*\n\thsl() regular expressions for legacy format\n\tReference: https://drafts.csswg.org/css-color/#the-hsl-notation\n */\nconst hsl_old = new RegExp(\n\t`^hsla?\\\\(\\\\s*${hue}${c}${per}${c}${per}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst parseHslLegacy = color => {\n\tlet match = color.match(hsl_old);\n\tif (!match) return;\n\tlet res = { mode: 'hsl' };\n\n\tif (match[3] !== undefined) {\n\t\tres.h = +match[3];\n\t} else if (match[1] !== undefined && match[2] !== undefined) {\n\t\tres.h = hueToDeg(match[1], match[2]);\n\t}\n\n\tif (match[4] !== undefined) {\n\t\tres.s = Math.min(Math.max(0, match[4] / 100), 1);\n\t}\n\n\tif (match[5] !== undefined) {\n\t\tres.l = Math.min(Math.max(0, match[5] / 100), 1);\n\t}\n\n\tif (match[6] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, match[6] / 100));\n\t} else if (match[7] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, +match[7]));\n\t}\n\treturn res;\n};\n\nexport default parseHslLegacy;\n","import { Tok } from '../parse.js';\n\nfunction parseHsl(color, parsed) {\n\tif (!parsed || (parsed[0] !== 'hsl' && parsed[0] !== 'hsla')) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'hsl' };\n\tconst [, h, s, l, alpha] = parsed;\n\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\n\tif (s.type !== Tok.None) {\n\t\tif (s.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.s = s.value / 100;\n\t}\n\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = l.value / 100;\n\t}\n\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseHsl;\n","import convertHslToRgb from './convertHslToRgb.js';\nimport convertRgbToHsl from './convertRgbToHsl.js';\nimport parseHslLegacy from './parseHslLegacy.js';\nimport parseHsl from './parseHsl.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsl',\n\n\ttoMode: {\n\t\trgb: convertHslToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToHsl\n\t},\n\n\tchannels: ['h', 's', 'l', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tparse: [parseHsl, parseHslLegacy],\n\tserialize: c =>\n\t\t`hsl(${c.h !== undefined ? c.h : 'none'} ${\n\t\t\tc.s !== undefined ? c.s * 100 + '%' : 'none'\n\t\t} ${c.l !== undefined ? c.l * 100 + '%' : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHsvToRgb({ h, s, v, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (v === undefined) v = 0;\n\tlet f = Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = { r: v, g: v * (1 - s * f), b: v * (1 - s) };\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = { r: v * (1 - s * f), g: v, b: v * (1 - s) };\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = { r: v * (1 - s), g: v, b: v * (1 - s * f) };\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = { r: v * (1 - s), g: v * (1 - s * f), b: v };\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = { r: v * (1 - s * f), g: v * (1 - s), b: v };\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = { r: v, g: v * (1 - s), b: v * (1 - s * f) };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: v * (1 - s), g: v * (1 - s), b: v * (1 - s) };\n\t}\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsv({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsv',\n\t\ts: M === 0 ? 0 : 1 - m / M,\n\t\tv: M\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","import convertHsvToRgb from './convertHsvToRgb.js';\nimport convertRgbToHsv from './convertRgbToHsv.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsv',\n\n\ttoMode: {\n\t\trgb: convertHsvToRgb\n\t},\n\n\tparse: ['--hsv'],\n\tserialize: '--hsv',\n\n\tfromMode: {\n\t\trgb: convertRgbToHsv\n\t},\n\n\tchannels: ['h', 's', 'v', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\tv: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","/*\n\tHWB to RGB converter\n\t--------------------\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#hwb-to-rgb\n\t\t* https://en.wikipedia.org/wiki/HWB_color_model\n\t\t* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf\n */\n\nimport convertHsvToRgb from '../hsv/convertHsvToRgb.js';\n\nexport default function convertHwbToRgb({ h, w, b, alpha }) {\n\tif (w === undefined) w = 0;\n\tif (b === undefined) b = 0;\n\t// normalize w + b to 1\n\tif (w + b > 1) {\n\t\tlet s = w + b;\n\t\tw /= s;\n\t\tb /= s;\n\t}\n\treturn convertHsvToRgb({\n\t\th: h,\n\t\ts: b === 1 ? 1 : 1 - w / (1 - b),\n\t\tv: 1 - b,\n\t\talpha: alpha\n\t});\n}\n","/*\n\tRGB to HWB converter\n\t--------------------\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#hwb-to-rgb\n\t\t* https://en.wikipedia.org/wiki/HWB_color_model\n\t\t* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf\n */\n\nimport convertRgbToHsv from '../hsv/convertRgbToHsv.js';\n\nexport default function convertRgbToHwb(rgba) {\n\tlet hsv = convertRgbToHsv(rgba);\n\tif (hsv === undefined) return undefined;\n\tlet s = hsv.s !== undefined ? hsv.s : 0;\n\tlet v = hsv.v !== undefined ? hsv.v : 0;\n\tlet res = {\n\t\tmode: 'hwb',\n\t\tw: (1 - s) * v,\n\t\tb: 1 - v\n\t};\n\tif (hsv.h !== undefined) res.h = hsv.h;\n\tif (hsv.alpha !== undefined) res.alpha = hsv.alpha;\n\treturn res;\n}\n","import { Tok } from '../parse.js';\n\nfunction ParseHwb(color, parsed) {\n\tif (!parsed || parsed[0] !== 'hwb') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'hwb' };\n\tconst [, h, w, b, alpha] = parsed;\n\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\n\tif (w.type !== Tok.None) {\n\t\tif (w.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.w = w.value / 100;\n\t}\n\n\tif (b.type !== Tok.None) {\n\t\tif (b.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.b = b.value / 100;\n\t}\n\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default ParseHwb;\n","import convertHwbToRgb from './convertHwbToRgb.js';\nimport convertRgbToHwb from './convertRgbToHwb.js';\nimport parseHwb from './parseHwb.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueNaive } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hwb',\n\n\ttoMode: {\n\t\trgb: convertHwbToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToHwb\n\t},\n\n\tchannels: ['h', 'w', 'b', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tparse: [parseHwb],\n\tserialize: c =>\n\t\t`hwb(${c.h !== undefined ? c.h : 'none'} ${\n\t\t\tc.w !== undefined ? c.w * 100 + '%' : 'none'\n\t\t} ${c.b !== undefined ? c.b * 100 + '%' : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tw: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueNaive\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","/*\n\thttps://en.wikipedia.org/wiki/Transfer_functions_in_imaging\n*/\n\nexport const M1 = 0.1593017578125;\nexport const M2 = 78.84375;\nexport const C1 = 0.8359375;\nexport const C2 = 18.8515625;\nexport const C3 = 18.6875;\n\n/*\n\tPerceptual Quantizer, as defined in Rec. BT 2100-2 (2018)\n\n\t* https://www.itu.int/rec/R-REC-BT.2100-2-201807-I/en\n\t* https://en.wikipedia.org/wiki/Perceptual_quantizer\n*/\n\n/* PQ EOTF, defined for `v` in [0,1]. */\nexport function transferPqDecode(v) {\n\tif (v < 0) return 0;\n\tconst c = Math.pow(v, 1 / M2);\n\treturn 1e4 * Math.pow(Math.max(0, c - C1) / (C2 - C3 * c), 1 / M1);\n}\n\n/* PQ EOTF^-1, defined for `v` in [0, 1e4]. */\nexport function transferPqEncode(v) {\n\tif (v < 0) return 0;\n\tconst c = Math.pow(v / 1e4, M1);\n\treturn Math.pow((C1 + C2 * c) / (1 + C3 * c), M2);\n}\n","import { YW } from '../hdr/constants.js';\nimport { transferPqDecode } from '../hdr/transfer.js';\n\nconst toRel = c => Math.max(c / YW, 0);\n\nconst convertItpToXyz65 = ({ i, t, p, alpha }) => {\n\tif (i === undefined) i = 0;\n\tif (t === undefined) t = 0;\n\tif (p === undefined) p = 0;\n\n\tconst l = transferPqDecode(\n\t\ti + 0.008609037037932761 * t + 0.11102962500302593 * p\n\t);\n\tconst m = transferPqDecode(\n\t\ti - 0.00860903703793275 * t - 0.11102962500302599 * p\n\t);\n\tconst s = transferPqDecode(\n\t\ti + 0.5600313357106791 * t - 0.32062717498731885 * p\n\t);\n\n\tconst res = {\n\t\tmode: 'xyz65',\n\t\tx: toRel(\n\t\t\t2.0701522183894219 * l -\n\t\t\t\t1.3263473389671556 * m +\n\t\t\t\t0.2066510476294051 * s\n\t\t),\n\t\ty: toRel(\n\t\t\t0.3647385209748074 * l +\n\t\t\t\t0.680566024947227 * m -\n\t\t\t\t0.0453045459220346 * s\n\t\t),\n\t\tz: toRel(\n\t\t\t-0.049747207535812 * l -\n\t\t\t\t0.0492609666966138 * m +\n\t\t\t\t1.1880659249923042 * s\n\t\t)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertItpToXyz65;\n","import { YW } from '../hdr/constants.js';\nimport { transferPqEncode } from '../hdr/transfer.js';\n\nconst toAbs = (c = 0) => Math.max(c * YW, 0);\n\nconst convertXyz65ToItp = ({ x, y, z, alpha }) => {\n\tconst absX = toAbs(x);\n\tconst absY = toAbs(y);\n\tconst absZ = toAbs(z);\n\tconst l = transferPqEncode(\n\t\t0.3592832590121217 * absX +\n\t\t\t0.6976051147779502 * absY -\n\t\t\t0.0358915932320289 * absZ\n\t);\n\tconst m = transferPqEncode(\n\t\t-0.1920808463704995 * absX +\n\t\t\t1.1004767970374323 * absY +\n\t\t\t0.0753748658519118 * absZ\n\t);\n\tconst s = transferPqEncode(\n\t\t0.0070797844607477 * absX +\n\t\t\t0.0748396662186366 * absY +\n\t\t\t0.8433265453898765 * absZ\n\t);\n\n\tconst i = 0.5 * l + 0.5 * m;\n\tconst t = 1.61376953125 * l - 3.323486328125 * m + 1.709716796875 * s;\n\tconst p = 4.378173828125 * l - 4.24560546875 * m - 0.132568359375 * s;\n\n\tconst res = { mode: 'itp', i, t, p };\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToItp;\n","import { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport convertItpToXyz65 from './convertItpToXyz65.js';\nimport convertXyz65ToItp from './convertXyz65ToItp.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\n/*\n ICtCp (or ITP) color space, as defined in ITU-R Recommendation BT.2100.\n\n ICtCp is drafted to be supported in CSS within\n [CSS Color HDR Module Level 1](https://drafts.csswg.org/css-color-hdr/#ICtCp) spec.\n*/\n\nconst definition = {\n\tmode: 'itp',\n\tchannels: ['i', 't', 'p', 'alpha'],\n\tparse: ['--ictcp'],\n\tserialize: '--ictcp',\n\n\ttoMode: {\n\t\txyz65: convertItpToXyz65,\n\t\trgb: color => convertXyz65ToRgb(convertItpToXyz65(color))\n\t},\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToItp,\n\t\trgb: color => convertXyz65ToItp(convertRgbToXyz65(color))\n\t},\n\n\tranges: {\n\t\ti: [0, 0.581],\n\t\tt: [-0.369, 0.272],\n\t\tp: [-0.164, 0.331]\n\t},\n\n\tinterpolate: {\n\t\ti: interpolatorLinear,\n\t\tt: interpolatorLinear,\n\t\tp: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","import { M1 as n, C1, C2, C3 } from '../hdr/transfer.js';\nconst p = 134.03437499999998; // = 1.7 * 2523 / Math.pow(2, 5);\nconst d0 = 1.6295499532821566e-11;\n\n/* \n\tThe encoding function is derived from Perceptual Quantizer.\n*/\nconst jabPqEncode = v => {\n\tif (v < 0) return 0;\n\tlet vn = Math.pow(v / 10000, n);\n\treturn Math.pow((C1 + C2 * vn) / (1 + C3 * vn), p);\n};\n\n// Convert to Absolute XYZ\nconst abs = (v = 0) => Math.max(v * 203, 0);\n\nconst convertXyz65ToJab = ({ x, y, z, alpha }) => {\n\tx = abs(x);\n\ty = abs(y);\n\tz = abs(z);\n\n\tlet xp = 1.15 * x - 0.15 * z;\n\tlet yp = 0.66 * y + 0.34 * x;\n\n\tlet l = jabPqEncode(0.41478972 * xp + 0.579999 * yp + 0.014648 * z);\n\tlet m = jabPqEncode(-0.20151 * xp + 1.120649 * yp + 0.0531008 * z);\n\tlet s = jabPqEncode(-0.0166008 * xp + 0.2648 * yp + 0.6684799 * z);\n\n\tlet i = (l + m) / 2;\n\n\tlet res = {\n\t\tmode: 'jab',\n\t\tj: (0.44 * i) / (1 - 0.56 * i) - d0,\n\t\ta: 3.524 * l - 4.066708 * m + 0.542708 * s,\n\t\tb: 0.199076 * l + 1.096799 * m - 1.295875 * s\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToJab;\n","import { M1 as n, C1, C2, C3 } from '../hdr/transfer.js';\nconst p = 134.03437499999998; // = 1.7 * 2523 / Math.pow(2, 5);\nconst d0 = 1.6295499532821566e-11;\n\n/* \n\tThe encoding function is derived from Perceptual Quantizer.\n*/\nconst jabPqDecode = v => {\n\tif (v < 0) return 0;\n\tlet vp = Math.pow(v, 1 / p);\n\treturn 10000 * Math.pow((C1 - vp) / (C3 * vp - C2), 1 / n);\n};\n\nconst rel = v => v / 203;\n\nconst convertJabToXyz65 = ({ j, a, b, alpha }) => {\n\tif (j === undefined) j = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet i = (j + d0) / (0.44 + 0.56 * (j + d0));\n\n\tlet l = jabPqDecode(i + 0.13860504 * a + 0.058047316 * b);\n\tlet m = jabPqDecode(i - 0.13860504 * a - 0.058047316 * b);\n\tlet s = jabPqDecode(i - 0.096019242 * a - 0.8118919 * b);\n\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx: rel(\n\t\t\t1.661373024652174 * l -\n\t\t\t\t0.914523081304348 * m +\n\t\t\t\t0.23136208173913045 * s\n\t\t),\n\t\ty: rel(\n\t\t\t-0.3250758611844533 * l +\n\t\t\t\t1.571847026732543 * m -\n\t\t\t\t0.21825383453227928 * s\n\t\t),\n\t\tz: rel(-0.090982811 * l - 0.31272829 * m + 1.5227666 * s)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertJabToXyz65;\n","/*\n\tConvert sRGB to JzAzBz.\n\n\tFor achromatic sRGB colors, adjust the equivalent JzAzBz color\n\tto be achromatic as well, insteading of having a very slight chroma.\n */\n\nimport convertXyz65ToJab from './convertXyz65ToJab.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\n\nconst convertRgbToJab = rgb => {\n\tlet res = convertXyz65ToJab(convertRgbToXyz65(rgb));\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToJab;\n","import convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\nimport convertJabToXyz65 from './convertJabToXyz65.js';\n\nconst convertJabToRgb = color => convertXyz65ToRgb(convertJabToXyz65(color));\n\nexport default convertJabToRgb;\n","/*\n\tThe JzAzBz color space.\n\n\tBased on:\n\n\tMuhammad Safdar, Guihua Cui, Youn Jin Kim, and Ming Ronnier Luo, \n\t\"Perceptually uniform color space for image signals \n\tincluding high dynamic range and wide gamut,\" \n\tOpt. Express 25, 15131-15151 (2017) \n\n\thttps://doi.org/10.1364/OE.25.015131\n */\n\nimport convertXyz65ToJab from './convertXyz65ToJab.js';\nimport convertJabToXyz65 from './convertJabToXyz65.js';\nimport convertRgbToJab from './convertRgbToJab.js';\nimport convertJabToRgb from './convertJabToRgb.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'jab',\n\tchannels: ['j', 'a', 'b', 'alpha'],\n\n\tparse: ['--jzazbz'],\n\tserialize: '--jzazbz',\n\n\tfromMode: {\n\t\trgb: convertRgbToJab,\n\t\txyz65: convertXyz65ToJab\n\t},\n\n\ttoMode: {\n\t\trgb: convertJabToRgb,\n\t\txyz65: convertJabToXyz65\n\t},\n\n\tranges: {\n\t\tj: [0, 0.222],\n\t\ta: [-0.109, 0.129],\n\t\tb: [-0.185, 0.134]\n\t},\n\n\tinterpolate: {\n\t\tj: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n\nconst convertJabToJch = ({ j, a, b, alpha }) => {\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet c = Math.sqrt(a * a + b * b);\n\tlet res = {\n\t\tmode: 'jch',\n\t\tj,\n\t\tc\n\t};\n\tif (c) {\n\t\tres.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertJabToJch;\n","const convertJchToJab = ({ j, c, h, alpha }) => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'jab',\n\t\tj,\n\t\ta: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tb: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertJchToJab;\n","import convertJabToJch from './convertJabToJch.js';\nimport convertJchToJab from './convertJchToJab.js';\nimport convertJabToRgb from '../jab/convertJabToRgb.js';\nimport convertRgbToJab from '../jab/convertRgbToJab.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'jch',\n\n\tparse: ['--jzczhz'],\n\tserialize: '--jzczhz',\n\n\ttoMode: {\n\t\tjab: convertJchToJab,\n\t\trgb: c => convertJabToRgb(convertJchToJab(c))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertJabToJch(convertRgbToJab(c)),\n\t\tjab: convertJabToJch\n\t},\n\n\tchannels: ['j', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tj: [0, 0.221],\n\t\tc: [0, 0.19],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tj: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","export const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n","import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nlet fn = v => (Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k);\n\nconst convertLabToXyz50 = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet fy = (l + 16) / 116;\n\tlet fx = a / 500 + fy;\n\tlet fz = fy - b / 200;\n\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx: fn(fx) * D50.X,\n\t\ty: fn(fy) * D50.Y,\n\t\tz: fn(fz) * D50.Z\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLabToXyz50;\n","/*\n\tCIE XYZ D50 values to sRGB.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz50ToRgb = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb({\n\t\tr:\n\t\t\tx * 3.1341359569958707 -\n\t\t\ty * 1.6173863321612538 -\n\t\t\t0.4906619460083532 * z,\n\t\tg:\n\t\t\tx * -0.978795502912089 +\n\t\t\ty * 1.916254567259524 +\n\t\t\t0.03344273116131949 * z,\n\t\tb:\n\t\t\tx * 0.07195537988411677 -\n\t\t\ty * 0.2289768264158322 +\n\t\t\t1.405386058324125 * z\n\t});\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToRgb;\n","import convertLabToXyz50 from './convertLabToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\n\nconst convertLabToRgb = lab => convertXyz50ToRgb(convertLabToXyz50(lab));\n\nexport default convertLabToRgb;\n","/*\n\tConvert sRGB values to CIE XYZ D50\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertRgbToXyz50 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t0.436065742824811 * r +\n\t\t\t0.3851514688337912 * g +\n\t\t\t0.14307845442264197 * b,\n\t\ty:\n\t\t\t0.22249319175623702 * r +\n\t\t\t0.7168870538238823 * g +\n\t\t\t0.06061979053616537 * b,\n\t\tz:\n\t\t\t0.013923904500943465 * r +\n\t\t\t0.09708128566574634 * g +\n\t\t\t0.7140993584005155 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToXyz50;\n","import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nconst f = value => (value > e ? Math.cbrt(value) : (k * value + 16) / 116);\n\nconst convertXyz50ToLab = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet f0 = f(x / D50.X);\n\tlet f1 = f(y / D50.Y);\n\tlet f2 = f(z / D50.Z);\n\n\tlet res = {\n\t\tmode: 'lab',\n\t\tl: 116 * f1 - 16,\n\t\ta: 500 * (f0 - f1),\n\t\tb: 200 * (f1 - f2)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz50ToLab;\n","import convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\nimport convertXyz50ToLab from './convertXyz50ToLab.js';\n\nconst convertRgbToLab = rgb => {\n\tlet res = convertXyz50ToLab(convertRgbToXyz50(rgb));\n\n\t// Fixes achromatic RGB colors having a _slight_ chroma due to floating-point errors\n\t// and approximated computations in sRGB <-> CIELab.\n\t// See: https://github.com/d3/d3-color/pull/46\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToLab;\n","import { Tok } from '../parse.js';\n\nfunction parseLab(color, parsed) {\n\tif (!parsed || parsed[0] !== 'lab') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'lab' };\n\tconst [, l, a, b, alpha] = parsed;\n\tif (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (l.type !== Tok.None) {\n\t\tres.l = Math.min(Math.max(0, l.value), 100);\n\t}\n\tif (a.type !== Tok.None) {\n\t\tres.a = a.type === Tok.Number ? a.value : (a.value * 125) / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value : (b.value * 125) / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseLab;\n","import convertLabToRgb from './convertLabToRgb.js';\nimport convertLabToXyz50 from './convertLabToXyz50.js';\nimport convertRgbToLab from './convertRgbToLab.js';\nimport convertXyz50ToLab from './convertXyz50ToLab.js';\nimport parseLab from './parseLab.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'lab',\n\n\ttoMode: {\n\t\txyz50: convertLabToXyz50,\n\t\trgb: convertLabToRgb\n\t},\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToLab,\n\t\trgb: convertRgbToLab\n\t},\n\n\tchannels: ['l', 'a', 'b', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-125, 125],\n\t\tb: [-125, 125]\n\t},\n\n\tparse: [parseLab],\n\tserialize: c =>\n\t\t`lab(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.a !== undefined ? c.a : 'none'\n\t\t} ${c.b !== undefined ? c.b : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","import convertLab65ToRgb from './convertLab65ToRgb.js';\nimport convertLab65ToXyz65 from './convertLab65ToXyz65.js';\nimport convertRgbToLab65 from './convertRgbToLab65.js';\nimport convertXyz65ToLab65 from './convertXyz65ToLab65.js';\nimport lab from '../lab/definition.js';\n\nconst definition = {\n\t...lab,\n\tmode: 'lab65',\n\n\tparse: ['--lab-d65'],\n\tserialize: '--lab-d65',\n\n\ttoMode: {\n\t\txyz65: convertLab65ToXyz65,\n\t\trgb: convertLab65ToRgb\n\t},\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToLab65,\n\t\trgb: convertRgbToLab65\n\t},\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-125, 125],\n\t\tb: [-125, 125]\n\t}\n};\n\nexport default definition;\n","import { Tok } from '../parse.js';\n\nfunction parseLch(color, parsed) {\n\tif (!parsed || parsed[0] !== 'lch') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'lch' };\n\tconst [, l, c, h, alpha] = parsed;\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = Math.min(Math.max(0, l.value), 100);\n\t}\n\tif (c.type !== Tok.None) {\n\t\tres.c = Math.max(\n\t\t\t0,\n\t\t\tc.type === Tok.Number ? c.value : (c.value * 150) / 100\n\t\t);\n\t}\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseLch;\n","import convertLabToLch from './convertLabToLch.js';\nimport convertLchToLab from './convertLchToLab.js';\nimport convertLabToRgb from '../lab/convertLabToRgb.js';\nimport convertRgbToLab from '../lab/convertRgbToLab.js';\nimport parseLch from './parseLch.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'lch',\n\n\ttoMode: {\n\t\tlab: convertLchToLab,\n\t\trgb: c => convertLabToRgb(convertLchToLab(c))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToLab(c)),\n\t\tlab: convertLabToLch\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 150],\n\t\th: [0, 360]\n\t},\n\n\tparse: [parseLch],\n\tserialize: c =>\n\t\t`lch(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.c !== undefined ? c.c : 'none'\n\t\t} ${c.h !== undefined ? c.h : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\nimport lch from '../lch/definition.js';\n\nconst definition = {\n\t...lch,\n\tmode: 'lch65',\n\n\tparse: ['--lch-d65'],\n\tserialize: '--lch-d65',\n\n\ttoMode: {\n\t\tlab65: c => convertLchToLab(c, 'lab65'),\n\t\trgb: c => convertLab65ToRgb(convertLchToLab(c, 'lab65'))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToLab65(c), 'lch65'),\n\t\tlab65: c => convertLabToLch(c, 'lch65')\n\t},\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 150],\n\t\th: [0, 360]\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n\nconst convertLuvToLchuv = ({ l, u, v, alpha }) => {\n\tif (u === undefined) u = 0;\n\tif (v === undefined) v = 0;\n\tlet c = Math.sqrt(u * u + v * v);\n\tlet res = {\n\t\tmode: 'lchuv',\n\t\tl: l,\n\t\tc: c\n\t};\n\tif (c) {\n\t\tres.h = normalizeHue((Math.atan2(v, u) * 180) / Math.PI);\n\t}\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertLuvToLchuv;\n","const convertLchuvToLuv = ({ l, c, h, alpha }) => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'luv',\n\t\tl: l,\n\t\tu: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tv: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertLchuvToLuv;\n","import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nexport const u_fn = (x, y, z) => (4 * x) / (x + 15 * y + 3 * z);\nexport const v_fn = (x, y, z) => (9 * y) / (x + 15 * y + 3 * z);\n\nexport const un = u_fn(D50.X, D50.Y, D50.Z);\nexport const vn = v_fn(D50.X, D50.Y, D50.Z);\n\nconst l_fn = value => (value <= e ? k * value : 116 * Math.cbrt(value) - 16);\n\nconst convertXyz50ToLuv = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet l = l_fn(y / D50.Y);\n\tlet u = u_fn(x, y, z);\n\tlet v = v_fn(x, y, z);\n\n\t// guard against NaNs produced by `xyz(0 0 0)` black\n\tif (!isFinite(u) || !isFinite(v)) {\n\t\tl = u = v = 0;\n\t} else {\n\t\tu = 13 * l * (u - un);\n\t\tv = 13 * l * (v - vn);\n\t}\n\n\tlet res = {\n\t\tmode: 'luv',\n\t\tl,\n\t\tu,\n\t\tv\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz50ToLuv;\n","import { k } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nexport const u_fn = (x, y, z) => (4 * x) / (x + 15 * y + 3 * z);\nexport const v_fn = (x, y, z) => (9 * y) / (x + 15 * y + 3 * z);\n\nexport const un = u_fn(D50.X, D50.Y, D50.Z);\nexport const vn = v_fn(D50.X, D50.Y, D50.Z);\n\nconst convertLuvToXyz50 = ({ l, u, v, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (l === 0) {\n\t\treturn { mode: 'xyz50', x: 0, y: 0, z: 0 };\n\t}\n\n\tif (u === undefined) u = 0;\n\tif (v === undefined) v = 0;\n\n\tlet up = u / (13 * l) + un;\n\tlet vp = v / (13 * l) + vn;\n\tlet y = D50.Y * (l <= 8 ? l / k : Math.pow((l + 16) / 116, 3));\n\tlet x = (y * (9 * up)) / (4 * vp);\n\tlet z = (y * (12 - 3 * up - 20 * vp)) / (4 * vp);\n\n\tlet res = { mode: 'xyz50', x, y, z };\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLuvToXyz50;\n","/*\n\tCIELChuv color space\n\t--------------------\n\n\tReference: \n\n\t\thttps://en.wikipedia.org/wiki/CIELUV\n */\n\nimport convertLuvToLchuv from './convertLuvToLchuv.js';\nimport convertLchuvToLuv from './convertLchuvToLuv.js';\nimport convertXyz50ToLuv from '../luv/convertXyz50ToLuv.js';\nimport convertLuvToXyz50 from '../luv/convertLuvToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst convertRgbToLchuv = rgb =>\n\tconvertLuvToLchuv(convertXyz50ToLuv(convertRgbToXyz50(rgb)));\nconst convertLchuvToRgb = lchuv =>\n\tconvertXyz50ToRgb(convertLuvToXyz50(convertLchuvToLuv(lchuv)));\n\nconst definition = {\n\tmode: 'lchuv',\n\n\ttoMode: {\n\t\tluv: convertLchuvToLuv,\n\t\trgb: convertLchuvToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToLchuv,\n\t\tluv: convertLuvToLchuv\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tparse: ['--lchuv'],\n\tserialize: '--lchuv',\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 176.956],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import rgb from '../rgb/definition.js';\nimport convertRgbToLrgb from './convertRgbToLrgb.js';\nimport convertLrgbToRgb from './convertLrgbToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'lrgb',\n\n\ttoMode: {\n\t\trgb: convertLrgbToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToLrgb\n\t},\n\n\tparse: ['srgb-linear'],\n\tserialize: 'srgb-linear'\n};\n\nexport default definition;\n","/*\n\tCIELUV color space\n\t------------------\n\n\tReference: \n\n\t\thttps://en.wikipedia.org/wiki/CIELUV\n */\n\nimport convertXyz50ToLuv from './convertXyz50ToLuv.js';\nimport convertLuvToXyz50 from './convertLuvToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'luv',\n\n\ttoMode: {\n\t\txyz50: convertLuvToXyz50,\n\t\trgb: luv => convertXyz50ToRgb(convertLuvToXyz50(luv))\n\t},\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToLuv,\n\t\trgb: rgb => convertXyz50ToLuv(convertRgbToXyz50(rgb))\n\t},\n\n\tchannels: ['l', 'u', 'v', 'alpha'],\n\n\tparse: ['--luv'],\n\tserialize: '--luv',\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tu: [-84.936, 175.042],\n\t\tv: [-125.882, 87.243]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\tu: interpolatorLinear,\n\t\tv: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","const convertLrgbToOklab = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\n\tlet L = Math.cbrt(\n\t\t0.412221469470763 * r + 0.5363325372617348 * g + 0.0514459932675022 * b\n\t);\n\tlet M = Math.cbrt(\n\t\t0.2119034958178252 * r + 0.6806995506452344 * g + 0.1073969535369406 * b\n\t);\n\tlet S = Math.cbrt(\n\t\t0.0883024591900564 * r + 0.2817188391361215 * g + 0.6299787016738222 * b\n\t);\n\n\tlet res = {\n\t\tmode: 'oklab',\n\t\tl:\n\t\t\t0.210454268309314 * L +\n\t\t\t0.7936177747023054 * M -\n\t\t\t0.0040720430116193 * S,\n\t\ta:\n\t\t\t1.9779985324311684 * L -\n\t\t\t2.4285922420485799 * M +\n\t\t\t0.450593709617411 * S,\n\t\tb:\n\t\t\t0.0259040424655478 * L +\n\t\t\t0.7827717124575296 * M -\n\t\t\t0.8086757549230774 * S\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLrgbToOklab;\n","import convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\nimport convertLrgbToOklab from './convertLrgbToOklab.js';\n\nconst convertRgbToOklab = rgb => {\n\tlet res = convertLrgbToOklab(convertRgbToLrgb(rgb));\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToOklab;\n","const convertOklabToLrgb = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\n\tlet L = Math.pow(l + 0.3963377773761749 * a + 0.2158037573099136 * b, 3);\n\tlet M = Math.pow(l - 0.1055613458156586 * a - 0.0638541728258133 * b, 3);\n\tlet S = Math.pow(l - 0.0894841775298119 * a - 1.2914855480194092 * b, 3);\n\n\tlet res = {\n\t\tmode: 'lrgb',\n\t\tr:\n\t\t\t4.0767416360759574 * L -\n\t\t\t3.3077115392580616 * M +\n\t\t\t0.2309699031821044 * S,\n\t\tg:\n\t\t\t-1.2684379732850317 * L +\n\t\t\t2.6097573492876887 * M -\n\t\t\t0.3413193760026573 * S,\n\t\tb:\n\t\t\t-0.0041960761386756 * L -\n\t\t\t0.7034186179359362 * M +\n\t\t\t1.7076146940746117 * S\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertOklabToLrgb;\n","import convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\nimport convertOklabToLrgb from './convertOklabToLrgb.js';\n\nconst convertOklabToRgb = c => convertLrgbToRgb(convertOklabToLrgb(c));\n\nexport default convertOklabToRgb;\n","/*\n\tAdapted from code by Björn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\n\nexport function toe(x) {\n\tconst k_1 = 0.206;\n\tconst k_2 = 0.03;\n\tconst k_3 = (1 + k_1) / (1 + k_2);\n\treturn (\n\t\t0.5 *\n\t\t(k_3 * x -\n\t\t\tk_1 +\n\t\t\tMath.sqrt((k_3 * x - k_1) * (k_3 * x - k_1) + 4 * k_2 * k_3 * x))\n\t);\n}\n\nexport function toe_inv(x) {\n\tconst k_1 = 0.206;\n\tconst k_2 = 0.03;\n\tconst k_3 = (1 + k_1) / (1 + k_2);\n\treturn (x * x + k_1 * x) / (k_3 * (x + k_2));\n}\n\n// Finds the maximum saturation possible for a given hue that fits in sRGB\n// Saturation here is defined as S = C/L\n// a and b must be normalized so a^2 + b^2 == 1\nfunction compute_max_saturation(a, b) {\n\t// Max saturation will be when one of r, g or b goes below zero.\n\n\t// Select different coefficients depending on which component goes below zero first\n\tlet k0, k1, k2, k3, k4, wl, wm, ws;\n\n\tif (-1.88170328 * a - 0.80936493 * b > 1) {\n\t\t// Red component\n\t\tk0 = +1.19086277;\n\t\tk1 = +1.76576728;\n\t\tk2 = +0.59662641;\n\t\tk3 = +0.75515197;\n\t\tk4 = +0.56771245;\n\t\twl = +4.0767416621;\n\t\twm = -3.3077115913;\n\t\tws = +0.2309699292;\n\t} else if (1.81444104 * a - 1.19445276 * b > 1) {\n\t\t// Green component\n\t\tk0 = +0.73956515;\n\t\tk1 = -0.45954404;\n\t\tk2 = +0.08285427;\n\t\tk3 = +0.1254107;\n\t\tk4 = +0.14503204;\n\t\twl = -1.2684380046;\n\t\twm = +2.6097574011;\n\t\tws = -0.3413193965;\n\t} else {\n\t\t// Blue component\n\t\tk0 = +1.35733652;\n\t\tk1 = -0.00915799;\n\t\tk2 = -1.1513021;\n\t\tk3 = -0.50559606;\n\t\tk4 = +0.00692167;\n\t\twl = -0.0041960863;\n\t\twm = -0.7034186147;\n\t\tws = +1.707614701;\n\t}\n\n\t// Approximate max saturation using a polynomial:\n\tlet S = k0 + k1 * a + k2 * b + k3 * a * a + k4 * a * b;\n\n\t// Do one step Halley's method to get closer\n\t// this gives an error less than 10e6, except for some blue hues where the dS/dh is close to infinite\n\t// this should be sufficient for most applications, otherwise do two/three steps\n\n\tlet k_l = +0.3963377774 * a + 0.2158037573 * b;\n\tlet k_m = -0.1055613458 * a - 0.0638541728 * b;\n\tlet k_s = -0.0894841775 * a - 1.291485548 * b;\n\n\t{\n\t\tlet l_ = 1 + S * k_l;\n\t\tlet m_ = 1 + S * k_m;\n\t\tlet s_ = 1 + S * k_s;\n\n\t\tlet l = l_ * l_ * l_;\n\t\tlet m = m_ * m_ * m_;\n\t\tlet s = s_ * s_ * s_;\n\n\t\tlet l_dS = 3 * k_l * l_ * l_;\n\t\tlet m_dS = 3 * k_m * m_ * m_;\n\t\tlet s_dS = 3 * k_s * s_ * s_;\n\n\t\tlet l_dS2 = 6 * k_l * k_l * l_;\n\t\tlet m_dS2 = 6 * k_m * k_m * m_;\n\t\tlet s_dS2 = 6 * k_s * k_s * s_;\n\n\t\tlet f = wl * l + wm * m + ws * s;\n\t\tlet f1 = wl * l_dS + wm * m_dS + ws * s_dS;\n\t\tlet f2 = wl * l_dS2 + wm * m_dS2 + ws * s_dS2;\n\n\t\tS = S - (f * f1) / (f1 * f1 - 0.5 * f * f2);\n\t}\n\n\treturn S;\n}\n\nexport function find_cusp(a, b) {\n\t// First, find the maximum saturation (saturation S = C/L)\n\tlet S_cusp = compute_max_saturation(a, b);\n\n\t// Convert to linear sRGB to find the first point where at least one of r,g or b >= 1:\n\tlet rgb = convertOklabToLrgb({ l: 1, a: S_cusp * a, b: S_cusp * b });\n\tlet L_cusp = Math.cbrt(1 / Math.max(rgb.r, rgb.g, rgb.b));\n\tlet C_cusp = L_cusp * S_cusp;\n\n\treturn [L_cusp, C_cusp];\n}\n\n// Finds intersection of the line defined by\n// L = L0 * (1 - t) + t * L1;\n// C = t * C1;\n// a and b must be normalized so a^2 + b^2 == 1\nfunction find_gamut_intersection(a, b, L1, C1, L0, cusp = null) {\n\tif (!cusp) {\n\t\t// Find the cusp of the gamut triangle\n\t\tcusp = find_cusp(a, b);\n\t}\n\n\t// Find the intersection for upper and lower half seprately\n\tlet t;\n\tif ((L1 - L0) * cusp[1] - (cusp[0] - L0) * C1 <= 0) {\n\t\t// Lower half\n\n\t\tt = (cusp[1] * L0) / (C1 * cusp[0] + cusp[1] * (L0 - L1));\n\t} else {\n\t\t// Upper half\n\n\t\t// First intersect with triangle\n\t\tt = (cusp[1] * (L0 - 1)) / (C1 * (cusp[0] - 1) + cusp[1] * (L0 - L1));\n\n\t\t// Then one step Halley's method\n\t\t{\n\t\t\tlet dL = L1 - L0;\n\t\t\tlet dC = C1;\n\n\t\t\tlet k_l = +0.3963377774 * a + 0.2158037573 * b;\n\t\t\tlet k_m = -0.1055613458 * a - 0.0638541728 * b;\n\t\t\tlet k_s = -0.0894841775 * a - 1.291485548 * b;\n\n\t\t\tlet l_dt = dL + dC * k_l;\n\t\t\tlet m_dt = dL + dC * k_m;\n\t\t\tlet s_dt = dL + dC * k_s;\n\n\t\t\t// If higher accuracy is required, 2 or 3 iterations of the following block can be used:\n\t\t\t{\n\t\t\t\tlet L = L0 * (1 - t) + t * L1;\n\t\t\t\tlet C = t * C1;\n\n\t\t\t\tlet l_ = L + C * k_l;\n\t\t\t\tlet m_ = L + C * k_m;\n\t\t\t\tlet s_ = L + C * k_s;\n\n\t\t\t\tlet l = l_ * l_ * l_;\n\t\t\t\tlet m = m_ * m_ * m_;\n\t\t\t\tlet s = s_ * s_ * s_;\n\n\t\t\t\tlet ldt = 3 * l_dt * l_ * l_;\n\t\t\t\tlet mdt = 3 * m_dt * m_ * m_;\n\t\t\t\tlet sdt = 3 * s_dt * s_ * s_;\n\n\t\t\t\tlet ldt2 = 6 * l_dt * l_dt * l_;\n\t\t\t\tlet mdt2 = 6 * m_dt * m_dt * m_;\n\t\t\t\tlet sdt2 = 6 * s_dt * s_dt * s_;\n\n\t\t\t\tlet r =\n\t\t\t\t\t4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s - 1;\n\t\t\t\tlet r1 =\n\t\t\t\t\t4.0767416621 * ldt -\n\t\t\t\t\t3.3077115913 * mdt +\n\t\t\t\t\t0.2309699292 * sdt;\n\t\t\t\tlet r2 =\n\t\t\t\t\t4.0767416621 * ldt2 -\n\t\t\t\t\t3.3077115913 * mdt2 +\n\t\t\t\t\t0.2309699292 * sdt2;\n\n\t\t\t\tlet u_r = r1 / (r1 * r1 - 0.5 * r * r2);\n\t\t\t\tlet t_r = -r * u_r;\n\n\t\t\t\tlet g =\n\t\t\t\t\t-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s - 1;\n\t\t\t\tlet g1 =\n\t\t\t\t\t-1.2684380046 * ldt +\n\t\t\t\t\t2.6097574011 * mdt -\n\t\t\t\t\t0.3413193965 * sdt;\n\t\t\t\tlet g2 =\n\t\t\t\t\t-1.2684380046 * ldt2 +\n\t\t\t\t\t2.6097574011 * mdt2 -\n\t\t\t\t\t0.3413193965 * sdt2;\n\n\t\t\t\tlet u_g = g1 / (g1 * g1 - 0.5 * g * g2);\n\t\t\t\tlet t_g = -g * u_g;\n\n\t\t\t\tlet b =\n\t\t\t\t\t-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s - 1;\n\t\t\t\tlet b1 =\n\t\t\t\t\t-0.0041960863 * ldt -\n\t\t\t\t\t0.7034186147 * mdt +\n\t\t\t\t\t1.707614701 * sdt;\n\t\t\t\tlet b2 =\n\t\t\t\t\t-0.0041960863 * ldt2 -\n\t\t\t\t\t0.7034186147 * mdt2 +\n\t\t\t\t\t1.707614701 * sdt2;\n\n\t\t\t\tlet u_b = b1 / (b1 * b1 - 0.5 * b * b2);\n\t\t\t\tlet t_b = -b * u_b;\n\n\t\t\t\tt_r = u_r >= 0 ? t_r : 10e5;\n\t\t\t\tt_g = u_g >= 0 ? t_g : 10e5;\n\t\t\t\tt_b = u_b >= 0 ? t_b : 10e5;\n\n\t\t\t\tt += Math.min(t_r, Math.min(t_g, t_b));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn t;\n}\n\nexport function get_ST_max(a_, b_, cusp = null) {\n\tif (!cusp) {\n\t\tcusp = find_cusp(a_, b_);\n\t}\n\tlet L = cusp[0];\n\tlet C = cusp[1];\n\treturn [C / L, C / (1 - L)];\n}\n\nexport function get_ST_mid(a_, b_) {\n\tlet S =\n\t\t0.11516993 +\n\t\t1 /\n\t\t\t(+7.4477897 +\n\t\t\t\t4.1590124 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(-2.19557347 +\n\t\t\t\t\t\t1.75198401 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-2.13704948 -\n\t\t\t\t\t\t\t\t10.02301043 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(-4.24894561 +\n\t\t\t\t\t\t\t\t\t\t5.38770819 * b_ +\n\t\t\t\t\t\t\t\t\t\t4.69891013 * a_))));\n\n\tlet T =\n\t\t0.11239642 +\n\t\t1 /\n\t\t\t(+1.6132032 -\n\t\t\t\t0.68124379 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(+0.40370612 +\n\t\t\t\t\t\t0.90148123 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-0.27087943 +\n\t\t\t\t\t\t\t\t0.6122399 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(+0.00299215 -\n\t\t\t\t\t\t\t\t\t\t0.45399568 * b_ -\n\t\t\t\t\t\t\t\t\t\t0.14661872 * a_))));\n\n\treturn [S, T];\n}\n\nexport function get_Cs(L, a_, b_) {\n\tlet cusp = find_cusp(a_, b_);\n\n\tlet C_max = find_gamut_intersection(a_, b_, L, 1, L, cusp);\n\tlet ST_max = get_ST_max(a_, b_, cusp);\n\n\tlet S_mid =\n\t\t0.11516993 +\n\t\t1 /\n\t\t\t(+7.4477897 +\n\t\t\t\t4.1590124 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(-2.19557347 +\n\t\t\t\t\t\t1.75198401 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-2.13704948 -\n\t\t\t\t\t\t\t\t10.02301043 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(-4.24894561 +\n\t\t\t\t\t\t\t\t\t\t5.38770819 * b_ +\n\t\t\t\t\t\t\t\t\t\t4.69891013 * a_))));\n\n\tlet T_mid =\n\t\t0.11239642 +\n\t\t1 /\n\t\t\t(+1.6132032 -\n\t\t\t\t0.68124379 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(+0.40370612 +\n\t\t\t\t\t\t0.90148123 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-0.27087943 +\n\t\t\t\t\t\t\t\t0.6122399 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(+0.00299215 -\n\t\t\t\t\t\t\t\t\t\t0.45399568 * b_ -\n\t\t\t\t\t\t\t\t\t\t0.14661872 * a_))));\n\n\tlet k = C_max / Math.min(L * ST_max[0], (1 - L) * ST_max[1]);\n\n\tlet C_a = L * S_mid;\n\tlet C_b = (1 - L) * T_mid;\n\tlet C_mid =\n\t\t0.9 *\n\t\tk *\n\t\tMath.sqrt(\n\t\t\tMath.sqrt(\n\t\t\t\t1 / (1 / (C_a * C_a * C_a * C_a) + 1 / (C_b * C_b * C_b * C_b))\n\t\t\t)\n\t\t);\n\n\tC_a = L * 0.4;\n\tC_b = (1 - L) * 0.8;\n\tlet C_0 = Math.sqrt(1 / (1 / (C_a * C_a) + 1 / (C_b * C_b)));\n\treturn [C_0, C_mid, C_max];\n}\n","/*\n\tAdapted from code by Björn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport normalizeHue from '../util/normalizeHue.js';\nimport { get_Cs, toe } from './helpers.js';\n\nexport default function convertOklabToOkhsl(lab) {\n\tconst l = lab.l !== undefined ? lab.l : 0;\n\tconst a = lab.a !== undefined ? lab.a : 0;\n\tconst b = lab.b !== undefined ? lab.b : 0;\n\n\tconst ret = { mode: 'okhsl', l: toe(l) };\n\n\tif (lab.alpha !== undefined) {\n\t\tret.alpha = lab.alpha;\n\t}\n\tlet c = Math.sqrt(a * a + b * b);\n\tif (!c) {\n\t\tret.s = 0;\n\t\treturn ret;\n\t}\n\tlet [C_0, C_mid, C_max] = get_Cs(l, a / c, b / c);\n\tlet s;\n\tif (c < C_mid) {\n\t\tlet k_0 = 0;\n\t\tlet k_1 = 0.8 * C_0;\n\t\tlet k_2 = 1 - k_1 / C_mid;\n\t\tlet t = (c - k_0) / (k_1 + k_2 * (c - k_0));\n\t\ts = t * 0.8;\n\t} else {\n\t\tlet k_0 = C_mid;\n\t\tlet k_1 = (0.2 * C_mid * C_mid * 1.25 * 1.25) / C_0;\n\t\tlet k_2 = 1 - k_1 / (C_max - C_mid);\n\t\tlet t = (c - k_0) / (k_1 + k_2 * (c - k_0));\n\t\ts = 0.8 + 0.2 * t;\n\t}\n\tif (s) {\n\t\tret.s = s;\n\t\tret.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\treturn ret;\n}\n","/*\n\tAdapted from code by Björn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport { toe_inv, get_Cs } from './helpers.js';\n\nexport default function convertOkhslToOklab(hsl) {\n\tlet h = hsl.h !== undefined ? hsl.h : 0;\n\tlet s = hsl.s !== undefined ? hsl.s : 0;\n\tlet l = hsl.l !== undefined ? hsl.l : 0;\n\n\tconst ret = { mode: 'oklab', l: toe_inv(l) };\n\n\tif (hsl.alpha !== undefined) {\n\t\tret.alpha = hsl.alpha;\n\t}\n\n\tif (!s || l === 1) {\n\t\tret.a = ret.b = 0;\n\t\treturn ret;\n\t}\n\n\tlet a_ = Math.cos((h / 180) * Math.PI);\n\tlet b_ = Math.sin((h / 180) * Math.PI);\n\tlet [C_0, C_mid, C_max] = get_Cs(ret.l, a_, b_);\n\tlet t, k_0, k_1, k_2;\n\tif (s < 0.8) {\n\t\tt = 1.25 * s;\n\t\tk_0 = 0;\n\t\tk_1 = 0.8 * C_0;\n\t\tk_2 = 1 - k_1 / C_mid;\n\t} else {\n\t\tt = 5 * (s - 0.8);\n\t\tk_0 = C_mid;\n\t\tk_1 = (0.2 * C_mid * C_mid * 1.25 * 1.25) / C_0;\n\t\tk_2 = 1 - k_1 / (C_max - C_mid);\n\t}\n\tlet C = k_0 + (t * k_1) / (1 - k_2 * t);\n\tret.a = C * a_;\n\tret.b = C * b_;\n\n\treturn ret;\n}\n","import convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertOklabToOkhsl from './convertOklabToOkhsl.js';\nimport convertOkhslToOklab from './convertOkhslToOklab.js';\n\nimport modeHsl from '../hsl/definition.js';\n\nconst modeOkhsl = {\n\t...modeHsl,\n\tmode: 'okhsl',\n\tchannels: ['h', 's', 'l', 'alpha'],\n\tparse: ['--okhsl'],\n\tserialize: '--okhsl',\n\tfromMode: {\n\t\toklab: convertOklabToOkhsl,\n\t\trgb: c => convertOklabToOkhsl(convertRgbToOklab(c))\n\t},\n\ttoMode: {\n\t\toklab: convertOkhslToOklab,\n\t\trgb: c => convertOklabToRgb(convertOkhslToOklab(c))\n\t}\n};\n\nexport default modeOkhsl;\n","/*\n\tAdapted from code by Björn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport normalizeHue from '../util/normalizeHue.js';\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\nimport { get_ST_max, toe_inv, toe } from '../okhsl/helpers.js';\n\nexport default function convertOklabToOkhsv(lab) {\n\tlet l = lab.l !== undefined ? lab.l : 0;\n\tlet a = lab.a !== undefined ? lab.a : 0;\n\tlet b = lab.b !== undefined ? lab.b : 0;\n\n\tlet c = Math.sqrt(a * a + b * b);\n\n\t// TODO: c = 0\n\tlet a_ = c ? a / c : 1;\n\tlet b_ = c ? b / c : 1;\n\n\tlet [S_max, T] = get_ST_max(a_, b_);\n\tlet S_0 = 0.5;\n\tlet k = 1 - S_0 / S_max;\n\n\tlet t = T / (c + l * T);\n\tlet L_v = t * l;\n\tlet C_v = t * c;\n\n\tlet L_vt = toe_inv(L_v);\n\tlet C_vt = (C_v * L_vt) / L_v;\n\n\tlet rgb_scale = convertOklabToLrgb({ l: L_vt, a: a_ * C_vt, b: b_ * C_vt });\n\tlet scale_L = Math.cbrt(\n\t\t1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0)\n\t);\n\n\tl = l / scale_L;\n\tc = ((c / scale_L) * toe(l)) / l;\n\tl = toe(l);\n\n\tconst ret = {\n\t\tmode: 'okhsv',\n\t\ts: c ? ((S_0 + T) * C_v) / (T * S_0 + T * k * C_v) : 0,\n\t\tv: l ? l / L_v : 0\n\t};\n\tif (ret.s) {\n\t\tret.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\tif (lab.alpha !== undefined) {\n\t\tret.alpha = lab.alpha;\n\t}\n\treturn ret;\n}\n","/*\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\nimport { get_ST_max, toe_inv } from '../okhsl/helpers.js';\n\nexport default function convertOkhsvToOklab(hsv) {\n\tconst ret = { mode: 'oklab' };\n\tif (hsv.alpha !== undefined) {\n\t\tret.alpha = hsv.alpha;\n\t}\n\n\tconst h = hsv.h !== undefined ? hsv.h : 0;\n\tconst s = hsv.s !== undefined ? hsv.s : 0;\n\tconst v = hsv.v !== undefined ? hsv.v : 0;\n\n\tconst a_ = Math.cos((h / 180) * Math.PI);\n\tconst b_ = Math.sin((h / 180) * Math.PI);\n\n\tconst [S_max, T] = get_ST_max(a_, b_);\n\tconst S_0 = 0.5;\n\tconst k = 1 - S_0 / S_max;\n\tconst L_v = 1 - (s * S_0) / (S_0 + T - T * k * s);\n\tconst C_v = (s * T * S_0) / (S_0 + T - T * k * s);\n\n\tconst L_vt = toe_inv(L_v);\n\tconst C_vt = (C_v * L_vt) / L_v;\n\tconst rgb_scale = convertOklabToLrgb({\n\t\tl: L_vt,\n\t\ta: a_ * C_vt,\n\t\tb: b_ * C_vt\n\t});\n\tconst scale_L = Math.cbrt(\n\t\t1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0)\n\t);\n\n\tconst L_new = toe_inv(v * L_v);\n\tconst C = (C_v * L_new) / L_v;\n\n\tret.l = L_new * scale_L;\n\tret.a = C * a_ * scale_L;\n\tret.b = C * b_ * scale_L;\n\n\treturn ret;\n}\n","import convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertOklabToOkhsv from './convertOklabToOkhsv.js';\nimport convertOkhsvToOklab from './convertOkhsvToOklab.js';\n\nimport modeHsv from '../hsv/definition.js';\n\nconst modeOkhsv = {\n\t...modeHsv,\n\tmode: 'okhsv',\n\tchannels: ['h', 's', 'v', 'alpha'],\n\tparse: ['--okhsv'],\n\tserialize: '--okhsv',\n\tfromMode: {\n\t\toklab: convertOklabToOkhsv,\n\t\trgb: c => convertOklabToOkhsv(convertRgbToOklab(c))\n\t},\n\ttoMode: {\n\t\toklab: convertOkhsvToOklab,\n\t\trgb: c => convertOklabToRgb(convertOkhsvToOklab(c))\n\t}\n};\n\nexport default modeOkhsv;\n","import { Tok } from '../parse.js';\n\nfunction parseOklab(color, parsed) {\n\tif (!parsed || parsed[0] !== 'oklab') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'oklab' };\n\tconst [, l, a, b, alpha] = parsed;\n\tif (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (l.type !== Tok.None) {\n\t\tres.l = Math.min(\n\t\t\tMath.max(0, l.type === Tok.Number ? l.value : l.value / 100),\n\t\t\t1\n\t\t);\n\t}\n\tif (a.type !== Tok.None) {\n\t\tres.a = a.type === Tok.Number ? a.value : (a.value * 0.4) / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value : (b.value * 0.4) / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseOklab;\n","import convertOklabToLrgb from './convertOklabToLrgb.js';\nimport convertLrgbToOklab from './convertLrgbToOklab.js';\nimport convertRgbToOklab from './convertRgbToOklab.js';\nimport convertOklabToRgb from './convertOklabToRgb.js';\nimport parseOklab from './parseOklab.js';\n\nimport lab from '../lab/definition.js';\n\n/*\n\tOklab, a perceptual color space for image processing by Björn Ottosson\n\tReference: https://bottosson.github.io/posts/oklab/\n */\n\nconst definition = {\n\t...lab,\n\tmode: 'oklab',\n\n\ttoMode: {\n\t\tlrgb: convertOklabToLrgb,\n\t\trgb: convertOklabToRgb\n\t},\n\n\tfromMode: {\n\t\tlrgb: convertLrgbToOklab,\n\t\trgb: convertRgbToOklab\n\t},\n\n\tranges: {\n\t\tl: [0, 1],\n\t\ta: [-0.4, 0.4],\n\t\tb: [-0.4, 0.4]\n\t},\n\n\tparse: [parseOklab],\n\tserialize: c =>\n\t\t`oklab(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.a !== undefined ? c.a : 'none'\n\t\t} ${c.b !== undefined ? c.b : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`\n};\n\nexport default definition;\n","import { Tok } from '../parse.js';\n\nfunction parseOklch(color, parsed) {\n\tif (!parsed || parsed[0] !== 'oklch') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'oklch' };\n\tconst [, l, c, h, alpha] = parsed;\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = Math.min(\n\t\t\tMath.max(0, l.type === Tok.Number ? l.value : l.value / 100),\n\t\t\t1\n\t\t);\n\t}\n\tif (c.type !== Tok.None) {\n\t\tres.c = Math.max(\n\t\t\t0,\n\t\t\tc.type === Tok.Number ? c.value : (c.value * 0.4) / 100\n\t\t);\n\t}\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseOklch;\n","import lch from '../lch/definition.js';\nimport convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport parseOklch from './parseOklch.js';\n\nconst definition = {\n\t...lch,\n\tmode: 'oklch',\n\n\ttoMode: {\n\t\toklab: c => convertLchToLab(c, 'oklab'),\n\t\trgb: c => convertOklabToRgb(convertLchToLab(c, 'oklab'))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToOklab(c), 'oklch'),\n\t\toklab: c => convertLabToLch(c, 'oklch')\n\t},\n\n\tparse: [parseOklch],\n\tserialize: c =>\n\t\t`oklch(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.c !== undefined ? c.c : 'none'\n\t\t} ${c.h !== undefined ? c.h : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tranges: {\n\t\tl: [0, 1],\n\t\tc: [0, 0.4],\n\t\th: [0, 360]\n\t}\n};\n\nexport default definition;\n","/*\n\tConvert Display P3 values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertP3ToXyz65 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.486570948648216 * r +\n\t\t\t0.265667693169093 * g +\n\t\t\t0.1982172852343625 * b,\n\t\ty:\n\t\t\t0.2289745640697487 * r +\n\t\t\t0.6917385218365062 * g +\n\t\t\t0.079286914093745 * b,\n\t\tz: 0.0 * r + 0.0451133818589026 * g + 1.043944368900976 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertP3ToXyz65;\n","/*\n\tCIE XYZ D65 values to Display P3.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz65ToP3 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb(\n\t\t{\n\t\t\tr:\n\t\t\t\tx * 2.4934969119414263 -\n\t\t\t\ty * 0.9313836179191242 -\n\t\t\t\t0.402710784450717 * z,\n\t\t\tg:\n\t\t\t\tx * -0.8294889695615749 +\n\t\t\t\ty * 1.7626640603183465 +\n\t\t\t\t0.0236246858419436 * z,\n\t\t\tb:\n\t\t\t\tx * 0.0358458302437845 -\n\t\t\t\ty * 0.0761723892680418 +\n\t\t\t\t0.9568845240076871 * z\n\t\t},\n\t\t'p3'\n\t);\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToP3;\n","import rgb from '../rgb/definition.js';\nimport convertP3ToXyz65 from './convertP3ToXyz65.js';\nimport convertXyz65ToP3 from './convertXyz65ToP3.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'p3',\n\tparse: ['display-p3'],\n\tserialize: 'display-p3',\n\n\tfromMode: {\n\t\trgb: color => convertXyz65ToP3(convertRgbToXyz65(color)),\n\t\txyz65: convertXyz65ToP3\n\t},\n\n\ttoMode: {\n\t\trgb: color => convertXyz65ToRgb(convertP3ToXyz65(color)),\n\t\txyz65: convertP3ToXyz65\n\t}\n};\n\nexport default definition;\n","/*\n\tConvert CIE XYZ D50 values to ProPhoto RGB\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst gamma = v => {\n\tlet abs = Math.abs(v);\n\tif (abs >= 1 / 512) {\n\t\treturn Math.sign(v) * Math.pow(abs, 1 / 1.8);\n\t}\n\treturn 16 * v;\n};\n\nconst convertXyz50ToProphoto = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'prophoto',\n\t\tr: gamma(\n\t\t\tx * 1.3457868816471585 -\n\t\t\t\ty * 0.2555720873797946 -\n\t\t\t\t0.0511018649755453 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.5446307051249019 +\n\t\t\t\ty * 1.5082477428451466 +\n\t\t\t\t0.0205274474364214 * z\n\t\t),\n\t\tb: gamma(x * 0.0 + y * 0.0 + 1.2119675456389452 * z)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToProphoto;\n","/*\n\tConvert ProPhoto RGB values to CIE XYZ D50\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs >= 16 / 512) {\n\t\treturn Math.sign(v) * Math.pow(abs, 1.8);\n\t}\n\treturn v / 16;\n};\n\nconst convertProphotoToXyz50 = prophoto => {\n\tlet r = linearize(prophoto.r);\n\tlet g = linearize(prophoto.g);\n\tlet b = linearize(prophoto.b);\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t0.7977666449006423 * r +\n\t\t\t0.1351812974005331 * g +\n\t\t\t0.0313477341283922 * b,\n\t\ty:\n\t\t\t0.2880748288194013 * r +\n\t\t\t0.7118352342418731 * g +\n\t\t\t0.0000899369387256 * b,\n\t\tz: 0 * r + 0 * g + 0.8251046025104602 * b\n\t};\n\tif (prophoto.alpha !== undefined) {\n\t\tres.alpha = prophoto.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertProphotoToXyz50;\n","import rgb from '../rgb/definition.js';\n\nimport convertXyz50ToProphoto from './convertXyz50ToProphoto.js';\nimport convertProphotoToXyz50 from './convertProphotoToXyz50.js';\n\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\n/*\n\tProPhoto RGB Color space\n\n\tReferences:\n\t\t* https://en.wikipedia.org/wiki/ProPhoto_RGB_color_space\n */\n\nconst definition = {\n\t...rgb,\n\tmode: 'prophoto',\n\tparse: ['prophoto-rgb'],\n\tserialize: 'prophoto-rgb',\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToProphoto,\n\t\trgb: color => convertXyz50ToProphoto(convertRgbToXyz50(color))\n\t},\n\n\ttoMode: {\n\t\txyz50: convertProphotoToXyz50,\n\t\trgb: color => convertXyz50ToRgb(convertProphotoToXyz50(color))\n\t}\n};\n\nexport default definition;\n","/*\n\tConvert CIE XYZ D65 values to Rec. 2020\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.itu.int/rec/R-REC-BT.2020/en\n*/\n\nconst α = 1.09929682680944;\nconst β = 0.018053968510807;\nconst gamma = v => {\n\tconst abs = Math.abs(v);\n\tif (abs > β) {\n\t\treturn (Math.sign(v) || 1) * (α * Math.pow(abs, 0.45) - (α - 1));\n\t}\n\treturn 4.5 * v;\n};\n\nconst convertXyz65ToRec2020 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'rec2020',\n\t\tr: gamma(\n\t\t\tx * 1.7166511879712683 -\n\t\t\t\ty * 0.3556707837763925 -\n\t\t\t\t0.2533662813736599 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.6666843518324893 +\n\t\t\t\ty * 1.6164812366349395 +\n\t\t\t\t0.0157685458139111 * z\n\t\t),\n\t\tb: gamma(\n\t\t\tx * 0.0176398574453108 -\n\t\t\t\ty * 0.0427706132578085 +\n\t\t\t\t0.9421031212354739 * z\n\t\t)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToRec2020;\n","/*\n\tConvert Rec. 2020 values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.itu.int/rec/R-REC-BT.2020/en\n*/\n\nconst α = 1.09929682680944;\nconst β = 0.018053968510807;\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs < β * 4.5) {\n\t\treturn v / 4.5;\n\t}\n\treturn (Math.sign(v) || 1) * Math.pow((abs + α - 1) / α, 1 / 0.45);\n};\n\nconst convertRec2020ToXyz65 = rec2020 => {\n\tlet r = linearize(rec2020.r);\n\tlet g = linearize(rec2020.g);\n\tlet b = linearize(rec2020.b);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.6369580483012911 * r +\n\t\t\t0.1446169035862083 * g +\n\t\t\t0.1688809751641721 * b,\n\t\ty:\n\t\t\t0.262700212011267 * r +\n\t\t\t0.6779980715188708 * g +\n\t\t\t0.059301716469862 * b,\n\t\tz: 0 * r + 0.0280726930490874 * g + 1.0609850577107909 * b\n\t};\n\tif (rec2020.alpha !== undefined) {\n\t\tres.alpha = rec2020.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRec2020ToXyz65;\n","import rgb from '../rgb/definition.js';\n\nimport convertXyz65ToRec2020 from './convertXyz65ToRec2020.js';\nimport convertRec2020ToXyz65 from './convertRec2020ToXyz65.js';\n\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'rec2020',\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToRec2020,\n\t\trgb: color => convertXyz65ToRec2020(convertRgbToXyz65(color))\n\t},\n\n\ttoMode: {\n\t\txyz65: convertRec2020ToXyz65,\n\t\trgb: color => convertXyz65ToRgb(convertRec2020ToXyz65(color))\n\t},\n\n\tparse: ['rec2020'],\n\tserialize: 'rec2020'\n};\n\nexport default definition;\n","export const bias = 0.00379307325527544933;\nexport const bias_cbrt = Math.cbrt(bias);\n","import convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\nimport { bias, bias_cbrt } from './constants.js';\n\nconst transfer = v => Math.cbrt(v) - bias_cbrt;\n\nconst convertRgbToXyb = color => {\n\tconst { r, g, b, alpha } = convertRgbToLrgb(color);\n\tconst l = transfer(0.3 * r + 0.622 * g + 0.078 * b + bias);\n\tconst m = transfer(0.23 * r + 0.692 * g + 0.078 * b + bias);\n\tconst s = transfer(\n\t\t0.24342268924547819 * r +\n\t\t\t0.20476744424496821 * g +\n\t\t\t0.5518098665095536 * b +\n\t\t\tbias\n\t);\n\tconst res = {\n\t\tmode: 'xyb',\n\t\tx: (l - m) / 2,\n\t\ty: (l + m) / 2,\n\t\t/* Apply default chroma from luma (subtract Y from B) */\n\t\tb: s - (l + m) / 2\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToXyb;\n","import convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\nimport { bias, bias_cbrt } from './constants.js';\n\nconst transfer = v => Math.pow(v + bias_cbrt, 3);\n\nconst convertXybToRgb = ({ x, y, b, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (b === undefined) b = 0;\n\tconst l = transfer(x + y) - bias;\n\tconst m = transfer(y - x) - bias;\n\t/* Account for chroma from luma: add Y back to B */\n\tconst s = transfer(b + y) - bias;\n\n\tconst res = convertLrgbToRgb({\n\t\tr:\n\t\t\t11.031566904639861 * l -\n\t\t\t9.866943908131562 * m -\n\t\t\t0.16462299650829934 * s,\n\t\tg:\n\t\t\t-3.2541473810744237 * l +\n\t\t\t4.418770377582723 * m -\n\t\t\t0.16462299650829934 * s,\n\t\tb:\n\t\t\t-3.6588512867136815 * l +\n\t\t\t2.7129230459360922 * m +\n\t\t\t1.9459282407775895 * s\n\t});\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertXybToRgb;\n","import { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport convertRgbToXyb from './convertRgbToXyb.js';\nimport convertXybToRgb from './convertXybToRgb.js';\n\n/*\n\tThe XYB color space, used in JPEG XL.\n\tReference: https://ds.jpeg.org/whitepapers/jpeg-xl-whitepaper.pdf\n*/\n\nconst definition = {\n\tmode: 'xyb',\n\tchannels: ['x', 'y', 'b', 'alpha'],\n\tparse: ['--xyb'],\n\tserialize: '--xyb',\n\n\ttoMode: {\n\t\trgb: convertXybToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyb\n\t},\n\n\tranges: {\n\t\tx: [-0.0154, 0.0281],\n\t\ty: [0, 0.8453],\n\t\tb: [-0.2778, 0.388]\n\t},\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","/*\n\tThe XYZ D50 color space\n\t-----------------------\n */\n\nimport convertXyz50ToRgb from './convertXyz50ToRgb.js';\nimport convertXyz50ToLab from '../lab/convertXyz50ToLab.js';\nimport convertRgbToXyz50 from './convertRgbToXyz50.js';\nimport convertLabToXyz50 from '../lab/convertLabToXyz50.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'xyz50',\n\tparse: ['xyz-d50'],\n\tserialize: 'xyz-d50',\n\n\ttoMode: {\n\t\trgb: convertXyz50ToRgb,\n\t\tlab: convertXyz50ToLab\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyz50,\n\t\tlab: convertLabToXyz50\n\t},\n\n\tchannels: ['x', 'y', 'z', 'alpha'],\n\n\tranges: {\n\t\tx: [0, 0.964],\n\t\ty: [0, 0.999],\n\t\tz: [0, 0.825]\n\t},\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tz: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","/*\n\tChromatic adaptation of CIE XYZ from D65 to D50 white point\n\tusing the Bradford method.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\t\n*/\n\nconst convertXyz65ToXyz50 = xyz65 => {\n\tlet { x, y, z, alpha } = xyz65;\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t1.0479298208405488 * x +\n\t\t\t0.0229467933410191 * y -\n\t\t\t0.0501922295431356 * z,\n\t\ty:\n\t\t\t0.0296278156881593 * x +\n\t\t\t0.990434484573249 * y -\n\t\t\t0.0170738250293851 * z,\n\t\tz:\n\t\t\t-0.0092430581525912 * x +\n\t\t\t0.0150551448965779 * y +\n\t\t\t0.7518742899580008 * z\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToXyz50;\n","/*\n\tChromatic adaptation of CIE XYZ from D50 to D65 white point\n\tusing the Bradford method.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\t\n*/\n\nconst convertXyz50ToXyz65 = xyz50 => {\n\tlet { x, y, z, alpha } = xyz50;\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.9554734527042182 * x -\n\t\t\t0.0230985368742614 * y +\n\t\t\t0.0632593086610217 * z,\n\t\ty:\n\t\t\t-0.0283697069632081 * x +\n\t\t\t1.0099954580058226 * y +\n\t\t\t0.021041398966943 * z,\n\t\tz:\n\t\t\t0.0123140016883199 * x -\n\t\t\t0.0205076964334779 * y +\n\t\t\t1.3303659366080753 * z\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToXyz65;\n","/*\n\tThe XYZ D65 color space\n\t-----------------------\n */\n\nimport convertXyz65ToRgb from './convertXyz65ToRgb.js';\nimport convertRgbToXyz65 from './convertRgbToXyz65.js';\n\nimport convertXyz65ToXyz50 from './convertXyz65ToXyz50.js';\nimport convertXyz50ToXyz65 from './convertXyz50ToXyz65.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'xyz65',\n\n\ttoMode: {\n\t\trgb: convertXyz65ToRgb,\n\t\txyz50: convertXyz65ToXyz50\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyz65,\n\t\txyz50: convertXyz50ToXyz65\n\t},\n\n\tranges: {\n\t\tx: [0, 0.95],\n\t\ty: [0, 1],\n\t\tz: [0, 1.088]\n\t},\n\n\tchannels: ['x', 'y', 'z', 'alpha'],\n\n\tparse: ['xyz', 'xyz-d65'],\n\tserialize: 'xyz-d65',\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tz: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","const convertRgbToYiq = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tconst res = {\n\t\tmode: 'yiq',\n\t\ty: 0.29889531 * r + 0.58662247 * g + 0.11448223 * b,\n\t\ti: 0.59597799 * r - 0.2741761 * g - 0.32180189 * b,\n\t\tq: 0.21147017 * r - 0.52261711 * g + 0.31114694 * b\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToYiq;\n","const convertYiqToRgb = ({ y, i, q, alpha }) => {\n\tif (y === undefined) y = 0;\n\tif (i === undefined) i = 0;\n\tif (q === undefined) q = 0;\n\tconst res = {\n\t\tmode: 'rgb',\n\t\tr: y + 0.95608445 * i + 0.6208885 * q,\n\t\tg: y - 0.27137664 * i - 0.6486059 * q,\n\t\tb: y - 1.10561724 * i + 1.70250126 * q\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertYiqToRgb;\n","import convertRgbToYiq from './convertRgbToYiq.js';\nimport convertYiqToRgb from './convertYiqToRgb.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\n/*\n\tYIQ Color Space\n\n\tReferences\n\t----------\n\n\tWikipedia:\n\t\thttps://en.wikipedia.org/wiki/YIQ\n\n\t\"Measuring perceived color difference using YIQ NTSC\n\ttransmission color space in mobile applications\"\n\t\t\n\t\tby Yuriy Kotsarenko, Fernando Ramos in:\n\t\tProgramación Matemática y Software (2010) \n\n\tAvailable at:\n\t\t\n\t\thttp://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf\n */\n\nconst definition = {\n\tmode: 'yiq',\n\n\ttoMode: {\n\t\trgb: convertYiqToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToYiq\n\t},\n\n\tchannels: ['y', 'i', 'q', 'alpha'],\n\n\tparse: ['--yiq'],\n\tserialize: '--yiq',\n\n\tranges: {\n\t\ti: [-0.595, 0.595],\n\t\tq: [-0.522, 0.522]\n\t},\n\n\tinterpolate: {\n\t\ty: interpolatorLinear,\n\t\ti: interpolatorLinear,\n\t\tq: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","// Color space definitions\nimport modeA98 from './a98/definition.js';\nimport modeCubehelix from './cubehelix/definition.js';\nimport modeDlab from './dlab/definition.js';\nimport modeDlch from './dlch/definition.js';\nimport modeHsi from './hsi/definition.js';\nimport modeHsl from './hsl/definition.js';\nimport modeHsv from './hsv/definition.js';\nimport modeHwb from './hwb/definition.js';\nimport modeItp from './itp/definition.js';\nimport modeJab from './jab/definition.js';\nimport modeJch from './jch/definition.js';\nimport modeLab from './lab/definition.js';\nimport modeLab65 from './lab65/definition.js';\nimport modeLch from './lch/definition.js';\nimport modeLch65 from './lch65/definition.js';\nimport modeLchuv from './lchuv/definition.js';\nimport modeLrgb from './lrgb/definition.js';\nimport modeLuv from './luv/definition.js';\nimport modeOkhsl from './okhsl/modeOkhsl.js';\nimport modeOkhsv from './okhsv/modeOkhsv.js';\nimport modeOklab from './oklab/definition.js';\nimport modeOklch from './oklch/definition.js';\nimport modeP3 from './p3/definition.js';\nimport modeProphoto from './prophoto/definition.js';\nimport modeRec2020 from './rec2020/definition.js';\nimport modeRgb from './rgb/definition.js';\nimport modeXyb from './xyb/definition.js';\nimport modeXyz50 from './xyz50/definition.js';\nimport modeXyz65 from './xyz65/definition.js';\nimport modeYiq from './yiq/definition.js';\nimport { useMode } from './modes.js';\n\nexport { default as converter } from './converter.js';\n\nexport {\n\tserializeHex,\n\tserializeHex8,\n\tserializeRgb,\n\tserializeHsl,\n\tformatHex,\n\tformatHex8,\n\tformatRgb,\n\tformatHsl,\n\tformatCss\n} from './formatter.js';\n\nexport { default as colorsNamed } from './colors/named.js';\nexport { default as blend } from './blend.js';\nexport { default as random } from './random.js';\n\nexport {\n\tfixupHueShorter,\n\tfixupHueLonger,\n\tfixupHueIncreasing,\n\tfixupHueDecreasing\n} from './fixup/hue.js';\n\nexport { fixupAlpha } from './fixup/alpha.js';\n\nexport {\n\tmapper,\n\tmapAlphaMultiply,\n\tmapAlphaDivide,\n\tmapTransferLinear,\n\tmapTransferGamma\n} from './map.js';\n\nexport { average, averageAngle, averageNumber } from './average.js';\n\nexport { default as round } from './round.js';\nexport {\n\tinterpolate,\n\tinterpolateWith,\n\tinterpolateWithPremultipliedAlpha\n} from './interpolate/interpolate.js';\n\nexport { interpolatorLinear } from './interpolate/linear.js';\n\nexport { interpolatorPiecewise } from './interpolate/piecewise.js';\n\nexport {\n\tinterpolatorSplineBasis,\n\tinterpolatorSplineBasisClosed\n} from './interpolate/splineBasis.js';\n\nexport {\n\tinterpolatorSplineNatural,\n\tinterpolatorSplineNaturalClosed\n} from './interpolate/splineNatural.js';\n\nexport {\n\tinterpolatorSplineMonotone,\n\tinterpolatorSplineMonotone2,\n\tinterpolatorSplineMonotoneClosed\n} from './interpolate/splineMonotone.js';\n\nexport { lerp, unlerp, blerp, trilerp } from './interpolate/lerp.js';\nexport { default as samples } from './samples.js';\nexport {\n\tdisplayable,\n\tinGamut,\n\tclampRgb,\n\tclampChroma,\n\tclampGamut,\n\ttoGamut\n} from './clamp.js';\nexport { default as nearest } from './nearest.js';\nexport { useMode, getMode, useParser, removeParser } from './modes.js';\nexport { default as parse } from './parse.js';\n\nexport {\n\tdifferenceEuclidean,\n\tdifferenceCie76,\n\tdifferenceCie94,\n\tdifferenceCiede2000,\n\tdifferenceCmc,\n\tdifferenceHyab,\n\tdifferenceHueSaturation,\n\tdifferenceHueChroma,\n\tdifferenceHueNaive,\n\tdifferenceKotsarenkoRamos,\n\tdifferenceItp\n} from './difference.js';\n\nexport {\n\tfilterBrightness,\n\tfilterContrast,\n\tfilterSepia,\n\tfilterInvert,\n\tfilterSaturate,\n\tfilterGrayscale,\n\tfilterHueRotate\n} from './filter.js';\n\nexport {\n\tfilterDeficiencyProt,\n\tfilterDeficiencyDeuter,\n\tfilterDeficiencyTrit\n} from './deficiency.js';\n\n// Easings\nexport { default as easingMidpoint } from './easing/midpoint.js';\nexport {\n\teasingSmoothstep,\n\teasingSmoothstepInverse\n} from './easing/smoothstep.js';\nexport { default as easingSmootherstep } from './easing/smootherstep.js';\nexport { default as easingInOutSine } from './easing/inOutSine.js';\nexport { default as easingGamma } from './easing/gamma.js';\n\nexport {\n\tluminance as wcagLuminance,\n\tcontrast as wcagContrast\n} from './wcag.js';\n\nexport { default as parseHsl } from './hsl/parseHsl.js';\nexport { default as parseHwb } from './hwb/parseHwb.js';\nexport { default as parseLab } from './lab/parseLab.js';\nexport { default as parseLch } from './lch/parseLch.js';\nexport { default as parseNamed } from './rgb/parseNamed.js';\nexport { default as parseTransparent } from './rgb/parseTransparent.js';\nexport { default as parseHex } from './rgb/parseHex.js';\nexport { default as parseRgb } from './rgb/parseRgb.js';\nexport { default as parseHslLegacy } from './hsl/parseHslLegacy.js';\nexport { default as parseRgbLegacy } from './rgb/parseRgbLegacy.js';\nexport { default as parseOklab } from './oklab/parseOklab.js';\nexport { default as parseOklch } from './oklch/parseOklch.js';\n\nexport { default as convertA98ToXyz65 } from './a98/convertA98ToXyz65.js';\nexport { default as convertCubehelixToRgb } from './cubehelix/convertCubehelixToRgb.js';\nexport { default as convertDlchToLab65 } from './dlch/convertDlchToLab65.js';\nexport { default as convertHsiToRgb } from './hsi/convertHsiToRgb.js';\nexport { default as convertHslToRgb } from './hsl/convertHslToRgb.js';\nexport { default as convertHsvToRgb } from './hsv/convertHsvToRgb.js';\nexport { default as convertHwbToRgb } from './hwb/convertHwbToRgb.js';\nexport { default as convertItpToXyz65 } from './itp/convertItpToXyz65.js';\nexport { default as convertJabToJch } from './jch/convertJabToJch.js';\nexport { default as convertJabToRgb } from './jab/convertJabToRgb.js';\nexport { default as convertJabToXyz65 } from './jab/convertJabToXyz65.js';\nexport { default as convertJchToJab } from './jch/convertJchToJab.js';\nexport { default as convertLab65ToDlch } from './dlch/convertLab65ToDlch.js';\nexport { default as convertLab65ToRgb } from './lab65/convertLab65ToRgb.js';\nexport { default as convertLab65ToXyz65 } from './lab65/convertLab65ToXyz65.js';\nexport { default as convertLabToLch } from './lch/convertLabToLch.js';\nexport { default as convertLabToRgb } from './lab/convertLabToRgb.js';\nexport { default as convertLabToXyz50 } from './lab/convertLabToXyz50.js';\nexport { default as convertLchToLab } from './lch/convertLchToLab.js';\nexport { default as convertLchuvToLuv } from './lchuv/convertLchuvToLuv.js';\nexport { default as convertLrgbToOklab } from './oklab/convertLrgbToOklab.js';\nexport { default as convertLrgbToRgb } from './lrgb/convertLrgbToRgb.js';\nexport { default as convertLuvToLchuv } from './lchuv/convertLuvToLchuv.js';\nexport { default as convertLuvToXyz50 } from './luv/convertLuvToXyz50.js';\nexport { default as convertOkhslToOklab } from './okhsl/convertOkhslToOklab.js';\nexport { default as convertOkhsvToOklab } from './okhsv/convertOkhsvToOklab.js';\nexport { default as convertOklabToLrgb } from './oklab/convertOklabToLrgb.js';\nexport { default as convertOklabToOkhsl } from './okhsl/convertOklabToOkhsl.js';\nexport { default as convertOklabToOkhsv } from './okhsv/convertOklabToOkhsv.js';\nexport { default as convertOklabToRgb } from './oklab/convertOklabToRgb.js';\nexport { default as convertP3ToXyz65 } from './p3/convertP3ToXyz65.js';\nexport { default as convertProphotoToXyz50 } from './prophoto/convertProphotoToXyz50.js';\nexport { default as convertRec2020ToXyz65 } from './rec2020/convertRec2020ToXyz65.js';\nexport { default as convertRgbToCubehelix } from './cubehelix/convertRgbToCubehelix.js';\nexport { default as convertRgbToHsi } from './hsi/convertRgbToHsi.js';\nexport { default as convertRgbToHsl } from './hsl/convertRgbToHsl.js';\nexport { default as convertRgbToHsv } from './hsv/convertRgbToHsv.js';\nexport { default as convertRgbToHwb } from './hwb/convertRgbToHwb.js';\nexport { default as convertRgbToJab } from './jab/convertRgbToJab.js';\nexport { default as convertRgbToLab } from './lab/convertRgbToLab.js';\nexport { default as convertRgbToLab65 } from './lab65/convertRgbToLab65.js';\nexport { default as convertRgbToLrgb } from './lrgb/convertRgbToLrgb.js';\nexport { default as convertRgbToOklab } from './oklab/convertRgbToOklab.js';\nexport { default as convertRgbToXyb } from './xyb/convertRgbToXyb.js';\nexport { default as convertRgbToXyz50 } from './xyz50/convertRgbToXyz50.js';\nexport { default as convertRgbToXyz65 } from './xyz65/convertRgbToXyz65.js';\nexport { default as convertRgbToYiq } from './yiq/convertRgbToYiq.js';\nexport { default as convertXybToRgb } from './xyb/convertXybToRgb.js';\nexport { default as convertXyz50ToLab } from './lab/convertXyz50ToLab.js';\nexport { default as convertXyz50ToLuv } from './luv/convertXyz50ToLuv.js';\nexport { default as convertXyz50ToProphoto } from './prophoto/convertXyz50ToProphoto.js';\nexport { default as convertXyz50ToRgb } from './xyz50/convertXyz50ToRgb.js';\nexport { default as convertXyz50ToXyz65 } from './xyz65/convertXyz50ToXyz65.js';\nexport { default as convertXyz65ToA98 } from './a98/convertXyz65ToA98.js';\nexport { default as convertXyz65ToItp } from './itp/convertXyz65ToItp.js';\nexport { default as convertXyz65ToJab } from './jab/convertXyz65ToJab.js';\nexport { default as convertXyz65ToLab65 } from './lab65/convertXyz65ToLab65.js';\nexport { default as convertXyz65ToP3 } from './p3/convertXyz65ToP3.js';\nexport { default as convertXyz65ToRec2020 } from './rec2020/convertXyz65ToRec2020.js';\nexport { default as convertXyz65ToRgb } from './xyz65/convertXyz65ToRgb.js';\nexport { default as convertXyz65ToXyz50 } from './xyz65/convertXyz65ToXyz50.js';\nexport { default as convertYiqToRgb } from './yiq/convertYiqToRgb.js';\n\nexport {\n\tmodeA98,\n\tmodeCubehelix,\n\tmodeDlab,\n\tmodeDlch,\n\tmodeHsi,\n\tmodeHsl,\n\tmodeHsv,\n\tmodeHwb,\n\tmodeItp,\n\tmodeJab,\n\tmodeJch,\n\tmodeLab,\n\tmodeLab65,\n\tmodeLch,\n\tmodeLch65,\n\tmodeLchuv,\n\tmodeLrgb,\n\tmodeLuv,\n\tmodeOkhsl,\n\tmodeOkhsv,\n\tmodeOklab,\n\tmodeOklch,\n\tmodeP3,\n\tmodeProphoto,\n\tmodeRec2020,\n\tmodeRgb,\n\tmodeXyb,\n\tmodeXyz50,\n\tmodeXyz65,\n\tmodeYiq\n};\n\nexport const a98 = useMode(modeA98);\nexport const cubehelix = useMode(modeCubehelix);\nexport const dlab = useMode(modeDlab);\nexport const dlch = useMode(modeDlch);\nexport const hsi = useMode(modeHsi);\nexport const hsl = useMode(modeHsl);\nexport const hsv = useMode(modeHsv);\nexport const hwb = useMode(modeHwb);\nexport const itp = useMode(modeItp);\nexport const jab = useMode(modeJab);\nexport const jch = useMode(modeJch);\nexport const lab = useMode(modeLab);\nexport const lab65 = useMode(modeLab65);\nexport const lch = useMode(modeLch);\nexport const lch65 = useMode(modeLch65);\nexport const lchuv = useMode(modeLchuv);\nexport const lrgb = useMode(modeLrgb);\nexport const luv = useMode(modeLuv);\nexport const okhsl = useMode(modeOkhsl);\nexport const okhsv = useMode(modeOkhsv);\nexport const oklab = useMode(modeOklab);\nexport const oklch = useMode(modeOklch);\nexport const p3 = useMode(modeP3);\nexport const prophoto = useMode(modeProphoto);\nexport const rec2020 = useMode(modeRec2020);\nexport const rgb = useMode(modeRgb);\nexport const xyb = useMode(modeXyb);\nexport const xyz50 = useMode(modeXyz50);\nexport const xyz65 = useMode(modeXyz65);\nexport const yiq = useMode(modeYiq);\n","import{DateTime as e}from\"luxon\";import{debounce as t,getPrototypeChain as n,setObjectMethod as r,setObjectValue as i}from\"@basmilius/utils\";import{customRef as a,markRaw as o,toRaw as s}from\"vue\";function c(e){return class extends e{constructor(...e){throw Error(`@adapter: cannot create instance of class.`)}}}function ee(){return(e,t)=>{e[t]=e[t].bind(e)}}function te(e){return(n,r,i)=>{i.value=t(i.value,e,n)}}function ne(e,t){return e===t?!0:e===t}const l=Symbol(),u=Symbol(),d=Symbol(),f=Symbol(),p=Symbol(),m=Symbol(),h=Symbol(),g=Symbol(),_=Symbol(),re=Symbol(),ie=Symbol();function v(e){return e&&typeof e==`object`&&!!e[p]}function y(e){if(!v(e))throw Error(`@dto assert given object is not a class decorated with @Dto.`)}const ae=Symbol();function b(e,t=0,n){return function(...r){let i=e[ae]??=new WeakMap,a=r[t],o=n===void 0?`self`:r[n];if(typeof a!=`object`||!a)return e.call(this,...r);i.has(a)||i.set(a,[]);let s=i.get(a);if(!s.includes(o)){s.push(o);try{return e.call(this,...r)}finally{let e=s.lastIndexOf(o);e!==-1&&s.splice(e,1),s.length===0&&i.delete(a)}}}}function oe(e){return y(e),e.clone()}function x(e){return y(e),e[f]}const S=b(function(e,t,n,r){let i=e[ie];i(e,t,n,r),e[m]&&S(e[m],e[h],e[m][e[h]])},0,1),C=b(function(e){y(e),e[f]&&(e[f]=!1,S(e,f,!1,!0)),!(!e[u]||e[u].length===0)&&e[u].filter(x).forEach(C)});async function se(e,t){!v(e)||!x(e)||(await t(e),C(e))}function ce(e){return y(e),!e[f]}const w=b(function(e,t){y(e),e[f]||(e[f]=!0,S(e,f,!0,!1)),e[m]&&w(e[m],e[h])});function T(e,t,n){t[u]??=[],!t[u].includes(e)&&t[u].push(e),e[m]!==t&&(e[m]=t),e[h]!==n&&(e[h]=n)}function E(e,t,n){if(v(n))T(n,e,t);else if(Array.isArray(n)){for(let r of n)v(r)&&T(r,e,t);n[m]=e,n[h]=t}}function le(e,t){let n=e[re];n(e,t)}function D(e,t){if(u in t){let n=t[u].indexOf(e);n!==-1&&t[u].splice(n,1)}e[m]=void 0,e[h]=void 0}function ue(e,t){if(v(t))D(t,e);else if(Array.isArray(t)){for(let n of t)v(n)&&D(n,e);t[m]=void 0,t[h]=void 0}}const O={};var k={deleteProperty(e,t){if(Reflect.deleteProperty(e,t),A(e,t))return!0;let n=e[m];return n&&S(n,e[h],n[e[h]]),n&&w(n,e[h]),!0},get(e,t,n){if(t===_)return!0;if(A(e,t))return Reflect.get(e,t,n);let r=e[m];return r&&le(r,e[h]),Reflect.get(e,t)},set(e,t,n,r){if(A(e,t))return Reflect.set(e,t,n,r);let i=e[m];return i&&S(i,e[h],i[e[h]]),i&&w(i,e[h]),Reflect.set(e,t,n)}};function A(e,t){return typeof t==`symbol`||typeof e[t]==`function`||t===`length`}var de={get(e,t,n){if(t===_)return!0;if(typeof t==`symbol`)return Reflect.get(e,t,n);let r=e[d][t];if(!r||!r.get)return Reflect.get(e,t,n);let i=r.get.call(e);return le(e,t),E(e,t,i),i},getOwnPropertyDescriptor(e,t){return e[d][t]},ownKeys(e){return e[g]},set(e,t,n,r){if(typeof t==`symbol`)return Reflect.set(e,t,n,r);let i=e[d][t];if(!i||!i.set)return Reflect.set(e,t,n,r);let a=i.get?.call(e)??void 0;return ne(n,a)?!0:(ue(e,a),Array.isArray(n)&&!n[_]&&(n=new Proxy(n,k)),i.set.call(e,n),E(e,t,n),w(e,t),S(e,t,n,a),!0)}},fe={get(e,t,n){return t===`__v_isRef`?!1:t===_?!0:t in e?Reflect.get(e,t,n):Reflect.get(e.value,t)},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e.value,t)},ownKeys(e){return Reflect.ownKeys(e.value)},set(e,t,n,r){return t in e?Reflect.set(e,t,n,r):Reflect.set(e.value,t,n)}},pe={construct(e,t,n){t=t.map(e=>Array.isArray(e)?new Proxy(e,k):e);let r=a((r,i)=>{let a=o(Reflect.construct(e,t,n));a[l]=t,a[f]=!1,a[re]=r,a[ie]=i;let s=new Proxy(a,de);return{get:()=>(r(),s),set:()=>void 0}});return new Proxy(r,fe)}};function me(){let e=this;y(e);let t=O[e[p]],n=new t(...e[l]);for(let[e,t]of Object.entries(this[d]))t.set&&(n[e]=v(this[e])?this[e].clone():this[e]);return n}function he(e){for(let t in e){let n=this[d][t];v(this[t])&&typeof e[t]==`object`?this[t].fill(e[t]):n&&n.set&&(this[t]=e[t])}}function ge(){let e={};for(let t of this[g]){let n=this[t];v(n)&&(n=n.toJSON()),e[t]=n}return e}function j(e){ve(e);let t=Object.freeze(n(e)),a=Object.keys(t);return i(e.prototype,d,t),i(e.prototype,p,e.name),i(e.prototype,g,a),i(e,Symbol.hasInstance,t=>typeof t==`object`&&t?.[p]===e.name),r(e,`clone`,me),r(e,`fill`,he),r(e,`toJSON`,ge),_e(e)}function _e(e){let t=new Proxy(e,pe);return O[e.name]=t,t}function ve(e){let t=Object.getPrototypeOf(e.prototype);if(p in t)throw Error(`⛔️ @dto ${e.name} cannot extend parent class which is also decorated with @dto ${t[p]}.`)}function M(e){return e.map(F)}function ye([,t]){return e.fromISO(t)}function N(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,F(t)]).filter(([,e])=>e!==void 0))}const P={};function be([,e,t,n,r]){if(!(t in O))throw Error(`Cannot restore @dto. Dto ${t} was not found.`);if(e in P)return P[e];let i=O[t],a=new i(...M(r));return a.fill(N(n)),P[e]=a,a}function xe(e){return Array.isArray(e)&&e[0]===3058}function Se(e){return Array.isArray(e)&&e[0]===3057}function F(e){switch(!0){case e===null:return null;case Array.isArray(e):switch(!0){case xe(e):return ye(e);case Se(e):return be(e);default:return M(e)}case typeof e==`object`:return N(e);default:return e}}function Ce(e){return F(JSON.parse(e))}function we(e){return[3058,e.toISO({extendedZone:!0,includeOffset:!0})]}function I(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,z(t)]).filter(([,e])=>e!==void 0))}function Te(){return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16))}function L(e){e=s(e);let t=e.toJSON();return[3057,Te(),e[p],I(t),R(e[l])]}function R(t){switch(!0){case t.every(v):return t.map(L);case t.every(e.isDateTime):return t.map(we);default:return t.map(z)}}function z(t){switch(!0){case t===null:return null;case Array.isArray(t):return R(t);case v(t):return L(t);case e.isDateTime(t):return we(t);case typeof t==`object`:return I(t);case typeof t==`boolean`:case typeof t==`number`:case typeof t==`string`:return t;default:return}}function Ee(e){return JSON.stringify(z(e))}function B(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let V=class{get blob(){return this.#e}get name(){return this.#t}#e;#t;constructor(e,t){this.#e=e,this.#t=t}};V=B([j],V);var H=V;let U=class{get items(){return this.#e}get page(){return this.#t}get pageSize(){return this.#n}get pages(){return this.#r}get total(){return this.#i}#e;#t;#n;#r;#i;constructor(e,t,n,r,i){this.#e=e,this.#t=t,this.#n=n,this.#r=r,this.#i=i}};U=B([j],U);var W=U;let G=class{get code(){return this.#e}get error(){return this.#t}get errorDescription(){return this.#n}get statusCode(){return this.#r}#e;#t;#n;#r;constructor(e,t,n,r){this.#e=e,this.#t=t,this.#n=n,this.#r=r}};G=B([j],G);var K=G;let q=class{get code(){return this.#e}get error(){return this.#t}get errorDescription(){return this.#n}get errors(){return this.#r}get params(){return this.#i}#e;#t;#n;#r;#i;constructor(e,t,n,r,i){this.#e=e,this.#t=t,this.#n=n,this.#r=r,this.#i=i}};q=B([j],q);var J=q,Y;let X=Y=class{static parsePaginatedAdapter(e,t){return new W(e.items.map(t),e.page,e.page_size,e.pages,e.total)}static parseFileNameFromContentDispositionHeader(t){let n=`download-${e.now().toFormat(`yyyy-MM-dd HH-mm-ss`)}`;if(!t.startsWith(`attachment`))return n;let r=/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/.exec(t);return(r?.length||0)<2?n:r[1].replaceAll(`'`,``).replaceAll(`\"`,``).replaceAll(`/`,`-`).replaceAll(`:`,`-`)}static parseRequestError(e,t){return new K(e.code,e.error,e.error_description,t)}static parseValidationError(e){let t;return e.errors&&(t={},Object.entries(e.errors).forEach(([e,n])=>{t[e]=Y.parseValidationError(n)})),new J(e.code,e.error,e.error_description,t,e.params)}};X=Y=B([c],X);var Z=class{get data(){return this.#e}get headers(){return this.#t.headers}get ok(){return this.statusCode>=200&&this.statusCode<300}get response(){return this.#t}get statusCode(){return this.#t.status}#e;#t;constructor(e,t){this.#e=e,this.#t=t}},De=class e{get authToken(){return this.#e}set authToken(e){this.#e=e}get baseUrl(){return this.#t}get dataField(){return this.#n}#e;#t;#n;constructor(e,t,n=!1){this.#e=e,this.#t=t,this.#n=n}static get instance(){if(e.#r===null)throw Error(`There is currently no HttpClient instance registered. Register one using the HttpClient.register() function.`);return e.#r}static#r=null;static register(t){e.#r=t}},Q=class extends Error{};const $={};var Oe=class t{get client(){return this.#e}get options(){return this.#r}get path(){return this.#n}set path(e){this.#n=e}get query(){return this.#i}set query(e){this.#i=e}#e;#t=null;#n;#r={};#i=null;constructor(e,t){this.#e=t??De.instance,this.#r.cache=`no-cache`,this.#r.method=`GET`,this.#n=e}autoCancel(e){return this.#t=e,this}bearerToken(e){return e??=this.#e.authToken,e?this.header(`Authorization`,`Bearer ${e}`):(this.#r.headers&&`Authorization`in this.#r.headers&&delete this.#r.headers.Authorization,this)}body(e,t=`application/octet-stream`){return e instanceof FormData?t=null:(Array.isArray(e)||typeof e==`object`)&&(e=JSON.stringify(e),t=`application/json`),this.#r.body=e,t===null?this:this.header(`Content-Type`,t)}header(e,t){return this.#r.headers=this.#r.headers||{},this.#r.headers[e]=t,this}method(e){return this.#r.method=e.toUpperCase(),this}queryString(e){return this.#i=e,this}signal(e=null){return this.#r.signal=e,this}async fetch(){return this.#a().then(e=>e.json())}async fetchBlob(){let t=await this.#a();if(t.status!==200){let e=await t.json();throw`code`in e&&`error`in e&&`error_description`in e?new K(e.code,e.error,e.error_description,t.status):new K(-1,`failed_without_info`,`Request failed without any information from the backend.`,t.status)}let n=t.headers.has(`content-disposition`)?X.parseFileNameFromContentDispositionHeader(t.headers.get(`content-disposition`)??``):`download-${e.now().toFormat(`yyyy-MM-dd HH-mm-ss`)}`;return new H(await t.blob(),n)}async run(){let{data:e,response:t}=await this.#o();return new Z(e,t)}async runAdapter(e){let{data:t,response:n}=await this.#o();return new Z(e(t),n)}async runArrayAdapter(e){return this.runAdapter(t=>t.map(e))}async runEmpty(){return await this.#o()}async runPaginatedAdapter(e){return this.runAdapter(t=>X.parsePaginatedAdapter(t,e))}async runData(){return await this.#o()}async runDataKey(e){let{data:t,response:n}=await this.#o();return new Z(t[e],n)}async runStatusCode(){return(await this.#o()).statusCode}async#a(){if(this.#t!==null){this.#t in $&&$[this.#t].abort(new Q);let e=new AbortController;$[this.#t]=e,this.signal(e.signal)}let e=this.path;this.query!==null&&(e+=`?${this.query.build()}`);let t=await fetch(this.client.baseUrl+e,this.options);return this.#t!==null&&delete $[this.#t],t}async#o(){return await this.#a().then(e=>t.#s(e,this.client.dataField))}static async#s(e,t){if(e.status===204)return new Z(null,e);if(e.headers.has(`content-type`)&&e.headers.get(`content-type`)?.startsWith(`application/json`)){let n=await e.json();if(n&&typeof n==`object`&&`code`in n&&`error`in n&&`error_description`in n)throw`errors`in n?X.parseValidationError(n):X.parseRequestError(n,e.status);return t&&`data`in n?new Z(n.data,e):new Z(n,e)}if(e.status===401||e.status===403||(await e.text()).length===0&&e.status>=200&&e.status<300)return new Z(null,e);throw new K(-1,`not_a_json_response`,`The response was not a JSON response.`,e.status)}},ke=class{request(e,t){return new Oe(e,t)}},Ae=class e{#e;constructor(){this.#e=new URLSearchParams}build(){return this.#e.toString()}append(e,t){return this.#t(this.#e.append.bind(this.#e),e,t)}appendArray(e,t){return t?.forEach(t=>this.append(e,t)),this}delete(e){return this.#e.delete(e),this}get(e){return this.#e.get(e)}getAll(e){return this.#e.getAll(e)}has(e){return this.#e.has(e)}set(e,t){return this.#t(this.#e.set.bind(this.#e),e,t)}#t(e,t,n){if(!n&&n!==!1)return this;switch(typeof n){case`boolean`:e(t,n?`true`:`false`);break;case`number`:e(t,n.toString(10));break;case`string`:e(t,n);break}return this}static builder(){return new e}};function je(e){return e instanceof Q}function Me(e){return e instanceof K}function Ne(e){return e instanceof K&&(e=e.statusCode),e===403||e===401}function Pe(e){return e instanceof J}export{Z as BaseResponse,ke as BaseService,H as BlobResponse,X as HttpAdapter,De as HttpClient,W as Paginated,Ae as QueryString,Q as RequestAbortedError,Oe as RequestBuilder,K as RequestError,J as ValidationError,c as adapter,y as assertDto,ee as bound,oe as cloneDto,te as debounce,Ce as deserialize,j as dto,se as executeIfDtoDirtyAndMarkClean,v as isDto,ce as isDtoClean,x as isDtoDirty,je as isRequestAborted,Me as isRequestError,Ne as isUnsanctionedRequest,Pe as isValidationError,C as markDtoClean,w as markDtoDirty,Ee as serialize};","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nexport default castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nexport default asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nexport default unicodeToArray;\n","import asciiToArray from './_asciiToArray.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeToArray from './_unicodeToArray.js';\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nexport default stringToArray;\n","import castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nexport default createCaseFirst;\n","import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nexport default upperFirst;\n","import toString from './toString.js';\nimport upperFirst from './upperFirst.js';\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nexport default capitalize;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nexport default arrayReduce;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default basePropertyOf;\n","import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nexport default deburrLetter;\n","import deburrLetter from './_deburrLetter.js';\nimport toString from './toString.js';\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nexport default deburr;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nexport default asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nexport default hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nexport default unicodeWords;\n","import asciiWords from './_asciiWords.js';\nimport hasUnicodeWord from './_hasUnicodeWord.js';\nimport toString from './toString.js';\nimport unicodeWords from './_unicodeWords.js';\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nexport default words;\n","import arrayReduce from './_arrayReduce.js';\nimport deburr from './deburr.js';\nimport words from './words.js';\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nexport default createCompounder;\n","import capitalize from './capitalize.js';\nimport createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nexport default camelCase;\n","import{computed as e,customRef as t,getCurrentInstance as n,isRef as r,onMounted as i,onScopeDispose as a,onUnmounted as o,provide as s,ref as c,unref as l,watch as u,watchEffect as d}from\"vue\";import{converter as f,formatHex as p}from\"culori\";import{cloneDto as m,isRequestError as h,isUnsanctionedRequest as g,markDtoClean as _}from\"@basmilius/http-client\";import{debounce as v,isHtmlElement as y}from\"@basmilius/utils\";import{useRoute as b,useRouter as x,viewDepthKey as S}from\"vue-router\";import{merge as ee}from\"lodash-es\";import{createPinia as C,defineStore as w,getActivePinia as T,setActivePinia as te,storeToRefs as E}from\"pinia\";function D(e){return e||null}const O=f(`oklch`),k=[25,50,100,200,300,400,500,600,700,800,900,950],A={25:0,50:.05,100:.1,200:.2,300:.35,400:.48,500:.55,600:.65,700:.75,800:.85,900:.93,950:.98};function j(e,t=0,n=1){return Math.min(n,Math.max(t,e))}function ne(e,t=`color`){let n=O(e);if(!n||n.mode!==`oklch`)throw Error(`Invalid color`);let r={};for(let e of k){let i=A[e],a=e<500?n.l+(1-n.l)*(1-i/A[500]):n.l*(1-(i-A[500])/(1-A[500]));a=j(a);let o=1-Math.abs(i-A[500])*1.4,s=(n.c??0)*j(o,.2,1);r[`--${t}-${e}`]=p({mode:`oklch`,l:a,c:s,h:n.h})}return r}var M=class extends Error{},N=class extends Error{},P=class extends Error{},F=class extends Error{};const I=Symbol();function L(e,t){R(e)&&(e=e[I]);let n=async(...n)=>{try{return await e(...n)}catch(e){throw h(e)&&e.statusCode===403?new M:g(e)?new P:t&&typeof t==`function`?(t(e),new N):e}};return n[I]=e,n}function R(e){return I in e}function z(e){return(t=>L(t,e))}function B(e,t,n=JSON.stringify,r=JSON.parse){let i=localStorage.getItem(e),a=t;if(i)try{a=r(i)}catch{localStorage.removeItem(e)}let o=c(a);return u(o,t=>{t==null?localStorage.removeItem(e):localStorage.setItem(e,n(t))},{deep:!0}),o}function V(e,t){return B(e,t,e=>e??``,e=>e===``?null:e)}function H(e){return(t=>(...n)=>(e(),t(...n)))}function U(...e){return e.map(l).map(W)}function W(e){if(!e)throw new F;return e}function G(e){let t=l(e);return t?y(t)?t:t.$el??null:null}function K(e,t,n){let r=c([]);i(()=>{document.addEventListener(`pointerdown`,a)}),o(()=>{document.removeEventListener(`pointerdown`,a)});function a(e){l(t)&&!l(r).some(t=>t.contains(e.target))&&n(e)}d(()=>{let t=[];(Array.isArray(e)?e:[e]).forEach(e=>{let n=G(e);n&&t.push(n)}),r.value=t})}function q(){let t=n();return e(()=>t?.uid??(t?.proxy)._uid??0)}function J(e,t){return async()=>{await navigator.clipboard.writeText(l(e)),t?.()}}function Y(e,n,i=!1){let a=c(r(e)?e.value:e),o=t((e,t)=>({get(){return e(),a.value},set:X(e=>{a.value=e,t()},n,i)}));return r(e)&&u(e,e=>o.value=e),o}function X(e,t,n=!1){let r;return(...i)=>{n&&!r&&e(...i),clearTimeout(r),r=setTimeout(()=>requestAnimationFrame(()=>e(...i)),t)}}function Z(t=0,n=!1){let r=c(n),i=c(0),a=e(()=>l(r)||l(i)>0);function o(e){return(async(...t)=>(i.value++,await e(...t).finally(()=>i.value--)))}let s=Y(a,t);return u(i,()=>{l(r)&&(r.value=!1)}),{isLoading:s,loaded:o}}const re=[5,10,25,50,100];function Q(){let e=c(re),t=c(1),n=c(25),r=c(0);function i(e){t.value=e}function a(e){n.value=e}function o(e){r.value=e}return{limits:e,page:t,perPage:n,total:r,setPage:i,setPerPage:a,setTotal:o}}function ie(e,t=[]){let{isLoading:n,loaded:r}=Z(),{limits:i,page:a,perPage:o,total:s,setPage:d,setPerPage:f,setTotal:p}=Q(),m=c(!1),h=c(!0),g=c([]);async function _(){let t=l(a),n=l(o);try{let i=await r(e)((t-1)*n,n);if(i===!1)return;h.value?(h.value=!1,i.data.items.length===0&&(m.value=!0)):i.data.items.length>0&&(m.value=!1),g.value=i.data.items,p(i.data.total)}catch(e){if(e instanceof F)return;throw e}}return u([a,o,...t],_,{immediate:!0}),{displayEmpty:m,isLoading:n,items:g,limits:i,page:a,perPage:o,total:s,reload:_,setPage:d,setPerPage:f,setTotal:p}}function ae(e,t){return v(e,t)}function oe(e){let t=c();return u(e,e=>{e&&(t.value=m(e),_(t.value))},{immediate:!0}),t}function se(e,t){let n=c();i(()=>{a()}),o(()=>{clearTimeout(n.value)});function r(){n.value=setTimeout(()=>requestAnimationFrame(a),l(e))}function a(){r(),t()}}function ce(e){let{isLoading:t,loaded:n}=Z();return[n(e),t]}function le(){let e=c(null),t=c(null);return u(e,(e,n,r)=>{e&&(t.value=URL.createObjectURL(e),r(()=>{t.value&&=(URL.revokeObjectURL(t.value),null)}))},{immediate:!0}),{file:e,url:t,delete:()=>{e.value=null,t.value=null},upload:t=>{e.value=t}}}function ue(){let e=c(!1);return i(()=>e.value=!0),e}function de(e,t,n){n??={attributes:!0};let r,i=u(e,e=>{o();let i=G(e);i&&(r=new MutationObserver(t),r.observe(i,n))},{immediate:!0});function o(){r&&=(r.disconnect(),void 0)}function s(){o(),i()}a(s)}const fe=[{index:0,type:`too_weak`,minimumDiversity:0,minimumLength:0},{index:1,type:`weak`,minimumDiversity:2,minimumLength:6},{index:2,type:`medium`,minimumDiversity:3,minimumLength:8},{index:3,type:`strong`,minimumDiversity:4,minimumLength:10}],pe=[{regex:RegExp(`[a-z]`),type:`lowercase`},{regex:RegExp(`[A-Z]`),type:`uppercase`},{regex:RegExp(`[0-9]`),type:`number`},{regex:RegExp(`[!\"#$%&'()*+,-./:;<=>?@[\\\\\\\\\\\\]^_\\`{|}~]`),type:`symbol`}];function me(t){return e(()=>{let e=l(t);if(e.length===0)return null;let n=pe.filter(t=>t.regex.test(e)).map(e=>e.type);return{length:e.length,strength:fe.sort((e,t)=>t.index-e.index).find(t=>n.length>=t.minimumDiversity&&e.length>=t.minimumLength).type,rules:n}})}function he(e,t,n){n??={};let r,i=u(e,e=>{o();let i=G(e);i&&(r=new ResizeObserver(t),r.observe(i,n))},{immediate:!0});function o(){r&&=(r.disconnect(),void 0)}function s(){o(),i()}a(s)}function ge(e,...t){let n=new e,r=Object.getOwnPropertyNames(e.prototype).filter(e=>e!==`constructor`),i={};for(let e of r)i[e]=L(n[e].bind(n)),t.forEach(t=>i[e]=t(i[e]));return i}function $(){let t=b();return e(()=>{let e=[];return l(t).matched.forEach(t=>t.name&&e.push(t.name)),e})}function _e(t,n=!1){let r=$();return e(n?()=>l(r).some(e=>e.startsWith(t)):()=>l(r).some(e=>e===t))}function ve(t){let n=b(),r=e(()=>l(n).matched.findIndex(e=>!!e.components&&l(t)in e.components)),i=e(()=>l(n).matched[l(r)]),a=e(()=>l(i)?.path);return s(S,r),{route:n,viewKey:a}}function ye(...e){let t=x(),n=async(e,n=!1)=>n?await t.replace(e):await t.push(e);for(let t of e)n=t(n);return{navigate:n,push:e=>n(e),replace:e=>n(e,!0)}}function be(){let t=b();return e(()=>{let e=l(t).matched,n={};for(let t=e.length-1;t>=0;--t){let r=e[t];if(!r||typeof r.meta!=`object`)continue;let i={...r.meta};if(`navigation`in n){let{navigation:e,...t}=i;i=t}n=ee(n,i)}return n})}function xe(e,t=null){let n=b(),r=c(l(n).params[e]??t);return u(()=>l(n).params[e],e=>{r.value=e||null},{immediate:!0}),r}function Se(t){let n=b();return e(()=>{let e=l(t);for(let t of l(n).matched)if(t.components&&e in t.components)return t.components[e];return null})}function Ce(e,t){let n=w(e,t);return()=>{let e=n(),t=Object.getOwnPropertyNames(e),r=E(e),i={};for(let n of t)if(!(n.startsWith(`$`)||n.startsWith(`_`))){if(n in r){i[n]=r[n];continue}i[n]=e[n]}return i}}export{M as ForbiddenException,N as HandledException,P as UnauthorizedException,F as UnresolvedDependencyException,C as createPinia,Ce as defineStore,D as emptyNull,ne as generateColorPalette,T as getActivePinia,L as guarded,z as onError,B as persistentRef,V as persistentStringRef,H as runBefore,te as setActivePinia,U as unrefAll,G as unwrapElement,K as useClickOutside,q as useComponentId,J as useCopy,ie as useDataTable,ae as useDebounced,Y as useDebouncedRef,oe as useDtoForm,se as useInterval,_e as useIsView,Z as useLoaded,ce as useLoadedAction,le as useLocalFile,ue as useMounted,de as useMutationObserver,ve as useNamedRoute,ye as useNavigate,Q as usePagination,me as usePasswordStrength,he as useResizeObserver,be as useRouteMeta,$ as useRouteNames,xe as useRouteParam,Se as useRouteView,ge as useService};\n//# sourceMappingURL=index.mjs.map","import { useDebouncedRef, useLoaded } from '@basmilius/common';\nimport type { FluxFilterOptionRow, FluxFilterValue } from '@flux-ui/types';\nimport { type ComputedRef, type ModelRef, computed, type Ref, ref, unref, watch } from 'vue';\nimport { isFluxFilterOptionItem } from '$flux/data';\n\ntype UseAsyncFilterOptionsParams = {\n readonly currentValueIds: ComputedRef<FluxFilterValue[]>;\n readonly modelSearch: ModelRef<string, string, string, string>;\n fetchOptions(ids: FluxFilterValue[]): Promise<FluxFilterOptionRow[]>;\n fetchRelevant(): Promise<FluxFilterOptionRow[]>;\n fetchSearch(searchQuery: string): Promise<FluxFilterOptionRow[]>;\n};\n\nexport default function ({\n currentValueIds,\n modelSearch,\n fetchOptions: fetchOptionsProp,\n fetchRelevant: fetchRelevantProp,\n fetchSearch: fetchSearchProp\n}: UseAsyncFilterOptionsParams) {\n const {isLoading, loaded} = useLoaded();\n const debouncedModelSearch = useDebouncedRef(modelSearch, 150) as unknown as Ref<string>;\n const fetchOptions = computed(() => loaded(fetchOptionsProp));\n const fetchRelevant = computed(() => loaded(fetchRelevantProp));\n const fetchSearch = computed(() => loaded(fetchSearchProp));\n\n const selectedOptions = ref<FluxFilterOptionRow[]>([]);\n const visibleOptions = ref<FluxFilterOptionRow[]>([]);\n\n const options = computed(() => {\n const options: FluxFilterOptionRow[] = [];\n const search = unref(modelSearch);\n const selected = unref(selectedOptions);\n const visible = unref(visibleOptions);\n\n visible.forEach(vo => options.push(vo));\n\n selected.forEach(so => {\n if (isFluxFilterOptionItem(so) && visible.find(vo => isFluxFilterOptionItem(vo) && vo.value === so.value)) {\n return;\n }\n\n if (isFluxFilterOptionItem(so) && !so.label.toLowerCase().includes(search.toLowerCase())) {\n return;\n }\n\n options.push(so);\n });\n\n return options;\n });\n\n watch(currentValueIds, async ids => {\n if (ids.length === 0) {\n return;\n }\n\n selectedOptions.value = await unref(fetchOptions)(ids);\n }, {immediate: true});\n\n watch(debouncedModelSearch, async searchQuery => {\n if (searchQuery.length > 0) {\n visibleOptions.value = await unref(fetchSearch)(searchQuery);\n } else {\n visibleOptions.value = await unref(fetchRelevant)();\n }\n }, {immediate: true});\n\n return {isLoading, options};\n}\n","import { type ModelRef, type Ref, ref, unref, watch } from 'vue';\n\ntype FlyoutLike = {\n close(): void;\n};\n\ntype UseDateFlyoutOptions<T> = {\n compareKey?(value: T | null): string | number | null | undefined;\n transformIn?(value: T | null): T | null;\n};\n\nexport default function <T>(\n modelValue: ModelRef<T | null>,\n flyoutRef: Readonly<Ref<FlyoutLike | null>>,\n options: UseDateFlyoutOptions<T> = {}\n): Ref<T | null> {\n const localValue = ref<T | null>(null) as Ref<T | null>;\n\n watch(modelValue, value => {\n localValue.value = options.transformIn ? options.transformIn(value) : value;\n }, {immediate: true});\n\n watch(localValue, value => {\n unref(flyoutRef)?.close();\n\n if (options.compareKey && options.compareKey(modelValue.value) === options.compareKey(value)) {\n return;\n }\n\n modelValue.value = value;\n });\n\n return localValue;\n}\n","import{Fragment as e,unref as t}from\"vue\";import{isHtmlElement as n}from\"@basmilius/utils\";import{camelCase as r}from\"lodash-es\";function i(e){if(typeof requestAnimationFrame>`u`)return(()=>{});let t=0;return(()=>{cancelAnimationFrame(t),t=requestAnimationFrame(e)})}function a(t){let n=[];for(let r of t){if(r.type===e&&Array.isArray(r.children)){n.push(...r.children);continue}n.push(r)}return n}const o=[`a:not([disabled])`,`button:not([disabled])`,`input[type=checkbox]:not([disabled])`,`input[type=radio]:not([disabled])`,`input[type=text]:not([disabled])`,`[tabindex]:not([disabled]):not([tabindex=\"-1\"])`].join(`,`);function s(e){return Array.from(e.querySelectorAll(o)).filter(n).filter(e=>e.offsetWidth>0||e.offsetHeight>0||e===document.activeElement)}function c(e,t,n){let r=s(e),i=r.indexOf(t);if(i===-1)return null;let a=d(r);l(a,i,n);let o=u(i,n,a,r);return o||((n===`up`||n===`left`)&&(o=r[i-1]),(n===`down`||n===`right`)&&(o=r[i+1])),o}function l(e,t,n){let r=e[t];e.forEach(e=>{let t=e.center;switch(n){case`up`:t={x:t.x,y:e.top+e.height};break;case`down`:t={x:t.x,y:e.top};break;case`left`:t={x:e.left+e.width,y:t.y};break;case`right`:t={x:e.left,y:t.y};break}e.distance=Math.sqrt((r.center.x-t.x)**2+(r.center.y-t.y)**2)})}function u(e,t,n,r){let i=n[e],a=[];switch(t){case`up`:a=n.map((t,n)=>n===e||t.top+t.height>i.top?2**53-1:t.distance);break;case`down`:a=n.map((t,n)=>n===e||t.top<i.top+i.height?2**53-1:t.distance);break;case`left`:a=n.map((t,n)=>n===e||t.left+t.width>i.left?2**53-1:t.distance);break;case`right`:a=n.map((t,n)=>n===e||t.left<i.left+i.width?2**53-1:t.distance);break}let o=a.indexOf(Math.min(...a));return a[o]===2**53-1?null:r[o]}function d(e){return e.map(e=>e.getBoundingClientRect()).map(e=>({height:e.height,width:e.width,top:e.top,left:e.left,right:e.right,bottom:e.bottom,center:{x:e.left+e.width/2,y:e.top+e.height/2},distance:0}))}function f(e){let t=`UnknownComponent`;return e.type&&e.type.__name&&(t=e.type.__name),t}function p(e){return Object.fromEntries(Object.entries(e.props??{}).map(([e,t])=>[r(e),t]))}function m(e,t){if(!e.exposed||!(t in e.exposed))throw Error(`'${t}' was not exposed by the component.`);return e.exposed[t]}function h(e,t,r=void 0){let i=s(e),a=r||document.activeElement;return!a||!n(a)?i[0]||void 0:i[i.indexOf(a)+t]||void 0}function g(e){return Array.from(e.querySelectorAll(`a[href], button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])`)).filter(e=>!e.hasAttribute(`disabled`)||e.getAttribute(`disabled`)!==`true`).filter(e=>!e.hasAttribute(`aria-disabled`)||e.getAttribute(`aria-disabled`)!==`true`)}function _(e){let r=t(e);return n(r)?r:r?.$el}function v(...e){console.warn(`[Flux]`,...e)}function y(e,t,n=!1){let r=b(e),i=t.compareDocumentPosition(e),a;a=i&&Node.DOCUMENT_POSITION_PRECEDING||n?r.firstChild():r.lastChild(),(a===null?e:a).focus()}function b(e){return document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>e.tabIndex>=0&&!e.disabled?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})}const x=new class{get active(){return this.current?.isEnabled??!1}get current(){return this.#t[this.#t.length-1]??null}#e=[];#t=[];add(e,t,n=!0){let r={id:e,setEnabled:t,isEnabled:!0};this.current&&this.toggle(this.current,!1),this.#t.push(r),n&&(this.toggle(r,!0),this.emit())}remove(e){let t=this.#t.find(t=>t.id===e);t&&this.toggle(t,!1);let n=this.current?.id===e;this.#t=this.#t.filter(t=>t.id!==e),n&&this.current&&this.toggle(this.current,!0),this.emit()}emit(){this.#e.forEach(e=>e(this.active,this.#t))}subscribe(e){return this.#e.push(e),e(this.active,this.#t),()=>this.#e=this.#e.filter(t=>t!==e)}toggle(e,t){e.setEnabled(t),e.isEnabled=t}},S=!globalThis.document;export{_ as a,m as c,c as d,s as f,v as i,p as l,i as m,x as n,g as o,a as p,y as r,h as s,S as t,f as u};\n//# sourceMappingURL=util-CwaOsSvo.js.map","import{a as e,d as t,f as n,n as r,r as i,s as a,t as o}from\"./util-CwaOsSvo.js\";import{computed as s,onMounted as c,onUnmounted as l,ref as u,unref as d,watch as f}from\"vue\";import{DateTime as p}from\"luxon\";import{unwrapElement as m,useMutationObserver as h}from\"@basmilius/common\";function g(e,t){let n=u(!1),r=u(e),i=s(()=>{let e=[],t=d(r).month,n=d(r).startOf(`month`);do e.push(n),n=n.plus({day:1});while(n.month===t);let i=e[0],a=e[e.length-1];for(let t=1;t<i.weekday;++t)e.unshift(i.minus({day:t}));for(let t=a.weekday+1;t<=7;++t)e.push(a.plus({day:t-a.weekday}));for(;e.length/7<6;){let t=e[e.length-1];for(let n=1;n<=7;++n)e.push(t.plus({day:n}))}return e}),a=s(()=>d(i).slice(0,7).map(e=>e.toLocaleString({weekday:t?.weekDayLength??`short`}))),o=s(()=>d(r).plus({month:1})),c=s(()=>d(r).minus({month:1})),l=s(()=>d(r).toLocaleString({month:t?.monthLength??`long`})),f=s(()=>d(r).year.toString());function p(e){n.value=r.value>e,r.value=e}function m(){p(d(r).plus({month:1}))}function h(){p(d(r).minus({month:1}))}return{isTransitioningToPast:n,viewDate:r,viewDateNext:o,viewDatePrevious:c,viewMonth:l,viewYear:f,dates:i,days:a,setViewDate:p,nextMonth:m,previousMonth:h}}function _(e,t){return{months:s(()=>{let n=[],r=d(e),i=r.startOf(`year`);for(;i.month<=12&&i.year===r.year;)n.push({date:i,label:i.toLocaleString({month:t})}),i=i.plus({months:1});return n})}}function v(e,t=10){let n=u(0),r=s(()=>{let r=d(e).year,i=[],a=r-r%t+d(n)*t;for(let e=0;e<t;++e)i.push(a+e);return i});function i(){++n.value}function a(){--n.value}return f(e,()=>n.value=0),{years:r,next:i,previous:a}}function y(e,t,n,r={passive:!0}){f(e,(e,i,a)=>{e&&(e.addEventListener(t,n,r),a(()=>e.removeEventListener(t,n)))},{immediate:!0})}function b(t,n={}){let r=u(n.initial??!1);return f(t,(i,a,o)=>{let s=e(t);if(!s)return;let c=new IntersectionObserver(e=>r.value=e[0]?.isIntersecting??!1,n);c.observe(s),o(()=>c.disconnect())},{immediate:!0}),r}function x(e,t){let n=`flux/${e}`,r=u(i()??t);function i(){if(n in localStorage){let e=JSON.parse(localStorage.getItem(n));return Array.isArray(e)&&e[0]===`DateTime`&&(e=p.fromISO(e[1])),e}return null}return f(r,e=>{let t=e;p.isDateTime(e)&&(t=[`DateTime`,e.toISO({includeOffset:!0,extendedZone:!0})]),localStorage.setItem(n,JSON.stringify(t))}),r}function S(t){let n=u(!0),r=u(!0);return f(t,(i,a,o)=>{let s=e(t);if(!s)return;let c=()=>{let{scrollTop:e,scrollHeight:t,clientHeight:i}=s;n.value=e<=0,r.value=Math.ceil(e+i)>=t},l=new ResizeObserver(c);l.observe(s);for(let e of Array.from(s.children))l.observe(e);let u=new MutationObserver(e=>{for(let t of e){for(let e of Array.from(t.addedNodes))e instanceof Element&&l.observe(e);for(let e of Array.from(t.removedNodes))e instanceof Element&&l.unobserve(e)}c()});u.observe(s,{childList:!0}),s.addEventListener(`scroll`,c,{passive:!0}),c(),o(()=>{s.removeEventListener(`scroll`,c),l.disconnect(),u.disconnect()})},{immediate:!0}),{isAtStart:n,isAtEnd:r}}function C(e){let t=u(0),n=u(0);return e||=u(document),y(e,`scroll`,()=>{let r=d(e);r instanceof Document&&(r=r.scrollingElement),t.value=r?.scrollLeft??0,n.value=r?.scrollTop??0}),{x:t,y:n}}let w=0;function T(e=!1){let t=u(`focus-trap-${++w}`),n=u(!1);return c(()=>r.add(d(t),e=>n.value=e,e)),l(()=>r.remove(d(t))),n}function E(t,n){f(t,(r,i,a)=>{if(!e(t)||d(n))return;let o=document.activeElement;a(()=>{requestAnimationFrame(()=>o?.focus())})})}function D(t,r={}){if(o)return;let{disable:a=u(!1),disableReturn:s=u(!1),attachTo:c=null}=r,l=T(!a);E(t,s),f(t,(r,a,o)=>{let s=e(t),u=c||document;l.value&&s&&document.activeElement&&!s.contains(document.activeElement)&&!s.querySelector(`[autofocus]`)&&i(s,document.activeElement,!0);function d(e){if(!l.value||!s)return;let t=e.target||document.body;s.contains(t)||(e.preventDefault(),e.stopImmediatePropagation(),i(s,t))}function f(e){if(!l.value||!s)return;(!e.relatedTarget||e.relatedTarget===document.body)&&(e.preventDefault(),s.focus());let t=e.target||document.body;s.contains(t)||i(s,t)}if(u.addEventListener(`focusin`,d,{capture:!0}),u.addEventListener(`focusout`,f,{capture:!0}),s){let e=n(s),t=e.findIndex(e=>e.classList.contains(`is-active`)),r=e.findIndex(e=>!e.hasAttribute(`aria-disabled`)),i=e[0];t>-1&&(i=e[t]),r>-1&&(i=e[r]),i&&i.focus()}o(()=>{u.removeEventListener(`focusin`,d),u.removeEventListener(`focusout`,f)})},{immediate:!0}),f(()=>a,()=>{let r=e(t);if(l.value=!a,a||!r)return;let i=n(r);i.includes(document.activeElement)||i[0]?.focus()},{immediate:!0})}function O(e){let t=u(null);c(()=>t.value=r.subscribe(e)),l(()=>t.value?.())}function k(e,{cycle:t=!0,direction:r=`bidirectional`}={}){h(e,()=>a(i(),!1));function i(){let t=n(m(e)),r=t.findIndex(e=>e.classList.contains(`is-active`)),i=t.findIndex(e=>!e.hasAttribute(`aria-disabled`));return r>-1?r:i>-1?i:0}function a(t,r=!0){let i=n(m(e));i.forEach((e,n)=>e.tabIndex=n===t?0:-1),r&&i[t]?.focus()}function o(i){let o=m(e),s=n(o);if(![`Enter`,` `].includes(i.key))switch(r){case`bidirectional`:A(i,o,s,a);break;case`horizontal`:case`vertical`:j(i,o,t,r,s,a);break}}f(e,(t,n,r)=>{let s=m(e);s&&(s.addEventListener(`keydown`,o),a(i(),!1),r(()=>s.removeEventListener(`keydown`,o)))},{immediate:!0})}function A(e,n,r,i){let a;switch(e.key){case`ArrowUp`:a=`up`;break;case`ArrowDown`:a=`down`;break;case`ArrowLeft`:a=`left`;break;case`ArrowRight`:a=`right`;break;default:return}let o=t(n,document.activeElement,a);o&&i(r.indexOf(o)),e.preventDefault()}function j(e,t,n,r,i,o){let s;if(e.key===(r===`horizontal`?`ArrowLeft`:`ArrowUp`))s=-1;else if(e.key===(r===`horizontal`?`ArrowRight`:`ArrowDown`))s=1;else return;let c=a(t,s);c?o(i.indexOf(c)):n&&o(s===1?0:i.length-1),e.preventDefault()}export{T as a,x as c,v as d,_ as f,E as i,b as l,O as n,C as o,g as p,D as r,S as s,k as t,y as u};\n//# sourceMappingURL=composable-CJXC7sly.js.map","const e=`#f8fafc`,t=`#f1f5f9`,n=`#e2e8f0`,r=`#cbd5e1`,i=`#94a3b8`,a=`#64748b`,o=`#475569`,s=`#334155`,c=`#1e293b`,l=`#0f172a`,u=`#020617`,d=`#f9fafb`,f=`#f3f4f6`,p=`#e5e7eb`,m=`#d1d5db`,h=`#9ca3af`,g=`#6b7280`,_=`#4b5563`,v=`#374151`,y=`#1f2937`,b=`#111827`,x=`#030712`,S=`#fafafa`,C=`#f4f4f5`,w=`#e4e4e7`,T=`#d4d4d8`,E=`#a1a1aa`,D=`#71717a`,O=`#52525b`,k=`#3f3f46`,A=`#27272a`,j=`#18181b`,M=`#09090b`,N=`#fafafa`,P=`#f5f5f5`,F=`#e5e5e5`,I=`#d4d4d4`,L=`#a3a3a3`,R=`#737373`,z=`#525252`,B=`#404040`,V=`#262626`,H=`#171717`,U=`#0a0a0a`,W=`#fafaf9`,G=`#f5f5f4`,K=`#e7e5e4`,q=`#d6d3d1`,J=`#a8a29e`,Y=`#78716c`,X=`#57534e`,Z=`#44403c`,Q=`#292524`,$=`#1c1917`,ee=`#0c0a09`,te=`#fef2f2`,ne=`#fee2e2`,re=`#fecaca`,ie=`#fca5a5`,ae=`#f87171`,oe=`#ef4444`,se=`#dc2626`,ce=`#b91c1c`,le=`#991b1b`,ue=`#7f1d1d`,de=`#450a0a`,fe=`#fff7ed`,pe=`#ffedd5`,me=`#fed7aa`,he=`#fdba74`,ge=`#fb923c`,_e=`#f97316`,ve=`#ea580c`,ye=`#c2410c`,be=`#9a3412`,xe=`#7c2d12`,Se=`#431407`,Ce=`#fffbeb`,we=`#fef3c7`,Te=`#fde68a`,Ee=`#fcd34d`,De=`#fbbf24`,Oe=`#f59e0b`,ke=`#d97706`,Ae=`#b45309`,je=`#92400e`,Me=`#78350f`,Ne=`#451a03`,Pe=`#fefce8`,Fe=`#fef9c3`,Ie=`#fef08a`,Le=`#fde047`,Re=`#facc15`,ze=`#eab308`,Be=`#ca8a04`,Ve=`#a16207`,He=`#854d0e`,Ue=`#713f12`,We=`#422006`,Ge=`#f7fee7`,Ke=`#ecfccb`,qe=`#d9f99d`,Je=`#bef264`,Ye=`#a3e635`,Xe=`#84cc16`,Ze=`#65a30d`,Qe=`#4d7c0f`,$e=`#3f6212`,et=`#365314`,tt=`#1a2e05`,nt=`#f0fdf4`,rt=`#dcfce7`,it=`#bbf7d0`,at=`#86efac`,ot=`#4ade80`,st=`#22c55e`,ct=`#16a34a`,lt=`#15803d`,ut=`#166534`,dt=`#14532d`,ft=`#052e16`,pt=`#ecfdf5`,mt=`#d1fae5`,ht=`#a7f3d0`,gt=`#6ee7b7`,_t=`#34d399`,vt=`#10b981`,yt=`#059669`,bt=`#047857`,xt=`#065f46`,St=`#064e3b`,Ct=`#022c22`,wt=`#f0fdfa`,Tt=`#ccfbf1`,Et=`#99f6e4`,Dt=`#5eead4`,Ot=`#2dd4bf`,kt=`#14b8a6`,At=`#0d9488`,jt=`#0f766e`,Mt=`#115e59`,Nt=`#134e4a`,Pt=`#042f2e`,Ft=`#ecfeff`,It=`#cffafe`,Lt=`#a5f3fc`,Rt=`#67e8f9`,zt=`#22d3ee`,Bt=`#06b6d4`,Vt=`#0891b2`,Ht=`#0e7490`,Ut=`#155e75`,Wt=`#164e63`,Gt=`#083344`,Kt=`#f0f9ff`,qt=`#e0f2fe`,Jt=`#bae6fd`,Yt=`#7dd3fc`,Xt=`#38bdf8`,Zt=`#0ea5e9`,Qt=`#0284c7`,$t=`#0369a1`,en=`#075985`,tn=`#0c4a6e`,nn=`#082f49`,rn=`#eff6ff`,an=`#dbeafe`,on=`#bfdbfe`,sn=`#93c5fd`,cn=`#60a5fa`,ln=`#3b82f6`,un=`#2563eb`,dn=`#1d4ed8`,fn=`#1e40af`,pn=`#1e3a8a`,mn=`#172554`,hn=`#eef2ff`,gn=`#e0e7ff`,_n=`#c7d2fe`,vn=`#a5b4fc`,yn=`#818cf8`,bn=`#6366f1`,xn=`#4f46e5`,Sn=`#4338ca`,Cn=`#3730a3`,wn=`#312e81`,Tn=`#1e1b4b`,En=`#f5f3ff`,Dn=`#ede9fe`,On=`#ddd6fe`,kn=`#c4b5fd`,An=`#a78bfa`,jn=`#8b5cf6`,Mn=`#7c3aed`,Nn=`#6d28d9`,Pn=`#5b21b6`,Fn=`#4c1d95`,In=`#2e1065`,Ln=`#faf5ff`,Rn=`#f3e8ff`,zn=`#e9d5ff`,Bn=`#d8b4fe`,Vn=`#c084fc`,Hn=`#a855f7`,Un=`#9333ea`,Wn=`#7e22ce`,Gn=`#6b21a8`,Kn=`#581c87`,qn=`#3b0764`,Jn=`#fdf4ff`,Yn=`#fae8ff`,Xn=`#f5d0fe`,Zn=`#f0abfc`,Qn=`#e879f9`,$n=`#d946ef`,er=`#c026d3`,tr=`#a21caf`,nr=`#86198f`,rr=`#701a75`,ir=`#4a044e`,ar=`#fdf2f8`,or=`#fce7f3`,sr=`#fbcfe8`,cr=`#f9a8d4`,lr=`#f472b6`,ur=`#ec4899`,dr=`#db2777`,fr=`#be185d`,pr=`#9d174d`,mr=`#831843`,hr=`#500724`,gr=`#fff1f2`,_r=`#ffe4e6`,vr=`#fecdd3`,yr=`#fda4af`,br=`#fb7185`,xr=`#f43f5e`,Sr=`#e11d48`,Cr=`#be123c`,wr=`#9f1239`,Tr=`#881337`,Er=`#4c0519`;export{we as amber100,Te as amber200,Ee as amber300,De as amber400,Ce as amber50,Oe as amber500,ke as amber600,Ae as amber700,je as amber800,Me as amber900,Ne as amber950,an as blue100,on as blue200,sn as blue300,cn as blue400,rn as blue50,ln as blue500,un as blue600,dn as blue700,fn as blue800,pn as blue900,mn as blue950,It as cyan100,Lt as cyan200,Rt as cyan300,zt as cyan400,Ft as cyan50,Bt as cyan500,Vt as cyan600,Ht as cyan700,Ut as cyan800,Wt as cyan900,Gt as cyan950,mt as emerald100,ht as emerald200,gt as emerald300,_t as emerald400,pt as emerald50,vt as emerald500,yt as emerald600,bt as emerald700,xt as emerald800,St as emerald900,Ct as emerald950,Yn as fuchsia100,Xn as fuchsia200,Zn as fuchsia300,Qn as fuchsia400,Jn as fuchsia50,$n as fuchsia500,er as fuchsia600,tr as fuchsia700,nr as fuchsia800,rr as fuchsia900,ir as fuchsia950,f as gray100,p as gray200,m as gray300,h as gray400,d as gray50,g as gray500,_ as gray600,v as gray700,y as gray800,b as gray900,x as gray950,rt as green100,it as green200,at as green300,ot as green400,nt as green50,st as green500,ct as green600,lt as green700,ut as green800,dt as green900,ft as green950,gn as indigo100,_n as indigo200,vn as indigo300,yn as indigo400,hn as indigo50,bn as indigo500,xn as indigo600,Sn as indigo700,Cn as indigo800,wn as indigo900,Tn as indigo950,Ke as lime100,qe as lime200,Je as lime300,Ye as lime400,Ge as lime50,Xe as lime500,Ze as lime600,Qe as lime700,$e as lime800,et as lime900,tt as lime950,P as neutral100,F as neutral200,I as neutral300,L as neutral400,N as neutral50,R as neutral500,z as neutral600,B as neutral700,V as neutral800,H as neutral900,U as neutral950,pe as orange100,me as orange200,he as orange300,ge as orange400,fe as orange50,_e as orange500,ve as orange600,ye as orange700,be as orange800,xe as orange900,Se as orange950,or as pink100,sr as pink200,cr as pink300,lr as pink400,ar as pink50,ur as pink500,dr as pink600,fr as pink700,pr as pink800,mr as pink900,hr as pink950,Rn as purple100,zn as purple200,Bn as purple300,Vn as purple400,Ln as purple50,Hn as purple500,Un as purple600,Wn as purple700,Gn as purple800,Kn as purple900,qn as purple950,ne as red100,re as red200,ie as red300,ae as red400,te as red50,oe as red500,se as red600,ce as red700,le as red800,ue as red900,de as red950,_r as rose100,vr as rose200,yr as rose300,br as rose400,gr as rose50,xr as rose500,Sr as rose600,Cr as rose700,wr as rose800,Tr as rose900,Er as rose950,qt as sky100,Jt as sky200,Yt as sky300,Xt as sky400,Kt as sky50,Zt as sky500,Qt as sky600,$t as sky700,en as sky800,tn as sky900,nn as sky950,t as slate100,n as slate200,r as slate300,i as slate400,e as slate50,a as slate500,o as slate600,s as slate700,c as slate800,l as slate900,u as slate950,G as stone100,K as stone200,q as stone300,J as stone400,W as stone50,Y as stone500,X as stone600,Z as stone700,Q as stone800,$ as stone900,ee as stone950,Tt as teal100,Et as teal200,Dt as teal300,Ot as teal400,wt as teal50,kt as teal500,At as teal600,jt as teal700,Mt as teal800,Nt as teal900,Pt as teal950,Dn as violet100,On as violet200,kn as violet300,An as violet400,En as violet50,jn as violet500,Mn as violet600,Nn as violet700,Pn as violet800,Fn as violet900,In as violet950,Fe as yellow100,Ie as yellow200,Le as yellow300,Re as yellow400,Pe as yellow50,ze as yellow500,Be as yellow600,Ve as yellow700,He as yellow800,Ue as yellow900,We as yellow950,C as zinc100,w as zinc200,T as zinc300,E as zinc400,S as zinc50,D as zinc500,O as zinc600,k as zinc700,A as zinc800,j as zinc900,M as zinc950};\n//# sourceMappingURL=index.js.map","import{o as e}from\"./util-CwaOsSvo.js\";var t=class{#e;#t;constructor(e){this.#t=[],this.#e=e,this.onKeyDown=this.onKeyDown.bind(this)}focusElement(e,t=!0){if(this.#t[e]){for(let t=0;t<this.#t.length;++t)this.#t[t].tabIndex=t===e?0:-1;t&&this.#t[e]?.focus()}}register(){this.#t=e(this.#e),this.#e.addEventListener(`keydown`,this.onKeyDown),this.focusElement(0,!1)}unregister(){this.#e.removeEventListener(`keydown`,this.onKeyDown)}onKeyDown(e){let t=this.#e.querySelector(`[tabindex=\"0\"]`),n=this.#t.findIndex(e=>e===t)??0;switch(e.key){case`ArrowUp`:case`ArrowLeft`:this.focusElement(n-1);break;case`ArrowDown`:case`ArrowRight`:this.focusElement(n+1);break;default:return}e.preventDefault(),e.stopPropagation()}},n={beforeUnmount(e){r.get(e)?.unregister(),r.delete(e)},mounted(e){let n=new t(e);n.register(),r.set(e,n)},getSSRProps(){return{}}};const r=new WeakMap;var i=class{#e;#t;constructor(e){this.#e=e,this.#t=new MutationObserver(this.onMutation.bind(this))}register(){this.#t.observe(this.#e,{childList:!0,subtree:!0}),requestAnimationFrame(this.onMutation.bind(this))}unregister(){this.#t.disconnect()}onMutation(){let{height:e}=getComputedStyle(this.#e);this.#e.style.height=`auto`;let{height:t}=getComputedStyle(this.#e);this.#e.style.height=e,t!==e&&(getComputedStyle(this.#e),requestAnimationFrame(()=>this.#e.style.height=t))}},a={beforeUnmount(e){o.get(e)?.unregister(),o.delete(e)},mounted(e){let t=new i(e);t.register(),o.set(e,t)},getSSRProps(){return{}}};const o=new WeakMap;export{n,a as t};\n//# sourceMappingURL=directive-Dprka-AO.js.map","import { useClickOutside } from '@basmilius/common';\nimport { unrefTemplateElement } from '@flux-ui/internals';\nimport { type ComponentPublicInstance, nextTick, ref, type Ref, unref, watch } from 'vue';\n\nexport type UseDropdownPopupOptions = {\n readonly anchorRef: Readonly<Ref<ComponentPublicInstance | null | undefined>>;\n readonly popupRef: Readonly<Ref<ComponentPublicInstance | null | undefined>>;\n readonly focusElement: Readonly<Ref<HTMLElement | null | undefined>>;\n readonly disabled?: Readonly<Ref<boolean>>;\n readonly readonly?: Readonly<Ref<boolean>>;\n readonly onOpen?: () => void;\n readonly onClose?: () => void;\n};\n\nexport type UseDropdownPopupReturn = {\n readonly isOpen: Ref<boolean>;\n readonly open: () => void;\n readonly close: () => void;\n readonly toggle: () => void;\n readonly focusAnchor: () => void;\n readonly onKeyDownBase: (evt: KeyboardEvent) => boolean;\n};\n\n/**\n * Shared dropdown-popup infrastructure for select-like components. Manages:\n * - open/close state\n * - click-outside (close when clicking outside popup + anchor)\n * - focus-back-to-anchor on close\n * - focus-the-inner-focus-element on open\n * - Escape/Tab keyboard handling\n */\nexport default function useDropdownPopup(options: UseDropdownPopupOptions): UseDropdownPopupReturn {\n const isOpen = ref(false);\n\n function open(): void {\n if (unref(options.disabled) || unref(options.readonly)) {\n return;\n }\n\n isOpen.value = true;\n }\n\n function close(): void {\n isOpen.value = false;\n }\n\n function toggle(): void {\n if (unref(options.disabled) || unref(options.readonly)) {\n return;\n }\n\n isOpen.value = !unref(isOpen);\n }\n\n function focusAnchor(): void {\n nextTick(() => unrefTemplateElement(options.anchorRef)?.focus());\n }\n\n function onKeyDownBase(evt: KeyboardEvent): boolean {\n if (evt.key === 'Escape' && unref(isOpen)) {\n evt.preventDefault();\n isOpen.value = false;\n focusAnchor();\n return true;\n }\n\n if (evt.key === 'Tab' && unref(isOpen)) {\n isOpen.value = false;\n return true;\n }\n\n return false;\n }\n\n if (typeof window !== 'undefined') {\n useClickOutside([options.anchorRef, options.popupRef], isOpen, () => isOpen.value = false);\n useClickOutside(options.anchorRef, isOpen, () => unref(options.focusElement)?.focus());\n }\n\n watch(isOpen, opened => {\n if (!opened) {\n options.onClose?.();\n return;\n }\n\n nextTick(() => unref(options.focusElement)?.focus());\n\n options.onOpen?.();\n });\n\n return {\n isOpen,\n open,\n close,\n toggle,\n focusAnchor,\n onKeyDownBase\n };\n}\n","import type { FluxFormSelectEntry, FluxFormSelectOption, FluxFormSelectOptions, FluxFormSelectValue } from '@flux-ui/types';\nimport type { Ref } from 'vue';\nimport { computed, unref } from 'vue';\nimport { isFluxFormSelectGroup, isFluxFormSelectOption } from '$flux/data';\n\nexport default function (modelValue: Ref<FluxFormSelectValue>, isMultiple: boolean, options: Ref<FluxFormSelectEntry[]>, searchQuery?: Ref<string>) {\n const values = computed(() => {\n const model = unref(modelValue);\n return Array.isArray(model) ? model : [model];\n });\n\n const groups = computed(() => {\n const groups: FluxFormSelectOptions[] = [];\n const search = unref(searchQuery)?.trim().toLowerCase();\n\n const available = unref(options)\n .filter(o => isFluxFormSelectGroup(o) || (!search || o.label.toLowerCase().includes(search)))\n .filter(o => isFluxFormSelectGroup(o) || !isMultiple || !unref(selected).find(s => s.value === o.value));\n\n if (available.length === 0) {\n return [];\n }\n\n if (!available.find(isFluxFormSelectGroup)) {\n return [[null, available]] as FluxFormSelectOptions[];\n }\n\n for (let i = 0; i < available.length;) {\n const item = available[i];\n\n if (isFluxFormSelectOption(item)) {\n ++i;\n groups.push([null, [item]]);\n continue;\n }\n\n const subItems: FluxFormSelectOption[] = [];\n\n for (++i; i <= available.length; ++i) {\n const subItem = available[i];\n\n if (isFluxFormSelectGroup(subItem) || i === available.length) {\n if (subItems.length > 0) {\n groups.push([item, subItems]);\n }\n\n break;\n }\n\n subItems.push(subItem);\n }\n }\n\n return groups;\n });\n\n const selected = computed(() => unref(values)\n .map(v => unref(options).find(o => isFluxFormSelectOption(o) && o.value === v))\n .filter(isFluxFormSelectOption));\n\n return {\n groups,\n selected,\n values\n };\n}\n","import { getCurrentInstance } from 'vue';\nimport type { FluxTranslate, FluxTranslation } from '$flux/data';\nimport { english } from '$flux/data';\n\nconst fallback: FluxTranslate = (key, params) => {\n if (!(key in english)) {\n return key;\n }\n\n let translation: string = english[key as FluxTranslation];\n\n for (let paramName in params) {\n translation = translation.replaceAll(`{${paramName}}`, params[paramName].toString());\n }\n\n return translation;\n};\n\nexport default () => {\n const instance = getCurrentInstance()?.proxy;\n\n if (!instance || !isVueI18n(instance)) {\n return fallback;\n }\n\n return instance.$t;\n};\n\ntype VueI18n = {\n $t: FluxTranslate;\n}\n\nfunction isVueI18n(obj: object | null): obj is VueI18n {\n return !!obj && '$t' in obj;\n}\n","import type { FluxCommandSource, FluxCommandSourceItem, FluxCommandSubAction } from '@flux-ui/types';\nimport { useDebouncedRef } from '@basmilius/common';\nimport { computed, nextTick, type Ref, ref, unref, watch } from 'vue';\n\nexport type CommandPaletteResultItem = {\n readonly globalIndex: number;\n readonly sourceKey: string;\n readonly sourceLabel: string;\n readonly item: FluxCommandSourceItem;\n};\n\nexport type CommandPaletteGroup = {\n readonly sourceKey: string;\n readonly sourceLabel: string;\n readonly startIndex: number;\n readonly items: CommandPaletteResultItem[];\n};\n\nexport function useCommandPalette(params: {\n readonly sources: Ref<FluxCommandSource[]>;\n readonly itemRefs: Readonly<Ref<Array<{ readonly $el: HTMLElement; }> | null | undefined>>;\n}): {\n readonly search: Ref<string>;\n readonly activeTab: Ref<string | null>;\n readonly highlightedIndex: Ref<number>;\n readonly isLoading: Ref<boolean>;\n readonly isTransitioningBack: Ref<boolean>;\n readonly subActionTarget: Ref<FluxCommandSourceItem | null>;\n readonly filteredItems: Ref<CommandPaletteResultItem[]>;\n readonly groupedItems: Ref<CommandPaletteGroup[]>;\n readonly subActions: Ref<FluxCommandSubAction[]>;\n readonly activeTabSource: Ref<FluxCommandSource | null>;\n readonly tabs: Ref<FluxCommandSource[]>;\n readonly totalItems: Ref<number>;\n setSearch: (value: string) => void;\n setActiveTab: (key: string | null) => void;\n enterSubActions: (item: FluxCommandSourceItem) => void;\n onKeyNavigate: (evt: KeyboardEvent, onClose: () => void, onActivate: (item: FluxCommandSourceItem) => void) => void;\n reset: () => void;\n} {\n const search = ref('');\n const activeTab = ref<string | null>(null);\n const highlightedIndex = ref(-1);\n const subActionTarget = ref<FluxCommandSourceItem | null>(null);\n const isKeyboardNav = ref(false);\n const isLoading = ref(false);\n const isTransitioningBack = ref(false);\n const savedState = ref<{ readonly search: string; readonly highlightedIndex: number; } | null>(null);\n const asyncResults = ref<Map<string, FluxCommandSourceItem[]>>(new Map());\n const debouncedSearch = useDebouncedRef(search, 300) as unknown as Ref<string>;\n let fetchGeneration = 0;\n\n const filteredItems = computed<CommandPaletteResultItem[]>(() => {\n const query = unref(search).toLowerCase().trim();\n const tab = unref(activeTab);\n const sources = unref(params.sources);\n const asyncMap = unref(asyncResults);\n const results: CommandPaletteResultItem[] = [];\n\n for (const source of sources) {\n if (tab && source.key !== tab) {\n continue;\n }\n\n if (source.fetchSearch) {\n const items = query ? asyncMap.get(source.key) : source.items;\n\n if (items) {\n for (const item of items) {\n results.push({\n globalIndex: results.length,\n sourceKey: source.key,\n sourceLabel: source.label,\n item\n });\n }\n }\n\n continue;\n }\n\n for (const item of source.items) {\n if (query && !item.label.toLowerCase().includes(query) && !(item.subLabel?.toLowerCase().includes(query) ?? false)) {\n continue;\n }\n\n results.push({\n globalIndex: results.length,\n sourceKey: source.key,\n sourceLabel: source.label,\n item\n });\n }\n }\n\n return results;\n });\n\n const groupedItems = computed<CommandPaletteGroup[]>(() => {\n const items = unref(filteredItems);\n const groups = new Map<string, CommandPaletteGroup>();\n\n for (const result of items) {\n if (!groups.has(result.sourceKey)) {\n groups.set(result.sourceKey, {\n sourceKey: result.sourceKey,\n sourceLabel: result.sourceLabel,\n startIndex: result.globalIndex,\n items: []\n });\n }\n\n (groups.get(result.sourceKey)!.items as CommandPaletteResultItem[]).push(result);\n }\n\n return Array.from(groups.values());\n });\n\n const tabs = computed(() => unref(params.sources).filter(source => source.tab));\n\n const activeTabSource = computed<FluxCommandSource | null>(() => {\n const tab = unref(activeTab);\n\n if (!tab) {\n return null;\n }\n\n return unref(tabs).find(source => source.key === tab) ?? null;\n });\n\n const subActions = computed(() => {\n const actions = unref(subActionTarget)?.subActions ?? [];\n const query = unref(search).toLowerCase().trim();\n\n if (!query) {\n return actions;\n }\n\n return actions.filter(action => action.label.toLowerCase().includes(query));\n });\n\n const totalItems = computed(() => {\n if (unref(subActionTarget)) {\n return unref(subActions).length;\n }\n\n return unref(filteredItems).length;\n });\n\n function setSearch(value: string): void {\n search.value = value;\n highlightedIndex.value = value.trim() ? 0 : -1;\n\n if (value.trim() && !unref(subActionTarget) && unref(params.sources).some(s => s.fetchSearch)) {\n isLoading.value = true;\n } else {\n isLoading.value = false;\n }\n }\n\n function setActiveTab(key: string | null): void {\n const allTabs = unref(tabs);\n const tabKeys: (string | null)[] = [null, ...allTabs.map(t => t.key)];\n\n isTransitioningBack.value = tabKeys.indexOf(key) < tabKeys.indexOf(unref(activeTab));\n activeTab.value = key;\n search.value = '';\n highlightedIndex.value = -1;\n subActionTarget.value = null;\n }\n\n function selectHighlighted(onClose: () => void, onActivate: (item: FluxCommandSourceItem) => void): void {\n const index = unref(highlightedIndex);\n const target = unref(subActionTarget);\n\n if (target) {\n const action = unref(subActions)[index];\n\n if (action) {\n action.onActivate();\n onClose();\n }\n\n return;\n }\n\n const result = unref(filteredItems)[index];\n\n if (!result) {\n return;\n }\n\n if (result.item.subActions?.length) {\n enterSubActions(result.item);\n } else {\n result.item.onActivate();\n onActivate(result.item);\n }\n }\n\n function enterSubActions(item: FluxCommandSourceItem): void {\n savedState.value = {search: unref(search), highlightedIndex: unref(highlightedIndex)};\n subActionTarget.value = item;\n search.value = '';\n highlightedIndex.value = 0;\n }\n\n function navigateTab(direction: number): void {\n const allTabs = unref(tabs);\n\n if (allTabs.length === 0) {\n return;\n }\n\n const tabKeys: (string | null)[] = [null, ...allTabs.map(tab => tab.key)];\n const currentIndex = tabKeys.indexOf(unref(activeTab));\n const nextIndex = (currentIndex + direction + tabKeys.length) % tabKeys.length;\n\n setActiveTab(tabKeys[nextIndex]);\n }\n\n function restoreState(): void {\n subActionTarget.value = null;\n const state = unref(savedState);\n\n if (state) {\n search.value = state.search;\n isKeyboardNav.value = true;\n highlightedIndex.value = state.highlightedIndex;\n savedState.value = null;\n } else {\n highlightedIndex.value = -1;\n }\n }\n\n function onKeyNavigate(evt: KeyboardEvent, onClose: () => void, onActivate: (item: FluxCommandSourceItem) => void): void {\n const total = unref(totalItems);\n const current = unref(highlightedIndex);\n\n switch (evt.key) {\n case 'ArrowDown':\n evt.preventDefault();\n isKeyboardNav.value = true;\n highlightedIndex.value = Math.min(total - 1, current + 1);\n break;\n\n case 'ArrowUp':\n evt.preventDefault();\n isKeyboardNav.value = true;\n highlightedIndex.value = total === 0 ? -1 : Math.max(0, current - 1);\n break;\n\n case 'ArrowLeft':\n if (!unref(search) && !unref(subActionTarget)) {\n evt.preventDefault();\n navigateTab(-1);\n }\n\n break;\n\n case 'ArrowRight':\n if (!unref(search) && !unref(subActionTarget)) {\n evt.preventDefault();\n navigateTab(1);\n }\n\n break;\n\n case 'Enter':\n evt.preventDefault();\n selectHighlighted(onClose, onActivate);\n break;\n\n case 'Escape':\n evt.preventDefault();\n\n if (unref(subActionTarget)) {\n restoreState();\n } else {\n onClose();\n }\n\n break;\n\n case 'Backspace':\n if (!unref(search)) {\n if (unref(subActionTarget)) {\n evt.preventDefault();\n restoreState();\n } else if (unref(activeTab)) {\n evt.preventDefault();\n activeTab.value = null;\n highlightedIndex.value = -1;\n }\n }\n\n break;\n }\n }\n\n function reset(): void {\n search.value = '';\n activeTab.value = null;\n highlightedIndex.value = -1;\n subActionTarget.value = null;\n asyncResults.value = new Map();\n isLoading.value = false;\n fetchGeneration++;\n }\n\n watch(debouncedSearch, async (query) => {\n if (unref(subActionTarget)) {\n return;\n }\n\n const trimmed = query.trim();\n\n if (!trimmed) {\n asyncResults.value = new Map();\n isLoading.value = false;\n return;\n }\n\n const tab = unref(activeTab);\n const sources = unref(params.sources);\n const asyncSources = sources.filter(s => {\n if (!s.fetchSearch) {\n return false;\n }\n\n return !tab || s.key === tab;\n });\n\n if (asyncSources.length === 0) {\n isLoading.value = false;\n return;\n }\n\n const generation = ++fetchGeneration;\n isLoading.value = true;\n\n try {\n const fetched = await Promise.all(\n asyncSources.map(async (source) => ({\n key: source.key,\n items: await source.fetchSearch!(trimmed)\n }))\n );\n\n if (generation !== fetchGeneration) {\n return;\n }\n\n const map = new Map<string, FluxCommandSourceItem[]>();\n\n for (const {key, items} of fetched) {\n map.set(key, items);\n }\n\n asyncResults.value = map;\n } finally {\n if (generation === fetchGeneration) {\n isLoading.value = false;\n }\n }\n });\n\n watch(highlightedIndex, (index) => {\n if (index < 0 || !unref(isKeyboardNav)) {\n return;\n }\n\n isKeyboardNav.value = false;\n\n nextTick(() => unref(params.itemRefs)?.[index]?.$el?.scrollIntoView({block: 'nearest'}));\n });\n\n watch(totalItems, (total) => {\n const current = unref(highlightedIndex);\n\n if (current >= total) {\n highlightedIndex.value = Math.max(-1, total - 1);\n }\n });\n\n return {\n search,\n activeTab,\n activeTabSource,\n highlightedIndex,\n isLoading,\n isTransitioningBack,\n subActionTarget,\n filteredItems,\n groupedItems,\n subActions,\n tabs,\n totalItems,\n setSearch,\n setActiveTab,\n enterSubActions,\n onKeyNavigate,\n reset\n };\n}\n","import type { FluxFilterValue, FluxFilterValueSingle } from '@flux-ui/types';\nimport { type ComputedRef, computed, unref } from 'vue';\nimport { useFilterInjection } from '$flux/composable';\n\nexport type FilterOptionSingle = {\n readonly currentValue: ComputedRef<FluxFilterValueSingle>;\n onSelect(value: FluxFilterValue): void;\n};\n\nexport type FilterOptionMulti = {\n readonly currentValue: ComputedRef<FluxFilterValueSingle[]>;\n onSelect(value: FluxFilterValueSingle): void;\n};\n\nexport function useFilterOptionSingle(name: string): FilterOptionSingle {\n const {back, state, setValue} = useFilterInjection();\n\n const currentValue = computed(() => unref(state)[name] as FluxFilterValueSingle);\n\n function onSelect(value: FluxFilterValue): void {\n if (unref(currentValue) === value) {\n setValue(name, null);\n } else {\n setValue(name, value);\n }\n\n back();\n }\n\n return {currentValue, onSelect};\n}\n\nexport function useFilterOptionMulti(name: string): FilterOptionMulti {\n const {state, setValue} = useFilterInjection();\n\n const currentValue = computed<FluxFilterValueSingle[]>(() => {\n const value = unref(state)[name];\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return [];\n });\n\n function onSelect(value: FluxFilterValueSingle): void {\n let values = Array.from(unref(currentValue));\n\n if (values.includes(value)) {\n values = values.filter(v => v !== value);\n } else {\n values.push(value);\n }\n\n setValue(name, values);\n }\n\n return {currentValue, onSelect};\n}\n","import type { FluxColor, FluxIconName } from '@flux-ui/types';\nimport { type ComputedRef, nextTick, ref, type Ref, unref, watch } from 'vue';\n\nexport type TreeBaseOption = {\n readonly id: string | number;\n readonly label: string;\n readonly icon?: FluxIconName;\n readonly children?: TreeBaseOption[];\n};\n\nexport type TreeFlatNode<TOption extends TreeBaseOption = TreeBaseOption> = TOption & {\n readonly depth: number;\n readonly isLast: boolean;\n readonly lineGuides: boolean[];\n};\n\nexport const FLUX_COLORS: FluxColor[] = ['gray', 'primary', 'danger', 'info', 'success', 'warning'];\nexport const INITIAL_HIGHLIGHTED_INDEX = -1;\n\nexport function flattenVisible<TOption extends TreeBaseOption>(\n nodes: TOption[],\n depth: number,\n expanded: Set<string | number>,\n parentGuides: boolean[] = []\n): TreeFlatNode<TOption>[] {\n return nodes.flatMap((node, index) => {\n const isLast = index === nodes.length - 1;\n const flatNode = {...node, depth, isLast, lineGuides: parentGuides} as TreeFlatNode<TOption>;\n\n if (node.children?.length && expanded.has(node.id)) {\n const childGuides = [...parentGuides, !isLast];\n return [flatNode, ...flattenVisible(node.children as TOption[], depth + 1, expanded, childGuides)];\n }\n\n return [flatNode];\n });\n}\n\nexport function flattenAll<TOption extends TreeBaseOption>(\n nodes: TOption[],\n depth = 0\n): TreeFlatNode<TOption>[] {\n return nodes.flatMap(node => [\n {...node, depth, isLast: false, lineGuides: [] as boolean[]} as TreeFlatNode<TOption>,\n ...(node.children ? flattenAll(node.children as TOption[], depth + 1) : [])\n ]);\n}\n\nexport function getLevelColor(depth: number, levelColors?: (FluxColor | string)[]): string | undefined {\n if (!levelColors || depth >= levelColors.length) {\n return undefined;\n }\n\n const color = levelColors[depth];\n\n if (FLUX_COLORS.includes(color as FluxColor)) {\n return `var(--${color}-600)`;\n }\n\n return color;\n}\n\nexport function useTreeView<TNode extends TreeFlatNode>(params: {\n readonly expandedIds: Ref<Set<string | number>>;\n readonly nodeElementRefs: Readonly<Ref<HTMLDivElement[] | null | undefined>>;\n readonly visibleNodes: ComputedRef<TNode[]>;\n}): {\n readonly highlightedIndex: Ref<number>;\n toggleExpand: (nodeId: string | number) => void;\n onExpandClick: (node: TNode, evt: MouseEvent) => void;\n onKeyNavigate: (evt: KeyboardEvent, onActivate: (node: TNode) => void) => boolean;\n} {\n const highlightedIndex = ref(INITIAL_HIGHLIGHTED_INDEX);\n\n function toggleExpand(nodeId: string | number): void {\n const ids = new Set(unref(params.expandedIds));\n\n if (ids.has(nodeId)) {\n ids.delete(nodeId);\n } else {\n ids.add(nodeId);\n }\n\n params.expandedIds.value = ids;\n }\n\n function onExpandClick(node: TNode, evt: MouseEvent): void {\n if (!node.children?.length) {\n return;\n }\n\n evt.stopPropagation();\n toggleExpand(node.id);\n }\n\n function onKeyNavigate(evt: KeyboardEvent, onActivate: (node: TNode) => void): boolean {\n const nodes = unref(params.visibleNodes);\n const current = unref(highlightedIndex);\n\n switch (evt.key) {\n case 'ArrowDown':\n evt.preventDefault();\n highlightedIndex.value = current === INITIAL_HIGHLIGHTED_INDEX\n ? 0\n : Math.min(nodes.length - 1, current + 1);\n return true;\n\n case 'ArrowUp':\n evt.preventDefault();\n highlightedIndex.value = current === INITIAL_HIGHLIGHTED_INDEX\n ? nodes.length - 1\n : Math.max(0, current - 1);\n return true;\n\n case 'ArrowRight':\n evt.preventDefault();\n if (current >= 0) {\n const node = nodes[current];\n if (node.children?.length) {\n if (!unref(params.expandedIds).has(node.id)) {\n toggleExpand(node.id);\n } else if (current + 1 < nodes.length && nodes[current + 1].depth > node.depth) {\n highlightedIndex.value = current + 1;\n }\n }\n }\n return true;\n\n case 'ArrowLeft':\n evt.preventDefault();\n if (current >= 0) {\n const node = nodes[current];\n if (node.children?.length && unref(params.expandedIds).has(node.id)) {\n toggleExpand(node.id);\n } else if (node.depth > 0) {\n for (let i = current - 1; i >= 0; i--) {\n if (nodes[i].depth === node.depth - 1) {\n highlightedIndex.value = i;\n break;\n }\n }\n }\n }\n return true;\n\n case 'Enter':\n case ' ':\n evt.preventDefault();\n if (current >= 0) {\n onActivate(nodes[current]);\n }\n return true;\n\n default:\n if (evt.key.length === 1) {\n const lowerKey = evt.key.toLowerCase();\n let matchIndex = nodes.findIndex((n, i) => i > current && n.label.toLowerCase().startsWith(lowerKey));\n if (matchIndex < 0) {\n matchIndex = nodes.findIndex(n => n.label.toLowerCase().startsWith(lowerKey));\n }\n if (matchIndex >= 0) {\n highlightedIndex.value = matchIndex;\n return true;\n }\n }\n return false;\n }\n }\n\n watch(highlightedIndex, index => {\n if (index < 0) {\n return;\n }\n\n nextTick(() => unref(params.nodeElementRefs)?.[index]?.scrollIntoView({block: 'nearest'}));\n });\n\n watch(params.visibleNodes, nodes => {\n const current = unref(highlightedIndex);\n if (current >= nodes.length) {\n highlightedIndex.value = Math.max(INITIAL_HIGHLIGHTED_INDEX, nodes.length - 1);\n }\n });\n\n return {highlightedIndex, toggleExpand, onExpandClick, onKeyNavigate};\n}\n",".overlayView {\n position: fixed;\n inset: 0;\n height: 100dvh;\n width: 100dvw;\n}\n\n.overlayProvider {\n composes: overlayView;\n\n pointer-events: none;\n z-index: 10000;\n}\n\n.overlayShade {\n composes: overlayView;\n\n background: var(--overlay);\n backdrop-filter: blur(3px) saturate(180%);\n pointer-events: none;\n transition: opacity 600ms var(--swift-out);\n}\n\n.overlayProvider:not(:has(.overlay:not(.overlayTransitionLeaveActive):not(.slideOverTransitionLeaveActive))) .overlayShade {\n opacity: 0;\n}\n\n.overlay {\n position: fixed;\n display: flex;\n inset: 0;\n height: 100dvh;\n width: 100dvw;\n outline: 0;\n\n > .basePaneStructure {\n display: flex;\n margin: auto;\n max-height: min(840px, 100dvh - 180px);\n width: calc(100dvw - 90px);\n flex-flow: column nowrap;\n box-shadow: var(--shadow-lg);\n overflow: auto;\n transition: 420ms var(--swift-out);\n transition-property: filter, scale;\n\n .paneFooter {\n position: sticky;\n bottom: 0;\n margin-top: auto;\n }\n\n &::after {\n position: absolute;\n display: block;\n inset: 0;\n content: '';\n background: var(--overlay-secondary);\n opacity: 0;\n pointer-events: none;\n transition: opacity 420ms var(--swift-out);\n z-index: 1;\n }\n }\n\n &.isCurrent > .basePaneStructure {\n pointer-events: auto;\n }\n\n &:not(.isCurrent) > .basePaneStructure {\n filter: blur(3px);\n scale: .95;\n\n &::after {\n opacity: 1;\n }\n }\n}\n\n.overlaySmall {\n composes: overlay;\n\n > .basePaneStructure {\n max-width: 420px;\n }\n}\n\n.overlayMedium {\n composes: overlay;\n\n > .basePaneStructure {\n max-width: 540px;\n }\n}\n\n.overlayLarge {\n composes: overlay;\n\n > .basePaneStructure {\n max-width: 720px;\n }\n}\n\n.slideOver {\n composes: overlay;\n\n justify-content: flex-end;\n\n > .basePaneStructure {\n margin: 9px;\n max-height: calc(100% - 18px);\n width: min(100dvw, 720px);\n contain: paint;\n overflow: auto;\n\n > .paneHeader,\n > .paneFooter {\n position: sticky;\n z-index: 100;\n }\n\n > .paneHeader {\n top: 0;\n padding-bottom: 18px;\n border-bottom: 1px solid var(--gray-100);\n box-shadow: var(--shadow-xs);\n\n &:has(+ :where(.tabs, .tabBar)) {\n padding-bottom: 0;\n border-bottom: 0;\n box-shadow: none;\n }\n\n &:not(:has(+ :where(.tabs, .tabBar))) {\n background: inherit;\n }\n }\n\n > .paneHeader + .tabBar {\n position: sticky;\n top: 45px;\n z-index: 100;\n }\n\n > .paneHeader:has(.paneHeaderCaption > :is(span)) + .tabBar {\n top: 66px;\n }\n\n > .paneFooter {\n bottom: 0;\n }\n }\n}\n\n.overlayTransitionEnterActive,\n.overlayTransitionLeaveActive {\n transition: opacity 420ms var(--swift-out);\n\n > .basePaneStructure {\n transition: 420ms var(--swift-out);\n transition-property: opacity, scale;\n }\n}\n\n.overlayTransitionEnterFrom {\n opacity: 0;\n\n > .basePaneStructure {\n opacity: 0;\n scale: .9;\n }\n}\n\n.overlayTransitionLeaveTo {\n opacity: 0;\n\n > .basePaneStructure {\n opacity: 0;\n scale: .95;\n }\n}\n\n.slideOverTransitionEnterActive,\n.slideOverTransitionLeaveActive {\n transition: opacity 600ms var(--swift-out);\n\n > .basePaneStructure {\n transition: 600ms var(--swift-out);\n transition-property: opacity, transform;\n }\n}\n\n.slideOverTransitionEnterFrom,\n.slideOverTransitionLeaveTo {\n opacity: 0;\n transition-delay: 210ms;\n\n > .basePaneStructure {\n transform: translate3d(100%, 0, 0);\n }\n}\n","import { flattenVNodeTree, useFocusTrap } from '@flux-ui/internals';\nimport type { Component, RenderFunction, SetupContext, Slots, VNode } from 'vue';\nimport { Comment, h, onUnmounted, ref, Teleport, watch } from 'vue';\nimport { registerDialog, useFluxStore } from '$flux/data';\nimport $style from '$flux/css/component/Overlay.module.scss';\n\ntype Emit = SetupContext<['close']>['emit'];\ntype Props = {\n readonly isCloseable?: boolean;\n readonly viewKey?: string;\n};\n\nconst TARGET_SELECTOR = `.${$style.overlayProvider.replaceAll(' ', '.')}`;\nlet DIALOG_ID = 0;\n\nexport default function (attrs: object, props: Props, emit: Emit, slots: Slots, className: string, transition: Component): RenderFunction {\n const dialogId = `flux-dialog:${DIALOG_ID++}`;\n let unregister: Function | null = null;\n let zIndex = 0;\n\n const dialogRef = ref<HTMLElement>();\n\n useFocusTrap(dialogRef);\n\n onUnmounted(() => {\n unregister?.();\n });\n\n watch(dialogRef, (dialog, _, onCleanup) => {\n if (!dialog) {\n return;\n }\n\n dialog.addEventListener('keydown', onKeyDown, {passive: true});\n dialog.focus();\n\n onCleanup(() => {\n dialog.removeEventListener('keydown', onKeyDown);\n });\n });\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (evt.key !== 'Escape' || !unregister || !props.isCloseable) {\n return;\n }\n\n emit('close');\n }\n\n return () => {\n const {dialogCount} = useFluxStore();\n\n const children = flattenVNodeTree(slots.default?.() ?? []);\n const isVisible = children.length > 0 && children.some(child => child.type !== Comment);\n let content: VNode | undefined;\n\n if (isVisible) {\n if (!unregister) {\n [zIndex, unregister] = registerDialog();\n }\n\n content = h('div', {\n key: props.viewKey ?? dialogId,\n ref: dialogRef,\n class: [className, zIndex === dialogCount && $style.isCurrent],\n style: {\n zIndex: zIndex + 1000\n },\n tabindex: 0\n }, children);\n } else {\n unregister?.();\n unregister = null;\n }\n\n return h(Teleport, {defer: true, disabled: !content, to: TARGET_SELECTOR}, [\n h(transition, attrs, {\n default: () => content\n })\n ]);\n };\n}\n","import type { DateTime } from 'luxon';\nimport { useTranslate } from '$flux/composable/private';\n\nexport default function (start: DateTime, end: DateTime, preventCustom: boolean = false): string {\n const translate = useTranslate();\n\n if (start.day === end.day && start.month === end.month && start.year === end.year) {\n return start.toLocaleString({\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n }\n\n if (start.month === end.month && start.year === end.year) {\n const startStr = start.toLocaleString({\n day: 'numeric'\n });\n\n const endStr = end.toLocaleString({\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n\n return `${startStr} – ${endStr}`;\n }\n\n if (start.year === end.year) {\n const startStr = start.toLocaleString({\n day: 'numeric',\n month: 'short'\n });\n\n const endStr = end.toLocaleString({\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n\n return `${startStr} – ${endStr}`;\n }\n\n if (preventCustom) {\n const startStr = start.toLocaleString({\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n\n const endStr = end.toLocaleString({\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n\n return `${startStr} – ${endStr}`;\n }\n\n return translate('flux.customPeriod');\n}\n","import { formatNumber } from '@basmilius/utils';\nimport type { FluxFilterDateEntry, FluxFilterDateRangeEntry, FluxFilterDateRangeSpec, FluxFilterDateSpec, FluxFilterEntryMap, FluxFilterOptionAsyncSpec, FluxFilterOptionEntry, FluxFilterOptionHeader, FluxFilterOptionItem, FluxFilterOptionSpec, FluxFilterOptionsAsyncSpec, FluxFilterOptionsEntry, FluxFilterOptionsSpec, FluxFilterRangeEntry, FluxFilterRangeSpec, FluxFilterSpecMap, FluxFilterValueSingle } from '@flux-ui/types';\nimport { DateTime } from 'luxon';\nimport { useTranslate } from '$flux/composable/private';\nimport type { FluxTranslate } from '$flux/data';\nimport { createLabelForDateRange } from '$flux/util';\n\nfunction parseDate(base: FluxFilterDateSpec): FluxFilterDateEntry {\n return {\n ...base,\n type: 'date',\n\n async getValueLabel(value): Promise<string | null> {\n if (!DateTime.isDateTime(value)) {\n return null;\n }\n\n return value.toLocaleString({\n day: 'numeric',\n month: 'short',\n year: 'numeric'\n });\n }\n };\n}\n\nfunction parseDateRange(base: FluxFilterDateRangeSpec): FluxFilterDateRangeEntry {\n return {\n ...base,\n type: 'dateRange',\n\n async getValueLabel(value): Promise<string | null> {\n if (!Array.isArray(value) || value.length !== 2) {\n return null;\n }\n\n const [start, end] = value;\n\n if (!DateTime.isDateTime(start) || !DateTime.isDateTime(end)) {\n return null;\n }\n\n return createLabelForDateRange(start, end);\n }\n };\n}\n\nfunction parseOption({options, ...base}: FluxFilterOptionSpec): FluxFilterOptionEntry {\n const items = options.filter(isFluxFilterOptionItem);\n\n return {\n ...base,\n type: 'option',\n\n async getValueLabel(value): Promise<string | null> {\n return items.find(o => o.value === value)?.label ?? null;\n }\n };\n}\n\nfunction parseOptionAsync({fetchOptions, ...base}: FluxFilterOptionAsyncSpec): FluxFilterOptionEntry {\n return {\n ...base,\n type: 'option',\n\n async getValueLabel(value): Promise<string | null> {\n const items = (await fetchOptions([value])).filter(isFluxFilterOptionItem);\n\n return items.find(o => o.value === value)?.label ?? null;\n }\n };\n}\n\nfunction parseOptions({options, ...base}: FluxFilterOptionsSpec): FluxFilterOptionsEntry {\n const items = options.filter(isFluxFilterOptionItem);\n const translate = useTranslate();\n\n return {\n ...base,\n type: 'options',\n\n async getValueLabel(value): Promise<string | null> {\n if (!Array.isArray(value)) {\n return null;\n }\n\n return generateMultiOptionsLabel(translate, items, value);\n }\n };\n}\n\nfunction parseOptionsAsync({fetchOptions, ...base}: FluxFilterOptionsAsyncSpec): FluxFilterOptionsEntry {\n const translate = useTranslate();\n\n return {\n ...base,\n type: 'options',\n\n async getValueLabel(value): Promise<string | null> {\n if (!Array.isArray(value)) {\n return null;\n }\n\n const items = (await fetchOptions(value)).filter(isFluxFilterOptionItem);\n\n return generateMultiOptionsLabel(translate, items, value);\n }\n };\n}\n\nfunction parseRange(base: FluxFilterRangeSpec): FluxFilterRangeEntry {\n return {\n ...base,\n type: 'range',\n\n async getValueLabel(value): Promise<string | null> {\n if (!value || !Array.isArray(value) || value.length !== 2) {\n return null;\n }\n\n const [lower, upper] = value as number[];\n const formatter = base.formatter ?? formatNumber;\n\n return `${formatter(lower!)} – ${formatter(upper!)}`;\n }\n };\n}\n\nfunction generateMultiOptionsLabel(translate: FluxTranslate, options: FluxFilterOptionItem[], values: FluxFilterValueSingle[]): string | null {\n const selected = options.filter(o => values.includes(o.value)).length;\n\n if (selected <= 0) {\n return null;\n }\n\n if (selected === 1) {\n return options.find(o => values.includes(o.value))!.label;\n }\n\n return translate('flux.nSelected', {\n n: selected\n });\n}\n\nexport type FluxFilterParsers = {\n [K in keyof FluxFilterSpecMap]: (spec: FluxFilterSpecMap[K]) => FluxFilterEntryMap[K];\n};\n\nexport const filterParsers: FluxFilterParsers = {\n date: parseDate,\n dateRange: parseDateRange,\n option: parseOption,\n optionAsync: parseOptionAsync,\n options: parseOptions,\n optionsAsync: parseOptionsAsync,\n range: parseRange\n};\n\nexport function isFluxFilterOptionHeader(obj: object): obj is FluxFilterOptionHeader {\n return 'title' in obj;\n}\n\nexport function isFluxFilterOptionItem(obj: object): obj is FluxFilterOptionItem {\n return 'label' in obj && 'value' in obj;\n}\n","import type { FluxFormSelectGroup, FluxFormSelectOption } from '@flux-ui/types';\n\nexport function isFluxFormSelectGroup(item: unknown): item is FluxFormSelectGroup {\n return item !== null && typeof item === 'object' && !('value' in item);\n}\n\nexport function isFluxFormSelectOption(item: unknown): item is FluxFormSelectOption {\n return item !== null && typeof item === 'object' && 'value' in item;\n}\n","export type FluxTranslate = (key: FluxTranslation, params?: Record<string, string | number>) => string;\nexport type FluxTranslation = keyof typeof english;\n\nexport const english = {\n 'flux.back': 'Back',\n 'flux.cancel': 'Cancel',\n 'flux.close': 'Close',\n 'flux.comingSoon': 'Coming soon',\n 'flux.continue': 'Continue',\n 'flux.customPeriod': 'Custom period',\n 'flux.delete': 'Delete',\n 'flux.filter': 'Filter',\n 'flux.filterReset': 'Reset filters',\n 'flux.justNow': 'Just now',\n 'flux.max': 'Max',\n 'flux.min': 'Min',\n 'flux.nSelected': '{n} selected',\n 'flux.ok': 'Ok',\n 'flux.optional': 'Optional',\n 'flux.preview': 'Preview',\n 'flux.previewClose': 'Close preview',\n 'flux.displayingOf': '{from}–{to} of {total}',\n 'flux.showN': 'Show {n}',\n 'flux.next': 'Next',\n 'flux.noItems': 'There are no items (left).',\n 'flux.pagination': 'Pagination',\n 'flux.paginationNavigateTitle': 'Navigate',\n 'flux.paginationNavigateMessage': 'Please provide the desired page number you wish to navigate to.',\n 'flux.paginationNavigatePage': 'Page',\n 'flux.previous': 'Previous',\n 'flux.search': 'Search...',\n 'flux.sort': 'Sort',\n 'flux.sortAscending': 'Ascending',\n 'flux.sortDescending': 'Descending',\n 'flux.sortRemove': 'Remove sorting',\n 'flux.today': 'Today',\n 'flux.selectMonth': 'Select month',\n 'flux.selectYear': 'Select year',\n 'flux.previousMonth': 'Previous month',\n 'flux.nextMonth': 'Next month',\n 'flux.previousYears': 'Previous years',\n 'flux.nextYears': 'Next years',\n 'flux.goToPage': 'Go to page {page}',\n 'flux.pinDigit': 'Digit {index} of {total}',\n 'flux.dropFilesOrClick': 'Drop files here or click to upload',\n 'flux.colorSaturationBrightness': 'Color saturation and brightness',\n 'flux.customColor': 'Custom color',\n 'flux.hue': 'Hue',\n 'flux.opacity': 'Opacity',\n 'flux.lowerBound': 'Lower bound',\n 'flux.upperBound': 'Upper bound',\n 'flux.galleryPlaceholderButton': 'Pick image',\n 'flux.galleryPlaceholderMessage': 'Drop an image here or click the button to upload...',\n 'flux.galleryPlaceholderTitle': 'Gallery',\n 'flux.timezoneEurope': 'Europe',\n 'flux.timezoneAmerica': 'America',\n 'flux.timezoneUs': 'United States',\n 'flux.timezoneAustralia': 'Australia',\n 'flux.timezoneCanada': 'Canada',\n 'flux.timezoneMexico': 'Mexico',\n 'flux.timezoneAfrica': 'Africa',\n 'flux.timezoneAntarctica': 'Antarctica',\n 'flux.timezoneArctic': 'Arctic',\n 'flux.timezoneAsia': 'Asia',\n 'flux.timezoneAtlantic': 'Atlantic',\n 'flux.timezoneBrazil': 'Brazil',\n 'flux.timezoneChile': 'Chile',\n 'flux.timezoneEtc': 'ETC',\n 'flux.timezoneOther': 'Other',\n 'flux.timezoneIndian': 'Indian',\n 'flux.timezonePacific': 'Pacific'\n} as const;\n","import type { FluxIconName } from '@flux-ui/types';\nimport type { IconDefinition, IconPathData } from '@fortawesome/fontawesome-common-types';\n\ntype Icon = [number, number, string[], string, IconPathData];\ntype IconRegistry = Partial<{ [key in FluxIconName]: Icon; }>;\ntype Icons = Record<string, IconDefinition>;\n\nexport let iconRegistry: IconRegistry = {};\n\nexport function fluxRegisterIcons(icons: Icons): void {\n iconRegistry = Object.keys(icons).reduce((acc: IconRegistry, key: string) => {\n if (!icons[key]) {\n return acc;\n }\n\n const {icon, iconName} = icons[key];\n acc[iconName as FluxIconName] = icon;\n\n if (Array.isArray(icon[2])) {\n icon[2].forEach((iconName: string) => acc[iconName as FluxIconName] = icon);\n }\n\n return acc;\n }, {});\n}\n","import type { FluxAlertObject, FluxConfirmObject, FluxPromptObject, FluxSnackbarObject, FluxTooltipObject } from '@flux-ui/types';\nimport type { ComputedRef } from 'vue';\nimport { computed, reactive } from 'vue';\n\nexport type FluxState = {\n dialogCount: number;\n readonly alerts: FluxAlertObject[];\n readonly confirms: FluxConfirmObject[];\n readonly prompts: FluxPromptObject[];\n readonly snackbars: FluxSnackbarObject[];\n readonly tooltips: FluxTooltipObject[];\n};\n\nexport type FluxStore = FluxState & {\n readonly inertMain: ComputedRef<boolean>;\n readonly tooltip: ComputedRef<FluxTooltipObject | null>;\n\n addAlert(spec: Omit<FluxAlertObject, 'id'>): number;\n addConfirm(spec: Omit<FluxConfirmObject, 'id'>): number;\n addPrompt(spec: Omit<FluxPromptObject, 'id'>): number;\n addSnackbar(spec: Omit<FluxSnackbarObject, 'id'>): number;\n addTooltip(spec: Omit<FluxTooltipObject, 'id'>): number;\n registerDialog(): [number, VoidFunction];\n removeAlert(id: number): void;\n removeConfirm(id: number): void;\n removePrompt(id: number): void;\n removeSnackbar(id: number): void;\n removeTooltip(id: number): void;\n showAlert(spec: Omit<FluxAlertObject, 'id' | 'onClose'>): Promise<void>;\n showConfirm(spec: Omit<FluxConfirmObject, 'id' | 'onCancel' | 'onConfirm'>): Promise<boolean>;\n showPrompt(spec: Omit<FluxPromptObject, 'id' | 'onCancel' | 'onConfirm'>): Promise<string | false>;\n showSnackbar({duration, ...spec}: Omit<FluxSnackbarObject, 'id'> & { readonly duration?: number; }): Promise<void> | void;\n updateSnackbar(id: number, spec: Partial<Omit<FluxSnackbarObject, 'id'>>): void;\n updateTooltip(id: number, spec: Partial<Omit<FluxTooltipObject, 'id'>>): void;\n showSnackbarSync({duration, ...spec}: Omit<FluxSnackbarObject, 'id'> & { readonly duration?: number; }): void;\n};\n\nconst DEFAULT_SNACKBAR_DURATION = 6000;\n\nconst state = reactive<FluxState>({\n dialogCount: 0,\n alerts: [],\n confirms: [],\n prompts: [],\n snackbars: [],\n tooltips: []\n});\n\nlet nextId: number = 0;\n\nexport function addAlert(spec: Omit<FluxAlertObject, 'id'>): number {\n const id = ++nextId;\n\n state.alerts.push({\n id,\n ...spec\n });\n\n return id;\n}\n\nexport function addConfirm(spec: Omit<FluxConfirmObject, 'id'>): number {\n const id = ++nextId;\n\n state.confirms.push({\n id,\n ...spec\n });\n\n return id;\n}\n\nexport function addPrompt(spec: Omit<FluxPromptObject, 'id'>): number {\n const id = ++nextId;\n\n state.prompts.push({\n id,\n ...spec\n });\n\n return id;\n}\n\nexport function addSnackbar(spec: Omit<FluxSnackbarObject, 'id'>): number {\n const id = ++nextId;\n\n state.snackbars.unshift({\n id,\n ...spec\n });\n\n return id;\n}\n\nexport function addTooltip(spec: Omit<FluxTooltipObject, 'id'>): number {\n const id = ++nextId;\n\n state.tooltips.push({\n id,\n ...spec\n });\n\n return id;\n}\n\nexport function registerDialog(): [number, VoidFunction] {\n return [\n ++state.dialogCount,\n () => --state.dialogCount\n ];\n}\n\nexport function removeAlert(id: number): void {\n const index = state.alerts.findIndex(a => a.id === id);\n\n if (index < 0) {\n return;\n }\n\n state.alerts.splice(index, 1);\n}\n\nexport function removeConfirm(id: number): void {\n const index = state.confirms.findIndex(c => c.id === id);\n\n if (index < 0) {\n return;\n }\n\n state.confirms.splice(index, 1);\n}\n\nexport function removePrompt(id: number): void {\n const index = state.prompts.findIndex(c => c.id === id);\n\n if (index < 0) {\n return;\n }\n\n state.prompts.splice(index, 1);\n}\n\nexport function removeSnackbar(id: number): void {\n const index = state.snackbars.findIndex(s => s.id === id);\n\n if (index < 0) {\n return;\n }\n\n state.snackbars.splice(index, 1);\n}\n\nexport function removeTooltip(id: number): void {\n const index = state.tooltips.findIndex(t => t.id === id);\n\n if (index < 0) {\n return;\n }\n\n state.tooltips.splice(index, 1);\n}\n\nexport function updateSnackbar(id: number, spec: Partial<Omit<FluxSnackbarObject, 'id'>>): void {\n const index = state.snackbars.findIndex(s => s.id === id);\n\n if (index < 0) {\n return;\n }\n\n Object.assign(state.snackbars[index], spec);\n}\n\nexport function updateTooltip(id: number, spec: Partial<Omit<FluxTooltipObject, 'id'>>): void {\n const index = state.tooltips.findIndex(s => s.id === id);\n\n if (index < 0) {\n return;\n }\n\n Object.assign(state.tooltips[index], spec);\n}\n\nexport async function showAlert(spec: Omit<FluxAlertObject, 'id' | 'onClose'>): Promise<void> {\n return new Promise(resolve => {\n const id = addAlert({\n ...spec,\n onClose(): void {\n resolve();\n removeAlert(id);\n }\n });\n });\n}\n\nexport async function showConfirm(spec: Omit<FluxConfirmObject, 'id' | 'onCancel' | 'onConfirm'>): Promise<boolean> {\n return new Promise(resolve => {\n const id = addConfirm({\n ...spec,\n onCancel(): void {\n resolve(false);\n removeConfirm(id);\n },\n onConfirm(): void {\n resolve(true);\n removeConfirm(id);\n }\n });\n });\n}\n\nexport async function showPrompt(spec: Omit<FluxPromptObject, 'id' | 'onCancel' | 'onConfirm'>): Promise<string | false> {\n return new Promise(resolve => {\n const id = addPrompt({\n ...spec,\n onCancel(): void {\n resolve(false);\n removePrompt(id);\n },\n onConfirm(text: string): void {\n resolve(text);\n removePrompt(id);\n }\n });\n });\n}\n\nexport function showSnackbar({duration, ...spec}: Omit<FluxSnackbarObject, 'id'> & { readonly duration?: number; }): void;\n\nexport async function showSnackbar({duration, ...spec}: Omit<FluxSnackbarObject, 'id'> & { readonly duration?: number; }): Promise<void> {\n const id = addSnackbar(spec);\n await new Promise(resolve => setTimeout(() => requestAnimationFrame(resolve), duration ?? DEFAULT_SNACKBAR_DURATION));\n removeSnackbar(id);\n}\n\nexport function useFluxStore(): FluxStore {\n const inertMain = computed(() => state.dialogCount > 0);\n const tooltip = computed(() => state.tooltips[state.tooltips.length - 1] || null);\n\n return {\n ...state,\n inertMain,\n tooltip,\n addAlert,\n addConfirm,\n addPrompt,\n addSnackbar,\n addTooltip,\n registerDialog,\n removeAlert,\n removeConfirm,\n removePrompt,\n removeSnackbar,\n removeTooltip,\n showAlert,\n showConfirm,\n showPrompt,\n showSnackbar,\n updateSnackbar,\n updateTooltip,\n showSnackbarSync: promiseToVoidFunction(showSnackbar)\n };\n}\n\ntype Fn = (...args: never[]) => unknown;\n\nfunction promiseToVoidFunction<T extends Fn>(fn: T): (...args: Parameters<T>) => void {\n return (...args) => {\n fn(...args);\n };\n}\n","/** Checks if value is string */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n\n/** Checks if value is object */\nfunction isObject(obj) {\n var _obj$constructor;\n return typeof obj === 'object' && obj != null && (obj == null || (_obj$constructor = obj.constructor) == null ? void 0 : _obj$constructor.name) === 'Object';\n}\nfunction pick(obj, keys) {\n if (Array.isArray(keys)) return pick(obj, (_, k) => keys.includes(k));\n return Object.entries(obj).reduce((acc, _ref) => {\n let [k, v] = _ref;\n if (keys(v, k)) acc[k] = v;\n return acc;\n }, {});\n}\n\n/** Direction */\nconst DIRECTION = {\n NONE: 'NONE',\n LEFT: 'LEFT',\n FORCE_LEFT: 'FORCE_LEFT',\n RIGHT: 'RIGHT',\n FORCE_RIGHT: 'FORCE_RIGHT'\n};\n\n/** Direction */\n\nfunction forceDirection(direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n default:\n return direction;\n }\n}\n\n/** Escapes regular expression control chars */\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n}\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nfunction objectIncludes(b, a) {\n if (a === b) return true;\n const arrA = Array.isArray(a),\n arrB = Array.isArray(b);\n let i;\n if (arrA && arrB) {\n if (a.length != b.length) return false;\n for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false;\n return true;\n }\n if (arrA != arrB) return false;\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n const dateA = a instanceof Date,\n dateB = b instanceof Date;\n if (dateA && dateB) return a.getTime() == b.getTime();\n if (dateA != dateB) return false;\n const regexpA = a instanceof RegExp,\n regexpB = b instanceof RegExp;\n if (regexpA && regexpB) return a.toString() == b.toString();\n if (regexpA != regexpB) return false;\n const keys = Object.keys(a);\n // if (keys.length !== Object.keys(b).length) return false;\n\n for (i = 0; i < keys.length; i++) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString();\n }\n return false;\n}\n\n/** Selection range */\n\nexport { DIRECTION, escapeRegExp, forceDirection, isObject, isString, objectIncludes, pick };\n","import { DIRECTION } from './utils.js';\n\n/** Provides details of changing input */\nclass ActionDetails {\n /** Current input value */\n\n /** Current cursor position */\n\n /** Old input value */\n\n /** Old selection */\n\n constructor(opts) {\n Object.assign(this, opts);\n\n // double check if left part was changed (autofilling, other non-standard input triggers)\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\n }\n }\n\n /** Start changing position */\n get startChangePos() {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n\n /** Inserted symbols count */\n get insertedCount() {\n return this.cursorPos - this.startChangePos;\n }\n\n /** Inserted symbols */\n get inserted() {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n\n /** Removed symbols count */\n get removedCount() {\n // Math.max for opposite operation\n return Math.max(this.oldSelection.end - this.startChangePos ||\n // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n\n /** Removed symbols */\n get removed() {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n\n /** Unchanged head symbols */\n get head() {\n return this.value.substring(0, this.startChangePos);\n }\n\n /** Unchanged tail symbols */\n get tail() {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n\n /** Remove direction */\n get removeDirection() {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n // align right if delete at right\n return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&\n // if not range removed (event with backspace)\n this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n }\n}\n\nexport { ActionDetails as default };\n","/** Applies mask on element */\nfunction IMask(el, opts) {\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n","import { isString, isObject, pick } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n// export function maskedClass(mask: string): typeof MaskedPattern;\n// export function maskedClass(mask: DateConstructor): typeof MaskedDate;\n// export function maskedClass(mask: NumberConstructor): typeof MaskedNumber;\n// export function maskedClass(mask: Array<any> | ArrayConstructor): typeof MaskedDynamic;\n// export function maskedClass(mask: MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass(mask: Masked): typeof Masked;\n// export function maskedClass(mask: typeof Masked): typeof Masked;\n// export function maskedClass(mask: typeof MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: typeof MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: typeof MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: typeof MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: typeof MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: typeof MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: typeof MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: typeof MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass<Mask extends typeof Masked> (mask: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\n/** Get Masked class by mask type */\nfunction maskedClass(mask) /* TODO */{\n if (mask == null) throw new Error('mask property should be defined');\n if (mask instanceof RegExp) return IMask.MaskedRegExp;\n if (isString(mask)) return IMask.MaskedPattern;\n if (mask === Date) return IMask.MaskedDate;\n if (mask === Number) return IMask.MaskedNumber;\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor;\n if (mask instanceof Function) return IMask.MaskedFunction;\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n return IMask.Masked;\n}\nfunction normalizeOpts(opts) {\n if (!opts) throw new Error('Options in not defined');\n if (IMask.Masked) {\n if (opts.prototype instanceof IMask.Masked) return {\n mask: opts\n };\n\n /*\n handle cases like:\n 1) opts = Masked\n 2) opts = { mask: Masked, ...instanceOpts }\n */\n const {\n mask = undefined,\n ...instanceOpts\n } = opts instanceof IMask.Masked ? {\n mask: opts\n } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {};\n if (mask) {\n const _mask = mask.mask;\n return {\n ...pick(mask, (_, k) => !k.startsWith('_')),\n mask: mask.constructor,\n _mask,\n ...instanceOpts\n };\n }\n }\n if (!isObject(opts)) return {\n mask: opts\n };\n return {\n ...opts\n };\n}\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n\n// From masked\n// export default function createMask<Opts extends Masked, ReturnMasked=Opts> (opts: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask<Opts extends MaskedOptions<typeof Masked>, ReturnMasked extends Masked=InstanceType<Opts['mask']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDate>, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedNumber>, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedEnum>, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRange>, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedFunction>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedPattern>, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDynamic>, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask<Opts extends MaskedOptions<Masked>, ReturnMasked=Opts extends MaskedOptions<infer M> ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedNumberOptions, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDateFactoryOptions, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedEnumOptions, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedRangeOptions, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedPatternOptions, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDynamicOptions, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<RegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<Function>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n const nOpts = normalizeOpts(opts);\n const MaskedClass = maskedClass(nOpts.mask);\n if (!MaskedClass) throw new Error(\"Masked class is not found for provided mask \" + nOpts.mask + \", appropriate module needs to be imported manually before creating mask.\");\n if (nOpts.mask === MaskedClass) delete nOpts.mask;\n if (nOpts._mask) {\n nOpts.mask = nOpts._mask;\n delete nOpts._mask;\n }\n return new MaskedClass(nOpts);\n}\nIMask.createMask = createMask;\n\nexport { createMask as default, maskedClass, normalizeOpts };\n","import IMask from '../core/holder.js';\n\n/** Generic element API to use with mask */\nclass MaskElement {\n /** */\n\n /** */\n\n /** */\n\n /** Safely returns selection start */\n get selectionStart() {\n let start;\n try {\n start = this._unsafeSelectionStart;\n } catch {}\n return start != null ? start : this.value.length;\n }\n\n /** Safely returns selection end */\n get selectionEnd() {\n let end;\n try {\n end = this._unsafeSelectionEnd;\n } catch {}\n return end != null ? end : this.value.length;\n }\n\n /** Safely sets element selection */\n select(start, end) {\n if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n try {\n this._unsafeSelect(start, end);\n } catch {}\n }\n\n /** */\n get isActive() {\n return false;\n }\n /** */\n\n /** */\n\n /** */\n}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n","import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\n\n/** Bridge between HTMLElement and {@link Masked} */\nclass HTMLMaskElement extends MaskElement {\n /** HTMLElement to use mask on */\n\n constructor(input) {\n super();\n this.input = input;\n this._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\n }\n get rootElement() {\n var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) == null ? void 0 : _this$input$getRootNo2.call(_this$input)) != null ? _this$input$getRootNo : document;\n }\n\n /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\n/** Bridge between InputElement and {@link Masked} */\nclass HTMLInputMaskElement extends HTMLMaskElement {\n /** InputElement to use mask on */\n\n constructor(input) {\n super(input);\n this.input = input;\n }\n\n /** Returns InputElement selection start */\n get _unsafeSelectionStart() {\n return this.input.selectionStart != null ? this.input.selectionStart : this.value.length;\n }\n\n /** Returns InputElement selection end */\n get _unsafeSelectionEnd() {\n return this.input.selectionEnd;\n }\n\n /** Sets InputElement selection */\n _unsafeSelect(start, end) {\n this.input.setSelectionRange(start, end);\n }\n get value() {\n return this.input.value;\n }\n set value(value) {\n this.input.value = value;\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLInputMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n /** Returns HTMLElement selection start */\n get _unsafeSelectionStart() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Returns HTMLElement selection end */\n get _unsafeSelectionEnd() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Sets HTMLElement selection */\n _unsafeSelect(start, end) {\n if (!this.rootElement.createRange) return;\n const range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /** HTMLElement value */\n get value() {\n return this.input.textContent || '';\n }\n set value(value) {\n this.input.textContent = value;\n }\n}\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nexport { HTMLContenteditableMaskElement as default };\n","class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n","import { DIRECTION } from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport createMask, { maskedClass } from '../masked/factory.js';\nimport MaskElement from './mask-element.js';\nimport HTMLInputMaskElement from './html-input-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\nimport InputHistory from './input-history.js';\nimport './html-mask-element.js';\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nclass InputMask {\n /**\n View element\n */\n\n /** Internal {@link Masked} model */\n\n constructor(el, opts) {\n this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLInputMaskElement(el);\n this.masked = createMask(opts);\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n this._rawInputValue = '';\n this.history = new InputHistory();\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n this._bindEvents();\n\n // refresh\n this.updateValue();\n this._onChange();\n }\n maskEquals(mask) {\n var _this$masked;\n return mask == null || ((_this$masked = this.masked) == null ? void 0 : _this$masked.maskEquals(mask));\n }\n\n /** Masked */\n get mask() {\n return this.masked.mask;\n }\n set mask(mask) {\n if (this.maskEquals(mask)) return;\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n // TODO \"any\" no idea\n this.masked.updateOptions({\n mask\n });\n return;\n }\n const masked = mask instanceof IMask.Masked ? mask : createMask({\n mask\n });\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n\n /** Raw value */\n get value() {\n return this._value;\n }\n set value(str) {\n if (this.value === str) return;\n this.masked.value = str;\n this.updateControl('auto');\n }\n\n /** Unmasked value */\n get unmaskedValue() {\n return this._unmaskedValue;\n }\n set unmaskedValue(str) {\n if (this.unmaskedValue === str) return;\n this.masked.unmaskedValue = str;\n this.updateControl('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Typed unmasked value */\n get typedValue() {\n return this.masked.typedValue;\n }\n set typedValue(val) {\n if (this.masked.typedValueEquals(val)) return;\n this.masked.typedValue = val;\n this.updateControl('auto');\n }\n\n /** Display value */\n get displayValue() {\n return this.masked.displayValue;\n }\n\n /** Starts listening to element events */\n _bindEvents() {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange,\n undo: this._onUndo,\n redo: this._onRedo\n });\n }\n\n /** Stops listening to element events */\n _unbindEvents() {\n if (this.el) this.el.unbindEvents();\n }\n\n /** Fires custom event */\n _fireEvent(ev, e) {\n const listeners = this._listeners[ev];\n if (!listeners) return;\n listeners.forEach(l => l(e));\n }\n\n /** Current selection start */\n get selectionStart() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n }\n\n /** Current cursor position */\n get cursorPos() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n }\n set cursorPos(pos) {\n if (!this.el || !this.el.isActive) return;\n this.el.select(pos, pos);\n this._saveSelection();\n }\n\n /** Stores current selection */\n _saveSelection( /* ev */\n ) {\n if (this.displayValue !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n\n /** Syncronizes model value from view */\n updateValue() {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\n }\n\n /** Updates options with deep equal check, recreates {@link Masked} model if mask type changes */\n updateOptions(opts) {\n const {\n mask,\n ...restOpts\n } = opts; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(restOpts);\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts); // TODO\n\n if (updateMask || updateOpts) this.updateControl();\n }\n\n /** Updates cursor */\n updateCursor(cursorPos) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos;\n\n // also queue change cursor for mobile browsers\n this._delayUpdateCursor(cursorPos);\n }\n\n /** Delays cursor update to support mobile browsers */\n _delayUpdateCursor(cursorPos) {\n this._abortUpdateCursor();\n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(() => {\n if (!this.el) return; // if was destroyed\n this.cursorPos = this._changingCursorPos;\n this._abortUpdateCursor();\n }, 10);\n }\n\n /** Fires custom events */\n _fireChangeEvents() {\n this._fireEvent('accept', this._inputEvent);\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n\n /** Aborts delayed cursor update */\n _abortUpdateCursor() {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n\n /** Aligns cursor to nearest available position */\n alignCursor() {\n this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n }\n\n /** Aligns cursor only if selection is empty */\n alignCursorFriendly() {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n this.alignCursor();\n }\n\n /** Adds listener on custom event */\n on(ev, handler) {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n this._listeners[ev].push(handler);\n return this;\n }\n\n /** Removes custom event listener */\n off(ev, handler) {\n if (!this._listeners[ev]) return this;\n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n const hIndex = this._listeners[ev].indexOf(handler);\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n\n /** Handles view input event */\n _onInput(e) {\n this._inputEvent = e;\n this._abortUpdateCursor();\n const details = new ActionDetails({\n // new state\n value: this.el.value,\n cursorPos: this.cursorPos,\n // old state\n oldValue: this.displayValue,\n oldSelection: this._selection\n });\n const oldRawValue = this.masked.rawInputValue;\n const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n input: true,\n raw: true\n }).offset;\n\n // force align in remove direction only if no input chars were removed\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n this.updateControl(cursorPos);\n delete this._inputEvent;\n }\n\n /** Handles view change event and commits model value */\n _onChange() {\n if (this.displayValue !== this.el.value) this.updateValue();\n this.masked.doCommit();\n this.updateControl();\n this._saveSelection();\n }\n\n /** Handles view drop event, prevents by default */\n _onDrop(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n /** Restore last selection on focus */\n _onFocus(ev) {\n this.alignCursorFriendly();\n }\n\n /** Restore last selection on focus */\n _onClick(ev) {\n this.alignCursorFriendly();\n }\n _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\n }\n\n /** Unbind view events and removes element reference */\n destroy() {\n this._unbindEvents();\n this._listeners.length = 0;\n delete this.el;\n }\n}\nIMask.InputMask = InputMask;\n\nexport { InputMask as default };\n","import IMask from './holder.js';\n\n/** Provides details of changing model value */\nclass ChangeDetails {\n /** Inserted symbols */\n\n /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\n\n static normalize(prep) {\n return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n }\n constructor(details) {\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\n }\n}\nIMask.ChangeDetails = ChangeDetails;\n\nexport { ChangeDetails as default };\n","/** Provides details of continuous extracted tail */\nclass ContinuousTailDetails {\n /** Tail value as string */\n\n /** Tail start position */\n\n /** Start position */\n\n constructor(value, from, stop) {\n if (value === void 0) {\n value = '';\n }\n if (from === void 0) {\n from = 0;\n }\n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n toString() {\n return this.value;\n }\n extend(tail) {\n this.value += String(tail);\n }\n appendTo(masked) {\n return masked.append(this.toString(), {\n tail: true\n }).aggregate(masked._appendPlaceholder());\n }\n get state() {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop\n };\n }\n set state(state) {\n Object.assign(this, state);\n }\n unshift(beforePos) {\n if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n const shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n shift() {\n if (!this.value.length) return '';\n const shiftChar = this.value[this.value.length - 1];\n this.value = this.value.slice(0, -1);\n return shiftChar;\n }\n}\n\nexport { ContinuousTailDetails as default };\n","import ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { isString, DIRECTION, objectIncludes, forceDirection } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n/** Append flags */\n\n/** Extract flags */\n\n// see https://github.com/microsoft/TypeScript/issues/6223\n\n/** Provides common masking stuff */\nclass Masked {\n /** */\n\n /** */\n\n /** Transforms value before mask processing */\n\n /** Transforms each char before mask processing */\n\n /** Validates if value is acceptable */\n\n /** Does additional processing at the end of editing */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n this._value = '';\n this._update({\n ...Masked.DEFAULTS,\n ...opts\n });\n this._initialized = true;\n }\n\n /** Sets and applies new options */\n updateOptions(opts) {\n if (!this.optionsIsChanged(opts)) return;\n this.withValueRefresh(this._update.bind(this, opts));\n }\n\n /** Sets new options */\n _update(opts) {\n Object.assign(this, opts);\n }\n\n /** Mask state */\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n }\n\n /** Resets value */\n reset() {\n this._value = '';\n }\n get value() {\n return this._value;\n }\n set value(value) {\n this.resolve(value, {\n input: true\n });\n }\n\n /** Resolve new value */\n resolve(value, flags) {\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n this.reset();\n this.append(value, flags, '');\n this.doCommit();\n }\n get unmaskedValue() {\n return this.value;\n }\n set unmaskedValue(value) {\n this.resolve(value, {});\n }\n get typedValue() {\n return this.parse ? this.parse(this.value, this) : this.unmaskedValue;\n }\n set typedValue(value) {\n if (this.format) {\n this.value = this.format(value, this);\n } else {\n this.unmaskedValue = String(value);\n }\n }\n\n /** Value that includes raw user input */\n get rawInputValue() {\n return this.extractInput(0, this.displayValue.length, {\n raw: true\n });\n }\n set rawInputValue(value) {\n this.resolve(value, {\n raw: true\n });\n }\n get displayValue() {\n return this.value;\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return this.isComplete;\n }\n\n /** Finds nearest input position in direction */\n nearestInputPos(cursorPos, direction) {\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return Math.min(this.displayValue.length, toPos - fromPos);\n }\n\n /** Extracts value in range considering flags */\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return this.displayValue.slice(fromPos, toPos);\n }\n\n /** Extracts tail in range */\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n\n /** Appends tail */\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n\n /** Appends char */\n _appendCharRaw(ch, flags) {\n if (!ch) return new ChangeDetails();\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch\n });\n }\n\n /** Appends char */\n _appendChar(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const consistentState = this.state;\n let details;\n [ch, details] = this.doPrepareChar(ch, flags);\n if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\n if (details.inserted) {\n let consistentTail;\n let appended = this.doValidate(flags) !== false;\n if (appended && checkTail != null) {\n // validation ok, check tail\n const beforeTailState = this.state;\n if (this.overwrite === true) {\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n }\n\n // if ok, rollback state after tail\n if (appended && tailDetails.inserted) this.state = beforeTailState;\n }\n\n // revert all if something went wrong\n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n return details;\n }\n\n /** Appends optional placeholder at the end */\n _appendPlaceholder() {\n return new ChangeDetails();\n }\n\n /** Appends optional eager placeholder at the end */\n _appendEager() {\n return new ChangeDetails();\n }\n\n /** Appends symbols considering flags */\n append(str, flags, tail) {\n if (!isString(str)) throw new Error('value should be string');\n const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags != null && flags.tail) flags._beforeTailState = this.state;\n let details;\n [str, details] = this.doPrepare(str, flags);\n for (let ci = 0; ci < str.length; ++ci) {\n const d = this._appendChar(str[ci], flags, checkTail);\n if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break;\n details.aggregate(d);\n }\n if ((this.eager === true || this.eager === 'append') && flags != null && flags.input && str) {\n details.aggregate(this._appendEager());\n }\n\n // append tail but aggregate only tailShift\n if (checkTail != null) {\n details.tailShift += this.appendTail(checkTail).tailShift;\n // TODO it's a good idea to clear state after appending ends\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n // this._resetBeforeTailState();\n }\n return details;\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n this._value = this.displayValue.slice(0, fromPos) + this.displayValue.slice(toPos);\n return new ChangeDetails();\n }\n\n /** Calls function and reapplies current value */\n withValueRefresh(fn) {\n if (this._refreshing || !this._initialized) return fn();\n this._refreshing = true;\n const rawInput = this.rawInputValue;\n const value = this.value;\n const ret = fn();\n this.rawInputValue = rawInput;\n // append lost trailing chars at the end\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.displayValue.length), {}, '');\n this.doCommit();\n }\n delete this._refreshing;\n return ret;\n }\n runIsolated(fn) {\n if (this._isolated || !this._initialized) return fn(this);\n this._isolated = true;\n const state = this.state;\n const ret = fn(this);\n this.state = state;\n delete this._isolated;\n return ret;\n }\n doSkipInvalid(ch, flags, checkTail) {\n return Boolean(this.skipInvalid);\n }\n\n /** Prepares string before mask processing */\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepare ? this.prepare(str, this, flags) : str);\n }\n\n /** Prepares each char before mask processing */\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepareChar ? this.prepareChar(str, this, flags) : str);\n }\n\n /** Validates if value is acceptable */\n doValidate(flags) {\n return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n }\n\n /** Does additional processing at the end of editing */\n doCommit() {\n if (this.commit) this.commit(this.value, this);\n }\n splice(start, deleteCount, inserted, removeDirection, flags) {\n if (inserted === void 0) {\n inserted = '';\n }\n if (removeDirection === void 0) {\n removeDirection = DIRECTION.NONE;\n }\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n const tailPos = start + deleteCount;\n const tail = this.extractTail(tailPos);\n const eagerRemove = this.eager === true || this.eager === 'remove';\n let oldRawValue;\n if (eagerRemove) {\n removeDirection = forceDirection(removeDirection);\n oldRawValue = this.extractInput(0, tailPos, {\n raw: true\n });\n }\n let startChangePos = start;\n const details = new ChangeDetails();\n\n // if it is just deletion without insertion\n if (removeDirection !== DIRECTION.NONE) {\n startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection);\n\n // adjust tailShift if start was aligned\n details.tailShift = startChangePos - start;\n }\n details.aggregate(this.remove(startChangePos));\n if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n if (removeDirection === DIRECTION.FORCE_LEFT) {\n let valLength;\n while (oldRawValue === this.rawInputValue && (valLength = this.displayValue.length)) {\n details.aggregate(new ChangeDetails({\n tailShift: -1\n })).aggregate(this.remove(valLength - 1));\n }\n } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n tail.unshift();\n }\n }\n return details.aggregate(this.append(inserted, flags, tail));\n }\n maskEquals(mask) {\n return this.mask === mask;\n }\n optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\n }\n typedValueEquals(value) {\n const tval = this.typedValue;\n return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || (this.format ? this.format(value, this) === this.format(this.typedValue, this) : false);\n }\n pad(flags) {\n return new ChangeDetails();\n }\n}\nMasked.DEFAULTS = {\n skipInvalid: true\n};\nMasked.EMPTY_VALUES = [undefined, null, ''];\nIMask.Masked = Masked;\n\nexport { Masked as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport IMask from '../../core/holder.js';\n\nclass ChunksTailDetails {\n /** */\n\n constructor(chunks, from) {\n if (chunks === void 0) {\n chunks = [];\n }\n if (from === void 0) {\n from = 0;\n }\n this.chunks = chunks;\n this.from = from;\n }\n toString() {\n return this.chunks.map(String).join('');\n }\n extend(tailChunk) {\n if (!String(tailChunk)) return;\n tailChunk = isString(tailChunk) ? new ContinuousTailDetails(String(tailChunk)) : tailChunk;\n const lastChunk = this.chunks[this.chunks.length - 1];\n const extendLast = lastChunk && (\n // if stops are same or tail has no stop\n lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n // if tail chunk goes just after last chunk\n tailChunk.from === lastChunk.from + lastChunk.toString().length;\n if (tailChunk instanceof ContinuousTailDetails) {\n // check the ability to extend previous chunk\n if (extendLast) {\n // extend previous chunk\n lastChunk.extend(tailChunk.toString());\n } else {\n // append new chunk\n this.chunks.push(tailChunk);\n }\n } else if (tailChunk instanceof ChunksTailDetails) {\n if (tailChunk.stop == null) {\n // unwrap floating chunks to parent, keeping `from` pos\n let firstTailChunk;\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift(); // not possible to be `undefined` because length was checked above\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n }\n\n // if tail chunk still has value\n if (tailChunk.toString()) {\n // if chunks contains stops, then popup stop to container\n tailChunk.stop = tailChunk.blockIndex;\n this.chunks.push(tailChunk);\n }\n }\n }\n appendTo(masked) {\n if (!(masked instanceof IMask.MaskedPattern)) {\n const tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n const details = new ChangeDetails();\n for (let ci = 0; ci < this.chunks.length; ++ci) {\n const chunk = this.chunks[ci];\n const lastBlockIter = masked._mapPosToBlock(masked.displayValue.length);\n const stop = chunk.stop;\n let chunkBlock;\n if (stop != null && (\n // if block not found or stop is behind lastBlock\n !lastBlockIter || lastBlockIter.index <= stop)) {\n if (chunk instanceof ChunksTailDetails ||\n // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0) {\n details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\n\n // get not inserted chars\n const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n if (remainChars) details.aggregate(masked.append(remainChars, {\n tail: true\n }));\n } else {\n details.aggregate(masked.append(chunk.toString(), {\n tail: true\n }));\n }\n }\n return details;\n }\n get state() {\n return {\n chunks: this.chunks.map(c => c.state),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex\n };\n }\n set state(state) {\n const {\n chunks,\n ...props\n } = state;\n Object.assign(this, props);\n this.chunks = chunks.map(cstate => {\n const chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails();\n chunk.state = cstate;\n return chunk;\n });\n }\n unshift(beforePos) {\n if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n let ci = 0;\n while (ci < this.chunks.length) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.unshift(chunkShiftPos);\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n ++ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n shift() {\n if (!this.chunks.length) return '';\n let ci = this.chunks.length - 1;\n while (0 <= ci) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.shift();\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n --ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n}\n\nexport { ChunksTailDetails as default };\n","import { DIRECTION } from '../../core/utils.js';\n\nclass PatternCursor {\n constructor(masked, pos) {\n this.masked = masked;\n this._log = [];\n const {\n offset,\n index\n } = masked._mapPosToBlock(pos) || (pos < 0 ?\n // first\n {\n index: 0,\n offset: 0\n } :\n // last\n {\n index: this.masked._blocks.length,\n offset: 0\n });\n this.offset = offset;\n this.index = index;\n this.ok = false;\n }\n get block() {\n return this.masked._blocks[this.index];\n }\n get pos() {\n return this.masked._blockStartPos(this.index) + this.offset;\n }\n get state() {\n return {\n index: this.index,\n offset: this.offset,\n ok: this.ok\n };\n }\n set state(s) {\n Object.assign(this, s);\n }\n pushState() {\n this._log.push(this.state);\n }\n popState() {\n const s = this._log.pop();\n if (s) this.state = s;\n return s;\n }\n bindBlock() {\n if (this.block) return;\n if (this.index < 0) {\n this.index = 0;\n this.offset = 0;\n }\n if (this.index >= this.masked._blocks.length) {\n this.index = this.masked._blocks.length - 1;\n this.offset = this.block.displayValue.length; // TODO this is stupid type error, `block` depends on index that was changed above\n }\n }\n _pushLeft(fn) {\n this.pushState();\n for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) == null ? void 0 : _this$block.displayValue.length) || 0) {\n var _this$block;\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n _pushRight(fn) {\n this.pushState();\n for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n pushLeftBeforeFilled() {\n return this._pushLeft(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT);\n if (this.offset !== 0) return true;\n });\n }\n pushLeftBeforeInput() {\n // cases:\n // filled input: 00|\n // optional empty input: 00[]|\n // nested block: XX<[]>|\n return this._pushLeft(() => {\n if (this.block.isFixed) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushLeftBeforeRequired() {\n return this._pushLeft(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushRightBeforeFilled() {\n return this._pushRight(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT);\n if (this.offset !== this.block.value.length) return true;\n });\n }\n pushRightBeforeInput() {\n return this._pushRight(() => {\n if (this.block.isFixed) return;\n\n // const o = this.offset;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n // aa|X\n // aa<X|[]>X_ - this will not work\n // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n return true;\n });\n }\n pushRightBeforeRequired() {\n return this._pushRight(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n // TODO check |[*]XX_\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n return true;\n });\n }\n}\n\nexport { PatternCursor as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport '../../core/holder.js';\n\nclass PatternFixedDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n Object.assign(this, opts);\n this._value = '';\n this.isFixed = true;\n }\n get value() {\n return this._value;\n }\n get unmaskedValue() {\n return this.isUnmasking ? this.value : '';\n }\n get rawInputValue() {\n return this._isRawInput ? this.value : '';\n }\n get displayValue() {\n return this.value;\n }\n reset() {\n this._isRawInput = false;\n this._value = '';\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n if (!this._value) this._isRawInput = false;\n return new ChangeDetails();\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this._value.length;\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default:\n return maxPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n return this._isRawInput ? toPos - fromPos : 0;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return Boolean(this._value);\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const appendEager = this.eager === true || this.eager === 'append';\n const appended = this.char === ch;\n const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;\n const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n return details;\n }\n _appendEager() {\n return this._appendChar(this.char, {\n tail: true\n });\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n this._value = details.inserted = this.char;\n return details;\n }\n extractTail() {\n return new ContinuousTailDetails('');\n }\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n append(str, flags, tail) {\n const details = this._appendChar(str[0], flags);\n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n return details;\n }\n doCommit() {}\n get state() {\n return {\n _value: this._value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n this._isRawInput = Boolean(state._rawInputValue);\n }\n pad(flags) {\n return this._appendPlaceholder();\n }\n}\n\nexport { PatternFixedDefinition as default };\n","import createMask from '../factory.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION } from '../../core/utils.js';\nimport '../../core/holder.js';\n\nclass PatternInputDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n const {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager,\n ...maskOpts\n } = opts;\n this.masked = createMask(maskOpts);\n Object.assign(this, {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager\n });\n }\n reset() {\n this.isFilled = false;\n this.masked.reset();\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n if (fromPos === 0 && toPos >= 1) {\n this.isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n return new ChangeDetails();\n }\n get value() {\n return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n }\n get unmaskedValue() {\n return this.masked.unmaskedValue;\n }\n get rawInputValue() {\n return this.masked.rawInputValue;\n }\n get displayValue() {\n return this.masked.value && this.displayChar || this.value;\n }\n get isComplete() {\n return Boolean(this.masked.value) || this.isOptional;\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const state = this.masked.state;\n // simulate input\n let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\n this.masked.state = state;\n }\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n details.skip = !details.inserted && !this.isOptional;\n this.isFilled = Boolean(details.inserted);\n return details;\n }\n append(str, flags, tail) {\n // TODO probably should be done via _appendChar\n return this.masked.append(str, this.currentMaskFlags(flags), tail);\n }\n _appendPlaceholder() {\n if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\n }\n _appendEager() {\n return new ChangeDetails();\n }\n extractTail(fromPos, toPos) {\n return this.masked.extractTail(fromPos, toPos);\n }\n appendTail(tail) {\n return this.masked.appendTail(tail);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this.value.length;\n const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n case DIRECTION.NONE:\n default:\n return boundPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.value.slice(fromPos, toPos).length;\n }\n doValidate(flags) {\n return this.masked.doValidate(this.currentMaskFlags(flags)) && (!this.parent || this.parent.doValidate(this.currentMaskFlags(flags)));\n }\n doCommit() {\n this.masked.doCommit();\n }\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue,\n masked: this.masked.state,\n isFilled: this.isFilled\n };\n }\n set state(state) {\n this.masked.state = state.masked;\n this.isFilled = state.isFilled;\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta;\n return {\n ...flags,\n _beforeTailState: (flags == null || (_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.masked) || (flags == null ? void 0 : flags._beforeTailState)\n };\n }\n pad(flags) {\n return new ChangeDetails();\n }\n}\nPatternInputDefinition.DEFAULT_DEFINITIONS = {\n '0': /\\d/,\n 'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // http://stackoverflow.com/a/22075070\n '*': /./\n};\n\nexport { PatternInputDefinition as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by RegExp */\nclass MaskedRegExp extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const mask = opts.mask;\n if (mask) opts.validate = value => value.search(mask) >= 0;\n super._update(opts);\n }\n}\nIMask.MaskedRegExp = MaskedRegExp;\n\nexport { MaskedRegExp as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport { DIRECTION } from '../core/utils.js';\nimport Masked from './base.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport PatternCursor from './pattern/cursor.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport PatternInputDefinition from './pattern/input-definition.js';\nimport './regexp.js';\nimport '../core/continuous-tail-details.js';\n\n/** Pattern mask */\nclass MaskedPattern extends Masked {\n /** */\n\n /** */\n\n /** Single char for empty input */\n\n /** Single char for filled input */\n\n /** Show placeholder only when needed */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n super({\n ...MaskedPattern.DEFAULTS,\n ...opts,\n definitions: Object.assign({}, PatternInputDefinition.DEFAULT_DEFINITIONS, opts == null ? void 0 : opts.definitions)\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n super._update(opts);\n this._rebuildMask();\n }\n _rebuildMask() {\n const defs = this.definitions;\n this._blocks = [];\n this.exposeBlock = undefined;\n this._stops = [];\n this._maskedBlocks = {};\n const pattern = this.mask;\n if (!pattern || !defs) return;\n let unmaskingBlock = false;\n let optionalBlock = false;\n for (let i = 0; i < pattern.length; ++i) {\n if (this.blocks) {\n const p = pattern.slice(i);\n const bNames = Object.keys(this.blocks).filter(bName => p.indexOf(bName) === 0);\n // order by key length\n bNames.sort((a, b) => b.length - a.length);\n // use block name with max length\n const bName = bNames[0];\n if (bName) {\n const {\n expose,\n repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts<Arg & Extra>\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\n if (maskedBlock) {\n this._blocks.push(maskedBlock);\n if (expose) this.exposeBlock = maskedBlock;\n\n // store block index\n if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n this._maskedBlocks[bName].push(this._blocks.length - 1);\n }\n i += bName.length - 1;\n continue;\n }\n }\n let char = pattern[i];\n let isInput = (char in defs);\n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n continue;\n }\n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n isInput = false;\n }\n const def = isInput ? new PatternInputDefinition({\n isOptional: optionalBlock,\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n ...normalizeOpts(defs[char]),\n parent: this\n }) : new PatternFixedDefinition({\n char,\n eager: this.eager,\n isUnmasking: unmaskingBlock\n });\n this._blocks.push(def);\n }\n }\n get state() {\n return {\n ...super.state,\n _blocks: this._blocks.map(b => b.state)\n };\n }\n set state(state) {\n if (!state) {\n this.reset();\n return;\n }\n const {\n _blocks,\n ...maskedState\n } = state;\n this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n super.state = maskedState;\n }\n reset() {\n super.reset();\n this._blocks.forEach(b => b.reset());\n }\n get isComplete() {\n return this.exposeBlock ? this.exposeBlock.isComplete : this._blocks.every(b => b.isComplete);\n }\n get isFilled() {\n return this._blocks.every(b => b.isFilled);\n }\n get isFixed() {\n return this._blocks.every(b => b.isFixed);\n }\n get isOptional() {\n return this._blocks.every(b => b.isOptional);\n }\n doCommit() {\n this._blocks.forEach(b => b.doCommit());\n super.doCommit();\n }\n get unmaskedValue() {\n return this.exposeBlock ? this.exposeBlock.unmaskedValue : this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.unmaskedValue = unmaskedValue;\n this.appendTail(tail);\n this.doCommit();\n } else super.unmaskedValue = unmaskedValue;\n }\n get value() {\n return this.exposeBlock ? this.exposeBlock.value :\n // TODO return _value when not in change?\n this._blocks.reduce((str, b) => str += b.value, '');\n }\n set value(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.value = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.value = value;\n }\n get typedValue() {\n return this.exposeBlock ? this.exposeBlock.typedValue : super.typedValue;\n }\n set typedValue(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.typedValue = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.typedValue = value;\n }\n get displayValue() {\n return this._blocks.reduce((str, b) => str += b.displayValue, '');\n }\n appendTail(tail) {\n return super.appendTail(tail).aggregate(this._appendPlaceholder());\n }\n _appendEager() {\n var _this$_mapPosToBlock;\n const details = new ChangeDetails();\n let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index;\n if (startBlockIndex == null) return details;\n\n // TODO test if it works for nested pattern masks\n if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n const d = this._blocks[bi]._appendEager();\n if (!d.inserted) break;\n details.aggregate(d);\n }\n return details;\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const blockIter = this._mapPosToBlock(this.displayValue.length);\n const details = new ChangeDetails();\n if (!blockIter) return details;\n for (let bi = blockIter.index, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\n const blockDetails = block._appendChar(ch, {\n ...flags,\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n });\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n const blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = this._findStopBefore(bi);\n blockChunk.from = this._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n chunkTail.extend(blockChunk);\n });\n return chunkTail;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n if (fromPos === toPos) return '';\n let input = '';\n this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n input += b.extractInput(fromPos, toPos, flags);\n });\n return input;\n }\n _findStopBefore(blockIndex) {\n let stopBefore;\n for (let si = 0; si < this._stops.length; ++si) {\n const stop = this._stops[si];\n if (stop <= blockIndex) stopBefore = stop;else break;\n }\n return stopBefore;\n }\n\n /** Appends placeholder depending on laziness */\n _appendPlaceholder(toBlockIndex) {\n const details = new ChangeDetails();\n if (this.lazy && toBlockIndex == null) return details;\n const startBlockIter = this._mapPosToBlock(this.displayValue.length);\n if (!startBlockIter) return details;\n const startBlockIndex = startBlockIter.index;\n const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n this._blocks.slice(startBlockIndex, endBlockIndex).forEach(b => {\n if (!b.lazy || toBlockIndex != null) {\n var _blocks2;\n details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\n }\n });\n return details;\n }\n\n /** Finds block in pos */\n _mapPosToBlock(pos) {\n let accVal = '';\n for (let bi = 0; bi < this._blocks.length; ++bi) {\n const block = this._blocks[bi];\n const blockStartPos = accVal.length;\n accVal += block.displayValue;\n if (pos <= accVal.length) {\n return {\n index: bi,\n offset: pos - blockStartPos\n };\n }\n }\n }\n _blockStartPos(blockIndex) {\n return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.displayValue.length, 0);\n }\n _forEachBlocksInRange(fromPos, toPos, fn) {\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const fromBlockIter = this._mapPosToBlock(fromPos);\n if (fromBlockIter) {\n const toBlockIter = this._mapPosToBlock(toPos);\n // process first block\n const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n const fromBlockStartPos = fromBlockIter.offset;\n const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].displayValue.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n fn(this._blocks[bi], bi, 0, this._blocks[bi].displayValue.length);\n }\n\n // process last block\n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n }\n }\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const removeDetails = super.remove(fromPos, toPos);\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n return removeDetails;\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n if (!this._blocks.length) return 0;\n const cursor = new PatternCursor(this, cursorPos);\n if (direction === DIRECTION.NONE) {\n // -------------------------------------------------\n // NONE should only go out from fixed to the right!\n // -------------------------------------------------\n if (cursor.pushRightBeforeInput()) return cursor.pos;\n cursor.popState();\n if (cursor.pushLeftBeforeInput()) return cursor.pos;\n return this.displayValue.length;\n }\n\n // FORCE is only about a|* otherwise is 0\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // try to break fast when *|a\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeFilled();\n if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n cursor.popState();\n }\n\n // forward flow\n cursor.pushLeftBeforeInput();\n cursor.pushLeftBeforeRequired();\n cursor.pushLeftBeforeFilled();\n\n // backward flow\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n }\n if (cursor.ok) return cursor.pos;\n if (direction === DIRECTION.FORCE_LEFT) return 0;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return 0;\n }\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // forward flow\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.pushRightBeforeFilled()) return cursor.pos;\n if (direction === DIRECTION.FORCE_RIGHT) return this.displayValue.length;\n\n // backward flow\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n }\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n let total = 0;\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n total += b.totalInputPositions(bFromPos, bToPos);\n });\n return total;\n }\n\n /** Get block by name */\n maskedBlock(name) {\n return this.maskedBlocks(name)[0];\n }\n\n /** Get all blocks by name */\n maskedBlocks(name) {\n const indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(gi => this._blocks[gi]);\n }\n pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.DEFAULTS,\n lazy: true,\n placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\nIMask.MaskedPattern = MaskedPattern;\n\nexport { MaskedPattern as default };\n","import type { InputMask } from 'imask';\nimport imask from 'imask/holder';\n\nimport 'imask/masked/pattern';\n\nexport function bic(element: HTMLInputElement): InputMask<{}> {\n return imask(element, {\n definitions: {\n '#': /[A-Z0-9]/\n },\n mask: 'aaaaaa##[000]',\n prepareChar: (str: string) => str.toUpperCase()\n });\n}\n\nexport function iban(element: HTMLInputElement): InputMask<{}> {\n return imask(element, {\n definitions: {\n '#': /[A-Z0-9]/\n },\n mask: 'aa00 #### 0000 0000[ 0000 0000 0000 0000]',\n prepareChar: (str: string) => str.toUpperCase()\n });\n}\n\nexport function vat(element: HTMLInputElement): InputMask<{}> {\n return imask(element, {\n definitions: {\n '#': /[A-Z0-9]/\n },\n mask: 'aa########[#####]',\n prepareChar: (str: string) => str.toUpperCase()\n });\n}\n","import { inject, ref } from 'vue';\nimport { FluxDisabledInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxDisabledInjectionKey, ref(false));\n}\n","import type { Ref } from 'vue';\nimport { computed, unref } from 'vue';\nimport useDisabledInjection from './useDisabledInjection';\n\nexport default function (componentDisabled: Ref<boolean>) {\n const treeDisabled = useDisabledInjection();\n\n return computed(() => unref(componentDisabled) || unref(treeDisabled));\n}\n","import { inject } from 'vue';\nimport { FluxAdaptiveGroupInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxAdaptiveGroupInjectionKey, null);\n}\n","import { inject } from 'vue';\nimport { FluxExpandableGroupInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxExpandableGroupInjectionKey, {\n closeAll: () => void 0,\n register: () => void 0,\n unregister: () => void 0\n });\n}\n","import { inject, ref } from 'vue';\nimport { FluxFilterInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxFilterInjectionKey, {\n // note(Bas): The default value is never used, but required by\n // Vue, so that explains the empty getter and function below.\n state: ref({}),\n back: () => void 0,\n reset: () => void 0,\n getValue: () => void 0,\n hasValue: () => false,\n setValue: () => void 0\n });\n}\n","import { inject, ref } from 'vue';\nimport { FluxFlyoutInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxFlyoutInjectionKey, {\n isClosing: ref(false),\n isOpen: ref(false),\n isOpening: ref(false)\n });\n}\n","import { inject, useId } from 'vue';\nimport { FluxFormFieldInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxFormFieldInjectionKey, {\n id: useId()\n });\n}\n","import { inject } from 'vue';\nimport { FluxTableInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxTableInjectionKey, {\n isBordered: false,\n isHoverable: false,\n isSeparated: false,\n isStriped: false\n });\n}\n","import { inject } from 'vue';\nimport { FluxTooltipInjectionKey } from '$flux/data';\n\nexport default function () {\n return inject(FluxTooltipInjectionKey, {\n calculate: () => void 0\n });\n}\n",".basePane {\n background: var(--surface);\n background-clip: padding-box;\n border: 1px solid var(--surface-stroke-out);\n border-radius: var(--radius);\n}\n\n.basePaneLoader {\n position: absolute;\n display: flex;\n inset: 0;\n align-items: center;\n justify-content: center;\n backdrop-filter: blur(3px) saturate(180%);\n background: var(--surface-loader);\n border-radius: inherit;\n z-index: 100;\n}\n\n.basePaneStructure {\n composes: basePane;\n\n position: relative;\n}\n\n.basePaneStructure > .basePaneStructure {\n background: unset;\n border: 0;\n box-shadow: none;\n}\n\n.basePane > .basePaneElement,\n.basePane > :local(.form) > .basePaneElement {\n &:first-child {\n border-top-left-radius: calc(var(--radius) - 1px);\n border-top-right-radius: calc(var(--radius) - 1px);\n }\n\n &:last-child,\n &:not(.paneHeader):nth-last-child(1 of .basePaneElement) {\n border-bottom-left-radius: calc(var(--radius) - 1px);\n border-bottom-right-radius: calc(var(--radius) - 1px);\n }\n\n &:only-child {\n border: 0;\n }\n}\n","@layer flux-base {\n .icon {\n height: 1em;\n width: 1em;\n flex-shrink: 0;\n font-size: 20px;\n line-height: 1;\n overflow: visible;\n }\n\n .fontAwesomeIcon {\n composes: icon;\n\n display: inline-block;\n }\n\n .iconBoxed {\n composes: basePane from './base/Pane.module.scss';\n\n display: flex;\n height: 1em;\n width: 1em;\n align-items: center;\n flex-shrink: 0;\n justify-content: center;\n font-size: 42px;\n\n .icon {\n font-size: .45em;\n }\n }\n}\n\n.iconBoxedDefault {\n composes: iconBoxed;\n\n box-shadow: var(--shadow-sm);\n}\n\n.iconBoxedColored {\n composes: iconBoxed;\n\n border: 0;\n}\n\n.iconBoxedGray {\n composes: iconBoxedColored;\n\n background: var(--gray-100);\n color: var(--foreground);\n}\n\n.iconBoxedPrimary {\n composes: iconBoxedColored;\n\n background: var(--primary-100);\n color: var(--primary-900);\n}\n\n.iconBoxedDanger {\n composes: iconBoxedColored;\n\n background: var(--danger-100);\n color: var(--danger-900);\n}\n\n.iconBoxedInfo {\n composes: iconBoxedColored;\n\n background: var(--info-100);\n color: var(--info-900);\n}\n\n.iconBoxedSuccess {\n composes: iconBoxedColored;\n\n background: var(--success-100);\n color: var(--success-900);\n}\n\n.iconBoxedWarning {\n composes: iconBoxedColored;\n\n background: var(--warning-100);\n color: var(--warning-900);\n}\n","<template>\n <svg\n v-if=\"definition\"\n :viewBox=\"`0 0 ${definition.width} ${definition.height}`\"\n :class=\"$style.fontAwesomeIcon\"\n :style=\"{\n fontSize: size && `${size}px`,\n scale: definition.scale > 1 ? definition.scale : undefined\n }\"\n focusable=\"false\"\n :role=\"ariaLabel ? 'img' : undefined\"\n :aria-hidden=\"ariaLabel ? undefined : true\"\n :aria-label=\"ariaLabel\"\n @click=\"onClick\">\n <path\n v-for=\"path in definition.paths\"\n :d=\"path\"\n fill=\"currentColor\"/>\n </svg>\n\n <i\n v-else\n :class=\"$style.icon\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { warn } from '@flux-ui/internals';\n import type { FluxIconName } from '@flux-ui/types';\n import { computed } from 'vue';\n import { iconRegistry } from '$flux/data';\n import $style from '$flux/css/component/Icon.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n name\n } = defineProps<{\n readonly ariaLabel?: string;\n readonly size?: number | string;\n readonly name?: FluxIconName;\n }>();\n\n const definition = computed(() => {\n if (!name) {\n return null;\n }\n\n const icon = iconRegistry[name];\n\n if (!icon) {\n warn(`Unknown icon: ${name}`);\n\n return null;\n }\n\n return {\n width: icon[0],\n height: icon[1],\n paths: (Array.isArray(icon[4]) ? icon[4] : [icon[4]]) as string[],\n scale: Math.max(1, icon[0] / 512)\n };\n });\n\n const onClick = (evt: MouseEvent) => emit('click', evt);\n</script>\n","<template>\n <svg\n v-if=\"definition\"\n :viewBox=\"`0 0 ${definition.width} ${definition.height}`\"\n :class=\"$style.fontAwesomeIcon\"\n :style=\"{\n fontSize: size && `${size}px`,\n scale: definition.scale > 1 ? definition.scale : undefined\n }\"\n focusable=\"false\"\n :role=\"ariaLabel ? 'img' : undefined\"\n :aria-hidden=\"ariaLabel ? undefined : true\"\n :aria-label=\"ariaLabel\"\n @click=\"onClick\">\n <path\n v-for=\"path in definition.paths\"\n :d=\"path\"\n fill=\"currentColor\"/>\n </svg>\n\n <i\n v-else\n :class=\"$style.icon\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { warn } from '@flux-ui/internals';\n import type { FluxIconName } from '@flux-ui/types';\n import { computed } from 'vue';\n import { iconRegistry } from '$flux/data';\n import $style from '$flux/css/component/Icon.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n name\n } = defineProps<{\n readonly ariaLabel?: string;\n readonly size?: number | string;\n readonly name?: FluxIconName;\n }>();\n\n const definition = computed(() => {\n if (!name) {\n return null;\n }\n\n const icon = iconRegistry[name];\n\n if (!icon) {\n warn(`Unknown icon: ${name}`);\n\n return null;\n }\n\n return {\n width: icon[0],\n height: icon[1],\n paths: (Array.isArray(icon[4]) ? icon[4] : [icon[4]]) as string[],\n scale: Math.max(1, icon[0] / 512)\n };\n });\n\n const onClick = (evt: MouseEvent) => emit('click', evt);\n</script>\n","<template>\n <router-link\n v-if=\"componentType === 'route'\"\n v-bind=\"$attrs\"\n v-on=\"hoverListeners\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to as any\"\n @click=\"onClick($event)\">\n <slot/>\n </router-link>\n\n <a\n v-else-if=\"componentType === 'link'\"\n v-bind=\"$attrs\"\n v-on=\"hoverListeners\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n @click=\"onClick($event)\">\n <slot/>\n </a>\n\n <button\n v-else-if=\"componentType === 'button'\"\n v-bind=\"$attrs\"\n v-on=\"hoverListeners\"\n @click=\"onClick($event)\">\n <slot/>\n </button>\n\n <div\n v-else\n v-bind=\"$attrs\"\n v-on=\"hoverListeners\"\n @click=\"onClick\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxPressableType, FluxTo } from '@flux-ui/types';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n mouseenter: [MouseEvent];\n mouseleave: [MouseEvent];\n }>();\n\n defineProps<{\n readonly componentType?: FluxPressableType;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const hoverListeners = {\n onMouseenter: (evt: MouseEvent) => emit('mouseenter', evt),\n onMouseleave: (evt: MouseEvent) => emit('mouseleave', evt)\n };\n\n function onClick(evt: MouseEvent, navigate?: (evt: MouseEvent) => void): void {\n emit('click', evt);\n\n if (evt.defaultPrevented) {\n return;\n }\n\n navigate?.(evt);\n }\n</script>\n","<template>\n <router-link\n v-if=\"componentType === 'route'\"\n v-bind=\"$attrs\"\n v-on=\"hoverListeners\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to as any\"\n @click=\"onClick($event)\">\n <slot/>\n </router-link>\n\n <a\n v-else-if=\"componentType === 'link'\"\n v-bind=\"$attrs\"\n v-on=\"hoverListeners\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n @click=\"onClick($event)\">\n <slot/>\n </a>\n\n <button\n v-else-if=\"componentType === 'button'\"\n v-bind=\"$attrs\"\n v-on=\"hoverListeners\"\n @click=\"onClick($event)\">\n <slot/>\n </button>\n\n <div\n v-else\n v-bind=\"$attrs\"\n v-on=\"hoverListeners\"\n @click=\"onClick\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxPressableType, FluxTo } from '@flux-ui/types';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n mouseenter: [MouseEvent];\n mouseleave: [MouseEvent];\n }>();\n\n defineProps<{\n readonly componentType?: FluxPressableType;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const hoverListeners = {\n onMouseenter: (evt: MouseEvent) => emit('mouseenter', evt),\n onMouseleave: (evt: MouseEvent) => emit('mouseleave', evt)\n };\n\n function onClick(evt: MouseEvent, navigate?: (evt: MouseEvent) => void): void {\n emit('click', evt);\n\n if (evt.defaultPrevented) {\n return;\n }\n\n navigate?.(evt);\n }\n</script>\n",".spinner {\n --track: var(--gray-100);\n --value: var(--primary-600);\n\n display: inline-block;\n height: 1em;\n width: 1em;\n flex: 0 0 1em;\n animation: spinner 5s linear infinite;\n font-size: 20px;\n}\n\n.spinnerTrack {\n stroke: var(--track);\n}\n\n.spinnerEffect,\n.spinnerValue {\n stroke: var(--value);\n transform-origin: center;\n animation: spinner 1.2s var(--swift-out) infinite;\n}\n\n.spinnerEffect {\n opacity: .25;\n animation-delay: -1.05s;\n}\n\n@keyframes spinner {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(1turn);\n }\n}\n","<template>\n <svg\n :class=\"$style.spinner\"\n viewBox=\"0 0 24 24\"\n :style=\"{\n fontSize: size && `${size}px`\n }\">\n <circle\n :class=\"$style.spinnerTrack\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"transparent\"\n stroke-width=\"4\"/>\n\n <circle\n :class=\"$style.spinnerEffect\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"transparent\"\n stroke-width=\"4\"\n stroke-dasharray=\"21 45\"\n stroke-dashoffset=\"30\"\n stroke-linecap=\"round\"/>\n\n <circle\n :class=\"$style.spinnerValue\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"transparent\"\n stroke-width=\"4\"\n stroke-dasharray=\"21 45\"\n stroke-dashoffset=\"30\"\n stroke-linecap=\"round\"/>\n </svg>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Spinner.module.scss';\n\n defineProps<{\n readonly size?: number;\n }>();\n</script>\n","<template>\n <svg\n :class=\"$style.spinner\"\n viewBox=\"0 0 24 24\"\n :style=\"{\n fontSize: size && `${size}px`\n }\">\n <circle\n :class=\"$style.spinnerTrack\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"transparent\"\n stroke-width=\"4\"/>\n\n <circle\n :class=\"$style.spinnerEffect\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"transparent\"\n stroke-width=\"4\"\n stroke-dasharray=\"21 45\"\n stroke-dashoffset=\"30\"\n stroke-linecap=\"round\"/>\n\n <circle\n :class=\"$style.spinnerValue\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"transparent\"\n stroke-width=\"4\"\n stroke-dasharray=\"21 45\"\n stroke-dashoffset=\"30\"\n stroke-linecap=\"round\"/>\n </svg>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Spinner.module.scss';\n\n defineProps<{\n readonly size?: number;\n }>();\n</script>\n","@use '$flux/css/mixin';\n\n@layer flux-base {\n .button {\n display: inline-flex;\n align-items: center;\n flex-grow: 0;\n flex-shrink: 0;\n gap: 12px;\n justify-content: center;\n background: unset;\n border: 1px solid;\n border-radius: var(--radius);\n box-shadow: var(--shadow-px);\n cursor: pointer;\n font: inherit;\n text-decoration: none;\n transition: var(--transition-default);\n transition-property: background, border, box-shadow, color, scale, mixin.focus-ring-transition-properties();\n user-select: none;\n\n @include mixin.focus-ring(2px);\n\n &:active {\n box-shadow: none;\n }\n\n &:focus-visible {\n z-index: 1;\n }\n\n &:disabled,\n &[aria-disabled=true] {\n box-shadow: none;\n opacity: .5;\n pointer-events: none;\n }\n\n &.isSmall {\n height: 36px;\n padding: 0 9px;\n }\n\n &.isMedium {\n height: 42px;\n padding: 0 12px;\n }\n\n &.isLarge {\n height: 48px;\n padding: 0 15px;\n }\n\n &.isXl {\n height: 54px;\n padding: 0 18px;\n }\n\n &.isFilled {\n align-self: stretch;\n }\n\n :local(.spinner) {\n flex-shrink: 0;\n\n &:only-child {\n margin-left: -2px;\n margin-right: -2px;\n }\n }\n }\n\n .buttonIcon {\n margin: 1px;\n flex-shrink: 0;\n font-size: 18px;\n\n &:only-child {\n margin-left: -1px;\n margin-right: -1px;\n }\n }\n\n .buttonLabel {\n display: inline-block;\n font-weight: 500;\n text-align: center;\n\n &:only-child {\n margin-left: 6px;\n margin-right: 6px;\n min-width: 42px;\n }\n }\n\n .button .badge {\n &:first-child {\n margin-left: -6px;\n }\n\n &:last-child {\n margin-right: -6px;\n }\n }\n}\n","<template>\n <FluxPressable\n :component-type=\"type\"\n :class=\"clsx(\n cssClass,\n isFilled && $style.isFilled,\n size === 'small' && $style.isSmall,\n size === 'medium' && $style.isMedium,\n size === 'large' && $style.isLarge,\n size === 'xl' && $style.isXl\n )\"\n :type=\"isSubmit ? 'submit' : 'button'\"\n :aria-disabled=\"disabled ? true : undefined\"\n :disabled=\"disabled ? true : undefined\"\n :tabindex=\"disabled ? -1 : tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"onClick\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\">\n <slot name=\"before\"/>\n\n <slot name=\"iconLeading\">\n <FluxSpinner\n v-if=\"isLoading && (iconLeading || !iconTrailing)\"\n :size=\"20\"/>\n\n <FluxIcon\n v-else-if=\"iconLeading\"\n :class=\"cssClassIcon\"\n :name=\"iconLeading\"/>\n </slot>\n\n <slot name=\"label\">\n <span\n v-if=\"label\"\n :class=\"cssClassLabel\">\n {{ label }}\n </span>\n </slot>\n\n <slot name=\"iconTrailing\">\n <FluxSpinner\n v-if=\"isLoading && (!iconLeading && iconTrailing)\"\n :size=\"20\"/>\n\n <FluxIcon\n v-else-if=\"iconTrailing\"\n :class=\"cssClassIcon\"\n :name=\"iconTrailing\"/>\n </slot>\n\n <slot name=\"after\"/>\n </FluxPressable>\n</template>\n\n<script lang=\"ts\">\n export const SLOTS = ['default', 'after', 'before', 'iconLeading', 'iconTrailing', 'label'] as const;\n</script>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { toRef, unref } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/base/Button.module.scss';\n\n const emit = defineEmits<FluxButtonEmits>();\n\n const {\n disabled: componentDisabled,\n isLoading,\n size = 'medium',\n tabindex = 0,\n type = 'button'\n } = defineProps<FluxButtonProps & {\n readonly cssClass: string;\n readonly cssClassIcon: string;\n readonly cssClassLabel: string;\n }>();\n\n defineSlots<FluxButtonSlots>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n\n function onClick(evt: MouseEvent): void {\n if (unref(disabled) || isLoading) {\n evt.preventDefault();\n evt.stopPropagation();\n return;\n }\n\n emit('click', evt);\n }\n\n function onMouseEnter(evt: MouseEvent): void {\n emit('mouseenter', evt);\n }\n\n function onMouseLeave(evt: MouseEvent): void {\n emit('mouseleave', evt);\n }\n</script>\n","<template>\n <FluxPressable\n :component-type=\"type\"\n :class=\"clsx(\n cssClass,\n isFilled && $style.isFilled,\n size === 'small' && $style.isSmall,\n size === 'medium' && $style.isMedium,\n size === 'large' && $style.isLarge,\n size === 'xl' && $style.isXl\n )\"\n :type=\"isSubmit ? 'submit' : 'button'\"\n :aria-disabled=\"disabled ? true : undefined\"\n :disabled=\"disabled ? true : undefined\"\n :tabindex=\"disabled ? -1 : tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"onClick\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\">\n <slot name=\"before\"/>\n\n <slot name=\"iconLeading\">\n <FluxSpinner\n v-if=\"isLoading && (iconLeading || !iconTrailing)\"\n :size=\"20\"/>\n\n <FluxIcon\n v-else-if=\"iconLeading\"\n :class=\"cssClassIcon\"\n :name=\"iconLeading\"/>\n </slot>\n\n <slot name=\"label\">\n <span\n v-if=\"label\"\n :class=\"cssClassLabel\">\n {{ label }}\n </span>\n </slot>\n\n <slot name=\"iconTrailing\">\n <FluxSpinner\n v-if=\"isLoading && (!iconLeading && iconTrailing)\"\n :size=\"20\"/>\n\n <FluxIcon\n v-else-if=\"iconTrailing\"\n :class=\"cssClassIcon\"\n :name=\"iconTrailing\"/>\n </slot>\n\n <slot name=\"after\"/>\n </FluxPressable>\n</template>\n\n<script lang=\"ts\">\n export const SLOTS = ['default', 'after', 'before', 'iconLeading', 'iconTrailing', 'label'] as const;\n</script>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { toRef, unref } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/base/Button.module.scss';\n\n const emit = defineEmits<FluxButtonEmits>();\n\n const {\n disabled: componentDisabled,\n isLoading,\n size = 'medium',\n tabindex = 0,\n type = 'button'\n } = defineProps<FluxButtonProps & {\n readonly cssClass: string;\n readonly cssClassIcon: string;\n readonly cssClassLabel: string;\n }>();\n\n defineSlots<FluxButtonSlots>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n\n function onClick(evt: MouseEvent): void {\n if (unref(disabled) || isLoading) {\n evt.preventDefault();\n evt.stopPropagation();\n return;\n }\n\n emit('click', evt);\n }\n\n function onMouseEnter(evt: MouseEvent): void {\n emit('mouseenter', evt);\n }\n\n function onMouseLeave(evt: MouseEvent): void {\n emit('mouseleave', evt);\n }\n</script>\n","@use '$flux/css/mixin';\n\n.action {\n composes: button from './base/Button.module.scss';\n\n height: 30px;\n width: 30px;\n padding-left: 6px;\n padding-right: 6px;\n border: 0;\n border-radius: var(--radius-half);\n box-shadow: none;\n\n @include mixin.hover {\n background: var(--gray-100);\n }\n\n &:active {\n background: var(--gray-200);\n }\n\n .spinner {\n font-size: 24px;\n }\n}\n\n.actionIcon {\n composes: buttonIcon from './base/Button.module.scss';\n\n color: var(--foreground);\n font-size: 18px;\n}\n\n.action.isDestructive .actionIcon {\n color: var(--danger-600);\n}\n\n.actionLabel {\n composes: buttonLabel from './base/Button.module.scss';\n\n color: var(--foreground);\n}\n\n.actionBar {\n flex-wrap: wrap;\n\n .separator {\n margin-top: 9px;\n margin-bottom: 9px;\n }\n\n @include mixin.breakpoint-up(sm) {\n > .formInput {\n max-width: 240px;\n }\n }\n}\n\n.basePaneStructure > .actionBar {\n padding: 12px 18px;\n background: var(--gray-50);\n border: 1px solid var(--gray-100);\n border-left: 0;\n border-right: 0;\n\n &:first-child {\n border-top: 0;\n border-top-left-radius: var(--radius);\n border-top-right-radius: var(--radius);\n }\n\n &:last-child {\n border-bottom: 0;\n border-bottom-left-radius: var(--radius);\n border-bottom-right-radius: var(--radius);\n }\n}\n\n.actionPane {\n container: actionPane / inline-size;\n\n width: 100%;\n}\n\n.actionPaneGrid {\n display: grid;\n padding: 36px;\n gap: 36px;\n grid-template-columns: 1fr auto;\n\n @container actionPane (max-width: 540px) {\n grid-template-columns: 1fr;\n }\n}\n\n.actionPaneBody {\n position: relative;\n text-wrap: pretty;\n\n &:local(.paneBody) {\n padding: 0;\n }\n}\n","<template>\n <FluxButton\n :=\"{disabled, isLoading, label, href, rel, target, to, type}\"\n :css-class=\"$style.action\"\n :css-class-icon=\"$style.actionIcon\"\n :css-class-label=\"$style.actionLabel\"\n :class=\"isDestructive && $style.isDestructive\"\n :icon-leading=\"icon\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxIconName } from '@flux-ui/types';\n import FluxButton from './FluxButton.vue';\n import $style from '$flux/css/component/Action.module.scss';\n\n defineEmits<FluxButtonEmits>();\n\n defineProps<Omit<FluxButtonProps, 'iconLeading' | 'iconTrailing' | 'isFilled' | 'size'> & {\n readonly icon?: FluxIconName;\n readonly isDestructive?: boolean;\n }>();\n</script>\n","<template>\n <FluxButton\n :=\"{disabled, isLoading, label, href, rel, target, to, type}\"\n :css-class=\"$style.action\"\n :css-class-icon=\"$style.actionIcon\"\n :css-class-label=\"$style.actionLabel\"\n :class=\"isDestructive && $style.isDestructive\"\n :icon-leading=\"icon\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxIconName } from '@flux-ui/types';\n import FluxButton from './FluxButton.vue';\n import $style from '$flux/css/component/Action.module.scss';\n\n defineEmits<FluxButtonEmits>();\n\n defineProps<Omit<FluxButtonProps, 'iconLeading' | 'iconTrailing' | 'isFilled' | 'size'> & {\n readonly icon?: FluxIconName;\n readonly isDestructive?: boolean;\n }>();\n</script>\n","@use '$flux/css/mixin';\n\n.primaryButton {\n composes: button from './base/Button.module.scss';\n\n background: var(--primary-600);\n border-color: var(--primary-700);\n box-shadow: 0 1px 1px rgb(from var(--primary-600) r g b / .25);\n color: var(--primary-25);\n\n @include mixin.hover {\n background: var(--primary-700);\n border-color: var(--primary-800);\n }\n\n @include mixin.button-active(var(--primary-800));\n\n .spinner {\n --track: var(--primary-700);\n --value: var(--primary-25);\n }\n}\n\n.primaryButtonIcon {\n composes: buttonIcon from './base/Button.module.scss';\n\n color: var(--primary-25);\n}\n\n.primaryButtonLabel {\n composes: buttonLabel from './base/Button.module.scss';\n}\n\n.secondaryButton {\n composes: button from './base/Button.module.scss';\n\n background: var(--surface);\n border-color: var(--surface-stroke);\n color: var(--foreground);\n\n @include mixin.hover {\n background: var(--surface-hover);\n }\n\n @include mixin.button-active(var(--surface-active));\n}\n\n.secondaryButtonIcon {\n composes: buttonIcon from './base/Button.module.scss';\n\n color: var(--foreground);\n}\n\n.secondaryButtonLabel {\n composes: buttonLabel from './base/Button.module.scss';\n}\n\n.destructiveButton {\n composes: button from './base/Button.module.scss';\n\n background: var(--surface);\n border-color: var(--surface-stroke);\n color: var(--foreground);\n\n @include mixin.hover {\n background: var(--surface-hover);\n }\n\n @include mixin.button-active(var(--surface-active));\n\n .spinner {\n --value: var(--danger-600);\n }\n}\n\n.destructiveButtonIcon {\n composes: buttonIcon from './base/Button.module.scss';\n\n color: var(--danger-600);\n}\n\n.destructiveButtonLabel {\n composes: buttonLabel from './base/Button.module.scss';\n\n &:only-child {\n color: var(--danger-600);\n }\n}\n\n.secondaryButton,\n.destructiveButton {\n box-shadow: var(--shadow-px), inset 0 -1px rgb(from var(--gray-200) r g b / .15);\n}\n\n.baseLinkButton {\n composes: button from './base/Button.module.scss';\n\n gap: 6px;\n border-color: transparent;\n box-shadow: none;\n\n @include mixin.hover {\n background: var(--surface-hover);\n }\n\n @include mixin.button-active(var(--surface-active));\n}\n\n.primaryLinkButton {\n composes: baseLinkButton;\n\n color: var(--primary-700);\n}\n\n.primaryLinkButtonIcon {\n composes: buttonIcon from './base/Button.module.scss';\n\n color: var(--primary-700);\n}\n\n.primaryLinkButtonLabel {\n composes: buttonLabel from './base/Button.module.scss';\n}\n\n.secondaryLinkButton {\n composes: baseLinkButton;\n\n color: var(--foreground-prominent);\n}\n\n.secondaryLinkButtonIcon {\n composes: buttonIcon from './base/Button.module.scss';\n\n color: var(--foreground);\n}\n\n.secondaryLinkButtonLabel {\n composes: buttonLabel from './base/Button.module.scss';\n}\n\n.linkButton {\n composes: button from './base/Button.module.scss';\n\n display: inline-flex;\n height: unset;\n padding: 0;\n border: 0;\n box-shadow: unset;\n color: var(--primary-600);\n text-decoration: underline;\n text-decoration-thickness: 1px;\n text-underline-offset: 4px;\n\n @include mixin.focus-ring(6px);\n\n @include mixin.hover {\n color: var(--primary-900);\n\n .linkButtonIcon {\n transform: translate3d(6px, 0, 0);\n }\n }\n}\n\n.linkButtonIcon {\n composes: buttonIcon from './base/Button.module.scss';\n\n color: var(--primary-600);\n transition: inherit;\n transition-property: transform;\n\n &.icon {\n font-size: 16px;\n }\n}\n\n.linkButtonLabel {\n composes: buttonLabel from './base/Button.module.scss';\n}\n\n.publishButton {\n composes: primaryButton;\n\n position: relative;\n overflow: hidden;\n}\n\n.publishButtonIcon {\n composes: primaryButtonIcon;\n}\n\n.publishButtonLabel {\n composes: primaryButtonLabel;\n}\n\n.publishButtonAnimation {\n position: relative;\n display: block;\n height: 20px;\n width: 20px;\n align-items: center;\n justify-content: center;\n overflow: visible;\n\n :is(path) {\n fill: currentColor;\n transition: 270ms var(--swift-out);\n }\n}\n\n.publishButton.isDone {\n .publishButtonAnimationArrow {\n animation: publishArrowOut .4s var(--acceleration-curve) both;\n }\n\n .publishButtonAnimationCheck,\n .publishButtonAnimationCircle {\n transition-delay: .5s;\n }\n}\n\n.publishButton.isIdle .publishButtonAnimationCheck {\n opacity: 0;\n}\n\n.publishButton.isLoading {\n .publishButtonAnimationArrow {\n animation: publishArrowIn 1s var(--deceleration-curve) both;\n }\n\n .publishButtonAnimationCheck,\n .publishButtonAnimationCircle {\n opacity: 0;\n }\n}\n\n.publishButtonCloud {\n position: absolute;\n top: 50%;\n opacity: 0;\n animation: publish .6s linear infinite;\n transition: 360ms var(--swift-out) 210ms;\n\n &:nth-child(2) {\n left: -12px;\n animation-delay: -.3s;\n }\n\n &:nth-child(3) {\n right: -12px;\n }\n}\n\n.publishButton.isLoading .publishButtonCloud {\n opacity: .5;\n}\n\n.buttonGroup {\n display: inline-flex;\n width: min-content;\n flex-grow: 0;\n flex-shrink: 0;\n z-index: 0;\n\n :local(.button) {\n border-radius: 0;\n\n &:first-child {\n border-top-left-radius: var(--radius);\n border-bottom-left-radius: var(--radius);\n }\n\n &:last-child {\n border-top-right-radius: var(--radius);\n border-bottom-right-radius: var(--radius);\n }\n }\n\n :local(.primaryButton) {\n z-index: 1;\n }\n\n :local(.button) + :local(.button) {\n margin-left: -1px;\n }\n}\n\n@keyframes publish {\n from {\n translate: 0 calc(-30px - 50%);\n }\n\n to {\n translate: 0 calc(30px - 50%);\n }\n}\n\n@keyframes publishArrowIn {\n 25% {\n translate: 0 128px;\n }\n\n 100% {\n translate: 0 0;\n }\n}\n\n@keyframes publishArrowOut {\n to {\n opacity: 0;\n translate: 0 -512px;\n }\n}\n","<template>\n <div :class=\"$style.buttonGroup\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.buttonGroup\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isFilled, isLoading, isSubmit, label, size, href, rel, target, to}\"\n :css-class=\"$style.destructiveButton\"\n :css-class-icon=\"$style.destructiveButtonIcon\"\n :css-class-label=\"$style.destructiveButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineEmits<FluxButtonEmits>();\n defineProps<FluxButtonProps>();\n defineSlots<FluxButtonSlots>();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isFilled, isLoading, isSubmit, label, size, href, rel, target, to}\"\n :css-class=\"$style.destructiveButton\"\n :css-class-icon=\"$style.destructiveButtonIcon\"\n :css-class-label=\"$style.destructiveButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineEmits<FluxButtonEmits>();\n defineProps<FluxButtonProps>();\n defineSlots<FluxButtonSlots>();\n</script>\n","@use '../../css/mixin';\n\n.pane {\n composes: basePaneStructure from './base/Pane.module.scss';\n}\n\n.paneDefault {\n composes: pane;\n\n box-shadow: var(--shadow-sm);\n}\n\n.paneFlat {\n composes: pane;\n}\n\n.paneWell {\n composes: pane;\n\n --surface: var(--background);\n}\n\n:is(.paneDefault, .paneFlat, .paneWell):is(a) {\n color: currentColor;\n text-decoration: unset;\n\n @include mixin.hover {\n color: currentColor;\n }\n}\n\n:is(.paneDefault, .paneFlat, .paneWell):is(button) {\n padding: 0;\n}\n\n:is(.paneDefault, .paneFlat, .paneWell):is(a, button) {\n cursor: pointer;\n transition: 210ms var(--swift-out);\n transition-property: background, box-shadow;\n\n &:hover {\n box-shadow: var(--shadow-lg);\n }\n\n &:active {\n box-shadow: var(--shadow-xs);\n }\n}\n\n.paneHeader {\n composes: basePaneElement from './base/Pane.module.scss';\n\n display: flex;\n padding: 18px 18px 0;\n gap: 15px;\n\n &:only-child {\n padding: 18px;\n }\n\n &:has(+ :not(.paneBody)) {\n padding: 18px;\n }\n}\n\n.paneHeaderCaption {\n display: flex;\n flex-flow: column;\n flex-grow: 1;\n line-height: 24px;\n\n :is(strong) {\n color: var(--foreground-prominent);\n font-weight: 600;\n\n &:has(+ :is(span)) {\n font-size: 16px;\n }\n }\n\n :is(span) {\n font-size: 14px;\n }\n}\n\n.paneHeaderIcon {\n margin-top: 2px;\n color: var(--primary-600);\n}\n\n.paneBody {\n composes: basePaneElement from './base/Pane.module.scss';\n\n padding: 18px;\n}\n\n.paneBody + .paneBody {\n padding-top: 0;\n}\n\n.paneFooter {\n composes: basePaneElement from './base/Pane.module.scss';\n\n display: flex;\n padding: 18px;\n gap: 9px;\n background: var(--gray-50);\n border-top: 1px solid var(--gray-100);\n}\n\n.paneLoader {\n composes: basePaneLoader from './base/Pane.module.scss';\n}\n\n.paneTag {\n position: absolute;\n top: 15px;\n right: 15px;\n padding: 6px 9px;\n background: var(--gray-900);\n border-radius: var(--radius-half);\n color: var(--gray-25);\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 1px;\n line-height: 1;\n text-transform: uppercase;\n}\n\n.paneMedia {\n position: relative;\n overflow: hidden;\n z-index: 0;\n\n &::after {\n position: absolute;\n inset: 0;\n content: '';\n border: 1px solid var(--surface-stroke-out);\n border-radius: inherit;\n z-index: 1;\n }\n}\n\n.paneMediaDefault {\n composes: paneMedia;\n\n &:first-child {\n margin: -1px;\n margin-bottom: 0;\n border-top-left-radius: var(--radius);\n border-top-right-radius: var(--radius);\n }\n\n &:not(:first-child)::after {\n border-top: 0;\n }\n\n &:not(:last-child)::after {\n border-bottom: 0;\n }\n}\n\n.paneMediaInset {\n composes: paneMedia;\n\n margin: 18px;\n border-radius: var(--radius-half);\n\n &:not(:first-child) {\n margin-top: 0;\n }\n\n &:not(:last-child) {\n margin-bottom: 0;\n }\n}\n\n.paneMediaImage {\n display: block;\n height: auto;\n width: 100%;\n margin: 0;\n aspect-ratio: 2 / 1;\n object-fit: cover;\n object-position: center;\n}\n\n.paneGroup {\n position: relative;\n}\n\n.paneGroup + .paneGroup {\n border-top: 1px solid var(--surface-stroke);\n}\n\n.paneIllustration {\n --mask: linear-gradient(to bottom, black, transparent);\n --mask-content: linear-gradient(to bottom, black, rgb(0 0 0 / .75), transparent);\n\n position: relative;\n border-radius: calc(var(--radius) - 1px);\n\n &:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n\n &:not(:last-child) {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n}\n\n.paneIllustrationContent {\n position: relative;\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n}\n\n.paneIllustrationContentControlled {\n composes: paneIllustrationContent;\n\n overflow: hidden;\n\n -webkit-mask-image: var(--mask-content);\n mask-image: var(--mask-content);\n}\n\n.paneIllustrationMagic {\n position: absolute;\n inset: -1px;\n border-radius: inherit;\n}\n\n.paneIllustrationMasked {\n composes: paneIllustration;\n\n .paneIllustrationMagic {\n -webkit-mask-image: var(--mask);\n mask-image: var(--mask);\n }\n}\n\n.paneIllustration + :where(.paneBody, .paneHeader) {\n position: relative;\n margin-top: -60px;\n}\n\n.paneBody:has(.iconBoxed:only-child):has(+ .paneHeader) {\n padding-bottom: 0;\n}\n","<template>\n <div :class=\"CLASS_MAP[variant]\">\n <slot/>\n\n <slot\n v-if=\"isLoading\"\n name=\"loader\">\n <div :class=\"$style.paneLoader\">\n <FluxSpinner/>\n </div>\n </slot>\n\n <div\n v-if=\"tag\"\n :class=\"$style.paneTag\">\n {{ tag }}\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n const CLASS_MAP = {\n default: $style.paneDefault,\n flat: $style.paneFlat,\n well: $style.paneWell\n } as const;\n\n const {\n variant = 'default'\n } = defineProps<{\n readonly isLoading?: boolean;\n readonly tag?: string;\n readonly variant?: 'default' | 'flat' | 'well';\n }>();\n\n defineSlots<{\n default(): VNode[];\n loader(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"CLASS_MAP[variant]\">\n <slot/>\n\n <slot\n v-if=\"isLoading\"\n name=\"loader\">\n <div :class=\"$style.paneLoader\">\n <FluxSpinner/>\n </div>\n </slot>\n\n <div\n v-if=\"tag\"\n :class=\"$style.paneTag\">\n {{ tag }}\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n const CLASS_MAP = {\n default: $style.paneDefault,\n flat: $style.paneFlat,\n well: $style.paneWell\n } as const;\n\n const {\n variant = 'default'\n } = defineProps<{\n readonly isLoading?: boolean;\n readonly tag?: string;\n readonly variant?: 'default' | 'flat' | 'well';\n }>();\n\n defineSlots<{\n default(): VNode[];\n loader(): VNode[];\n }>();\n</script>\n",".flyout {\n display: contents;\n}\n\n.flyoutDialog {\n top: var(--pane-y);\n left: var(--pane-x);\n margin: 0;\n padding: 30px;\n background: unset;\n border: 0;\n font-size: 1rem;\n\n &::backdrop {\n background: unset;\n }\n}\n\n.flyoutPane {\n max-height: calc(100dvh - 120px);\n box-shadow: var(--shadow-md);\n overflow: auto;\n transform: translate3d(var(--pane-mx), var(--pane-my), 0);\n\n &.isAutoWidth {\n width: var(--opener-width);\n }\n\n &.isClosing {\n animation: close 210ms var(--swift-out) both;\n }\n\n &.isOpening {\n animation: open 210ms var(--deceleration-curve) both;\n }\n}\n\n@keyframes close {\n to {\n opacity: 0;\n }\n}\n\n@keyframes open {\n from {\n opacity: 0;\n transform: translate3d(0, 0, 0)\n }\n}\n\n@keyframes mobileClose {\n to {\n opacity: 0;\n transform: translate3d(0, 100%, 0)\n }\n}\n\n@keyframes mobileOpen {\n from {\n opacity: 0;\n transform: translate3d(0, 100%, 0)\n }\n}\n","<template>\n <div\n ref=\"mount\"\n :class=\"$style.flyout\"\n :style=\"{\n '--opener-width': `${openerWidth}px`,\n '--pane-mx': `${paneMarginX}px`,\n '--pane-my': `${paneMarginY}px`,\n '--pane-x': `${paneX - 30}px`,\n '--pane-y': `${paneY - 30}px`\n }\">\n <slot\n name=\"opener\"\n v-bind=\"{close, open, toggle, isOpen: isOpen || isOpening || isClosing}\"/>\n\n <dialog\n ref=\"dialog\"\n :class=\"$style.flyoutDialog\"\n @click=\"onDialogBackdropClick\"\n @keydown.prevent.esc=\"close\">\n <FluxPane\n v-if=\"isOpen\"\n ref=\"pane\"\n :class=\"clsx(\n $style.flyoutPane,\n isAutoWidth && $style.isAutoWidth,\n isClosing && $style.isClosing,\n isOpening && $style.isOpening\n )\"\n :style=\"{\n width: `${width}px`\n }\">\n <slot v-bind=\"{close, paneX, paneY, openerWidth, openerHeight}\"/>\n </FluxPane>\n </dialog>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { isSSR, unrefTemplateElement, useEventListener, useFocusTrap } from '@flux-ui/internals';\n import type { FluxDirection } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { provide, ref, unref, useTemplateRef, type VNode, watch } from 'vue';\n import { FluxFlyoutInjectionKey } from '$flux/data';\n import FluxPane from './FluxPane.vue';\n import $style from '$flux/css/component/Flyout.module.scss';\n\n const {\n direction = 'vertical',\n margin = 9\n } = defineProps<{\n readonly direction?: FluxDirection;\n readonly isAutoWidth?: boolean;\n readonly margin?: number;\n readonly width?: number | string;\n }>();\n\n defineSlots<{\n default(props: {\n close(): void;\n\n readonly paneX: number;\n readonly paneY: number;\n readonly openerWidth: number;\n readonly openerHeight: number;\n }): VNode[];\n\n opener(props: {\n close(): void;\n open(): void;\n toggle(): void;\n\n readonly isOpen: boolean;\n }): VNode[];\n }>();\n\n const dialogRef = useTemplateRef('dialog');\n const mountRef = useTemplateRef('mount');\n const paneRef = useTemplateRef('pane');\n\n const isClosing = ref(false);\n const isOpening = ref(false);\n const isOpen = ref(false);\n const openerWidth = ref(0);\n const openerHeight = ref(0);\n const paneX = ref(0);\n const paneY = ref(0);\n const paneMarginX = ref(0);\n const paneMarginY = ref(0);\n\n !isSSR && useEventListener(ref(window), 'resize', () => unref(isOpen) && reposition());\n useFocusTrap(paneRef);\n\n function close(): void {\n const pane = unrefTemplateElement(paneRef);\n\n if (!pane) {\n return;\n }\n\n pane.addEventListener('animationend', () => {\n isClosing.value = false;\n isOpen.value = false;\n }, {once: true});\n\n isClosing.value = true;\n }\n\n function open(): void {\n const mount = unref(mountRef)!;\n const {width, height} = mount.children[0].getBoundingClientRect();\n\n isOpen.value = true;\n openerWidth.value = width;\n openerHeight.value = height;\n\n requestAnimationFrame(() => {\n const pane = unrefTemplateElement(paneRef)!;\n\n pane.addEventListener('animationend', () => {\n isOpening.value = false;\n }, {once: true});\n\n isOpening.value = true;\n });\n\n requestAnimationFrame(reposition);\n }\n\n function reposition(): void {\n const mount = unref(mountRef)!;\n const pane = unrefTemplateElement(paneRef)!;\n const {top, left, width, height} = mount.children[0].getBoundingClientRect();\n const {width: paneWidth, height: paneHeight} = pane.getBoundingClientRect();\n\n let x: number, y: number, mx = 0, my = 0;\n\n if (direction === 'horizontal') {\n x = left + width;\n y = top + height / 2 - paneHeight / 2;\n mx = margin;\n\n if (x + paneWidth > innerWidth - 12) {\n x = left - paneWidth;\n mx = -mx;\n }\n } else {\n x = left + width / 2 - paneWidth / 2;\n y = top + height;\n my = margin;\n\n if (y + paneHeight > innerHeight - 12) {\n y = top - paneHeight;\n my = -my;\n }\n }\n\n paneX.value = Math.max(12, Math.min(innerWidth - paneWidth - 12, x));\n paneY.value = Math.max(12, Math.min(innerHeight - paneHeight - 12, y));\n paneMarginX.value = mx;\n paneMarginY.value = my;\n }\n\n function toggle(): void {\n if (isOpen.value) {\n close();\n } else {\n open();\n }\n }\n\n function onDialogBackdropClick(evt: Event): void {\n const target = evt.target as HTMLElement;\n\n if (target.tagName !== 'DIALOG') {\n return;\n }\n\n close();\n }\n\n watch(isOpen, (isOpen, _, onCleanup) => {\n const dialog = unref(dialogRef)!;\n\n if (isOpen && !dialog.open) {\n dialog.showModal();\n\n window.addEventListener('scroll', reposition, {passive: true});\n onCleanup(() => window.removeEventListener('scroll', reposition));\n } else if (!isOpen && dialog.open) {\n dialog.close();\n }\n });\n\n provide(FluxFlyoutInjectionKey, {\n isClosing,\n isOpen,\n isOpening\n });\n\n defineExpose({\n close,\n open,\n toggle\n });\n</script>\n","<template>\n <div\n ref=\"mount\"\n :class=\"$style.flyout\"\n :style=\"{\n '--opener-width': `${openerWidth}px`,\n '--pane-mx': `${paneMarginX}px`,\n '--pane-my': `${paneMarginY}px`,\n '--pane-x': `${paneX - 30}px`,\n '--pane-y': `${paneY - 30}px`\n }\">\n <slot\n name=\"opener\"\n v-bind=\"{close, open, toggle, isOpen: isOpen || isOpening || isClosing}\"/>\n\n <dialog\n ref=\"dialog\"\n :class=\"$style.flyoutDialog\"\n @click=\"onDialogBackdropClick\"\n @keydown.prevent.esc=\"close\">\n <FluxPane\n v-if=\"isOpen\"\n ref=\"pane\"\n :class=\"clsx(\n $style.flyoutPane,\n isAutoWidth && $style.isAutoWidth,\n isClosing && $style.isClosing,\n isOpening && $style.isOpening\n )\"\n :style=\"{\n width: `${width}px`\n }\">\n <slot v-bind=\"{close, paneX, paneY, openerWidth, openerHeight}\"/>\n </FluxPane>\n </dialog>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { isSSR, unrefTemplateElement, useEventListener, useFocusTrap } from '@flux-ui/internals';\n import type { FluxDirection } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { provide, ref, unref, useTemplateRef, type VNode, watch } from 'vue';\n import { FluxFlyoutInjectionKey } from '$flux/data';\n import FluxPane from './FluxPane.vue';\n import $style from '$flux/css/component/Flyout.module.scss';\n\n const {\n direction = 'vertical',\n margin = 9\n } = defineProps<{\n readonly direction?: FluxDirection;\n readonly isAutoWidth?: boolean;\n readonly margin?: number;\n readonly width?: number | string;\n }>();\n\n defineSlots<{\n default(props: {\n close(): void;\n\n readonly paneX: number;\n readonly paneY: number;\n readonly openerWidth: number;\n readonly openerHeight: number;\n }): VNode[];\n\n opener(props: {\n close(): void;\n open(): void;\n toggle(): void;\n\n readonly isOpen: boolean;\n }): VNode[];\n }>();\n\n const dialogRef = useTemplateRef('dialog');\n const mountRef = useTemplateRef('mount');\n const paneRef = useTemplateRef('pane');\n\n const isClosing = ref(false);\n const isOpening = ref(false);\n const isOpen = ref(false);\n const openerWidth = ref(0);\n const openerHeight = ref(0);\n const paneX = ref(0);\n const paneY = ref(0);\n const paneMarginX = ref(0);\n const paneMarginY = ref(0);\n\n !isSSR && useEventListener(ref(window), 'resize', () => unref(isOpen) && reposition());\n useFocusTrap(paneRef);\n\n function close(): void {\n const pane = unrefTemplateElement(paneRef);\n\n if (!pane) {\n return;\n }\n\n pane.addEventListener('animationend', () => {\n isClosing.value = false;\n isOpen.value = false;\n }, {once: true});\n\n isClosing.value = true;\n }\n\n function open(): void {\n const mount = unref(mountRef)!;\n const {width, height} = mount.children[0].getBoundingClientRect();\n\n isOpen.value = true;\n openerWidth.value = width;\n openerHeight.value = height;\n\n requestAnimationFrame(() => {\n const pane = unrefTemplateElement(paneRef)!;\n\n pane.addEventListener('animationend', () => {\n isOpening.value = false;\n }, {once: true});\n\n isOpening.value = true;\n });\n\n requestAnimationFrame(reposition);\n }\n\n function reposition(): void {\n const mount = unref(mountRef)!;\n const pane = unrefTemplateElement(paneRef)!;\n const {top, left, width, height} = mount.children[0].getBoundingClientRect();\n const {width: paneWidth, height: paneHeight} = pane.getBoundingClientRect();\n\n let x: number, y: number, mx = 0, my = 0;\n\n if (direction === 'horizontal') {\n x = left + width;\n y = top + height / 2 - paneHeight / 2;\n mx = margin;\n\n if (x + paneWidth > innerWidth - 12) {\n x = left - paneWidth;\n mx = -mx;\n }\n } else {\n x = left + width / 2 - paneWidth / 2;\n y = top + height;\n my = margin;\n\n if (y + paneHeight > innerHeight - 12) {\n y = top - paneHeight;\n my = -my;\n }\n }\n\n paneX.value = Math.max(12, Math.min(innerWidth - paneWidth - 12, x));\n paneY.value = Math.max(12, Math.min(innerHeight - paneHeight - 12, y));\n paneMarginX.value = mx;\n paneMarginY.value = my;\n }\n\n function toggle(): void {\n if (isOpen.value) {\n close();\n } else {\n open();\n }\n }\n\n function onDialogBackdropClick(evt: Event): void {\n const target = evt.target as HTMLElement;\n\n if (target.tagName !== 'DIALOG') {\n return;\n }\n\n close();\n }\n\n watch(isOpen, (isOpen, _, onCleanup) => {\n const dialog = unref(dialogRef)!;\n\n if (isOpen && !dialog.open) {\n dialog.showModal();\n\n window.addEventListener('scroll', reposition, {passive: true});\n onCleanup(() => window.removeEventListener('scroll', reposition));\n } else if (!isOpen && dialog.open) {\n dialog.close();\n }\n });\n\n provide(FluxFlyoutInjectionKey, {\n isClosing,\n isOpen,\n isOpening\n });\n\n defineExpose({\n close,\n open,\n toggle\n });\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isFilled, isLoading, isSubmit, label, size, href, rel, target, to}\"\n :css-class=\"$style.secondaryButton\"\n :css-class-icon=\"$style.secondaryButtonIcon\"\n :css-class-label=\"$style.secondaryButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineEmits<FluxButtonEmits>();\n defineProps<FluxButtonProps>();\n defineSlots<FluxButtonSlots>();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isFilled, isLoading, isSubmit, label, size, href, rel, target, to}\"\n :css-class=\"$style.secondaryButton\"\n :css-class-icon=\"$style.secondaryButtonIcon\"\n :css-class-label=\"$style.secondaryButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineEmits<FluxButtonEmits>();\n defineProps<FluxButtonProps>();\n defineSlots<FluxButtonSlots>();\n</script>\n","@use '$flux/css/mixin';\n\n.aspectRatio {\n position: relative;\n flex-shrink: 0;\n\n > * {\n position: absolute;\n height: 100%;\n width: 100%;\n object-fit: cover;\n object-position: center;\n }\n}\n\n.container {\n margin-left: auto;\n margin-right: auto;\n padding-left: var(--gutter);\n padding-right: var(--gutter);\n width: 100%;\n\n @include mixin.breakpoint-max-widths;\n}\n\n.column {\n display: flex;\n flex-flow: column;\n gap: var(--gap, 0);\n}\n\n.row {\n display: flex;\n gap: var(--gap, 0);\n}\n\n.spacer {\n flex-grow: 1;\n}\n\n.stack {\n gap: var(--gap, 0);\n\n &.isCentered {\n place-content: center;\n place-items: center;\n }\n\n &.isFill {\n width: 100%;\n }\n\n &.isWrapping {\n flex-wrap: wrap;\n }\n}\n\n.stackHorizontal {\n composes: stack;\n\n display: flex;\n}\n\n.stackVertical {\n composes: stack;\n\n display: flex;\n flex-flow: column;\n}\n","<template>\n <div :class=\"$style.spacer\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Layout.module.scss';\n</script>\n","<template>\n <div :class=\"$style.spacer\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Layout.module.scss';\n</script>\n","<template>\n <Component\n :is=\"tag ?? 'div'\"\n :class=\"clsx(\n direction === 'horizontal' && $style.stackHorizontal,\n direction === 'vertical' && $style.stackVertical,\n isCentered && $style.isCentered,\n isFill && $style.isFill,\n isWrapping && $style.isWrapping\n )\"\n :style=\"{\n '--gap': gap != null ? `${gap}px` : undefined\n }\">\n <slot/>\n </Component>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxDirection } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import $style from '$flux/css/component/Layout.module.scss';\n\n const {\n direction = 'vertical',\n gap = 18\n } = defineProps<{\n readonly direction?: FluxDirection;\n readonly gap?: number;\n readonly isCentered?: boolean;\n readonly isFill?: boolean;\n readonly isWrapping?: boolean;\n readonly tag?: keyof HTMLElementTagNameMap;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Component\n :is=\"tag ?? 'div'\"\n :class=\"clsx(\n direction === 'horizontal' && $style.stackHorizontal,\n direction === 'vertical' && $style.stackVertical,\n isCentered && $style.isCentered,\n isFill && $style.isFill,\n isWrapping && $style.isWrapping\n )\"\n :style=\"{\n '--gap': gap != null ? `${gap}px` : undefined\n }\">\n <slot/>\n </Component>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxDirection } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import $style from '$flux/css/component/Layout.module.scss';\n\n const {\n direction = 'vertical',\n gap = 18\n } = defineProps<{\n readonly direction?: FluxDirection;\n readonly gap?: number;\n readonly isCentered?: boolean;\n readonly isFill?: boolean;\n readonly isWrapping?: boolean;\n readonly tag?: keyof HTMLElementTagNameMap;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<script lang=\"ts\">\n import { defineComponent, getCurrentInstance, onMounted, onUnmounted, type PropType, ref, type SlotsType, type VNode } from 'vue';\n import { addTooltip, removeTooltip } from '$flux/data';\n\n export default defineComponent({\n props: {\n content: String as PropType<string | undefined>,\n direction: String as PropType<'horizontal' | 'vertical'>\n },\n slots: Object as SlotsType<{\n content: () => VNode[],\n default: () => VNode[],\n }>,\n setup(props, {slots}) {\n const instance = getCurrentInstance()!;\n\n const tooltipId = ref<number | null>(null);\n\n onMounted(() => {\n const elm = instance.proxy!.$el;\n elm.addEventListener('mouseenter', onHover, {passive: true});\n elm.addEventListener('mouseleave', onLeave, {passive: true});\n window.addEventListener('scroll', onLeave, {capture: true});\n });\n\n onUnmounted(() => {\n const elm = instance.proxy!.$el;\n elm.removeEventListener('mouseenter', onHover);\n elm.removeEventListener('mouseleave', onLeave);\n window.removeEventListener('scroll', onLeave, {capture: true});\n onLeave();\n });\n\n function onHover(): void {\n onLeave();\n\n if ((props.content?.trim().length ?? 0) === 0 && !slots.content) {\n return;\n }\n\n tooltipId.value = addTooltip({\n content: props.content,\n contentSlot: slots.content,\n direction: props.direction || 'vertical',\n origin: instance.proxy?.$el\n });\n }\n\n function onLeave(): void {\n if (tooltipId.value) {\n removeTooltip(tooltipId.value);\n }\n }\n\n return () => (slots.default?.() ?? [])[0] ?? null;\n }\n });\n</script>\n","<script lang=\"ts\">\n import { defineComponent, getCurrentInstance, onMounted, onUnmounted, type PropType, ref, type SlotsType, type VNode } from 'vue';\n import { addTooltip, removeTooltip } from '$flux/data';\n\n export default defineComponent({\n props: {\n content: String as PropType<string | undefined>,\n direction: String as PropType<'horizontal' | 'vertical'>\n },\n slots: Object as SlotsType<{\n content: () => VNode[],\n default: () => VNode[],\n }>,\n setup(props, {slots}) {\n const instance = getCurrentInstance()!;\n\n const tooltipId = ref<number | null>(null);\n\n onMounted(() => {\n const elm = instance.proxy!.$el;\n elm.addEventListener('mouseenter', onHover, {passive: true});\n elm.addEventListener('mouseleave', onLeave, {passive: true});\n window.addEventListener('scroll', onLeave, {capture: true});\n });\n\n onUnmounted(() => {\n const elm = instance.proxy!.$el;\n elm.removeEventListener('mouseenter', onHover);\n elm.removeEventListener('mouseleave', onLeave);\n window.removeEventListener('scroll', onLeave, {capture: true});\n onLeave();\n });\n\n function onHover(): void {\n onLeave();\n\n if ((props.content?.trim().length ?? 0) === 0 && !slots.content) {\n return;\n }\n\n tooltipId.value = addTooltip({\n content: props.content,\n contentSlot: slots.content,\n direction: props.direction || 'vertical',\n origin: instance.proxy?.$el\n });\n }\n\n function onLeave(): void {\n if (tooltipId.value) {\n removeTooltip(tooltipId.value);\n }\n }\n\n return () => (slots.default?.() ?? [])[0] ?? null;\n }\n });\n</script>\n","<template>\n <FluxStack\n :class=\"$style.actionBar\"\n direction=\"horizontal\"\n :gap=\"9\">\n <slot name=\"primary\"/>\n <slot name=\"actionsStart\"/>\n\n <FluxSpacer v-if=\"(slots.primary || slots.actionsStart) && (slots.actionsBeforeSearch || slots.search || slots.actionsAfterSearch || slots.filter || slots.actionsEnd)\"/>\n\n <slot name=\"actionsBeforeSearch\"/>\n <slot name=\"search\"/>\n <slot name=\"actionsAfterSearch\"/>\n\n <FluxFlyout v-if=\"slots.filter\">\n <template #opener=\"{close, open, toggle}\">\n <slot\n v-bind=\"{close, open, toggle}\"\n name=\"filterOpener\">\n <FluxButtonGroup>\n <FluxSecondaryButton\n icon-leading=\"filter\"\n :label=\"translate('flux.filter')\"\n @click=\"open\"/>\n\n <FluxTooltip\n v-if=\"isResettable\"\n :content=\"translate('flux.filterReset')\">\n <FluxDestructiveButton\n icon-leading=\"xmark\"\n @click=\"$emit('reset')\"/>\n </FluxTooltip>\n </FluxButtonGroup>\n </slot>\n </template>\n\n <template #default=\"{close, paneX, paneY, openerWidth, openerHeight}\">\n <slot\n name=\"filter\"\n v-bind=\"{close, paneX, paneY, openerWidth, openerHeight}\"/>\n </template>\n </FluxFlyout>\n\n <slot name=\"actionsEnd\"/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import FluxButtonGroup from './FluxButtonGroup.vue';\n import FluxDestructiveButton from './FluxDestructiveButton.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSpacer from './FluxSpacer.vue';\n import FluxStack from './FluxStack.vue';\n import FluxTooltip from './FluxTooltip.vue';\n import $style from '$flux/css/component/Action.module.scss';\n\n defineEmits<{\n reset: [];\n }>();\n\n defineProps<{\n readonly isResettable?: boolean;\n }>();\n\n const slots = defineSlots<{\n primary?(): VNode[];\n actionsEnd?(): VNode[];\n actionsStart?(): VNode[];\n actionsAfterSearch?(): VNode[];\n actionsBeforeSearch?(): VNode[];\n search?(): VNode[];\n\n filter?(props: {\n close(): void;\n\n readonly paneX: number;\n readonly paneY: number;\n readonly openerWidth: number;\n readonly openerHeight: number;\n }): VNode[];\n\n filterOpener?(props: {\n close(): void;\n open(): void;\n toggle(): void;\n }): VNode[];\n }>();\n\n const translate = useTranslate();\n</script>\n","<template>\n <FluxStack\n :class=\"$style.actionBar\"\n direction=\"horizontal\"\n :gap=\"9\">\n <slot name=\"primary\"/>\n <slot name=\"actionsStart\"/>\n\n <FluxSpacer v-if=\"(slots.primary || slots.actionsStart) && (slots.actionsBeforeSearch || slots.search || slots.actionsAfterSearch || slots.filter || slots.actionsEnd)\"/>\n\n <slot name=\"actionsBeforeSearch\"/>\n <slot name=\"search\"/>\n <slot name=\"actionsAfterSearch\"/>\n\n <FluxFlyout v-if=\"slots.filter\">\n <template #opener=\"{close, open, toggle}\">\n <slot\n v-bind=\"{close, open, toggle}\"\n name=\"filterOpener\">\n <FluxButtonGroup>\n <FluxSecondaryButton\n icon-leading=\"filter\"\n :label=\"translate('flux.filter')\"\n @click=\"open\"/>\n\n <FluxTooltip\n v-if=\"isResettable\"\n :content=\"translate('flux.filterReset')\">\n <FluxDestructiveButton\n icon-leading=\"xmark\"\n @click=\"$emit('reset')\"/>\n </FluxTooltip>\n </FluxButtonGroup>\n </slot>\n </template>\n\n <template #default=\"{close, paneX, paneY, openerWidth, openerHeight}\">\n <slot\n name=\"filter\"\n v-bind=\"{close, paneX, paneY, openerWidth, openerHeight}\"/>\n </template>\n </FluxFlyout>\n\n <slot name=\"actionsEnd\"/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import FluxButtonGroup from './FluxButtonGroup.vue';\n import FluxDestructiveButton from './FluxDestructiveButton.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSpacer from './FluxSpacer.vue';\n import FluxStack from './FluxStack.vue';\n import FluxTooltip from './FluxTooltip.vue';\n import $style from '$flux/css/component/Action.module.scss';\n\n defineEmits<{\n reset: [];\n }>();\n\n defineProps<{\n readonly isResettable?: boolean;\n }>();\n\n const slots = defineSlots<{\n primary?(): VNode[];\n actionsEnd?(): VNode[];\n actionsStart?(): VNode[];\n actionsAfterSearch?(): VNode[];\n actionsBeforeSearch?(): VNode[];\n search?(): VNode[];\n\n filter?(props: {\n close(): void;\n\n readonly paneX: number;\n readonly paneY: number;\n readonly openerWidth: number;\n readonly openerHeight: number;\n }): VNode[];\n\n filterOpener?(props: {\n close(): void;\n open(): void;\n toggle(): void;\n }): VNode[];\n }>();\n\n const translate = useTranslate();\n</script>\n","<template>\n <FluxStack\n :direction=\"direction\"\n :gap=\"gap\"\n :is-fill=\"isFill\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxDirection } from '@flux-ui/types';\n import FluxStack from './FluxStack.vue';\n\n const {\n direction = 'horizontal',\n gap = 9\n } = defineProps<{\n readonly direction?: FluxDirection;\n readonly gap?: number;\n readonly isFill?: boolean;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxStack\n :direction=\"direction\"\n :gap=\"gap\"\n :is-fill=\"isFill\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxDirection } from '@flux-ui/types';\n import FluxStack from './FluxStack.vue';\n\n const {\n direction = 'horizontal',\n gap = 9\n } = defineProps<{\n readonly direction?: FluxDirection;\n readonly gap?: number;\n readonly isFill?: boolean;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.paneBody\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.paneBody\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxPane\n :class=\"$style.actionPane\"\n :variant=\"paneVariant\">\n <slot name=\"base\"/>\n\n <div :class=\"$style.actionPaneGrid\">\n <FluxPaneBody :class=\"$style.actionPaneBody\">\n <slot/>\n </FluxPaneBody>\n\n <FluxPaneBody\n v-if=\"slots.buttons\"\n :class=\"$style.actionPaneBody\">\n <FluxButtonStack direction=\"vertical\">\n <slot name=\"buttons\"/>\n </FluxButtonStack>\n </FluxPaneBody>\n </div>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxButtonStack from './FluxButtonStack.vue';\n import FluxPane from './FluxPane.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n import $style from '$flux/css/component/Action.module.scss';\n\n defineProps<{\n readonly paneVariant?: 'default' | 'flat' | 'well';\n }>();\n\n const slots = defineSlots<{\n default?(): VNode[];\n buttons?(): VNode[];\n base?(): VNode[];\n }>();\n</script>\n","<template>\n <FluxPane\n :class=\"$style.actionPane\"\n :variant=\"paneVariant\">\n <slot name=\"base\"/>\n\n <div :class=\"$style.actionPaneGrid\">\n <FluxPaneBody :class=\"$style.actionPaneBody\">\n <slot/>\n </FluxPaneBody>\n\n <FluxPaneBody\n v-if=\"slots.buttons\"\n :class=\"$style.actionPaneBody\">\n <FluxButtonStack direction=\"vertical\">\n <slot name=\"buttons\"/>\n </FluxButtonStack>\n </FluxPaneBody>\n </div>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxButtonStack from './FluxButtonStack.vue';\n import FluxPane from './FluxPane.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n import $style from '$flux/css/component/Action.module.scss';\n\n defineProps<{\n readonly paneVariant?: 'default' | 'flat' | 'well';\n }>();\n\n const slots = defineSlots<{\n default?(): VNode[];\n buttons?(): VNode[];\n base?(): VNode[];\n }>();\n</script>\n","<template>\n <FluxStack\n ref=\"element\"\n direction=\"horizontal\"\n :gap=\"1\"\n tag=\"nav\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useFocusZone } from '@flux-ui/internals';\n import { useTemplateRef, type VNode } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const elementRef = useTemplateRef('element');\n\n useFocusZone(elementRef, {\n direction: 'horizontal'\n });\n</script>\n","<template>\n <FluxStack\n ref=\"element\"\n direction=\"horizontal\"\n :gap=\"1\"\n tag=\"nav\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useFocusZone } from '@flux-ui/internals';\n import { useTemplateRef, type VNode } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const elementRef = useTemplateRef('element');\n\n useFocusZone(elementRef, {\n direction: 'horizontal'\n });\n</script>\n",".adaptiveGroup {\n display: flex;\n overflow: hidden;\n flex-flow: row nowrap;\n gap: var(--gap, 9px);\n min-width: 0;\n}\n\n.adaptiveSlot {\n display: flex;\n overflow: hidden;\n flex-flow: row nowrap;\n min-width: 0;\n}\n\n.adaptiveSlotMeasurer {\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n visibility: hidden;\n flex-flow: row nowrap;\n width: max-content;\n pointer-events: none;\n}\n","<template>\n <div\n ref=\"element\"\n :class=\"$style.adaptiveGroup\"\n :style=\"{'--gap': `${gap}px`}\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { animationFrameDebounce, unrefTemplateElement } from '@flux-ui/internals';\n import { provide, shallowReactive, useTemplateRef, watch, watchEffect } from 'vue';\n import { type FluxAdaptiveGroupChild, FluxAdaptiveGroupInjectionKey } from '$flux/data';\n import $style from '$flux/css/component/AdaptiveSlot.module.scss';\n\n const {\n gap = 9\n } = defineProps<{\n readonly gap?: number;\n }>();\n\n defineSlots<{\n default(): any;\n }>();\n\n const elementRef = useTemplateRef('element');\n const children = shallowReactive(new Map<number, FluxAdaptiveGroupChild>());\n\n const reflow = animationFrameDebounce(() => {\n const element = unrefTemplateElement(elementRef);\n\n if (!element) {\n return;\n }\n\n const available = element.clientWidth;\n const entries = Array.from(children.entries());\n const states = new Map<number, boolean>(entries.map(([uid]) => [uid, true]));\n\n const sorted = [...entries].sort(([, a], [, b]) => a.priority.value - b.priority.value);\n\n const currentTotal = () => {\n let total = 0;\n let visible = 0;\n\n for (const [uid, child] of entries) {\n const width = states.get(uid)\n ? child.desiredDefaultWidth.value\n : child.desiredFallbackWidth.value;\n\n if (width === 0) {\n continue;\n }\n\n total += width;\n visible++;\n }\n\n return total + Math.max(0, visible - 1) * gap;\n };\n\n while (currentTotal() > available) {\n const victim = sorted.find(([uid]) => states.get(uid));\n\n if (!victim) {\n break;\n }\n\n states.set(victim[0], false);\n }\n\n for (const [uid, child] of entries) {\n child.isDefaultVisible.value = !!states.get(uid);\n }\n });\n\n watchEffect(() => {\n for (const child of children.values()) {\n // Touch reactive refs so this effect tracks them.\n void child.priority.value;\n void child.desiredDefaultWidth.value;\n void child.desiredFallbackWidth.value;\n }\n\n reflow();\n });\n\n provide(FluxAdaptiveGroupInjectionKey, {\n register(uid, child) {\n children.set(uid, child);\n },\n unregister(uid) {\n children.delete(uid);\n }\n });\n\n watch(elementRef, (element, _, onCleanup) => {\n if (!element) {\n return;\n }\n\n const observer = new ResizeObserver(reflow);\n observer.observe(element);\n observer.observe(document.documentElement);\n\n onCleanup(() => {\n observer.disconnect();\n });\n }, {immediate: true});\n</script>\n","<template>\n <div\n ref=\"element\"\n :class=\"$style.adaptiveGroup\"\n :style=\"{'--gap': `${gap}px`}\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { animationFrameDebounce, unrefTemplateElement } from '@flux-ui/internals';\n import { provide, shallowReactive, useTemplateRef, watch, watchEffect } from 'vue';\n import { type FluxAdaptiveGroupChild, FluxAdaptiveGroupInjectionKey } from '$flux/data';\n import $style from '$flux/css/component/AdaptiveSlot.module.scss';\n\n const {\n gap = 9\n } = defineProps<{\n readonly gap?: number;\n }>();\n\n defineSlots<{\n default(): any;\n }>();\n\n const elementRef = useTemplateRef('element');\n const children = shallowReactive(new Map<number, FluxAdaptiveGroupChild>());\n\n const reflow = animationFrameDebounce(() => {\n const element = unrefTemplateElement(elementRef);\n\n if (!element) {\n return;\n }\n\n const available = element.clientWidth;\n const entries = Array.from(children.entries());\n const states = new Map<number, boolean>(entries.map(([uid]) => [uid, true]));\n\n const sorted = [...entries].sort(([, a], [, b]) => a.priority.value - b.priority.value);\n\n const currentTotal = () => {\n let total = 0;\n let visible = 0;\n\n for (const [uid, child] of entries) {\n const width = states.get(uid)\n ? child.desiredDefaultWidth.value\n : child.desiredFallbackWidth.value;\n\n if (width === 0) {\n continue;\n }\n\n total += width;\n visible++;\n }\n\n return total + Math.max(0, visible - 1) * gap;\n };\n\n while (currentTotal() > available) {\n const victim = sorted.find(([uid]) => states.get(uid));\n\n if (!victim) {\n break;\n }\n\n states.set(victim[0], false);\n }\n\n for (const [uid, child] of entries) {\n child.isDefaultVisible.value = !!states.get(uid);\n }\n });\n\n watchEffect(() => {\n for (const child of children.values()) {\n // Touch reactive refs so this effect tracks them.\n void child.priority.value;\n void child.desiredDefaultWidth.value;\n void child.desiredFallbackWidth.value;\n }\n\n reflow();\n });\n\n provide(FluxAdaptiveGroupInjectionKey, {\n register(uid, child) {\n children.set(uid, child);\n },\n unregister(uid) {\n children.delete(uid);\n }\n });\n\n watch(elementRef, (element, _, onCleanup) => {\n if (!element) {\n return;\n }\n\n const observer = new ResizeObserver(reflow);\n observer.observe(element);\n observer.observe(document.documentElement);\n\n onCleanup(() => {\n observer.disconnect();\n });\n }, {immediate: true});\n</script>\n","<template>\n <div\n ref=\"element\"\n :class=\"$style.adaptiveSlot\"\n :style=\"group ? 'flex-shrink: 0' : undefined\">\n <slot v-if=\"isDefaultVisible\"/>\n <slot\n v-else\n name=\"fallback\"/>\n </div>\n\n <div\n ref=\"defaultMeasurer\"\n :class=\"$style.adaptiveSlotMeasurer\"\n aria-hidden=\"true\">\n <slot/>\n </div>\n\n <div\n ref=\"fallbackMeasurer\"\n :class=\"$style.adaptiveSlotMeasurer\"\n aria-hidden=\"true\">\n <slot name=\"fallback\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { animationFrameDebounce, unrefTemplateElement } from '@flux-ui/internals';\n import { getCurrentInstance, onMounted, onUnmounted, ref, toRef, useTemplateRef, watch } from 'vue';\n import { useAdaptiveGroupInjection } from '$flux/composable';\n import $style from '$flux/css/component/AdaptiveSlot.module.scss';\n\n const props = withDefaults(defineProps<{\n readonly priority?: number;\n }>(), {\n priority: 1\n });\n\n defineSlots<{\n default(): any;\n fallback?(): any;\n }>();\n\n const group = useAdaptiveGroupInjection();\n const instance = getCurrentInstance()!;\n\n const elementRef = useTemplateRef('element');\n const defaultMeasurerRef = useTemplateRef('defaultMeasurer');\n const fallbackMeasurerRef = useTemplateRef('fallbackMeasurer');\n\n const isDefaultVisible = ref(true);\n const desiredDefaultWidth = ref(0);\n const desiredFallbackWidth = ref(0);\n\n const priorityRef = toRef(props, 'priority');\n\n // Keep both desired widths in sync with the hidden measurers.\n watch([defaultMeasurerRef, fallbackMeasurerRef], ([def, fb], _, onCleanup) => {\n if (!def) {\n return;\n }\n\n const update = () => {\n desiredDefaultWidth.value = def.offsetWidth;\n desiredFallbackWidth.value = fb?.offsetWidth ?? 0;\n };\n\n const observer = new ResizeObserver(update);\n observer.observe(def);\n\n if (fb) {\n observer.observe(fb);\n }\n\n observer.observe(document.documentElement);\n\n update();\n\n onCleanup(() => {\n observer.disconnect();\n });\n }, {immediate: true});\n\n if (group) {\n onMounted(() => {\n group.register(instance.uid, {\n priority: priorityRef,\n desiredDefaultWidth,\n desiredFallbackWidth,\n isDefaultVisible\n });\n });\n\n onUnmounted(() => {\n group.unregister(instance.uid);\n });\n } else {\n // Standalone: self-measurement with parent-observer hysteresis.\n let lastFailedParentWidth = -1;\n\n const reflow = animationFrameDebounce(() => {\n const element = unrefTemplateElement(elementRef);\n\n if (!element || !isDefaultVisible.value) {\n return;\n }\n\n const desired = desiredDefaultWidth.value;\n const available = element.clientWidth;\n\n if (desired > available) {\n lastFailedParentWidth = element.parentElement?.clientWidth ?? -1;\n isDefaultVisible.value = false;\n } else {\n lastFailedParentWidth = -1;\n }\n });\n\n watch(elementRef, (element, _, onCleanup) => {\n if (!element) {\n return;\n }\n\n const parent = element.parentElement;\n\n const observer = new ResizeObserver(entries => {\n for (const entry of entries) {\n if (entry.target === parent && !isDefaultVisible.value) {\n if (parent.clientWidth > lastFailedParentWidth) {\n isDefaultVisible.value = true;\n }\n }\n }\n\n reflow();\n });\n\n observer.observe(element);\n\n if (parent) {\n observer.observe(parent);\n }\n\n observer.observe(document.documentElement);\n\n onCleanup(() => {\n observer.disconnect();\n });\n }, {immediate: true});\n\n // Default content size changed: forget failure history and retry.\n watch(desiredDefaultWidth, () => {\n lastFailedParentWidth = -1;\n isDefaultVisible.value = true;\n });\n }\n</script>\n","<template>\n <div\n ref=\"element\"\n :class=\"$style.adaptiveSlot\"\n :style=\"group ? 'flex-shrink: 0' : undefined\">\n <slot v-if=\"isDefaultVisible\"/>\n <slot\n v-else\n name=\"fallback\"/>\n </div>\n\n <div\n ref=\"defaultMeasurer\"\n :class=\"$style.adaptiveSlotMeasurer\"\n aria-hidden=\"true\">\n <slot/>\n </div>\n\n <div\n ref=\"fallbackMeasurer\"\n :class=\"$style.adaptiveSlotMeasurer\"\n aria-hidden=\"true\">\n <slot name=\"fallback\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { animationFrameDebounce, unrefTemplateElement } from '@flux-ui/internals';\n import { getCurrentInstance, onMounted, onUnmounted, ref, toRef, useTemplateRef, watch } from 'vue';\n import { useAdaptiveGroupInjection } from '$flux/composable';\n import $style from '$flux/css/component/AdaptiveSlot.module.scss';\n\n const props = withDefaults(defineProps<{\n readonly priority?: number;\n }>(), {\n priority: 1\n });\n\n defineSlots<{\n default(): any;\n fallback?(): any;\n }>();\n\n const group = useAdaptiveGroupInjection();\n const instance = getCurrentInstance()!;\n\n const elementRef = useTemplateRef('element');\n const defaultMeasurerRef = useTemplateRef('defaultMeasurer');\n const fallbackMeasurerRef = useTemplateRef('fallbackMeasurer');\n\n const isDefaultVisible = ref(true);\n const desiredDefaultWidth = ref(0);\n const desiredFallbackWidth = ref(0);\n\n const priorityRef = toRef(props, 'priority');\n\n // Keep both desired widths in sync with the hidden measurers.\n watch([defaultMeasurerRef, fallbackMeasurerRef], ([def, fb], _, onCleanup) => {\n if (!def) {\n return;\n }\n\n const update = () => {\n desiredDefaultWidth.value = def.offsetWidth;\n desiredFallbackWidth.value = fb?.offsetWidth ?? 0;\n };\n\n const observer = new ResizeObserver(update);\n observer.observe(def);\n\n if (fb) {\n observer.observe(fb);\n }\n\n observer.observe(document.documentElement);\n\n update();\n\n onCleanup(() => {\n observer.disconnect();\n });\n }, {immediate: true});\n\n if (group) {\n onMounted(() => {\n group.register(instance.uid, {\n priority: priorityRef,\n desiredDefaultWidth,\n desiredFallbackWidth,\n isDefaultVisible\n });\n });\n\n onUnmounted(() => {\n group.unregister(instance.uid);\n });\n } else {\n // Standalone: self-measurement with parent-observer hysteresis.\n let lastFailedParentWidth = -1;\n\n const reflow = animationFrameDebounce(() => {\n const element = unrefTemplateElement(elementRef);\n\n if (!element || !isDefaultVisible.value) {\n return;\n }\n\n const desired = desiredDefaultWidth.value;\n const available = element.clientWidth;\n\n if (desired > available) {\n lastFailedParentWidth = element.parentElement?.clientWidth ?? -1;\n isDefaultVisible.value = false;\n } else {\n lastFailedParentWidth = -1;\n }\n });\n\n watch(elementRef, (element, _, onCleanup) => {\n if (!element) {\n return;\n }\n\n const parent = element.parentElement;\n\n const observer = new ResizeObserver(entries => {\n for (const entry of entries) {\n if (entry.target === parent && !isDefaultVisible.value) {\n if (parent.clientWidth > lastFailedParentWidth) {\n isDefaultVisible.value = true;\n }\n }\n }\n\n reflow();\n });\n\n observer.observe(element);\n\n if (parent) {\n observer.observe(parent);\n }\n\n observer.observe(document.documentElement);\n\n onCleanup(() => {\n observer.disconnect();\n });\n }, {immediate: true});\n\n // Default content size changed: forget failure history and retry.\n watch(desiredDefaultWidth, () => {\n lastFailedParentWidth = -1;\n isDefaultVisible.value = true;\n });\n }\n</script>\n","@property --shine-degrees {\n syntax: '<angle>';\n initial-value: 0deg;\n inherits: false;\n}\n\n.fillVisual {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n}\n\n.animatedColors {\n composes: fillVisual;\n\n filter: blur(60px) saturate(180%);\n}\n\n.dotPattern {\n composes: fillVisual;\n\n fill: var(--gray-300);\n pointer-events: none;\n}\n\n.flickeringGrid {\n composes: fillVisual;\n\n pointer-events: none;\n}\n\n.gridPattern {\n composes: fillVisual;\n\n fill: var(--gray-100);\n stroke: var(--gray-300);\n pointer-events: none;\n}\n\n.borderShine {\n position: relative;\n\n --shine-radius: var(--radius);\n --shine-mask: linear-gradient(#fff #{0} #{0}) content-box, linear-gradient(#fff #{0} #{0});\n\n &::before {\n position: absolute;\n display: block;\n inset: calc(var(--shine-offset) * -1px);\n padding: calc(var(--shine-width) * 1px);\n content: '';\n background: conic-gradient(from var(--shine-degrees), #{var(--shine-colors)});\n border-radius: var(--shine-radius);\n pointer-events: none;\n animation: borderShinePosition calc(var(--shine-duration) * 1s) linear infinite;\n mask: var(--shine-mask);\n -webkit-mask-composite: xor;\n mask-composite: exclude;\n }\n}\n\n@keyframes borderShinePosition {\n from {\n --shine-degrees: 0deg;\n }\n to {\n --shine-degrees: 360deg;\n }\n}\n","<template>\n <canvas\n ref=\"canvas\"\n :class=\"$style.animatedColors\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useComponentId } from '@basmilius/common';\n import { mulberry32 } from '@basmilius/utils';\n import { computed, onBeforeUnmount, onMounted, ref, unref, useTemplateRef, watch } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n type Polygon = [number, number, string, PolygonPoint[]];\n type PolygonPoint = [number, number, number];\n\n const {\n colors,\n incrementor = 1,\n opacity = .5,\n seed,\n static: isStatic\n } = defineProps<{\n readonly colors?: string[];\n readonly incrementor?: number;\n readonly opacity?: number;\n readonly seed?: number;\n readonly static?: boolean;\n }>();\n\n const canvasRef = useTemplateRef('canvas');\n const componentId = useComponentId();\n\n const contextRef = ref<CanvasRenderingContext2D>();\n const animationFrame = ref(0);\n const tick = ref(0);\n\n const polygons = computed(() => {\n if (!colors || colors.length === 0) {\n return [];\n }\n\n const mulberry = mulberry32(seed ?? componentId.value);\n const polygons: Polygon[] = [];\n\n for (const color of colors) {\n const localMulberry = mulberry.fork();\n\n const x = colors.length === 1 ? .5 : localMulberry.next();\n const y = colors.length === 1 ? .5 : localMulberry.next();\n const count = Math.round(localMulberry.nextBetween(6, 9));\n const points: PolygonPoint[] = [];\n\n for (let p = 0; p < count; ++p) {\n points.push([\n localMulberry.next(),\n localMulberry.next(),\n localMulberry.next()\n ]);\n }\n\n polygons.push([x, y, color, points]);\n }\n\n return polygons;\n });\n\n onMounted(() => schedule());\n onBeforeUnmount(() => cancel());\n\n function cancel(): void {\n cancelAnimationFrame(animationFrame.value);\n }\n\n function schedule(): void {\n animationFrame.value = requestAnimationFrame(update);\n tick.value += incrementor;\n }\n\n function update(): void {\n const context = unref(contextRef);\n const shapes = unref(polygons);\n\n if (!context || shapes.length === 0) {\n return;\n }\n\n const width = context.canvas.offsetWidth;\n const height = context.canvas.offsetHeight;\n context.canvas.width = width;\n context.canvas.height = height;\n\n const widthBasedOpacity = Math.min(1, Math.max(.15, 360 / width));\n\n context.globalAlpha = opacity * widthBasedOpacity;\n context.globalCompositeOperation = 'screen';\n context.clearRect(0, 0, width, height);\n\n for (const [tx, ty, color, shape] of shapes) {\n context.save();\n context.translate(tx * width, ty * height);\n context.beginPath();\n context.fillStyle = color;\n\n for (let i = 0; i < shape.length; ++i) {\n let [x, y, m] = shape[i];\n\n x = Math.cos(x * Math.PI * 2 + tick.value / (m * 200 + 300)) * (width * .8);\n y = Math.sin(y * Math.PI * 2 + tick.value / (m * 100 + 300)) * (height * .8);\n\n if (i === 0) {\n context.moveTo(x, y);\n } else {\n context.lineTo(x, y);\n }\n }\n\n context.closePath();\n context.fill();\n context.restore();\n }\n\n !isStatic && schedule();\n }\n\n watch(canvasRef, canvas => {\n if (!canvas) {\n contextRef.value = undefined;\n return;\n }\n\n contextRef.value = canvas.getContext('2d', {\n alpha: true,\n colorSpace: 'display-p3'\n })!;\n }, {immediate: true});\n\n watch(polygons, () => {\n cancel();\n !isStatic && schedule();\n });\n</script>\n","<template>\n <canvas\n ref=\"canvas\"\n :class=\"$style.animatedColors\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useComponentId } from '@basmilius/common';\n import { mulberry32 } from '@basmilius/utils';\n import { computed, onBeforeUnmount, onMounted, ref, unref, useTemplateRef, watch } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n type Polygon = [number, number, string, PolygonPoint[]];\n type PolygonPoint = [number, number, number];\n\n const {\n colors,\n incrementor = 1,\n opacity = .5,\n seed,\n static: isStatic\n } = defineProps<{\n readonly colors?: string[];\n readonly incrementor?: number;\n readonly opacity?: number;\n readonly seed?: number;\n readonly static?: boolean;\n }>();\n\n const canvasRef = useTemplateRef('canvas');\n const componentId = useComponentId();\n\n const contextRef = ref<CanvasRenderingContext2D>();\n const animationFrame = ref(0);\n const tick = ref(0);\n\n const polygons = computed(() => {\n if (!colors || colors.length === 0) {\n return [];\n }\n\n const mulberry = mulberry32(seed ?? componentId.value);\n const polygons: Polygon[] = [];\n\n for (const color of colors) {\n const localMulberry = mulberry.fork();\n\n const x = colors.length === 1 ? .5 : localMulberry.next();\n const y = colors.length === 1 ? .5 : localMulberry.next();\n const count = Math.round(localMulberry.nextBetween(6, 9));\n const points: PolygonPoint[] = [];\n\n for (let p = 0; p < count; ++p) {\n points.push([\n localMulberry.next(),\n localMulberry.next(),\n localMulberry.next()\n ]);\n }\n\n polygons.push([x, y, color, points]);\n }\n\n return polygons;\n });\n\n onMounted(() => schedule());\n onBeforeUnmount(() => cancel());\n\n function cancel(): void {\n cancelAnimationFrame(animationFrame.value);\n }\n\n function schedule(): void {\n animationFrame.value = requestAnimationFrame(update);\n tick.value += incrementor;\n }\n\n function update(): void {\n const context = unref(contextRef);\n const shapes = unref(polygons);\n\n if (!context || shapes.length === 0) {\n return;\n }\n\n const width = context.canvas.offsetWidth;\n const height = context.canvas.offsetHeight;\n context.canvas.width = width;\n context.canvas.height = height;\n\n const widthBasedOpacity = Math.min(1, Math.max(.15, 360 / width));\n\n context.globalAlpha = opacity * widthBasedOpacity;\n context.globalCompositeOperation = 'screen';\n context.clearRect(0, 0, width, height);\n\n for (const [tx, ty, color, shape] of shapes) {\n context.save();\n context.translate(tx * width, ty * height);\n context.beginPath();\n context.fillStyle = color;\n\n for (let i = 0; i < shape.length; ++i) {\n let [x, y, m] = shape[i];\n\n x = Math.cos(x * Math.PI * 2 + tick.value / (m * 200 + 300)) * (width * .8);\n y = Math.sin(y * Math.PI * 2 + tick.value / (m * 100 + 300)) * (height * .8);\n\n if (i === 0) {\n context.moveTo(x, y);\n } else {\n context.lineTo(x, y);\n }\n }\n\n context.closePath();\n context.fill();\n context.restore();\n }\n\n !isStatic && schedule();\n }\n\n watch(canvasRef, canvas => {\n if (!canvas) {\n contextRef.value = undefined;\n return;\n }\n\n contextRef.value = canvas.getContext('2d', {\n alpha: true,\n colorSpace: 'display-p3'\n })!;\n }, {immediate: true});\n\n watch(polygons, () => {\n cancel();\n !isStatic && schedule();\n });\n</script>\n","<template>\n <div\n :class=\"$style.aspectRatio\"\n :style=\"{aspectRatio}\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Layout.module.scss';\n\n defineProps<{\n aspectRatio: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.aspectRatio\"\n :style=\"{aspectRatio}\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Layout.module.scss';\n\n defineProps<{\n aspectRatio: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n @after-enter=\"afterEnter\"\n @enter=\"enter\"\n @leave=\"leave\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { isHtmlElement } from '@basmilius/utils';\n import type { VNode } from 'vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n function afterEnter(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n elm.style.height = 'auto';\n }\n\n function enter(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n const {width} = getComputedStyle(elm);\n elm.style.position = 'absolute';\n elm.style.width = width;\n elm.style.height = 'auto';\n elm.style.visibility = 'hidden';\n\n const {height} = getComputedStyle(elm);\n elm.style.removeProperty('position');\n elm.style.removeProperty('width');\n elm.style.removeProperty('visibility');\n elm.style.height = '0';\n\n // note: force repaint.\n getComputedStyle(elm);\n\n requestAnimationFrame(() => requestAnimationFrame(() => elm.style.height = height));\n }\n\n function leave(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n const {height} = getComputedStyle(elm);\n elm.style.height = height;\n\n // note: force repaint.\n getComputedStyle(elm);\n\n requestAnimationFrame(() => requestAnimationFrame(() => elm.style.height = '0'));\n }\n</script>\n","<template>\n <Transition\n @after-enter=\"afterEnter\"\n @enter=\"enter\"\n @leave=\"leave\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { isHtmlElement } from '@basmilius/utils';\n import type { VNode } from 'vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n function afterEnter(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n elm.style.height = 'auto';\n }\n\n function enter(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n const {width} = getComputedStyle(elm);\n elm.style.position = 'absolute';\n elm.style.width = width;\n elm.style.height = 'auto';\n elm.style.visibility = 'hidden';\n\n const {height} = getComputedStyle(elm);\n elm.style.removeProperty('position');\n elm.style.removeProperty('width');\n elm.style.removeProperty('visibility');\n elm.style.height = '0';\n\n // note: force repaint.\n getComputedStyle(elm);\n\n requestAnimationFrame(() => requestAnimationFrame(() => elm.style.height = height));\n }\n\n function leave(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n const {height} = getComputedStyle(elm);\n elm.style.height = height;\n\n // note: force repaint.\n getComputedStyle(elm);\n\n requestAnimationFrame(() => requestAnimationFrame(() => elm.style.height = '0'));\n }\n</script>\n","<template>\n <Transition\n @after-enter=\"afterEnter\"\n @enter=\"enter\"\n @leave=\"leave\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { isHtmlElement } from '@basmilius/utils';\n import type { VNode } from 'vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n function afterEnter(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n elm.style.width = 'auto';\n }\n\n function enter(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n const {height} = getComputedStyle(elm);\n elm.style.position = 'absolute';\n elm.style.height = height;\n elm.style.width = 'auto';\n elm.style.visibility = 'hidden';\n\n const {width} = getComputedStyle(elm);\n elm.style.removeProperty('position');\n elm.style.removeProperty('height');\n elm.style.removeProperty('visibility');\n elm.style.width = '0';\n\n // note: force repaint.\n getComputedStyle(elm);\n\n requestAnimationFrame(() => requestAnimationFrame(() => elm.style.width = width));\n }\n\n function leave(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n const {width} = getComputedStyle(elm);\n elm.style.width = width;\n\n // note: force repaint.\n getComputedStyle(elm);\n\n requestAnimationFrame(() => requestAnimationFrame(() => elm.style.width = '0'));\n }\n</script>\n","<template>\n <Transition\n @after-enter=\"afterEnter\"\n @enter=\"enter\"\n @leave=\"leave\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { isHtmlElement } from '@basmilius/utils';\n import type { VNode } from 'vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n function afterEnter(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n elm.style.width = 'auto';\n }\n\n function enter(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n const {height} = getComputedStyle(elm);\n elm.style.position = 'absolute';\n elm.style.height = height;\n elm.style.width = 'auto';\n elm.style.visibility = 'hidden';\n\n const {width} = getComputedStyle(elm);\n elm.style.removeProperty('position');\n elm.style.removeProperty('height');\n elm.style.removeProperty('visibility');\n elm.style.width = '0';\n\n // note: force repaint.\n getComputedStyle(elm);\n\n requestAnimationFrame(() => requestAnimationFrame(() => elm.style.width = width));\n }\n\n function leave(elm: Element): void {\n if (!isHtmlElement(elm)) {\n return;\n }\n\n const {width} = getComputedStyle(elm);\n elm.style.width = width;\n\n // note: force repaint.\n getComputedStyle(elm);\n\n requestAnimationFrame(() => requestAnimationFrame(() => elm.style.width = '0'));\n }\n</script>\n",".breakthroughTransitionEnterActive,\n.breakthroughTransitionBackEnterActive,\n.breakthroughTransitionLeaveActive,\n.breakthroughTransitionBackLeaveActive {\n transform-origin: top center;\n transition-property: opacity, scale, translate;\n}\n\n.breakthroughTransitionEnterActive,\n.breakthroughTransitionBackEnterActive {\n transition-duration: 180ms;\n transition-timing-function: var(--deceleration-curve);\n}\n\n.breakthroughTransitionLeaveActive,\n.breakthroughTransitionBackLeaveActive {\n transition-duration: 120ms;\n transition-timing-function: var(--acceleration-curve);\n}\n\n.breakthroughTransitionEnterFrom,\n.breakthroughTransitionBackLeaveTo {\n opacity: 0;\n scale: .975;\n}\n\n.breakthroughTransitionLeaveTo,\n.breakthroughTransitionBackEnterFrom {\n opacity: 0;\n scale: 1.025;\n}\n\n.fadeTransitionEnterActive,\n.fadeTransitionLeaveActive {\n transition: opacity var(--transition-default) !important;\n}\n\n.fadeTransitionEnterFrom,\n.fadeTransitionLeaveTo {\n opacity: 0;\n}\n\n.fadeTransitionEnterTo,\n.fadeTransitionLeaveFrom {\n opacity: 1;\n}\n\n.routeTransitionEnterActive,\n.routeTransitionBackEnterActive,\n.routeTransitionLeaveActive,\n.routeTransitionBackLeaveActive {\n transform-origin: center 50dvh;\n transition-property: opacity, scale;\n}\n\n.routeTransitionEnterActive,\n.routeTransitionBackEnterActive {\n transition-duration: 180ms;\n transition-timing-function: var(--deceleration-curve);\n}\n\n.routeTransitionLeaveActive,\n.routeTransitionBackLeaveActive {\n transition-duration: 120ms;\n transition-timing-function: var(--acceleration-curve);\n}\n\n.routeTransitionEnterFrom,\n.routeTransitionBackLeaveTo {\n opacity: 0;\n scale: .975;\n}\n\n.routeTransitionLeaveTo,\n.routeTransitionBackEnterFrom {\n opacity: 0;\n scale: .975;\n}\n\n.tooltipTransitionEnterActive,\n.tooltipTransitionLeaveActive {\n transition: 210ms var(--swift-out);\n transition-property: opacity, scale;\n}\n\n.tooltipTransitionEnterFrom {\n scale: .975;\n}\n\n.tooltipTransitionEnterFrom,\n.tooltipTransitionLeaveTo {\n opacity: 0;\n}\n\n.verticalWindowTransitionEnterActive,\n.verticalWindowTransitionBackEnterActive {\n contain: paint;\n transition: 120ms var(--deceleration-curve);\n transition-property: opacity, transform;\n}\n\n.verticalWindowTransitionLeaveActive,\n.verticalWindowTransitionBackLeaveActive {\n transition: 120ms var(--acceleration-curve);\n transition-property: opacity, transform;\n}\n\n.verticalWindowTransitionBackLeaveTo,\n.verticalWindowTransitionEnterFrom {\n opacity: 0;\n transform: translate3d(0, 15px, 0);\n}\n\n.verticalWindowTransitionBackEnterFrom,\n.verticalWindowTransitionLeaveTo {\n opacity: 0;\n transform: translate3d(0, -15px, 0);\n}\n\n.windowTransitionEnterActive,\n.windowTransitionBackEnterActive {\n transition: 120ms var(--deceleration-curve);\n transition-property: height, opacity, transform;\n}\n\n.windowTransitionLeaveActive,\n.windowTransitionBackLeaveActive {\n transition: 120ms var(--acceleration-curve);\n transition-property: height, opacity, transform;\n}\n\n.windowTransitionBackLeaveTo,\n.windowTransitionEnterFrom {\n opacity: 0;\n transform: translate3d(15px, 0, 0);\n}\n\n.windowTransitionBackEnterFrom,\n.windowTransitionLeaveTo {\n opacity: 0;\n transform: translate3d(-15px, 0, 0);\n}\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"isBack ? $style.breakthroughTransitionBackEnterActive : $style.breakthroughTransitionEnterActive\"\n :enter-from-class=\"isBack ? $style.breakthroughTransitionBackEnterFrom : $style.breakthroughTransitionEnterFrom\"\n :leave-active-class=\"isBack ? $style.breakthroughTransitionBackLeaveActive : $style.breakthroughTransitionLeaveActive\"\n :leave-to-class=\"isBack ? $style.breakthroughTransitionBackLeaveTo : $style.breakthroughTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Transition.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly isBack?: boolean;\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"isBack ? $style.breakthroughTransitionBackEnterActive : $style.breakthroughTransitionEnterActive\"\n :enter-from-class=\"isBack ? $style.breakthroughTransitionBackEnterFrom : $style.breakthroughTransitionEnterFrom\"\n :leave-active-class=\"isBack ? $style.breakthroughTransitionBackLeaveActive : $style.breakthroughTransitionLeaveActive\"\n :leave-to-class=\"isBack ? $style.breakthroughTransitionBackLeaveTo : $style.breakthroughTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Transition.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly isBack?: boolean;\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"$style.fadeTransitionEnterActive\"\n :enter-from-class=\"$style.fadeTransitionEnterFrom\"\n :enter-to-class=\"$style.fadeTransitionEnterTo\"\n :leave-active-class=\"$style.fadeTransitionLeaveActive\"\n :leave-from-class=\"$style.fadeTransitionLeaveFrom\"\n :leave-to-class=\"$style.fadeTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Transition.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"$style.fadeTransitionEnterActive\"\n :enter-from-class=\"$style.fadeTransitionEnterFrom\"\n :enter-to-class=\"$style.fadeTransitionEnterTo\"\n :leave-active-class=\"$style.fadeTransitionLeaveActive\"\n :leave-from-class=\"$style.fadeTransitionLeaveFrom\"\n :leave-to-class=\"$style.fadeTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Transition.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"$style.overlayTransitionEnterActive\"\n :enter-from-class=\"$style.overlayTransitionEnterFrom\"\n :leave-active-class=\"$style.overlayTransitionLeaveActive\"\n :leave-to-class=\"$style.overlayTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Overlay.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"$style.overlayTransitionEnterActive\"\n :enter-from-class=\"$style.overlayTransitionEnterFrom\"\n :leave-active-class=\"$style.overlayTransitionLeaveActive\"\n :leave-to-class=\"$style.overlayTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Overlay.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"isBack ? $style.routeTransitionBackEnterActive : $style.routeTransitionEnterActive\"\n :enter-from-class=\"isBack ? $style.routeTransitionBackEnterFrom : $style.routeTransitionEnterFrom\"\n :leave-active-class=\"isBack ? $style.routeTransitionBackLeaveActive : $style.routeTransitionLeaveActive\"\n :leave-to-class=\"isBack ? $style.routeTransitionBackLeaveTo : $style.routeTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Transition.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly isBack?: boolean;\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"isBack ? $style.routeTransitionBackEnterActive : $style.routeTransitionEnterActive\"\n :enter-from-class=\"isBack ? $style.routeTransitionBackEnterFrom : $style.routeTransitionEnterFrom\"\n :leave-active-class=\"isBack ? $style.routeTransitionBackLeaveActive : $style.routeTransitionLeaveActive\"\n :leave-to-class=\"isBack ? $style.routeTransitionBackLeaveTo : $style.routeTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Transition.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly isBack?: boolean;\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"$style.slideOverTransitionEnterActive\"\n :enter-from-class=\"$style.slideOverTransitionEnterFrom\"\n :leave-active-class=\"$style.slideOverTransitionLeaveActive\"\n :leave-to-class=\"$style.slideOverTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Overlay.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"$style.slideOverTransitionEnterActive\"\n :enter-from-class=\"$style.slideOverTransitionEnterFrom\"\n :leave-active-class=\"$style.slideOverTransitionLeaveActive\"\n :leave-to-class=\"$style.slideOverTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Overlay.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"$style.tooltipTransitionEnterActive\"\n :enter-from-class=\"$style.tooltipTransitionEnterFrom\"\n :leave-active-class=\"$style.tooltipTransitionLeaveActive\"\n :leave-to-class=\"$style.tooltipTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Transition.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"$style.tooltipTransitionEnterActive\"\n :enter-from-class=\"$style.tooltipTransitionEnterFrom\"\n :leave-active-class=\"$style.tooltipTransitionLeaveActive\"\n :leave-to-class=\"$style.tooltipTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Transition.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"isBack ? $style.verticalWindowTransitionBackEnterActive : $style.verticalWindowTransitionEnterActive\"\n :enter-from-class=\"isBack ? $style.verticalWindowTransitionBackEnterFrom : $style.verticalWindowTransitionEnterFrom\"\n :leave-active-class=\"isBack ? $style.verticalWindowTransitionBackLeaveActive : $style.verticalWindowTransitionLeaveActive\"\n :leave-to-class=\"isBack ? $style.verticalWindowTransitionBackLeaveTo : $style.verticalWindowTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Transition.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly isBack?: boolean;\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"isBack ? $style.verticalWindowTransitionBackEnterActive : $style.verticalWindowTransitionEnterActive\"\n :enter-from-class=\"isBack ? $style.verticalWindowTransitionBackEnterFrom : $style.verticalWindowTransitionEnterFrom\"\n :leave-active-class=\"isBack ? $style.verticalWindowTransitionBackLeaveActive : $style.verticalWindowTransitionLeaveActive\"\n :leave-to-class=\"isBack ? $style.verticalWindowTransitionBackLeaveTo : $style.verticalWindowTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Transition.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly isBack?: boolean;\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"isBack ? $style.windowTransitionBackEnterActive : $style.windowTransitionEnterActive\"\n :enter-from-class=\"isBack ? $style.windowTransitionBackEnterFrom : $style.windowTransitionEnterFrom\"\n :leave-active-class=\"isBack ? $style.windowTransitionBackLeaveActive : $style.windowTransitionLeaveActive\"\n :leave-to-class=\"isBack ? $style.windowTransitionBackLeaveTo : $style.windowTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Transition.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly isBack?: boolean;\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <Transition\n :mode=\"mode\"\n :enter-active-class=\"isBack ? $style.windowTransitionBackEnterActive : $style.windowTransitionEnterActive\"\n :enter-from-class=\"isBack ? $style.windowTransitionBackEnterFrom : $style.windowTransitionEnterFrom\"\n :leave-active-class=\"isBack ? $style.windowTransitionBackLeaveActive : $style.windowTransitionLeaveActive\"\n :leave-to-class=\"isBack ? $style.windowTransitionBackLeaveTo : $style.windowTransitionLeaveTo\">\n <slot/>\n </Transition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Transition.module.scss';\n\n const {\n mode = 'out-in'\n } = defineProps<{\n readonly isBack?: boolean;\n readonly mode?: 'in-out' | 'out-in';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","@use '$flux/css/mixin';\n\n.avatar {\n position: relative;\n display: inline-flex;\n height: 1em;\n width: 1em;\n flex: 0 0 1em;\n border-radius: .3em;\n user-select: none;\n}\n\n.avatarImage {\n display: block;\n height: inherit;\n width: inherit;\n background: var(--gray-50);\n border-radius: inherit;\n box-shadow: inset 0 0 0 1px var(--gray-100);\n}\n\n.avatarFallback {\n position: absolute;\n display: flex;\n inset: 0;\n align-items: center;\n justify-content: center;\n border-radius: inherit;\n\n .icon {\n font-size: .5em;\n }\n\n :is(span) {\n font-size: .4em;\n font-weight: 600;\n line-height: 1;\n }\n}\n\n.avatarFallbackColorized {\n composes: avatarFallback;\n\n background: color-mix(in srgb, var(--color), var(--gray-25) 80%);\n color: var(--color);\n}\n\n[dark] .avatarFallbackColorized {\n background: color-mix(in srgb, var(--color), var(--gray-25) 70%);\n}\n\n.avatarFallbackNeutral {\n composes: avatarFallback;\n\n background: var(--gray-100);\n color: var(--foreground-secondary);\n}\n\n.avatarLoading {\n position: absolute;\n display: flex;\n inset: 0;\n align-items: center;\n justify-content: center;\n background: rgb(from var(--gray-50) r g b / .84);\n box-shadow: inset 0 0 0 1px var(--gray-100);\n border-radius: inherit;\n backdrop-filter: blur(3px) saturate(180%);\n\n :local(.spinner) {\n --track: rgb(from var(--gray-950) r g b / .12);\n }\n}\n\n.avatarStatus {\n position: absolute;\n display: block;\n right: .021em;\n bottom: .021em;\n height: .27em;\n width: .27em;\n border-radius: var(--radius-full);\n}\n\n.avatarStatusGray {\n composes: avatarStatus;\n\n background: var(--gray-500);\n}\n\n.avatarStatusPrimary {\n composes: avatarStatus;\n\n background: var(--primary-600);\n}\n\n.avatarStatusDanger {\n composes: avatarStatus;\n\n background: var(--danger-600);\n}\n\n.avatarStatusInfo {\n composes: avatarStatus;\n\n background: var(--info-600);\n}\n\n.avatarStatusSuccess {\n composes: avatarStatus;\n\n background: var(--success-600);\n}\n\n.avatarStatusWarning {\n composes: avatarStatus;\n\n background: var(--warning-600);\n}\n\n.avatarClickable {\n cursor: pointer;\n transition: filter 150ms var(--swift-out);\n\n @include mixin.hover {\n filter: brightness(110%);\n }\n}\n\n.statusAvatar {\n composes: avatar;\n}\n\n.statusAvatar .avatarFallback,\n.statusAvatar .avatarImage {\n mask: radial-gradient(circle .18em at calc(100% - 0.16em) calc(100% - 0.16em), transparent 100%, #000 100%);\n -webkit-mask: radial-gradient(circle .18em at calc(100% - 0.16em) calc(100% - 0.16em), transparent 100%, #000 100%);\n}\n\n.persona {\n display: flex;\n padding: 6px;\n align-items: center;\n gap: 12px;\n background: unset;\n border: 0;\n border-radius: var(--radius);\n cursor: pointer;\n text-align: left;\n transition: var(--transition-default);\n transition-property: background, mixin.focus-ring-transition-properties();\n\n @include mixin.focus-ring(2px);\n\n @include mixin.hover {\n background: var(--gray-100);\n }\n}\n\n.personaDetails {\n display: flex;\n margin-right: 9px;\n flex-flow: column;\n gap: 3px;\n line-height: 1.2;\n\n :is(strong) {\n width: max-content;\n color: var(--foreground-prominent);\n }\n\n :is(span) {\n color: var(--foreground);\n font-size: 14px;\n }\n}\n","<template>\n <FluxPressable\n :class=\"clsx(\n !status && $style.avatar,\n !!status && $style.statusAvatar,\n type !== 'none' && $style.avatarClickable\n )\"\n :style=\"{\n '--color': color,\n fontSize: size && `${size}px`\n }\"\n :component-type=\"type\"\n role=\"img\"\n :aria-label=\"alt\"\n :tabindex=\"tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <img\n v-if=\"src\"\n :class=\"$style.avatarImage\"\n :alt=\"alt\"\n :src=\"src\"/>\n\n <div\n v-else\n :class=\"fallback === 'colorized' ? $style.avatarFallbackColorized : $style.avatarFallbackNeutral\">\n <span v-if=\"fallbackInitials\">\n {{ fallbackInitials }}\n </span>\n\n <FluxIcon\n v-else-if=\"fallbackIcon\"\n :name=\"fallbackIcon\"/>\n </div>\n\n <FluxFadeTransition>\n <div\n v-if=\"isLoading\"\n :class=\"$style.avatarLoading\">\n <FluxSpinner/>\n </div>\n </FluxFadeTransition>\n\n <div\n v-if=\"status\"\n :class=\"STATUS_CLASS_MAP[status]\"/>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { amber600, blue600, cyan600, emerald600, fuchsia600, green600, indigo600, lime600, orange600, pink600, purple600, red600, rose600, sky600, teal600, violet600, yellow600 } from '@flux-ui/internals';\n import type { FluxButtonEmits, FluxColor, FluxIconName, FluxPressableType, FluxTo } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, unref } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Avatar.module.scss';\n\n const STATUS_CLASS_MAP = {\n gray: $style.avatarStatusGray,\n primary: $style.avatarStatusPrimary,\n danger: $style.avatarStatusDanger,\n info: $style.avatarStatusInfo,\n success: $style.avatarStatusSuccess,\n warning: $style.avatarStatusWarning\n } as const;\n\n defineEmits<FluxButtonEmits>();\n\n const {\n fallback = 'colorized',\n fallbackColors = [lime600, green600, emerald600, teal600, cyan600, sky600, blue600, indigo600, violet600, purple600, fuchsia600, pink600, rose600, red600, orange600, amber600, yellow600],\n fallbackIcon = 'user',\n fallbackInitials,\n type = 'none'\n } = defineProps<{\n readonly alt?: string;\n readonly fallback?: 'colorized' | 'neutral';\n readonly fallbackColors?: string[];\n readonly fallbackIcon?: FluxIconName;\n readonly fallbackInitials?: string;\n readonly isLoading?: boolean;\n readonly size?: number;\n readonly src?: string;\n readonly status?: FluxColor;\n readonly type?: FluxPressableType;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n const color = computed(() => fallbackColors[unref(colorSeed) % fallbackColors.length]);\n const colorSeed = computed(() => {\n let seed = 6;\n\n if (fallbackInitials) {\n for (let i = 0; i < fallbackInitials.length; ++i) {\n seed ^= fallbackInitials.charCodeAt(i);\n }\n } else if (fallbackIcon) {\n for (let i = 0; i < fallbackIcon.length; ++i) {\n seed ^= fallbackIcon.charCodeAt(i);\n }\n }\n\n return seed;\n });\n</script>\n","<template>\n <FluxPressable\n :class=\"clsx(\n !status && $style.avatar,\n !!status && $style.statusAvatar,\n type !== 'none' && $style.avatarClickable\n )\"\n :style=\"{\n '--color': color,\n fontSize: size && `${size}px`\n }\"\n :component-type=\"type\"\n role=\"img\"\n :aria-label=\"alt\"\n :tabindex=\"tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <img\n v-if=\"src\"\n :class=\"$style.avatarImage\"\n :alt=\"alt\"\n :src=\"src\"/>\n\n <div\n v-else\n :class=\"fallback === 'colorized' ? $style.avatarFallbackColorized : $style.avatarFallbackNeutral\">\n <span v-if=\"fallbackInitials\">\n {{ fallbackInitials }}\n </span>\n\n <FluxIcon\n v-else-if=\"fallbackIcon\"\n :name=\"fallbackIcon\"/>\n </div>\n\n <FluxFadeTransition>\n <div\n v-if=\"isLoading\"\n :class=\"$style.avatarLoading\">\n <FluxSpinner/>\n </div>\n </FluxFadeTransition>\n\n <div\n v-if=\"status\"\n :class=\"STATUS_CLASS_MAP[status]\"/>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { amber600, blue600, cyan600, emerald600, fuchsia600, green600, indigo600, lime600, orange600, pink600, purple600, red600, rose600, sky600, teal600, violet600, yellow600 } from '@flux-ui/internals';\n import type { FluxButtonEmits, FluxColor, FluxIconName, FluxPressableType, FluxTo } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, unref } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Avatar.module.scss';\n\n const STATUS_CLASS_MAP = {\n gray: $style.avatarStatusGray,\n primary: $style.avatarStatusPrimary,\n danger: $style.avatarStatusDanger,\n info: $style.avatarStatusInfo,\n success: $style.avatarStatusSuccess,\n warning: $style.avatarStatusWarning\n } as const;\n\n defineEmits<FluxButtonEmits>();\n\n const {\n fallback = 'colorized',\n fallbackColors = [lime600, green600, emerald600, teal600, cyan600, sky600, blue600, indigo600, violet600, purple600, fuchsia600, pink600, rose600, red600, orange600, amber600, yellow600],\n fallbackIcon = 'user',\n fallbackInitials,\n type = 'none'\n } = defineProps<{\n readonly alt?: string;\n readonly fallback?: 'colorized' | 'neutral';\n readonly fallbackColors?: string[];\n readonly fallbackIcon?: FluxIconName;\n readonly fallbackInitials?: string;\n readonly isLoading?: boolean;\n readonly size?: number;\n readonly src?: string;\n readonly status?: FluxColor;\n readonly type?: FluxPressableType;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n const color = computed(() => fallbackColors[unref(colorSeed) % fallbackColors.length]);\n const colorSeed = computed(() => {\n let seed = 6;\n\n if (fallbackInitials) {\n for (let i = 0; i < fallbackInitials.length; ++i) {\n seed ^= fallbackInitials.charCodeAt(i);\n }\n } else if (fallbackIcon) {\n for (let i = 0; i < fallbackIcon.length; ++i) {\n seed ^= fallbackIcon.charCodeAt(i);\n }\n }\n\n return seed;\n });\n</script>\n","@use '$flux/css/mixin';\n\n.badge {\n display: inline-flex;\n height: 28px;\n width: max-content;\n margin-top: -2px;\n margin-bottom: -2px;\n padding-left: 9px;\n padding-right: 9px;\n align-items: center;\n gap: 6px;\n background: var(--surface);\n border: 1px solid var(--surface-stroke);\n border-radius: var(--radius-full);\n color: var(--foreground-prominent);\n font-size: 13px;\n font-weight: 500;\n font-variant-numeric: tabular-nums;\n\n &:is(a, button) {\n color: var(--foreground-prominent);\n cursor: pointer;\n text-decoration: none;\n transition: background var(--transition-default);\n\n @include mixin.hover {\n background: var(--gray-50);\n color: var(--foreground-prominent);\n }\n }\n\n .spinner {\n --value: var(--color);\n }\n}\n\n.badgeClose {\n display: flex;\n height: 20px;\n width: 20px;\n margin-right: -6px;\n padding: 5px;\n align-items: center;\n justify-content: center;\n background: unset;\n border: 0;\n border-radius: var(--radius-full);\n color: var(--foreground-secondary);\n cursor: pointer;\n\n @include mixin.hover {\n background: var(--gray-100);\n color: var(--foreground);\n }\n\n &:active {\n background: var(--gray-200);\n color: var(--foreground);\n }\n\n .icon {\n font-size: 16px;\n }\n}\n\n.badgeDot {\n display: block;\n height: 9px;\n width: 9px;\n background: var(--color);\n border-radius: var(--radius-full);\n}\n\n.badgeIcon {\n margin-left: -3px;\n color: var(--color);\n}\n\n.badgeLabel {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &:only-child {\n margin-left: 3px;\n margin-right: 3px;\n color: var(--color);\n }\n}\n\n.badgeGray {\n composes: badge;\n\n --color: var(--foreground);\n\n .badgeLabel {\n color: var(--foreground-prominent);\n }\n\n .spinner {\n --value: var(--primary-600);\n }\n}\n\n.badgePrimary {\n composes: badge;\n\n --color: var(--primary-600);\n}\n\n.badgeDanger {\n composes: badge;\n\n --color: var(--danger-600);\n}\n\n.badgeInfo {\n composes: badge;\n\n --color: var(--info-600);\n}\n\n.badgeSuccess {\n composes: badge;\n\n --color: var(--success-600);\n}\n\n.badgeWarning {\n composes: badge;\n\n --color: var(--warning-600);\n}\n\n.tag {\n composes: badge;\n\n background: var(--gray-50);\n border-color: var(--gray-200);\n border-radius: var(--radius-half);\n font-weight: 400;\n}\n\n.tagKeyboardShortcut {\n composes: tag;\n\n padding-left: 3px;\n padding-right: 3px;\n}\n\n.tagClose {\n composes: badgeClose;\n\n border-radius: var(--radius-half);\n}\n\n.tagDot {\n composes: badgeDot;\n}\n\n.tagIcon {\n composes: badgeIcon;\n}\n\n.tagLabel {\n composes: badgeLabel;\n}\n\n.tagGray {\n composes: badgeGray;\n composes: tag;\n}\n\n.tagPrimary {\n composes: badgePrimary;\n composes: tag;\n}\n\n.tagDanger {\n composes: badgeDanger;\n composes: tag;\n}\n\n.tagInfo {\n composes: badgeInfo;\n composes: tag;\n}\n\n.tagSuccess {\n composes: badgeSuccess;\n composes: tag;\n}\n\n.tagWarning {\n composes: badgeWarning;\n composes: tag;\n}\n","<template>\n <FluxPressable\n :class=\"clsx(\n color === 'gray' && $style.badgeGray,\n color === 'primary' && $style.badgePrimary,\n color === 'danger' && $style.badgeDanger,\n color === 'info' && $style.badgeInfo,\n color === 'success' && $style.badgeSuccess,\n color === 'warning' && $style.badgeWarning\n )\"\n :component-type=\"type\"\n :tabindex=\"tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.badgeIcon\"\n :size=\"16\"/>\n\n <span\n v-else-if=\"dot\"\n :class=\"$style.badgeDot\"/>\n\n <FluxIcon\n v-else-if=\"icon\"\n :class=\"$style.badgeIcon\"\n :size=\"16\"\n :name=\"icon\"/>\n\n <span :class=\"$style.badgeLabel\">\n {{ label }}\n </span>\n\n <button\n v-if=\"type === 'none' && isDeletable\"\n :class=\"$style.badgeClose\"\n type=\"button\"\n :aria-label=\"translate('flux.delete')\"\n @click.stop=\"onDeleteClick()\">\n <FluxIcon name=\"xmark\"/>\n </button>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxColor, FluxIconName, FluxPressableType, FluxTo } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { useTranslate } from '$flux/composable/private';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Badge.module.scss';\n\n const emit = defineEmits<FluxButtonEmits & {\n delete: [];\n }>();\n\n const {\n color = 'gray',\n type = 'none'\n } = defineProps<{\n readonly color?: FluxColor;\n readonly dot?: boolean;\n readonly icon?: FluxIconName;\n readonly isDeletable?: boolean;\n readonly isLoading?: boolean;\n readonly label: string;\n readonly type?: FluxPressableType;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n const translate = useTranslate();\n\n function onDeleteClick(): void {\n emit('delete');\n }\n</script>\n","<template>\n <FluxPressable\n :class=\"clsx(\n color === 'gray' && $style.badgeGray,\n color === 'primary' && $style.badgePrimary,\n color === 'danger' && $style.badgeDanger,\n color === 'info' && $style.badgeInfo,\n color === 'success' && $style.badgeSuccess,\n color === 'warning' && $style.badgeWarning\n )\"\n :component-type=\"type\"\n :tabindex=\"tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.badgeIcon\"\n :size=\"16\"/>\n\n <span\n v-else-if=\"dot\"\n :class=\"$style.badgeDot\"/>\n\n <FluxIcon\n v-else-if=\"icon\"\n :class=\"$style.badgeIcon\"\n :size=\"16\"\n :name=\"icon\"/>\n\n <span :class=\"$style.badgeLabel\">\n {{ label }}\n </span>\n\n <button\n v-if=\"type === 'none' && isDeletable\"\n :class=\"$style.badgeClose\"\n type=\"button\"\n :aria-label=\"translate('flux.delete')\"\n @click.stop=\"onDeleteClick()\">\n <FluxIcon name=\"xmark\"/>\n </button>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxColor, FluxIconName, FluxPressableType, FluxTo } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { useTranslate } from '$flux/composable/private';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Badge.module.scss';\n\n const emit = defineEmits<FluxButtonEmits & {\n delete: [];\n }>();\n\n const {\n color = 'gray',\n type = 'none'\n } = defineProps<{\n readonly color?: FluxColor;\n readonly dot?: boolean;\n readonly icon?: FluxIconName;\n readonly isDeletable?: boolean;\n readonly isLoading?: boolean;\n readonly label: string;\n readonly type?: FluxPressableType;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n const translate = useTranslate();\n\n function onDeleteClick(): void {\n emit('delete');\n }\n</script>\n","<template>\n <FluxStack\n direction=\"horizontal\"\n :gap=\"6\"\n is-wrapping>\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxStack\n direction=\"horizontal\"\n :gap=\"6\"\n is-wrapping>\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<script lang=\"ts\">\n import { flattenVNodeTree, orange600, pink600, purple600 } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { cloneVNode, defineComponent, Fragment, h, type PropType } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n export default defineComponent({\n inheritAttrs: false,\n props: {\n colors: {default: [purple600, 'transparent', orange600, 'transparent', pink600, 'transparent', purple600], type: Array as PropType<string[]>},\n duration: {default: 9, type: Number},\n offset: {default: 1, type: Number},\n radius: {default: undefined, type: [String, Number] as PropType<string | number>},\n width: {default: 2, type: Number}\n },\n setup(props, {attrs, slots}) {\n return () => h(\n Fragment,\n flattenVNodeTree(slots.default?.() ?? []).map(vnode => cloneVNode(vnode, {\n ...attrs,\n class: clsx(\n attrs.class as string,\n $style.borderShine\n ),\n style: {\n '--shine-colors': props.colors.join(', '),\n '--shine-duration': props.duration,\n '--shine-offset': props.offset,\n '--shine-radius': props.radius,\n '--shine-width': props.width\n }\n }))\n );\n }\n });\n</script>\n","<script lang=\"ts\">\n import { flattenVNodeTree, orange600, pink600, purple600 } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { cloneVNode, defineComponent, Fragment, h, type PropType } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n export default defineComponent({\n inheritAttrs: false,\n props: {\n colors: {default: [purple600, 'transparent', orange600, 'transparent', pink600, 'transparent', purple600], type: Array as PropType<string[]>},\n duration: {default: 9, type: Number},\n offset: {default: 1, type: Number},\n radius: {default: undefined, type: [String, Number] as PropType<string | number>},\n width: {default: 2, type: Number}\n },\n setup(props, {attrs, slots}) {\n return () => h(\n Fragment,\n flattenVNodeTree(slots.default?.() ?? []).map(vnode => cloneVNode(vnode, {\n ...attrs,\n class: clsx(\n attrs.class as string,\n $style.borderShine\n ),\n style: {\n '--shine-colors': props.colors.join(', '),\n '--shine-duration': props.duration,\n '--shine-offset': props.offset,\n '--shine-radius': props.radius,\n '--shine-width': props.width\n }\n }))\n );\n }\n });\n</script>\n","<template>\n <div\n :class=\"clsx(\n !color && $style.iconBoxedDefault,\n color === 'gray' && $style.iconBoxedGray,\n color === 'primary' && $style.iconBoxedPrimary,\n color === 'danger' && $style.iconBoxedDanger,\n color === 'info' && $style.iconBoxedInfo,\n color === 'success' && $style.iconBoxedSuccess,\n color === 'warning' && $style.iconBoxedWarning,\n )\"\n :style=\"{\n fontSize: size && `${size}px`\n }\">\n <FluxIcon :name=\"name\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxColor, FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Icon.module.scss';\n\n defineProps<{\n readonly color?: FluxColor;\n readonly name: FluxIconName;\n readonly size?: number;\n }>();\n</script>\n","<template>\n <div\n :class=\"clsx(\n !color && $style.iconBoxedDefault,\n color === 'gray' && $style.iconBoxedGray,\n color === 'primary' && $style.iconBoxedPrimary,\n color === 'danger' && $style.iconBoxedDanger,\n color === 'info' && $style.iconBoxedInfo,\n color === 'success' && $style.iconBoxedSuccess,\n color === 'warning' && $style.iconBoxedWarning,\n )\"\n :style=\"{\n fontSize: size && `${size}px`\n }\">\n <FluxIcon :name=\"name\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxColor, FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Icon.module.scss';\n\n defineProps<{\n readonly color?: FluxColor;\n readonly name: FluxIconName;\n readonly size?: number;\n }>();\n</script>\n","<template>\n <component :is=\"tagName\">\n <slot/>\n </component>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n\n defineProps<{\n readonly tagName: keyof HTMLElementTagNameMap;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <component :is=\"tagName\">\n <slot/>\n </component>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n\n defineProps<{\n readonly tagName: keyof HTMLElementTagNameMap;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n ref=\"popup\"\n :style=\"{\n '--x': `${state.x}px`,\n '--y': `${state.y}px`,\n '--width': state.width ? `${state.width}px` : undefined\n }\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useMutationObserver } from '@basmilius/common';\n import { isHtmlElement } from '@basmilius/utils';\n import type { FluxDirection } from '@flux-ui/types';\n import { type ComponentPublicInstance, onMounted, onUnmounted, reactive, ref, unref, useTemplateRef, type VNode, watchEffect } from 'vue';\n\n const {\n anchor,\n direction = 'vertical',\n margin = 12,\n position,\n useAnchorWidth\n } = defineProps<{\n readonly anchor?: ComponentPublicInstance | HTMLElement | null;\n readonly direction?: FluxDirection;\n readonly margin?: number;\n readonly position?:\n | 'top' | 'top-left' | 'top-right'\n | 'left' | 'left-top' | 'left-bottom'\n | 'right' | 'right-top' | 'right-bottom'\n | 'bottom' | 'bottom-left' | 'bottom-right';\n readonly useAnchorWidth?: boolean;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const anchorRef = ref<HTMLElement>();\n const popupRef = useTemplateRef('popup');\n\n const state = reactive({\n x: 0,\n y: 0,\n width: null as number | null\n });\n\n onMounted(() => {\n window.addEventListener('resize', onResize, {passive: true});\n window.addEventListener('scroll', onScroll, {capture: true, passive: true});\n });\n\n onUnmounted(() => {\n window.removeEventListener('resize', onResize);\n window.removeEventListener('scroll', onScroll, {capture: true});\n });\n\n useMutationObserver(popupRef, () => {\n reposition();\n }, {childList: true, subtree: true});\n\n function reposition(): void {\n const anchor = unref(anchorRef);\n const popup = unref(popupRef);\n\n if (!anchor || !popup) {\n return;\n }\n\n const {x, y, height, width} = anchor.getBoundingClientRect();\n const {height: popupHeight, width: popupWidth} = popup.getBoundingClientRect();\n\n let px: number,\n py: number;\n\n switch (position) {\n case 'top':\n px = x + width / 2 - popupWidth / 2;\n py = y - popupHeight - margin;\n break;\n\n case 'top-left':\n px = x;\n py = y - popupHeight - margin;\n break;\n\n case 'top-right':\n px = x - popupWidth + width;\n py = y - popupHeight - margin;\n break;\n\n case 'left':\n px = x - popupWidth - margin;\n py = y + height / 2 - popupHeight / 2;\n break;\n\n case 'left-top':\n px = x - popupWidth - margin;\n py = y;\n break;\n\n case 'left-bottom':\n px = x - popupWidth - margin;\n py = y + height - popupHeight;\n break;\n\n case 'right':\n px = x + width + margin;\n py = y + height / 2 - popupHeight / 2;\n break;\n\n case 'right-top':\n px = x + width + margin;\n py = y;\n break;\n\n case 'right-bottom':\n px = x + width + margin;\n py = y + height - popupHeight;\n break;\n\n case 'bottom':\n px = x + width / 2 - popupWidth / 2;\n py = y + height + margin;\n break;\n\n case 'bottom-left':\n px = x;\n py = y + height + margin;\n break;\n\n case 'bottom-right':\n px = x - popupWidth + width;\n py = y + height + margin;\n break;\n\n default:\n if (direction === 'horizontal') {\n px = x + width + margin;\n py = y + height / 2 - popupHeight / 2;\n\n if (px + popupWidth > innerWidth) {\n px = x - popupWidth - margin;\n }\n } else {\n px = x + width / 2 - popupWidth / 2;\n py = y + height + margin;\n\n if (py + popupHeight + margin > innerHeight) {\n py = y - popupHeight - margin;\n }\n }\n\n if (py < 0 || py + popupHeight > innerHeight) {\n py = innerHeight / 2 - popupHeight / 2;\n }\n break;\n }\n\n state.x = px;\n state.y = py;\n }\n\n function resize(): void {\n const anchor = unref(anchorRef);\n\n if (!anchor) {\n return;\n }\n\n const {width} = anchor.getBoundingClientRect();\n state.width = useAnchorWidth ? width : null;\n }\n\n function onResize(): void {\n resize();\n reposition();\n }\n\n function onScroll(): void {\n reposition();\n }\n\n watchEffect(() => {\n if (!anchor || (!isHtmlElement(anchor) && !anchor.$el)) {\n return;\n }\n\n anchorRef.value = isHtmlElement(anchor) ? anchor : anchor.$el;\n\n requestAnimationFrame(() => {\n requestAnimationFrame(resize);\n requestAnimationFrame(reposition);\n });\n });\n</script>\n","<template>\n <div\n ref=\"popup\"\n :style=\"{\n '--x': `${state.x}px`,\n '--y': `${state.y}px`,\n '--width': state.width ? `${state.width}px` : undefined\n }\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useMutationObserver } from '@basmilius/common';\n import { isHtmlElement } from '@basmilius/utils';\n import type { FluxDirection } from '@flux-ui/types';\n import { type ComponentPublicInstance, onMounted, onUnmounted, reactive, ref, unref, useTemplateRef, type VNode, watchEffect } from 'vue';\n\n const {\n anchor,\n direction = 'vertical',\n margin = 12,\n position,\n useAnchorWidth\n } = defineProps<{\n readonly anchor?: ComponentPublicInstance | HTMLElement | null;\n readonly direction?: FluxDirection;\n readonly margin?: number;\n readonly position?:\n | 'top' | 'top-left' | 'top-right'\n | 'left' | 'left-top' | 'left-bottom'\n | 'right' | 'right-top' | 'right-bottom'\n | 'bottom' | 'bottom-left' | 'bottom-right';\n readonly useAnchorWidth?: boolean;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const anchorRef = ref<HTMLElement>();\n const popupRef = useTemplateRef('popup');\n\n const state = reactive({\n x: 0,\n y: 0,\n width: null as number | null\n });\n\n onMounted(() => {\n window.addEventListener('resize', onResize, {passive: true});\n window.addEventListener('scroll', onScroll, {capture: true, passive: true});\n });\n\n onUnmounted(() => {\n window.removeEventListener('resize', onResize);\n window.removeEventListener('scroll', onScroll, {capture: true});\n });\n\n useMutationObserver(popupRef, () => {\n reposition();\n }, {childList: true, subtree: true});\n\n function reposition(): void {\n const anchor = unref(anchorRef);\n const popup = unref(popupRef);\n\n if (!anchor || !popup) {\n return;\n }\n\n const {x, y, height, width} = anchor.getBoundingClientRect();\n const {height: popupHeight, width: popupWidth} = popup.getBoundingClientRect();\n\n let px: number,\n py: number;\n\n switch (position) {\n case 'top':\n px = x + width / 2 - popupWidth / 2;\n py = y - popupHeight - margin;\n break;\n\n case 'top-left':\n px = x;\n py = y - popupHeight - margin;\n break;\n\n case 'top-right':\n px = x - popupWidth + width;\n py = y - popupHeight - margin;\n break;\n\n case 'left':\n px = x - popupWidth - margin;\n py = y + height / 2 - popupHeight / 2;\n break;\n\n case 'left-top':\n px = x - popupWidth - margin;\n py = y;\n break;\n\n case 'left-bottom':\n px = x - popupWidth - margin;\n py = y + height - popupHeight;\n break;\n\n case 'right':\n px = x + width + margin;\n py = y + height / 2 - popupHeight / 2;\n break;\n\n case 'right-top':\n px = x + width + margin;\n py = y;\n break;\n\n case 'right-bottom':\n px = x + width + margin;\n py = y + height - popupHeight;\n break;\n\n case 'bottom':\n px = x + width / 2 - popupWidth / 2;\n py = y + height + margin;\n break;\n\n case 'bottom-left':\n px = x;\n py = y + height + margin;\n break;\n\n case 'bottom-right':\n px = x - popupWidth + width;\n py = y + height + margin;\n break;\n\n default:\n if (direction === 'horizontal') {\n px = x + width + margin;\n py = y + height / 2 - popupHeight / 2;\n\n if (px + popupWidth > innerWidth) {\n px = x - popupWidth - margin;\n }\n } else {\n px = x + width / 2 - popupWidth / 2;\n py = y + height + margin;\n\n if (py + popupHeight + margin > innerHeight) {\n py = y - popupHeight - margin;\n }\n }\n\n if (py < 0 || py + popupHeight > innerHeight) {\n py = innerHeight / 2 - popupHeight / 2;\n }\n break;\n }\n\n state.x = px;\n state.y = py;\n }\n\n function resize(): void {\n const anchor = unref(anchorRef);\n\n if (!anchor) {\n return;\n }\n\n const {width} = anchor.getBoundingClientRect();\n state.width = useAnchorWidth ? width : null;\n }\n\n function onResize(): void {\n resize();\n reposition();\n }\n\n function onScroll(): void {\n reposition();\n }\n\n watchEffect(() => {\n if (!anchor || (!isHtmlElement(anchor) && !anchor.$el)) {\n return;\n }\n\n anchorRef.value = isHtmlElement(anchor) ? anchor : anchor.$el;\n\n requestAnimationFrame(() => {\n requestAnimationFrame(resize);\n requestAnimationFrame(reposition);\n });\n });\n</script>\n","<template>\n <div :class=\"$style.paneFooter\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.paneFooter\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.paneHeader\">\n <slot name=\"before\"/>\n\n <FluxIcon\n v-if=\"icon\"\n :class=\"$style.paneHeaderIcon\"\n :size=\"20\"\n :name=\"icon\"/>\n\n <div\n v-if=\"title || subtitle\"\n :class=\"$style.paneHeaderCaption\">\n <strong v-if=\"title\">\n {{ title }}\n </strong>\n\n <span v-if=\"subtitle\">\n {{ subtitle }}\n </span>\n </div>\n\n <slot name=\"after\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxIconName } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n defineProps<{\n readonly icon?: FluxIconName;\n readonly subtitle?: string;\n readonly title?: string;\n }>();\n\n defineSlots<{\n after(): VNode[];\n before(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.paneHeader\">\n <slot name=\"before\"/>\n\n <FluxIcon\n v-if=\"icon\"\n :class=\"$style.paneHeaderIcon\"\n :size=\"20\"\n :name=\"icon\"/>\n\n <div\n v-if=\"title || subtitle\"\n :class=\"$style.paneHeaderCaption\">\n <strong v-if=\"title\">\n {{ title }}\n </strong>\n\n <span v-if=\"subtitle\">\n {{ subtitle }}\n </span>\n </div>\n\n <slot name=\"after\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxIconName } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n defineProps<{\n readonly icon?: FluxIconName;\n readonly subtitle?: string;\n readonly title?: string;\n }>();\n\n defineSlots<{\n after(): VNode[];\n before(): VNode[];\n }>();\n</script>\n","<template>\n <FluxPane>\n <FluxPaneHeader\n :icon=\"icon\"\n :title=\"title\"/>\n\n <FluxPaneBody\n v-if=\"message\"\n v-html=\"message\"/>\n\n <FluxPaneBody v-if=\"$slots.default\">\n <slot/>\n </FluxPaneBody>\n\n <FluxPaneFooter>\n <FluxSpacer/>\n\n <slot name=\"footer\"/>\n </FluxPaneFooter>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxIconName } from '@flux-ui/types';\n import FluxPane from '../FluxPane.vue';\n import FluxPaneBody from '../FluxPaneBody.vue';\n import FluxPaneFooter from '../FluxPaneFooter.vue';\n import FluxPaneHeader from '../FluxPaneHeader.vue';\n import FluxSpacer from '../FluxSpacer.vue';\n\n defineProps<{\n readonly icon?: FluxIconName;\n readonly message?: string;\n readonly title: string;\n }>();\n\n defineSlots<{\n default?(): VNode[];\n footer(): VNode[];\n }>();\n</script>\n","<template>\n <FluxPane>\n <FluxPaneHeader\n :icon=\"icon\"\n :title=\"title\"/>\n\n <FluxPaneBody\n v-if=\"message\"\n v-html=\"message\"/>\n\n <FluxPaneBody v-if=\"$slots.default\">\n <slot/>\n </FluxPaneBody>\n\n <FluxPaneFooter>\n <FluxSpacer/>\n\n <slot name=\"footer\"/>\n </FluxPaneFooter>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxIconName } from '@flux-ui/types';\n import FluxPane from '../FluxPane.vue';\n import FluxPaneBody from '../FluxPaneBody.vue';\n import FluxPaneFooter from '../FluxPaneFooter.vue';\n import FluxPaneHeader from '../FluxPaneHeader.vue';\n import FluxSpacer from '../FluxSpacer.vue';\n\n defineProps<{\n readonly icon?: FluxIconName;\n readonly message?: string;\n readonly title: string;\n }>();\n\n defineSlots<{\n default?(): VNode[];\n footer(): VNode[];\n }>();\n</script>\n",".filter {\n max-height: 50dvh;\n max-width: 100%;\n padding: 9px;\n width: 270px;\n overflow: auto;\n scrollbar-width: none;\n transition: height 150ms var(--deceleration-curve);\n z-index: 0;\n\n &::-webkit-scrollbar {\n display: none;\n height: 0;\n width: 0;\n }\n\n .menu {\n > :where(.divider, .separator) {\n margin: 3px -9px;\n }\n\n > .menuGroup > .menuSubHeader {\n top: 51px;\n }\n\n > .menuGroup:has(.filterSearch) > .menuSubHeader {\n top: 105px;\n }\n\n .menuItemLabel {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n\n .paneBody {\n margin: -9px;\n }\n}\n\n.filterBadge {\n padding-left: 6px;\n padding-right: 6px;\n background: var(--primary-50);\n border: 1px dashed var(--primary-300);\n font-weight: 500;\n\n :local(.badgeLabel) {\n color: var(--primary-900);\n }\n}\n\n.filterButton {\n border: 1px solid var(--surface-stroke);\n box-shadow: none;\n\n :local(.badge) {\n border-radius: var(--radius-half);\n }\n\n :local(.buttonIcon) {\n color: var(--primary-700);\n font-size: 16px;\n }\n}\n\n.filterHeader {\n position: sticky;\n margin: -9px -9px 3px;\n padding: 9px;\n top: -9px;\n background: var(--surface);\n border-bottom: 1px solid var(--surface-stroke);\n z-index: 2;\n\n &:first-child {\n border-top-left-radius: var(--radius);\n border-top-right-radius: var(--radius);\n }\n}\n\n.filterBack {\n flex-grow: 1;\n}\n\n.filterReset {\n width: 42px;\n justify-content: center;\n}\n\n.filterDatePicker {\n margin: -9px;\n}\n\n.filterSearch {\n position: sticky;\n margin: -9px -9px 0;\n padding: 9px;\n background: linear-gradient(to bottom, var(--surface) 75%, transparent);\n z-index: 1;\n}\n\n.filterHeader + .menuGroup .filterSearch {\n top: 52px;\n}\n\n.filterBar {\n display: flex;\n flex-flow: row nowrap;\n flex-grow: 1;\n gap: 15px;\n}\n\n.filterBarSearch {\n max-width: 300px;\n}\n","<template>\n <FluxBadge\n v-if=\"valueLabel\"\n :class=\"$style.filterBadge\"\n :is-loading=\"isLoading\"\n :label=\"valueLabel\"\n @click=\"onClick\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useLoaded } from '@basmilius/common';\n import type { FluxFilterItem, FluxFilterValue } from '@flux-ui/types';\n import { computed, ref, unref, watch } from 'vue';\n import { FluxBadge } from '$flux/component';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n item,\n value\n } = defineProps<{\n readonly item: FluxFilterItem;\n readonly value: FluxFilterValue;\n }>();\n\n const {isLoading, loaded} = useLoaded();\n const getValueLabel = computed(() => loaded(item.getValueLabel));\n\n const valueLabel = ref<string>();\n\n function onClick(evt: MouseEvent): void {\n emit('click', evt);\n }\n\n watch([() => item, () => value], async () => {\n valueLabel.value = await unref(getValueLabel)(value) ?? undefined;\n }, {deep: true, immediate: true});\n</script>\n","<template>\n <FluxBadge\n v-if=\"valueLabel\"\n :class=\"$style.filterBadge\"\n :is-loading=\"isLoading\"\n :label=\"valueLabel\"\n @click=\"onClick\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useLoaded } from '@basmilius/common';\n import type { FluxFilterItem, FluxFilterValue } from '@flux-ui/types';\n import { computed, ref, unref, watch } from 'vue';\n import { FluxBadge } from '$flux/component';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n item,\n value\n } = defineProps<{\n readonly item: FluxFilterItem;\n readonly value: FluxFilterValue;\n }>();\n\n const {isLoading, loaded} = useLoaded();\n const getValueLabel = computed(() => loaded(item.getValueLabel));\n\n const valueLabel = ref<string>();\n\n function onClick(evt: MouseEvent): void {\n emit('click', evt);\n }\n\n watch([() => item, () => value], async () => {\n valueLabel.value = await unref(getValueLabel)(value) ?? undefined;\n }, {deep: true, immediate: true});\n</script>\n","@use '$flux/css/mixin';\n\n.menu {\n display: flex;\n flex-flow: column;\n}\n\n.menuNormal {\n composes: menu;\n\n gap: 6px;\n}\n\n.menuLarge {\n composes: menu;\n\n gap: 9px;\n}\n\n.menuGroup {\n counter-reset: menu-group;\n}\n\n.menuGroupHorizontal {\n composes: menuGroup;\n\n display: flex;\n gap: 3px;\n}\n\n.menuGroupVertical {\n composes: menuGroup;\n\n display: flex;\n flex-flow: column;\n gap: 1px;\n}\n\n.menuItem {\n composes: button from './base/Button.module.scss';\n\n height: unset;\n min-height: 42px;\n gap: 15px;\n justify-content: flex-start;\n border: 0;\n box-shadow: none;\n color: var(--foreground);\n text-align: left;\n\n @include mixin.hover {\n background: var(--gray-100);\n }\n\n &:active {\n background: var(--gray-200);\n }\n\n :local(.badge):last-child {\n margin-right: -6px;\n }\n}\n\n.menuItemIcon {\n composes: buttonIcon from './base/Button.module.scss';\n}\n\n.menuItemLabel {\n composes: buttonLabel from './base/Button.module.scss';\n\n flex-grow: 1;\n font-weight: 400;\n text-align: left;\n\n &:only-child {\n margin-left: 0;\n margin-right: 0;\n min-width: unset;\n }\n}\n\n.menuItemActive {\n background: var(--primary-600);\n color: var(--primary-50);\n\n .menuItemIcon {\n color: var(--primary-25);\n }\n\n @include mixin.hover {\n background: var(--primary-600);\n }\n\n &:active {\n background: var(--primary-600);\n }\n}\n\n.menuItemDestructive {\n .menuItemIcon {\n color: var(--danger-700);\n }\n\n .menuItemLabel {\n color: var(--danger-700);\n }\n}\n\n.menuItemHighlighted {\n background: var(--primary-100);\n color: var(--primary-600);\n\n .menuItemIcon {\n color: var(--primary-700);\n }\n\n @include mixin.hover {\n background: var(--primary-100);\n }\n\n &:active {\n background: var(--primary-100);\n }\n\n :local(.badge) {\n --surface-stroke: var(--primary-200);\n }\n}\n\n.menuItemIndented {\n margin-left: 33px;\n}\n\n.menuCollapsible {\n display: flex;\n flex-flow: column;\n}\n\n.menuCollapsibleOpened {\n composes: menuCollapsible;\n}\n\n.menuCollapsibleBody {\n position: relative;\n min-height: 0;\n transition: height 300ms var(--swift-out), opacity 200ms var(--swift-out);\n\n &::before {\n content: '';\n position: absolute;\n top: 3px;\n bottom: 3px;\n left: 21px;\n width: 2px;\n background: var(--surface-stroke);\n }\n\n &:global(.v-enter-from),\n &:global(.v-leave-to) {\n opacity: 0;\n }\n\n &:global(.v-enter-to),\n &:global(.v-leave-from) {\n opacity: 1;\n }\n\n &:global(.v-enter-active),\n &:global(.v-leave-active) {\n overflow: hidden;\n }\n}\n\n.menuCollapsibleContent {\n display: flex;\n padding-top: 3px;\n padding-bottom: 3px;\n padding-left: 35px;\n flex-flow: column;\n gap: 3px;\n}\n\n.menuItemSelectableIcon {\n composes: buttonIcon from './base/Button.module.scss';\n}\n\n.menuItemSelected .menuItemSelectableIcon {\n color: var(--primary-600);\n}\n\n.menuItemCommand {\n margin-top: 1px;\n margin-left: auto;\n padding-left: 6px;\n color: var(--foreground-secondary);\n font: inherit;\n font-size: 14px;\n white-space: nowrap;\n}\n\n.menuItemCommandIcon {\n margin-right: -6px;\n color: var(--foreground-secondary);\n\n &.icon {\n font-size: 16px;\n }\n}\n\n.menuItemCommand + .menuItemCommandIcon {\n margin-left: -9px;\n}\n\n.menuItemActive .menuItemCommand,\n.menuItemActive .menuItemCommandIcon {\n color: var(--primary-300);\n}\n\n.menuItemImage {\n margin-left: -2px;\n margin-right: -2px;\n height: 24px;\n width: 24px;\n border-radius: 3px;\n}\n\n.menuItem :local(.avatar) {\n margin: -3px;\n font-size: 24px;\n}\n\n.menuGroupHorizontal .menuItem {\n flex-basis: 0;\n flex-grow: 1;\n\n &:has(.menuItemIcon:only-child) {\n justify-content: center;\n }\n}\n\n.menuTitle {\n padding: 0 12px;\n color: var(--foreground-prominent);\n font-size: 18px;\n font-weight: 700;\n}\n\n.menuSubHeader {\n position: sticky;\n display: flex;\n top: 0;\n margin-top: -9px;\n margin-bottom: -3px;\n padding: 12px 12px 6px;\n align-items: center;\n gap: 9px;\n background: linear-gradient(to bottom, var(--surface) 75%, transparent);\n pointer-events: none;\n z-index: 1;\n}\n\n.menuSubHeaderIcon,\n.menuSubHeaderLabel {\n color: var(--foreground-secondary);\n}\n\n.menuSubHeaderIcon {\n font-size: 16px;\n}\n\n.menuSubHeaderLabel {\n flex-grow: 1;\n font-size: 14px;\n}\n\n.menuItem + .menuSubHeader {\n margin-top: 9px;\n}\n\n.menuLarge .menuItem {\n position: relative;\n padding-left: 15px;\n padding-right: 15px;\n\n &::after {\n position: absolute;\n display: block;\n top: 12px;\n right: 12px;\n bottom: 12px;\n width: 4px;\n content: '';\n background: var(--primary-600);\n border-radius: var(--radius-full);\n opacity: 0;\n transition: opacity var(--transition-default);\n }\n}\n\n.menuLarge .menuItem:not(.menuItemIndented) {\n min-height: 48px;\n\n &::after {\n background: var(--primary-25);\n }\n}\n\n.menuLarge .menuItemActive {\n &::after {\n opacity: 1;\n }\n\n &.menuItemIndented {\n background: var(--gray-100);\n\n .menuItemIcon,\n .menuItemLabel {\n color: var(--foreground-prominent);\n }\n }\n}\n\n.basePane > .menu {\n margin-left: 9px;\n margin-right: 9px;\n\n &:first-child {\n margin-top: 9px;\n }\n\n &:last-child {\n margin-bottom: 9px;\n }\n\n > :where(.divider, .separator) {\n margin: 3px -9px;\n }\n}\n\n.expandableBody > .menu {\n margin-left: 9px;\n margin-right: 9px;\n\n &:last-child {\n margin-bottom: 9px;\n }\n\n > :where(.divider, .separator) {\n margin-left: 18px;\n margin-right: 18px;\n }\n}\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isLoading, label, href, rel, target, to}\"\n :css-class=\"$style.menuItem\"\n :css-class-icon=\"$style.menuItemIcon\"\n :css-class-label=\"$style.menuItemLabel\"\n is-filled\n :role=\"isSelectable ? 'menuitemradio' : 'menuitem'\"\n :class=\"{\n [$style.menuItemActive]: isActive,\n [$style.menuItemDestructive]: isDestructive,\n [$style.menuItemHighlighted]: isHighlighted,\n [$style.menuItemIndented]: isIndented,\n [$style.menuItemSelected]: isSelectable && isSelected\n }\"\n :aria-checked=\"isSelectable ? isSelected : undefined\"\n :tabindex=\"tabindex\"\n @click=\"$emit('click', $event)\">\n <template\n v-if=\"isSelectable && (!iconLeading || isSelected)\"\n #iconLeading>\n <FluxIcon\n :class=\"$style.menuItemSelectableIcon\"\n :name=\"isSelected ? 'circle-check' : undefined\"/>\n </template>\n\n <template\n v-else-if=\"imageSrc\"\n #iconLeading>\n <img\n :class=\"$style.menuItemImage\"\n :src=\"imageSrc\"\n :alt=\"imageAlt ?? ''\"/>\n </template>\n\n <template\n v-else-if=\"slots.before\"\n #iconLeading>\n <slot name=\"before\"/>\n </template>\n\n <template\n v-if=\"command || commandIcon || commandLoading || slots.after\"\n #after>\n <FluxSpinner\n v-if=\"commandLoading\"\n :class=\"$style.menuItemCommandIcon\"\n :size=\"16\"/>\n\n <template v-else>\n <kbd\n v-if=\"command\"\n :class=\"$style.menuItemCommand\">\n {{ command }}\n </kbd>\n\n <FluxIcon\n v-if=\"commandIcon\"\n :class=\"$style.menuItemCommandIcon\"\n :name=\"commandIcon\"/>\n </template>\n\n <slot name=\"after\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxButtonEmits, FluxButtonProps, FluxIconName } from '@flux-ui/types';\n import FluxButton from './FluxButton.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Menu.module.scss';\n\n defineEmits<FluxButtonEmits>();\n\n const slots = defineSlots<{\n after(): VNode[];\n before(): VNode[];\n }>();\n\n const {\n type = 'button'\n } = defineProps<Omit<FluxButtonProps, 'isFilled' | 'isSubmit' | 'size'> & {\n readonly command?: string;\n readonly commandIcon?: FluxIconName;\n readonly commandLoading?: boolean;\n readonly imageAlt?: string;\n readonly imageSrc?: string;\n readonly isActive?: boolean;\n readonly isDestructive?: boolean;\n readonly isHighlighted?: boolean;\n readonly isIndented?: boolean;\n readonly isSelectable?: boolean;\n readonly isSelected?: boolean;\n }>();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isLoading, label, href, rel, target, to}\"\n :css-class=\"$style.menuItem\"\n :css-class-icon=\"$style.menuItemIcon\"\n :css-class-label=\"$style.menuItemLabel\"\n is-filled\n :role=\"isSelectable ? 'menuitemradio' : 'menuitem'\"\n :class=\"{\n [$style.menuItemActive]: isActive,\n [$style.menuItemDestructive]: isDestructive,\n [$style.menuItemHighlighted]: isHighlighted,\n [$style.menuItemIndented]: isIndented,\n [$style.menuItemSelected]: isSelectable && isSelected\n }\"\n :aria-checked=\"isSelectable ? isSelected : undefined\"\n :tabindex=\"tabindex\"\n @click=\"$emit('click', $event)\">\n <template\n v-if=\"isSelectable && (!iconLeading || isSelected)\"\n #iconLeading>\n <FluxIcon\n :class=\"$style.menuItemSelectableIcon\"\n :name=\"isSelected ? 'circle-check' : undefined\"/>\n </template>\n\n <template\n v-else-if=\"imageSrc\"\n #iconLeading>\n <img\n :class=\"$style.menuItemImage\"\n :src=\"imageSrc\"\n :alt=\"imageAlt ?? ''\"/>\n </template>\n\n <template\n v-else-if=\"slots.before\"\n #iconLeading>\n <slot name=\"before\"/>\n </template>\n\n <template\n v-if=\"command || commandIcon || commandLoading || slots.after\"\n #after>\n <FluxSpinner\n v-if=\"commandLoading\"\n :class=\"$style.menuItemCommandIcon\"\n :size=\"16\"/>\n\n <template v-else>\n <kbd\n v-if=\"command\"\n :class=\"$style.menuItemCommand\">\n {{ command }}\n </kbd>\n\n <FluxIcon\n v-if=\"commandIcon\"\n :class=\"$style.menuItemCommandIcon\"\n :name=\"commandIcon\"/>\n </template>\n\n <slot name=\"after\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxButtonEmits, FluxButtonProps, FluxIconName } from '@flux-ui/types';\n import FluxButton from './FluxButton.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Menu.module.scss';\n\n defineEmits<FluxButtonEmits>();\n\n const slots = defineSlots<{\n after(): VNode[];\n before(): VNode[];\n }>();\n\n const {\n type = 'button'\n } = defineProps<Omit<FluxButtonProps, 'isFilled' | 'isSubmit' | 'size'> & {\n readonly command?: string;\n readonly commandIcon?: FluxIconName;\n readonly commandLoading?: boolean;\n readonly imageAlt?: string;\n readonly imageSrc?: string;\n readonly isActive?: boolean;\n readonly isDestructive?: boolean;\n readonly isHighlighted?: boolean;\n readonly isIndented?: boolean;\n readonly isSelectable?: boolean;\n readonly isSelected?: boolean;\n }>();\n</script>\n","<template>\n <FluxMenuItem\n :command=\"valueLabel\"\n command-icon=\"angle-right\"\n :command-loading=\"isLoading\"\n :icon-leading=\"item.icon\"\n :label=\"item.label\"\n type=\"button\"\n @click=\"onClick\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useLoaded } from '@basmilius/common';\n import type { FluxFilterItem, FluxFilterValue } from '@flux-ui/types';\n import { computed, ref, unref, watch } from 'vue';\n import FluxMenuItem from '$flux/component/FluxMenuItem.vue';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n item,\n value\n } = defineProps<{\n readonly item: FluxFilterItem;\n readonly value: FluxFilterValue;\n }>();\n\n const {isLoading, loaded} = useLoaded();\n const getValueLabel = computed(() => loaded(item.getValueLabel));\n\n const valueLabel = ref<string>();\n\n function onClick(evt: MouseEvent): void {\n emit('click', evt);\n }\n\n watch([() => item, () => value], async ([, nextValue], _prev, onCleanup) => {\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n\n const nextLabel = await unref(getValueLabel)(nextValue);\n\n if (!cancelled) {\n valueLabel.value = nextLabel ?? undefined;\n }\n }, {deep: true, immediate: true});\n</script>\n","<template>\n <FluxMenuItem\n :command=\"valueLabel\"\n command-icon=\"angle-right\"\n :command-loading=\"isLoading\"\n :icon-leading=\"item.icon\"\n :label=\"item.label\"\n type=\"button\"\n @click=\"onClick\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useLoaded } from '@basmilius/common';\n import type { FluxFilterItem, FluxFilterValue } from '@flux-ui/types';\n import { computed, ref, unref, watch } from 'vue';\n import FluxMenuItem from '$flux/component/FluxMenuItem.vue';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n item,\n value\n } = defineProps<{\n readonly item: FluxFilterItem;\n readonly value: FluxFilterValue;\n }>();\n\n const {isLoading, loaded} = useLoaded();\n const getValueLabel = computed(() => loaded(item.getValueLabel));\n\n const valueLabel = ref<string>();\n\n function onClick(evt: MouseEvent): void {\n emit('click', evt);\n }\n\n watch([() => item, () => value], async ([, nextValue], _prev, onCleanup) => {\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n\n const nextLabel = await unref(getValueLabel)(nextValue);\n\n if (!cancelled) {\n valueLabel.value = nextLabel ?? undefined;\n }\n }, {deep: true, immediate: true});\n</script>\n","@use '$flux/css/mixin';\n\n%-form-input-group-inner-styles {\n height: 100%;\n min-height: unset;\n border: 0;\n border-radius: 0;\n\n @include mixin.focus-ring-remove();\n\n &:first-child {\n border-top-left-radius: calc(var(--radius) - 1px);\n border-bottom-left-radius: calc(var(--radius) - 1px);\n }\n\n &:last-child {\n border-top-right-radius: calc(var(--radius) - 1px);\n border-bottom-right-radius: calc(var(--radius) - 1px);\n }\n}\n\n.formStructureElement {\n display: flex;\n flex-flow: column;\n}\n\n.form {\n composes: formStructureElement;\n\n gap: 42px;\n}\n\n:local(.pane) > .form {\n display: contents;\n gap: 0;\n}\n\n.formColumn,\n.formSection {\n composes: formStructureElement;\n\n gap: 18px;\n}\n\n.form,\n.formColumn,\n.formSection {\n > .button {\n align-self: flex-start;\n }\n}\n\n.formGrid {\n --columns: 2;\n\n display: grid;\n gap: 18px;\n grid-template-columns: repeat(var(--columns), 1fr);\n}\n\n.formRow {\n display: flex;\n flex-grow: 1;\n gap: 18px;\n}\n\n.formSectionTitle {\n color: var(--foreground-prominent);\n font-size: 18px;\n font-weight: 800;\n}\n\n@include mixin.breakpoint-down(sm) {\n .formGrid {\n grid-template-columns: 1fr;\n }\n\n .formRow {\n flex-flow: column;\n gap: 18px;\n }\n}\n\n.formField {\n display: flex;\n flex: 1 1 0;\n flex-flow: column;\n gap: 6px;\n}\n\n.formFieldHeader {\n display: flex;\n margin-bottom: 0;\n width: 100%;\n align-items: center;\n align-self: flex-start;\n gap: 6px;\n font-size: unset;\n}\n\n.formFieldLabel {\n min-height: 1.6em;\n color: var(--foreground-prominent);\n font-weight: 600;\n}\n\n.formFieldOptional {\n color: var(--foreground-secondary);\n font-size: .85em;\n}\n\n.formFieldValue {\n margin-left: auto;\n color: var(--foreground-secondary);\n font-size: .85em;\n}\n\n.formFieldCounter {\n margin-left: auto;\n color: var(--foreground-secondary);\n font-size: .85em;\n white-space: nowrap;\n}\n\n.formFieldAddition {\n display: flex;\n margin-top: 3px;\n margin-bottom: 3px;\n gap: 9px;\n font-size: 14px;\n line-height: 24px;\n}\n\n.formFieldAdditionIcon {\n margin-top: 4px;\n}\n\n.formFieldAdditionError {\n composes: formFieldAddition;\n\n color: var(--danger-600);\n}\n\n.formFieldAdditionHint {\n composes: formFieldAddition;\n\n color: var(--foreground-secondary);\n}\n\n.formFieldAddition + .formFieldAddition {\n margin-top: 0;\n}\n\n.formInput {\n position: relative;\n display: block;\n height: 42px;\n width: 100%;\n padding: 0 12px;\n background: var(--surface);\n background-clip: padding-box;\n border: 1px solid var(--surface-stroke);\n border-radius: var(--radius);\n box-shadow: var(--shadow-px);\n color: var(--foreground);\n transition: var(--transition-default);\n transition-property: background, border-color, mixin.focus-ring-transition-properties();\n\n &::placeholder {\n color: var(--foreground-secondary);\n }\n\n &.isSecondary {\n background: var(--gray-100);\n border-color: transparent;\n box-shadow: none;\n }\n\n &.isCondensed {\n height: 34px;\n }\n\n &.isInvalid {\n border-color: var(--danger-500);\n }\n}\n\n.form .formInput {\n align-self: start;\n}\n\n.formInputDisabled {\n composes: formInput;\n\n background: var(--surface-disabled);\n color: var(--foreground-secondary);\n cursor: not-allowed;\n\n input {\n cursor: inherit;\n }\n}\n\n.formInputEnabled {\n composes: formInput;\n\n @include mixin.focus-ring(-1px, true);\n\n @include mixin.hover {\n border-color: var(--surface-stroke-hover);\n }\n}\n\n.formInputIcon {\n position: absolute;\n margin-top: 11px;\n margin-bottom: 11px;\n color: var(--foreground-secondary);\n pointer-events: none;\n}\n\n.formInputIconTrailing {\n composes: formInputIcon;\n\n right: 12px;\n}\n\n.formInputIconLeading {\n composes: formInputIcon;\n\n left: 12px;\n}\n\n.formInputIconPasswordToggle {\n composes: formInputIconTrailing;\n\n pointer-events: unset;\n cursor: pointer;\n\n @include mixin.hover {\n color: var(--foreground);\n }\n}\n\n.formInputNative {\n position: absolute;\n inset: 0;\n height: 100%;\n width: 100%;\n padding: 0 12px;\n background: unset;\n border: 0;\n border-radius: inherit;\n color: inherit;\n font: inherit;\n outline: 0;\n text-align: left;\n\n &::placeholder {\n color: var(--foreground-secondary);\n }\n\n &::-webkit-search-decoration,\n &::-webkit-search-cancel-button,\n &::-webkit-search-results-button,\n &::-webkit-search-results-decoration {\n -webkit-appearance: none;\n }\n\n &::-webkit-color-swatch {\n border: 0;\n border-radius: var(--radius-half);\n }\n\n &::-webkit-color-swatch-wrapper {\n margin: 0 -12px;\n padding: 3px;\n width: calc(100% + 24px);\n }\n}\n\n.formInputNativeHasIconLeading {\n padding-left: 42px;\n}\n\n.formInputNativeHasIconTrailing {\n padding-right: 42px;\n}\n\n.formInputAddition {\n composes: formInput;\n\n display: flex;\n width: unset;\n align-items: center;\n flex-grow: 0;\n justify-content: center;\n background: var(--surface-disabled);\n color: var(--foreground-secondary);\n pointer-events: none;\n\n &:has(+ .formInput .formInputNative) {\n border-right: 1px solid var(--surface-stroke);\n }\n\n + .formInputAddition {\n border-left: 1px solid var(--surface-stroke);\n }\n\n @at-root .formInput:has(.formInputNative) + & {\n border-left: 1px solid var(--surface-stroke);\n }\n}\n\n.formInputGroup {\n composes: formInputEnabled;\n\n display: flex;\n padding: 0;\n\n @include mixin.focus-ring(-1px, true);\n\n > :is(.formInput, .formSelect, .button) {\n @extend %-form-input-group-inner-styles;\n\n + :is(.button, .buttonGroup) {\n margin: 0;\n border-left: 1px solid var(--surface-stroke);\n }\n }\n\n > .buttonGroup > .button {\n @extend %-form-input-group-inner-styles;\n\n + .button {\n margin: 0;\n border-left: 1px solid var(--surface-stroke);\n }\n }\n\n > .buttonGroup:not(:first-child) > .button:first-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n &.isCondensed,\n &.isSecondary {\n .formInputAddition:not(:last-child) {\n padding-right: 0;\n background: unset;\n border-color: transparent;\n }\n }\n\n &.isSecondary {\n .formInput {\n background: transparent;\n border-color: transparent;\n box-shadow: none;\n }\n\n .secondaryButton {\n background: transparent;\n border-color: var(--surface-stroke);\n box-shadow: none;\n\n @include mixin.hover {\n background: var(--surface-stroke-hover);\n }\n }\n }\n\n &:has(*:disabled) {\n cursor: not-allowed;\n\n > * {\n pointer-events: none;\n }\n }\n\n :is(.button[disabled]),\n :is(.button[aria-disabled=\"true\"]) {\n background: var(--surface-disabled);\n opacity: 1;\n\n &,\n .buttonIcon {\n color: var(--foreground-secondary);\n }\n }\n}\n\n.formDateInput {\n cursor: default;\n\n :is(input) {\n text-align: left;\n\n &::-webkit-input-placeholder {\n visibility: hidden;\n }\n\n &::-webkit-calendar-picker-indicator {\n display: none;\n -webkit-appearance: none;\n }\n }\n}\n\n.formDateRangeInput {\n composes: formInput;\n\n display: flex;\n align-items: center;\n cursor: default;\n}\n\n.formDateTimeInput {\n .formInput:last-child {\n max-width: 99px;\n }\n\n .inputGroup {\n flex-grow: 1;\n }\n}\n\n.formTimeInput {\n composes: formDateInput;\n}\n\n.formSelect {\n composes: formInput;\n\n position: relative;\n display: flex;\n height: unset;\n min-height: 42px;\n padding: 0 39px 0 6px;\n align-items: center;\n flex-wrap: wrap;\n gap: 0 6px;\n cursor: pointer;\n\n &:not(.isDisabled) {\n @include mixin.focus-ring(-1px, true);\n\n @include mixin.hover {\n border-color: var(--surface-stroke-hover);\n }\n }\n\n &.isDisabled {\n cursor: not-allowed;\n }\n\n &.isFocused {\n @include mixin.focus-outline-visible(-1px);\n }\n\n .badge {\n margin-top: 6px;\n margin-bottom: 6px;\n max-width: 100%;\n flex: 0 0 auto;\n }\n}\n\n.formSelectIcon {\n position: absolute;\n top: 50%;\n right: 12px;\n translate: 0 -50%;\n}\n\n.formSelectInput {\n position: sticky;\n top: 0;\n height: 48px;\n margin-bottom: 9px;\n background: var(--surface);\n border-top: 0;\n border-left: 0;\n border-right: 0;\n border-radius: 0;\n outline: 0;\n z-index: 2;\n\n @include mixin.focus-ring-remove;\n\n .formInputIcon {\n right: 0;\n margin: 15px;\n font-size: 18px;\n }\n\n .formInputNative {\n padding-left: 18px;\n padding-right: 18px;\n }\n}\n\n.formSelectPlaceholder {\n margin-left: 6px;\n margin-right: 6px;\n color: var(--foreground-secondary);\n user-select: none;\n}\n\n.formSelectPopup {\n composes: basePane from './base/Pane.module.scss';\n\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n width: var(--width, auto);\n max-height: max(330px, 50dvh);\n min-width: 120px;\n box-shadow: var(--shadow-md);\n overflow: auto;\n translate: var(--x) var(--y);\n z-index: 10000;\n\n .menuItem {\n contain-intrinsic-size: auto 42px;\n content-visibility: auto;\n }\n\n &.isKeyboardAction .menuItem {\n transition: 0s;\n }\n\n &.isSearchable .menuSubHeader {\n top: 48px;\n }\n}\n\n.formSelectSelected {\n position: absolute;\n height: 100%;\n padding-left: 12px;\n padding-right: 42px;\n inset: -1px;\n pointer-events: none;\n\n .buttonLabel {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n}\n\n.isDisabled .formSelectIcon {\n opacity: .5;\n}\n\n.isDisabled .formSelectSelected {\n background: var(--surface-disabled);\n border: 1px solid var(--surface-stroke);\n color: var(--foreground-secondary);\n opacity: 1;\n}\n\n.formTextArea {\n height: unset;\n // 18px = padding / 2px = border\n min-height: calc(18px + 2px + var(--rows, 1) * 1lh);\n padding-top: 9px;\n padding-bottom: 9px;\n flex-shrink: 0;\n field-sizing: content;\n resize: vertical;\n}\n\n.formTextAreaDisabled {\n composes: formInputDisabled;\n composes: formTextArea;\n}\n\n.formTextAreaEnabled {\n composes: formInputEnabled;\n composes: formTextArea;\n}\n\n.checkbox {\n display: inline-flex;\n flex-shrink: 0;\n gap: 12px;\n outline: 0;\n\n &.isDisabled {\n cursor: not-allowed;\n\n .checkboxElement {\n background: var(--surface-disabled);\n border-color: var(--surface-stroke);\n color: var(--foreground-secondary);\n }\n\n .checkboxLabel {\n color: var(--foreground-secondary);\n }\n }\n\n &.isReadonly {\n cursor: default;\n\n .checkboxNative {\n pointer-events: none;\n }\n }\n\n &.isInvalid .checkboxElement {\n border-color: var(--danger-500);\n }\n}\n\n.checkboxElement,\n.checkboxNative {\n margin: 1px 0;\n height: 22px;\n width: 22px;\n}\n\n.checkboxElement {\n position: relative;\n display: inline-flex;\n height: 22px;\n width: 22px;\n padding: 0;\n align-items: center;\n justify-content: center;\n background: var(--gray-50);\n border: 1px solid var(--gray-200);\n border-radius: var(--radius-half);\n color: var(--primary-25);\n cursor: pointer;\n pointer-events: none;\n transition: 210ms var(--swift-out);\n transition-property: background, border-color, color, mixin.focus-ring-transition-properties();\n\n @include mixin.focus-outline;\n\n .icon {\n opacity: 0;\n scale: .85;\n transition: inherit;\n transition-property: opacity;\n\n :is(path) {\n stroke: white;\n stroke-width: 54px;\n }\n }\n}\n\n.checkboxLabel {\n align-self: center;\n}\n\n.checkboxNative {\n position: absolute;\n opacity: 0;\n\n @include mixin.hover {\n + .checkboxElement {\n background: var(--gray-100);\n }\n }\n\n &:is(:checked, :indeterminate) + .checkboxElement {\n background: var(--primary-600);\n border-color: var(--primary-600);\n\n .icon {\n opacity: 1;\n }\n }\n\n &:focus-visible + .checkboxElement {\n @include mixin.focus-outline-visible(2px);\n }\n}\n\n.quantitySelector {\n min-width: max-content;\n align-self: center;\n justify-self: center;\n border: 1px solid var(--surface-stroke);\n border-radius: var(--radius);\n box-shadow: var(--shadow-px);\n overflow: hidden;\n transition: var(--transition-default);\n transition-property: border-color, mixin.focus-ring-transition-properties();\n\n @include mixin.focus-ring(2px, true);\n\n @include mixin.hover {\n border-color: var(--surface-stroke-hover);\n }\n}\n\n.quantitySelectorButton {\n margin: -1px;\n border: 0;\n\n &:first-child {\n margin-right: 0;\n }\n\n &:last-child {\n margin-left: 0;\n }\n\n &,\n &:focus-visible,\n &:focus-within {\n outline: 0;\n }\n}\n\n.quantitySelectorInput {\n composes: formInput;\n\n margin: -1px 0;\n padding-left: 0;\n padding-right: 0;\n border-radius: 0;\n font-variant-numeric: tabular-nums;\n font-weight: 700;\n text-align: center;\n\n &:hover {\n border-color: var(--surface-stroke-hover);\n }\n\n &,\n &:focus-visible,\n &:focus-within {\n outline: 0 !important;\n }\n\n & {\n -moz-appearance: textfield;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n}\n\n.pinInput {\n display: grid;\n width: min-content;\n gap: .4ch;\n grid-template-columns: repeat(var(--max-length, 0), 1fr);\n margin: 0;\n padding: 0;\n border: 0;\n font-size: 24px;\n font-weight: 700;\n}\n\n.pinInputField {\n padding: 0;\n width: 2.7ch;\n border: 1px solid var(--surface-stroke);\n border-radius: var(--radius);\n box-shadow: var(--shadow-px);\n font: inherit;\n line-height: 3.3ch;\n outline: 0;\n text-align: center;\n transition: var(--transition-default);\n transition-property: border-color, mixin.focus-ring-transition-properties();\n}\n\n.pinInputEnabled {\n composes: pinInput;\n\n .pinInputField {\n background-color: var(--surface);\n color: var(--foreground-prominent);\n\n @include mixin.focus-ring(-1px, true);\n }\n}\n\n.pinInputDisabled {\n composes: pinInput;\n\n .pinInputField {\n background-color: var(--surface-disabled);\n color: var(--foreground-secondary);\n cursor: not-allowed;\n }\n}\n\n.toggle {\n position: relative;\n display: block;\n width: 54px;\n height: 30px;\n flex: 0 0 auto;\n background: var(--gray-50);\n border: 1px solid var(--gray-200);\n border-radius: var(--radius-full);\n contain: paint;\n\n &.isChecked {\n border-color: transparent;\n\n .toggleInput::after {\n translate: 24px 0;\n }\n\n &:not(.isSwitch) {\n background: var(--primary-600);\n\n .toggleIcon {\n color: var(--primary-25);\n }\n\n .toggleInput::after {\n border-color: transparent;\n }\n }\n\n .toggleIconOn {\n translate: calc(-50% + 24px) -50%;\n }\n }\n\n &:not(.isChecked) .toggleIconOff {\n translate: calc(-50% - 24px) -50%;\n }\n\n &.isDisabled {\n cursor: not-allowed;\n opacity: .6;\n }\n\n &.isReadonly .toggleInput {\n pointer-events: none;\n }\n\n &.isInvalid {\n border-color: var(--danger-500);\n }\n}\n\n.toggleIcon {\n position: absolute;\n top: 50%;\n color: var(--foreground-secondary);\n pointer-events: none;\n translate: -50% -50%;\n}\n\n.toggleIconOff {\n composes: toggleIcon;\n\n left: 15px;\n}\n\n.toggleIconOn {\n composes: toggleIcon;\n\n left: 39px;\n}\n\n.toggleInput {\n -webkit-appearance: none;\n appearance: none;\n\n position: relative;\n display: block;\n margin: 0;\n height: inherit;\n width: inherit;\n background: unset;\n border: 0;\n border-radius: inherit;\n cursor: pointer;\n outline: 0;\n\n @include mixin.focus-ring(2px);\n\n &::after {\n position: absolute;\n display: block;\n top: 2px;\n left: 2px;\n height: 24px;\n width: 24px;\n content: '';\n background: var(--surface);\n border: 1px solid var(--surface-stroke);\n border-radius: var(--radius-full);\n box-shadow: var(--shadow-sm);\n }\n}\n\n.toggle,\n.toggleIcon,\n.toggleInput,\n.toggleInput::after {\n transition: 210ms var(--swift-out);\n transition-property: background, border-color, color, opacity, scale, translate, mixin.focus-ring-transition-properties();\n}\n","<template>\n <div\n :class=\"clsx(\n disabled ? $style.formInputDisabled : $style.formInputEnabled,\n isCondensed && $style.isCondensed,\n isSecondary && $style.isSecondary,\n error && $style.isInvalid\n )\"\n :aria-disabled=\"disabled ? true : undefined\">\n <input\n ref=\"input\"\n :class=\"clsx(\n $style.formInputNative,\n (!!iconTrailing || type === 'password') && $style.formInputNativeHasIconTrailing,\n !!iconLeading && $style.formInputNativeHasIconLeading\n )\"\n :id=\"id\"\n :name=\"name\"\n :autocomplete=\"autoComplete\"\n :autofocus=\"autoFocus\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-invalid=\"error ? true : undefined\"\n :disabled=\"disabled\"\n :max=\"max\"\n :maxlength=\"maxLength\"\n :min=\"min\"\n :placeholder=\"placeholder\"\n :readonly=\"isReadonly\"\n :step=\"step\"\n :type=\"nativeType\"\n :value=\"localValue\"\n @blur=\"onBlur()\"\n @focus=\"onFocus()\"\n @input=\"onInput\"\n @keydown=\"onKeyDown\">\n\n <FluxIcon\n v-if=\"iconLeading\"\n :class=\"$style.formInputIconLeading\"\n :name=\"iconLeading\"\n :size=\"18\"/>\n\n <FluxIcon\n v-if=\"type === 'password'\"\n :class=\"$style.formInputIconPasswordToggle\"\n :name=\"nativeType === 'password' ? 'eye' : 'eye-slash'\"\n :size=\"18\"\n @click=\"passwordTypeToggle()\"/>\n\n <FluxIcon\n v-else-if=\"iconTrailing\"\n :class=\"$style.formInputIconTrailing\"\n :name=\"iconTrailing\"\n :size=\"18\"/>\n\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.formInputIconTrailing\"\n :size=\"18\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import type { FluxAutoCompleteType, FluxFormInputBaseProps, FluxIconName, FluxInputMask, FluxInputType } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { DateTime } from 'luxon';\n import { ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import { inputMask } from '$flux/data';\n import FluxIcon from './FluxIcon.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const emit = defineEmits<{\n blur: [];\n focus: [];\n showPicker: [];\n }>();\n\n const modelValue = defineModel<object | string | number | null>({\n default: ''\n });\n\n const {\n autoFocus = false,\n disabled: componentDisabled,\n isReadonly,\n pattern,\n type = 'text'\n } = defineProps<FluxFormInputBaseProps & {\n readonly autoComplete?: FluxAutoCompleteType;\n readonly iconLeading?: FluxIconName;\n readonly iconTrailing?: FluxIconName;\n readonly max?: string | number;\n readonly maxLength?: number;\n readonly min?: string | number;\n readonly pattern?: FluxInputMask;\n readonly step?: number;\n readonly type?: FluxInputType;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const inputRef = useTemplateRef<HTMLInputElement>('input');\n const {id} = useFormFieldInjection();\n\n const localValue = ref<string | null>(null);\n const nativeType = ref(type);\n\n function blur(): void {\n unrefTemplateElement(inputRef)?.blur();\n }\n\n function focus(): void {\n unrefTemplateElement(inputRef)?.focus();\n }\n\n function passwordTypeToggle(): void {\n if (type !== 'password') {\n return;\n }\n\n nativeType.value = unref(nativeType) === 'password' ? 'text' : 'password';\n }\n\n function onBlur(): void {\n emit('blur');\n }\n\n function onFocus(): void {\n emit('focus');\n }\n\n function onInput(evt: Event): void {\n const value = (evt.target as HTMLInputElement).value;\n\n switch (type) {\n case 'date':\n case 'datetime-local':\n case 'month':\n case 'time':\n case 'week':\n const dateTime = DateTime.fromISO(value);\n\n if (!dateTime.isValid) {\n return;\n }\n\n modelValue.value = dateTime;\n break;\n\n case 'number':\n modelValue.value = Number(value);\n break;\n\n default:\n modelValue.value = value;\n break;\n }\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (isReadonly) {\n return;\n }\n\n if (!['date', 'datetime-local', 'month', 'week'].includes(type)) {\n return;\n }\n\n if (evt.key === ' ') {\n emit('showPicker');\n evt.preventDefault();\n }\n }\n\n watch([modelValue, () => type], ([modelValue, type]) => {\n if (!modelValue && modelValue !== 0) {\n localValue.value = null;\n return;\n }\n\n if (DateTime.isDateTime(modelValue)) {\n const iso = modelValue.toISO()!;\n\n switch (type) {\n case 'date':\n localValue.value = iso.substring(0, 10);\n break;\n\n case 'datetime-local':\n localValue.value = iso.substring(0, 16);\n break;\n\n case 'time':\n localValue.value = iso.substring(11, 16);\n break;\n\n default:\n localValue.value = iso;\n break;\n }\n\n return;\n }\n\n localValue.value = modelValue.toString();\n }, {immediate: true});\n\n watch([inputRef, () => pattern, localValue], ([input, pattern, value], __, onCleanup) => {\n if (!input || !pattern) {\n return;\n }\n\n const mask = inputMask[pattern](input);\n\n if (value) {\n mask.value = value;\n modelValue.value = mask.value;\n }\n\n onCleanup(() => mask.destroy());\n }, {immediate: true});\n\n watch(() => type, type => nativeType.value = type);\n\n defineExpose({\n blur,\n focus\n });\n</script>\n","<template>\n <div\n :class=\"clsx(\n disabled ? $style.formInputDisabled : $style.formInputEnabled,\n isCondensed && $style.isCondensed,\n isSecondary && $style.isSecondary,\n error && $style.isInvalid\n )\"\n :aria-disabled=\"disabled ? true : undefined\">\n <input\n ref=\"input\"\n :class=\"clsx(\n $style.formInputNative,\n (!!iconTrailing || type === 'password') && $style.formInputNativeHasIconTrailing,\n !!iconLeading && $style.formInputNativeHasIconLeading\n )\"\n :id=\"id\"\n :name=\"name\"\n :autocomplete=\"autoComplete\"\n :autofocus=\"autoFocus\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-invalid=\"error ? true : undefined\"\n :disabled=\"disabled\"\n :max=\"max\"\n :maxlength=\"maxLength\"\n :min=\"min\"\n :placeholder=\"placeholder\"\n :readonly=\"isReadonly\"\n :step=\"step\"\n :type=\"nativeType\"\n :value=\"localValue\"\n @blur=\"onBlur()\"\n @focus=\"onFocus()\"\n @input=\"onInput\"\n @keydown=\"onKeyDown\">\n\n <FluxIcon\n v-if=\"iconLeading\"\n :class=\"$style.formInputIconLeading\"\n :name=\"iconLeading\"\n :size=\"18\"/>\n\n <FluxIcon\n v-if=\"type === 'password'\"\n :class=\"$style.formInputIconPasswordToggle\"\n :name=\"nativeType === 'password' ? 'eye' : 'eye-slash'\"\n :size=\"18\"\n @click=\"passwordTypeToggle()\"/>\n\n <FluxIcon\n v-else-if=\"iconTrailing\"\n :class=\"$style.formInputIconTrailing\"\n :name=\"iconTrailing\"\n :size=\"18\"/>\n\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.formInputIconTrailing\"\n :size=\"18\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import type { FluxAutoCompleteType, FluxFormInputBaseProps, FluxIconName, FluxInputMask, FluxInputType } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { DateTime } from 'luxon';\n import { ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import { inputMask } from '$flux/data';\n import FluxIcon from './FluxIcon.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const emit = defineEmits<{\n blur: [];\n focus: [];\n showPicker: [];\n }>();\n\n const modelValue = defineModel<object | string | number | null>({\n default: ''\n });\n\n const {\n autoFocus = false,\n disabled: componentDisabled,\n isReadonly,\n pattern,\n type = 'text'\n } = defineProps<FluxFormInputBaseProps & {\n readonly autoComplete?: FluxAutoCompleteType;\n readonly iconLeading?: FluxIconName;\n readonly iconTrailing?: FluxIconName;\n readonly max?: string | number;\n readonly maxLength?: number;\n readonly min?: string | number;\n readonly pattern?: FluxInputMask;\n readonly step?: number;\n readonly type?: FluxInputType;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const inputRef = useTemplateRef<HTMLInputElement>('input');\n const {id} = useFormFieldInjection();\n\n const localValue = ref<string | null>(null);\n const nativeType = ref(type);\n\n function blur(): void {\n unrefTemplateElement(inputRef)?.blur();\n }\n\n function focus(): void {\n unrefTemplateElement(inputRef)?.focus();\n }\n\n function passwordTypeToggle(): void {\n if (type !== 'password') {\n return;\n }\n\n nativeType.value = unref(nativeType) === 'password' ? 'text' : 'password';\n }\n\n function onBlur(): void {\n emit('blur');\n }\n\n function onFocus(): void {\n emit('focus');\n }\n\n function onInput(evt: Event): void {\n const value = (evt.target as HTMLInputElement).value;\n\n switch (type) {\n case 'date':\n case 'datetime-local':\n case 'month':\n case 'time':\n case 'week':\n const dateTime = DateTime.fromISO(value);\n\n if (!dateTime.isValid) {\n return;\n }\n\n modelValue.value = dateTime;\n break;\n\n case 'number':\n modelValue.value = Number(value);\n break;\n\n default:\n modelValue.value = value;\n break;\n }\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (isReadonly) {\n return;\n }\n\n if (!['date', 'datetime-local', 'month', 'week'].includes(type)) {\n return;\n }\n\n if (evt.key === ' ') {\n emit('showPicker');\n evt.preventDefault();\n }\n }\n\n watch([modelValue, () => type], ([modelValue, type]) => {\n if (!modelValue && modelValue !== 0) {\n localValue.value = null;\n return;\n }\n\n if (DateTime.isDateTime(modelValue)) {\n const iso = modelValue.toISO()!;\n\n switch (type) {\n case 'date':\n localValue.value = iso.substring(0, 10);\n break;\n\n case 'datetime-local':\n localValue.value = iso.substring(0, 16);\n break;\n\n case 'time':\n localValue.value = iso.substring(11, 16);\n break;\n\n default:\n localValue.value = iso;\n break;\n }\n\n return;\n }\n\n localValue.value = modelValue.toString();\n }, {immediate: true});\n\n watch([inputRef, () => pattern, localValue], ([input, pattern, value], __, onCleanup) => {\n if (!input || !pattern) {\n return;\n }\n\n const mask = inputMask[pattern](input);\n\n if (value) {\n mask.value = value;\n modelValue.value = mask.value;\n }\n\n onCleanup(() => mask.destroy());\n }, {immediate: true});\n\n watch(() => type, type => nativeType.value = type);\n\n defineExpose({\n blur,\n focus\n });\n</script>\n","<template>\n <div\n :class=\"isHorizontal ? $style.menuGroupHorizontal : $style.menuGroupVertical\"\n role=\"group\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Menu.module.scss';\n\n defineProps<{\n readonly isHorizontal?: boolean;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"isHorizontal ? $style.menuGroupHorizontal : $style.menuGroupVertical\"\n role=\"group\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Menu.module.scss';\n\n defineProps<{\n readonly isHorizontal?: boolean;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.menuSubHeader\"\n role=\"presentation\">\n <FluxIcon\n v-if=\"iconLeading\"\n :class=\"$style.menuSubHeaderIcon\"\n :name=\"iconLeading\"/>\n\n <span :class=\"$style.menuSubHeaderLabel\">\n {{ label }}\n </span>\n\n <FluxIcon\n v-if=\"iconTrailing\"\n :class=\"$style.menuSubHeaderIcon\"\n :name=\"iconTrailing\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Menu.module.scss';\n\n defineProps<{\n readonly iconLeading?: FluxIconName;\n readonly iconTrailing?: FluxIconName;\n readonly label: string;\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.menuSubHeader\"\n role=\"presentation\">\n <FluxIcon\n v-if=\"iconLeading\"\n :class=\"$style.menuSubHeaderIcon\"\n :name=\"iconLeading\"/>\n\n <span :class=\"$style.menuSubHeaderLabel\">\n {{ label }}\n </span>\n\n <FluxIcon\n v-if=\"iconTrailing\"\n :class=\"$style.menuSubHeaderIcon\"\n :name=\"iconTrailing\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Menu.module.scss';\n\n defineProps<{\n readonly iconLeading?: FluxIconName;\n readonly iconTrailing?: FluxIconName;\n readonly label: string;\n }>();\n</script>\n","<template>\n <FluxMenuGroup>\n <div\n v-if=\"isSearchable\"\n :class=\"$style.filterSearch\">\n <FluxFormInput\n v-model=\"modelSearch\"\n auto-complete=\"off\"\n is-secondary\n icon-leading=\"magnifying-glass\"\n :placeholder=\"searchPlaceholder\"\n type=\"search\"/>\n </div>\n\n <FluxMenuItem\n v-if=\"isLoading && options.length === 0\"\n disabled\n is-loading/>\n\n <template\n v-else\n v-for=\"option of options\">\n <FluxMenuSubHeader\n v-if=\"isFluxFilterOptionHeader(option)\"\n :label=\"option.title\"/>\n\n <FluxMenuItem\n v-else-if=\"isFluxFilterOptionItem(option)\"\n is-selectable\n :is-selected=\"selected.includes(option.value)\"\n :label=\"option.label\"\n @click=\"select(option)\"/>\n </template>\n </FluxMenuGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionItem, FluxFilterOptionRow, FluxFilterValueSingle } from '@flux-ui/types';\n import { isFluxFilterOptionHeader, isFluxFilterOptionItem } from '$flux/data';\n import FluxMenuItem from '$flux/component/FluxMenuItem.vue';\n import FluxFormInput from '$flux/component/FluxFormInput.vue';\n import FluxMenuGroup from '$flux/component/FluxMenuGroup.vue';\n import FluxMenuSubHeader from '$flux/component/FluxMenuSubHeader.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const emit = defineEmits<{\n select: [FluxFilterValueSingle];\n }>();\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n defineProps<{\n readonly isLoading?: boolean;\n readonly isSearchable?: boolean;\n readonly options: FluxFilterOptionRow[];\n readonly selected: FluxFilterValueSingle[];\n readonly searchPlaceholder?: string;\n }>();\n\n function select(option: FluxFilterOptionItem): void {\n emit('select', option.value);\n }\n</script>\n","<template>\n <FluxMenuGroup>\n <div\n v-if=\"isSearchable\"\n :class=\"$style.filterSearch\">\n <FluxFormInput\n v-model=\"modelSearch\"\n auto-complete=\"off\"\n is-secondary\n icon-leading=\"magnifying-glass\"\n :placeholder=\"searchPlaceholder\"\n type=\"search\"/>\n </div>\n\n <FluxMenuItem\n v-if=\"isLoading && options.length === 0\"\n disabled\n is-loading/>\n\n <template\n v-else\n v-for=\"option of options\">\n <FluxMenuSubHeader\n v-if=\"isFluxFilterOptionHeader(option)\"\n :label=\"option.title\"/>\n\n <FluxMenuItem\n v-else-if=\"isFluxFilterOptionItem(option)\"\n is-selectable\n :is-selected=\"selected.includes(option.value)\"\n :label=\"option.label\"\n @click=\"select(option)\"/>\n </template>\n </FluxMenuGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionItem, FluxFilterOptionRow, FluxFilterValueSingle } from '@flux-ui/types';\n import { isFluxFilterOptionHeader, isFluxFilterOptionItem } from '$flux/data';\n import FluxMenuItem from '$flux/component/FluxMenuItem.vue';\n import FluxFormInput from '$flux/component/FluxFormInput.vue';\n import FluxMenuGroup from '$flux/component/FluxMenuGroup.vue';\n import FluxMenuSubHeader from '$flux/component/FluxMenuSubHeader.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const emit = defineEmits<{\n select: [FluxFilterValueSingle];\n }>();\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n defineProps<{\n readonly isLoading?: boolean;\n readonly isSearchable?: boolean;\n readonly options: FluxFilterOptionRow[];\n readonly selected: FluxFilterValueSingle[];\n readonly searchPlaceholder?: string;\n }>();\n\n function select(option: FluxFilterOptionItem): void {\n emit('select', option.value);\n }\n</script>\n","<template>\n <nav\n ref=\"element\"\n :class=\"isLarge ? $style.menuLarge : $style.menuNormal\"\n role=\"menu\"\n aria-orientation=\"vertical\">\n <slot/>\n </nav>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useFocusZone } from '@flux-ui/internals';\n import { useTemplateRef, type VNode } from 'vue';\n import $style from '$flux/css/component/Menu.module.scss';\n\n defineProps<{\n readonly isLarge?: boolean;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const elementRef = useTemplateRef('element');\n\n useFocusZone(elementRef, {\n direction: 'vertical'\n });\n</script>\n","<template>\n <nav\n ref=\"element\"\n :class=\"isLarge ? $style.menuLarge : $style.menuNormal\"\n role=\"menu\"\n aria-orientation=\"vertical\">\n <slot/>\n </nav>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useFocusZone } from '@flux-ui/internals';\n import { useTemplateRef, type VNode } from 'vue';\n import $style from '$flux/css/component/Menu.module.scss';\n\n defineProps<{\n readonly isLarge?: boolean;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const elementRef = useTemplateRef('element');\n\n useFocusZone(elementRef, {\n direction: 'vertical'\n });\n</script>\n","<template>\n <FluxPressable\n :class=\"clsx(\n color === 'gray' && $style.tagGray,\n color === 'primary' && $style.tagPrimary,\n color === 'danger' && $style.tagDanger,\n color === 'info' && $style.tagInfo,\n color === 'success' && $style.tagSuccess,\n color === 'warning' && $style.tagWarning,\n isKeyboardShortcut && $style.tagKeyboardShortcut\n )\"\n :component-type=\"type\"\n :tabindex=\"tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.tagIcon\"\n :size=\"16\"/>\n\n <span\n v-else-if=\"dot\"\n :class=\"$style.tagDot\"/>\n\n <FluxIcon\n v-else-if=\"icon\"\n :class=\"$style.tagIcon\"\n :name=\"icon\"\n :size=\"16\"/>\n\n <span :class=\"$style.tagLabel\">\n {{ label }}\n </span>\n\n <button\n v-if=\"!isClickable && isDeletable\"\n :class=\"$style.tagClose\"\n type=\"button\"\n :aria-label=\"translate('flux.delete')\"\n @click.stop=\"onDeleteClick()\">\n <FluxIcon name=\"xmark\"/>\n </button>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxColor, FluxIconName, FluxPressableType, FluxTo } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { useTranslate } from '$flux/composable/private';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Badge.module.scss';\n\n const emit = defineEmits<FluxButtonEmits & {\n delete: [];\n }>();\n\n const {\n color = 'gray',\n isClickable\n } = defineProps<{\n readonly color?: FluxColor;\n readonly dot?: boolean;\n readonly icon?: FluxIconName;\n readonly isClickable?: boolean;\n readonly isDeletable?: boolean;\n readonly isKeyboardShortcut?: boolean;\n readonly isLoading?: boolean;\n readonly label: string;\n readonly type?: FluxPressableType;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n const translate = useTranslate();\n\n function onDeleteClick(): void {\n emit('delete');\n }\n</script>\n","<template>\n <FluxPressable\n :class=\"clsx(\n color === 'gray' && $style.tagGray,\n color === 'primary' && $style.tagPrimary,\n color === 'danger' && $style.tagDanger,\n color === 'info' && $style.tagInfo,\n color === 'success' && $style.tagSuccess,\n color === 'warning' && $style.tagWarning,\n isKeyboardShortcut && $style.tagKeyboardShortcut\n )\"\n :component-type=\"type\"\n :tabindex=\"tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.tagIcon\"\n :size=\"16\"/>\n\n <span\n v-else-if=\"dot\"\n :class=\"$style.tagDot\"/>\n\n <FluxIcon\n v-else-if=\"icon\"\n :class=\"$style.tagIcon\"\n :name=\"icon\"\n :size=\"16\"/>\n\n <span :class=\"$style.tagLabel\">\n {{ label }}\n </span>\n\n <button\n v-if=\"!isClickable && isDeletable\"\n :class=\"$style.tagClose\"\n type=\"button\"\n :aria-label=\"translate('flux.delete')\"\n @click.stop=\"onDeleteClick()\">\n <FluxIcon name=\"xmark\"/>\n </button>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxColor, FluxIconName, FluxPressableType, FluxTo } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { useTranslate } from '$flux/composable/private';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Badge.module.scss';\n\n const emit = defineEmits<FluxButtonEmits & {\n delete: [];\n }>();\n\n const {\n color = 'gray',\n isClickable\n } = defineProps<{\n readonly color?: FluxColor;\n readonly dot?: boolean;\n readonly icon?: FluxIconName;\n readonly isClickable?: boolean;\n readonly isDeletable?: boolean;\n readonly isKeyboardShortcut?: boolean;\n readonly isLoading?: boolean;\n readonly label: string;\n readonly type?: FluxPressableType;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n const translate = useTranslate();\n\n function onDeleteClick(): void {\n emit('delete');\n }\n</script>\n","<template>\n <Anchor\n ref=\"anchor\"\n :=\"$attrs\"\n :class=\"clsx(\n $style.formSelect,\n disabled && $style.isDisabled,\n isPopupOpen && $style.isFocused,\n isSearchable && $style.isSearchable\n )\"\n :id=\"id\"\n role=\"combobox\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-expanded=\"isPopupOpen\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n tag-name=\"div\"\n @click=\"toggle()\"\n @keydown=\"onKeyDown\"\n @keyup=\"onKeyUp\">\n <template v-if=\"!isMultiple && selected[0]\">\n <FluxMenuItem\n :class=\"$style.formSelectSelected\"\n :command=\"selected[0].command\"\n :command-icon=\"selected[0].commandIcon\"\n :icon-leading=\"selected[0].icon\"\n :image-alt=\"selected[0].imageAlt\"\n :image-src=\"selected[0].imageSrc\"\n :label=\"selected[0].label\"\n tabindex=\"-1\"/>\n </template>\n\n <template v-else-if=\"isMultiple && selected[0]\">\n <FluxTag\n v-for=\"option of selected\"\n :key=\"option.value ?? 'null option'\"\n :label=\"option.label\"\n is-deletable\n @delete=\"deselect(option.value)\"/>\n </template>\n\n <template v-else-if=\"placeholder\">\n <span :class=\"$style.formSelectPlaceholder\">\n {{ placeholder }}\n </span>\n </template>\n\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.formSelectIcon\"\n :size=\"16\"/>\n\n <FluxIcon\n v-else\n :class=\"$style.formSelectIcon\"\n name=\"angle-down\"/>\n </Anchor>\n\n <Teleport to=\"body\">\n <FluxFadeTransition>\n <AnchorPopup\n v-if=\"isPopupOpen && !disabled\"\n ref=\"anchorPopup\"\n :class=\"clsx(\n $style.formSelectPopup,\n isKeyboardAction && $style.isKeyboardAction,\n isSearchable && $style.isSearchable\n )\"\n :anchor=\"anchorRef\"\n direction=\"vertical\"\n use-anchor-width>\n <FluxFormInput\n v-if=\"isSearchable\"\n v-model=\"modelSearch\"\n ref=\"searchInputElement\"\n auto-complete=\"off\"\n :class=\"$style.formSelectInput\"\n type=\"search\"\n icon-trailing=\"magnifying-glass\"\n :placeholder=\"translate('flux.search')\"\n @keydown=\"onKeyDown\"/>\n\n <FluxMenu v-if=\"!isLoading && options.length === 0\">\n <FluxMenuSubHeader :label=\"translate('flux.noItems')\"/>\n </FluxMenu>\n\n <FluxMenu v-else>\n <template\n v-for=\"([item, subItems], index) of options\"\n :key=\"`group-${index}`\">\n <FluxMenuGroup>\n <FluxMenuSubHeader\n v-if=\"isFluxFormSelectGroup(item)\"\n :icon-leading=\"item.icon\"\n :label=\"item.label\"/>\n\n <template v-for=\"(subItem, index) of subItems\">\n <FluxMenuItem\n v-if=\"isFluxFormSelectOption(subItem)\"\n ref=\"optionElements\"\n :key=\"index\"\n :command=\"subItem.command\"\n :command-icon=\"subItem.commandIcon\"\n :icon-leading=\"subItem.icon\"\n :image-alt=\"subItem.imageAlt\"\n :image-src=\"subItem.imageSrc\"\n :is-active=\"!!selected.find(so => so.value === subItem.value)\"\n :is-highlighted=\"highlightedId === subItem.value\"\n :label=\"subItem.label\"\n type=\"button\"\n @click=\"select(subItem.value)\"/>\n </template>\n </FluxMenuGroup>\n\n <FluxMenuItem\n v-if=\"isFluxFormSelectOption(item)\"\n ref=\"optionElements\"\n :key=\"`item-${index}`\"\n :command=\"item.command\"\n :command-icon=\"item.commandIcon\"\n :icon-leading=\"item.icon\"\n :image-alt=\"item.imageAlt\"\n :image-src=\"item.imageSrc\"\n :is-active=\"!!selected.find(so => so.value === item.value)\"\n :is-highlighted=\"highlightedId === item.value\"\n :label=\"item.label\"\n type=\"button\"\n @click=\"select(item.value)\"/>\n </template>\n </FluxMenu>\n </AnchorPopup>\n </FluxFadeTransition>\n </Teleport>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import type { FluxFormSelectOption, FluxFormSelectOptions } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { type ComponentPublicInstance, computed, nextTick, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import { useDropdownPopup, useTranslate } from '$flux/composable/private';\n import { isFluxFormSelectGroup, isFluxFormSelectOption } from '$flux/data';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxFormInput from '$flux/component/FluxFormInput.vue';\n import FluxIcon from '$flux/component/FluxIcon.vue';\n import FluxMenu from '$flux/component/FluxMenu.vue';\n import FluxMenuGroup from '$flux/component/FluxMenuGroup.vue';\n import FluxMenuItem from '$flux/component/FluxMenuItem.vue';\n import FluxMenuSubHeader from '$flux/component/FluxMenuSubHeader.vue';\n import FluxSpinner from '$flux/component/FluxSpinner.vue';\n import FluxTag from '$flux/component/FluxTag.vue';\n import Anchor from './Anchor.vue';\n import AnchorPopup from './AnchorPopup.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const INITIAL_HIGHLIGHTED_INDEX = -1;\n\n const emit = defineEmits<{\n keyDown: [KeyboardEvent];\n deselect: [string | number | null];\n select: [string | number | null];\n search: [string];\n close: [];\n open: [];\n }>();\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n defineOptions({\n inheritAttrs: false\n });\n\n const {\n disabled: componentDisabled,\n isMultiple,\n options,\n selected\n } = defineProps<{\n readonly disabled?: boolean;\n readonly isLoading?: boolean;\n readonly isMultiple?: boolean;\n readonly isSearchable?: boolean;\n readonly options: FluxFormSelectOptions[];\n readonly placeholder?: string;\n readonly selected: FluxFormSelectOption[];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n const translate = useTranslate();\n\n const anchorRef = useTemplateRef<ComponentPublicInstance>('anchor');\n const anchorPopupRef = useTemplateRef<ComponentPublicInstance>('anchorPopup');\n const optionElementRefs = useTemplateRef<typeof FluxMenuItem[]>('optionElements');\n const searchInputElementRef = useTemplateRef<ComponentPublicInstance<typeof FluxFormInput>>('searchInputElement');\n\n const highlightedIndex = ref(INITIAL_HIGHLIGHTED_INDEX);\n const isKeyboardAction = ref(false);\n\n const focusElement = computed(() => unrefTemplateElement(searchInputElementRef) ?? unrefTemplateElement(anchorRef));\n const highlightedId = computed(() => unref(rawOptions)[unref(highlightedIndex)]?.value);\n const rawOptions = computed(() => options.map(group => group[1]).flat());\n\n const {\n isOpen: isPopupOpen,\n toggle,\n onKeyDownBase\n } = useDropdownPopup({\n anchorRef,\n popupRef: anchorPopupRef,\n focusElement,\n disabled\n });\n\n function deselect(id: string | number | null): void {\n emit('deselect', id);\n\n nextTick(() => unref(focusElement)?.focus());\n }\n\n function select(id: string | number | null): void {\n emit('select', id);\n\n if (!isMultiple) {\n isPopupOpen.value = false;\n }\n\n highlightedIndex.value = INITIAL_HIGHLIGHTED_INDEX;\n modelSearch.value = '';\n\n nextTick(() => unref(focusElement)?.focus());\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n emit('keyDown', evt);\n\n if (!unref(isPopupOpen)) {\n if (evt.key === 'Enter') {\n isPopupOpen.value = true;\n }\n\n return;\n }\n\n isKeyboardAction.value = true;\n\n if (onKeyDownBase(evt)) {\n return;\n }\n\n if (unref(highlightedIndex) === INITIAL_HIGHLIGHTED_INDEX && ['ArrowDown', 'ArrowUp'].includes(evt.key)) {\n const options = unref(optionElementRefs);\n const selectedIndex = options?.findIndex(o => 'isActive' in o.$props && o.$props.isActive);\n\n highlightedIndex.value = selectedIndex ?? INITIAL_HIGHLIGHTED_INDEX;\n }\n\n switch (evt.key) {\n case 'ArrowUp':\n highlightedIndex.value = Math.max(0, unref(highlightedIndex) - 1);\n break;\n\n case 'ArrowDown':\n highlightedIndex.value = Math.min(unref(rawOptions).length - 1, unref(highlightedIndex) + 1);\n break;\n\n case 'Backspace':\n const search = unref(modelSearch);\n\n if (search.length > 0 || selected.length === 0) {\n return;\n }\n\n deselect(selected[selected.length - 1].value);\n break;\n\n case 'Enter':\n const id = unref(highlightedId);\n id && select(id);\n break;\n\n default:\n if (evt.key.length === 1) {\n highlightedIndex.value = unref(rawOptions).findIndex(o => o.label.toLowerCase().startsWith(evt.key.toLowerCase()));\n } else {\n highlightedIndex.value = -1;\n }\n return;\n }\n\n evt.preventDefault();\n }\n\n function onKeyUp(): void {\n isKeyboardAction.value = false;\n }\n\n watch(highlightedIndex, highlightedIndex => {\n const options = unref(optionElementRefs)!;\n options[highlightedIndex]?.$el.scrollIntoView({\n block: 'center'\n });\n });\n\n watch(isPopupOpen, isPopupOpen => {\n if (!isPopupOpen) {\n emit('close');\n return;\n }\n\n nextTick(() => {\n const options = unref(optionElementRefs);\n\n if (!options || isMultiple) {\n return;\n }\n\n const selectedIndex = options.findIndex(o => 'isActive' in o.$props && o.$props.isActive);\n const option = options[selectedIndex];\n\n if (!option) {\n return;\n }\n\n option.$el.scrollIntoView({\n block: 'center'\n });\n });\n\n emit('open');\n });\n\n watch(modelSearch, searchQuery => emit('search', searchQuery));\n\n watch([() => options, isPopupOpen], () => highlightedIndex.value = INITIAL_HIGHLIGHTED_INDEX);\n</script>\n","<template>\n <Anchor\n ref=\"anchor\"\n :=\"$attrs\"\n :class=\"clsx(\n $style.formSelect,\n disabled && $style.isDisabled,\n isPopupOpen && $style.isFocused,\n isSearchable && $style.isSearchable\n )\"\n :id=\"id\"\n role=\"combobox\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-expanded=\"isPopupOpen\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n tag-name=\"div\"\n @click=\"toggle()\"\n @keydown=\"onKeyDown\"\n @keyup=\"onKeyUp\">\n <template v-if=\"!isMultiple && selected[0]\">\n <FluxMenuItem\n :class=\"$style.formSelectSelected\"\n :command=\"selected[0].command\"\n :command-icon=\"selected[0].commandIcon\"\n :icon-leading=\"selected[0].icon\"\n :image-alt=\"selected[0].imageAlt\"\n :image-src=\"selected[0].imageSrc\"\n :label=\"selected[0].label\"\n tabindex=\"-1\"/>\n </template>\n\n <template v-else-if=\"isMultiple && selected[0]\">\n <FluxTag\n v-for=\"option of selected\"\n :key=\"option.value ?? 'null option'\"\n :label=\"option.label\"\n is-deletable\n @delete=\"deselect(option.value)\"/>\n </template>\n\n <template v-else-if=\"placeholder\">\n <span :class=\"$style.formSelectPlaceholder\">\n {{ placeholder }}\n </span>\n </template>\n\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.formSelectIcon\"\n :size=\"16\"/>\n\n <FluxIcon\n v-else\n :class=\"$style.formSelectIcon\"\n name=\"angle-down\"/>\n </Anchor>\n\n <Teleport to=\"body\">\n <FluxFadeTransition>\n <AnchorPopup\n v-if=\"isPopupOpen && !disabled\"\n ref=\"anchorPopup\"\n :class=\"clsx(\n $style.formSelectPopup,\n isKeyboardAction && $style.isKeyboardAction,\n isSearchable && $style.isSearchable\n )\"\n :anchor=\"anchorRef\"\n direction=\"vertical\"\n use-anchor-width>\n <FluxFormInput\n v-if=\"isSearchable\"\n v-model=\"modelSearch\"\n ref=\"searchInputElement\"\n auto-complete=\"off\"\n :class=\"$style.formSelectInput\"\n type=\"search\"\n icon-trailing=\"magnifying-glass\"\n :placeholder=\"translate('flux.search')\"\n @keydown=\"onKeyDown\"/>\n\n <FluxMenu v-if=\"!isLoading && options.length === 0\">\n <FluxMenuSubHeader :label=\"translate('flux.noItems')\"/>\n </FluxMenu>\n\n <FluxMenu v-else>\n <template\n v-for=\"([item, subItems], index) of options\"\n :key=\"`group-${index}`\">\n <FluxMenuGroup>\n <FluxMenuSubHeader\n v-if=\"isFluxFormSelectGroup(item)\"\n :icon-leading=\"item.icon\"\n :label=\"item.label\"/>\n\n <template v-for=\"(subItem, index) of subItems\">\n <FluxMenuItem\n v-if=\"isFluxFormSelectOption(subItem)\"\n ref=\"optionElements\"\n :key=\"index\"\n :command=\"subItem.command\"\n :command-icon=\"subItem.commandIcon\"\n :icon-leading=\"subItem.icon\"\n :image-alt=\"subItem.imageAlt\"\n :image-src=\"subItem.imageSrc\"\n :is-active=\"!!selected.find(so => so.value === subItem.value)\"\n :is-highlighted=\"highlightedId === subItem.value\"\n :label=\"subItem.label\"\n type=\"button\"\n @click=\"select(subItem.value)\"/>\n </template>\n </FluxMenuGroup>\n\n <FluxMenuItem\n v-if=\"isFluxFormSelectOption(item)\"\n ref=\"optionElements\"\n :key=\"`item-${index}`\"\n :command=\"item.command\"\n :command-icon=\"item.commandIcon\"\n :icon-leading=\"item.icon\"\n :image-alt=\"item.imageAlt\"\n :image-src=\"item.imageSrc\"\n :is-active=\"!!selected.find(so => so.value === item.value)\"\n :is-highlighted=\"highlightedId === item.value\"\n :label=\"item.label\"\n type=\"button\"\n @click=\"select(item.value)\"/>\n </template>\n </FluxMenu>\n </AnchorPopup>\n </FluxFadeTransition>\n </Teleport>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import type { FluxFormSelectOption, FluxFormSelectOptions } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { type ComponentPublicInstance, computed, nextTick, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import { useDropdownPopup, useTranslate } from '$flux/composable/private';\n import { isFluxFormSelectGroup, isFluxFormSelectOption } from '$flux/data';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxFormInput from '$flux/component/FluxFormInput.vue';\n import FluxIcon from '$flux/component/FluxIcon.vue';\n import FluxMenu from '$flux/component/FluxMenu.vue';\n import FluxMenuGroup from '$flux/component/FluxMenuGroup.vue';\n import FluxMenuItem from '$flux/component/FluxMenuItem.vue';\n import FluxMenuSubHeader from '$flux/component/FluxMenuSubHeader.vue';\n import FluxSpinner from '$flux/component/FluxSpinner.vue';\n import FluxTag from '$flux/component/FluxTag.vue';\n import Anchor from './Anchor.vue';\n import AnchorPopup from './AnchorPopup.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const INITIAL_HIGHLIGHTED_INDEX = -1;\n\n const emit = defineEmits<{\n keyDown: [KeyboardEvent];\n deselect: [string | number | null];\n select: [string | number | null];\n search: [string];\n close: [];\n open: [];\n }>();\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n defineOptions({\n inheritAttrs: false\n });\n\n const {\n disabled: componentDisabled,\n isMultiple,\n options,\n selected\n } = defineProps<{\n readonly disabled?: boolean;\n readonly isLoading?: boolean;\n readonly isMultiple?: boolean;\n readonly isSearchable?: boolean;\n readonly options: FluxFormSelectOptions[];\n readonly placeholder?: string;\n readonly selected: FluxFormSelectOption[];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n const translate = useTranslate();\n\n const anchorRef = useTemplateRef<ComponentPublicInstance>('anchor');\n const anchorPopupRef = useTemplateRef<ComponentPublicInstance>('anchorPopup');\n const optionElementRefs = useTemplateRef<typeof FluxMenuItem[]>('optionElements');\n const searchInputElementRef = useTemplateRef<ComponentPublicInstance<typeof FluxFormInput>>('searchInputElement');\n\n const highlightedIndex = ref(INITIAL_HIGHLIGHTED_INDEX);\n const isKeyboardAction = ref(false);\n\n const focusElement = computed(() => unrefTemplateElement(searchInputElementRef) ?? unrefTemplateElement(anchorRef));\n const highlightedId = computed(() => unref(rawOptions)[unref(highlightedIndex)]?.value);\n const rawOptions = computed(() => options.map(group => group[1]).flat());\n\n const {\n isOpen: isPopupOpen,\n toggle,\n onKeyDownBase\n } = useDropdownPopup({\n anchorRef,\n popupRef: anchorPopupRef,\n focusElement,\n disabled\n });\n\n function deselect(id: string | number | null): void {\n emit('deselect', id);\n\n nextTick(() => unref(focusElement)?.focus());\n }\n\n function select(id: string | number | null): void {\n emit('select', id);\n\n if (!isMultiple) {\n isPopupOpen.value = false;\n }\n\n highlightedIndex.value = INITIAL_HIGHLIGHTED_INDEX;\n modelSearch.value = '';\n\n nextTick(() => unref(focusElement)?.focus());\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n emit('keyDown', evt);\n\n if (!unref(isPopupOpen)) {\n if (evt.key === 'Enter') {\n isPopupOpen.value = true;\n }\n\n return;\n }\n\n isKeyboardAction.value = true;\n\n if (onKeyDownBase(evt)) {\n return;\n }\n\n if (unref(highlightedIndex) === INITIAL_HIGHLIGHTED_INDEX && ['ArrowDown', 'ArrowUp'].includes(evt.key)) {\n const options = unref(optionElementRefs);\n const selectedIndex = options?.findIndex(o => 'isActive' in o.$props && o.$props.isActive);\n\n highlightedIndex.value = selectedIndex ?? INITIAL_HIGHLIGHTED_INDEX;\n }\n\n switch (evt.key) {\n case 'ArrowUp':\n highlightedIndex.value = Math.max(0, unref(highlightedIndex) - 1);\n break;\n\n case 'ArrowDown':\n highlightedIndex.value = Math.min(unref(rawOptions).length - 1, unref(highlightedIndex) + 1);\n break;\n\n case 'Backspace':\n const search = unref(modelSearch);\n\n if (search.length > 0 || selected.length === 0) {\n return;\n }\n\n deselect(selected[selected.length - 1].value);\n break;\n\n case 'Enter':\n const id = unref(highlightedId);\n id && select(id);\n break;\n\n default:\n if (evt.key.length === 1) {\n highlightedIndex.value = unref(rawOptions).findIndex(o => o.label.toLowerCase().startsWith(evt.key.toLowerCase()));\n } else {\n highlightedIndex.value = -1;\n }\n return;\n }\n\n evt.preventDefault();\n }\n\n function onKeyUp(): void {\n isKeyboardAction.value = false;\n }\n\n watch(highlightedIndex, highlightedIndex => {\n const options = unref(optionElementRefs)!;\n options[highlightedIndex]?.$el.scrollIntoView({\n block: 'center'\n });\n });\n\n watch(isPopupOpen, isPopupOpen => {\n if (!isPopupOpen) {\n emit('close');\n return;\n }\n\n nextTick(() => {\n const options = unref(optionElementRefs);\n\n if (!options || isMultiple) {\n return;\n }\n\n const selectedIndex = options.findIndex(o => 'isActive' in o.$props && o.$props.isActive);\n const option = options[selectedIndex];\n\n if (!option) {\n return;\n }\n\n option.$el.scrollIntoView({\n block: 'center'\n });\n });\n\n emit('open');\n });\n\n watch(modelSearch, searchQuery => emit('search', searchQuery));\n\n watch([() => options, isPopupOpen], () => highlightedIndex.value = INITIAL_HIGHLIGHTED_INDEX);\n</script>\n","@use '$flux/css/mixin';\n\n.slider {\n position: relative;\n display: flex;\n margin: 6px;\n flex-flow: column;\n gap: 9px;\n touch-action: pan-y;\n\n &.isDisabled {\n cursor: not-allowed;\n }\n\n &.isDragging {\n cursor: grabbing;\n }\n}\n\n.sliderThumb {\n position: absolute;\n top: 50%;\n height: 24px;\n width: 24px;\n padding: 0;\n background: var(--surface);\n background-clip: padding-box;\n border: 1px solid var(--surface-stroke-out);\n border-radius: var(--radius-full);\n box-shadow: var(--shadow-sm);\n cursor: grab;\n outline: 0;\n translate: -50% -50%;\n\n @include mixin.focus-ring-transition(2px);\n\n @include mixin.hover {\n background-color: var(--surface-hover);\n }\n\n &.isDisabled {\n background-color: var(--surface-disabled);\n box-shadow: none;\n pointer-events: none;\n }\n\n &.isDragging {\n box-shadow: var(--shadow-md);\n cursor: grabbing;\n }\n}\n\n.sliderTrack {\n position: relative;\n height: 12px;\n background: var(--gray-50);\n background-clip: padding-box;\n border-radius: var(--radius-half);\n box-shadow: inset 0 0 0 1px var(--surface-stroke-out);\n}\n\n.sliderTrackValue {\n position: absolute;\n display: block;\n top: 0;\n height: inherit;\n background: var(--primary-600);\n border-radius: inherit;\n}\n\n.slider.isDisabled .sliderTrackValue {\n background: var(--gray-300);\n}\n\n.tick {\n position: absolute;\n left: calc(var(--position) * 100% - 1px);\n bottom: 0;\n height: 9px;\n width: 2px;\n background: var(--gray-300);\n border-radius: var(--radius-full);\n color: var(--foreground-prominent);\n font-size: 10px;\n font-weight: 600;\n pointer-events: none;\n}\n\n.tickLarge {\n composes: tick;\n\n :is(span) {\n position: relative;\n display: inline-block;\n translate: -50% -100%;\n }\n}\n\n.tickSmall {\n composes: tick;\n\n height: 6px;\n opacity: .5;\n}\n\n.ticks {\n position: relative;\n display: block;\n height: 21px;\n}\n","<template>\n <div :class=\"$style.ticks\">\n <template\n v-for=\"tick of ticks\"\n :key=\"tick\">\n <div\n :class=\"$style.tickLarge\"\n :style=\"{\n '--position': (tick - lower) / (upper - lower)\n }\">\n <span>{{ tick }}</span>\n </div>\n </template>\n\n <template\n v-for=\"tick of smallTicks\"\n :key=\"tick\">\n <div\n :class=\"$style.tickSmall\"\n :style=\"{\n '--position': (tick - lower) / (upper - lower)\n }\"/>\n </template>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { generateStepTicks } from '@basmilius/utils';\n import { computed } from 'vue';\n import $style from '$flux/css/component/primitive/Slider.module.scss';\n\n const {\n lower,\n upper\n } = defineProps<{\n readonly lower: number;\n readonly upper: number;\n }>();\n\n const smallTicks = computed(() => generateStepTicks(lower, upper, 50, true).filter(s => !ticks.value.includes(s)));\n const ticks = computed(() => generateStepTicks(lower, upper, 5));\n</script>\n","<template>\n <div :class=\"$style.ticks\">\n <template\n v-for=\"tick of ticks\"\n :key=\"tick\">\n <div\n :class=\"$style.tickLarge\"\n :style=\"{\n '--position': (tick - lower) / (upper - lower)\n }\">\n <span>{{ tick }}</span>\n </div>\n </template>\n\n <template\n v-for=\"tick of smallTicks\"\n :key=\"tick\">\n <div\n :class=\"$style.tickSmall\"\n :style=\"{\n '--position': (tick - lower) / (upper - lower)\n }\"/>\n </template>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { generateStepTicks } from '@basmilius/utils';\n import { computed } from 'vue';\n import $style from '$flux/css/component/primitive/Slider.module.scss';\n\n const {\n lower,\n upper\n } = defineProps<{\n readonly lower: number;\n readonly upper: number;\n }>();\n\n const smallTicks = computed(() => generateStepTicks(lower, upper, 50, true).filter(s => !ticks.value.includes(s)));\n const ticks = computed(() => generateStepTicks(lower, upper, 5));\n</script>\n","<template>\n <div\n ref=\"root\"\n :class=\"clsx(\n $style.slider,\n disabled && $style.isDisabled,\n isDragging && $style.isDragging\n )\"\n :aria-disabled=\"disabled ? true : undefined\"\n @pointerdown=\"onPointerDown\">\n <FluxTicks\n v-if=\"isTicksVisible\"\n :lower=\"min\"\n :upper=\"max\"/>\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { onUnmounted, toRef, unref, useTemplateRef } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxTicks from '$flux/component/FluxTicks.vue';\n import $style from '$flux/css/component/primitive/Slider.module.scss';\n\n const emit = defineEmits<{\n dragging: [boolean];\n update: [number];\n }>();\n\n const {\n disabled: componentDisabled,\n isDragging\n } = defineProps<{\n readonly disabled?: boolean;\n readonly isDragging?: boolean;\n readonly isTicksVisible?: boolean;\n readonly max: number;\n readonly min: number;\n readonly step: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const rootRef = useTemplateRef('root');\n\n function onPointerDown(evt: PointerEvent): void {\n if (unref(disabled)) {\n return;\n }\n\n emit('dragging', true);\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', onPointerUp, {passive: true});\n requestAnimationFrame(() => onPointerMove(evt));\n }\n\n function onPointerMove(evt: PointerEvent): void {\n const root = unrefTemplateElement(rootRef);\n\n if (!isDragging || !root) {\n return;\n }\n\n let {left, width} = root.getBoundingClientRect();\n left += 6; // margin.\n width -= 12; // margin times two.\n\n emit('update', Math.max(0, Math.min(1, (evt.clientX - left) / width)));\n evt.preventDefault();\n }\n\n function onPointerUp(): void {\n emit('dragging', false);\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n }\n\n onUnmounted(() => {\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n });\n</script>\n","<template>\n <div\n ref=\"root\"\n :class=\"clsx(\n $style.slider,\n disabled && $style.isDisabled,\n isDragging && $style.isDragging\n )\"\n :aria-disabled=\"disabled ? true : undefined\"\n @pointerdown=\"onPointerDown\">\n <FluxTicks\n v-if=\"isTicksVisible\"\n :lower=\"min\"\n :upper=\"max\"/>\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { onUnmounted, toRef, unref, useTemplateRef } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxTicks from '$flux/component/FluxTicks.vue';\n import $style from '$flux/css/component/primitive/Slider.module.scss';\n\n const emit = defineEmits<{\n dragging: [boolean];\n update: [number];\n }>();\n\n const {\n disabled: componentDisabled,\n isDragging\n } = defineProps<{\n readonly disabled?: boolean;\n readonly isDragging?: boolean;\n readonly isTicksVisible?: boolean;\n readonly max: number;\n readonly min: number;\n readonly step: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const rootRef = useTemplateRef('root');\n\n function onPointerDown(evt: PointerEvent): void {\n if (unref(disabled)) {\n return;\n }\n\n emit('dragging', true);\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', onPointerUp, {passive: true});\n requestAnimationFrame(() => onPointerMove(evt));\n }\n\n function onPointerMove(evt: PointerEvent): void {\n const root = unrefTemplateElement(rootRef);\n\n if (!isDragging || !root) {\n return;\n }\n\n let {left, width} = root.getBoundingClientRect();\n left += 6; // margin.\n width -= 12; // margin times two.\n\n emit('update', Math.max(0, Math.min(1, (evt.clientX - left) / width)));\n evt.preventDefault();\n }\n\n function onPointerUp(): void {\n emit('dragging', false);\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n }\n\n onUnmounted(() => {\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n });\n</script>\n","<template>\n <button\n :class=\"clsx(\n $style.sliderThumb,\n disabled && $style.isDisabled,\n isDragging && $style.isDragging\n )\"\n :style=\"{\n left: `${position * 100}%`\n }\"\n role=\"slider\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-label=\"ariaLabel\"\n :aria-valuemax=\"ariaValuemax\"\n :aria-valuemin=\"ariaValuemin\"\n :aria-valuenow=\"ariaValuenow\"\n :tabindex=\"disabled ? -1 : 0\"\n type=\"button\"\n @keydown=\"onKeyDown\"\n @pointerdown=\"$emit('grab', $event)\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clsx } from 'clsx';\n import { toRef, unref } from 'vue';\n import { useDisabled } from '$flux/composable';\n import $style from '$flux/css/component/primitive/Slider.module.scss';\n\n const emit = defineEmits<{\n decrement: [];\n grab: [PointerEvent];\n increment: [];\n }>();\n\n const {\n disabled: componentDisabled\n } = defineProps<{\n readonly ariaLabel?: string;\n readonly ariaValuemax?: number;\n readonly ariaValuemin?: number;\n readonly ariaValuenow?: number;\n readonly disabled?: boolean;\n readonly isDragging?: boolean;\n readonly position: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (unref(disabled)) {\n return;\n }\n\n switch (evt.key) {\n case 'ArrowDown':\n case 'ArrowLeft':\n emit('decrement');\n break;\n\n case 'ArrowUp':\n case 'ArrowRight':\n emit('increment');\n break;\n\n default:\n return;\n }\n\n evt.preventDefault();\n }\n</script>\n","<template>\n <button\n :class=\"clsx(\n $style.sliderThumb,\n disabled && $style.isDisabled,\n isDragging && $style.isDragging\n )\"\n :style=\"{\n left: `${position * 100}%`\n }\"\n role=\"slider\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-label=\"ariaLabel\"\n :aria-valuemax=\"ariaValuemax\"\n :aria-valuemin=\"ariaValuemin\"\n :aria-valuenow=\"ariaValuenow\"\n :tabindex=\"disabled ? -1 : 0\"\n type=\"button\"\n @keydown=\"onKeyDown\"\n @pointerdown=\"$emit('grab', $event)\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clsx } from 'clsx';\n import { toRef, unref } from 'vue';\n import { useDisabled } from '$flux/composable';\n import $style from '$flux/css/component/primitive/Slider.module.scss';\n\n const emit = defineEmits<{\n decrement: [];\n grab: [PointerEvent];\n increment: [];\n }>();\n\n const {\n disabled: componentDisabled\n } = defineProps<{\n readonly ariaLabel?: string;\n readonly ariaValuemax?: number;\n readonly ariaValuemin?: number;\n readonly ariaValuenow?: number;\n readonly disabled?: boolean;\n readonly isDragging?: boolean;\n readonly position: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (unref(disabled)) {\n return;\n }\n\n switch (evt.key) {\n case 'ArrowDown':\n case 'ArrowLeft':\n emit('decrement');\n break;\n\n case 'ArrowUp':\n case 'ArrowRight':\n emit('increment');\n break;\n\n default:\n return;\n }\n\n evt.preventDefault();\n }\n</script>\n","<template>\n <div :class=\"$style.sliderTrack\">\n <div\n :class=\"$style.sliderTrackValue\"\n :style=\"{\n left: `${percentageLower * 100}%`,\n width: `${(percentageUpper - percentageLower) * 100}%`\n }\"/>\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/primitive/Slider.module.scss';\n\n defineProps<{\n readonly percentageLower: number;\n readonly percentageUpper: number;\n }>();\n</script>\n","<template>\n <div :class=\"$style.sliderTrack\">\n <div\n :class=\"$style.sliderTrackValue\"\n :style=\"{\n left: `${percentageLower * 100}%`,\n width: `${(percentageUpper - percentageLower) * 100}%`\n }\"/>\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/primitive/Slider.module.scss';\n\n defineProps<{\n readonly percentageLower: number;\n readonly percentageUpper: number;\n }>();\n</script>\n","@use '$flux/css/mixin';\n\n.treeNode {\n display: flex;\n width: 100%;\n min-height: 36px;\n padding: 0 8px;\n align-items: center;\n border-radius: var(--radius-half);\n color: var(--foreground);\n font-size: 14px;\n gap: 8px;\n outline: 0;\n transition: 150ms var(--swift-out);\n transition-property: background, color;\n user-select: none;\n}\n\n@include mixin.tree-node-classes();\n","<template>\n <div :class=\"$style.treeNodeLineArea\">\n <span\n v-for=\"(showLine, guideIndex) in node.lineGuides\"\n :key=\"`g-${guideIndex}`\"\n :class=\"[$style.treeIndent, showLine && $style.hasLine]\"/>\n\n <span\n v-if=\"node.depth > 0\"\n :class=\"[$style.treeConnector, node.isLast && $style.isLast]\"/>\n\n <span\n :class=\"$style.treeNodeExpand\"\n @click=\"onExpandClick($event)\">\n <FluxIcon\n v-if=\"node.children?.length\"\n :name=\"expanded ? 'angle-down' : 'angle-right'\"\n :size=\"12\"/>\n </span>\n </div>\n\n <span\n v-if=\"dotColor\"\n :class=\"$style.treeNodeColorDot\"\n :style=\"{ background: dotColor }\"/>\n\n <FluxIcon\n v-if=\"node.icon\"\n :class=\"$style.treeNodeIcon\"\n :name=\"node.icon\"\n :size=\"16\"/>\n\n <span :class=\"$style.treeNodeLabel\">{{ node.label }}</span>\n\n <slot\n name=\"trailing\"\n :node=\"node\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup\n generic=\"TOption extends TreeBaseOption\">\n import type { FluxColor } from '@flux-ui/types';\n import { computed } from 'vue';\n import type { TreeBaseOption, TreeFlatNode } from '$flux/composable/private';\n import { getLevelColor } from '$flux/composable/private';\n import FluxIcon from '$flux/component/FluxIcon.vue';\n import $style from '$flux/css/component/primitive/TreeNode.module.scss';\n\n const emit = defineEmits<{\n expandClick: [MouseEvent];\n }>();\n\n const {\n levelColors,\n node\n } = defineProps<{\n readonly node: TreeFlatNode<TOption>;\n readonly expanded: boolean;\n readonly levelColors?: (FluxColor | string)[];\n }>();\n\n defineSlots<{\n trailing?(props: { node: TreeFlatNode<TOption> }): any;\n }>();\n\n defineOptions({\n inheritAttrs: false\n });\n\n const dotColor = computed(() => getLevelColor(node.depth, levelColors));\n\n function onExpandClick(evt: MouseEvent): void {\n emit('expandClick', evt);\n }\n</script>\n","<template>\n <div :class=\"$style.treeNodeLineArea\">\n <span\n v-for=\"(showLine, guideIndex) in node.lineGuides\"\n :key=\"`g-${guideIndex}`\"\n :class=\"[$style.treeIndent, showLine && $style.hasLine]\"/>\n\n <span\n v-if=\"node.depth > 0\"\n :class=\"[$style.treeConnector, node.isLast && $style.isLast]\"/>\n\n <span\n :class=\"$style.treeNodeExpand\"\n @click=\"onExpandClick($event)\">\n <FluxIcon\n v-if=\"node.children?.length\"\n :name=\"expanded ? 'angle-down' : 'angle-right'\"\n :size=\"12\"/>\n </span>\n </div>\n\n <span\n v-if=\"dotColor\"\n :class=\"$style.treeNodeColorDot\"\n :style=\"{ background: dotColor }\"/>\n\n <FluxIcon\n v-if=\"node.icon\"\n :class=\"$style.treeNodeIcon\"\n :name=\"node.icon\"\n :size=\"16\"/>\n\n <span :class=\"$style.treeNodeLabel\">{{ node.label }}</span>\n\n <slot\n name=\"trailing\"\n :node=\"node\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup\n generic=\"TOption extends TreeBaseOption\">\n import type { FluxColor } from '@flux-ui/types';\n import { computed } from 'vue';\n import type { TreeBaseOption, TreeFlatNode } from '$flux/composable/private';\n import { getLevelColor } from '$flux/composable/private';\n import FluxIcon from '$flux/component/FluxIcon.vue';\n import $style from '$flux/css/component/primitive/TreeNode.module.scss';\n\n const emit = defineEmits<{\n expandClick: [MouseEvent];\n }>();\n\n const {\n levelColors,\n node\n } = defineProps<{\n readonly node: TreeFlatNode<TOption>;\n readonly expanded: boolean;\n readonly levelColors?: (FluxColor | string)[];\n }>();\n\n defineSlots<{\n trailing?(props: { node: TreeFlatNode<TOption> }): any;\n }>();\n\n defineOptions({\n inheritAttrs: false\n });\n\n const dotColor = computed(() => getLevelColor(node.depth, levelColors));\n\n function onExpandClick(evt: MouseEvent): void {\n emit('expandClick', evt);\n }\n</script>\n",".divider {\n position: relative;\n display: grid;\n contain: paint;\n margin-top: 18px;\n margin-bottom: 18px;\n align-items: center;\n flex-shrink: 0;\n}\n\n.dividerContentStart {\n composes: divider;\n\n justify-items: start;\n}\n\n.dividerContentCenter {\n composes: divider;\n\n justify-items: center;\n}\n\n.dividerContentEnd {\n composes: divider;\n\n justify-items: end;\n}\n\n.dividerContent {\n position: relative;\n display: flex;\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n top: 50%;\n translate: 0 -50%;\n }\n\n &::before {\n left: -100dvh;\n right: calc(100% + 15px);\n }\n\n &::after {\n left: calc(100% + 15px);\n right: -100dvh;\n }\n}\n\n.dividerLine {\n width: 100%;\n border: 0;\n}\n\n.dividerContent::before,\n.dividerContent::after,\n.dividerLine {\n height: 1px;\n content: '';\n background: var(--gray-100);\n}\n\n.separator {\n background: var(--gray-200);\n}\n\n.separatorHorizontal {\n composes: separator;\n\n height: 1px;\n}\n\n.separatorVertical {\n composes: separator;\n\n width: 1px;\n}\n","<template>\n <div\n :class=\"direction === 'horizontal' ? $style.separatorHorizontal : $style.separatorVertical\"\n role=\"separator\"\n :aria-orientation=\"direction\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxDirection } from '@flux-ui/types';\n import $style from '$flux/css/component/Divider.module.scss';\n\n const {\n direction = 'horizontal'\n } = defineProps<{\n readonly direction?: FluxDirection;\n }>();\n</script>\n","<template>\n <div\n :class=\"direction === 'horizontal' ? $style.separatorHorizontal : $style.separatorVertical\"\n role=\"separator\"\n :aria-orientation=\"direction\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxDirection } from '@flux-ui/types';\n import $style from '$flux/css/component/Divider.module.scss';\n\n const {\n direction = 'horizontal'\n } = defineProps<{\n readonly direction?: FluxDirection;\n }>();\n</script>\n","import type { FluxFilterItem, FluxFilterValue } from '@flux-ui/types';\nimport { defineComponent, h, isVNode, unref, type VNode } from 'vue';\nimport { useFilterInjection } from '$flux/composable';\nimport FluxMenuGroup from '../FluxMenuGroup.vue';\nimport FluxSeparator from '../FluxSeparator.vue';\nimport FilterItem from './FilterItem.vue';\n\nexport const FilterMenuRenderer = defineComponent({\n props: {\n menuItems: {required: true, type: Array},\n navigate: {required: true, type: Function}\n },\n\n setup(props) {\n const {state} = useFilterInjection();\n\n return () => props.menuItems.map((group, index) => renderFilterGroup(group as (FluxFilterItem | VNode)[], index, props.navigate, unref(state) as Record<string, FluxFilterValue>));\n }\n});\n\nfunction renderFilterGroup(group: (FluxFilterItem | VNode)[], index: number, navigate: Function, state: Record<string, FluxFilterValue>): VNode[] {\n const slot: VNode[] = [];\n\n if (index > 0) {\n slot.push(h(FluxSeparator));\n }\n\n slot.push(h(FluxMenuGroup, {}, {\n default: () => group.map(item => renderFilterItem(item, navigate, state))\n }));\n\n return slot;\n}\n\nfunction renderFilterItem(item: FluxFilterItem | VNode, navigate: Function, state: Record<string, FluxFilterValue>): VNode {\n if (isVNode(item)) {\n return item;\n }\n\n return h(FilterItem, {\n item,\n value: state[item.name] ?? null,\n onClick: () => navigate(item.name)\n });\n}\n","import type { PropType, VNode } from 'vue';\nimport { defineComponent } from 'vue';\n\nexport const VNodeRenderer = defineComponent({\n props: {\n vnode: Object as PropType<VNode>\n },\n setup(props) {\n return () => props.vnode;\n }\n});\n","@use '$flux/css/mixin';\n\n.calendar {\n composes: basePaneStructure from './base/Pane.module.scss';\n\n display: flex;\n flex-flow: column;\n box-shadow: var(--shadow-sm);\n contain: paint;\n}\n\n.calendarActions {\n align-items: center;\n}\n\n.calendarLoader {\n composes: basePaneLoader from './base/Pane.module.scss';\n}\n\n.calendarCurrent {\n display: flex;\n gap: 9px;\n}\n\n.calendarCurrentValue {\n padding: 0;\n background: none;\n border: 0;\n cursor: pointer;\n font-size: 30px;\n letter-spacing: -.05em;\n line-height: 1.5em;\n text-transform: capitalize;\n\n @include mixin.hover {\n color: var(--primary-600);\n }\n}\n\n.calendarCurrentMonth {\n composes: calendarCurrentValue;\n\n color: var(--foreground-prominent);\n font-weight: 700;\n}\n\n.calendarCurrentYear {\n composes: calendarCurrentValue;\n\n color: var(--foreground);\n}\n\n.calendarCells {\n display: grid;\n flex-grow: 1;\n gap: 1px;\n grid-template-columns: repeat(7, 1fr);\n grid-template-rows: min-content repeat(6, auto);\n background: var(--gray-100);\n}\n\n.calendarCell {\n padding: 12px 18px;\n background: var(--gray-25);\n}\n\n.calendarDay {\n composes: calendarCell;\n\n padding-left: 0;\n padding-right: 0;\n color: var(--foreground-secondary);\n font-size: 12px;\n font-weight: 400;\n line-height: 1em;\n text-align: center;\n text-transform: capitalize;\n}\n\n.calendarEntry {\n composes: calendarCell;\n\n position: relative;\n min-height: 105px;\n padding-bottom: 39px;\n\n &.isDisabled {\n background: var(--gray-50);\n color: var(--foreground-secondary);\n pointer-events: none;\n\n .calendarEntryDate {\n opacity: .25;\n }\n\n .calendarEvents {\n opacity: .75;\n pointer-events: none;\n }\n }\n}\n\n.calendarEntryDate {\n position: absolute;\n right: 18px;\n bottom: 15px;\n color: var(--foreground);\n font-size: 15px;\n font-weight: 700;\n line-height: 1em;\n}\n\n.calendarEvents {\n display: grid;\n grid-auto-rows: 1fr;\n gap: 3px;\n}\n\n.calendarEvent {\n margin-left: -9px;\n margin-right: -9px;\n padding: 6px 9px;\n background: var(--primary-100);\n border: 0;\n color: var(--primary-800);\n cursor: pointer;\n font-size: 14px;\n line-height: 1.3em;\n text-align: left;\n\n /** note: This works in all browsers. */\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n\n &.isSingle {\n border-radius: var(--radius-half);\n }\n\n &.isMiddle {\n margin-left: -22px;\n margin-right: -22px;\n }\n\n &.isStart {\n margin-right: -18px;\n border-top-left-radius: var(--radius-half);\n border-bottom-left-radius: var(--radius-half);\n }\n\n &.isEnd {\n margin-left: -18px;\n border-top-right-radius: var(--radius-half);\n border-bottom-right-radius: var(--radius-half);\n }\n\n &:not(.isSingle):not(.isStart) {\n span {\n opacity: 0;\n }\n }\n\n @include mixin.hover {\n background: var(--primary-200);\n }\n}\n","@use '$flux/css/mixin';\n\n.datePicker {\n display: flex;\n max-height: 420px;\n flex-flow: column;\n border-radius: inherit;\n overflow: auto;\n user-select: none;\n z-index: 0;\n}\n\n.datePickerDates,\n.datePickerMonths,\n.datePickerYears,\n.datePickerHeader {\n padding: 15px;\n}\n\n.datePickerHeader {\n position: sticky;\n display: flex;\n top: 0;\n align-items: center;\n background: var(--gray-50);\n border-bottom: 1px solid var(--surface-stroke);\n z-index: 1;\n}\n\n.datePickerHeaderView {\n display: flex;\n height: 42px;\n margin-left: auto;\n margin-right: auto;\n align-items: center;\n gap: 9px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.datePickerHeaderViewButton {\n padding: 0;\n background: unset;\n border: 0;\n cursor: pointer;\n text-transform: capitalize;\n\n &:first-child {\n color: var(--foreground-prominent);\n }\n\n &:last-child {\n color: var(--foreground-secondary);\n }\n\n @include mixin.hover {\n color: var(--primary-600);\n }\n}\n\n.datePickerDate {\n display: flex;\n padding: 0;\n align-items: center;\n justify-content: center;\n aspect-ratio: 1;\n background: unset;\n border: 0;\n border-radius: var(--radius);\n color: var(--foreground-prominent);\n cursor: pointer;\n font-size: 14px;\n outline: 0;\n transition: var(--transition-default);\n transition-property: background, border-radius, color, opacity;\n\n @include mixin.hover {\n background: var(--gray-100);\n color: var(--foreground-prominent);\n }\n\n &.isDisabled:not(.isRangeEntry, .isRangeEnd, .isRangeStart, .isSelectionEntry, .isSelectionEnd, .isSelectionStart) {\n opacity: .25;\n pointer-events: none;\n }\n\n &:not(.isDisabled) {\n font-weight: 500;\n }\n\n &.isSelected {\n background: var(--primary-600);\n color: var(--primary-50);\n font-weight: 700;\n }\n\n &.isRangeEntry {\n background: var(--primary-200);\n border-radius: 0;\n color: var(--primary-950);\n }\n\n &.isRangeEnd,\n &.isRangeStart {\n background: var(--primary-600);\n color: var(--primary-50);\n font-weight: 700;\n }\n\n &.isRangeEntry:nth-child(7n + 8),\n &.isRangeStart {\n border-top-left-radius: var(--radius);\n border-bottom-left-radius: var(--radius);\n }\n\n &.isRangeEntry:nth-child(7n),\n &.isRangeEnd {\n border-top-right-radius: var(--radius);\n border-bottom-right-radius: var(--radius);\n }\n\n &.isSelectionEntry {\n background: var(--gray-100);\n border-radius: 0;\n color: var(--foreground-prominent);\n }\n\n &.isSelectionEnd,\n &.isSelectionStart {\n background: var(--gray-200);\n font-weight: 700;\n }\n\n &.isSelectionEntry:nth-child(7n + 8),\n &.isSelectionStart {\n border-top-left-radius: var(--radius);\n border-bottom-left-radius: var(--radius);\n }\n\n &.isSelectionEntry:nth-child(7n),\n &.isSelectionEnd {\n border-top-right-radius: var(--radius);\n border-bottom-right-radius: var(--radius);\n }\n}\n\n.datePickerDates {\n position: relative;\n}\n\n.datePickerDatesGrid {\n display: grid;\n gap: 3px 0;\n grid-template-columns: repeat(7, 1fr);\n}\n\n.datePickerDay {\n margin-bottom: 6px;\n color: var(--foreground-secondary);\n font-size: 12px;\n font-weight: 500;\n text-align: center;\n text-transform: uppercase;\n}\n\n.datePickerMonths,\n.datePickerYears {\n display: grid;\n margin-left: auto;\n margin-right: auto;\n max-width: 300px;\n width: 100%;\n gap: 9px;\n grid-template-columns: repeat(3, 1fr);\n\n .button {\n contain: size layout;\n contain-intrinsic-size: 0 42px;\n content-visibility: auto;\n text-transform: capitalize;\n }\n}\n","<template>\n <div :class=\"$style.calendar\">\n <FluxActionBar :class=\"$style.calendarActions\">\n <template #primary>\n <div\n :class=\"$style.calendarCurrent\"\n role=\"presentation\">\n <FluxFlyout :width=\"300\">\n <template #opener=\"{open}\">\n <button\n :class=\"$style.calendarCurrentMonth\"\n :aria-label=\"translate('flux.selectMonth')\"\n type=\"button\"\n @click=\"open\">\n {{ viewMonth }}\n </button>\n </template>\n\n <template #default=\"{close}\">\n <div :class=\"$styleDatePicker.datePickerMonths\">\n <template\n v-for=\"month of months\"\n :key=\"month.label\">\n <FluxSecondaryButton\n :label=\"month.label\"\n tabindex=\"-1\"\n @click=\"setViewMonth(month.date, close)\"/>\n </template>\n </div>\n </template>\n </FluxFlyout>\n\n <FluxFlyout :width=\"300\">\n <template #opener=\"{open}\">\n <button\n :class=\"$style.calendarCurrentYear\"\n :aria-label=\"translate('flux.selectYear')\"\n type=\"button\"\n @click=\"open\">\n {{ viewYear }}\n </button>\n </template>\n\n <template #default=\"{close}\">\n <div :class=\"$styleDatePicker.datePickerYears\">\n <FluxSecondaryButton\n :aria-label=\"translate('flux.previousYears')\"\n icon-leading=\"angle-left\"\n tabindex=\"-1\"\n @click=\"previousYears\"/>\n\n <template\n v-for=\"year of years\"\n :key=\"year\">\n <FluxSecondaryButton\n :label=\"year.toString()\"\n tabindex=\"-1\"\n @click=\"setViewYear(year, close)\"/>\n </template>\n\n <FluxSecondaryButton\n :aria-label=\"translate('flux.nextYears')\"\n icon-leading=\"angle-right\"\n tabindex=\"-1\"\n @click=\"nextYears\"/>\n </div>\n </template>\n </FluxFlyout>\n </div>\n </template>\n\n <template #actionsEnd>\n <FluxSecondaryButton\n :aria-label=\"translate('flux.today')\"\n :label=\"translate('flux.today')\"\n @click=\"setToday\"/>\n\n <FluxButtonGroup>\n <FluxSecondaryButton\n :aria-label=\"translate('flux.previousMonth')\"\n icon-leading=\"angle-left\"\n @click=\"previousMonth\"/>\n\n <FluxSecondaryButton\n :aria-label=\"translate('flux.nextMonth')\"\n icon-leading=\"angle-right\"\n @click=\"nextMonth\"/>\n </FluxButtonGroup>\n </template>\n </FluxActionBar>\n\n <FluxWindowTransition :is-back=\"isTransitioningToPast\">\n <div\n :key=\"viewDate.month\"\n :class=\"$style.calendarCells\"\n role=\"grid\">\n <template v-for=\"day of days\">\n <div :class=\"$style.calendarDay\">\n {{ day }}\n </div>\n </template>\n\n <template v-for=\"date of dates\">\n <div\n :class=\"clsx(\n $style.calendarEntry,\n viewDate.month !== date.month && $style.isDisabled\n )\"\n role=\"gridcell\">\n <div :class=\"$style.calendarEvents\">\n <VNodeRenderer\n v-for=\"event of getEventsForDate(date)\"\n :key=\"event.index\"\n :class=\"clsx(\n event.type === 'single' && $style.isSingle,\n event.type === 'start' && $style.isStart,\n event.type === 'end' && $style.isEnd,\n event.type === 'middle' && $style.isMiddle\n )\"\n :style=\"{\n gridRow: event.index\n }\"\n :vnode=\"event.vnode\"/>\n </div>\n\n <span :class=\"$style.calendarEntryDate\">\n {{ date.toLocaleString({day: 'numeric'}) }}\n </span>\n </div>\n </template>\n </div>\n </FluxWindowTransition>\n\n <div\n v-if=\"isLoading\"\n :class=\"$style.calendarLoader\">\n <FluxSpinner/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree, getComponentName, getComponentProps, useCalendar, useCalendarMonthSwitcher, useCalendarYearSwitcher } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { DateTime } from 'luxon';\n import { computed, type ComputedRef, unref, type VNode, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxWindowTransition } from '$flux/transition';\n import { VNodeRenderer } from './primitive';\n import FluxActionBar from './FluxActionBar.vue';\n import FluxButtonGroup from './FluxButtonGroup.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSpinner from '$flux/component/FluxSpinner.vue';\n import $style from '$flux/css/component/Calendar.module.scss';\n import $styleDatePicker from '$flux/css/component/DatePicker.module.scss';\n\n type Event = {\n readonly index: number;\n readonly type: 'start' | 'end' | 'middle' | 'single';\n readonly vnode: VNode;\n };\n\n const emit = defineEmits<{\n navigate: [DateTime, DateTime, DateTime];\n }>();\n\n const {\n initialDate = DateTime.now()\n } = defineProps<{\n readonly initialDate?: DateTime;\n readonly isLoading?: boolean;\n }>();\n\n const slots = defineSlots<{\n default?(): VNode[];\n }>();\n\n const {\n isTransitioningToPast,\n viewDate,\n viewMonth,\n viewYear,\n dates,\n days,\n nextMonth,\n previousMonth,\n setViewDate\n } = useCalendar(initialDate, {\n weekDayLength: 'long'\n });\n\n const {\n months\n } = useCalendarMonthSwitcher(viewDate, 'short');\n\n const {\n years,\n next: nextYears,\n previous: previousYears\n } = useCalendarYearSwitcher(viewDate);\n\n const translate = useTranslate();\n\n const eventNodes = computed(() => flattenVNodeTree(slots.default?.() ?? []));\n const events = computed(() => unref(eventNodes)\n .filter(en => getComponentName(en) === 'FluxCalendarEvent')) as ComputedRef<VNode[]>;\n\n function getEventsForDate(forDate: DateTime): Event[] {\n const forDateStr = forDate.toSQLDate();\n\n return unref(events)\n .map<Event | null>((vnode, index) => {\n const {date} = getComponentProps<{ date: DateTime | [DateTime, DateTime]; }>(vnode);\n\n if (Array.isArray(date)) {\n if (forDate < date[0] || forDate > date[1]) {\n return null;\n }\n\n return {\n type: forDateStr === date[0].toSQLDate() ? 'start' : (forDateStr === date[1].toSQLDate() ? 'end' : 'middle'),\n index,\n vnode\n };\n }\n\n if (forDateStr !== date.toSQLDate()) {\n return null;\n }\n\n return {\n type: 'single',\n index,\n vnode\n };\n })\n .filter((e): e is Event => e !== null);\n }\n\n function setToday(): void {\n setViewDate(DateTime.now());\n }\n\n function setViewMonth(month: DateTime, close: () => void): void {\n close();\n setViewDate(month);\n }\n\n function setViewYear(year: number, close: () => void): void {\n close();\n setViewDate(unref(viewDate).set({year}));\n }\n\n watch([viewDate, dates], ([viewDate, dates]) => {\n emit('navigate', viewDate, dates[0], dates[dates.length - 1]);\n }, {immediate: true});\n\n watch(() => initialDate, setViewDate);\n</script>\n","<template>\n <div :class=\"$style.calendar\">\n <FluxActionBar :class=\"$style.calendarActions\">\n <template #primary>\n <div\n :class=\"$style.calendarCurrent\"\n role=\"presentation\">\n <FluxFlyout :width=\"300\">\n <template #opener=\"{open}\">\n <button\n :class=\"$style.calendarCurrentMonth\"\n :aria-label=\"translate('flux.selectMonth')\"\n type=\"button\"\n @click=\"open\">\n {{ viewMonth }}\n </button>\n </template>\n\n <template #default=\"{close}\">\n <div :class=\"$styleDatePicker.datePickerMonths\">\n <template\n v-for=\"month of months\"\n :key=\"month.label\">\n <FluxSecondaryButton\n :label=\"month.label\"\n tabindex=\"-1\"\n @click=\"setViewMonth(month.date, close)\"/>\n </template>\n </div>\n </template>\n </FluxFlyout>\n\n <FluxFlyout :width=\"300\">\n <template #opener=\"{open}\">\n <button\n :class=\"$style.calendarCurrentYear\"\n :aria-label=\"translate('flux.selectYear')\"\n type=\"button\"\n @click=\"open\">\n {{ viewYear }}\n </button>\n </template>\n\n <template #default=\"{close}\">\n <div :class=\"$styleDatePicker.datePickerYears\">\n <FluxSecondaryButton\n :aria-label=\"translate('flux.previousYears')\"\n icon-leading=\"angle-left\"\n tabindex=\"-1\"\n @click=\"previousYears\"/>\n\n <template\n v-for=\"year of years\"\n :key=\"year\">\n <FluxSecondaryButton\n :label=\"year.toString()\"\n tabindex=\"-1\"\n @click=\"setViewYear(year, close)\"/>\n </template>\n\n <FluxSecondaryButton\n :aria-label=\"translate('flux.nextYears')\"\n icon-leading=\"angle-right\"\n tabindex=\"-1\"\n @click=\"nextYears\"/>\n </div>\n </template>\n </FluxFlyout>\n </div>\n </template>\n\n <template #actionsEnd>\n <FluxSecondaryButton\n :aria-label=\"translate('flux.today')\"\n :label=\"translate('flux.today')\"\n @click=\"setToday\"/>\n\n <FluxButtonGroup>\n <FluxSecondaryButton\n :aria-label=\"translate('flux.previousMonth')\"\n icon-leading=\"angle-left\"\n @click=\"previousMonth\"/>\n\n <FluxSecondaryButton\n :aria-label=\"translate('flux.nextMonth')\"\n icon-leading=\"angle-right\"\n @click=\"nextMonth\"/>\n </FluxButtonGroup>\n </template>\n </FluxActionBar>\n\n <FluxWindowTransition :is-back=\"isTransitioningToPast\">\n <div\n :key=\"viewDate.month\"\n :class=\"$style.calendarCells\"\n role=\"grid\">\n <template v-for=\"day of days\">\n <div :class=\"$style.calendarDay\">\n {{ day }}\n </div>\n </template>\n\n <template v-for=\"date of dates\">\n <div\n :class=\"clsx(\n $style.calendarEntry,\n viewDate.month !== date.month && $style.isDisabled\n )\"\n role=\"gridcell\">\n <div :class=\"$style.calendarEvents\">\n <VNodeRenderer\n v-for=\"event of getEventsForDate(date)\"\n :key=\"event.index\"\n :class=\"clsx(\n event.type === 'single' && $style.isSingle,\n event.type === 'start' && $style.isStart,\n event.type === 'end' && $style.isEnd,\n event.type === 'middle' && $style.isMiddle\n )\"\n :style=\"{\n gridRow: event.index\n }\"\n :vnode=\"event.vnode\"/>\n </div>\n\n <span :class=\"$style.calendarEntryDate\">\n {{ date.toLocaleString({day: 'numeric'}) }}\n </span>\n </div>\n </template>\n </div>\n </FluxWindowTransition>\n\n <div\n v-if=\"isLoading\"\n :class=\"$style.calendarLoader\">\n <FluxSpinner/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree, getComponentName, getComponentProps, useCalendar, useCalendarMonthSwitcher, useCalendarYearSwitcher } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { DateTime } from 'luxon';\n import { computed, type ComputedRef, unref, type VNode, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxWindowTransition } from '$flux/transition';\n import { VNodeRenderer } from './primitive';\n import FluxActionBar from './FluxActionBar.vue';\n import FluxButtonGroup from './FluxButtonGroup.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSpinner from '$flux/component/FluxSpinner.vue';\n import $style from '$flux/css/component/Calendar.module.scss';\n import $styleDatePicker from '$flux/css/component/DatePicker.module.scss';\n\n type Event = {\n readonly index: number;\n readonly type: 'start' | 'end' | 'middle' | 'single';\n readonly vnode: VNode;\n };\n\n const emit = defineEmits<{\n navigate: [DateTime, DateTime, DateTime];\n }>();\n\n const {\n initialDate = DateTime.now()\n } = defineProps<{\n readonly initialDate?: DateTime;\n readonly isLoading?: boolean;\n }>();\n\n const slots = defineSlots<{\n default?(): VNode[];\n }>();\n\n const {\n isTransitioningToPast,\n viewDate,\n viewMonth,\n viewYear,\n dates,\n days,\n nextMonth,\n previousMonth,\n setViewDate\n } = useCalendar(initialDate, {\n weekDayLength: 'long'\n });\n\n const {\n months\n } = useCalendarMonthSwitcher(viewDate, 'short');\n\n const {\n years,\n next: nextYears,\n previous: previousYears\n } = useCalendarYearSwitcher(viewDate);\n\n const translate = useTranslate();\n\n const eventNodes = computed(() => flattenVNodeTree(slots.default?.() ?? []));\n const events = computed(() => unref(eventNodes)\n .filter(en => getComponentName(en) === 'FluxCalendarEvent')) as ComputedRef<VNode[]>;\n\n function getEventsForDate(forDate: DateTime): Event[] {\n const forDateStr = forDate.toSQLDate();\n\n return unref(events)\n .map<Event | null>((vnode, index) => {\n const {date} = getComponentProps<{ date: DateTime | [DateTime, DateTime]; }>(vnode);\n\n if (Array.isArray(date)) {\n if (forDate < date[0] || forDate > date[1]) {\n return null;\n }\n\n return {\n type: forDateStr === date[0].toSQLDate() ? 'start' : (forDateStr === date[1].toSQLDate() ? 'end' : 'middle'),\n index,\n vnode\n };\n }\n\n if (forDateStr !== date.toSQLDate()) {\n return null;\n }\n\n return {\n type: 'single',\n index,\n vnode\n };\n })\n .filter((e): e is Event => e !== null);\n }\n\n function setToday(): void {\n setViewDate(DateTime.now());\n }\n\n function setViewMonth(month: DateTime, close: () => void): void {\n close();\n setViewDate(month);\n }\n\n function setViewYear(year: number, close: () => void): void {\n close();\n setViewDate(unref(viewDate).set({year}));\n }\n\n watch([viewDate, dates], ([viewDate, dates]) => {\n emit('navigate', viewDate, dates[0], dates[dates.length - 1]);\n }, {immediate: true});\n\n watch(() => initialDate, setViewDate);\n</script>\n","<template>\n <FluxTooltip>\n <template #content>\n <slot name=\"tooltip\">\n {{ label }}\n </slot>\n </template>\n\n <button\n :class=\"$style.calendarEvent\"\n type=\"button\"\n @click=\"onClick\">\n <span>{{ label }}</span>\n </button>\n </FluxTooltip>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { DateTime } from 'luxon';\n import FluxTooltip from './FluxTooltip.vue';\n import $style from '$flux/css/component/Calendar.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n defineProps<{\n readonly date: DateTime | [DateTime, DateTime];\n readonly label: string;\n }>();\n\n defineSlots<{\n tooltip(): VNode[];\n }>();\n\n function onClick(evt: MouseEvent): void {\n emit('click', evt);\n }\n</script>\n","<template>\n <FluxTooltip>\n <template #content>\n <slot name=\"tooltip\">\n {{ label }}\n </slot>\n </template>\n\n <button\n :class=\"$style.calendarEvent\"\n type=\"button\"\n @click=\"onClick\">\n <span>{{ label }}</span>\n </button>\n </FluxTooltip>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { DateTime } from 'luxon';\n import FluxTooltip from './FluxTooltip.vue';\n import $style from '$flux/css/component/Calendar.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n defineProps<{\n readonly date: DateTime | [DateTime, DateTime];\n readonly label: string;\n }>();\n\n defineSlots<{\n tooltip(): VNode[];\n }>();\n\n function onClick(evt: MouseEvent): void {\n emit('click', evt);\n }\n</script>\n","<template>\n <label\n :class=\"clsx(\n $style.checkbox,\n disabled && $style.isDisabled,\n isReadonly && $style.isReadonly,\n error && $style.isInvalid\n )\"\n :for=\"id\">\n <input\n v-model=\"modelValue\"\n ref=\"input\"\n type=\"checkbox\"\n :class=\"$style.checkboxNative\"\n :id=\"id\"\n :disabled=\"disabled\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"isReadonly ? true : undefined\"\n :aria-invalid=\"error ? true : undefined\"\n @click=\"onClick\"/>\n\n <button\n aria-hidden=\"true\"\n :class=\"$style.checkboxElement\"\n tabindex=\"-1\">\n <FluxIcon\n v-if=\"isIndeterminate\"\n name=\"minus\"\n :size=\"16\"/>\n\n <FluxIcon\n v-else\n name=\"check\"\n :size=\"16\"/>\n </button>\n\n <span\n v-if=\"label\"\n :class=\"$style.checkboxLabel\">\n {{ label }}\n </span>\n </label>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormInputBaseProps } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, toRef, unref, useTemplateRef, watchEffect } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<boolean | null>({\n default: false\n });\n\n const {\n disabled: componentDisabled,\n isReadonly\n } = defineProps<Pick<FluxFormInputBaseProps, 'disabled' | 'error' | 'isReadonly'> & {\n readonly label?: string;\n }>();\n\n const inputRef = useTemplateRef('input');\n const {id} = useFormFieldInjection();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const isIndeterminate = computed(() => unref(modelValue) === null);\n\n function onClick(evt: MouseEvent): void {\n if (isReadonly) {\n evt.preventDefault();\n }\n }\n\n watchEffect(() => {\n const input = unref(inputRef);\n\n if (!input) {\n return;\n }\n\n input.indeterminate = unref(isIndeterminate);\n });\n</script>\n","<template>\n <label\n :class=\"clsx(\n $style.checkbox,\n disabled && $style.isDisabled,\n isReadonly && $style.isReadonly,\n error && $style.isInvalid\n )\"\n :for=\"id\">\n <input\n v-model=\"modelValue\"\n ref=\"input\"\n type=\"checkbox\"\n :class=\"$style.checkboxNative\"\n :id=\"id\"\n :disabled=\"disabled\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"isReadonly ? true : undefined\"\n :aria-invalid=\"error ? true : undefined\"\n @click=\"onClick\"/>\n\n <button\n aria-hidden=\"true\"\n :class=\"$style.checkboxElement\"\n tabindex=\"-1\">\n <FluxIcon\n v-if=\"isIndeterminate\"\n name=\"minus\"\n :size=\"16\"/>\n\n <FluxIcon\n v-else\n name=\"check\"\n :size=\"16\"/>\n </button>\n\n <span\n v-if=\"label\"\n :class=\"$style.checkboxLabel\">\n {{ label }}\n </span>\n </label>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormInputBaseProps } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, toRef, unref, useTemplateRef, watchEffect } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<boolean | null>({\n default: false\n });\n\n const {\n disabled: componentDisabled,\n isReadonly\n } = defineProps<Pick<FluxFormInputBaseProps, 'disabled' | 'error' | 'isReadonly'> & {\n readonly label?: string;\n }>();\n\n const inputRef = useTemplateRef('input');\n const {id} = useFormFieldInjection();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const isIndeterminate = computed(() => unref(modelValue) === null);\n\n function onClick(evt: MouseEvent): void {\n if (isReadonly) {\n evt.preventDefault();\n }\n }\n\n watchEffect(() => {\n const input = unref(inputRef);\n\n if (!input) {\n return;\n }\n\n input.indeterminate = unref(isIndeterminate);\n });\n</script>\n","@use '$flux/css/mixin';\n\n.chip {\n display: flex;\n height: 36px;\n padding: 0 12px;\n align-items: center;\n flex-grow: 0;\n gap: 9px;\n background: var(--gray-50);\n border: 1px solid var(--gray-200);\n border-radius: var(--radius-full);\n color: var(--foreground);\n transition: var(--transition-default);\n transition-property: background, border, color, mixin.focus-ring-transition-properties();\n\n &.isSelectable {\n cursor: pointer;\n\n @include mixin.focus-ring(2px);\n\n @include mixin.hover {\n background: var(--gray-100);\n }\n }\n\n &.isSelected {\n background: var(--primary-50);\n border-color: var(--primary-200);\n color: var(--primary-600);\n\n @include mixin.hover {\n background: var(--primary-100);\n }\n }\n\n :is(span) {\n font-size: 14px;\n font-weight: 500;\n white-space: nowrap;\n }\n}\n","<template>\n <Component\n :is=\"isSelectable ? 'button' : 'div'\"\n :class=\"clsx(\n $style.chip,\n isSelectable && $style.isSelectable,\n isSelected && $style.isSelected\n )\"\n :aria-pressed=\"isSelectable ? isSelected : undefined\"\n @click=\"$emit('click', $event)\">\n <FluxFadeTransition v-if=\"isSelectable\">\n <FluxIcon\n :key=\"selectableIcon\"\n :name=\"selectableIcon\"\n :size=\"16\"/>\n </FluxFadeTransition>\n\n <FluxIcon\n v-else-if=\"iconLeading\"\n :name=\"iconLeading\"\n :size=\"16\"/>\n\n <span>{{ label }}</span>\n\n <FluxIcon\n v-if=\"iconTrailing\"\n :name=\"iconTrailing\"\n :size=\"16\"/>\n </Component>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Chip.module.scss';\n\n defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n iconLeading,\n isSelected\n } = defineProps<{\n readonly iconLeading?: FluxIconName;\n readonly iconTrailing?: FluxIconName;\n readonly isSelectable?: boolean;\n readonly isSelected?: boolean;\n readonly label: string;\n }>();\n\n const selectableIcon = computed<FluxIconName>(() => isSelected ? 'check' : (iconLeading ?? 'plus'));\n</script>\n","<template>\n <Component\n :is=\"isSelectable ? 'button' : 'div'\"\n :class=\"clsx(\n $style.chip,\n isSelectable && $style.isSelectable,\n isSelected && $style.isSelected\n )\"\n :aria-pressed=\"isSelectable ? isSelected : undefined\"\n @click=\"$emit('click', $event)\">\n <FluxFadeTransition v-if=\"isSelectable\">\n <FluxIcon\n :key=\"selectableIcon\"\n :name=\"selectableIcon\"\n :size=\"16\"/>\n </FluxFadeTransition>\n\n <FluxIcon\n v-else-if=\"iconLeading\"\n :name=\"iconLeading\"\n :size=\"16\"/>\n\n <span>{{ label }}</span>\n\n <FluxIcon\n v-if=\"iconTrailing\"\n :name=\"iconTrailing\"\n :size=\"16\"/>\n </Component>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Chip.module.scss';\n\n defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n iconLeading,\n isSelected\n } = defineProps<{\n readonly iconLeading?: FluxIconName;\n readonly iconTrailing?: FluxIconName;\n readonly isSelectable?: boolean;\n readonly isSelected?: boolean;\n readonly label: string;\n }>();\n\n const selectableIcon = computed<FluxIconName>(() => isSelected ? 'check' : (iconLeading ?? 'plus'));\n</script>\n","<template>\n <FluxPressable\n :component-type=\"type\"\n :class=\"CLASS_MAP[variant]\"\n type=\"button\"\n :tabindex=\"tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\">\n <slot/>\n\n <slot\n v-if=\"isLoading\"\n name=\"loader\">\n <div :class=\"$style.paneLoader\">\n <FluxSpinner/>\n </div>\n </slot>\n\n <div\n v-if=\"tag\"\n :class=\"$style.paneTag\">\n {{ tag }}\n </div>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxPressableType, FluxTo } from '@flux-ui/types';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n const CLASS_MAP = {\n default: $style.paneDefault,\n flat: $style.paneFlat,\n well: $style.paneWell\n } as const;\n\n const {\n variant = 'default'\n } = defineProps<{\n readonly isLoading?: boolean;\n readonly tag?: string;\n readonly variant?: 'default' | 'flat' | 'well';\n readonly type?: FluxPressableType;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n defineSlots<{\n default(): VNode[];\n loader(): VNode[];\n }>();\n</script>\n","<template>\n <FluxPressable\n :component-type=\"type\"\n :class=\"CLASS_MAP[variant]\"\n type=\"button\"\n :tabindex=\"tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\">\n <slot/>\n\n <slot\n v-if=\"isLoading\"\n name=\"loader\">\n <div :class=\"$style.paneLoader\">\n <FluxSpinner/>\n </div>\n </slot>\n\n <div\n v-if=\"tag\"\n :class=\"$style.paneTag\">\n {{ tag }}\n </div>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxPressableType, FluxTo } from '@flux-ui/types';\n import FluxPressable from './FluxPressable.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n const CLASS_MAP = {\n default: $style.paneDefault,\n flat: $style.paneFlat,\n well: $style.paneWell\n } as const;\n\n const {\n variant = 'default'\n } = defineProps<{\n readonly isLoading?: boolean;\n readonly tag?: string;\n readonly variant?: 'default' | 'flat' | 'well';\n readonly type?: FluxPressableType;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n defineSlots<{\n default(): VNode[];\n loader(): VNode[];\n }>();\n</script>\n","@use \"$flux/css/mixin\";\n\n.commandPaletteBackdrop {\n position: fixed;\n inset: 0;\n background: var(--overlay);\n backdrop-filter: blur(3px) saturate(180%);\n animation: commandPaletteBackdropIn 300ms var(--swift-out) both;\n z-index: 99000;\n\n &.isClosing {\n animation: commandPaletteBackdropOut 210ms var(--swift-out) both;\n }\n}\n\n.commandPaletteDialog {\n position: fixed;\n inset: 0;\n display: flex;\n padding-top: clamp(60px, 15vh, 160px);\n align-items: flex-start;\n justify-content: center;\n animation: commandPaletteIn 300ms var(--swift-out) both;\n z-index: 99001;\n\n &.isClosing {\n animation: commandPaletteOut 210ms var(--swift-out) both;\n pointer-events: none;\n }\n}\n\n.commandPalette {\n display: flex;\n overflow: hidden;\n width: min(600px, calc(100dvw - 48px));\n max-height: min(480px, calc(100dvh - 120px - clamp(60px, 15vh, 160px)));\n flex-flow: column nowrap;\n background: var(--surface);\n background-clip: padding-box;\n border: 1px solid var(--surface-stroke-out);\n border-radius: var(--radius);\n box-shadow: var(--shadow-lg);\n transition: height 120ms var(--deceleration-curve);\n}\n\n.commandPaletteSearch {\n display: flex;\n height: 54px;\n padding: 0 18px;\n align-items: center;\n flex-shrink: 0;\n gap: 12px;\n border-bottom: 1px solid var(--gray-100);\n}\n\n.commandPaletteSearchIcon {\n flex-shrink: 0;\n color: var(--foreground-secondary);\n font-size: 16px;\n}\n\n.commandPaletteSearchInput {\n height: 100%;\n flex-grow: 1;\n background: transparent;\n border: 0;\n color: var(--foreground);\n font: inherit;\n font-size: 16px;\n outline: 0;\n\n &::placeholder {\n color: var(--foreground-secondary);\n }\n}\n\n.commandPaletteBreadcrumb {\n padding: 0;\n flex-shrink: 0;\n background: transparent;\n border: 0;\n cursor: pointer;\n color: var(--foreground-secondary);\n font: inherit;\n font-size: 15px;\n font-weight: 500;\n white-space: nowrap;\n transition: color 150ms;\n\n @include mixin.hover {\n color: var(--foreground);\n }\n}\n\n.commandPaletteBreadcrumbSeparator {\n flex-shrink: 0;\n opacity: .5;\n color: var(--foreground-secondary);\n font-size: 14px;\n}\n\n\n.commandPaletteTabs {\n display: flex;\n overflow-x: auto;\n scrollbar-width: none;\n padding: 6px 15px;\n flex-shrink: 0;\n gap: 3px;\n border-bottom: 1px solid var(--gray-100);\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n.commandPaletteTab {\n display: flex;\n height: 30px;\n padding: 0 10px;\n align-items: center;\n gap: 6px;\n background: transparent;\n border: 0;\n border-radius: var(--radius-half);\n cursor: pointer;\n color: var(--foreground-secondary);\n font: inherit;\n font-size: 13px;\n font-weight: 500;\n white-space: nowrap;\n transition: background 150ms, color 150ms;\n\n @include mixin.hover {\n background: var(--gray-100);\n color: var(--foreground);\n }\n}\n\n.commandPaletteTabActive {\n composes: commandPaletteTab;\n\n background: var(--primary-100);\n color: var(--primary-700);\n\n @include mixin.hover {\n background: var(--primary-100);\n color: var(--primary-700);\n }\n}\n\n.commandPaletteTabIcon {\n font-size: 13px;\n}\n\n.commandPaletteResults {\n overflow-y: auto;\n overscroll-behavior: contain;\n scroll-padding-block: 42px 6px;\n scrollbar-width: thin;\n padding: 6px;\n flex-grow: 1;\n}\n\n.commandPaletteLoading {\n display: flex;\n padding: 24px;\n align-items: center;\n justify-content: center;\n}\n\n.commandPaletteEmpty {\n display: flex;\n padding: 24px;\n align-items: center;\n justify-content: center;\n color: var(--foreground-secondary);\n font-size: 14px;\n}\n\n.commandPaletteGroup {\n display: flex;\n padding: 9px 10px 3px;\n align-items: center;\n gap: 6px;\n color: var(--foreground-secondary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n pointer-events: none;\n}\n\n.commandPaletteGroupIcon {\n font-size: 12px;\n}\n\n.commandPaletteItem {\n display: flex;\n width: 100%;\n padding: 8px 10px;\n align-items: center;\n gap: 10px;\n background: transparent;\n border: 0;\n border-radius: var(--radius-half);\n cursor: pointer;\n color: var(--foreground);\n font: inherit;\n font-size: 14px;\n text-align: left;\n transition: background 100ms;\n\n @include mixin.hover {\n background: var(--gray-100);\n }\n\n &:active {\n background: var(--gray-200);\n }\n}\n\n.commandPaletteItemHighlighted {\n composes: commandPaletteItem;\n\n background: var(--gray-100);\n\n @include mixin.hover {\n background: var(--gray-100);\n }\n}\n\n.commandPaletteItemIcon {\n display: flex;\n width: 30px;\n height: 30px;\n align-items: center;\n align-self: flex-start;\n flex-shrink: 0;\n justify-content: center;\n background: var(--gray-100);\n border-radius: var(--radius-half);\n color: var(--foreground);\n transition: background 100ms, color 100ms;\n\n :local(.icon) {\n font-size: 16px;\n }\n}\n\n.commandPaletteItemHighlighted .commandPaletteItemIcon {\n background: var(--gray-200);\n}\n\n.commandPaletteItemContent {\n overflow: hidden;\n flex-grow: 1;\n}\n\n.commandPaletteItemLabel {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.commandPaletteItemSubLabel {\n overflow: hidden;\n margin-top: 1px;\n color: var(--foreground-secondary);\n font-size: 12px;\n white-space: nowrap;\n text-overflow: ellipsis;\n transition: color 100ms;\n}\n\n.commandPaletteItemHighlighted .commandPaletteItemSubLabel {\n color: var(--primary-500);\n}\n\n\n.commandPaletteItemSubActionIndicator {\n flex-shrink: 0;\n color: var(--foreground-secondary);\n font-size: 12px;\n transition: color 100ms;\n}\n\n.commandPaletteItemHighlighted .commandPaletteItemSubActionIndicator {\n color: var(--primary-500);\n}\n\n@keyframes commandPaletteIn {\n from {\n opacity: 0;\n scale: 1.05;\n }\n\n to {\n opacity: 1;\n scale: 1;\n }\n}\n\n@keyframes commandPaletteOut {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n }\n}\n\n@keyframes commandPaletteBackdropIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes commandPaletteBackdropOut {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n }\n}\n","<template>\n <div :class=\"$style.commandPaletteGroup\">\n <FluxIcon\n v-if=\"icon\"\n :class=\"$style.commandPaletteGroupIcon\"\n :name=\"icon\"/>\n\n <span>{{ label }}</span>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/CommandPalette.module.scss';\n\n defineProps<{\n readonly icon?: FluxIconName;\n readonly label: string;\n }>();\n</script>\n","<template>\n <div :class=\"$style.commandPaletteGroup\">\n <FluxIcon\n v-if=\"icon\"\n :class=\"$style.commandPaletteGroupIcon\"\n :name=\"icon\"/>\n\n <span>{{ label }}</span>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/CommandPalette.module.scss';\n\n defineProps<{\n readonly icon?: FluxIconName;\n readonly label: string;\n }>();\n</script>\n","<template>\n <button\n :class=\"isHighlighted ? $style.commandPaletteItemHighlighted : $style.commandPaletteItem\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"$emit('activate')\"\n @mousedown.prevent\n @mouseenter=\"$emit('highlight')\">\n <div\n v-if=\"icon\"\n :class=\"$style.commandPaletteItemIcon\">\n <FluxIcon :name=\"icon\"/>\n </div>\n\n <div :class=\"$style.commandPaletteItemContent\">\n <div :class=\"$style.commandPaletteItemLabel\">\n {{ label }}\n </div>\n\n <div\n v-if=\"subLabel\"\n :class=\"$style.commandPaletteItemSubLabel\">\n {{ subLabel }}\n </div>\n </div>\n\n <FluxTag\n v-if=\"command\"\n is-keyboard-shortcut\n :label=\"command\"/>\n\n <FluxIcon\n v-if=\"hasSubActions\"\n :class=\"$style.commandPaletteItemSubActionIndicator\"\n name=\"chevron-right\"/>\n </button>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import FluxTag from './FluxTag.vue';\n import $style from '$flux/css/component/CommandPalette.module.scss';\n\n defineEmits<{\n activate: [];\n highlight: [];\n }>();\n\n defineProps<{\n readonly command?: string;\n readonly hasSubActions?: boolean;\n readonly icon?: FluxIconName;\n readonly isHighlighted?: boolean;\n readonly label: string;\n readonly subLabel?: string;\n }>();\n</script>\n","<template>\n <button\n :class=\"isHighlighted ? $style.commandPaletteItemHighlighted : $style.commandPaletteItem\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"$emit('activate')\"\n @mousedown.prevent\n @mouseenter=\"$emit('highlight')\">\n <div\n v-if=\"icon\"\n :class=\"$style.commandPaletteItemIcon\">\n <FluxIcon :name=\"icon\"/>\n </div>\n\n <div :class=\"$style.commandPaletteItemContent\">\n <div :class=\"$style.commandPaletteItemLabel\">\n {{ label }}\n </div>\n\n <div\n v-if=\"subLabel\"\n :class=\"$style.commandPaletteItemSubLabel\">\n {{ subLabel }}\n </div>\n </div>\n\n <FluxTag\n v-if=\"command\"\n is-keyboard-shortcut\n :label=\"command\"/>\n\n <FluxIcon\n v-if=\"hasSubActions\"\n :class=\"$style.commandPaletteItemSubActionIndicator\"\n name=\"chevron-right\"/>\n </button>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import FluxTag from './FluxTag.vue';\n import $style from '$flux/css/component/CommandPalette.module.scss';\n\n defineEmits<{\n activate: [];\n highlight: [];\n }>();\n\n defineProps<{\n readonly command?: string;\n readonly hasSubActions?: boolean;\n readonly icon?: FluxIconName;\n readonly isHighlighted?: boolean;\n readonly label: string;\n readonly subLabel?: string;\n }>();\n</script>\n","<template>\n <Teleport to=\"body\">\n <div\n v-if=\"isOpen || isClosing\"\n :class=\"[$style.commandPaletteBackdrop, isClosing && $style.isClosing]\"\n @click=\"close\"/>\n\n <div\n v-if=\"isOpen || isClosing\"\n ref=\"dialogRef\"\n :class=\"[$style.commandPaletteDialog, isClosing && $style.isClosing]\"\n @click.self=\"close\"\n @keydown=\"onKeyDown\">\n <div\n v-height-transition\n :class=\"$style.commandPalette\"\n @mousedown.prevent>\n <div :class=\"$style.commandPaletteSearch\">\n <FluxIcon\n :class=\"$style.commandPaletteSearchIcon\"\n name=\"magnifying-glass\"/>\n\n <template v-if=\"activeTabSource\">\n <button\n :class=\"$style.commandPaletteBreadcrumb\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"clearSubActionTarget\"\n @mousedown.prevent>\n {{ activeTabSource.label }}\n </button>\n\n <span :class=\"$style.commandPaletteBreadcrumbSeparator\">/</span>\n </template>\n\n <template v-if=\"subActionTarget\">\n <button\n :class=\"$style.commandPaletteBreadcrumb\"\n tabindex=\"-1\"\n type=\"button\"\n @mousedown.prevent>\n {{ subActionTarget.label }}\n </button>\n\n <span :class=\"$style.commandPaletteBreadcrumbSeparator\">/</span>\n </template>\n\n <input\n ref=\"inputRef\"\n :class=\"$style.commandPaletteSearchInput\"\n :placeholder=\"placeholder ?? 'Search...'\"\n :value=\"search\"\n type=\"text\"\n @input=\"setSearch(($event.target as HTMLInputElement).value)\"/>\n\n <FluxTag\n is-keyboard-shortcut\n label=\"Esc\"/>\n </div>\n\n <div\n v-if=\"tabs.length > 0 && !subActionTarget\"\n :class=\"$style.commandPaletteTabs\">\n <button\n :class=\"activeTab === null ? $style.commandPaletteTabActive : $style.commandPaletteTab\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"setActiveTab(null)\"\n @mousedown.prevent>\n All\n </button>\n\n <button\n v-for=\"tab of tabs\"\n :key=\"tab.key\"\n :class=\"activeTab === tab.key ? $style.commandPaletteTabActive : $style.commandPaletteTab\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"setActiveTab(tab.key)\"\n @mousedown.prevent>\n <FluxIcon\n v-if=\"tab.icon\"\n :class=\"$style.commandPaletteTabIcon\"\n :name=\"tab.icon\"/>\n\n {{ tab.label }}\n </button>\n </div>\n\n <FluxWindowTransition :is-back=\"isTransitioningBack\">\n <div\n :key=\"activeTab\"\n :class=\"$style.commandPaletteResults\">\n <template v-if=\"subActionTarget\">\n <FluxCommandPaletteItem\n v-for=\"(action, index) of subActions\"\n :key=\"index\"\n ref=\"itemRefs\"\n :icon=\"action.icon\"\n :is-highlighted=\"highlightedIndex === index\"\n :label=\"action.label\"\n @activate=\"activateSubAction(action)\"\n @highlight=\"highlightedIndex = index\"/>\n </template>\n\n <template v-else-if=\"groupedItems.length > 0\">\n <template\n v-for=\"group of groupedItems\"\n :key=\"group.sourceKey\">\n <FluxCommandPaletteGroup\n v-if=\"group.sourceLabel\"\n :label=\"group.sourceLabel\"/>\n\n <FluxCommandPaletteItem\n v-for=\"result of group.items\"\n :key=\"result.item.id\"\n ref=\"itemRefs\"\n :command=\"result.item.command\"\n :has-sub-actions=\"!!result.item.subActions?.length\"\n :icon=\"result.item.icon\"\n :is-highlighted=\"highlightedIndex === result.globalIndex\"\n :label=\"result.item.label\"\n :sub-label=\"result.item.subLabel\"\n @activate=\"activateItem(result.item)\"\n @highlight=\"highlightedIndex = result.globalIndex\"/>\n </template>\n </template>\n\n <div\n v-else-if=\"isLoading\"\n :class=\"$style.commandPaletteLoading\">\n <FluxSpinner :size=\"22\"/>\n </div>\n\n <div\n v-else\n :class=\"$style.commandPaletteEmpty\">\n No results found.\n </div>\n </div>\n </FluxWindowTransition>\n </div>\n </div>\n </Teleport>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxCommandSource, FluxCommandSourceItem } from '@flux-ui/types';\n import { isSSR, vHeightTransition } from '@flux-ui/internals';\n import { onMounted, onUnmounted, ref, toRef, unref, useTemplateRef } from 'vue';\n import { useCommandPalette } from '$flux/composable/private/useCommandPalette';\n import FluxCommandPaletteGroup from './FluxCommandPaletteGroup.vue';\n import FluxCommandPaletteItem from './FluxCommandPaletteItem.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import FluxTag from './FluxTag.vue';\n import FluxWindowTransition from '$flux/transition/FluxWindowTransition.vue';\n import $style from '$flux/css/component/CommandPalette.module.scss';\n\n const props = defineProps<{\n readonly hasKeyboardShortcut?: boolean;\n readonly placeholder?: string;\n readonly sources: FluxCommandSource[];\n }>();\n\n const emit = defineEmits<{\n select: [item: FluxCommandSourceItem];\n }>();\n\n const dialogRef = useTemplateRef<HTMLDivElement>('dialogRef');\n const inputRef = useTemplateRef<HTMLInputElement>('inputRef');\n const itemRefs = ref<InstanceType<typeof FluxCommandPaletteItem>[]>();\n\n const isOpen = ref(false);\n const isClosing = ref(false);\n\n const {\n search,\n activeTab,\n activeTabSource,\n highlightedIndex,\n isLoading,\n isTransitioningBack,\n subActionTarget,\n groupedItems,\n subActions,\n tabs,\n setSearch,\n setActiveTab,\n enterSubActions,\n onKeyNavigate,\n reset\n } = useCommandPalette({\n sources: toRef(() => props.sources),\n itemRefs\n });\n\n function open(): void {\n if (unref(isOpen)) {\n return;\n }\n\n isOpen.value = true;\n\n requestAnimationFrame(() => unref(inputRef)?.focus());\n }\n\n function close(): void {\n if (!unref(isOpen)) {\n return;\n }\n\n const dialog = unref(dialogRef);\n\n if (!dialog) {\n return;\n }\n\n isClosing.value = true;\n\n const finishClose = () => {\n isClosing.value = false;\n isOpen.value = false;\n reset();\n };\n\n const fallbackTimeout = setTimeout(finishClose, 250);\n\n dialog.addEventListener('animationend', () => {\n clearTimeout(fallbackTimeout);\n finishClose();\n }, {once: true});\n }\n\n function clearSubActionTarget(): void {\n subActionTarget.value = null;\n highlightedIndex.value = -1;\n }\n\n function activateItem(item: FluxCommandSourceItem): void {\n if (item.subActions?.length) {\n enterSubActions(item);\n } else {\n item.onActivate();\n emit('select', item);\n close();\n }\n }\n\n function activateSubAction(action: { readonly onActivate: () => void; }): void {\n action.onActivate();\n close();\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n onKeyNavigate(evt, close, (item) => {\n emit('select', item);\n close();\n });\n }\n\n function onGlobalKeyDown(evt: KeyboardEvent): void {\n if (evt.key === 'k' && (evt.metaKey || evt.ctrlKey)) {\n evt.preventDefault();\n\n if (unref(isOpen)) {\n close();\n } else {\n open();\n }\n }\n }\n\n if (!isSSR && props.hasKeyboardShortcut) {\n onMounted(() => {\n window.addEventListener('keydown', onGlobalKeyDown);\n });\n\n onUnmounted(() => {\n window.removeEventListener('keydown', onGlobalKeyDown);\n });\n }\n\n defineExpose({\n close,\n open\n });\n</script>\n","<template>\n <Teleport to=\"body\">\n <div\n v-if=\"isOpen || isClosing\"\n :class=\"[$style.commandPaletteBackdrop, isClosing && $style.isClosing]\"\n @click=\"close\"/>\n\n <div\n v-if=\"isOpen || isClosing\"\n ref=\"dialogRef\"\n :class=\"[$style.commandPaletteDialog, isClosing && $style.isClosing]\"\n @click.self=\"close\"\n @keydown=\"onKeyDown\">\n <div\n v-height-transition\n :class=\"$style.commandPalette\"\n @mousedown.prevent>\n <div :class=\"$style.commandPaletteSearch\">\n <FluxIcon\n :class=\"$style.commandPaletteSearchIcon\"\n name=\"magnifying-glass\"/>\n\n <template v-if=\"activeTabSource\">\n <button\n :class=\"$style.commandPaletteBreadcrumb\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"clearSubActionTarget\"\n @mousedown.prevent>\n {{ activeTabSource.label }}\n </button>\n\n <span :class=\"$style.commandPaletteBreadcrumbSeparator\">/</span>\n </template>\n\n <template v-if=\"subActionTarget\">\n <button\n :class=\"$style.commandPaletteBreadcrumb\"\n tabindex=\"-1\"\n type=\"button\"\n @mousedown.prevent>\n {{ subActionTarget.label }}\n </button>\n\n <span :class=\"$style.commandPaletteBreadcrumbSeparator\">/</span>\n </template>\n\n <input\n ref=\"inputRef\"\n :class=\"$style.commandPaletteSearchInput\"\n :placeholder=\"placeholder ?? 'Search...'\"\n :value=\"search\"\n type=\"text\"\n @input=\"setSearch(($event.target as HTMLInputElement).value)\"/>\n\n <FluxTag\n is-keyboard-shortcut\n label=\"Esc\"/>\n </div>\n\n <div\n v-if=\"tabs.length > 0 && !subActionTarget\"\n :class=\"$style.commandPaletteTabs\">\n <button\n :class=\"activeTab === null ? $style.commandPaletteTabActive : $style.commandPaletteTab\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"setActiveTab(null)\"\n @mousedown.prevent>\n All\n </button>\n\n <button\n v-for=\"tab of tabs\"\n :key=\"tab.key\"\n :class=\"activeTab === tab.key ? $style.commandPaletteTabActive : $style.commandPaletteTab\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"setActiveTab(tab.key)\"\n @mousedown.prevent>\n <FluxIcon\n v-if=\"tab.icon\"\n :class=\"$style.commandPaletteTabIcon\"\n :name=\"tab.icon\"/>\n\n {{ tab.label }}\n </button>\n </div>\n\n <FluxWindowTransition :is-back=\"isTransitioningBack\">\n <div\n :key=\"activeTab\"\n :class=\"$style.commandPaletteResults\">\n <template v-if=\"subActionTarget\">\n <FluxCommandPaletteItem\n v-for=\"(action, index) of subActions\"\n :key=\"index\"\n ref=\"itemRefs\"\n :icon=\"action.icon\"\n :is-highlighted=\"highlightedIndex === index\"\n :label=\"action.label\"\n @activate=\"activateSubAction(action)\"\n @highlight=\"highlightedIndex = index\"/>\n </template>\n\n <template v-else-if=\"groupedItems.length > 0\">\n <template\n v-for=\"group of groupedItems\"\n :key=\"group.sourceKey\">\n <FluxCommandPaletteGroup\n v-if=\"group.sourceLabel\"\n :label=\"group.sourceLabel\"/>\n\n <FluxCommandPaletteItem\n v-for=\"result of group.items\"\n :key=\"result.item.id\"\n ref=\"itemRefs\"\n :command=\"result.item.command\"\n :has-sub-actions=\"!!result.item.subActions?.length\"\n :icon=\"result.item.icon\"\n :is-highlighted=\"highlightedIndex === result.globalIndex\"\n :label=\"result.item.label\"\n :sub-label=\"result.item.subLabel\"\n @activate=\"activateItem(result.item)\"\n @highlight=\"highlightedIndex = result.globalIndex\"/>\n </template>\n </template>\n\n <div\n v-else-if=\"isLoading\"\n :class=\"$style.commandPaletteLoading\">\n <FluxSpinner :size=\"22\"/>\n </div>\n\n <div\n v-else\n :class=\"$style.commandPaletteEmpty\">\n No results found.\n </div>\n </div>\n </FluxWindowTransition>\n </div>\n </div>\n </Teleport>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxCommandSource, FluxCommandSourceItem } from '@flux-ui/types';\n import { isSSR, vHeightTransition } from '@flux-ui/internals';\n import { onMounted, onUnmounted, ref, toRef, unref, useTemplateRef } from 'vue';\n import { useCommandPalette } from '$flux/composable/private/useCommandPalette';\n import FluxCommandPaletteGroup from './FluxCommandPaletteGroup.vue';\n import FluxCommandPaletteItem from './FluxCommandPaletteItem.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import FluxTag from './FluxTag.vue';\n import FluxWindowTransition from '$flux/transition/FluxWindowTransition.vue';\n import $style from '$flux/css/component/CommandPalette.module.scss';\n\n const props = defineProps<{\n readonly hasKeyboardShortcut?: boolean;\n readonly placeholder?: string;\n readonly sources: FluxCommandSource[];\n }>();\n\n const emit = defineEmits<{\n select: [item: FluxCommandSourceItem];\n }>();\n\n const dialogRef = useTemplateRef<HTMLDivElement>('dialogRef');\n const inputRef = useTemplateRef<HTMLInputElement>('inputRef');\n const itemRefs = ref<InstanceType<typeof FluxCommandPaletteItem>[]>();\n\n const isOpen = ref(false);\n const isClosing = ref(false);\n\n const {\n search,\n activeTab,\n activeTabSource,\n highlightedIndex,\n isLoading,\n isTransitioningBack,\n subActionTarget,\n groupedItems,\n subActions,\n tabs,\n setSearch,\n setActiveTab,\n enterSubActions,\n onKeyNavigate,\n reset\n } = useCommandPalette({\n sources: toRef(() => props.sources),\n itemRefs\n });\n\n function open(): void {\n if (unref(isOpen)) {\n return;\n }\n\n isOpen.value = true;\n\n requestAnimationFrame(() => unref(inputRef)?.focus());\n }\n\n function close(): void {\n if (!unref(isOpen)) {\n return;\n }\n\n const dialog = unref(dialogRef);\n\n if (!dialog) {\n return;\n }\n\n isClosing.value = true;\n\n const finishClose = () => {\n isClosing.value = false;\n isOpen.value = false;\n reset();\n };\n\n const fallbackTimeout = setTimeout(finishClose, 250);\n\n dialog.addEventListener('animationend', () => {\n clearTimeout(fallbackTimeout);\n finishClose();\n }, {once: true});\n }\n\n function clearSubActionTarget(): void {\n subActionTarget.value = null;\n highlightedIndex.value = -1;\n }\n\n function activateItem(item: FluxCommandSourceItem): void {\n if (item.subActions?.length) {\n enterSubActions(item);\n } else {\n item.onActivate();\n emit('select', item);\n close();\n }\n }\n\n function activateSubAction(action: { readonly onActivate: () => void; }): void {\n action.onActivate();\n close();\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n onKeyNavigate(evt, close, (item) => {\n emit('select', item);\n close();\n });\n }\n\n function onGlobalKeyDown(evt: KeyboardEvent): void {\n if (evt.key === 'k' && (evt.metaKey || evt.ctrlKey)) {\n evt.preventDefault();\n\n if (unref(isOpen)) {\n close();\n } else {\n open();\n }\n }\n }\n\n if (!isSSR && props.hasKeyboardShortcut) {\n onMounted(() => {\n window.addEventListener('keydown', onGlobalKeyDown);\n });\n\n onUnmounted(() => {\n window.removeEventListener('keydown', onGlobalKeyDown);\n });\n }\n\n defineExpose({\n close,\n open\n });\n</script>\n",".comment {\n display: grid;\n max-width: 100%;\n gap: 3px 15px;\n grid-template-columns: 1fr auto;\n grid-template-rows: repeat(2, auto);\n\n :local(.avatar) {\n align-self: end;\n grid-column: 2;\n grid-row: 1;\n }\n\n .commentContent {\n grid-column: 1;\n grid-row: 1;\n }\n\n .commentFooter {\n grid-column: 1;\n grid-row: 2;\n }\n\n &.isReceived {\n grid-template-columns: auto 1fr;\n\n :local(.avatar) {\n grid-column: 1;\n }\n\n .commentContent {\n grid-column: 2;\n }\n\n .commentFooter {\n grid-column: 2;\n }\n }\n}\n\n.commentContent {\n min-width: 0;\n padding: 12px 18px;\n background: linear-gradient(to bottom, var(--gray-25), var(--gray-50));\n border: 1px solid var(--gray-200);\n border-radius: calc(var(--radius) * 2);\n box-shadow: var(--shadow-xs);\n}\n\n.comment:not(.isReceived) .commentContent {\n border-bottom-right-radius: var(--radius);\n}\n\n.comment.isReceived .commentContent {\n background: linear-gradient(to bottom, var(--gray-50), var(--gray-100));\n border-color: var(--gray-200);\n border-bottom-left-radius: var(--radius);\n}\n\n.comment.isTyping .commentContent {\n width: min-content;\n}\n\n.commentTyping {\n display: block;\n margin: 6px;\n height: 6px;\n width: 6px;\n border-radius: 6px;\n animation: commentTyping 1s linear infinite both;\n}\n\n.commentFooter {\n display: flex;\n align-items: center;\n gap: 12px;\n justify-content: flex-end;\n font-size: 12px;\n font-weight: 500;\n\n :global(span) {\n margin-right: auto;\n }\n\n :global(time) {\n color: var(--foreground-secondary);\n }\n}\n\n[dark] .commentContent {\n background: linear-gradient(to bottom, var(--gray-50), var(--gray-25));\n}\n\n[dark] .comment.isReceived .commentContent {\n background: linear-gradient(to bottom, var(--gray-100), var(--gray-50));\n}\n\n@keyframes commentTyping {\n 0%,\n 80%,\n 100% {\n background: var(--gray-200);\n box-shadow: -9px 0 var(--gray-200), 9px 0 var(--gray-200);\n translate: 0 0;\n }\n\n 20% {\n background: var(--gray-200);\n box-shadow: -9px -4px var(--gray-300), 9px 0 var(--gray-200);\n translate: 0 0;\n }\n\n 40% {\n background: var(--gray-300);\n box-shadow: -9px 4px var(--gray-200), 9px 4px var(--gray-200);\n translate: 0 -4px;\n }\n\n 60% {\n background: var(--gray-200);\n box-shadow: -9px 0 var(--gray-200), 9px -4px var(--gray-300);\n translate: 0 0;\n }\n}\n","<template>\n <div\n :class=\"clsx(\n $style.comment,\n isTyping && $style.isTyping,\n isReceived && $style.isReceived\n )\"\n role=\"article\">\n <FluxAvatar\n :alt=\"avatarAlt\"\n :fallback=\"avatarFallback\"\n :fallback-icon=\"avatarFallbackIcon\"\n :fallback-initials=\"avatarFallbackInitials\"\n :size=\"42\"\n :src=\"avatarSrc\"/>\n\n <div :class=\"$style.commentContent\">\n <div\n v-if=\"isTyping\"\n :class=\"$style.commentTyping\"/>\n <slot v-else/>\n </div>\n\n <div :class=\"$style.commentFooter\">\n <span v-if=\"isReceived && postedBy\">{{ postedBy }}</span>\n <time\n v-if=\"iso && relative && !isTyping\"\n :datetime=\"iso\">\n {{ isJustNowVisible ? translate('flux.justNow') : relative }}\n </time>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import type { DateTime } from 'luxon';\n import { computed, type VNode } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import FluxAvatar from './FluxAvatar.vue';\n import $style from '$flux/css/component/Comment.module.scss';\n\n const {\n avatarFallback = 'colorized',\n avatarFallbackIcon = 'user',\n postedOn\n } = defineProps<{\n readonly avatarAlt?: string;\n readonly avatarFallback?: 'colorized' | 'neutral';\n readonly avatarFallbackIcon?: FluxIconName;\n readonly avatarFallbackInitials?: string;\n readonly avatarSrc?: string;\n readonly isReceived?: boolean;\n readonly isTyping?: boolean;\n readonly postedBy?: string;\n readonly postedOn?: DateTime;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const translate = useTranslate();\n\n const isJustNowVisible = computed(() => postedOn && Math.abs(postedOn.diffNow().as('seconds')) < 15);\n const iso = computed(() => postedOn?.toISO() ?? null);\n const relative = computed(() => postedOn?.toRelative() ?? null);\n</script>\n","<template>\n <div\n :class=\"clsx(\n $style.comment,\n isTyping && $style.isTyping,\n isReceived && $style.isReceived\n )\"\n role=\"article\">\n <FluxAvatar\n :alt=\"avatarAlt\"\n :fallback=\"avatarFallback\"\n :fallback-icon=\"avatarFallbackIcon\"\n :fallback-initials=\"avatarFallbackInitials\"\n :size=\"42\"\n :src=\"avatarSrc\"/>\n\n <div :class=\"$style.commentContent\">\n <div\n v-if=\"isTyping\"\n :class=\"$style.commentTyping\"/>\n <slot v-else/>\n </div>\n\n <div :class=\"$style.commentFooter\">\n <span v-if=\"isReceived && postedBy\">{{ postedBy }}</span>\n <time\n v-if=\"iso && relative && !isTyping\"\n :datetime=\"iso\">\n {{ isJustNowVisible ? translate('flux.justNow') : relative }}\n </time>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import type { DateTime } from 'luxon';\n import { computed, type VNode } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import FluxAvatar from './FluxAvatar.vue';\n import $style from '$flux/css/component/Comment.module.scss';\n\n const {\n avatarFallback = 'colorized',\n avatarFallbackIcon = 'user',\n postedOn\n } = defineProps<{\n readonly avatarAlt?: string;\n readonly avatarFallback?: 'colorized' | 'neutral';\n readonly avatarFallbackIcon?: FluxIconName;\n readonly avatarFallbackInitials?: string;\n readonly avatarSrc?: string;\n readonly isReceived?: boolean;\n readonly isTyping?: boolean;\n readonly postedBy?: string;\n readonly postedOn?: DateTime;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const translate = useTranslate();\n\n const isJustNowVisible = computed(() => postedOn && Math.abs(postedOn.diffNow().as('seconds')) < 15);\n const iso = computed(() => postedOn?.toISO() ?? null);\n const relative = computed(() => postedOn?.toRelative() ?? null);\n</script>\n",".coordinatePicker {\n position: relative;\n aspect-ratio: 5 / 3;\n background: var(--gray-50);\n border: 1px solid var(--surface-stroke-out);\n border-radius: var(--radius-half);\n z-index: 0;\n}\n\n.coordinatePickerThumb {\n composes: sliderThumb from './Slider.module.scss';\n\n z-index: 1;\n\n &.isDisabled {\n counter-reset: t;\n }\n\n &.isDragging {\n counter-reset: t;\n }\n}\n","<template>\n <button\n :class=\"clsx(\n $style.coordinatePickerThumb,\n disabled && $style.isDisabled,\n isDragging && $style.isDragging\n )\"\n :style=\"{\n top: `${position[1] * 100}%`,\n left: `${position[0] * 100}%`\n }\"\n role=\"slider\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-valuetext=\"`X: ${Math.round(position[0] * 100)}%, Y: ${Math.round(position[1] * 100)}%`\"\n :tabindex=\"disabled ? -1 : 0\"\n type=\"button\"\n @keydown=\"onKeyDown\"\n @pointerdown=\"$emit('grab', $event)\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clsx } from 'clsx';\n import { toRef, unref } from 'vue';\n import { useDisabled } from '$flux/composable';\n import $style from '$flux/css/component/primitive/CoordinatePicker.module.scss';\n\n const emit = defineEmits<{\n decrement: [boolean, boolean];\n grab: [PointerEvent];\n increment: [boolean, boolean];\n }>();\n\n const {\n disabled: componentDisabled\n } = defineProps<{\n readonly disabled?: boolean;\n readonly isDragging?: boolean;\n readonly position: [number, number];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (unref(disabled)) {\n return;\n }\n\n switch (evt.key) {\n case 'ArrowUp':\n emit('decrement', false, true);\n break;\n\n case 'ArrowDown':\n emit('increment', false, true);\n break;\n\n case 'ArrowLeft':\n emit('decrement', true, false);\n break;\n\n case 'ArrowRight':\n emit('increment', true, false);\n break;\n\n default:\n return;\n }\n\n evt.preventDefault();\n }\n</script>\n","<template>\n <button\n :class=\"clsx(\n $style.coordinatePickerThumb,\n disabled && $style.isDisabled,\n isDragging && $style.isDragging\n )\"\n :style=\"{\n top: `${position[1] * 100}%`,\n left: `${position[0] * 100}%`\n }\"\n role=\"slider\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-valuetext=\"`X: ${Math.round(position[0] * 100)}%, Y: ${Math.round(position[1] * 100)}%`\"\n :tabindex=\"disabled ? -1 : 0\"\n type=\"button\"\n @keydown=\"onKeyDown\"\n @pointerdown=\"$emit('grab', $event)\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clsx } from 'clsx';\n import { toRef, unref } from 'vue';\n import { useDisabled } from '$flux/composable';\n import $style from '$flux/css/component/primitive/CoordinatePicker.module.scss';\n\n const emit = defineEmits<{\n decrement: [boolean, boolean];\n grab: [PointerEvent];\n increment: [boolean, boolean];\n }>();\n\n const {\n disabled: componentDisabled\n } = defineProps<{\n readonly disabled?: boolean;\n readonly isDragging?: boolean;\n readonly position: [number, number];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (unref(disabled)) {\n return;\n }\n\n switch (evt.key) {\n case 'ArrowUp':\n emit('decrement', false, true);\n break;\n\n case 'ArrowDown':\n emit('increment', false, true);\n break;\n\n case 'ArrowLeft':\n emit('decrement', true, false);\n break;\n\n case 'ArrowRight':\n emit('increment', true, false);\n break;\n\n default:\n return;\n }\n\n evt.preventDefault();\n }\n</script>\n","<template>\n <div\n ref=\"root\"\n :class=\"$style.coordinatePicker\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-label=\"ariaLabel\"\n @pointerdown=\"onPointerDown\">\n <CoordinatePickerThumb\n :disabled=\"disabled\"\n :is-dragging=\"isDragging\"\n :position=\"thumbPosition\"\n @decrement=\"onDecrement\"\n @increment=\"onIncrement\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { roundStep } from '@basmilius/utils';\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { computed, onUnmounted, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import CoordinatePickerThumb from './CoordinatePickerThumb.vue';\n import $style from '$flux/css/component/primitive/CoordinatePicker.module.scss';\n\n const emit = defineEmits<{\n dragging: [boolean];\n }>();\n\n const modelValue = defineModel<[number, number]>({\n default: [0, 0]\n });\n\n const {\n disabled: componentDisabled,\n max: maxProp = 100,\n min: minProp = 0,\n step: stepProp = 1\n } = defineProps<{\n readonly ariaLabel?: string;\n readonly disabled?: boolean;\n readonly max?: number | [number, number];\n readonly min?: number | [number, number];\n readonly step?: number | [number, number];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const rootRef = useTemplateRef('root');\n\n const isDragging = ref(false);\n\n const max = computed(() => Array.isArray(maxProp) ? maxProp : [maxProp, maxProp]);\n const min = computed(() => Array.isArray(minProp) ? minProp : [minProp, minProp]);\n const step = computed(() => Array.isArray(stepProp) ? stepProp : [stepProp, stepProp]);\n\n const thumbPosition = computed<[number, number]>(() => [\n (unref(modelValue)[0] - unref(min)[0]) / (unref(max)[0] - unref(min)[0]),\n (unref(modelValue)[1] - unref(min)[1]) / (unref(max)[1] - unref(min)[1])\n ]);\n\n function onDecrement(x: boolean, y: boolean): void {\n if (unref(disabled)) {\n return;\n }\n\n let [valueX, valueY] = unref(modelValue);\n const [maxX, maxY] = unref(max);\n const [minX, minY] = unref(min);\n const [stepX, stepY] = unref(step);\n\n if (x) {\n valueX = +roundStep(Math.max(minX, Math.min(maxX, valueX - stepX)), stepX).toPrecision(4);\n }\n\n if (y) {\n valueY = +roundStep(Math.max(minY, Math.min(maxY, valueY - stepY)), stepY).toPrecision(4);\n }\n\n modelValue.value = [valueX, valueY];\n }\n\n function onIncrement(x: boolean, y: boolean): void {\n if (unref(disabled)) {\n return;\n }\n\n let [valueX, valueY] = unref(modelValue);\n const [maxX, maxY] = unref(max);\n const [minX, minY] = unref(min);\n const [stepX, stepY] = unref(step);\n\n if (x) {\n valueX = +roundStep(Math.max(minX, Math.min(maxX, valueX + stepX)), stepX).toPrecision(4);\n }\n\n if (y) {\n valueY = +roundStep(Math.max(minY, Math.min(maxY, valueY + stepY)), stepY).toPrecision(4);\n }\n\n modelValue.value = [valueX, valueY];\n }\n\n function onPointerDown(evt: PointerEvent): void {\n if (unref(disabled)) {\n return;\n }\n\n isDragging.value = true;\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', onPointerUp, {passive: true});\n requestAnimationFrame(() => onPointerMove(evt));\n }\n\n function onPointerMove(evt: PointerEvent): void {\n const root = unrefTemplateElement(rootRef);\n\n if (!unref(isDragging) || !root) {\n return;\n }\n\n const [maxX, maxY] = unref(max);\n const [minX, minY] = unref(min);\n const [stepX, stepY] = unref(step);\n\n let {top, left, width, height} = root.getBoundingClientRect();\n top += 6;\n left += 6;\n width -= 12;\n height -= 12;\n\n const x = Math.max(0, Math.min(1, (evt.clientX - left) / width));\n const y = Math.max(0, Math.min(1, (evt.clientY - top) / height));\n\n modelValue.value = [\n +roundStep(x * (maxX - minX) + minX, stepX).toPrecision(4),\n +roundStep(y * (maxY - minY) + minY, stepY).toPrecision(4)\n ];\n\n evt.preventDefault();\n }\n\n function onPointerUp(): void {\n isDragging.value = false;\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n }\n\n watch(isDragging, isDragging => emit('dragging', isDragging));\n\n onUnmounted(() => {\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n });\n</script>\n","<template>\n <div\n ref=\"root\"\n :class=\"$style.coordinatePicker\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-label=\"ariaLabel\"\n @pointerdown=\"onPointerDown\">\n <CoordinatePickerThumb\n :disabled=\"disabled\"\n :is-dragging=\"isDragging\"\n :position=\"thumbPosition\"\n @decrement=\"onDecrement\"\n @increment=\"onIncrement\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { roundStep } from '@basmilius/utils';\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { computed, onUnmounted, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import CoordinatePickerThumb from './CoordinatePickerThumb.vue';\n import $style from '$flux/css/component/primitive/CoordinatePicker.module.scss';\n\n const emit = defineEmits<{\n dragging: [boolean];\n }>();\n\n const modelValue = defineModel<[number, number]>({\n default: [0, 0]\n });\n\n const {\n disabled: componentDisabled,\n max: maxProp = 100,\n min: minProp = 0,\n step: stepProp = 1\n } = defineProps<{\n readonly ariaLabel?: string;\n readonly disabled?: boolean;\n readonly max?: number | [number, number];\n readonly min?: number | [number, number];\n readonly step?: number | [number, number];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const rootRef = useTemplateRef('root');\n\n const isDragging = ref(false);\n\n const max = computed(() => Array.isArray(maxProp) ? maxProp : [maxProp, maxProp]);\n const min = computed(() => Array.isArray(minProp) ? minProp : [minProp, minProp]);\n const step = computed(() => Array.isArray(stepProp) ? stepProp : [stepProp, stepProp]);\n\n const thumbPosition = computed<[number, number]>(() => [\n (unref(modelValue)[0] - unref(min)[0]) / (unref(max)[0] - unref(min)[0]),\n (unref(modelValue)[1] - unref(min)[1]) / (unref(max)[1] - unref(min)[1])\n ]);\n\n function onDecrement(x: boolean, y: boolean): void {\n if (unref(disabled)) {\n return;\n }\n\n let [valueX, valueY] = unref(modelValue);\n const [maxX, maxY] = unref(max);\n const [minX, minY] = unref(min);\n const [stepX, stepY] = unref(step);\n\n if (x) {\n valueX = +roundStep(Math.max(minX, Math.min(maxX, valueX - stepX)), stepX).toPrecision(4);\n }\n\n if (y) {\n valueY = +roundStep(Math.max(minY, Math.min(maxY, valueY - stepY)), stepY).toPrecision(4);\n }\n\n modelValue.value = [valueX, valueY];\n }\n\n function onIncrement(x: boolean, y: boolean): void {\n if (unref(disabled)) {\n return;\n }\n\n let [valueX, valueY] = unref(modelValue);\n const [maxX, maxY] = unref(max);\n const [minX, minY] = unref(min);\n const [stepX, stepY] = unref(step);\n\n if (x) {\n valueX = +roundStep(Math.max(minX, Math.min(maxX, valueX + stepX)), stepX).toPrecision(4);\n }\n\n if (y) {\n valueY = +roundStep(Math.max(minY, Math.min(maxY, valueY + stepY)), stepY).toPrecision(4);\n }\n\n modelValue.value = [valueX, valueY];\n }\n\n function onPointerDown(evt: PointerEvent): void {\n if (unref(disabled)) {\n return;\n }\n\n isDragging.value = true;\n document.addEventListener('pointermove', onPointerMove);\n document.addEventListener('pointerup', onPointerUp, {passive: true});\n requestAnimationFrame(() => onPointerMove(evt));\n }\n\n function onPointerMove(evt: PointerEvent): void {\n const root = unrefTemplateElement(rootRef);\n\n if (!unref(isDragging) || !root) {\n return;\n }\n\n const [maxX, maxY] = unref(max);\n const [minX, minY] = unref(min);\n const [stepX, stepY] = unref(step);\n\n let {top, left, width, height} = root.getBoundingClientRect();\n top += 6;\n left += 6;\n width -= 12;\n height -= 12;\n\n const x = Math.max(0, Math.min(1, (evt.clientX - left) / width));\n const y = Math.max(0, Math.min(1, (evt.clientY - top) / height));\n\n modelValue.value = [\n +roundStep(x * (maxX - minX) + minX, stepX).toPrecision(4),\n +roundStep(y * (maxY - minY) + minY, stepY).toPrecision(4)\n ];\n\n evt.preventDefault();\n }\n\n function onPointerUp(): void {\n isDragging.value = false;\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n }\n\n watch(isDragging, isDragging => emit('dragging', isDragging));\n\n onUnmounted(() => {\n document.removeEventListener('pointermove', onPointerMove);\n document.removeEventListener('pointerup', onPointerUp);\n });\n</script>\n","<template>\n <div\n :class=\"clsx(\n mode === 'error' && $style.formFieldAdditionError,\n mode === 'hint' && $style.formFieldAdditionHint\n )\"\n role=\"alert\">\n <FluxIcon\n v-if=\"icon\"\n :class=\"$style.formFieldAdditionIcon\"\n :name=\"icon\"\n :size=\"16\"/>\n\n <span v-if=\"message\">\n {{ message }}\n </span>\n\n <slot/>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\">\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const {\n mode = 'hint'\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly message?: string;\n readonly mode?: 'error' | 'hint';\n }>();\n</script>\n","<template>\n <div\n :class=\"clsx(\n mode === 'error' && $style.formFieldAdditionError,\n mode === 'hint' && $style.formFieldAdditionHint\n )\"\n role=\"alert\">\n <FluxIcon\n v-if=\"icon\"\n :class=\"$style.formFieldAdditionIcon\"\n :name=\"icon\"\n :size=\"16\"/>\n\n <span v-if=\"message\">\n {{ message }}\n </span>\n\n <slot/>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\">\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const {\n mode = 'hint'\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly message?: string;\n readonly mode?: 'error' | 'hint';\n }>();\n</script>\n","<template>\n <div :class=\"$style.formField\">\n <label\n :for=\"id\"\n :class=\"$style.formFieldHeader\">\n <span :class=\"$style.formFieldLabel\">\n {{ label }}\n </span>\n\n <span\n v-if=\"isOptional\"\n :class=\"$style.formFieldOptional\">\n ({{ translate('flux.optional') }})\n </span>\n\n <span\n v-if=\"'value' in slots\"\n :class=\"$style.formFieldValue\">\n <slot\n name=\"value\"\n v-bind=\"{currentLength, error, hint, id, isOptional, label, maxLength}\"/>\n </span>\n </label>\n\n <slot v-bind=\"{id}\"/>\n\n <span\n v-if=\"currentLength && maxLength && maxLength > 0\"\n :class=\"$style.formFieldCounter\">\n {{ currentLength }} / {{ maxLength }}\n </span>\n\n <FluxFormFieldAddition\n v-if=\"error\"\n icon=\"circle-exclamation\"\n mode=\"error\"\n :message=\"error\"/>\n\n <FluxFormFieldAddition\n v-if=\"hint\"\n icon=\"circle-info\"\n :message=\"hint\"/>\n\n <slot\n name=\"addition\"\n v-bind=\"{currentLength, error, hint, id, isOptional, label, maxLength}\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { provide, useId, type VNode } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxFormFieldInjectionKey } from '$flux/data';\n import FluxFormFieldAddition from './FluxFormFieldAddition.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineProps<{\n readonly currentLength?: number;\n readonly error?: string;\n readonly hint?: string;\n readonly isOptional?: boolean;\n readonly label: string;\n readonly maxLength?: number;\n }>();\n\n const slots = defineSlots<{\n default(props: {\n readonly id?: string;\n }): VNode[];\n\n addition(props: {\n readonly currentLength?: number;\n readonly error?: string;\n readonly hint?: string;\n readonly isOptional?: boolean;\n readonly label: string;\n readonly maxLength?: number;\n }): VNode[];\n\n value(props: {\n readonly currentLength?: number;\n readonly error?: string;\n readonly hint?: string;\n readonly isOptional?: boolean;\n readonly label: string;\n readonly maxLength?: number;\n }): VNode[];\n }>();\n\n const id = useId();\n const translate = useTranslate();\n\n provide(FluxFormFieldInjectionKey, {\n id\n });\n</script>\n","<template>\n <div :class=\"$style.formField\">\n <label\n :for=\"id\"\n :class=\"$style.formFieldHeader\">\n <span :class=\"$style.formFieldLabel\">\n {{ label }}\n </span>\n\n <span\n v-if=\"isOptional\"\n :class=\"$style.formFieldOptional\">\n ({{ translate('flux.optional') }})\n </span>\n\n <span\n v-if=\"'value' in slots\"\n :class=\"$style.formFieldValue\">\n <slot\n name=\"value\"\n v-bind=\"{currentLength, error, hint, id, isOptional, label, maxLength}\"/>\n </span>\n </label>\n\n <slot v-bind=\"{id}\"/>\n\n <span\n v-if=\"currentLength && maxLength && maxLength > 0\"\n :class=\"$style.formFieldCounter\">\n {{ currentLength }} / {{ maxLength }}\n </span>\n\n <FluxFormFieldAddition\n v-if=\"error\"\n icon=\"circle-exclamation\"\n mode=\"error\"\n :message=\"error\"/>\n\n <FluxFormFieldAddition\n v-if=\"hint\"\n icon=\"circle-info\"\n :message=\"hint\"/>\n\n <slot\n name=\"addition\"\n v-bind=\"{currentLength, error, hint, id, isOptional, label, maxLength}\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { provide, useId, type VNode } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxFormFieldInjectionKey } from '$flux/data';\n import FluxFormFieldAddition from './FluxFormFieldAddition.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineProps<{\n readonly currentLength?: number;\n readonly error?: string;\n readonly hint?: string;\n readonly isOptional?: boolean;\n readonly label: string;\n readonly maxLength?: number;\n }>();\n\n const slots = defineSlots<{\n default(props: {\n readonly id?: string;\n }): VNode[];\n\n addition(props: {\n readonly currentLength?: number;\n readonly error?: string;\n readonly hint?: string;\n readonly isOptional?: boolean;\n readonly label: string;\n readonly maxLength?: number;\n }): VNode[];\n\n value(props: {\n readonly currentLength?: number;\n readonly error?: string;\n readonly hint?: string;\n readonly isOptional?: boolean;\n readonly label: string;\n readonly maxLength?: number;\n }): VNode[];\n }>();\n\n const id = useId();\n const translate = useTranslate();\n\n provide(FluxFormFieldInjectionKey, {\n id\n });\n</script>\n","<template>\n <SliderBase\n :disabled=\"disabled\"\n :is-dragging=\"isDragging\"\n :is-ticks-visible=\"isTicksVisible\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n @dragging=\"onDragging\"\n @update=\"onUpdate\">\n <SliderTrack\n :percentage-lower=\"0\"\n :percentage-upper=\"percentage\">\n <SliderThumb\n ref=\"thumb\"\n :aria-label=\"ariaLabel\"\n :aria-valuemax=\"max\"\n :aria-valuemin=\"min\"\n :aria-valuenow=\"modelValue\"\n :disabled=\"disabled\"\n :is-dragging=\"isDragging\"\n :position=\"percentage\"\n @decrement=\"onDecrement\"\n @increment=\"onIncrement\"/>\n </SliderTrack>\n </SliderBase>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clampWithStepPrecision, countDecimals, formatNumber } from '@basmilius/utils';\n import type { FluxFormInputBaseProps } from '@flux-ui/types';\n import { computed, ref, toRef, unref, useTemplateRef, watch, watchEffect } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { addTooltip, removeTooltip, updateTooltip } from '$flux/data';\n import { SliderBase, SliderThumb, SliderTrack } from './primitive';\n\n const modelValue = defineModel<number>({\n required: true\n });\n\n const {\n ariaLabel,\n formatter = formatNumber,\n disabled: componentDisabled = false,\n isTooltipDisabled,\n max = 100,\n min = 0,\n step = 1\n } = defineProps<Pick<FluxFormInputBaseProps, 'disabled' | 'error' | 'isLoading' | 'isReadonly' | 'name'> & {\n formatter?(value: number, decimals?: number): string;\n\n readonly ariaLabel?: string;\n readonly isTicksVisible?: boolean;\n readonly isTooltipDisabled?: boolean;\n readonly max?: number;\n readonly min?: number;\n readonly step?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const thumbRef = useTemplateRef('thumb');\n\n const isDragging = ref(false);\n const localValue = ref(0);\n const percentage = ref(0);\n const tooltipId = ref<number | null>(null);\n\n const tooltipContent = computed(() => formatter(modelValue.value, countDecimals(step)));\n\n function onDragging(is: boolean): void {\n isDragging.value = is;\n\n if (is && !tooltipId.value && !isTooltipDisabled) {\n tooltipId.value = addTooltip({\n content: unref(tooltipContent),\n direction: 'vertical',\n origin: unref(thumbRef)?.$el\n });\n } else if (!is && tooltipId.value) {\n removeTooltip(tooltipId.value);\n tooltipId.value = null;\n }\n }\n\n function onUpdate(value: number): void {\n localValue.value = value;\n\n requestAnimationFrame(() => {\n if (!tooltipId.value) {\n return;\n }\n\n updateTooltip(tooltipId.value, {\n content: formatter(modelValue.value, countDecimals(step)),\n origin: unref(thumbRef)?.$el\n });\n });\n }\n\n function onDecrement(): void {\n if (unref(disabled)) {\n return;\n }\n\n const value = clampWithStepPrecision(localValue.value, min, max, step);\n modelValue.value = Math.max(min, value - step);\n }\n\n function onIncrement(): void {\n if (unref(disabled)) {\n return;\n }\n\n const value = clampWithStepPrecision(localValue.value, min, max, step);\n modelValue.value = Math.min(max, value + step);\n }\n\n watchEffect(() => {\n localValue.value = (unref(modelValue) - min) / (max - min);\n });\n\n watch([() => max, () => min, localValue, () => step], () => {\n const value = clampWithStepPrecision(unref(localValue), min, max, step);\n modelValue.value = value;\n percentage.value = (value - min) / (max - min);\n }, {immediate: true});\n</script>\n","<template>\n <SliderBase\n :disabled=\"disabled\"\n :is-dragging=\"isDragging\"\n :is-ticks-visible=\"isTicksVisible\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n @dragging=\"onDragging\"\n @update=\"onUpdate\">\n <SliderTrack\n :percentage-lower=\"0\"\n :percentage-upper=\"percentage\">\n <SliderThumb\n ref=\"thumb\"\n :aria-label=\"ariaLabel\"\n :aria-valuemax=\"max\"\n :aria-valuemin=\"min\"\n :aria-valuenow=\"modelValue\"\n :disabled=\"disabled\"\n :is-dragging=\"isDragging\"\n :position=\"percentage\"\n @decrement=\"onDecrement\"\n @increment=\"onIncrement\"/>\n </SliderTrack>\n </SliderBase>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clampWithStepPrecision, countDecimals, formatNumber } from '@basmilius/utils';\n import type { FluxFormInputBaseProps } from '@flux-ui/types';\n import { computed, ref, toRef, unref, useTemplateRef, watch, watchEffect } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { addTooltip, removeTooltip, updateTooltip } from '$flux/data';\n import { SliderBase, SliderThumb, SliderTrack } from './primitive';\n\n const modelValue = defineModel<number>({\n required: true\n });\n\n const {\n ariaLabel,\n formatter = formatNumber,\n disabled: componentDisabled = false,\n isTooltipDisabled,\n max = 100,\n min = 0,\n step = 1\n } = defineProps<Pick<FluxFormInputBaseProps, 'disabled' | 'error' | 'isLoading' | 'isReadonly' | 'name'> & {\n formatter?(value: number, decimals?: number): string;\n\n readonly ariaLabel?: string;\n readonly isTicksVisible?: boolean;\n readonly isTooltipDisabled?: boolean;\n readonly max?: number;\n readonly min?: number;\n readonly step?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const thumbRef = useTemplateRef('thumb');\n\n const isDragging = ref(false);\n const localValue = ref(0);\n const percentage = ref(0);\n const tooltipId = ref<number | null>(null);\n\n const tooltipContent = computed(() => formatter(modelValue.value, countDecimals(step)));\n\n function onDragging(is: boolean): void {\n isDragging.value = is;\n\n if (is && !tooltipId.value && !isTooltipDisabled) {\n tooltipId.value = addTooltip({\n content: unref(tooltipContent),\n direction: 'vertical',\n origin: unref(thumbRef)?.$el\n });\n } else if (!is && tooltipId.value) {\n removeTooltip(tooltipId.value);\n tooltipId.value = null;\n }\n }\n\n function onUpdate(value: number): void {\n localValue.value = value;\n\n requestAnimationFrame(() => {\n if (!tooltipId.value) {\n return;\n }\n\n updateTooltip(tooltipId.value, {\n content: formatter(modelValue.value, countDecimals(step)),\n origin: unref(thumbRef)?.$el\n });\n });\n }\n\n function onDecrement(): void {\n if (unref(disabled)) {\n return;\n }\n\n const value = clampWithStepPrecision(localValue.value, min, max, step);\n modelValue.value = Math.max(min, value - step);\n }\n\n function onIncrement(): void {\n if (unref(disabled)) {\n return;\n }\n\n const value = clampWithStepPrecision(localValue.value, min, max, step);\n modelValue.value = Math.min(max, value + step);\n }\n\n watchEffect(() => {\n localValue.value = (unref(modelValue) - min) / (max - min);\n });\n\n watch([() => max, () => min, localValue, () => step], () => {\n const value = clampWithStepPrecision(unref(localValue), min, max, step);\n modelValue.value = value;\n percentage.value = (value - min) / (max - min);\n }, {immediate: true});\n</script>\n","@use '$flux/css/mixin';\n\n.colorPicker {\n --transparent: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMElEQVQ4T2N89uzZfwY8QFJSEp80A+OoAcMiDP7//483HTx//hx/Ohg1gIFx6IcBALl+VXknOCvFAAAAAElFTkSuQmCC);\n\n display: flex;\n padding: 18px;\n flex-flow: column;\n gap: 15px;\n}\n\n.colorPickerPreview {\n position: relative;\n height: 60px;\n width: 60px;\n border-radius: var(--radius);\n overflow: hidden;\n\n &::after,\n &::before {\n position: absolute;\n inset: 0;\n content: '';\n border-radius: inherit;\n }\n\n &::before {\n background: var(--transparent) repeat center;\n }\n\n &::after {\n background: var(--color);\n box-shadow: inset 0 0 0 1px var(--surface-stroke-out);\n }\n}\n\n.colorPickerSaturation {\n background: var(--pickerBackground, black);\n border: 0;\n\n &::before,\n &::after {\n position: absolute;\n content: '';\n inset: 0;\n border-radius: inherit;\n }\n\n &::before {\n background: linear-gradient(to right, white, transparent);\n }\n\n &::after {\n background: linear-gradient(to top, black, transparent);\n box-shadow: inset 0 0 0 1px var(--surface-stroke-out);\n }\n}\n\n.colorPickerSlider {\n position: relative;\n margin-left: 0;\n margin-right: 0;\n\n .sliderTrackValue {\n background: unset;\n }\n}\n\n.colorPickerAlphaSlider {\n composes: colorPickerSlider;\n\n .sliderTrack {\n background: var(--transparent) repeat center;\n }\n}\n\n.colorPickerHueSlider {\n composes: colorPickerSlider;\n\n .sliderTrack {\n background: linear-gradient(to right, rgb(255, 0, 0) 0, rgb(255, 255, 0) 17%, rgb(0, 255, 0) 33%, rgb(0, 255, 255) 50%, rgb(0, 0, 255) 67%, rgb(255, 0, 255) 83%, rgb(255, 0, 0));\n border-color: rgb(0 0 0 / .1);\n }\n}\n\n.colorPickerValue {\n display: flex;\n align-items: flex-end;\n gap: 9px;\n\n .formFieldLabel {\n min-height: unset;\n font-size: 12px;\n line-height: 15px;\n }\n\n .formInput {\n height: 36px;\n }\n}\n\n.colorSelect {\n display: flex;\n flex-flow: row wrap;\n gap: 9px;\n}\n\n.colorSelectItem {\n display: flex;\n height: 30px;\n width: 30px;\n padding: 0;\n align-items: center;\n justify-content: center;\n border-radius: 15px;\n cursor: pointer;\n transition: 150ms var(--swift-out);\n transition-property: background, border, scale;\n\n .icon {\n transition: inherit;\n transition-property: scale;\n }\n\n @include mixin.hover {\n scale: 1.1;\n }\n\n &:active {\n scale: .9;\n }\n}\n\n.colorSelectColor {\n composes: colorSelectItem;\n\n background: var(--color);\n border: 2px solid color-mix(in srgb, var(--color), black 9%);\n}\n\n.colorSelectColorDeselected {\n composes: colorSelectColor;\n\n .icon {\n scale: .5;\n }\n}\n\n.colorSelectColorSelected {\n composes: colorSelectColor;\n\n background: transparent;\n border: 3px solid var(--color);\n}\n\n.colorSelectCustom {\n composes: colorSelectItem;\n\n background: var(--gray-50);\n border: 1px solid var(--gray-200);\n}\n\n.colorSelectCustomPicker {\n width: 330px;\n}\n\n.colorSelectButtons {\n display: flex;\n padding-top: 0;\n gap: 9px;\n\n .button:first-child {\n flex-grow: 1;\n }\n}\n\n.colorSelectCheck {\n color: var(--color);\n\n :is(path) {\n stroke: currentColor;\n stroke-width: 54px;\n }\n}\n","<template>\n <div\n :class=\"$style.colorPicker\"\n :style=\"{\n '--pickerBackground': saturationPickerColor\n }\">\n <CoordinatePicker\n v-model=\"saturationValue\"\n :aria-label=\"translate('flux.colorSaturationBrightness')\"\n :class=\"$style.colorPickerSaturation\"\n :max=\"1\"\n :min=\"0\"\n :step=\"0.0005\"\n @dragging=\"onDragging\"/>\n\n <FluxFormSlider\n v-model=\"hue\"\n :aria-label=\"translate('flux.hue')\"\n :class=\"$style.colorPickerHueSlider\"\n is-tooltip-disabled\n :max=\"360\"\n :min=\"0\"\n :step=\"0.1\"/>\n\n <FluxFormSlider\n v-if=\"isAlphaEnabled\"\n v-model=\"alpha\"\n :aria-label=\"translate('flux.opacity')\"\n :class=\"$style.colorPickerAlphaSlider\"\n is-tooltip-disabled\n :max=\"1\"\n :min=\"0\"\n :step=\"0.001\"/>\n\n <div :class=\"$style.colorPickerValue\">\n <div\n :class=\"$style.colorPickerPreview\"\n :style=\"{\n '--color': rgb\n }\"\n aria-hidden=\"true\"/>\n\n <FluxFormField\n v-if=\"type === 'hex'\"\n label=\"Hex\">\n <FluxFormInput v-model.lazy=\"modelValue\"/>\n </FluxFormField>\n\n <template v-else-if=\"type === 'rgb'\">\n <FluxFormField label=\"R\">\n <FluxFormInput\n v-model.lazy=\"rgbInputR\"\n :max=\"255\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"G\">\n <FluxFormInput\n v-model.lazy=\"rgbInputG\"\n :max=\"255\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"B\">\n <FluxFormInput\n v-model.lazy=\"rgbInputB\"\n :max=\"255\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n </template>\n\n <template v-else-if=\"type === 'hsv'\">\n <FluxFormField label=\"H\">\n <FluxFormInput\n v-model.lazy=\"hsvInputH\"\n :max=\"1\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"S\">\n <FluxFormInput\n v-model.lazy=\"hsvInputS\"\n :max=\"1\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"V\">\n <FluxFormInput\n v-model.lazy=\"hsvInputV\"\n :max=\"1\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n </template>\n\n <template v-else-if=\"type === 'hsl'\">\n <FluxFormField label=\"H\">\n <FluxFormInput\n v-model.lazy=\"hslInputH\"\n :max=\"360\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"S\">\n <FluxFormInput\n v-model.lazy=\"hslInputS\"\n :max=\"100\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"L\">\n <FluxFormInput\n v-model.lazy=\"hslInputL\"\n :max=\"100\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n </template>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { hexToRGB, hslToHSV, hslToRGB, hsvToHSL, hsvToRGB, rgbToHEX, rgbToHSL, rgbToHSV } from '@basmilius/utils';\n import { blue500 } from '@flux-ui/internals';\n import { computed, type ComputedRef, ref, unref, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import CoordinatePicker from './primitive/CoordinatePicker.vue';\n import FluxFormField from './FluxFormField.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxFormSlider from './FluxFormSlider.vue';\n import $style from '$flux/css/component/Color.module.scss';\n\n const modelValue = defineModel<string | [number, number, number]>({\n default: blue500\n });\n\n const {\n type = 'hex'\n } = defineProps<{\n readonly isAlphaEnabled?: boolean;\n readonly type?: 'hex' | 'rgb' | 'hsl' | 'hsv';\n }>();\n\n const translate = useTranslate();\n\n const alpha = ref(1);\n const hsv = ref<[number, number, number]>([0, 0, 0]);\n const isDragging = ref(false);\n\n const rgb = computed(() => {\n const [r, g, b] = hsvToRGB(...unref(hsv));\n\n return `rgb(${r} ${g} ${b} / ${unref(alpha)})`;\n });\n\n const hue = computed({\n get: () => unref(hsv)[0] * 360,\n set: value => hsv.value = [value / 360, hsv.value[1], hsv.value[2]]\n });\n\n const saturation = computed({\n get: () => unref(hsv)[1],\n set: value => hsv.value = [hsv.value[0], value, hsv.value[2]]\n });\n\n const value = computed({\n get: () => 1 - unref(hsv)[2],\n set: value => hsv.value = [hsv.value[0], hsv.value[1], 1 - value]\n });\n\n const saturationValue = computed({\n get: (): [number, number] => [unref(saturation), unref(value)],\n set: ([s, v]: [number, number]) => {\n saturation.value = s;\n value.value = v;\n }\n });\n\n const saturationPickerColor = computed(() => {\n const [r, g, b] = hsvToRGB(unref(hsv)[0], 1, 1);\n\n return `rgb(${r} ${g} ${b})`;\n });\n\n const hslInputH = generateComputedInput(0, hsvToHSL, hslToHSV);\n const hslInputS = generateComputedInput(1, hsvToHSL, hslToHSV);\n const hslInputL = generateComputedInput(2, hsvToHSL, hslToHSV);\n\n const hsvInputH = generateComputedInput(0);\n const hsvInputS = generateComputedInput(1);\n const hsvInputV = generateComputedInput(2);\n\n const rgbInputR = generateComputedInput(0, hsvToRGB, rgbToHSV);\n const rgbInputG = generateComputedInput(1, hsvToRGB, rgbToHSV);\n const rgbInputB = generateComputedInput(2, hsvToRGB, rgbToHSV);\n\n function onDragging(is: boolean): void {\n isDragging.value = is;\n }\n\n function generateComputedInput(index: number, fromHSV?: (a: number, b: number, c: number) => [number, number, number], toHSV?: (a: number, b: number, c: number) => [number, number, number]): ComputedRef<number> {\n return computed({\n get: () => fromHSV?.(...unref(hsv))[index] ?? unref(hsv)[index],\n set: value => {\n const values: [number, number, number] = [...(fromHSV?.(...unref(hsv)) ?? unref(hsv))];\n values[index] = value;\n hsv.value = toHSV?.(...values) ?? values;\n }\n });\n }\n\n watch(modelValue, (modelValue, oldModelValue) => {\n if (unref(isDragging)) {\n return;\n }\n\n if (JSON.stringify(modelValue) === JSON.stringify(oldModelValue)) {\n return;\n }\n\n const hex = type === 'hex' ? modelValue.toString() : '';\n const values: [number, number, number] = type !== 'hex' ? modelValue as [number, number, number] : [0, 0, 0];\n\n switch (type) {\n case 'hex':\n hsv.value = rgbToHSV(...hexToRGB(hex));\n break;\n\n case 'rgb':\n hsv.value = rgbToHSV(...values);\n break;\n\n case 'hsl':\n hsv.value = rgbToHSV(...hslToRGB(...values));\n break;\n\n case 'hsv':\n hsv.value = [...values];\n break;\n }\n }, {immediate: true});\n\n watch(hsv, hsv => {\n switch (type) {\n case 'hex':\n modelValue.value = rgbToHEX(...hsvToRGB(...hsv));\n break;\n\n case 'rgb':\n modelValue.value = hsvToRGB(...hsv);\n break;\n\n case 'hsl':\n modelValue.value = rgbToHSL(...hsvToRGB(...hsv));\n break;\n\n case 'hsv':\n modelValue.value = [...hsv];\n break;\n }\n });\n</script>\n","<template>\n <div\n :class=\"$style.colorPicker\"\n :style=\"{\n '--pickerBackground': saturationPickerColor\n }\">\n <CoordinatePicker\n v-model=\"saturationValue\"\n :aria-label=\"translate('flux.colorSaturationBrightness')\"\n :class=\"$style.colorPickerSaturation\"\n :max=\"1\"\n :min=\"0\"\n :step=\"0.0005\"\n @dragging=\"onDragging\"/>\n\n <FluxFormSlider\n v-model=\"hue\"\n :aria-label=\"translate('flux.hue')\"\n :class=\"$style.colorPickerHueSlider\"\n is-tooltip-disabled\n :max=\"360\"\n :min=\"0\"\n :step=\"0.1\"/>\n\n <FluxFormSlider\n v-if=\"isAlphaEnabled\"\n v-model=\"alpha\"\n :aria-label=\"translate('flux.opacity')\"\n :class=\"$style.colorPickerAlphaSlider\"\n is-tooltip-disabled\n :max=\"1\"\n :min=\"0\"\n :step=\"0.001\"/>\n\n <div :class=\"$style.colorPickerValue\">\n <div\n :class=\"$style.colorPickerPreview\"\n :style=\"{\n '--color': rgb\n }\"\n aria-hidden=\"true\"/>\n\n <FluxFormField\n v-if=\"type === 'hex'\"\n label=\"Hex\">\n <FluxFormInput v-model.lazy=\"modelValue\"/>\n </FluxFormField>\n\n <template v-else-if=\"type === 'rgb'\">\n <FluxFormField label=\"R\">\n <FluxFormInput\n v-model.lazy=\"rgbInputR\"\n :max=\"255\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"G\">\n <FluxFormInput\n v-model.lazy=\"rgbInputG\"\n :max=\"255\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"B\">\n <FluxFormInput\n v-model.lazy=\"rgbInputB\"\n :max=\"255\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n </template>\n\n <template v-else-if=\"type === 'hsv'\">\n <FluxFormField label=\"H\">\n <FluxFormInput\n v-model.lazy=\"hsvInputH\"\n :max=\"1\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"S\">\n <FluxFormInput\n v-model.lazy=\"hsvInputS\"\n :max=\"1\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"V\">\n <FluxFormInput\n v-model.lazy=\"hsvInputV\"\n :max=\"1\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n </template>\n\n <template v-else-if=\"type === 'hsl'\">\n <FluxFormField label=\"H\">\n <FluxFormInput\n v-model.lazy=\"hslInputH\"\n :max=\"360\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"S\">\n <FluxFormInput\n v-model.lazy=\"hslInputS\"\n :max=\"100\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n\n <FluxFormField label=\"L\">\n <FluxFormInput\n v-model.lazy=\"hslInputL\"\n :max=\"100\"\n :min=\"0\"\n type=\"number\"/>\n </FluxFormField>\n </template>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { hexToRGB, hslToHSV, hslToRGB, hsvToHSL, hsvToRGB, rgbToHEX, rgbToHSL, rgbToHSV } from '@basmilius/utils';\n import { blue500 } from '@flux-ui/internals';\n import { computed, type ComputedRef, ref, unref, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import CoordinatePicker from './primitive/CoordinatePicker.vue';\n import FluxFormField from './FluxFormField.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxFormSlider from './FluxFormSlider.vue';\n import $style from '$flux/css/component/Color.module.scss';\n\n const modelValue = defineModel<string | [number, number, number]>({\n default: blue500\n });\n\n const {\n type = 'hex'\n } = defineProps<{\n readonly isAlphaEnabled?: boolean;\n readonly type?: 'hex' | 'rgb' | 'hsl' | 'hsv';\n }>();\n\n const translate = useTranslate();\n\n const alpha = ref(1);\n const hsv = ref<[number, number, number]>([0, 0, 0]);\n const isDragging = ref(false);\n\n const rgb = computed(() => {\n const [r, g, b] = hsvToRGB(...unref(hsv));\n\n return `rgb(${r} ${g} ${b} / ${unref(alpha)})`;\n });\n\n const hue = computed({\n get: () => unref(hsv)[0] * 360,\n set: value => hsv.value = [value / 360, hsv.value[1], hsv.value[2]]\n });\n\n const saturation = computed({\n get: () => unref(hsv)[1],\n set: value => hsv.value = [hsv.value[0], value, hsv.value[2]]\n });\n\n const value = computed({\n get: () => 1 - unref(hsv)[2],\n set: value => hsv.value = [hsv.value[0], hsv.value[1], 1 - value]\n });\n\n const saturationValue = computed({\n get: (): [number, number] => [unref(saturation), unref(value)],\n set: ([s, v]: [number, number]) => {\n saturation.value = s;\n value.value = v;\n }\n });\n\n const saturationPickerColor = computed(() => {\n const [r, g, b] = hsvToRGB(unref(hsv)[0], 1, 1);\n\n return `rgb(${r} ${g} ${b})`;\n });\n\n const hslInputH = generateComputedInput(0, hsvToHSL, hslToHSV);\n const hslInputS = generateComputedInput(1, hsvToHSL, hslToHSV);\n const hslInputL = generateComputedInput(2, hsvToHSL, hslToHSV);\n\n const hsvInputH = generateComputedInput(0);\n const hsvInputS = generateComputedInput(1);\n const hsvInputV = generateComputedInput(2);\n\n const rgbInputR = generateComputedInput(0, hsvToRGB, rgbToHSV);\n const rgbInputG = generateComputedInput(1, hsvToRGB, rgbToHSV);\n const rgbInputB = generateComputedInput(2, hsvToRGB, rgbToHSV);\n\n function onDragging(is: boolean): void {\n isDragging.value = is;\n }\n\n function generateComputedInput(index: number, fromHSV?: (a: number, b: number, c: number) => [number, number, number], toHSV?: (a: number, b: number, c: number) => [number, number, number]): ComputedRef<number> {\n return computed({\n get: () => fromHSV?.(...unref(hsv))[index] ?? unref(hsv)[index],\n set: value => {\n const values: [number, number, number] = [...(fromHSV?.(...unref(hsv)) ?? unref(hsv))];\n values[index] = value;\n hsv.value = toHSV?.(...values) ?? values;\n }\n });\n }\n\n watch(modelValue, (modelValue, oldModelValue) => {\n if (unref(isDragging)) {\n return;\n }\n\n if (JSON.stringify(modelValue) === JSON.stringify(oldModelValue)) {\n return;\n }\n\n const hex = type === 'hex' ? modelValue.toString() : '';\n const values: [number, number, number] = type !== 'hex' ? modelValue as [number, number, number] : [0, 0, 0];\n\n switch (type) {\n case 'hex':\n hsv.value = rgbToHSV(...hexToRGB(hex));\n break;\n\n case 'rgb':\n hsv.value = rgbToHSV(...values);\n break;\n\n case 'hsl':\n hsv.value = rgbToHSV(...hslToRGB(...values));\n break;\n\n case 'hsv':\n hsv.value = [...values];\n break;\n }\n }, {immediate: true});\n\n watch(hsv, hsv => {\n switch (type) {\n case 'hex':\n modelValue.value = rgbToHEX(...hsvToRGB(...hsv));\n break;\n\n case 'rgb':\n modelValue.value = hsvToRGB(...hsv);\n break;\n\n case 'hsl':\n modelValue.value = rgbToHSL(...hsvToRGB(...hsv));\n break;\n\n case 'hsv':\n modelValue.value = [...hsv];\n break;\n }\n });\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isFilled, isLoading, isSubmit, label, size, href, rel, target, to}\"\n :css-class=\"$style.primaryButton\"\n :css-class-icon=\"$style.primaryButtonIcon\"\n :css-class-label=\"$style.primaryButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineEmits<FluxButtonEmits>();\n defineProps<FluxButtonProps>();\n defineSlots<FluxButtonSlots>();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isFilled, isLoading, isSubmit, label, size, href, rel, target, to}\"\n :css-class=\"$style.primaryButton\"\n :css-class-icon=\"$style.primaryButtonIcon\"\n :css-class-label=\"$style.primaryButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineEmits<FluxButtonEmits>();\n defineProps<FluxButtonProps>();\n defineSlots<FluxButtonSlots>();\n</script>\n","<template>\n <div\n :class=\"$style.colorSelect\"\n role=\"radiogroup\">\n <button\n v-for=\"color of colors\"\n :key=\"color\"\n :class=\"modelValue === color ? $style.colorSelectColorSelected : $style.colorSelectColorDeselected\"\n :style=\"{\n '--color': color\n }\"\n type=\"button\"\n role=\"radio\"\n :aria-checked=\"modelValue === color\"\n :aria-label=\"color\"\n :disabled=\"disabled\"\n :tabindex=\"disabled ? -1 : 0\"\n @click=\"select(color)\">\n <FluxIcon\n :class=\"$style.colorSelectCheck\"\n name=\"check\"\n :size=\"14\"/>\n </button>\n\n <FluxFlyout v-if=\"isCustomAllowed\">\n <template #opener=\"{open}\">\n <button\n :class=\"$style.colorSelectCustom\"\n type=\"button\"\n :disabled=\"disabled\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-label=\"translate('flux.customColor')\"\n @click=\"open()\">\n <FluxIcon\n name=\"ellipsis-h\"\n :size=\"16\"/>\n </button>\n </template>\n\n <template #default=\"{close}\">\n <FluxColorPicker\n v-model=\"customColor\"\n :class=\"$style.colorSelectCustomPicker\"/>\n\n <FluxPaneBody :class=\"$style.colorSelectButtons\">\n <FluxSecondaryButton\n :label=\"translate('flux.cancel')\"\n @click=\"close()\"/>\n\n <FluxPrimaryButton\n :label=\"translate('flux.ok')\"\n @click=\"select(customColor, close)\"/>\n </FluxPaneBody>\n </template>\n </FluxFlyout>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { amber500, blue500, cyan500, emerald500, fuchsia500, green500, indigo500, lime500, orange500, pink500, purple500, red500, rose500, sky500, teal500, violet500, yellow500 } from '@flux-ui/internals';\n import { ref, toRef, unref, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import FluxColorPicker from './FluxColorPicker.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Color.module.scss';\n\n const modelValue = defineModel<string>({\n default: '#000000'\n });\n\n const {\n colors = [red500, orange500, amber500, yellow500, lime500, green500, emerald500, teal500, cyan500, sky500, blue500, indigo500, violet500, purple500, fuchsia500, pink500, rose500],\n disabled: componentDisabled\n } = defineProps<{\n readonly colors?: string[];\n readonly disabled?: boolean;\n readonly isCustomAllowed?: boolean;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const translate = useTranslate();\n\n const customColor = ref('#000000');\n\n function select(color: string, close?: () => void): void {\n if (unref(disabled)) {\n return;\n }\n\n modelValue.value = color;\n close?.();\n }\n\n watch(modelValue, value => customColor.value = value, {immediate: true});\n</script>\n","<template>\n <div\n :class=\"$style.colorSelect\"\n role=\"radiogroup\">\n <button\n v-for=\"color of colors\"\n :key=\"color\"\n :class=\"modelValue === color ? $style.colorSelectColorSelected : $style.colorSelectColorDeselected\"\n :style=\"{\n '--color': color\n }\"\n type=\"button\"\n role=\"radio\"\n :aria-checked=\"modelValue === color\"\n :aria-label=\"color\"\n :disabled=\"disabled\"\n :tabindex=\"disabled ? -1 : 0\"\n @click=\"select(color)\">\n <FluxIcon\n :class=\"$style.colorSelectCheck\"\n name=\"check\"\n :size=\"14\"/>\n </button>\n\n <FluxFlyout v-if=\"isCustomAllowed\">\n <template #opener=\"{open}\">\n <button\n :class=\"$style.colorSelectCustom\"\n type=\"button\"\n :disabled=\"disabled\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-label=\"translate('flux.customColor')\"\n @click=\"open()\">\n <FluxIcon\n name=\"ellipsis-h\"\n :size=\"16\"/>\n </button>\n </template>\n\n <template #default=\"{close}\">\n <FluxColorPicker\n v-model=\"customColor\"\n :class=\"$style.colorSelectCustomPicker\"/>\n\n <FluxPaneBody :class=\"$style.colorSelectButtons\">\n <FluxSecondaryButton\n :label=\"translate('flux.cancel')\"\n @click=\"close()\"/>\n\n <FluxPrimaryButton\n :label=\"translate('flux.ok')\"\n @click=\"select(customColor, close)\"/>\n </FluxPaneBody>\n </template>\n </FluxFlyout>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { amber500, blue500, cyan500, emerald500, fuchsia500, green500, indigo500, lime500, orange500, pink500, purple500, red500, rose500, sky500, teal500, violet500, yellow500 } from '@flux-ui/internals';\n import { ref, toRef, unref, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import FluxColorPicker from './FluxColorPicker.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Color.module.scss';\n\n const modelValue = defineModel<string>({\n default: '#000000'\n });\n\n const {\n colors = [red500, orange500, amber500, yellow500, lime500, green500, emerald500, teal500, cyan500, sky500, blue500, indigo500, violet500, purple500, fuchsia500, pink500, rose500],\n disabled: componentDisabled\n } = defineProps<{\n readonly colors?: string[];\n readonly disabled?: boolean;\n readonly isCustomAllowed?: boolean;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const translate = useTranslate();\n\n const customColor = ref('#000000');\n\n function select(color: string, close?: () => void): void {\n if (unref(disabled)) {\n return;\n }\n\n modelValue.value = color;\n close?.();\n }\n\n watch(modelValue, value => customColor.value = value, {immediate: true});\n</script>\n","<template>\n <div\n :class=\"$style.column\"\n :style=\"{'--gap': `${gap}px`}\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Layout.module.scss';\n\n const {\n gap = 18\n } = defineProps<{\n readonly gap?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.column\"\n :style=\"{'--gap': `${gap}px`}\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Layout.module.scss';\n\n const {\n gap = 18\n } = defineProps<{\n readonly gap?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.container\"\n :style=\"{'--gutter': `${gutter}px`}\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Layout.module.scss';\n\n const {\n gutter = 18\n } = defineProps<{\n readonly gutter?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.container\"\n :style=\"{'--gutter': `${gutter}px`}\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Layout.module.scss';\n\n const {\n gutter = 18\n } = defineProps<{\n readonly gutter?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <SelectBase\n v-model:searchQuery=\"modelSearch\"\n :aria-invalid=\"error ? true : undefined\"\n :class=\"clsx(\n isCondensed && $formStyle.isCondensed,\n isSecondary && $formStyle.isSecondary,\n error && $formStyle.isInvalid\n )\"\n :disabled=\"disabled\"\n :is-loading=\"isLoading\"\n :is-multiple=\"isMultiple\"\n :is-searchable=\"isSearchable\"\n :options=\"groups\"\n :placeholder=\"placeholder\"\n :selected=\"selected\"\n @deselect=\"onDeselect\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormInputBaseProps, FluxFormSelectEntry, FluxFormSelectValue } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { toRef, unref } from 'vue';\n import { SelectBase } from '$flux/component/primitive';\n import { useDisabled } from '$flux/composable';\n import { useFormSelect } from '$flux/composable/private';\n import $formStyle from '$flux/css/component/Form.module.scss';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const modelValue = defineModel<FluxFormSelectValue>({\n required: true\n });\n\n const {\n disabled: componentDisabled,\n isMultiple,\n options\n } = defineProps<Pick<FluxFormInputBaseProps, 'autoFocus' | 'disabled' | 'error' | 'isCondensed' | 'isLoading' | 'isReadonly' | 'isSecondary' | 'name' | 'placeholder'> & {\n readonly isMultiple?: boolean;\n readonly isSearchable?: boolean;\n readonly options: FluxFormSelectEntry[];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {groups, selected, values} = useFormSelect(modelValue, isMultiple, toRef(() => options), modelSearch);\n\n function onDeselect(id: string | number | null): void {\n if (isMultiple) {\n modelValue.value = unref(values).filter(v => v !== id);\n }\n }\n\n function onSelect(id: string | number | null): void {\n if (isMultiple) {\n modelValue.value = [...unref(values), id];\n } else {\n modelValue.value = id;\n }\n }\n</script>\n","<template>\n <SelectBase\n v-model:searchQuery=\"modelSearch\"\n :aria-invalid=\"error ? true : undefined\"\n :class=\"clsx(\n isCondensed && $formStyle.isCondensed,\n isSecondary && $formStyle.isSecondary,\n error && $formStyle.isInvalid\n )\"\n :disabled=\"disabled\"\n :is-loading=\"isLoading\"\n :is-multiple=\"isMultiple\"\n :is-searchable=\"isSearchable\"\n :options=\"groups\"\n :placeholder=\"placeholder\"\n :selected=\"selected\"\n @deselect=\"onDeselect\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormInputBaseProps, FluxFormSelectEntry, FluxFormSelectValue } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { toRef, unref } from 'vue';\n import { SelectBase } from '$flux/component/primitive';\n import { useDisabled } from '$flux/composable';\n import { useFormSelect } from '$flux/composable/private';\n import $formStyle from '$flux/css/component/Form.module.scss';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const modelValue = defineModel<FluxFormSelectValue>({\n required: true\n });\n\n const {\n disabled: componentDisabled,\n isMultiple,\n options\n } = defineProps<Pick<FluxFormInputBaseProps, 'autoFocus' | 'disabled' | 'error' | 'isCondensed' | 'isLoading' | 'isReadonly' | 'isSecondary' | 'name' | 'placeholder'> & {\n readonly isMultiple?: boolean;\n readonly isSearchable?: boolean;\n readonly options: FluxFormSelectEntry[];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {groups, selected, values} = useFormSelect(modelValue, isMultiple, toRef(() => options), modelSearch);\n\n function onDeselect(id: string | number | null): void {\n if (isMultiple) {\n modelValue.value = unref(values).filter(v => v !== id);\n }\n }\n\n function onSelect(id: string | number | null): void {\n if (isMultiple) {\n modelValue.value = [...unref(values), id];\n } else {\n modelValue.value = id;\n }\n }\n</script>\n","@use '$flux/css/mixin';\n\n.pagination {\n display: flex;\n gap: 1px;\n}\n\n.paginationButton {\n composes: secondaryButton from './Button.module.scss';\n\n height: 36px;\n min-width: 36px;\n padding: 0 6px;\n background: unset;\n\n &:local(.secondaryButton) {\n border-color: transparent;\n box-shadow: none;\n }\n}\n\n.paginationButtonArrow {\n &:local(.secondaryButton) {\n border-color: var(--surface-stroke);\n }\n\n &:first-child {\n margin-right: 6px;\n }\n\n &:last-child {\n margin-left: 6px;\n }\n}\n\n.paginationButton.paginationButtonCurrent {\n background: var(--primary-50);\n border-color: var(--primary-200);\n}\n\n.paginationButtonSpacer {\n pointer-events: none;\n}\n\n.paginationButtonIcon {\n composes: secondaryButtonIcon from './Button.module.scss';\n\n font-size: 16px;\n}\n\n.paginationButtonLabel {\n composes: secondaryButtonLabel from './Button.module.scss';\n\n margin: 0;\n min-width: unset;\n font-size: 12px;\n}\n\n.paginationBar {\n display: flex;\n align-items: center;\n flex-flow: row;\n}\n\n.paginationBarLimit {\n display: flex;\n align-items: center;\n flex-flow: row;\n gap: 15px;\n}\n\n.paginationBarLimitDisplayingOf {\n font-size: 12px;\n font-weight: 600;\n}\n\n.paginationBarLimitSelect {\n min-height: 36px;\n width: 120px;\n\n .menuItem {\n min-height: 36px;\n }\n\n .menuItemLabel {\n font-size: 12px;\n font-weight: 600;\n }\n}\n\n@include mixin.breakpoint-down(sm) {\n .paginationBar {\n flex-flow: column;\n gap: 15px;\n }\n}\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isFilled, isLoading, isSubmit, label, size, href, rel, target, to}\"\n :class=\"[\n isArrow && $style.paginationButtonArrow,\n isCurrent && $style.paginationButtonCurrent,\n isSpacer && $style.paginationButtonSpacer\n ]\"\n :css-class=\"$style.paginationButton\"\n :css-class-icon=\"$style.paginationButtonIcon\"\n :css-class-label=\"$style.paginationButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Pagination.module.scss';\n\n defineEmits<FluxButtonEmits>();\n\n defineProps<FluxButtonProps & {\n readonly isArrow?: boolean;\n readonly isCurrent?: boolean;\n readonly isSpacer?: boolean;\n }>();\n\n defineSlots<FluxButtonSlots>();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isFilled, isLoading, isSubmit, label, size, href, rel, target, to}\"\n :class=\"[\n isArrow && $style.paginationButtonArrow,\n isCurrent && $style.paginationButtonCurrent,\n isSpacer && $style.paginationButtonSpacer\n ]\"\n :css-class=\"$style.paginationButton\"\n :css-class-icon=\"$style.paginationButtonIcon\"\n :css-class-label=\"$style.paginationButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Pagination.module.scss';\n\n defineEmits<FluxButtonEmits>();\n\n defineProps<FluxButtonProps & {\n readonly isArrow?: boolean;\n readonly isCurrent?: boolean;\n readonly isSpacer?: boolean;\n }>();\n\n defineSlots<FluxButtonSlots>();\n</script>\n","<template>\n <nav\n :class=\"$style.pagination\"\n role=\"navigation\"\n :aria-label=\"translate('flux.pagination')\">\n <FluxPaginationButton\n v-if=\"arrows || isCompact\"\n :disabled=\"isPreviousDisabled\"\n icon-leading=\"angle-left\"\n is-arrow\n :aria-label=\"translate('flux.previous')\"\n @click=\"previous\"/>\n\n <template\n v-if=\"!isCompact\"\n v-for=\"p of visiblePages\">\n <FluxPaginationButton\n v-if=\"p === 'dots'\"\n disabled\n icon-leading=\"ellipsis-h\"\n is-spacer/>\n\n <FluxPaginationButton\n v-else-if=\"p === page\"\n is-current\n :label=\"`${p}`\"\n aria-current=\"page\"/>\n\n <FluxPaginationButton\n v-else\n :aria-label=\"translate('flux.goToPage', {page: p})\"\n :label=\"`${p}`\"\n @click=\"navigate(p)\"/>\n </template>\n\n <template v-else>\n <FluxPaginationButton\n :class=\"$style.paginationCurrentZZ\"\n @click=\"prompt\"\n #before>\n <strong>{{ page }}</strong>\n <span>/</span>\n <span>{{ pages }}</span>\n </FluxPaginationButton>\n </template>\n\n <FluxPaginationButton\n v-if=\"arrows || isCompact\"\n :disabled=\"isNextDisabled\"\n icon-leading=\"angle-right\"\n is-arrow\n :aria-label=\"translate('flux.next')\"\n @click=\"next\"/>\n </nav>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed, unref } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { showPrompt } from '$flux/data';\n import FluxPaginationButton from './FluxPaginationButton.vue';\n import $style from '$flux/css/component/Pagination.module.scss';\n\n const emit = defineEmits<{\n navigate: [number];\n }>();\n\n const {\n page,\n perPage,\n total\n } = defineProps<{\n readonly arrows?: boolean;\n readonly isCompact?: boolean;\n readonly page: number;\n readonly perPage: number;\n readonly total: number;\n }>();\n\n const translate = useTranslate();\n\n const pages = computed(() => Math.ceil(total / perPage));\n const isNextDisabled = computed(() => page >= unref(pages));\n const isPreviousDisabled = computed(() => page <= 1);\n\n const visiblePages = computed(() => {\n if (unref(pages) === 0) {\n return [];\n }\n\n const sizes = {\n end: 1,\n middle: 2\n } as const;\n\n let dots = false;\n let visible: (number | 'dots')[] = [];\n\n if (unref(pages) === (sizes.end + sizes.middle + 2)) {\n for (let n = 1; n <= unref(pages); ++n) {\n visible.push(n);\n }\n } else {\n for (let n = 1; n <= unref(pages); ++n) {\n if (page === n) {\n dots = true;\n visible.push(n);\n } else if (n <= sizes.end || (n >= page - sizes.middle && n <= page + sizes.middle) || n > unref(pages) - sizes.end) {\n dots = true;\n visible.push(n);\n } else if (dots) {\n dots = false;\n visible.push('dots');\n }\n }\n }\n\n return visible;\n });\n\n function navigate(page: number): void {\n emit('navigate', page);\n }\n\n function next(): void {\n navigate(page + 1);\n }\n\n function previous(): void {\n navigate(page - 1);\n }\n\n async function prompt(): Promise<void> {\n const pageStr = await showPrompt({\n icon: 'ellipsis',\n title: translate('flux.paginationNavigateTitle'),\n message: translate('flux.paginationNavigateMessage'),\n fieldLabel: translate('flux.paginationNavigatePage')\n });\n\n const page = Number(pageStr);\n\n if (isNaN(page) || page > unref(pages) || page <= 0) {\n return;\n }\n\n navigate(page);\n }\n</script>\n","<template>\n <nav\n :class=\"$style.pagination\"\n role=\"navigation\"\n :aria-label=\"translate('flux.pagination')\">\n <FluxPaginationButton\n v-if=\"arrows || isCompact\"\n :disabled=\"isPreviousDisabled\"\n icon-leading=\"angle-left\"\n is-arrow\n :aria-label=\"translate('flux.previous')\"\n @click=\"previous\"/>\n\n <template\n v-if=\"!isCompact\"\n v-for=\"p of visiblePages\">\n <FluxPaginationButton\n v-if=\"p === 'dots'\"\n disabled\n icon-leading=\"ellipsis-h\"\n is-spacer/>\n\n <FluxPaginationButton\n v-else-if=\"p === page\"\n is-current\n :label=\"`${p}`\"\n aria-current=\"page\"/>\n\n <FluxPaginationButton\n v-else\n :aria-label=\"translate('flux.goToPage', {page: p})\"\n :label=\"`${p}`\"\n @click=\"navigate(p)\"/>\n </template>\n\n <template v-else>\n <FluxPaginationButton\n :class=\"$style.paginationCurrentZZ\"\n @click=\"prompt\"\n #before>\n <strong>{{ page }}</strong>\n <span>/</span>\n <span>{{ pages }}</span>\n </FluxPaginationButton>\n </template>\n\n <FluxPaginationButton\n v-if=\"arrows || isCompact\"\n :disabled=\"isNextDisabled\"\n icon-leading=\"angle-right\"\n is-arrow\n :aria-label=\"translate('flux.next')\"\n @click=\"next\"/>\n </nav>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed, unref } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { showPrompt } from '$flux/data';\n import FluxPaginationButton from './FluxPaginationButton.vue';\n import $style from '$flux/css/component/Pagination.module.scss';\n\n const emit = defineEmits<{\n navigate: [number];\n }>();\n\n const {\n page,\n perPage,\n total\n } = defineProps<{\n readonly arrows?: boolean;\n readonly isCompact?: boolean;\n readonly page: number;\n readonly perPage: number;\n readonly total: number;\n }>();\n\n const translate = useTranslate();\n\n const pages = computed(() => Math.ceil(total / perPage));\n const isNextDisabled = computed(() => page >= unref(pages));\n const isPreviousDisabled = computed(() => page <= 1);\n\n const visiblePages = computed(() => {\n if (unref(pages) === 0) {\n return [];\n }\n\n const sizes = {\n end: 1,\n middle: 2\n } as const;\n\n let dots = false;\n let visible: (number | 'dots')[] = [];\n\n if (unref(pages) === (sizes.end + sizes.middle + 2)) {\n for (let n = 1; n <= unref(pages); ++n) {\n visible.push(n);\n }\n } else {\n for (let n = 1; n <= unref(pages); ++n) {\n if (page === n) {\n dots = true;\n visible.push(n);\n } else if (n <= sizes.end || (n >= page - sizes.middle && n <= page + sizes.middle) || n > unref(pages) - sizes.end) {\n dots = true;\n visible.push(n);\n } else if (dots) {\n dots = false;\n visible.push('dots');\n }\n }\n }\n\n return visible;\n });\n\n function navigate(page: number): void {\n emit('navigate', page);\n }\n\n function next(): void {\n navigate(page + 1);\n }\n\n function previous(): void {\n navigate(page - 1);\n }\n\n async function prompt(): Promise<void> {\n const pageStr = await showPrompt({\n icon: 'ellipsis',\n title: translate('flux.paginationNavigateTitle'),\n message: translate('flux.paginationNavigateMessage'),\n fieldLabel: translate('flux.paginationNavigatePage')\n });\n\n const page = Number(pageStr);\n\n if (isNaN(page) || page > unref(pages) || page <= 0) {\n return;\n }\n\n navigate(page);\n }\n</script>\n","<template>\n <div :class=\"$style.paginationBar\">\n <FluxPagination\n v-if=\"total > perPage\"\n arrows\n :page=\"page\"\n :per-page=\"perPage\"\n :total=\"total\"\n @navigate=\"$emit('navigate', $event)\"/>\n\n <FluxSpacer :class=\"$style.paginationBarSpacer\"/>\n\n <div :class=\"$style.paginationBarLimit\">\n <span :class=\"$style.paginationBarLimitDisplayingOf\">\n {{\n translate('flux.displayingOf', {\n from: (page - 1) * perPage + 1,\n to: Math.min(total, page * perPage),\n total: total\n })\n }}\n </span>\n\n <FluxFormSelect\n v-model=\"limit\"\n :class=\"$style.paginationBarLimitSelect\"\n :options=\"limitOptions\"/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormSelectOption } from '@flux-ui/types';\n import { computed, ref, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import FluxFormSelect from './FluxFormSelect.vue';\n import FluxPagination from './FluxPagination.vue';\n import FluxSpacer from './FluxSpacer.vue';\n import $style from '$flux/css/component/Pagination.module.scss';\n\n const emit = defineEmits<{\n limit: [number];\n navigate: [number];\n }>();\n\n const {\n limits = [5, 10, 25, 50, 100],\n perPage\n } = defineProps<{\n readonly limits?: number[];\n readonly page: number;\n readonly perPage: number;\n readonly total: number;\n }>();\n\n const translate = useTranslate();\n\n const limit = ref(perPage);\n\n const limitOptions = computed(() => limits.map<FluxFormSelectOption>(n => ({\n label: translate('flux.showN', {n}),\n value: n\n })));\n\n watch(limit, limit => emit('limit', limit));\n\n watch(() => perPage, perPage => limit.value = perPage, {immediate: true});\n</script>\n","<template>\n <div :class=\"$style.paginationBar\">\n <FluxPagination\n v-if=\"total > perPage\"\n arrows\n :page=\"page\"\n :per-page=\"perPage\"\n :total=\"total\"\n @navigate=\"$emit('navigate', $event)\"/>\n\n <FluxSpacer :class=\"$style.paginationBarSpacer\"/>\n\n <div :class=\"$style.paginationBarLimit\">\n <span :class=\"$style.paginationBarLimitDisplayingOf\">\n {{\n translate('flux.displayingOf', {\n from: (page - 1) * perPage + 1,\n to: Math.min(total, page * perPage),\n total: total\n })\n }}\n </span>\n\n <FluxFormSelect\n v-model=\"limit\"\n :class=\"$style.paginationBarLimitSelect\"\n :options=\"limitOptions\"/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormSelectOption } from '@flux-ui/types';\n import { computed, ref, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import FluxFormSelect from './FluxFormSelect.vue';\n import FluxPagination from './FluxPagination.vue';\n import FluxSpacer from './FluxSpacer.vue';\n import $style from '$flux/css/component/Pagination.module.scss';\n\n const emit = defineEmits<{\n limit: [number];\n navigate: [number];\n }>();\n\n const {\n limits = [5, 10, 25, 50, 100],\n perPage\n } = defineProps<{\n readonly limits?: number[];\n readonly page: number;\n readonly perPage: number;\n readonly total: number;\n }>();\n\n const translate = useTranslate();\n\n const limit = ref(perPage);\n\n const limitOptions = computed(() => limits.map<FluxFormSelectOption>(n => ({\n label: translate('flux.showN', {n}),\n value: n\n })));\n\n watch(limit, limit => emit('limit', limit));\n\n watch(() => perPage, perPage => limit.value = perPage, {immediate: true});\n</script>\n","@use '$flux/css/mixin';\n\n.table {\n composes: basePaneElement from './base/Pane.module.scss';\n\n position: relative;\n display: flex;\n container: table / inline-size;\n flex-flow: column;\n overflow: auto;\n\n :is(caption) {\n color: var(--foreground-secondary);\n font-size: 14px;\n text-align: left;\n }\n}\n\n.tableBase {\n min-width: 100cqw;\n bottom: 0;\n border-spacing: 0;\n text-align: left;\n\n &:has(.tableFill) {\n flex-grow: 1;\n }\n\n &:has(.tableFill):has(.tablePagination) {\n margin-bottom: -1px;\n }\n}\n\n.tableLoader {\n composes: basePaneLoader from './base/Pane.module.scss';\n}\n\n.tableRow {\n height: 0;\n margin: 0;\n padding: 0;\n}\n\n.tableCell {\n height: 0;\n padding: 0;\n border: 0 solid var(--gray-100);\n\n @-moz-document url-prefix() {\n height: 100%;\n }\n}\n\n.tableCellContent {\n display: flex;\n height: 100%;\n padding: 12px 15px;\n align-items: flex-start;\n}\n\n.tableHeader {\n composes: tableCell;\n\n border-bottom: 2px solid var(--gray-100);\n color: var(--foreground-prominent);\n\n &.isShrinking {\n width: 0;\n white-space: nowrap;\n }\n\n &.isSticky {\n position: sticky;\n top: 0;\n background: var(--gray-50);\n z-index: 1;\n }\n}\n\n.tableHeaderContent {\n composes: tableCellContent;\n\n align-items: center;\n font-size: 14px;\n}\n\ntbody .tableRow:nth-child(even) .tableCell.isStriped {\n background: rgb(from var(--gray-50) r g b / .5);\n}\n\n@media (hover: hover) {\n tbody .tableRow:hover .tableCell.isHoverable,\n tbody .tableRow:has(:focus-visible) .tableCell.isHoverable {\n background: var(--gray-50);\n }\n}\n\ntfoot .tableCell {\n border-top: 1px solid var(--gray-100);\n}\n\n.tableCell + .tableCell.isBordered {\n border-left-width: 1px;\n}\n\n.tableRow + .tableRow .tableCell.isSeparated {\n border-top-width: 1px;\n}\n\n.tableActions {\n margin: -4px 0 -4px -3px;\n}\n\n.tableFill {\n pointer-events: none;\n\n .tableCell {\n height: 100%;\n }\n\n .tableCellContent {\n padding: 0;\n }\n}\n\n.tableBar {\n composes: tableCell;\n\n position: relative;\n background: var(--gray-50);\n box-shadow: 0 0 24px var(--gray-50),\n 0 0 24px var(--gray-50),\n 0 0 24px var(--gray-50),\n 0 0 24px var(--gray-50),\n 0 0 24px var(--gray-50),\n 0 0 24px var(--gray-50);\n z-index: 2;\n}\n\n.tableBarContent {\n composes: tableCellContent;\n\n position: sticky;\n left: 0;\n max-width: 100cqw;\n flex-flow: row nowrap;\n gap: 15px;\n}\n\n.tablePagination {\n position: sticky;\n bottom: 0;\n margin-top: auto;\n margin-bottom: -1px;\n background: var(--surface);\n border-top: 1px solid var(--gray-100);\n translate: 0 -1px;\n z-index: 100;\n}\n\n.tableSort {\n display: flex;\n height: 24px;\n width: 24px;\n margin: -3px -6px -3px 6px;\n padding: 0;\n align-items: center;\n justify-content: center;\n background: unset;\n border: 0;\n border-radius: var(--radius-half);\n color: var(--foreground-secondary);\n cursor: pointer;\n outline: 0;\n\n @include mixin.hover {\n background: var(--gray-100);\n color: var(--foreground);\n }\n}\n\n.basePaneStructure > .table .tableCell:first-child .tableCellContent {\n padding-left: 18px;\n}\n\n.basePaneStructure > .table .tableCell:last-child .tableCellContent {\n padding-right: 18px;\n}\n\n.basePaneStructure > .table .tableActions {\n margin-right: -3px;\n}\n\n.basePaneStructure > .table :is(caption) {\n padding: 12px 18px;\n border-top: 1px solid var(--gray-100);\n}\n\n.basePaneStructure > .table .tableLoader {\n border-radius: var(--radius);\n}\n\n:not(.basePaneStructure) > .table .tableCell:not(.isBordered):first-child .tableCellContent {\n padding-left: 0;\n}\n\n:not(.basePaneStructure) > .table .tableCell:not(.isBordered):last-child .tableCellContent {\n padding-right: 0;\n}\n","<template>\n <td\n :class=\"clsx(\n $style.tableCell,\n isBordered && $style.isBordered,\n isHoverable && $style.isHoverable,\n isSeparated && $style.isSeparated,\n isStriped && $style.isStriped\n )\"\n role=\"cell\">\n <slot name=\"content\">\n <div\n :class=\"$style.tableCellContent\"\n :style=\"{\n flexFlow: contentDirection,\n gap: contentGap != null ? `${contentGap}px` : undefined\n }\">\n <slot/>\n </div>\n </slot>\n </td>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { clsx } from 'clsx';\n import { useTableInjection } from '$flux/composable';\n import $style from '$flux/css/component/Table.module.scss';\n\n const {\n contentDirection = 'row'\n } = defineProps<{\n readonly contentDirection?: 'column' | 'row';\n readonly contentGap?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n content(): VNode[];\n }>();\n\n const {\n isBordered,\n isHoverable,\n isSeparated,\n isStriped\n } = useTableInjection();\n</script>\n","<template>\n <td\n :class=\"clsx(\n $style.tableCell,\n isBordered && $style.isBordered,\n isHoverable && $style.isHoverable,\n isSeparated && $style.isSeparated,\n isStriped && $style.isStriped\n )\"\n role=\"cell\">\n <slot name=\"content\">\n <div\n :class=\"$style.tableCellContent\"\n :style=\"{\n flexFlow: contentDirection,\n gap: contentGap != null ? `${contentGap}px` : undefined\n }\">\n <slot/>\n </div>\n </slot>\n </td>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { clsx } from 'clsx';\n import { useTableInjection } from '$flux/composable';\n import $style from '$flux/css/component/Table.module.scss';\n\n const {\n contentDirection = 'row'\n } = defineProps<{\n readonly contentDirection?: 'column' | 'row';\n readonly contentGap?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n content(): VNode[];\n }>();\n\n const {\n isBordered,\n isHoverable,\n isSeparated,\n isStriped\n } = useTableInjection();\n</script>\n","<template>\n <tr :class=\"$style.tableRow\">\n <slot/>\n </tr>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Table.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <tr :class=\"$style.tableRow\">\n <slot/>\n </tr>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Table.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.table\">\n <table :class=\"$style.tableBase\">\n <slot name=\"colgroups\"/>\n\n <thead v-if=\"slots.header\">\n <slot name=\"header\"/>\n </thead>\n\n <tbody v-if=\"slots.default\">\n <slot/>\n\n <FluxTableRow\n v-if=\"fillColumns\"\n :class=\"$style.tableFill\">\n <FluxTableCell v-for=\"_ of fillColumns\"/>\n </FluxTableRow>\n </tbody>\n\n <tfoot v-if=\"slots.footer\">\n <slot name=\"footer\"/>\n </tfoot>\n\n <caption\n v-if=\"slots.caption\"\n :style=\"{captionSide}\">\n <slot name=\"caption\"/>\n </caption>\n </table>\n\n <div\n v-if=\"isLoading\"\n :class=\"$style.tableLoader\">\n <FluxSpinner/>\n </div>\n\n <FluxPaneBody\n v-if=\"slots.pagination\"\n :class=\"$style.tablePagination\">\n <slot name=\"pagination\"/>\n </FluxPaneBody>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { provide } from 'vue';\n import { FluxTableInjectionKey } from '$flux/data';\n import FluxPaneBody from './FluxPaneBody.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import FluxTableCell from './FluxTableCell.vue';\n import FluxTableRow from './FluxTableRow.vue';\n import $style from '$flux/css/component/Table.module.scss';\n\n const {\n captionSide = 'bottom',\n isBordered = true,\n isHoverable = false,\n isLoading = false,\n isSeparated = true,\n isStriped = false\n } = defineProps<{\n readonly captionSide?: 'top' | 'bottom';\n readonly fillColumns?: number;\n readonly isBordered?: boolean;\n readonly isHoverable?: boolean;\n readonly isLoading?: boolean;\n readonly isSeparated?: boolean;\n readonly isStriped?: boolean;\n }>();\n\n const slots = defineSlots<{\n default?(): VNode;\n colgroups?(): VNode;\n caption?(): VNode;\n footer?(): VNode;\n header?(): VNode;\n pagination?(): VNode;\n }>();\n\n provide(FluxTableInjectionKey, {\n isBordered,\n isHoverable,\n isSeparated,\n isStriped\n });\n</script>\n","<template>\n <div :class=\"$style.table\">\n <table :class=\"$style.tableBase\">\n <slot name=\"colgroups\"/>\n\n <thead v-if=\"slots.header\">\n <slot name=\"header\"/>\n </thead>\n\n <tbody v-if=\"slots.default\">\n <slot/>\n\n <FluxTableRow\n v-if=\"fillColumns\"\n :class=\"$style.tableFill\">\n <FluxTableCell v-for=\"_ of fillColumns\"/>\n </FluxTableRow>\n </tbody>\n\n <tfoot v-if=\"slots.footer\">\n <slot name=\"footer\"/>\n </tfoot>\n\n <caption\n v-if=\"slots.caption\"\n :style=\"{captionSide}\">\n <slot name=\"caption\"/>\n </caption>\n </table>\n\n <div\n v-if=\"isLoading\"\n :class=\"$style.tableLoader\">\n <FluxSpinner/>\n </div>\n\n <FluxPaneBody\n v-if=\"slots.pagination\"\n :class=\"$style.tablePagination\">\n <slot name=\"pagination\"/>\n </FluxPaneBody>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { provide } from 'vue';\n import { FluxTableInjectionKey } from '$flux/data';\n import FluxPaneBody from './FluxPaneBody.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import FluxTableCell from './FluxTableCell.vue';\n import FluxTableRow from './FluxTableRow.vue';\n import $style from '$flux/css/component/Table.module.scss';\n\n const {\n captionSide = 'bottom',\n isBordered = true,\n isHoverable = false,\n isLoading = false,\n isSeparated = true,\n isStriped = false\n } = defineProps<{\n readonly captionSide?: 'top' | 'bottom';\n readonly fillColumns?: number;\n readonly isBordered?: boolean;\n readonly isHoverable?: boolean;\n readonly isLoading?: boolean;\n readonly isSeparated?: boolean;\n readonly isStriped?: boolean;\n }>();\n\n const slots = defineSlots<{\n default?(): VNode;\n colgroups?(): VNode;\n caption?(): VNode;\n footer?(): VNode;\n header?(): VNode;\n pagination?(): VNode;\n }>();\n\n provide(FluxTableInjectionKey, {\n isBordered,\n isHoverable,\n isSeparated,\n isStriped\n });\n</script>\n","<template>\n <FluxTable\n :fill-columns=\"fillColumns\"\n :is-bordered=\"isBordered\"\n :is-hoverable=\"isHoverable\"\n :is-loading=\"isLoading\"\n :is-separated=\"isSeparated\"\n :is-striped=\"isStriped\">\n <template\n v-if=\"'colgroups' in slots\"\n #colgroups>\n <slot name=\"colgroups\"/>\n </template>\n\n <template\n v-if=\"'header' in slots\"\n #header>\n <slot\n name=\"filter\"\n v-bind=\"{page, perPage, items: limitedItems, total}\"/>\n\n <FluxTableRow>\n <slot\n name=\"header\"\n v-bind=\"{page, perPage, items: limitedItems, total}\"/>\n </FluxTableRow>\n </template>\n\n <template\n v-if=\"'footer' in slots\"\n #footer>\n <FluxTableRow>\n <slot\n name=\"footer\"\n v-bind=\"{page, perPage, items: limitedItems, total}\"/>\n </FluxTableRow>\n </template>\n\n <template\n v-if=\"total > limits[0]\"\n #pagination>\n <slot\n name=\"pagination\"\n v-bind=\"{page, perPage, items: limitedItems, total}\">\n <FluxPaginationBar\n :limits=\"limits\"\n :page=\"page\"\n :per-page=\"perPage\"\n :total=\"total\"\n @limit=\"emit('limit', $event)\"\n @navigate=\"emit('navigate', $event)\"/>\n </slot>\n </template>\n\n <FluxTableRow\n v-for=\"(item, index) of limitedItems\"\n :key=\"uniqueKey ? item[uniqueKey] : index\">\n <template v-for=\"(_, name) of slots\">\n <slot\n v-if=\"!IGNORED_SLOTS.includes(name as string)\"\n v-bind=\"{index, item, items: limitedItems, page, perPage, total}\"\n :name=\"name\"/>\n </template>\n </FluxTableRow>\n </FluxTable>\n</template>\n\n<script\n lang=\"ts\"\n setup\n generic=\"T extends Record<string, any>\">\n import type { VNode } from 'vue';\n import { computed } from 'vue';\n import FluxPaginationBar from './FluxPaginationBar.vue';\n import FluxTable from './FluxTable.vue';\n import FluxTableRow from './FluxTableRow.vue';\n\n const IGNORED_SLOTS: string[] = ['filter', 'header', 'footer', 'colgroups', 'pagination'];\n\n const emit = defineEmits<{\n limit: [number];\n navigate: [number];\n }>();\n\n const {\n isBordered = true,\n isHoverable = false,\n isLoading = false,\n isSeparated = true,\n isStriped = false,\n items,\n perPage\n } = defineProps<{\n readonly fillColumns?: number;\n readonly isBordered?: boolean;\n readonly isHoverable?: boolean;\n readonly isLoading?: boolean;\n readonly isSeparated?: boolean;\n readonly isStriped?: boolean;\n readonly items: T[];\n readonly limits: number[];\n readonly page: number;\n readonly perPage: number;\n readonly total: number;\n readonly uniqueKey?: string;\n }>();\n\n const slots = defineSlots<{\n [key: string]: (props: {\n readonly index: number;\n readonly page: number;\n readonly perPage: number;\n readonly item: T;\n readonly items: T[];\n readonly total: number;\n }) => VNode;\n\n filter(props: {\n readonly page: number;\n readonly perPage: number;\n readonly items: T[];\n readonly total: number;\n }): VNode;\n\n footer(props: {\n readonly page: number;\n readonly perPage: number;\n readonly items: T[];\n readonly total: number;\n }): VNode;\n\n header(props: {\n readonly page: number;\n readonly perPage: number;\n readonly items: T[];\n readonly total: number;\n }): VNode;\n\n pagination(props: {\n readonly page: number;\n readonly perPage: number;\n readonly items: T[];\n readonly total: number;\n }): VNode;\n\n colgroups(): VNode;\n }>();\n\n const limitedItems = computed(() => items.slice(0, perPage));\n</script>\n","<template>\n <FluxTable\n :fill-columns=\"fillColumns\"\n :is-bordered=\"isBordered\"\n :is-hoverable=\"isHoverable\"\n :is-loading=\"isLoading\"\n :is-separated=\"isSeparated\"\n :is-striped=\"isStriped\">\n <template\n v-if=\"'colgroups' in slots\"\n #colgroups>\n <slot name=\"colgroups\"/>\n </template>\n\n <template\n v-if=\"'header' in slots\"\n #header>\n <slot\n name=\"filter\"\n v-bind=\"{page, perPage, items: limitedItems, total}\"/>\n\n <FluxTableRow>\n <slot\n name=\"header\"\n v-bind=\"{page, perPage, items: limitedItems, total}\"/>\n </FluxTableRow>\n </template>\n\n <template\n v-if=\"'footer' in slots\"\n #footer>\n <FluxTableRow>\n <slot\n name=\"footer\"\n v-bind=\"{page, perPage, items: limitedItems, total}\"/>\n </FluxTableRow>\n </template>\n\n <template\n v-if=\"total > limits[0]\"\n #pagination>\n <slot\n name=\"pagination\"\n v-bind=\"{page, perPage, items: limitedItems, total}\">\n <FluxPaginationBar\n :limits=\"limits\"\n :page=\"page\"\n :per-page=\"perPage\"\n :total=\"total\"\n @limit=\"emit('limit', $event)\"\n @navigate=\"emit('navigate', $event)\"/>\n </slot>\n </template>\n\n <FluxTableRow\n v-for=\"(item, index) of limitedItems\"\n :key=\"uniqueKey ? item[uniqueKey] : index\">\n <template v-for=\"(_, name) of slots\">\n <slot\n v-if=\"!IGNORED_SLOTS.includes(name as string)\"\n v-bind=\"{index, item, items: limitedItems, page, perPage, total}\"\n :name=\"name\"/>\n </template>\n </FluxTableRow>\n </FluxTable>\n</template>\n\n<script\n lang=\"ts\"\n setup\n generic=\"T extends Record<string, any>\">\n import type { VNode } from 'vue';\n import { computed } from 'vue';\n import FluxPaginationBar from './FluxPaginationBar.vue';\n import FluxTable from './FluxTable.vue';\n import FluxTableRow from './FluxTableRow.vue';\n\n const IGNORED_SLOTS: string[] = ['filter', 'header', 'footer', 'colgroups', 'pagination'];\n\n const emit = defineEmits<{\n limit: [number];\n navigate: [number];\n }>();\n\n const {\n isBordered = true,\n isHoverable = false,\n isLoading = false,\n isSeparated = true,\n isStriped = false,\n items,\n perPage\n } = defineProps<{\n readonly fillColumns?: number;\n readonly isBordered?: boolean;\n readonly isHoverable?: boolean;\n readonly isLoading?: boolean;\n readonly isSeparated?: boolean;\n readonly isStriped?: boolean;\n readonly items: T[];\n readonly limits: number[];\n readonly page: number;\n readonly perPage: number;\n readonly total: number;\n readonly uniqueKey?: string;\n }>();\n\n const slots = defineSlots<{\n [key: string]: (props: {\n readonly index: number;\n readonly page: number;\n readonly perPage: number;\n readonly item: T;\n readonly items: T[];\n readonly total: number;\n }) => VNode;\n\n filter(props: {\n readonly page: number;\n readonly perPage: number;\n readonly items: T[];\n readonly total: number;\n }): VNode;\n\n footer(props: {\n readonly page: number;\n readonly perPage: number;\n readonly items: T[];\n readonly total: number;\n }): VNode;\n\n header(props: {\n readonly page: number;\n readonly perPage: number;\n readonly items: T[];\n readonly total: number;\n }): VNode;\n\n pagination(props: {\n readonly page: number;\n readonly perPage: number;\n readonly items: T[];\n readonly total: number;\n }): VNode;\n\n colgroups(): VNode;\n }>();\n\n const limitedItems = computed(() => items.slice(0, perPage));\n</script>\n","<template>\n <div :class=\"$style.datePicker\">\n <div :class=\"$style.datePickerHeader\">\n <FluxFadeTransition>\n <FluxSecondaryButton\n v-if=\"viewMode === 'date'\"\n :disabled=\"!isWithinBoundary(viewDatePrevious, 'month')\"\n icon-leading=\"angle-left\"\n :aria-label=\"translate('flux.previous')\"\n @click=\"previousMonth\"/>\n </FluxFadeTransition>\n\n <div\n :class=\"$style.datePickerHeaderView\"\n :id=\"id\"\n aria-live=\"polite\"\n role=\"presentation\">\n <button\n :class=\"$style.datePickerHeaderViewButton\"\n type=\"button\"\n @click=\"setView('month')\">\n {{ viewMonth }}\n </button>\n\n <button\n :class=\"$style.datePickerHeaderViewButton\"\n type=\"button\"\n @click=\"setView('year')\">\n {{ viewYear }}\n </button>\n </div>\n\n <FluxFadeTransition>\n <FluxSecondaryButton\n v-if=\"viewMode === 'date'\"\n :disabled=\"!isWithinBoundary(viewDateNext, 'month')\"\n icon-leading=\"angle-right\"\n :aria-label=\"translate('flux.next')\"\n @click=\"nextMonth\"/>\n </FluxFadeTransition>\n </div>\n\n <FluxVerticalWindowTransition :is-back=\"viewMode === 'date'\">\n <div\n v-if=\"viewMode === 'date'\"\n key=\"date\"\n :class=\"$style.datePickerDates\"\n :aria-labelledby=\"id\">\n <FluxWindowTransition :is-back=\"isTransitioningToPast\">\n <div\n :key=\"viewDate.month\"\n :class=\"$style.datePickerDatesGrid\">\n <template\n v-for=\"day of days\"\n :key=\"day\">\n <span :class=\"$style.datePickerDay\">{{ day }}</span>\n </template>\n\n <template v-for=\"date of dates\">\n <button\n :class=\"clsx(\n $style.datePickerDate,\n isDisabled(date) && $style.isDisabled,\n isWithinRange(date, 'end') && $style.isRangeEnd,\n isWithinRange(date) && $style.isRangeEntry,\n isWithinRange(date, 'start') && $style.isRangeStart,\n isWithinSelection(date, 'end') && $style.isSelectionEnd,\n isWithinSelection(date) && $style.isSelectionEntry,\n isWithinSelection(date, 'start') && $style.isSelectionStart,\n isSelected(date) && $style.isSelected\n )\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"setDate(date)\"\n @mouseover=\"onDateMouseOver(date)\"\n @mouseout=\"onDateMouseOut\">\n {{ date.toLocaleString({day: 'numeric'}) }}\n </button>\n </template>\n </div>\n </FluxWindowTransition>\n </div>\n\n <div\n v-else-if=\"viewMode === 'month'\"\n key=\"month\"\n :class=\"$style.datePickerMonths\">\n <template\n v-for=\"month of months\"\n :key=\"month.label\">\n <FluxSecondaryButton\n :disabled=\"!isWithinBoundary(month.date, 'month')\"\n :label=\"month.label\"\n tabindex=\"-1\"\n @click=\"setViewMonth(month.date)\"/>\n </template>\n </div>\n\n <div\n v-else-if=\"viewMode === 'year'\"\n key=\"year\"\n :class=\"$style.datePickerYears\">\n <FluxSecondaryButton\n icon-leading=\"angle-left\"\n tabindex=\"-1\"\n @click=\"previousYears\"/>\n\n <template\n v-for=\"year of years\"\n :key=\"year\">\n <FluxSecondaryButton\n :label=\"year.toString()\"\n tabindex=\"-1\"\n @click=\"setViewYear(year)\"/>\n </template>\n\n <FluxSecondaryButton\n icon-leading=\"angle-right\"\n tabindex=\"-1\"\n @click=\"nextYears\"/>\n </div>\n </FluxVerticalWindowTransition>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useCalendar, useCalendarMonthSwitcher, useCalendarYearSwitcher } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { DateTime } from 'luxon';\n import { computed, ref, unref, useId, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxFadeTransition, FluxVerticalWindowTransition, FluxWindowTransition } from '$flux/transition';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/DatePicker.module.scss';\n\n const modelValue = defineModel<DateTime | DateTime[] | null>({\n required: true\n });\n\n const {\n max,\n min,\n rangeMode\n } = defineProps<{\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly rangeMode?: 'range' | 'week' | 'month';\n }>();\n\n const id = useId();\n const translate = useTranslate();\n\n const {\n isTransitioningToPast,\n viewDate,\n viewDateNext,\n viewDatePrevious,\n viewMonth,\n viewYear,\n dates,\n days,\n setViewDate,\n nextMonth,\n previousMonth\n } = useCalendar(getInitialDate());\n\n const {\n months\n } = useCalendarMonthSwitcher(viewDate, 'short');\n\n const {\n years,\n next: nextYears,\n previous: previousYears\n } = useCalendarYearSwitcher(viewDate);\n\n const selection = ref<[DateTime | null, DateTime | null]>([null, null]);\n const viewMode = ref<'date' | 'month' | 'year'>('date');\n\n const maxDate = computed(() => (max ?? DateTime.now().endOf('year').plus({year: 100})).startOf('day'));\n const minDate = computed(() => (min ?? DateTime.now().startOf('year').minus({year: 100})).startOf('day'));\n const normalizedSelection = computed(() => {\n const [start, end] = unref(selection);\n\n if (!start || !end) {\n return [start, end];\n }\n\n if (start > end) {\n return [end, start];\n } else {\n return [start, end];\n }\n });\n\n watch(modelValue, () => {\n setViewDate(getInitialDate());\n });\n\n function getInitialDate(): DateTime {\n const value = unref(modelValue);\n let date: DateTime;\n\n if (!value) {\n date = DateTime.now();\n } else if (Array.isArray(value)) {\n date = value[1];\n } else {\n date = value as DateTime;\n }\n\n return date.startOf('day');\n }\n\n function isDisabled(date: DateTime): boolean {\n if (unref(viewDate).month !== date.month) {\n return true;\n }\n\n return !isWithinBoundary(date);\n }\n\n function isSelected(date: DateTime): boolean {\n if (rangeMode) {\n return false;\n }\n\n const value = unref(modelValue) as (DateTime | DateTime[]);\n\n if (!value || Array.isArray(value)) {\n return false;\n }\n\n return value.hasSame(date, 'day');\n }\n\n function isWithinBoundary(date: DateTime, unit?: 'month'): boolean {\n if (unit === 'month') {\n return unref(maxDate).endOf('month') >= date && unref(minDate).startOf('month') <= date;\n }\n\n return unref(maxDate) >= date && unref(minDate) <= date;\n }\n\n function isWithinRange(date: DateTime, edge?: 'start' | 'end'): boolean {\n if (!rangeMode) {\n return false;\n }\n\n const value = unref(modelValue);\n\n if (!value || !Array.isArray(value)) {\n return false;\n }\n\n if (edge) {\n const index = edge === 'start' ? 0 : 1;\n\n return value[index].hasSame(date, 'day');\n }\n\n return date >= value[0].startOf('day') && date <= value[1].startOf('day');\n }\n\n function isWithinSelection(date: DateTime, edge?: 'start' | 'end'): boolean {\n const [selectionStart, selectionEnd] = unref(normalizedSelection);\n\n if (!selectionStart || !selectionEnd) {\n return false;\n }\n\n if (edge) {\n return (edge === 'start' ? selectionStart : selectionEnd)?.hasSame(date, 'day');\n }\n\n return date >= selectionStart && date <= selectionEnd;\n }\n\n function setDate(date: DateTime): void {\n switch (rangeMode) {\n case 'range':\n const [start] = unref(selection);\n\n if (!start) {\n selection.value = [date, date];\n } else {\n if (date >= start) {\n modelValue.value = [start, date];\n } else {\n modelValue.value = [date, start];\n }\n\n selection.value = [null, null];\n }\n break;\n\n case 'month':\n modelValue.value = [date.startOf('month'), date.endOf('month')];\n break;\n\n case 'week':\n modelValue.value = [date.startOf('week'), date.endOf('week')];\n break;\n\n default:\n modelValue.value = date;\n break;\n }\n }\n\n function setView(view: 'date' | 'month' | 'year'): void {\n viewMode.value = unref(viewMode) === view ? 'date' : view;\n }\n\n function setViewMonth(month: DateTime): void {\n setView('date');\n setViewDate(month);\n }\n\n function setViewYear(year: number): void {\n setView('date');\n setViewDate(unref(viewDate).set({year}));\n }\n\n function onDateMouseOver(date: DateTime): void {\n if (!rangeMode) {\n return;\n }\n\n switch (rangeMode) {\n case 'range':\n selection.value = [selection.value[0], date];\n break;\n\n case 'month':\n selection.value = [date.startOf('month'), date.endOf('month')];\n break;\n\n case 'week':\n selection.value = [date.startOf('week'), date.endOf('week')];\n break;\n }\n }\n\n function onDateMouseOut(): void {\n if (!rangeMode || rangeMode === 'range') {\n return;\n }\n\n selection.value = [null, null];\n }\n</script>\n","<template>\n <div :class=\"$style.datePicker\">\n <div :class=\"$style.datePickerHeader\">\n <FluxFadeTransition>\n <FluxSecondaryButton\n v-if=\"viewMode === 'date'\"\n :disabled=\"!isWithinBoundary(viewDatePrevious, 'month')\"\n icon-leading=\"angle-left\"\n :aria-label=\"translate('flux.previous')\"\n @click=\"previousMonth\"/>\n </FluxFadeTransition>\n\n <div\n :class=\"$style.datePickerHeaderView\"\n :id=\"id\"\n aria-live=\"polite\"\n role=\"presentation\">\n <button\n :class=\"$style.datePickerHeaderViewButton\"\n type=\"button\"\n @click=\"setView('month')\">\n {{ viewMonth }}\n </button>\n\n <button\n :class=\"$style.datePickerHeaderViewButton\"\n type=\"button\"\n @click=\"setView('year')\">\n {{ viewYear }}\n </button>\n </div>\n\n <FluxFadeTransition>\n <FluxSecondaryButton\n v-if=\"viewMode === 'date'\"\n :disabled=\"!isWithinBoundary(viewDateNext, 'month')\"\n icon-leading=\"angle-right\"\n :aria-label=\"translate('flux.next')\"\n @click=\"nextMonth\"/>\n </FluxFadeTransition>\n </div>\n\n <FluxVerticalWindowTransition :is-back=\"viewMode === 'date'\">\n <div\n v-if=\"viewMode === 'date'\"\n key=\"date\"\n :class=\"$style.datePickerDates\"\n :aria-labelledby=\"id\">\n <FluxWindowTransition :is-back=\"isTransitioningToPast\">\n <div\n :key=\"viewDate.month\"\n :class=\"$style.datePickerDatesGrid\">\n <template\n v-for=\"day of days\"\n :key=\"day\">\n <span :class=\"$style.datePickerDay\">{{ day }}</span>\n </template>\n\n <template v-for=\"date of dates\">\n <button\n :class=\"clsx(\n $style.datePickerDate,\n isDisabled(date) && $style.isDisabled,\n isWithinRange(date, 'end') && $style.isRangeEnd,\n isWithinRange(date) && $style.isRangeEntry,\n isWithinRange(date, 'start') && $style.isRangeStart,\n isWithinSelection(date, 'end') && $style.isSelectionEnd,\n isWithinSelection(date) && $style.isSelectionEntry,\n isWithinSelection(date, 'start') && $style.isSelectionStart,\n isSelected(date) && $style.isSelected\n )\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"setDate(date)\"\n @mouseover=\"onDateMouseOver(date)\"\n @mouseout=\"onDateMouseOut\">\n {{ date.toLocaleString({day: 'numeric'}) }}\n </button>\n </template>\n </div>\n </FluxWindowTransition>\n </div>\n\n <div\n v-else-if=\"viewMode === 'month'\"\n key=\"month\"\n :class=\"$style.datePickerMonths\">\n <template\n v-for=\"month of months\"\n :key=\"month.label\">\n <FluxSecondaryButton\n :disabled=\"!isWithinBoundary(month.date, 'month')\"\n :label=\"month.label\"\n tabindex=\"-1\"\n @click=\"setViewMonth(month.date)\"/>\n </template>\n </div>\n\n <div\n v-else-if=\"viewMode === 'year'\"\n key=\"year\"\n :class=\"$style.datePickerYears\">\n <FluxSecondaryButton\n icon-leading=\"angle-left\"\n tabindex=\"-1\"\n @click=\"previousYears\"/>\n\n <template\n v-for=\"year of years\"\n :key=\"year\">\n <FluxSecondaryButton\n :label=\"year.toString()\"\n tabindex=\"-1\"\n @click=\"setViewYear(year)\"/>\n </template>\n\n <FluxSecondaryButton\n icon-leading=\"angle-right\"\n tabindex=\"-1\"\n @click=\"nextYears\"/>\n </div>\n </FluxVerticalWindowTransition>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useCalendar, useCalendarMonthSwitcher, useCalendarYearSwitcher } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { DateTime } from 'luxon';\n import { computed, ref, unref, useId, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxFadeTransition, FluxVerticalWindowTransition, FluxWindowTransition } from '$flux/transition';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/DatePicker.module.scss';\n\n const modelValue = defineModel<DateTime | DateTime[] | null>({\n required: true\n });\n\n const {\n max,\n min,\n rangeMode\n } = defineProps<{\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly rangeMode?: 'range' | 'week' | 'month';\n }>();\n\n const id = useId();\n const translate = useTranslate();\n\n const {\n isTransitioningToPast,\n viewDate,\n viewDateNext,\n viewDatePrevious,\n viewMonth,\n viewYear,\n dates,\n days,\n setViewDate,\n nextMonth,\n previousMonth\n } = useCalendar(getInitialDate());\n\n const {\n months\n } = useCalendarMonthSwitcher(viewDate, 'short');\n\n const {\n years,\n next: nextYears,\n previous: previousYears\n } = useCalendarYearSwitcher(viewDate);\n\n const selection = ref<[DateTime | null, DateTime | null]>([null, null]);\n const viewMode = ref<'date' | 'month' | 'year'>('date');\n\n const maxDate = computed(() => (max ?? DateTime.now().endOf('year').plus({year: 100})).startOf('day'));\n const minDate = computed(() => (min ?? DateTime.now().startOf('year').minus({year: 100})).startOf('day'));\n const normalizedSelection = computed(() => {\n const [start, end] = unref(selection);\n\n if (!start || !end) {\n return [start, end];\n }\n\n if (start > end) {\n return [end, start];\n } else {\n return [start, end];\n }\n });\n\n watch(modelValue, () => {\n setViewDate(getInitialDate());\n });\n\n function getInitialDate(): DateTime {\n const value = unref(modelValue);\n let date: DateTime;\n\n if (!value) {\n date = DateTime.now();\n } else if (Array.isArray(value)) {\n date = value[1];\n } else {\n date = value as DateTime;\n }\n\n return date.startOf('day');\n }\n\n function isDisabled(date: DateTime): boolean {\n if (unref(viewDate).month !== date.month) {\n return true;\n }\n\n return !isWithinBoundary(date);\n }\n\n function isSelected(date: DateTime): boolean {\n if (rangeMode) {\n return false;\n }\n\n const value = unref(modelValue) as (DateTime | DateTime[]);\n\n if (!value || Array.isArray(value)) {\n return false;\n }\n\n return value.hasSame(date, 'day');\n }\n\n function isWithinBoundary(date: DateTime, unit?: 'month'): boolean {\n if (unit === 'month') {\n return unref(maxDate).endOf('month') >= date && unref(minDate).startOf('month') <= date;\n }\n\n return unref(maxDate) >= date && unref(minDate) <= date;\n }\n\n function isWithinRange(date: DateTime, edge?: 'start' | 'end'): boolean {\n if (!rangeMode) {\n return false;\n }\n\n const value = unref(modelValue);\n\n if (!value || !Array.isArray(value)) {\n return false;\n }\n\n if (edge) {\n const index = edge === 'start' ? 0 : 1;\n\n return value[index].hasSame(date, 'day');\n }\n\n return date >= value[0].startOf('day') && date <= value[1].startOf('day');\n }\n\n function isWithinSelection(date: DateTime, edge?: 'start' | 'end'): boolean {\n const [selectionStart, selectionEnd] = unref(normalizedSelection);\n\n if (!selectionStart || !selectionEnd) {\n return false;\n }\n\n if (edge) {\n return (edge === 'start' ? selectionStart : selectionEnd)?.hasSame(date, 'day');\n }\n\n return date >= selectionStart && date <= selectionEnd;\n }\n\n function setDate(date: DateTime): void {\n switch (rangeMode) {\n case 'range':\n const [start] = unref(selection);\n\n if (!start) {\n selection.value = [date, date];\n } else {\n if (date >= start) {\n modelValue.value = [start, date];\n } else {\n modelValue.value = [date, start];\n }\n\n selection.value = [null, null];\n }\n break;\n\n case 'month':\n modelValue.value = [date.startOf('month'), date.endOf('month')];\n break;\n\n case 'week':\n modelValue.value = [date.startOf('week'), date.endOf('week')];\n break;\n\n default:\n modelValue.value = date;\n break;\n }\n }\n\n function setView(view: 'date' | 'month' | 'year'): void {\n viewMode.value = unref(viewMode) === view ? 'date' : view;\n }\n\n function setViewMonth(month: DateTime): void {\n setView('date');\n setViewDate(month);\n }\n\n function setViewYear(year: number): void {\n setView('date');\n setViewDate(unref(viewDate).set({year}));\n }\n\n function onDateMouseOver(date: DateTime): void {\n if (!rangeMode) {\n return;\n }\n\n switch (rangeMode) {\n case 'range':\n selection.value = [selection.value[0], date];\n break;\n\n case 'month':\n selection.value = [date.startOf('month'), date.endOf('month')];\n break;\n\n case 'week':\n selection.value = [date.startOf('week'), date.endOf('week')];\n break;\n }\n }\n\n function onDateMouseOut(): void {\n if (!rangeMode || rangeMode === 'range') {\n return;\n }\n\n selection.value = [null, null];\n }\n</script>\n","<template>\n <slot/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { provide, toRef } from 'vue';\n import { FluxDisabledInjectionKey } from '$flux/data';\n\n defineOptions({\n inheritAttrs: false\n });\n\n const {\n disabled = true\n } = defineProps<{\n readonly disabled?: boolean;\n }>();\n\n provide(FluxDisabledInjectionKey, toRef(() => disabled));\n</script>\n","<template>\n <slot/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { provide, toRef } from 'vue';\n import { FluxDisabledInjectionKey } from '$flux/data';\n\n defineOptions({\n inheritAttrs: false\n });\n\n const {\n disabled = true\n } = defineProps<{\n readonly disabled?: boolean;\n }>();\n\n provide(FluxDisabledInjectionKey, toRef(() => disabled));\n</script>\n","<template>\n <div\n :class=\"clsx(\n contentPlacement === 'start' && $style.dividerContentStart,\n contentPlacement === 'center' && $style.dividerContentCenter,\n contentPlacement === 'end' && $style.dividerContentEnd\n )\"\n role=\"separator\"\n :aria-orientation=\"direction\">\n <div\n v-if=\"slots.default\"\n :class=\"$style.dividerContent\">\n <slot/>\n </div>\n\n <hr\n v-else\n :class=\"$style.dividerLine\">\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxDirection } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import $style from '$flux/css/component/Divider.module.scss';\n\n const {\n contentPlacement = 'center',\n direction = 'horizontal'\n } = defineProps<{\n readonly contentPlacement?: 'start' | 'center' | 'end';\n readonly direction?: FluxDirection;\n }>();\n\n const slots = defineSlots<{\n default?(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"clsx(\n contentPlacement === 'start' && $style.dividerContentStart,\n contentPlacement === 'center' && $style.dividerContentCenter,\n contentPlacement === 'end' && $style.dividerContentEnd\n )\"\n role=\"separator\"\n :aria-orientation=\"direction\">\n <div\n v-if=\"slots.default\"\n :class=\"$style.dividerContent\">\n <slot/>\n </div>\n\n <hr\n v-else\n :class=\"$style.dividerLine\">\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxDirection } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import $style from '$flux/css/component/Divider.module.scss';\n\n const {\n contentPlacement = 'center',\n direction = 'horizontal'\n } = defineProps<{\n readonly contentPlacement?: 'start' | 'center' | 'end';\n readonly direction?: FluxDirection;\n }>();\n\n const slots = defineSlots<{\n default?(): VNode[];\n }>();\n</script>\n","<template>\n <svg\n ref=\"svg\"\n :class=\"$style.dotPattern\">\n <defs>\n <pattern\n :id=\"id\"\n :width=\"width\"\n :height=\"height\"\n patternContentUnits=\"userSpaceOnUse\"\n patternUnits=\"userSpaceOnUse\"\n :x=\"-1\"\n :y=\"-1\">\n <circle\n :r=\"cr\"\n :cx=\"width / 2 - cx\"\n :cy=\"height / 2 - cy\"/>\n </pattern>\n </defs>\n\n <rect\n width=\"100%\"\n height=\"100%\"\n stroke-width=\"0\"\n :fill=\"`url(#${id})`\"/>\n </svg>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { ref, useId, useTemplateRef, watch } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n const {\n width = 16,\n height = 16,\n cr = 1,\n cx = 1,\n cy = 1\n } = defineProps<{\n readonly width?: number;\n readonly height?: number;\n readonly cr?: number;\n readonly cx?: number;\n readonly cy?: number;\n }>();\n\n const svgRef = useTemplateRef<HTMLElement>('svg');\n const id = useId();\n\n const svgWidth = ref(0);\n const svgHeight = ref(0);\n\n watch(svgRef, (svg, _, onCleanup) => {\n if (!svg) {\n return;\n }\n\n const onResize = () => {\n svgWidth.value = svg.clientWidth;\n svgHeight.value = svg.clientHeight;\n };\n\n window.addEventListener('resize', onResize, {passive: true});\n onResize();\n\n onCleanup(() => {\n window.removeEventListener('resize', onResize);\n });\n }, {immediate: true});\n</script>\n","<template>\n <svg\n ref=\"svg\"\n :class=\"$style.dotPattern\">\n <defs>\n <pattern\n :id=\"id\"\n :width=\"width\"\n :height=\"height\"\n patternContentUnits=\"userSpaceOnUse\"\n patternUnits=\"userSpaceOnUse\"\n :x=\"-1\"\n :y=\"-1\">\n <circle\n :r=\"cr\"\n :cx=\"width / 2 - cx\"\n :cy=\"height / 2 - cy\"/>\n </pattern>\n </defs>\n\n <rect\n width=\"100%\"\n height=\"100%\"\n stroke-width=\"0\"\n :fill=\"`url(#${id})`\"/>\n </svg>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { ref, useId, useTemplateRef, watch } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n const {\n width = 16,\n height = 16,\n cr = 1,\n cx = 1,\n cy = 1\n } = defineProps<{\n readonly width?: number;\n readonly height?: number;\n readonly cr?: number;\n readonly cx?: number;\n readonly cy?: number;\n }>();\n\n const svgRef = useTemplateRef<HTMLElement>('svg');\n const id = useId();\n\n const svgWidth = ref(0);\n const svgHeight = ref(0);\n\n watch(svgRef, (svg, _, onCleanup) => {\n if (!svg) {\n return;\n }\n\n const onResize = () => {\n svgWidth.value = svg.clientWidth;\n svgHeight.value = svg.clientHeight;\n };\n\n window.addEventListener('resize', onResize, {passive: true});\n onResize();\n\n onCleanup(() => {\n window.removeEventListener('resize', onResize);\n });\n }, {immediate: true});\n</script>\n",".dropZone {\n --dz-fill: transparent;\n --dz-stroke: transparent;\n --dz-inset: -1px;\n --dz-radius: var(--radius);\n --dz-height: calc(100% + 2px);\n --dz-width: calc(100% + 2px);\n\n &:has(.dropZoneContent > .avatar) {\n --dz-inset: -3px;\n --dz-radius: 999px;\n --dz-height: calc(100% + 6px);\n --dz-width: calc(100% + 6px);\n }\n\n &:has(.dropZoneContent > .placeholder) {\n --dz-fill: var(--gray-50);\n --dz-stroke: var(--gray-200);\n }\n}\n\n.dropZone {\n position: relative;\n display: grid;\n align-items: center;\n gap: 15px 30px;\n grid-template-columns: 1fr;\n\n &:has(> .dropZoneActions) {\n grid-template-columns: auto 1fr;\n }\n}\n\n.dropZoneActions {\n display: flex;\n flex-flow: column;\n gap: 15px;\n}\n\n.dropZoneBorder {\n position: absolute;\n inset: var(--dz-inset);\n height: var(--dz-height);\n width: var(--dz-width);\n max-width: unset;\n overflow: visible;\n pointer-events: none;\n\n :global(rect) {\n fill: var(--dz-fill);\n rx: var(--dz-radius);\n stroke: var(--dz-stroke);\n stroke-dasharray: 6px 6px;\n stroke-width: 2px;\n transition: 270ms var(--swift-out);\n transition-property: fill, stroke;\n }\n}\n\n.dropZoneContent {\n position: relative;\n\n > :local(.avatar) {\n display: block;\n }\n\n > :local(.placeholder) {\n background: transparent;\n border: 0;\n }\n}\n\n.isDragging .dropZoneContent {\n --dz-stroke: var(--primary-600);\n}\n\n.isDraggingOver .dropZoneContent {\n &:has(.placeholder) {\n --dz-fill: var(--primary-100);\n }\n\n .dropZoneBorder rect {\n animation: dropZoneBorderAnimation 480ms linear infinite both;\n }\n}\n\n.dropZoneLoader {\n position: absolute;\n display: flex;\n inset: var(--dz-inset);\n align-items: center;\n justify-content: center;\n background: rgb(from var(--gray-50) r g b / .84);\n backdrop-filter: blur(3px) saturate(180%);\n border-radius: var(--dz-radius);\n z-index: 100;\n}\n\n@keyframes dropZoneBorderAnimation {\n to {\n stroke-dashoffset: -12px;\n }\n}\n","<template>\n <div\n :class=\"[\n $style.dropZone,\n isDragging && $style.isDragging,\n isDraggingOver && $style.isDraggingOver\n ]\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-label=\"ariaLabel ?? translate('flux.dropFilesOrClick')\"\n :tabindex=\"disabled ? -1 : 0\"\n @keydown.self=\"onKeyDown\">\n <div\n :class=\"$style.dropZoneContent\"\n @dragleave.capture=\"onDragLeave\"\n @dragover.capture=\"onDragEnter\"\n @drop=\"onDrop\">\n <svg\n ref=\"content\"\n :class=\"$style.dropZoneBorder\"\n role=\"presentation\">\n <rect\n height=\"100%\"\n width=\"100%\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n :pathLength=\"pathLength\"/>\n </svg>\n\n <slot v-bind=\"{isDragging, isDraggingOver, showPicker}\"/>\n\n <FluxFadeTransition>\n <div\n v-if=\"isLoading\"\n :class=\"$style.dropZoneLoader\">\n <FluxSpinner/>\n </div>\n </FluxFadeTransition>\n </div>\n\n <div\n v-if=\"slots.actions\"\n :class=\"$style.dropZoneActions\">\n <slot\n name=\"actions\"\n v-bind=\"{isDragging, isDraggingOver, showPicker}\"/>\n </div>\n\n <slot\n name=\"extra\"\n v-bind=\"{isDragging, isDraggingOver, showPicker}\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { roundStep } from '@basmilius/utils';\n import { onMounted, onUnmounted, ref, toRef, unref, useTemplateRef, type VNode, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/DropZone.module.scss';\n\n const emit = defineEmits<{\n select: [File];\n selectMultiple: [FileList];\n }>();\n\n const {\n accept,\n ariaLabel,\n disabled: componentDisabled,\n isMultiple\n } = defineProps<{\n readonly accept?: string;\n readonly ariaLabel?: string;\n readonly disabled?: boolean;\n readonly isLoading?: boolean;\n readonly isMultiple?: boolean;\n }>();\n\n const slots = defineSlots<{\n default?(props: {\n readonly isDragging: boolean;\n readonly isDraggingOver: boolean;\n\n showPicker(): void;\n }): VNode[];\n\n actions?(props: {\n readonly isDragging: boolean;\n readonly isDraggingOver: boolean;\n\n showPicker(): void;\n }): VNode[];\n\n extra?(props: {\n readonly isDragging: boolean;\n readonly isDraggingOver: boolean;\n\n showPicker(): void;\n }): VNode[];\n }>();\n\n const contentRef = useTemplateRef('content');\n const disabled = useDisabled(toRef(() => componentDisabled));\n const translate = useTranslate();\n\n const isDragging = ref(false);\n const isDraggingOver = ref(false);\n const pathLength = ref(0);\n\n onMounted(() => {\n window.addEventListener('dragleave', onWindowDragEnd, {capture: true});\n window.addEventListener('dragover', onWindowDragStart, {capture: true});\n window.addEventListener('drop', onWindowDrop, {capture: true});\n });\n\n onUnmounted(() => {\n window.removeEventListener('dragleave', onWindowDragEnd, {capture: true});\n window.removeEventListener('dragover', onWindowDragStart, {capture: true});\n window.removeEventListener('drop', onWindowDrop, {capture: true});\n });\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (evt.key === 'Enter' || evt.key === ' ') {\n showPicker();\n evt.preventDefault();\n }\n }\n\n function onDragEnter(evt: DragEvent): void {\n isDraggingOver.value = true;\n evt.preventDefault();\n }\n\n function onDragLeave(): void {\n isDraggingOver.value = false;\n }\n\n function onDrop(evt: DragEvent): void {\n isDragging.value = false;\n isDraggingOver.value = false;\n\n if (!evt.dataTransfer) {\n return;\n }\n\n const files = evt.dataTransfer.files;\n\n if (files.length === 0) {\n return;\n }\n\n if (isMultiple) {\n emit('selectMultiple', files);\n } else {\n emit('select', files[0]);\n }\n\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n function onWindowDragEnd(): void {\n isDragging.value = false;\n }\n\n function onWindowDragStart(): void {\n isDragging.value = true;\n }\n\n function onWindowDrop(): void {\n isDragging.value = false;\n isDraggingOver.value = false;\n }\n\n function onFileSelected(evt: Event): void {\n const files = (evt.target as HTMLInputElement).files;\n\n if (!files || files.length === 0) {\n return;\n }\n\n if (isMultiple) {\n emit('selectMultiple', files);\n } else {\n emit('select', files[0]);\n }\n }\n\n function showPicker(): void {\n if (unref(disabled)) {\n return;\n }\n\n let input: HTMLInputElement | undefined = document.createElement('input');\n input.accept = accept ?? '*';\n input.multiple = isMultiple ?? false;\n input.type = 'file';\n\n input.addEventListener('change', onFileSelected, {once: true});\n input.showPicker();\n }\n\n watch(contentRef, content => {\n if (!content) {\n return;\n }\n\n const {width, height} = content.getBoundingClientRect();\n pathLength.value = roundStep(width * 2 + height * 2, 6);\n }, {immediate: true});\n</script>\n\n","<template>\n <div\n :class=\"[\n $style.dropZone,\n isDragging && $style.isDragging,\n isDraggingOver && $style.isDraggingOver\n ]\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-label=\"ariaLabel ?? translate('flux.dropFilesOrClick')\"\n :tabindex=\"disabled ? -1 : 0\"\n @keydown.self=\"onKeyDown\">\n <div\n :class=\"$style.dropZoneContent\"\n @dragleave.capture=\"onDragLeave\"\n @dragover.capture=\"onDragEnter\"\n @drop=\"onDrop\">\n <svg\n ref=\"content\"\n :class=\"$style.dropZoneBorder\"\n role=\"presentation\">\n <rect\n height=\"100%\"\n width=\"100%\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n :pathLength=\"pathLength\"/>\n </svg>\n\n <slot v-bind=\"{isDragging, isDraggingOver, showPicker}\"/>\n\n <FluxFadeTransition>\n <div\n v-if=\"isLoading\"\n :class=\"$style.dropZoneLoader\">\n <FluxSpinner/>\n </div>\n </FluxFadeTransition>\n </div>\n\n <div\n v-if=\"slots.actions\"\n :class=\"$style.dropZoneActions\">\n <slot\n name=\"actions\"\n v-bind=\"{isDragging, isDraggingOver, showPicker}\"/>\n </div>\n\n <slot\n name=\"extra\"\n v-bind=\"{isDragging, isDraggingOver, showPicker}\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { roundStep } from '@basmilius/utils';\n import { onMounted, onUnmounted, ref, toRef, unref, useTemplateRef, type VNode, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/DropZone.module.scss';\n\n const emit = defineEmits<{\n select: [File];\n selectMultiple: [FileList];\n }>();\n\n const {\n accept,\n ariaLabel,\n disabled: componentDisabled,\n isMultiple\n } = defineProps<{\n readonly accept?: string;\n readonly ariaLabel?: string;\n readonly disabled?: boolean;\n readonly isLoading?: boolean;\n readonly isMultiple?: boolean;\n }>();\n\n const slots = defineSlots<{\n default?(props: {\n readonly isDragging: boolean;\n readonly isDraggingOver: boolean;\n\n showPicker(): void;\n }): VNode[];\n\n actions?(props: {\n readonly isDragging: boolean;\n readonly isDraggingOver: boolean;\n\n showPicker(): void;\n }): VNode[];\n\n extra?(props: {\n readonly isDragging: boolean;\n readonly isDraggingOver: boolean;\n\n showPicker(): void;\n }): VNode[];\n }>();\n\n const contentRef = useTemplateRef('content');\n const disabled = useDisabled(toRef(() => componentDisabled));\n const translate = useTranslate();\n\n const isDragging = ref(false);\n const isDraggingOver = ref(false);\n const pathLength = ref(0);\n\n onMounted(() => {\n window.addEventListener('dragleave', onWindowDragEnd, {capture: true});\n window.addEventListener('dragover', onWindowDragStart, {capture: true});\n window.addEventListener('drop', onWindowDrop, {capture: true});\n });\n\n onUnmounted(() => {\n window.removeEventListener('dragleave', onWindowDragEnd, {capture: true});\n window.removeEventListener('dragover', onWindowDragStart, {capture: true});\n window.removeEventListener('drop', onWindowDrop, {capture: true});\n });\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (evt.key === 'Enter' || evt.key === ' ') {\n showPicker();\n evt.preventDefault();\n }\n }\n\n function onDragEnter(evt: DragEvent): void {\n isDraggingOver.value = true;\n evt.preventDefault();\n }\n\n function onDragLeave(): void {\n isDraggingOver.value = false;\n }\n\n function onDrop(evt: DragEvent): void {\n isDragging.value = false;\n isDraggingOver.value = false;\n\n if (!evt.dataTransfer) {\n return;\n }\n\n const files = evt.dataTransfer.files;\n\n if (files.length === 0) {\n return;\n }\n\n if (isMultiple) {\n emit('selectMultiple', files);\n } else {\n emit('select', files[0]);\n }\n\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n function onWindowDragEnd(): void {\n isDragging.value = false;\n }\n\n function onWindowDragStart(): void {\n isDragging.value = true;\n }\n\n function onWindowDrop(): void {\n isDragging.value = false;\n isDraggingOver.value = false;\n }\n\n function onFileSelected(evt: Event): void {\n const files = (evt.target as HTMLInputElement).files;\n\n if (!files || files.length === 0) {\n return;\n }\n\n if (isMultiple) {\n emit('selectMultiple', files);\n } else {\n emit('select', files[0]);\n }\n }\n\n function showPicker(): void {\n if (unref(disabled)) {\n return;\n }\n\n let input: HTMLInputElement | undefined = document.createElement('input');\n input.accept = accept ?? '*';\n input.multiple = isMultiple ?? false;\n input.type = 'file';\n\n input.addEventListener('change', onFileSelected, {once: true});\n input.showPicker();\n }\n\n watch(contentRef, content => {\n if (!content) {\n return;\n }\n\n const {width, height} = content.getBoundingClientRect();\n pathLength.value = roundStep(width * 2 + height * 2, 6);\n }, {immediate: true});\n</script>\n\n","<template>\n <VNodeRenderer\n v-if=\"vnode\"\n :vnode=\"vnode\"/>\n</template>\n\n<script\n setup\n lang=\"ts\">\n import type { VNode } from 'vue';\n import { VNodeRenderer } from './primitive';\n\n defineProps<{\n readonly vnode?: VNode;\n }>();\n</script>\n","<template>\n <VNodeRenderer\n v-if=\"vnode\"\n :vnode=\"vnode\"/>\n</template>\n\n<script\n setup\n lang=\"ts\">\n import type { VNode } from 'vue';\n import { VNodeRenderer } from './primitive';\n\n defineProps<{\n readonly vnode?: VNode;\n }>();\n</script>\n","@use '$flux/css/mixin';\n\n.expandable {\n display: flex;\n flex-flow: column;\n}\n\n.expandableOpened {\n composes: expandable;\n}\n\n.expandableHeader {\n display: flex;\n height: 54px;\n padding-left: 18px;\n padding-right: 18px;\n align-items: center;\n gap: 12px;\n background: unset;\n border: 0;\n color: var(--foreground-prominent);\n cursor: pointer;\n text-align: left;\n transition: background var(--transition-default);\n transition-property: background, mixin.focus-ring-transition-properties();\n z-index: 1;\n\n @include mixin.focus-ring();\n\n @include mixin.hover {\n background: var(--surface-hover);\n }\n\n :is(span) {\n flex-grow: 1;\n font-weight: 600;\n }\n\n :local(.icon):last-child {\n color: var(--foreground-secondary);\n }\n}\n\n.expandableBody {\n transition: height 390ms var(--swift-out), translate 300ms var(--swift-out) 120ms, opacity 300ms var(--swift-out) 120ms;\n\n &:global(.v-enter-from),\n &:global(.v-leave-to) {\n opacity: 0;\n translate: 0 -15px;\n }\n\n &:global(.v-enter-to),\n &:global(.v-leave-from) {\n opacity: 1;\n }\n\n &:global(.v-leave-active) {\n transition-delay: 0s;\n }\n\n &:global(.v-enter-active),\n &:global(.v-leave-active) {\n overflow: hidden;\n }\n}\n\n.expandableContent {\n padding: 0 18px 18px;\n}\n\n.basePane > .expandable {\n border-radius: inherit;\n}\n\n.basePane > .expandable .expandableHeader {\n border-radius: inherit;\n}\n\n.basePane > .expandableOpened .expandableHeader {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.expandableGroup {\n display: flex;\n flex-flow: column;\n\n .expandable + .expandable {\n border-top: 1px solid var(--surface-stroke);\n }\n\n &:not(:first-child) {\n border-top: 1px solid var(--surface-stroke);\n }\n\n &:not(:last-child) {\n border-bottom: 1px solid var(--surface-stroke);\n }\n}\n\n.basePane > .expandableGroup:first-child .expandable:first-child .expandableHeader {\n border-top-left-radius: var(--radius);\n border-top-right-radius: var(--radius);\n}\n\n.basePane > .expandableGroup:last-child .expandable:not(.expandableOpened):last-child .expandableHeader {\n border-bottom-left-radius: var(--radius);\n border-bottom-right-radius: var(--radius);\n}\n","<template>\n <div\n :class=\"isOpen ? $style.expandableOpened : $style.expandable\"\n :id=\"headerId\"\n :aria-controls=\"contentId\"\n :aria-expanded=\"isOpen\">\n <slot\n v-bind=\"{label, isOpen, close, open, toggle}\"\n name=\"header\">\n <button\n :class=\"$style.expandableHeader\"\n type=\"button\"\n @click=\"toggle\">\n <FluxFadeTransition>\n <FluxIcon\n v-if=\"icon\"\n :key=\"icon\"\n :name=\"icon\"/>\n </FluxFadeTransition>\n\n <span>{{ label }}</span>\n\n <FluxFadeTransition>\n <FluxIcon\n :key=\"expandIcon\"\n :name=\"expandIcon\"\n :size=\"16\"/>\n </FluxFadeTransition>\n </button>\n </slot>\n\n <FluxAutoHeightTransition>\n <div\n v-if=\"isOpen\"\n :class=\"$style.expandableBody\"\n :id=\"contentId\"\n role=\"region\"\n :aria-labelledby=\"headerId\">\n <slot\n v-bind=\"{label, close}\"\n name=\"body\">\n <div :class=\"$style.expandableContent\">\n <slot v-bind=\"{label, close}\"/>\n </div>\n </slot>\n </div>\n </FluxAutoHeightTransition>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useComponentId } from '@basmilius/common';\n import type { FluxIconName } from '@flux-ui/types';\n import { computed, getCurrentInstance, onBeforeMount, onUnmounted, ref, unref, useId, watch } from 'vue';\n import { useExpandableGroupInjection } from '$flux/composable';\n import { FluxAutoHeightTransition, FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Expandable.module.scss';\n\n const emit = defineEmits<{\n toggle: [boolean];\n }>();\n\n const {\n isOpened\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isOpened?: boolean;\n readonly label?: string;\n }>();\n\n const componentId = useComponentId();\n const contentId = useId();\n const headerId = useId();\n const instance = getCurrentInstance()!;\n const isOpen = ref(false);\n\n const {closeAll, register, unregister} = useExpandableGroupInjection();\n\n const expandIcon = computed<FluxIconName>(() => unref(isOpen) ? 'minus' : 'plus');\n\n onBeforeMount(() => register?.(componentId.value, instance));\n onUnmounted(() => unregister?.(componentId.value));\n\n function close(): void {\n isOpen.value = false;\n emit('toggle', isOpen.value);\n }\n\n function open(): void {\n closeAll?.();\n isOpen.value = true;\n emit('toggle', isOpen.value);\n }\n\n function toggle(): void {\n if (isOpen.value) {\n close();\n } else {\n open();\n }\n }\n\n watch(() => isOpened, () => {\n if (isOpened) {\n open();\n } else {\n close();\n }\n }, {immediate: true});\n\n defineExpose({\n isOpen,\n close,\n open,\n toggle\n });\n</script>\n","<template>\n <div\n :class=\"isOpen ? $style.expandableOpened : $style.expandable\"\n :id=\"headerId\"\n :aria-controls=\"contentId\"\n :aria-expanded=\"isOpen\">\n <slot\n v-bind=\"{label, isOpen, close, open, toggle}\"\n name=\"header\">\n <button\n :class=\"$style.expandableHeader\"\n type=\"button\"\n @click=\"toggle\">\n <FluxFadeTransition>\n <FluxIcon\n v-if=\"icon\"\n :key=\"icon\"\n :name=\"icon\"/>\n </FluxFadeTransition>\n\n <span>{{ label }}</span>\n\n <FluxFadeTransition>\n <FluxIcon\n :key=\"expandIcon\"\n :name=\"expandIcon\"\n :size=\"16\"/>\n </FluxFadeTransition>\n </button>\n </slot>\n\n <FluxAutoHeightTransition>\n <div\n v-if=\"isOpen\"\n :class=\"$style.expandableBody\"\n :id=\"contentId\"\n role=\"region\"\n :aria-labelledby=\"headerId\">\n <slot\n v-bind=\"{label, close}\"\n name=\"body\">\n <div :class=\"$style.expandableContent\">\n <slot v-bind=\"{label, close}\"/>\n </div>\n </slot>\n </div>\n </FluxAutoHeightTransition>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useComponentId } from '@basmilius/common';\n import type { FluxIconName } from '@flux-ui/types';\n import { computed, getCurrentInstance, onBeforeMount, onUnmounted, ref, unref, useId, watch } from 'vue';\n import { useExpandableGroupInjection } from '$flux/composable';\n import { FluxAutoHeightTransition, FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Expandable.module.scss';\n\n const emit = defineEmits<{\n toggle: [boolean];\n }>();\n\n const {\n isOpened\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isOpened?: boolean;\n readonly label?: string;\n }>();\n\n const componentId = useComponentId();\n const contentId = useId();\n const headerId = useId();\n const instance = getCurrentInstance()!;\n const isOpen = ref(false);\n\n const {closeAll, register, unregister} = useExpandableGroupInjection();\n\n const expandIcon = computed<FluxIconName>(() => unref(isOpen) ? 'minus' : 'plus');\n\n onBeforeMount(() => register?.(componentId.value, instance));\n onUnmounted(() => unregister?.(componentId.value));\n\n function close(): void {\n isOpen.value = false;\n emit('toggle', isOpen.value);\n }\n\n function open(): void {\n closeAll?.();\n isOpen.value = true;\n emit('toggle', isOpen.value);\n }\n\n function toggle(): void {\n if (isOpen.value) {\n close();\n } else {\n open();\n }\n }\n\n watch(() => isOpened, () => {\n if (isOpened) {\n open();\n } else {\n close();\n }\n }, {immediate: true});\n\n defineExpose({\n isOpen,\n close,\n open,\n toggle\n });\n</script>\n","<template>\n <div :class=\"$style.expandableGroup\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { getExposedRef } from '@flux-ui/internals';\n import { type ComponentInternalInstance, provide, type VNode } from 'vue';\n import { FluxExpandableGroupInjectionKey } from '$flux/data';\n import $style from '$flux/css/component/Expandable.module.scss';\n\n const {\n isControlled\n } = defineProps<{\n readonly isControlled?: boolean;\n }>();\n\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const expandables: { [key: number]: ComponentInternalInstance; } = {};\n\n function closeAll(): void {\n Object.values(expandables).forEach(expandable => {\n const isOpenRef = getExposedRef<boolean>(expandable, 'isOpen');\n isOpenRef.value = false;\n });\n }\n\n function register(uid: number, expandable: ComponentInternalInstance): void {\n expandables[uid] = expandable;\n\n if (!isControlled && Object.values(expandables).length === 1) {\n const isOpenRef = getExposedRef<boolean>(expandable, 'isOpen');\n isOpenRef.value = true;\n }\n }\n\n function unregister(uid: number): void {\n delete expandables[uid];\n }\n\n provide(FluxExpandableGroupInjectionKey, {\n closeAll,\n register,\n unregister\n });\n</script>\n","<template>\n <div :class=\"$style.expandableGroup\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { getExposedRef } from '@flux-ui/internals';\n import { type ComponentInternalInstance, provide, type VNode } from 'vue';\n import { FluxExpandableGroupInjectionKey } from '$flux/data';\n import $style from '$flux/css/component/Expandable.module.scss';\n\n const {\n isControlled\n } = defineProps<{\n readonly isControlled?: boolean;\n }>();\n\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const expandables: { [key: number]: ComponentInternalInstance; } = {};\n\n function closeAll(): void {\n Object.values(expandables).forEach(expandable => {\n const isOpenRef = getExposedRef<boolean>(expandable, 'isOpen');\n isOpenRef.value = false;\n });\n }\n\n function register(uid: number, expandable: ComponentInternalInstance): void {\n expandables[uid] = expandable;\n\n if (!isControlled && Object.values(expandables).length === 1) {\n const isOpenRef = getExposedRef<boolean>(expandable, 'isOpen');\n isOpenRef.value = true;\n }\n }\n\n function unregister(uid: number): void {\n delete expandables[uid];\n }\n\n provide(FluxExpandableGroupInjectionKey, {\n closeAll,\n register,\n unregister\n });\n</script>\n",".fader {\n position: relative;\n background: black;\n border-radius: inherit;\n contain: paint;\n z-index: 0;\n}\n\n.faderItem {\n position: absolute;\n display: block;\n inset: 0;\n transition: 660ms var(--deceleration-curve);\n\n &.isCurrent {\n }\n\n &:not(.isCurrent) {\n opacity: 0;\n pointer-events: none;\n scale: 1.05;\n transition-delay: 90ms;\n z-index: 1;\n }\n\n :is(img) {\n position: absolute;\n display: block;\n inset: 0;\n height: 100%;\n width: 100%;\n border-radius: 0;\n\n &:not(.focalPointImage) {\n object-fit: cover;\n object-position: center;\n }\n }\n}\n","<template>\n <div\n ref=\"fader\"\n :class=\"$style.fader\">\n <slot v-bind=\"{current, next, previous}\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useInterval } from '@basmilius/common';\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { computed, ref, unref, useTemplateRef, type VNode, watch } from 'vue';\n import $style from '$flux/css/component/Fader.module.scss';\n\n const emit = defineEmits<{\n update: [number];\n }>();\n\n const {\n interval = 9000\n } = defineProps<{\n readonly interval?: number;\n }>();\n\n defineSlots<{\n default(props: {\n next(): void;\n previous(): void;\n\n readonly current: number;\n }): VNode[];\n }>();\n\n const faderRef = useTemplateRef('fader');\n useInterval(interval, () => next());\n\n const current = ref(-1);\n\n const count = computed(() => {\n const fader = unrefTemplateElement(faderRef);\n return fader?.children.length ?? 0;\n });\n\n function next(): void {\n current.value = unref(current) + 1 >= unref(count) ? 0 : unref(current) + 1;\n }\n\n function previous(): void {\n current.value = unref(current) - 1 <= -1 ? unref(count) - 1 : unref(current) - 1;\n }\n\n watch(current, current => {\n const fader = unrefTemplateElement(faderRef);\n\n if (!fader || fader.children.length === 0 || current < 0) {\n return;\n }\n\n Array.from(fader.children).forEach(item => item.classList.remove($style.isCurrent));\n fader.children[current].classList.add($style.isCurrent);\n emit('update', current);\n }, {immediate: true});\n</script>\n","<template>\n <div\n ref=\"fader\"\n :class=\"$style.fader\">\n <slot v-bind=\"{current, next, previous}\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useInterval } from '@basmilius/common';\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { computed, ref, unref, useTemplateRef, type VNode, watch } from 'vue';\n import $style from '$flux/css/component/Fader.module.scss';\n\n const emit = defineEmits<{\n update: [number];\n }>();\n\n const {\n interval = 9000\n } = defineProps<{\n readonly interval?: number;\n }>();\n\n defineSlots<{\n default(props: {\n next(): void;\n previous(): void;\n\n readonly current: number;\n }): VNode[];\n }>();\n\n const faderRef = useTemplateRef('fader');\n useInterval(interval, () => next());\n\n const current = ref(-1);\n\n const count = computed(() => {\n const fader = unrefTemplateElement(faderRef);\n return fader?.children.length ?? 0;\n });\n\n function next(): void {\n current.value = unref(current) + 1 >= unref(count) ? 0 : unref(current) + 1;\n }\n\n function previous(): void {\n current.value = unref(current) - 1 <= -1 ? unref(count) - 1 : unref(current) - 1;\n }\n\n watch(current, current => {\n const fader = unrefTemplateElement(faderRef);\n\n if (!fader || fader.children.length === 0 || current < 0) {\n return;\n }\n\n Array.from(fader.children).forEach(item => item.classList.remove($style.isCurrent));\n fader.children[current].classList.add($style.isCurrent);\n emit('update', current);\n }, {immediate: true});\n</script>\n","<template>\n <div :class=\"$style.faderItem\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Fader.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.faderItem\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Fader.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <slot v-bind=\"{buttons, filters, menuItems}\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree, getComponentName, getComponentProps } from '@flux-ui/internals';\n import type { FluxFilterItem, FluxFilterOptionItem, FluxFilterSpecMap, FluxFilterState } from '@flux-ui/types';\n import { computed, provide, unref, type VNode } from 'vue';\n import { filterParsers, FluxFilterInjectionKey } from '$flux/data';\n import { camelCase } from 'lodash-es';\n\n type FluxFilterType = keyof FluxFilterSpecMap;\n\n function applyParser<K extends FluxFilterType>(type: K, spec: FluxFilterSpecMap[K]): FluxFilterItem {\n const parser = filterParsers[type] as (spec: FluxFilterSpecMap[K]) => FluxFilterItem;\n\n return parser(spec);\n }\n\n const emit = defineEmits<{\n back: [];\n reset: [string]\n }>();\n\n const modelValue = defineModel<FluxFilterState>({\n required: true\n });\n\n defineProps<{\n readonly resettable?: string[];\n }>();\n\n const slots = defineSlots<{\n default(props: {\n readonly buttons: Record<string, FluxFilterItem>;\n readonly filters: Record<string, VNode>;\n readonly menuItems: (FluxFilterItem | VNode)[][];\n }): VNode[];\n\n filters(): VNode[];\n }>();\n\n const buttons = computed(() => {\n const buttons: Record<string, FluxFilterItem> = {};\n const items = unref(flattenedFilters);\n\n for (const item of items) {\n const name = getComponentName(item);\n\n if (!name.startsWith('FluxFilter')) {\n continue;\n }\n\n const type = camelCase(name.substring(10)) as FluxFilterType;\n const props = getComponentProps<FluxFilterSpecMap[FluxFilterType]>(item);\n\n buttons[props.name] = applyParser(type, props);\n }\n\n return buttons;\n });\n\n const flattenedFilters = computed(() => flattenVNodeTree(slots.filters?.() ?? []));\n\n const filters = computed<Record<string, VNode>>(() => {\n const filters: { [key: string]: VNode; } = {};\n const items = unref(flattenedFilters);\n\n for (const item of items) {\n const name = getComponentName(item);\n\n if (!name.startsWith('FluxFilter')) {\n continue;\n }\n\n const props = getComponentProps<{ name: string; }>(item);\n\n if (!props.name) {\n continue;\n }\n\n filters[props.name] = item;\n }\n\n return filters;\n });\n\n const menuItems = computed<(FluxFilterItem | VNode)[][]>(() => {\n const menuItems: (FluxFilterItem | VNode)[][] = [[]];\n const items = unref(flattenedFilters);\n\n for (const item of items) {\n const name = getComponentName(item);\n\n if (name === 'FluxSeparator') {\n menuItems.push([]);\n continue;\n }\n\n if (name.startsWith('FluxFilter')) {\n const type = camelCase(name.substring(10)) as FluxFilterType;\n const props = getComponentProps<FluxFilterSpecMap[FluxFilterType]>(item);\n\n menuItems[menuItems.length - 1].push(applyParser(type, props));\n continue;\n }\n\n menuItems[menuItems.length - 1].push(item);\n }\n\n return menuItems;\n });\n\n function back(): void {\n emit('back');\n }\n\n function reset(name: string): void {\n back();\n emit('reset', name);\n }\n\n function getValue(name: string): FluxFilterOptionItem['value'] | undefined {\n if (!hasValue(name)) {\n return undefined;\n }\n\n return unref(modelValue)[name] as FluxFilterOptionItem['value'];\n }\n\n function hasValue(name: string): boolean {\n return name in unref(modelValue);\n }\n\n function setValue(name: string, value: FluxFilterOptionItem['value']): void {\n modelValue.value[name] = value;\n }\n\n provide(FluxFilterInjectionKey, {\n state: modelValue,\n back,\n reset,\n getValue,\n hasValue,\n setValue\n });\n</script>\n","<template>\n <slot v-bind=\"{buttons, filters, menuItems}\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree, getComponentName, getComponentProps } from '@flux-ui/internals';\n import type { FluxFilterItem, FluxFilterOptionItem, FluxFilterSpecMap, FluxFilterState } from '@flux-ui/types';\n import { computed, provide, unref, type VNode } from 'vue';\n import { filterParsers, FluxFilterInjectionKey } from '$flux/data';\n import { camelCase } from 'lodash-es';\n\n type FluxFilterType = keyof FluxFilterSpecMap;\n\n function applyParser<K extends FluxFilterType>(type: K, spec: FluxFilterSpecMap[K]): FluxFilterItem {\n const parser = filterParsers[type] as (spec: FluxFilterSpecMap[K]) => FluxFilterItem;\n\n return parser(spec);\n }\n\n const emit = defineEmits<{\n back: [];\n reset: [string]\n }>();\n\n const modelValue = defineModel<FluxFilterState>({\n required: true\n });\n\n defineProps<{\n readonly resettable?: string[];\n }>();\n\n const slots = defineSlots<{\n default(props: {\n readonly buttons: Record<string, FluxFilterItem>;\n readonly filters: Record<string, VNode>;\n readonly menuItems: (FluxFilterItem | VNode)[][];\n }): VNode[];\n\n filters(): VNode[];\n }>();\n\n const buttons = computed(() => {\n const buttons: Record<string, FluxFilterItem> = {};\n const items = unref(flattenedFilters);\n\n for (const item of items) {\n const name = getComponentName(item);\n\n if (!name.startsWith('FluxFilter')) {\n continue;\n }\n\n const type = camelCase(name.substring(10)) as FluxFilterType;\n const props = getComponentProps<FluxFilterSpecMap[FluxFilterType]>(item);\n\n buttons[props.name] = applyParser(type, props);\n }\n\n return buttons;\n });\n\n const flattenedFilters = computed(() => flattenVNodeTree(slots.filters?.() ?? []));\n\n const filters = computed<Record<string, VNode>>(() => {\n const filters: { [key: string]: VNode; } = {};\n const items = unref(flattenedFilters);\n\n for (const item of items) {\n const name = getComponentName(item);\n\n if (!name.startsWith('FluxFilter')) {\n continue;\n }\n\n const props = getComponentProps<{ name: string; }>(item);\n\n if (!props.name) {\n continue;\n }\n\n filters[props.name] = item;\n }\n\n return filters;\n });\n\n const menuItems = computed<(FluxFilterItem | VNode)[][]>(() => {\n const menuItems: (FluxFilterItem | VNode)[][] = [[]];\n const items = unref(flattenedFilters);\n\n for (const item of items) {\n const name = getComponentName(item);\n\n if (name === 'FluxSeparator') {\n menuItems.push([]);\n continue;\n }\n\n if (name.startsWith('FluxFilter')) {\n const type = camelCase(name.substring(10)) as FluxFilterType;\n const props = getComponentProps<FluxFilterSpecMap[FluxFilterType]>(item);\n\n menuItems[menuItems.length - 1].push(applyParser(type, props));\n continue;\n }\n\n menuItems[menuItems.length - 1].push(item);\n }\n\n return menuItems;\n });\n\n function back(): void {\n emit('back');\n }\n\n function reset(name: string): void {\n back();\n emit('reset', name);\n }\n\n function getValue(name: string): FluxFilterOptionItem['value'] | undefined {\n if (!hasValue(name)) {\n return undefined;\n }\n\n return unref(modelValue)[name] as FluxFilterOptionItem['value'];\n }\n\n function hasValue(name: string): boolean {\n return name in unref(modelValue);\n }\n\n function setValue(name: string, value: FluxFilterOptionItem['value']): void {\n modelValue.value[name] = value;\n }\n\n provide(FluxFilterInjectionKey, {\n state: modelValue,\n back,\n reset,\n getValue,\n hasValue,\n setValue\n });\n</script>\n","<template>\n <FluxWindowTransition :is-back=\"isBack\">\n <template v-for=\"(_, slot) of slots\">\n <slot\n v-if=\"slot === view\"\n v-bind=\"{back, navigate}\"\n :name=\"slot\"/>\n </template>\n </FluxWindowTransition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { ref, type VNode } from 'vue';\n import { FluxWindowTransition } from '$flux/transition';\n\n const slots = defineSlots<{\n default(props: {\n back(to?: string): void;\n navigate(to: string): void;\n }): VNode[];\n\n [key: string]: (props: {\n back(to?: string): void;\n navigate(to: string): void;\n }) => any;\n }>();\n\n const isBack = ref(false);\n const view = ref<string>('default');\n\n function back(to: string = 'default'): void {\n isBack.value = true;\n view.value = to;\n }\n\n function navigate(to: string): void {\n isBack.value = false;\n view.value = to;\n }\n\n defineExpose({\n back,\n navigate\n });\n</script>\n","<template>\n <FluxWindowTransition :is-back=\"isBack\">\n <template v-for=\"(_, slot) of slots\">\n <slot\n v-if=\"slot === view\"\n v-bind=\"{back, navigate}\"\n :name=\"slot\"/>\n </template>\n </FluxWindowTransition>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { ref, type VNode } from 'vue';\n import { FluxWindowTransition } from '$flux/transition';\n\n const slots = defineSlots<{\n default(props: {\n back(to?: string): void;\n navigate(to: string): void;\n }): VNode[];\n\n [key: string]: (props: {\n back(to?: string): void;\n navigate(to: string): void;\n }) => any;\n }>();\n\n const isBack = ref(false);\n const view = ref<string>('default');\n\n function back(to: string = 'default'): void {\n isBack.value = true;\n view.value = to;\n }\n\n function navigate(to: string): void {\n isBack.value = false;\n view.value = to;\n }\n\n defineExpose({\n back,\n navigate\n });\n</script>\n","<template>\n <div\n v-height-transition\n :class=\"$style.filter\">\n <FluxWindow ref=\"window\">\n <template #default=\"{navigate}\">\n <FluxMenu>\n <FilterMenuRenderer\n :menu-items=\"menuItems\"\n :navigate=\"navigate\"/>\n </FluxMenu>\n </template>\n\n <template\n v-for=\"(filter, name) of filters\"\n #[name]>\n <FluxMenu>\n <FluxMenuGroup\n :class=\"$style.filterHeader\"\n is-horizontal>\n <FluxMenuItem\n :class=\"$style.filterBack\"\n :label=\"translate('flux.back')\"\n icon-leading=\"angle-left\"\n @click=\"back()\"/>\n\n <FluxMenuItem\n v-if=\"resettable?.includes(name)\"\n :class=\"$style.filterReset\"\n icon-leading=\"trash\"\n is-destructive\n @click=\"reset(name)\"\n style=\"flex-grow: 0\"/>\n </FluxMenuGroup>\n\n <VNodeRenderer :vnode=\"filter\"/>\n </FluxMenu>\n </template>\n </FluxWindow>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { vHeightTransition } from '@flux-ui/internals';\n import type { FluxFilterItem } from '@flux-ui/types';\n import { unref, useTemplateRef, type VNode } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FilterMenuRenderer, VNodeRenderer } from './primitive';\n import FluxMenu from './FluxMenu.vue';\n import FluxMenuGroup from './FluxMenuGroup.vue';\n import FluxMenuItem from './FluxMenuItem.vue';\n import FluxWindow from './FluxWindow.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const emit = defineEmits<{\n reset: [string]\n }>();\n\n defineProps<{\n readonly filters: Record<string, VNode>;\n readonly menuItems: (FluxFilterItem | VNode)[][];\n readonly resettable?: string[];\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const translate = useTranslate();\n\n const windowRef = useTemplateRef<{ back(to: string): void; }>('window');\n\n function back(): void {\n unref(windowRef)?.back('default');\n }\n\n function reset(name: string): void {\n back();\n emit('reset', name);\n }\n</script>\n","<template>\n <div\n v-height-transition\n :class=\"$style.filter\">\n <FluxWindow ref=\"window\">\n <template #default=\"{navigate}\">\n <FluxMenu>\n <FilterMenuRenderer\n :menu-items=\"menuItems\"\n :navigate=\"navigate\"/>\n </FluxMenu>\n </template>\n\n <template\n v-for=\"(filter, name) of filters\"\n #[name]>\n <FluxMenu>\n <FluxMenuGroup\n :class=\"$style.filterHeader\"\n is-horizontal>\n <FluxMenuItem\n :class=\"$style.filterBack\"\n :label=\"translate('flux.back')\"\n icon-leading=\"angle-left\"\n @click=\"back()\"/>\n\n <FluxMenuItem\n v-if=\"resettable?.includes(name)\"\n :class=\"$style.filterReset\"\n icon-leading=\"trash\"\n is-destructive\n @click=\"reset(name)\"\n style=\"flex-grow: 0\"/>\n </FluxMenuGroup>\n\n <VNodeRenderer :vnode=\"filter\"/>\n </FluxMenu>\n </template>\n </FluxWindow>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { vHeightTransition } from '@flux-ui/internals';\n import type { FluxFilterItem } from '@flux-ui/types';\n import { unref, useTemplateRef, type VNode } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FilterMenuRenderer, VNodeRenderer } from './primitive';\n import FluxMenu from './FluxMenu.vue';\n import FluxMenuGroup from './FluxMenuGroup.vue';\n import FluxMenuItem from './FluxMenuItem.vue';\n import FluxWindow from './FluxWindow.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const emit = defineEmits<{\n reset: [string]\n }>();\n\n defineProps<{\n readonly filters: Record<string, VNode>;\n readonly menuItems: (FluxFilterItem | VNode)[][];\n readonly resettable?: string[];\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const translate = useTranslate();\n\n const windowRef = useTemplateRef<{ back(to: string): void; }>('window');\n\n function back(): void {\n unref(windowRef)?.back('default');\n }\n\n function reset(name: string): void {\n back();\n emit('reset', name);\n }\n</script>\n","<template>\n <FluxFilterBase\n v-model=\"modelValue\"\n :resettable=\"resettable\"\n @reset=\"reset\">\n <template #filters>\n <slot/>\n </template>\n\n <template #default=\"{ filters, menuItems }\">\n <FluxFilterWindow\n :filters=\"filters\"\n :menu-items=\"menuItems\"\n :resettable=\"resettable\"\n @reset=\"reset\"/>\n </template>\n </FluxFilterBase>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxFilterState } from '@flux-ui/types';\n import FluxFilterBase from './FluxFilterBase.vue';\n import FluxFilterWindow from '$flux/component/FluxFilterWindow.vue';\n\n const emit = defineEmits<{\n reset: [string]\n }>();\n\n const modelValue = defineModel<FluxFilterState>({\n required: true\n });\n\n defineProps<{\n readonly resettable?: string[];\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n function reset(name: string): void {\n emit('reset', name);\n }\n</script>\n","<template>\n <FluxFilterBase\n v-model=\"modelValue\"\n :resettable=\"resettable\"\n @reset=\"reset\">\n <template #filters>\n <slot/>\n </template>\n\n <template #default=\"{ filters, menuItems }\">\n <FluxFilterWindow\n :filters=\"filters\"\n :menu-items=\"menuItems\"\n :resettable=\"resettable\"\n @reset=\"reset\"/>\n </template>\n </FluxFilterBase>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxFilterState } from '@flux-ui/types';\n import FluxFilterBase from './FluxFilterBase.vue';\n import FluxFilterWindow from '$flux/component/FluxFilterWindow.vue';\n\n const emit = defineEmits<{\n reset: [string]\n }>();\n\n const modelValue = defineModel<FluxFilterState>({\n required: true\n });\n\n defineProps<{\n readonly resettable?: string[];\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n function reset(name: string): void {\n emit('reset', name);\n }\n</script>\n",".overflowBar {\n display: flex;\n flex-basis: 0;\n flex-grow: 2;\n overflow: hidden;\n\n &.alignStart {\n justify-content: flex-start;\n }\n\n &.alignCenter {\n justify-content: center;\n }\n\n &.alignEnd {\n justify-content: flex-end;\n }\n}\n\n.overflowBarHorizontal {\n composes: overflowBar;\n\n flex-flow: row nowrap;\n}\n\n.overflowBarVertical {\n composes: overflowBar;\n\n flex-flow: column nowrap;\n}\n\n.overflowBarMeasurer {\n position: absolute;\n overflow: hidden;\n pointer-events: none;\n visibility: hidden;\n}\n\n.overflowBarOverflow {\n display: contents;\n}\n","<template>\n <div\n ref=\"bar\"\n :class=\"[\n direction === 'horizontal' && $style.overflowBarHorizontal,\n direction === 'vertical' && $style.overflowBarVertical,\n alignment === 'start' && $style.alignStart,\n alignment === 'center' && $style.alignCenter,\n alignment === 'end' && $style.alignEnd\n ]\"\n :style=\"{\n gap: `${gap}px`\n }\">\n <template v-for=\"item of items.slice(0, visibleItems)\">\n <FluxDynamicView :vnode=\"item\"/>\n </template>\n\n <div\n v-if=\"slots.overflow\"\n ref=\"overflow\"\n :class=\"$style.overflowBarOverflow\">\n <slot\n name=\"overflow\"\n v-bind=\"{hasOverflow: hiddenItems.length > 0, items: hiddenItems}\"/>\n </div>\n </div>\n\n <div\n ref=\"measurer\"\n :class=\"$style.overflowBarMeasurer\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { animationFrameDebounce, flattenVNodeTree, unrefTemplateElement } from '@flux-ui/internals';\n import type { FluxAlignment, FluxDirection } from '@flux-ui/types';\n import { computed, ref, unref, useTemplateRef, type VNode, watch } from 'vue';\n import FluxDynamicView from './FluxDynamicView.vue';\n import $style from '$flux/css/component/OverflowBar.module.scss';\n\n const {\n alignment = 'center',\n direction = 'horizontal',\n gap = 9\n } = defineProps<{\n readonly alignment?: FluxAlignment;\n readonly direction?: FluxDirection;\n readonly gap?: number;\n }>();\n\n const slots = defineSlots<{\n default?(): VNode[];\n overflow?(props: { hasOverflow: boolean; items: VNode[] }): VNode[];\n }>();\n\n const barRef = useTemplateRef('bar');\n const measurerRef = useTemplateRef('measurer');\n const overflowRef = useTemplateRef('overflow');\n\n const availableSize = ref(0);\n const itemSizes = ref<number[]>([]);\n const usedSize = ref(0);\n const visibleItems = ref(0);\n\n const hiddenItems = computed(() => unref(items).slice(unref(visibleItems)));\n const items = computed(() => flattenVNodeTree(slots.default?.()));\n\n const reflow = animationFrameDebounce(() => {\n const bar = unref(barRef)!;\n const measurer = unref(measurerRef)!;\n const overflow = unrefTemplateElement(overflowRef);\n\n availableSize.value = direction === 'horizontal' ? bar.offsetWidth : bar.offsetHeight;\n itemSizes.value = Array.from(measurer.children)\n .filter(item => item instanceof HTMLElement)\n .map(item => {\n const {display} = getComputedStyle(item);\n\n if (display === 'contents') {\n item = item.children[0] as HTMLElement;\n }\n\n return direction === 'horizontal'\n ? item.offsetWidth\n : item.offsetHeight;\n });\n\n let size = 0;\n let visible = 0;\n\n if (overflow) {\n size += Array.from(overflow.children)\n .map(item => getComputedStyle(item).display === 'contents' ? item.children[0] : item)\n .filter(item => item instanceof HTMLElement)\n .map(item => direction === 'horizontal' ? item.offsetWidth : item.offsetHeight)\n .reduce((acc, curr, index) => acc + curr + (index === 0 ? 0 : gap), 0);\n }\n\n for (let i = 0; i < itemSizes.value.length; i++) {\n const newSize = size + itemSizes.value[i] + (size === 0 ? 0 : gap);\n\n if (newSize > availableSize.value) {\n break;\n }\n\n visible++;\n size = newSize;\n }\n\n usedSize.value = size;\n visibleItems.value = visible;\n });\n\n watch([barRef, measurerRef], async ([bar, measurer], _, onCleanup) => {\n if (!bar || !measurer) {\n return;\n }\n\n const observer = new ResizeObserver(reflow);\n observer.observe(bar);\n observer.observe(measurer);\n observer.observe(document.documentElement); // observe font-size changes.\n\n onCleanup(() => {\n observer.disconnect();\n });\n }, {immediate: true});\n\n watch(items, reflow);\n</script>\n","<template>\n <div\n ref=\"bar\"\n :class=\"[\n direction === 'horizontal' && $style.overflowBarHorizontal,\n direction === 'vertical' && $style.overflowBarVertical,\n alignment === 'start' && $style.alignStart,\n alignment === 'center' && $style.alignCenter,\n alignment === 'end' && $style.alignEnd\n ]\"\n :style=\"{\n gap: `${gap}px`\n }\">\n <template v-for=\"item of items.slice(0, visibleItems)\">\n <FluxDynamicView :vnode=\"item\"/>\n </template>\n\n <div\n v-if=\"slots.overflow\"\n ref=\"overflow\"\n :class=\"$style.overflowBarOverflow\">\n <slot\n name=\"overflow\"\n v-bind=\"{hasOverflow: hiddenItems.length > 0, items: hiddenItems}\"/>\n </div>\n </div>\n\n <div\n ref=\"measurer\"\n :class=\"$style.overflowBarMeasurer\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { animationFrameDebounce, flattenVNodeTree, unrefTemplateElement } from '@flux-ui/internals';\n import type { FluxAlignment, FluxDirection } from '@flux-ui/types';\n import { computed, ref, unref, useTemplateRef, type VNode, watch } from 'vue';\n import FluxDynamicView from './FluxDynamicView.vue';\n import $style from '$flux/css/component/OverflowBar.module.scss';\n\n const {\n alignment = 'center',\n direction = 'horizontal',\n gap = 9\n } = defineProps<{\n readonly alignment?: FluxAlignment;\n readonly direction?: FluxDirection;\n readonly gap?: number;\n }>();\n\n const slots = defineSlots<{\n default?(): VNode[];\n overflow?(props: { hasOverflow: boolean; items: VNode[] }): VNode[];\n }>();\n\n const barRef = useTemplateRef('bar');\n const measurerRef = useTemplateRef('measurer');\n const overflowRef = useTemplateRef('overflow');\n\n const availableSize = ref(0);\n const itemSizes = ref<number[]>([]);\n const usedSize = ref(0);\n const visibleItems = ref(0);\n\n const hiddenItems = computed(() => unref(items).slice(unref(visibleItems)));\n const items = computed(() => flattenVNodeTree(slots.default?.()));\n\n const reflow = animationFrameDebounce(() => {\n const bar = unref(barRef)!;\n const measurer = unref(measurerRef)!;\n const overflow = unrefTemplateElement(overflowRef);\n\n availableSize.value = direction === 'horizontal' ? bar.offsetWidth : bar.offsetHeight;\n itemSizes.value = Array.from(measurer.children)\n .filter(item => item instanceof HTMLElement)\n .map(item => {\n const {display} = getComputedStyle(item);\n\n if (display === 'contents') {\n item = item.children[0] as HTMLElement;\n }\n\n return direction === 'horizontal'\n ? item.offsetWidth\n : item.offsetHeight;\n });\n\n let size = 0;\n let visible = 0;\n\n if (overflow) {\n size += Array.from(overflow.children)\n .map(item => getComputedStyle(item).display === 'contents' ? item.children[0] : item)\n .filter(item => item instanceof HTMLElement)\n .map(item => direction === 'horizontal' ? item.offsetWidth : item.offsetHeight)\n .reduce((acc, curr, index) => acc + curr + (index === 0 ? 0 : gap), 0);\n }\n\n for (let i = 0; i < itemSizes.value.length; i++) {\n const newSize = size + itemSizes.value[i] + (size === 0 ? 0 : gap);\n\n if (newSize > availableSize.value) {\n break;\n }\n\n visible++;\n size = newSize;\n }\n\n usedSize.value = size;\n visibleItems.value = visible;\n });\n\n watch([barRef, measurerRef], async ([bar, measurer], _, onCleanup) => {\n if (!bar || !measurer) {\n return;\n }\n\n const observer = new ResizeObserver(reflow);\n observer.observe(bar);\n observer.observe(measurer);\n observer.observe(document.documentElement); // observe font-size changes.\n\n onCleanup(() => {\n observer.disconnect();\n });\n }, {immediate: true});\n\n watch(items, reflow);\n</script>\n","<template>\n <FluxFilterBase\n v-model=\"modelValue\"\n :resettable=\"resettable\"\n @reset=\"reset\">\n <template #filters>\n <slot/>\n </template>\n\n <template #default=\"{ buttons, filters, menuItems }\">\n <div :class=\"$style.filterBar\">\n <FluxFormInput\n v-if=\"isSearchable\"\n v-model=\"modelSearch\"\n :class=\"$style.filterBarSearch\"\n icon-leading=\"magnifying-glass\"\n :placeholder=\"searchPlaceholder\"\n type=\"search\"/>\n\n <FluxOverflowBar alignment=\"end\">\n <template\n v-for=\"button of buttons\"\n :key=\"button.name\">\n <FluxFlyout>\n <template #opener=\"{open}\">\n <FluxSecondaryButton\n v-if=\"modelValue[button.name]\"\n :class=\"$style.filterButton\"\n :icon-leading=\"button.icon\"\n :label=\"button.label\"\n @click=\"open()\">\n <template #after>\n <FilterBadge\n :item=\"button\"\n :value=\"modelValue[button.name]\"/>\n </template>\n </FluxSecondaryButton>\n </template>\n\n <div :class=\"$style.filter\">\n <FluxMenu>\n <VNodeRenderer :vnode=\"filters[button.name]\"/>\n </FluxMenu>\n </div>\n </FluxFlyout>\n </template>\n\n <template #overflow>\n <FluxSeparator\n v-if=\"isFiltered\"\n direction=\"vertical\"\n style=\"margin-top: 9px; margin-bottom: 9px\"/>\n\n <FluxFlyout>\n <template #opener=\"{open}\">\n <FluxSecondaryButton\n icon-leading=\"sliders-simple\"\n label=\"Filter\"\n @click=\"open()\"/>\n </template>\n\n <FluxFilterWindow\n :filters=\"filters\"\n :menu-items=\"menuItems\"\n :resettable=\"resettable\"\n @reset=\"reset\"/>\n </FluxFlyout>\n </template>\n </FluxOverflowBar>\n </div>\n </template>\n </FluxFilterBase>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { computed, unref } from 'vue';\n import type { FluxFilterState } from '@flux-ui/types';\n import { FilterBadge, VNodeRenderer } from '$flux/component/primitive';\n import FluxFilterBase from './FluxFilterBase.vue';\n import FluxFilterWindow from './FluxFilterWindow.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxMenu from '$flux/component/FluxMenu.vue';\n import FluxOverflowBar from './FluxOverflowBar.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSeparator from '$flux/component/FluxSeparator.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const emit = defineEmits<{\n reset: [string];\n }>();\n\n const modelSearch = defineModel<string>('search', {\n default: ''\n });\n\n const modelValue = defineModel<FluxFilterState>({\n required: true\n });\n\n defineProps<{\n readonly isSearchable?: boolean;\n readonly resettable?: string[];\n readonly searchPlaceholder?: string;\n }>();\n\n defineSlots<{\n default?(): VNode[];\n }>();\n\n const isFiltered = computed(() => Object.entries(unref(modelValue)).filter(([, val]) => Boolean(val)).length > 0);\n\n function reset(name: string): void {\n emit('reset', name);\n }\n</script>\n","<template>\n <FluxFilterBase\n v-model=\"modelValue\"\n :resettable=\"resettable\"\n @reset=\"reset\">\n <template #filters>\n <slot/>\n </template>\n\n <template #default=\"{ buttons, filters, menuItems }\">\n <div :class=\"$style.filterBar\">\n <FluxFormInput\n v-if=\"isSearchable\"\n v-model=\"modelSearch\"\n :class=\"$style.filterBarSearch\"\n icon-leading=\"magnifying-glass\"\n :placeholder=\"searchPlaceholder\"\n type=\"search\"/>\n\n <FluxOverflowBar alignment=\"end\">\n <template\n v-for=\"button of buttons\"\n :key=\"button.name\">\n <FluxFlyout>\n <template #opener=\"{open}\">\n <FluxSecondaryButton\n v-if=\"modelValue[button.name]\"\n :class=\"$style.filterButton\"\n :icon-leading=\"button.icon\"\n :label=\"button.label\"\n @click=\"open()\">\n <template #after>\n <FilterBadge\n :item=\"button\"\n :value=\"modelValue[button.name]\"/>\n </template>\n </FluxSecondaryButton>\n </template>\n\n <div :class=\"$style.filter\">\n <FluxMenu>\n <VNodeRenderer :vnode=\"filters[button.name]\"/>\n </FluxMenu>\n </div>\n </FluxFlyout>\n </template>\n\n <template #overflow>\n <FluxSeparator\n v-if=\"isFiltered\"\n direction=\"vertical\"\n style=\"margin-top: 9px; margin-bottom: 9px\"/>\n\n <FluxFlyout>\n <template #opener=\"{open}\">\n <FluxSecondaryButton\n icon-leading=\"sliders-simple\"\n label=\"Filter\"\n @click=\"open()\"/>\n </template>\n\n <FluxFilterWindow\n :filters=\"filters\"\n :menu-items=\"menuItems\"\n :resettable=\"resettable\"\n @reset=\"reset\"/>\n </FluxFlyout>\n </template>\n </FluxOverflowBar>\n </div>\n </template>\n </FluxFilterBase>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { computed, unref } from 'vue';\n import type { FluxFilterState } from '@flux-ui/types';\n import { FilterBadge, VNodeRenderer } from '$flux/component/primitive';\n import FluxFilterBase from './FluxFilterBase.vue';\n import FluxFilterWindow from './FluxFilterWindow.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxMenu from '$flux/component/FluxMenu.vue';\n import FluxOverflowBar from './FluxOverflowBar.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSeparator from '$flux/component/FluxSeparator.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const emit = defineEmits<{\n reset: [string];\n }>();\n\n const modelSearch = defineModel<string>('search', {\n default: ''\n });\n\n const modelValue = defineModel<FluxFilterState>({\n required: true\n });\n\n defineProps<{\n readonly isSearchable?: boolean;\n readonly resettable?: string[];\n readonly searchPlaceholder?: string;\n }>();\n\n defineSlots<{\n default?(): VNode[];\n }>();\n\n const isFiltered = computed(() => Object.entries(unref(modelValue)).filter(([, val]) => Boolean(val)).length > 0);\n\n function reset(name: string): void {\n emit('reset', name);\n }\n</script>\n","<template>\n <FluxDatePicker\n :class=\"$style.filterDatePicker\"\n :max=\"max\"\n :min=\"min\"\n :model-value=\"currentValue\"\n @update:model-value=\"onDatePicked\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { DateTime } from 'luxon';\n import { computed, unref } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import FluxDatePicker from './FluxDatePicker.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const {\n name\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly label: string;\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly name: string;\n }>();\n\n const {back, state, setValue} = useFilterInjection();\n\n const currentValue = computed(() => {\n const value = unref(state)[name];\n\n if (!value) {\n return null;\n }\n\n if (!DateTime.isDateTime(value)) {\n if (typeof value === 'string') {\n return DateTime.fromISO(value);\n }\n\n return null;\n }\n\n return value;\n });\n\n function onDatePicked(date: DateTime | DateTime[] | null): void {\n if (!DateTime.isDateTime(date)) {\n return;\n }\n\n setValue(name, date);\n back();\n }\n</script>\n","<template>\n <FluxDatePicker\n :class=\"$style.filterDatePicker\"\n :max=\"max\"\n :min=\"min\"\n :model-value=\"currentValue\"\n @update:model-value=\"onDatePicked\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { DateTime } from 'luxon';\n import { computed, unref } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import FluxDatePicker from './FluxDatePicker.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const {\n name\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly label: string;\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly name: string;\n }>();\n\n const {back, state, setValue} = useFilterInjection();\n\n const currentValue = computed(() => {\n const value = unref(state)[name];\n\n if (!value) {\n return null;\n }\n\n if (!DateTime.isDateTime(value)) {\n if (typeof value === 'string') {\n return DateTime.fromISO(value);\n }\n\n return null;\n }\n\n return value;\n });\n\n function onDatePicked(date: DateTime | DateTime[] | null): void {\n if (!DateTime.isDateTime(date)) {\n return;\n }\n\n setValue(name, date);\n back();\n }\n</script>\n","<template>\n <FluxDatePicker\n :class=\"$style.filterDatePicker\"\n :max=\"max\"\n :min=\"min\"\n :model-value=\"currentValue\"\n :range-mode=\"rangeMode\"\n @update:model-value=\"onDatePicked\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { DateTime } from 'luxon';\n import { computed, unref } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import FluxDatePicker from './FluxDatePicker.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const {\n name,\n rangeMode = 'range'\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly label: string;\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly name: string;\n readonly rangeMode?: 'range' | 'week' | 'month';\n }>();\n\n const {back, state, setValue} = useFilterInjection();\n\n const currentValue = computed(() => {\n const value = unref(state)[name];\n\n if (!value || !Array.isArray(value)) {\n return null;\n }\n\n const [start, end] = value;\n\n if (!DateTime.isDateTime(start) || !DateTime.isDateTime(end)) {\n return null;\n }\n\n return [start, end];\n });\n\n function onDatePicked(date: DateTime | DateTime[] | null): void {\n if (date === null || !Array.isArray(date)) {\n return;\n }\n\n setValue(name, date);\n back();\n }\n</script>\n","<template>\n <FluxDatePicker\n :class=\"$style.filterDatePicker\"\n :max=\"max\"\n :min=\"min\"\n :model-value=\"currentValue\"\n :range-mode=\"rangeMode\"\n @update:model-value=\"onDatePicked\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { DateTime } from 'luxon';\n import { computed, unref } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import FluxDatePicker from './FluxDatePicker.vue';\n import $style from '$flux/css/component/Filter.module.scss';\n\n const {\n name,\n rangeMode = 'range'\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly label: string;\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly name: string;\n readonly rangeMode?: 'range' | 'week' | 'month';\n }>();\n\n const {back, state, setValue} = useFilterInjection();\n\n const currentValue = computed(() => {\n const value = unref(state)[name];\n\n if (!value || !Array.isArray(value)) {\n return null;\n }\n\n const [start, end] = value;\n\n if (!DateTime.isDateTime(start) || !DateTime.isDateTime(end)) {\n return null;\n }\n\n return [start, end];\n });\n\n function onDatePicked(date: DateTime | DateTime[] | null): void {\n if (date === null || !Array.isArray(date)) {\n return;\n }\n\n setValue(name, date);\n back();\n }\n</script>\n","<template>\n <FilterOptionBase\n v-model:search-query=\"modelSearch\"\n :is-searchable=\"isSearchable\"\n :options=\"filteredOptions\"\n :selected=\"[currentValue]\"\n :search-placeholder=\"searchPlaceholder\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionRow, FluxIconName } from '@flux-ui/types';\n import { computed, unref } from 'vue';\n import { useFilterOptionSingle } from '$flux/composable/private';\n import { isFluxFilterOptionHeader } from '$flux/data';\n import { FilterOptionBase } from './primitive';\n\n const modelSearch = defineModel<string>('searchQuery', {default: ''});\n\n const {\n name,\n options\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isSearchable?: boolean;\n readonly label: string;\n readonly name: string;\n readonly options: FluxFilterOptionRow[];\n readonly searchPlaceholder?: string;\n }>();\n\n const {currentValue, onSelect} = useFilterOptionSingle(name);\n\n const filteredOptions = computed(() => options\n .filter(o => isFluxFilterOptionHeader(o) || unref(modelSearch).length === 0 || o.label.toLowerCase().includes(unref(modelSearch).toLowerCase())));\n</script>\n","<template>\n <FilterOptionBase\n v-model:search-query=\"modelSearch\"\n :is-searchable=\"isSearchable\"\n :options=\"filteredOptions\"\n :selected=\"[currentValue]\"\n :search-placeholder=\"searchPlaceholder\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionRow, FluxIconName } from '@flux-ui/types';\n import { computed, unref } from 'vue';\n import { useFilterOptionSingle } from '$flux/composable/private';\n import { isFluxFilterOptionHeader } from '$flux/data';\n import { FilterOptionBase } from './primitive';\n\n const modelSearch = defineModel<string>('searchQuery', {default: ''});\n\n const {\n name,\n options\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isSearchable?: boolean;\n readonly label: string;\n readonly name: string;\n readonly options: FluxFilterOptionRow[];\n readonly searchPlaceholder?: string;\n }>();\n\n const {currentValue, onSelect} = useFilterOptionSingle(name);\n\n const filteredOptions = computed(() => options\n .filter(o => isFluxFilterOptionHeader(o) || unref(modelSearch).length === 0 || o.label.toLowerCase().includes(unref(modelSearch).toLowerCase())));\n</script>\n","<template>\n <FilterOptionBase\n v-model:search-query=\"modelSearch\"\n :is-loading=\"isLoading\"\n is-searchable\n :options=\"options\"\n :selected=\"[currentValue]\"\n :search-placeholder=\"searchPlaceholder\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionRow, FluxFilterValue, FluxIconName } from '@flux-ui/types';\n import { computed, unref } from 'vue';\n import { useAsyncFilterOptions, useFilterOptionSingle } from '$flux/composable/private';\n import { FilterOptionBase } from './primitive';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const {\n fetchOptions: fetchOptionsProp,\n fetchRelevant: fetchRelevantProp,\n fetchSearch: fetchSearchProp,\n name\n } = defineProps<{\n fetchOptions(ids: FluxFilterValue[]): Promise<FluxFilterOptionRow[]>;\n fetchRelevant(): Promise<FluxFilterOptionRow[]>;\n fetchSearch(searchQuery: string): Promise<FluxFilterOptionRow[]>;\n\n readonly icon?: FluxIconName;\n readonly label: string;\n readonly name: string;\n readonly searchPlaceholder?: string;\n }>();\n\n const {currentValue, onSelect} = useFilterOptionSingle(name);\n\n const currentValueIds = computed<FluxFilterValue[]>(() => {\n const value = unref(currentValue);\n\n if (value === null || value === undefined) {\n return [];\n }\n\n return [value];\n });\n\n const {isLoading, options} = useAsyncFilterOptions({\n currentValueIds,\n modelSearch,\n fetchOptions: (ids: FluxFilterValue[]) => fetchOptionsProp(ids),\n fetchRelevant: () => fetchRelevantProp(),\n fetchSearch: (searchQuery: string) => fetchSearchProp(searchQuery)\n });\n</script>\n","<template>\n <FilterOptionBase\n v-model:search-query=\"modelSearch\"\n :is-loading=\"isLoading\"\n is-searchable\n :options=\"options\"\n :selected=\"[currentValue]\"\n :search-placeholder=\"searchPlaceholder\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionRow, FluxFilterValue, FluxIconName } from '@flux-ui/types';\n import { computed, unref } from 'vue';\n import { useAsyncFilterOptions, useFilterOptionSingle } from '$flux/composable/private';\n import { FilterOptionBase } from './primitive';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const {\n fetchOptions: fetchOptionsProp,\n fetchRelevant: fetchRelevantProp,\n fetchSearch: fetchSearchProp,\n name\n } = defineProps<{\n fetchOptions(ids: FluxFilterValue[]): Promise<FluxFilterOptionRow[]>;\n fetchRelevant(): Promise<FluxFilterOptionRow[]>;\n fetchSearch(searchQuery: string): Promise<FluxFilterOptionRow[]>;\n\n readonly icon?: FluxIconName;\n readonly label: string;\n readonly name: string;\n readonly searchPlaceholder?: string;\n }>();\n\n const {currentValue, onSelect} = useFilterOptionSingle(name);\n\n const currentValueIds = computed<FluxFilterValue[]>(() => {\n const value = unref(currentValue);\n\n if (value === null || value === undefined) {\n return [];\n }\n\n return [value];\n });\n\n const {isLoading, options} = useAsyncFilterOptions({\n currentValueIds,\n modelSearch,\n fetchOptions: (ids: FluxFilterValue[]) => fetchOptionsProp(ids),\n fetchRelevant: () => fetchRelevantProp(),\n fetchSearch: (searchQuery: string) => fetchSearchProp(searchQuery)\n });\n</script>\n","<template>\n <FilterOptionBase\n v-model:search-query=\"modelSearch\"\n :is-searchable=\"isSearchable\"\n :options=\"filteredOptions\"\n :selected=\"currentValue\"\n :search-placeholder=\"searchPlaceholder\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionRow, FluxIconName } from '@flux-ui/types';\n import { computed, unref } from 'vue';\n import { useFilterOptionMulti } from '$flux/composable/private';\n import { isFluxFilterOptionHeader } from '$flux/data';\n import { FilterOptionBase } from './primitive';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const {\n name,\n options\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isSearchable?: boolean;\n readonly label: string;\n readonly name: string;\n readonly options: FluxFilterOptionRow[];\n readonly searchPlaceholder?: string;\n }>();\n\n const {currentValue, onSelect} = useFilterOptionMulti(name);\n\n const filteredOptions = computed(() => options\n .filter(o => isFluxFilterOptionHeader(o) || unref(modelSearch).length === 0 || o.label.toLowerCase().includes(unref(modelSearch).toLowerCase())));\n</script>\n","<template>\n <FilterOptionBase\n v-model:search-query=\"modelSearch\"\n :is-searchable=\"isSearchable\"\n :options=\"filteredOptions\"\n :selected=\"currentValue\"\n :search-placeholder=\"searchPlaceholder\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionRow, FluxIconName } from '@flux-ui/types';\n import { computed, unref } from 'vue';\n import { useFilterOptionMulti } from '$flux/composable/private';\n import { isFluxFilterOptionHeader } from '$flux/data';\n import { FilterOptionBase } from './primitive';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const {\n name,\n options\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isSearchable?: boolean;\n readonly label: string;\n readonly name: string;\n readonly options: FluxFilterOptionRow[];\n readonly searchPlaceholder?: string;\n }>();\n\n const {currentValue, onSelect} = useFilterOptionMulti(name);\n\n const filteredOptions = computed(() => options\n .filter(o => isFluxFilterOptionHeader(o) || unref(modelSearch).length === 0 || o.label.toLowerCase().includes(unref(modelSearch).toLowerCase())));\n</script>\n","<template>\n <FilterOptionBase\n v-model:search-query=\"modelSearch\"\n :is-loading=\"isLoading\"\n is-searchable\n :options=\"options\"\n :selected=\"currentValue\"\n :search-placeholder=\"searchPlaceholder\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionRow, FluxFilterValue, FluxIconName } from '@flux-ui/types';\n import { useAsyncFilterOptions, useFilterOptionMulti } from '$flux/composable/private';\n import { FilterOptionBase } from './primitive';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const {\n fetchOptions: fetchOptionsProp,\n fetchRelevant: fetchRelevantProp,\n fetchSearch: fetchSearchProp,\n name\n } = defineProps<{\n fetchOptions(ids: FluxFilterValue[]): Promise<FluxFilterOptionRow[]>;\n fetchRelevant(): Promise<FluxFilterOptionRow[]>;\n fetchSearch(searchQuery: string): Promise<FluxFilterOptionRow[]>;\n\n readonly icon?: FluxIconName;\n readonly label: string;\n readonly name: string;\n readonly searchPlaceholder?: string;\n }>();\n\n const {currentValue, onSelect} = useFilterOptionMulti(name);\n\n const {isLoading, options} = useAsyncFilterOptions({\n currentValueIds: currentValue,\n modelSearch,\n fetchOptions: (ids: FluxFilterValue[]) => fetchOptionsProp(ids),\n fetchRelevant: () => fetchRelevantProp(),\n fetchSearch: (searchQuery: string) => fetchSearchProp(searchQuery)\n });\n</script>\n","<template>\n <FilterOptionBase\n v-model:search-query=\"modelSearch\"\n :is-loading=\"isLoading\"\n is-searchable\n :options=\"options\"\n :selected=\"currentValue\"\n :search-placeholder=\"searchPlaceholder\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFilterOptionRow, FluxFilterValue, FluxIconName } from '@flux-ui/types';\n import { useAsyncFilterOptions, useFilterOptionMulti } from '$flux/composable/private';\n import { FilterOptionBase } from './primitive';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const {\n fetchOptions: fetchOptionsProp,\n fetchRelevant: fetchRelevantProp,\n fetchSearch: fetchSearchProp,\n name\n } = defineProps<{\n fetchOptions(ids: FluxFilterValue[]): Promise<FluxFilterOptionRow[]>;\n fetchRelevant(): Promise<FluxFilterOptionRow[]>;\n fetchSearch(searchQuery: string): Promise<FluxFilterOptionRow[]>;\n\n readonly icon?: FluxIconName;\n readonly label: string;\n readonly name: string;\n readonly searchPlaceholder?: string;\n }>();\n\n const {currentValue, onSelect} = useFilterOptionMulti(name);\n\n const {isLoading, options} = useAsyncFilterOptions({\n currentValueIds: currentValue,\n modelSearch,\n fetchOptions: (ids: FluxFilterValue[]) => fetchOptionsProp(ids),\n fetchRelevant: () => fetchRelevantProp(),\n fetchSearch: (searchQuery: string) => fetchSearchProp(searchQuery)\n });\n</script>\n","<template>\n <div :class=\"$style.formColumn\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.formColumn\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxPaneBody>\n <FluxFormColumn>\n <FluxFormField :label=\"translate('flux.min')\">\n <FluxFormSlider\n :formatter=\"formatter\"\n :is-ticks-visible=\"isTicksVisible\"\n :model-value=\"currentValue[0]\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n @update:model-value=\"update({lower: $event})\"/>\n\n <template #value>\n {{ formatter ? formatter(currentValue[0]) : currentValue[0] }}\n </template>\n </FluxFormField>\n\n <FluxFormField :label=\"translate('flux.max')\">\n <FluxFormSlider\n :formatter=\"formatter\"\n :is-ticks-visible=\"isTicksVisible\"\n :model-value=\"currentValue[1]\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n @update:model-value=\"update({upper: $event})\"/>\n\n <template #value>\n {{ formatter ? formatter(currentValue[1]) : currentValue[1] }}\n </template>\n </FluxFormField>\n </FluxFormColumn>\n </FluxPaneBody>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { formatNumber } from '@basmilius/utils';\n import type { FluxIconName } from '@flux-ui/types';\n import { computed, unref } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import FluxFormColumn from './FluxFormColumn.vue';\n import FluxFormField from './FluxFormField.vue';\n import FluxFormSlider from './FluxFormSlider.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n\n const {\n formatter = formatNumber,\n max,\n min,\n name,\n step = 1\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isTicksVisible?: boolean;\n readonly label: string;\n readonly name: string;\n readonly max: number;\n readonly min: number;\n readonly step?: number;\n readonly formatter?: (value: number) => string;\n }>();\n\n const {state, setValue} = useFilterInjection();\n const translate = useTranslate();\n\n const currentValue = computed(() => (unref(state)[name] ?? [min, max]) as number[]);\n\n function update({lower, upper}: { lower?: number, upper?: number }): void {\n if (lower || lower === 0) {\n upper ??= unref(currentValue)[1];\n\n if (lower > upper) {\n upper = lower;\n }\n }\n\n if (upper || upper === 0) {\n lower ??= unref(currentValue)[0];\n\n if (lower > upper) {\n lower = upper;\n }\n }\n\n setValue(name, [lower!, upper!]);\n }\n</script>\n","<template>\n <FluxPaneBody>\n <FluxFormColumn>\n <FluxFormField :label=\"translate('flux.min')\">\n <FluxFormSlider\n :formatter=\"formatter\"\n :is-ticks-visible=\"isTicksVisible\"\n :model-value=\"currentValue[0]\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n @update:model-value=\"update({lower: $event})\"/>\n\n <template #value>\n {{ formatter ? formatter(currentValue[0]) : currentValue[0] }}\n </template>\n </FluxFormField>\n\n <FluxFormField :label=\"translate('flux.max')\">\n <FluxFormSlider\n :formatter=\"formatter\"\n :is-ticks-visible=\"isTicksVisible\"\n :model-value=\"currentValue[1]\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n @update:model-value=\"update({upper: $event})\"/>\n\n <template #value>\n {{ formatter ? formatter(currentValue[1]) : currentValue[1] }}\n </template>\n </FluxFormField>\n </FluxFormColumn>\n </FluxPaneBody>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { formatNumber } from '@basmilius/utils';\n import type { FluxIconName } from '@flux-ui/types';\n import { computed, unref } from 'vue';\n import { useFilterInjection } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import FluxFormColumn from './FluxFormColumn.vue';\n import FluxFormField from './FluxFormField.vue';\n import FluxFormSlider from './FluxFormSlider.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n\n const {\n formatter = formatNumber,\n max,\n min,\n name,\n step = 1\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isTicksVisible?: boolean;\n readonly label: string;\n readonly name: string;\n readonly max: number;\n readonly min: number;\n readonly step?: number;\n readonly formatter?: (value: number) => string;\n }>();\n\n const {state, setValue} = useFilterInjection();\n const translate = useTranslate();\n\n const currentValue = computed(() => (unref(state)[name] ?? [min, max]) as number[]);\n\n function update({lower, upper}: { lower?: number, upper?: number }): void {\n if (lower || lower === 0) {\n upper ??= unref(currentValue)[1];\n\n if (lower > upper) {\n upper = lower;\n }\n }\n\n if (upper || upper === 0) {\n lower ??= unref(currentValue)[0];\n\n if (lower > upper) {\n lower = upper;\n }\n }\n\n setValue(name, [lower!, upper!]);\n }\n</script>\n","<template>\n <canvas\n ref=\"canvas\"\n :class=\"$style.flickeringGrid\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { mulberry32 } from '@basmilius/utils';\n import { useInView } from '@flux-ui/internals';\n import { computed, unref, useTemplateRef, watch } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n const {\n color = '#1d4ed8',\n flickerChance = 0.15,\n gap = 6,\n maxOpacity = 0.3,\n size = 3\n } = defineProps<{\n readonly color?: string;\n readonly flickerChance?: number;\n readonly gap?: number;\n readonly maxOpacity?: number;\n readonly size?: number;\n }>();\n\n const canvasRef = useTemplateRef('canvas');\n\n const inView = useInView(canvasRef);\n\n const mulberry = mulberry32(13);\n\n const rgb = computed(() => {\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = 1;\n\n const context = canvas.getContext('2d');\n\n if (!context) {\n return [0, 0, 0];\n }\n\n context.fillStyle = color;\n context.fillRect(0, 0, 1, 1);\n\n return context.getImageData(0, 0, 1, 1).data;\n });\n\n function draw(context: CanvasRenderingContext2D, width: number, height: number, columns: number, rows: number, squares: Float32Array, dpr: number): void {\n context.clearRect(0, 0, width * dpr, height * dpr);\n\n const [r, g, b] = unref(rgb);\n\n for (let i = 0; i < columns; ++i) {\n for (let j = 0; j < rows; ++j) {\n const opacity = squares[i * rows + j];\n context.fillStyle = `rgb(${r} ${g} ${b} / ${opacity})`;\n context.fillRect(\n (i * (size + gap) + width / 2 - (columns / 2 * (size + gap) - gap / 2)) * dpr,\n (j * (size + gap) + height / 2 - (rows / 2 * (size + gap) - gap / 2)) * dpr,\n size * dpr,\n size * dpr\n );\n }\n }\n }\n\n function setup(canvas: HTMLCanvasElement) {\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n const dpr = window.devicePixelRatio || 1;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n const columns = Math.ceil(width / (size + gap));\n const rows = Math.ceil(height / (size + gap));\n const squares = new Float32Array(columns * rows);\n\n for (let i = 0; i < squares.length; ++i) {\n squares[i] = mulberry.next() * maxOpacity;\n }\n\n return {\n width,\n height,\n columns,\n rows,\n squares,\n dpr\n };\n }\n\n function tick(squares: Float32Array, delta: number): void {\n for (let i = 0; i < squares.length; ++i) {\n if (mulberry.next() < flickerChance * delta) {\n squares[i] = mulberry.next() * maxOpacity;\n }\n }\n }\n\n watch([canvasRef, inView], ([canvas, inView], _, onCleanup) => {\n if (!canvas || !inView) {\n return;\n }\n\n const context = canvas.getContext('2d');\n\n if (!context) {\n return;\n }\n\n let frame = 0;\n let lastTime = 0;\n let {width, height, columns, rows, squares, dpr} = setup(canvas);\n\n const animate = (time: number): void => {\n const delta = (time - lastTime) / 1000;\n lastTime = time;\n\n tick(squares, delta);\n draw(context, width, height, columns, rows, squares, dpr);\n frame = requestAnimationFrame(animate);\n };\n\n const onResize = () => {\n ({width, height, columns, rows, squares, dpr} = setup(canvas));\n };\n\n window.addEventListener('resize', onResize, {passive: true});\n requestAnimationFrame(animate);\n\n onCleanup(() => {\n window.removeEventListener('resize', onResize);\n cancelAnimationFrame(frame);\n });\n }, {immediate: true});\n</script>\n","<template>\n <canvas\n ref=\"canvas\"\n :class=\"$style.flickeringGrid\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { mulberry32 } from '@basmilius/utils';\n import { useInView } from '@flux-ui/internals';\n import { computed, unref, useTemplateRef, watch } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n const {\n color = '#1d4ed8',\n flickerChance = 0.15,\n gap = 6,\n maxOpacity = 0.3,\n size = 3\n } = defineProps<{\n readonly color?: string;\n readonly flickerChance?: number;\n readonly gap?: number;\n readonly maxOpacity?: number;\n readonly size?: number;\n }>();\n\n const canvasRef = useTemplateRef('canvas');\n\n const inView = useInView(canvasRef);\n\n const mulberry = mulberry32(13);\n\n const rgb = computed(() => {\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = 1;\n\n const context = canvas.getContext('2d');\n\n if (!context) {\n return [0, 0, 0];\n }\n\n context.fillStyle = color;\n context.fillRect(0, 0, 1, 1);\n\n return context.getImageData(0, 0, 1, 1).data;\n });\n\n function draw(context: CanvasRenderingContext2D, width: number, height: number, columns: number, rows: number, squares: Float32Array, dpr: number): void {\n context.clearRect(0, 0, width * dpr, height * dpr);\n\n const [r, g, b] = unref(rgb);\n\n for (let i = 0; i < columns; ++i) {\n for (let j = 0; j < rows; ++j) {\n const opacity = squares[i * rows + j];\n context.fillStyle = `rgb(${r} ${g} ${b} / ${opacity})`;\n context.fillRect(\n (i * (size + gap) + width / 2 - (columns / 2 * (size + gap) - gap / 2)) * dpr,\n (j * (size + gap) + height / 2 - (rows / 2 * (size + gap) - gap / 2)) * dpr,\n size * dpr,\n size * dpr\n );\n }\n }\n }\n\n function setup(canvas: HTMLCanvasElement) {\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n const dpr = window.devicePixelRatio || 1;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n const columns = Math.ceil(width / (size + gap));\n const rows = Math.ceil(height / (size + gap));\n const squares = new Float32Array(columns * rows);\n\n for (let i = 0; i < squares.length; ++i) {\n squares[i] = mulberry.next() * maxOpacity;\n }\n\n return {\n width,\n height,\n columns,\n rows,\n squares,\n dpr\n };\n }\n\n function tick(squares: Float32Array, delta: number): void {\n for (let i = 0; i < squares.length; ++i) {\n if (mulberry.next() < flickerChance * delta) {\n squares[i] = mulberry.next() * maxOpacity;\n }\n }\n }\n\n watch([canvasRef, inView], ([canvas, inView], _, onCleanup) => {\n if (!canvas || !inView) {\n return;\n }\n\n const context = canvas.getContext('2d');\n\n if (!context) {\n return;\n }\n\n let frame = 0;\n let lastTime = 0;\n let {width, height, columns, rows, squares, dpr} = setup(canvas);\n\n const animate = (time: number): void => {\n const delta = (time - lastTime) / 1000;\n lastTime = time;\n\n tick(squares, delta);\n draw(context, width, height, columns, rows, squares, dpr);\n frame = requestAnimationFrame(animate);\n };\n\n const onResize = () => {\n ({width, height, columns, rows, squares, dpr} = setup(canvas));\n };\n\n window.addEventListener('resize', onResize, {passive: true});\n requestAnimationFrame(animate);\n\n onCleanup(() => {\n window.removeEventListener('resize', onResize);\n cancelAnimationFrame(frame);\n });\n }, {immediate: true});\n</script>\n",".focalPointImage {\n object-fit: cover;\n}\n\n.focalPointEditor {\n position: relative;\n margin-left: auto;\n margin-right: auto;\n max-height: 210px;\n max-width: 100%;\n aspect-ratio: var(--aspect-ratio);\n user-select: none;\n}\n\n.focalPointEditorArea {\n position: absolute;\n height: 42px;\n width: 42px;\n background: rgb(0 0 0 / .1);\n border: 4px solid white;\n border-radius: var(--radius-full);\n box-shadow: var(--shadow-md);\n cursor: move;\n transform: translate3d(-50%, -50%, 0);\n}\n\n.focalPointEditorImage {\n position: relative;\n display: block;\n height: 100%;\n width: 100%;\n border-radius: var(--radius);\n box-shadow: var(--shadow-lg);\n pointer-events: none;\n}\n\n.focalPointPreview {\n position: relative;\n height: 210px;\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n}\n\n.focalPointPreviewImage {\n position: absolute;\n top: 50%;\n left: 50%;\n right: -50%;\n bottom: -50%;\n max-height: 210px;\n max-width: 100%;\n background-size: cover;\n border-radius: var(--radius);\n box-shadow: var(--shadow-lg);\n transform: translate3d(-50%, -50%, 0);\n animation: focalPointPreview 6s var(--swift-out) infinite;\n}\n\n@keyframes focalPointPreview {\n 0% {\n aspect-ratio: var(--aspect-ratio);\n }\n\n 20% {\n aspect-ratio: 1;\n }\n\n 40% {\n aspect-ratio: 16 / 9;\n }\n\n 60% {\n aspect-ratio: 3 / 4;\n }\n\n 80% {\n aspect-ratio: 3 / 1;\n }\n\n 100% {\n aspect-ratio: var(--aspect-ratio);\n }\n}\n","<template>\n <FluxPane :style=\"{'--aspect-ratio': aspectRatio}\">\n <FluxFadeTransition mode=\"out-in\">\n <FluxPaneBody\n v-if=\"isPreviewing\"\n key=\"preview\">\n <div :class=\"$style.focalPointPreview\">\n <div\n :class=\"$style.focalPointPreviewImage\"\n :style=\"{\n backgroundImage: `url(${src})`,\n backgroundPosition: `${focalPointX}% ${focalPointY}%`\n }\"/>\n </div>\n </FluxPaneBody>\n\n <FluxPaneBody\n v-else\n key=\"editor\">\n <div\n :class=\"$style.focalPointEditor\"\n @pointerdown=\"onPointerDown\"\n @pointermove=\"onPointerMove\">\n <img\n ref=\"image\"\n :class=\"$style.focalPointEditorImage\"\n :src=\"src\"\n alt=\"\"\n @load=\"onImageLoaded\"/>\n\n <div\n :class=\"$style.focalPointEditorArea\"\n :style=\"{\n top: `${focalPointY}%`,\n left: `${focalPointX}%`\n }\"/>\n </div>\n </FluxPaneBody>\n </FluxFadeTransition>\n\n <FluxPaneFooter>\n <slot name=\"footer-before\"/>\n\n <FluxSecondaryButton\n :label=\"translate(isPreviewing ? 'flux.previewClose' : 'flux.preview')\"\n @click=\"onShowPreviewClicked\"/>\n\n <FluxSpacer/>\n\n <slot name=\"footer\"/>\n </FluxPaneFooter>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed, onMounted, onUnmounted, ref, unref, useTemplateRef, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxPane from './FluxPane.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n import FluxPaneFooter from './FluxPaneFooter.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSpacer from './FluxSpacer.vue';\n import $style from '$flux/css/component/FocalPoint.module.scss';\n\n const modelValue = defineModel<[number, number]>({\n required: true\n });\n\n const {\n src\n } = defineProps<{\n readonly src: string;\n }>();\n\n const imageRef = useTemplateRef('image');\n const translate = useTranslate();\n\n const aspectRatio = ref(1);\n const dragging = ref<[number, number] | null>(null);\n const isPreviewing = ref(false);\n\n const focalPointX = computed(() => unref(dragging) ? unref(dragging)![0] : unref(modelValue)[0]);\n const focalPointY = computed(() => unref(dragging) ? unref(dragging)![1] : unref(modelValue)[1]);\n\n onMounted(() => window.addEventListener('pointerup', onPointerUp, {passive: true}));\n\n onUnmounted(() => window.removeEventListener('pointerup', onPointerUp));\n\n function onImageLoaded(): void {\n const image = unref(imageRef);\n\n if (!image) {\n return;\n }\n\n aspectRatio.value = image.width / image.height;\n }\n\n function onPointerDown(evt: PointerEvent): void {\n dragging.value = [0, 0];\n onPointerMove(evt);\n }\n\n function onPointerMove(evt: PointerEvent): void {\n const image = unref(imageRef);\n\n if (!image || !dragging.value) {\n return;\n }\n\n const {top, left, width, height} = image.getBoundingClientRect();\n const {clientX, clientY} = evt;\n\n dragging.value = [\n Math.max(0, Math.min(1, (clientX - left) / width)) * 100,\n Math.max(0, Math.min(1, (clientY - top) / height)) * 100\n ];\n }\n\n function onPointerUp(): void {\n if (!dragging.value) {\n return;\n }\n\n modelValue.value = dragging.value!;\n dragging.value = null;\n }\n\n function onShowPreviewClicked(): void {\n isPreviewing.value = !isPreviewing.value;\n }\n\n watch(() => src, () => isPreviewing.value = false);\n</script>\n","<template>\n <FluxPane :style=\"{'--aspect-ratio': aspectRatio}\">\n <FluxFadeTransition mode=\"out-in\">\n <FluxPaneBody\n v-if=\"isPreviewing\"\n key=\"preview\">\n <div :class=\"$style.focalPointPreview\">\n <div\n :class=\"$style.focalPointPreviewImage\"\n :style=\"{\n backgroundImage: `url(${src})`,\n backgroundPosition: `${focalPointX}% ${focalPointY}%`\n }\"/>\n </div>\n </FluxPaneBody>\n\n <FluxPaneBody\n v-else\n key=\"editor\">\n <div\n :class=\"$style.focalPointEditor\"\n @pointerdown=\"onPointerDown\"\n @pointermove=\"onPointerMove\">\n <img\n ref=\"image\"\n :class=\"$style.focalPointEditorImage\"\n :src=\"src\"\n alt=\"\"\n @load=\"onImageLoaded\"/>\n\n <div\n :class=\"$style.focalPointEditorArea\"\n :style=\"{\n top: `${focalPointY}%`,\n left: `${focalPointX}%`\n }\"/>\n </div>\n </FluxPaneBody>\n </FluxFadeTransition>\n\n <FluxPaneFooter>\n <slot name=\"footer-before\"/>\n\n <FluxSecondaryButton\n :label=\"translate(isPreviewing ? 'flux.previewClose' : 'flux.preview')\"\n @click=\"onShowPreviewClicked\"/>\n\n <FluxSpacer/>\n\n <slot name=\"footer\"/>\n </FluxPaneFooter>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed, onMounted, onUnmounted, ref, unref, useTemplateRef, watch } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxPane from './FluxPane.vue';\n import FluxPaneBody from './FluxPaneBody.vue';\n import FluxPaneFooter from './FluxPaneFooter.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxSpacer from './FluxSpacer.vue';\n import $style from '$flux/css/component/FocalPoint.module.scss';\n\n const modelValue = defineModel<[number, number]>({\n required: true\n });\n\n const {\n src\n } = defineProps<{\n readonly src: string;\n }>();\n\n const imageRef = useTemplateRef('image');\n const translate = useTranslate();\n\n const aspectRatio = ref(1);\n const dragging = ref<[number, number] | null>(null);\n const isPreviewing = ref(false);\n\n const focalPointX = computed(() => unref(dragging) ? unref(dragging)![0] : unref(modelValue)[0]);\n const focalPointY = computed(() => unref(dragging) ? unref(dragging)![1] : unref(modelValue)[1]);\n\n onMounted(() => window.addEventListener('pointerup', onPointerUp, {passive: true}));\n\n onUnmounted(() => window.removeEventListener('pointerup', onPointerUp));\n\n function onImageLoaded(): void {\n const image = unref(imageRef);\n\n if (!image) {\n return;\n }\n\n aspectRatio.value = image.width / image.height;\n }\n\n function onPointerDown(evt: PointerEvent): void {\n dragging.value = [0, 0];\n onPointerMove(evt);\n }\n\n function onPointerMove(evt: PointerEvent): void {\n const image = unref(imageRef);\n\n if (!image || !dragging.value) {\n return;\n }\n\n const {top, left, width, height} = image.getBoundingClientRect();\n const {clientX, clientY} = evt;\n\n dragging.value = [\n Math.max(0, Math.min(1, (clientX - left) / width)) * 100,\n Math.max(0, Math.min(1, (clientY - top) / height)) * 100\n ];\n }\n\n function onPointerUp(): void {\n if (!dragging.value) {\n return;\n }\n\n modelValue.value = dragging.value!;\n dragging.value = null;\n }\n\n function onShowPreviewClicked(): void {\n isPreviewing.value = !isPreviewing.value;\n }\n\n watch(() => src, () => isPreviewing.value = false);\n</script>\n","<template>\n <img\n :class=\"$style.focalPointImage\"\n :style=\"{\n objectPosition: `${x}% ${y}%`\n }\"\n :src=\"src\"\n :alt=\"alt\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFocalPointObject } from '@flux-ui/types';\n import { computed } from 'vue';\n import $style from '$flux/css/component/FocalPoint.module.scss';\n\n const {\n alt = '',\n focalPoint\n } = defineProps<{\n readonly focalPoint?: FluxFocalPointObject;\n readonly alt?: string;\n readonly src: string;\n }>();\n\n const x = computed(() => focalPoint?.x ?? 50);\n const y = computed(() => focalPoint?.y ?? 50);\n</script>\n","<template>\n <img\n :class=\"$style.focalPointImage\"\n :style=\"{\n objectPosition: `${x}% ${y}%`\n }\"\n :src=\"src\"\n :alt=\"alt\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFocalPointObject } from '@flux-ui/types';\n import { computed } from 'vue';\n import $style from '$flux/css/component/FocalPoint.module.scss';\n\n const {\n alt = '',\n focalPoint\n } = defineProps<{\n readonly focalPoint?: FluxFocalPointObject;\n readonly alt?: string;\n readonly src: string;\n }>();\n\n const x = computed(() => focalPoint?.x ?? 50);\n const y = computed(() => focalPoint?.y ?? 50);\n</script>\n","<template>\n <form\n :class=\"$style.form\"\n :aria-disabled=\"disabled ? true : undefined\"\n @submit.prevent=\"onSubmit()\">\n <FluxDisabled :disabled=\"disabled\">\n <slot/>\n </FluxDisabled>\n </form>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxDisabled from './FluxDisabled.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const emit = defineEmits<{\n submit: [];\n }>();\n\n const {\n disabled = false\n } = defineProps<{\n readonly disabled?: boolean;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n function onSubmit(): void {\n emit('submit');\n }\n</script>\n","<template>\n <form\n :class=\"$style.form\"\n :aria-disabled=\"disabled ? true : undefined\"\n @submit.prevent=\"onSubmit()\">\n <FluxDisabled :disabled=\"disabled\">\n <slot/>\n </FluxDisabled>\n </form>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxDisabled from './FluxDisabled.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const emit = defineEmits<{\n submit: [];\n }>();\n\n const {\n disabled = false\n } = defineProps<{\n readonly disabled?: boolean;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n function onSubmit(): void {\n emit('submit');\n }\n</script>\n","<template>\n <div\n :class=\"clsx(\n $style.formInputGroup,\n isCondensed && $style.isCondensed,\n isSecondary && $style.isSecondary\n )\"\n role=\"group\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { clsx } from 'clsx';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineProps<{\n readonly isSecondary?: boolean;\n readonly isCondensed?: boolean;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"clsx(\n $style.formInputGroup,\n isCondensed && $style.isCondensed,\n isSecondary && $style.isSecondary\n )\"\n role=\"group\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { clsx } from 'clsx';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineProps<{\n readonly isSecondary?: boolean;\n readonly isCondensed?: boolean;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxFlyout\n ref=\"flyout\"\n :width=\"300\">\n <template #opener=\"{open}\">\n <FluxFormInputGroup>\n <FluxFormInput\n :=\"{autoComplete, autoFocus, error, isCondensed, isLoading, isReadonly, isSecondary, name, placeholder}\"\n v-model=\"localValue\"\n :class=\"$style.formDateInput\"\n :disabled=\"disabled\"\n :max=\"max?.toISO()?.substring(0, 10)\"\n :min=\"min?.toISO()?.substring(0, 10)\"\n type=\"date\"\n @blur=\"onBlur()\"\n @focus=\"onFocus()\"\n @show-picker=\"open\"/>\n\n <FluxSecondaryButton\n :disabled=\"disabled || isReadonly\"\n icon-leading=\"calendar\"\n @click.prevent=\"open\"/>\n </FluxFormInputGroup>\n </template>\n\n <FluxDatePicker\n v-model=\"localValue\"\n :max=\"max\"\n :min=\"min\"/>\n </FluxFlyout>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType, FluxFormInputBaseProps } from '@flux-ui/types';\n import type { DateTime } from 'luxon';\n import { toRef, useTemplateRef } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useDateFlyout } from '$flux/composable/private';\n import FluxDatePicker from './FluxDatePicker.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxFormInputGroup from './FluxFormInputGroup.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const emit = defineEmits<{\n blur: [];\n focus: [];\n }>();\n\n const modelValue = defineModel<DateTime | null>({\n default: null\n });\n\n const {\n disabled: componentDisabled\n } = defineProps<FluxFormInputBaseProps & {\n readonly autoComplete?: FluxAutoCompleteType;\n readonly max?: DateTime;\n readonly min?: DateTime;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const flyoutRef = useTemplateRef('flyout');\n\n const localValue = useDateFlyout(modelValue, flyoutRef, {\n compareKey: value => value?.toISODate()\n });\n\n function onBlur(): void {\n emit('blur');\n }\n\n function onFocus(): void {\n emit('focus');\n }\n</script>\n","<template>\n <FluxFlyout\n ref=\"flyout\"\n :width=\"300\">\n <template #opener=\"{open}\">\n <FluxFormInputGroup>\n <FluxFormInput\n :=\"{autoComplete, autoFocus, error, isCondensed, isLoading, isReadonly, isSecondary, name, placeholder}\"\n v-model=\"localValue\"\n :class=\"$style.formDateInput\"\n :disabled=\"disabled\"\n :max=\"max?.toISO()?.substring(0, 10)\"\n :min=\"min?.toISO()?.substring(0, 10)\"\n type=\"date\"\n @blur=\"onBlur()\"\n @focus=\"onFocus()\"\n @show-picker=\"open\"/>\n\n <FluxSecondaryButton\n :disabled=\"disabled || isReadonly\"\n icon-leading=\"calendar\"\n @click.prevent=\"open\"/>\n </FluxFormInputGroup>\n </template>\n\n <FluxDatePicker\n v-model=\"localValue\"\n :max=\"max\"\n :min=\"min\"/>\n </FluxFlyout>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType, FluxFormInputBaseProps } from '@flux-ui/types';\n import type { DateTime } from 'luxon';\n import { toRef, useTemplateRef } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useDateFlyout } from '$flux/composable/private';\n import FluxDatePicker from './FluxDatePicker.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxFormInputGroup from './FluxFormInputGroup.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const emit = defineEmits<{\n blur: [];\n focus: [];\n }>();\n\n const modelValue = defineModel<DateTime | null>({\n default: null\n });\n\n const {\n disabled: componentDisabled\n } = defineProps<FluxFormInputBaseProps & {\n readonly autoComplete?: FluxAutoCompleteType;\n readonly max?: DateTime;\n readonly min?: DateTime;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const flyoutRef = useTemplateRef('flyout');\n\n const localValue = useDateFlyout(modelValue, flyoutRef, {\n compareKey: value => value?.toISODate()\n });\n\n function onBlur(): void {\n emit('blur');\n }\n\n function onFocus(): void {\n emit('focus');\n }\n</script>\n","<template>\n <FluxFlyout\n ref=\"flyout\"\n :width=\"300\">\n <template #opener=\"{open}\">\n <FluxFormInputGroup\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"isReadonly ? true : undefined\"\n :aria-invalid=\"error ? true : undefined\">\n <div\n :class=\"clsx(\n $style.formDateRangeInput,\n disabled && $style.isDisabled,\n isCondensed && $style.isCondensed,\n isSecondary && $style.isSecondary,\n error && $style.isInvalid\n )\"\n role=\"presentation\">\n <span v-if=\"label\">{{ label }}</span>\n <span\n v-else-if=\"placeholder\"\n :class=\"$style.formSelectPlaceholder\">\n {{ placeholder }}\n </span>\n </div>\n\n <FluxSecondaryButton\n :disabled=\"disabled || isReadonly\"\n icon-leading=\"calendar\"\n @click.prevent=\"open\"/>\n </FluxFormInputGroup>\n </template>\n\n <FluxDatePicker\n v-model=\"localValue\"\n :max=\"max\"\n :min=\"min\"\n :range-mode=\"rangeMode\"/>\n </FluxFlyout>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormInputBaseProps } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import type { DateTime } from 'luxon';\n import { computed, toRef, unref, useTemplateRef } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useDateFlyout } from '$flux/composable/private';\n import { createLabelForDateRange } from '$flux/util';\n import FluxDatePicker from './FluxDatePicker.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxFormInputGroup from './FluxFormInputGroup.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<[DateTime, DateTime] | null>({\n required: true\n });\n\n const {\n disabled: componentDisabled,\n rangeMode = 'range'\n } = defineProps<FluxFormInputBaseProps & {\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly rangeMode?: 'range' | 'week' | 'month';\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const flyoutRef = useTemplateRef('flyout');\n\n const localValue = useDateFlyout(modelValue, flyoutRef);\n\n const label = computed(() => {\n const value = unref(localValue);\n\n if (!value) {\n return '';\n }\n\n const [start, end] = value;\n\n return createLabelForDateRange(start, end, true);\n });\n</script>\n","<template>\n <FluxFlyout\n ref=\"flyout\"\n :width=\"300\">\n <template #opener=\"{open}\">\n <FluxFormInputGroup\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"isReadonly ? true : undefined\"\n :aria-invalid=\"error ? true : undefined\">\n <div\n :class=\"clsx(\n $style.formDateRangeInput,\n disabled && $style.isDisabled,\n isCondensed && $style.isCondensed,\n isSecondary && $style.isSecondary,\n error && $style.isInvalid\n )\"\n role=\"presentation\">\n <span v-if=\"label\">{{ label }}</span>\n <span\n v-else-if=\"placeholder\"\n :class=\"$style.formSelectPlaceholder\">\n {{ placeholder }}\n </span>\n </div>\n\n <FluxSecondaryButton\n :disabled=\"disabled || isReadonly\"\n icon-leading=\"calendar\"\n @click.prevent=\"open\"/>\n </FluxFormInputGroup>\n </template>\n\n <FluxDatePicker\n v-model=\"localValue\"\n :max=\"max\"\n :min=\"min\"\n :range-mode=\"rangeMode\"/>\n </FluxFlyout>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormInputBaseProps } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import type { DateTime } from 'luxon';\n import { computed, toRef, unref, useTemplateRef } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useDateFlyout } from '$flux/composable/private';\n import { createLabelForDateRange } from '$flux/util';\n import FluxDatePicker from './FluxDatePicker.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxFormInputGroup from './FluxFormInputGroup.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<[DateTime, DateTime] | null>({\n required: true\n });\n\n const {\n disabled: componentDisabled,\n rangeMode = 'range'\n } = defineProps<FluxFormInputBaseProps & {\n readonly max?: DateTime;\n readonly min?: DateTime;\n readonly rangeMode?: 'range' | 'week' | 'month';\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const flyoutRef = useTemplateRef('flyout');\n\n const localValue = useDateFlyout(modelValue, flyoutRef);\n\n const label = computed(() => {\n const value = unref(localValue);\n\n if (!value) {\n return '';\n }\n\n const [start, end] = value;\n\n return createLabelForDateRange(start, end, true);\n });\n</script>\n","<template>\n <FluxStack\n :class=\"$style.formDateTimeInput\"\n direction=\"horizontal\"\n :gap=\"15\"\n :aria-disabled=\"disabled ? true : undefined\">\n <FluxFlyout\n ref=\"flyout\"\n :width=\"300\">\n <template #opener=\"{open}\">\n <FluxFormInputGroup>\n <FluxFormInput\n :=\"{autoFocus, error, isCondensed, isLoading, isReadonly, isSecondary, name, placeholder}\"\n :class=\"$style.formDateInput\"\n :disabled=\"disabled\"\n :model-value=\"localValue\"\n type=\"date\"\n @update:model-value=\"setDate\"\n @show-picker=\"open\"/>\n\n <FluxSecondaryButton\n :disabled=\"disabled || isReadonly\"\n icon-leading=\"calendar\"\n @click.prevent=\"open\"/>\n </FluxFormInputGroup>\n </template>\n\n <FluxDatePicker\n :max=\"max\"\n :min=\"min\"\n :model-value=\"localValue\"\n @update:model-value=\"setDate\"/>\n </FluxFlyout>\n\n <FluxFormInput\n :=\"{error, isCondensed, isLoading, isReadonly, isSecondary, placeholder}\"\n :class=\"$style.formTimeInput\"\n :disabled=\"disabled\"\n :name=\"name ? `${name}-time` : undefined\"\n type=\"time\"\n :model-value=\"localValue\"\n @update:model-value=\"setTime\"/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType, FluxFormInputBaseProps } from '@flux-ui/types';\n import { DateTime } from 'luxon';\n import { toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useDateFlyout } from '$flux/composable/private';\n import FluxDatePicker from './FluxDatePicker.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxFormInputGroup from './FluxFormInputGroup.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxStack from './FluxStack.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<DateTime | null>({\n required: true\n });\n\n const {\n disabled: componentDisabled,\n isHourOnly\n } = defineProps<FluxFormInputBaseProps & {\n readonly autoComplete?: FluxAutoCompleteType;\n readonly isHourOnly?: boolean;\n readonly max?: DateTime;\n readonly min?: DateTime;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const flyoutRef = useTemplateRef<{ close(): void; }>('flyout');\n\n const localValue = useDateFlyout(modelValue, flyoutRef, {\n compareKey: value => value?.toISO(),\n transformIn: value => isHourOnly ? value?.startOf('hour') ?? null : value\n });\n\n function setDate(dateTime: DateTime | object | string | number | null): void {\n if (!DateTime.isDateTime(dateTime)) {\n return;\n }\n\n const value: DateTime = (localValue.value ?? DateTime.now());\n localValue.value = value.set({\n day: dateTime.day,\n month: dateTime.month,\n year: dateTime.year\n });\n }\n\n function setTime(dateTime: DateTime | string | number | object | null): void {\n if (!DateTime.isDateTime(dateTime)) {\n return;\n }\n\n const value: DateTime = (localValue.value ?? DateTime.now());\n localValue.value = value.set({\n hour: dateTime.hour,\n minute: isHourOnly ? 0 : dateTime.minute,\n second: isHourOnly ? 0 : dateTime.second\n });\n }\n\n watch(() => isHourOnly, () => {\n if (!isHourOnly) {\n return;\n }\n\n localValue.value = unref(localValue)?.startOf('hour') ?? null;\n }, {immediate: true});\n</script>\n","<template>\n <FluxStack\n :class=\"$style.formDateTimeInput\"\n direction=\"horizontal\"\n :gap=\"15\"\n :aria-disabled=\"disabled ? true : undefined\">\n <FluxFlyout\n ref=\"flyout\"\n :width=\"300\">\n <template #opener=\"{open}\">\n <FluxFormInputGroup>\n <FluxFormInput\n :=\"{autoFocus, error, isCondensed, isLoading, isReadonly, isSecondary, name, placeholder}\"\n :class=\"$style.formDateInput\"\n :disabled=\"disabled\"\n :model-value=\"localValue\"\n type=\"date\"\n @update:model-value=\"setDate\"\n @show-picker=\"open\"/>\n\n <FluxSecondaryButton\n :disabled=\"disabled || isReadonly\"\n icon-leading=\"calendar\"\n @click.prevent=\"open\"/>\n </FluxFormInputGroup>\n </template>\n\n <FluxDatePicker\n :max=\"max\"\n :min=\"min\"\n :model-value=\"localValue\"\n @update:model-value=\"setDate\"/>\n </FluxFlyout>\n\n <FluxFormInput\n :=\"{error, isCondensed, isLoading, isReadonly, isSecondary, placeholder}\"\n :class=\"$style.formTimeInput\"\n :disabled=\"disabled\"\n :name=\"name ? `${name}-time` : undefined\"\n type=\"time\"\n :model-value=\"localValue\"\n @update:model-value=\"setTime\"/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType, FluxFormInputBaseProps } from '@flux-ui/types';\n import { DateTime } from 'luxon';\n import { toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useDateFlyout } from '$flux/composable/private';\n import FluxDatePicker from './FluxDatePicker.vue';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxFormInputGroup from './FluxFormInputGroup.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import FluxStack from './FluxStack.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<DateTime | null>({\n required: true\n });\n\n const {\n disabled: componentDisabled,\n isHourOnly\n } = defineProps<FluxFormInputBaseProps & {\n readonly autoComplete?: FluxAutoCompleteType;\n readonly isHourOnly?: boolean;\n readonly max?: DateTime;\n readonly min?: DateTime;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const flyoutRef = useTemplateRef<{ close(): void; }>('flyout');\n\n const localValue = useDateFlyout(modelValue, flyoutRef, {\n compareKey: value => value?.toISO(),\n transformIn: value => isHourOnly ? value?.startOf('hour') ?? null : value\n });\n\n function setDate(dateTime: DateTime | object | string | number | null): void {\n if (!DateTime.isDateTime(dateTime)) {\n return;\n }\n\n const value: DateTime = (localValue.value ?? DateTime.now());\n localValue.value = value.set({\n day: dateTime.day,\n month: dateTime.month,\n year: dateTime.year\n });\n }\n\n function setTime(dateTime: DateTime | string | number | object | null): void {\n if (!DateTime.isDateTime(dateTime)) {\n return;\n }\n\n const value: DateTime = (localValue.value ?? DateTime.now());\n localValue.value = value.set({\n hour: dateTime.hour,\n minute: isHourOnly ? 0 : dateTime.minute,\n second: isHourOnly ? 0 : dateTime.second\n });\n }\n\n watch(() => isHourOnly, () => {\n if (!isHourOnly) {\n return;\n }\n\n localValue.value = unref(localValue)?.startOf('hour') ?? null;\n }, {immediate: true});\n</script>\n","<template>\n <div\n :class=\"$style.formGrid\"\n :style=\"{\n '--columns': columns\n }\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineProps<{\n readonly columns?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.formGrid\"\n :style=\"{\n '--columns': columns\n }\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineProps<{\n readonly columns?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.formInputAddition\">\n <FluxIcon\n v-if=\"icon\"\n :name=\"icon\"\n :size=\"18\"/>\n\n <span v-if=\"label\">\n {{ label }}\n </span>\n\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxIconName } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineProps<{\n readonly icon?: FluxIconName;\n readonly label?: string;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.formInputAddition\">\n <FluxIcon\n v-if=\"icon\"\n :name=\"icon\"\n :size=\"18\"/>\n\n <span v-if=\"label\">\n {{ label }}\n </span>\n\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxIconName } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineProps<{\n readonly icon?: FluxIconName;\n readonly label?: string;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <fieldset\n :class=\"clsx(\n disabled ? $style.pinInputDisabled : $style.pinInputEnabled,\n error && $style.isInvalid\n )\"\n :id=\"id\"\n :name=\"name\"\n :style=\"{\n '--max-length': maxLength\n }\"\n :autofocus=\"autoFocus\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-invalid=\"error ? true : undefined\">\n <input\n v-for=\"field of maxLength\"\n :key=\"field\"\n ref=\"fields\"\n :class=\"$style.pinInputField\"\n maxlength=\"1\"\n :aria-label=\"translate('flux.pinDigit', {index: field, total: maxLength})\"\n :autocomplete=\"field === 1 ? autoComplete : undefined\"\n :autofocus=\"field === 1 && autoFocus\"\n :disabled=\"disabled\"\n :readonly=\"isReadonly\"\n :tabindex=\"(field - 1) === modelValue?.length ? 0 : -1\"\n :type=\"isPrivate ? 'password' : 'text'\"\n :value=\"modelValue[field - 1]\"\n @focus=\"onFocus\"\n @input=\"onInput\"\n @keydown=\"onKeyDown\"\n @paste=\"onPaste\"/>\n </fieldset>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType, FluxFormInputBaseProps } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { toRef, unref, useTemplateRef } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<string>({\n default: ''\n });\n\n const {\n autoComplete = 'one-time-code',\n autoFocus = false,\n disabled: componentDisabled,\n maxLength = 6\n } = defineProps<Pick<FluxFormInputBaseProps, 'autoFocus' | 'disabled' | 'error' | 'isLoading' | 'isReadonly' | 'name'> & {\n readonly autoComplete?: FluxAutoCompleteType;\n readonly isPrivate?: boolean;\n readonly maxLength?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n const translate = useTranslate();\n\n const fieldRefs = useTemplateRef<HTMLInputElement[]>('fields');\n\n function onFocus(evt: FocusEvent): void {\n const input = evt.target as HTMLInputElement;\n requestAnimationFrame(() => input.select());\n }\n\n function onInput(): void {\n const fields = unref(fieldRefs) ?? [];\n const values = fields\n .map(f => f.value.trim() === '' ? NaN : Number(f.value))\n .filter(v => !isNaN(v));\n\n modelValue.value = values.join('');\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n const input = evt.target as HTMLInputElement;\n const value = input.value.trim();\n\n const next = input.nextElementSibling as HTMLInputElement | null;\n const previous = input.previousElementSibling as HTMLInputElement | null;\n\n switch (evt.key) {\n case 'Backspace':\n value === '' && previous?.focus();\n break;\n\n case 'ArrowLeft':\n case 'ArrowUp':\n input.selectionStart === 0 && previous?.select();\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n (input.selectionStart === 1 || value === '') && next?.select();\n break;\n\n case 'Tab':\n break;\n\n case 'v':\n if (evt.ctrlKey || evt.metaKey) {\n break;\n }\n\n evt.preventDefault();\n break;\n\n default:\n if (isNaN(Number(evt.key))) {\n evt.preventDefault();\n break;\n }\n\n requestAnimationFrame(() => next?.focus());\n break;\n }\n }\n\n function onPaste(evt: ClipboardEvent): void {\n if (!evt.clipboardData) {\n return;\n }\n\n const value = evt.clipboardData.getData('text').replace(/\\D/g, '');\n\n if (value.length !== maxLength) {\n return;\n }\n\n modelValue.value = value;\n\n requestAnimationFrame(() => {\n const fields = unref(fieldRefs) ?? [];\n fields[maxLength - 1].focus();\n });\n }\n</script>\n","<template>\n <fieldset\n :class=\"clsx(\n disabled ? $style.pinInputDisabled : $style.pinInputEnabled,\n error && $style.isInvalid\n )\"\n :id=\"id\"\n :name=\"name\"\n :style=\"{\n '--max-length': maxLength\n }\"\n :autofocus=\"autoFocus\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-invalid=\"error ? true : undefined\">\n <input\n v-for=\"field of maxLength\"\n :key=\"field\"\n ref=\"fields\"\n :class=\"$style.pinInputField\"\n maxlength=\"1\"\n :aria-label=\"translate('flux.pinDigit', {index: field, total: maxLength})\"\n :autocomplete=\"field === 1 ? autoComplete : undefined\"\n :autofocus=\"field === 1 && autoFocus\"\n :disabled=\"disabled\"\n :readonly=\"isReadonly\"\n :tabindex=\"(field - 1) === modelValue?.length ? 0 : -1\"\n :type=\"isPrivate ? 'password' : 'text'\"\n :value=\"modelValue[field - 1]\"\n @focus=\"onFocus\"\n @input=\"onInput\"\n @keydown=\"onKeyDown\"\n @paste=\"onPaste\"/>\n </fieldset>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType, FluxFormInputBaseProps } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { toRef, unref, useTemplateRef } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<string>({\n default: ''\n });\n\n const {\n autoComplete = 'one-time-code',\n autoFocus = false,\n disabled: componentDisabled,\n maxLength = 6\n } = defineProps<Pick<FluxFormInputBaseProps, 'autoFocus' | 'disabled' | 'error' | 'isLoading' | 'isReadonly' | 'name'> & {\n readonly autoComplete?: FluxAutoCompleteType;\n readonly isPrivate?: boolean;\n readonly maxLength?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n const translate = useTranslate();\n\n const fieldRefs = useTemplateRef<HTMLInputElement[]>('fields');\n\n function onFocus(evt: FocusEvent): void {\n const input = evt.target as HTMLInputElement;\n requestAnimationFrame(() => input.select());\n }\n\n function onInput(): void {\n const fields = unref(fieldRefs) ?? [];\n const values = fields\n .map(f => f.value.trim() === '' ? NaN : Number(f.value))\n .filter(v => !isNaN(v));\n\n modelValue.value = values.join('');\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n const input = evt.target as HTMLInputElement;\n const value = input.value.trim();\n\n const next = input.nextElementSibling as HTMLInputElement | null;\n const previous = input.previousElementSibling as HTMLInputElement | null;\n\n switch (evt.key) {\n case 'Backspace':\n value === '' && previous?.focus();\n break;\n\n case 'ArrowLeft':\n case 'ArrowUp':\n input.selectionStart === 0 && previous?.select();\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n (input.selectionStart === 1 || value === '') && next?.select();\n break;\n\n case 'Tab':\n break;\n\n case 'v':\n if (evt.ctrlKey || evt.metaKey) {\n break;\n }\n\n evt.preventDefault();\n break;\n\n default:\n if (isNaN(Number(evt.key))) {\n evt.preventDefault();\n break;\n }\n\n requestAnimationFrame(() => next?.focus());\n break;\n }\n }\n\n function onPaste(evt: ClipboardEvent): void {\n if (!evt.clipboardData) {\n return;\n }\n\n const value = evt.clipboardData.getData('text').replace(/\\D/g, '');\n\n if (value.length !== maxLength) {\n return;\n }\n\n modelValue.value = value;\n\n requestAnimationFrame(() => {\n const fields = unref(fieldRefs) ?? [];\n fields[maxLength - 1].focus();\n });\n }\n</script>\n","<template>\n <SliderBase\n :disabled=\"disabled\"\n :is-dragging=\"isDraggingLower || isDraggingUpper\"\n :is-ticks-visible=\"isTicksVisible\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n @dragging=\"onDragging\"\n @update=\"onUpdate\">\n <SliderTrack\n :percentage-lower=\"percentageLower\"\n :percentage-upper=\"percentageUpper\">\n <SliderThumb\n ref=\"lowerThumb\"\n :aria-label=\"translate('flux.lowerBound')\"\n :aria-valuemax=\"max\"\n :aria-valuemin=\"min\"\n :aria-valuenow=\"modelValue[0]\"\n :disabled=\"disabled\"\n :is-dragging=\"isDraggingLower\"\n :position=\"percentageLower\"\n @grab=\"!disabled && (isDraggingLower = true)\"\n @decrement=\"onDecrement('lower')\"\n @increment=\"onIncrement('lower')\"/>\n\n <SliderThumb\n ref=\"upperThumb\"\n :aria-label=\"translate('flux.upperBound')\"\n :aria-valuemax=\"max\"\n :aria-valuemin=\"min\"\n :aria-valuenow=\"modelValue[1]\"\n :disabled=\"disabled\"\n :is-dragging=\"isDraggingUpper\"\n :position=\"percentageUpper\"\n @grab=\"!disabled && (isDraggingUpper = true)\"\n @decrement=\"onDecrement('upper')\"\n @increment=\"onIncrement('upper')\"/>\n </SliderTrack>\n </SliderBase>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clampWithStepPrecision, countDecimals, formatNumber } from '@basmilius/utils';\n import type { FluxFormInputBaseProps } from '@flux-ui/types';\n import { computed, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import { addTooltip, removeTooltip, updateTooltip } from '$flux/data';\n import { SliderBase, SliderThumb, SliderTrack } from './primitive';\n\n const modelValue = defineModel<[number, number]>({\n required: true\n });\n\n const {\n formatter = formatNumber,\n disabled: componentDisabled,\n isTooltipDisabled,\n max = 100,\n min = 0,\n step = 1\n } = defineProps<Pick<FluxFormInputBaseProps, 'disabled' | 'error' | 'isLoading' | 'isReadonly' | 'name'> & {\n formatter?(value: number, decimals?: number): string;\n\n readonly isTicksVisible?: boolean;\n readonly isTooltipDisabled?: boolean;\n readonly max?: number;\n readonly min?: number;\n readonly step?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const lowerThumbRef = useTemplateRef('lowerThumb');\n const upperThumbRef = useTemplateRef('upperThumb');\n const translate = useTranslate();\n\n const isDraggingLower = ref(false);\n const isDraggingUpper = ref(false);\n const percentageLower = ref(0);\n const percentageUpper = ref(0);\n const lowerValue = ref(0);\n const upperValue = ref(0);\n const tooltipId = ref<number | null>(null);\n\n const tooltipContent = computed(() => formatter(modelValue.value[isDraggingLower.value ? 0 : 1], countDecimals(step)));\n\n function onDragging(is: boolean): void {\n if (is) {\n return;\n }\n\n isDraggingLower.value = is;\n isDraggingUpper.value = is;\n }\n\n function onUpdate(value: number): void {\n let lower = clampWithStepPrecision(lowerValue.value, min, max, step);\n let upper = clampWithStepPrecision(upperValue.value, min, max, step);\n\n if (isDraggingLower.value) {\n lower = clampWithStepPrecision(value, min, max, step);\n }\n\n if (isDraggingUpper.value) {\n upper = clampWithStepPrecision(value, min, max, step);\n }\n\n if (lower >= upper) {\n return;\n }\n\n if (tooltipId.value) {\n updateTooltip(tooltipId.value, {\n content: unref(tooltipContent),\n origin: unref(isDraggingLower.value ? lowerThumbRef : upperThumbRef)?.$el\n });\n }\n\n lowerValue.value = (lower - min) / (max - min);\n upperValue.value = (upper - min) / (max - min);\n }\n\n function onDecrement(which: 'lower' | 'upper'): void {\n let lower = clampWithStepPrecision(lowerValue.value, min, max, step);\n let upper = clampWithStepPrecision(upperValue.value, min, max, step);\n\n if (which === 'lower') {\n lower = Math.max(min, lower - step);\n } else {\n upper = Math.max(min, upper - step);\n }\n\n if (lower >= upper) {\n return;\n }\n\n modelValue.value = [lower, upper];\n }\n\n function onIncrement(which: 'lower' | 'upper'): void {\n let lower = clampWithStepPrecision(lowerValue.value, min, max, step);\n let upper = clampWithStepPrecision(upperValue.value, min, max, step);\n\n if (which === 'lower') {\n lower = Math.min(max, lower + step);\n } else {\n upper = Math.min(max, upper + step);\n }\n\n if (lower >= upper) {\n return;\n }\n\n modelValue.value = [lower, upper];\n }\n\n watch(modelValue, modelValue => {\n lowerValue.value = (modelValue[0] - min) / (max - min);\n upperValue.value = (modelValue[1] - min) / (max - min);\n }, {immediate: true});\n\n watch(([() => max, () => min, () => step, lowerValue, upperValue]), () => {\n const lower = clampWithStepPrecision(unref(lowerValue), min, max, step);\n const upper = clampWithStepPrecision(unref(upperValue), min, max, step);\n\n percentageLower.value = (lower - min) / (max - min);\n percentageUpper.value = (upper - min) / (max - min);\n\n modelValue.value = [lower, upper];\n }, {immediate: true});\n\n watch(([isDraggingLower, isDraggingUpper]), ([isDraggingLower, isDraggingUpper]) => {\n const is = isDraggingLower || isDraggingUpper;\n\n if (is && !tooltipId.value && !isTooltipDisabled) {\n tooltipId.value = addTooltip({\n content: unref(tooltipContent),\n direction: 'vertical',\n origin: unref(isDraggingLower ? lowerThumbRef : upperThumbRef)?.$el\n });\n } else if (!is && tooltipId.value) {\n removeTooltip(tooltipId.value);\n tooltipId.value = null;\n }\n });\n</script>\n","<template>\n <SliderBase\n :disabled=\"disabled\"\n :is-dragging=\"isDraggingLower || isDraggingUpper\"\n :is-ticks-visible=\"isTicksVisible\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"\n @dragging=\"onDragging\"\n @update=\"onUpdate\">\n <SliderTrack\n :percentage-lower=\"percentageLower\"\n :percentage-upper=\"percentageUpper\">\n <SliderThumb\n ref=\"lowerThumb\"\n :aria-label=\"translate('flux.lowerBound')\"\n :aria-valuemax=\"max\"\n :aria-valuemin=\"min\"\n :aria-valuenow=\"modelValue[0]\"\n :disabled=\"disabled\"\n :is-dragging=\"isDraggingLower\"\n :position=\"percentageLower\"\n @grab=\"!disabled && (isDraggingLower = true)\"\n @decrement=\"onDecrement('lower')\"\n @increment=\"onIncrement('lower')\"/>\n\n <SliderThumb\n ref=\"upperThumb\"\n :aria-label=\"translate('flux.upperBound')\"\n :aria-valuemax=\"max\"\n :aria-valuemin=\"min\"\n :aria-valuenow=\"modelValue[1]\"\n :disabled=\"disabled\"\n :is-dragging=\"isDraggingUpper\"\n :position=\"percentageUpper\"\n @grab=\"!disabled && (isDraggingUpper = true)\"\n @decrement=\"onDecrement('upper')\"\n @increment=\"onIncrement('upper')\"/>\n </SliderTrack>\n </SliderBase>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clampWithStepPrecision, countDecimals, formatNumber } from '@basmilius/utils';\n import type { FluxFormInputBaseProps } from '@flux-ui/types';\n import { computed, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import { addTooltip, removeTooltip, updateTooltip } from '$flux/data';\n import { SliderBase, SliderThumb, SliderTrack } from './primitive';\n\n const modelValue = defineModel<[number, number]>({\n required: true\n });\n\n const {\n formatter = formatNumber,\n disabled: componentDisabled,\n isTooltipDisabled,\n max = 100,\n min = 0,\n step = 1\n } = defineProps<Pick<FluxFormInputBaseProps, 'disabled' | 'error' | 'isLoading' | 'isReadonly' | 'name'> & {\n formatter?(value: number, decimals?: number): string;\n\n readonly isTicksVisible?: boolean;\n readonly isTooltipDisabled?: boolean;\n readonly max?: number;\n readonly min?: number;\n readonly step?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const lowerThumbRef = useTemplateRef('lowerThumb');\n const upperThumbRef = useTemplateRef('upperThumb');\n const translate = useTranslate();\n\n const isDraggingLower = ref(false);\n const isDraggingUpper = ref(false);\n const percentageLower = ref(0);\n const percentageUpper = ref(0);\n const lowerValue = ref(0);\n const upperValue = ref(0);\n const tooltipId = ref<number | null>(null);\n\n const tooltipContent = computed(() => formatter(modelValue.value[isDraggingLower.value ? 0 : 1], countDecimals(step)));\n\n function onDragging(is: boolean): void {\n if (is) {\n return;\n }\n\n isDraggingLower.value = is;\n isDraggingUpper.value = is;\n }\n\n function onUpdate(value: number): void {\n let lower = clampWithStepPrecision(lowerValue.value, min, max, step);\n let upper = clampWithStepPrecision(upperValue.value, min, max, step);\n\n if (isDraggingLower.value) {\n lower = clampWithStepPrecision(value, min, max, step);\n }\n\n if (isDraggingUpper.value) {\n upper = clampWithStepPrecision(value, min, max, step);\n }\n\n if (lower >= upper) {\n return;\n }\n\n if (tooltipId.value) {\n updateTooltip(tooltipId.value, {\n content: unref(tooltipContent),\n origin: unref(isDraggingLower.value ? lowerThumbRef : upperThumbRef)?.$el\n });\n }\n\n lowerValue.value = (lower - min) / (max - min);\n upperValue.value = (upper - min) / (max - min);\n }\n\n function onDecrement(which: 'lower' | 'upper'): void {\n let lower = clampWithStepPrecision(lowerValue.value, min, max, step);\n let upper = clampWithStepPrecision(upperValue.value, min, max, step);\n\n if (which === 'lower') {\n lower = Math.max(min, lower - step);\n } else {\n upper = Math.max(min, upper - step);\n }\n\n if (lower >= upper) {\n return;\n }\n\n modelValue.value = [lower, upper];\n }\n\n function onIncrement(which: 'lower' | 'upper'): void {\n let lower = clampWithStepPrecision(lowerValue.value, min, max, step);\n let upper = clampWithStepPrecision(upperValue.value, min, max, step);\n\n if (which === 'lower') {\n lower = Math.min(max, lower + step);\n } else {\n upper = Math.min(max, upper + step);\n }\n\n if (lower >= upper) {\n return;\n }\n\n modelValue.value = [lower, upper];\n }\n\n watch(modelValue, modelValue => {\n lowerValue.value = (modelValue[0] - min) / (max - min);\n upperValue.value = (modelValue[1] - min) / (max - min);\n }, {immediate: true});\n\n watch(([() => max, () => min, () => step, lowerValue, upperValue]), () => {\n const lower = clampWithStepPrecision(unref(lowerValue), min, max, step);\n const upper = clampWithStepPrecision(unref(upperValue), min, max, step);\n\n percentageLower.value = (lower - min) / (max - min);\n percentageUpper.value = (upper - min) / (max - min);\n\n modelValue.value = [lower, upper];\n }, {immediate: true});\n\n watch(([isDraggingLower, isDraggingUpper]), ([isDraggingLower, isDraggingUpper]) => {\n const is = isDraggingLower || isDraggingUpper;\n\n if (is && !tooltipId.value && !isTooltipDisabled) {\n tooltipId.value = addTooltip({\n content: unref(tooltipContent),\n direction: 'vertical',\n origin: unref(isDraggingLower ? lowerThumbRef : upperThumbRef)?.$el\n });\n } else if (!is && tooltipId.value) {\n removeTooltip(tooltipId.value);\n tooltipId.value = null;\n }\n });\n</script>\n","<template>\n <div :class=\"$style.formRow\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.formRow\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.formSection\">\n <h3 :class=\"$style.formSectionTitle\">\n {{ title }}\n </h3>\n\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineProps<{\n readonly title: string;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.formSection\">\n <h3 :class=\"$style.formSectionTitle\">\n {{ title }}\n </h3>\n\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n defineProps<{\n readonly title: string;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <SelectBase\n v-model:search-query=\"modelSearch\"\n :aria-invalid=\"error ? true : undefined\"\n :class=\"clsx(\n isCondensed && $formStyle.isCondensed,\n isSecondary && $formStyle.isSecondary,\n error && $formStyle.isInvalid\n )\"\n :disabled=\"disabled\"\n :is-loading=\"isLoading || isFetchingLoading\"\n :is-multiple=\"isMultiple\"\n is-searchable\n :options=\"groups\"\n :placeholder=\"placeholder\"\n :selected=\"selected\"\n @deselect=\"onDeselect\"\n @open=\"onOpen()\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useDebouncedRef, useLoaded } from '@basmilius/common';\n import type { FluxFormInputBaseProps, FluxFormSelectEntry, FluxFormSelectValue, FluxFormSelectValueSingle } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, type Ref, ref, toRef, unref, watch } from 'vue';\n import { SelectBase } from '$flux/component/primitive';\n import { useDisabled } from '$flux/composable';\n import { useFormSelect } from '$flux/composable/private';\n import { isFluxFormSelectOption } from '$flux/data';\n import $formStyle from '$flux/css/component/Form.module.scss';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const modelValue = defineModel<FluxFormSelectValue>({\n required: true\n });\n\n const {\n fetchOptions: fetchOptionsProp,\n fetchRelevant: fetchRelevantProp,\n fetchSearch: fetchSearchProp,\n disabled: componentDisabled,\n isMultiple\n } = defineProps<Pick<FluxFormInputBaseProps, 'autoFocus' | 'disabled' | 'error' | 'isCondensed' | 'isLoading' | 'isReadonly' | 'isSecondary' | 'name' | 'placeholder'> & {\n fetchOptions(ids: FluxFormSelectValueSingle[]): Promise<FluxFormSelectEntry[]>;\n fetchRelevant(): Promise<FluxFormSelectEntry[]>;\n fetchSearch(searchQuery: string): Promise<FluxFormSelectEntry[]>;\n\n readonly isMultiple?: boolean;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const selectedOptions = ref<FluxFormSelectEntry[]>([]);\n const visibleOptions = ref<FluxFormSelectEntry[]>([]);\n\n const options = computed(() => {\n const options: FluxFormSelectEntry[] = [];\n const search = unref(modelSearch);\n const selected = unref(selectedOptions);\n const visible = unref(visibleOptions);\n\n visible.forEach(vo => options.push(vo));\n\n selected.forEach(so => {\n if (isFluxFormSelectOption(so) && visible.find(vo => isFluxFormSelectOption(vo) && vo.value === so.value)) {\n return;\n }\n\n if (isFluxFormSelectOption(so) && !so.label.toLowerCase().includes(search.toLowerCase())) {\n return;\n }\n\n options.push(so);\n });\n\n return options;\n });\n\n const {groups, selected, values} = useFormSelect(modelValue, isMultiple, options);\n const {isLoading: isFetchingLoading, loaded} = useLoaded();\n const debouncedModelSearch = useDebouncedRef(modelSearch, 300) as unknown as Ref<string>;\n const fetchOptions = computed(() => loaded(fetchOptionsProp));\n const fetchRelevant = computed(() => loaded(fetchRelevantProp));\n const fetchSearch = computed(() => loaded(fetchSearchProp));\n\n function onDeselect(id: string | number | null): void {\n if (isMultiple) {\n modelValue.value = unref(values).filter(v => v !== id);\n }\n }\n\n async function onOpen(): Promise<void> {\n visibleOptions.value = await unref(fetchRelevant)();\n }\n\n function onSelect(id: string | number | null): void {\n if (isMultiple) {\n modelValue.value = [...unref(values), id];\n } else {\n modelValue.value = id;\n }\n }\n\n watch(values, async values => {\n if (values.length === 0) {\n return;\n }\n\n selectedOptions.value = await unref(fetchOptions)(values);\n }, {immediate: true});\n\n watch(debouncedModelSearch, async searchQuery => {\n if (searchQuery.length > 0) {\n visibleOptions.value = await unref(fetchSearch)(searchQuery);\n } else {\n visibleOptions.value = await unref(fetchRelevant)();\n }\n });\n</script>\n","<template>\n <SelectBase\n v-model:search-query=\"modelSearch\"\n :aria-invalid=\"error ? true : undefined\"\n :class=\"clsx(\n isCondensed && $formStyle.isCondensed,\n isSecondary && $formStyle.isSecondary,\n error && $formStyle.isInvalid\n )\"\n :disabled=\"disabled\"\n :is-loading=\"isLoading || isFetchingLoading\"\n :is-multiple=\"isMultiple\"\n is-searchable\n :options=\"groups\"\n :placeholder=\"placeholder\"\n :selected=\"selected\"\n @deselect=\"onDeselect\"\n @open=\"onOpen()\"\n @select=\"onSelect\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useDebouncedRef, useLoaded } from '@basmilius/common';\n import type { FluxFormInputBaseProps, FluxFormSelectEntry, FluxFormSelectValue, FluxFormSelectValueSingle } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, type Ref, ref, toRef, unref, watch } from 'vue';\n import { SelectBase } from '$flux/component/primitive';\n import { useDisabled } from '$flux/composable';\n import { useFormSelect } from '$flux/composable/private';\n import { isFluxFormSelectOption } from '$flux/data';\n import $formStyle from '$flux/css/component/Form.module.scss';\n\n const modelSearch = defineModel<string>('searchQuery', {\n default: ''\n });\n\n const modelValue = defineModel<FluxFormSelectValue>({\n required: true\n });\n\n const {\n fetchOptions: fetchOptionsProp,\n fetchRelevant: fetchRelevantProp,\n fetchSearch: fetchSearchProp,\n disabled: componentDisabled,\n isMultiple\n } = defineProps<Pick<FluxFormInputBaseProps, 'autoFocus' | 'disabled' | 'error' | 'isCondensed' | 'isLoading' | 'isReadonly' | 'isSecondary' | 'name' | 'placeholder'> & {\n fetchOptions(ids: FluxFormSelectValueSingle[]): Promise<FluxFormSelectEntry[]>;\n fetchRelevant(): Promise<FluxFormSelectEntry[]>;\n fetchSearch(searchQuery: string): Promise<FluxFormSelectEntry[]>;\n\n readonly isMultiple?: boolean;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const selectedOptions = ref<FluxFormSelectEntry[]>([]);\n const visibleOptions = ref<FluxFormSelectEntry[]>([]);\n\n const options = computed(() => {\n const options: FluxFormSelectEntry[] = [];\n const search = unref(modelSearch);\n const selected = unref(selectedOptions);\n const visible = unref(visibleOptions);\n\n visible.forEach(vo => options.push(vo));\n\n selected.forEach(so => {\n if (isFluxFormSelectOption(so) && visible.find(vo => isFluxFormSelectOption(vo) && vo.value === so.value)) {\n return;\n }\n\n if (isFluxFormSelectOption(so) && !so.label.toLowerCase().includes(search.toLowerCase())) {\n return;\n }\n\n options.push(so);\n });\n\n return options;\n });\n\n const {groups, selected, values} = useFormSelect(modelValue, isMultiple, options);\n const {isLoading: isFetchingLoading, loaded} = useLoaded();\n const debouncedModelSearch = useDebouncedRef(modelSearch, 300) as unknown as Ref<string>;\n const fetchOptions = computed(() => loaded(fetchOptionsProp));\n const fetchRelevant = computed(() => loaded(fetchRelevantProp));\n const fetchSearch = computed(() => loaded(fetchSearchProp));\n\n function onDeselect(id: string | number | null): void {\n if (isMultiple) {\n modelValue.value = unref(values).filter(v => v !== id);\n }\n }\n\n async function onOpen(): Promise<void> {\n visibleOptions.value = await unref(fetchRelevant)();\n }\n\n function onSelect(id: string | number | null): void {\n if (isMultiple) {\n modelValue.value = [...unref(values), id];\n } else {\n modelValue.value = id;\n }\n }\n\n watch(values, async values => {\n if (values.length === 0) {\n return;\n }\n\n selectedOptions.value = await unref(fetchOptions)(values);\n }, {immediate: true});\n\n watch(debouncedModelSearch, async searchQuery => {\n if (searchQuery.length > 0) {\n visibleOptions.value = await unref(fetchSearch)(searchQuery);\n } else {\n visibleOptions.value = await unref(fetchRelevant)();\n }\n });\n</script>\n","<template>\n <textarea\n v-model=\"modelValue\"\n ref=\"input\"\n :class=\"clsx(\n disabled ? $style.formTextAreaDisabled : $style.formTextAreaEnabled,\n isCondensed && $style.isCondensed,\n isSecondary && $style.isSecondary,\n error && $style.isInvalid\n )\"\n :id=\"id\"\n :name=\"name\"\n :autocomplete=\"autoComplete\"\n :autofocus=\"autoFocus\"\n :disabled=\"disabled\"\n :readonly=\"isReadonly\"\n :maxlength=\"maxLength\"\n :placeholder=\"placeholder\"\n :style=\"{\n '--rows': rows\n }\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"isReadonly || undefined\"\n :aria-invalid=\"error ? true : undefined\"\n @blur=\"emit('blur')\"\n @focus=\"emit('focus')\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType, FluxFormInputBaseProps } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { toRef } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import $style from '$flux/css/component/Form.module.scss';\n\n const emit = defineEmits<{\n blur: [];\n focus: [];\n }>();\n\n const modelValue = defineModel<string>({\n default: ''\n });\n\n const {\n autoFocus = false,\n disabled: componentDisabled,\n rows = 3\n } = defineProps<FluxFormInputBaseProps & {\n readonly autoComplete?: FluxAutoCompleteType;\n readonly maxLength?: number;\n readonly rows?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n</script>\n","<template>\n <textarea\n v-model=\"modelValue\"\n ref=\"input\"\n :class=\"clsx(\n disabled ? $style.formTextAreaDisabled : $style.formTextAreaEnabled,\n isCondensed && $style.isCondensed,\n isSecondary && $style.isSecondary,\n error && $style.isInvalid\n )\"\n :id=\"id\"\n :name=\"name\"\n :autocomplete=\"autoComplete\"\n :autofocus=\"autoFocus\"\n :disabled=\"disabled\"\n :readonly=\"isReadonly\"\n :maxlength=\"maxLength\"\n :placeholder=\"placeholder\"\n :style=\"{\n '--rows': rows\n }\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"isReadonly || undefined\"\n :aria-invalid=\"error ? true : undefined\"\n @blur=\"emit('blur')\"\n @focus=\"emit('focus')\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAutoCompleteType, FluxFormInputBaseProps } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { toRef } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import $style from '$flux/css/component/Form.module.scss';\n\n const emit = defineEmits<{\n blur: [];\n focus: [];\n }>();\n\n const modelValue = defineModel<string>({\n default: ''\n });\n\n const {\n autoFocus = false,\n disabled: componentDisabled,\n rows = 3\n } = defineProps<FluxFormInputBaseProps & {\n readonly autoComplete?: FluxAutoCompleteType;\n readonly maxLength?: number;\n readonly rows?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n</script>\n","import type { FluxTranslation } from './i18n';\n\nexport const TIME_ZONES: readonly string[] = [\n 'Africa/Abidjan',\n 'Africa/Accra',\n 'Africa/Addis_Ababa',\n 'Africa/Algiers',\n 'Africa/Asmara',\n 'Africa/Asmera',\n 'Africa/Bamako',\n 'Africa/Bangui',\n 'Africa/Banjul',\n 'Africa/Bissau',\n 'Africa/Blantyre',\n 'Africa/Brazzaville',\n 'Africa/Bujumbura',\n 'Africa/Cairo',\n 'Africa/Casablanca',\n 'Africa/Ceuta',\n 'Africa/Conakry',\n 'Africa/Dakar',\n 'Africa/Dar_es_Salaam',\n 'Africa/Djibouti',\n 'Africa/Douala',\n 'Africa/El_Aaiun',\n 'Africa/Freetown',\n 'Africa/Gaborone',\n 'Africa/Harare',\n 'Africa/Johannesburg',\n 'Africa/Juba',\n 'Africa/Kampala',\n 'Africa/Khartoum',\n 'Africa/Kigali',\n 'Africa/Kinshasa',\n 'Africa/Lagos',\n 'Africa/Libreville',\n 'Africa/Lome',\n 'Africa/Luanda',\n 'Africa/Lubumbashi',\n 'Africa/Lusaka',\n 'Africa/Malabo',\n 'Africa/Maputo',\n 'Africa/Maseru',\n 'Africa/Mbabane',\n 'Africa/Mogadishu',\n 'Africa/Monrovia',\n 'Africa/Nairobi',\n 'Africa/Ndjamena',\n 'Africa/Niamey',\n 'Africa/Nouakchott',\n 'Africa/Ouagadougou',\n 'Africa/Porto-Novo',\n 'Africa/Sao_Tome',\n 'Africa/Timbuktu',\n 'Africa/Tripoli',\n 'Africa/Tunis',\n 'Africa/Windhoek',\n 'America/Adak',\n 'America/Anchorage',\n 'America/Anguilla',\n 'America/Antigua',\n 'America/Araguaina',\n 'America/Argentina/Buenos_Aires',\n 'America/Argentina/Catamarca',\n 'America/Argentina/ComodRivadavia',\n 'America/Argentina/Cordoba',\n 'America/Argentina/Jujuy',\n 'America/Argentina/La_Rioja',\n 'America/Argentina/Mendoza',\n 'America/Argentina/Rio_Gallegos',\n 'America/Argentina/Salta',\n 'America/Argentina/San_Juan',\n 'America/Argentina/San_Luis',\n 'America/Argentina/Tucuman',\n 'America/Argentina/Ushuaia',\n 'America/Aruba',\n 'America/Asuncion',\n 'America/Atikokan',\n 'America/Atka',\n 'America/Bahia',\n 'America/Bahia_Banderas',\n 'America/Barbados',\n 'America/Belem',\n 'America/Belize',\n 'America/Blanc-Sablon',\n 'America/Boa_Vista',\n 'America/Bogota',\n 'America/Boise',\n 'America/Buenos_Aires',\n 'America/Cambridge_Bay',\n 'America/Campo_Grande',\n 'America/Cancun',\n 'America/Caracas',\n 'America/Catamarca',\n 'America/Cayenne',\n 'America/Cayman',\n 'America/Chicago',\n 'America/Chihuahua',\n 'America/Ciudad_Juarez',\n 'America/Coral_Harbour',\n 'America/Cordoba',\n 'America/Costa_Rica',\n 'America/Creston',\n 'America/Cuiaba',\n 'America/Curacao',\n 'America/Danmarkshavn',\n 'America/Dawson',\n 'America/Dawson_Creek',\n 'America/Denver',\n 'America/Detroit',\n 'America/Dominica',\n 'America/Edmonton',\n 'America/Eirunepe',\n 'America/El_Salvador',\n 'America/Ensenada',\n 'America/Fort_Nelson',\n 'America/Fort_Wayne',\n 'America/Fortaleza',\n 'America/Glace_Bay',\n 'America/Godthab',\n 'America/Goose_Bay',\n 'America/Grand_Turk',\n 'America/Grenada',\n 'America/Guadeloupe',\n 'America/Guatemala',\n 'America/Guayaquil',\n 'America/Guyana',\n 'America/Halifax',\n 'America/Havana',\n 'America/Hermosillo',\n 'America/Indiana/Indianapolis',\n 'America/Indiana/Knox',\n 'America/Indiana/Marengo',\n 'America/Indiana/Petersburg',\n 'America/Indiana/Tell_City',\n 'America/Indiana/Vevay',\n 'America/Indiana/Vincennes',\n 'America/Indiana/Winamac',\n 'America/Indianapolis',\n 'America/Inuvik',\n 'America/Iqaluit',\n 'America/Jamaica',\n 'America/Jujuy',\n 'America/Juneau',\n 'America/Kentucky/Louisville',\n 'America/Kentucky/Monticello',\n 'America/Knox_IN',\n 'America/Kralendijk',\n 'America/La_Paz',\n 'America/Lima',\n 'America/Los_Angeles',\n 'America/Louisville',\n 'America/Lower_Princes',\n 'America/Maceio',\n 'America/Managua',\n 'America/Manaus',\n 'America/Marigot',\n 'America/Martinique',\n 'America/Matamoros',\n 'America/Mazatlan',\n 'America/Mendoza',\n 'America/Menominee',\n 'America/Merida',\n 'America/Metlakatla',\n 'America/Mexico_City',\n 'America/Miquelon',\n 'America/Moncton',\n 'America/Monterrey',\n 'America/Montevideo',\n 'America/Montreal',\n 'America/Montserrat',\n 'America/Nassau',\n 'America/New_York',\n 'America/Nipigon',\n 'America/Nome',\n 'America/Noronha',\n 'America/North_Dakota/Beulah',\n 'America/North_Dakota/Center',\n 'America/North_Dakota/New_Salem',\n 'America/Nuuk',\n 'America/Ojinaga',\n 'America/Panama',\n 'America/Pangnirtung',\n 'America/Paramaribo',\n 'America/Phoenix',\n 'America/Port-au-Prince',\n 'America/Port_of_Spain',\n 'America/Porto_Acre',\n 'America/Porto_Velho',\n 'America/Puerto_Rico',\n 'America/Punta_Arenas',\n 'America/Rainy_River',\n 'America/Rankin_Inlet',\n 'America/Recife',\n 'America/Regina',\n 'America/Resolute',\n 'America/Rio_Branco',\n 'America/Rosario',\n 'America/Santa_Isabel',\n 'America/Santarem',\n 'America/Santiago',\n 'America/Santo_Domingo',\n 'America/Sao_Paulo',\n 'America/Scoresbysund',\n 'America/Shiprock',\n 'America/Sitka',\n 'America/St_Barthelemy',\n 'America/St_Johns',\n 'America/St_Kitts',\n 'America/St_Lucia',\n 'America/St_Thomas',\n 'America/St_Vincent',\n 'America/Swift_Current',\n 'America/Tegucigalpa',\n 'America/Thule',\n 'America/Thunder_Bay',\n 'America/Tijuana',\n 'America/Toronto',\n 'America/Tortola',\n 'America/Vancouver',\n 'America/Virgin',\n 'America/Whitehorse',\n 'America/Winnipeg',\n 'America/Yakutat',\n 'America/Yellowknife',\n 'Antarctica/Casey',\n 'Antarctica/Davis',\n 'Antarctica/DumontDUrville',\n 'Antarctica/Macquarie',\n 'Antarctica/Mawson',\n 'Antarctica/McMurdo',\n 'Antarctica/Palmer',\n 'Antarctica/Rothera',\n 'Antarctica/South_Pole',\n 'Antarctica/Syowa',\n 'Antarctica/Troll',\n 'Antarctica/Vostok',\n 'Arctic/Longyearbyen',\n 'Asia/Aden',\n 'Asia/Almaty',\n 'Asia/Amman',\n 'Asia/Anadyr',\n 'Asia/Aqtau',\n 'Asia/Aqtobe',\n 'Asia/Ashgabat',\n 'Asia/Ashkhabad',\n 'Asia/Atyrau',\n 'Asia/Baghdad',\n 'Asia/Bahrain',\n 'Asia/Baku',\n 'Asia/Bangkok',\n 'Asia/Barnaul',\n 'Asia/Beirut',\n 'Asia/Bishkek',\n 'Asia/Brunei',\n 'Asia/Calcutta',\n 'Asia/Chita',\n 'Asia/Choibalsan',\n 'Asia/Chongqing',\n 'Asia/Chungking',\n 'Asia/Colombo',\n 'Asia/Dacca',\n 'Asia/Damascus',\n 'Asia/Dhaka',\n 'Asia/Dili',\n 'Asia/Dubai',\n 'Asia/Dushanbe',\n 'Asia/Famagusta',\n 'Asia/Gaza',\n 'Asia/Harbin',\n 'Asia/Hebron',\n 'Asia/Ho_Chi_Minh',\n 'Asia/Hong_Kong',\n 'Asia/Hovd',\n 'Asia/Irkutsk',\n 'Asia/Istanbul',\n 'Asia/Jakarta',\n 'Asia/Jayapura',\n 'Asia/Jerusalem',\n 'Asia/Kabul',\n 'Asia/Kamchatka',\n 'Asia/Karachi',\n 'Asia/Kashgar',\n 'Asia/Kathmandu',\n 'Asia/Katmandu',\n 'Asia/Khandyga',\n 'Asia/Kolkata',\n 'Asia/Krasnoyarsk',\n 'Asia/Kuala_Lumpur',\n 'Asia/Kuching',\n 'Asia/Kuwait',\n 'Asia/Macao',\n 'Asia/Macau',\n 'Asia/Magadan',\n 'Asia/Makassar',\n 'Asia/Manila',\n 'Asia/Muscat',\n 'Asia/Nicosia',\n 'Asia/Novokuznetsk',\n 'Asia/Novosibirsk',\n 'Asia/Omsk',\n 'Asia/Oral',\n 'Asia/Phnom_Penh',\n 'Asia/Pontianak',\n 'Asia/Pyongyang',\n 'Asia/Qatar',\n 'Asia/Qostanay',\n 'Asia/Qyzylorda',\n 'Asia/Rangoon',\n 'Asia/Riyadh',\n 'Asia/Saigon',\n 'Asia/Sakhalin',\n 'Asia/Samarkand',\n 'Asia/Seoul',\n 'Asia/Shanghai',\n 'Asia/Singapore',\n 'Asia/Srednekolymsk',\n 'Asia/Taipei',\n 'Asia/Tashkent',\n 'Asia/Tbilisi',\n 'Asia/Tehran',\n 'Asia/Tel_Aviv',\n 'Asia/Thimbu',\n 'Asia/Thimphu',\n 'Asia/Tokyo',\n 'Asia/Tomsk',\n 'Asia/Ujung_Pandang',\n 'Asia/Ulaanbaatar',\n 'Asia/Ulan_Bator',\n 'Asia/Urumqi',\n 'Asia/Ust-Nera',\n 'Asia/Vientiane',\n 'Asia/Vladivostok',\n 'Asia/Yakutsk',\n 'Asia/Yangon',\n 'Asia/Yekaterinburg',\n 'Asia/Yerevan',\n 'Atlantic/Azores',\n 'Atlantic/Bermuda',\n 'Atlantic/Canary',\n 'Atlantic/Cape_Verde',\n 'Atlantic/Faeroe',\n 'Atlantic/Faroe',\n 'Atlantic/Jan_Mayen',\n 'Atlantic/Madeira',\n 'Atlantic/Reykjavik',\n 'Atlantic/South_Georgia',\n 'Atlantic/St_Helena',\n 'Atlantic/Stanley',\n 'Australia/ACT',\n 'Australia/Adelaide',\n 'Australia/Brisbane',\n 'Australia/Broken_Hill',\n 'Australia/Canberra',\n 'Australia/Currie',\n 'Australia/Darwin',\n 'Australia/Eucla',\n 'Australia/Hobart',\n 'Australia/LHI',\n 'Australia/Lindeman',\n 'Australia/Lord_Howe',\n 'Australia/Melbourne',\n 'Australia/North',\n 'Australia/NSW',\n 'Australia/Perth',\n 'Australia/Queensland',\n 'Australia/South',\n 'Australia/Sydney',\n 'Australia/Tasmania',\n 'Australia/Victoria',\n 'Australia/West',\n 'Australia/Yancowinna',\n 'Brazil/Acre',\n 'Brazil/DeNoronha',\n 'Brazil/East',\n 'Brazil/West',\n 'Canada/Atlantic',\n 'Canada/Central',\n 'Canada/Eastern',\n 'Canada/Mountain',\n 'Canada/Newfoundland',\n 'Canada/Pacific',\n 'Canada/Saskatchewan',\n 'Canada/Yukon',\n 'CET',\n 'Chile/Continental',\n 'Chile/EasterIsland',\n 'CST6CDT',\n 'Cuba',\n 'EET',\n 'Egypt',\n 'Eire',\n 'EST',\n 'EST5EDT',\n 'Etc/GMT',\n 'Etc/GMT+0',\n 'Etc/GMT+1',\n 'Etc/GMT+10',\n 'Etc/GMT+11',\n 'Etc/GMT+12',\n 'Etc/GMT+2',\n 'Etc/GMT+3',\n 'Etc/GMT+4',\n 'Etc/GMT+5',\n 'Etc/GMT+6',\n 'Etc/GMT+7',\n 'Etc/GMT+8',\n 'Etc/GMT+9',\n 'Etc/GMT-0',\n 'Etc/GMT-1',\n 'Etc/GMT-10',\n 'Etc/GMT-11',\n 'Etc/GMT-12',\n 'Etc/GMT-13',\n 'Etc/GMT-14',\n 'Etc/GMT-2',\n 'Etc/GMT-3',\n 'Etc/GMT-4',\n 'Etc/GMT-5',\n 'Etc/GMT-6',\n 'Etc/GMT-7',\n 'Etc/GMT-8',\n 'Etc/GMT-9',\n 'Etc/GMT0',\n 'Etc/Greenwich',\n 'Etc/UCT',\n 'Etc/Universal',\n 'Etc/UTC',\n 'Etc/Zulu',\n 'Europe/Amsterdam',\n 'Europe/Andorra',\n 'Europe/Astrakhan',\n 'Europe/Athens',\n 'Europe/Belfast',\n 'Europe/Belgrade',\n 'Europe/Berlin',\n 'Europe/Bratislava',\n 'Europe/Brussels',\n 'Europe/Bucharest',\n 'Europe/Budapest',\n 'Europe/Busingen',\n 'Europe/Chisinau',\n 'Europe/Copenhagen',\n 'Europe/Dublin',\n 'Europe/Gibraltar',\n 'Europe/Guernsey',\n 'Europe/Helsinki',\n 'Europe/Isle_of_Man',\n 'Europe/Istanbul',\n 'Europe/Jersey',\n 'Europe/Kaliningrad',\n 'Europe/Kiev',\n 'Europe/Kirov',\n 'Europe/Lisbon',\n 'Europe/Ljubljana',\n 'Europe/London',\n 'Europe/Luxembourg',\n 'Europe/Madrid',\n 'Europe/Malta',\n 'Europe/Mariehamn',\n 'Europe/Minsk',\n 'Europe/Monaco',\n 'Europe/Moscow',\n 'Europe/Nicosia',\n 'Europe/Oslo',\n 'Europe/Paris',\n 'Europe/Podgorica',\n 'Europe/Prague',\n 'Europe/Riga',\n 'Europe/Rome',\n 'Europe/Samara',\n 'Europe/San_Marino',\n 'Europe/Sarajevo',\n 'Europe/Saratov',\n 'Europe/Simferopol',\n 'Europe/Skopje',\n 'Europe/Sofia',\n 'Europe/Stockholm',\n 'Europe/Tallinn',\n 'Europe/Tirane',\n 'Europe/Tiraspol',\n 'Europe/Ulyanovsk',\n 'Europe/Uzhgorod',\n 'Europe/Vaduz',\n 'Europe/Vatican',\n 'Europe/Vienna',\n 'Europe/Vilnius',\n 'Europe/Volgograd',\n 'Europe/Warsaw',\n 'Europe/Zagreb',\n 'Europe/Zaporozhye',\n 'Europe/Zurich',\n 'Factory',\n 'GB',\n 'GB-Eire',\n 'GMT',\n 'GMT+0',\n 'GMT-0',\n 'GMT0',\n 'Greenwich',\n 'Hongkong',\n 'HST',\n 'Iceland',\n 'Indian/Antananarivo',\n 'Indian/Chagos',\n 'Indian/Christmas',\n 'Indian/Cocos',\n 'Indian/Comoro',\n 'Indian/Kerguelen',\n 'Indian/Mahe',\n 'Indian/Maldives',\n 'Indian/Mauritius',\n 'Indian/Mayotte',\n 'Indian/Reunion',\n 'Iran',\n 'Israel',\n 'Jamaica',\n 'Japan',\n 'Kwajalein',\n 'Libya',\n 'MET',\n 'Mexico/BajaNorte',\n 'Mexico/BajaSur',\n 'Mexico/General',\n 'MST',\n 'MST7MDT',\n 'Navajo',\n 'NZ',\n 'NZ-CHAT',\n 'Pacific/Apia',\n 'Pacific/Auckland',\n 'Pacific/Bougainville',\n 'Pacific/Chatham',\n 'Pacific/Chuuk',\n 'Pacific/Easter',\n 'Pacific/Efate',\n 'Pacific/Enderbury',\n 'Pacific/Fakaofo',\n 'Pacific/Fiji',\n 'Pacific/Funafuti',\n 'Pacific/Galapagos',\n 'Pacific/Gambier',\n 'Pacific/Guadalcanal',\n 'Pacific/Guam',\n 'Pacific/Honolulu',\n 'Pacific/Johnston',\n 'Pacific/Kiritimati',\n 'Pacific/Kosrae',\n 'Pacific/Kwajalein',\n 'Pacific/Majuro',\n 'Pacific/Marquesas',\n 'Pacific/Midway',\n 'Pacific/Nauru',\n 'Pacific/Niue',\n 'Pacific/Norfolk',\n 'Pacific/Noumea',\n 'Pacific/Pago_Pago',\n 'Pacific/Palau',\n 'Pacific/Pitcairn',\n 'Pacific/Pohnpei',\n 'Pacific/Ponape',\n 'Pacific/Port_Moresby',\n 'Pacific/Rarotonga',\n 'Pacific/Saipan',\n 'Pacific/Samoa',\n 'Pacific/Tahiti',\n 'Pacific/Tarawa',\n 'Pacific/Tongatapu',\n 'Pacific/Truk',\n 'Pacific/Wake',\n 'Pacific/Wallis',\n 'Pacific/Yap',\n 'Poland',\n 'Portugal',\n 'PRC',\n 'PST8PDT',\n 'ROC',\n 'ROK',\n 'Singapore',\n 'Turkey',\n 'UCT',\n 'Universal',\n 'US/Alaska',\n 'US/Aleutian',\n 'US/Arizona',\n 'US/Central',\n 'US/East-Indiana',\n 'US/Eastern',\n 'US/Hawaii',\n 'US/Indiana-Starke',\n 'US/Michigan',\n 'US/Mountain',\n 'US/Pacific',\n 'US/Samoa',\n 'UTC',\n 'W-SU',\n 'WET',\n 'Zulu'\n];\n\nexport const TIME_ZONE_GROUP_ORDER: readonly FluxTranslation[] = [\n 'flux.timezoneEurope',\n 'flux.timezoneAmerica',\n 'flux.timezoneUs',\n 'flux.timezoneAustralia',\n 'flux.timezoneCanada',\n 'flux.timezoneMexico',\n 'flux.timezoneAfrica',\n 'flux.timezoneAntarctica',\n 'flux.timezoneArctic',\n 'flux.timezoneAsia',\n 'flux.timezoneAtlantic',\n 'flux.timezoneBrazil',\n 'flux.timezoneChile',\n 'flux.timezoneEtc',\n 'flux.timezoneOther',\n 'flux.timezoneIndian',\n 'flux.timezonePacific'\n];\n","<template>\n <FluxFormSelect\n v-model=\"modelValue\"\n :auto-focus=\"autoFocus\"\n :disabled=\"disabled\"\n :error=\"error\"\n :is-condensed=\"isCondensed\"\n :is-loading=\"isLoading\"\n :is-readonly=\"isReadonly\"\n is-searchable\n :is-secondary=\"isSecondary\"\n :name=\"name\"\n :options=\"options\"\n :placeholder=\"placeholder\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { isSSR } from '@flux-ui/internals';\n import type { FluxFormInputBaseProps, FluxFormSelectEntry } from '@flux-ui/types';\n import { upperFirst } from 'lodash-es';\n import { computed, toRef } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import type { FluxTranslation } from '$flux/data';\n import { TIME_ZONE_GROUP_ORDER, TIME_ZONES } from '$flux/data/timeZones';\n import FluxFormSelect from './FluxFormSelect.vue';\n\n const modelValue = defineModel<string | null>({\n default: null\n });\n\n const {\n disabled: componentDisabled\n } = defineProps<FluxFormInputBaseProps>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const translate = useTranslate();\n\n const options = computed<FluxFormSelectEntry[]>(() => {\n if (isSSR) {\n return [];\n }\n\n const groups: Record<string, FluxFormSelectEntry[]> = {};\n const options: FluxFormSelectEntry[] = [];\n\n for (const timeZone of TIME_ZONES) {\n const timeZoneOptions = Intl.DateTimeFormat(navigator.language, {timeZone}).resolvedOptions();\n const timeZoneOffset = new Intl.DateTimeFormat(navigator.language, {timeZone, timeZoneName: 'longOffset'}).formatToParts().find(p => p.type === 'timeZoneName')!.value.substring(3);\n const label = timeZoneOptions.timeZone\n .replaceAll('_', ' ')\n .replaceAll('/', ' / ');\n\n let group = 'flux.timezoneOther';\n\n if (label.includes('/')) {\n group = `flux.timezone${upperFirst(label.split('/')[0].trim().toLowerCase())}`;\n }\n\n groups[group] ??= [];\n\n if (groups[group].find(go => go.label === label)) {\n continue;\n }\n\n groups[group].push({\n command: timeZoneOffset,\n label: label,\n value: timeZone\n });\n }\n\n const sortedGroups = Object.fromEntries(\n Object.entries(groups)\n .sort(([a], [b]) => {\n const ai = TIME_ZONE_GROUP_ORDER.indexOf(a as FluxTranslation);\n const bi = TIME_ZONE_GROUP_ORDER.indexOf(b as FluxTranslation);\n\n if (ai > bi) {\n return 1;\n }\n\n if (bi > ai) {\n return -1;\n }\n\n return 0;\n })\n );\n\n for (const group in sortedGroups) {\n const groupOptions = sortedGroups[group].sort(({label: labelA}, {label: labelB}) => labelA.localeCompare(labelB));\n\n options.push({\n label: translate(group as FluxTranslation)\n });\n\n groupOptions.forEach(go => options.push(go));\n }\n\n return options;\n });\n</script>\n","<template>\n <FluxFormSelect\n v-model=\"modelValue\"\n :auto-focus=\"autoFocus\"\n :disabled=\"disabled\"\n :error=\"error\"\n :is-condensed=\"isCondensed\"\n :is-loading=\"isLoading\"\n :is-readonly=\"isReadonly\"\n is-searchable\n :is-secondary=\"isSecondary\"\n :name=\"name\"\n :options=\"options\"\n :placeholder=\"placeholder\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { isSSR } from '@flux-ui/internals';\n import type { FluxFormInputBaseProps, FluxFormSelectEntry } from '@flux-ui/types';\n import { upperFirst } from 'lodash-es';\n import { computed, toRef } from 'vue';\n import { useDisabled } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import type { FluxTranslation } from '$flux/data';\n import { TIME_ZONE_GROUP_ORDER, TIME_ZONES } from '$flux/data/timeZones';\n import FluxFormSelect from './FluxFormSelect.vue';\n\n const modelValue = defineModel<string | null>({\n default: null\n });\n\n const {\n disabled: componentDisabled\n } = defineProps<FluxFormInputBaseProps>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const translate = useTranslate();\n\n const options = computed<FluxFormSelectEntry[]>(() => {\n if (isSSR) {\n return [];\n }\n\n const groups: Record<string, FluxFormSelectEntry[]> = {};\n const options: FluxFormSelectEntry[] = [];\n\n for (const timeZone of TIME_ZONES) {\n const timeZoneOptions = Intl.DateTimeFormat(navigator.language, {timeZone}).resolvedOptions();\n const timeZoneOffset = new Intl.DateTimeFormat(navigator.language, {timeZone, timeZoneName: 'longOffset'}).formatToParts().find(p => p.type === 'timeZoneName')!.value.substring(3);\n const label = timeZoneOptions.timeZone\n .replaceAll('_', ' ')\n .replaceAll('/', ' / ');\n\n let group = 'flux.timezoneOther';\n\n if (label.includes('/')) {\n group = `flux.timezone${upperFirst(label.split('/')[0].trim().toLowerCase())}`;\n }\n\n groups[group] ??= [];\n\n if (groups[group].find(go => go.label === label)) {\n continue;\n }\n\n groups[group].push({\n command: timeZoneOffset,\n label: label,\n value: timeZone\n });\n }\n\n const sortedGroups = Object.fromEntries(\n Object.entries(groups)\n .sort(([a], [b]) => {\n const ai = TIME_ZONE_GROUP_ORDER.indexOf(a as FluxTranslation);\n const bi = TIME_ZONE_GROUP_ORDER.indexOf(b as FluxTranslation);\n\n if (ai > bi) {\n return 1;\n }\n\n if (bi > ai) {\n return -1;\n }\n\n return 0;\n })\n );\n\n for (const group in sortedGroups) {\n const groupOptions = sortedGroups[group].sort(({label: labelA}, {label: labelB}) => labelA.localeCompare(labelB));\n\n options.push({\n label: translate(group as FluxTranslation)\n });\n\n groupOptions.forEach(go => options.push(go));\n }\n\n return options;\n });\n</script>\n","@use '$flux/css/mixin';\n\n.treeViewSelectValue {\n margin-left: 6px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.treeViewSelectList {\n display: flex;\n flex-flow: column;\n padding: 9px;\n}\n\n.treeViewSelectEmpty {\n padding: 12px 6px;\n color: var(--foreground-secondary);\n font-size: 14px;\n text-align: center;\n}\n\n.treeNode {\n composes: treeNode from './primitive/TreeNode.module.scss';\n\n &.isSelectable,\n &.isExpandable {\n cursor: pointer;\n\n @include mixin.hover {\n background: var(--surface-hover);\n }\n }\n\n &.isSelected {\n background: var(--primary-50);\n color: var(--primary-700);\n font-weight: 600;\n }\n\n &.isSelected.isSelectable {\n @include mixin.hover {\n background: var(--primary-100);\n }\n }\n\n &.isHighlighted:not(.isSelected) {\n background: var(--surface-hover);\n }\n\n &.isHighlighted.isSelected {\n background: var(--primary-100);\n }\n}\n\n.treeNodeCheck {\n color: var(--primary-600);\n flex-shrink: 0;\n}\n","<template>\n <Anchor\n ref=\"anchor\"\n :=\"$attrs\"\n :class=\"clsx(\n $formStyle.formSelect,\n disabled && $formStyle.isDisabled,\n isPopupOpen && $formStyle.isFocused,\n isCondensed && $formStyle.isCondensed,\n isSecondary && $formStyle.isSecondary,\n error && $formStyle.isInvalid\n )\"\n :id=\"id\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"isReadonly ? true : undefined\"\n :aria-invalid=\"error ? true : undefined\"\n tabindex=\"0\"\n tag-name=\"div\"\n @click=\"toggle()\"\n @keydown=\"onKeyDown\">\n\n <template v-if=\"isMultiple && selectedOptions.length > 0\">\n <FluxTag\n v-for=\"option in selectedOptions\"\n :key=\"option.id\"\n :label=\"option.label\"\n is-deletable\n @delete=\"deselect(option.id)\"/>\n </template>\n\n <template v-else-if=\"!isMultiple && selectedOptions[0]\">\n <span :class=\"$style.treeViewSelectValue\">{{ selectedOptions[0].label }}</span>\n </template>\n\n <template v-else-if=\"placeholder\">\n <span :class=\"$formStyle.formSelectPlaceholder\">{{ placeholder }}</span>\n </template>\n\n <FluxIcon\n :class=\"$formStyle.formSelectIcon\"\n name=\"angle-down\"/>\n </Anchor>\n\n <Teleport to=\"body\">\n <FluxFadeTransition>\n <AnchorPopup\n v-if=\"isPopupOpen && !disabled\"\n ref=\"anchorPopup\"\n :class=\"$formStyle.formSelectPopup\"\n :anchor=\"anchorRef\"\n direction=\"vertical\"\n use-anchor-width>\n\n <FluxFormInput\n v-if=\"isSearchable\"\n v-model=\"searchQuery\"\n ref=\"searchInput\"\n auto-complete=\"off\"\n :class=\"$formStyle.formSelectInput\"\n type=\"search\"\n icon-trailing=\"magnifying-glass\"\n :placeholder=\"translate('flux.search')\"\n @keydown=\"onKeyDown\"/>\n\n <div :class=\"$style.treeViewSelectList\">\n <div\n v-if=\"visibleNodes.length === 0\"\n :class=\"$style.treeViewSelectEmpty\">\n {{ translate('flux.noItems') }}\n </div>\n\n <template v-else>\n <div\n v-for=\"(node, nodeIndex) in visibleNodes\"\n ref=\"nodeElements\"\n :key=\"node.id\"\n :class=\"clsx(\n $style.treeNode,\n node.selectable !== false && $style.isSelectable,\n node.selectable === false && !!node.children?.length && $style.isExpandable,\n selectedIds.has(node.id) && $style.isSelected,\n nodeIndex === highlightedIndex && $style.isHighlighted\n )\"\n :role=\"node.selectable !== false ? 'option' : undefined\"\n :tabindex=\"node.selectable !== false ? 0 : undefined\"\n :aria-selected=\"node.selectable !== false ? selectedIds.has(node.id) : undefined\"\n @click=\"onNodeClick(node)\"\n @keydown.enter.prevent=\"onNodeClick(node)\"\n @keydown.space.prevent=\"onNodeClick(node)\">\n\n <TreeNodeRenderer\n :node=\"node\"\n :expanded=\"expandedIds.has(node.id)\"\n :level-colors=\"levelColors\"\n @expand-click=\"onExpandClick(node, $event)\">\n <template #trailing>\n <FluxIcon\n v-if=\"selectedIds.has(node.id)\"\n :class=\"$style.treeNodeCheck\"\n name=\"check\"\n :size=\"14\"/>\n </template>\n </TreeNodeRenderer>\n </div>\n </template>\n </div>\n </AnchorPopup>\n </FluxFadeTransition>\n </Teleport>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import type { FluxColor, FluxFormInputBaseProps, FluxFormTreeViewSelectOption, FluxFormTreeViewSelectValue } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { type ComponentPublicInstance, computed, nextTick, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import type { TreeFlatNode } from '$flux/composable/private';\n import { flattenAll, flattenVisible, INITIAL_HIGHLIGHTED_INDEX, useDropdownPopup, useTranslate, useTreeView } from '$flux/composable/private';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxFormInput from '$flux/component/FluxFormInput.vue';\n import FluxIcon from '$flux/component/FluxIcon.vue';\n import FluxTag from '$flux/component/FluxTag.vue';\n import Anchor from '$flux/component/primitive/Anchor.vue';\n import AnchorPopup from '$flux/component/primitive/AnchorPopup.vue';\n import TreeNodeRenderer from '$flux/component/primitive/TreeNodeRenderer.vue';\n import $formStyle from '$flux/css/component/Form.module.scss';\n import $style from '$flux/css/component/TreeViewSelect.module.scss';\n\n type FlatNode = TreeFlatNode<FluxFormTreeViewSelectOption>;\n\n defineOptions({\n inheritAttrs: false\n });\n\n const modelValue = defineModel<FluxFormTreeViewSelectValue>({required: true});\n\n const {\n disabled: componentDisabled,\n isMultiple,\n isReadonly,\n isSearchable,\n levelColors,\n options,\n placeholder\n } = defineProps<Pick<FluxFormInputBaseProps, 'autoFocus' | 'disabled' | 'error' | 'isCondensed' | 'isLoading' | 'isReadonly' | 'isSecondary' | 'name' | 'placeholder'> & {\n readonly isMultiple?: boolean;\n readonly isSearchable?: boolean;\n readonly levelColors?: (FluxColor | string)[];\n readonly options: FluxFormTreeViewSelectOption[];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n const translate = useTranslate();\n\n const anchorRef = useTemplateRef<ComponentPublicInstance>('anchor');\n const anchorPopupRef = useTemplateRef<ComponentPublicInstance>('anchorPopup');\n const nodeElementRefs = useTemplateRef<HTMLDivElement[]>('nodeElements');\n const searchInputRef = useTemplateRef<ComponentPublicInstance<typeof FluxFormInput>>('searchInput');\n\n const expandedIds = ref(new Set<string | number>());\n const searchQuery = ref('');\n\n const focusElement = computed(() => unrefTemplateElement(searchInputRef) ?? unrefTemplateElement(anchorRef));\n\n const {\n isOpen: isPopupOpen,\n toggle,\n focusAnchor,\n onKeyDownBase\n } = useDropdownPopup({\n anchorRef,\n popupRef: anchorPopupRef,\n focusElement,\n disabled,\n readonly: toRef(() => !!isReadonly)\n });\n\n const selectedIds = computed(() => {\n const value = unref(modelValue);\n if (Array.isArray(value)) {\n return new Set(value);\n }\n return new Set<string | number>(value !== undefined ? [value] : []);\n });\n\n const selectedOptions = computed(() => {\n const ids = unref(selectedIds);\n if (ids.size === 0) {\n return [];\n }\n return flattenAll(options).filter(node => ids.has(node.id));\n });\n\n const visibleNodes = computed((): FlatNode[] => {\n const query = unref(searchQuery).toLowerCase().trim();\n if (query) {\n return flattenAll(options)\n .filter(node => node.label.toLowerCase().includes(query))\n .map(node => ({...node, depth: 0, isLast: false, lineGuides: [] as boolean[]}));\n }\n return flattenVisible(options, 0, unref(expandedIds));\n });\n\n const {highlightedIndex, toggleExpand, onExpandClick, onKeyNavigate} = useTreeView({\n expandedIds,\n nodeElementRefs,\n visibleNodes\n });\n\n function select(nodeId: string | number): void {\n if (unref(isMultiple)) {\n const current = [...unref(selectedIds)];\n if (current.includes(nodeId)) {\n modelValue.value = current.filter(v => v !== nodeId);\n } else {\n modelValue.value = [...current, nodeId];\n }\n } else {\n modelValue.value = nodeId;\n isPopupOpen.value = false;\n }\n }\n\n function deselect(nodeId: string | number): void {\n const current = unref(modelValue);\n if (Array.isArray(current)) {\n modelValue.value = current.filter(v => v !== nodeId);\n }\n focusAnchor();\n }\n\n function onNodeClick(node: FlatNode): void {\n if (node.selectable !== false) {\n select(node.id);\n if (node.children?.length && !unref(expandedIds).has(node.id)) {\n toggleExpand(node.id);\n }\n } else if (node.children?.length) {\n toggleExpand(node.id);\n }\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (!unref(isPopupOpen)) {\n if (evt.key === 'Enter' || evt.key === ' ') {\n evt.preventDefault();\n isPopupOpen.value = true;\n }\n return;\n }\n\n if (evt.key === 'Backspace') {\n if (!unref(isMultiple)) {\n return;\n }\n if (unref(searchQuery).length > 0 || unref(selectedIds).size === 0) {\n return;\n }\n const selectedList = [...unref(selectedIds)];\n deselect(selectedList[selectedList.length - 1]);\n return;\n }\n\n if (onKeyDownBase(evt)) {\n return;\n }\n\n // When searchable, don't intercept letter keys — let the search input handle them\n if (isSearchable && evt.key.length === 1 && evt.key !== 'Enter' && evt.key !== ' ') {\n return;\n }\n\n onKeyNavigate(evt, onNodeClick);\n }\n\n watch(isPopupOpen, isOpen => {\n if (!isOpen) {\n searchQuery.value = '';\n highlightedIndex.value = INITIAL_HIGHLIGHTED_INDEX;\n return;\n }\n\n autoExpandSelected();\n\n nextTick(() => {\n const ids = unref(selectedIds);\n if (ids.size > 0) {\n const firstSelectedIndex = unref(visibleNodes).findIndex(n => ids.has(n.id));\n if (firstSelectedIndex >= 0) {\n highlightedIndex.value = firstSelectedIndex;\n }\n }\n });\n });\n\n watch(searchQuery, () => {\n highlightedIndex.value = INITIAL_HIGHLIGHTED_INDEX;\n });\n\n function autoExpandSelected(): void {\n const ids = unref(selectedIds);\n if (ids.size === 0) {\n return;\n }\n\n const expanded = new Set(unref(expandedIds));\n\n function expandAncestors(nodes: FluxFormTreeViewSelectOption[], targetId: string | number): boolean {\n for (const node of nodes) {\n if (node.id === targetId) {\n return true;\n }\n if (node.children && expandAncestors(node.children, targetId)) {\n expanded.add(node.id);\n return true;\n }\n }\n return false;\n }\n\n for (const selectedId of ids) {\n expandAncestors(options, selectedId);\n }\n\n expandedIds.value = expanded;\n }\n</script>\n","<template>\n <Anchor\n ref=\"anchor\"\n :=\"$attrs\"\n :class=\"clsx(\n $formStyle.formSelect,\n disabled && $formStyle.isDisabled,\n isPopupOpen && $formStyle.isFocused,\n isCondensed && $formStyle.isCondensed,\n isSecondary && $formStyle.isSecondary,\n error && $formStyle.isInvalid\n )\"\n :id=\"id\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"isReadonly ? true : undefined\"\n :aria-invalid=\"error ? true : undefined\"\n tabindex=\"0\"\n tag-name=\"div\"\n @click=\"toggle()\"\n @keydown=\"onKeyDown\">\n\n <template v-if=\"isMultiple && selectedOptions.length > 0\">\n <FluxTag\n v-for=\"option in selectedOptions\"\n :key=\"option.id\"\n :label=\"option.label\"\n is-deletable\n @delete=\"deselect(option.id)\"/>\n </template>\n\n <template v-else-if=\"!isMultiple && selectedOptions[0]\">\n <span :class=\"$style.treeViewSelectValue\">{{ selectedOptions[0].label }}</span>\n </template>\n\n <template v-else-if=\"placeholder\">\n <span :class=\"$formStyle.formSelectPlaceholder\">{{ placeholder }}</span>\n </template>\n\n <FluxIcon\n :class=\"$formStyle.formSelectIcon\"\n name=\"angle-down\"/>\n </Anchor>\n\n <Teleport to=\"body\">\n <FluxFadeTransition>\n <AnchorPopup\n v-if=\"isPopupOpen && !disabled\"\n ref=\"anchorPopup\"\n :class=\"$formStyle.formSelectPopup\"\n :anchor=\"anchorRef\"\n direction=\"vertical\"\n use-anchor-width>\n\n <FluxFormInput\n v-if=\"isSearchable\"\n v-model=\"searchQuery\"\n ref=\"searchInput\"\n auto-complete=\"off\"\n :class=\"$formStyle.formSelectInput\"\n type=\"search\"\n icon-trailing=\"magnifying-glass\"\n :placeholder=\"translate('flux.search')\"\n @keydown=\"onKeyDown\"/>\n\n <div :class=\"$style.treeViewSelectList\">\n <div\n v-if=\"visibleNodes.length === 0\"\n :class=\"$style.treeViewSelectEmpty\">\n {{ translate('flux.noItems') }}\n </div>\n\n <template v-else>\n <div\n v-for=\"(node, nodeIndex) in visibleNodes\"\n ref=\"nodeElements\"\n :key=\"node.id\"\n :class=\"clsx(\n $style.treeNode,\n node.selectable !== false && $style.isSelectable,\n node.selectable === false && !!node.children?.length && $style.isExpandable,\n selectedIds.has(node.id) && $style.isSelected,\n nodeIndex === highlightedIndex && $style.isHighlighted\n )\"\n :role=\"node.selectable !== false ? 'option' : undefined\"\n :tabindex=\"node.selectable !== false ? 0 : undefined\"\n :aria-selected=\"node.selectable !== false ? selectedIds.has(node.id) : undefined\"\n @click=\"onNodeClick(node)\"\n @keydown.enter.prevent=\"onNodeClick(node)\"\n @keydown.space.prevent=\"onNodeClick(node)\">\n\n <TreeNodeRenderer\n :node=\"node\"\n :expanded=\"expandedIds.has(node.id)\"\n :level-colors=\"levelColors\"\n @expand-click=\"onExpandClick(node, $event)\">\n <template #trailing>\n <FluxIcon\n v-if=\"selectedIds.has(node.id)\"\n :class=\"$style.treeNodeCheck\"\n name=\"check\"\n :size=\"14\"/>\n </template>\n </TreeNodeRenderer>\n </div>\n </template>\n </div>\n </AnchorPopup>\n </FluxFadeTransition>\n </Teleport>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import type { FluxColor, FluxFormInputBaseProps, FluxFormTreeViewSelectOption, FluxFormTreeViewSelectValue } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { type ComponentPublicInstance, computed, nextTick, ref, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import type { TreeFlatNode } from '$flux/composable/private';\n import { flattenAll, flattenVisible, INITIAL_HIGHLIGHTED_INDEX, useDropdownPopup, useTranslate, useTreeView } from '$flux/composable/private';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxFormInput from '$flux/component/FluxFormInput.vue';\n import FluxIcon from '$flux/component/FluxIcon.vue';\n import FluxTag from '$flux/component/FluxTag.vue';\n import Anchor from '$flux/component/primitive/Anchor.vue';\n import AnchorPopup from '$flux/component/primitive/AnchorPopup.vue';\n import TreeNodeRenderer from '$flux/component/primitive/TreeNodeRenderer.vue';\n import $formStyle from '$flux/css/component/Form.module.scss';\n import $style from '$flux/css/component/TreeViewSelect.module.scss';\n\n type FlatNode = TreeFlatNode<FluxFormTreeViewSelectOption>;\n\n defineOptions({\n inheritAttrs: false\n });\n\n const modelValue = defineModel<FluxFormTreeViewSelectValue>({required: true});\n\n const {\n disabled: componentDisabled,\n isMultiple,\n isReadonly,\n isSearchable,\n levelColors,\n options,\n placeholder\n } = defineProps<Pick<FluxFormInputBaseProps, 'autoFocus' | 'disabled' | 'error' | 'isCondensed' | 'isLoading' | 'isReadonly' | 'isSecondary' | 'name' | 'placeholder'> & {\n readonly isMultiple?: boolean;\n readonly isSearchable?: boolean;\n readonly levelColors?: (FluxColor | string)[];\n readonly options: FluxFormTreeViewSelectOption[];\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n const translate = useTranslate();\n\n const anchorRef = useTemplateRef<ComponentPublicInstance>('anchor');\n const anchorPopupRef = useTemplateRef<ComponentPublicInstance>('anchorPopup');\n const nodeElementRefs = useTemplateRef<HTMLDivElement[]>('nodeElements');\n const searchInputRef = useTemplateRef<ComponentPublicInstance<typeof FluxFormInput>>('searchInput');\n\n const expandedIds = ref(new Set<string | number>());\n const searchQuery = ref('');\n\n const focusElement = computed(() => unrefTemplateElement(searchInputRef) ?? unrefTemplateElement(anchorRef));\n\n const {\n isOpen: isPopupOpen,\n toggle,\n focusAnchor,\n onKeyDownBase\n } = useDropdownPopup({\n anchorRef,\n popupRef: anchorPopupRef,\n focusElement,\n disabled,\n readonly: toRef(() => !!isReadonly)\n });\n\n const selectedIds = computed(() => {\n const value = unref(modelValue);\n if (Array.isArray(value)) {\n return new Set(value);\n }\n return new Set<string | number>(value !== undefined ? [value] : []);\n });\n\n const selectedOptions = computed(() => {\n const ids = unref(selectedIds);\n if (ids.size === 0) {\n return [];\n }\n return flattenAll(options).filter(node => ids.has(node.id));\n });\n\n const visibleNodes = computed((): FlatNode[] => {\n const query = unref(searchQuery).toLowerCase().trim();\n if (query) {\n return flattenAll(options)\n .filter(node => node.label.toLowerCase().includes(query))\n .map(node => ({...node, depth: 0, isLast: false, lineGuides: [] as boolean[]}));\n }\n return flattenVisible(options, 0, unref(expandedIds));\n });\n\n const {highlightedIndex, toggleExpand, onExpandClick, onKeyNavigate} = useTreeView({\n expandedIds,\n nodeElementRefs,\n visibleNodes\n });\n\n function select(nodeId: string | number): void {\n if (unref(isMultiple)) {\n const current = [...unref(selectedIds)];\n if (current.includes(nodeId)) {\n modelValue.value = current.filter(v => v !== nodeId);\n } else {\n modelValue.value = [...current, nodeId];\n }\n } else {\n modelValue.value = nodeId;\n isPopupOpen.value = false;\n }\n }\n\n function deselect(nodeId: string | number): void {\n const current = unref(modelValue);\n if (Array.isArray(current)) {\n modelValue.value = current.filter(v => v !== nodeId);\n }\n focusAnchor();\n }\n\n function onNodeClick(node: FlatNode): void {\n if (node.selectable !== false) {\n select(node.id);\n if (node.children?.length && !unref(expandedIds).has(node.id)) {\n toggleExpand(node.id);\n }\n } else if (node.children?.length) {\n toggleExpand(node.id);\n }\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (!unref(isPopupOpen)) {\n if (evt.key === 'Enter' || evt.key === ' ') {\n evt.preventDefault();\n isPopupOpen.value = true;\n }\n return;\n }\n\n if (evt.key === 'Backspace') {\n if (!unref(isMultiple)) {\n return;\n }\n if (unref(searchQuery).length > 0 || unref(selectedIds).size === 0) {\n return;\n }\n const selectedList = [...unref(selectedIds)];\n deselect(selectedList[selectedList.length - 1]);\n return;\n }\n\n if (onKeyDownBase(evt)) {\n return;\n }\n\n // When searchable, don't intercept letter keys — let the search input handle them\n if (isSearchable && evt.key.length === 1 && evt.key !== 'Enter' && evt.key !== ' ') {\n return;\n }\n\n onKeyNavigate(evt, onNodeClick);\n }\n\n watch(isPopupOpen, isOpen => {\n if (!isOpen) {\n searchQuery.value = '';\n highlightedIndex.value = INITIAL_HIGHLIGHTED_INDEX;\n return;\n }\n\n autoExpandSelected();\n\n nextTick(() => {\n const ids = unref(selectedIds);\n if (ids.size > 0) {\n const firstSelectedIndex = unref(visibleNodes).findIndex(n => ids.has(n.id));\n if (firstSelectedIndex >= 0) {\n highlightedIndex.value = firstSelectedIndex;\n }\n }\n });\n });\n\n watch(searchQuery, () => {\n highlightedIndex.value = INITIAL_HIGHLIGHTED_INDEX;\n });\n\n function autoExpandSelected(): void {\n const ids = unref(selectedIds);\n if (ids.size === 0) {\n return;\n }\n\n const expanded = new Set(unref(expandedIds));\n\n function expandAncestors(nodes: FluxFormTreeViewSelectOption[], targetId: string | number): boolean {\n for (const node of nodes) {\n if (node.id === targetId) {\n return true;\n }\n if (node.children && expandAncestors(node.children, targetId)) {\n expanded.add(node.id);\n return true;\n }\n }\n return false;\n }\n\n for (const selectedId of ids) {\n expandAncestors(options, selectedId);\n }\n\n expandedIds.value = expanded;\n }\n</script>\n","@use '$flux/css/mixin';\n\n.remove {\n position: absolute;\n display: flex;\n top: -9px;\n right: -9px;\n height: 27px;\n width: 27px;\n align-items: center;\n justify-content: center;\n background: var(--danger-600);\n border: 3px solid var(--surface);\n border-radius: var(--radius-full);\n color: var(--danger-25);\n cursor: pointer;\n transition: 300ms var(--swift-out);\n transition-property: background, opacity, scale;\n\n @include mixin.hover {\n background: var(--danger-700);\n }\n\n &.isHidden {\n opacity: 0;\n pointer-events: none;\n scale: .5;\n }\n}\n","<template>\n <button\n :class=\"clsx(\n $style.remove,\n isHidden && $style.isHidden\n )\"\n type=\"button\"\n :aria-label=\"translate('flux.delete')\"\n @click=\"emit('click', $event)\">\n <FluxIcon\n v-if=\"icon\"\n :name=\"icon\"\n :size=\"16\"/>\n </button>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { useTranslate } from '$flux/composable/private';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Remove.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n icon = 'xmark'\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isHidden?: boolean;\n }>();\n\n const translate = useTranslate();\n</script>\n","<template>\n <button\n :class=\"clsx(\n $style.remove,\n isHidden && $style.isHidden\n )\"\n type=\"button\"\n :aria-label=\"translate('flux.delete')\"\n @click=\"emit('click', $event)\">\n <FluxIcon\n v-if=\"icon\"\n :name=\"icon\"\n :size=\"16\"/>\n </button>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { useTranslate } from '$flux/composable/private';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Remove.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n icon = 'xmark'\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isHidden?: boolean;\n }>();\n\n const translate = useTranslate();\n</script>\n","@use '$flux/css/mixin';\n\n.placeholder {\n position: relative;\n display: flex;\n align-items: center;\n flex: 1 0 auto;\n flex-flow: column;\n justify-content: center;\n background: var(--gray-50);\n border: 2px dashed var(--gray-200);\n border-radius: var(--radius);\n text-align: center;\n user-select: none;\n\n &.isButton {\n cursor: pointer;\n\n @include mixin.hover {\n background: var(--gray-100);\n }\n }\n\n &.isExtended {\n padding: 27px;\n gap: 9px;\n\n .placeholderIcon {\n font-size: 24px;\n }\n }\n\n &.isSimple {\n padding: 18px;\n }\n\n &.isSmall {\n padding: 12px;\n font-size: 12px;\n\n .placeholderCaption :is(strong) {\n color: var(--foreground-secondary);\n font-weight: 400;\n }\n\n .placeholderIcon {\n color: var(--foreground-secondary);\n }\n }\n\n :local(.button) {\n align-self: center;\n }\n}\n\n.placeholderCaption {\n display: flex;\n align-items: stretch;\n flex-flow: column;\n\n :is(p) {\n margin: 0;\n max-width: 510px;\n color: var(--foreground-secondary);\n font-size: 14px;\n }\n}\n\n.placeholderIcon {\n color: var(--primary-600);\n font-size: 20px;\n}\n","@use '$flux/css/mixin';\n\n.gallery {\n --dz-fill: transparent;\n --dz-stroke: transparent;\n --dz-inset: -3px;\n --dz-radius: calc(var(--radius) + 3px);\n --dz-height: calc(100% + 6px);\n --dz-width: calc(100% + 6px);\n}\n\n.galleryGrid {\n display: grid;\n gap: 9px;\n grid-template-columns: repeat(auto-fill, minmax(60px, 1fr));\n}\n\n.galleryAdd {\n composes: placeholder from './Placeholder.module.scss';\n\n position: relative;\n aspect-ratio: 1 / 1;\n color: var(--foreground-secondary);\n\n @include mixin.hover {\n background: var(--gray-100);\n border-color: var(--gray-200);\n }\n}\n\n.galleryMove {\n transition: 360ms var(--swift-out);\n}\n\n.galleryItem {\n position: relative;\n aspect-ratio: 1 / 1;\n\n :local(.remove) {\n z-index: 1;\n }\n}\n\n.galleryItemImage {\n position: absolute;\n display: block;\n inset: 0;\n height: 100%;\n width: 100%;\n border-radius: var(--radius);\n object-fit: cover;\n object-position: center;\n outline: 1px solid rgb(0 0 0 / .025);\n outline-offset: -1px;\n}\n\n.galleryItemLoader {\n position: absolute;\n display: flex;\n inset: 1px;\n align-items: center;\n justify-content: center;\n backdrop-filter: blur(3px) saturate(180%);\n background: rgb(0 0 0 / .25);\n border-radius: calc(var(--radius) - 1px);\n z-index: 0;\n\n .spinner {\n --track: rgb(255 255 255 / .25);\n --value: rgb(255 255 255);\n }\n}\n","<template>\n <div\n :class=\"$style.galleryItem\"\n @mouseenter.capture=\"isDeleteVisible = true\"\n @mouseout.capture=\"isDeleteVisible = false\">\n <FluxFocalPointImage\n :class=\"$style.galleryItemImage\"\n :focal-point=\"focalPoint\"\n :src=\"url\"/>\n\n <FluxRemove\n v-if=\"isDeletable\"\n :is-hidden=\"!isDeleteVisible\"\n tabindex=\"-1\"\n @click=\"emit('delete')\"/>\n\n <div\n v-if=\"isPending\"\n :class=\"$style.galleryItemLoader\">\n <FluxSpinner :size=\"24\"/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFocalPointObject } from '@flux-ui/types';\n import { ref } from 'vue';\n import FluxFocalPointImage from './FluxFocalPointImage.vue';\n import FluxRemove from './FluxRemove.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Gallery.module.scss';\n\n const emit = defineEmits<{\n delete: [];\n }>();\n\n const {\n focalPoint\n } = defineProps<{\n readonly focalPoint?: FluxFocalPointObject;\n readonly isDeletable?: boolean;\n readonly isPending?: boolean;\n readonly url: string;\n }>();\n\n const isDeleteVisible = ref(false);\n</script>\n","<template>\n <div\n :class=\"$style.galleryItem\"\n @mouseenter.capture=\"isDeleteVisible = true\"\n @mouseout.capture=\"isDeleteVisible = false\">\n <FluxFocalPointImage\n :class=\"$style.galleryItemImage\"\n :focal-point=\"focalPoint\"\n :src=\"url\"/>\n\n <FluxRemove\n v-if=\"isDeletable\"\n :is-hidden=\"!isDeleteVisible\"\n tabindex=\"-1\"\n @click=\"emit('delete')\"/>\n\n <div\n v-if=\"isPending\"\n :class=\"$style.galleryItemLoader\">\n <FluxSpinner :size=\"24\"/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFocalPointObject } from '@flux-ui/types';\n import { ref } from 'vue';\n import FluxFocalPointImage from './FluxFocalPointImage.vue';\n import FluxRemove from './FluxRemove.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Gallery.module.scss';\n\n const emit = defineEmits<{\n delete: [];\n }>();\n\n const {\n focalPoint\n } = defineProps<{\n readonly focalPoint?: FluxFocalPointObject;\n readonly isDeletable?: boolean;\n readonly isPending?: boolean;\n readonly url: string;\n }>();\n\n const isDeleteVisible = ref(false);\n</script>\n","<template>\n <FluxDropZone\n :class=\"$style.gallery\"\n accept=\"image/*\"\n :disabled=\"!isEditable\"\n is-multiple\n placeholder-icon=\"image\"\n :placeholder-button=\"translate('flux.galleryPlaceholderButton')\"\n :placeholder-message=\"translate('flux.galleryPlaceholderMessage')\"\n :placeholder-title=\"translate('flux.galleryPlaceholderTitle')\"\n @select-multiple=\"onFilesSelected\">\n <template #default=\"{showPicker}\">\n <TransitionGroup\n :class=\"$style.galleryGrid\"\n :move-class=\"$style.galleryMove\"\n tag=\"div\">\n <template\n v-if=\"items\"\n v-for=\"(item, index) of items\">\n <FluxGalleryItem\n v-if=\"typeof item === 'string'\"\n :is-deletable=\"isEditable\"\n :key=\"item\"\n :url=\"item\"\n @delete=\"$emit('delete', index)\"/>\n\n <FluxGalleryItem\n v-else\n :is-deletable=\"isEditable\"\n :key=\"item.url\"\n :focal-point=\"item\"\n :url=\"item.url\"\n @delete=\"$emit('delete', index)\"/>\n </template>\n\n <slot/>\n\n <FluxGalleryItem\n v-for=\"item of pendingItems\"\n is-pending\n :key=\"item\"\n :url=\"item\"/>\n\n <button\n v-if=\"isEditable\"\n key=\"gallery-add\"\n :class=\"$style.galleryAdd\"\n type=\"button\"\n @click=\"showPicker()\">\n <FluxIcon name=\"plus\"/>\n </button>\n </TransitionGroup>\n </template>\n </FluxDropZone>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxFocalPointObject } from '@flux-ui/types';\n import { useTranslate } from '$flux/composable/private';\n import FluxDropZone from './FluxDropZone.vue';\n import FluxGalleryItem from './FluxGalleryItem.vue';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Gallery.module.scss';\n\n const emit = defineEmits<{\n delete: [number];\n upload: [File[]];\n }>();\n\n defineProps<{\n readonly isEditable?: boolean;\n readonly items?: (string | (FluxFocalPointObject & { readonly url: string; }))[];\n readonly pendingItems?: string[];\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const translate = useTranslate();\n\n function onFilesSelected(files: FileList): void {\n const images: File[] = [];\n\n for (let i = 0; i < files.length; ++i) {\n const file = files.item(i);\n\n if (!file || !file.type.startsWith('image/')) {\n continue;\n }\n\n images.push(file);\n }\n\n emit('upload', images);\n }\n</script>\n","<template>\n <FluxDropZone\n :class=\"$style.gallery\"\n accept=\"image/*\"\n :disabled=\"!isEditable\"\n is-multiple\n placeholder-icon=\"image\"\n :placeholder-button=\"translate('flux.galleryPlaceholderButton')\"\n :placeholder-message=\"translate('flux.galleryPlaceholderMessage')\"\n :placeholder-title=\"translate('flux.galleryPlaceholderTitle')\"\n @select-multiple=\"onFilesSelected\">\n <template #default=\"{showPicker}\">\n <TransitionGroup\n :class=\"$style.galleryGrid\"\n :move-class=\"$style.galleryMove\"\n tag=\"div\">\n <template\n v-if=\"items\"\n v-for=\"(item, index) of items\">\n <FluxGalleryItem\n v-if=\"typeof item === 'string'\"\n :is-deletable=\"isEditable\"\n :key=\"item\"\n :url=\"item\"\n @delete=\"$emit('delete', index)\"/>\n\n <FluxGalleryItem\n v-else\n :is-deletable=\"isEditable\"\n :key=\"item.url\"\n :focal-point=\"item\"\n :url=\"item.url\"\n @delete=\"$emit('delete', index)\"/>\n </template>\n\n <slot/>\n\n <FluxGalleryItem\n v-for=\"item of pendingItems\"\n is-pending\n :key=\"item\"\n :url=\"item\"/>\n\n <button\n v-if=\"isEditable\"\n key=\"gallery-add\"\n :class=\"$style.galleryAdd\"\n type=\"button\"\n @click=\"showPicker()\">\n <FluxIcon name=\"plus\"/>\n </button>\n </TransitionGroup>\n </template>\n </FluxDropZone>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxFocalPointObject } from '@flux-ui/types';\n import { useTranslate } from '$flux/composable/private';\n import FluxDropZone from './FluxDropZone.vue';\n import FluxGalleryItem from './FluxGalleryItem.vue';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Gallery.module.scss';\n\n const emit = defineEmits<{\n delete: [number];\n upload: [File[]];\n }>();\n\n defineProps<{\n readonly isEditable?: boolean;\n readonly items?: (string | (FluxFocalPointObject & { readonly url: string; }))[];\n readonly pendingItems?: string[];\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const translate = useTranslate();\n\n function onFilesSelected(files: FileList): void {\n const images: File[] = [];\n\n for (let i = 0; i < files.length; ++i) {\n const file = files.item(i);\n\n if (!file || !file.type.startsWith('image/')) {\n continue;\n }\n\n images.push(file);\n }\n\n emit('upload', images);\n }\n</script>\n","@use '$flux/css/mixin';\n\n.grid {\n display: grid;\n gap: var(--gap);\n grid-template-columns: repeat(var(--columns), 1fr);\n container: grid / inline-size;\n}\n\n.gridColumn {\n display: flex;\n flex-flow: column;\n gap: var(--gap);\n}\n\n$-breakpoints: xl, lg, md, sm, xs;\n\n@each $-breakpoint in $-breakpoints {\n @include mixin.container-breakpoint-down(grid, $-breakpoint) {\n .gridColumn {\n grid-column: span var(--#{$-breakpoint});\n }\n }\n}\n","<template>\n <div\n :class=\"$style.grid\"\n :style=\"{\n '--gap': `${gap}px`,\n '--columns': columns\n }\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Grid.module.scss';\n\n const {\n columns = 12,\n gap = 18\n } = defineProps<{\n readonly columns?: number;\n readonly gap?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.grid\"\n :style=\"{\n '--gap': `${gap}px`,\n '--columns': columns\n }\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Grid.module.scss';\n\n const {\n columns = 12,\n gap = 18\n } = defineProps<{\n readonly columns?: number;\n readonly gap?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.gridColumn\"\n :style=\"{\n '--xs': xs ?? 12,\n '--sm': sm ?? xs ?? 12,\n '--md': md ?? sm ?? xs ?? 12,\n '--lg': lg ?? md ?? sm ?? xs ?? 12,\n '--xl': xl ?? lg ?? md ?? sm ?? xs ?? 12\n }\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Grid.module.scss';\n\n defineProps<{\n readonly xs?: number;\n readonly sm?: number;\n readonly md?: number;\n readonly lg?: number;\n readonly xl?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.gridColumn\"\n :style=\"{\n '--xs': xs ?? 12,\n '--sm': sm ?? xs ?? 12,\n '--md': md ?? sm ?? xs ?? 12,\n '--lg': lg ?? md ?? sm ?? xs ?? 12,\n '--xl': xl ?? lg ?? md ?? sm ?? xs ?? 12\n }\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Grid.module.scss';\n\n defineProps<{\n readonly xs?: number;\n readonly sm?: number;\n readonly md?: number;\n readonly lg?: number;\n readonly xl?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <svg\n ref=\"svg\"\n :class=\"$style.gridPattern\">\n <defs>\n <pattern\n :id=\"id\"\n :width=\"width\"\n :height=\"height\"\n patternUnits=\"userSpaceOnUse\"\n :x=\"-1\"\n :y=\"-1\">\n <path\n :d=\"`M.5 ${height}V.5H${width}`\"\n fill=\"none\"\n :stroke-dasharray=\"strokeDasharray\"/>\n </pattern>\n </defs>\n\n <rect\n width=\"100%\"\n height=\"100%\"\n stroke-width=\"0\"\n :fill=\"`url(#${id})`\"/>\n\n <svg\n v-if=\"squares\"\n style=\"overflow: visible;\">\n <rect\n v-for=\"[x, y] of squares\"\n :key=\"`${x}-${y}`\"\n :width=\"width - 1\"\n :height=\"height - 1\"\n :x=\"x * width\"\n :y=\"y * height\"\n stroke-width=\"0\"/>\n </svg>\n </svg>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useId } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n const {\n width = 42,\n height = 42,\n strokeDasharray = 0,\n squares\n } = defineProps<{\n readonly width?: number;\n readonly height?: number;\n readonly strokeDasharray?: number | string;\n readonly squares?: Array<[x: number, y: number]>;\n }>();\n\n const id = useId();\n</script>\n","<template>\n <svg\n ref=\"svg\"\n :class=\"$style.gridPattern\">\n <defs>\n <pattern\n :id=\"id\"\n :width=\"width\"\n :height=\"height\"\n patternUnits=\"userSpaceOnUse\"\n :x=\"-1\"\n :y=\"-1\">\n <path\n :d=\"`M.5 ${height}V.5H${width}`\"\n fill=\"none\"\n :stroke-dasharray=\"strokeDasharray\"/>\n </pattern>\n </defs>\n\n <rect\n width=\"100%\"\n height=\"100%\"\n stroke-width=\"0\"\n :fill=\"`url(#${id})`\"/>\n\n <svg\n v-if=\"squares\"\n style=\"overflow: visible;\">\n <rect\n v-for=\"[x, y] of squares\"\n :key=\"`${x}-${y}`\"\n :width=\"width - 1\"\n :height=\"height - 1\"\n :x=\"x * width\"\n :y=\"y * height\"\n stroke-width=\"0\"/>\n </svg>\n </svg>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useId } from 'vue';\n import $style from '$flux/css/component/Visual.module.scss';\n\n const {\n width = 42,\n height = 42,\n strokeDasharray = 0,\n squares\n } = defineProps<{\n readonly width?: number;\n readonly height?: number;\n readonly strokeDasharray?: number | string;\n readonly squares?: Array<[x: number, y: number]>;\n }>();\n\n const id = useId();\n</script>\n",".info {\n display: flex;\n gap: 15px;\n\n > .icon {\n margin-top: 3px;\n flex-shrink: 0;\n color: var(--primary-600);\n }\n}\n\n.infoBody {\n align-items: center;\n}\n","<template>\n <div :class=\"$style.info\">\n <FluxIcon\n v-if=\"icon\"\n :class=\"$style.infoIcon\"\n :name=\"icon\"/>\n\n <div :class=\"$style.infoBody\">\n <slot/>\n </div>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\">\n import type { VNode } from 'vue';\n import type { FluxIconName } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Info.module.scss';\n\n defineProps<{\n readonly icon?: FluxIconName;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.info\">\n <FluxIcon\n v-if=\"icon\"\n :class=\"$style.infoIcon\"\n :name=\"icon\"/>\n\n <div :class=\"$style.infoBody\">\n <slot/>\n </div>\n </div>\n</template>\n\n<script\n setup\n lang=\"ts\">\n import type { VNode } from 'vue';\n import type { FluxIconName } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Info.module.scss';\n\n defineProps<{\n readonly icon?: FluxIconName;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxStack\n direction=\"vertical\"\n :gap=\"18\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n setup\n lang=\"ts\">\n import type { VNode } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxStack\n direction=\"vertical\"\n :gap=\"18\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n setup\n lang=\"ts\">\n import type { VNode } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","@use '$flux/css/mixin';\n\n.item {\n display: flex;\n flex-flow: row nowrap;\n gap: 18px;\n text-align: left;\n}\n\n.itemActions {\n flex-shrink: 0;\n}\n\n.itemContent {\n display: flex;\n flex-flow: column;\n flex-grow: 1;\n gap: 3px;\n}\n\n.itemMedia {\n --size: 48px;\n\n flex-shrink: 0;\n}\n\n.itemMedia > img {\n height: var(--size);\n width: var(--size);\n object-fit: cover;\n object-position: center;\n}\n\n.itemMedia > .avatar {\n font-size: var(--size);\n}\n\n.itemMedia > .icon {\n margin: 1px;\n font-size: 20px;\n}\n\n.itemMedia > .iconBoxed {\n font-size: var(--size);\n}\n\n.itemActions.isCenter,\n.itemContent.isCenter,\n.itemMedia.isCenter {\n align-self: center;\n}\n\n.itemStack {\n position: relative;\n\n .item + .item {\n margin-top: 18px;\n padding-top: 18px;\n border-top: 1px solid var(--surface-stroke);\n }\n}\n\n.basePaneStructure > .item,\n.basePaneStructure > .itemStack > .item {\n padding: 18px;\n}\n\n.basePaneStructure > .itemStack > .item {\n margin: 0;\n}\n\n.basePaneStructure:is(a, button):hover:has(> .item) {\n background-color: color-mix(in srgb, rgb(from var(--surface-hover) r g b / .125), var(--surface));\n}\n","<template>\n <div :class=\"$style.item\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Item.module.scss';\n</script>\n","<template>\n <div :class=\"$style.item\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Item.module.scss';\n</script>\n","<template>\n <FluxActionBar\n :class=\"[$style.itemActions, isCenter && $style.isCenter]\"\n #primary>\n <slot/>\n </FluxActionBar>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Item.module.scss';\n import FluxActionBar from './FluxActionBar.vue';\n\n defineProps<{\n readonly isCenter?: boolean;\n }>();\n</script>\n","<template>\n <FluxActionBar\n :class=\"[$style.itemActions, isCenter && $style.isCenter]\"\n #primary>\n <slot/>\n </FluxActionBar>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Item.module.scss';\n import FluxActionBar from './FluxActionBar.vue';\n\n defineProps<{\n readonly isCenter?: boolean;\n }>();\n</script>\n","<template>\n <div :class=\"[$style.itemContent, isCenter && $style.isCenter]\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Item.module.scss';\n\n defineProps<{\n readonly isCenter?: boolean;\n }>();\n</script>\n","<template>\n <div :class=\"[$style.itemContent, isCenter && $style.isCenter]\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Item.module.scss';\n\n defineProps<{\n readonly isCenter?: boolean;\n }>();\n</script>\n","<template>\n <div\n :class=\"[$style.itemMedia, isCenter && $style.isCenter]\"\n :style=\"{\n '--size': size && `${size}px`\n }\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Item.module.scss';\n\n defineProps<{\n readonly isCenter?: boolean;\n readonly size?: number;\n }>();\n</script>\n","<template>\n <div\n :class=\"[$style.itemMedia, isCenter && $style.isCenter]\"\n :style=\"{\n '--size': size && `${size}px`\n }\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Item.module.scss';\n\n defineProps<{\n readonly isCenter?: boolean;\n readonly size?: number;\n }>();\n</script>\n","<template>\n <FluxStack\n :class=\"$style.itemStack\"\n :gap=\"0\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import FluxStack from './FluxStack.vue';\n import $style from '$flux/css/component/Item.module.scss';\n</script>\n","<template>\n <FluxStack\n :class=\"$style.itemStack\"\n :gap=\"0\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import FluxStack from './FluxStack.vue';\n import $style from '$flux/css/component/Item.module.scss';\n</script>\n",".layerPane {\n display: flex;\n flex-flow: column;\n border: 1px solid var(--surface-stroke-out);\n border-radius: var(--radius);\n background: var(--gray-50);\n background-clip: padding-box;\n}\n\n.layerPane > .basePaneStructure {\n border-right-width: 0;\n border-left-width: 0;\n}\n\n.layerPane > .basePaneStructure:first-child {\n border-top-width: 0;\n}\n\n.layerPane > .basePaneStructure:last-child {\n border-bottom-width: 0;\n}\n\n.layerPane > .basePaneStructure + .basePaneStructure {\n border-top-width: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.layerPane > .basePaneStructure:has(+ .basePaneStructure) {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.layerPaneSecondary {\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 12px 18px;\n color: var(--foreground-prominent);\n}\n","<template>\n <div :class=\"$style.layerPane\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/LayerPane.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.layerPane\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/LayerPane.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.layerPaneSecondary\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/LayerPane.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.layerPaneSecondary\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/LayerPane.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n",".legendHorizontal {\n composes: stackHorizontal from './Layout.module.scss';\n\n gap: 12px 18px;\n}\n\n.legendVertical {\n composes: stackVertical from './Layout.module.scss';\n\n gap: 12px;\n}\n\n.legendItem {\n display: flex;\n flex-flow: row nowrap;\n gap: 6px;\n font-size: 14px;\n line-height: 1;\n\n &::before {\n display: block;\n margin-top: 1px;\n height: 12px;\n width: 12px;\n content: '';\n flex: 0 0 12px;\n background: var(--color);\n border-radius: var(--radius-full);\n }\n}\n","<template>\n <div :class=\"direction === 'horizontal' ? $style.legendHorizontal : $style.legendVertical\">\n <span\n v-for=\"(item, index) of items\"\n :key=\"index\"\n :class=\"$style.legendItem\"\n :style=\"{\n '--color': item.color\n }\">\n {{ item.label }}\n </span>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxDirection, FluxLegendObject } from '@flux-ui/types';\n import $style from '$flux/css/component/Legend.module.scss';\n\n const {\n direction = 'horizontal'\n } = defineProps<{\n readonly direction?: FluxDirection;\n readonly items: FluxLegendObject[];\n }>();\n</script>\n","<template>\n <div :class=\"direction === 'horizontal' ? $style.legendHorizontal : $style.legendVertical\">\n <span\n v-for=\"(item, index) of items\"\n :key=\"index\"\n :class=\"$style.legendItem\"\n :style=\"{\n '--color': item.color\n }\">\n {{ item.label }}\n </span>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxDirection, FluxLegendObject } from '@flux-ui/types';\n import $style from '$flux/css/component/Legend.module.scss';\n\n const {\n direction = 'horizontal'\n } = defineProps<{\n readonly direction?: FluxDirection;\n readonly items: FluxLegendObject[];\n }>();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading: icon, iconTrailing: 'arrow-right-long', isFilled, label, href, rel, target, to}\"\n :css-class=\"$style.linkButton\"\n :css-class-icon=\"$style.linkButtonIcon\"\n :css-class-label=\"$style.linkButtonLabel\"\n @click=\"emit('click', $event)\"\n @mouseenter=\"emit('mouseenter', $event)\"\n @mouseleave=\"emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots, FluxIconName } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n const emit = defineEmits<FluxButtonEmits>();\n\n const {\n type = 'button'\n } = defineProps<FluxButtonProps & {\n readonly icon?: FluxIconName;\n readonly label?: string;\n }>();\n\n defineSlots<FluxButtonSlots>();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading: icon, iconTrailing: 'arrow-right-long', isFilled, label, href, rel, target, to}\"\n :css-class=\"$style.linkButton\"\n :css-class-icon=\"$style.linkButtonIcon\"\n :css-class-label=\"$style.linkButtonLabel\"\n @click=\"emit('click', $event)\"\n @mouseenter=\"emit('mouseenter', $event)\"\n @mouseleave=\"emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots, FluxIconName } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n const emit = defineEmits<FluxButtonEmits>();\n\n const {\n type = 'button'\n } = defineProps<FluxButtonProps & {\n readonly icon?: FluxIconName;\n readonly label?: string;\n }>();\n\n defineSlots<FluxButtonSlots>();\n</script>\n","<template>\n <div :class=\"isOpen ? $style.menuCollapsibleOpened : $style.menuCollapsible\">\n <FluxMenuItem\n :disabled=\"disabled\"\n :href=\"href\"\n :icon-leading=\"iconLeading\"\n :icon-trailing=\"isOpen ? 'angle-down' : 'angle-right'\"\n :label=\"label\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"bodyId\"\n @click=\"onHeaderClick\">\n <template\n v-if=\"slots.before\"\n #before>\n <slot name=\"before\"/>\n </template>\n </FluxMenuItem>\n\n <FluxAutoHeightTransition>\n <div\n v-if=\"isOpen\"\n :id=\"bodyId\"\n :class=\"$style.menuCollapsibleBody\"\n role=\"group\">\n <div :class=\"$style.menuCollapsibleContent\">\n <slot/>\n </div>\n </div>\n </FluxAutoHeightTransition>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName, FluxTo } from '@flux-ui/types';\n import { flattenVNodeTree } from '@flux-ui/internals';\n import { computed, getCurrentInstance, ref, useId, type VNode, watch } from 'vue';\n import { FluxAutoHeightTransition } from '$flux/transition';\n import FluxMenuItem from './FluxMenuItem.vue';\n import $style from '$flux/css/component/Menu.module.scss';\n\n type RouteRecordLike = {\n readonly name?: string | symbol | null | undefined;\n };\n\n type RouteLike = {\n readonly path: string;\n readonly matched: readonly RouteRecordLike[];\n };\n\n type RouteAwareInstance = {\n readonly $route?: RouteLike;\n };\n\n const emit = defineEmits<{\n toggle: [boolean];\n 'update:isOpened': [boolean];\n }>();\n\n const {\n href,\n isOpened,\n to\n } = defineProps<{\n readonly disabled?: boolean;\n readonly href?: string;\n readonly iconLeading?: FluxIconName | null;\n readonly isOpened?: boolean;\n readonly label?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n const slots = defineSlots<{\n default(): VNode[];\n before(): VNode[];\n }>();\n\n const bodyId = useId();\n const instance = getCurrentInstance();\n const isOpen = ref(!!isOpened);\n const route = computed<RouteLike | undefined>(() => (instance?.proxy as RouteAwareInstance | null)?.$route);\n\n function open(): void {\n if (isOpen.value) {\n return;\n }\n\n isOpen.value = true;\n emit('toggle', true);\n emit('update:isOpened', true);\n }\n\n function close(): void {\n if (!isOpen.value) {\n return;\n }\n\n isOpen.value = false;\n emit('toggle', false);\n emit('update:isOpened', false);\n }\n\n function toggle(): void {\n if (isOpen.value) {\n close();\n } else {\n open();\n }\n }\n\n function onHeaderClick(): void {\n if (to || href) {\n open();\n } else {\n toggle();\n }\n }\n\n function matchesRoute(target: unknown, currentRoute: RouteLike | undefined): boolean {\n if (!target || !currentRoute) {\n return false;\n }\n\n if (typeof target === 'string') {\n return currentRoute.path === target || currentRoute.path.startsWith(`${target}/`);\n }\n\n if (typeof target === 'object') {\n const obj = target as Record<string, unknown>;\n\n if (typeof obj.path === 'string') {\n return currentRoute.path === obj.path || currentRoute.path.startsWith(`${obj.path}/`);\n }\n\n if (obj.name && Array.isArray(currentRoute.matched)) {\n return currentRoute.matched.some(record => record.name === obj.name);\n }\n }\n\n return false;\n }\n\n watch(() => isOpened, value => {\n if (value === undefined) {\n return;\n }\n\n if (value) {\n open();\n } else {\n close();\n }\n });\n\n watch(route, currentRoute => {\n if (!currentRoute) {\n return;\n }\n\n const vnodes = flattenVNodeTree(slots.default?.() ?? []);\n\n for (const vnode of vnodes) {\n const childTo = vnode.props?.to;\n const childHref = vnode.props?.href;\n\n if (matchesRoute(childTo, currentRoute) || matchesRoute(childHref, currentRoute)) {\n open();\n return;\n }\n }\n }, {\n immediate: true\n });\n\n defineExpose({\n isOpen,\n open,\n close,\n toggle\n });\n</script>\n","<template>\n <div :class=\"isOpen ? $style.menuCollapsibleOpened : $style.menuCollapsible\">\n <FluxMenuItem\n :disabled=\"disabled\"\n :href=\"href\"\n :icon-leading=\"iconLeading\"\n :icon-trailing=\"isOpen ? 'angle-down' : 'angle-right'\"\n :label=\"label\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"bodyId\"\n @click=\"onHeaderClick\">\n <template\n v-if=\"slots.before\"\n #before>\n <slot name=\"before\"/>\n </template>\n </FluxMenuItem>\n\n <FluxAutoHeightTransition>\n <div\n v-if=\"isOpen\"\n :id=\"bodyId\"\n :class=\"$style.menuCollapsibleBody\"\n role=\"group\">\n <div :class=\"$style.menuCollapsibleContent\">\n <slot/>\n </div>\n </div>\n </FluxAutoHeightTransition>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName, FluxTo } from '@flux-ui/types';\n import { flattenVNodeTree } from '@flux-ui/internals';\n import { computed, getCurrentInstance, ref, useId, type VNode, watch } from 'vue';\n import { FluxAutoHeightTransition } from '$flux/transition';\n import FluxMenuItem from './FluxMenuItem.vue';\n import $style from '$flux/css/component/Menu.module.scss';\n\n type RouteRecordLike = {\n readonly name?: string | symbol | null | undefined;\n };\n\n type RouteLike = {\n readonly path: string;\n readonly matched: readonly RouteRecordLike[];\n };\n\n type RouteAwareInstance = {\n readonly $route?: RouteLike;\n };\n\n const emit = defineEmits<{\n toggle: [boolean];\n 'update:isOpened': [boolean];\n }>();\n\n const {\n href,\n isOpened,\n to\n } = defineProps<{\n readonly disabled?: boolean;\n readonly href?: string;\n readonly iconLeading?: FluxIconName | null;\n readonly isOpened?: boolean;\n readonly label?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n const slots = defineSlots<{\n default(): VNode[];\n before(): VNode[];\n }>();\n\n const bodyId = useId();\n const instance = getCurrentInstance();\n const isOpen = ref(!!isOpened);\n const route = computed<RouteLike | undefined>(() => (instance?.proxy as RouteAwareInstance | null)?.$route);\n\n function open(): void {\n if (isOpen.value) {\n return;\n }\n\n isOpen.value = true;\n emit('toggle', true);\n emit('update:isOpened', true);\n }\n\n function close(): void {\n if (!isOpen.value) {\n return;\n }\n\n isOpen.value = false;\n emit('toggle', false);\n emit('update:isOpened', false);\n }\n\n function toggle(): void {\n if (isOpen.value) {\n close();\n } else {\n open();\n }\n }\n\n function onHeaderClick(): void {\n if (to || href) {\n open();\n } else {\n toggle();\n }\n }\n\n function matchesRoute(target: unknown, currentRoute: RouteLike | undefined): boolean {\n if (!target || !currentRoute) {\n return false;\n }\n\n if (typeof target === 'string') {\n return currentRoute.path === target || currentRoute.path.startsWith(`${target}/`);\n }\n\n if (typeof target === 'object') {\n const obj = target as Record<string, unknown>;\n\n if (typeof obj.path === 'string') {\n return currentRoute.path === obj.path || currentRoute.path.startsWith(`${obj.path}/`);\n }\n\n if (obj.name && Array.isArray(currentRoute.matched)) {\n return currentRoute.matched.some(record => record.name === obj.name);\n }\n }\n\n return false;\n }\n\n watch(() => isOpened, value => {\n if (value === undefined) {\n return;\n }\n\n if (value) {\n open();\n } else {\n close();\n }\n });\n\n watch(route, currentRoute => {\n if (!currentRoute) {\n return;\n }\n\n const vnodes = flattenVNodeTree(slots.default?.() ?? []);\n\n for (const vnode of vnodes) {\n const childTo = vnode.props?.to;\n const childHref = vnode.props?.href;\n\n if (matchesRoute(childTo, currentRoute) || matchesRoute(childHref, currentRoute)) {\n open();\n return;\n }\n }\n }, {\n immediate: true\n });\n\n defineExpose({\n isOpen,\n open,\n close,\n toggle\n });\n</script>\n","<template>\n <FluxMenuGroup :is-horizontal=\"isHorizontal\">\n <template v-for=\"item in items\">\n <component :is=\"item\"/>\n </template>\n </FluxMenuGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree } from '@flux-ui/internals';\n import { cloneVNode, computed, unref, type VNode } from 'vue';\n import FluxMenuGroup from './FluxMenuGroup.vue';\n\n const modelValue = defineModel<number>({\n required: true\n });\n\n const {\n mode = 'highlight'\n } = defineProps<{\n readonly isHorizontal?: boolean;\n readonly mode?: 'highlight' | 'select';\n }>();\n\n const slots = defineSlots<{\n default(): VNode[];\n }>();\n\n const items = computed(() => flattenVNodeTree(slots.default())\n .map((item: VNode, index: number) => cloneVNode(item, {\n isHighlighted: mode === 'highlight' && unref(modelValue) === index,\n isSelectable: mode === 'select',\n isSelected: mode === 'select' && unref(modelValue) === index,\n onClick: () => modelValue.value = index\n })));\n</script>\n","<template>\n <FluxMenuGroup :is-horizontal=\"isHorizontal\">\n <template v-for=\"item in items\">\n <component :is=\"item\"/>\n </template>\n </FluxMenuGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree } from '@flux-ui/internals';\n import { cloneVNode, computed, unref, type VNode } from 'vue';\n import FluxMenuGroup from './FluxMenuGroup.vue';\n\n const modelValue = defineModel<number>({\n required: true\n });\n\n const {\n mode = 'highlight'\n } = defineProps<{\n readonly isHorizontal?: boolean;\n readonly mode?: 'highlight' | 'select';\n }>();\n\n const slots = defineSlots<{\n default(): VNode[];\n }>();\n\n const items = computed(() => flattenVNodeTree(slots.default())\n .map((item: VNode, index: number) => cloneVNode(item, {\n isHighlighted: mode === 'highlight' && unref(modelValue) === index,\n isSelectable: mode === 'select',\n isSelected: mode === 'select' && unref(modelValue) === index,\n onClick: () => modelValue.value = index\n })));\n</script>\n","<template>\n <div\n :class=\"$style.menuTitle\"\n role=\"presentation\">\n {{ title }}\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Menu.module.scss';\n\n defineProps<{\n readonly title: string;\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.menuTitle\"\n role=\"presentation\">\n {{ title }}\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import $style from '$flux/css/component/Menu.module.scss';\n\n defineProps<{\n readonly title: string;\n }>();\n</script>\n","@use '$flux/css/mixin';\n\n.notice {\n composes: basePaneElement from './base/Pane.module.scss';\n\n display: flex;\n padding: 12px 15px;\n gap: 12px;\n border-radius: var(--radius);\n\n .button {\n margin-top: -6px;\n margin-right: -9px;\n margin-bottom: -6px;\n height: 36px;\n }\n\n a {\n color: currentColor;\n }\n\n ul {\n margin-top: 3px;\n padding-left: 1em;\n list-style-type: disc;\n\n li + li {\n margin-top: 9px;\n }\n }\n}\n\n.noticeBody {\n display: flex;\n flex-flow: column;\n flex-grow: 1;\n text-wrap: pretty;\n\n :global(p) {\n line-height: 1.6;\n }\n\n &:last-child {\n flex-grow: 0;\n }\n}\n\n.noticeClose {\n display: flex;\n height: 20px;\n width: 20px;\n margin: 2px;\n padding: 0;\n align-items: center;\n flex-shrink: 0;\n justify-content: center;\n border: 0;\n border-radius: 12px;\n color: currentColor;\n cursor: pointer;\n transition: opacity 150ms var(--swift-out);\n\n @include mixin.hover {\n opacity: .75;\n }\n\n > .icon {\n font-size: 14px;\n }\n}\n\n.noticePrefix {\n margin-top: 2px;\n flex-shrink: 0;\n font-size: 20px;\n}\n\n.noticeMessage,\n.noticeTitle {\n margin: 0;\n}\n\n.noticeTitle {\n font-weight: 600;\n}\n\n.notice.isCenter {\n justify-content: center;\n text-align: center;\n}\n\n.notice.isFluid {\n border-style: solid;\n border-width: 1px;\n border-left: 0;\n border-right: 0;\n border-radius: 0;\n\n &:first-child {\n border-top: 0;\n }\n\n &:last-child {\n border-bottom: 0;\n }\n}\n\n.noticeGray {\n composes: notice;\n\n background: var(--gray-50);\n border-color: var(--gray-200);\n color: var(--foreground);\n\n .noticeClose {\n background: var(--gray-200);\n }\n\n .noticePrefix,\n .noticeTitle {\n color: var(--foreground-prominent);\n }\n}\n\n.noticePrimary {\n composes: notice;\n\n background: var(--primary-100);\n border-color: var(--primary-200);\n color: var(--primary-950);\n\n .noticeClose {\n background: var(--primary-200);\n }\n\n .noticePrefix,\n .noticeTitle {\n color: var(--primary-800);\n }\n\n :local(.button) {\n border-color: var(--primary-300);\n }\n\n :local(.spinnerTrack) {\n stroke: var(--primary-200);\n }\n\n :local(.spinnerEffect),\n :local(.spinnerValue) {\n stroke: var(--primary-600);\n }\n}\n\n.noticeDanger {\n composes: notice;\n\n background: var(--danger-100);\n border-color: var(--danger-200);\n color: var(--danger-950);\n\n .noticeClose {\n background: var(--danger-200);\n }\n\n .noticePrefix,\n .noticeTitle {\n color: var(--danger-800);\n }\n\n :local(.button) {\n border-color: var(--danger-300);\n }\n\n :local(.spinnerTrack) {\n stroke: var(--danger-200);\n }\n\n :local(.spinnerEffect),\n :local(.spinnerValue) {\n stroke: var(--danger-600);\n }\n}\n\n.noticeInfo {\n composes: notice;\n\n background: var(--info-100);\n border-color: var(--info-200);\n color: var(--info-950);\n\n .noticeClose {\n background: var(--info-200);\n }\n\n .noticePrefix,\n .noticeTitle {\n color: var(--info-800);\n }\n\n :local(.button) {\n border-color: var(--info-300);\n }\n\n :local(.spinnerTrack) {\n stroke: var(--info-200);\n }\n\n :local(.spinnerEffect),\n :local(.spinnerValue) {\n stroke: var(--info-600);\n }\n}\n\n.noticeSuccess {\n composes: notice;\n\n background: var(--success-100);\n border-color: var(--success-200);\n color: var(--success-950);\n\n .noticeClose {\n background: var(--success-200);\n }\n\n .noticePrefix,\n .noticeTitle {\n color: var(--success-800);\n }\n\n :local(.button) {\n border-color: var(--success-300);\n }\n\n :local(.spinnerTrack) {\n stroke: var(--success-200);\n }\n\n :local(.spinnerEffect),\n :local(.spinnerValue) {\n stroke: var(--success-600);\n }\n}\n\n.noticeWarning {\n composes: notice;\n\n background: var(--warning-100);\n border-color: var(--warning-200);\n color: var(--warning-950);\n\n .noticeClose {\n background: var(--warning-200);\n }\n\n .noticePrefix,\n .noticeTitle {\n color: var(--warning-800);\n }\n\n :local(.button) {\n border-color: var(--warning-300);\n }\n\n :local(.spinnerTrack) {\n stroke: var(--warning-200);\n }\n\n :local(.spinnerEffect),\n :local(.spinnerValue) {\n stroke: var(--warning-600);\n }\n}\n\n.basePane > .notice {\n padding-left: 18px;\n padding-right: 18px;\n}\n","<template>\n <div\n :class=\"clsx(\n color === 'gray' && $style.noticeGray,\n color === 'primary' && $style.noticePrimary,\n color === 'danger' && $style.noticeDanger,\n color === 'info' && $style.noticeInfo,\n color === 'success' && $style.noticeSuccess,\n color === 'warning' && $style.noticeWarning,\n isCenter && $style.isCenter,\n isFluid && $style.isFluid\n )\"\n role=\"alert\">\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.noticePrefix\"/>\n\n <FluxIcon\n v-if=\"icon && !isLoading\"\n :class=\"$style.noticePrefix\"\n :name=\"icon\"/>\n\n <div :class=\"$style.noticeBody\">\n <p\n v-if=\"title\"\n :class=\"$style.noticeTitle\">\n {{ title }}\n </p>\n <p\n v-if=\"message\"\n :class=\"$style.noticeMessage\">\n {{ message }}\n </p>\n <slot/>\n </div>\n\n <slot name=\"end\"/>\n\n <button\n v-if=\"isCloseable\"\n :class=\"$style.noticeClose\"\n type=\"button\"\n :aria-label=\"translate('flux.close')\"\n @click=\"emit('close')\">\n <FluxIcon name=\"xmark\"/>\n </button>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxColor, FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { useTranslate } from '$flux/composable/private';\n import FluxIcon from './FluxIcon.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Notice.module.scss';\n\n const emit = defineEmits<{\n close: [];\n }>();\n\n const {\n color = 'gray'\n } = defineProps<{\n readonly color?: FluxColor;\n readonly icon?: FluxIconName;\n readonly isCenter?: boolean;\n readonly isCloseable?: boolean;\n readonly isFluid?: boolean;\n readonly isLoading?: boolean;\n readonly message?: string;\n readonly title?: string;\n }>();\n\n defineSlots<{\n default(): VNode[];\n end(): VNode[];\n }>();\n\n const translate = useTranslate();\n</script>\n","<template>\n <div\n :class=\"clsx(\n color === 'gray' && $style.noticeGray,\n color === 'primary' && $style.noticePrimary,\n color === 'danger' && $style.noticeDanger,\n color === 'info' && $style.noticeInfo,\n color === 'success' && $style.noticeSuccess,\n color === 'warning' && $style.noticeWarning,\n isCenter && $style.isCenter,\n isFluid && $style.isFluid\n )\"\n role=\"alert\">\n <FluxSpinner\n v-if=\"isLoading\"\n :class=\"$style.noticePrefix\"/>\n\n <FluxIcon\n v-if=\"icon && !isLoading\"\n :class=\"$style.noticePrefix\"\n :name=\"icon\"/>\n\n <div :class=\"$style.noticeBody\">\n <p\n v-if=\"title\"\n :class=\"$style.noticeTitle\">\n {{ title }}\n </p>\n <p\n v-if=\"message\"\n :class=\"$style.noticeMessage\">\n {{ message }}\n </p>\n <slot/>\n </div>\n\n <slot name=\"end\"/>\n\n <button\n v-if=\"isCloseable\"\n :class=\"$style.noticeClose\"\n type=\"button\"\n :aria-label=\"translate('flux.close')\"\n @click=\"emit('close')\">\n <FluxIcon name=\"xmark\"/>\n </button>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxColor, FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { useTranslate } from '$flux/composable/private';\n import FluxIcon from './FluxIcon.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Notice.module.scss';\n\n const emit = defineEmits<{\n close: [];\n }>();\n\n const {\n color = 'gray'\n } = defineProps<{\n readonly color?: FluxColor;\n readonly icon?: FluxIconName;\n readonly isCenter?: boolean;\n readonly isCloseable?: boolean;\n readonly isFluid?: boolean;\n readonly isLoading?: boolean;\n readonly message?: string;\n readonly title?: string;\n }>();\n\n defineSlots<{\n default(): VNode[];\n end(): VNode[];\n }>();\n\n const translate = useTranslate();\n</script>\n","<template>\n <FluxStack\n direction=\"vertical\"\n :gap=\"6\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxStack\n direction=\"vertical\"\n :gap=\"6\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<script lang=\"ts\">\n import type { FluxSize } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { defineComponent, type PropType } from 'vue';\n import { FluxOverlayTransition } from '$flux/transition';\n import { createDialogRenderer } from '$flux/util';\n import $style from '$flux/css/component/Overlay.module.scss';\n\n export default defineComponent({\n emits: ['close'],\n inheritAttrs: false,\n props: {\n isCloseable: {default: false, type: Boolean},\n size: {default: 'small', type: String as PropType<FluxSize>}\n },\n setup(props, {attrs, emit, slots}) {\n return createDialogRenderer(\n attrs,\n props,\n emit,\n slots,\n clsx(\n props.size === 'small' && $style.overlaySmall,\n props.size === 'medium' && $style.overlayMedium,\n props.size === 'large' && $style.overlayLarge\n ),\n FluxOverlayTransition\n );\n }\n });\n</script>\n","<script lang=\"ts\">\n import type { FluxSize } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { defineComponent, type PropType } from 'vue';\n import { FluxOverlayTransition } from '$flux/transition';\n import { createDialogRenderer } from '$flux/util';\n import $style from '$flux/css/component/Overlay.module.scss';\n\n export default defineComponent({\n emits: ['close'],\n inheritAttrs: false,\n props: {\n isCloseable: {default: false, type: Boolean},\n size: {default: 'small', type: String as PropType<FluxSize>}\n },\n setup(props, {attrs, emit, slots}) {\n return createDialogRenderer(\n attrs,\n props,\n emit,\n slots,\n clsx(\n props.size === 'small' && $style.overlaySmall,\n props.size === 'medium' && $style.overlayMedium,\n props.size === 'large' && $style.overlayLarge\n ),\n FluxOverlayTransition\n );\n }\n });\n</script>\n","<template>\n <DialogLayout\n :icon=\"alert.icon\"\n :message=\"alert.message\"\n :title=\"alert.title\">\n <template #footer>\n <FluxPrimaryButton\n icon-leading=\"circle-check\"\n :label=\"translate('flux.ok')\"\n @click=\"alert.onClose()\"/>\n </template>\n </DialogLayout>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAlertObject } from '@flux-ui/types';\n import { useTranslate } from '$flux/composable/private';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import { DialogLayout } from './primitive';\n\n defineProps<{\n readonly alert: FluxAlertObject;\n }>();\n\n const translate = useTranslate();\n</script>\n","<template>\n <DialogLayout\n :icon=\"alert.icon\"\n :message=\"alert.message\"\n :title=\"alert.title\">\n <template #footer>\n <FluxPrimaryButton\n icon-leading=\"circle-check\"\n :label=\"translate('flux.ok')\"\n @click=\"alert.onClose()\"/>\n </template>\n </DialogLayout>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxAlertObject } from '@flux-ui/types';\n import { useTranslate } from '$flux/composable/private';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import { DialogLayout } from './primitive';\n\n defineProps<{\n readonly alert: FluxAlertObject;\n }>();\n\n const translate = useTranslate();\n</script>\n","<template>\n <DialogLayout\n :icon=\"confirm.icon\"\n :message=\"confirm.message\"\n :title=\"confirm.title\">\n <template #footer>\n <FluxSecondaryButton\n :label=\"translate('flux.cancel')\"\n @click=\"confirm.onCancel()\"/>\n\n <FluxPrimaryButton\n icon-leading=\"circle-check\"\n :label=\"translate('flux.ok')\"\n @click=\"confirm.onConfirm()\"/>\n </template>\n </DialogLayout>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxConfirmObject } from '@flux-ui/types';\n import { useTranslate } from '$flux/composable/private';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import { DialogLayout } from './primitive';\n\n defineProps<{\n readonly confirm: FluxConfirmObject;\n }>();\n\n const translate = useTranslate();\n</script>\n","<template>\n <DialogLayout\n :icon=\"confirm.icon\"\n :message=\"confirm.message\"\n :title=\"confirm.title\">\n <template #footer>\n <FluxSecondaryButton\n :label=\"translate('flux.cancel')\"\n @click=\"confirm.onCancel()\"/>\n\n <FluxPrimaryButton\n icon-leading=\"circle-check\"\n :label=\"translate('flux.ok')\"\n @click=\"confirm.onConfirm()\"/>\n </template>\n </DialogLayout>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxConfirmObject } from '@flux-ui/types';\n import { useTranslate } from '$flux/composable/private';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import { DialogLayout } from './primitive';\n\n defineProps<{\n readonly confirm: FluxConfirmObject;\n }>();\n\n const translate = useTranslate();\n</script>\n","<template>\n <DialogLayout\n :icon=\"prompt.icon\"\n :message=\"prompt.message\"\n :title=\"prompt.title\">\n <FluxFormField :label=\"prompt.fieldLabel\">\n <FluxFormInput\n ref=\"input\"\n v-model=\"value\"\n :placeholder=\"prompt.fieldPlaceholder\"\n :type=\"prompt.fieldType ?? 'text'\"\n @keydown=\"onKeyDown\"/>\n </FluxFormField>\n\n <template #footer>\n <FluxSecondaryButton\n :label=\"translate('flux.cancel')\"\n @click=\"prompt.onCancel()\"/>\n\n <FluxPrimaryButton\n :disabled=\"!hasValue\"\n icon-leading=\"circle-check\"\n :label=\"translate('flux.ok')\"\n @click=\"prompt.onConfirm(value)\"/>\n </template>\n </DialogLayout>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxPromptObject } from '@flux-ui/types';\n import { computed, onMounted, ref, unref, useTemplateRef } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import FluxFormField from './FluxFormField.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import { DialogLayout } from './primitive';\n\n const {\n prompt\n } = defineProps<{\n readonly prompt: FluxPromptObject;\n }>();\n\n const inputRef = useTemplateRef('input');\n const translate = useTranslate();\n\n const value = ref('');\n\n const hasValue = computed(() => unref(value).trim().length > 0);\n\n onMounted(() => {\n const input = unref(inputRef);\n requestAnimationFrame(() => input?.$el.querySelector('input')?.focus());\n });\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (!unref(hasValue) || evt.key !== 'Enter') {\n return;\n }\n\n prompt.onConfirm(unref(value));\n }\n</script>\n","<template>\n <DialogLayout\n :icon=\"prompt.icon\"\n :message=\"prompt.message\"\n :title=\"prompt.title\">\n <FluxFormField :label=\"prompt.fieldLabel\">\n <FluxFormInput\n ref=\"input\"\n v-model=\"value\"\n :placeholder=\"prompt.fieldPlaceholder\"\n :type=\"prompt.fieldType ?? 'text'\"\n @keydown=\"onKeyDown\"/>\n </FluxFormField>\n\n <template #footer>\n <FluxSecondaryButton\n :label=\"translate('flux.cancel')\"\n @click=\"prompt.onCancel()\"/>\n\n <FluxPrimaryButton\n :disabled=\"!hasValue\"\n icon-leading=\"circle-check\"\n :label=\"translate('flux.ok')\"\n @click=\"prompt.onConfirm(value)\"/>\n </template>\n </DialogLayout>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxPromptObject } from '@flux-ui/types';\n import { computed, onMounted, ref, unref, useTemplateRef } from 'vue';\n import { useTranslate } from '$flux/composable/private';\n import FluxFormField from './FluxFormField.vue';\n import FluxFormInput from './FluxFormInput.vue';\n import FluxPrimaryButton from './FluxPrimaryButton.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import { DialogLayout } from './primitive';\n\n const {\n prompt\n } = defineProps<{\n readonly prompt: FluxPromptObject;\n }>();\n\n const inputRef = useTemplateRef('input');\n const translate = useTranslate();\n\n const value = ref('');\n\n const hasValue = computed(() => unref(value).trim().length > 0);\n\n onMounted(() => {\n const input = unref(inputRef);\n requestAnimationFrame(() => input?.$el.querySelector('input')?.focus());\n });\n\n function onKeyDown(evt: KeyboardEvent): void {\n if (!unref(hasValue) || evt.key !== 'Enter') {\n return;\n }\n\n prompt.onConfirm(unref(value));\n }\n</script>\n","<template>\n <div :class=\"$style.overlayProvider\">\n <div :class=\"$style.overlayShade\"/>\n </div>\n\n <FluxOverlay size=\"medium\">\n <FluxAlert\n v-for=\"alert of alerts\"\n :key=\"alert.id\"\n :alert=\"alert\"/>\n </FluxOverlay>\n\n <FluxOverlay size=\"medium\">\n <FluxConfirm\n v-for=\"confirm of confirms\"\n :key=\"confirm.id\"\n :confirm=\"confirm\"/>\n </FluxOverlay>\n\n <FluxOverlay size=\"medium\">\n <FluxPrompt\n v-for=\"prompt of prompts\"\n :key=\"prompt.id\"\n :prompt=\"prompt\"/>\n </FluxOverlay>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useFluxStore } from '$flux/data';\n import FluxAlert from './FluxAlert.vue';\n import FluxConfirm from './FluxConfirm.vue';\n import FluxOverlay from './FluxOverlay.vue';\n import FluxPrompt from './FluxPrompt.vue';\n import $style from '$flux/css/component/Overlay.module.scss';\n\n const {alerts, confirms, prompts} = useFluxStore();\n</script>\n","<template>\n <div :class=\"$style.overlayProvider\">\n <div :class=\"$style.overlayShade\"/>\n </div>\n\n <FluxOverlay size=\"medium\">\n <FluxAlert\n v-for=\"alert of alerts\"\n :key=\"alert.id\"\n :alert=\"alert\"/>\n </FluxOverlay>\n\n <FluxOverlay size=\"medium\">\n <FluxConfirm\n v-for=\"confirm of confirms\"\n :key=\"confirm.id\"\n :confirm=\"confirm\"/>\n </FluxOverlay>\n\n <FluxOverlay size=\"medium\">\n <FluxPrompt\n v-for=\"prompt of prompts\"\n :key=\"prompt.id\"\n :prompt=\"prompt\"/>\n </FluxOverlay>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useFluxStore } from '$flux/data';\n import FluxAlert from './FluxAlert.vue';\n import FluxConfirm from './FluxConfirm.vue';\n import FluxOverlay from './FluxOverlay.vue';\n import FluxPrompt from './FluxPrompt.vue';\n import $style from '$flux/css/component/Overlay.module.scss';\n\n const {alerts, confirms, prompts} = useFluxStore();\n</script>\n","<template>\n <div :class=\"$style.paneGroup\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.paneGroup\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"isMasked ? $style.paneIllustrationMasked : $style.paneIllustration\"\n :style=\"{\n aspectRatio\n }\">\n <div\n :class=\"$style.paneIllustrationMagic\"\n :style=\"{\n border: `1px solid ${borderColor}`\n }\">\n <FluxGridPattern :stroke-dasharray=\"3\"/>\n\n <FluxAnimatedColors\n :colors=\"animatedColors\"\n :opacity=\"animatedOpacity\"\n :seed=\"animatedSeed\"/>\n </div>\n\n <div\n v-if=\"slots.controlled\"\n :class=\"$style.paneIllustrationContentControlled\">\n <slot name=\"controlled\"/>\n </div>\n\n <div\n v-if=\"slots.default\"\n :class=\"$style.paneIllustrationContent\">\n <slot/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { hexToRGB } from '@basmilius/utils';\n import { computed, type VNode } from 'vue';\n import FluxAnimatedColors from './FluxAnimatedColors.vue';\n import FluxGridPattern from './FluxGridPattern.vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n const {\n animatedColors,\n aspectRatio = 16 / 9\n } = defineProps<{\n readonly animatedColors: string[];\n readonly animatedOpacity?: number;\n readonly animatedSeed?: number;\n readonly aspectRatio?: number;\n readonly isMasked?: boolean;\n }>();\n\n const slots = defineSlots<{\n default?(): VNode[];\n controlled?(): VNode[];\n }>();\n\n const borderColor = computed(() => {\n if (!animatedColors || animatedColors.length === 0) {\n return 'transparent';\n }\n\n const [r, g, b] = hexToRGB(animatedColors[0]);\n\n return `rgb(${r} ${g} ${b} / .15)`;\n });\n</script>\n","<template>\n <div\n :class=\"isMasked ? $style.paneIllustrationMasked : $style.paneIllustration\"\n :style=\"{\n aspectRatio\n }\">\n <div\n :class=\"$style.paneIllustrationMagic\"\n :style=\"{\n border: `1px solid ${borderColor}`\n }\">\n <FluxGridPattern :stroke-dasharray=\"3\"/>\n\n <FluxAnimatedColors\n :colors=\"animatedColors\"\n :opacity=\"animatedOpacity\"\n :seed=\"animatedSeed\"/>\n </div>\n\n <div\n v-if=\"slots.controlled\"\n :class=\"$style.paneIllustrationContentControlled\">\n <slot name=\"controlled\"/>\n </div>\n\n <div\n v-if=\"slots.default\"\n :class=\"$style.paneIllustrationContent\">\n <slot/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { hexToRGB } from '@basmilius/utils';\n import { computed, type VNode } from 'vue';\n import FluxAnimatedColors from './FluxAnimatedColors.vue';\n import FluxGridPattern from './FluxGridPattern.vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n const {\n animatedColors,\n aspectRatio = 16 / 9\n } = defineProps<{\n readonly animatedColors: string[];\n readonly animatedOpacity?: number;\n readonly animatedSeed?: number;\n readonly aspectRatio?: number;\n readonly isMasked?: boolean;\n }>();\n\n const slots = defineSlots<{\n default?(): VNode[];\n controlled?(): VNode[];\n }>();\n\n const borderColor = computed(() => {\n if (!animatedColors || animatedColors.length === 0) {\n return 'transparent';\n }\n\n const [r, g, b] = hexToRGB(animatedColors[0]);\n\n return `rgb(${r} ${g} ${b} / .15)`;\n });\n</script>\n","<template>\n <div :class=\"isInset ? $style.paneMediaInset : $style.paneMediaDefault\">\n <img\n v-if=\"imageUrl\"\n :class=\"$style.paneMediaImage\"\n :style=\"{\n aspectRatio,\n objectPosition: `${focalPointX}% ${focalPointY}%`\n }\"\n :src=\"imageUrl\"\n :alt=\"imageAlt\">\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed } from 'vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n const {\n imageFocalPoint\n } = defineProps<{\n readonly aspectRatio?: number;\n readonly imageAlt?: string;\n readonly imageFocalPoint?: [number, number];\n readonly imageUrl?: string;\n readonly isInset?: boolean;\n }>();\n\n const focalPointX = computed(() => imageFocalPoint?.[0] ?? 50);\n const focalPointY = computed(() => imageFocalPoint?.[1] ?? 50);\n</script>\n","<template>\n <div :class=\"isInset ? $style.paneMediaInset : $style.paneMediaDefault\">\n <img\n v-if=\"imageUrl\"\n :class=\"$style.paneMediaImage\"\n :style=\"{\n aspectRatio,\n objectPosition: `${focalPointX}% ${focalPointY}%`\n }\"\n :src=\"imageUrl\"\n :alt=\"imageAlt\">\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed } from 'vue';\n import $style from '$flux/css/component/Pane.module.scss';\n\n const {\n imageFocalPoint\n } = defineProps<{\n readonly aspectRatio?: number;\n readonly imageAlt?: string;\n readonly imageFocalPoint?: [number, number];\n readonly imageUrl?: string;\n readonly isInset?: boolean;\n }>();\n\n const focalPointX = computed(() => imageFocalPoint?.[0] ?? 50);\n const focalPointY = computed(() => imageFocalPoint?.[1] ?? 50);\n</script>\n",".percentageBar {\n display: flex;\n flex-flow: column;\n gap: 12px;\n}\n\n.percentageBarSegment {\n height: 12px;\n border-radius: calc(var(--radius) / 3);\n transition: var(--transition-default);\n transition-property: height, margin, flex-grow;\n\n &:hover {\n height: 16px;\n margin-top: -2px;\n margin-bottom: -2px;\n }\n}\n\n.percentageBarTooltip {\n display: flex;\n align-items: center;\n flex-flow: row nowrap;\n gap: 9px;\n}\n\n.percentageBarTrack {\n display: flex;\n flex-flow: row nowrap;\n gap: 3px;\n}\n","<template>\n <div :class=\"$style.percentageBar\">\n <div :class=\"$style.percentageBarTrack\">\n <FluxTooltip\n v-for=\"(item, index) of items\"\n :key=\"index\">\n <template #content>\n <div :class=\"$style.percentageBarTooltip\">\n <FluxIcon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n :size=\"16\"/>\n\n <span>{{ formatPercentage(item.value) }} {{ item.label }}</span>\n </div>\n </template>\n\n <div\n :class=\"$style.percentageBarSegment\"\n :style=\"{\n backgroundColor: item.color,\n flexGrow: item.value\n }\"/>\n </FluxTooltip>\n </div>\n\n <FluxLegend\n v-if=\"isLegendVisible\"\n :items=\"items\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { formatPercentage } from '@basmilius/utils';\n import type { FluxPercentageBarItemObject } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import FluxLegend from './FluxLegend.vue';\n import FluxTooltip from './FluxTooltip.vue';\n import $style from '$flux/css/component/PercentageBar.module.scss';\n\n defineProps<{\n readonly isLegendVisible?: boolean;\n readonly items: FluxPercentageBarItemObject[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.percentageBar\">\n <div :class=\"$style.percentageBarTrack\">\n <FluxTooltip\n v-for=\"(item, index) of items\"\n :key=\"index\">\n <template #content>\n <div :class=\"$style.percentageBarTooltip\">\n <FluxIcon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n :size=\"16\"/>\n\n <span>{{ formatPercentage(item.value) }} {{ item.label }}</span>\n </div>\n </template>\n\n <div\n :class=\"$style.percentageBarSegment\"\n :style=\"{\n backgroundColor: item.color,\n flexGrow: item.value\n }\"/>\n </FluxTooltip>\n </div>\n\n <FluxLegend\n v-if=\"isLegendVisible\"\n :items=\"items\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { formatPercentage } from '@basmilius/utils';\n import type { FluxPercentageBarItemObject } from '@flux-ui/types';\n import FluxIcon from './FluxIcon.vue';\n import FluxLegend from './FluxLegend.vue';\n import FluxTooltip from './FluxTooltip.vue';\n import $style from '$flux/css/component/PercentageBar.module.scss';\n\n defineProps<{\n readonly isLegendVisible?: boolean;\n readonly items: FluxPercentageBarItemObject[];\n }>();\n</script>\n","<template>\n <button\n :class=\"$style.persona\"\n type=\"button\"\n @click=\"$emit('click', $event)\">\n <FluxAvatar\n :alt=\"avatarAlt\"\n :fallback=\"avatarFallback\"\n :fallback-icon=\"avatarFallbackIcon\"\n :fallback-initials=\"avatarFallbackInitials\"\n :size=\"avatarSize\"\n :src=\"avatarSrc\"/>\n\n <template v-if=\"!isCompact\">\n <div :class=\"$style.personaDetails\">\n <strong>{{ name }}</strong>\n <span v-if=\"title\">{{ title }}</span>\n </div>\n </template>\n </button>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import FluxAvatar from './FluxAvatar.vue';\n import $style from '$flux/css/component/Avatar.module.scss';\n\n defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n avatarFallback = 'colorized',\n avatarFallbackIcon = 'user'\n } = defineProps<{\n readonly avatarAlt?: string;\n readonly avatarFallback?: 'colorized' | 'neutral';\n readonly avatarFallbackIcon?: FluxIconName;\n readonly avatarFallbackInitials?: string;\n readonly avatarSize?: number;\n readonly avatarSrc?: string;\n readonly isCompact?: boolean;\n readonly name: string;\n readonly title?: string;\n }>();\n</script>\n","<template>\n <button\n :class=\"$style.persona\"\n type=\"button\"\n @click=\"$emit('click', $event)\">\n <FluxAvatar\n :alt=\"avatarAlt\"\n :fallback=\"avatarFallback\"\n :fallback-icon=\"avatarFallbackIcon\"\n :fallback-initials=\"avatarFallbackInitials\"\n :size=\"avatarSize\"\n :src=\"avatarSrc\"/>\n\n <template v-if=\"!isCompact\">\n <div :class=\"$style.personaDetails\">\n <strong>{{ name }}</strong>\n <span v-if=\"title\">{{ title }}</span>\n </div>\n </template>\n </button>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import FluxAvatar from './FluxAvatar.vue';\n import $style from '$flux/css/component/Avatar.module.scss';\n\n defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n avatarFallback = 'colorized',\n avatarFallbackIcon = 'user'\n } = defineProps<{\n readonly avatarAlt?: string;\n readonly avatarFallback?: 'colorized' | 'neutral';\n readonly avatarFallbackIcon?: FluxIconName;\n readonly avatarFallbackInitials?: string;\n readonly avatarSize?: number;\n readonly avatarSrc?: string;\n readonly isCompact?: boolean;\n readonly name: string;\n readonly title?: string;\n }>();\n</script>\n","<template>\n <div\n :class=\"clsx(\n $style.placeholder,\n isButton && $style.isButton,\n variant === 'extended' && $style.isExtended,\n variant === 'simple' && $style.isSimple,\n variant === 'small' && $style.isSmall\n )\"\n role=\"presentation\"\n @click=\"onClick\">\n <FluxIcon\n v-if=\"icon\"\n :class=\"$style.placeholderIcon\"\n :name=\"icon\"/>\n\n <div :class=\"$style.placeholderCaption\">\n <strong v-if=\"title\">\n {{ title }}\n </strong>\n\n <p v-if=\"message\">\n {{ message }}\n </p>\n </div>\n\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Placeholder.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n variant = 'extended'\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isButton?: boolean;\n readonly message?: string;\n readonly title?: string;\n readonly variant?: 'extended' | 'simple' | 'small';\n }>();\n\n function onClick(evt: MouseEvent): void {\n emit('click', evt);\n }\n</script>\n","<template>\n <div\n :class=\"clsx(\n $style.placeholder,\n isButton && $style.isButton,\n variant === 'extended' && $style.isExtended,\n variant === 'simple' && $style.isSimple,\n variant === 'small' && $style.isSmall\n )\"\n role=\"presentation\"\n @click=\"onClick\">\n <FluxIcon\n v-if=\"icon\"\n :class=\"$style.placeholderIcon\"\n :name=\"icon\"/>\n\n <div :class=\"$style.placeholderCaption\">\n <strong v-if=\"title\">\n {{ title }}\n </strong>\n\n <p v-if=\"message\">\n {{ message }}\n </p>\n </div>\n\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Placeholder.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n }>();\n\n const {\n variant = 'extended'\n } = defineProps<{\n readonly icon?: FluxIconName;\n readonly isButton?: boolean;\n readonly message?: string;\n readonly title?: string;\n readonly variant?: 'extended' | 'simple' | 'small';\n }>();\n\n function onClick(evt: MouseEvent): void {\n emit('click', evt);\n }\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isFilled, isLoading, isSubmit, label, size, href, rel, target, to}\"\n :css-class=\"$style.primaryLinkButton\"\n :css-class-icon=\"$style.primaryLinkButtonIcon\"\n :css-class-label=\"$style.primaryLinkButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineEmits<FluxButtonEmits>();\n defineProps<FluxButtonProps>();\n defineSlots<FluxButtonSlots>();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isFilled, isLoading, isSubmit, label, size, href, rel, target, to}\"\n :css-class=\"$style.primaryLinkButton\"\n :css-class-icon=\"$style.primaryLinkButtonIcon\"\n :css-class-label=\"$style.primaryLinkButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineEmits<FluxButtonEmits>();\n defineProps<FluxButtonProps>();\n defineSlots<FluxButtonSlots>();\n</script>\n",".progressBar {\n position: relative;\n}\n\n.progressBarTrack {\n position: relative;\n height: 9px;\n background: var(--gray-50);\n border-radius: var(--radius-half);\n box-shadow: inset 0 0 0 1px var(--gray-200);\n contain: paint;\n}\n\n.progressBarValue {\n position: absolute;\n top: 0;\n left: 0;\n height: inherit;\n border-radius: inherit;\n}\n\n.progressBarValueComplete {\n composes: progressBarValue;\n\n background: var(--primary-600);\n}\n\n.progressBarValueIncomplete {\n composes: progressBarValue;\n\n background: linear-gradient(to right, var(--primary-600) 20%, var(--primary-500), var(--primary-600) 80%);\n background-size: 150px 100%;\n animation: progressBarValue 1s linear infinite;\n}\n\n.progressBarTrackIndeterminate {\n composes: progressBarTrack;\n\n .progressBarValue {\n background: linear-gradient(to right, var(--primary-600) 20%, var(--primary-500), var(--primary-600) 80%);\n background-size: 90px 100%;\n animation: progressBarIndeterminate 1s linear infinite;\n }\n}\n\n.progressBarInfo {\n display: flex;\n gap: 21px;\n justify-content: flex-end;\n font-size: 14px;\n}\n\n.progressBarProgress {\n flex-shrink: 0;\n font-variant-numeric: tabular-nums;\n font-weight: 500;\n}\n\n.progressBarStatus {\n margin-right: auto;\n color: var(--foreground-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.basePaneStructure > .progressBar:first-child {\n margin: 9px 9px 0;\n}\n\n.basePaneStructure > .progressBar:last-child {\n margin: 0 9px 9px;\n}\n\n@keyframes progressBarIndeterminate {\n from {\n background-position-x: 90px;\n }\n\n to {\n background-position-x: -90px;\n }\n}\n\n@keyframes progressBarValue {\n from {\n background-position-x: -150px;\n }\n\n to {\n background-position-x: 150px;\n }\n}\n","<template>\n <FluxStack\n :class=\"$style.progressBar\"\n :gap=\"6\"\n role=\"progressbar\"\n :aria-valuenow=\"value\"\n :aria-valuemax=\"max\"\n :aria-valuemin=\"min\"\n :aria-valuetext=\"status ? `${status}: ${progress}` : undefined\">\n <div :class=\"isIndeterminate ? $style.progressBarTrackIndeterminate : $style.progressBarTrack\">\n <div\n :class=\"position >= 1 ? $style.progressBarValueComplete : $style.progressBarValueIncomplete\"\n :style=\"{\n width: `${isIndeterminate ? 100 : position * 100}%`\n }\"/>\n </div>\n\n <div\n v-if=\"status\"\n :class=\"$style.progressBarInfo\">\n <FluxFadeTransition>\n <span\n :key=\"status\"\n :class=\"$style.progressBarStatus\">\n {{ status }}\n </span>\n </FluxFadeTransition>\n\n <FluxFadeTransition>\n <span\n v-if=\"!isIndeterminate\"\n :class=\"$style.progressBarProgress\">\n {{ progress }}\n </span>\n </FluxFadeTransition>\n </div>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed, unref } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxStack from './FluxStack.vue';\n import $style from '$flux/css/component/Progress.module.scss';\n\n const {\n isIndeterminate,\n max = 1,\n min = 0,\n value\n } = defineProps<{\n readonly isIndeterminate?: boolean;\n readonly max?: number;\n readonly min?: number;\n readonly status?: string;\n readonly value?: number;\n }>();\n\n const position = computed(() => {\n if (isIndeterminate) {\n return 0;\n }\n\n return ((value ?? min) - min) / (max - min);\n });\n\n const progress = computed(() => new Intl\n .NumberFormat(navigator.language, {\n style: 'percent',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n })\n .format(unref(position) ?? 0));\n</script>\n","<template>\n <FluxStack\n :class=\"$style.progressBar\"\n :gap=\"6\"\n role=\"progressbar\"\n :aria-valuenow=\"value\"\n :aria-valuemax=\"max\"\n :aria-valuemin=\"min\"\n :aria-valuetext=\"status ? `${status}: ${progress}` : undefined\">\n <div :class=\"isIndeterminate ? $style.progressBarTrackIndeterminate : $style.progressBarTrack\">\n <div\n :class=\"position >= 1 ? $style.progressBarValueComplete : $style.progressBarValueIncomplete\"\n :style=\"{\n width: `${isIndeterminate ? 100 : position * 100}%`\n }\"/>\n </div>\n\n <div\n v-if=\"status\"\n :class=\"$style.progressBarInfo\">\n <FluxFadeTransition>\n <span\n :key=\"status\"\n :class=\"$style.progressBarStatus\">\n {{ status }}\n </span>\n </FluxFadeTransition>\n\n <FluxFadeTransition>\n <span\n v-if=\"!isIndeterminate\"\n :class=\"$style.progressBarProgress\">\n {{ progress }}\n </span>\n </FluxFadeTransition>\n </div>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { computed, unref } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxStack from './FluxStack.vue';\n import $style from '$flux/css/component/Progress.module.scss';\n\n const {\n isIndeterminate,\n max = 1,\n min = 0,\n value\n } = defineProps<{\n readonly isIndeterminate?: boolean;\n readonly max?: number;\n readonly min?: number;\n readonly status?: string;\n readonly value?: number;\n }>();\n\n const position = computed(() => {\n if (isIndeterminate) {\n return 0;\n }\n\n return ((value ?? min) - min) / (max - min);\n });\n\n const progress = computed(() => new Intl\n .NumberFormat(navigator.language, {\n style: 'percent',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n })\n .format(unref(position) ?? 0));\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconTrailing, isFilled, isLoading, label, size, to}\"\n :class=\"clsx(\n !isDone && !isLoading && $style.isIdle,\n isDone && $style.isDone,\n isLoading && $style.isLoading\n )\"\n :css-class=\"$style.publishButton\"\n :css-class-icon=\"$style.publishButtonIcon\"\n :css-class-label=\"$style.publishButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template #iconLeading>\n <div :class=\"$style.publishButtonAnimation\">\n <FluxIcon\n :class=\"$style.publishButtonCloud\"\n name=\"cloud\"/>\n\n <FluxIcon\n :class=\"$style.publishButtonCloud\"\n name=\"cloud\"/>\n\n <svg\n :class=\"$style.publishButtonAnimation\"\n viewBox=\"0 0 512 512\">\n <path\n :class=\"$style.publishButtonAnimationCircle\"\n d=\"M512 256c0 141.4-114.6 256-256 256S0 397.4 0 256 114.6 0 256 0s256 114.6 256 256ZM256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48Z\"/>\n\n <path\n :class=\"$style.publishButtonAnimationArrow\"\n d=\"M272.9 135.7c-4.6-4.9-11-7.7-17.7-7.7-7.7.3-14.1 2.9-17.7 7.8l-87.25 96a23.86 23.86 0 0 0-4.15 25.9c3.8 8.7 12.4 14.3 21 14.3h56l.9 88a24 24 0 0 0 24 24h16c13.25 0 23.1-10.75 23.1-24v-88h56c9.53 0 18.16-5.66 22-14.38a24.03 24.03 0 0 0-4.38-25.91L272.9 135.7Z\"/>\n\n <path\n :class=\"$style.publishButtonAnimationCheck\"\n d=\"M243.8 339.8a28.07 28.07 0 0 1-39.6 0l-64-64a28.07 28.07 0 0 1 0-39.6 28.07 28.07 0 0 1 39.6 0l44.2 44.2 108.2-108.2a28.07 28.07 0 0 1 39.6 0 28.07 28.07 0 0 1 0 39.6l-128 128Z\"/>\n </svg>\n </div>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxButton from './FluxButton.vue';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineEmits<FluxButtonEmits>();\n\n defineProps<Omit<FluxButtonProps, 'iconLeading'> & {\n readonly isDone?: boolean;\n }>();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconTrailing, isFilled, isLoading, label, size, to}\"\n :class=\"clsx(\n !isDone && !isLoading && $style.isIdle,\n isDone && $style.isDone,\n isLoading && $style.isLoading\n )\"\n :css-class=\"$style.publishButton\"\n :css-class-icon=\"$style.publishButtonIcon\"\n :css-class-label=\"$style.publishButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template #iconLeading>\n <div :class=\"$style.publishButtonAnimation\">\n <FluxIcon\n :class=\"$style.publishButtonCloud\"\n name=\"cloud\"/>\n\n <FluxIcon\n :class=\"$style.publishButtonCloud\"\n name=\"cloud\"/>\n\n <svg\n :class=\"$style.publishButtonAnimation\"\n viewBox=\"0 0 512 512\">\n <path\n :class=\"$style.publishButtonAnimationCircle\"\n d=\"M512 256c0 141.4-114.6 256-256 256S0 397.4 0 256 114.6 0 256 0s256 114.6 256 256ZM256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48Z\"/>\n\n <path\n :class=\"$style.publishButtonAnimationArrow\"\n d=\"M272.9 135.7c-4.6-4.9-11-7.7-17.7-7.7-7.7.3-14.1 2.9-17.7 7.8l-87.25 96a23.86 23.86 0 0 0-4.15 25.9c3.8 8.7 12.4 14.3 21 14.3h56l.9 88a24 24 0 0 0 24 24h16c13.25 0 23.1-10.75 23.1-24v-88h56c9.53 0 18.16-5.66 22-14.38a24.03 24.03 0 0 0-4.38-25.91L272.9 135.7Z\"/>\n\n <path\n :class=\"$style.publishButtonAnimationCheck\"\n d=\"M243.8 339.8a28.07 28.07 0 0 1-39.6 0l-64-64a28.07 28.07 0 0 1 0-39.6 28.07 28.07 0 0 1 39.6 0l44.2 44.2 108.2-108.2a28.07 28.07 0 0 1 39.6 0 28.07 28.07 0 0 1 0 39.6l-128 128Z\"/>\n </svg>\n </div>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxButton from './FluxButton.vue';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineEmits<FluxButtonEmits>();\n\n defineProps<Omit<FluxButtonProps, 'iconLeading'> & {\n readonly isDone?: boolean;\n }>();\n</script>\n","<template>\n <FluxButtonGroup\n :class=\"$style.quantitySelector\"\n :aria-disabled=\"disabled ? true : undefined\">\n <FluxSecondaryButton\n :class=\"$style.quantitySelectorButton\"\n :disabled=\"disabled || modelValue <= min\"\n icon-leading=\"minus\"\n tabindex=\"-1\"\n @click=\"decrement\"/>\n\n <input\n ref=\"input\"\n v-model=\"modelValue\"\n :class=\"$style.quantitySelectorInput\"\n :style=\"{\n width: `${width}px`\n }\"\n :disabled=\"disabled\"\n tabindex=\"0\"\n type=\"number\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"/>\n\n <FluxSecondaryButton\n :class=\"$style.quantitySelectorButton\"\n :disabled=\"disabled || modelValue >= max\"\n icon-leading=\"plus\"\n tabindex=\"-1\"\n @click=\"increment\"/>\n </FluxButtonGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { ref, toRef, unref, useTemplateRef, watchEffect } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxButtonGroup from './FluxButtonGroup.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<number>({\n default: 0\n });\n\n const {\n disabled: componentDisabled,\n max = 100,\n min = 0,\n step = 1\n } = defineProps<{\n readonly disabled?: boolean;\n readonly max?: number;\n readonly min?: number;\n readonly step?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const inputRef = useTemplateRef('input');\n\n const width = ref(0);\n\n function decrement(): void {\n if (unref(disabled)) {\n return;\n }\n\n modelValue.value = Math.max(min, unref(modelValue) - step);\n }\n\n function increment(): void {\n if (unref(disabled)) {\n return;\n }\n\n modelValue.value = Math.min(max, unref(modelValue) + step);\n }\n\n function sizeToContent(): void {\n const input = unrefTemplateElement<HTMLInputElement>(inputRef);\n\n if (!input || isNaN(input.valueAsNumber)) {\n return;\n }\n\n width.value = 0;\n\n requestAnimationFrame(() => {\n width.value = Math.max(51, input.scrollWidth + 30);\n });\n }\n\n watchEffect(() => {\n const value = unref(modelValue);\n\n if (value > max || value < min) {\n modelValue.value = Math.min(max, Math.max(min, value));\n return;\n }\n\n sizeToContent();\n });\n</script>\n","<template>\n <FluxButtonGroup\n :class=\"$style.quantitySelector\"\n :aria-disabled=\"disabled ? true : undefined\">\n <FluxSecondaryButton\n :class=\"$style.quantitySelectorButton\"\n :disabled=\"disabled || modelValue <= min\"\n icon-leading=\"minus\"\n tabindex=\"-1\"\n @click=\"decrement\"/>\n\n <input\n ref=\"input\"\n v-model=\"modelValue\"\n :class=\"$style.quantitySelectorInput\"\n :style=\"{\n width: `${width}px`\n }\"\n :disabled=\"disabled\"\n tabindex=\"0\"\n type=\"number\"\n :max=\"max\"\n :min=\"min\"\n :step=\"step\"/>\n\n <FluxSecondaryButton\n :class=\"$style.quantitySelectorButton\"\n :disabled=\"disabled || modelValue >= max\"\n icon-leading=\"plus\"\n tabindex=\"-1\"\n @click=\"increment\"/>\n </FluxButtonGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { ref, toRef, unref, useTemplateRef, watchEffect } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxButtonGroup from './FluxButtonGroup.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<number>({\n default: 0\n });\n\n const {\n disabled: componentDisabled,\n max = 100,\n min = 0,\n step = 1\n } = defineProps<{\n readonly disabled?: boolean;\n readonly max?: number;\n readonly min?: number;\n readonly step?: number;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const inputRef = useTemplateRef('input');\n\n const width = ref(0);\n\n function decrement(): void {\n if (unref(disabled)) {\n return;\n }\n\n modelValue.value = Math.max(min, unref(modelValue) - step);\n }\n\n function increment(): void {\n if (unref(disabled)) {\n return;\n }\n\n modelValue.value = Math.min(max, unref(modelValue) + step);\n }\n\n function sizeToContent(): void {\n const input = unrefTemplateElement<HTMLInputElement>(inputRef);\n\n if (!input || isNaN(input.valueAsNumber)) {\n return;\n }\n\n width.value = 0;\n\n requestAnimationFrame(() => {\n width.value = Math.max(51, input.scrollWidth + 30);\n });\n }\n\n watchEffect(() => {\n const value = unref(modelValue);\n\n if (value > max || value < min) {\n modelValue.value = Math.min(max, Math.max(min, value));\n return;\n }\n\n sizeToContent();\n });\n</script>\n","@use '$flux/css/mixin';\n\n.snackbar {\n composes: basePane from './base/Pane.module.scss';\n\n display: flex;\n box-shadow: var(--shadow-xl), var(--shadow-2xl);\n overflow: hidden;\n\n .action {\n margin: 12px 12px 12px 0;\n }\n\n .progressBar {\n margin-top: 9px;\n\n &:not(:last-child) {\n margin-bottom: 6px;\n }\n }\n}\n\n.snackbarContent {\n display: flex;\n padding: 15px 18px;\n align-items: flex-start;\n flex-grow: 1;\n gap: 15px;\n\n > .icon,\n > .spinner {\n flex-shrink: 0;\n translate: 0 3px;\n }\n}\n\n.snackbarBody {\n display: flex;\n align-self: stretch;\n flex-flow: column;\n flex-grow: 1;\n}\n\n.snackbarMessage {\n color: var(--foreground);\n}\n\n.snackbarSubMessage {\n color: var(--foreground-secondary);\n font-size: 14px;\n}\n\n.snackbarTitle {\n font-weight: 500;\n}\n\n.snackbarAction {\n display: flex;\n padding: 6px 15px;\n min-width: 84px;\n align-items: center;\n justify-content: center;\n flex-grow: 1;\n background: var(--surface);\n border: 0;\n border-radius: 0;\n color: var(--foreground);\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n outline: 0;\n text-align: center;\n transition: var(--transition-default);\n transition-property: background, color;\n\n &:hover {\n background: var(--surface-hover);\n color: var(--foreground-prominent);\n }\n\n &:first-child {\n font-weight: 600;\n }\n\n &:active {\n background: var(--surface-active);\n }\n}\n\n.snackbarActions {\n display: flex;\n padding-left: 1px;\n max-width: max-content;\n flex-flow: column;\n flex-grow: 1;\n gap: 1px;\n background: var(--surface-stroke);\n}\n\n.snackbarGray {\n composes: snackbar;\n\n .snackbarAction:first-child,\n .snackbarContent > .icon,\n .snackbarTitle {\n color: var(--foreground-prominent);\n }\n}\n\n.snackbarPrimary {\n composes: snackbar;\n\n .snackbarAction:first-child,\n .snackbarContent > .icon,\n .snackbarTitle {\n color: var(--primary-600);\n }\n\n .spinnerEffect,\n .spinnerValue {\n stroke: var(--primary-700);\n }\n}\n\n.snackbarDanger {\n composes: snackbar;\n\n .snackbarAction:first-child,\n .snackbarContent > .icon,\n .snackbarTitle {\n color: var(--danger-600);\n }\n\n .spinnerEffect,\n .spinnerValue {\n stroke: var(--danger-700);\n }\n}\n\n.snackbarInfo {\n composes: snackbar;\n\n .snackbarAction:first-child,\n .snackbarContent > .icon,\n .snackbarTitle {\n color: var(--info-600);\n }\n\n .spinnerEffect,\n .spinnerValue {\n stroke: var(--info-700);\n }\n}\n\n.snackbarSuccess {\n composes: snackbar;\n\n .snackbarAction:first-child,\n .snackbarContent > .icon,\n .snackbarTitle {\n color: var(--success-600);\n }\n\n .spinnerEffect,\n .spinnerValue {\n stroke: var(--success-700);\n }\n}\n\n.snackbarWarning {\n composes: snackbar;\n\n .snackbarAction:first-child,\n .snackbarContent > .icon,\n .snackbarTitle {\n color: var(--warning-600);\n }\n\n .spinnerEffect,\n .spinnerValue {\n stroke: var(--warning-700);\n }\n}\n\n.snackbars {\n position: fixed;\n display: flex;\n flex-flow: column;\n gap: 15px;\n z-index: 100000;\n\n @include mixin.breakpoint-down(sm) {\n left: 15px;\n right: 15px;\n bottom: 15px;\n }\n\n @include mixin.breakpoint-up(md) {\n width: 570px;\n top: 30px;\n left: calc(50dvw - 285px);\n }\n}\n\n.snackbarsEnterActive,\n.snackbarsLeaveActive,\n.snackbarsMove {\n transition: 420ms var(--swift-out);\n}\n\n.snackbarsLeaveActive {\n position: absolute;\n width: 100%;\n}\n\n.snackbarsEnterFrom {\n opacity: 0;\n transform: translate3d(0, -15px, 0);\n}\n\n.snackbarsLeaveTo {\n opacity: 0;\n scale: .95;\n translate: 0 -15px;\n z-index: -1;\n}\n","<template>\n <div\n v-if=\"isRendered\"\n :class=\"clsx(\n color === 'gray' && $style.snackbarGray,\n color === 'primary' && $style.snackbarPrimary,\n color === 'danger' && $style.snackbarDanger,\n color === 'info' && $style.snackbarInfo,\n color === 'success' && $style.snackbarSuccess,\n color === 'warning' && $style.snackbarWarning\n )\">\n <div :class=\"$style.snackbarContent\">\n <FluxSpinner\n v-if=\"isLoading\"\n :size=\"18\"/>\n\n <FluxIcon\n v-else-if=\"icon\"\n :size=\"18\"\n :name=\"icon\"/>\n\n <div :class=\"$style.snackbarBody\">\n <div\n v-if=\"title\"\n :class=\"$style.snackbarTitle\">\n {{ title }}\n </div>\n\n <div\n v-if=\"message\"\n :class=\"$style.snackbarMessage\">\n {{ message }}\n </div>\n\n <FluxProgressBar\n v-if=\"progressIndeterminate || progressValue\"\n :is-indeterminate=\"progressIndeterminate\"\n :max=\"progressMax\"\n :min=\"progressMin\"\n :status=\"progressStatus\"\n :value=\"progressValue\"/>\n\n <div\n v-if=\"subMessage\"\n :class=\"$style.snackbarSubMessage\">\n {{ subMessage }}\n </div>\n </div>\n </div>\n\n <div\n v-if=\"hasActions\"\n :class=\"$style.snackbarActions\">\n <button\n v-for=\"(actionLabel, actionKey) of actions\"\n :key=\"actionKey\"\n :class=\"$style.snackbarAction\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"onAction(actionKey)\">\n <span>{{ actionLabel }}</span>\n </button>\n </div>\n\n <FluxAction\n v-if=\"isCloseable\"\n icon=\"xmark\"\n @click=\"onClose()\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxColor, FluxIconName, FluxSnackbarObject } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, onBeforeUnmount, ref, watch, watchEffect } from 'vue';\n import { addSnackbar, removeSnackbar, updateSnackbar } from '$flux/data';\n import FluxAction from './FluxAction.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxProgressBar from './FluxProgressBar.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Snackbar.module.scss';\n\n const emit = defineEmits<{\n action: [string];\n close: [];\n }>();\n\n const {\n actions,\n color = 'gray',\n icon,\n isCloseable,\n isLoading,\n isRendered,\n message,\n progressIndeterminate,\n progressMax,\n progressMin,\n progressStatus,\n progressValue,\n subMessage,\n title\n } = defineProps<{\n readonly actions?: Record<string, string>;\n readonly color?: FluxColor;\n readonly icon?: FluxIconName;\n readonly isCloseable?: boolean;\n readonly isLoading?: boolean;\n readonly isRendered?: boolean;\n readonly message?: string;\n readonly progressIndeterminate?: boolean;\n readonly progressMax?: number;\n readonly progressMin?: number;\n readonly progressStatus?: string;\n readonly progressValue?: number;\n readonly subMessage?: string;\n readonly title?: string;\n }>();\n\n const id = ref<number | null>(null);\n\n const hasActions = computed(() => actions && Object.entries(actions).length > 0);\n\n onBeforeUnmount(() => {\n if (id.value) {\n removeSnackbar(id.value);\n }\n });\n\n function onAction(actionKey: string): void {\n emit('action', actionKey);\n }\n\n function onClose(): void {\n emit('close');\n }\n\n function buildSpec(): Omit<FluxSnackbarObject, 'id'> {\n return {\n actions,\n color,\n icon,\n isCloseable,\n isLoading,\n isRendered,\n message,\n progressIndeterminate,\n progressMax,\n progressMin,\n progressStatus,\n progressValue,\n subMessage,\n title,\n onAction,\n onClose\n };\n }\n\n watchEffect(() => {\n if (!id.value) {\n return;\n }\n\n updateSnackbar(id.value, buildSpec());\n });\n\n watch(() => isRendered, () => {\n if (isRendered) {\n if (id.value) {\n removeSnackbar(id.value);\n }\n\n return;\n }\n\n id.value = addSnackbar(buildSpec());\n }, {immediate: true});\n</script>\n","<template>\n <div\n v-if=\"isRendered\"\n :class=\"clsx(\n color === 'gray' && $style.snackbarGray,\n color === 'primary' && $style.snackbarPrimary,\n color === 'danger' && $style.snackbarDanger,\n color === 'info' && $style.snackbarInfo,\n color === 'success' && $style.snackbarSuccess,\n color === 'warning' && $style.snackbarWarning\n )\">\n <div :class=\"$style.snackbarContent\">\n <FluxSpinner\n v-if=\"isLoading\"\n :size=\"18\"/>\n\n <FluxIcon\n v-else-if=\"icon\"\n :size=\"18\"\n :name=\"icon\"/>\n\n <div :class=\"$style.snackbarBody\">\n <div\n v-if=\"title\"\n :class=\"$style.snackbarTitle\">\n {{ title }}\n </div>\n\n <div\n v-if=\"message\"\n :class=\"$style.snackbarMessage\">\n {{ message }}\n </div>\n\n <FluxProgressBar\n v-if=\"progressIndeterminate || progressValue\"\n :is-indeterminate=\"progressIndeterminate\"\n :max=\"progressMax\"\n :min=\"progressMin\"\n :status=\"progressStatus\"\n :value=\"progressValue\"/>\n\n <div\n v-if=\"subMessage\"\n :class=\"$style.snackbarSubMessage\">\n {{ subMessage }}\n </div>\n </div>\n </div>\n\n <div\n v-if=\"hasActions\"\n :class=\"$style.snackbarActions\">\n <button\n v-for=\"(actionLabel, actionKey) of actions\"\n :key=\"actionKey\"\n :class=\"$style.snackbarAction\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"onAction(actionKey)\">\n <span>{{ actionLabel }}</span>\n </button>\n </div>\n\n <FluxAction\n v-if=\"isCloseable\"\n icon=\"xmark\"\n @click=\"onClose()\"/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxColor, FluxIconName, FluxSnackbarObject } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, onBeforeUnmount, ref, watch, watchEffect } from 'vue';\n import { addSnackbar, removeSnackbar, updateSnackbar } from '$flux/data';\n import FluxAction from './FluxAction.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxProgressBar from './FluxProgressBar.vue';\n import FluxSpinner from './FluxSpinner.vue';\n import $style from '$flux/css/component/Snackbar.module.scss';\n\n const emit = defineEmits<{\n action: [string];\n close: [];\n }>();\n\n const {\n actions,\n color = 'gray',\n icon,\n isCloseable,\n isLoading,\n isRendered,\n message,\n progressIndeterminate,\n progressMax,\n progressMin,\n progressStatus,\n progressValue,\n subMessage,\n title\n } = defineProps<{\n readonly actions?: Record<string, string>;\n readonly color?: FluxColor;\n readonly icon?: FluxIconName;\n readonly isCloseable?: boolean;\n readonly isLoading?: boolean;\n readonly isRendered?: boolean;\n readonly message?: string;\n readonly progressIndeterminate?: boolean;\n readonly progressMax?: number;\n readonly progressMin?: number;\n readonly progressStatus?: string;\n readonly progressValue?: number;\n readonly subMessage?: string;\n readonly title?: string;\n }>();\n\n const id = ref<number | null>(null);\n\n const hasActions = computed(() => actions && Object.entries(actions).length > 0);\n\n onBeforeUnmount(() => {\n if (id.value) {\n removeSnackbar(id.value);\n }\n });\n\n function onAction(actionKey: string): void {\n emit('action', actionKey);\n }\n\n function onClose(): void {\n emit('close');\n }\n\n function buildSpec(): Omit<FluxSnackbarObject, 'id'> {\n return {\n actions,\n color,\n icon,\n isCloseable,\n isLoading,\n isRendered,\n message,\n progressIndeterminate,\n progressMax,\n progressMin,\n progressStatus,\n progressValue,\n subMessage,\n title,\n onAction,\n onClose\n };\n }\n\n watchEffect(() => {\n if (!id.value) {\n return;\n }\n\n updateSnackbar(id.value, buildSpec());\n });\n\n watch(() => isRendered, () => {\n if (isRendered) {\n if (id.value) {\n removeSnackbar(id.value);\n }\n\n return;\n }\n\n id.value = addSnackbar(buildSpec());\n }, {immediate: true});\n</script>\n","<template>\n <TransitionGroup\n name=\"flux-snackbars\"\n tag=\"div\"\n :class=\"$style.snackbars\"\n :enter-active-class=\"$style.snackbarsEnterActive\"\n :enter-from-class=\"$style.snackbarsEnterFrom\"\n :leave-active-class=\"$style.snackbarsLeaveActive\"\n :leave-to-class=\"$style.snackbarsLeaveTo\"\n :move-class=\"$style.snackbarsMove\">\n <FluxSnackbar\n v-for=\"snackbar of snackbars.toReversed()\"\n :key=\"snackbar.id\"\n :=\"snackbar\"\n is-rendered\n @action=\"onAction(snackbar)\"\n @close=\"() => snackbar.onClose?.()\"/>\n </TransitionGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxSnackbarObject } from '@flux-ui/types';\n import { useFluxStore } from '$flux/data';\n import FluxSnackbar from './FluxSnackbar.vue';\n import $style from '$flux/css/component/Snackbar.module.scss';\n\n const {snackbars} = useFluxStore();\n\n function onAction(snackbar: FluxSnackbarObject): (actionKey: string) => void {\n return actionKey => snackbar.onAction?.(actionKey);\n }\n</script>\n","<template>\n <TransitionGroup\n name=\"flux-snackbars\"\n tag=\"div\"\n :class=\"$style.snackbars\"\n :enter-active-class=\"$style.snackbarsEnterActive\"\n :enter-from-class=\"$style.snackbarsEnterFrom\"\n :leave-active-class=\"$style.snackbarsLeaveActive\"\n :leave-to-class=\"$style.snackbarsLeaveTo\"\n :move-class=\"$style.snackbarsMove\">\n <FluxSnackbar\n v-for=\"snackbar of snackbars.toReversed()\"\n :key=\"snackbar.id\"\n :=\"snackbar\"\n is-rendered\n @action=\"onAction(snackbar)\"\n @close=\"() => snackbar.onClose?.()\"/>\n </TransitionGroup>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxSnackbarObject } from '@flux-ui/types';\n import { useFluxStore } from '$flux/data';\n import FluxSnackbar from './FluxSnackbar.vue';\n import $style from '$flux/css/component/Snackbar.module.scss';\n\n const {snackbars} = useFluxStore();\n\n function onAction(snackbar: FluxSnackbarObject): (actionKey: string) => void {\n return actionKey => snackbar.onAction?.(actionKey);\n }\n</script>\n",".tooltip {\n position: fixed;\n display: flex;\n top: 0;\n left: 0;\n max-width: 360px;\n padding: 9px 15px;\n flex-flow: column;\n background: var(--overlay-strong);\n backdrop-filter: blur(3px) saturate(180%);\n border-radius: var(--radius);\n color: var(--gray-25);\n font-size: 14px;\n font-variant-numeric: tabular-nums;\n pointer-events: none;\n translate: calc(var(--x) * 1px) calc(var(--y) * 1px);\n isolation: isolate;\n z-index: 100000;\n\n &::after {\n position: absolute;\n display: block;\n top: var(--arrowY);\n left: var(--arrowX);\n height: 9px;\n width: 9px;\n content: '';\n background: inherit;\n border-radius: 0 0 3px 0;\n clip-path: polygon(100% 100%, 99% 0%, 0% 99%);\n rotate: var(--arrowAngle);\n transform-origin: center;\n translate: -50% -50%;\n }\n}\n\n[dark] .tooltip {\n color: var(--gray-700);\n}\n\n.tooltipAbove {\n composes: tooltip;\n\n transform-origin: bottom center;\n}\n\n.tooltipBelow {\n composes: tooltip;\n\n transform-origin: top center;\n}\n\n.tooltipEnd {\n composes: tooltip;\n\n transform-origin: center left;\n}\n\n.tooltipStart {\n composes: tooltip;\n\n transform-origin: center right;\n}\n","<script lang=\"ts\">\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { computed, defineComponent, h, provide, ref, unref, watch } from 'vue';\n import { FluxTooltipInjectionKey, useFluxStore } from '$flux/data';\n import { FluxTooltipTransition } from '$flux/transition';\n import $style from '$flux/css/component/Tooltip.module.scss';\n\n type Transition = 'above' | 'below' | 'end' | 'start';\n\n type PositionData = {\n readonly x: number;\n readonly y: number;\n readonly arrowAngle: string;\n readonly arrowX: string;\n readonly arrowY: string;\n readonly transition: Transition;\n };\n\n export default defineComponent(() => {\n const {tooltip} = useFluxStore();\n\n const elementRef = ref<HTMLElement | null>(null);\n const position = ref<PositionData | null>(null);\n\n const content = computed(() => unref(tooltip) ? unref(tooltip)!.contentSlot?.() ?? [unref(tooltip)!.content] : null);\n const has = computed(() => !!unref(tooltip));\n\n function calculate(): void {\n const element = unrefTemplateElement(elementRef);\n const spec = unref(tooltip);\n\n if (!spec || !element || !unref(content)) {\n position.value = null;\n return;\n }\n\n const {direction, origin} = spec;\n const margin = 9;\n const safeZone = 15;\n\n if (!origin) {\n position.value = null;\n return;\n }\n\n let {width, height} = element.getBoundingClientRect();\n const {scale} = getComputedStyle(element);\n const {top, left, width: originWidth, height: originHeight} = origin.getBoundingClientRect();\n\n let s = Number(scale ?? 1);\n s = isNaN(s) ? 1 : s;\n height /= s;\n width /= s;\n\n if (direction === 'horizontal') {\n position.value = calculateHorizontalPosition(top, left, width, height, originWidth, originHeight, margin, safeZone);\n } else {\n position.value = calculateVerticalPosition(top, left, width, height, originWidth, originHeight, margin, safeZone);\n }\n }\n\n provide(FluxTooltipInjectionKey, {\n calculate\n });\n\n watch(content, () => requestAnimationFrame(calculate));\n\n return () => h(FluxTooltipTransition, {}, {\n default: () => {\n if (!unref(has)) {\n return;\n }\n\n const pos = unref(position);\n\n return h('div', {\n ref: elementRef,\n class: pos\n ? clsx(\n pos.transition === 'above' && $style.tooltipAbove,\n pos.transition === 'below' && $style.tooltipBelow,\n pos.transition === 'end' && $style.tooltipEnd,\n pos.transition === 'start' && $style.tooltipStart\n )\n : $style.tooltip,\n style: {\n '--x': pos?.x ?? undefined,\n '--y': pos?.y ?? undefined,\n '--arrowAngle': pos?.arrowAngle ?? undefined,\n '--arrowX': pos?.arrowX ?? undefined,\n '--arrowY': pos?.arrowY ?? undefined\n }\n }, unref(content));\n }\n });\n });\n\n function calculateHorizontalPosition(top: number, left: number, width: number, height: number, originWidth: number, originHeight: number, margin: number, safeZone: number): PositionData {\n let x, y, arrowAngle, arrowX, arrowY, transition: Transition;\n\n if (left > innerWidth / 2) {\n x = left - width - margin;\n y = top + originHeight / 2 - height / 2;\n arrowAngle = '315deg';\n arrowX = '100%';\n arrowY = '50%';\n transition = 'start';\n } else {\n x = left + originWidth + margin;\n y = top + originHeight / 2 - height / 2;\n arrowAngle = '135deg';\n arrowX = '0';\n arrowY = '50%';\n transition = 'end';\n }\n\n if (y + height > innerHeight - safeZone) {\n const diff = Math.min(y, innerHeight - height - safeZone) - y;\n arrowY = `calc(50% - ${diff}px)`;\n y += diff;\n }\n\n if (y < safeZone) {\n const diff = Math.max(y, safeZone) - y;\n arrowY = `calc(50% - ${diff}px)`;\n y += diff;\n }\n\n return {\n x: Math.round(x),\n y: Math.round(y),\n arrowAngle,\n arrowX,\n arrowY,\n transition\n };\n }\n\n function calculateVerticalPosition(top: number, left: number, width: number, height: number, originWidth: number, originHeight: number, margin: number, safeZone: number): PositionData {\n let x, y, arrowAngle, arrowX, arrowY, transition: Transition;\n\n if (top > 300) {\n x = left + originWidth / 2 - width / 2;\n y = top - height - margin;\n arrowAngle = '45deg';\n arrowX = '50%';\n arrowY = '100%';\n transition = 'above';\n } else {\n x = left + originWidth / 2 - width / 2;\n y = top + originHeight + margin;\n arrowAngle = '225deg';\n arrowX = '50%';\n arrowY = '0';\n transition = 'below';\n }\n\n if (x + width > innerWidth - safeZone) {\n const diff = Math.min(x, innerWidth - width - safeZone) - x;\n arrowX = `calc(50% - ${diff}px)`;\n x += diff;\n }\n\n if (x < safeZone) {\n const diff = Math.max(x, safeZone) - x;\n arrowX = `calc(50% - ${diff}px)`;\n x += diff;\n }\n\n return {\n x: Math.round(x),\n y: Math.round(y),\n arrowAngle,\n arrowX,\n arrowY,\n transition\n };\n }\n</script>\n","<script lang=\"ts\">\n import { unrefTemplateElement } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { computed, defineComponent, h, provide, ref, unref, watch } from 'vue';\n import { FluxTooltipInjectionKey, useFluxStore } from '$flux/data';\n import { FluxTooltipTransition } from '$flux/transition';\n import $style from '$flux/css/component/Tooltip.module.scss';\n\n type Transition = 'above' | 'below' | 'end' | 'start';\n\n type PositionData = {\n readonly x: number;\n readonly y: number;\n readonly arrowAngle: string;\n readonly arrowX: string;\n readonly arrowY: string;\n readonly transition: Transition;\n };\n\n export default defineComponent(() => {\n const {tooltip} = useFluxStore();\n\n const elementRef = ref<HTMLElement | null>(null);\n const position = ref<PositionData | null>(null);\n\n const content = computed(() => unref(tooltip) ? unref(tooltip)!.contentSlot?.() ?? [unref(tooltip)!.content] : null);\n const has = computed(() => !!unref(tooltip));\n\n function calculate(): void {\n const element = unrefTemplateElement(elementRef);\n const spec = unref(tooltip);\n\n if (!spec || !element || !unref(content)) {\n position.value = null;\n return;\n }\n\n const {direction, origin} = spec;\n const margin = 9;\n const safeZone = 15;\n\n if (!origin) {\n position.value = null;\n return;\n }\n\n let {width, height} = element.getBoundingClientRect();\n const {scale} = getComputedStyle(element);\n const {top, left, width: originWidth, height: originHeight} = origin.getBoundingClientRect();\n\n let s = Number(scale ?? 1);\n s = isNaN(s) ? 1 : s;\n height /= s;\n width /= s;\n\n if (direction === 'horizontal') {\n position.value = calculateHorizontalPosition(top, left, width, height, originWidth, originHeight, margin, safeZone);\n } else {\n position.value = calculateVerticalPosition(top, left, width, height, originWidth, originHeight, margin, safeZone);\n }\n }\n\n provide(FluxTooltipInjectionKey, {\n calculate\n });\n\n watch(content, () => requestAnimationFrame(calculate));\n\n return () => h(FluxTooltipTransition, {}, {\n default: () => {\n if (!unref(has)) {\n return;\n }\n\n const pos = unref(position);\n\n return h('div', {\n ref: elementRef,\n class: pos\n ? clsx(\n pos.transition === 'above' && $style.tooltipAbove,\n pos.transition === 'below' && $style.tooltipBelow,\n pos.transition === 'end' && $style.tooltipEnd,\n pos.transition === 'start' && $style.tooltipStart\n )\n : $style.tooltip,\n style: {\n '--x': pos?.x ?? undefined,\n '--y': pos?.y ?? undefined,\n '--arrowAngle': pos?.arrowAngle ?? undefined,\n '--arrowX': pos?.arrowX ?? undefined,\n '--arrowY': pos?.arrowY ?? undefined\n }\n }, unref(content));\n }\n });\n });\n\n function calculateHorizontalPosition(top: number, left: number, width: number, height: number, originWidth: number, originHeight: number, margin: number, safeZone: number): PositionData {\n let x, y, arrowAngle, arrowX, arrowY, transition: Transition;\n\n if (left > innerWidth / 2) {\n x = left - width - margin;\n y = top + originHeight / 2 - height / 2;\n arrowAngle = '315deg';\n arrowX = '100%';\n arrowY = '50%';\n transition = 'start';\n } else {\n x = left + originWidth + margin;\n y = top + originHeight / 2 - height / 2;\n arrowAngle = '135deg';\n arrowX = '0';\n arrowY = '50%';\n transition = 'end';\n }\n\n if (y + height > innerHeight - safeZone) {\n const diff = Math.min(y, innerHeight - height - safeZone) - y;\n arrowY = `calc(50% - ${diff}px)`;\n y += diff;\n }\n\n if (y < safeZone) {\n const diff = Math.max(y, safeZone) - y;\n arrowY = `calc(50% - ${diff}px)`;\n y += diff;\n }\n\n return {\n x: Math.round(x),\n y: Math.round(y),\n arrowAngle,\n arrowX,\n arrowY,\n transition\n };\n }\n\n function calculateVerticalPosition(top: number, left: number, width: number, height: number, originWidth: number, originHeight: number, margin: number, safeZone: number): PositionData {\n let x, y, arrowAngle, arrowX, arrowY, transition: Transition;\n\n if (top > 300) {\n x = left + originWidth / 2 - width / 2;\n y = top - height - margin;\n arrowAngle = '45deg';\n arrowX = '50%';\n arrowY = '100%';\n transition = 'above';\n } else {\n x = left + originWidth / 2 - width / 2;\n y = top + originHeight + margin;\n arrowAngle = '225deg';\n arrowX = '50%';\n arrowY = '0';\n transition = 'below';\n }\n\n if (x + width > innerWidth - safeZone) {\n const diff = Math.min(x, innerWidth - width - safeZone) - x;\n arrowX = `calc(50% - ${diff}px)`;\n x += diff;\n }\n\n if (x < safeZone) {\n const diff = Math.max(x, safeZone) - x;\n arrowX = `calc(50% - ${diff}px)`;\n x += diff;\n }\n\n return {\n x: Math.round(x),\n y: Math.round(y),\n arrowAngle,\n arrowX,\n arrowY,\n transition\n };\n }\n</script>\n",".root {\n display: contents;\n\n &.isLocked {\n cursor: default;\n overflow: hidden;\n }\n}\n","<template>\n <div\n v-bind=\"$attrs\"\n :class=\"$style.root\"\n :inert=\"inertMain\">\n <slot/>\n </div>\n\n <FluxOverlayProvider/>\n <FluxSnackbarProvider/>\n <FluxTooltipProvider/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { type VNode, watch } from 'vue';\n import { useFluxStore } from '$flux/data';\n import FluxOverlayProvider from './FluxOverlayProvider.vue';\n import FluxSnackbarProvider from './FluxSnackbarProvider.vue';\n import FluxTooltipProvider from './FluxTooltipProvider.vue';\n import $style from '$flux/css/component/Root.module.scss';\n\n defineOptions({\n inheritAttrs: false\n });\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const {inertMain} = useFluxStore();\n\n watch(inertMain, (inert, _, onCleanup): void => {\n if (!inert) {\n return;\n }\n\n document.body.classList.add($style.isLocked);\n onCleanup(() => document.body.classList.remove($style.isLocked));\n }, {immediate: true});\n</script>\n","<template>\n <div\n v-bind=\"$attrs\"\n :class=\"$style.root\"\n :inert=\"inertMain\">\n <slot/>\n </div>\n\n <FluxOverlayProvider/>\n <FluxSnackbarProvider/>\n <FluxTooltipProvider/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { type VNode, watch } from 'vue';\n import { useFluxStore } from '$flux/data';\n import FluxOverlayProvider from './FluxOverlayProvider.vue';\n import FluxSnackbarProvider from './FluxSnackbarProvider.vue';\n import FluxTooltipProvider from './FluxTooltipProvider.vue';\n import $style from '$flux/css/component/Root.module.scss';\n\n defineOptions({\n inheritAttrs: false\n });\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const {inertMain} = useFluxStore();\n\n watch(inertMain, (inert, _, onCleanup): void => {\n if (!inert) {\n return;\n }\n\n document.body.classList.add($style.isLocked);\n onCleanup(() => document.body.classList.remove($style.isLocked));\n }, {immediate: true});\n</script>\n","<template>\n <div\n :class=\"$style.row\"\n :style=\"{'--gap': `${gap}px`}\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Layout.module.scss';\n\n const {\n gap = 18\n } = defineProps<{\n readonly gap?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.row\"\n :style=\"{'--gap': `${gap}px`}\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Layout.module.scss';\n\n const {\n gap = 18\n } = defineProps<{\n readonly gap?: number;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isFilled, isLoading, isSubmit, label, size, href, rel, target, to}\"\n :css-class=\"$style.secondaryLinkButton\"\n :css-class-icon=\"$style.secondaryLinkButtonIcon\"\n :css-class-label=\"$style.secondaryLinkButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineEmits<FluxButtonEmits>();\n defineProps<FluxButtonProps>();\n defineSlots<FluxButtonSlots>();\n</script>\n","<template>\n <FluxButton\n :=\"{type, disabled, iconLeading, iconTrailing, isFilled, isLoading, isSubmit, label, size, href, rel, target, to}\"\n :css-class=\"$style.secondaryLinkButton\"\n :css-class-icon=\"$style.secondaryLinkButtonIcon\"\n :css-class-label=\"$style.secondaryLinkButtonLabel\"\n @click=\"$emit('click', $event)\"\n @mouseenter=\"$emit('mouseenter', $event)\"\n @mouseleave=\"$emit('mouseleave', $event)\">\n <template\n v-for=\"slot of SLOTS\"\n #[slot]>\n <slot :name=\"slot\"/>\n </template>\n </FluxButton>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxButtonEmits, FluxButtonProps, FluxButtonSlots } from '@flux-ui/types';\n import FluxButton, { SLOTS } from './FluxButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n defineEmits<FluxButtonEmits>();\n defineProps<FluxButtonProps>();\n defineSlots<FluxButtonSlots>();\n</script>\n","@use '$flux/css/mixin';\n\n.segmentedControl {\n position: relative;\n align-items: center;\n gap: 1px;\n background: var(--gray-50);\n border: 1px solid var(--surface-stroke);\n border-radius: var(--radius);\n}\n\n.segmentedControlFill {\n composes: segmentedControl;\n\n display: flex;\n}\n\n.segmentedControlInline {\n composes: segmentedControl;\n\n display: inline-flex;\n width: min-content;\n}\n\n.segmentedControlHighlight {\n position: absolute;\n top: 0;\n bottom: 0;\n background: var(--surface);\n border-radius: calc(var(--radius) - 2px);\n box-shadow: var(--shadow-sm);\n outline: 1px solid var(--surface-stroke);\n pointer-events: none;\n transition: 300ms var(--swift-out);\n transition-property: left, width;\n translate: -1px 0;\n}\n\n.segmentedControlItem {\n display: flex;\n height: 36px;\n padding-left: 12px;\n padding-right: 12px;\n align-items: center;\n flex: 1 1 0;\n gap: 9px;\n justify-content: center;\n background: none;\n border: 0;\n border-radius: var(--radius);\n color: var(--foreground);\n cursor: pointer;\n font-weight: 500;\n text-align: center;\n transition: 300ms var(--swift-out);\n transition-property: background, color;\n\n @include mixin.hover {\n background: var(--gray-100);\n }\n\n &.isActive {\n background: none;\n color: var(--foreground-prominent);\n cursor: default;\n }\n\n > * {\n position: relative;\n }\n}\n\n.segmentedControlSeparator {\n height: 15px;\n width: 1px;\n flex-shrink: 0;\n background: var(--surface-stroke);\n transition: opacity 300ms var(--swift-out);\n\n &.isActive {\n opacity: 0;\n }\n}\n","<template>\n <div\n ref=\"control\"\n :class=\"isFill ? $style.segmentedControlFill : $style.segmentedControlInline\"\n role=\"radiogroup\"\n :aria-label=\"ariaLabel\"\n @keydown=\"onKeyDown\">\n <div\n v-if=\"activeItemWidth > 0\"\n :class=\"$style.segmentedControlHighlight\"\n :style=\"{\n left: `${activeItemX}px`,\n width: `${activeItemWidth}px`\n }\"/>\n\n <template v-for=\"(item, index) of items\">\n <div\n v-if=\"index > 0\"\n :class=\"clsx(\n $style.segmentedControlSeparator,\n (index === modelValue || index === modelValue + 1) && $style.isActive\n )\"\n role=\"separator\"/>\n\n <button\n ref=\"items\"\n :class=\"clsx(\n $style.segmentedControlItem,\n index === modelValue && $style.isActive\n )\"\n role=\"radio\"\n :aria-checked=\"index === modelValue\"\n :aria-label=\"item.label\"\n :tabindex=\"index === modelValue ? 0 : -1\"\n type=\"button\"\n @click=\"activate(index)\">\n <FluxIcon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n :size=\"15\"/>\n\n <span v-if=\"item.label\">{{ item.label }}</span>\n </button>\n </template>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useResizeObserver } from '@basmilius/common';\n import type { FluxSegmentedControlItemObject } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { onBeforeUnmount, ref, unref, useTemplateRef, watchEffect } from 'vue';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/SegmentedControl.module.scss';\n\n const modelValue = defineModel<number>({\n default: 0\n });\n\n defineProps<{\n readonly ariaLabel?: string;\n readonly isFill?: boolean;\n readonly items: FluxSegmentedControlItemObject[];\n }>();\n\n const controlRef = useTemplateRef<HTMLElement>('control');\n const itemRefs = useTemplateRef<HTMLButtonElement[]>('items');\n\n const activeItemX = ref(0);\n const activeItemWidth = ref(0);\n const isAlive = ref(true);\n\n onBeforeUnmount(() => {\n isAlive.value = false;\n });\n\n watchEffect(() => updateHighlight(unref(modelValue)), {flush: 'post'});\n\n useResizeObserver(controlRef, () => updateHighlight(unref(modelValue)));\n\n function activate(index: number): void {\n modelValue.value = index;\n\n const itemRef = itemRefs.value?.[index];\n itemRef?.focus();\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n const items = itemRefs.value;\n\n if (!items) {\n return;\n }\n\n let newIndex: number | null = null;\n\n switch (evt.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n newIndex = Math.max(0, unref(modelValue) - 1);\n break;\n\n case 'ArrowRight':\n case 'ArrowDown':\n newIndex = Math.min(items.length - 1, unref(modelValue) + 1);\n break;\n\n case 'Home':\n newIndex = 0;\n break;\n\n case 'End':\n newIndex = items.length - 1;\n break;\n\n default:\n return;\n }\n\n activate(newIndex);\n evt.preventDefault();\n }\n\n function updateHighlight(index: number): void {\n if (!isAlive.value) {\n return;\n }\n\n const itemRef = itemRefs.value?.[index];\n const control = controlRef.value;\n\n if (!itemRef || !control) {\n return;\n }\n\n const width = itemRef.offsetWidth;\n\n if (width === 0) {\n return;\n }\n\n const controlRect = control.getBoundingClientRect();\n const itemRect = itemRef.getBoundingClientRect();\n const scaleX = control.offsetWidth > 0 ? controlRect.width / control.offsetWidth : 1;\n\n activeItemX.value = (itemRect.left - controlRect.left) / scaleX;\n activeItemWidth.value = width;\n }\n</script>\n","<template>\n <div\n ref=\"control\"\n :class=\"isFill ? $style.segmentedControlFill : $style.segmentedControlInline\"\n role=\"radiogroup\"\n :aria-label=\"ariaLabel\"\n @keydown=\"onKeyDown\">\n <div\n v-if=\"activeItemWidth > 0\"\n :class=\"$style.segmentedControlHighlight\"\n :style=\"{\n left: `${activeItemX}px`,\n width: `${activeItemWidth}px`\n }\"/>\n\n <template v-for=\"(item, index) of items\">\n <div\n v-if=\"index > 0\"\n :class=\"clsx(\n $style.segmentedControlSeparator,\n (index === modelValue || index === modelValue + 1) && $style.isActive\n )\"\n role=\"separator\"/>\n\n <button\n ref=\"items\"\n :class=\"clsx(\n $style.segmentedControlItem,\n index === modelValue && $style.isActive\n )\"\n role=\"radio\"\n :aria-checked=\"index === modelValue\"\n :aria-label=\"item.label\"\n :tabindex=\"index === modelValue ? 0 : -1\"\n type=\"button\"\n @click=\"activate(index)\">\n <FluxIcon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n :size=\"15\"/>\n\n <span v-if=\"item.label\">{{ item.label }}</span>\n </button>\n </template>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useResizeObserver } from '@basmilius/common';\n import type { FluxSegmentedControlItemObject } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { onBeforeUnmount, ref, unref, useTemplateRef, watchEffect } from 'vue';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/SegmentedControl.module.scss';\n\n const modelValue = defineModel<number>({\n default: 0\n });\n\n defineProps<{\n readonly ariaLabel?: string;\n readonly isFill?: boolean;\n readonly items: FluxSegmentedControlItemObject[];\n }>();\n\n const controlRef = useTemplateRef<HTMLElement>('control');\n const itemRefs = useTemplateRef<HTMLButtonElement[]>('items');\n\n const activeItemX = ref(0);\n const activeItemWidth = ref(0);\n const isAlive = ref(true);\n\n onBeforeUnmount(() => {\n isAlive.value = false;\n });\n\n watchEffect(() => updateHighlight(unref(modelValue)), {flush: 'post'});\n\n useResizeObserver(controlRef, () => updateHighlight(unref(modelValue)));\n\n function activate(index: number): void {\n modelValue.value = index;\n\n const itemRef = itemRefs.value?.[index];\n itemRef?.focus();\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n const items = itemRefs.value;\n\n if (!items) {\n return;\n }\n\n let newIndex: number | null = null;\n\n switch (evt.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n newIndex = Math.max(0, unref(modelValue) - 1);\n break;\n\n case 'ArrowRight':\n case 'ArrowDown':\n newIndex = Math.min(items.length - 1, unref(modelValue) + 1);\n break;\n\n case 'Home':\n newIndex = 0;\n break;\n\n case 'End':\n newIndex = items.length - 1;\n break;\n\n default:\n return;\n }\n\n activate(newIndex);\n evt.preventDefault();\n }\n\n function updateHighlight(index: number): void {\n if (!isAlive.value) {\n return;\n }\n\n const itemRef = itemRefs.value?.[index];\n const control = controlRef.value;\n\n if (!itemRef || !control) {\n return;\n }\n\n const width = itemRef.offsetWidth;\n\n if (width === 0) {\n return;\n }\n\n const controlRect = control.getBoundingClientRect();\n const itemRect = itemRef.getBoundingClientRect();\n const scaleX = control.offsetWidth > 0 ? controlRect.width / control.offsetWidth : 1;\n\n activeItemX.value = (itemRect.left - controlRect.left) / scaleX;\n activeItemWidth.value = width;\n }\n</script>\n","<script lang=\"ts\">\n import { defineComponent } from 'vue';\n\n export default defineComponent({\n props: {\n index: Number\n },\n setup(props, {slots}) {\n return () => {\n const items = slots.default!();\n return items[props.index!];\n };\n }\n });\n</script>\n","<script lang=\"ts\">\n import { defineComponent } from 'vue';\n\n export default defineComponent({\n props: {\n index: Number\n },\n setup(props, {slots}) {\n return () => {\n const items = slots.default!();\n return items[props.index!];\n };\n }\n });\n</script>\n","<script lang=\"ts\">\n import { defineComponent } from 'vue';\n import { FluxSlideOverTransition } from '$flux/transition';\n import { createDialogRenderer } from '$flux/util';\n import $style from '$flux/css/component/Overlay.module.scss';\n\n export default defineComponent({\n emits: ['close'],\n inheritAttrs: false,\n props: {\n isCloseable: {default: false, type: Boolean},\n viewKey: {default: null, type: String}\n },\n setup(props, {attrs, emit, slots}) {\n return createDialogRenderer(\n attrs,\n props,\n emit,\n slots,\n $style.slideOver,\n FluxSlideOverTransition\n );\n }\n });\n</script>\n","<script lang=\"ts\">\n import { defineComponent } from 'vue';\n import { FluxSlideOverTransition } from '$flux/transition';\n import { createDialogRenderer } from '$flux/util';\n import $style from '$flux/css/component/Overlay.module.scss';\n\n export default defineComponent({\n emits: ['close'],\n inheritAttrs: false,\n props: {\n isCloseable: {default: false, type: Boolean},\n viewKey: {default: null, type: String}\n },\n setup(props, {attrs, emit, slots}) {\n return createDialogRenderer(\n attrs,\n props,\n emit,\n slots,\n $style.slideOver,\n FluxSlideOverTransition\n );\n }\n });\n</script>\n","<template>\n <div :style=\"{flex: `0 0 ${spacings[size]}px`}\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n const spacings = [\n 0,\n 3,\n 6,\n 9,\n 12,\n 15,\n 18,\n 24,\n 30,\n 36,\n 42,\n 48,\n 54,\n 60,\n 72,\n 84,\n 90,\n 120\n ] as const;\n\n defineProps<{\n readonly size: keyof typeof spacings;\n }>();\n</script>\n","<template>\n <div :style=\"{flex: `0 0 ${spacings[size]}px`}\"/>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n const spacings = [\n 0,\n 3,\n 6,\n 9,\n 12,\n 15,\n 18,\n 24,\n 30,\n 36,\n 42,\n 48,\n 54,\n 60,\n 72,\n 84,\n 90,\n 120\n ] as const;\n\n defineProps<{\n readonly size: keyof typeof spacings;\n }>();\n</script>\n","<template>\n <FluxFlyout\n :direction=\"flyoutDirection\"\n :is-auto-width=\"flyoutIsAutoWidth\"\n :margin=\"flyoutMargin\"\n :width=\"flyoutWidth\">\n <template #opener=\"{close, open, toggle}\">\n <div :class=\"$style.buttonGroup\">\n <slot\n v-bind=\"{close, open, toggle}\"\n name=\"button\"/>\n\n <FluxSecondaryButton\n :icon-leading=\"buttonIcon\"\n @click=\"open\"/>\n </div>\n </template>\n\n <template #default=\"bindings\">\n <slot\n v-bind=\"bindings\"\n name=\"flyout\"/>\n </template>\n </FluxFlyout>\n</template>\n\n<script\n setup\n lang=\"ts\">\n import type { VNode } from 'vue';\n import type { FluxDirection, FluxIconName } from '@flux-ui/types';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n const {\n buttonIcon = 'ellipsis-h'\n } = defineProps<{\n readonly buttonIcon?: FluxIconName;\n readonly flyoutDirection?: FluxDirection;\n readonly flyoutIsAutoWidth?: boolean;\n readonly flyoutMargin?: number;\n readonly flyoutWidth?: number | string;\n }>();\n\n defineSlots<{\n button(props: {\n close(): void;\n open(): void;\n toggle(): void;\n }): VNode[];\n\n flyout(props: {\n close(): void;\n\n readonly paneX: number;\n readonly paneY: number;\n readonly openerWidth: number;\n readonly openerHeight: number;\n }): VNode[];\n }>();\n</script>\n","<template>\n <FluxFlyout\n :direction=\"flyoutDirection\"\n :is-auto-width=\"flyoutIsAutoWidth\"\n :margin=\"flyoutMargin\"\n :width=\"flyoutWidth\">\n <template #opener=\"{close, open, toggle}\">\n <div :class=\"$style.buttonGroup\">\n <slot\n v-bind=\"{close, open, toggle}\"\n name=\"button\"/>\n\n <FluxSecondaryButton\n :icon-leading=\"buttonIcon\"\n @click=\"open\"/>\n </div>\n </template>\n\n <template #default=\"bindings\">\n <slot\n v-bind=\"bindings\"\n name=\"flyout\"/>\n </template>\n </FluxFlyout>\n</template>\n\n<script\n setup\n lang=\"ts\">\n import type { VNode } from 'vue';\n import type { FluxDirection, FluxIconName } from '@flux-ui/types';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxSecondaryButton from './FluxSecondaryButton.vue';\n import $style from '$flux/css/component/Button.module.scss';\n\n const {\n buttonIcon = 'ellipsis-h'\n } = defineProps<{\n readonly buttonIcon?: FluxIconName;\n readonly flyoutDirection?: FluxDirection;\n readonly flyoutIsAutoWidth?: boolean;\n readonly flyoutMargin?: number;\n readonly flyoutWidth?: number | string;\n }>();\n\n defineSlots<{\n button(props: {\n close(): void;\n open(): void;\n toggle(): void;\n }): VNode[];\n\n flyout(props: {\n close(): void;\n\n readonly paneX: number;\n readonly paneY: number;\n readonly openerWidth: number;\n readonly openerHeight: number;\n }): VNode[];\n }>();\n</script>\n",".statistic {\n padding: 18px;\n flex-basis: 0;\n flex-grow: 1;\n gap: 18px;\n}\n\n.statisticChange {\n display: flex;\n align-items: center;\n align-self: flex-end;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n line-height: 1;\n\n &.isGray {\n color: var(--foreground-prominent);\n }\n\n &.isPrimary {\n color: var(--primary-600);\n }\n\n &.isDanger {\n color: var(--danger-600);\n }\n\n &.isInfo {\n color: var(--info-600);\n }\n\n &.isSuccess {\n color: var(--success-600);\n }\n\n &.isWarning {\n color: var(--warning-600);\n }\n}\n\n.statisticData {\n display: flex;\n flex-flow: column;\n flex-grow: 1;\n gap: 9px;\n line-height: 1;\n\n :is(span) {\n color: var(--foreground-secondary);\n }\n\n :is(strong) {\n color: var(--foreground-prominent);\n font-size: 24px;\n font-weight: 700;\n }\n}\n\n.statisticIcon :local(.icon) {\n font-size: .45em;\n}\n\n.statisticImage {\n height: 48px;\n width: 48px;\n border-radius: var(--radius);\n}\n\n.statisticHorizontal {\n composes: statistic;\n\n display: flex;\n}\n\n.statisticVertical {\n composes: statistic;\n\n display: flex;\n align-items: center;\n flex-flow: column;\n text-align: center;\n\n .statisticChange {\n align-self: center;\n }\n\n .statisticData {\n align-items: center;\n }\n}\n","<template>\n <FluxPane\n :class=\"clsx(\n direction === 'horizontal' && $style.statisticHorizontal,\n direction === 'vertical' && $style.statisticVertical,\n color === 'gray' && $style.isGray,\n color === 'primary' && $style.isPrimary,\n color === 'danger' && $style.isDanger,\n color === 'info' && $style.isInfo,\n color === 'success' && $style.isSuccess,\n color === 'warning' && $style.isWarning\n )\"\n :is-loading=\"isLoading\">\n <FluxBoxedIcon\n v-if=\"icon\"\n :class=\"$style.statisticIcon\"\n :color=\"color\"\n :name=\"icon\"\n :size=\"48\"/>\n\n <div v-else-if=\"imageSrc\">\n <img\n :class=\"$style.statisticImage\"\n :src=\"imageSrc\"\n :alt=\"imageAlt\"/>\n </div>\n\n <div :class=\"$style.statisticData\">\n <span>{{ label }}</span>\n <strong>{{ value ?? MDASH }}</strong>\n </div>\n\n <div\n v-if=\"changeIcon || changeValue\"\n :class=\"clsx(\n $style.statisticChange,\n changeColor === 'gray' && $style.isGray,\n changeColor === 'primary' && $style.isPrimary,\n changeColor === 'danger' && $style.isDanger,\n changeColor === 'info' && $style.isInfo,\n changeColor === 'success' && $style.isSuccess,\n changeColor === 'warning' && $style.isWarning\n )\">\n <span v-if=\"changeValue\">{{ changeValue }}</span>\n\n <FluxIcon\n v-if=\"changeIcon\"\n :name=\"changeIcon\"\n :size=\"14\"/>\n </div>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { MDASH } from '@basmilius/utils';\n import type { FluxColor, FluxDirection, FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import FluxPane from './FluxPane.vue';\n import $style from '$flux/css/component/Statistic.module.scss';\n import FluxBoxedIcon from '$flux/component/FluxBoxedIcon.vue';\n\n const {\n changeColor = 'gray',\n color = 'gray',\n direction = 'horizontal'\n } = defineProps<{\n readonly changeColor?: FluxColor;\n readonly changeIcon?: FluxIconName;\n readonly changeValue?: string | number | null;\n readonly color?: FluxColor;\n readonly direction?: FluxDirection;\n readonly icon?: FluxIconName;\n readonly imageSrc?: string;\n readonly imageAlt?: string;\n readonly isLoading?: boolean;\n readonly label: string;\n readonly value?: string | number | null;\n }>();\n</script>\n","<template>\n <FluxPane\n :class=\"clsx(\n direction === 'horizontal' && $style.statisticHorizontal,\n direction === 'vertical' && $style.statisticVertical,\n color === 'gray' && $style.isGray,\n color === 'primary' && $style.isPrimary,\n color === 'danger' && $style.isDanger,\n color === 'info' && $style.isInfo,\n color === 'success' && $style.isSuccess,\n color === 'warning' && $style.isWarning\n )\"\n :is-loading=\"isLoading\">\n <FluxBoxedIcon\n v-if=\"icon\"\n :class=\"$style.statisticIcon\"\n :color=\"color\"\n :name=\"icon\"\n :size=\"48\"/>\n\n <div v-else-if=\"imageSrc\">\n <img\n :class=\"$style.statisticImage\"\n :src=\"imageSrc\"\n :alt=\"imageAlt\"/>\n </div>\n\n <div :class=\"$style.statisticData\">\n <span>{{ label }}</span>\n <strong>{{ value ?? MDASH }}</strong>\n </div>\n\n <div\n v-if=\"changeIcon || changeValue\"\n :class=\"clsx(\n $style.statisticChange,\n changeColor === 'gray' && $style.isGray,\n changeColor === 'primary' && $style.isPrimary,\n changeColor === 'danger' && $style.isDanger,\n changeColor === 'info' && $style.isInfo,\n changeColor === 'success' && $style.isSuccess,\n changeColor === 'warning' && $style.isWarning\n )\">\n <span v-if=\"changeValue\">{{ changeValue }}</span>\n\n <FluxIcon\n v-if=\"changeIcon\"\n :name=\"changeIcon\"\n :size=\"14\"/>\n </div>\n </FluxPane>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { MDASH } from '@basmilius/utils';\n import type { FluxColor, FluxDirection, FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import FluxPane from './FluxPane.vue';\n import $style from '$flux/css/component/Statistic.module.scss';\n import FluxBoxedIcon from '$flux/component/FluxBoxedIcon.vue';\n\n const {\n changeColor = 'gray',\n color = 'gray',\n direction = 'horizontal'\n } = defineProps<{\n readonly changeColor?: FluxColor;\n readonly changeIcon?: FluxIconName;\n readonly changeValue?: string | number | null;\n readonly color?: FluxColor;\n readonly direction?: FluxDirection;\n readonly icon?: FluxIconName;\n readonly imageSrc?: string;\n readonly imageAlt?: string;\n readonly isLoading?: boolean;\n readonly label: string;\n readonly value?: string | number | null;\n }>();\n</script>\n","@use 'sass:math';\n\n$-bubble-d: 3rem;\n$-bubble-r: .5 * $-bubble-d;\n$-sparkle-d: .375rem;\n$-sparkle-r: .5 * $-sparkle-d;\n\n@mixin -bubble($ext) {\n border-width: $ext;\n opacity: .15;\n transform: scale(1);\n}\n\n@mixin -sparkles($amount) {\n $-shadow-list: ();\n $-amount-pairs: 5;\n $-group-base-angle: math.div(360deg, $-amount-pairs);\n $-group-distr-r: (1 + $amount * .5) * $-bubble-r;\n $-amount-particles: 3;\n $-sparkle-base-angle: math.div(360deg, $-amount-particles);\n $-sparkle-off-angle: 72deg;\n $-spread-r: -$amount * $-sparkle-r;\n\n @for $i from 0 to $-amount-pairs {\n $-group-curr-angle: $i * $-group-base-angle - 90deg;\n $-xg: $-group-distr-r * cos($-group-curr-angle);\n $-yg: $-group-distr-r * sin($-group-curr-angle);\n\n @for $j from 0 to $-amount-particles {\n $-sparkle-curr-angle: $-group-curr-angle + $-sparkle-off-angle + $j * $-sparkle-base-angle;\n $-xs: $-xg + $-sparkle-d * cos($-sparkle-curr-angle);\n $-ys: $-yg + $-sparkle-d * sin($-sparkle-curr-angle);\n\n $-hue: ($i + $j) * $-group-base-angle;\n $-shadow-list: $-shadow-list, $-xs $-ys 0 $-spread-r hsl($-hue, 100%, 75%);\n }\n }\n\n box-shadow: $-shadow-list;\n}\n\n.sparklesContainer {\n z-index: 0;\n}\n\n.sparklesParticles {\n position: absolute;\n display: block;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n align-self: center;\n cursor: pointer;\n font-size: 24px;\n user-select: none;\n\n &:before,\n &:after {\n position: absolute;\n top: 50%;\n left: 50%;\n content: '';\n border-radius: 50%;\n z-index: -1;\n }\n\n &:before {\n height: $-bubble-d;\n margin: -$-bubble-r;\n width: $-bubble-d;\n box-sizing: border-box;\n border: $-bubble-r solid currentColor;\n transform: scale(0);\n }\n\n &:after {\n margin: -$-sparkle-r;\n width: $-sparkle-d;\n height: $-sparkle-d;\n }\n}\n\n.sparklesContainerActive .sparklesParticles {\n animation: heart 1s var(--deceleration-curve);\n filter: none;\n will-change: font-size;\n\n &:before, &:after {\n animation: inherit;\n animation-timing-function: var(--deceleration-curve);\n }\n\n &:before {\n animation-name: bubble;\n will-change: transform, border-width, border-color;\n }\n\n &:after {\n animation-name: sparkles;\n will-change: opacity, box-shadow;\n }\n}\n\n@keyframes bubble {\n 15% {\n @include -bubble($-bubble-r);\n }\n\n 40%,\n 100% {\n @include -bubble(0);\n }\n}\n\n@keyframes heart {\n 0%,\n 17.5% {\n font-size: 0;\n }\n}\n\n@keyframes sparkles {\n 0%,\n 20% {\n opacity: 0;\n }\n\n 21% {\n opacity: 1;\n\n @include -sparkles(0);\n }\n\n 100% {\n opacity: 0;\n\n @include -sparkles(1);\n }\n}\n",".stepperStep {\n position: relative;\n}\n\n.stepperSteps {\n position: relative;\n display: flex;\n align-items: center;\n flex-grow: 1;\n justify-content: space-between;\n background: inherit;\n z-index: 0;\n\n &::before,\n &::after {\n --margin: 15px;\n --max: calc(100% - var(--margin) * 2);\n\n position: absolute;\n display: block;\n top: calc(50% - 2px);\n left: 0;\n margin-left: var(--margin);\n margin-right: var(--margin);\n height: 4px;\n content: '';\n z-index: -1;\n }\n\n &::before {\n width: var(--max);\n background: var(--gray-100);\n }\n\n &::after {\n width: calc(min(1, var(--progress)) * var(--max));\n background: var(--primary-600);\n transition: width 300ms var(--swift-out);\n }\n}\n\n.stepperStepsItem {\n composes: sparklesContainer from './base/Effect.module.scss';\n\n position: relative;\n display: flex;\n height: 33px;\n width: 33px;\n align-items: center;\n justify-content: center;\n background: var(--gray-100);\n border: 0;\n border-radius: var(--radius-full);\n color: var(--foreground);\n cursor: default;\n font-size: 14px;\n font-weight: 700;\n outline: 6px solid transparent;\n outline-offset: -2px;\n transition: 300ms var(--swift-out);\n transition-property: background, border, color, outline;\n\n .icon {\n overflow: visible;\n scale: .8;\n\n :is(path) {\n stroke: currentColor;\n stroke-width: 54px;\n }\n }\n}\n\n.stepperStepsItemComplete {\n composes: sparklesContainerActive from './base/Effect.module.scss';\n composes: stepperStepsItem;\n\n background: var(--primary-600);\n border-color: var(--primary-600);\n color: var(--primary-25);\n}\n\n.stepperStepsItemCurrent {\n composes: stepperStepsItem;\n\n background: var(--gray-100);\n color: var(--foreground-prominent);\n outline-color: var(--primary-600);\n outline-width: 2px;\n transition-delay: 75ms;\n}\n\n.stepperStepsItemIdle {\n composes: stepperStepsItem;\n\n outline-color: var(--gray-25);\n}\n\n.stepperStepsItemParticles {\n composes: sparklesParticles from './base/Effect.module.scss';\n}\n","<template>\n <div\n :class=\"$style.stepperSteps\"\n :style=\"{\n '--progress': progress\n }\">\n <template\n v-for=\"step of amount\"\n :key=\"step\">\n <button\n :class=\"clsx(\n $style.stepperStepsItem,\n current > step && $style.stepperStepsItemComplete,\n current === step && $style.stepperStepsItemCurrent,\n current < step && $style.stepperStepsItemIdle\n )\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"activate(step - 1)\">\n <span :class=\"$style.stepperStepsItemParticles\"/>\n\n <FluxFadeTransition>\n <FluxIcon\n v-if=\"current > step\"\n name=\"check\"/>\n\n <span v-else>\n {{ step }}\n </span>\n </FluxFadeTransition>\n </button>\n </template>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clsx } from 'clsx';\n import { computed } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Stepper.module.scss';\n\n const emit = defineEmits<{\n activate: [number];\n }>();\n\n const {\n amount,\n current\n } = defineProps<{\n readonly amount: number;\n readonly current: number;\n }>();\n\n const progress = computed(() => (current - 1) / (amount - 1));\n\n function activate(index: number): void {\n emit('activate', index);\n }\n</script>\n","<template>\n <div\n :class=\"$style.stepperSteps\"\n :style=\"{\n '--progress': progress\n }\">\n <template\n v-for=\"step of amount\"\n :key=\"step\">\n <button\n :class=\"clsx(\n $style.stepperStepsItem,\n current > step && $style.stepperStepsItemComplete,\n current === step && $style.stepperStepsItemCurrent,\n current < step && $style.stepperStepsItemIdle\n )\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"activate(step - 1)\">\n <span :class=\"$style.stepperStepsItemParticles\"/>\n\n <FluxFadeTransition>\n <FluxIcon\n v-if=\"current > step\"\n name=\"check\"/>\n\n <span v-else>\n {{ step }}\n </span>\n </FluxFadeTransition>\n </button>\n </template>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { clsx } from 'clsx';\n import { computed } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Stepper.module.scss';\n\n const emit = defineEmits<{\n activate: [number];\n }>();\n\n const {\n amount,\n current\n } = defineProps<{\n readonly amount: number;\n readonly current: number;\n }>();\n\n const progress = computed(() => (current - 1) / (amount - 1));\n\n function activate(index: number): void {\n emit('activate', index);\n }\n</script>\n","<template>\n <slot\n v-bind=\"{activate, modelValue, steps}\"\n name=\"steps\">\n <FluxStepperSteps\n :amount=\"steps\"\n :current=\"modelValue + 1\"\n @activate=\"activate\"/>\n </slot>\n\n <slot\n v-bind=\"{activate, modelValue, children, isTransitioningBack, steps, view}\"\n name=\"content\">\n <FluxWindowTransition :is-back=\"isTransitioningBack\">\n <FluxDynamicView\n :key=\"modelValue\"\n :vnode=\"view\"/>\n </FluxWindowTransition>\n </slot>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree } from '@flux-ui/internals';\n import { computed, ref, unref, type VNode, watch } from 'vue';\n import { FluxWindowTransition } from '$flux/transition';\n import FluxDynamicView from './FluxDynamicView.vue';\n import FluxStepperSteps from './FluxStepperSteps.vue';\n\n const modelValue = defineModel<number>({\n default: 0\n });\n\n const slots = defineSlots<{\n default(): VNode[];\n\n content(props: {\n activate(index: number): void;\n\n readonly children: VNode[];\n readonly isTransitioningBack: boolean;\n readonly modelValue: number;\n readonly steps: number;\n readonly view: VNode;\n }): VNode[];\n\n steps(props: {\n activate(index: number): void;\n\n readonly modelValue: number;\n readonly steps: number;\n }): VNode[];\n }>();\n\n const isTransitioningBack = ref(false);\n\n const children = computed(() => flattenVNodeTree(slots.default?.() ?? []));\n const steps = computed(() => unref(children).length);\n const view = computed(() => unref(children)[unref(modelValue)] ?? null);\n\n function activate(index: number): void {\n modelValue.value = index;\n }\n\n watch(modelValue, (newIndex, oldIndex) => {\n isTransitioningBack.value = newIndex < oldIndex;\n });\n</script>\n","<template>\n <slot\n v-bind=\"{activate, modelValue, steps}\"\n name=\"steps\">\n <FluxStepperSteps\n :amount=\"steps\"\n :current=\"modelValue + 1\"\n @activate=\"activate\"/>\n </slot>\n\n <slot\n v-bind=\"{activate, modelValue, children, isTransitioningBack, steps, view}\"\n name=\"content\">\n <FluxWindowTransition :is-back=\"isTransitioningBack\">\n <FluxDynamicView\n :key=\"modelValue\"\n :vnode=\"view\"/>\n </FluxWindowTransition>\n </slot>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree } from '@flux-ui/internals';\n import { computed, ref, unref, type VNode, watch } from 'vue';\n import { FluxWindowTransition } from '$flux/transition';\n import FluxDynamicView from './FluxDynamicView.vue';\n import FluxStepperSteps from './FluxStepperSteps.vue';\n\n const modelValue = defineModel<number>({\n default: 0\n });\n\n const slots = defineSlots<{\n default(): VNode[];\n\n content(props: {\n activate(index: number): void;\n\n readonly children: VNode[];\n readonly isTransitioningBack: boolean;\n readonly modelValue: number;\n readonly steps: number;\n readonly view: VNode;\n }): VNode[];\n\n steps(props: {\n activate(index: number): void;\n\n readonly modelValue: number;\n readonly steps: number;\n }): VNode[];\n }>();\n\n const isTransitioningBack = ref(false);\n\n const children = computed(() => flattenVNodeTree(slots.default?.() ?? []));\n const steps = computed(() => unref(children).length);\n const view = computed(() => unref(children)[unref(modelValue)] ?? null);\n\n function activate(index: number): void {\n modelValue.value = index;\n }\n\n watch(modelValue, (newIndex, oldIndex) => {\n isTransitioningBack.value = newIndex < oldIndex;\n });\n</script>\n","<template>\n <div :class=\"$style.stepperStep\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Stepper.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div :class=\"$style.stepperStep\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Stepper.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","@use '$flux/css/mixin';\n\n.tab {\n position: relative;\n}\n\n.tabBar {\n --tab-padding: 12px;\n\n position: relative;\n box-shadow: inset 0 -2px var(--surface-stroke);\n z-index: 0;\n}\n\n.tabBarArrow {\n position: absolute;\n display: flex;\n top: 3px;\n height: calc(100% - 6px);\n width: 30px;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: 0;\n border-radius: var(--radius);\n color: var(--foreground);\n cursor: pointer;\n outline: 0;\n transition: background var(--transition-default);\n z-index: 1;\n\n @include mixin.hover {\n background: var(--surface-stroke);\n }\n}\n\n.tabBarArrowStart {\n composes: tabBarArrow;\n\n left: -6px;\n}\n\n.tabBarArrowEnd {\n composes: tabBarArrow;\n\n right: -6px;\n}\n\n.tabBarTabs {\n --mask-start: 0%;\n --mask-end: 100%;\n --mask: linear-gradient(to right, transparent, black var(--mask-start), black, black var(--mask-end), transparent);\n\n display: flex;\n margin-left: -3px;\n margin-right: -3px;\n padding-left: 3px;\n padding-right: 3px;\n align-items: center;\n gap: 27px;\n overflow: auto;\n scrollbar-width: none;\n\n -webkit-mask-image: var(--mask);\n mask-image: var(--mask);\n\n &.isStartMasked {\n --mask-start: 60px;\n }\n\n &.isEndMasked {\n --mask-end: calc(100% - 60px);\n }\n}\n\n.tabBarItem {\n display: inline-flex;\n padding: var(--tab-padding) 0;\n align-items: center;\n gap: 9px;\n background: unset;\n border: 0;\n border-bottom: 2px solid transparent;\n color: var(--foreground);\n contain: layout;\n cursor: pointer;\n font-weight: 500;\n outline: 0;\n transition: var(--transition-default);\n transition-property: border-color, color;\n white-space: nowrap;\n\n &::before {\n position: absolute;\n inset: 0;\n content: '';\n border-radius: var(--radius);\n pointer-events: none;\n transition: var(--transition-default) mixin.focus-ring-transition-properties();\n }\n\n @include mixin.focus-ring-pseudo(before);\n\n @include mixin.hover {\n border-color: var(--foreground);\n }\n\n &:disabled,\n &[aria-disabled=true] {\n box-shadow: none;\n opacity: .5;\n pointer-events: none;\n }\n}\n\n.tabBarItemActive {\n composes: tabBarItem;\n\n border-color: var(--primary-600);\n color: var(--foreground-prominent);\n}\n\n.tabs {\n display: flex;\n flex-flow: column;\n overflow: visible;\n}\n\n.tabsBar {\n margin-bottom: 18px;\n}\n\n.basePaneStructure > .tabBar,\n.basePaneStructure > .tabs > .tabBar,\n.basePaneStructure > .form > .tabBar,\n.basePaneStructure > .form > .tabs > .tabBar {\n --tab-padding: 18px;\n\n padding-left: 18px;\n padding-right: 18px;\n background: var(--gray-50);\n\n &:first-child {\n border-radius: var(--radius) var(--radius) 0 0;\n }\n\n &:not(:first-child) {\n border-top: 1px solid var(--surface-stroke);\n }\n}\n\n.basePaneStructure > .paneHeader + .tabBar,\n.basePaneStructure > .paneHeader + .tabs > .tabBar,\n.basePaneStructure > .form > .paneHeader + .tabBar,\n.basePaneStructure > .form > .paneHeader + .tabs > .tabBar {\n padding-top: 6px;\n\n &:not(:first-child) {\n border-top: 0;\n }\n}\n\n.paneHeader:has(+ .tabBar),\n.paneHeader:has(+ .tabs > .tabBar) {\n background: var(--gray-50);\n}\n\n.basePaneStructure > .tabs > .tabsBar {\n margin-bottom: 0;\n}\n","<template>\n <div\n :class=\"$style.tab\"\n role=\"tabpanel\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxIconName } from '@flux-ui/types';\n import $style from '$flux/css/component/Tab.module.scss';\n\n defineProps<{\n readonly icon?: FluxIconName;\n readonly label?: string;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.tab\"\n role=\"tabpanel\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxIconName } from '@flux-ui/types';\n import $style from '$flux/css/component/Tab.module.scss';\n\n defineProps<{\n readonly icon?: FluxIconName;\n readonly label?: string;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <nav\n :class=\"$style.tabBar\"\n role=\"tablist\"\n aria-orientation=\"horizontal\">\n <FluxFadeTransition>\n <button\n v-if=\"isStartArrowVisible\"\n :class=\"$style.tabBarArrowStart\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"scrollToStart\">\n <FluxIcon name=\"angle-left\"/>\n </button>\n </FluxFadeTransition>\n\n <div\n ref=\"tabBar\"\n :class=\"clsx(\n $style.tabBarTabs,\n isEndArrowVisible && $style.isEndMasked,\n isStartArrowVisible && $style.isStartMasked\n )\">\n <slot/>\n </div>\n\n <FluxFadeTransition>\n <button\n v-if=\"isEndArrowVisible\"\n :class=\"$style.tabBarArrowEnd\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"scrollToEnd\">\n <FluxIcon name=\"angle-right\"/>\n </button>\n </FluxFadeTransition>\n </nav>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useMutationObserver } from '@basmilius/common';\n import { unrefTemplateElement, useEventListener } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { onMounted, ref, useTemplateRef, type VNode } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Tab.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const tabBarRef = useTemplateRef<HTMLElement>('tabBar');\n\n useEventListener(tabBarRef, 'scroll', () => checkScroll());\n useMutationObserver(tabBarRef, () => checkScroll(), {childList: true});\n\n const isEndArrowVisible = ref(false);\n const isStartArrowVisible = ref(false);\n\n onMounted(() => checkScroll());\n\n function checkScroll(): void {\n const tabBar = unrefTemplateElement(tabBarRef)!;\n\n if (tabBar.scrollWidth <= tabBar.offsetWidth) {\n isEndArrowVisible.value = false;\n isStartArrowVisible.value = false;\n return;\n }\n\n isEndArrowVisible.value = tabBar.scrollLeft < tabBar.scrollWidth - tabBar.offsetWidth;\n isStartArrowVisible.value = tabBar.scrollLeft > 0;\n }\n\n function scrollToEnd(): void {\n const tabBar = unrefTemplateElement(tabBarRef)!;\n tabBar.scrollBy({\n behavior: 'smooth',\n left: tabBar.offsetWidth / 1.5\n });\n }\n\n function scrollToStart(): void {\n const tabBar = unrefTemplateElement(tabBarRef)!;\n tabBar.scrollBy({\n behavior: 'smooth',\n left: tabBar.offsetWidth / -1.5\n });\n }\n</script>\n","<template>\n <nav\n :class=\"$style.tabBar\"\n role=\"tablist\"\n aria-orientation=\"horizontal\">\n <FluxFadeTransition>\n <button\n v-if=\"isStartArrowVisible\"\n :class=\"$style.tabBarArrowStart\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"scrollToStart\">\n <FluxIcon name=\"angle-left\"/>\n </button>\n </FluxFadeTransition>\n\n <div\n ref=\"tabBar\"\n :class=\"clsx(\n $style.tabBarTabs,\n isEndArrowVisible && $style.isEndMasked,\n isStartArrowVisible && $style.isStartMasked\n )\">\n <slot/>\n </div>\n\n <FluxFadeTransition>\n <button\n v-if=\"isEndArrowVisible\"\n :class=\"$style.tabBarArrowEnd\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"scrollToEnd\">\n <FluxIcon name=\"angle-right\"/>\n </button>\n </FluxFadeTransition>\n </nav>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { useMutationObserver } from '@basmilius/common';\n import { unrefTemplateElement, useEventListener } from '@flux-ui/internals';\n import { clsx } from 'clsx';\n import { onMounted, ref, useTemplateRef, type VNode } from 'vue';\n import { FluxFadeTransition } from '$flux/transition';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Tab.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const tabBarRef = useTemplateRef<HTMLElement>('tabBar');\n\n useEventListener(tabBarRef, 'scroll', () => checkScroll());\n useMutationObserver(tabBarRef, () => checkScroll(), {childList: true});\n\n const isEndArrowVisible = ref(false);\n const isStartArrowVisible = ref(false);\n\n onMounted(() => checkScroll());\n\n function checkScroll(): void {\n const tabBar = unrefTemplateElement(tabBarRef)!;\n\n if (tabBar.scrollWidth <= tabBar.offsetWidth) {\n isEndArrowVisible.value = false;\n isStartArrowVisible.value = false;\n return;\n }\n\n isEndArrowVisible.value = tabBar.scrollLeft < tabBar.scrollWidth - tabBar.offsetWidth;\n isStartArrowVisible.value = tabBar.scrollLeft > 0;\n }\n\n function scrollToEnd(): void {\n const tabBar = unrefTemplateElement(tabBarRef)!;\n tabBar.scrollBy({\n behavior: 'smooth',\n left: tabBar.offsetWidth / 1.5\n });\n }\n\n function scrollToStart(): void {\n const tabBar = unrefTemplateElement(tabBarRef)!;\n tabBar.scrollBy({\n behavior: 'smooth',\n left: tabBar.offsetWidth / -1.5\n });\n }\n</script>\n","<template>\n <FluxPressable\n ref=\"tab\"\n :component-type=\"type\"\n :class=\"isActive ? $style.tabBarItemActive : $style.tabBarItem\"\n type=\"button\"\n role=\"tab\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-selected=\"isActive\"\n :disabled=\"disabled ? true : undefined\"\n :tabindex=\"disabled ? -1 : tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"onClick\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\">\n <FluxIcon\n v-if=\"icon\"\n :name=\"icon\"\n :size=\"16\"/>\n\n <span v-if=\"label\">{{ label }}</span>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName, FluxPressableType, FluxTo } from '@flux-ui/types';\n import { type ComponentPublicInstance, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import $style from '$flux/css/component/Tab.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n mouseenter: [MouseEvent];\n mouseleave: [MouseEvent];\n }>();\n\n const {\n disabled: componentDisabled,\n isActive\n } = defineProps<{\n readonly type?: FluxPressableType;\n readonly disabled?: boolean;\n readonly icon?: FluxIconName;\n readonly isActive?: boolean;\n readonly label?: string;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const tabRef = useTemplateRef<ComponentPublicInstance>('tab');\n\n function onClick(evt: MouseEvent): void {\n if (unref(disabled)) {\n evt.preventDefault();\n evt.stopPropagation();\n return;\n }\n\n emit('click', evt);\n }\n\n function onMouseEnter(evt: MouseEvent): void {\n emit('mouseenter', evt);\n }\n\n function onMouseLeave(evt: MouseEvent): void {\n emit('mouseleave', evt);\n }\n\n watch(() => isActive, () => {\n if (!isActive) {\n return;\n }\n\n const tab = unref(tabRef);\n\n if (!tab) {\n return;\n }\n\n const el = tab.$el;\n\n if (el.parentElement?.offsetWidth === el.parentElement?.scrollWidth) {\n return;\n }\n\n el.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'center'\n });\n }, {immediate: true});\n</script>\n","<template>\n <FluxPressable\n ref=\"tab\"\n :component-type=\"type\"\n :class=\"isActive ? $style.tabBarItemActive : $style.tabBarItem\"\n type=\"button\"\n role=\"tab\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-selected=\"isActive\"\n :disabled=\"disabled ? true : undefined\"\n :tabindex=\"disabled ? -1 : tabindex\"\n :href=\"href\"\n :rel=\"rel\"\n :target=\"target\"\n :to=\"to\"\n @click=\"onClick\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\">\n <FluxIcon\n v-if=\"icon\"\n :name=\"icon\"\n :size=\"16\"/>\n\n <span v-if=\"label\">{{ label }}</span>\n </FluxPressable>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName, FluxPressableType, FluxTo } from '@flux-ui/types';\n import { type ComponentPublicInstance, toRef, unref, useTemplateRef, watch } from 'vue';\n import { useDisabled } from '$flux/composable';\n import FluxIcon from './FluxIcon.vue';\n import FluxPressable from './FluxPressable.vue';\n import $style from '$flux/css/component/Tab.module.scss';\n\n const emit = defineEmits<{\n click: [MouseEvent];\n mouseenter: [MouseEvent];\n mouseleave: [MouseEvent];\n }>();\n\n const {\n disabled: componentDisabled,\n isActive\n } = defineProps<{\n readonly type?: FluxPressableType;\n readonly disabled?: boolean;\n readonly icon?: FluxIconName;\n readonly isActive?: boolean;\n readonly label?: string;\n readonly tabindex?: string | number;\n readonly href?: string;\n readonly rel?: string;\n readonly target?: string;\n readonly to?: FluxTo;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const tabRef = useTemplateRef<ComponentPublicInstance>('tab');\n\n function onClick(evt: MouseEvent): void {\n if (unref(disabled)) {\n evt.preventDefault();\n evt.stopPropagation();\n return;\n }\n\n emit('click', evt);\n }\n\n function onMouseEnter(evt: MouseEvent): void {\n emit('mouseenter', evt);\n }\n\n function onMouseLeave(evt: MouseEvent): void {\n emit('mouseleave', evt);\n }\n\n watch(() => isActive, () => {\n if (!isActive) {\n return;\n }\n\n const tab = unref(tabRef);\n\n if (!tab) {\n return;\n }\n\n const el = tab.$el;\n\n if (el.parentElement?.offsetWidth === el.parentElement?.scrollWidth) {\n return;\n }\n\n el.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'center'\n });\n }, {immediate: true});\n</script>\n","<template>\n <div :class=\"$style.tabs\">\n <slot\n v-bind=\"{children, modelValue, tabs, activate}\"\n name=\"tabs\">\n <FluxTabBar :class=\"$style.tabsBar\">\n <template\n v-for=\"(tab, index) of tabs\"\n :key=\"index\">\n <FluxTabBarItem\n :id=\"`${baseId}-tab-${index}`\"\n :aria-controls=\"`${baseId}-panel-${index}`\"\n :icon=\"tab.icon\"\n :is-active=\"modelValue === index\"\n :label=\"tab.label\"\n @click=\"activate(index)\"/>\n </template>\n </FluxTabBar>\n </slot>\n\n <slot\n v-bind=\"{children, modelValue, tabs, activate}\"\n name=\"content\">\n <FluxWindowTransition :is-back=\"isTransitioningBack\">\n <VNodeRenderer\n :key=\"modelValue\"\n :vnode=\"children[modelValue]\"/>\n </FluxWindowTransition>\n </slot>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree, getComponentProps } from '@flux-ui/internals';\n import type { FluxIconName } from '@flux-ui/types';\n import { cloneVNode, computed, ref, unref, useId, type VNode, watch } from 'vue';\n import { FluxWindowTransition } from '$flux/transition';\n import { VNodeRenderer } from './primitive';\n import FluxTabBar from './FluxTabBar.vue';\n import FluxTabBarItem from './FluxTabBarItem.vue';\n import $style from '$flux/css/component/Tab.module.scss';\n\n const modelValue = defineModel<number>({\n default: 0\n });\n\n const slots = defineSlots<{\n default(): VNode[];\n\n content(props: {\n activate(index: number): void;\n\n readonly children: VNode[];\n readonly modelValue: number;\n readonly tabs: {\n readonly icon?: FluxIconName;\n readonly label?: string;\n }[];\n }): VNode[];\n\n tabs(props: {\n activate(index: number): void;\n\n readonly children: VNode[];\n readonly modelValue: number;\n readonly tabs: {\n readonly icon?: FluxIconName;\n readonly label?: string;\n }[];\n }): VNode[];\n }>();\n\n const baseId = useId();\n const isTransitioningBack = ref(false);\n\n const rawChildren = computed(() => flattenVNodeTree(slots.default?.() ?? []));\n\n const children = computed(() => unref(rawChildren).map((child, index) => cloneVNode(child, {\n id: `${baseId}-panel-${index}`,\n 'aria-labelledby': `${baseId}-tab-${index}`\n })));\n\n const tabs = computed<{ icon?: FluxIconName; label?: string; }[]>(() => unref(rawChildren)\n .filter((child: VNode) => getComponentProps<any>(child).icon || getComponentProps<any>(child).label)\n .map((child: VNode) => ({\n icon: getComponentProps<any>(child).icon,\n label: getComponentProps<any>(child).label\n }))\n );\n\n function activate(index: number): void {\n modelValue.value = index;\n }\n\n watch(modelValue, (newIndex, oldIndex) => {\n isTransitioningBack.value = newIndex < oldIndex;\n });\n</script>\n","<template>\n <div :class=\"$style.tabs\">\n <slot\n v-bind=\"{children, modelValue, tabs, activate}\"\n name=\"tabs\">\n <FluxTabBar :class=\"$style.tabsBar\">\n <template\n v-for=\"(tab, index) of tabs\"\n :key=\"index\">\n <FluxTabBarItem\n :id=\"`${baseId}-tab-${index}`\"\n :aria-controls=\"`${baseId}-panel-${index}`\"\n :icon=\"tab.icon\"\n :is-active=\"modelValue === index\"\n :label=\"tab.label\"\n @click=\"activate(index)\"/>\n </template>\n </FluxTabBar>\n </slot>\n\n <slot\n v-bind=\"{children, modelValue, tabs, activate}\"\n name=\"content\">\n <FluxWindowTransition :is-back=\"isTransitioningBack\">\n <VNodeRenderer\n :key=\"modelValue\"\n :vnode=\"children[modelValue]\"/>\n </FluxWindowTransition>\n </slot>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import { flattenVNodeTree, getComponentProps } from '@flux-ui/internals';\n import type { FluxIconName } from '@flux-ui/types';\n import { cloneVNode, computed, ref, unref, useId, type VNode, watch } from 'vue';\n import { FluxWindowTransition } from '$flux/transition';\n import { VNodeRenderer } from './primitive';\n import FluxTabBar from './FluxTabBar.vue';\n import FluxTabBarItem from './FluxTabBarItem.vue';\n import $style from '$flux/css/component/Tab.module.scss';\n\n const modelValue = defineModel<number>({\n default: 0\n });\n\n const slots = defineSlots<{\n default(): VNode[];\n\n content(props: {\n activate(index: number): void;\n\n readonly children: VNode[];\n readonly modelValue: number;\n readonly tabs: {\n readonly icon?: FluxIconName;\n readonly label?: string;\n }[];\n }): VNode[];\n\n tabs(props: {\n activate(index: number): void;\n\n readonly children: VNode[];\n readonly modelValue: number;\n readonly tabs: {\n readonly icon?: FluxIconName;\n readonly label?: string;\n }[];\n }): VNode[];\n }>();\n\n const baseId = useId();\n const isTransitioningBack = ref(false);\n\n const rawChildren = computed(() => flattenVNodeTree(slots.default?.() ?? []));\n\n const children = computed(() => unref(rawChildren).map((child, index) => cloneVNode(child, {\n id: `${baseId}-panel-${index}`,\n 'aria-labelledby': `${baseId}-tab-${index}`\n })));\n\n const tabs = computed<{ icon?: FluxIconName; label?: string; }[]>(() => unref(rawChildren)\n .filter((child: VNode) => getComponentProps<any>(child).icon || getComponentProps<any>(child).label)\n .map((child: VNode) => ({\n icon: getComponentProps<any>(child).icon,\n label: getComponentProps<any>(child).label\n }))\n );\n\n function activate(index: number): void {\n modelValue.value = index;\n }\n\n watch(modelValue, (newIndex, oldIndex) => {\n isTransitioningBack.value = newIndex < oldIndex;\n });\n</script>\n","<template>\n <FluxActionStack :class=\"$style.tableActions\">\n <slot/>\n </FluxActionStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxActionStack from './FluxActionStack.vue';\n import $style from '$flux/css/component/Table.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxActionStack :class=\"$style.tableActions\">\n <slot/>\n </FluxActionStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxActionStack from './FluxActionStack.vue';\n import $style from '$flux/css/component/Table.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <tr :class=\"$style.tableRow\">\n <td\n :class=\"clsx(\n $style.tableBar,\n isBordered && $style.isBordered,\n isHoverable && $style.isHoverable,\n isSeparated && $style.isSeparated,\n isStriped && $style.isStriped\n )\"\n colspan=\"100%\"\n role=\"cell\">\n <div :class=\"$style.tableBarContent\">\n <slot/>\n </div>\n </td>\n </tr>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { useTableInjection } from '$flux/composable';\n import { clsx } from 'clsx';\n import $style from '$flux/css/component/Table.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const {\n isBordered,\n isHoverable,\n isSeparated,\n isStriped\n } = useTableInjection();\n</script>\n","<template>\n <tr :class=\"$style.tableRow\">\n <td\n :class=\"clsx(\n $style.tableBar,\n isBordered && $style.isBordered,\n isHoverable && $style.isHoverable,\n isSeparated && $style.isSeparated,\n isStriped && $style.isStriped\n )\"\n colspan=\"100%\"\n role=\"cell\">\n <div :class=\"$style.tableBarContent\">\n <slot/>\n </div>\n </td>\n </tr>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { useTableInjection } from '$flux/composable';\n import { clsx } from 'clsx';\n import $style from '$flux/css/component/Table.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const {\n isBordered,\n isHoverable,\n isSeparated,\n isStriped\n } = useTableInjection();\n</script>\n","<template>\n <th\n :class=\"clsx(\n $style.tableHeader,\n isBordered && $style.isBordered,\n isShrinking && $style.isShrinking,\n isSticky && $style.isSticky\n )\"\n scope=\"col\"\n :aria-sort=\"isSortable ? (sort ?? 'none') : undefined\"\n :style=\"{\n minWidth: `${minWidth}px`\n }\">\n <div :class=\"$style.tableHeaderContent\">\n <slot/>\n\n <FluxFlyout v-if=\"isSortable\">\n <template #opener=\"{open}\">\n <button\n :class=\"$style.tableSort\"\n :aria-label=\"translate('flux.sort')\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"open\">\n <FluxIcon\n :size=\"16\"\n :name=\"sortingIcon\"/>\n </button>\n </template>\n\n <FluxMenu>\n <FluxMenuGroup>\n <FluxMenuItem\n :is-highlighted=\"sort === 'ascending'\"\n icon-leading=\"arrow-down-a-z\"\n :label=\"translate('flux.sortAscending')\"\n @click=\"$emit('sort', 'ascending')\"/>\n\n <FluxMenuItem\n :is-highlighted=\"sort === 'descending'\"\n icon-leading=\"arrow-up-a-z\"\n :label=\"translate('flux.sortDescending')\"\n @click=\"$emit('sort', 'descending')\"/>\n </FluxMenuGroup>\n\n <template v-if=\"sort\">\n <FluxSeparator/>\n\n <FluxMenuGroup>\n <FluxMenuItem\n icon-leading=\"circle-xmark\"\n is-destructive\n :label=\"translate('flux.sortRemove')\"\n @click=\"$emit('sort', null)\"/>\n </FluxMenuGroup>\n </template>\n </FluxMenu>\n </FluxFlyout>\n </div>\n </th>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, type VNode } from 'vue';\n import { useTableInjection } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxMenu from './FluxMenu.vue';\n import FluxMenuGroup from './FluxMenuGroup.vue';\n import FluxMenuItem from './FluxMenuItem.vue';\n import FluxSeparator from './FluxSeparator.vue';\n import $style from '$flux/css/component/Table.module.scss';\n\n defineEmits<{\n sort: ['ascending' | 'descending' | null];\n }>();\n\n const {\n minWidth = 0,\n sort\n } = defineProps<{\n readonly isShrinking?: boolean;\n readonly isSortable?: boolean;\n readonly isSticky?: boolean;\n readonly minWidth?: number;\n readonly sort?: 'ascending' | 'descending';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const {isBordered} = useTableInjection();\n const translate = useTranslate();\n\n const sortingIcon = computed((): FluxIconName => {\n switch (sort) {\n case 'ascending':\n return 'arrow-down-a-z';\n\n case 'descending':\n return 'arrow-up-a-z';\n\n default:\n return 'arrow-up-arrow-down';\n }\n });\n</script>\n","<template>\n <th\n :class=\"clsx(\n $style.tableHeader,\n isBordered && $style.isBordered,\n isShrinking && $style.isShrinking,\n isSticky && $style.isSticky\n )\"\n scope=\"col\"\n :aria-sort=\"isSortable ? (sort ?? 'none') : undefined\"\n :style=\"{\n minWidth: `${minWidth}px`\n }\">\n <div :class=\"$style.tableHeaderContent\">\n <slot/>\n\n <FluxFlyout v-if=\"isSortable\">\n <template #opener=\"{open}\">\n <button\n :class=\"$style.tableSort\"\n :aria-label=\"translate('flux.sort')\"\n tabindex=\"-1\"\n type=\"button\"\n @click=\"open\">\n <FluxIcon\n :size=\"16\"\n :name=\"sortingIcon\"/>\n </button>\n </template>\n\n <FluxMenu>\n <FluxMenuGroup>\n <FluxMenuItem\n :is-highlighted=\"sort === 'ascending'\"\n icon-leading=\"arrow-down-a-z\"\n :label=\"translate('flux.sortAscending')\"\n @click=\"$emit('sort', 'ascending')\"/>\n\n <FluxMenuItem\n :is-highlighted=\"sort === 'descending'\"\n icon-leading=\"arrow-up-a-z\"\n :label=\"translate('flux.sortDescending')\"\n @click=\"$emit('sort', 'descending')\"/>\n </FluxMenuGroup>\n\n <template v-if=\"sort\">\n <FluxSeparator/>\n\n <FluxMenuGroup>\n <FluxMenuItem\n icon-leading=\"circle-xmark\"\n is-destructive\n :label=\"translate('flux.sortRemove')\"\n @click=\"$emit('sort', null)\"/>\n </FluxMenuGroup>\n </template>\n </FluxMenu>\n </FluxFlyout>\n </div>\n </th>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, type VNode } from 'vue';\n import { useTableInjection } from '$flux/composable';\n import { useTranslate } from '$flux/composable/private';\n import FluxFlyout from './FluxFlyout.vue';\n import FluxIcon from './FluxIcon.vue';\n import FluxMenu from './FluxMenu.vue';\n import FluxMenuGroup from './FluxMenuGroup.vue';\n import FluxMenuItem from './FluxMenuItem.vue';\n import FluxSeparator from './FluxSeparator.vue';\n import $style from '$flux/css/component/Table.module.scss';\n\n defineEmits<{\n sort: ['ascending' | 'descending' | null];\n }>();\n\n const {\n minWidth = 0,\n sort\n } = defineProps<{\n readonly isShrinking?: boolean;\n readonly isSortable?: boolean;\n readonly isSticky?: boolean;\n readonly minWidth?: number;\n readonly sort?: 'ascending' | 'descending';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n\n const {isBordered} = useTableInjection();\n const translate = useTranslate();\n\n const sortingIcon = computed((): FluxIconName => {\n switch (sort) {\n case 'ascending':\n return 'arrow-down-a-z';\n\n case 'descending':\n return 'arrow-up-a-z';\n\n default:\n return 'arrow-up-arrow-down';\n }\n });\n</script>\n","<template>\n <FluxStack\n direction=\"horizontal\"\n :gap=\"6\"\n is-wrapping>\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxStack\n direction=\"horizontal\"\n :gap=\"6\"\n is-wrapping>\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n",".timeline {\n display: flex;\n flex-flow: column;\n gap: 15px;\n}\n\n.timelineItem {\n position: relative;\n display: grid;\n gap: 21px;\n grid-template-columns: 42px minmax(0, 1fr);\n}\n\n.timelineItemIcon,\n.timelineItemPhoto {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius-full);\n outline: 6px solid var(--surface);\n}\n\n.timelineItemIcon {\n margin: 3px;\n height: 36px;\n width: 36px;\n}\n\n.timelineItemPhoto {\n height: 42px;\n width: 42px;\n}\n\n.timelineItemPhotoIcon {\n position: absolute;\n display: flex;\n right: -9px;\n bottom: -9px;\n height: 30px;\n width: 30px;\n align-items: center;\n justify-content: center;\n background: var(--gray-25);\n border-radius: var(--radius-full);\n}\n\n.timelineItemPhotoImage {\n position: absolute;\n inset: 0;\n height: 100%;\n width: 100%;\n border-radius: inherit;\n object-fit: cover;\n object-position: center;\n}\n\n.timelineItemBody {\n position: relative;\n display: flex;\n padding-top: 9px;\n padding-bottom: 9px;\n align-items: flex-start;\n align-self: center;\n flex-flow: column;\n gap: 15px;\n}\n\n.timelineItemHeader {\n display: flex;\n margin-bottom: -9px;\n flex-flow: column;\n\n :is(strong) {\n color: var(--foreground-prominent);\n }\n\n :is(span) {\n color: var(--foreground-secondary);\n font-size: 14px;\n }\n}\n\n.timelineItemLine {\n position: absolute;\n top: 20px;\n left: 20px;\n height: 100%;\n width: 2px;\n background: var(--gray-100);\n}\n\n.timeline .timelineItem:last-of-type .timelineItemLine {\n display: none;\n}\n\n.timelineItemGray {\n composes: timelineItem;\n\n .timelineItemIcon,\n .timelineItemPhotoIcon {\n color: var(--foreground-prominent);\n }\n\n .timelineItemIcon {\n background: var(--gray-100);\n }\n}\n\n.timelineItemPrimary {\n composes: timelineItem;\n\n .timelineItemIcon,\n .timelineItemPhotoIcon {\n color: var(--primary-600);\n }\n\n .timelineItemIcon {\n background: var(--primary-100);\n }\n}\n\n.timelineItemDanger {\n composes: timelineItem;\n\n .timelineItemIcon,\n .timelineItemPhotoIcon {\n color: var(--danger-600);\n }\n\n .timelineItemIcon {\n background: var(--danger-100);\n }\n}\n\n.timelineItemInfo {\n composes: timelineItem;\n\n .timelineItemIcon,\n .timelineItemPhotoIcon {\n color: var(--info-600);\n }\n\n .timelineItemIcon {\n background: var(--info-100);\n }\n}\n\n.timelineItemSuccess {\n composes: timelineItem;\n\n .timelineItemIcon,\n .timelineItemPhotoIcon {\n color: var(--success-600);\n }\n\n .timelineItemIcon {\n background: var(--success-100);\n }\n}\n\n.timelineItemWarning {\n composes: timelineItem;\n\n .timelineItemIcon,\n .timelineItemPhotoIcon {\n color: var(--warning-600);\n }\n\n .timelineItemIcon {\n background: var(--warning-100);\n }\n}\n","<template>\n <div\n :class=\"$style.timeline\"\n role=\"feed\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Timeline.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"$style.timeline\"\n role=\"feed\">\n <slot/>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import $style from '$flux/css/component/Timeline.module.scss';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"clsx(\n color === 'gray' && $style.timelineItemGray,\n color === 'primary' && $style.timelineItemPrimary,\n color === 'danger' && $style.timelineItemDanger,\n color === 'info' && $style.timelineItemInfo,\n color === 'success' && $style.timelineItemSuccess,\n color === 'warning' && $style.timelineItemWarning\n )\"\n role=\"article\">\n <div :class=\"$style.timelineItemLine\"/>\n\n <div\n v-if=\"photo\"\n :class=\"$style.timelineItemPhoto\">\n <img\n :class=\"$style.timelineItemPhotoImage\"\n :src=\"photo\"\n alt=\"\">\n\n <div\n v-if=\"icon\"\n :class=\"$style.timelineItemPhotoIcon\">\n <FluxIcon\n :name=\"icon\"\n :size=\"16\"/>\n </div>\n </div>\n\n <div\n v-else-if=\"icon\"\n :class=\"$style.timelineItemIcon\">\n <FluxIcon\n :name=\"icon\"\n :size=\"20\"/>\n </div>\n\n <div :class=\"$style.timelineItemBody\">\n <div\n v-if=\"title || when\"\n :class=\"$style.timelineItemHeader\">\n <strong v-if=\"title\">{{ title }}</strong>\n <span v-if=\"when\">{{ when }}</span>\n </div>\n\n <slot/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxColor, FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Timeline.module.scss';\n\n const {\n color = 'gray'\n } = defineProps<{\n readonly color?: FluxColor;\n readonly icon?: FluxIconName;\n readonly photo?: string;\n readonly title?: string;\n readonly when?: string;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <div\n :class=\"clsx(\n color === 'gray' && $style.timelineItemGray,\n color === 'primary' && $style.timelineItemPrimary,\n color === 'danger' && $style.timelineItemDanger,\n color === 'info' && $style.timelineItemInfo,\n color === 'success' && $style.timelineItemSuccess,\n color === 'warning' && $style.timelineItemWarning\n )\"\n role=\"article\">\n <div :class=\"$style.timelineItemLine\"/>\n\n <div\n v-if=\"photo\"\n :class=\"$style.timelineItemPhoto\">\n <img\n :class=\"$style.timelineItemPhotoImage\"\n :src=\"photo\"\n alt=\"\">\n\n <div\n v-if=\"icon\"\n :class=\"$style.timelineItemPhotoIcon\">\n <FluxIcon\n :name=\"icon\"\n :size=\"16\"/>\n </div>\n </div>\n\n <div\n v-else-if=\"icon\"\n :class=\"$style.timelineItemIcon\">\n <FluxIcon\n :name=\"icon\"\n :size=\"20\"/>\n </div>\n\n <div :class=\"$style.timelineItemBody\">\n <div\n v-if=\"title || when\"\n :class=\"$style.timelineItemHeader\">\n <strong v-if=\"title\">{{ title }}</strong>\n <span v-if=\"when\">{{ when }}</span>\n </div>\n\n <slot/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import type { FluxColor, FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Timeline.module.scss';\n\n const {\n color = 'gray'\n } = defineProps<{\n readonly color?: FluxColor;\n readonly icon?: FluxIconName;\n readonly photo?: string;\n readonly title?: string;\n readonly when?: string;\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <label\n :class=\"clsx(\n $style.toggle,\n modelValue && $style.isChecked,\n disabled && $style.isDisabled,\n isReadonly && $style.isReadonly,\n error && $style.isInvalid,\n isSwitch && $style.isSwitch\n )\"\n :for=\"id\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"isReadonly ? true : undefined\"\n :aria-invalid=\"error ? true : undefined\">\n <FluxIcon\n v-if=\"iconOff\"\n :class=\"$style.toggleIconOff\"\n :name=\"iconOff\"\n :size=\"14\"/>\n\n <FluxIcon\n v-if=\"iconOn\"\n :class=\"$style.toggleIconOn\"\n :name=\"iconOn\"\n :size=\"14\"/>\n\n <input\n :class=\"$style.toggleInput\"\n :id=\"id\"\n :disabled=\"disabled\"\n type=\"checkbox\"\n :checked=\"modelValue\"\n role=\"switch\"\n :aria-checked=\"modelValue\"\n @click=\"onClick\"\n @input=\"toggle\"/>\n </label>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormInputBaseProps, FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { toRef } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<boolean>({\n default: false\n });\n\n const {\n disabled: componentDisabled,\n isReadonly\n } = defineProps<Pick<FluxFormInputBaseProps, 'disabled' | 'error' | 'isReadonly'> & {\n readonly iconOff?: FluxIconName;\n readonly iconOn?: FluxIconName;\n readonly isSwitch?: boolean;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n\n function onClick(evt: MouseEvent): void {\n if (isReadonly) {\n evt.preventDefault();\n }\n }\n\n function toggle(evt: Event): void {\n if (isReadonly) {\n return;\n }\n\n modelValue.value = (evt.target as HTMLInputElement).checked;\n }\n</script>\n","<template>\n <label\n :class=\"clsx(\n $style.toggle,\n modelValue && $style.isChecked,\n disabled && $style.isDisabled,\n isReadonly && $style.isReadonly,\n error && $style.isInvalid,\n isSwitch && $style.isSwitch\n )\"\n :for=\"id\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"isReadonly ? true : undefined\"\n :aria-invalid=\"error ? true : undefined\">\n <FluxIcon\n v-if=\"iconOff\"\n :class=\"$style.toggleIconOff\"\n :name=\"iconOff\"\n :size=\"14\"/>\n\n <FluxIcon\n v-if=\"iconOn\"\n :class=\"$style.toggleIconOn\"\n :name=\"iconOn\"\n :size=\"14\"/>\n\n <input\n :class=\"$style.toggleInput\"\n :id=\"id\"\n :disabled=\"disabled\"\n type=\"checkbox\"\n :checked=\"modelValue\"\n role=\"switch\"\n :aria-checked=\"modelValue\"\n @click=\"onClick\"\n @input=\"toggle\"/>\n </label>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxFormInputBaseProps, FluxIconName } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { toRef } from 'vue';\n import { useDisabled, useFormFieldInjection } from '$flux/composable';\n import FluxIcon from './FluxIcon.vue';\n import $style from '$flux/css/component/Form.module.scss';\n\n const modelValue = defineModel<boolean>({\n default: false\n });\n\n const {\n disabled: componentDisabled,\n isReadonly\n } = defineProps<Pick<FluxFormInputBaseProps, 'disabled' | 'error' | 'isReadonly'> & {\n readonly iconOff?: FluxIconName;\n readonly iconOn?: FluxIconName;\n readonly isSwitch?: boolean;\n }>();\n\n const disabled = useDisabled(toRef(() => componentDisabled));\n const {id} = useFormFieldInjection();\n\n function onClick(evt: MouseEvent): void {\n if (isReadonly) {\n evt.preventDefault();\n }\n }\n\n function toggle(evt: Event): void {\n if (isReadonly) {\n return;\n }\n\n modelValue.value = (evt.target as HTMLInputElement).checked;\n }\n</script>\n",".toolbar {\n padding: 6px;\n contain: paint;\n\n :local(.separatorVertical) {\n margin-top: 6px;\n margin-bottom: 6px;\n align-self: stretch;\n }\n}\n\n.toolbarFlat {\n composes: basePane from './base/Pane.module.scss';\n composes: toolbar;\n\n position: relative;\n align-self: flex-start;\n box-shadow: var(--shadow-sm);\n}\n\n.toolbarFloating {\n composes: basePane from './base/Pane.module.scss';\n composes: toolbar;\n\n position: absolute;\n box-shadow: var(--shadow-md);\n z-index: 1;\n\n &.isFree {\n translate: -50% -50%;\n }\n\n &.isTopEnd,\n &.isTopStart {\n top: 0;\n translate: 0 -50%;\n }\n\n &.isBottomEnd,\n &.isBottomStart {\n bottom: 0;\n translate: 0 50%;\n }\n\n &.isTopEnd,\n &.isBottomEnd {\n right: 18px;\n }\n\n &.isTopStart,\n &.isBottomStart {\n left: 18px;\n }\n}\n\n.basePaneStructure > .toolbarFlat {\n padding: 12px 15px;\n align-self: unset;\n background: var(--gray-50);\n border: 1px solid var(--surface-stroke);\n border-left: 0;\n border-right: 0;\n border-radius: 0;\n box-shadow: none;\n\n &:first-child {\n border-top: 0;\n border-top-left-radius: var(--radius);\n border-top-right-radius: var(--radius);\n }\n\n &:last-child {\n border-bottom: 0;\n border-bottom-left-radius: var(--radius);\n border-bottom-right-radius: var(--radius);\n }\n\n :local(.separator) {\n background: var(--surface-stroke);\n }\n}\n\n.paneHeader + .toolbarFlat {\n margin-top: 18px;\n}\n","<template>\n <FluxStack\n :class=\"clsx(\n !!floatingMode ? $style.toolbarFloating : $style.toolbarFlat,\n floatingMode === 'free' && $style.isFree,\n floatingMode === 'top-end' && $style.isTopEnd,\n floatingMode === 'top-start' && $style.isTopStart,\n floatingMode === 'bottom-end' && $style.isBottomEnd,\n floatingMode === 'bottom-start' && $style.isBottomStart,\n )\"\n direction=\"horizontal\"\n :gap=\"6\"\n tag=\"nav\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { clsx } from 'clsx';\n import FluxStack from './FluxStack.vue';\n import $style from '$flux/css/component/Toolbar.module.scss';\n\n defineProps<{\n readonly floatingMode?: 'free' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxStack\n :class=\"clsx(\n !!floatingMode ? $style.toolbarFloating : $style.toolbarFlat,\n floatingMode === 'free' && $style.isFree,\n floatingMode === 'top-end' && $style.isTopEnd,\n floatingMode === 'top-start' && $style.isTopStart,\n floatingMode === 'bottom-end' && $style.isBottomEnd,\n floatingMode === 'bottom-start' && $style.isBottomStart,\n )\"\n direction=\"horizontal\"\n :gap=\"6\"\n tag=\"nav\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import { clsx } from 'clsx';\n import FluxStack from './FluxStack.vue';\n import $style from '$flux/css/component/Toolbar.module.scss';\n\n defineProps<{\n readonly floatingMode?: 'free' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end';\n }>();\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxStack\n direction=\"horizontal\"\n :gap=\"3\"\n tag=\"nav\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","<template>\n <FluxStack\n direction=\"horizontal\"\n :gap=\"3\"\n tag=\"nav\">\n <slot/>\n </FluxStack>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { VNode } from 'vue';\n import FluxStack from './FluxStack.vue';\n\n defineSlots<{\n default(): VNode[];\n }>();\n</script>\n","@use '$flux/css/mixin';\n\n.treeView {\n display: flex;\n flex-flow: column;\n outline: 0;\n}\n\n.treeNode {\n composes: treeNode from './primitive/TreeNode.module.scss';\n\n cursor: pointer;\n\n @include mixin.hover {\n background: var(--surface-hover);\n }\n\n &.isHighlighted {\n background: var(--surface-hover);\n }\n}\n","<template>\n <div\n :class=\"$style.treeView\"\n role=\"tree\"\n tabindex=\"0\"\n @keydown=\"onKeyDown\">\n\n <div\n v-for=\"(node, nodeIndex) in visibleNodes\"\n ref=\"nodeElements\"\n :key=\"node.id\"\n :class=\"clsx(\n $style.treeNode,\n nodeIndex === highlightedIndex && $style.isHighlighted\n )\"\n role=\"treeitem\"\n tabindex=\"-1\"\n :aria-expanded=\"node.children?.length ? expandedIds.has(node.id) : undefined\"\n :aria-level=\"node.depth + 1\"\n @click=\"onNodeClick(node)\"\n @dblclick=\"onNodeDblClick(node)\">\n\n <TreeNodeRenderer\n :node=\"node\"\n :expanded=\"expandedIds.has(node.id)\"\n :level-colors=\"levelColors\"\n @expand-click=\"onExpandClick(node, $event)\"/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxColor, FluxTreeViewOption } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, ref, unref, useTemplateRef } from 'vue';\n import type { TreeFlatNode } from '$flux/composable/private';\n import { flattenVisible, useTreeView } from '$flux/composable/private';\n import TreeNodeRenderer from '$flux/component/primitive/TreeNodeRenderer.vue';\n import $style from '$flux/css/component/TreeView.module.scss';\n\n type FlatNode = TreeFlatNode<FluxTreeViewOption>;\n\n const emit = defineEmits<{\n click: [option: FluxTreeViewOption];\n dblclick: [option: FluxTreeViewOption];\n }>();\n\n const {\n levelColors,\n options\n } = defineProps<{\n readonly levelColors?: (FluxColor | string)[];\n readonly options: FluxTreeViewOption[];\n }>();\n\n const nodeElementRefs = useTemplateRef<HTMLDivElement[]>('nodeElements');\n\n const expandedIds = ref(new Set<string | number>());\n\n const visibleNodes = computed(() => flattenVisible(options, 0, unref(expandedIds)));\n\n const {highlightedIndex, toggleExpand, onExpandClick, onKeyNavigate} = useTreeView({\n expandedIds,\n nodeElementRefs,\n visibleNodes\n });\n\n function onNodeClick(node: FlatNode): void {\n const index = unref(visibleNodes).findIndex(n => n.id === node.id);\n highlightedIndex.value = index;\n\n const {depth: _depth, isLast: _isLast, lineGuides: _lineGuides, ...option} = node;\n emit('click', option as FluxTreeViewOption);\n }\n\n function onNodeDblClick(node: FlatNode): void {\n if (node.children?.length) {\n toggleExpand(node.id);\n }\n\n const {depth: _depth, isLast: _isLast, lineGuides: _lineGuides, ...option} = node;\n emit('dblclick', option as FluxTreeViewOption);\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n onKeyNavigate(evt, onNodeClick);\n }\n</script>\n","<template>\n <div\n :class=\"$style.treeView\"\n role=\"tree\"\n tabindex=\"0\"\n @keydown=\"onKeyDown\">\n\n <div\n v-for=\"(node, nodeIndex) in visibleNodes\"\n ref=\"nodeElements\"\n :key=\"node.id\"\n :class=\"clsx(\n $style.treeNode,\n nodeIndex === highlightedIndex && $style.isHighlighted\n )\"\n role=\"treeitem\"\n tabindex=\"-1\"\n :aria-expanded=\"node.children?.length ? expandedIds.has(node.id) : undefined\"\n :aria-level=\"node.depth + 1\"\n @click=\"onNodeClick(node)\"\n @dblclick=\"onNodeDblClick(node)\">\n\n <TreeNodeRenderer\n :node=\"node\"\n :expanded=\"expandedIds.has(node.id)\"\n :level-colors=\"levelColors\"\n @expand-click=\"onExpandClick(node, $event)\"/>\n </div>\n </div>\n</template>\n\n<script\n lang=\"ts\"\n setup>\n import type { FluxColor, FluxTreeViewOption } from '@flux-ui/types';\n import { clsx } from 'clsx';\n import { computed, ref, unref, useTemplateRef } from 'vue';\n import type { TreeFlatNode } from '$flux/composable/private';\n import { flattenVisible, useTreeView } from '$flux/composable/private';\n import TreeNodeRenderer from '$flux/component/primitive/TreeNodeRenderer.vue';\n import $style from '$flux/css/component/TreeView.module.scss';\n\n type FlatNode = TreeFlatNode<FluxTreeViewOption>;\n\n const emit = defineEmits<{\n click: [option: FluxTreeViewOption];\n dblclick: [option: FluxTreeViewOption];\n }>();\n\n const {\n levelColors,\n options\n } = defineProps<{\n readonly levelColors?: (FluxColor | string)[];\n readonly options: FluxTreeViewOption[];\n }>();\n\n const nodeElementRefs = useTemplateRef<HTMLDivElement[]>('nodeElements');\n\n const expandedIds = ref(new Set<string | number>());\n\n const visibleNodes = computed(() => flattenVisible(options, 0, unref(expandedIds)));\n\n const {highlightedIndex, toggleExpand, onExpandClick, onKeyNavigate} = useTreeView({\n expandedIds,\n nodeElementRefs,\n visibleNodes\n });\n\n function onNodeClick(node: FlatNode): void {\n const index = unref(visibleNodes).findIndex(n => n.id === node.id);\n highlightedIndex.value = index;\n\n const {depth: _depth, isLast: _isLast, lineGuides: _lineGuides, ...option} = node;\n emit('click', option as FluxTreeViewOption);\n }\n\n function onNodeDblClick(node: FlatNode): void {\n if (node.children?.length) {\n toggleExpand(node.id);\n }\n\n const {depth: _depth, isLast: _isLast, lineGuides: _lineGuides, ...option} = node;\n emit('dblclick', option as FluxTreeViewOption);\n }\n\n function onKeyDown(evt: KeyboardEvent): void {\n onKeyNavigate(evt, onNodeClick);\n }\n</script>\n"],"x_google_ignoreList":[0,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204],"mappings":"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AAA;IACV,WAAW,QAAA;IACX,aAAa,QAAA;IACb,OAAK,eAAA,EAAA,UAA0B,QAAA,MAAA,CAAA;IAG/B,iBAAe,MAAA,SAAQ,GAAA,OAAU,KAAA;IACjC,iBAAe,QAAA,cAAc,KAAA;IAC7B,gBAAc,QAAA,QAAK,OAAU,KAAA;IAC7B,QAAI,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,OAAA;IACV,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,QAAA;+CAvBH,WAAA,MAAU,CAAA,CAAA;;;;;;AEA3B,IAAa,aAAgC;CACzC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACH;AAED,IAAa,wBAAoD;CAC7D;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACH;;;;;;;;;;;;;;;;;;;;;EC7kBG,MAAM,aAAa,SAA0B,SAAA,aAE3C;EAMF,MAAM,WAAW,oBAAY,YAAY,QAAA,SAAkB,CAAC;EAC5D,MAAM,YAAY,sBAAc;EAEhC,MAAM,UAAU,eAAsC;AAClD,OAAI,IACA,QAAO,EAAE;GAGb,MAAM,SAAgD,EAAE;GACxD,MAAM,UA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"}
|